texlive[46290] Build/source/libs: icu-60.2
commits+karl at tug.org
commits+karl at tug.org
Fri Jan 12 19:35:35 CET 2018
Revision: 46290
http://tug.org/svn/texlive?view=revision&revision=46290
Author: karl
Date: 2018-01-12 19:35:28 +0100 (Fri, 12 Jan 2018)
Log Message:
-----------
icu-60.2
Modified Paths:
--------------
trunk/Build/source/libs/README
trunk/Build/source/libs/icu/ChangeLog
trunk/Build/source/libs/icu/TLpatches/TL-Changes
trunk/Build/source/libs/icu/TLpatches/patch-14-xopen
trunk/Build/source/libs/icu/TLpatches/patch-16-putil
trunk/Build/source/libs/icu/TLpatches/patch-17-cygwin-no-w32api
trunk/Build/source/libs/icu/TLpatches/patch-19-netbsd
trunk/Build/source/libs/icu/configure
trunk/Build/source/libs/icu/icu-src/APIChangeReport.html
trunk/Build/source/libs/icu/icu-src/LICENSE
trunk/Build/source/libs/icu/icu-src/license.html
trunk/Build/source/libs/icu/icu-src/readme.html
trunk/Build/source/libs/icu/icu-src/source/Doxyfile.in
trunk/Build/source/libs/icu/icu-src/source/Makefile.in
trunk/Build/source/libs/icu/icu-src/source/allinone/allinone.sln
trunk/Build/source/libs/icu/icu-src/source/allinone/icucheck.bat
trunk/Build/source/libs/icu/icu-src/source/common/Makefile.in
trunk/Build/source/libs/icu/icu-src/source/common/appendable.cpp
trunk/Build/source/libs/icu/icu-src/source/common/bmpset.cpp
trunk/Build/source/libs/icu/icu-src/source/common/bmpset.h
trunk/Build/source/libs/icu/icu-src/source/common/brkeng.cpp
trunk/Build/source/libs/icu/icu-src/source/common/brkeng.h
trunk/Build/source/libs/icu/icu-src/source/common/brkiter.cpp
trunk/Build/source/libs/icu/icu-src/source/common/bytestream.cpp
trunk/Build/source/libs/icu/icu-src/source/common/bytestrie.cpp
trunk/Build/source/libs/icu/icu-src/source/common/bytestriebuilder.cpp
trunk/Build/source/libs/icu/icu-src/source/common/bytestrieiterator.cpp
trunk/Build/source/libs/icu/icu-src/source/common/caniter.cpp
trunk/Build/source/libs/icu/icu-src/source/common/chariter.cpp
trunk/Build/source/libs/icu/icu-src/source/common/charstr.cpp
trunk/Build/source/libs/icu/icu-src/source/common/charstr.h
trunk/Build/source/libs/icu/icu-src/source/common/cmemory.h
trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj
trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters
trunk/Build/source/libs/icu/icu-src/source/common/cpputils.h
trunk/Build/source/libs/icu/icu-src/source/common/cstr.cpp
trunk/Build/source/libs/icu/icu-src/source/common/cstr.h
trunk/Build/source/libs/icu/icu-src/source/common/cstring.h
trunk/Build/source/libs/icu/icu-src/source/common/cwchar.h
trunk/Build/source/libs/icu/icu-src/source/common/dictbe.cpp
trunk/Build/source/libs/icu/icu-src/source/common/dictbe.h
trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.cpp
trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.h
trunk/Build/source/libs/icu/icu-src/source/common/dtintrv.cpp
trunk/Build/source/libs/icu/icu-src/source/common/errorcode.cpp
trunk/Build/source/libs/icu/icu-src/source/common/filteredbrk.cpp
trunk/Build/source/libs/icu/icu-src/source/common/filterednormalizer2.cpp
trunk/Build/source/libs/icu/icu-src/source/common/hash.h
trunk/Build/source/libs/icu/icu-src/source/common/icuplug.cpp
trunk/Build/source/libs/icu/icu-src/source/common/icuplugimp.h
trunk/Build/source/libs/icu/icu-src/source/common/listformatter.cpp
trunk/Build/source/libs/icu/icu-src/source/common/loadednormalizer2impl.cpp
trunk/Build/source/libs/icu/icu-src/source/common/localsvc.h
trunk/Build/source/libs/icu/icu-src/source/common/locavailable.cpp
trunk/Build/source/libs/icu/icu-src/source/common/locbased.cpp
trunk/Build/source/libs/icu/icu-src/source/common/locbased.h
trunk/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp
trunk/Build/source/libs/icu/icu-src/source/common/locdspnm.cpp
trunk/Build/source/libs/icu/icu-src/source/common/locid.cpp
trunk/Build/source/libs/icu/icu-src/source/common/loclikely.cpp
trunk/Build/source/libs/icu/icu-src/source/common/locmap.h
trunk/Build/source/libs/icu/icu-src/source/common/locresdata.cpp
trunk/Build/source/libs/icu/icu-src/source/common/locutil.cpp
trunk/Build/source/libs/icu/icu-src/source/common/locutil.h
trunk/Build/source/libs/icu/icu-src/source/common/messageimpl.h
trunk/Build/source/libs/icu/icu-src/source/common/messagepattern.cpp
trunk/Build/source/libs/icu/icu-src/source/common/msvcres.h
trunk/Build/source/libs/icu/icu-src/source/common/mutex.h
trunk/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h
trunk/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h
trunk/Build/source/libs/icu/icu-src/source/common/normalizer2.cpp
trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp
trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h
trunk/Build/source/libs/icu/icu-src/source/common/normlzr.cpp
trunk/Build/source/libs/icu/icu-src/source/common/parsepos.cpp
trunk/Build/source/libs/icu/icu-src/source/common/patternprops.cpp
trunk/Build/source/libs/icu/icu-src/source/common/patternprops.h
trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.cpp
trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.h
trunk/Build/source/libs/icu/icu-src/source/common/propname.cpp
trunk/Build/source/libs/icu/icu-src/source/common/propname.h
trunk/Build/source/libs/icu/icu-src/source/common/propname_data.h
trunk/Build/source/libs/icu/icu-src/source/common/propsvec.h
trunk/Build/source/libs/icu/icu-src/source/common/punycode.cpp
trunk/Build/source/libs/icu/icu-src/source/common/punycode.h
trunk/Build/source/libs/icu/icu-src/source/common/putil.cpp
trunk/Build/source/libs/icu/icu-src/source/common/putilimp.h
trunk/Build/source/libs/icu/icu-src/source/common/rbbi.cpp
trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp
trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.h
trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.cpp
trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.h
trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.cpp
trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.h
trunk/Build/source/libs/icu/icu-src/source/common/rbbirpt.h
trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp
trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.h
trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.cpp
trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.h
trunk/Build/source/libs/icu/icu-src/source/common/rbbistbl.cpp
trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp
trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.h
trunk/Build/source/libs/icu/icu-src/source/common/resbund.cpp
trunk/Build/source/libs/icu/icu-src/source/common/resbund_cnv.cpp
trunk/Build/source/libs/icu/icu-src/source/common/resource.cpp
trunk/Build/source/libs/icu/icu-src/source/common/resource.h
trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.h
trunk/Build/source/libs/icu/icu-src/source/common/schriter.cpp
trunk/Build/source/libs/icu/icu-src/source/common/serv.cpp
trunk/Build/source/libs/icu/icu-src/source/common/serv.h
trunk/Build/source/libs/icu/icu-src/source/common/servlk.cpp
trunk/Build/source/libs/icu/icu-src/source/common/servlkf.cpp
trunk/Build/source/libs/icu/icu-src/source/common/servloc.h
trunk/Build/source/libs/icu/icu-src/source/common/servls.cpp
trunk/Build/source/libs/icu/icu-src/source/common/servnotf.cpp
trunk/Build/source/libs/icu/icu-src/source/common/servnotf.h
trunk/Build/source/libs/icu/icu-src/source/common/servrbf.cpp
trunk/Build/source/libs/icu/icu-src/source/common/servslkf.cpp
trunk/Build/source/libs/icu/icu-src/source/common/sharedobject.cpp
trunk/Build/source/libs/icu/icu-src/source/common/sharedobject.h
trunk/Build/source/libs/icu/icu-src/source/common/simpleformatter.cpp
trunk/Build/source/libs/icu/icu-src/source/common/sprpimpl.h
trunk/Build/source/libs/icu/icu-src/source/common/stringpiece.cpp
trunk/Build/source/libs/icu/icu-src/source/common/stringtriebuilder.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uarrsort.h
trunk/Build/source/libs/icu/icu-src/source/common/uassert.h
trunk/Build/source/libs/icu/icu-src/source/common/ubidi_props.h
trunk/Build/source/libs/icu/icu-src/source/common/ubidi_props_data.h
trunk/Build/source/libs/icu/icu-src/source/common/ubidiimp.h
trunk/Build/source/libs/icu/icu-src/source/common/ubrk.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ubrkimpl.h
trunk/Build/source/libs/icu/icu-src/source/common/ucase.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucase.h
trunk/Build/source/libs/icu/icu-src/source/common/ucase_props_data.h
trunk/Build/source/libs/icu/icu-src/source/common/ucasemap.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucasemap_titlecase_brkiter.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uchar_props_data.h
trunk/Build/source/libs/icu/icu-src/source/common/ucharstrie.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucharstriebuilder.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucharstrieiterator.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uchriter.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucln.h
trunk/Build/source/libs/icu/icu-src/source/common/ucln_cmn.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucln_cmn.h
trunk/Build/source/libs/icu/icu-src/source/common/ucln_imp.h
trunk/Build/source/libs/icu/icu-src/source/common/ucmndata.h
trunk/Build/source/libs/icu/icu-src/source/common/ucnv2022.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_bld.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_bld.h
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_cnv.h
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_ext.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_ext.h
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_imp.h
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_io.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_io.h
trunk/Build/source/libs/icu/icu-src/source/common/ucnvbocu.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnvmbcs.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnvmbcs.h
trunk/Build/source/libs/icu/icu-src/source/common/ucnvsel.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucol_data.h
trunk/Build/source/libs/icu/icu-src/source/common/ucol_swp.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucol_swp.h
trunk/Build/source/libs/icu/icu-src/source/common/ucurr.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucurrimp.h
trunk/Build/source/libs/icu/icu-src/source/common/udata.cpp
trunk/Build/source/libs/icu/icu-src/source/common/udatamem.h
trunk/Build/source/libs/icu/icu-src/source/common/udataswp.h
trunk/Build/source/libs/icu/icu-src/source/common/uelement.h
trunk/Build/source/libs/icu/icu-src/source/common/uenumimp.h
trunk/Build/source/libs/icu/icu-src/source/common/uhash.h
trunk/Build/source/libs/icu/icu-src/source/common/uhash_us.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uidna.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uinit.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uinvchar.h
trunk/Build/source/libs/icu/icu-src/source/common/uiter.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ulist.h
trunk/Build/source/libs/icu/icu-src/source/common/ulistformatter.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uloc.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uloc_keytype.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ulocimp.h
trunk/Build/source/libs/icu/icu-src/source/common/umapfile.h
trunk/Build/source/libs/icu/icu-src/source/common/umutex.cpp
trunk/Build/source/libs/icu/icu-src/source/common/umutex.h
trunk/Build/source/libs/icu/icu-src/source/common/unames.cpp
trunk/Build/source/libs/icu/icu-src/source/common/unicode/appendable.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/brkiter.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/bytestream.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/bytestrie.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/bytestriebuilder.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/caniter.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/chariter.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/dbbi.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/docmain.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/dtintrv.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/enumset.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/errorcode.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/filteredbrk.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/icudataver.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/icuplug.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/idna.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/listformatter.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/localpointer.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/locdspnm.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/locid.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/messagepattern.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/normalizer2.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/normlzr.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/parseerr.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/parsepos.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/platform.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/ptypes.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/putil.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/rbbi.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/rep.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/resbund.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/schriter.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/simpleformatter.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/std_string.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/strenum.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/stringpiece.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/stringtriebuilder.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/symtable.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/ubidi.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/ubiditransform.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/ubrk.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucasemap.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucat.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/uchar.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucharstrie.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucharstriebuilder.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/uchriter.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/uclean.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucnv.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucnv_cb.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucnv_err.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucnvsel.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/uconfig.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucurr.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/udata.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/udisplaycontext.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/uenum.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/uidna.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/uiter.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/uldnames.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/ulistformatter.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/uloc.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/umachine.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/umisc.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/unifilt.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/unifunct.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/unimatch.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/uniset.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/unistr.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/unorm.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/unorm2.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/uobject.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/urename.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/urep.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/ures.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/uscript.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/uset.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/usetiter.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/ushape.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/usprep.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/ustring.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/ustringtrie.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/utext.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/utf.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/utf16.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/utf32.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/utf8.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/utf_old.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/utrace.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/utypes.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/uvernum.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/uversion.h
trunk/Build/source/libs/icu/icu-src/source/common/unifiedcache.cpp
trunk/Build/source/libs/icu/icu-src/source/common/unifiedcache.h
trunk/Build/source/libs/icu/icu-src/source/common/unifilt.cpp
trunk/Build/source/libs/icu/icu-src/source/common/unifunct.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uniset.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uniset_closure.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uniset_props.cpp
trunk/Build/source/libs/icu/icu-src/source/common/unisetspan.cpp
trunk/Build/source/libs/icu/icu-src/source/common/unisetspan.h
trunk/Build/source/libs/icu/icu-src/source/common/unistr.cpp
trunk/Build/source/libs/icu/icu-src/source/common/unistr_case.cpp
trunk/Build/source/libs/icu/icu-src/source/common/unistr_case_locale.cpp
trunk/Build/source/libs/icu/icu-src/source/common/unistr_cnv.cpp
trunk/Build/source/libs/icu/icu-src/source/common/unistr_props.cpp
trunk/Build/source/libs/icu/icu-src/source/common/unistr_titlecase_brkiter.cpp
trunk/Build/source/libs/icu/icu-src/source/common/unistrappender.h
trunk/Build/source/libs/icu/icu-src/source/common/unorm.cpp
trunk/Build/source/libs/icu/icu-src/source/common/unormcmp.cpp
trunk/Build/source/libs/icu/icu-src/source/common/unormimp.h
trunk/Build/source/libs/icu/icu-src/source/common/uobject.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uposixdefs.h
trunk/Build/source/libs/icu/icu-src/source/common/uprops.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uprops.h
trunk/Build/source/libs/icu/icu-src/source/common/uresbund.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uresdata.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uresdata.h
trunk/Build/source/libs/icu/icu-src/source/common/uresimp.h
trunk/Build/source/libs/icu/icu-src/source/common/ureslocs.h
trunk/Build/source/libs/icu/icu-src/source/common/usc_impl.h
trunk/Build/source/libs/icu/icu-src/source/common/uscript_props.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uset.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uset_imp.h
trunk/Build/source/libs/icu/icu-src/source/common/uset_props.cpp
trunk/Build/source/libs/icu/icu-src/source/common/usetiter.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ushape.cpp
trunk/Build/source/libs/icu/icu-src/source/common/usprep.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ustack.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ustr_cnv.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ustr_cnv.h
trunk/Build/source/libs/icu/icu-src/source/common/ustr_imp.h
trunk/Build/source/libs/icu/icu-src/source/common/ustr_titlecase_brkiter.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ustr_wcs.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ustrcase.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ustrcase_locale.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ustrenum.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ustrenum.h
trunk/Build/source/libs/icu/icu-src/source/common/ustrfmt.h
trunk/Build/source/libs/icu/icu-src/source/common/ustring.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ustrtrns.cpp
trunk/Build/source/libs/icu/icu-src/source/common/utext.cpp
trunk/Build/source/libs/icu/icu-src/source/common/util.cpp
trunk/Build/source/libs/icu/icu-src/source/common/util.h
trunk/Build/source/libs/icu/icu-src/source/common/util_props.cpp
trunk/Build/source/libs/icu/icu-src/source/common/utracimp.h
trunk/Build/source/libs/icu/icu-src/source/common/utrie.cpp
trunk/Build/source/libs/icu/icu-src/source/common/utrie.h
trunk/Build/source/libs/icu/icu-src/source/common/utrie2.cpp
trunk/Build/source/libs/icu/icu-src/source/common/utrie2.h
trunk/Build/source/libs/icu/icu-src/source/common/utrie2_builder.cpp
trunk/Build/source/libs/icu/icu-src/source/common/utrie2_impl.h
trunk/Build/source/libs/icu/icu-src/source/common/uts46.cpp
trunk/Build/source/libs/icu/icu-src/source/common/utypeinfo.h
trunk/Build/source/libs/icu/icu-src/source/common/uvector.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uvector.h
trunk/Build/source/libs/icu/icu-src/source/common/uvectr32.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uvectr32.h
trunk/Build/source/libs/icu/icu-src/source/common/uvectr64.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uvectr64.h
trunk/Build/source/libs/icu/icu-src/source/common/wintz.h
trunk/Build/source/libs/icu/icu-src/source/config/dist.mk
trunk/Build/source/libs/icu/icu-src/source/config/make2sh.sed
trunk/Build/source/libs/icu/icu-src/source/config/mh-aix-va
trunk/Build/source/libs/icu/icu-src/source/config/mh-cygwin
trunk/Build/source/libs/icu/icu-src/source/config/mh-cygwin-msvc
trunk/Build/source/libs/icu/icu-src/source/config/mh-cygwin64
trunk/Build/source/libs/icu/icu-src/source/config/mh-mingw
trunk/Build/source/libs/icu/icu-src/source/config/mh-mingw64
trunk/Build/source/libs/icu/icu-src/source/config/mh-msys-msvc
trunk/Build/source/libs/icu/icu-src/source/config/mh-os390
trunk/Build/source/libs/icu/icu-src/source/config/mh-solaris
trunk/Build/source/libs/icu/icu-src/source/configure
trunk/Build/source/libs/icu/icu-src/source/configure.ac
trunk/Build/source/libs/icu/icu-src/source/data/build.xml
trunk/Build/source/libs/icu/icu-src/source/data/cldr-icu-readme.txt
trunk/Build/source/libs/icu/icu-src/source/data/icu-coll-deprecates.xml
trunk/Build/source/libs/icu/icu-src/source/data/icu-config.xml
trunk/Build/source/libs/icu/icu-src/source/data/icu-locale-deprecates.xml
trunk/Build/source/libs/icu/icu-src/source/data/icu-rbnf-deprecates.xml
trunk/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-implicithan.icu
trunk/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-unihan.icu
trunk/Build/source/libs/icu/icu-src/source/data/in/nfc.nrm
trunk/Build/source/libs/icu/icu-src/source/data/in/nfkc.nrm
trunk/Build/source/libs/icu/icu-src/source/data/in/nfkc_cf.nrm
trunk/Build/source/libs/icu/icu-src/source/data/in/pnames.icu
trunk/Build/source/libs/icu/icu-src/source/data/in/ubidi.icu
trunk/Build/source/libs/icu/icu-src/source/data/in/ucase.icu
trunk/Build/source/libs/icu/icu-src/source/data/in/unames.icu
trunk/Build/source/libs/icu/icu-src/source/data/in/uprops.icu
trunk/Build/source/libs/icu/icu-src/source/data/in/uts46.nrm
trunk/Build/source/libs/icu/icu-src/source/data/makedata.mak
trunk/Build/source/libs/icu/icu-src/source/data/makedata.vcxproj
trunk/Build/source/libs/icu/icu-src/source/data/unidata/CaseFolding.txt
trunk/Build/source/libs/icu/icu-src/source/data/unidata/DerivedCoreProperties.txt
trunk/Build/source/libs/icu/icu-src/source/data/unidata/DerivedNormalizationProps.txt
trunk/Build/source/libs/icu/icu-src/source/data/unidata/FractionalUCA.txt
trunk/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationCorrections.txt
trunk/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationTest.txt
trunk/Build/source/libs/icu/icu-src/source/data/unidata/SpecialCasing.txt
trunk/Build/source/libs/icu/icu-src/source/data/unidata/UCARules.txt
trunk/Build/source/libs/icu/icu-src/source/data/unidata/UnicodeData.txt
trunk/Build/source/libs/icu/icu-src/source/data/unidata/changes.txt
trunk/Build/source/libs/icu/icu-src/source/data/unidata/confusables.txt
trunk/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfc.txt
trunk/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc.txt
trunk/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc_cf.txt
trunk/Build/source/libs/icu/icu-src/source/data/unidata/norm2/uts46.txt
trunk/Build/source/libs/icu/icu-src/source/data/unidata/ppucd.txt
trunk/Build/source/libs/icu/icu-src/source/extra/scrptrun/scrptrun.cpp
trunk/Build/source/libs/icu/icu-src/source/extra/scrptrun/scrptrun.h
trunk/Build/source/libs/icu/icu-src/source/extra/scrptrun/srtest.cpp
trunk/Build/source/libs/icu/icu-src/source/extra/uconv/Makefile.in
trunk/Build/source/libs/icu/icu-src/source/extra/uconv/uconv.1.in
trunk/Build/source/libs/icu/icu-src/source/extra/uconv/uconv.cpp
trunk/Build/source/libs/icu/icu-src/source/extra/uconv/uconv.vcxproj
trunk/Build/source/libs/icu/icu-src/source/extra/uconv/unicode/uwmsg.h
trunk/Build/source/libs/icu/icu-src/source/extra/uconv/uwmsg.c
trunk/Build/source/libs/icu/icu-src/source/i18n/Makefile.in
trunk/Build/source/libs/icu/icu-src/source/i18n/affixpatternparser.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/affixpatternparser.h
trunk/Build/source/libs/icu/icu-src/source/i18n/alphaindex.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/anytrans.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/anytrans.h
trunk/Build/source/libs/icu/icu-src/source/i18n/astro.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/astro.h
trunk/Build/source/libs/icu/icu-src/source/i18n/basictz.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/bocsu.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/bocsu.h
trunk/Build/source/libs/icu/icu-src/source/i18n/brktrans.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/brktrans.h
trunk/Build/source/libs/icu/icu-src/source/i18n/buddhcal.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/buddhcal.h
trunk/Build/source/libs/icu/icu-src/source/i18n/calendar.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/casetrn.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/casetrn.h
trunk/Build/source/libs/icu/icu-src/source/i18n/cecal.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/cecal.h
trunk/Build/source/libs/icu/icu-src/source/i18n/chnsecal.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/chnsecal.h
trunk/Build/source/libs/icu/icu-src/source/i18n/choicfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/coleitr.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/coll.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collation.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collation.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collationbuilder.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collationbuilder.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collationcompare.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collationcompare.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collationdata.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collationdata.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collationdatabuilder.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collationdatabuilder.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collationdatareader.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collationdatareader.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collationdatawriter.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collationdatawriter.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collationfastlatin.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collationfastlatin.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collationfastlatinbuilder.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collationfastlatinbuilder.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collationfcd.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collationfcd.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collationiterator.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collationiterator.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collationkeys.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collationkeys.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collationroot.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collationroot.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collationrootelements.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collationrootelements.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collationruleparser.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collationruleparser.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collationsets.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collationsets.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collationsettings.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collationsettings.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collationtailoring.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collationtailoring.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collationweights.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/collationweights.h
trunk/Build/source/libs/icu/icu-src/source/i18n/collunsafe.h
trunk/Build/source/libs/icu/icu-src/source/i18n/compactdecimalformat.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/coptccal.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/coptccal.h
trunk/Build/source/libs/icu/icu-src/source/i18n/cpdtrans.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/cpdtrans.h
trunk/Build/source/libs/icu/icu-src/source/i18n/csdetect.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/csdetect.h
trunk/Build/source/libs/icu/icu-src/source/i18n/csmatch.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/csmatch.h
trunk/Build/source/libs/icu/icu-src/source/i18n/csr2022.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/csr2022.h
trunk/Build/source/libs/icu/icu-src/source/i18n/csrecog.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/csrecog.h
trunk/Build/source/libs/icu/icu-src/source/i18n/csrmbcs.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/csrmbcs.h
trunk/Build/source/libs/icu/icu-src/source/i18n/csrsbcs.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/csrsbcs.h
trunk/Build/source/libs/icu/icu-src/source/i18n/csrucode.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/csrucode.h
trunk/Build/source/libs/icu/icu-src/source/i18n/csrutf8.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/csrutf8.h
trunk/Build/source/libs/icu/icu-src/source/i18n/curramt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/currfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/currfmt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/currpinf.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/currunit.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/dangical.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/dangical.h
trunk/Build/source/libs/icu/icu-src/source/i18n/datefmt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/dayperiodrules.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/dayperiodrules.h
trunk/Build/source/libs/icu/icu-src/source/i18n/dcfmtimp.h
trunk/Build/source/libs/icu/icu-src/source/i18n/dcfmtsym.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/decContext.h
trunk/Build/source/libs/icu/icu-src/source/i18n/decNumber.h
trunk/Build/source/libs/icu/icu-src/source/i18n/decNumberLocal.h
trunk/Build/source/libs/icu/icu-src/source/i18n/decfmtst.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/decfmtst.h
trunk/Build/source/libs/icu/icu-src/source/i18n/decimalformatpattern.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/decimalformatpattern.h
trunk/Build/source/libs/icu/icu-src/source/i18n/decimalformatpatternimpl.h
trunk/Build/source/libs/icu/icu-src/source/i18n/decimfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/decimfmtimpl.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/decimfmtimpl.h
trunk/Build/source/libs/icu/icu-src/source/i18n/digitaffix.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/digitaffix.h
trunk/Build/source/libs/icu/icu-src/source/i18n/digitaffixesandpadding.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/digitaffixesandpadding.h
trunk/Build/source/libs/icu/icu-src/source/i18n/digitformatter.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/digitformatter.h
trunk/Build/source/libs/icu/icu-src/source/i18n/digitgrouping.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/digitgrouping.h
trunk/Build/source/libs/icu/icu-src/source/i18n/digitinterval.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/digitinterval.h
trunk/Build/source/libs/icu/icu-src/source/i18n/digitlst.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/digitlst.h
trunk/Build/source/libs/icu/icu-src/source/i18n/dt_impl.h
trunk/Build/source/libs/icu/icu-src/source/i18n/dtfmtsym.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/dtitv_impl.h
trunk/Build/source/libs/icu/icu-src/source/i18n/dtitvfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/dtitvinf.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/dtptngen.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/dtptngen_impl.h
trunk/Build/source/libs/icu/icu-src/source/i18n/dtrule.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/esctrn.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/esctrn.h
trunk/Build/source/libs/icu/icu-src/source/i18n/ethpccal.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/ethpccal.h
trunk/Build/source/libs/icu/icu-src/source/i18n/fmtable.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/fmtable_cnv.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/fmtableimp.h
trunk/Build/source/libs/icu/icu-src/source/i18n/format.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/fphdlimp.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/fphdlimp.h
trunk/Build/source/libs/icu/icu-src/source/i18n/fpositer.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/funcrepl.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/funcrepl.h
trunk/Build/source/libs/icu/icu-src/source/i18n/gender.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/gregocal.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/gregoimp.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/gregoimp.h
trunk/Build/source/libs/icu/icu-src/source/i18n/hebrwcal.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/hebrwcal.h
trunk/Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj
trunk/Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj.filters
trunk/Build/source/libs/icu/icu-src/source/i18n/indiancal.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/indiancal.h
trunk/Build/source/libs/icu/icu-src/source/i18n/inputext.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/inputext.h
trunk/Build/source/libs/icu/icu-src/source/i18n/islamcal.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/islamcal.h
trunk/Build/source/libs/icu/icu-src/source/i18n/japancal.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/japancal.h
trunk/Build/source/libs/icu/icu-src/source/i18n/measfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/measunit.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/measure.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/msgfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/msgfmt_impl.h
trunk/Build/source/libs/icu/icu-src/source/i18n/name2uni.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/name2uni.h
trunk/Build/source/libs/icu/icu-src/source/i18n/nfrlist.h
trunk/Build/source/libs/icu/icu-src/source/i18n/nfrs.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/nfrs.h
trunk/Build/source/libs/icu/icu-src/source/i18n/nfrule.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/nfrule.h
trunk/Build/source/libs/icu/icu-src/source/i18n/nfsubs.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/nfsubs.h
trunk/Build/source/libs/icu/icu-src/source/i18n/nortrans.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/nortrans.h
trunk/Build/source/libs/icu/icu-src/source/i18n/nultrans.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/nultrans.h
trunk/Build/source/libs/icu/icu-src/source/i18n/numfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/numsys.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/numsys_impl.h
trunk/Build/source/libs/icu/icu-src/source/i18n/olsontz.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/olsontz.h
trunk/Build/source/libs/icu/icu-src/source/i18n/persncal.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/persncal.h
trunk/Build/source/libs/icu/icu-src/source/i18n/pluralaffix.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/pluralaffix.h
trunk/Build/source/libs/icu/icu-src/source/i18n/plurfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/plurrule.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/plurrule_impl.h
trunk/Build/source/libs/icu/icu-src/source/i18n/precision.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/precision.h
trunk/Build/source/libs/icu/icu-src/source/i18n/quant.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/quant.h
trunk/Build/source/libs/icu/icu-src/source/i18n/quantityformatter.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/quantityformatter.h
trunk/Build/source/libs/icu/icu-src/source/i18n/rbnf.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/rbt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/rbt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_data.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_data.h
trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.h
trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_rule.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_rule.h
trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_set.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_set.h
trunk/Build/source/libs/icu/icu-src/source/i18n/rbtz.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/regexcmp.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/regexcmp.h
trunk/Build/source/libs/icu/icu-src/source/i18n/regexcst.h
trunk/Build/source/libs/icu/icu-src/source/i18n/regeximp.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/regeximp.h
trunk/Build/source/libs/icu/icu-src/source/i18n/regexst.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/regexst.h
trunk/Build/source/libs/icu/icu-src/source/i18n/regextxt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/regextxt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/region.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/region_impl.h
trunk/Build/source/libs/icu/icu-src/source/i18n/reldatefmt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/reldtfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/reldtfmt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/rematch.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/remtrans.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/remtrans.h
trunk/Build/source/libs/icu/icu-src/source/i18n/repattrn.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/rulebasedcollator.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/scientificnumberformatter.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/scriptset.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/scriptset.h
trunk/Build/source/libs/icu/icu-src/source/i18n/search.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/selfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/selfmtimpl.h
trunk/Build/source/libs/icu/icu-src/source/i18n/sharedbreakiterator.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/sharedbreakiterator.h
trunk/Build/source/libs/icu/icu-src/source/i18n/sharedcalendar.h
trunk/Build/source/libs/icu/icu-src/source/i18n/shareddateformatsymbols.h
trunk/Build/source/libs/icu/icu-src/source/i18n/sharednumberformat.h
trunk/Build/source/libs/icu/icu-src/source/i18n/sharedpluralrules.h
trunk/Build/source/libs/icu/icu-src/source/i18n/significantdigitinterval.h
trunk/Build/source/libs/icu/icu-src/source/i18n/simpletz.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/smallintformatter.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/smallintformatter.h
trunk/Build/source/libs/icu/icu-src/source/i18n/smpdtfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/smpdtfst.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/smpdtfst.h
trunk/Build/source/libs/icu/icu-src/source/i18n/sortkey.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/standardplural.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/standardplural.h
trunk/Build/source/libs/icu/icu-src/source/i18n/strmatch.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/strmatch.h
trunk/Build/source/libs/icu/icu-src/source/i18n/strrepl.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/strrepl.h
trunk/Build/source/libs/icu/icu-src/source/i18n/stsearch.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/taiwncal.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/taiwncal.h
trunk/Build/source/libs/icu/icu-src/source/i18n/timezone.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/titletrn.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/titletrn.h
trunk/Build/source/libs/icu/icu-src/source/i18n/tmunit.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/tmutamt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/tmutfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/tolowtrn.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/tolowtrn.h
trunk/Build/source/libs/icu/icu-src/source/i18n/toupptrn.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/toupptrn.h
trunk/Build/source/libs/icu/icu-src/source/i18n/translit.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/transreg.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/transreg.h
trunk/Build/source/libs/icu/icu-src/source/i18n/tridpars.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/tridpars.h
trunk/Build/source/libs/icu/icu-src/source/i18n/tzfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/tzgnames.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/tzgnames.h
trunk/Build/source/libs/icu/icu-src/source/i18n/tznames.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/tznames_impl.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/tznames_impl.h
trunk/Build/source/libs/icu/icu-src/source/i18n/tzrule.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/tztrans.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/ucal.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/ucln_in.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/ucln_in.h
trunk/Build/source/libs/icu/icu-src/source/i18n/ucol.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/ucol_imp.h
trunk/Build/source/libs/icu/icu-src/source/i18n/ucol_res.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/ucol_sit.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/ucoleitr.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/ucsdet.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/udat.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/udateintervalformat.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/udatpg.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/ufieldpositer.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/uitercollationiterator.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/uitercollationiterator.h
trunk/Build/source/libs/icu/icu-src/source/i18n/umsg.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/umsg_imp.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unesctrn.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/unesctrn.h
trunk/Build/source/libs/icu/icu-src/source/i18n/uni2name.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/uni2name.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/alphaindex.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/basictz.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/calendar.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/choicfmt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/coleitr.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/coll.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/compactdecimalformat.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/curramt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/currpinf.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/currunit.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/datefmt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/dcfmtsym.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/decimfmt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/dtfmtsym.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvfmt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvinf.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/dtptngen.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/dtrule.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/fieldpos.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/fmtable.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/format.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/fpositer.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/gender.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/gregocal.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/measfmt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/measunit.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/measure.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/msgfmt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/numfmt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/numsys.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/plurfmt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/plurrule.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/rbnf.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/rbtz.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/regex.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/region.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/reldatefmt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/scientificnumberformatter.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/search.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/selfmt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/simpletz.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/smpdtfmt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/sortkey.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/stsearch.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tblcoll.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/timezone.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tmunit.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tmutamt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tmutfmt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/translit.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tzfmt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tznames.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tzrule.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tztrans.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ucal.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ucol.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ucoleitr.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ucsdet.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/udat.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/udateintervalformat.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/udatpg.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ufieldpositer.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattable.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ugender.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ulocdata.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/umsg.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/unirepl.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/unum.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/unumsys.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/upluralrules.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/uregex.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/uregion.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ureldatefmt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/usearch.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/uspoof.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/utmscale.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/utrans.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/vtzone.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unum.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/unumsys.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/upluralrules.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/uregex.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/uregexc.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/uregion.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/usearch.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/uspoof.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/uspoof_build.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/uspoof_conf.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/uspoof_conf.h
trunk/Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.h
trunk/Build/source/libs/icu/icu-src/source/i18n/usrchimp.h
trunk/Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.h
trunk/Build/source/libs/icu/icu-src/source/i18n/utf8collationiterator.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/utf8collationiterator.h
trunk/Build/source/libs/icu/icu-src/source/i18n/utrans.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/valueformatter.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/valueformatter.h
trunk/Build/source/libs/icu/icu-src/source/i18n/visibledigits.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/visibledigits.h
trunk/Build/source/libs/icu/icu-src/source/i18n/vtzone.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/vzone.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/vzone.h
trunk/Build/source/libs/icu/icu-src/source/i18n/windtfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/windtfmt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/winnmfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/winnmfmt.h
trunk/Build/source/libs/icu/icu-src/source/i18n/wintzimpl.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/wintzimpl.h
trunk/Build/source/libs/icu/icu-src/source/i18n/zonemeta.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/zonemeta.h
trunk/Build/source/libs/icu/icu-src/source/i18n/zrule.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/zrule.h
trunk/Build/source/libs/icu/icu-src/source/i18n/ztrans.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/ztrans.h
trunk/Build/source/libs/icu/icu-src/source/icudefs.mk.in
trunk/Build/source/libs/icu/icu-src/source/io/Makefile.in
trunk/Build/source/libs/icu/icu-src/source/io/io.vcxproj
trunk/Build/source/libs/icu/icu-src/source/io/io.vcxproj.filters
trunk/Build/source/libs/icu/icu-src/source/io/locbund.cpp
trunk/Build/source/libs/icu/icu-src/source/io/locbund.h
trunk/Build/source/libs/icu/icu-src/source/io/ucln_io.cpp
trunk/Build/source/libs/icu/icu-src/source/io/ucln_io.h
trunk/Build/source/libs/icu/icu-src/source/io/ufile.h
trunk/Build/source/libs/icu/icu-src/source/io/ufmt_cmn.h
trunk/Build/source/libs/icu/icu-src/source/io/unicode/ustdio.h
trunk/Build/source/libs/icu/icu-src/source/io/unicode/ustream.h
trunk/Build/source/libs/icu/icu-src/source/io/uprintf.cpp
trunk/Build/source/libs/icu/icu-src/source/io/uprintf.h
trunk/Build/source/libs/icu/icu-src/source/io/uscanf.h
trunk/Build/source/libs/icu/icu-src/source/io/ustream.cpp
trunk/Build/source/libs/icu/icu-src/source/layoutex/LXUtilities.cpp
trunk/Build/source/libs/icu/icu-src/source/layoutex/LXUtilities.h
trunk/Build/source/libs/icu/icu-src/source/layoutex/ParagraphLayout.cpp
trunk/Build/source/libs/icu/icu-src/source/layoutex/RunArrays.cpp
trunk/Build/source/libs/icu/icu-src/source/layoutex/layout/ParagraphLayout.h
trunk/Build/source/libs/icu/icu-src/source/layoutex/layout/RunArrays.h
trunk/Build/source/libs/icu/icu-src/source/layoutex/layout/playout.h
trunk/Build/source/libs/icu/icu-src/source/layoutex/layout/plruns.h
trunk/Build/source/libs/icu/icu-src/source/layoutex/layoutex.vcxproj
trunk/Build/source/libs/icu/icu-src/source/layoutex/playout.cpp
trunk/Build/source/libs/icu/icu-src/source/layoutex/plruns.cpp
trunk/Build/source/libs/icu/icu-src/source/runConfigureICU
trunk/Build/source/libs/icu/icu-src/source/samples/break/break.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/break/break.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/break/ubreak.c
trunk/Build/source/libs/icu/icu-src/source/samples/cal/cal.c
trunk/Build/source/libs/icu/icu-src/source/samples/cal/cal.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/cal/uprint.c
trunk/Build/source/libs/icu/icu-src/source/samples/cal/uprint.h
trunk/Build/source/libs/icu/icu-src/source/samples/case/case.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/case/case.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/case/ucase.c
trunk/Build/source/libs/icu/icu-src/source/samples/citer/citer.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/citer/citer.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/coll/coll.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/coll/coll.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/csdet/csdet.c
trunk/Build/source/libs/icu/icu-src/source/samples/csdet/csdet.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/date/date.c
trunk/Build/source/libs/icu/icu-src/source/samples/date/date.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/date/uprint.c
trunk/Build/source/libs/icu/icu-src/source/samples/date/uprint.h
trunk/Build/source/libs/icu/icu-src/source/samples/datecal/cal.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/datecal/ccal.c
trunk/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_0.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_1.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_2.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_3.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/datefmt/datefmt.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/datefmt/main.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/datefmt/util.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/datefmt/util.h
trunk/Build/source/libs/icu/icu-src/source/samples/dtitvfmtsample/dtitvfmtsample.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/dtitvfmtsample/dtitvfmtsample.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/dtptngsample/dtptngsample.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/dtptngsample/dtptngsample.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/FontTableCache.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/FontTableCache.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontInstance.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontInstance.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontMap.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontMap.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/GDIGUISupport.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/GDIGUISupport.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/GUISupport.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontInstance.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontInstance.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontMap.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontMap.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/GnomeGUISupport.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/GnomeGUISupport.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/RenderingSurface.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/Surface.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/Surface.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/UnicodeReader.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/UnicodeReader.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/arraymem.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/cgnomelayout.c
trunk/Build/source/libs/icu/icu-src/source/samples/layout/clayout.c
trunk/Build/source/libs/icu/icu-src/source/samples/layout/cmaps.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/cmaps.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/gdiglue.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/gdiglue.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/gnomeglue.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/gnomeglue.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/gnomelayout.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/gsupport.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/layout.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/layout.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/layout/paragraph.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/paragraph.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/pflow.c
trunk/Build/source/libs/icu/icu-src/source/samples/layout/pflow.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/resource.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/rsurface.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/rsurface.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/sfnt.h
trunk/Build/source/libs/icu/icu-src/source/samples/layout/ucreader.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/layout/ucreader.h
trunk/Build/source/libs/icu/icu-src/source/samples/legacy/legacy.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/legacy/legacy.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/legacy/newcol.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/legacy/oldcol.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_0.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_1.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_2.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_3.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/msgfmt/main.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/msgfmt/msgfmt.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/msgfmt/util.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/msgfmt/util.h
trunk/Build/source/libs/icu/icu-src/source/samples/numfmt/capi.c
trunk/Build/source/libs/icu/icu-src/source/samples/numfmt/main.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/numfmt/numfmt.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/numfmt/util.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/numfmt/util.h
trunk/Build/source/libs/icu/icu-src/source/samples/plurfmtsample/plurfmtsample.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/plurfmtsample/plurfmtsample.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/props/props.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/props/props.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/strsrch/strsrch.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/strsrch/strsrch.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_1.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_2.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_3.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_4.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/translit/answers/unaccent.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/translit/answers/unaccent.h
trunk/Build/source/libs/icu/icu-src/source/samples/translit/main.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/translit/translit.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/translit/unaccent.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/translit/unaccent.h
trunk/Build/source/libs/icu/icu-src/source/samples/translit/util.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/translit/util.h
trunk/Build/source/libs/icu/icu-src/source/samples/uciter8/uciter8.c
trunk/Build/source/libs/icu/icu-src/source/samples/uciter8/uciter8.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/uciter8/uit_len8.c
trunk/Build/source/libs/icu/icu-src/source/samples/uciter8/uit_len8.h
trunk/Build/source/libs/icu/icu-src/source/samples/ucnv/convsamp.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/ucnv/flagcb.c
trunk/Build/source/libs/icu/icu-src/source/samples/ucnv/flagcb.h
trunk/Build/source/libs/icu/icu-src/source/samples/ucnv/ucnv.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/udata/reader.c
trunk/Build/source/libs/icu/icu-src/source/samples/udata/reader.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/udata/writer.c
trunk/Build/source/libs/icu/icu-src/source/samples/udata/writer.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/ufortune/ufortune.c
trunk/Build/source/libs/icu/icu-src/source/samples/ufortune/ufortune.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/ugrep/ugrep.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/ugrep/ugrep.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/uresb/Makefile
trunk/Build/source/libs/icu/icu-src/source/samples/uresb/uresb.c
trunk/Build/source/libs/icu/icu-src/source/samples/uresb/uresb.vcxproj
trunk/Build/source/libs/icu/icu-src/source/samples/ustring/ustring.cpp
trunk/Build/source/libs/icu/icu-src/source/samples/ustring/ustring.vcxproj
trunk/Build/source/libs/icu/icu-src/source/stubdata/stubdata.vcxproj
trunk/Build/source/libs/icu/icu-src/source/stubdata/stubdata.vcxproj.filters
trunk/Build/source/libs/icu/icu-src/source/test/Makefile.in
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/bocu1tst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/callcoll.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/callcoll.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/calldata.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/calltest.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/capitst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/capitst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cbiapts.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cbiapts.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cbididat.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cbiditransformtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cbiditst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cbiditst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cbkittst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccaltst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccaltst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccapitst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccapitst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccolltst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccolltst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cconvtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cctest.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccurrtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccurrtst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdateintervalformattest.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdattst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdattst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdetst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdetst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdtdptst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdtdptst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdtrgtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdtrgtst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cestst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cestst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cfintst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cfintst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cformtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cformtst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cfrtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cfrtst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cg7coll.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cg7coll.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cgendtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/chashtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/citertst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/citertst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cjaptst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cjaptst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cldrtest.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cmsccoll.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cmsgtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cmsgtst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cnormtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cnormtst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cnumtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cnumtst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cpluralrulestest.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cposxtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/crelativedateformattest.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/crestst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/crestst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/creststn.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/creststn.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cstrcase.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cstrtest.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cturtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cturtst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cucdapi.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cucdapi.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cucdtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/currtest.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/custrtrn.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/custrtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cutiltst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/encoll.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/encoll.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/eurocreg.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/hpmufn.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/idnatest.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/nccbtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/nccbtst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ncnvfbts.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ncnvfbts.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ncnvtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/nfsprep.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/nfsprep.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/nucnvtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/nucnvtst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/putiltst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/reapits.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/sorttest.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/spooftest.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/spreptst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/sprpdata.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/stdnmtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/tracetst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/trie2test.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/trietest.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ucnvseltst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ucnvseltst.h
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ucsdetst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/udatatst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/udatpg_test.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/uenumtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ulistfmttest.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/uregiontest.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/usettest.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/usrchdat.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/usrchtst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/utexttst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/utf16tst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/utf8tst.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/utmstest.c
trunk/Build/source/libs/icu/icu-src/source/test/cintltst/utransts.c
trunk/Build/source/libs/icu/icu-src/source/test/compat/tzdate.c
trunk/Build/source/libs/icu/icu-src/source/test/depstest/dependencies.txt
trunk/Build/source/libs/icu/icu-src/source/test/hdrtst/Makefile.in
trunk/Build/source/libs/icu/icu-src/source/test/hdrtst/cxxfiles.txt
trunk/Build/source/libs/icu/icu-src/source/test/hdrtst/testinternalheaders.sh
trunk/Build/source/libs/icu/icu-src/source/test/intltest/Makefile.in
trunk/Build/source/libs/icu/icu-src/source/test/intltest/aliastst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/aliastst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/allcoll.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/allcoll.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/alphaindextst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/alphaindextst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/apicoll.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/apicoll.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/astrotst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/astrotst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/bidiconf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/bytestrietest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/calcasts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/calcasts.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/callimts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/callimts.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/calregts.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/caltest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/caltest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/caltestdata.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/caltztst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/caltztst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/canittst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/canittst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/citrtest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/citrtest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/collationtest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/colldata.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/colldata.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/compactdecimalformattest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/convtest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/convtest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/cpdtrtst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/cpdtrtst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/csdetest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/csdetest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/currcoll.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/currcoll.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dadrcal.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dadrcal.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dadrfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dadrfmt.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/datadrivennumberformattestsuite.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/datadrivennumberformattestsuite.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dcfmapts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dcfmapts.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dcfmtest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dcfmtest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/decoll.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/decoll.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmapts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmapts.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmtrtts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmtrtts.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/encoll.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/encoll.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/escoll.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/escoll.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/ficoll.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/ficoll.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/fldset.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/fldset.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/frcoll.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/frcoll.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/g7coll.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/g7coll.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/genderinfotest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/icusvtst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/icusvtst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/idnaconf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/idnaconf.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/idnaref.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/idnaref.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/intltest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj.filters
trunk/Build/source/libs/icu/icu-src/source/test/intltest/itercoll.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/itercoll.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/itformat.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/itformat.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/itmajor.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/itmajor.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbbi.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbbi.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfp.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfp.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfrt.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfrt.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/itspoof.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/itspoof.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/ittrans.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/ittrans.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/itutil.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/itutil.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/jacoll.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/jacoll.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/jamotest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/jamotest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/lcukocol.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/lcukocol.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/loctest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/loctest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/measfmttest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/miscdtfm.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/miscdtfm.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/mnkytst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/mnkytst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/msfmrgts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/msfmrgts.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/nmfmapts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/nmfmapts.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/nmfmtrt.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/nmfmtrt.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/normconf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/normconf.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/nptrans.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/nptrans.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/numberformat2test.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/numberformattesttuple.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/numberformattesttuple.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/numfmtspectest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/numrgts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/numrgts.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/pluralmaptest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/plurfmts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/plurfmts.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/plurults.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/plurults.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/pptest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/pptest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/punyref.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/quantityformattertest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/rbbimonkeytest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/rbbimonkeytest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/regcoll.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/regcoll.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/regextst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/regextst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/regiontst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/regiontst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/reldatefmttest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/reptest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/reptest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/restest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/restest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/scientificnumberformattertest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/sdtfmtts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/sdtfmtts.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/selfmts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/selfmts.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/sfwdchit.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/sfwdchit.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/simpleformattertest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/simplethread.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/simplethread.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/srchtest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/srchtest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/ssearch.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/ssearch.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/strcase.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/strtest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/strtest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/svccoll.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/svccoll.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tchcfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tchcfmt.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/testidn.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/testidna.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/testidna.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/testutil.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/testutil.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/textfile.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/textfile.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tfsmalls.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tfsmalls.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/thcoll.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/thcoll.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tmsgfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tmsgfmt.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tokiter.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tokiter.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/transapi.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/transapi.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/transrt.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/transrt.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/transtst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/transtst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/trcoll.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/trcoll.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/trnserr.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/trnserr.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tscoll.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tscoll.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsdate.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsdate.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsdtfmsy.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsdtfmsy.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsmthred.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsmthred.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsnmfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsnmfmt.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsputil.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsputil.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tstnrapi.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tufmtts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzbdtest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzbdtest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzfmttst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzfmttst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzoffloc.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzoffloc.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzregts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzregts.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzrulets.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzrulets.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tztest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/tztest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/ucaconf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/ucaconf.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/ucdtest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/ucdtest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/ucharstrietest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/unifiedcachetest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/usettest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/usettest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/uts46test.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/utxttest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/utxttest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/uvectest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/uvectest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/v32test.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/v32test.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/windttst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/windttst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/winnmtst.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/winnmtst.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/winutil.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/winutil.h
trunk/Build/source/libs/icu/icu-src/source/test/iotest/Makefile.in
trunk/Build/source/libs/icu/icu-src/source/test/iotest/filetst.c
trunk/Build/source/libs/icu/icu-src/source/test/iotest/iotest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/iotest/iotest.h
trunk/Build/source/libs/icu/icu-src/source/test/iotest/iotest.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/iotest/stream.cpp
trunk/Build/source/libs/icu/icu-src/source/test/iotest/strtst.c
trunk/Build/source/libs/icu/icu-src/source/test/iotest/trnstst.c
trunk/Build/source/libs/icu/icu-src/source/test/letest/FontObject.cpp
trunk/Build/source/libs/icu/icu-src/source/test/letest/FontObject.h
trunk/Build/source/libs/icu/icu-src/source/test/letest/FontTableCache.cpp
trunk/Build/source/libs/icu/icu-src/source/test/letest/FontTableCache.h
trunk/Build/source/libs/icu/icu-src/source/test/letest/PortableFontInstance.cpp
trunk/Build/source/libs/icu/icu-src/source/test/letest/PortableFontInstance.h
trunk/Build/source/libs/icu/icu-src/source/test/letest/SimpleFontInstance.cpp
trunk/Build/source/libs/icu/icu-src/source/test/letest/SimpleFontInstance.h
trunk/Build/source/libs/icu/icu-src/source/test/letest/cfonts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/letest/cfonts.h
trunk/Build/source/libs/icu/icu-src/source/test/letest/cletest.c
trunk/Build/source/libs/icu/icu-src/source/test/letest/cletest.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/letest/cmaps.cpp
trunk/Build/source/libs/icu/icu-src/source/test/letest/cmaps.h
trunk/Build/source/libs/icu/icu-src/source/test/letest/gendata.cpp
trunk/Build/source/libs/icu/icu-src/source/test/letest/gendata.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/letest/letest.cpp
trunk/Build/source/libs/icu/icu-src/source/test/letest/letest.h
trunk/Build/source/libs/icu/icu-src/source/test/letest/letest.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/letest/letsutil.cpp
trunk/Build/source/libs/icu/icu-src/source/test/letest/letsutil.h
trunk/Build/source/libs/icu/icu-src/source/test/letest/sfnt.h
trunk/Build/source/libs/icu/icu-src/source/test/letest/testdata.cpp
trunk/Build/source/libs/icu/icu-src/source/test/letest/xmlreader.cpp
trunk/Build/source/libs/icu/icu-src/source/test/letest/xmlreader.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/DateFmtPerf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/DateFmtPerf.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/DateFmtPerf.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/breakdata.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/collationdata.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/datedata.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/perf/collationperf/collperf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/collperf/collperf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/collperf/collperf.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/perf/collperf2/collperf2.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/collperf2/collperf2.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/perf/convperf/data.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/dicttrieperf/dicttrieperf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/Makefile.in
trunk/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/howExpensiveIs.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontObject.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontObject.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontTableCache.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontTableCache.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/PortableFontInstance.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/PortableFontInstance.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/SimpleFontInstance.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/SimpleFontInstance.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/cfonts.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/cfonts.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/cmaps.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/cmaps.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/leperf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/letrperf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/sfnt.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/xmlreader.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/xmlreader.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperfold.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/ucnvavailperf/ucnvavailperf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/ucnvavailperf/ucnvavailperf.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/bitset.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/trieset.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/unicont.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/perf/usetperf/bitset.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/usetperf/bitset.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/usetperf/usetperf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/usetperf/usetperf.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.h
trunk/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/perf/utfperf/utfperf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/utfperf/utfperf.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.cpp
trunk/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.vcxproj
trunk/Build/source/libs/icu/icu-src/source/test/testdata/BidiTest.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_NON_IGNORABLE_SHORT.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_SHIFTED_SHORT.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/GraphemeBreakTest.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/LineBreakTest.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/SentenceBreakTest.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/WordBreakTest.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/grapheme.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose_cj.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal_cj.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/readme.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/word.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/word_POSIX.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/conversion.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/numberformattestspecification.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/rbbitst.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/regextst.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/root.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/structLocale.txt
trunk/Build/source/libs/icu/icu-src/source/test/testmap/testmap.c
trunk/Build/source/libs/icu/icu-src/source/test/thaitest/thaitest.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/Makefile.in
trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctest.c
trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctestfw.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/datamap.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/testdata.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/tstdtmod.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/ucln_ct.c
trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/ctest.h
trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/datamap.h
trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testdata.h
trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testlog.h
trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testtype.h
trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/tstdtmod.h
trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/uperf.h
trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/utimer.h
trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/uperf.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/genbrk/genbrk.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/genbrk/genbrk.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/genccode/genccode.c
trunk/Build/source/libs/icu/icu-src/source/tools/genccode/genccode.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/gencmn/gencmn.c
trunk/Build/source/libs/icu/icu-src/source/tools/gencmn/gencmn.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.c
trunk/Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/gencolusb/extract_unsafe_backwards.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/gencolusb/verify_uset.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/gendict/gendict.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/gendict/gendict.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/Makefile.in
trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/gennorm2.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/gennorm2.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/n2builder.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/n2builder.h
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/Makefile.in
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/derb.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/derb.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/errmsg.c
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/errmsg.h
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/genrb.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/genrb.h
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/genrb.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/parse.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/parse.h
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/prscmnts.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/prscmnts.h
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/rbutil.c
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/rbutil.h
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/read.c
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/read.h
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/rle.c
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/rle.h
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/ustr.c
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/ustr.h
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/wrtjava.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/genrb/wrtxml.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/genren/Makefile
trunk/Build/source/libs/icu/icu-src/source/tools/genren/README
trunk/Build/source/libs/icu/icu-src/source/tools/genren/genren.pl
trunk/Build/source/libs/icu/icu-src/source/tools/gensprep/gensprep.c
trunk/Build/source/libs/icu/icu-src/source/tools/gensprep/gensprep.h
trunk/Build/source/libs/icu/icu-src/source/tools/gensprep/gensprep.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/gensprep/store.c
trunk/Build/source/libs/icu/icu-src/source/tools/gentest/genres32.c
trunk/Build/source/libs/icu/icu-src/source/tools/gentest/gentest.c
trunk/Build/source/libs/icu/icu-src/source/tools/gentest/gentest.h
trunk/Build/source/libs/icu/icu-src/source/tools/gentest/gentest.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/icu-svnprops-check.py
trunk/Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/icuinfo/testplug.c
trunk/Build/source/libs/icu/icu-src/source/tools/icuinfo/testplug.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/icupkg/icupkg.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/icupkg/icupkg.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/icuswap/icuswap.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/icuswap/icuswap.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/Makefile.in
trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/gencnvex.c
trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/genmbcs.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/genmbcs.h
trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.1.in
trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.h
trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/ucnvstat.c
trunk/Build/source/libs/icu/icu-src/source/tools/pkgdata/Makefile.in
trunk/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgtypes.c
trunk/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgtypes.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/Makefile.in
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/collationinfo.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/collationinfo.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/dbgutil.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/dbgutil.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/denseranges.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/denseranges.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/filestrm.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/filetools.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/filetools.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/flagparser.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/package.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/package.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_genc.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_gencmn.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_icu.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_icu.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_imp.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkgitems.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ppucd.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ppucd.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/swapimpl.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/swapimpl.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucbuf.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucbuf.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucln_tu.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucm.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/udbgutil.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/udbgutil.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/unewdata.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/uoptions.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/uparse.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/writesrc.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/xmlparser.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/xmlparser.h
trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/Makefile.in
trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/icuregions
trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzdump.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzdump.vcxproj
trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzones
trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.h
trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/zdump.c
trunk/Build/source/libs/icu/version.ac
Added Paths:
-----------
trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.cpp
trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.h
trunk/Build/source/libs/icu/icu-src/source/common/cmemory.cpp
trunk/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj
trunk/Build/source/libs/icu/icu-src/source/common/cstring.cpp
trunk/Build/source/libs/icu/icu-src/source/common/cwchar.cpp
trunk/Build/source/libs/icu/icu-src/source/common/edits.cpp
trunk/Build/source/libs/icu/icu-src/source/common/icudataver.cpp
trunk/Build/source/libs/icu/icu-src/source/common/locmap.cpp
trunk/Build/source/libs/icu/icu-src/source/common/propsvec.cpp
trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp
trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.h
trunk/Build/source/libs/icu/icu-src/source/common/uarrsort.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ubidi.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ubidi_props.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ubidiln.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ubiditransform.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ubidiwrt.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucasemap_imp.h
trunk/Build/source/libs/icu/icu-src/source/common/ucat.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uchar.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucmndata.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnv.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_cb.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_cnv.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_ct.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_err.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_lmb.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_set.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u16.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u32.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u7.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u8.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnvdisp.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnvhz.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnvisci.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnvlat1.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ucnvscsu.cpp
trunk/Build/source/libs/icu/icu-src/source/common/udatamem.cpp
trunk/Build/source/libs/icu/icu-src/source/common/udataswp.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uenum.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uhash.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uinvchar.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ulist.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uloc_tag.cpp
trunk/Build/source/libs/icu/icu-src/source/common/umapfile.cpp
trunk/Build/source/libs/icu/icu-src/source/common/umath.cpp
trunk/Build/source/libs/icu/icu-src/source/common/unicode/casemap.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/char16ptr.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/edits.h
trunk/Build/source/libs/icu/icu-src/source/common/unicode/stringoptions.h
trunk/Build/source/libs/icu/icu-src/source/common/ures_cnv.cpp
trunk/Build/source/libs/icu/icu-src/source/common/usc_impl.cpp
trunk/Build/source/libs/icu/icu-src/source/common/uscript.cpp
trunk/Build/source/libs/icu/icu-src/source/common/ustrfmt.cpp
trunk/Build/source/libs/icu/icu-src/source/common/utf_impl.cpp
trunk/Build/source/libs/icu/icu-src/source/common/utrace.cpp
trunk/Build/source/libs/icu/icu-src/source/common/utypes.cpp
trunk/Build/source/libs/icu/icu-src/source/common/wintz.cpp
trunk/Build/source/libs/icu/icu-src/source/data/in/icudt60l.dat
trunk/Build/source/libs/icu/icu-src/source/data/makedata_uwp.vcxproj
trunk/Build/source/libs/icu/icu-src/source/i18n/decContext.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/decNumber.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/i18n_uwp.vcxproj
trunk/Build/source/libs/icu/icu-src/source/i18n/nounit.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/number_affixutils.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/number_affixutils.h
trunk/Build/source/libs/icu/icu-src/source/i18n/number_compact.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/number_compact.h
trunk/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.h
trunk/Build/source/libs/icu/icu-src/source/i18n/number_decimfmtprops.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/number_decimfmtprops.h
trunk/Build/source/libs/icu/icu-src/source/i18n/number_fluent.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.h
trunk/Build/source/libs/icu/icu-src/source/i18n/number_grouping.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/number_integerwidth.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/number_longnames.h
trunk/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.h
trunk/Build/source/libs/icu/icu-src/source/i18n/number_notation.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/number_padding.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.h
trunk/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.h
trunk/Build/source/libs/icu/icu-src/source/i18n/number_rounding.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/number_roundingutils.h
trunk/Build/source/libs/icu/icu-src/source/i18n/number_scientific.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/number_scientific.h
trunk/Build/source/libs/icu/icu-src/source/i18n/number_stringbuilder.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/number_stringbuilder.h
trunk/Build/source/libs/icu/icu-src/source/i18n/number_types.h
trunk/Build/source/libs/icu/icu-src/source/i18n/number_utils.h
trunk/Build/source/libs/icu/icu-src/source/i18n/ulocdata.cpp
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/nounit.h
trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/numberformatter.h
trunk/Build/source/libs/icu/icu-src/source/i18n/utmscale.cpp
trunk/Build/source/libs/icu/icu-src/source/io/sprintf.cpp
trunk/Build/source/libs/icu/icu-src/source/io/sscanf.cpp
trunk/Build/source/libs/icu/icu-src/source/io/ufile.cpp
trunk/Build/source/libs/icu/icu-src/source/io/ufmt_cmn.cpp
trunk/Build/source/libs/icu/icu-src/source/io/uprntf_p.cpp
trunk/Build/source/libs/icu/icu-src/source/io/uscanf.cpp
trunk/Build/source/libs/icu/icu-src/source/io/uscanf_p.cpp
trunk/Build/source/libs/icu/icu-src/source/io/ustdio.cpp
trunk/Build/source/libs/icu/icu-src/source/stubdata/stubdata.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest.h
trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_affixutils.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_api.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_decimalquantity.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_modifiers.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternstring.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_stringbuilder.cpp
trunk/Build/source/libs/icu/icu-src/source/test/intltest/punyref.cpp
trunk/Build/source/libs/icu/icu-src/source/test/testdata/IdnaTest.txt
trunk/Build/source/libs/icu/icu-src/source/test/testdata/emoji-test.txt
trunk/Build/source/libs/icu/icu-src/source/tools/escapesrc/
trunk/Build/source/libs/icu/icu-src/source/tools/escapesrc/Makefile.in
trunk/Build/source/libs/icu/icu-src/source/tools/escapesrc/cptbl.h
trunk/Build/source/libs/icu/icu-src/source/tools/escapesrc/escapesrc.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/escapesrc/expect-simple.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/escapesrc/tblgen.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/escapesrc/test-nochange.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/escapesrc/test-simple.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/extradata.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/extradata.h
trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/norms.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/norms.h
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/filestrm.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/flagparser.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_genc.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_gencmn.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucm.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucmstate.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/unewdata.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/uoptions.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/uparse.cpp
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/writesrc.cpp
Removed Paths:
-------------
trunk/Build/source/libs/icu/icu-src/source/common/cmemory.c
trunk/Build/source/libs/icu/icu-src/source/common/cstring.c
trunk/Build/source/libs/icu/icu-src/source/common/cwchar.c
trunk/Build/source/libs/icu/icu-src/source/common/icudataver.c
trunk/Build/source/libs/icu/icu-src/source/common/locmap.c
trunk/Build/source/libs/icu/icu-src/source/common/propsvec.c
trunk/Build/source/libs/icu/icu-src/source/common/uarrsort.c
trunk/Build/source/libs/icu/icu-src/source/common/ubidi.c
trunk/Build/source/libs/icu/icu-src/source/common/ubidi_props.c
trunk/Build/source/libs/icu/icu-src/source/common/ubidiln.c
trunk/Build/source/libs/icu/icu-src/source/common/ubiditransform.c
trunk/Build/source/libs/icu/icu-src/source/common/ubidiwrt.c
trunk/Build/source/libs/icu/icu-src/source/common/ucat.c
trunk/Build/source/libs/icu/icu-src/source/common/uchar.c
trunk/Build/source/libs/icu/icu-src/source/common/ucmndata.c
trunk/Build/source/libs/icu/icu-src/source/common/ucnv.c
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_cb.c
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_cnv.c
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_ct.c
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_err.c
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_lmb.c
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_set.c
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u16.c
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u32.c
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u7.c
trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u8.c
trunk/Build/source/libs/icu/icu-src/source/common/ucnvdisp.c
trunk/Build/source/libs/icu/icu-src/source/common/ucnvhz.c
trunk/Build/source/libs/icu/icu-src/source/common/ucnvisci.c
trunk/Build/source/libs/icu/icu-src/source/common/ucnvlat1.c
trunk/Build/source/libs/icu/icu-src/source/common/ucnvscsu.c
trunk/Build/source/libs/icu/icu-src/source/common/udatamem.c
trunk/Build/source/libs/icu/icu-src/source/common/udataswp.c
trunk/Build/source/libs/icu/icu-src/source/common/uenum.c
trunk/Build/source/libs/icu/icu-src/source/common/uhash.c
trunk/Build/source/libs/icu/icu-src/source/common/uinvchar.c
trunk/Build/source/libs/icu/icu-src/source/common/ulist.c
trunk/Build/source/libs/icu/icu-src/source/common/uloc_tag.c
trunk/Build/source/libs/icu/icu-src/source/common/umapfile.c
trunk/Build/source/libs/icu/icu-src/source/common/umath.c
trunk/Build/source/libs/icu/icu-src/source/common/ures_cnv.c
trunk/Build/source/libs/icu/icu-src/source/common/usc_impl.c
trunk/Build/source/libs/icu/icu-src/source/common/uscript.c
trunk/Build/source/libs/icu/icu-src/source/common/ustrfmt.c
trunk/Build/source/libs/icu/icu-src/source/common/utf_impl.c
trunk/Build/source/libs/icu/icu-src/source/common/utrace.c
trunk/Build/source/libs/icu/icu-src/source/common/utypes.c
trunk/Build/source/libs/icu/icu-src/source/common/wintz.c
trunk/Build/source/libs/icu/icu-src/source/data/in/icudt58l.dat
trunk/Build/source/libs/icu/icu-src/source/data/misc/
trunk/Build/source/libs/icu/icu-src/source/data/unit/
trunk/Build/source/libs/icu/icu-src/source/i18n/decContext.c
trunk/Build/source/libs/icu/icu-src/source/i18n/decNumber.c
trunk/Build/source/libs/icu/icu-src/source/i18n/ulocdata.c
trunk/Build/source/libs/icu/icu-src/source/i18n/utmscale.c
trunk/Build/source/libs/icu/icu-src/source/io/sprintf.c
trunk/Build/source/libs/icu/icu-src/source/io/sscanf.c
trunk/Build/source/libs/icu/icu-src/source/io/ufile.c
trunk/Build/source/libs/icu/icu-src/source/io/ufmt_cmn.c
trunk/Build/source/libs/icu/icu-src/source/io/uprntf_p.c
trunk/Build/source/libs/icu/icu-src/source/io/uscanf.c
trunk/Build/source/libs/icu/icu-src/source/io/uscanf_p.c
trunk/Build/source/libs/icu/icu-src/source/io/ustdio.c
trunk/Build/source/libs/icu/icu-src/source/stubdata/stubdata.c
trunk/Build/source/libs/icu/icu-src/source/test/intltest/punyref.c
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/filestrm.c
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/flagparser.c
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_genc.c
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_gencmn.c
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucm.c
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucmstate.c
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/unewdata.c
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/uoptions.c
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/uparse.c
trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/writesrc.c
Modified: trunk/Build/source/libs/README
===================================================================
--- trunk/Build/source/libs/README 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/README 2018-01-12 18:35:28 UTC (rev 46290)
@@ -27,7 +27,7 @@
harfbuzz 1.7.4 - checked 20dec17
http://www.freedesktop.org/software/harfbuzz/release/
-icu 58.2 - checked 13mar17
+icu 60.2 - checked 11jan18
http://download.icu-project.org/files/icu4c/
libpaper 1.1.24+nmu2 - checked 24oct13
Modified: trunk/Build/source/libs/icu/ChangeLog
===================================================================
--- trunk/Build/source/libs/icu/ChangeLog 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/ChangeLog 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,3 +1,7 @@
+2018-01-12 Karl Berry <karl at freefriends.org>
+
+ * Import icu-60, now requiring C++11; reautoconf.
+
2017-04-27 Karl Berry <karl at tug.org>
* Makefile.am (LDADD): link icutest with ICU_LIBS_EXTRA.
Modified: trunk/Build/source/libs/icu/TLpatches/TL-Changes
===================================================================
--- trunk/Build/source/libs/icu/TLpatches/TL-Changes 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/TLpatches/TL-Changes 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,11 +1,11 @@
-Changes applied to the icu-58.2 tree as obtained from:
- http://download.icu-project.org/files/icu4c/58.2/icu4c-58_2-src.tgz
- and icu4c-58_2-data.zip
+Changes applied to the icu-60.2 tree as obtained from:
+ http://download.icu-project.org/files/icu4c/60.2/icu4c-60_2-src.tgz
+ and icu4c-60_2-data.zip
-cd /tmp # or wherever
-tar xf icu4c-*-src.tgz # should unpack into icu/*
-cd $Build/source/libs/icu/icu-src # for whatever $Build directory
-\cp -arf /tmp/icu/* .
+cd $Build/source/libs/icu # for whatever $Build directory
+tar xf /tmp/icu4c-*-src.tgz # should unpack into icu/*
+mv icu icu-src
+cd icu-src
rm -r as_is packaging # don't bother including these in our tree
#
# files to add:
@@ -14,21 +14,22 @@
svn status | sed -n 's/^\?//p' # rerun, should be empty now
#
# files to remove:
-diff -qr . /tmp/icu/ | sed -n -e 's,^Only in \./\(.*\): ,\1/,p'
+svn status | sed -n 's/^\!//p'
svn rm `!!`
-diff ... # rerun, should be empty now
+svn status | sed -n 's/^\!//p' # rerun, should be empty now
# update generic files (still in icu-src):
aux=$Build/source/build-aux
-cp -p $aux/config.guess $aux/config.sub $aux/install-sh source/
+cp -p $aux/config.guess $aux/config.sub $aux/install-sh source
# patch -p0 for all ../TLpatches/patch-* files, as needed.
-# Run svn diff after each, update patch-* file.
+# Save original and diff after each, update patch-* file.
# Don't lose our leading comments.
# autoreconf in the TL directory; don't run autoreconf in the
# icu-src/source/ directory, it fails due to missing pkg-config
-# prerequisites. (Thus we must patch configure, not just configure.ac.)
+# prerequisites. (Thus we must patch configure, not just configure.ac;
+# not worth more effort for our small change of preferring gcc.)
#
# rebuild; must rerun configure (not just config.status),
# so easiest is to just do a whole new build.
Modified: trunk/Build/source/libs/icu/TLpatches/patch-14-xopen
===================================================================
--- trunk/Build/source/libs/icu/TLpatches/patch-14-xopen 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/TLpatches/patch-14-xopen 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,10 +1,8 @@
Do not define _XOPEN_SOURCE_EXTENDED on Solaris,
notwithstanding comments in icu source.
-Index: source/common/uposixdefs.h
-===================================================================
---- source/common/uposixdefs.h (revision 43491)
-+++ source/common/uposixdefs.h (working copy)
+--- /tmp/up 2018-01-11 11:05:06.218484133 -0800
++++ source/common/uposixdefs.h 2018-01-11 11:07:11.006686446 -0800
@@ -51,10 +51,13 @@
* Make sure things like readlink and such functions work.
* Poorly upgraded Solaris machines can't have this defined.
@@ -15,8 +13,8 @@
*
* z/OS needs this definition for timeval and to get usleep.
*/
--#if !defined(_XOPEN_SOURCE_EXTENDED)
-+#if !defined(_XOPEN_SOURCE_EXTENDED) && !defined(__sun)
+-#if !defined(_XOPEN_SOURCE_EXTENDED) && defined(__TOS_MVS__)
++#if !defined(_XOPEN_SOURCE_EXTENDED) && defined(__TOS_MVS__) && !defined(sun)
# define _XOPEN_SOURCE_EXTENDED 1
#endif
Modified: trunk/Build/source/libs/icu/TLpatches/patch-16-putil
===================================================================
--- trunk/Build/source/libs/icu/TLpatches/patch-16-putil 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/TLpatches/patch-16-putil 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,49 +1,15 @@
tzset and mingw/cygwin.
-Index: source/common/putil.cpp
-===================================================================
---- source/common/putil.cpp (revision 43491)
-+++ source/common/putil.cpp (working copy)
-@@ -43,6 +43,20 @@
- // Must be before any other #includes.
- #include "uposixdefs.h"
+--- /tmp/putil.cpp 2017-10-31 12:04:49.000000000 -0700
++++ source/common/putil.cpp 2018-01-11 11:10:30.895806863 -0800
+@@ -46,8 +46,8 @@
+ // First, the platform type. Need this for U_PLATFORM.
+ #include "unicode/platform.h"
-+#if (U_PF_MINGW <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN) && defined(__STRICT_ANSI__)
+-#if U_PLATFORM == U_PF_MINGW && defined __STRICT_ANSI__
+-/* tzset isn't defined in strict ANSI on MinGW. */
++#if (U_PF_CYGWIN <= U_PLATFORM && defined(__STRICT_ANSI__)
+/* tzset isn't defined in strict ANSI on Cygwin and MinGW. */
-+#undef __STRICT_ANSI__
-+#endif
-+
-+/*
-+ * Cygwin with GCC requires inclusion of time.h after the above disabling strict asci mode statement.
-+ */
-+#include <time.h>
-+
-+#if !U_PLATFORM_USES_ONLY_WIN32_API
-+#include <sys/time.h>
-+#endif
-+
- /* include ICU headers */
- #include "unicode/utypes.h"
- #include "unicode/putil.h"
-@@ -104,21 +118,7 @@
- # include <sys/neutrino.h>
+ #undef __STRICT_ANSI__
#endif
--#if (U_PF_MINGW <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN) && defined(__STRICT_ANSI__)
--/* tzset isn't defined in strict ANSI on Cygwin and MinGW. */
--#undef __STRICT_ANSI__
--#endif
--
- /*
-- * Cygwin with GCC requires inclusion of time.h after the above disabling strict asci mode statement.
-- */
--#include <time.h>
--
--#if !U_PLATFORM_USES_ONLY_WIN32_API
--#include <sys/time.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.
- *
Modified: trunk/Build/source/libs/icu/TLpatches/patch-17-cygwin-no-w32api
===================================================================
--- trunk/Build/source/libs/icu/TLpatches/patch-17-cygwin-no-w32api 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/TLpatches/patch-17-cygwin-no-w32api 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,5 +1,8 @@
_HAS_ -> _USES_ONLY_ for WIN32_API and Cygwin.
+Not applied for icu-60.2, since it seems some (but not all) of changes
+have been installed upstream.
+
Index: source/common/umutex.h
===================================================================
--- source/common/umutex.h (revision 43491)
Modified: trunk/Build/source/libs/icu/TLpatches/patch-19-netbsd
===================================================================
--- trunk/Build/source/libs/icu/TLpatches/patch-19-netbsd 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/TLpatches/patch-19-netbsd 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,9 +1,9 @@
Per Marc Baudoin, tlbuild 17 Mar 2017 10:03:03.
-Index: digitlst.cpp
-===================================================================
---- digitlst.cpp (revision 43522)
-+++ digitlst.cpp (working copy)
+Not applied for icu-60.2, since they have a new U_HAVE_XLOCALE_H.
+
+--- source/i18n/digitlst.cpp (revision 43522)
++++ source/i18n/digitlst.cpp (working copy)
@@ -61,7 +61,7 @@
#endif
Modified: trunk/Build/source/libs/icu/configure
===================================================================
--- trunk/Build/source/libs/icu/configure 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/configure 2018-01-12 18:35:28 UTC (rev 46290)
@@ -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) 58.2.
+# Generated by GNU Autoconf 2.69 for icu (TeX Live) 60.2.
#
# Report bugs to <tex-k at tug.org>.
#
@@ -579,8 +579,8 @@
# Identity of this package.
PACKAGE_NAME='icu (TeX Live)'
PACKAGE_TARNAME='icu--tex-live-'
-PACKAGE_VERSION='58.2'
-PACKAGE_STRING='icu (TeX Live) 58.2'
+PACKAGE_VERSION='60.2'
+PACKAGE_STRING='icu (TeX Live) 60.2'
PACKAGE_BUGREPORT='tex-k at tug.org'
PACKAGE_URL=''
@@ -1258,7 +1258,7 @@
# 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) 58.2 to adapt to many kinds of systems.
+\`configure' configures icu (TeX Live) 60.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1328,7 +1328,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of icu (TeX Live) 58.2:";;
+ short | recursive ) echo "Configuration of icu (TeX Live) 60.2:";;
esac
cat <<\_ACEOF
@@ -1426,7 +1426,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-icu (TeX Live) configure 58.2
+icu (TeX Live) configure 60.2
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1565,7 +1565,7 @@
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 58.2, which was
+It was created by icu (TeX Live) $as_me 60.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3488,7 +3488,7 @@
# Define the identity of the package.
PACKAGE='icu--tex-live-'
- VERSION='58.2'
+ VERSION='60.2'
cat >>confdefs.h <<_ACEOF
@@ -4866,7 +4866,7 @@
# 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 58.2, which was
+This file was extended by icu (TeX Live) $as_me 60.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -4923,7 +4923,7 @@
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 58.2
+icu (TeX Live) config.status 60.2
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
Modified: trunk/Build/source/libs/icu/icu-src/APIChangeReport.html
===================================================================
--- trunk/Build/source/libs/icu/icu-src/APIChangeReport.html 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/APIChangeReport.html 2018-01-12 18:35:28 UTC (rev 46290)
@@ -5,31 +5,31 @@
-->
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>ICU4C API Comparison: ICU 57 with ICU 58</title>
+<title>ICU4C API Comparison: ICU 59 with ICU 60</title>
<link type="text/css" href="icu4c.css" rel="stylesheet">
</head>
<body>
<a name="#_top"></a>
-<h1>ICU4C API Comparison: ICU 57 with ICU 58</h1>
+<h1>ICU4C API Comparison: ICU 59 with ICU 60</h1>
<div id="toc">
<ul>
<li>
-<a href="#removed">Removed from ICU 57</a>
+<a href="#removed">Removed from ICU 59</a>
</li>
<li>
-<a href="#deprecated">Deprecated or Obsoleted in ICU 58</a>
+<a href="#deprecated">Deprecated or Obsoleted in ICU 60</a>
</li>
<li>
-<a href="#changed">Changed in ICU 58</a>
+<a href="#changed">Changed in ICU 60</a>
</li>
<li>
-<a href="#promoted">Promoted to stable in ICU 58</a>
+<a href="#promoted">Promoted to stable in ICU 60</a>
</li>
<li>
-<a href="#added">Added in ICU 58</a>
+<a href="#added">Added in ICU 60</a>
</li>
<li>
-<a href="#other">Other existing drafts in ICU 58</a>
+<a href="#other">Other existing drafts in ICU 60</a>
</li>
<li>
<a href="#purevirtual">Signature Simplifications</a><sup style="background-color: yellow; font-size: smallest;">(new)</sup>
@@ -38,3149 +38,1293 @@
<hr>
</div>
<a name="removed"></a>
-<h2>Removed from ICU 57</h2>
+<h2>Removed from ICU 59</h2>
<table BORDER="1" class="genTable">
<THEAD>
<tr>
-<th>File</th><th>API</th><th>ICU 57</th><th>ICU 58</th>
+<th>File</th><th>API</th><th>ICU 59</th><th>ICU 60</th>
</tr>
</THEAD>
<tr class="row1">
-<td class="file">bytestrie.h</td><td class="proto">const StringPiece& icu::BytesTrie::Iterator::getString()</td><td class="stabchange">Stable<br>ICU 4.8</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">decimfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::DecimalFormat::ERoundingMode {}</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(moved to numfmt.h)<br></td>
</tr>
<tr class="row0">
-<td class="file">bytestriebuilder.h</td><td class="proto">BytesTrieBuilder& icu::BytesTrieBuilder::add(const StringPiece&, int32_t, UErrorCode&)</td><td class="stabchange">Stable<br>ICU 4.8</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">decimfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::DecimalFormat::ERoundingMode::kRoundCeiling</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(moved to numfmt.h)<br></td>
</tr>
<tr class="row1">
-<td class="file">compactdecimalformat.h</td><td class="proto">UnicodeString& icu::CompactDecimalFormat::format(const StringPiece&, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">decimfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::DecimalFormat::ERoundingMode::kRoundDown</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(moved to numfmt.h)<br></td>
</tr>
<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">UnicodeString& icu::DecimalFormat::format(const StringPiece&, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="stabchange">Stable</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">decimfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::DecimalFormat::ERoundingMode::kRoundFloor</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(moved to numfmt.h)<br></td>
</tr>
<tr class="row1">
-<td class="file">fmtable.h</td><td class="proto">icu::Formattable::Formattable(const StringPiece&, UErrorCode&)</td><td class="stabchange">Stable<br>ICU 4.4</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">decimfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::DecimalFormat::ERoundingMode::kRoundHalfDown</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(moved to numfmt.h)<br></td>
</tr>
<tr class="row0">
-<td class="file">fmtable.h</td><td class="proto">void icu::Formattable::setDecimalNumber(const StringPiece&, UErrorCode&)</td><td class="stabchange">Stable<br>ICU 4.4</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">decimfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::DecimalFormat::ERoundingMode::kRoundHalfEven</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(moved to numfmt.h)<br></td>
</tr>
<tr class="row1">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::labelToASCII_UTF8(const StringPiece&, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="stabchange">Stable<br>ICU 4.6</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">decimfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::DecimalFormat::ERoundingMode::kRoundHalfUp</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(moved to numfmt.h)<br></td>
</tr>
<tr class="row0">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::labelToUnicodeUTF8(const StringPiece&, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="stabchange">Stable<br>ICU 4.6</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">decimfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::DecimalFormat::ERoundingMode::kRoundUnnecessary</td><td class="stabchange">Stable<br>ICU 4.8</td><td>(moved to numfmt.h)<br></td>
</tr>
<tr class="row1">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::nameToASCII_UTF8(const StringPiece&, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="stabchange">Stable<br>ICU 4.6</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">decimfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::DecimalFormat::ERoundingMode::kRoundUp</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(moved to numfmt.h)<br></td>
</tr>
<tr class="row0">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::nameToUnicodeUTF8(const StringPiece&, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="stabchange">Stable<br>ICU 4.6</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">platform.h</td><td class="proto"><tt>#define</tt> U_IOSTREAM_SOURCE</td><td class="">Internal</td><td>(missing)<br></td>
</tr>
<tr class="row1">
-<td class="file">LayoutEngine.h</td><td class="proto">UClassID icu::LayoutEngine::getDynamicClassID()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">plurrule.h</td><td class="proto">UnicodeString icu::PluralRules::select(const FixedDecimal&)</td><td class="">Internal</td><td>(missing)<br></td>
</tr>
<tr class="row0">
-<td class="file">LayoutEngine.h</td><td class="proto">icu::LayoutEngine::~LayoutEngine()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ucasemap.h</td><td class="proto"><tt>#define</tt> U_TITLECASE_NO_BREAK_ADJUSTMENT</td><td class="stabchange">Stable<br>ICU 3.8</td><td>(moved to new stringoptions.h)<br></td>
</tr>
<tr class="row1">
-<td class="file">LayoutEngine.h</td><td class="proto">le_int32 icu::LayoutEngine::getGlyphCount()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ucasemap.h</td><td class="proto"><tt>#define</tt> U_TITLECASE_NO_LOWERCASE</td><td class="stabchange">Stable<br>ICU 3.8</td><td>(moved to new stringoptions.h)<br></td>
</tr>
<tr class="row0">
-<td class="file">LayoutEngine.h</td><td class="proto">le_int32 icu::LayoutEngine::layoutChars(const LEUnicode chars[], le_int32, le_int32, le_int32, le_bool, float, float, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ucasemap.h</td><td class="proto"><tt>#define</tt> UCASEMAP_OMIT_UNCHANGED_TEXT</td><td class="">Draft<br>ICU 59</td><td>(missing)<br></td>
</tr>
<tr class="row1">
-<td class="file">LayoutEngine.h</td><td class="proto"><tt>static</tt> LayoutEngine* icu::LayoutEngine::layoutEngineFactory(const LEFontInstance*, le_int32, le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>#define</tt> U_FOLD_CASE_DEFAULT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>(moved to new stringoptions.h)<br></td>
</tr>
<tr class="row0">
-<td class="file">LayoutEngine.h</td><td class="proto"><tt>static</tt> LayoutEngine* icu::LayoutEngine::layoutEngineFactory(const LEFontInstance*, le_int32, le_int32, le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>#define</tt> U_FOLD_CASE_EXCLUDE_SPECIAL_I</td><td class="stabchange">Stable<br>ICU 2.0</td><td>(moved to new stringoptions.h)<br></td>
</tr>
<tr class="row1">
-<td class="file">LayoutEngine.h</td><td class="proto"><tt>static</tt> UClassID icu::LayoutEngine::getStaticClassID()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">unorm2.h</td><td class="proto"><tt>#define</tt> U_COMPARE_CODE_POINT_ORDER</td><td class="stabchange">Stable<br>ICU 2.2</td><td>(moved to new stringoptions.h)<br></td>
</tr>
<tr class="row0">
-<td class="file">LayoutEngine.h</td><td class="proto"><tt>static</tt> const le_int32 icu::LayoutEngine::kTypoFlagKern</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">unorm2.h</td><td class="proto"><tt>#define</tt> U_COMPARE_IGNORE_CASE</td><td class="stabchange">Stable<br>ICU 2.2</td><td>(moved to new stringoptions.h)<br></td>
</tr>
<tr class="row1">
-<td class="file">LayoutEngine.h</td><td class="proto"><tt>static</tt> const le_int32 icu::LayoutEngine::kTypoFlagLiga</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">unorm2.h</td><td class="proto"><tt>#define</tt> UNORM_INPUT_IS_FCD</td><td class="stabchange">Stable<br>ICU 2.2</td><td>(moved to new stringoptions.h)<br></td>
</tr>
<tr class="row0">
-<td class="file">LayoutEngine.h</td><td class="proto">void icu::LayoutEngine::getCharIndices(le_int32 charIndices[], LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ustring.h</td><td class="proto"><tt>#define</tt> U_COMPARE_CODE_POINT_ORDER</td><td class="stabchange">Stable<br>ICU 2.2</td><td>(moved to new stringoptions.h)<br></td>
</tr>
-<tr class="row1">
-<td class="file">LayoutEngine.h</td><td class="proto">void icu::LayoutEngine::getCharIndices(le_int32 charIndices[], le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+</table>
+<P></P>
+<a href="#_top">(jump back to top)</a>
+<hr>
+<a name="deprecated"></a>
+<h2>Deprecated or Obsoleted in ICU 60</h2>
+<table BORDER="1" class="genTable">
+<THEAD>
+<tr>
+<th>File</th><th>API</th><th>ICU 59</th><th>ICU 60</th>
</tr>
-<tr class="row0">
-<td class="file">LayoutEngine.h</td><td class="proto">void icu::LayoutEngine::getGlyphPosition(le_int32, float&, float&, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
+</THEAD>
<tr class="row1">
-<td class="file">LayoutEngine.h</td><td class="proto">void icu::LayoutEngine::getGlyphPositions(float positions[], LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">filteredbrk.h</td><td class="proto">BreakIterator* icu::FilteredBreakIteratorBuilder::build(BreakIterator*, UErrorCode&)</td><td class="stabchange">Stable<br>ICU 56</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">LayoutEngine.h</td><td class="proto">void icu::LayoutEngine::getGlyphs(LEGlyphID glyphs[], LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">filteredbrk.h</td><td class="proto"><tt>static</tt> FilteredBreakIteratorBuilder* icu::FilteredBreakIteratorBuilder::createInstance(UErrorCode&)</td><td class="stabchange">Stable<br>ICU 56</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">LayoutEngine.h</td><td class="proto">void icu::LayoutEngine::getGlyphs(le_uint32 glyphs[], le_uint32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">utf_old.h</td><td class="proto"><tt>#define</tt> U_HIDE_OBSOLETE_UTF_OLD_H</td><td class="">(missing)</td><td>Deprecated<br>
+<span class=""><span>ICU 2.4</span></span></td>
</tr>
-<tr class="row0">
-<td class="file">LayoutEngine.h</td><td class="proto">void icu::LayoutEngine::reset()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+</table>
+<P></P>
+<a href="#_top">(jump back to top)</a>
+<hr>
+<a name="changed"></a>
+<h2>Changed in ICU 60 (old, new)</h2>
+<table BORDER="1" class="genTable">
+<THEAD>
+<tr>
+<th>File</th><th>API</th><th>ICU 59</th><th>ICU 60</th>
</tr>
+</THEAD>
<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">LEGlyphID icu::LEFontInstance::mapCharToGlyph(LEUnicode32)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">filteredbrk.h</td><td class="proto">BreakIterator* icu::FilteredBreakIteratorBuilder::build(BreakIterator*, UErrorCode&)</td><td class="stabchange">Stable<br>ICU 56</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">LEGlyphID icu::LEFontInstance::mapCharToGlyph(LEUnicode32, const LECharMapper*)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">filteredbrk.h</td><td class="proto"><tt>static</tt> FilteredBreakIteratorBuilder* icu::FilteredBreakIteratorBuilder::createInstance(UErrorCode&)</td><td class="stabchange">Stable<br>ICU 56</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">LEGlyphID icu::LEFontInstance::mapCharToGlyph(LEUnicode32, const LECharMapper*, le_bool)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">measfmt.h</td><td class="proto">UnicodeString icu::MeasureFormat::getUnitDisplayName(const MeasureUnit&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">LEUnicode32 icu::LECharMapper::mapChar(LEUnicode32)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto">UBiDiTransform* ubiditransform_open(UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">UClassID icu::LEFontInstance::getDynamicClassID()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiMirroring::UBIDI_MIRRORING_OFF</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">const LEFontInstance* icu::LEFontInstance::getSubFont(const LEUnicode chars[], le_int32*, le_int32, le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiMirroring::UBIDI_MIRRORING_ON</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">const void* icu::LEFontInstance::getFontTable(LETag, size_t&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiOrder::UBIDI_LOGICAL</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">float icu::LEFontInstance::getScaleFactorX()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiOrder::UBIDI_VISUAL</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">float icu::LEFontInstance::getScaleFactorY()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto">uint32_t ubiditransform_transform(UBiDiTransform*, const UChar*, int32_t, UChar*, int32_t, UBiDiLevel, UBiDiOrder, UBiDiLevel, UBiDiOrder, UBiDiMirroring, uint32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">float icu::LEFontInstance::getXPixelsPerEm()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto">void ubiditransform_close(UBiDiTransform*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">float icu::LEFontInstance::getYPixelsPerEm()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_NO_SUBSTITUTE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">float icu::LEFontInstance::xPixelsToUnits(float)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_SUBSTITUTE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">float icu::LEFontInstance::xUnitsToPoints(float)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContextType::UDISPCTX_TYPE_SUBSTITUTE_HANDLING</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">float icu::LEFontInstance::yPixelsToUnits(float)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uspoof.h</td><td class="proto">URestrictionLevel uspoof_getCheckResultRestrictionLevel(const USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">float icu::LEFontInstance::yUnitsToPoints(float)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uspoof.h</td><td class="proto">USpoofCheckResult* uspoof_openCheckResult(UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">icu::LECharMapper::~LECharMapper()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uspoof.h</td><td class="proto">U_NAMESPACE_END int32_t uspoof_getCheckResultChecks(const USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">icu::LEFontInstance::~LEFontInstance()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uspoof.h</td><td class="proto">const USet* uspoof_getCheckResultNumerics(const USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">le_bool icu::LEFontInstance::canDisplay(LEUnicode32)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uspoof.h</td><td class="proto"><tt>enum</tt> USpoofChecks::USPOOF_CONFUSABLE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">le_bool icu::LEFontInstance::getGlyphPoint(LEGlyphID, le_int32, LEPoint&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check2(const USpoofChecker*, const UChar*, int32_t, USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">le_int32 icu::LEFontInstance::getAscent()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check2UTF8(const USpoofChecker*, const char*, int32_t, USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">le_int32 icu::LEFontInstance::getDescent()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check2UnicodeString(const USpoofChecker*, const icu::UnicodeString&, USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">le_int32 icu::LEFontInstance::getLeading()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uspoof.h</td><td class="proto">void uspoof_closeCheckResult(USpoofCheckResult*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
-<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">le_int32 icu::LEFontInstance::getLineHeight()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">le_int32 icu::LEFontInstance::getUnitsPerEM()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto"><tt>static</tt> UClassID icu::LEFontInstance::getStaticClassID()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto"><tt>static</tt> float icu::LEFontInstance::fixedToFloat(le_int32)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto"><tt>static</tt> le_int32 icu::LEFontInstance::floatToFixed(float)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">void icu::LEFontInstance::getGlyphAdvance(LEGlyphID, LEPoint&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">void icu::LEFontInstance::mapCharsToGlyphs(const LEUnicode chars[], le_int32, le_int32, le_bool, const LECharMapper*, le_bool, LEGlyphStorage&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">void icu::LEFontInstance::pixelsToUnits(LEPoint&, LEPoint&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">void icu::LEFontInstance::transformFunits(float, float, LEPoint&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">void icu::LEFontInstance::unitsToPoints(LEPoint&, LEPoint&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">LEGlyphID icu::LEGlyphStorage::getGlyphID(le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">LEGlyphID& icu::LEGlyphStorage::operator[](le_int32)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">LEGlyphID* icu::LEGlyphStorage::insertGlyphs(le_int32, le_int32)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">LEGlyphID* icu::LEGlyphStorage::insertGlyphs(le_int32, le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">UClassID icu::LEGlyphStorage::getDynamicClassID()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">icu::LEGlyphStorage::LEGlyphStorage()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">icu::LEGlyphStorage::~LEGlyphStorage()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">le_int32 icu::LEGlyphStorage::allocateAuxData(LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">le_int32 icu::LEGlyphStorage::allocatePositions(LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">le_int32 icu::LEGlyphStorage::applyInsertions()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">le_int32 icu::LEGlyphStorage::getCharIndex(le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">le_int32 icu::LEGlyphStorage::getGlyphCount()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">le_uint32 icu::LEGlyphStorage::getAuxData(le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto"><tt>static</tt> UClassID icu::LEGlyphStorage::getStaticClassID()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::adjustPosition(le_int32, float, float, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::adoptAuxDataArray(LEGlyphStorage&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::adoptCharIndicesArray(LEGlyphStorage&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::adoptGlyphArray(LEGlyphStorage&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::adoptGlyphCount(LEGlyphStorage&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::adoptGlyphCount(le_int32)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::adoptPositionArray(LEGlyphStorage&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::allocateGlyphArray(le_int32, le_bool, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::getAuxData(le_uint32 auxData[], LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::getCharIndices(le_int32 charIndices[], LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::getCharIndices(le_int32 charIndices[], le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::getGlyphPosition(le_int32, float&, float&, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::getGlyphPositions(float positions[], LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::getGlyphs(LEGlyphID glyphs[], LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::getGlyphs(le_uint32 glyphs[], le_uint32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::moveGlyph(le_int32, le_int32, le_uint32)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::reset()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::setAuxData(le_int32, le_uint32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::setCharIndex(le_int32, le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::setGlyphID(le_int32, LEGlyphID, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::setPosition(le_int32, float, float, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LESwaps.h</td><td class="proto"><tt>#define</tt> SWAPL</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LESwaps.h</td><td class="proto"><tt>#define</tt> SWAPW</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LESwaps.h</td><td class="proto"><tt>static</tt> le_uint16 icu::LESwaps::swapWord(le_uint16)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LESwaps.h</td><td class="proto"><tt>static</tt> le_uint32 icu::LESwaps::swapLong(le_uint32)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_AFRC_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_ARRAY_COPY</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_ARRAY_SIZE</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_ASSERT_BAD_FONT</td><td class=""><i>(untagged)</i></td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_CHAR_FILTER_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_CLIENT_MASK</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_CLIENT_SHIFT</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_CLIG_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_CSWH_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_DEBUG_BAD_FONT</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_DEFAULT_FEATURE_FLAG</td><td class=""><i>(untagged)</i></td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_DELETE_ARRAY</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_DLIG_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_FAILURE</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_FRAC_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_GET_CLIENT</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_GET_GLYPH</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_GET_SUB_FONT</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_GLYPH_MASK</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_GLYPH_SHIFT</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_GROW_ARRAY</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_HLIG_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_Kerning_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_LIGA_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_Ligatures_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_MAKE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_NALT_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_NEW_ARRAY</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_RANGE_CHECK</td><td class=""><i>(untagged)</i></td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_RLIG_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_RUBY_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SALT_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SET_CLIENT</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SET_GLYPH</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SET_SUB_FONT</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SMCP_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SS01_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SS02_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SS03_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SS04_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SS05_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SS06_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SS07_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SUB_FONT_MASK</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SUB_FONT_SHIFT</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SUCCESS</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SWSH_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_UINT32_MAX</td><td class=""><i>(untagged)</i></td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_UINTPTR_MAX</td><td class=""><i>(untagged)</i></td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_ZERO_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEErrorCode::LE_FONT_FILE_NOT_FOUND_ERROR</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEErrorCode::LE_ILLEGAL_ARGUMENT_ERROR</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEErrorCode::LE_INDEX_OUT_OF_BOUNDS_ERROR</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEErrorCode::LE_INTERNAL_ERROR</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEErrorCode::LE_MEMORY_ALLOCATION_ERROR</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEErrorCode::LE_MISSING_FONT_TABLE_ERROR</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEErrorCode::LE_NO_ERROR</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEErrorCode::LE_NO_LAYOUT_ERROR</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEErrorCode::LE_NO_SUBFONT_WARNING</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_AFRC_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_CHAR_FILTER_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_CLIG_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_CSWH_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_DLIG_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_FEATURE_ENUM_MAX</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_FRAC_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_HLIG_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_Kerning_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_LIGA_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_Ligatures_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_NALT_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_RLIG_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_RUBY_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SALT_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SMCP_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SS01_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SS02_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SS03_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SS04_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SS05_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SS06_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SS07_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SWSH_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_ZERO_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_AALT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_ABVF_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_ABVM_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_ABVS_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_AFRC_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_AKHN_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_BLWF_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_BLWM_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_BLWS_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_C2PC_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_C2SC_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_CALT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_CASE_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_CCMP_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_CJCT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_CLIG_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_CPSP_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_CSWH_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_CURS_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_DIST_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_DLIG_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_DNOM_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_EXPT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_FALT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_FIN2_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_FIN3_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_FINA_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_FRAC_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_FWID_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_HALF_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_HALN_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_HALT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_HIST_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_HKNA_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_HLIG_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_HNGL_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_HWID_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_INIT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_ISOL_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_ITAL_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_JALT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_JP78_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_JP83_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_JP90_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_KERN_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_LFBD_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_LIGA_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_LJMO_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_LNUM_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_LOCL_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_MARK_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_MED2_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_MEDI_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_MGRK_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_MKMK_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_MSET_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_NALT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_NLCK_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_NUKT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_NUMR_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_ONUM_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_OPBD_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_ORDN_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_ORNM_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_PALT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_PCAP_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_PNUM_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_PREF_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_PRES_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_PSTF_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_PSTS_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_PWID_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_QWID_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_RAND_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_RKRF_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_RLIG_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_RPHF_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_RTBD_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_RTLA_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_RUBY_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SALT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SINF_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SIZE_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SMCP_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SMPL_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS01_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS02_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS03_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS04_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS05_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS06_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS07_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS08_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS09_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS10_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS11_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS12_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS13_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS14_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS15_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS16_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS17_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS18_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS19_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS20_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SUBS_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SUPS_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SWSH_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_TITL_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_TJMO_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_TNAM_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_TNUM_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_TRAD_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_TWID_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_UNIC_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_VALT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_VATU_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_VERT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_VHAL_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_VJMO_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_VKNA_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_VKRN_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_VPAL_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_VRT2_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_ZERO_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_ACNT_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_AVAR_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_BASE_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_BDAT_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_BHED_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_BLOC_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_BSLN_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_CFF__TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_CMAP_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_CVAR_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_CVT__TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_DSIG_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_EBDT_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_EBLC_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_EBSC_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_FDSC_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_FEAT_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_FMTX_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_FPGM_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_FVAR_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_GASP_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_GDEF_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_GLYF_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_GPOS_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_GSUB_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_GVAR_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_HDMX_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_HEAD_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_HHEA_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_HMTX_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_HSTY_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_JSTF_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_JUST_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_KERN_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_LCAR_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_LOCA_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_LTSH_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_MAXP_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_MORT_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_MORX_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_NAME_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_OPBD_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_OS_2_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_PCLT_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_POST_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_PREP_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_PROP_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_TRAK_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_VDMX_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_VHEA_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_VMTX_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_VORG_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_ZAPF_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">numfmt.h</td><td class="proto">UnicodeString& icu::NumberFormat::format(const StringPiece&, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="stabchange">Stable</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">unistr.h</td><td class="proto"><tt>static</tt> UnicodeString icu::UnicodeString::fromUTF8(const StringPiece&)</td><td class="stabchange">Stable<br>ICU 4.2</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>#define</tt> NULL</td><td class="stabchange">Stable<br>ICU 2.0</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
</table>
<P></P>
<a href="#_top">(jump back to top)</a>
<hr>
-<a name="deprecated"></a>
-<h2>Deprecated or Obsoleted in ICU 58</h2>
+<a name="promoted"></a>
+<h2>Promoted to stable in ICU 60</h2>
<table BORDER="1" class="genTable">
<THEAD>
<tr>
-<th>File</th><th>API</th><th>ICU 57</th><th>ICU 58</th>
+<th>File</th><th>API</th><th>ICU 59</th><th>ICU 60</th>
</tr>
</THEAD>
<tr class="row1">
-<td class="file">dtfmtsym.h</td><td class="proto"><tt>enum</tt>
- icu::DateFormatSymbols::DtContextType::DT_CONTEXT_COUNT</td><td class="stabchange">Stable<br>ICU 3.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">measfmt.h</td><td class="proto">UnicodeString icu::MeasureFormat::getUnitDisplayName(const MeasureUnit&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">dtfmtsym.h</td><td class="proto"><tt>enum</tt>
- icu::DateFormatSymbols::DtWidthType::DT_WIDTH_COUNT</td><td class="stabchange">Stable<br>ICU 3.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::NumberFormat::ERoundingMode {}</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
</tr>
<tr class="row1">
-<td class="file">measfmt.h</td><td class="proto"><tt>enum</tt> UMeasureFormatWidth::UMEASFMT_WIDTH_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::NumberFormat::ERoundingMode::kRoundCeiling</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
</tr>
<tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_UNIT_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::NumberFormat::ERoundingMode::kRoundDown</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
</tr>
<tr class="row1">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateDirection::UDAT_DIRECTION_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::NumberFormat::ERoundingMode::kRoundFloor</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
</tr>
<tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateRelativeUnit::UDAT_RELATIVE_UNIT_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::NumberFormat::ERoundingMode::kRoundHalfDown</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
</tr>
<tr class="row1">
-<td class="file">tmunit.h</td><td class="proto"><tt>enum</tt>
- icu::TimeUnit::UTimeUnitFields::UTIMEUNIT_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 4.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::NumberFormat::ERoundingMode::kRoundHalfEven</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
</tr>
<tr class="row0">
-<td class="file">ubidi.h</td><td class="proto"><tt>#define</tt> U_BIDI_CLASS_DEFAULT</td><td class="stabchange">Stable<br>ICU 3.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::NumberFormat::ERoundingMode::kRoundHalfUp</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
</tr>
<tr class="row1">
-<td class="file">ubidi.h</td><td class="proto"><tt>enum</tt> UBiDiReorderingMode::UBIDI_REORDER_COUNT</td><td class="stabchange">Stable<br>ICU 3.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::NumberFormat::ERoundingMode::kRoundUnnecessary</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 4.8</span></span></td>
</tr>
<tr class="row0">
-<td class="file">ubrk.h</td><td class="proto"><tt>enum</tt> UBreakIteratorType::UBRK_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::NumberFormat::ERoundingMode::kRoundUp</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
</tr>
<tr class="row1">
-<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UCalendarDateFields::UCAL_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 2.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto">UBiDiTransform* ubiditransform_open(UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBidiPairedBracketType::U_BPT_COUNT</td><td class="stabchange">Stable<br>ICU 52</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiMirroring::UBIDI_MIRRORING_OFF</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiMirroring::UBIDI_MIRRORING_ON</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UCharDirection::U_CHAR_DIRECTION_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiOrder::UBIDI_LOGICAL</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UCharNameChoice::U_CHAR_NAME_CHOICE_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiOrder::UBIDI_VISUAL</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UDecompositionType::U_DT_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto">uint32_t ubiditransform_transform(UBiDiTransform*, const UChar*, int32_t, UChar*, int32_t, UBiDiLevel, UBiDiOrder, UBiDiLevel, UBiDiOrder, UBiDiMirroring, uint32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UEastAsianWidth::U_EA_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto">void ubiditransform_close(UBiDiTransform*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UHangulSyllableType::U_HST_COUNT</td><td class="stabchange">Stable<br>ICU 2.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_KANA_EXTENDED_A</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_MASARAM_GONDI</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningType::U_JT_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_NUSHU</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_SOYOMBO</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UNumericType::U_NT_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_SYRIAC_SUPPLEMENT</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_BINARY_LIMIT</td><td class="stabchange">Stable<br>ICU 2.1</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_ZANABAZAR_SQUARE</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_DOUBLE_LIMIT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_BHA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_INT_LIMIT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_JA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_MASK_LIMIT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_LLA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_OTHER_PROPERTY_LIMIT</td><td class="stabchange">Stable<br>ICU 4.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_LLLA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_STRING_LIMIT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_NGA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UPropertyNameChoice::U_PROPERTY_NAME_CHOICE_COUNT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_NNA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> USentenceBreak::U_SB_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_NNNA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_NYA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">ucnv.h</td><td class="proto"><tt>enum</tt> UConverterUnicodeSet::UCNV_SET_COUNT</td><td class="stabchange">Stable<br>ICU 2.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_RA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColAttribute::UCOL_ATTRIBUTE_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_SSA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColAttributeValue::UCOL_ATTRIBUTE_VALUE_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_TTA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColBoundMode::UCOL_BOUND_VALUE_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_EMOJI_COMPONENT</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColReorderCode::UCOL_REORDER_CODE_LIMIT</td><td class="stabchange">Stable<br>ICU 4.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_PREPENDED_CONCATENATION_MARK</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">ucurr.h</td><td class="proto"><tt>enum</tt> UCurrencyUsage::UCURR_USAGE_COUNT</td><td class="stabchange">Stable<br>ICU 54</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_REGIONAL_INDICATOR</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatBooleanAttribute::UDAT_BOOLEAN_ATTRIBUTE_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_NO_SUBSTITUTE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatField::UDAT_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 3.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_SUBSTITUTE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row1">
-<td class="file">udata.h</td><td class="proto"><tt>enum</tt> UDataFileAccess::UDATA_FILE_ACCESS_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContextType::UDISPCTX_TYPE_SUBSTITUTE_HANDLING</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">udatpg.h</td><td class="proto"><tt>enum</tt> UDateTimePatternConflict::UDATPG_CONFLICT_COUNT</td><td class="stabchange">Stable<br>ICU 3.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_MASARAM_GONDI</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">udatpg.h</td><td class="proto"><tt>enum</tt> UDateTimePatternField::UDATPG_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 3.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_SOYOMBO</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">uformattable.h</td><td class="proto"><tt>enum</tt> UFormattableType::UFMT_COUNT</td><td class="stabchange">Stable<br>ICU 52</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_ZANABAZAR_SQUARE</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocDataLocaleType::ULOC_DATA_LOCALE_TYPE_LIMIT</td><td class="stabchange">Stable<br>ICU 2.1</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uspoof.h</td><td class="proto">URestrictionLevel uspoof_getCheckResultRestrictionLevel(const USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">ulocdata.h</td><td class="proto"><tt>enum</tt> ULocaleDataDelimiterType::ULOCDATA_DELIMITER_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uspoof.h</td><td class="proto">USpoofCheckResult* uspoof_openCheckResult(UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row1">
-<td class="file">ulocdata.h</td><td class="proto"><tt>enum</tt> ULocaleDataExemplarSetType::ULOCDATA_ES_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uspoof.h</td><td class="proto">U_NAMESPACE_END int32_t uspoof_getCheckResultChecks(const USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">ulocdata.h</td><td class="proto"><tt>enum</tt> UMeasurementSystem::UMS_LIMIT</td><td class="stabchange">Stable<br>ICU 2.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uspoof.h</td><td class="proto">const USet* uspoof_getCheckResultNumerics(const USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row1">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UCurrencySpacing::UNUM_CURRENCY_SPACING_COUNT</td><td class="stabchange">Stable<br>ICU 4.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uspoof.h</td><td class="proto"><tt>enum</tt> USpoofChecks::USPOOF_CONFUSABLE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatFields::UNUM_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 49</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check2(const USpoofChecker*, const UChar*, int32_t, USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row1">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatStyle::UNUM_FORMAT_STYLE_COUNT</td><td class="stabchange">Stable<br>ICU 4.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check2UTF8(const USpoofChecker*, const char*, int32_t, USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatSymbol::UNUM_FORMAT_SYMBOL_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check2UnicodeString(const USpoofChecker*, const icu::UnicodeString&, USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
<tr class="row1">
-<td class="file">upluralrules.h</td><td class="proto"><tt>enum</tt> UPluralType::UPLURAL_TYPE_COUNT</td><td class="stabchange">Stable<br>ICU 50</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uspoof.h</td><td class="proto">void uspoof_closeCheckResult(USpoofCheckResult*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
</tr>
-<tr class="row0">
-<td class="file">uregion.h</td><td class="proto"><tt>enum</tt> URegionType::URGN_LIMIT</td><td class="stabchange">Stable<br>ICU 51</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> UDateRelativeDateTimeFormatterStyle::UDAT_STYLE_COUNT</td><td class="stabchange">Stable<br>ICU 54</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_COUNT</td><td class="">Draft<br>ICU 57</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">ures.h</td><td class="proto"><tt>enum</tt> UResType::URES_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_CODE_LIMIT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">usearch.h</td><td class="proto"><tt>enum</tt> USearchAttribute::USEARCH_ATTRIBUTE_COUNT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">usearch.h</td><td class="proto"><tt>enum</tt> USearchAttributeValue::USEARCH_ATTRIBUTE_VALUE_COUNT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uset.h</td><td class="proto"><tt>enum</tt> USetSpanCondition::USET_SPAN_CONDITION_COUNT</td><td class="stabchange">Stable<br>ICU 3.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uspoof.h</td><td class="proto"><tt>enum</tt> USpoofChecks::USPOOF_ANY_CASE</td><td class="stabchange">Stable<br>ICU 4.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_COLLATION_LIMIT</td><td class="stabchange">Stable<br>ICU 2.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_CONVERSION_LIMIT</td><td class="stabchange">Stable<br>ICU 2.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_FUNCTION_LIMIT</td><td class="stabchange">Stable<br>ICU 2.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_BRK_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_ERROR_WARNING_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_FMT_PARSE_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_IDNA_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_PARSE_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_PLUGIN_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_REGEX_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_STANDARD_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
</table>
<P></P>
<a href="#_top">(jump back to top)</a>
<hr>
-<a name="changed"></a>
-<h2>Changed in ICU 58 (old, new)</h2>
+<a name="added"></a>
+<h2>Added in ICU 60</h2>
<table BORDER="1" class="genTable">
<THEAD>
<tr>
-<th>File</th><th>API</th><th>ICU 57</th><th>ICU 58</th>
+<th>File</th><th>API</th><th>ICU 59</th><th>ICU 60</th>
</tr>
</THEAD>
<tr class="row1">
-<td class="file">compactdecimalformat.h</td><td class="proto">UnicodeString& icu::CompactDecimalFormat::format(int32_t, UnicodeString&, FieldPosition&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">bytestream.h</td><td class="proto">icu::StringByteSink< StringClass >::StringByteSink(StringClass*, int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">UnicodeString& icu::DecimalFormat::format(double, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="stabchange">Stable</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> void icu::CaseMap::utf8Fold(uint32_t, StringPiece, ByteSink&, Edits*, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">UnicodeString& icu::DecimalFormat::format(int32_t, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="stabchange">Stable</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> void icu::CaseMap::utf8ToLower(const char*, uint32_t, StringPiece, ByteSink&, Edits*, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">UnicodeString& icu::DecimalFormat::format(int64_t, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="stabchange">Stable</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> void icu::CaseMap::utf8ToTitle(const char*, uint32_t, BreakIterator*, StringPiece, ByteSink&, Edits*, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">dtfmtsym.h</td><td class="proto"><tt>enum</tt>
- icu::DateFormatSymbols::DtContextType::DT_CONTEXT_COUNT</td><td class="stabchange">Stable<br>ICU 3.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> void icu::CaseMap::utf8ToUpper(const char*, uint32_t, StringPiece, ByteSink&, Edits*, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">dtfmtsym.h</td><td class="proto"><tt>enum</tt>
- icu::DateFormatSymbols::DtWidthType::DT_WIDTH_COUNT</td><td class="stabchange">Stable<br>ICU 3.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">currunit.h</td><td class="proto">icu::CurrencyUnit::CurrencyUnit()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">dtptngen.h</td><td class="proto"><tt>static</tt> UnicodeString icu::DateTimePatternGenerator::staticGetBaseSkeleton(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">currunit.h</td><td class="proto">icu::CurrencyUnit::CurrencyUnit(const MeasureUnit&, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">dtptngen.h</td><td class="proto"><tt>static</tt> UnicodeString icu::DateTimePatternGenerator::staticGetSkeleton(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">dcfmtsym.h</td><td class="proto">icu::DecimalFormatSymbols::DecimalFormatSymbols(const Locale&, const NumberingSystem&, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">fieldpos.h</td><td class="proto"><tt>enum</tt> icu::FieldPosition::(anonymous) {}</td><td class=""><i>(untagged)</i></td><td>Stable<br>
-<span class=""><span>ICU 2.0</span></span></td>
+<td class="file">edits.h</td><td class="proto">Edits& icu::Edits::mergeAndAppend(const Edits&, const Edits&, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">fieldpos.h</td><td class="proto"><tt>enum</tt> icu::FieldPosition::(anonymous)::DONT_CARE</td><td class=""><i>(untagged)</i></td><td>Stable<br>
-<span class=""><span>ICU 2.0</span></span></td>
+<td class="file">edits.h</td><td class="proto">Edits& icu::Edits::operator=(Edits&&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">filteredbrk.h</td><td class="proto">BreakIterator* icu::FilteredBreakIteratorBuilder::build(BreakIterator*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">edits.h</td><td class="proto">Edits& icu::Edits::operator=(const Edits&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">filteredbrk.h</td><td class="proto">UBool icu::FilteredBreakIteratorBuilder::suppressBreakAfter(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">edits.h</td><td class="proto">icu::Edits::Edits(Edits&&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">filteredbrk.h</td><td class="proto">UBool icu::FilteredBreakIteratorBuilder::unsuppressBreakAfter(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">edits.h</td><td class="proto">icu::Edits::Edits(const Edits&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">filteredbrk.h</td><td class="proto">icu::FilteredBreakIteratorBuilder::~FilteredBreakIteratorBuilder()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">edits.h</td><td class="proto">int32_t icu::Edits::numberOfChanges()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">filteredbrk.h</td><td class="proto"><tt>static</tt> FilteredBreakIteratorBuilder* icu::FilteredBreakIteratorBuilder::createInstance(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">filteredbrk.h</td><td class="proto">BreakIterator* icu::FilteredBreakIteratorBuilder::wrapIteratorWithFilter(BreakIterator*, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">filteredbrk.h</td><td class="proto"><tt>static</tt> FilteredBreakIteratorBuilder* icu::FilteredBreakIteratorBuilder::createInstance(const Locale&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">filteredbrk.h</td><td class="proto"><tt>static</tt> FilteredBreakIteratorBuilder* icu::FilteredBreakIteratorBuilder::createEmptyInstance(UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">localpointer.h</td><td class="proto">icu::LocalArray< T >::LocalArray(T*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">normalizer2.h</td><td class="proto">UBool icu::FilteredNormalizer2::isNormalizedUTF8(StringPiece, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">localpointer.h</td><td class="proto">void icu::LocalArray< T >::adoptInsteadAndCheckErrorCode(T*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">normalizer2.h</td><td class="proto">UBool icu::Normalizer2::isNormalizedUTF8(StringPiece, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">localpointer.h</td><td class="proto">void icu::LocalArray< T >::swap(LocalArray< T >&) U_NOEXCEPT</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">normalizer2.h</td><td class="proto">void icu::FilteredNormalizer2::normalizeUTF8(uint32_t, StringPiece, ByteSink&, Edits*, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">localpointer.h</td><td class="proto">void icu::LocalPointer< T >::swap(LocalPointer< T >&) U_NOEXCEPT</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">normalizer2.h</td><td class="proto">void icu::Normalizer2::normalizeUTF8(uint32_t, StringPiece, ByteSink&, Edits*, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">measfmt.h</td><td class="proto"><tt>enum</tt> UMeasureFormatWidth::UMEASFMT_WIDTH_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">nounit.h</td><td class="proto">UClassID icu::NoUnit::getDynamicClassID()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createCentury(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">nounit.h</td><td class="proto">UObject* icu::NoUnit::clone()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createCupMetric(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">nounit.h</td><td class="proto">icu::NoUnit::NoUnit(const NoUnit&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createGenericTemperature(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">nounit.h</td><td class="proto">icu::NoUnit::~NoUnit()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createKnot(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">nounit.h</td><td class="proto"><tt>static</tt> NoUnit icu::NoUnit::base()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createLiterPer100Kilometers(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">nounit.h</td><td class="proto"><tt>static</tt> NoUnit icu::NoUnit::percent()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMileScandinavian(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">nounit.h</td><td class="proto"><tt>static</tt> NoUnit icu::NoUnit::permille()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPintMetric(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">nounit.h</td><td class="proto"><tt>static</tt> UClassID icu::NoUnit::getStaticClassID()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createRevolutionAngle(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">numberformatter.h</td><td class="proto">Appendable& icu::number::FormattedNumber::appendTo(Appendable&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">numfmt.h</td><td class="proto">UnicodeString& icu::NumberFormat::format(const Formattable&, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="stabchange">Stable</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::adoptSymbols(const NumberingSystem*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">numfmt.h</td><td class="proto">UnicodeString& icu::NumberFormat::format(double, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="stabchange">Stable</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::adoptUnit(const icu::MeasureUnit*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">numfmt.h</td><td class="proto">UnicodeString& icu::NumberFormat::format(int32_t, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="stabchange">Stable</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::decimal(const UNumberDecimalSeparatorDisplay&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">numfmt.h</td><td class="proto">UnicodeString& icu::NumberFormat::format(int64_t, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="stabchange">Stable</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::grouping(const Grouper&)</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_UNIT_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::integerWidth(const IntegerWidth&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateDirection::UDAT_DIRECTION_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::notation(const Notation&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateRelativeUnit::UDAT_RELATIVE_UNIT_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::padding(const impl::Padder&)</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">tmunit.h</td><td class="proto"><tt>enum</tt>
- icu::TimeUnit::UTimeUnitFields::UTIMEUNIT_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 4.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::rounding(const Rounder&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">ubidi.h</td><td class="proto"><tt>#define</tt> U_BIDI_CLASS_DEFAULT</td><td class="stabchange">Stable<br>ICU 3.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::sign(const UNumberSignDisplay&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">ubidi.h</td><td class="proto"><tt>enum</tt> UBiDiReorderingMode::UBIDI_REORDER_COUNT</td><td class="stabchange">Stable<br>ICU 3.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::symbols(const DecimalFormatSymbols&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">ubrk.h</td><td class="proto"><tt>enum</tt> UBreakIteratorType::UBRK_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::threshold(int32_t)</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UCalendarDateFields::UCAL_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 2.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::unit(const icu::MeasureUnit&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBidiPairedBracketType::U_BPT_COUNT</td><td class="stabchange">Stable<br>ICU 52</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::unitWidth(const UNumberUnitWidth&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">FormattedNumber icu::number::LocalizedNumberFormatter::formatDecimal(StringPiece, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UCharDirection::U_CHAR_DIRECTION_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">FormattedNumber icu::number::LocalizedNumberFormatter::formatDouble(double, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UCharNameChoice::U_CHAR_NAME_CHOICE_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">FormattedNumber icu::number::LocalizedNumberFormatter::formatInt(int64_t, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UDecompositionType::U_DT_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">IntegerWidth icu::number::IntegerWidth::truncateAt(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UEastAsianWidth::U_EA_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">LocalizedNumberFormatter icu::number::UnlocalizedNumberFormatter::locale(const icu::Locale&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Rounder icu::number::CurrencyRounder::withCurrency(const CurrencyUnit&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_PREPEND</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.0</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Rounder icu::number::FractionRounder::withMaxDigits(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_REGIONAL_INDICATOR</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 50</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Rounder icu::number::FractionRounder::withMinDigits(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_SPACING_MARK</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.0</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Rounder icu::number::IncrementRounder::withMinFraction(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UHangulSyllableType::U_HST_COUNT</td><td class="stabchange">Stable<br>ICU 2.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Rounder icu::number::Rounder::withMode(UNumberFormatRoundingMode)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">ScientificNotation icu::number::ScientificNotation::withExponentSignDisplay(UNumberSignDisplay)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningType::U_JT_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">ScientificNotation icu::number::ScientificNotation::withMinExponentDigits(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_CLOSE_PARENTHESIS</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.4</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">SymbolsWrapper& icu::number::impl::SymbolsWrapper::operator=(const SymbolsWrapper&)</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_CONDITIONAL_JAPANESE_STARTER</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 49</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">UBool icu::number::NumberFormatterSettings< Derived >::copyErrorTo(UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">UBool icu::number::impl::SymbolsWrapper::copyErrorTo(UErrorCode&)</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_H2</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 3.4</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">UnicodeString icu::number::FormattedNumber::toString()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_H3</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 3.4</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">bool icu::number::impl::SymbolsWrapper::isDecimalFormatSymbols()</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_HEBREW_LETTER</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 49</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">bool icu::number::impl::SymbolsWrapper::isNumberingSystem()</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_JL</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 3.4</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">const DecimalFormatSymbols* icu::number::impl::SymbolsWrapper::getDecimalFormatSymbols()</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_JT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 3.4</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">const NumberingSystem* icu::number::impl::SymbolsWrapper::getNumberingSystem()</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_JV</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 3.4</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberDecimalSeparatorDisplay::UNUM_DECIMAL_SEPARATOR_ALWAYS</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_NEXT_LINE</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 2.6</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberDecimalSeparatorDisplay::UNUM_DECIMAL_SEPARATOR_AUTO</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_REGIONAL_INDICATOR</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 50</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberDecimalSeparatorDisplay::UNUM_DECIMAL_SEPARATOR_COUNT</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_WORD_JOINER</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 2.6</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_ALWAYS</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UNumericType::U_NT_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_BINARY_LIMIT</td><td class="stabchange">Stable<br>ICU 2.1</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ALWAYS</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_DOUBLE_LIMIT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_AUTO</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_INT_LIMIT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_COUNT</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_MASK_LIMIT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_NEVER</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_OTHER_PROPERTY_LIMIT</td><td class="stabchange">Stable<br>ICU 4.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_COUNT</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_STRING_LIMIT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UPropertyNameChoice::U_PROPERTY_NAME_CHOICE_COUNT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_HIDDEN</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> USentenceBreak::U_SB_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_ISO_CODE</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_NARROW</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_CR</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.0</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_SHORT</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_DOUBLE_QUOTE</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 52</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::FormattedNumber::~FormattedNumber()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_EXTEND</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.0</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter(const LocalizedNumberFormatter&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_HEBREW_LETTER</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 52</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::LocalizedNumberFormatter::~LocalizedNumberFormatter()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_LF</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.0</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::NumberFormatter::NumberFormatter()=delete</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_MIDNUMLET</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.0</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::UnlocalizedNumberFormatter::UnlocalizedNumberFormatter(const UnlocalizedNumberFormatter&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_NEWLINE</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.0</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::impl::SymbolsWrapper::SymbolsWrapper()</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_REGIONAL_INDICATOR</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 50</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::impl::SymbolsWrapper::SymbolsWrapper(const SymbolsWrapper&)</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_SINGLE_QUOTE</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 52</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::impl::SymbolsWrapper::~SymbolsWrapper()</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row0">
-<td class="file">ucnv.h</td><td class="proto"><tt>enum</tt> UConverterUnicodeSet::UCNV_SET_COUNT</td><td class="stabchange">Stable<br>ICU 2.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> CompactNotation icu::number::Notation::compactLong()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColAttribute::UCOL_ATTRIBUTE_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> CompactNotation icu::number::Notation::compactShort()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColAttributeValue::UCOL_ATTRIBUTE_VALUE_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> CurrencyRounder icu::number::Rounder::currency(UCurrencyUsage)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColBoundMode::UCOL_BOUND_VALUE_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> DigitRounder icu::number::Rounder::fixedDigits(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColReorderCode::UCOL_REORDER_CODE_LIMIT</td><td class="stabchange">Stable<br>ICU 4.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> DigitRounder icu::number::Rounder::maxDigits(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">ucurr.h</td><td class="proto"><tt>enum</tt> UCurrencyUsage::UCURR_USAGE_COUNT</td><td class="stabchange">Stable<br>ICU 54</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> DigitRounder icu::number::Rounder::minDigits(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatBooleanAttribute::UDAT_BOOLEAN_ATTRIBUTE_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> DigitRounder icu::number::Rounder::minMaxDigits(int32_t, int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatBooleanAttribute::UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCH</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionRounder icu::number::Rounder::fixedFraction(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatBooleanAttribute::UDAT_PARSE_PARTIAL_LITERAL_MATCH</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionRounder icu::number::Rounder::integer()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatField::UDAT_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 3.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionRounder icu::number::Rounder::maxFraction(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">udata.h</td><td class="proto"><tt>enum</tt> UDataFileAccess::UDATA_FILE_ACCESS_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionRounder icu::number::Rounder::minFraction(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">udatpg.h</td><td class="proto"><tt>enum</tt> UDateTimePatternConflict::UDATPG_CONFLICT_COUNT</td><td class="stabchange">Stable<br>ICU 3.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionRounder icu::number::Rounder::minMaxFraction(int32_t, int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">udatpg.h</td><td class="proto"><tt>enum</tt> UDateTimePatternField::UDATPG_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 3.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Grouper icu::number::Grouper::defaults()</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row1">
-<td class="file">uformattable.h</td><td class="proto"><tt>enum</tt> UFormattableType::UFMT_COUNT</td><td class="stabchange">Stable<br>ICU 52</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Grouper icu::number::Grouper::minTwoDigits()</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row0">
-<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocDataLocaleType::ULOC_DATA_LOCALE_TYPE_LIMIT</td><td class="stabchange">Stable<br>ICU 2.1</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Grouper icu::number::Grouper::none()</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row1">
-<td class="file">ulocdata.h</td><td class="proto"><tt>enum</tt> ULocaleDataDelimiterType::ULOCDATA_DELIMITER_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> IncrementRounder icu::number::Rounder::increment(double)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">ulocdata.h</td><td class="proto"><tt>enum</tt> ULocaleDataExemplarSetType::ULOCDATA_ES_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> IntegerWidth icu::number::IntegerWidth::zeroFillTo(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">ulocdata.h</td><td class="proto"><tt>enum</tt> UMeasurementSystem::UMS_LIMIT</td><td class="stabchange">Stable<br>ICU 2.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> LocalizedNumberFormatter icu::number::NumberFormatter::withLocale(const Locale&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">unistr.h</td><td class="proto"><tt>#define</tt> UNISTR_OBJECT_SIZE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Padder icu::number::impl::Padder::codePoints(UChar32, int32_t, UNumberFormatPadPosition)</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row1">
-<td class="file">unistr.h</td><td class="proto">void icu::UnicodeString::swap(UnicodeString&) U_NOEXCEPT</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Padder icu::number::impl::Padder::none()</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UCurrencySpacing::UNUM_CURRENCY_SPACING_COUNT</td><td class="stabchange">Stable<br>ICU 4.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Rounder icu::number::Rounder::unlimited()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatFields::UNUM_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 49</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> ScientificNotation icu::number::Notation::engineering()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatStyle::UNUM_CURRENCY_STANDARD</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> ScientificNotation icu::number::Notation::scientific()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatStyle::UNUM_DECIMAL_COMPACT_LONG</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> SimpleNotation icu::number::Notation::simple()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatStyle::UNUM_DECIMAL_COMPACT_SHORT</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> UnlocalizedNumberFormatter icu::number::NumberFormatter::with()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatStyle::UNUM_FORMAT_STYLE_COUNT</td><td class="stabchange">Stable<br>ICU 4.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">void icu::number::FormattedNumber::populateFieldPosition(FieldPosition&, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatSymbol::UNUM_FORMAT_SYMBOL_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">void icu::number::FormattedNumber::populateFieldPositionIterator(FieldPositionIterator&, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">upluralrules.h</td><td class="proto"><tt>enum</tt> UPluralType::UPLURAL_TYPE_COUNT</td><td class="stabchange">Stable<br>ICU 50</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">void icu::number::impl::SymbolsWrapper::setTo(const DecimalFormatSymbols&)</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row0">
-<td class="file">uregion.h</td><td class="proto"><tt>enum</tt> URegionType::URGN_LIMIT</td><td class="stabchange">Stable<br>ICU 51</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">void icu::number::impl::SymbolsWrapper::setTo(const NumberingSystem*)</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> UDateRelativeDateTimeFormatterStyle::UDAT_STYLE_COUNT</td><td class="stabchange">Stable<br>ICU 54</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto">ERoundingMode icu::NumberFormat::getRoundingMode()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_COUNT</td><td class="">Draft<br>ICU 57</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::NumberFormat::ERoundingMode {}</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
</tr>
<tr class="row1">
-<td class="file">ures.h</td><td class="proto"><tt>enum</tt> UResType::URES_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::NumberFormat::ERoundingMode::kRoundCeiling</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_CODE_LIMIT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::NumberFormat::ERoundingMode::kRoundDown</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
</tr>
<tr class="row1">
-<td class="file">usearch.h</td><td class="proto"><tt>enum</tt> USearchAttribute::USEARCH_ATTRIBUTE_COUNT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::NumberFormat::ERoundingMode::kRoundFloor</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
</tr>
<tr class="row0">
-<td class="file">usearch.h</td><td class="proto"><tt>enum</tt> USearchAttributeValue::USEARCH_ATTRIBUTE_VALUE_COUNT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::NumberFormat::ERoundingMode::kRoundHalfDown</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uset.h</td><td class="proto"><tt>enum</tt> USetSpanCondition::USET_SPAN_CONDITION_COUNT</td><td class="stabchange">Stable<br>ICU 3.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::NumberFormat::ERoundingMode::kRoundHalfEven</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uspoof.h</td><td class="proto"><tt>enum</tt> USpoofChecks::USPOOF_ANY_CASE</td><td class="stabchange">Stable<br>ICU 4.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::NumberFormat::ERoundingMode::kRoundHalfUp</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_checkUTF8(const USpoofChecker*, const char*, int32_t, int32_t*, UErrorCode*)</td><td class="">Deprecated<br>ICU 51</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.2</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::NumberFormat::ERoundingMode::kRoundUnnecessary</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 4.8</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_checkUnicodeString(const USpoofChecker*, const icu::UnicodeString&, int32_t*, UErrorCode*)</td><td class="">Deprecated<br>ICU 51</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.2</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt>
+ icu::NumberFormat::ERoundingMode::kRoundUp</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
</tr>
<tr class="row1">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_COLLATION_LIMIT</td><td class="stabchange">Stable<br>ICU 2.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto">void icu::NumberFormat::setRoundingMode(ERoundingMode)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_CONVERSION_LIMIT</td><td class="stabchange">Stable<br>ICU 2.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">platform.h</td><td class="proto"><tt>#define</tt> U_CALLCONV_FPTR</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row1">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_FUNCTION_LIMIT</td><td class="stabchange">Stable<br>ICU 2.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">platform.h</td><td class="proto"><tt>#define</tt> U_PF_FUCHSIA</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>#define</tt> NULL</td><td class="">Deprecated<br>ICU 54</td><td>Stable<br>
-<span class="verchange"><span>ICU 2.0</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">plurrule.h</td><td class="proto">UnicodeString icu::PluralRules::select(const IFixedDecimal&)</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_BRK_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">rbbi.h</td><td class="proto">void icu::RuleBasedBreakIterator::dumpCache()</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">rbnf.h</td><td class="proto">ERoundingMode icu::RuleBasedNumberFormat::getRoundingMode()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_ERROR_WARNING_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">rbnf.h</td><td class="proto">void icu::RuleBasedNumberFormat::setRoundingMode(ERoundingMode)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_FMT_PARSE_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_COMPARE_CODE_POINT_ORDER</td><td class="">(moved from unorm2.h, ustring.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.2</span></span></td>
</tr>
<tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_IDNA_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_COMPARE_IGNORE_CASE</td><td class="">(moved from unorm2.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.2</span></span></td>
</tr>
<tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_PARSE_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_EDITS_NO_RESET</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_PLUGIN_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_REGEX_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_STANDARD_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-</table>
-<P></P>
-<a href="#_top">(jump back to top)</a>
-<hr>
-<a name="promoted"></a>
-<h2>Promoted to stable in ICU 58</h2>
-<table BORDER="1" class="genTable">
-<THEAD>
-<tr>
-<th>File</th><th>API</th><th>ICU 57</th><th>ICU 58</th>
-</tr>
-</THEAD>
-<tr class="row1">
-<td class="file">bytestrie.h</td><td class="proto">StringPiece icu::BytesTrie::Iterator::getString()</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.8</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">bytestriebuilder.h</td><td class="proto">BytesTrieBuilder& icu::BytesTrieBuilder::add(StringPiece, int32_t, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.8</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">compactdecimalformat.h</td><td class="proto">UnicodeString& icu::CompactDecimalFormat::format(int32_t, UnicodeString&, FieldPosition&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">UnicodeString& icu::DecimalFormat::format(StringPiece, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">dtptngen.h</td><td class="proto"><tt>static</tt> UnicodeString icu::DateTimePatternGenerator::staticGetBaseSkeleton(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row0">
-<td class="file">dtptngen.h</td><td class="proto"><tt>static</tt> UnicodeString icu::DateTimePatternGenerator::staticGetSkeleton(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row1">
-<td class="file">fieldpos.h</td><td class="proto"><tt>enum</tt> icu::FieldPosition::(anonymous) {}</td><td class=""><i>(untagged)</i></td><td>Stable<br>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_FOLD_CASE_DEFAULT</td><td class="">(moved from uchar.h)</td><td>Stable<br>
<span class=""><span>ICU 2.0</span></span></td>
</tr>
<tr class="row0">
-<td class="file">fieldpos.h</td><td class="proto"><tt>enum</tt> icu::FieldPosition::(anonymous)::DONT_CARE</td><td class=""><i>(untagged)</i></td><td>Stable<br>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_FOLD_CASE_EXCLUDE_SPECIAL_I</td><td class="">(moved from moved from uchar.h)</td><td>Stable<br>
<span class=""><span>ICU 2.0</span></span></td>
</tr>
<tr class="row1">
-<td class="file">filteredbrk.h</td><td class="proto">BreakIterator* icu::FilteredBreakIteratorBuilder::build(BreakIterator*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_OMIT_UNCHANGED_TEXT</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">filteredbrk.h</td><td class="proto">UBool icu::FilteredBreakIteratorBuilder::suppressBreakAfter(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_TITLECASE_ADJUST_TO_CASED</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">filteredbrk.h</td><td class="proto">UBool icu::FilteredBreakIteratorBuilder::unsuppressBreakAfter(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_TITLECASE_NO_BREAK_ADJUSTMENT</td><td class="">(moved from ucasemap.h)</td><td>Stable<br>
+<span class=""><span>ICU 3.8</span></span></td>
</tr>
<tr class="row0">
-<td class="file">filteredbrk.h</td><td class="proto">icu::FilteredBreakIteratorBuilder::~FilteredBreakIteratorBuilder()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_TITLECASE_NO_LOWERCASE</td><td class="">(moved from ucasemap.h)</td><td>Stable<br>
+<span class=""><span>ICU 3.8</span></span></td>
</tr>
<tr class="row1">
-<td class="file">filteredbrk.h</td><td class="proto"><tt>static</tt> FilteredBreakIteratorBuilder* icu::FilteredBreakIteratorBuilder::createInstance(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_TITLECASE_SENTENCES</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">filteredbrk.h</td><td class="proto"><tt>static</tt> FilteredBreakIteratorBuilder* icu::FilteredBreakIteratorBuilder::createInstance(const Locale&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_TITLECASE_WHOLE_STRING</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">fmtable.h</td><td class="proto">icu::Formattable::Formattable(StringPiece, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> UNORM_INPUT_IS_FCD</td><td class="">(moved from unorm2.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.2</span></span></td>
</tr>
+
<tr class="row0">
-<td class="file">fmtable.h</td><td class="proto">void icu::Formattable::setDecimalNumber(StringPiece, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::labelToASCII_UTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.6</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_KANA_EXTENDED_A</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::labelToUnicodeUTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.6</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_MASARAM_GONDI</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::nameToASCII_UTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.6</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_NUSHU</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::nameToUnicodeUTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.6</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_SOYOMBO</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">localpointer.h</td><td class="proto">icu::LocalArray< T >::LocalArray(T*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_SYRIAC_SUPPLEMENT</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">localpointer.h</td><td class="proto">void icu::LocalArray< T >::adoptInsteadAndCheckErrorCode(T*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_ZANABAZAR_SQUARE</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">localpointer.h</td><td class="proto">void icu::LocalArray< T >::swap(LocalArray< T >&) U_NOEXCEPT</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_BHA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">localpointer.h</td><td class="proto">void icu::LocalPointer< T >::swap(LocalPointer< T >&) U_NOEXCEPT</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_JA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createCentury(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_LLA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createCupMetric(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_LLLA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createGenericTemperature(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_NGA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createKnot(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_NNA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createLiterPer100Kilometers(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_NNNA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMileScandinavian(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_NYA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPintMetric(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_RA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createRevolutionAngle(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_SSA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">numfmt.h</td><td class="proto">UnicodeString& icu::NumberFormat::format(StringPiece, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_TTA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_ADLAM</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_EMOJI_COMPONENT</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_BHAIKSUKI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_PREPENDED_CONCATENATION_MARK</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_CYRILLIC_EXTENDED_C</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_REGIONAL_INDICATOR</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_GLAGOLITIC_SUPPLEMENT</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_MASARAM_GONDI</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_SOYOMBO</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_MARCHEN</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_ZANABAZAR_SQUARE</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_MONGOLIAN_SUPPLEMENT</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">utf_old.h</td><td class="proto"><tt>#define</tt> U_HIDE_OBSOLETE_UTF_OLD_H</td><td class="">(missing)</td><td>Deprecated<br>
+<span class=""><span>ICU 2.4</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_NEWA</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">utf16.h</td><td class="proto"><tt>#define</tt> U16_GET_OR_FFFD</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_OSAGE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">utf16.h</td><td class="proto"><tt>#define</tt> U16_NEXT_OR_FFFD</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_TANGUT_COMPONENTS</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">utf16.h</td><td class="proto"><tt>#define</tt> U16_PREV_OR_FFFD</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_TANGUT</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">utf8.h</td><td class="proto"><tt>#define</tt> U8_IS_VALID_LEAD3_AND_T1</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_E_BASE_GAZ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">utf8.h</td><td class="proto"><tt>#define</tt> U8_IS_VALID_LEAD4_AND_T1</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_E_BASE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">utf8.h</td><td class="proto"><tt>#define</tt> U8_LEAD3_T1_BITS</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_E_MODIFIER</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">utf8.h</td><td class="proto"><tt>#define</tt> U8_LEAD4_T1_BITS</td><td class="">(missing)</td><td>Internal<br>
+</td>
</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_GLUE_AFTER_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_AFRICAN_FEH</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_AFRICAN_NOON</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_AFRICAN_QAF</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_E_BASE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_E_MODIFIER</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_E_BASE_GAZ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_E_BASE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_E_MODIFIER</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_GLUE_AFTER_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatBooleanAttribute::UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCH</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatBooleanAttribute::UDAT_PARSE_PARTIAL_LITERAL_MATCH</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row1">
-<td class="file">unistr.h</td><td class="proto"><tt>#define</tt> UNISTR_OBJECT_SIZE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row0">
-<td class="file">unistr.h</td><td class="proto"><tt>static</tt> UnicodeString icu::UnicodeString::fromUTF8(StringPiece)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.2</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">unistr.h</td><td class="proto">void icu::UnicodeString::swap(UnicodeString&) U_NOEXCEPT</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatStyle::UNUM_CURRENCY_STANDARD</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row1">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatStyle::UNUM_DECIMAL_COMPACT_LONG</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatStyle::UNUM_DECIMAL_COMPACT_SHORT</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row1">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_ADLAM</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_BHAIKSUKI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_HAN_WITH_BOPOMOFO</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_JAMO</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_MARCHEN</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_NEWA</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_OSAGE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_SYMBOLS_EMOJI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_checkUTF8(const USpoofChecker*, const char*, int32_t, int32_t*, UErrorCode*)</td><td class="">Deprecated<br>ICU 51</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.2</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_checkUnicodeString(const USpoofChecker*, const icu::UnicodeString&, int32_t*, UErrorCode*)</td><td class="">Deprecated<br>ICU 51</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.2</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
-</tr>
-<tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>#define</tt> NULL</td><td class="">Deprecated<br>ICU 54</td><td>Stable<br>
-<span class="verchange"><span>ICU 2.0</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
-</tr>
</table>
<P></P>
<a href="#_top">(jump back to top)</a>
<hr>
-<a name="added"></a>
-<h2>Added in ICU 58</h2>
+<a name="other"></a>
+<h2>Other existing drafts in ICU 60</h2>
+<div class="other">
<table BORDER="1" class="genTable">
<THEAD>
<tr>
-<th>File</th><th>API</th><th>ICU 57</th><th>ICU 58</th>
+<th>File</th><th>API</th><th>ICU 59</th><th>ICU 60</th>
</tr>
</THEAD>
<tr class="row1">
-<td class="file">bytestrie.h</td><td class="proto">StringPiece icu::BytesTrie::Iterator::getString()</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.8</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> int32_t icu::CaseMap::fold(uint32_t, const char16_t*, int32_t, char16_t*, int32_t, Edits*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">bytestriebuilder.h</td><td class="proto">BytesTrieBuilder& icu::BytesTrieBuilder::add(StringPiece, int32_t, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.8</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> int32_t icu::CaseMap::toLower(const char*, uint32_t, const char16_t*, int32_t, char16_t*, int32_t, Edits*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">compactdecimalformat.h</td><td class="proto">UnicodeString& icu::CompactDecimalFormat::format(StringPiece, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> int32_t icu::CaseMap::toTitle(const char*, uint32_t, BreakIterator*, const char16_t*, int32_t, char16_t*, int32_t, Edits*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">UnicodeString& icu::DecimalFormat::format(StringPiece, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> int32_t icu::CaseMap::toUpper(const char*, uint32_t, const char16_t*, int32_t, char16_t*, int32_t, Edits*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">fmtable.h</td><td class="proto">icu::Formattable::Formattable(StringPiece, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> int32_t icu::CaseMap::utf8Fold(uint32_t, const char*, int32_t, char*, int32_t, Edits*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">fmtable.h</td><td class="proto">void icu::Formattable::setDecimalNumber(StringPiece, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> int32_t icu::CaseMap::utf8ToLower(const char*, uint32_t, const char*, int32_t, char*, int32_t, Edits*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::labelToASCII_UTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.6</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> int32_t icu::CaseMap::utf8ToTitle(const char*, uint32_t, BreakIterator*, const char*, int32_t, char*, int32_t, Edits*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::labelToUnicodeUTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.6</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> int32_t icu::CaseMap::utf8ToUpper(const char*, uint32_t, const char*, int32_t, char*, int32_t, Edits*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::nameToASCII_UTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.6</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">char16_t* icu::Char16Ptr::get()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::nameToUnicodeUTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.6</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">const char16_t* icu::ConstChar16Ptr::get()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">measfmt.h</td><td class="proto">UnicodeString icu::MeasureFormat::getUnitDisplayName(const MeasureUnit&, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::Char16Ptr::Char16Ptr(char16_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createEast(UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::Char16Ptr::Char16Ptr(std::nullptr_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createNorth(UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::Char16Ptr::Char16Ptr(uint16_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createSouth(UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::Char16Ptr::Char16Ptr(wchar_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createWest(UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::Char16Ptr::operator char16_t* ()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">numfmt.h</td><td class="proto">UnicodeString& icu::NumberFormat::format(StringPiece, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::Char16Ptr::~Char16Ptr()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">tznames.h</td><td class="proto">void icu::TimeZoneNames::getDisplayNames(const UnicodeString&, const UTimeZoneNameType types[], int32_t, UDate, UnicodeString dest[], UErrorCode&)</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::ConstChar16Ptr::ConstChar16Ptr(const char16_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">tznames.h</td><td class="proto">void icu::TimeZoneNames::loadAllDisplayNames(UErrorCode&)</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::ConstChar16Ptr::ConstChar16Ptr(const std::nullptr_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">ubiditransform.h</td><td class="proto">UBiDiTransform* ubiditransform_open(UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::ConstChar16Ptr::ConstChar16Ptr(const uint16_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiMirroring::UBIDI_MIRRORING_OFF</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::ConstChar16Ptr::ConstChar16Ptr(const wchar_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiMirroring::UBIDI_MIRRORING_ON</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::ConstChar16Ptr::operator const char16_t* ()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiOrder::UBIDI_LOGICAL</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::ConstChar16Ptr::~ConstChar16Ptr()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiOrder::UBIDI_VISUAL</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">edits.h</td><td class="proto">Iterator icu::Edits::getCoarseChangesIterator()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">ubiditransform.h</td><td class="proto">uint32_t ubiditransform_transform(UBiDiTransform*, const UChar*, int32_t, UChar*, int32_t, UBiDiLevel, UBiDiOrder, UBiDiLevel, UBiDiOrder, UBiDiMirroring, uint32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">edits.h</td><td class="proto">Iterator icu::Edits::getCoarseIterator()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">ubiditransform.h</td><td class="proto">void ubiditransform_close(UBiDiTransform*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">edits.h</td><td class="proto">Iterator icu::Edits::getFineChangesIterator()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_ADLAM</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">edits.h</td><td class="proto">Iterator icu::Edits::getFineIterator()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_BHAIKSUKI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">edits.h</td><td class="proto">UBool icu::Edits::copyErrorTo(UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_CYRILLIC_EXTENDED_C</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">edits.h</td><td class="proto">UBool icu::Edits::hasChanges()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_GLAGOLITIC_SUPPLEMENT</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">edits.h</td><td class="proto">icu::Edits::Edits()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">edits.h</td><td class="proto">icu::Edits::~Edits()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_MARCHEN</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">edits.h</td><td class="proto">int32_t icu::Edits::lengthDelta()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_MONGOLIAN_SUPPLEMENT</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">edits.h</td><td class="proto">void icu::Edits::addReplace(int32_t, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_NEWA</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">edits.h</td><td class="proto">void icu::Edits::addUnchanged(int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_OSAGE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">edits.h</td><td class="proto">void icu::Edits::reset()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_TANGUT_COMPONENTS</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">localpointer.h</td><td class="proto">LocalArray<T>& icu::LocalArray< T >::moveFrom(LocalArray< T >&)</td><td class="" colspan="2" align="center">Draft<br>ICU 56</td>
</tr>
<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_TANGUT</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">localpointer.h</td><td class="proto">LocalPointer<T>& icu::LocalPointer< T >::moveFrom(LocalPointer< T >&)</td><td class="" colspan="2" align="center">Draft<br>ICU 56</td>
</tr>
<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_E_BASE_GAZ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_E_BASE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_E_MODIFIER</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_GLUE_AFTER_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_AFRICAN_FEH</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_AFRICAN_NOON</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_AFRICAN_QAF</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_E_BASE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_E_MODIFIER</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_E_BASE_GAZ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_E_BASE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_E_MODIFIER</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_GLUE_AFTER_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_NO_SUBSTITUTE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_SUBSTITUTE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContextType::UDISPCTX_TYPE_SUBSTITUTE_HANDLING</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">unistr.h</td><td class="proto"><tt>static</tt> UnicodeString icu::UnicodeString::fromUTF8(StringPiece)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.2</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_ADLAM</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_BHAIKSUKI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_HAN_WITH_BOPOMOFO</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_JAMO</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_MARCHEN</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_NEWA</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_OSAGE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_SYMBOLS_EMOJI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uspoof.h</td><td class="proto">URestrictionLevel uspoof_getCheckResultRestrictionLevel(const USpoofCheckResult*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uspoof.h</td><td class="proto">USpoofCheckResult* uspoof_openCheckResult(UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uspoof.h</td><td class="proto">U_DEFINE_LOCAL_OPEN_POINTER(LocalUSpoofCheckResultPointer,,)</td><td class="">(missing)</td><td>
-<br>
-<span class=""><span></span>
-<br>
-<b class="bigwarn" title="A new API was introduced that was not tagged.">(untagged)</b></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uspoof.h</td><td class="proto">U_NAMESPACE_END int32_t uspoof_getCheckResultChecks(const USpoofCheckResult*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uspoof.h</td><td class="proto">const USet* uspoof_getCheckResultNumerics(const USpoofCheckResult*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uspoof.h</td><td class="proto"><tt>enum</tt> URestrictionLevel::USPOOF_UNDEFINED_RESTRICTIVE</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uspoof.h</td><td class="proto"><tt>enum</tt> USpoofChecks::USPOOF_CONFUSABLE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check2(const USpoofChecker*, const UChar*, int32_t, USpoofCheckResult*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check2UTF8(const USpoofChecker*, const char*, int32_t, USpoofCheckResult*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check2UnicodeString(const USpoofChecker*, const icu::UnicodeString&, USpoofCheckResult*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uspoof.h</td><td class="proto">void uspoof_closeCheckResult(USpoofCheckResult*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</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 58</h2>
-<div class="other">
-<table BORDER="1" class="genTable">
-<THEAD>
-<tr>
-<th>File</th><th>API</th><th>ICU 57</th><th>ICU 58</th>
-</tr>
-</THEAD>
-<tr class="row1">
-<td class="file">localpointer.h</td><td class="proto">LocalArray<T>& icu::LocalArray< T >::moveFrom(LocalArray< T >&) U_NOEXCEPT</td><td class="" colspan="2" align="center">Draft<br>ICU 56</td>
-</tr>
-<tr class="row0">
-<td class="file">localpointer.h</td><td class="proto">LocalPointer<T>& icu::LocalPointer< T >::moveFrom(LocalPointer< T >&) U_NOEXCEPT</td><td class="" colspan="2" align="center">Draft<br>ICU 56</td>
-</tr>
-<tr class="row1">
<td class="file">measfmt.h</td><td class="proto">void icu::MeasureFormat::parseObject(const UnicodeString&, Formattable&, ParsePosition&)</td><td class="" colspan="2" align="center">Draft<br>ICU 53</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createGallonImperial(UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPoint(UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMilePerGallonImperial(UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">ubrk.h</td><td class="proto">UBreakIterator* ubrk_openBinaryRules(const uint8_t*, int32_t, const UChar*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMilligramPerDeciliter(UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">ubrk.h</td><td class="proto">int32_t ubrk_getBinaryRules(UBreakIterator*, uint8_t*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMillimolePerLiter(UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">UNISTR_FROM_STRING_EXPLICIT icu::UnicodeString::UnicodeString(const uint16_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPartPerMillion(UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">UNISTR_FROM_STRING_EXPLICIT icu::UnicodeString::UnicodeString(const wchar_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">reldatefmt.h</td><td class="proto">UnicodeString& icu::RelativeDateTimeFormatter::format(double, URelativeDateTimeUnit, UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">UnicodeString& icu::UnicodeString::moveFrom(UnicodeString&)</td><td class="" colspan="2" align="center">Draft<br>ICU 56</td>
</tr>
<tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto">UnicodeString& icu::RelativeDateTimeFormatter::formatNumeric(double, URelativeDateTimeUnit, UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(const std::nullptr_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">simpleformatter.h</td><td class="proto">SimpleFormatter& icu::SimpleFormatter::operator=(const SimpleFormatter&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(const std::nullptr_t, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">simpleformatter.h</td><td class="proto">UBool icu::SimpleFormatter::applyPattern(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(const uint16_t*, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">simpleformatter.h</td><td class="proto">UBool icu::SimpleFormatter::applyPatternMinMaxArguments(const UnicodeString&, int32_t, int32_t, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(const wchar_t*, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">simpleformatter.h</td><td class="proto">UnicodeString icu::SimpleFormatter::getTextWithNoArguments()</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(std::nullptr_t, int32_t, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">simpleformatter.h</td><td class="proto">UnicodeString& icu::SimpleFormatter::format(const UnicodeString&, UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(uint16_t*, int32_t, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">simpleformatter.h</td><td class="proto">UnicodeString& icu::SimpleFormatter::format(const UnicodeString&, const UnicodeString&, UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(wchar_t*, int32_t, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">simpleformatter.h</td><td class="proto">UnicodeString& icu::SimpleFormatter::format(const UnicodeString&, const UnicodeString&, const UnicodeString&, UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unum.h</td><td class="proto">int32_t unum_formatDoubleForFields(const UNumberFormat*, double, UChar*, int32_t, UFieldPositionIterator*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row0">
-<td class="file">simpleformatter.h</td><td class="proto">UnicodeString& icu::SimpleFormatter::formatAndAppend(const UnicodeString* const*, int32_t, UnicodeString&, int32_t*, int32_t, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">upluralrules.h</td><td class="proto">UEnumeration* uplrules_getKeywords(const UPluralRules*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
</tr>
<tr class="row1">
-<td class="file">simpleformatter.h</td><td class="proto">UnicodeString& icu::SimpleFormatter::formatAndReplace(const UnicodeString* const*, int32_t, UnicodeString&, int32_t*, int32_t, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">simpleformatter.h</td><td class="proto">icu::SimpleFormatter::SimpleFormatter()</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">simpleformatter.h</td><td class="proto">icu::SimpleFormatter::SimpleFormatter(const SimpleFormatter&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">simpleformatter.h</td><td class="proto">icu::SimpleFormatter::SimpleFormatter(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">simpleformatter.h</td><td class="proto">icu::SimpleFormatter::SimpleFormatter(const UnicodeString&, int32_t, int32_t, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">simpleformatter.h</td><td class="proto">icu::SimpleFormatter::~SimpleFormatter()</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">simpleformatter.h</td><td class="proto">int32_t icu::SimpleFormatter::getArgumentLimit()</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_EMOJI_MODIFIER_BASE</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_EMOJI_MODIFIER</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_EMOJI_PRESENTATION</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_EMOJI</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatField::UDAT_AM_PM_MIDNIGHT_NOON_FIELD</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">unistr.h</td><td class="proto">UnicodeString& icu::UnicodeString::moveFrom(UnicodeString&) U_NOEXCEPT</td><td class="" colspan="2" align="center">Draft<br>ICU 56</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>
</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto">URelativeDateTimeFormatter* ureldatefmt_open(const char*, UNumberFormat*, UDateRelativeDateTimeFormatterStyle, UDisplayContext, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_DAY</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_FRIDAY</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_HOUR</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_MINUTE</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_MONDAY</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_MONTH</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_QUARTER</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_SATURDAY</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_SECOND</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_SUNDAY</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_THURSDAY</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_TUESDAY</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_WEDNESDAY</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_WEEK</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_YEAR</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto">int32_t ureldatefmt_combineDateAndTime(const URelativeDateTimeFormatter*, const UChar*, int32_t, const UChar*, int32_t, UChar*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto">int32_t ureldatefmt_format(const URelativeDateTimeFormatter*, double, URelativeDateTimeUnit, UChar*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto">int32_t ureldatefmt_formatNumeric(const URelativeDateTimeFormatter*, double, URelativeDateTimeUnit, UChar*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto">void ureldatefmt_close(URelativeDateTimeFormatter*)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
</table>
</div>
<P></P>
@@ -3191,13 +1335,12 @@
<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></ul>
</div>
<P></P>
<a href="#_top">(jump back to top)</a>
<hr>
<p>
-<i><font size="-1">Contents generated by StableAPI tool on Thu Sep 22 11:14:21 PDT 2016<br>Copyright (C) 2016, International Business Machines Corporation, All Rights Reserved.</font></i>
+<i><font size="-1">Contents generated by StableAPI tool on Wed Oct 04 23:55:39 UTC 2017<br>Copyright (C) 2017, International Business Machines Corporation, All Rights Reserved.</font></i>
</p>
</body>
</html>
Modified: trunk/Build/source/libs/icu/icu-src/LICENSE
===================================================================
--- trunk/Build/source/libs/icu/icu-src/LICENSE 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/LICENSE 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,6 +1,6 @@
COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later)
-Copyright © 1991-2016 Unicode, Inc. All rights reserved.
+Copyright © 1991-2017 Unicode, Inc. All rights reserved.
Distributed under the Terms of Use in http://www.unicode.org/copyright.html
Permission is hereby granted, free of charge, to any person obtaining
@@ -131,7 +131,7 @@
# ---------COPYING.libtabe ---- BEGIN--------------------
#
# /*
- # * Copyrighy (c) 1999 TaBE Project.
+ # * Copyright (c) 1999 TaBE Project.
# * Copyright (c) 1999 Pai-Hsiang Hsiao.
# * All rights reserved.
# *
Modified: trunk/Build/source/libs/icu/icu-src/license.html
===================================================================
--- trunk/Build/source/libs/icu/icu-src/license.html 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/license.html 2018-01-12 18:35:28 UTC (rev 46290)
@@ -11,8 +11,8 @@
The ICU license is now in plain text format, see <a href="./LICENSE">LICENSE</a>.
Update links and software appropriately.
</p>
- <i>Copyright (C) 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html</i>
- <i>Copyright (c) 1995-2016 International Business Machines Corporation and others</i>
+ <i>© 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html</i>
+ <i>© 1995-2016 International Business Machines Corporation and others</i>
</body>
</html>
Modified: trunk/Build/source/libs/icu/icu-src/readme.html
===================================================================
--- trunk/Build/source/libs/icu/icu-src/readme.html 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/readme.html 2018-01-12 18:35:28 UTC (rev 46290)
@@ -3,7 +3,7 @@
<html lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
<head>
- <title>ReadMe for ICU 58.2</title>
+ <title>ReadMe for ICU 60.2</title>
<meta name="COPYRIGHT" content=
"Copyright (C) 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html"/>
<!-- meta name="COPYRIGHT" content=
@@ -32,7 +32,7 @@
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> 58.2 ReadMe
+ <abbr title="International Components for Unicode">ICU</abbr> 60.2 ReadMe
</h1>
<!-- Shouldn't need to comment/uncomment this paragraph, just change the body class -->
@@ -44,12 +44,15 @@
<p class="note only-rc">This is a release candidate version of ICU4C.
It is not recommended for production use.</p>
- <p>Last updated: 2016-Dec-8<br/>
+ <p>Last updated: 2017-Dec-07<br/>
Copyright © 2016 and later: Unicode, Inc. and others. License & terms of use:
<a href="http://www.unicode.org/copyright.html">http://www.unicode.org/copyright.html</a><br/>
Copyright © 1997-2016 International Business Machines Corporation and others.
All Rights Reserved.</p>
<!-- Remember that there is a copyright at the end too -->
+
+ <p class="note">This is a maintenance update of ICU 60,
+ with a small number of bug fixes but no API changes.</p>
<hr/>
<h2 class="TOC">Table of Contents</h2>
@@ -59,10 +62,8 @@
<li><a href="#GettingStarted">Getting Started</a></li>
- <li><a href="#News">What Is New In This release?</a></li>
+ <li><a href="#News">What Is New In This Release?</a></li>
- <li><a href="#RecentPreviousChanges">Changes in recent previous releases</a></li>
-
<li><a href="#Download">How To Download the Source Code</a></li>
<li><a href="#SourceCode">ICU Source Code Organization</a></li>
@@ -230,149 +231,25 @@
</table>
<p><strong>Important:</strong> Please make sure you understand the <a href=
- "http://source.icu-project.org/repos/icu/icu/trunk/LICENSE">Copyright and License Information</a>.</p>
+ "http://source.icu-project.org/repos/icu/trunk/icu4c/LICENSE">Copyright and License Information</a>.</p>
- <h2><a name="News" href="#News" id="News">What is new in this
- release?</a></h2>
- <h3>New License</h3>
- <p>This is the first release of ICU since the project
- <a href="http://blog.unicode.org/2016/05/icu-joins-unicode-consortium.html">joined
- the Unicode Consortium</a>. The license has changed to the
- <a href="http://www.unicode.org/copyright.html#License">Unicode license</a>
- (which is similar to the ICU 1.8.1-57 license).</p>
+ <h2><a name="News" href="#News" id="News">What Is New In This Release?</a></h2>
- <h3>Layout Engine Removed</h3>
- <p>The LayoutEngine was deprecated in ICU 54 and has now been removed.
- see <a href='http://userguide.icu-project.org/layoutengine'>the
- User's Guide</a> for more details and migration recommendations.
- </p>
- <p>
- Note that the ParagraphLayout (layoutex) library is not deprecated.
- There is a new option, <tt>--enable-layoutex</tt> which will build
- the ParagraphLayout library using <a href="http://harfbuzz.org">HarfBuzz</a>
- instead of ICU as the layout engine. See <a href="http://userguide.icu-project.org/layoutengine">
- the users' guide</a> for more information about how to build.
- </p>
- <p>
- The options <tt>--disable-layout</tt>
- or <tt>--with-layout=false</tt> are being retained for
- compatibility, but have no effect.
- </p>
+ <p>See the <a href="http://site.icu-project.org/download/60">ICU 60 download page</a>
+ for an overview of this release, important changes, new features, bug fixes, known issues,
+ changes to supported platforms and build environments,
+ and migration issues for existing applications migrating from previous ICU releases.</p>
- <h3>Changes in CLDR 30 data</h3>
- <ul>
- <li>For some combinations of numbering system (arab, arabext, latn) and/or locale
- (ar, fa, he), there were changes to the bidirectional control characters used
- with certain symbols (percent, minus, plus), and changes to number patterns
- (currency and/or percent, including addition of bidirectional control
- characters in some cases).</li>
- <li>The bidirectional controls used for such purposes now include U+061C ARABIC
- LETTER MARK (ALM), which requires use of the bidirectional algorithm from
- Unicode 6.3 or later.</li>
- <li>The time separator for Norwegian locales (nb, nn) was changed to be ‘:’
- throughout.</li>
- <li>For more information on CLDR 30 changes, see
- <a href="http://cldr.unicode.org/index/downloads/cldr-30">CLDR 30 download
- page</a>.</li>
- </ul>
+ <p>See the <a href="APIChangeReport.html">API Change Report</a> for a complete list of
+ APIs added, removed, or changed in this release.</p>
- <h3>Windows build changes</h3>
- <p>Windows builds using Visual Studio now require Visual Studio 2015; otherwise you can
- use cygwin or similar to build for Windows.</p>
+ <p><a name="RecentPreviousChanges" id="RecentPreviousChanges"></a>For
+ changes in previous releases, see the
+ main <a href="http://site.icu-project.org/download">ICU download page</a>
+ with its version-specific subpages.</p>
- <h3>API Changes</h3>
- <p>See the <a href="APIChangeReport.html">API Change Report</a> for a complete
- list of APIs added, removed, or changed in this release.</p>
- <!-- standing item -->
- <h3>Full release notes and the latest updates</h3>
- <p>The previous list concentrates on <em>changes that affect existing
- applications migrating from previous ICU releases</em>.
- For more news about this release, as well as late-breaking news, see the
- <a href="http://site.icu-project.org/download/57">ICU download page</a>.</p>
-
- <h3>Upcoming changes</h3>
- <p>Please note the following changes planned for an upcoming ICU4C release (likely ICU 59):</p>
- <ul>
- <li>Compiler support for C++11 will be required.</li>
- <li>Support for Windows XP will be removed.</li>
- </ul>
-
- <h2><a name="RecentPreviousChanges" href="#RecentPreviousChanges" id="RecentPreviousChanges">Changes in recent
- previous releases</a></h2>
-
- <!-- ICU 57 items -->
- <h3>ICU 57: Changes related to new CLDR data and specifications</h3>
- <ul>
- <li>Time formats may include the new day period characters b, B, and
- these may produced in response to the new skeleton character C used
- with DateTimePatternGenerator.</li>
- <li>In day period rules, the use of "after" has been deprecated.</li>
- <li>The measurement unit "proportion-karat" has been renamed to
- "concentr-karat".</li>
- </ul>
-
- <!-- ICU 56 items -->
- <h3>ICU 56: COLON withdrawn as date/time pattern character</h3>
- <p>In ICU 55, COLON was introduced as a date/time pattern character
- to be replaced by the value of the timeSeparator for the number
- system being used; a corresponding new UDateFormatField
- UDAT_TIME_SEPARATOR_FIELD was added. Use of COLON caused some
- backwards compatibility problems, so it is being withdrawn as a
- pattern character. However, UDAT_TIME_SEPARATOR_FIELD remains
- as does the mechanism for replacing a pattern character with the
- value of the timeSeparator; a new pattern character may be
- assigned in the future.</p>
-
- <h3>ICU 56: ICU Plugins are disabled by default</h3>
- <p>ICU Plugins are now disabled by default. They may be enabled
- with the configure option
- <tt>--enable-plugins</tt> or by means of
- <tt>#define UCONFIG_ENABLE_PLUGINS</tt>.
- </p>
-
- <h3>ICU 55: Deprecations in PluralRules (plurrule.h)</h3>
- <p>The following PluralRules methods never had an implementation
- but were inadvertently marked @stable; they have now been
- deprecated. [#<a href="http://bugs.icu-project.org/trac/ticket/10759">10759</a>]</p>
- <ul>
- <li><tt>double icu::PluralRules::getUniqueKeywordValue(const UnicodeString&)</tt></li>
- <li><tt>int32_t icu::PluralRules::getAllKeywordValues(const UnicodeString&, double*, int32_t, UErrorCode&)</tt></li>
- </ul>
-
- <h3>ICU 55: Deprecate uidna.h functions for IDNA2003 support</h3>
- <p>The IDNA2003 API has been deprecated; use the API for IDNA2008 / UTS #46 instead via
- uidna_openUTS46() or class IDNA [#<a href="http://bugs.icu-project.org/trac/ticket/8477">8477</a>].
- This applies to the following:</p>
- <ul>
- <li><tt>enum value UIDNA_ALLOW_UNASSIGNED</tt></li>
- <li><tt>uidna_IDNToASCII</tt></li>
- <li><tt>uidna_IDNToUnicode</tt></li>
- <li><tt>uidna_compare</tt></li>
- <li><tt>uidna_toASCII</tt></li>
- <li><tt>uidna_toUnicode</tt></li>
- </ul>
-
- <h3>ICU 54: Deprecation of Collation Short Strings</h3>
- <p>The collation short naming scheme and its API functions are deprecated.
- Use ucol_open() with language tag collation keywords instead (see <a href="http://userguide.icu-project.org/collation/api">Collation API Details</a>). For example, <code>ucol_open("de-u-co-phonebk-ka-shifted", &errorCode)</code>
- for German Phonebook order with "ignore punctuation" mode.</p>
-
- <h3>ICU 54: Deprecation of UCOL_TAILORINGS_VERSION</h3>
- <p>This was originally intended to be the version of collation tailorings,
- but that information is actually in the tailorings data and this
- constant has always been (and now will continue to be) 1.</p>
-
- <!-- ICU 53 items -->
- <h3>ICU 53: Deprecation of TimeUnitFormat</h3>
- <p>The TimeUnitFormat and its methods were actually deprecated in ICU 53 and the
- class as a whole was tagged as deprecated in that release, but the status tags for
- the individual methods did not correctly indicate the deprecated status; they
- do as of ICU 54. Use the MeasureFormat class and its methods instead.</p>
-
- <!-- end of What's New items -->
-
<h2><a name="Download" href="#Download" id="Download">How To Download the
Source Code</a></h2>
@@ -505,13 +382,32 @@
<li><b>brkitr/</b> Data files for character, word, sentence, title
casing and line boundary analysis.</li>
+ <li><b>coll/</b> Data for collation tailorings. The makefile
+ <b>colfiles.mk</b> contains the list of resource bundle files.</li>
+
<li><b>locales/</b> These .txt files contain ICU language and
culture-specific localization data. Two special bundles are
<b>root</b>, which is the fallback data and parent of other bundles,
and <b>index</b>, which contains a list of installed bundles. The
makefile <b>resfiles.mk</b> contains the list of resource bundle
- files.</li>
+ files. Some of the locale data is split out into the type-specific
+ directories curr, lang, region, unit, and zone, described below.</li>
+ <li><b>curr/</b> Locale data for currency symbols and names (including
+ plural forms), with its own makefile <b>resfiles.mk</b>.</li>
+
+ <li><b>lang/</b> Locale data for names of languages, scripts, and locale
+ key names and values, with its own makefile <b>resfiles.mk</b>.</li>
+
+ <li><b>region/</b> Locale data for names of regions, with its own
+ makefile <b>resfiles.mk</b>.</li>
+
+ <li><b>unit/</b> Locale data for measurement unit patterns and names,
+ with its own makefile <b>resfiles.mk</b>.</li>
+
+ <li><b>zone/</b> Locale data for time zone names, with its own
+ makefile <b>resfiles.mk</b>.</li>
+
<li><b>mappings/</b> Here are the code page converter tables. These
.ucm files contain mappings to and from Unicode. These are compiled
into .cnv files. <b>convrtrs.txt</b> is the alias mapping table from
@@ -532,9 +428,9 @@
information.</li>
<li><b>misc/</b> The misc directory contains other data files which
- did not fit into the above categories. Currently it only contains
- time zone information, and a name preperation file for <a href=
- "http://www.ietf.org/rfc/rfc3490.txt">IDNA</a>.</li>
+ did not fit into the above categories, including time zone
+ information, region-specific data, and other data derived from CLDR
+ supplemental data.</li>
<li><b>out/</b> This directory contains the assembled memory mapped
files.</li>
@@ -690,7 +586,7 @@
we recommend hardcoding ICU's default charset to UTF-8.
This means that some implementation code becomes simpler and faster,
and statically linked ICU libraries become smaller.
- (See the <a href="http://icu-project.org/apiref/icu4c/utypes_8h.html#0a33e1edf3cd23d9e9c972b63c9f7943">U_CHARSET_IS_UTF8</a>
+ (See the <a href="http://icu-project.org/apiref/icu4c/platform_8h.html#a0a33e1edf3cd23d9e9c972b63c9f7943">U_CHARSET_IS_UTF8</a>
API documentation for more details.)<br />
You can <code>-DU_CHARSET_IS_UTF8=1</code> or
modify unicode/utypes.h (in ICU 4.8 and below)
@@ -737,6 +633,14 @@
(via -D or uconfig.h, as above)
and include those header files explicitly that you actually need.<br />
Note: The ICU test suites cannot be compiled with this setting.</li>
+ <li><b>utf_old.h:</b>
+ All of utf_old.h is deprecated or obsolete.<br />
+ Beginning with ICU 60,
+ you should define <code>U_HIDE_OBSOLETE_UTF_OLD_H</code> to 1
+ (via -D or uconfig.h, as above).
+ Use of any of these macros should be replaced as noted
+ in the comments for the obsolete macro.<br />
+ Note: The ICU test suites <i>can</i> be compiled with this setting.</li>
<li><b>.dat file:</b> By default, the ICU data is built into
a shared library (DLL). This is convenient because it requires no
install-time or runtime configuration,
@@ -779,7 +683,7 @@
source file tree clean and have build output files written to
a different location. This is called an "out-of-source build".
Simply invoke the configure script from the target location:
-<pre>~/icu$ svn export http://source.icu-project.org/repos/icu/icu/trunk
+<pre>~/icu$ svn export http://source.icu-project.org/repos/icu/trunk/icu4c
~/icu$ mkdir trunk-dev
~/icu$ cd trunk-dev
~/icu/trunk-dev$ ../trunk/source/runConfigureICU Linux
@@ -851,7 +755,9 @@
<ul>
<li>Microsoft Windows</li>
- <li>Microsoft Visual C++ (see the ICU download page for the currently compatible version)</li>
+ <li>Microsoft Visual C++ (part of <a href="https://www.visualstudio.com/">Visual Studio</a>) (see the ICU download page for the currently compatible version)</li>
+
+ <li><i><b>Optional:</b></i> A version of the <a href="https://developer.microsoft.com/windows/downloads">Windows 10 SDK</a> (if you want to build the UWP projects)</li>
</ul>
<p class="note"><a href="#HowToBuildCygwin">Cygwin</a> is required if using a version of MSVC other than the one
compatible with the supplied project files or if other compilers are used to build ICU. (e.g. GCC)</p>
@@ -874,6 +780,11 @@
"#HowToBuildWindowsCommandLine">command line note below</a> if you want to
build from the command line instead.</li>
+ <li>You may need to re-target the UWP projects to the version of the SDK that you have installed. In Visual Studio you can
+ right-click on the UWP projects and select the option 'Retarget SDK Version'. Note: You do not need to have a copy of
+ the Windows 10 SDK installed in order to build the non-UWP projects in Visual Studio. If the SDK is not installed then the
+ UWP projects will simply not be loaded.</li>
+
<li>Set the active platform to "Win32" or "x64" (See <a href="#HowToBuildWindowsPlatform">Windows platform note</a> below)
and configuration to "Debug" or "Release" (See <a href="#HowToBuildWindowsConfig">Windows configuration note</a> below).</li>
@@ -932,9 +843,11 @@
"HowToBuildWindowsCommandLine"><strong>Using MSDEV At The Command Line
Note:</strong></a> You can build ICU from the command line. Assuming that you
have properly installed Microsoft Visual C++ to support command line
- execution, you can run the following command, 'devenv.com
- <i><ICU></i>\source\allinone\allinone.sln /build "Win32|Release"'. You can also
- use Cygwin with this compiler to build ICU, and you can refer to the <a href=
+ execution, you can run the following command to build the 32-bit Release version:
+ <code>'devenv.com <i><ICU></i>\source\allinone\allinone.sln /build "Release|Win32"'</code>.
+ Or to build the 64-bit Release version from the command line:
+ <code>'devenv.com <i><ICU></i>\source\allinone\allinone.sln /build "Release|x64"'</code>.
+ <br />You can also use Cygwin with this compiler to build ICU, and you can refer to the <a href=
"#HowToBuildCygwin">How To Build And Install On Windows with Cygwin</a>
section for more details.</p>
@@ -981,7 +894,7 @@
<ul>
<li>Microsoft Windows</li>
- <li>Microsoft Visual C++ (when gcc isn't used).</li>
+ <li>Microsoft Visual C++ (from Visual Studio 2015 or newer, when gcc isn't used).</li>
<li>
Cygwin with the following installed:
@@ -1016,11 +929,11 @@
Visual C++ compiler will not work with a bash command prompt.</li>
<li>If the computer isn't set up to use Visual C++ from the command line,
- you need to run vcvars32.bat.<br />For example:<br />"<tt>C:\Program Files\Microsoft
- Visual Studio 8\VC\bin\vcvars32.bat</tt>" can be used for 32-bit builds
- <strong>or</strong> <br />"<tt>C:\Program Files (x86)\Microsoft Visual Studio
- 8\VC\bin\amd64\vcvarsamd64.bat</tt>" can be used for 64-bit builds on
- Windows x64.</li>
+ you need to run vcvars32.bat.<br />For example:<br />
+ "<tt>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat</tt>"
+ can be used for 32-bit builds <strong>or</strong> <br />
+ "<tt>C:\Program Files (x86)\Microsoft Visual Studio 14\VC\bin\x86_amd64\vcvarsx86_amd64.bat</tt>"
+ can be used for 64-bit builds on Windows x64.</li>
<li>Unzip the icu-XXXX.zip file into any convenient location. Using command
line zip, type "unzip -a icu-XXXX.zip -d drive:\directory", or just use
@@ -1229,9 +1142,9 @@
configure option.</li>
<li>The latest versions of z/OS use <a
- href="http://www.ibm.com/support/docview.wss?uid=swg2120240">XPLINK
+ href="https://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.cbcux01/oebind6.htm">XPLINK
version (C128) of the C++ standard library</a> by default. You may see <a
- href="http://www.ibm.com/support/docview.wss?uid=swg21376279">an
+ href="https://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.cbcux01/oebind5.htm">an
error</a> when running with XPLINK disabled. To avoid this error,
set the following environment variable or similar:
@@ -1405,7 +1318,7 @@
<li>Test ICU. <pre><samp>gmake check</samp></pre>
(The <tt> QIBM_MULTI_THREADED=Y</tt> flag will be automatically applied to intltest -
you can look at the <a href=
- "http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=/apis/concept4.htm">
+ "https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzahw/rzahwceeco.htm">
iSeries Information Center</a> for more details regarding the running of multiple threads
on IBM i.)</li>
</ol>
@@ -1657,7 +1570,7 @@
<p>In order to avoid synchronization and threading issues, developers are
<strong>suggested</strong> to strictly follow the compiling and linking
guidelines for multithreaded applications, specified in the following
- document from Sun Microsystems. Most notably, pay strict attention to the
+ SUn Solaris document available from Oracle. Most notably, pay strict attention to the
following statements from Sun:</p>
<blockquote>
@@ -1671,11 +1584,16 @@
<p>Failure to do this may cause spurious lock conflicts, recursive mutex
failure, and deadlock.</p>
- <p>Source: "<i>Solaris Multithreaded Programming Guide, Compiling and
- Debugging</i>", Sun Microsystems, Inc., Apr 2004<br />
+ <p>Source: "<i>Multithreaded Programming Guide, Compiling and
+ Debugging</i>", Sun Microsystems, 2002 <br />
<a href=
- "http://docs.sun.com/app/docs/doc/816-5137/6mba5vpke?a=view">http://docs.sun.com/app/docs/doc/816-5137/6mba5vpke?a=view</a></p>
+ "https://docs.oracle.com/cd/E19683-01/806-6867/compile-74765/index.html">https://docs.oracle.com/cd/E19683-01/806-6867/compile-74765/index.html</a></p>
+ <p>Note, a version of that chapter from a 2008 document update covering both Solaris 9
+ and Solaris 10 is available here:<br />
+ <a href=
+ "http://docs.oracle.com/cd/E19253-01/816-5137/compile-94179/index.html">http://docs.oracle.com/cd/E19253-01/816-5137/compile-94179/index.html</a></p>
+
<h3><a name="ImportantNotesWindows" href="#ImportantNotesWindows" id=
"ImportantNotesWindows">Windows Platform</a></h3>
Modified: trunk/Build/source/libs/icu/icu-src/source/Doxyfile.in
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/Doxyfile.in 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/Doxyfile.in 2018-01-12 18:35:28 UTC (rev 46290)
@@ -194,7 +194,7 @@
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
-PREDEFINED = U_EXPORT2= U_STABLE= U_DRAFT= U_INTERNAL= U_SYSTEM= U_DEPRECATED= U_OBSOLETE= U_CALLCONV= U_CDECL_BEGIN= U_CDECL_END= U_NO_THROW=\ "U_NAMESPACE_BEGIN=namespace icu{" "U_NAMESPACE_END=}" U_HAVE_STD_STRING=1 U_SHOW_CPLUSPLUS_API=1 U_DEFINE_LOCAL_OPEN_POINTER()= U_IN_DOXYGEN=1 U_OVERRIDE= U_FINAL= UCONFIG_ENABLE_PLUGINS=1
+PREDEFINED = U_EXPORT2= U_STABLE= U_DRAFT= U_INTERNAL= U_SYSTEM= U_DEPRECATED= U_OBSOLETE= U_CALLCONV_FPTR= U_CALLCONV= U_CDECL_BEGIN= U_CDECL_END= U_NO_THROW=\ "U_NAMESPACE_BEGIN=namespace icu{" "U_NAMESPACE_END=}" U_SHOW_CPLUSPLUS_API=1 U_DEFINE_LOCAL_OPEN_POINTER()= U_IN_DOXYGEN=1 U_OVERRIDE= U_FINAL=final UCONFIG_ENABLE_PLUGINS=1 U_CHAR16_IS_TYPEDEF=0 U_CPLUSPLUS_VERSION=11 U_WCHAR_IS_UTF16 U_NOEXCEPT=
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
Modified: trunk/Build/source/libs/icu/icu-src/source/Makefile.in
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/Makefile.in 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/Makefile.in 2018-01-12 18:35:28 UTC (rev 46290)
@@ -34,9 +34,11 @@
@LAYOUTEX_TRUE at LAYOUTEX = layoutex
@ICUIO_TRUE at ICUIO = io
@EXTRAS_TRUE at EXTRA = extra
- at TESTS_TRUE@TEST = test
+# need tools for tests
+ at TOOLS_TRUE@@TESTS_TRUE at TEST = test
@SAMPLES_TRUE at SAMPLE = samples
@TOOLS_TRUE at TOOLS = tools
+ at TOOLS_TRUE@DATASUBDIR = data
## pkgconfig setup. Always have uc and i18n. Others are optional.
ALL_PKGCONFIG_SUFFIX=uc i18n
@@ -58,7 +60,7 @@
LOCAL_BUILT_FILES = icudefs.mk config/icucross.mk config/icucross.inc
DOCDIRS = common i18n
-SUBDIRS = stubdata common i18n $(LAYOUTEX) $(ICUIO) $(TOOLS) data $(EXTRA) $(SAMPLE) $(TEST)
+SUBDIRS = stubdata common i18n $(LAYOUTEX) $(ICUIO) $(TOOLS) $(DATASUBDIR) $(EXTRA) $(SAMPLE) $(TEST)
SECTION = 1
@@ -85,7 +87,7 @@
install: install-recursive install-local
clean: clean-recursive-with-twist clean-local
distclean : distclean-recursive distclean-local
-dist: dist-recursive dist-local
+dist: dist-recursive
check: all check-recursive
check-recursive: all
xcheck: all xcheck-recursive
@@ -140,6 +142,10 @@
## Recursive targets
all-recursive install-recursive clean-recursive distclean-recursive dist-recursive check-recursive check-exhaustive-recursive: $(LIBDIR) $(BINDIR)
+ifneq ($(NEED_ESCAPING),)
+ @echo "building tools/escapesrc (Needed for this platform with NEED_ESCAPING)"
+ @(cd tools/escapesrc && $(MAKE) RECURSIVE=YES $$local_target) || exit
+endif
@dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(LOCAL_SUBDIRS)'; for subdir in $$list; do \
@@ -323,9 +329,10 @@
-$(RMV) $@
$(INSTALL_SCRIPT) $(top_srcdir)/config/icu-config-top $@
chmod u+w $@
+ @echo "# Following from icu/icu4c/source/config/Makefile.inc" >> $@
+ LC_ALL=C $(SED) -f $(top_srcdir)/config/make2sh.sed < $(top_builddir)/config/Makefile.inc | grep -v '#M#' | uniq >> $@
@echo "# Following from @platform_make_fragment@" >> $@
- LC_ALL=C sed -f $(top_srcdir)/config/make2sh.sed < $(top_builddir)/config/Makefile.inc | grep -v '#M#' | uniq >> $@
- LC_ALL=C sed -f $(top_srcdir)/config/make2sh.sed < @platform_make_fragment@ | grep -v '#M#' | uniq >> $@
+ LC_ALL=C $(SED) -f $(top_srcdir)/config/make2sh.sed < @platform_make_fragment@ | grep -v '#M#' | uniq >> $@
cat $(top_srcdir)/config/icu-config-bottom >> $@
chmod u-w $@
Modified: trunk/Build/source/libs/icu/icu-src/source/allinone/allinone.sln
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/allinone/allinone.sln 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/allinone/allinone.sln 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,5 +1,7 @@
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cal", "..\samples\cal\cal.vcxproj", "{F7659D77-09CF-4FE9-ACEE-927287AA9509}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cintltst", "..\test\cintltst\cintltst.vcxproj", "{3D1246AE-1B32-479B-BECA-AEFA97BE2321}"
@@ -61,268 +63,354 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testplug", "..\tools\icuinfo\testplug.vcxproj", "{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makedata_uwp", "..\data\makedata_uwp.vcxproj", "{B1D53358-37BD-48BC-B27C-68BAF1E78508}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "i18n_uwp", "..\i18n\i18n_uwp.vcxproj", "{6786C051-383B-47E0-9E82-B8B994E06A25}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common_uwp", "..\common\common_uwp.vcxproj", "{C10CF34B-3F79-430E-AD38-5A32DC0589C2}"
+EndProject
Global
- GlobalSection(SubversionScc) = preSolution
- Svn-Managed = True
- Manager = AnkhSVN - Subversion Support for Visual Studio
- EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|ARM = Debug|ARM
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
+ Release|ARM = Release|ARM
Release|Win32 = Release|Win32
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|ARM.ActiveCfg = Debug|Win32
{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|Win32.ActiveCfg = Debug|Win32
{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|Win32.Build.0 = Debug|Win32
{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|x64.ActiveCfg = Debug|x64
{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|x64.Build.0 = Debug|x64
+ {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|ARM.ActiveCfg = Release|Win32
{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|Win32.ActiveCfg = Release|Win32
{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|Win32.Build.0 = Release|Win32
{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|x64.ActiveCfg = Release|x64
{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|x64.Build.0 = Release|x64
+ {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|ARM.ActiveCfg = Debug|Win32
{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|Win32.ActiveCfg = Debug|Win32
{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|Win32.Build.0 = Debug|Win32
{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|x64.ActiveCfg = Debug|x64
{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|x64.Build.0 = Debug|x64
+ {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|ARM.ActiveCfg = Release|Win32
{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|Win32.ActiveCfg = Release|Win32
{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|Win32.Build.0 = Release|Win32
{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|x64.ActiveCfg = Release|x64
{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|x64.Build.0 = Release|x64
+ {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|ARM.ActiveCfg = Debug|Win32
{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|Win32.ActiveCfg = Debug|Win32
{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|Win32.Build.0 = Debug|Win32
{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|x64.ActiveCfg = Debug|x64
{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|x64.Build.0 = Debug|x64
+ {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|ARM.ActiveCfg = Release|Win32
{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|Win32.ActiveCfg = Release|Win32
{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|Win32.Build.0 = Release|Win32
{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|x64.ActiveCfg = Release|x64
{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|x64.Build.0 = Release|x64
+ {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|ARM.ActiveCfg = Debug|Win32
{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|Win32.ActiveCfg = Debug|Win32
{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|Win32.Build.0 = Debug|Win32
{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|x64.ActiveCfg = Debug|x64
{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|x64.Build.0 = Debug|x64
+ {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|ARM.ActiveCfg = Release|Win32
{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|Win32.ActiveCfg = Release|Win32
{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|Win32.Build.0 = Release|Win32
{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|x64.ActiveCfg = Release|x64
{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|x64.Build.0 = Release|x64
+ {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|ARM.ActiveCfg = Debug|Win32
{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|Win32.ActiveCfg = Debug|Win32
{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|Win32.Build.0 = Debug|Win32
{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|x64.ActiveCfg = Debug|x64
{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|x64.Build.0 = Debug|x64
+ {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|ARM.ActiveCfg = Release|Win32
{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|Win32.ActiveCfg = Release|Win32
{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|Win32.Build.0 = Release|Win32
{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|x64.ActiveCfg = Release|x64
{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|x64.Build.0 = Release|x64
+ {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|ARM.ActiveCfg = Debug|Win32
{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|Win32.ActiveCfg = Debug|Win32
{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|Win32.Build.0 = Debug|Win32
{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|x64.ActiveCfg = Debug|x64
{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|x64.Build.0 = Debug|x64
+ {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|ARM.ActiveCfg = Release|Win32
{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|Win32.ActiveCfg = Release|Win32
{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|Win32.Build.0 = Release|Win32
{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|x64.ActiveCfg = Release|x64
{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|x64.Build.0 = Release|x64
+ {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|ARM.ActiveCfg = Debug|Win32
{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|Win32.ActiveCfg = Debug|Win32
{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|Win32.Build.0 = Debug|Win32
{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|x64.ActiveCfg = Debug|x64
{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|x64.Build.0 = Debug|x64
+ {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|ARM.ActiveCfg = Release|Win32
{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|Win32.ActiveCfg = Release|Win32
{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|Win32.Build.0 = Release|Win32
{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|x64.ActiveCfg = Release|x64
{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|x64.Build.0 = Release|x64
+ {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|ARM.ActiveCfg = Debug|Win32
{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|Win32.ActiveCfg = Debug|Win32
{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|Win32.Build.0 = Debug|Win32
{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|x64.ActiveCfg = Debug|x64
{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|x64.Build.0 = Debug|x64
+ {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|ARM.ActiveCfg = Release|Win32
{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|Win32.ActiveCfg = Release|Win32
{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|Win32.Build.0 = Release|Win32
{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|x64.ActiveCfg = Release|x64
{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|x64.Build.0 = Release|x64
+ {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|ARM.ActiveCfg = Debug|Win32
{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|Win32.ActiveCfg = Debug|Win32
{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|Win32.Build.0 = Debug|Win32
{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|x64.ActiveCfg = Debug|x64
{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|x64.Build.0 = Debug|x64
+ {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|ARM.ActiveCfg = Release|Win32
{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|Win32.ActiveCfg = Release|Win32
{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|Win32.Build.0 = Release|Win32
{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|x64.ActiveCfg = Release|x64
{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|x64.Build.0 = Release|x64
+ {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|ARM.ActiveCfg = Debug|Win32
{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|Win32.ActiveCfg = Debug|Win32
{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|Win32.Build.0 = Debug|Win32
{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|x64.ActiveCfg = Debug|x64
{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|x64.Build.0 = Debug|x64
+ {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|ARM.ActiveCfg = Release|Win32
{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|Win32.ActiveCfg = Release|Win32
{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|Win32.Build.0 = Release|Win32
{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|x64.ActiveCfg = Release|x64
{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|x64.Build.0 = Release|x64
+ {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|ARM.ActiveCfg = Debug|Win32
{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|Win32.ActiveCfg = Debug|Win32
{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|Win32.Build.0 = Debug|Win32
{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|x64.ActiveCfg = Debug|x64
{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|x64.Build.0 = Debug|x64
+ {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|ARM.ActiveCfg = Release|Win32
{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|Win32.ActiveCfg = Release|Win32
{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|Win32.Build.0 = Release|Win32
{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|x64.ActiveCfg = Release|x64
{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|x64.Build.0 = Release|x64
+ {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|ARM.ActiveCfg = Debug|Win32
{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|Win32.ActiveCfg = Debug|Win32
{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|Win32.Build.0 = Debug|Win32
{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|x64.ActiveCfg = Debug|x64
{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|x64.Build.0 = Debug|x64
+ {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|ARM.ActiveCfg = Release|Win32
{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|Win32.ActiveCfg = Release|Win32
{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|Win32.Build.0 = Release|Win32
{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|x64.ActiveCfg = Release|x64
{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|x64.Build.0 = Release|x64
+ {0178B127-6269-407D-B112-93877BB62776}.Debug|ARM.ActiveCfg = Debug|Win32
{0178B127-6269-407D-B112-93877BB62776}.Debug|Win32.ActiveCfg = Debug|Win32
{0178B127-6269-407D-B112-93877BB62776}.Debug|Win32.Build.0 = Debug|Win32
{0178B127-6269-407D-B112-93877BB62776}.Debug|x64.ActiveCfg = Debug|x64
{0178B127-6269-407D-B112-93877BB62776}.Debug|x64.Build.0 = Debug|x64
+ {0178B127-6269-407D-B112-93877BB62776}.Release|ARM.ActiveCfg = Release|Win32
{0178B127-6269-407D-B112-93877BB62776}.Release|Win32.ActiveCfg = Release|Win32
{0178B127-6269-407D-B112-93877BB62776}.Release|Win32.Build.0 = Release|Win32
{0178B127-6269-407D-B112-93877BB62776}.Release|x64.ActiveCfg = Release|x64
{0178B127-6269-407D-B112-93877BB62776}.Release|x64.Build.0 = Release|x64
+ {73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|ARM.ActiveCfg = Debug|Win32
{73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|Win32.ActiveCfg = Debug|Win32
{73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|Win32.Build.0 = Debug|Win32
{73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|x64.ActiveCfg = Debug|x64
{73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|x64.Build.0 = Debug|x64
+ {73632960-B3A6-464D-83A3-4B43365F19B8}.Release|ARM.ActiveCfg = Release|Win32
{73632960-B3A6-464D-83A3-4B43365F19B8}.Release|Win32.ActiveCfg = Release|Win32
{73632960-B3A6-464D-83A3-4B43365F19B8}.Release|Win32.Build.0 = Release|Win32
{73632960-B3A6-464D-83A3-4B43365F19B8}.Release|x64.ActiveCfg = Release|x64
{73632960-B3A6-464D-83A3-4B43365F19B8}.Release|x64.Build.0 = Release|x64
- {C920062A-0647-4553-A3B2-37C58065664B}.Debug|Win32.ActiveCfg = Debug|Win32
- {C920062A-0647-4553-A3B2-37C58065664B}.Debug|Win32.Build.0 = Debug|Win32
- {C920062A-0647-4553-A3B2-37C58065664B}.Debug|x64.ActiveCfg = Debug|x64
- {C920062A-0647-4553-A3B2-37C58065664B}.Debug|x64.Build.0 = Debug|x64
- {C920062A-0647-4553-A3B2-37C58065664B}.Release|Win32.ActiveCfg = Release|Win32
- {C920062A-0647-4553-A3B2-37C58065664B}.Release|Win32.Build.0 = Release|Win32
- {C920062A-0647-4553-A3B2-37C58065664B}.Release|x64.ActiveCfg = Release|x64
- {C920062A-0647-4553-A3B2-37C58065664B}.Release|x64.Build.0 = Release|x64
- {37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|Win32.ActiveCfg = Debug|Win32
- {37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|Win32.Build.0 = Debug|Win32
- {37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|x64.ActiveCfg = Debug|x64
- {37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|x64.Build.0 = Debug|x64
- {37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|Win32.ActiveCfg = Release|Win32
- {37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|Win32.Build.0 = Release|Win32
- {37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|x64.ActiveCfg = Release|x64
- {37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|x64.Build.0 = Release|x64
+ {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|ARM.ActiveCfg = Debug|Win32
{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|Win32.ActiveCfg = Debug|Win32
{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|Win32.Build.0 = Debug|Win32
{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|x64.ActiveCfg = Debug|x64
{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|x64.Build.0 = Debug|x64
+ {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|ARM.ActiveCfg = Release|Win32
{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|Win32.ActiveCfg = Release|Win32
{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|Win32.Build.0 = Release|Win32
{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|x64.ActiveCfg = Release|x64
{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|x64.Build.0 = Release|x64
+ {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|ARM.ActiveCfg = Debug|Win32
{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|Win32.ActiveCfg = Debug|Win32
{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|Win32.Build.0 = Debug|Win32
{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|x64.ActiveCfg = Debug|x64
{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|x64.Build.0 = Debug|x64
+ {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|ARM.ActiveCfg = Release|Win32
{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|Win32.ActiveCfg = Release|Win32
{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|Win32.Build.0 = Release|Win32
{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|x64.ActiveCfg = Release|x64
{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|x64.Build.0 = Release|x64
+ {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|ARM.ActiveCfg = Debug|Win32
{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|Win32.ActiveCfg = Debug|Win32
{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|Win32.Build.0 = Debug|Win32
{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|x64.ActiveCfg = Debug|x64
{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|x64.Build.0 = Debug|x64
+ {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|ARM.ActiveCfg = Release|Win32
{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|Win32.ActiveCfg = Release|Win32
{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|Win32.Build.0 = Release|Win32
{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|x64.ActiveCfg = Release|x64
{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|x64.Build.0 = Release|x64
+ {203EC78A-0531-43F0-A636-285439BDE025}.Debug|ARM.ActiveCfg = Debug|Win32
{203EC78A-0531-43F0-A636-285439BDE025}.Debug|Win32.ActiveCfg = Debug|Win32
{203EC78A-0531-43F0-A636-285439BDE025}.Debug|Win32.Build.0 = Debug|Win32
{203EC78A-0531-43F0-A636-285439BDE025}.Debug|x64.ActiveCfg = Debug|x64
{203EC78A-0531-43F0-A636-285439BDE025}.Debug|x64.Build.0 = Debug|x64
+ {203EC78A-0531-43F0-A636-285439BDE025}.Release|ARM.ActiveCfg = Release|Win32
{203EC78A-0531-43F0-A636-285439BDE025}.Release|Win32.ActiveCfg = Release|Win32
{203EC78A-0531-43F0-A636-285439BDE025}.Release|Win32.Build.0 = Release|Win32
{203EC78A-0531-43F0-A636-285439BDE025}.Release|x64.ActiveCfg = Release|x64
{203EC78A-0531-43F0-A636-285439BDE025}.Release|x64.Build.0 = Release|x64
+ {6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|ARM.ActiveCfg = Debug|Win32
{6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|Win32.ActiveCfg = Debug|Win32
{6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|Win32.Build.0 = Debug|Win32
{6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|x64.ActiveCfg = Debug|x64
{6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|x64.Build.0 = Debug|x64
+ {6B231032-3CB5-4EED-9210-810D666A23A0}.Release|ARM.ActiveCfg = Release|Win32
{6B231032-3CB5-4EED-9210-810D666A23A0}.Release|Win32.ActiveCfg = Release|Win32
{6B231032-3CB5-4EED-9210-810D666A23A0}.Release|Win32.Build.0 = Release|Win32
{6B231032-3CB5-4EED-9210-810D666A23A0}.Release|x64.ActiveCfg = Release|x64
{6B231032-3CB5-4EED-9210-810D666A23A0}.Release|x64.Build.0 = Release|x64
+ {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|ARM.ActiveCfg = Debug|Win32
{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|Win32.ActiveCfg = Debug|Win32
{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|Win32.Build.0 = Debug|Win32
{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|x64.ActiveCfg = Debug|x64
{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|x64.Build.0 = Debug|x64
+ {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|ARM.ActiveCfg = Release|Win32
{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|Win32.ActiveCfg = Release|Win32
{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|Win32.Build.0 = Release|Win32
{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|x64.ActiveCfg = Release|x64
{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|x64.Build.0 = Release|x64
+ {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|ARM.ActiveCfg = Debug|Win32
{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|Win32.ActiveCfg = Debug|Win32
{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|Win32.Build.0 = Debug|Win32
{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|x64.ActiveCfg = Debug|x64
{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|x64.Build.0 = Debug|x64
+ {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|ARM.ActiveCfg = Release|Win32
{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|Win32.ActiveCfg = Release|Win32
{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|Win32.Build.0 = Release|Win32
{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|x64.ActiveCfg = Release|x64
{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|x64.Build.0 = Release|x64
+ {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|ARM.ActiveCfg = Debug|Win32
{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|Win32.ActiveCfg = Debug|Win32
{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|Win32.Build.0 = Debug|Win32
{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|x64.ActiveCfg = Debug|x64
{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|x64.Build.0 = Debug|x64
+ {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|ARM.ActiveCfg = Release|Win32
{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|Win32.ActiveCfg = Release|Win32
{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|Win32.Build.0 = Release|Win32
{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|x64.ActiveCfg = Release|x64
{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|x64.Build.0 = Release|x64
+ {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|ARM.ActiveCfg = Debug|Win32
{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|Win32.ActiveCfg = Debug|Win32
{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|Win32.Build.0 = Debug|Win32
{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|x64.ActiveCfg = Debug|x64
{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|x64.Build.0 = Debug|x64
+ {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|ARM.ActiveCfg = Release|Win32
{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|Win32.ActiveCfg = Release|Win32
{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|Win32.Build.0 = Release|Win32
{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|x64.ActiveCfg = Release|x64
{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|x64.Build.0 = Release|x64
+ {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|ARM.ActiveCfg = Debug|Win32
{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|Win32.ActiveCfg = Debug|Win32
{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|Win32.Build.0 = Debug|Win32
{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|x64.ActiveCfg = Debug|x64
{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|x64.Build.0 = Debug|x64
+ {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|ARM.ActiveCfg = Release|Win32
{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|Win32.ActiveCfg = Release|Win32
{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|Win32.Build.0 = Release|Win32
{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|x64.ActiveCfg = Release|x64
{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|x64.Build.0 = Release|x64
+ {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|ARM.ActiveCfg = Debug|Win32
{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|Win32.ActiveCfg = Debug|Win32
{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|Win32.Build.0 = Debug|Win32
{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|x64.ActiveCfg = Debug|x64
{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|x64.Build.0 = Debug|x64
+ {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|ARM.ActiveCfg = Release|Win32
{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|Win32.ActiveCfg = Release|Win32
{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|Win32.Build.0 = Release|Win32
{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|x64.ActiveCfg = Release|x64
{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|x64.Build.0 = Release|x64
+ {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|ARM.ActiveCfg = Debug|Win32
{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|Win32.ActiveCfg = Debug|Win32
{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|Win32.Build.0 = Debug|Win32
{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|x64.ActiveCfg = Debug|x64
{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|x64.Build.0 = Debug|x64
+ {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|ARM.ActiveCfg = Release|Win32
{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|Win32.ActiveCfg = Release|Win32
{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|Win32.Build.0 = Release|Win32
{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|x64.ActiveCfg = Release|x64
{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|x64.Build.0 = Release|x64
+ {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|ARM.ActiveCfg = Debug|Win32
{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|Win32.ActiveCfg = Debug|Win32
{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|Win32.Build.0 = Debug|Win32
{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|x64.ActiveCfg = Debug|x64
{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|x64.Build.0 = Debug|x64
+ {C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|ARM.ActiveCfg = Release|Win32
{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|Win32.ActiveCfg = Release|Win32
{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|Win32.Build.0 = Release|Win32
{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|x64.ActiveCfg = Release|x64
{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|x64.Build.0 = Release|x64
+ {E7611F49-F088-4175-9446-6111444E72C8}.Debug|ARM.ActiveCfg = Debug|Win32
{E7611F49-F088-4175-9446-6111444E72C8}.Debug|Win32.ActiveCfg = Debug|Win32
{E7611F49-F088-4175-9446-6111444E72C8}.Debug|Win32.Build.0 = Debug|Win32
{E7611F49-F088-4175-9446-6111444E72C8}.Debug|x64.ActiveCfg = Debug|x64
{E7611F49-F088-4175-9446-6111444E72C8}.Debug|x64.Build.0 = Debug|x64
+ {E7611F49-F088-4175-9446-6111444E72C8}.Release|ARM.ActiveCfg = Release|Win32
{E7611F49-F088-4175-9446-6111444E72C8}.Release|Win32.ActiveCfg = Release|Win32
{E7611F49-F088-4175-9446-6111444E72C8}.Release|Win32.Build.0 = Release|Win32
{E7611F49-F088-4175-9446-6111444E72C8}.Release|x64.ActiveCfg = Release|x64
{E7611F49-F088-4175-9446-6111444E72C8}.Release|x64.Build.0 = Release|x64
+ {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|ARM.ActiveCfg = Debug|Win32
{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|Win32.ActiveCfg = Debug|Win32
{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|Win32.Build.0 = Debug|Win32
{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|x64.ActiveCfg = Debug|x64
{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|x64.Build.0 = Debug|x64
+ {659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|ARM.ActiveCfg = Release|Win32
{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|Win32.ActiveCfg = Release|Win32
{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|Win32.Build.0 = Release|Win32
{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|x64.ActiveCfg = Release|x64
{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|x64.Build.0 = Release|x64
+ {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|ARM.ActiveCfg = Debug|ARM
+ {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|ARM.Build.0 = Debug|ARM
+ {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|Win32.Build.0 = Debug|Win32
+ {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|x64.ActiveCfg = Debug|x64
+ {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|x64.Build.0 = Debug|x64
+ {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|ARM.ActiveCfg = Release|ARM
+ {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|ARM.Build.0 = Release|ARM
+ {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|Win32.ActiveCfg = Release|Win32
+ {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|Win32.Build.0 = Release|Win32
+ {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|x64.ActiveCfg = Release|x64
+ {B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|x64.Build.0 = Release|x64
+ {6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|ARM.ActiveCfg = Debug|ARM
+ {6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|ARM.Build.0 = Debug|ARM
+ {6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|Win32.Build.0 = Debug|Win32
+ {6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|x64.ActiveCfg = Debug|x64
+ {6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|x64.Build.0 = Debug|x64
+ {6786C051-383B-47E0-9E82-B8B994E06A25}.Release|ARM.ActiveCfg = Release|ARM
+ {6786C051-383B-47E0-9E82-B8B994E06A25}.Release|ARM.Build.0 = Release|ARM
+ {6786C051-383B-47E0-9E82-B8B994E06A25}.Release|Win32.ActiveCfg = Release|Win32
+ {6786C051-383B-47E0-9E82-B8B994E06A25}.Release|Win32.Build.0 = Release|Win32
+ {6786C051-383B-47E0-9E82-B8B994E06A25}.Release|x64.ActiveCfg = Release|x64
+ {6786C051-383B-47E0-9E82-B8B994E06A25}.Release|x64.Build.0 = Release|x64
+ {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|ARM.ActiveCfg = Debug|ARM
+ {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|ARM.Build.0 = Debug|ARM
+ {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|Win32.Build.0 = Debug|Win32
+ {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|x64.ActiveCfg = Debug|x64
+ {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|x64.Build.0 = Debug|x64
+ {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|ARM.ActiveCfg = Release|ARM
+ {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|ARM.Build.0 = Release|ARM
+ {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|Win32.ActiveCfg = Release|Win32
+ {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|Win32.Build.0 = Release|Win32
+ {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|x64.ActiveCfg = Release|x64
+ {C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
+ GlobalSection(SubversionScc) = preSolution
+ Svn-Managed = True
+ Manager = AnkhSVN - Subversion Support for Visual Studio
+ EndGlobalSection
EndGlobal
Modified: trunk/Build/source/libs/icu/icu-src/source/allinone/icucheck.bat
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/allinone/icucheck.bat 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/allinone/icucheck.bat 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,131 +1,131 @@
- at echo off
-REM Copyright (C) 2016 and later: Unicode, Inc. and others.
-REM License & terms of use: http://www.unicode.org/copyright.html
-REM ********************************************************************
-REM * COPYRIGHT:
-REM * Copyright (c) 2010-2014, International Business Machines Corporation
-REM * and others. All Rights Reserved.
-REM ********************************************************************
-
-set ICU_ARCH=%1
-set ICU_DBRL=%2
-
-if "%1" == "" (
-echo Usage: %0 "x86 or x64" "Debug or Release"
-exit /b 1
-)
-
-if "%2" == "" (
-echo Usage: %0 %1 "Debug or Release"
-exit /b 1
-)
-
-set ICU_OPATH=%PATH%
-
-set ICU_ICUDIR="%~dp0"\..\..
-
-if "%ICU_ARCH%" == "x64" (
-set ICU_BINDIR=%~dp0\..\..\bin64
-) else (
-set ICU_BINDIR=%~dp0\..\..\bin
-)
-
-set PATH=%ICU_BINDIR%;%PATH%
-
-echo testing ICU in %ICU_ICUDIR% arch=%ICU_ARCH% type=%ICU_DBRL%
-pushd %ICU_ICUDIR%
-
- at rem factor these out
-set ICUINFO_CMD=%ICU_ICUDIR%\source\tools\icuinfo\%ICU_ARCH%\%ICU_DBRL%\icuinfo.exe
-set INTLTEST_CMD=%ICU_ICUDIR%\source\test\intltest\%ICU_ARCH%\%ICU_DBRL%\intltest.exe
-set IOTEST_CMD=%ICU_ICUDIR%\source\test\iotest\%ICU_ARCH%\%ICU_DBRL%\iotest.exe
-set CINTLTST_CMD=%ICU_ICUDIR%\source\test\cintltst\%ICU_ARCH%\%ICU_DBRL%\cintltst.exe
-set LETEST_CMD=%ICU_ICUDIR%\source\test\letest\%ICU_ARCH%\%ICU_DBRL%\letest.exe
-
-set ICUFAILED=
-set ICURUN=
-set ICUFAILCNT=0
-
- at echo on
-
- at set THT=icuinfo
- at echo ==== %THT% =========================================================================
-%ICUINFO_CMD% %ICUINFO_OPTS%
-
- at IF NOT ERRORLEVEL 1 GOTO OK_%THT%
- at set ICUFAILED=%ICUFAILED% %THT%
- at set ICUFAILCNT=1
-:OK_icuinfo
- at set ICURUN=%ICURUN% %THT%
-
- at set THT=intltest
- at echo ==== %THT% =========================================================================
- at cd %ICU_ICUDIR%\source\test\intltest
-%INTLTEST_CMD% %INTLTEST_OPTS%
-
- at IF NOT ERRORLEVEL 1 GOTO OK_%THT%
- at set ICUFAILED=%ICUFAILED% %THT%
- at set ICUFAILCNT=1
-:OK_intltest
- at set ICURUN=%ICURUN% %THT%
-
- at set THT=iotest
- at echo ==== %THT% =========================================================================
- at cd %ICU_ICUDIR%\source\test\iotest
-%IOTEST_CMD% %IOTEST_OPTS%
-
- at IF NOT ERRORLEVEL 1 GOTO OK_%THT%
- at set ICUFAILED=%ICUFAILED% %THT%
- at set ICUFAILCNT=1
-:OK_IOTEST
- at set ICURUN=%ICURUN% %THT%
-
- at set THT=cintltst
- at echo ==== %THT% =========================================================================
- at cd %ICU_ICUDIR%\source\test\cintltst
-%CINTLTST_CMD% %CINTLTST_OPTS%
-
- at IF NOT ERRORLEVEL 1 GOTO OK_%THT%
- at set ICUFAILED=%ICUFAILED% %THT%
- at set ICUFAILCNT=1
-:OK_cintltst
- at set ICURUN=%ICURUN% %THT%
-
- at REM (Layout is deprecated - this would require HarfBuzz)
- at REM @set THT=letest
- at REM @echo ==== %THT% =========================================================================
- at REM @cd %ICU_ICUDIR%\source\test\letest
- at REM %LETST_CMD% %LETEST_OPTS%
-
- at REM @IF NOT ERRORLEVEL 1 GOTO OK_%THT%
- at REM @set ICUFAILED=%ICUFAILED% %THT%
- at REM @set ICUFAILCNT=1
- at REM :OK_letest
- at REM @set ICURUN=%ICURUN% %THT%
-
- at echo off
-
-REM clean up
-set PATH=%ICU_OPATH%
-REM unset ICU_OPATH
-popd
-
- at REM done
-
-echo -
-echo -
-echo -
-echo ============================================================
-echo Summary: ICU in %ICU_ICUDIR% arch=%ICU_ARCH% type=%ICU_DBRL%
-echo -
-echo Tests Run : %ICURUN%
-
-if %ICUFAILCNT% == 0 (
- echo " - All Passed!"
- exit /b 0
-)
-echo Failing Tests: %ICUFAILED%
-echo -
-echo FAILED!
-
-exit /b 1
+ at echo off
+REM Copyright (C) 2016 and later: Unicode, Inc. and others.
+REM License & terms of use: http://www.unicode.org/copyright.html
+REM ********************************************************************
+REM * COPYRIGHT:
+REM * Copyright (c) 2010-2014, International Business Machines Corporation
+REM * and others. All Rights Reserved.
+REM ********************************************************************
+
+set ICU_ARCH=%1
+set ICU_DBRL=%2
+
+if "%1" == "" (
+echo Usage: %0 "x86 or x64" "Debug or Release"
+exit /b 1
+)
+
+if "%2" == "" (
+echo Usage: %0 %1 "Debug or Release"
+exit /b 1
+)
+
+set ICU_OPATH=%PATH%
+
+set ICU_ICUDIR="%~dp0"\..\..
+
+if "%ICU_ARCH%" == "x64" (
+set ICU_BINDIR=%~dp0\..\..\bin64
+) else (
+set ICU_BINDIR=%~dp0\..\..\bin
+)
+
+set PATH=%ICU_BINDIR%;%PATH%
+
+echo testing ICU in %ICU_ICUDIR% arch=%ICU_ARCH% type=%ICU_DBRL%
+pushd %ICU_ICUDIR%
+
+ at rem factor these out
+set ICUINFO_CMD=%ICU_ICUDIR%\source\tools\icuinfo\%ICU_ARCH%\%ICU_DBRL%\icuinfo.exe
+set INTLTEST_CMD=%ICU_ICUDIR%\source\test\intltest\%ICU_ARCH%\%ICU_DBRL%\intltest.exe
+set IOTEST_CMD=%ICU_ICUDIR%\source\test\iotest\%ICU_ARCH%\%ICU_DBRL%\iotest.exe
+set CINTLTST_CMD=%ICU_ICUDIR%\source\test\cintltst\%ICU_ARCH%\%ICU_DBRL%\cintltst.exe
+set LETEST_CMD=%ICU_ICUDIR%\source\test\letest\%ICU_ARCH%\%ICU_DBRL%\letest.exe
+
+set ICUFAILED=
+set ICURUN=
+set ICUFAILCNT=0
+
+ at echo on
+
+ at set THT=icuinfo
+ at echo ==== %THT% =========================================================================
+%ICUINFO_CMD% %ICUINFO_OPTS%
+
+ at IF NOT ERRORLEVEL 1 GOTO OK_%THT%
+ at set ICUFAILED=%ICUFAILED% %THT%
+ at set ICUFAILCNT=1
+:OK_icuinfo
+ at set ICURUN=%ICURUN% %THT%
+
+ at set THT=intltest
+ at echo ==== %THT% =========================================================================
+ at cd %ICU_ICUDIR%\source\test\intltest
+%INTLTEST_CMD% %INTLTEST_OPTS%
+
+ at IF NOT ERRORLEVEL 1 GOTO OK_%THT%
+ at set ICUFAILED=%ICUFAILED% %THT%
+ at set ICUFAILCNT=1
+:OK_intltest
+ at set ICURUN=%ICURUN% %THT%
+
+ at set THT=iotest
+ at echo ==== %THT% =========================================================================
+ at cd %ICU_ICUDIR%\source\test\iotest
+%IOTEST_CMD% %IOTEST_OPTS%
+
+ at IF NOT ERRORLEVEL 1 GOTO OK_%THT%
+ at set ICUFAILED=%ICUFAILED% %THT%
+ at set ICUFAILCNT=1
+:OK_IOTEST
+ at set ICURUN=%ICURUN% %THT%
+
+ at set THT=cintltst
+ at echo ==== %THT% =========================================================================
+ at cd %ICU_ICUDIR%\source\test\cintltst
+%CINTLTST_CMD% %CINTLTST_OPTS%
+
+ at IF NOT ERRORLEVEL 1 GOTO OK_%THT%
+ at set ICUFAILED=%ICUFAILED% %THT%
+ at set ICUFAILCNT=1
+:OK_cintltst
+ at set ICURUN=%ICURUN% %THT%
+
+ at REM (Layout is deprecated - this would require HarfBuzz)
+ at REM @set THT=letest
+ at REM @echo ==== %THT% =========================================================================
+ at REM @cd %ICU_ICUDIR%\source\test\letest
+ at REM %LETST_CMD% %LETEST_OPTS%
+
+ at REM @IF NOT ERRORLEVEL 1 GOTO OK_%THT%
+ at REM @set ICUFAILED=%ICUFAILED% %THT%
+ at REM @set ICUFAILCNT=1
+ at REM :OK_letest
+ at REM @set ICURUN=%ICURUN% %THT%
+
+ at echo off
+
+REM clean up
+set PATH=%ICU_OPATH%
+REM unset ICU_OPATH
+popd
+
+ at REM done
+
+echo -
+echo -
+echo -
+echo ============================================================
+echo Summary: ICU in %ICU_ICUDIR% arch=%ICU_ARCH% type=%ICU_DBRL%
+echo -
+echo Tests Run : %ICURUN%
+
+if %ICUFAILCNT% == 0 (
+ echo " - All Passed!"
+ exit /b 0
+)
+echo Failing Tests: %ICUFAILED%
+echo -
+echo FAILED!
+
+exit /b 1
Modified: trunk/Build/source/libs/icu/icu-src/source/common/Makefile.in
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/Makefile.in 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/Makefile.in 2018-01-12 18:35:28 UTC (rev 46290)
@@ -89,11 +89,12 @@
resource.o uresbund.o ures_cnv.o uresdata.o resbund.o resbund_cnv.o \
ucurr.o \
messagepattern.o ucat.o locmap.o uloc.o locid.o locutil.o locavailable.o locdispnames.o locdspnm.o loclikely.o locresdata.o \
-bytestream.o stringpiece.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 \
@@ -103,7 +104,7 @@
uscript.o uscript_props.o usc_impl.o unames.o \
utrie.o utrie2.o utrie2_builder.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.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 \
Modified: trunk/Build/source/libs/icu/icu-src/source/common/appendable.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/appendable.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/appendable.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -6,7 +6,7 @@
* Corporation and others. All Rights Reserved.
*******************************************************************************
* file name: appendable.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
Modified: trunk/Build/source/libs/icu/icu-src/source/common/bmpset.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bmpset.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bmpset.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
******************************************************************************
@@ -8,7 +8,7 @@
*
******************************************************************************
* file name: bmpset.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
@@ -28,7 +28,7 @@
BMPSet::BMPSet(const int32_t *parentList, int32_t parentListLength) :
list(parentList), listLength(parentListLength) {
- uprv_memset(asciiBytes, 0, sizeof(asciiBytes));
+ uprv_memset(latin1Contains, 0, sizeof(latin1Contains));
uprv_memset(table7FF, 0, sizeof(table7FF));
uprv_memset(bmpBlockBits, 0, sizeof(bmpBlockBits));
@@ -45,6 +45,7 @@
list4kStarts[i]=findCodePoint(i<<12, list4kStarts[i-1], listLength-1);
}
list4kStarts[0x11]=listLength-1;
+ containsFFFD=containsSlow(0xfffd, list4kStarts[0xf], list4kStarts[0x10]);
initBits();
overrideIllegal();
@@ -51,8 +52,9 @@
}
BMPSet::BMPSet(const BMPSet &otherBMPSet, const int32_t *newParentList, int32_t newParentListLength) :
+ containsFFFD(otherBMPSet.containsFFFD),
list(newParentList), listLength(newParentListLength) {
- uprv_memcpy(asciiBytes, otherBMPSet.asciiBytes, sizeof(asciiBytes));
+ uprv_memcpy(latin1Contains, otherBMPSet.latin1Contains, sizeof(latin1Contains));
uprv_memcpy(table7FF, otherBMPSet.table7FF, sizeof(table7FF));
uprv_memcpy(bmpBlockBits, otherBMPSet.bmpBlockBits, sizeof(bmpBlockBits));
uprv_memcpy(list4kStarts, otherBMPSet.list4kStarts, sizeof(list4kStarts));
@@ -120,7 +122,7 @@
UChar32 start, limit;
int32_t listIndex=0;
- // Set asciiBytes[].
+ // Set latin1Contains[].
do {
start=list[listIndex++];
if(listIndex<listLength) {
@@ -128,14 +130,31 @@
} else {
limit=0x110000;
}
- if(start>=0x80) {
+ if(start>=0x100) {
break;
}
do {
- asciiBytes[start++]=1;
- } while(start<limit && start<0x80);
- } while(limit<=0x80);
+ latin1Contains[start++]=1;
+ } while(start<limit && start<0x100);
+ } while(limit<=0x100);
+ // Find the first range overlapping with (or after) 80..FF again,
+ // to include them in table7FF as well.
+ for(listIndex=0;;) {
+ start=list[listIndex++];
+ if(listIndex<listLength) {
+ limit=list[listIndex++];
+ } else {
+ limit=0x110000;
+ }
+ if(limit>0x80) {
+ if(start<0x80) {
+ start=0x80;
+ }
+ break;
+ }
+ }
+
// Set table7FF[].
while(start<0x800) {
set32x64Bits(table7FF, start, limit<=0x800 ? limit : 0x800);
@@ -204,7 +223,7 @@
* for faster validity checking at runtime.
* No need to set 0 values where they were reset to 0 in the constructor
* and not modified by initBits().
- * (asciiBytes[] trail bytes, table7FF[] 0..7F, bmpBlockBits[] 0..7FF)
+ * (table7FF[] 0..7F, bmpBlockBits[] 0..7FF)
* Need to set 0 values for surrogates D800..DFFF.
*/
void BMPSet::overrideIllegal() {
@@ -211,12 +230,7 @@
uint32_t bits, mask;
int32_t i;
- if(containsSlow(0xfffd, list4kStarts[0xf], list4kStarts[0x10])) {
- // contains(FFFD)==TRUE
- for(i=0x80; i<0xc0; ++i) {
- asciiBytes[i]=1;
- }
-
+ if(containsFFFD) {
bits=3; // Lead bytes 0xC0 and 0xC1.
for(i=0; i<64; ++i) {
table7FF[i]|=bits;
@@ -233,7 +247,6 @@
bmpBlockBits[i]=(bmpBlockBits[i]&mask)|bits;
}
} else {
- // contains(FFFD)==FALSE
mask=~(0x10001<<0xd); // Lead byte 0xED.
for(i=32; i<64; ++i) { // Second half of 4k block.
bmpBlockBits[i]&=mask;
@@ -277,8 +290,8 @@
UBool
BMPSet::contains(UChar32 c) const {
- if((uint32_t)c<=0x7f) {
- return (UBool)asciiBytes[c];
+ if((uint32_t)c<=0xff) {
+ return (UBool)latin1Contains[c];
} else if((uint32_t)c<=0x7ff) {
return (UBool)((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))!=0);
} else if((uint32_t)c<0xd800 || (c>=0xe000 && c<=0xffff)) {
@@ -314,8 +327,8 @@
// span
do {
c=*s;
- if(c<=0x7f) {
- if(!asciiBytes[c]) {
+ if(c<=0xff) {
+ if(!latin1Contains[c]) {
break;
}
} else if(c<=0x7ff) {
@@ -354,8 +367,8 @@
// span not
do {
c=*s;
- if(c<=0x7f) {
- if(asciiBytes[c]) {
+ if(c<=0xff) {
+ if(latin1Contains[c]) {
break;
}
} else if(c<=0x7ff) {
@@ -403,8 +416,8 @@
// span
for(;;) {
c=*(--limit);
- if(c<=0x7f) {
- if(!asciiBytes[c]) {
+ if(c<=0xff) {
+ if(!latin1Contains[c]) {
break;
}
} else if(c<=0x7ff) {
@@ -446,8 +459,8 @@
// span not
for(;;) {
c=*(--limit);
- if(c<=0x7f) {
- if(asciiBytes[c]) {
+ if(c<=0xff) {
+ if(latin1Contains[c]) {
break;
}
} else if(c<=0x7ff) {
@@ -497,22 +510,22 @@
BMPSet::spanUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanCondition) const {
const uint8_t *limit=s+length;
uint8_t b=*s;
- if((int8_t)b>=0) {
+ if(U8_IS_SINGLE(b)) {
// Initial all-ASCII span.
if(spanCondition) {
do {
- if(!asciiBytes[b] || ++s==limit) {
+ if(!latin1Contains[b] || ++s==limit) {
return s;
}
b=*s;
- } while((int8_t)b>=0);
+ } while(U8_IS_SINGLE(b));
} else {
do {
- if(asciiBytes[b] || ++s==limit) {
+ if(latin1Contains[b] || ++s==limit) {
return s;
}
b=*s;
- } while((int8_t)b>=0);
+ } while(U8_IS_SINGLE(b));
}
length=(int32_t)(limit-s);
}
@@ -540,13 +553,13 @@
// single trail byte, check for preceding 3- or 4-byte lead byte
if(length>=2 && (b=*(limit-2))>=0xe0) {
limit-=2;
- if(asciiBytes[0x80]!=spanCondition) {
+ if(containsFFFD!=spanCondition) {
limit0=limit;
}
} else if(b<0xc0 && b>=0x80 && length>=3 && (b=*(limit-3))>=0xf0) {
// 4-byte lead byte with only two trail bytes
limit-=3;
- if(asciiBytes[0x80]!=spanCondition) {
+ if(containsFFFD!=spanCondition) {
limit0=limit;
}
}
@@ -553,7 +566,7 @@
} else {
// lead byte with no trail bytes
--limit;
- if(asciiBytes[0x80]!=spanCondition) {
+ if(containsFFFD!=spanCondition) {
limit0=limit;
}
}
@@ -563,26 +576,26 @@
while(s<limit) {
b=*s;
- if(b<0xc0) {
- // ASCII; or trail bytes with the result of contains(FFFD).
+ if(U8_IS_SINGLE(b)) {
+ // ASCII
if(spanCondition) {
do {
- if(!asciiBytes[b]) {
+ if(!latin1Contains[b]) {
return s;
} else if(++s==limit) {
return limit0;
}
b=*s;
- } while(b<0xc0);
+ } while(U8_IS_SINGLE(b));
} else {
do {
- if(asciiBytes[b]) {
+ if(latin1Contains[b]) {
return s;
} else if(++s==limit) {
return limit0;
}
b=*s;
- } while(b<0xc0);
+ } while(U8_IS_SINGLE(b));
}
}
++s; // Advance past the lead byte.
@@ -619,7 +632,7 @@
UChar32 c=((UChar32)(b-0xf0)<<18)|((UChar32)t1<<12)|(t2<<6)|t3;
if( ( (0x10000<=c && c<=0x10ffff) ?
containsSlow(c, list4kStarts[0x10], list4kStarts[0x11]) :
- asciiBytes[0x80]
+ containsFFFD
) != spanCondition
) {
return s-1;
@@ -627,8 +640,9 @@
s+=3;
continue;
}
- } else /* 0xc0<=b<0xe0 */ {
+ } else {
if( /* handle U+0000..U+07FF inline */
+ b>=0xc0 &&
(t1=(uint8_t)(*s-0x80)) <= 0x3f
) {
if((USetSpanCondition)((table7FF[t1]&((uint32_t)1<<(b&0x1f)))!=0) != spanCondition) {
@@ -642,7 +656,7 @@
// Give an illegal sequence the same value as the result of contains(FFFD).
// Handle each byte of an illegal sequence separately to simplify the code;
// no need to optimize error handling.
- if(asciiBytes[0x80]!=spanCondition) {
+ if(containsFFFD!=spanCondition) {
return s-1;
}
}
@@ -667,26 +681,26 @@
do {
b=s[--length];
- if((int8_t)b>=0) {
+ if(U8_IS_SINGLE(b)) {
// ASCII sub-span
if(spanCondition) {
do {
- if(!asciiBytes[b]) {
+ if(!latin1Contains[b]) {
return length+1;
} else if(length==0) {
return 0;
}
b=s[--length];
- } while((int8_t)b>=0);
+ } while(U8_IS_SINGLE(b));
} else {
do {
- if(asciiBytes[b]) {
+ if(latin1Contains[b]) {
return length+1;
} else if(length==0) {
return 0;
}
b=s[--length];
- } while((int8_t)b>=0);
+ } while(U8_IS_SINGLE(b));
}
}
Modified: trunk/Build/source/libs/icu/icu-src/source/common/bmpset.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bmpset.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bmpset.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
******************************************************************************
@@ -8,7 +8,7 @@
*
******************************************************************************
* file name: bmpset.h
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
@@ -28,11 +28,12 @@
* Helper class for frozen UnicodeSets, implements contains() and span()
* optimized for BMP code points. Structured to be UTF-8-friendly.
*
- * ASCII: Look up bytes.
+ * Latin-1: Look up bytes.
* 2-byte characters: Bits organized vertically.
* 3-byte characters: Use zero/one/mixed data per 64-block in U+0000..U+FFFF,
* with mixed for illegal ranges.
- * Supplementary characters: Call contains() on the parent set.
+ * Supplementary characters: Binary search over
+ * the supplementary part of the parent set's inversion list.
*/
class BMPSet : public UMemory {
public:
@@ -96,13 +97,13 @@
inline UBool containsSlow(UChar32 c, int32_t lo, int32_t hi) const;
/*
- * One byte per ASCII character, or trail byte in lead position.
- * 0 or 1 for ASCII characters.
- * The value for trail bytes is the result of contains(FFFD)
- * for faster validity checking at runtime.
+ * One byte 0 or 1 per Latin-1 character.
*/
- UBool asciiBytes[0xc0];
+ UBool latin1Contains[0x100];
+ /* TRUE if contains(U+FFFD). */
+ UBool containsFFFD;
+
/*
* One bit per code point from U+0000..U+07FF.
* The bits are organized vertically; consecutive code points
Modified: trunk/Build/source/libs/icu/icu-src/source/common/brkeng.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/brkeng.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/brkeng.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
************************************************************************************
@@ -11,9 +11,6 @@
#if !UCONFIG_NO_BREAK_ITERATION
-#include "brkeng.h"
-#include "cmemory.h"
-#include "dictbe.h"
#include "unicode/uchar.h"
#include "unicode/uniset.h"
#include "unicode/chariter.h"
@@ -24,6 +21,10 @@
#include "unicode/uscript.h"
#include "unicode/ucharstrie.h"
#include "unicode/bytestrie.h"
+
+#include "brkeng.h"
+#include "cmemory.h"
+#include "dictbe.h"
#include "charstr.h"
#include "dictionarydata.h"
#include "mutex.h"
@@ -80,24 +81,16 @@
int32_t
UnhandledEngine::findBreaks( UText *text,
- int32_t startPos,
- int32_t endPos,
- UBool reverse,
- int32_t breakType,
- UStack &/*foundBreaks*/ ) const {
+ int32_t /* startPos */,
+ int32_t endPos,
+ int32_t breakType,
+ UVector32 &/*foundBreaks*/ ) const {
if (breakType >= 0 && breakType < UPRV_LENGTHOF(fHandled)) {
UChar32 c = utext_current32(text);
- if (reverse) {
- while((int32_t)utext_getNativeIndex(text) > startPos && fHandled[breakType]->contains(c)) {
- c = utext_previous32(text);
- }
+ while((int32_t)utext_getNativeIndex(text) < endPos && fHandled[breakType]->contains(c)) {
+ utext_next32(text); // TODO: recast loop to work with post-increment operations.
+ c = utext_current32(text);
}
- else {
- while((int32_t)utext_getNativeIndex(text) < endPos && fHandled[breakType]->contains(c)) {
- utext_next32(text); // TODO: recast loop to work with post-increment operations.
- c = utext_current32(text);
- }
- }
}
return 0;
}
Modified: trunk/Build/source/libs/icu/icu-src/source/common/brkeng.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/brkeng.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/brkeng.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/**
************************************************************************************
@@ -19,6 +19,7 @@
class UnicodeSet;
class UStack;
+class UVector32;
class DictionaryMatcher;
/*******************************************************************
@@ -67,18 +68,15 @@
* is capable of handling.
* @param startPos The start of the run within the supplied text.
* @param endPos The end of the run within the supplied text.
- * @param reverse Whether the caller is looking for breaks in a reverse
- * direction.
* @param breakType The type of break desired, or -1.
- * @param foundBreaks An allocated C array of the breaks found, if any
+ * @param foundBreaks A Vector of int32_t to receive the breaks.
* @return The number of breaks found.
*/
virtual int32_t findBreaks( UText *text,
int32_t startPos,
int32_t endPos,
- UBool reverse,
int32_t breakType,
- UStack &foundBreaks ) const = 0;
+ UVector32 &foundBreaks ) const = 0;
};
@@ -192,8 +190,6 @@
* is capable of handling.
* @param startPos The start of the run within the supplied text.
* @param endPos The end of the run within the supplied text.
- * @param reverse Whether the caller is looking for breaks in a reverse
- * direction.
* @param breakType The type of break desired, or -1.
* @param foundBreaks An allocated C array of the breaks found, if any
* @return The number of breaks found.
@@ -201,9 +197,8 @@
virtual int32_t findBreaks( UText *text,
int32_t startPos,
int32_t endPos,
- UBool reverse,
int32_t breakType,
- UStack &foundBreaks ) const;
+ UVector32 &foundBreaks ) const;
/**
* <p>Tell the engine to handle a particular character and break type.</p>
Modified: trunk/Build/source/libs/icu/icu-src/source/common/brkiter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/brkiter.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/brkiter.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -195,7 +195,7 @@
// ------------------------------------------
//
-// Default constructor and destructor
+// Constructors, destructor and assignment operator
//
//-------------------------------------------
@@ -204,6 +204,19 @@
*validLocale = *actualLocale = 0;
}
+BreakIterator::BreakIterator(const BreakIterator &other) : UObject(other) {
+ uprv_strncpy(actualLocale, other.actualLocale, sizeof(actualLocale));
+ uprv_strncpy(validLocale, other.validLocale, sizeof(validLocale));
+}
+
+BreakIterator &BreakIterator::operator =(const BreakIterator &other) {
+ if (this != &other) {
+ uprv_strncpy(actualLocale, other.actualLocale, sizeof(actualLocale));
+ uprv_strncpy(validLocale, other.validLocale, sizeof(validLocale));
+ }
+ return *this;
+}
+
BreakIterator::~BreakIterator()
{
}
@@ -265,7 +278,7 @@
// defined in ucln_cmn.h
U_NAMESPACE_END
-static icu::UInitOnce gInitOnce;
+static icu::UInitOnce gInitOnceBrkiter;
static icu::ICULocaleService* gService = NULL;
@@ -280,7 +293,7 @@
delete gService;
gService = NULL;
}
- gInitOnce.reset();
+ gInitOnceBrkiter.reset();
#endif
return TRUE;
}
@@ -296,7 +309,7 @@
static ICULocaleService*
getService(void)
{
- umtx_initOnce(gInitOnce, &initService);
+ umtx_initOnce(gInitOnceBrkiter, &initService);
return gService;
}
@@ -306,7 +319,7 @@
static inline UBool
hasService(void)
{
- return !gInitOnce.isReset() && getService() != NULL;
+ return !gInitOnceBrkiter.isReset() && getService() != NULL;
}
// -------------------------------------
Added: trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.cpp (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,123 @@
+// © 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+// bytesinkutil.cpp
+// created: 2017sep14 Markus W. Scherer
+
+#include "unicode/utypes.h"
+#include "unicode/bytestream.h"
+#include "unicode/edits.h"
+#include "unicode/stringoptions.h"
+#include "unicode/utf8.h"
+#include "unicode/utf16.h"
+#include "bytesinkutil.h"
+#include "cmemory.h"
+#include "uassert.h"
+
+U_NAMESPACE_BEGIN
+
+UBool
+ByteSinkUtil::appendChange(int32_t length, const char16_t *s16, int32_t s16Length,
+ ByteSink &sink, Edits *edits, UErrorCode &errorCode) {
+ if (U_FAILURE(errorCode)) { return FALSE; }
+ char scratch[200];
+ int32_t s8Length = 0;
+ for (int32_t i = 0; i < s16Length;) {
+ int32_t capacity;
+ int32_t desiredCapacity = s16Length - i;
+ if (desiredCapacity < (INT32_MAX / 3)) {
+ desiredCapacity *= 3; // max 3 UTF-8 bytes per UTF-16 code unit
+ } else if (desiredCapacity < (INT32_MAX / 2)) {
+ desiredCapacity *= 2;
+ } else {
+ desiredCapacity = INT32_MAX;
+ }
+ char *buffer = sink.GetAppendBuffer(U8_MAX_LENGTH, desiredCapacity,
+ scratch, UPRV_LENGTHOF(scratch), &capacity);
+ capacity -= U8_MAX_LENGTH - 1;
+ int32_t j = 0;
+ for (; i < s16Length && j < capacity;) {
+ UChar32 c;
+ U16_NEXT_UNSAFE(s16, i, c);
+ U8_APPEND_UNSAFE(buffer, j, c);
+ }
+ if (j > (INT32_MAX - s8Length)) {
+ errorCode = U_INDEX_OUTOFBOUNDS_ERROR;
+ return FALSE;
+ }
+ sink.Append(buffer, j);
+ s8Length += j;
+ }
+ if (edits != nullptr) {
+ edits->addReplace(length, s8Length);
+ }
+ return TRUE;
+}
+
+UBool
+ByteSinkUtil::appendChange(const uint8_t *s, const uint8_t *limit,
+ const char16_t *s16, int32_t s16Length,
+ ByteSink &sink, Edits *edits, UErrorCode &errorCode) {
+ if (U_FAILURE(errorCode)) { return FALSE; }
+ if ((limit - s) > INT32_MAX) {
+ errorCode = U_INDEX_OUTOFBOUNDS_ERROR;
+ return FALSE;
+ }
+ return appendChange((int32_t)(limit - s), s16, s16Length, sink, edits, errorCode);
+}
+
+void
+ByteSinkUtil::appendCodePoint(int32_t length, UChar32 c, ByteSink &sink, Edits *edits) {
+ char s8[U8_MAX_LENGTH];
+ int32_t s8Length = 0;
+ U8_APPEND_UNSAFE(s8, s8Length, c);
+ if (edits != nullptr) {
+ edits->addReplace(length, s8Length);
+ }
+ sink.Append(s8, s8Length);
+}
+
+namespace {
+
+// See unicode/utf8.h U8_APPEND_UNSAFE().
+inline uint8_t getTwoByteLead(UChar32 c) { return (uint8_t)((c >> 6) | 0xc0); }
+inline uint8_t getTwoByteTrail(UChar32 c) { return (uint8_t)((c & 0x3f) | 0x80); }
+
+} // namespace
+
+void
+ByteSinkUtil::appendTwoBytes(UChar32 c, ByteSink &sink) {
+ U_ASSERT(0x80 <= c && c <= 0x7ff); // 2-byte UTF-8
+ char s8[2] = { (char)getTwoByteLead(c), (char)getTwoByteTrail(c) };
+ sink.Append(s8, 2);
+}
+
+UBool
+ByteSinkUtil::appendUnchanged(const uint8_t *s, int32_t length,
+ ByteSink &sink, uint32_t options, Edits *edits,
+ UErrorCode &errorCode) {
+ if (U_FAILURE(errorCode)) { return FALSE; }
+ if (length > 0) {
+ if (edits != nullptr) {
+ edits->addUnchanged(length);
+ }
+ if ((options & U_OMIT_UNCHANGED_TEXT) == 0) {
+ sink.Append(reinterpret_cast<const char *>(s), length);
+ }
+ }
+ return TRUE;
+}
+
+UBool
+ByteSinkUtil::appendUnchanged(const uint8_t *s, const uint8_t *limit,
+ ByteSink &sink, uint32_t options, Edits *edits,
+ UErrorCode &errorCode) {
+ if (U_FAILURE(errorCode)) { return FALSE; }
+ if ((limit - s) > INT32_MAX) {
+ errorCode = U_INDEX_OUTOFBOUNDS_ERROR;
+ return FALSE;
+ }
+ return appendUnchanged(s, (int32_t)(limit - s), sink, options, edits, errorCode);
+}
+
+U_NAMESPACE_END
Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.h (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,53 @@
+// © 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+// bytesinkutil.h
+// created: 2017sep14 Markus W. Scherer
+
+#include "unicode/utypes.h"
+#include "unicode/bytestream.h"
+#include "unicode/edits.h"
+#include "cmemory.h"
+#include "uassert.h"
+
+U_NAMESPACE_BEGIN
+
+class ByteSink;
+class Edits;
+
+class U_COMMON_API ByteSinkUtil {
+public:
+ ByteSinkUtil() = delete; // all static
+
+ /** (length) bytes were mapped to valid (s16, s16Length). */
+ static UBool appendChange(int32_t length,
+ const char16_t *s16, int32_t s16Length,
+ ByteSink &sink, Edits *edits, UErrorCode &errorCode);
+
+ /** The bytes at [s, limit[ were mapped to valid (s16, s16Length). */
+ static UBool appendChange(const uint8_t *s, const uint8_t *limit,
+ const char16_t *s16, int32_t s16Length,
+ ByteSink &sink, Edits *edits, UErrorCode &errorCode);
+
+ /** (length) bytes were mapped/changed to valid code point c. */
+ static void appendCodePoint(int32_t length, UChar32 c, ByteSink &sink, Edits *edits = nullptr);
+
+ /** The few bytes at [src, nextSrc[ were mapped/changed to valid code point c. */
+ static inline void appendCodePoint(const uint8_t *src, const uint8_t *nextSrc, UChar32 c,
+ ByteSink &sink, Edits *edits = nullptr) {
+ appendCodePoint((int32_t)(nextSrc - src), c, sink, edits);
+ }
+
+ /** Append the two-byte character (U+0080..U+07FF). */
+ static void appendTwoBytes(UChar32 c, ByteSink &sink);
+
+ static UBool appendUnchanged(const uint8_t *s, int32_t length,
+ ByteSink &sink, uint32_t options, Edits *edits,
+ UErrorCode &errorCode);
+
+ static UBool appendUnchanged(const uint8_t *s, const uint8_t *limit,
+ ByteSink &sink, uint32_t options, Edits *edits,
+ UErrorCode &errorCode);
+};
+
+U_NAMESPACE_END
Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/bytestream.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bytestream.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bytestream.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
// Copyright (C) 2009-2011, International Business Machines
// Corporation and others. All Rights Reserved.
@@ -45,6 +45,12 @@
if (n <= 0) {
return;
}
+ if (n > (INT32_MAX - appended_)) {
+ // TODO: Report as integer overflow, not merely buffer overflow.
+ appended_ = INT32_MAX;
+ overflowed_ = TRUE;
+ return;
+ }
appended_ += n;
int32_t available = capacity_ - size_;
if (n > available) {
Modified: trunk/Build/source/libs/icu/icu-src/source/common/bytestrie.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bytestrie.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bytestrie.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -6,7 +6,7 @@
* Corporation and others. All Rights Reserved.
*******************************************************************************
* file name: bytestrie.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
Modified: trunk/Build/source/libs/icu/icu-src/source/common/bytestriebuilder.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bytestriebuilder.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bytestriebuilder.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -6,7 +6,7 @@
* Corporation and others. All Rights Reserved.
*******************************************************************************
* file name: bytestriebuilder.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
Modified: trunk/Build/source/libs/icu/icu-src/source/common/bytestrieiterator.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bytestrieiterator.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bytestrieiterator.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -6,7 +6,7 @@
* Corporation and others. All Rights Reserved.
*******************************************************************************
* file name: bytestrieiterator.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
Modified: trunk/Build/source/libs/icu/icu-src/source/common/caniter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/caniter.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/caniter.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*****************************************************************************
@@ -311,12 +311,12 @@
// see what the permutations of the characters before and after this one are
//Hashtable *subpermute = permute(source.substring(0,i) + source.substring(i + UTF16.getCharCount(cp)));
- permute(subPermuteString.replace(i, U16_LENGTH(cp), NULL, 0), skipZeros, &subpermute, status);
+ permute(subPermuteString.remove(i, U16_LENGTH(cp)), skipZeros, &subpermute, status);
/* Test for buffer overflows */
if(U_FAILURE(status)) {
return;
}
- // The upper replace is destructive. The question is do we have to make a copy, or we don't care about the contents
+ // The upper remove is destructive. The question is do we have to make a copy, or we don't care about the contents
// of source at this point.
// prefix this character to all of them
@@ -405,7 +405,7 @@
//String[] finalResult = new String[result.size()];
UnicodeString *finalResult = NULL;
int32_t resultCount;
- if((resultCount = result.count())) {
+ if((resultCount = result.count()) != 0) {
finalResult = new UnicodeString[resultCount];
if (finalResult == 0) {
status = U_MEMORY_ALLOCATION_ERROR;
Modified: trunk/Build/source/libs/icu/icu-src/source/common/chariter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/chariter.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/chariter.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
**********************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/charstr.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/charstr.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/charstr.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -6,7 +6,7 @@
* Corporation and others. All Rights Reserved.
*******************************************************************************
* file name: charstr.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
@@ -15,6 +15,7 @@
*/
#include "unicode/utypes.h"
+#include "unicode/putil.h"
#include "charstr.h"
#include "cmemory.h"
#include "cstring.h"
Modified: trunk/Build/source/libs/icu/icu-src/source/common/charstr.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/charstr.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/charstr.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
**********************************************************************
Deleted: trunk/Build/source/libs/icu/icu-src/source/common/cmemory.c
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cmemory.c 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cmemory.c 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,162 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-******************************************************************************
-*
-* Copyright (C) 2002-2015, International Business Machines
-* Corporation and others. All Rights Reserved.
-*
-******************************************************************************
-*
-* File cmemory.c ICU Heap allocation.
-* All ICU heap allocation, both for C and C++ new of ICU
-* class types, comes through these functions.
-*
-* If you have a need to replace ICU allocation, this is the
-* place to do it.
-*
-* Note that uprv_malloc(0) returns a non-NULL pointer, and
-* that a subsequent free of that pointer value is a NOP.
-*
-******************************************************************************
-*/
-#include "unicode/uclean.h"
-#include "cmemory.h"
-#include "putilimp.h"
-#include "uassert.h"
-#include <stdlib.h>
-
-/* uprv_malloc(0) returns a pointer to this read-only data. */
-static const int32_t zeroMem[] = {0, 0, 0, 0, 0, 0};
-
-/* Function Pointers for user-supplied heap functions */
-static const void *pContext;
-static UMemAllocFn *pAlloc;
-static UMemReallocFn *pRealloc;
-static UMemFreeFn *pFree;
-
-#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
-#include <stdio.h>
-static int n=0;
-static long b=0;
-#endif
-
-#if U_DEBUG
-
-static char gValidMemorySink = 0;
-
-U_CAPI void uprv_checkValidMemory(const void *p, size_t n) {
- /*
- * Access the memory to ensure that it's all valid.
- * Load and save a computed value to try to ensure that the compiler
- * does not throw away the whole loop.
- * A thread analyzer might complain about un-mutexed access to gValidMemorySink
- * which is true but harmless because no one ever uses the value in gValidMemorySink.
- */
- const char *s = (const char *)p;
- char c = gValidMemorySink;
- size_t i;
- U_ASSERT(p != NULL);
- for(i = 0; i < n; ++i) {
- c ^= s[i];
- }
- gValidMemorySink = c;
-}
-
-#endif /* U_DEBUG */
-
-U_CAPI void * U_EXPORT2
-uprv_malloc(size_t s) {
-#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
-#if 1
- putchar('>');
- fflush(stdout);
-#else
- fprintf(stderr,"MALLOC\t#%d\t%ul bytes\t%ul total\n", ++n,s,(b+=s)); fflush(stderr);
-#endif
-#endif
- if (s > 0) {
- if (pAlloc) {
- return (*pAlloc)(pContext, s);
- } else {
- return uprv_default_malloc(s);
- }
- } else {
- return (void *)zeroMem;
- }
-}
-
-U_CAPI void * U_EXPORT2
-uprv_realloc(void * buffer, size_t size) {
-#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
- putchar('~');
- fflush(stdout);
-#endif
- if (buffer == zeroMem) {
- return uprv_malloc(size);
- } else if (size == 0) {
- if (pFree) {
- (*pFree)(pContext, buffer);
- } else {
- uprv_default_free(buffer);
- }
- return (void *)zeroMem;
- } else {
- if (pRealloc) {
- return (*pRealloc)(pContext, buffer, size);
- } else {
- return uprv_default_realloc(buffer, size);
- }
- }
-}
-
-U_CAPI void U_EXPORT2
-uprv_free(void *buffer) {
-#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
- putchar('<');
- fflush(stdout);
-#endif
- if (buffer != zeroMem) {
- if (pFree) {
- (*pFree)(pContext, buffer);
- } else {
- uprv_default_free(buffer);
- }
- }
-}
-
-U_CAPI void * U_EXPORT2
-uprv_calloc(size_t num, size_t size) {
- void *mem = NULL;
- size *= num;
- mem = uprv_malloc(size);
- if (mem) {
- uprv_memset(mem, 0, size);
- }
- return mem;
-}
-
-U_CAPI void U_EXPORT2
-u_setMemoryFunctions(const void *context, UMemAllocFn *a, UMemReallocFn *r, UMemFreeFn *f, UErrorCode *status)
-{
- if (U_FAILURE(*status)) {
- return;
- }
- if (a==NULL || r==NULL || f==NULL) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
- return;
- }
- pContext = context;
- pAlloc = a;
- pRealloc = r;
- pFree = f;
-}
-
-
-U_CFUNC UBool cmemory_cleanup(void) {
- pContext = NULL;
- pAlloc = NULL;
- pRealloc = NULL;
- pFree = NULL;
- return TRUE;
-}
Added: trunk/Build/source/libs/icu/icu-src/source/common/cmemory.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cmemory.cpp (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cmemory.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,162 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+******************************************************************************
+*
+* Copyright (C) 2002-2015, International Business Machines
+* Corporation and others. All Rights Reserved.
+*
+******************************************************************************
+*
+* File cmemory.c ICU Heap allocation.
+* All ICU heap allocation, both for C and C++ new of ICU
+* class types, comes through these functions.
+*
+* If you have a need to replace ICU allocation, this is the
+* place to do it.
+*
+* Note that uprv_malloc(0) returns a non-NULL pointer, and
+* that a subsequent free of that pointer value is a NOP.
+*
+******************************************************************************
+*/
+#include "unicode/uclean.h"
+#include "cmemory.h"
+#include "putilimp.h"
+#include "uassert.h"
+#include <stdlib.h>
+
+/* uprv_malloc(0) returns a pointer to this read-only data. */
+static const int32_t zeroMem[] = {0, 0, 0, 0, 0, 0};
+
+/* Function Pointers for user-supplied heap functions */
+static const void *pContext;
+static UMemAllocFn *pAlloc;
+static UMemReallocFn *pRealloc;
+static UMemFreeFn *pFree;
+
+#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
+#include <stdio.h>
+static int n=0;
+static long b=0;
+#endif
+
+#if U_DEBUG
+
+static char gValidMemorySink = 0;
+
+U_CAPI void uprv_checkValidMemory(const void *p, size_t n) {
+ /*
+ * Access the memory to ensure that it's all valid.
+ * Load and save a computed value to try to ensure that the compiler
+ * does not throw away the whole loop.
+ * A thread analyzer might complain about un-mutexed access to gValidMemorySink
+ * which is true but harmless because no one ever uses the value in gValidMemorySink.
+ */
+ const char *s = (const char *)p;
+ char c = gValidMemorySink;
+ size_t i;
+ U_ASSERT(p != NULL);
+ for(i = 0; i < n; ++i) {
+ c ^= s[i];
+ }
+ gValidMemorySink = c;
+}
+
+#endif /* U_DEBUG */
+
+U_CAPI void * U_EXPORT2
+uprv_malloc(size_t s) {
+#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
+#if 1
+ putchar('>');
+ fflush(stdout);
+#else
+ fprintf(stderr,"MALLOC\t#%d\t%ul bytes\t%ul total\n", ++n,s,(b+=s)); fflush(stderr);
+#endif
+#endif
+ if (s > 0) {
+ if (pAlloc) {
+ return (*pAlloc)(pContext, s);
+ } else {
+ return uprv_default_malloc(s);
+ }
+ } else {
+ return (void *)zeroMem;
+ }
+}
+
+U_CAPI void * U_EXPORT2
+uprv_realloc(void * buffer, size_t size) {
+#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
+ putchar('~');
+ fflush(stdout);
+#endif
+ if (buffer == zeroMem) {
+ return uprv_malloc(size);
+ } else if (size == 0) {
+ if (pFree) {
+ (*pFree)(pContext, buffer);
+ } else {
+ uprv_default_free(buffer);
+ }
+ return (void *)zeroMem;
+ } else {
+ if (pRealloc) {
+ return (*pRealloc)(pContext, buffer, size);
+ } else {
+ return uprv_default_realloc(buffer, size);
+ }
+ }
+}
+
+U_CAPI void U_EXPORT2
+uprv_free(void *buffer) {
+#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
+ putchar('<');
+ fflush(stdout);
+#endif
+ if (buffer != zeroMem) {
+ if (pFree) {
+ (*pFree)(pContext, buffer);
+ } else {
+ uprv_default_free(buffer);
+ }
+ }
+}
+
+U_CAPI void * U_EXPORT2
+uprv_calloc(size_t num, size_t size) {
+ void *mem = NULL;
+ size *= num;
+ mem = uprv_malloc(size);
+ if (mem) {
+ uprv_memset(mem, 0, size);
+ }
+ return mem;
+}
+
+U_CAPI void U_EXPORT2
+u_setMemoryFunctions(const void *context, UMemAllocFn *a, UMemReallocFn *r, UMemFreeFn *f, UErrorCode *status)
+{
+ if (U_FAILURE(*status)) {
+ return;
+ }
+ if (a==NULL || r==NULL || f==NULL) {
+ *status = U_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+ pContext = context;
+ pAlloc = a;
+ pRealloc = r;
+ pFree = f;
+}
+
+
+U_CFUNC UBool cmemory_cleanup(void) {
+ pContext = NULL;
+ pAlloc = NULL;
+ pRealloc = NULL;
+ pFree = NULL;
+ return TRUE;
+}
Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/cmemory.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/cmemory.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cmemory.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cmemory.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
******************************************************************************
@@ -162,7 +162,6 @@
* @param p simple pointer to an array of T items that is adopted
*/
explicit LocalMemory(T *p=NULL) : LocalPointerBase<T>(p) {}
-#if U_HAVE_RVALUE_REFERENCES
/**
* Move constructor, leaves src with isNull().
* @param src source smart pointer
@@ -170,7 +169,6 @@
LocalMemory(LocalMemory<T> &&src) U_NOEXCEPT : LocalPointerBase<T>(src.ptr) {
src.ptr=NULL;
}
-#endif
/**
* Destructor deletes the memory it owns.
*/
@@ -177,7 +175,6 @@
~LocalMemory() {
uprv_free(LocalPointerBase<T>::ptr);
}
-#if U_HAVE_RVALUE_REFERENCES
/**
* Move assignment operator, leaves src with isNull().
* The behavior is undefined if *this and src are the same object.
@@ -187,7 +184,6 @@
LocalMemory<T> &operator=(LocalMemory<T> &&src) U_NOEXCEPT {
return moveFrom(src);
}
-#endif
/**
* Move assignment, leaves src with isNull().
* The behavior is undefined if *this and src are the same object.
@@ -313,6 +309,14 @@
*/
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); }
+ };
+ /**
* Destructor deletes the array (if owned).
*/
~MaybeStackArray() { releaseArray(); }
Modified: trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj 2018-01-12 18:35:28 UTC (rev 46290)
@@ -20,6 +20,7 @@
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}</ProjectGuid>
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
@@ -102,6 +103,7 @@
<ProgramDataBaseFileName>.\x86\Release/</ProgramDataBaseFileName>
<WarningLevel>Level3</WarningLevel>
<SuppressStartupBanner>true</SuppressStartupBanner>
+ <AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -108,7 +110,7 @@
<Culture>0x0409</Culture>
</ResourceCompile>
<Link>
- <OutputFile>..\..\bin\icuuc58.dll</OutputFile>
+ <OutputFile>..\..\bin\icuuc60.dll</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<ProgramDatabaseFile>.\..\..\lib\icuuc.pdb</ProgramDatabaseFile>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
@@ -143,6 +145,7 @@
<WarningLevel>Level3</WarningLevel>
<SuppressStartupBanner>true</SuppressStartupBanner>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -149,7 +152,7 @@
<Culture>0x0409</Culture>
</ResourceCompile>
<Link>
- <OutputFile>..\..\bin\icuuc58d.dll</OutputFile>
+ <OutputFile>..\..\bin\icuuc60d.dll</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>.\..\..\lib\icuucd.pdb</ProgramDatabaseFile>
@@ -181,6 +184,7 @@
<ProgramDataBaseFileName>.\x64\Release/</ProgramDataBaseFileName>
<WarningLevel>Level3</WarningLevel>
<SuppressStartupBanner>true</SuppressStartupBanner>
+ <AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -187,7 +191,7 @@
<Culture>0x0409</Culture>
</ResourceCompile>
<Link>
- <OutputFile>..\..\bin64\icuuc58.dll</OutputFile>
+ <OutputFile>..\..\bin64\icuuc60.dll</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<ProgramDatabaseFile>.\..\..\lib64\icuuc.pdb</ProgramDatabaseFile>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
@@ -220,6 +224,7 @@
<WarningLevel>Level3</WarningLevel>
<SuppressStartupBanner>true</SuppressStartupBanner>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -226,7 +231,7 @@
<Culture>0x0409</Culture>
</ResourceCompile>
<Link>
- <OutputFile>..\..\bin64\icuuc58d.dll</OutputFile>
+ <OutputFile>..\..\bin64\icuuc60d.dll</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>.\..\..\lib64\icuucd.pdb</ProgramDatabaseFile>
@@ -237,11 +242,11 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="filteredbrk.cpp" />
- <ClCompile Include="ubidi.c" />
- <ClCompile Include="ubiditransform.c" />
- <ClCompile Include="ubidi_props.c" />
- <ClCompile Include="ubidiln.c" />
- <ClCompile Include="ubidiwrt.c" />
+ <ClCompile Include="ubidi.cpp" />
+ <ClCompile Include="ubiditransform.cpp" />
+ <ClCompile Include="ubidi_props.cpp" />
+ <ClCompile Include="ubidiln.cpp" />
+ <ClCompile Include="ubidiwrt.cpp" />
<ClCompile Include="uloc_keytype.cpp" />
<ClCompile Include="ushape.cpp" />
<ClCompile Include="brkeng.cpp">
@@ -263,6 +268,8 @@
</ClCompile>
<ClCompile Include="rbbitblb.cpp">
</ClCompile>
+ <ClCompile Include="rbbi_cache.cpp">
+ </ClCompile>
<ClCompile Include="dictionarydata.cpp" />
<ClCompile Include="ubrk.cpp" />
<ClCompile Include="ucol_swp.cpp">
@@ -271,12 +278,12 @@
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\i18n;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\i18n;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
- <ClCompile Include="propsvec.c" />
- <ClCompile Include="uarrsort.c" />
- <ClCompile Include="uenum.c" />
- <ClCompile Include="uhash.c" />
+ <ClCompile Include="propsvec.cpp" />
+ <ClCompile Include="uarrsort.cpp" />
+ <ClCompile Include="uenum.cpp" />
+ <ClCompile Include="uhash.cpp" />
<ClCompile Include="uhash_us.cpp" />
- <ClCompile Include="ulist.c" />
+ <ClCompile Include="ulist.cpp" />
<ClCompile Include="ustack.cpp" />
<ClCompile Include="ustrenum.cpp" />
<ClCompile Include="utrie.cpp" />
@@ -286,8 +293,8 @@
<ClCompile Include="uvectr32.cpp" />
<ClCompile Include="uvectr64.cpp" />
<ClCompile Include="errorcode.cpp" />
- <ClCompile Include="icudataver.c" />
- <ClCompile Include="locmap.c">
+ <ClCompile Include="icudataver.cpp" />
+ <ClCompile Include="locmap.cpp">
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DisableLanguageExtensions>
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>
@@ -299,7 +306,7 @@
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DisableLanguageExtensions>
</ClCompile>
- <ClCompile Include="umath.c" />
+ <ClCompile Include="umath.cpp" />
<ClCompile Include="umutex.cpp">
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DisableLanguageExtensions>
@@ -306,52 +313,52 @@
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DisableLanguageExtensions>
</ClCompile>
- <ClCompile Include="utrace.c" />
- <ClCompile Include="utypes.c" />
- <ClCompile Include="wintz.c">
+ <ClCompile Include="utrace.cpp" />
+ <ClCompile Include="utypes.cpp" />
+ <ClCompile Include="wintz.cpp">
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DisableLanguageExtensions>
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DisableLanguageExtensions>
</ClCompile>
- <ClCompile Include="ucnv.c" />
+ <ClCompile Include="ucnv.cpp" />
<ClCompile Include="ucnv2022.cpp" />
<ClCompile Include="ucnv_bld.cpp">
</ClCompile>
- <ClCompile Include="ucnv_cb.c" />
- <ClCompile Include="ucnv_cnv.c" />
- <ClCompile Include="ucnv_ct.c" />
- <ClCompile Include="ucnv_err.c" />
+ <ClCompile Include="ucnv_cb.cpp" />
+ <ClCompile Include="ucnv_cnv.cpp" />
+ <ClCompile Include="ucnv_ct.cpp" />
+ <ClCompile Include="ucnv_err.cpp" />
<ClCompile Include="ucnv_ext.cpp" />
<ClCompile Include="ucnv_io.cpp">
</ClCompile>
- <ClCompile Include="ucnv_lmb.c" />
- <ClCompile Include="ucnv_set.c" />
- <ClCompile Include="ucnv_u16.c" />
- <ClCompile Include="ucnv_u32.c" />
- <ClCompile Include="ucnv_u7.c" />
- <ClCompile Include="ucnv_u8.c" />
+ <ClCompile Include="ucnv_lmb.cpp" />
+ <ClCompile Include="ucnv_set.cpp" />
+ <ClCompile Include="ucnv_u16.cpp" />
+ <ClCompile Include="ucnv_u32.cpp" />
+ <ClCompile Include="ucnv_u7.cpp" />
+ <ClCompile Include="ucnv_u8.cpp" />
<ClCompile Include="ucnvbocu.cpp" />
- <ClCompile Include="ucnvdisp.c" />
- <ClCompile Include="ucnvhz.c" />
- <ClCompile Include="ucnvisci.c" />
- <ClCompile Include="ucnvlat1.c" />
+ <ClCompile Include="ucnvdisp.cpp" />
+ <ClCompile Include="ucnvhz.cpp" />
+ <ClCompile Include="ucnvisci.cpp" />
+ <ClCompile Include="ucnvlat1.cpp" />
<ClCompile Include="ucnvmbcs.cpp" />
- <ClCompile Include="ucnvscsu.c" />
+ <ClCompile Include="ucnvscsu.cpp" />
<ClCompile Include="ucnvsel.cpp">
</ClCompile>
- <ClCompile Include="cmemory.c" />
+ <ClCompile Include="cmemory.cpp" />
<ClCompile Include="ucln_cmn.cpp">
<DisableLanguageExtensions>false</DisableLanguageExtensions>
</ClCompile>
- <ClCompile Include="ucmndata.c" />
+ <ClCompile Include="ucmndata.cpp" />
<ClCompile Include="udata.cpp" />
- <ClCompile Include="udatamem.c" />
- <ClCompile Include="udataswp.c" />
+ <ClCompile Include="udatamem.cpp" />
+ <ClCompile Include="udataswp.cpp" />
<ClCompile Include="uinit.cpp">
<DisableLanguageExtensions>false</DisableLanguageExtensions>
</ClCompile>
- <ClCompile Include="umapfile.c">
+ <ClCompile Include="umapfile.cpp">
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DisableLanguageExtensions>
<DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>
@@ -360,7 +367,7 @@
<ClCompile Include="uobject.cpp" />
<ClCompile Include="dtintrv.cpp" />
<ClCompile Include="parsepos.cpp" />
- <ClCompile Include="ustrfmt.c" />
+ <ClCompile Include="ustrfmt.cpp" />
<ClCompile Include="util.cpp" />
<ClCompile Include="util_props.cpp" />
<ClCompile Include="punycode.cpp" />
@@ -380,10 +387,10 @@
<ClCompile Include="resbund.cpp">
</ClCompile>
<ClCompile Include="resbund_cnv.cpp" />
- <ClCompile Include="ucat.c" />
+ <ClCompile Include="ucat.cpp" />
<ClCompile Include="uloc.cpp" />
- <ClCompile Include="uloc_tag.c" />
- <ClCompile Include="ures_cnv.c" />
+ <ClCompile Include="uloc_tag.cpp" />
+ <ClCompile Include="ures_cnv.cpp" />
<ClCompile Include="uresbund.cpp" />
<ClCompile Include="uresdata.cpp" />
<ClCompile Include="resource.cpp" />
@@ -405,7 +412,7 @@
<ClCompile Include="ruleiter.cpp" />
<ClCompile Include="ucase.cpp">
</ClCompile>
- <ClCompile Include="uchar.c" />
+ <ClCompile Include="uchar.cpp" />
<ClCompile Include="unames.cpp" />
<ClCompile Include="unifiedcache.cpp">
<DisableLanguageExtensions>false</DisableLanguageExtensions>
@@ -417,8 +424,8 @@
<ClCompile Include="uniset_props.cpp" />
<ClCompile Include="unisetspan.cpp" />
<ClCompile Include="uprops.cpp" />
- <ClCompile Include="usc_impl.c" />
- <ClCompile Include="uscript.c" />
+ <ClCompile Include="usc_impl.cpp" />
+ <ClCompile Include="uscript.cpp" />
<ClCompile Include="uscript_props.cpp" />
<ClCompile Include="uset.cpp" />
<ClCompile Include="uset_props.cpp" />
@@ -440,6 +447,7 @@
</ClCompile>
<ClCompile Include="usprep.cpp" />
<ClCompile Include="appendable.cpp" />
+ <ClCompile Include="bytesinkutil.cpp" />
<ClCompile Include="bytestream.cpp" />
<ClCompile Include="bytestrie.cpp" />
<ClCompile Include="bytestriebuilder.cpp" />
@@ -446,9 +454,10 @@
<ClCompile Include="bytestrieiterator.cpp" />
<ClCompile Include="chariter.cpp" />
<ClCompile Include="charstr.cpp" />
- <ClCompile Include="cstring.c" />
+ <ClCompile Include="cstring.cpp" />
<ClCompile Include="cstr.cpp" />
- <ClCompile Include="cwchar.c" />
+ <ClCompile Include="cwchar.cpp" />
+ <ClCompile Include="edits.cpp" />
<ClCompile Include="messagepattern.cpp" />
<ClCompile Include="schriter.cpp" />
<ClCompile Include="stringpiece.cpp" />
@@ -460,7 +469,7 @@
<ClCompile Include="ucharstriebuilder.cpp" />
<ClCompile Include="ucharstrieiterator.cpp" />
<ClCompile Include="uchriter.cpp" />
- <ClCompile Include="uinvchar.c" />
+ <ClCompile Include="uinvchar.cpp" />
<ClCompile Include="uiter.cpp" />
<ClCompile Include="unistr.cpp" />
<ClCompile Include="unistr_case.cpp" />
@@ -476,7 +485,7 @@
<ClCompile Include="ustring.cpp" />
<ClCompile Include="ustrtrns.cpp" />
<ClCompile Include="utext.cpp" />
- <ClCompile Include="utf_impl.c" />
+ <ClCompile Include="utf_impl.cpp" />
<ClCompile Include="listformatter.cpp" />
<ClCompile Include="ulistformatter.cpp" />
</ItemGroup>
@@ -566,6 +575,7 @@
<ClInclude Include="rbbiscan.h" />
<ClInclude Include="rbbisetb.h" />
<ClInclude Include="rbbitblb.h" />
+ <ClInclude Include="rbbi_cache.h" />
<ClInclude Include="dictionarydata.h" />
<CustomBuild Include="unicode\ubrk.h">
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
@@ -1472,6 +1482,7 @@
</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
</CustomBuild>
+ <ClInclude Include="bytesinkutil.h" />
<CustomBuild Include="unicode\bytestream.h">
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
</Command>
@@ -1514,6 +1525,34 @@
</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
</CustomBuild>
+ <CustomBuild Include="unicode\casemap.h">
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+ </CustomBuild>
+ <CustomBuild Include="unicode\char16ptr.h">
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+ </CustomBuild>
<CustomBuild Include="unicode\chariter.h">
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
</Command>
@@ -1532,6 +1571,20 @@
<ClInclude Include="cstring.h" />
<ClInclude Include="cstr.h" />
<ClInclude Include="cwchar.h" />
+ <CustomBuild Include="unicode\edits.h">
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+ </CustomBuild>
<CustomBuild Include="unicode\messagepattern.h">
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
</Command>
@@ -1616,6 +1669,7 @@
</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
</CustomBuild>
+ <ClInclude Include="ucasemap_imp.h" />
<CustomBuild Include="unicode\ucharstrie.h">
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
</Command>
@@ -1843,6 +1897,20 @@
</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
</CustomBuild>
+ <CustomBuild Include="unicode\stringoptions.h">
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+ </CustomBuild>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="common.rc" />
@@ -1856,4 +1924,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
-</Project>
\ No newline at end of file
+</Project>
Modified: trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters 2018-01-12 18:35:28 UTC (rev 46290)
@@ -49,16 +49,16 @@
</Filter>
</ItemGroup>
<ItemGroup>
- <ClCompile Include="ubidi.c">
+ <ClCompile Include="ubidi.cpp">
<Filter>bidi</Filter>
</ClCompile>
- <ClCompile Include="ubidi_props.c">
+ <ClCompile Include="ubidi_props.cpp">
<Filter>bidi</Filter>
</ClCompile>
- <ClCompile Include="ubidiln.c">
+ <ClCompile Include="ubidiln.cpp">
<Filter>bidi</Filter>
</ClCompile>
- <ClCompile Include="ubidiwrt.c">
+ <ClCompile Include="ubidiwrt.cpp">
<Filter>bidi</Filter>
</ClCompile>
<ClCompile Include="ushape.cpp">
@@ -97,6 +97,9 @@
<ClCompile Include="rbbitblb.cpp">
<Filter>break iteration</Filter>
</ClCompile>
+ <ClCompile Include="rbbi_cache.cpp">
+ <Filter>break iteration</Filter>
+ </ClCompile>
<ClCompile Include="ubrk.cpp">
<Filter>break iteration</Filter>
</ClCompile>
@@ -106,22 +109,22 @@
<ClCompile Include="pluralmap.cpp">
<Filter>collections</Filter>
</ClCompile>
- <ClCompile Include="propsvec.c">
+ <ClCompile Include="propsvec.cpp">
<Filter>collections</Filter>
</ClCompile>
- <ClCompile Include="uarrsort.c">
+ <ClCompile Include="uarrsort.cpp">
<Filter>collections</Filter>
</ClCompile>
- <ClCompile Include="uenum.c">
+ <ClCompile Include="uenum.cpp">
<Filter>collections</Filter>
</ClCompile>
- <ClCompile Include="uhash.c">
+ <ClCompile Include="uhash.cpp">
<Filter>collections</Filter>
</ClCompile>
<ClCompile Include="uhash_us.cpp">
<Filter>collections</Filter>
</ClCompile>
- <ClCompile Include="ulist.c">
+ <ClCompile Include="ulist.cpp">
<Filter>collections</Filter>
</ClCompile>
<ClCompile Include="unifiedcache.cpp">
@@ -154,31 +157,31 @@
<ClCompile Include="errorcode.cpp">
<Filter>configuration</Filter>
</ClCompile>
- <ClCompile Include="icudataver.c">
+ <ClCompile Include="icudataver.cpp">
<Filter>configuration</Filter>
</ClCompile>
- <ClCompile Include="locmap.c">
+ <ClCompile Include="locmap.cpp">
<Filter>configuration</Filter>
</ClCompile>
<ClCompile Include="putil.cpp">
<Filter>configuration</Filter>
</ClCompile>
- <ClCompile Include="umath.c">
+ <ClCompile Include="umath.cpp">
<Filter>configuration</Filter>
</ClCompile>
<ClCompile Include="umutex.cpp">
<Filter>configuration</Filter>
</ClCompile>
- <ClCompile Include="utrace.c">
+ <ClCompile Include="utrace.cpp">
<Filter>configuration</Filter>
</ClCompile>
- <ClCompile Include="utypes.c">
+ <ClCompile Include="utypes.cpp">
<Filter>configuration</Filter>
</ClCompile>
- <ClCompile Include="wintz.c">
+ <ClCompile Include="wintz.cpp">
<Filter>configuration</Filter>
</ClCompile>
- <ClCompile Include="ucnv.c">
+ <ClCompile Include="ucnv.cpp">
<Filter>conversion</Filter>
</ClCompile>
<ClCompile Include="ucnv2022.cpp">
@@ -187,13 +190,13 @@
<ClCompile Include="ucnv_bld.cpp">
<Filter>conversion</Filter>
</ClCompile>
- <ClCompile Include="ucnv_cb.c">
+ <ClCompile Include="ucnv_cb.cpp">
<Filter>conversion</Filter>
</ClCompile>
- <ClCompile Include="ucnv_cnv.c">
+ <ClCompile Include="ucnv_cnv.cpp">
<Filter>conversion</Filter>
</ClCompile>
- <ClCompile Include="ucnv_err.c">
+ <ClCompile Include="ucnv_err.cpp">
<Filter>conversion</Filter>
</ClCompile>
<ClCompile Include="ucnv_ext.cpp">
@@ -202,49 +205,49 @@
<ClCompile Include="ucnv_io.cpp">
<Filter>conversion</Filter>
</ClCompile>
- <ClCompile Include="ucnv_lmb.c">
+ <ClCompile Include="ucnv_lmb.cpp">
<Filter>conversion</Filter>
</ClCompile>
- <ClCompile Include="ucnv_set.c">
+ <ClCompile Include="ucnv_set.cpp">
<Filter>conversion</Filter>
</ClCompile>
- <ClCompile Include="ucnv_u16.c">
+ <ClCompile Include="ucnv_u16.cpp">
<Filter>conversion</Filter>
</ClCompile>
- <ClCompile Include="ucnv_u32.c">
+ <ClCompile Include="ucnv_u32.cpp">
<Filter>conversion</Filter>
</ClCompile>
- <ClCompile Include="ucnv_u7.c">
+ <ClCompile Include="ucnv_u7.cpp">
<Filter>conversion</Filter>
</ClCompile>
- <ClCompile Include="ucnv_u8.c">
+ <ClCompile Include="ucnv_u8.cpp">
<Filter>conversion</Filter>
</ClCompile>
<ClCompile Include="ucnvbocu.cpp">
<Filter>conversion</Filter>
</ClCompile>
- <ClCompile Include="ucnvdisp.c">
+ <ClCompile Include="ucnvdisp.cpp">
<Filter>conversion</Filter>
</ClCompile>
- <ClCompile Include="ucnvhz.c">
+ <ClCompile Include="ucnvhz.cpp">
<Filter>conversion</Filter>
</ClCompile>
- <ClCompile Include="ucnvisci.c">
+ <ClCompile Include="ucnvisci.cpp">
<Filter>conversion</Filter>
</ClCompile>
- <ClCompile Include="ucnvlat1.c">
+ <ClCompile Include="ucnvlat1.cpp">
<Filter>conversion</Filter>
</ClCompile>
<ClCompile Include="ucnvmbcs.cpp">
<Filter>conversion</Filter>
</ClCompile>
- <ClCompile Include="ucnvscsu.c">
+ <ClCompile Include="ucnvscsu.cpp">
<Filter>conversion</Filter>
</ClCompile>
<ClCompile Include="ucnvsel.cpp">
<Filter>conversion</Filter>
</ClCompile>
- <ClCompile Include="cmemory.c">
+ <ClCompile Include="cmemory.cpp">
<Filter>data & memory</Filter>
</ClCompile>
<ClCompile Include="sharedobject.cpp">
@@ -253,22 +256,22 @@
<ClCompile Include="ucln_cmn.cpp">
<Filter>data & memory</Filter>
</ClCompile>
- <ClCompile Include="ucmndata.c">
+ <ClCompile Include="ucmndata.cpp">
<Filter>data & memory</Filter>
</ClCompile>
<ClCompile Include="udata.cpp">
<Filter>data & memory</Filter>
</ClCompile>
- <ClCompile Include="udatamem.c">
+ <ClCompile Include="udatamem.cpp">
<Filter>data & memory</Filter>
</ClCompile>
- <ClCompile Include="udataswp.c">
+ <ClCompile Include="udataswp.cpp">
<Filter>data & memory</Filter>
</ClCompile>
<ClCompile Include="uinit.cpp">
<Filter>data & memory</Filter>
</ClCompile>
- <ClCompile Include="umapfile.c">
+ <ClCompile Include="umapfile.cpp">
<Filter>data & memory</Filter>
</ClCompile>
<ClCompile Include="uobject.cpp">
@@ -289,7 +292,7 @@
<ClCompile Include="ucurr.cpp">
<Filter>formatting</Filter>
</ClCompile>
- <ClCompile Include="ustrfmt.c">
+ <ClCompile Include="ustrfmt.cpp">
<Filter>formatting</Filter>
</ClCompile>
<ClCompile Include="util.cpp">
@@ -334,16 +337,16 @@
<ClCompile Include="resbund_cnv.cpp">
<Filter>locales & resources</Filter>
</ClCompile>
- <ClCompile Include="ucat.c">
+ <ClCompile Include="ucat.cpp">
<Filter>locales & resources</Filter>
</ClCompile>
<ClCompile Include="uloc.cpp">
<Filter>locales & resources</Filter>
</ClCompile>
- <ClCompile Include="uloc_tag.c">
+ <ClCompile Include="uloc_tag.cpp">
<Filter>locales & resources</Filter>
</ClCompile>
- <ClCompile Include="ures_cnv.c">
+ <ClCompile Include="ures_cnv.cpp">
<Filter>locales & resources</Filter>
</ClCompile>
<ClCompile Include="uresbund.cpp">
@@ -391,7 +394,7 @@
<ClCompile Include="ucase.cpp">
<Filter>properties & sets</Filter>
</ClCompile>
- <ClCompile Include="uchar.c">
+ <ClCompile Include="uchar.cpp">
<Filter>properties & sets</Filter>
</ClCompile>
<ClCompile Include="unames.cpp">
@@ -418,10 +421,10 @@
<ClCompile Include="uprops.cpp">
<Filter>properties & sets</Filter>
</ClCompile>
- <ClCompile Include="usc_impl.c">
+ <ClCompile Include="usc_impl.cpp">
<Filter>properties & sets</Filter>
</ClCompile>
- <ClCompile Include="uscript.c">
+ <ClCompile Include="uscript.cpp">
<Filter>properties & sets</Filter>
</ClCompile>
<ClCompile Include="uscript_props.cpp">
@@ -460,6 +463,9 @@
<ClCompile Include="usprep.cpp">
<Filter>sprep</Filter>
</ClCompile>
+ <ClCompile Include="bytesinkutil.cpp">
+ <Filter>strings</Filter>
+ </ClCompile>
<ClCompile Include="bytestream.cpp">
<Filter>strings</Filter>
</ClCompile>
@@ -469,15 +475,18 @@
<ClCompile Include="charstr.cpp">
<Filter>strings</Filter>
</ClCompile>
- <ClCompile Include="cstring.c">
+ <ClCompile Include="cstring.cpp">
<Filter>strings</Filter>
</ClCompile>
<ClCompile Include="cstr.cpp">
<Filter>strings</Filter>
</ClCompile>
- <ClCompile Include="cwchar.c">
+ <ClCompile Include="cwchar.cpp">
<Filter>strings</Filter>
</ClCompile>
+ <ClCompile Include="edits.cpp">
+ <Filter>strings</Filter>
+ </ClCompile>
<ClCompile Include="schriter.cpp">
<Filter>strings</Filter>
</ClCompile>
@@ -493,7 +502,7 @@
<ClCompile Include="uchriter.cpp">
<Filter>strings</Filter>
</ClCompile>
- <ClCompile Include="uinvchar.c">
+ <ClCompile Include="uinvchar.cpp">
<Filter>strings</Filter>
</ClCompile>
<ClCompile Include="uiter.cpp">
@@ -541,7 +550,7 @@
<ClCompile Include="utext.cpp">
<Filter>strings</Filter>
</ClCompile>
- <ClCompile Include="utf_impl.c">
+ <ClCompile Include="utf_impl.cpp">
<Filter>strings</Filter>
</ClCompile>
<ClCompile Include="bytestrie.cpp">
@@ -568,7 +577,7 @@
<ClCompile Include="dictionarydata.cpp">
<Filter>break iteration</Filter>
</ClCompile>
- <ClCompile Include="ucnv_ct.c">
+ <ClCompile Include="ucnv_ct.cpp">
<Filter>conversion</Filter>
</ClCompile>
<ClCompile Include="ucharstrie.cpp">
@@ -595,7 +604,7 @@
<ClCompile Include="icuplug.cpp">
<Filter>registration</Filter>
</ClCompile>
- <ClCompile Include="ubiditransform.c">
+ <ClCompile Include="ubiditransform.cpp">
<Filter>bidi</Filter>
</ClCompile>
</ItemGroup>
@@ -633,6 +642,9 @@
<ClInclude Include="rbbitblb.h">
<Filter>break iteration</Filter>
</ClInclude>
+ <ClInclude Include="rbbi_cache.h">
+ <Filter>break iteration</Filter>
+ </ClInclude>
<ClInclude Include="ubrkimpl.h">
<Filter>break iteration</Filter>
</ClInclude>
@@ -858,6 +870,9 @@
<ClInclude Include="sprpimpl.h">
<Filter>sprep</Filter>
</ClInclude>
+ <ClInclude Include="bytesinkutil.h">
+ <Filter>strings</Filter>
+ </ClInclude>
<ClInclude Include="charstr.h">
<Filter>strings</Filter>
</ClInclude>
@@ -870,6 +885,9 @@
<ClInclude Include="cwchar.h">
<Filter>strings</Filter>
</ClInclude>
+ <ClInclude Include="ucasemap_imp.h">
+ <Filter>strings</Filter>
+ </ClInclude>
<ClInclude Include="uinvchar.h">
<Filter>strings</Filter>
</ClInclude>
@@ -1096,9 +1114,18 @@
<CustomBuild Include="unicode\bytestream.h">
<Filter>strings</Filter>
</CustomBuild>
+ <CustomBuild Include="unicode\casemap.h">
+ <Filter>strings</Filter>
+ </CustomBuild>
+ <CustomBuild Include="unicode\char16ptr.h">
+ <Filter>strings</Filter>
+ </CustomBuild>
<CustomBuild Include="unicode\chariter.h">
<Filter>strings</Filter>
</CustomBuild>
+ <CustomBuild Include="unicode\edits.h">
+ <Filter>strings</Filter>
+ </CustomBuild>
<CustomBuild Include="unicode\rep.h">
<Filter>strings</Filter>
</CustomBuild>
@@ -1180,5 +1207,8 @@
<CustomBuild Include="unicode\stringtriebuilder.h">
<Filter>collections</Filter>
</CustomBuild>
+ <CustomBuild Include="unicode\stringoptions.h">
+ <Filter>strings</Filter>
+ </CustomBuild>
</ItemGroup>
</Project>
\ No newline at end of file
Added: trunk/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj
===================================================================
(Binary files differ)
Index: trunk/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj 2018-01-12 18:35:28 UTC (rev 46290)
Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/xml
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/cpputils.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cpputils.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cpputils.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
******************************************************************************
@@ -8,7 +8,7 @@
*
******************************************************************************
* file name: cpputils.h
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*/
Modified: trunk/Build/source/libs/icu/icu-src/source/common/cstr.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cstr.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cstr.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/cstr.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cstr.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cstr.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
******************************************************************************
Deleted: trunk/Build/source/libs/icu/icu-src/source/common/cstring.c
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cstring.c 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cstring.c 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,341 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-******************************************************************************
-*
-* Copyright (C) 1997-2011, International Business Machines
-* Corporation and others. All Rights Reserved.
-*
-******************************************************************************
-*
-* File CSTRING.C
-*
-* @author Helena Shih
-*
-* Modification History:
-*
-* Date Name Description
-* 6/18/98 hshih Created
-* 09/08/98 stephen Added include for ctype, for Mac Port
-* 11/15/99 helena Integrated S/390 IEEE changes.
-******************************************************************************
-*/
-
-
-
-#include <stdlib.h>
-#include <stdio.h>
-#include "unicode/utypes.h"
-#include "cmemory.h"
-#include "cstring.h"
-#include "uassert.h"
-
-/*
- * We hardcode case conversion for invariant characters to match our expectation
- * and the compiler execution charset.
- * This prevents problems on systems
- * - with non-default casing behavior, like Turkish system locales where
- * tolower('I') maps to dotless i and toupper('i') maps to dotted I
- * - where there are no lowercase Latin characters at all, or using different
- * codes (some old EBCDIC codepages)
- *
- * This works because the compiler usually runs on a platform where the execution
- * charset includes all of the invariant characters at their expected
- * code positions, so that the char * string literals in ICU code match
- * the char literals here.
- *
- * Note that the set of lowercase Latin letters is discontiguous in EBCDIC
- * and the set of uppercase Latin letters is discontiguous as well.
- */
-
-U_CAPI UBool U_EXPORT2
-uprv_isASCIILetter(char c) {
-#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY
- return
- ('a'<=c && c<='i') || ('j'<=c && c<='r') || ('s'<=c && c<='z') ||
- ('A'<=c && c<='I') || ('J'<=c && c<='R') || ('S'<=c && c<='Z');
-#else
- return ('a'<=c && c<='z') || ('A'<=c && c<='Z');
-#endif
-}
-
-U_CAPI char U_EXPORT2
-uprv_toupper(char c) {
-#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY
- if(('a'<=c && c<='i') || ('j'<=c && c<='r') || ('s'<=c && c<='z')) {
- c=(char)(c+('A'-'a'));
- }
-#else
- if('a'<=c && c<='z') {
- c=(char)(c+('A'-'a'));
- }
-#endif
- return c;
-}
-
-
-#if 0
-/*
- * Commented out because cstring.h defines uprv_tolower() to be
- * the same as either uprv_asciitolower() or uprv_ebcdictolower()
- * to reduce the amount of code to cover with tests.
- *
- * Note that this uprv_tolower() definition is likely to work for most
- * charset families, not just ASCII and EBCDIC, because its #else branch
- * is written generically.
- */
-U_CAPI char U_EXPORT2
-uprv_tolower(char c) {
-#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY
- if(('A'<=c && c<='I') || ('J'<=c && c<='R') || ('S'<=c && c<='Z')) {
- c=(char)(c+('a'-'A'));
- }
-#else
- if('A'<=c && c<='Z') {
- c=(char)(c+('a'-'A'));
- }
-#endif
- return c;
-}
-#endif
-
-U_CAPI char U_EXPORT2
-uprv_asciitolower(char c) {
- if(0x41<=c && c<=0x5a) {
- c=(char)(c+0x20);
- }
- return c;
-}
-
-U_CAPI char U_EXPORT2
-uprv_ebcdictolower(char c) {
- if( (0xc1<=(uint8_t)c && (uint8_t)c<=0xc9) ||
- (0xd1<=(uint8_t)c && (uint8_t)c<=0xd9) ||
- (0xe2<=(uint8_t)c && (uint8_t)c<=0xe9)
- ) {
- c=(char)(c-0x40);
- }
- return c;
-}
-
-
-U_CAPI char* U_EXPORT2
-T_CString_toLowerCase(char* str)
-{
- char* origPtr = str;
-
- if (str) {
- do
- *str = (char)uprv_tolower(*str);
- while (*(str++));
- }
-
- return origPtr;
-}
-
-U_CAPI char* U_EXPORT2
-T_CString_toUpperCase(char* str)
-{
- char* origPtr = str;
-
- if (str) {
- do
- *str = (char)uprv_toupper(*str);
- while (*(str++));
- }
-
- return origPtr;
-}
-
-/*
- * Takes a int32_t and fills in a char* string with that number "radix"-based.
- * Does not handle negative values (makes an empty string for them).
- * Writes at most 12 chars ("-2147483647" plus NUL).
- * Returns the length of the string (not including the NUL).
- */
-U_CAPI int32_t U_EXPORT2
-T_CString_integerToString(char* buffer, int32_t v, int32_t radix)
-{
- char tbuf[30];
- int32_t tbx = sizeof(tbuf);
- uint8_t digit;
- int32_t length = 0;
- uint32_t uval;
-
- U_ASSERT(radix>=2 && radix<=16);
- uval = (uint32_t) v;
- if(v<0 && radix == 10) {
- /* Only in base 10 do we conside numbers to be signed. */
- uval = (uint32_t)(-v);
- buffer[length++] = '-';
- }
-
- tbx = sizeof(tbuf)-1;
- tbuf[tbx] = 0; /* We are generating the digits backwards. Null term the end. */
- do {
- digit = (uint8_t)(uval % radix);
- tbuf[--tbx] = (char)(T_CString_itosOffset(digit));
- uval = uval / radix;
- } while (uval != 0);
-
- /* copy converted number into user buffer */
- uprv_strcpy(buffer+length, tbuf+tbx);
- length += sizeof(tbuf) - tbx -1;
- return length;
-}
-
-
-
-/*
- * Takes a int64_t and fills in a char* string with that number "radix"-based.
- * Writes at most 21: chars ("-9223372036854775807" plus NUL).
- * Returns the length of the string, not including the terminating NULL.
- */
-U_CAPI int32_t U_EXPORT2
-T_CString_int64ToString(char* buffer, int64_t v, uint32_t radix)
-{
- char tbuf[30];
- int32_t tbx = sizeof(tbuf);
- uint8_t digit;
- int32_t length = 0;
- uint64_t uval;
-
- U_ASSERT(radix>=2 && radix<=16);
- uval = (uint64_t) v;
- if(v<0 && radix == 10) {
- /* Only in base 10 do we conside numbers to be signed. */
- uval = (uint64_t)(-v);
- buffer[length++] = '-';
- }
-
- tbx = sizeof(tbuf)-1;
- tbuf[tbx] = 0; /* We are generating the digits backwards. Null term the end. */
- do {
- digit = (uint8_t)(uval % radix);
- tbuf[--tbx] = (char)(T_CString_itosOffset(digit));
- uval = uval / radix;
- } while (uval != 0);
-
- /* copy converted number into user buffer */
- uprv_strcpy(buffer+length, tbuf+tbx);
- length += sizeof(tbuf) - tbx -1;
- return length;
-}
-
-
-U_CAPI int32_t U_EXPORT2
-T_CString_stringToInteger(const char *integerString, int32_t radix)
-{
- char *end;
- return uprv_strtoul(integerString, &end, radix);
-
-}
-
-U_CAPI int U_EXPORT2
-uprv_stricmp(const char *str1, const char *str2) {
- if(str1==NULL) {
- if(str2==NULL) {
- return 0;
- } else {
- return -1;
- }
- } else if(str2==NULL) {
- return 1;
- } else {
- /* compare non-NULL strings lexically with lowercase */
- int rc;
- unsigned char c1, c2;
-
- for(;;) {
- c1=(unsigned char)*str1;
- c2=(unsigned char)*str2;
- if(c1==0) {
- if(c2==0) {
- return 0;
- } else {
- return -1;
- }
- } else if(c2==0) {
- return 1;
- } else {
- /* compare non-zero characters with lowercase */
- rc=(int)(unsigned char)uprv_tolower(c1)-(int)(unsigned char)uprv_tolower(c2);
- if(rc!=0) {
- return rc;
- }
- }
- ++str1;
- ++str2;
- }
- }
-}
-
-U_CAPI int U_EXPORT2
-uprv_strnicmp(const char *str1, const char *str2, uint32_t n) {
- if(str1==NULL) {
- if(str2==NULL) {
- return 0;
- } else {
- return -1;
- }
- } else if(str2==NULL) {
- return 1;
- } else {
- /* compare non-NULL strings lexically with lowercase */
- int rc;
- unsigned char c1, c2;
-
- for(; n--;) {
- c1=(unsigned char)*str1;
- c2=(unsigned char)*str2;
- if(c1==0) {
- if(c2==0) {
- return 0;
- } else {
- return -1;
- }
- } else if(c2==0) {
- return 1;
- } else {
- /* compare non-zero characters with lowercase */
- rc=(int)(unsigned char)uprv_tolower(c1)-(int)(unsigned char)uprv_tolower(c2);
- if(rc!=0) {
- return rc;
- }
- }
- ++str1;
- ++str2;
- }
- }
-
- return 0;
-}
-
-U_CAPI char* U_EXPORT2
-uprv_strdup(const char *src) {
- size_t len = uprv_strlen(src) + 1;
- char *dup = (char *) uprv_malloc(len);
-
- if (dup) {
- uprv_memcpy(dup, src, len);
- }
-
- return dup;
-}
-
-U_CAPI char* U_EXPORT2
-uprv_strndup(const char *src, int32_t n) {
- char *dup;
-
- if(n < 0) {
- dup = uprv_strdup(src);
- } else {
- dup = (char*)uprv_malloc(n+1);
- if (dup) {
- uprv_memcpy(dup, src, n);
- dup[n] = 0;
- }
- }
-
- return dup;
-}
Added: trunk/Build/source/libs/icu/icu-src/source/common/cstring.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cstring.cpp (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cstring.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,341 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+******************************************************************************
+*
+* Copyright (C) 1997-2011, International Business Machines
+* Corporation and others. All Rights Reserved.
+*
+******************************************************************************
+*
+* File CSTRING.C
+*
+* @author Helena Shih
+*
+* Modification History:
+*
+* Date Name Description
+* 6/18/98 hshih Created
+* 09/08/98 stephen Added include for ctype, for Mac Port
+* 11/15/99 helena Integrated S/390 IEEE changes.
+******************************************************************************
+*/
+
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "unicode/utypes.h"
+#include "cmemory.h"
+#include "cstring.h"
+#include "uassert.h"
+
+/*
+ * We hardcode case conversion for invariant characters to match our expectation
+ * and the compiler execution charset.
+ * This prevents problems on systems
+ * - with non-default casing behavior, like Turkish system locales where
+ * tolower('I') maps to dotless i and toupper('i') maps to dotted I
+ * - where there are no lowercase Latin characters at all, or using different
+ * codes (some old EBCDIC codepages)
+ *
+ * This works because the compiler usually runs on a platform where the execution
+ * charset includes all of the invariant characters at their expected
+ * code positions, so that the char * string literals in ICU code match
+ * the char literals here.
+ *
+ * Note that the set of lowercase Latin letters is discontiguous in EBCDIC
+ * and the set of uppercase Latin letters is discontiguous as well.
+ */
+
+U_CAPI UBool U_EXPORT2
+uprv_isASCIILetter(char c) {
+#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY
+ return
+ ('a'<=c && c<='i') || ('j'<=c && c<='r') || ('s'<=c && c<='z') ||
+ ('A'<=c && c<='I') || ('J'<=c && c<='R') || ('S'<=c && c<='Z');
+#else
+ return ('a'<=c && c<='z') || ('A'<=c && c<='Z');
+#endif
+}
+
+U_CAPI char U_EXPORT2
+uprv_toupper(char c) {
+#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY
+ if(('a'<=c && c<='i') || ('j'<=c && c<='r') || ('s'<=c && c<='z')) {
+ c=(char)(c+('A'-'a'));
+ }
+#else
+ if('a'<=c && c<='z') {
+ c=(char)(c+('A'-'a'));
+ }
+#endif
+ return c;
+}
+
+
+#if 0
+/*
+ * Commented out because cstring.h defines uprv_tolower() to be
+ * the same as either uprv_asciitolower() or uprv_ebcdictolower()
+ * to reduce the amount of code to cover with tests.
+ *
+ * Note that this uprv_tolower() definition is likely to work for most
+ * charset families, not just ASCII and EBCDIC, because its #else branch
+ * is written generically.
+ */
+U_CAPI char U_EXPORT2
+uprv_tolower(char c) {
+#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY
+ if(('A'<=c && c<='I') || ('J'<=c && c<='R') || ('S'<=c && c<='Z')) {
+ c=(char)(c+('a'-'A'));
+ }
+#else
+ if('A'<=c && c<='Z') {
+ c=(char)(c+('a'-'A'));
+ }
+#endif
+ return c;
+}
+#endif
+
+U_CAPI char U_EXPORT2
+uprv_asciitolower(char c) {
+ if(0x41<=c && c<=0x5a) {
+ c=(char)(c+0x20);
+ }
+ return c;
+}
+
+U_CAPI char U_EXPORT2
+uprv_ebcdictolower(char c) {
+ if( (0xc1<=(uint8_t)c && (uint8_t)c<=0xc9) ||
+ (0xd1<=(uint8_t)c && (uint8_t)c<=0xd9) ||
+ (0xe2<=(uint8_t)c && (uint8_t)c<=0xe9)
+ ) {
+ c=(char)(c-0x40);
+ }
+ return c;
+}
+
+
+U_CAPI char* U_EXPORT2
+T_CString_toLowerCase(char* str)
+{
+ char* origPtr = str;
+
+ if (str) {
+ do
+ *str = (char)uprv_tolower(*str);
+ while (*(str++));
+ }
+
+ return origPtr;
+}
+
+U_CAPI char* U_EXPORT2
+T_CString_toUpperCase(char* str)
+{
+ char* origPtr = str;
+
+ if (str) {
+ do
+ *str = (char)uprv_toupper(*str);
+ while (*(str++));
+ }
+
+ return origPtr;
+}
+
+/*
+ * Takes a int32_t and fills in a char* string with that number "radix"-based.
+ * Does not handle negative values (makes an empty string for them).
+ * Writes at most 12 chars ("-2147483647" plus NUL).
+ * Returns the length of the string (not including the NUL).
+ */
+U_CAPI int32_t U_EXPORT2
+T_CString_integerToString(char* buffer, int32_t v, int32_t radix)
+{
+ char tbuf[30];
+ int32_t tbx = sizeof(tbuf);
+ uint8_t digit;
+ int32_t length = 0;
+ uint32_t uval;
+
+ U_ASSERT(radix>=2 && radix<=16);
+ uval = (uint32_t) v;
+ if(v<0 && radix == 10) {
+ /* Only in base 10 do we conside numbers to be signed. */
+ uval = (uint32_t)(-v);
+ buffer[length++] = '-';
+ }
+
+ tbx = sizeof(tbuf)-1;
+ tbuf[tbx] = 0; /* We are generating the digits backwards. Null term the end. */
+ do {
+ digit = (uint8_t)(uval % radix);
+ tbuf[--tbx] = (char)(T_CString_itosOffset(digit));
+ uval = uval / radix;
+ } while (uval != 0);
+
+ /* copy converted number into user buffer */
+ uprv_strcpy(buffer+length, tbuf+tbx);
+ length += sizeof(tbuf) - tbx -1;
+ return length;
+}
+
+
+
+/*
+ * Takes a int64_t and fills in a char* string with that number "radix"-based.
+ * Writes at most 21: chars ("-9223372036854775807" plus NUL).
+ * Returns the length of the string, not including the terminating NULL.
+ */
+U_CAPI int32_t U_EXPORT2
+T_CString_int64ToString(char* buffer, int64_t v, uint32_t radix)
+{
+ char tbuf[30];
+ int32_t tbx = sizeof(tbuf);
+ uint8_t digit;
+ int32_t length = 0;
+ uint64_t uval;
+
+ U_ASSERT(radix>=2 && radix<=16);
+ uval = (uint64_t) v;
+ if(v<0 && radix == 10) {
+ /* Only in base 10 do we conside numbers to be signed. */
+ uval = (uint64_t)(-v);
+ buffer[length++] = '-';
+ }
+
+ tbx = sizeof(tbuf)-1;
+ tbuf[tbx] = 0; /* We are generating the digits backwards. Null term the end. */
+ do {
+ digit = (uint8_t)(uval % radix);
+ tbuf[--tbx] = (char)(T_CString_itosOffset(digit));
+ uval = uval / radix;
+ } while (uval != 0);
+
+ /* copy converted number into user buffer */
+ uprv_strcpy(buffer+length, tbuf+tbx);
+ length += sizeof(tbuf) - tbx -1;
+ return length;
+}
+
+
+U_CAPI int32_t U_EXPORT2
+T_CString_stringToInteger(const char *integerString, int32_t radix)
+{
+ char *end;
+ return uprv_strtoul(integerString, &end, radix);
+
+}
+
+U_CAPI int U_EXPORT2
+uprv_stricmp(const char *str1, const char *str2) {
+ if(str1==NULL) {
+ if(str2==NULL) {
+ return 0;
+ } else {
+ return -1;
+ }
+ } else if(str2==NULL) {
+ return 1;
+ } else {
+ /* compare non-NULL strings lexically with lowercase */
+ int rc;
+ unsigned char c1, c2;
+
+ for(;;) {
+ c1=(unsigned char)*str1;
+ c2=(unsigned char)*str2;
+ if(c1==0) {
+ if(c2==0) {
+ return 0;
+ } else {
+ return -1;
+ }
+ } else if(c2==0) {
+ return 1;
+ } else {
+ /* compare non-zero characters with lowercase */
+ rc=(int)(unsigned char)uprv_tolower(c1)-(int)(unsigned char)uprv_tolower(c2);
+ if(rc!=0) {
+ return rc;
+ }
+ }
+ ++str1;
+ ++str2;
+ }
+ }
+}
+
+U_CAPI int U_EXPORT2
+uprv_strnicmp(const char *str1, const char *str2, uint32_t n) {
+ if(str1==NULL) {
+ if(str2==NULL) {
+ return 0;
+ } else {
+ return -1;
+ }
+ } else if(str2==NULL) {
+ return 1;
+ } else {
+ /* compare non-NULL strings lexically with lowercase */
+ int rc;
+ unsigned char c1, c2;
+
+ for(; n--;) {
+ c1=(unsigned char)*str1;
+ c2=(unsigned char)*str2;
+ if(c1==0) {
+ if(c2==0) {
+ return 0;
+ } else {
+ return -1;
+ }
+ } else if(c2==0) {
+ return 1;
+ } else {
+ /* compare non-zero characters with lowercase */
+ rc=(int)(unsigned char)uprv_tolower(c1)-(int)(unsigned char)uprv_tolower(c2);
+ if(rc!=0) {
+ return rc;
+ }
+ }
+ ++str1;
+ ++str2;
+ }
+ }
+
+ return 0;
+}
+
+U_CAPI char* U_EXPORT2
+uprv_strdup(const char *src) {
+ size_t len = uprv_strlen(src) + 1;
+ char *dup = (char *) uprv_malloc(len);
+
+ if (dup) {
+ uprv_memcpy(dup, src, len);
+ }
+
+ return dup;
+}
+
+U_CAPI char* U_EXPORT2
+uprv_strndup(const char *src, int32_t n) {
+ char *dup;
+
+ if(n < 0) {
+ dup = uprv_strdup(src);
+ } else {
+ dup = (char*)uprv_malloc(n+1);
+ if (dup) {
+ uprv_memcpy(dup, src, n);
+ dup[n] = 0;
+ }
+ }
+
+ return dup;
+}
Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/cstring.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/cstring.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cstring.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cstring.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
******************************************************************************
Deleted: trunk/Build/source/libs/icu/icu-src/source/common/cwchar.c
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cwchar.c 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cwchar.c 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,55 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-******************************************************************************
-*
-* Copyright (C) 2001, International Business Machines
-* Corporation and others. All Rights Reserved.
-*
-******************************************************************************
-* file name: cwchar.c
-* encoding: US-ASCII
-* tab size: 8 (not used)
-* indentation:4
-*
-* created on: 2001may25
-* created by: Markus W. Scherer
-*/
-
-#include "unicode/utypes.h"
-
-#if !U_HAVE_WCSCPY
-
-#include "cwchar.h"
-
-U_CAPI wchar_t *uprv_wcscat(wchar_t *dst, const wchar_t *src) {
- wchar_t *start=dst;
- while(*dst!=0) {
- ++dst;
- }
- while((*dst=*src)!=0) {
- ++dst;
- ++src;
- }
- return start;
-}
-
-U_CAPI wchar_t *uprv_wcscpy(wchar_t *dst, const wchar_t *src) {
- wchar_t *start=dst;
- while((*dst=*src)!=0) {
- ++dst;
- ++src;
- }
- return start;
-}
-
-U_CAPI size_t uprv_wcslen(const wchar_t *src) {
- const wchar_t *start=src;
- while(*src!=0) {
- ++src;
- }
- return src-start;
-}
-
-#endif
-
Added: trunk/Build/source/libs/icu/icu-src/source/common/cwchar.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cwchar.cpp (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cwchar.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,55 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+******************************************************************************
+*
+* Copyright (C) 2001, International Business Machines
+* Corporation and others. All Rights Reserved.
+*
+******************************************************************************
+* file name: cwchar.c
+* encoding: UTF-8
+* tab size: 8 (not used)
+* indentation:4
+*
+* created on: 2001may25
+* created by: Markus W. Scherer
+*/
+
+#include "unicode/utypes.h"
+
+#if !U_HAVE_WCSCPY
+
+#include "cwchar.h"
+
+U_CAPI wchar_t *uprv_wcscat(wchar_t *dst, const wchar_t *src) {
+ wchar_t *start=dst;
+ while(*dst!=0) {
+ ++dst;
+ }
+ while((*dst=*src)!=0) {
+ ++dst;
+ ++src;
+ }
+ return start;
+}
+
+U_CAPI wchar_t *uprv_wcscpy(wchar_t *dst, const wchar_t *src) {
+ wchar_t *start=dst;
+ while((*dst=*src)!=0) {
+ ++dst;
+ ++src;
+ }
+ return start;
+}
+
+U_CAPI size_t uprv_wcslen(const wchar_t *src) {
+ const wchar_t *start=src;
+ while(*src!=0) {
+ ++src;
+ }
+ return src-start;
+}
+
+#endif
+
Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/cwchar.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/cwchar.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cwchar.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cwchar.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
******************************************************************************
@@ -8,7 +8,7 @@
*
******************************************************************************
* file name: cwchar.h
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
Modified: trunk/Build/source/libs/icu/icu-src/source/common/dictbe.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/dictbe.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/dictbe.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/**
*******************************************************************************
@@ -46,9 +46,9 @@
DictionaryBreakEngine::findBreaks( UText *text,
int32_t startPos,
int32_t endPos,
- UBool reverse,
int32_t breakType,
- UStack &foundBreaks ) const {
+ UVector32 &foundBreaks ) const {
+ (void)startPos; // TODO: remove this param?
int32_t result = 0;
// Find the span of characters included in the set.
@@ -60,34 +60,12 @@
int32_t rangeStart;
int32_t rangeEnd;
UChar32 c = utext_current32(text);
- if (reverse) {
- UBool isDict = fSet.contains(c);
- while((current = (int32_t)utext_getNativeIndex(text)) > startPos && isDict) {
- c = utext_previous32(text);
- isDict = fSet.contains(c);
- }
- if (current < startPos) {
- rangeStart = startPos;
- } else {
- rangeStart = current;
- if (!isDict) {
- utext_next32(text);
- rangeStart = (int32_t)utext_getNativeIndex(text);
- }
- }
- // rangeEnd = start + 1;
- utext_setNativeIndex(text, start);
- utext_next32(text);
- rangeEnd = (int32_t)utext_getNativeIndex(text);
+ while((current = (int32_t)utext_getNativeIndex(text)) < endPos && fSet.contains(c)) {
+ utext_next32(text); // TODO: recast loop for postincrement
+ c = utext_current32(text);
}
- else {
- while((current = (int32_t)utext_getNativeIndex(text)) < endPos && fSet.contains(c)) {
- utext_next32(text); // TODO: recast loop for postincrement
- c = utext_current32(text);
- }
- rangeStart = start;
- rangeEnd = current;
- }
+ rangeStart = start;
+ rangeEnd = current;
if (breakType >= 0 && breakType < 32 && (((uint32_t)1 << breakType) & fTypes)) {
result = divideUpDictionaryRange(text, rangeStart, rangeEnd, foundBreaks);
utext_setNativeIndex(text, current);
@@ -248,7 +226,7 @@
ThaiBreakEngine::divideUpDictionaryRange( UText *text,
int32_t rangeStart,
int32_t rangeEnd,
- UStack &foundBreaks ) const {
+ UVector32 &foundBreaks ) const {
utext_setNativeIndex(text, rangeStart);
utext_moveIndex32(text, THAI_MIN_WORD_SPAN);
if (utext_getNativeIndex(text) >= rangeEnd) {
@@ -487,7 +465,7 @@
LaoBreakEngine::divideUpDictionaryRange( UText *text,
int32_t rangeStart,
int32_t rangeEnd,
- UStack &foundBreaks ) const {
+ UVector32 &foundBreaks ) const {
if ((rangeEnd - rangeStart) < LAO_MIN_WORD_SPAN) {
return 0; // Not enough characters for two words
}
@@ -680,7 +658,7 @@
BurmeseBreakEngine::divideUpDictionaryRange( UText *text,
int32_t rangeStart,
int32_t rangeEnd,
- UStack &foundBreaks ) const {
+ UVector32 &foundBreaks ) const {
if ((rangeEnd - rangeStart) < BURMESE_MIN_WORD_SPAN) {
return 0; // Not enough characters for two words
}
@@ -885,7 +863,7 @@
KhmerBreakEngine::divideUpDictionaryRange( UText *text,
int32_t rangeStart,
int32_t rangeEnd,
- UStack &foundBreaks ) const {
+ UVector32 &foundBreaks ) const {
if ((rangeEnd - rangeStart) < KHMER_MIN_WORD_SPAN) {
return 0; // Not enough characters for two words
}
@@ -1110,9 +1088,9 @@
return (wordLength > kMaxKatakanaLength) ? 8192 : katakanaCost[wordLength];
}
-static inline bool isKatakana(uint16_t value) {
- return (value >= 0x30A1u && value <= 0x30FEu && value != 0x30FBu) ||
- (value >= 0xFF66u && value <= 0xFF9fu);
+static inline bool isKatakana(UChar32 value) {
+ return (value >= 0x30A1 && value <= 0x30FE && value != 0x30FB) ||
+ (value >= 0xFF66 && value <= 0xFF9f);
}
@@ -1128,7 +1106,7 @@
* @param text A UText representing the text
* @param rangeStart The start of the range of dictionary characters
* @param rangeEnd The end of the range of dictionary characters
- * @param foundBreaks Output of C array of int32_t break positions, or 0
+ * @param foundBreaks vector<int32> to receive the break positions
* @return The number of breaks found
*/
int32_t
@@ -1135,7 +1113,7 @@
CjkBreakEngine::divideUpDictionaryRange( UText *inText,
int32_t rangeStart,
int32_t rangeEnd,
- UStack &foundBreaks ) const {
+ UVector32 &foundBreaks ) const {
if (rangeStart >= rangeEnd) {
return 0;
}
@@ -1385,13 +1363,27 @@
// Now that we're done, convert positions in t_boundary[] (indices in
// the normalized input string) back to indices in the original input UText
// while reversing t_boundary and pushing values to foundBreaks.
+ int32_t prevCPPos = -1;
+ int32_t prevUTextPos = -1;
for (int32_t i = numBreaks-1; i >= 0; i--) {
int32_t cpPos = t_boundary.elementAti(i);
+ U_ASSERT(cpPos > prevCPPos);
int32_t utextPos = inputMap.isValid() ? inputMap->elementAti(cpPos) : cpPos + rangeStart;
- // Boundaries are added to foundBreaks output in ascending order.
- U_ASSERT(foundBreaks.size() == 0 ||foundBreaks.peeki() < utextPos);
- foundBreaks.push(utextPos, status);
+ U_ASSERT(utextPos >= prevUTextPos);
+ if (utextPos > prevUTextPos) {
+ // Boundaries are added to foundBreaks output in ascending order.
+ U_ASSERT(foundBreaks.size() == 0 || foundBreaks.peeki() < utextPos);
+ foundBreaks.push(utextPos, status);
+ } else {
+ // Normalization expanded the input text, the dictionary found a boundary
+ // within the expansion, giving two boundaries with the same index in the
+ // original text. Ignore the second. See ticket #12918.
+ --numBreaks;
+ }
+ prevCPPos = cpPos;
+ prevUTextPos = utextPos;
}
+ (void)prevCPPos; // suppress compiler warnings about unused variable
// inString goes out of scope
// inputMap goes out of scope
Modified: trunk/Build/source/libs/icu/icu-src/source/common/dictbe.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/dictbe.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/dictbe.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/**
*******************************************************************************
@@ -15,6 +15,7 @@
#include "unicode/utext.h"
#include "brkeng.h"
+#include "uvectr32.h"
U_NAMESPACE_BEGIN
@@ -84,21 +85,18 @@
*
* @param text A UText representing the text. The iterator is left at
* the end of the run of characters which the engine is capable of handling
- * that starts from the first (or last) character in the range.
+ * that starts from the first character in the range.
* @param startPos The start of the run within the supplied text.
* @param endPos The end of the run within the supplied text.
- * @param reverse Whether the caller is looking for breaks in a reverse
- * direction.
* @param breakType The type of break desired, or -1.
- * @param foundBreaks An allocated C array of the breaks found, if any
+ * @param foundBreaks vector of int32_t to receive the break positions
* @return The number of breaks found.
*/
virtual int32_t findBreaks( UText *text,
int32_t startPos,
int32_t endPos,
- UBool reverse,
int32_t breakType,
- UStack &foundBreaks ) const;
+ UVector32 &foundBreaks ) const;
protected:
@@ -128,7 +126,7 @@
virtual int32_t divideUpDictionaryRange( UText *text,
int32_t rangeStart,
int32_t rangeEnd,
- UStack &foundBreaks ) const = 0;
+ UVector32 &foundBreaks ) const = 0;
};
@@ -185,7 +183,7 @@
virtual int32_t divideUpDictionaryRange( UText *text,
int32_t rangeStart,
int32_t rangeEnd,
- UStack &foundBreaks ) const;
+ UVector32 &foundBreaks ) const;
};
@@ -241,7 +239,7 @@
virtual int32_t divideUpDictionaryRange( UText *text,
int32_t rangeStart,
int32_t rangeEnd,
- UStack &foundBreaks ) const;
+ UVector32 &foundBreaks ) const;
};
@@ -297,7 +295,7 @@
virtual int32_t divideUpDictionaryRange( UText *text,
int32_t rangeStart,
int32_t rangeEnd,
- UStack &foundBreaks ) const;
+ UVector32 &foundBreaks ) const;
};
@@ -353,7 +351,7 @@
virtual int32_t divideUpDictionaryRange( UText *text,
int32_t rangeStart,
int32_t rangeEnd,
- UStack &foundBreaks ) const;
+ UVector32 &foundBreaks ) const;
};
@@ -417,7 +415,7 @@
virtual int32_t divideUpDictionaryRange( UText *text,
int32_t rangeStart,
int32_t rangeEnd,
- UStack &foundBreaks ) const;
+ UVector32 &foundBreaks ) const;
};
Modified: trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/dtintrv.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/dtintrv.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/dtintrv.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*******************************************************************************
* Copyright (C) 2008, International Business Machines Corporation and
Added: trunk/Build/source/libs/icu/icu-src/source/common/edits.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/edits.cpp (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/edits.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,776 @@
+// © 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+// edits.cpp
+// created: 2017feb08 Markus W. Scherer
+
+#include "unicode/utypes.h"
+#include "unicode/edits.h"
+#include "cmemory.h"
+#include "uassert.h"
+
+U_NAMESPACE_BEGIN
+
+namespace {
+
+// 0000uuuuuuuuuuuu records u+1 unchanged text units.
+const int32_t MAX_UNCHANGED_LENGTH = 0x1000;
+const int32_t MAX_UNCHANGED = MAX_UNCHANGED_LENGTH - 1;
+
+// 0mmmnnnccccccccc with m=1..6 records ccc+1 replacements of m:n text units.
+const int32_t MAX_SHORT_CHANGE_OLD_LENGTH = 6;
+const int32_t MAX_SHORT_CHANGE_NEW_LENGTH = 7;
+const int32_t SHORT_CHANGE_NUM_MASK = 0x1ff;
+const int32_t MAX_SHORT_CHANGE = 0x6fff;
+
+// 0111mmmmmmnnnnnn records a replacement of m text units with n.
+// m or n = 61: actual length follows in the next edits array unit.
+// m or n = 62..63: actual length follows in the next two edits array units.
+// Bit 30 of the actual length is in the head unit.
+// Trailing units have bit 15 set.
+const int32_t LENGTH_IN_1TRAIL = 61;
+const int32_t LENGTH_IN_2TRAIL = 62;
+
+} // namespace
+
+void Edits::releaseArray() U_NOEXCEPT {
+ if (array != stackArray) {
+ uprv_free(array);
+ }
+}
+
+Edits &Edits::copyArray(const Edits &other) {
+ if (U_FAILURE(errorCode_)) {
+ length = delta = numChanges = 0;
+ return *this;
+ }
+ if (length > capacity) {
+ uint16_t *newArray = (uint16_t *)uprv_malloc((size_t)length * 2);
+ if (newArray == nullptr) {
+ length = delta = numChanges = 0;
+ errorCode_ = U_MEMORY_ALLOCATION_ERROR;
+ return *this;
+ }
+ releaseArray();
+ array = newArray;
+ capacity = length;
+ }
+ if (length > 0) {
+ uprv_memcpy(array, other.array, (size_t)length * 2);
+ }
+ return *this;
+}
+
+Edits &Edits::moveArray(Edits &src) U_NOEXCEPT {
+ if (U_FAILURE(errorCode_)) {
+ length = delta = numChanges = 0;
+ return *this;
+ }
+ releaseArray();
+ if (length > STACK_CAPACITY) {
+ array = src.array;
+ capacity = src.capacity;
+ src.array = src.stackArray;
+ src.capacity = STACK_CAPACITY;
+ src.reset();
+ return *this;
+ }
+ array = stackArray;
+ capacity = STACK_CAPACITY;
+ if (length > 0) {
+ uprv_memcpy(array, src.array, (size_t)length * 2);
+ }
+ return *this;
+}
+
+Edits &Edits::operator=(const Edits &other) {
+ length = other.length;
+ delta = other.delta;
+ numChanges = other.numChanges;
+ errorCode_ = other.errorCode_;
+ return copyArray(other);
+}
+
+Edits &Edits::operator=(Edits &&src) U_NOEXCEPT {
+ length = src.length;
+ delta = src.delta;
+ numChanges = src.numChanges;
+ errorCode_ = src.errorCode_;
+ return moveArray(src);
+}
+
+Edits::~Edits() {
+ releaseArray();
+}
+
+void Edits::reset() U_NOEXCEPT {
+ length = delta = numChanges = 0;
+ errorCode_ = U_ZERO_ERROR;
+}
+
+void Edits::addUnchanged(int32_t unchangedLength) {
+ if(U_FAILURE(errorCode_) || unchangedLength == 0) { return; }
+ if(unchangedLength < 0) {
+ errorCode_ = U_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+ // Merge into previous unchanged-text record, if any.
+ int32_t last = lastUnit();
+ if(last < MAX_UNCHANGED) {
+ int32_t remaining = MAX_UNCHANGED - last;
+ if (remaining >= unchangedLength) {
+ setLastUnit(last + unchangedLength);
+ return;
+ }
+ setLastUnit(MAX_UNCHANGED);
+ unchangedLength -= remaining;
+ }
+ // Split large lengths into multiple units.
+ while(unchangedLength >= MAX_UNCHANGED_LENGTH) {
+ append(MAX_UNCHANGED);
+ unchangedLength -= MAX_UNCHANGED_LENGTH;
+ }
+ // Write a small (remaining) length.
+ if(unchangedLength > 0) {
+ append(unchangedLength - 1);
+ }
+}
+
+void Edits::addReplace(int32_t oldLength, int32_t newLength) {
+ if(U_FAILURE(errorCode_)) { return; }
+ if(oldLength < 0 || newLength < 0) {
+ errorCode_ = U_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+ if (oldLength == 0 && newLength == 0) {
+ return;
+ }
+ ++numChanges;
+ int32_t newDelta = newLength - oldLength;
+ if (newDelta != 0) {
+ if ((newDelta > 0 && delta >= 0 && newDelta > (INT32_MAX - delta)) ||
+ (newDelta < 0 && delta < 0 && newDelta < (INT32_MIN - delta))) {
+ // Integer overflow or underflow.
+ errorCode_ = U_INDEX_OUTOFBOUNDS_ERROR;
+ return;
+ }
+ delta += newDelta;
+ }
+
+ if(0 < oldLength && oldLength <= MAX_SHORT_CHANGE_OLD_LENGTH &&
+ newLength <= MAX_SHORT_CHANGE_NEW_LENGTH) {
+ // Merge into previous same-lengths short-replacement record, if any.
+ int32_t u = (oldLength << 12) | (newLength << 9);
+ int32_t last = lastUnit();
+ if(MAX_UNCHANGED < last && last < MAX_SHORT_CHANGE &&
+ (last & ~SHORT_CHANGE_NUM_MASK) == u &&
+ (last & SHORT_CHANGE_NUM_MASK) < SHORT_CHANGE_NUM_MASK) {
+ setLastUnit(last + 1);
+ return;
+ }
+ append(u);
+ return;
+ }
+
+ int32_t head = 0x7000;
+ if (oldLength < LENGTH_IN_1TRAIL && newLength < LENGTH_IN_1TRAIL) {
+ head |= oldLength << 6;
+ head |= newLength;
+ append(head);
+ } else if ((capacity - length) >= 5 || growArray()) {
+ int32_t limit = length + 1;
+ if(oldLength < LENGTH_IN_1TRAIL) {
+ head |= oldLength << 6;
+ } else if(oldLength <= 0x7fff) {
+ head |= LENGTH_IN_1TRAIL << 6;
+ array[limit++] = (uint16_t)(0x8000 | oldLength);
+ } else {
+ head |= (LENGTH_IN_2TRAIL + (oldLength >> 30)) << 6;
+ array[limit++] = (uint16_t)(0x8000 | (oldLength >> 15));
+ array[limit++] = (uint16_t)(0x8000 | oldLength);
+ }
+ if(newLength < LENGTH_IN_1TRAIL) {
+ head |= newLength;
+ } else if(newLength <= 0x7fff) {
+ head |= LENGTH_IN_1TRAIL;
+ array[limit++] = (uint16_t)(0x8000 | newLength);
+ } else {
+ head |= LENGTH_IN_2TRAIL + (newLength >> 30);
+ array[limit++] = (uint16_t)(0x8000 | (newLength >> 15));
+ array[limit++] = (uint16_t)(0x8000 | newLength);
+ }
+ array[length] = (uint16_t)head;
+ length = limit;
+ }
+}
+
+void Edits::append(int32_t r) {
+ if(length < capacity || growArray()) {
+ array[length++] = (uint16_t)r;
+ }
+}
+
+UBool Edits::growArray() {
+ int32_t newCapacity;
+ if (array == stackArray) {
+ newCapacity = 2000;
+ } else if (capacity == INT32_MAX) {
+ // Not U_BUFFER_OVERFLOW_ERROR because that could be confused on a string transform API
+ // with a result-string-buffer overflow.
+ errorCode_ = U_INDEX_OUTOFBOUNDS_ERROR;
+ return FALSE;
+ } else if (capacity >= (INT32_MAX / 2)) {
+ newCapacity = INT32_MAX;
+ } else {
+ newCapacity = 2 * capacity;
+ }
+ // Grow by at least 5 units so that a maximal change record will fit.
+ if ((newCapacity - capacity) < 5) {
+ errorCode_ = U_INDEX_OUTOFBOUNDS_ERROR;
+ return FALSE;
+ }
+ uint16_t *newArray = (uint16_t *)uprv_malloc((size_t)newCapacity * 2);
+ if (newArray == NULL) {
+ errorCode_ = U_MEMORY_ALLOCATION_ERROR;
+ return FALSE;
+ }
+ uprv_memcpy(newArray, array, (size_t)length * 2);
+ releaseArray();
+ array = newArray;
+ capacity = newCapacity;
+ return TRUE;
+}
+
+UBool Edits::copyErrorTo(UErrorCode &outErrorCode) {
+ if (U_FAILURE(outErrorCode)) { return TRUE; }
+ if (U_SUCCESS(errorCode_)) { return FALSE; }
+ outErrorCode = errorCode_;
+ return TRUE;
+}
+
+Edits &Edits::mergeAndAppend(const Edits &ab, const Edits &bc, UErrorCode &errorCode) {
+ if (copyErrorTo(errorCode)) { return *this; }
+ // Picture string a --(Edits ab)--> string b --(Edits bc)--> string c.
+ // Parallel iteration over both Edits.
+ Iterator abIter = ab.getFineIterator();
+ Iterator bcIter = bc.getFineIterator();
+ UBool abHasNext = TRUE, bcHasNext = TRUE;
+ // Copy iterator state into local variables, so that we can modify and subdivide spans.
+ // ab old & new length, bc old & new length
+ int32_t aLength = 0, ab_bLength = 0, bc_bLength = 0, cLength = 0;
+ // When we have different-intermediate-length changes, we accumulate a larger change.
+ int32_t pending_aLength = 0, pending_cLength = 0;
+ for (;;) {
+ // At this point, for each of the two iterators:
+ // Either we are done with the locally cached current edit,
+ // and its intermediate-string length has been reset,
+ // or we will continue to work with a truncated remainder of this edit.
+ //
+ // If the current edit is done, and the iterator has not yet reached the end,
+ // then we fetch the next edit. This is true for at least one of the iterators.
+ //
+ // Normally it does not matter whether we fetch from ab and then bc or vice versa.
+ // However, the result is observably different when
+ // ab deletions meet bc insertions at the same intermediate-string index.
+ // Some users expect the bc insertions to come first, so we fetch from bc first.
+ if (bc_bLength == 0) {
+ if (bcHasNext && (bcHasNext = bcIter.next(errorCode))) {
+ bc_bLength = bcIter.oldLength();
+ cLength = bcIter.newLength();
+ if (bc_bLength == 0) {
+ // insertion
+ if (ab_bLength == 0 || !abIter.hasChange()) {
+ addReplace(pending_aLength, pending_cLength + cLength);
+ pending_aLength = pending_cLength = 0;
+ } else {
+ pending_cLength += cLength;
+ }
+ continue;
+ }
+ }
+ // else see if the other iterator is done, too.
+ }
+ if (ab_bLength == 0) {
+ if (abHasNext && (abHasNext = abIter.next(errorCode))) {
+ aLength = abIter.oldLength();
+ ab_bLength = abIter.newLength();
+ if (ab_bLength == 0) {
+ // deletion
+ if (bc_bLength == bcIter.oldLength() || !bcIter.hasChange()) {
+ addReplace(pending_aLength + aLength, pending_cLength);
+ pending_aLength = pending_cLength = 0;
+ } else {
+ pending_aLength += aLength;
+ }
+ continue;
+ }
+ } else if (bc_bLength == 0) {
+ // Both iterators are done at the same time:
+ // The intermediate-string lengths match.
+ break;
+ } else {
+ // The ab output string is shorter than the bc input string.
+ if (!copyErrorTo(errorCode)) {
+ errorCode = U_ILLEGAL_ARGUMENT_ERROR;
+ }
+ return *this;
+ }
+ }
+ if (bc_bLength == 0) {
+ // The bc input string is shorter than the ab output string.
+ if (!copyErrorTo(errorCode)) {
+ errorCode = U_ILLEGAL_ARGUMENT_ERROR;
+ }
+ return *this;
+ }
+ // Done fetching: ab_bLength > 0 && bc_bLength > 0
+
+ // The current state has two parts:
+ // - Past: We accumulate a longer ac edit in the "pending" variables.
+ // - Current: We have copies of the current ab/bc edits in local variables.
+ // At least one side is newly fetched.
+ // One side might be a truncated remainder of an edit we fetched earlier.
+
+ if (!abIter.hasChange() && !bcIter.hasChange()) {
+ // An unchanged span all the way from string a to string c.
+ if (pending_aLength != 0 || pending_cLength != 0) {
+ addReplace(pending_aLength, pending_cLength);
+ pending_aLength = pending_cLength = 0;
+ }
+ int32_t unchangedLength = aLength <= cLength ? aLength : cLength;
+ addUnchanged(unchangedLength);
+ ab_bLength = aLength -= unchangedLength;
+ bc_bLength = cLength -= unchangedLength;
+ // At least one of the unchanged spans is now empty.
+ continue;
+ }
+ if (!abIter.hasChange() && bcIter.hasChange()) {
+ // Unchanged a->b but changed b->c.
+ if (ab_bLength >= bc_bLength) {
+ // Split the longer unchanged span into change + remainder.
+ addReplace(pending_aLength + bc_bLength, pending_cLength + cLength);
+ pending_aLength = pending_cLength = 0;
+ aLength = ab_bLength -= bc_bLength;
+ bc_bLength = 0;
+ continue;
+ }
+ // Handle the shorter unchanged span below like a change.
+ } else if (abIter.hasChange() && !bcIter.hasChange()) {
+ // Changed a->b and then unchanged b->c.
+ if (ab_bLength <= bc_bLength) {
+ // Split the longer unchanged span into change + remainder.
+ addReplace(pending_aLength + aLength, pending_cLength + ab_bLength);
+ pending_aLength = pending_cLength = 0;
+ cLength = bc_bLength -= ab_bLength;
+ ab_bLength = 0;
+ continue;
+ }
+ // Handle the shorter unchanged span below like a change.
+ } else { // both abIter.hasChange() && bcIter.hasChange()
+ if (ab_bLength == bc_bLength) {
+ // Changes on both sides up to the same position. Emit & reset.
+ addReplace(pending_aLength + aLength, pending_cLength + cLength);
+ pending_aLength = pending_cLength = 0;
+ ab_bLength = bc_bLength = 0;
+ continue;
+ }
+ }
+ // Accumulate the a->c change, reset the shorter side,
+ // keep a remainder of the longer one.
+ pending_aLength += aLength;
+ pending_cLength += cLength;
+ if (ab_bLength < bc_bLength) {
+ bc_bLength -= ab_bLength;
+ cLength = ab_bLength = 0;
+ } else { // ab_bLength > bc_bLength
+ ab_bLength -= bc_bLength;
+ aLength = bc_bLength = 0;
+ }
+ }
+ if (pending_aLength != 0 || pending_cLength != 0) {
+ addReplace(pending_aLength, pending_cLength);
+ }
+ copyErrorTo(errorCode);
+ return *this;
+}
+
+Edits::Iterator::Iterator(const uint16_t *a, int32_t len, UBool oc, UBool crs) :
+ array(a), index(0), length(len), remaining(0),
+ onlyChanges_(oc), coarse(crs),
+ dir(0), changed(FALSE), oldLength_(0), newLength_(0),
+ srcIndex(0), replIndex(0), destIndex(0) {}
+
+int32_t Edits::Iterator::readLength(int32_t head) {
+ if (head < LENGTH_IN_1TRAIL) {
+ return head;
+ } else if (head < LENGTH_IN_2TRAIL) {
+ U_ASSERT(index < length);
+ U_ASSERT(array[index] >= 0x8000);
+ return array[index++] & 0x7fff;
+ } else {
+ U_ASSERT((index + 2) <= length);
+ U_ASSERT(array[index] >= 0x8000);
+ U_ASSERT(array[index + 1] >= 0x8000);
+ int32_t len = ((head & 1) << 30) |
+ ((int32_t)(array[index] & 0x7fff) << 15) |
+ (array[index + 1] & 0x7fff);
+ index += 2;
+ return len;
+ }
+}
+
+void Edits::Iterator::updateNextIndexes() {
+ srcIndex += oldLength_;
+ if (changed) {
+ replIndex += newLength_;
+ }
+ destIndex += newLength_;
+}
+
+void Edits::Iterator::updatePreviousIndexes() {
+ srcIndex -= oldLength_;
+ if (changed) {
+ replIndex -= newLength_;
+ }
+ destIndex -= newLength_;
+}
+
+UBool Edits::Iterator::noNext() {
+ // No change before or beyond the string.
+ dir = 0;
+ changed = FALSE;
+ oldLength_ = newLength_ = 0;
+ return FALSE;
+}
+
+UBool Edits::Iterator::next(UBool onlyChanges, UErrorCode &errorCode) {
+ // Forward iteration: Update the string indexes to the limit of the current span,
+ // and post-increment-read array units to assemble a new span.
+ // Leaves the array index one after the last unit of that span.
+ if (U_FAILURE(errorCode)) { return FALSE; }
+ // We have an errorCode in case we need to start guarding against integer overflows.
+ // It is also convenient for caller loops if we bail out when an error was set elsewhere.
+ if (dir > 0) {
+ updateNextIndexes();
+ } else {
+ if (dir < 0) {
+ // Turn around from previous() to next().
+ // Post-increment-read the same span again.
+ if (remaining > 0) {
+ // Fine-grained iterator:
+ // Stay on the current one of a sequence of compressed changes.
+ ++index; // next() rests on the index after the sequence unit.
+ dir = 1;
+ return TRUE;
+ }
+ }
+ dir = 1;
+ }
+ if (remaining >= 1) {
+ // Fine-grained iterator: Continue a sequence of compressed changes.
+ if (remaining > 1) {
+ --remaining;
+ return TRUE;
+ }
+ remaining = 0;
+ }
+ if (index >= length) {
+ return noNext();
+ }
+ int32_t u = array[index++];
+ if (u <= MAX_UNCHANGED) {
+ // Combine adjacent unchanged ranges.
+ changed = FALSE;
+ oldLength_ = u + 1;
+ while (index < length && (u = array[index]) <= MAX_UNCHANGED) {
+ ++index;
+ oldLength_ += u + 1;
+ }
+ newLength_ = oldLength_;
+ if (onlyChanges) {
+ updateNextIndexes();
+ if (index >= length) {
+ return noNext();
+ }
+ // already fetched u > MAX_UNCHANGED at index
+ ++index;
+ } else {
+ return TRUE;
+ }
+ }
+ changed = TRUE;
+ if (u <= MAX_SHORT_CHANGE) {
+ int32_t oldLen = u >> 12;
+ int32_t newLen = (u >> 9) & MAX_SHORT_CHANGE_NEW_LENGTH;
+ int32_t num = (u & SHORT_CHANGE_NUM_MASK) + 1;
+ if (coarse) {
+ oldLength_ = num * oldLen;
+ newLength_ = num * newLen;
+ } else {
+ // Split a sequence of changes that was compressed into one unit.
+ oldLength_ = oldLen;
+ newLength_ = newLen;
+ if (num > 1) {
+ remaining = num; // This is the first of two or more changes.
+ }
+ return TRUE;
+ }
+ } else {
+ U_ASSERT(u <= 0x7fff);
+ oldLength_ = readLength((u >> 6) & 0x3f);
+ newLength_ = readLength(u & 0x3f);
+ if (!coarse) {
+ return TRUE;
+ }
+ }
+ // Combine adjacent changes.
+ while (index < length && (u = array[index]) > MAX_UNCHANGED) {
+ ++index;
+ if (u <= MAX_SHORT_CHANGE) {
+ int32_t num = (u & SHORT_CHANGE_NUM_MASK) + 1;
+ oldLength_ += (u >> 12) * num;
+ newLength_ += ((u >> 9) & MAX_SHORT_CHANGE_NEW_LENGTH) * num;
+ } else {
+ U_ASSERT(u <= 0x7fff);
+ oldLength_ += readLength((u >> 6) & 0x3f);
+ newLength_ += readLength(u & 0x3f);
+ }
+ }
+ return TRUE;
+}
+
+UBool Edits::Iterator::previous(UErrorCode &errorCode) {
+ // Backward iteration: Pre-decrement-read array units to assemble a new span,
+ // then update the string indexes to the start of that span.
+ // Leaves the array index on the head unit of that span.
+ if (U_FAILURE(errorCode)) { return FALSE; }
+ // We have an errorCode in case we need to start guarding against integer overflows.
+ // It is also convenient for caller loops if we bail out when an error was set elsewhere.
+ if (dir >= 0) {
+ if (dir > 0) {
+ // Turn around from next() to previous().
+ // Set the string indexes to the span limit and
+ // pre-decrement-read the same span again.
+ if (remaining > 0) {
+ // Fine-grained iterator:
+ // Stay on the current one of a sequence of compressed changes.
+ --index; // previous() rests on the sequence unit.
+ dir = -1;
+ return TRUE;
+ }
+ updateNextIndexes();
+ }
+ dir = -1;
+ }
+ if (remaining > 0) {
+ // Fine-grained iterator: Continue a sequence of compressed changes.
+ int32_t u = array[index];
+ U_ASSERT(MAX_UNCHANGED < u && u <= MAX_SHORT_CHANGE);
+ if (remaining <= (u & SHORT_CHANGE_NUM_MASK)) {
+ ++remaining;
+ updatePreviousIndexes();
+ return TRUE;
+ }
+ remaining = 0;
+ }
+ if (index <= 0) {
+ return noNext();
+ }
+ int32_t u = array[--index];
+ if (u <= MAX_UNCHANGED) {
+ // Combine adjacent unchanged ranges.
+ changed = FALSE;
+ oldLength_ = u + 1;
+ while (index > 0 && (u = array[index - 1]) <= MAX_UNCHANGED) {
+ --index;
+ oldLength_ += u + 1;
+ }
+ newLength_ = oldLength_;
+ // No need to handle onlyChanges as long as previous() is called only from findIndex().
+ updatePreviousIndexes();
+ return TRUE;
+ }
+ changed = TRUE;
+ if (u <= MAX_SHORT_CHANGE) {
+ int32_t oldLen = u >> 12;
+ int32_t newLen = (u >> 9) & MAX_SHORT_CHANGE_NEW_LENGTH;
+ int32_t num = (u & SHORT_CHANGE_NUM_MASK) + 1;
+ if (coarse) {
+ oldLength_ = num * oldLen;
+ newLength_ = num * newLen;
+ } else {
+ // Split a sequence of changes that was compressed into one unit.
+ oldLength_ = oldLen;
+ newLength_ = newLen;
+ if (num > 1) {
+ remaining = 1; // This is the last of two or more changes.
+ }
+ updatePreviousIndexes();
+ return TRUE;
+ }
+ } else {
+ if (u <= 0x7fff) {
+ // The change is encoded in u alone.
+ oldLength_ = readLength((u >> 6) & 0x3f);
+ newLength_ = readLength(u & 0x3f);
+ } else {
+ // Back up to the head of the change, read the lengths,
+ // and reset the index to the head again.
+ U_ASSERT(index > 0);
+ while ((u = array[--index]) > 0x7fff) {}
+ U_ASSERT(u > MAX_SHORT_CHANGE);
+ int32_t headIndex = index++;
+ oldLength_ = readLength((u >> 6) & 0x3f);
+ newLength_ = readLength(u & 0x3f);
+ index = headIndex;
+ }
+ if (!coarse) {
+ updatePreviousIndexes();
+ return TRUE;
+ }
+ }
+ // Combine adjacent changes.
+ while (index > 0 && (u = array[index - 1]) > MAX_UNCHANGED) {
+ --index;
+ if (u <= MAX_SHORT_CHANGE) {
+ int32_t num = (u & SHORT_CHANGE_NUM_MASK) + 1;
+ oldLength_ += (u >> 12) * num;
+ newLength_ += ((u >> 9) & MAX_SHORT_CHANGE_NEW_LENGTH) * num;
+ } else if (u <= 0x7fff) {
+ // Read the lengths, and reset the index to the head again.
+ int32_t headIndex = index++;
+ oldLength_ += readLength((u >> 6) & 0x3f);
+ newLength_ += readLength(u & 0x3f);
+ index = headIndex;
+ }
+ }
+ updatePreviousIndexes();
+ return TRUE;
+}
+
+int32_t Edits::Iterator::findIndex(int32_t i, UBool findSource, UErrorCode &errorCode) {
+ if (U_FAILURE(errorCode) || i < 0) { return -1; }
+ int32_t spanStart, spanLength;
+ if (findSource) { // find source index
+ spanStart = srcIndex;
+ spanLength = oldLength_;
+ } else { // find destination index
+ spanStart = destIndex;
+ spanLength = newLength_;
+ }
+ if (i < spanStart) {
+ if (i >= (spanStart / 2)) {
+ // Search backwards.
+ for (;;) {
+ UBool hasPrevious = previous(errorCode);
+ U_ASSERT(hasPrevious); // because i>=0 and the first span starts at 0
+ (void)hasPrevious; // avoid unused-variable warning
+ spanStart = findSource ? srcIndex : destIndex;
+ if (i >= spanStart) {
+ // The index is in the current span.
+ return 0;
+ }
+ if (remaining > 0) {
+ // Is the index in one of the remaining compressed edits?
+ // spanStart is the start of the current span, first of the remaining ones.
+ spanLength = findSource ? oldLength_ : newLength_;
+ int32_t u = array[index];
+ U_ASSERT(MAX_UNCHANGED < u && u <= MAX_SHORT_CHANGE);
+ int32_t num = (u & SHORT_CHANGE_NUM_MASK) + 1 - remaining;
+ int32_t len = num * spanLength;
+ if (i >= (spanStart - len)) {
+ int32_t n = ((spanStart - i - 1) / spanLength) + 1;
+ // 1 <= n <= num
+ srcIndex -= n * oldLength_;
+ replIndex -= n * newLength_;
+ destIndex -= n * newLength_;
+ remaining += n;
+ return 0;
+ }
+ // Skip all of these edits at once.
+ srcIndex -= num * oldLength_;
+ replIndex -= num * newLength_;
+ destIndex -= num * newLength_;
+ remaining = 0;
+ }
+ }
+ }
+ // Reset the iterator to the start.
+ dir = 0;
+ index = remaining = oldLength_ = newLength_ = srcIndex = replIndex = destIndex = 0;
+ } else if (i < (spanStart + spanLength)) {
+ // The index is in the current span.
+ return 0;
+ }
+ while (next(FALSE, errorCode)) {
+ if (findSource) {
+ spanStart = srcIndex;
+ spanLength = oldLength_;
+ } else {
+ spanStart = destIndex;
+ spanLength = newLength_;
+ }
+ if (i < (spanStart + spanLength)) {
+ // The index is in the current span.
+ return 0;
+ }
+ if (remaining > 1) {
+ // Is the index in one of the remaining compressed edits?
+ // spanStart is the start of the current span, first of the remaining ones.
+ int32_t len = remaining * spanLength;
+ if (i < (spanStart + len)) {
+ int32_t n = (i - spanStart) / spanLength; // 1 <= n <= remaining - 1
+ srcIndex += n * oldLength_;
+ replIndex += n * newLength_;
+ destIndex += n * newLength_;
+ remaining -= n;
+ return 0;
+ }
+ // Make next() skip all of these edits at once.
+ oldLength_ *= remaining;
+ newLength_ *= remaining;
+ remaining = 0;
+ }
+ }
+ return 1;
+}
+
+int32_t Edits::Iterator::destinationIndexFromSourceIndex(int32_t i, UErrorCode &errorCode) {
+ int32_t where = findIndex(i, TRUE, errorCode);
+ if (where < 0) {
+ // Error or before the string.
+ return 0;
+ }
+ if (where > 0 || i == srcIndex) {
+ // At or after string length, or at start of the found span.
+ return destIndex;
+ }
+ if (changed) {
+ // In a change span, map to its end.
+ return destIndex + newLength_;
+ } else {
+ // In an unchanged span, offset 1:1 within it.
+ return destIndex + (i - srcIndex);
+ }
+}
+
+int32_t Edits::Iterator::sourceIndexFromDestinationIndex(int32_t i, UErrorCode &errorCode) {
+ int32_t where = findIndex(i, FALSE, errorCode);
+ if (where < 0) {
+ // Error or before the string.
+ return 0;
+ }
+ if (where > 0 || i == destIndex) {
+ // At or after string length, or at start of the found span.
+ return srcIndex;
+ }
+ if (changed) {
+ // In a change span, map to its end.
+ return srcIndex + oldLength_;
+ } else {
+ // In an unchanged span, offset within it.
+ return srcIndex + (i - destIndex);
+ }
+}
+
+U_NAMESPACE_END
Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/edits.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/errorcode.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/errorcode.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/errorcode.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -8,7 +8,7 @@
*
*******************************************************************************
* file name: errorcode.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
Modified: trunk/Build/source/libs/icu/icu-src/source/common/filteredbrk.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/filteredbrk.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/filteredbrk.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -694,7 +694,7 @@
}
FilteredBreakIteratorBuilder *
-FilteredBreakIteratorBuilder::createInstance(UErrorCode& status) {
+FilteredBreakIteratorBuilder::createEmptyInstance(UErrorCode& status) {
if(U_FAILURE(status)) return NULL;
LocalPointer<FilteredBreakIteratorBuilder> ret(new SimpleFilteredBreakIteratorBuilder(status), status);
return (U_SUCCESS(status))? ret.orphan(): NULL;
@@ -702,4 +702,4 @@
U_NAMESPACE_END
-#endif //#if !UCONFIG_NO_BREAK_ITERATION && U_HAVE_STD_STRING && !UCONFIG_NO_FILTERED_BREAK_ITERATION
+#endif //#if !UCONFIG_NO_BREAK_ITERATION && !UCONFIG_NO_FILTERED_BREAK_ITERATION
Modified: trunk/Build/source/libs/icu/icu-src/source/common/filterednormalizer2.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/filterednormalizer2.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/filterednormalizer2.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -8,7 +8,7 @@
*
*******************************************************************************
* file name: filterednormalizer2.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
@@ -20,7 +20,9 @@
#if !UCONFIG_NO_NORMALIZATION
+#include "unicode/edits.h"
#include "unicode/normalizer2.h"
+#include "unicode/stringoptions.h"
#include "unicode/uniset.h"
#include "unicode/unistr.h"
#include "unicode/unorm.h"
@@ -85,6 +87,52 @@
return dest;
}
+void
+FilteredNormalizer2::normalizeUTF8(uint32_t options, StringPiece src, ByteSink &sink,
+ Edits *edits, UErrorCode &errorCode) const {
+ if (U_FAILURE(errorCode)) {
+ return;
+ }
+ if (edits != nullptr && (options & U_EDITS_NO_RESET) == 0) {
+ edits->reset();
+ }
+ options |= U_EDITS_NO_RESET; // Do not reset for each span.
+ normalizeUTF8(options, src.data(), src.length(), sink, edits, USET_SPAN_SIMPLE, errorCode);
+}
+
+void
+FilteredNormalizer2::normalizeUTF8(uint32_t options, const char *src, int32_t length,
+ ByteSink &sink, Edits *edits,
+ USetSpanCondition spanCondition,
+ UErrorCode &errorCode) const {
+ while (length > 0) {
+ int32_t spanLength = set.spanUTF8(src, length, spanCondition);
+ if (spanCondition == USET_SPAN_NOT_CONTAINED) {
+ if (spanLength != 0) {
+ if (edits != nullptr) {
+ edits->addUnchanged(spanLength);
+ }
+ if ((options & U_OMIT_UNCHANGED_TEXT) == 0) {
+ sink.Append(src, spanLength);
+ }
+ }
+ spanCondition = USET_SPAN_SIMPLE;
+ } else {
+ if (spanLength != 0) {
+ // Not norm2.normalizeSecondAndAppend() because we do not want
+ // to modify the non-filter part of dest.
+ norm2.normalizeUTF8(options, StringPiece(src, spanLength), sink, edits, errorCode);
+ if (U_FAILURE(errorCode)) {
+ break;
+ }
+ }
+ spanCondition = USET_SPAN_NOT_CONTAINED;
+ }
+ src += spanLength;
+ length -= spanLength;
+ }
+}
+
UnicodeString &
FilteredNormalizer2::normalizeSecondAndAppend(UnicodeString &first,
const UnicodeString &second,
@@ -196,6 +244,31 @@
return TRUE;
}
+UBool
+FilteredNormalizer2::isNormalizedUTF8(StringPiece sp, UErrorCode &errorCode) const {
+ if(U_FAILURE(errorCode)) {
+ return FALSE;
+ }
+ const char *s = sp.data();
+ int32_t length = sp.length();
+ USetSpanCondition spanCondition = USET_SPAN_SIMPLE;
+ while (length > 0) {
+ int32_t spanLength = set.spanUTF8(s, length, spanCondition);
+ if (spanCondition == USET_SPAN_NOT_CONTAINED) {
+ spanCondition = USET_SPAN_SIMPLE;
+ } else {
+ if (!norm2.isNormalizedUTF8(StringPiece(s, spanLength), errorCode) ||
+ U_FAILURE(errorCode)) {
+ return FALSE;
+ }
+ spanCondition = USET_SPAN_NOT_CONTAINED;
+ }
+ s += spanLength;
+ length -= spanLength;
+ }
+ return TRUE;
+}
+
UNormalizationCheckResult
FilteredNormalizer2::quickCheck(const UnicodeString &s, UErrorCode &errorCode) const {
uprv_checkCanGetBuffer(s, errorCode);
Modified: trunk/Build/source/libs/icu/icu-src/source/common/hash.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/hash.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/hash.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
******************************************************************************
@@ -33,6 +33,8 @@
inline void init(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, UErrorCode& status);
+ inline void initSize(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, int32_t size, UErrorCode& status);
+
public:
/**
* Construct a hashtable
@@ -43,6 +45,14 @@
/**
* Construct a hashtable
+ * @param ignoreKeyCase If true, keys are case insensitive.
+ * @param size initial size allocation
+ * @param status Error code
+ */
+ Hashtable(UBool ignoreKeyCase, int32_t size, UErrorCode& status);
+
+ /**
+ * Construct a hashtable
* @param keyComp Comparator for comparing the keys
* @param valueComp Comparator for comparing the values
* @param status Error code
@@ -76,9 +86,9 @@
int32_t puti(const UnicodeString& key, int32_t value, UErrorCode& status);
void* get(const UnicodeString& key) const;
-
+
int32_t geti(const UnicodeString& key) const;
-
+
void* remove(const UnicodeString& key);
int32_t removei(const UnicodeString& key);
@@ -92,9 +102,9 @@
* @see uhash_nextElement
*/
const UHashElement* nextElement(int32_t& pos) const;
-
+
UKeyComparator* setKeyComparator(UKeyComparator*keyComp);
-
+
UValueComparator* setValueComparator(UValueComparator* valueComp);
UBool equals(const Hashtable& that) const;
@@ -107,7 +117,7 @@
* Implementation
********************************************************************/
-inline void Hashtable::init(UHashFunction *keyHash, UKeyComparator *keyComp,
+inline void Hashtable::init(UHashFunction *keyHash, UKeyComparator *keyComp,
UValueComparator *valueComp, UErrorCode& status) {
if (U_FAILURE(status)) {
return;
@@ -119,10 +129,23 @@
}
}
-inline Hashtable::Hashtable(UKeyComparator *keyComp, UValueComparator *valueComp,
+inline void Hashtable::initSize(UHashFunction *keyHash, UKeyComparator *keyComp,
+ UValueComparator *valueComp, int32_t size, UErrorCode& status) {
+ if (U_FAILURE(status)) {
+ return;
+ }
+ uhash_initSize(&hashObj, keyHash, keyComp, valueComp, size, &status);
+ if (U_SUCCESS(status)) {
+ hash = &hashObj;
+ uhash_setKeyDeleter(hash, uprv_deleteUObject);
+ }
+}
+
+inline Hashtable::Hashtable(UKeyComparator *keyComp, UValueComparator *valueComp,
UErrorCode& status) : hash(0) {
init( uhash_hashUnicodeString, keyComp, valueComp, status);
}
+
inline Hashtable::Hashtable(UBool ignoreKeyCase, UErrorCode& status)
: hash(0)
{
@@ -134,6 +157,17 @@
status);
}
+inline Hashtable::Hashtable(UBool ignoreKeyCase, int32_t size, UErrorCode& status)
+ : hash(0)
+{
+ initSize(ignoreKeyCase ? uhash_hashCaselessUnicodeString
+ : uhash_hashUnicodeString,
+ ignoreKeyCase ? uhash_compareCaselessUnicodeString
+ : uhash_compareUnicodeString,
+ NULL, size,
+ status);
+}
+
inline Hashtable::Hashtable(UErrorCode& status)
: hash(0)
{
@@ -200,7 +234,7 @@
inline UKeyComparator* Hashtable::setKeyComparator(UKeyComparator*keyComp){
return uhash_setKeyComparator(hash, keyComp);
}
-
+
inline UValueComparator* Hashtable::setValueComparator(UValueComparator* valueComp){
return uhash_setValueComparator(hash, valueComp);
}
Deleted: trunk/Build/source/libs/icu/icu-src/source/common/icudataver.c
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/icudataver.c 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/icudataver.c 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,31 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-******************************************************************************
-*
-* Copyright (C) 2009-2011, International Business Machines
-* Corporation and others. All Rights Reserved.
-*
-******************************************************************************
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/icudataver.h"
-#include "unicode/ures.h"
-#include "uresimp.h" /* for ures_getVersionByKey */
-
-U_CAPI void U_EXPORT2 u_getDataVersion(UVersionInfo dataVersionFillin, UErrorCode *status) {
- UResourceBundle *icudatares = NULL;
-
- if (U_FAILURE(*status)) {
- return;
- }
-
- if (dataVersionFillin != NULL) {
- icudatares = ures_openDirect(NULL, U_ICU_VERSION_BUNDLE , status);
- if (U_SUCCESS(*status)) {
- ures_getVersionByKey(icudatares, U_ICU_DATA_KEY, dataVersionFillin, status);
- }
- ures_close(icudatares);
- }
-}
Added: trunk/Build/source/libs/icu/icu-src/source/common/icudataver.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/icudataver.cpp (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/icudataver.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,31 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+******************************************************************************
+*
+* Copyright (C) 2009-2011, International Business Machines
+* Corporation and others. All Rights Reserved.
+*
+******************************************************************************
+*/
+
+#include "unicode/utypes.h"
+#include "unicode/icudataver.h"
+#include "unicode/ures.h"
+#include "uresimp.h" /* for ures_getVersionByKey */
+
+U_CAPI void U_EXPORT2 u_getDataVersion(UVersionInfo dataVersionFillin, UErrorCode *status) {
+ UResourceBundle *icudatares = NULL;
+
+ if (U_FAILURE(*status)) {
+ return;
+ }
+
+ if (dataVersionFillin != NULL) {
+ icudatares = ures_openDirect(NULL, U_ICU_VERSION_BUNDLE , status);
+ if (U_SUCCESS(*status)) {
+ ures_getVersionByKey(icudatares, U_ICU_DATA_KEY, dataVersionFillin, status);
+ }
+ ures_close(icudatares);
+ }
+}
Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/icudataver.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/icuplug.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/icuplug.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/icuplug.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/icuplugimp.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/icuplugimp.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/icuplugimp.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/listformatter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/listformatter.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/listformatter.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -8,7 +8,7 @@
*
*******************************************************************************
* file name: listformatter.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
@@ -25,6 +25,7 @@
#include "charstr.h"
#include "ucln_cmn.h"
#include "uresimp.h"
+#include "resource.h"
U_NAMESPACE_BEGIN
@@ -62,7 +63,7 @@
static Hashtable* listPatternHash = NULL;
static UMutex listFormatterMutex = U_MUTEX_INITIALIZER;
-static const char *STANDARD_STYLE = "standard";
+static const char STANDARD_STYLE[] = "standard";
U_CDECL_BEGIN
static UBool U_CALLCONV uprv_listformatter_cleanup() {
@@ -78,17 +79,6 @@
U_CDECL_END
-static ListFormatInternal* loadListFormatInternal(
- const Locale& locale,
- const char* style,
- UErrorCode& errorCode);
-
-static void getStringByKey(
- const UResourceBundle* rb,
- const char* key,
- UnicodeString& result,
- UErrorCode& errorCode);
-
ListFormatter::ListFormatter(const ListFormatter& other) :
owned(other.owned), data(other.data) {
if (other.owned != NULL) {
@@ -171,30 +161,107 @@
return result;
}
-static ListFormatInternal* loadListFormatInternal(
+static const UChar solidus = 0x2F;
+static const UChar aliasPrefix[] = { 0x6C,0x69,0x73,0x74,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x2F }; // "listPattern/"
+enum {
+ kAliasPrefixLen = UPRV_LENGTHOF(aliasPrefix),
+ kStyleLenMax = 24 // longest currently is 14
+};
+
+struct ListFormatter::ListPatternsSink : public ResourceSink {
+ UnicodeString two, start, middle, end;
+#if ((U_PLATFORM == U_PF_AIX) || (U_PLATFORM == U_PF_OS390)) && (U_CPLUSPLUS_VERSION < 11)
+ char aliasedStyle[kStyleLenMax+1];
+ ListPatternsSink() {
+ uprv_memset(aliasedStyle, 0, kStyleLenMax+1);
+ }
+#else
+ char aliasedStyle[kStyleLenMax+1] = {0};
+
+ ListPatternsSink() {}
+#endif
+ virtual ~ListPatternsSink();
+
+ void setAliasedStyle(UnicodeString alias) {
+ int32_t startIndex = alias.indexOf(aliasPrefix, kAliasPrefixLen, 0);
+ if (startIndex < 0) {
+ return;
+ }
+ startIndex += kAliasPrefixLen;
+ int32_t endIndex = alias.indexOf(solidus, startIndex);
+ if (endIndex < 0) {
+ endIndex = alias.length();
+ }
+ alias.extract(startIndex, endIndex-startIndex, aliasedStyle, kStyleLenMax+1, US_INV);
+ aliasedStyle[kStyleLenMax] = 0;
+ }
+
+ void handleValueForPattern(ResourceValue &value, UnicodeString &pattern, UErrorCode &errorCode) {
+ if (pattern.isEmpty()) {
+ if (value.getType() == URES_ALIAS) {
+ if (aliasedStyle[0] == 0) {
+ setAliasedStyle(value.getAliasUnicodeString(errorCode));
+ }
+ } else {
+ pattern = value.getUnicodeString(errorCode);
+ }
+ }
+ }
+
+ virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/,
+ UErrorCode &errorCode) {
+ aliasedStyle[0] = 0;
+ if (value.getType() == URES_ALIAS) {
+ setAliasedStyle(value.getAliasUnicodeString(errorCode));
+ return;
+ }
+ ResourceTable listPatterns = value.getTable(errorCode);
+ for (int i = 0; U_SUCCESS(errorCode) && listPatterns.getKeyAndValue(i, key, value); ++i) {
+ if (uprv_strcmp(key, "2") == 0) {
+ handleValueForPattern(value, two, errorCode);
+ } else if (uprv_strcmp(key, "end") == 0) {
+ handleValueForPattern(value, end, errorCode);
+ } else if (uprv_strcmp(key, "middle") == 0) {
+ handleValueForPattern(value, middle, errorCode);
+ } else if (uprv_strcmp(key, "start") == 0) {
+ handleValueForPattern(value, start, errorCode);
+ }
+ }
+ }
+};
+
+// Virtual destructors must be defined out of line.
+ListFormatter::ListPatternsSink::~ListPatternsSink() {}
+
+ListFormatInternal* ListFormatter::loadListFormatInternal(
const Locale& locale, const char * style, UErrorCode& errorCode) {
UResourceBundle* rb = ures_open(NULL, locale.getName(), &errorCode);
+ rb = ures_getByKeyWithFallback(rb, "listPattern", rb, &errorCode);
if (U_FAILURE(errorCode)) {
ures_close(rb);
return NULL;
}
- rb = ures_getByKeyWithFallback(rb, "listPattern", rb, &errorCode);
- rb = ures_getByKeyWithFallback(rb, style, rb, &errorCode);
+ ListFormatter::ListPatternsSink sink;
+ char currentStyle[kStyleLenMax+1];
+ uprv_strncpy(currentStyle, style, kStyleLenMax);
+ currentStyle[kStyleLenMax] = 0;
- if (U_FAILURE(errorCode)) {
- ures_close(rb);
- return NULL;
+ for (;;) {
+ ures_getAllItemsWithFallback(rb, currentStyle, sink, errorCode);
+ if (U_FAILURE(errorCode) || sink.aliasedStyle[0] == 0 || uprv_strcmp(currentStyle, sink.aliasedStyle) == 0) {
+ break;
+ }
+ uprv_strcpy(currentStyle, sink.aliasedStyle);
}
- UnicodeString two, start, middle, end;
- getStringByKey(rb, "2", two, errorCode);
- getStringByKey(rb, "start", start, errorCode);
- getStringByKey(rb, "middle", middle, errorCode);
- getStringByKey(rb, "end", end, errorCode);
ures_close(rb);
if (U_FAILURE(errorCode)) {
return NULL;
}
- ListFormatInternal* result = new ListFormatInternal(two, start, middle, end, errorCode);
+ if (sink.two.isEmpty() || sink.start.isEmpty() || sink.middle.isEmpty() || sink.end.isEmpty()) {
+ errorCode = U_MISSING_RESOURCE_ERROR;
+ return NULL;
+ }
+ ListFormatInternal* result = new ListFormatInternal(sink.two, sink.start, sink.middle, sink.end, errorCode);
if (result == NULL) {
errorCode = U_MEMORY_ALLOCATION_ERROR;
return NULL;
@@ -206,15 +273,6 @@
return result;
}
-static void getStringByKey(const UResourceBundle* rb, const char* key, UnicodeString& result, UErrorCode& errorCode) {
- int32_t len;
- const UChar* ustr = ures_getStringByKeyWithFallback(rb, key, &len, &errorCode);
- if (U_FAILURE(errorCode)) {
- return;
- }
- result.setTo(ustr, len);
-}
-
ListFormatter* ListFormatter::createInstance(UErrorCode& errorCode) {
Locale locale; // The default locale.
return createInstance(locale, errorCode);
Modified: trunk/Build/source/libs/icu/icu-src/source/common/loadednormalizer2impl.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/loadednormalizer2impl.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/loadednormalizer2impl.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -62,7 +62,7 @@
pInfo->dataFormat[1]==0x72 &&
pInfo->dataFormat[2]==0x6d &&
pInfo->dataFormat[3]==0x32 &&
- pInfo->formatVersion[0]==2
+ pInfo->formatVersion[0]==3
) {
// Normalizer2Impl *me=(Normalizer2Impl *)context;
// uprv_memcpy(me->dataVersion, pInfo->dataVersion, 4);
@@ -84,7 +84,7 @@
const uint8_t *inBytes=(const uint8_t *)udata_getMemory(memory);
const int32_t *inIndexes=(const int32_t *)inBytes;
int32_t indexesLength=inIndexes[IX_NORM_TRIE_OFFSET]/4;
- if(indexesLength<=IX_MIN_MAYBE_YES) {
+ if(indexesLength<=IX_MIN_LCCC_CP) {
errorCode=U_INVALID_FORMAT_ERROR; // Not enough indexes.
return;
}
@@ -232,6 +232,7 @@
}
}
if(allModes==NULL) {
+ ucln_common_registerCleanup(UCLN_COMMON_LOADED_NORMALIZER2, uprv_loaded_normalizer2_cleanup);
LocalPointer<Norm2AllModes> localAllModes(
Norm2AllModes::createInstance(packageName, name, errorCode));
if(U_SUCCESS(errorCode)) {
Modified: trunk/Build/source/libs/icu/icu-src/source/common/localsvc.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/localsvc.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/localsvc.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
***************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/locavailable.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locavailable.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locavailable.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -8,7 +8,7 @@
*
*******************************************************************************
* file name: locavailable.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
@@ -35,7 +35,7 @@
static icu::Locale* availableLocaleList = NULL;
static int32_t availableLocaleListCount;
-static icu::UInitOnce gInitOnce = U_INITONCE_INITIALIZER;
+static icu::UInitOnce gInitOnceLocale = U_INITONCE_INITIALIZER;
U_NAMESPACE_END
@@ -50,7 +50,7 @@
availableLocaleList = NULL;
}
availableLocaleListCount = 0;
- gInitOnce.reset();
+ gInitOnceLocale.reset();
return TRUE;
}
@@ -81,7 +81,7 @@
const Locale* U_EXPORT2
Locale::getAvailableLocales(int32_t& count)
{
- umtx_initOnce(gInitOnce, &locale_available_init);
+ umtx_initOnce(gInitOnceLocale, &locale_available_init);
count = availableLocaleListCount;
return availableLocaleList;
}
Modified: trunk/Build/source/libs/icu/icu-src/source/common/locbased.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locbased.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locbased.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
**********************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/locbased.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locbased.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locbased.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
**********************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -8,7 +8,7 @@
*
*******************************************************************************
* file name: locdispnames.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
@@ -542,7 +542,7 @@
return 0;
}
separator = (const UChar *)p0 + subLen;
- sepLen = p1 - separator;
+ sepLen = static_cast<int32_t>(p1 - separator);
}
if(patLen==0 || (patLen==defaultPatLen && !u_strncmp(pattern, defaultPattern, patLen))) {
@@ -558,8 +558,8 @@
*pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
return 0;
}
- sub0Pos=p0-pattern;
- sub1Pos=p1-pattern;
+ sub0Pos = static_cast<int32_t>(p0-pattern);
+ sub1Pos = static_cast<int32_t>(p1-pattern);
if (sub1Pos < sub0Pos) { /* a very odd pattern */
int32_t t=sub0Pos; sub0Pos=sub1Pos; sub1Pos=t;
langi=1;
@@ -821,6 +821,8 @@
/* 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;
/*
* if the keyword is equal to currency .. then to get the display name
Modified: trunk/Build/source/libs/icu/icu-src/source/common/locdspnm.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locdspnm.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locdspnm.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -13,6 +13,7 @@
#include "unicode/locdspnm.h"
#include "unicode/simpleformatter.h"
+#include "unicode/ucasemap.h"
#include "unicode/ures.h"
#include "unicode/udisplaycontext.h"
#include "unicode/brkiter.h"
@@ -53,7 +54,7 @@
*p = 0;
va_end(args);
- return p - buffer;
+ return static_cast<int32_t>(p - buffer);
}
U_NAMESPACE_BEGIN
@@ -635,8 +636,9 @@
char value[ULOC_KEYWORD_AND_VALUES_CAPACITY]; // sigh, no ULOC_VALUE_CAPACITY
const char* key;
while ((key = e->next((int32_t *)0, status)) != NULL) {
+ value[0] = 0;
locale.getKeywordValue(key, value, ULOC_KEYWORD_AND_VALUES_CAPACITY, status);
- if (U_FAILURE(status)) {
+ if (U_FAILURE(status) || status == U_STRING_NOT_TERMINATED_WARNING) {
return result;
}
keyDisplayName(key, temp, TRUE);
Modified: trunk/Build/source/libs/icu/icu-src/source/common/locid.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locid.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locid.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
**********************************************************************
@@ -33,6 +33,7 @@
#include "unicode/locid.h"
+#include "unicode/strenum.h"
#include "unicode/uloc.h"
#include "putilimp.h"
#include "mutex.h"
Modified: trunk/Build/source/libs/icu/icu-src/source/common/loclikely.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/loclikely.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/loclikely.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -8,7 +8,7 @@
*
*******************************************************************************
* file name: loclikely.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
@@ -22,6 +22,7 @@
#include "unicode/utypes.h"
#include "unicode/locid.h"
#include "unicode/putil.h"
+#include "unicode/uchar.h"
#include "unicode/uloc.h"
#include "unicode/ures.h"
#include "unicode/uscript.h"
@@ -510,7 +511,7 @@
unknownLanguage);
*langLength = (int32_t)uprv_strlen(lang);
}
- else if (_isIDSeparator(*position)) {
+ if (_isIDSeparator(*position)) {
++position;
}
@@ -1280,7 +1281,7 @@
// Pairs of (language subtag, + or -) for finding out fast if common languages
// are LTR (minus) or RTL (plus).
-static const char* LANG_DIR_STRING =
+static const char LANG_DIR_STRING[] =
"root-en-es-pt-zh-ja-ko-de-fr-it-ar+he+fa+ru-nl-pl-th-tr-";
// Implemented here because this calls uloc_addLikelySubtags().
Deleted: trunk/Build/source/libs/icu/icu-src/source/common/locmap.c
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locmap.c 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locmap.c 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,1175 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- **********************************************************************
- * Copyright (C) 1996-2016, International Business Machines
- * Corporation and others. All Rights Reserved.
- **********************************************************************
- *
- * Provides functionality for mapping between
- * LCID and Posix IDs or ICU locale to codepage
- *
- * Note: All classes and code in this file are
- * intended for internal use only.
- *
- * Methods of interest:
- * unsigned long convertToLCID(const char*);
- * const char* convertToPosix(unsigned long);
- *
- * Kathleen Wilson, 4/30/96
- *
- * Date Name Description
- * 3/11/97 aliu Fixed off-by-one bug in assignment operator. Added
- * setId() method and safety check against
- * MAX_ID_LENGTH.
- * 04/23/99 stephen Added C wrapper for convertToPosix.
- * 09/18/00 george Removed the memory leaks.
- * 08/23/01 george Convert to C
- */
-
-#include "locmap.h"
-#include "cstring.h"
-#include "cmemory.h"
-
-#if U_PLATFORM == U_PF_WINDOWS && defined(_MSC_VER) && (_MSC_VER >= 1500)
-/*
- * TODO: It seems like we should widen this to
- * either U_PLATFORM_USES_ONLY_WIN32_API (includes MinGW)
- * or U_PLATFORM_HAS_WIN32_API (includes MinGW and Cygwin)
- * but those use gcc and won't have defined(_MSC_VER).
- * We might need to #include some Windows header and test for some version macro from there.
- * Or call some Windows function and see what it returns.
- */
-#define USE_WINDOWS_LOCALE_API
-#endif
-
-#ifdef USE_WINDOWS_LOCALE_API
-#include <windows.h>
-#include <winnls.h>
-#endif
-
-/*
- * Note:
- * The mapping from Win32 locale ID numbers to POSIX locale strings should
- * be the faster one.
- *
- * Many LCID values come from winnt.h
- * Some also come from http://www.microsoft.com/globaldev/reference/lcid-all.mspx
- */
-
-/*
-////////////////////////////////////////////////
-//
-// Internal Classes for LCID <--> POSIX Mapping
-//
-/////////////////////////////////////////////////
-*/
-
-typedef struct ILcidPosixElement
-{
- const uint32_t hostID;
- const char * const posixID;
-} ILcidPosixElement;
-
-typedef struct ILcidPosixMap
-{
- const uint32_t numRegions;
- const struct ILcidPosixElement* const regionMaps;
-} ILcidPosixMap;
-
-
-/*
-/////////////////////////////////////////////////
-//
-// Easy macros to make the LCID <--> POSIX Mapping
-//
-/////////////////////////////////////////////////
-*/
-
-/**
- * The standard one language/one country mapping for LCID.
- * The first element must be the language, and the following
- * elements are the language with the country.
- * @param hostID LCID in host format such as 0x044d
- * @param languageID posix ID of just the language such as 'de'
- * @param posixID posix ID of the language_TERRITORY such as 'de_CH'
- */
-#define ILCID_POSIX_ELEMENT_ARRAY(hostID, languageID, posixID) \
-static const ILcidPosixElement locmap_ ## languageID [] = { \
- {LANGUAGE_LCID(hostID), #languageID}, /* parent locale */ \
- {hostID, #posixID}, \
-};
-
-/**
- * Define a subtable by ID
- * @param id the POSIX ID, either a language or language_TERRITORY
- */
-#define ILCID_POSIX_SUBTABLE(id) \
-static const ILcidPosixElement locmap_ ## id [] =
-
-
-/**
- * Create the map for the posixID. This macro supposes that the language string
- * name is the same as the global variable name, and that the first element
- * in the ILcidPosixElement is just the language.
- * @param _posixID the full POSIX ID for this entry.
- */
-#define ILCID_POSIX_MAP(_posixID) \
- {UPRV_LENGTHOF(locmap_ ## _posixID), locmap_ ## _posixID}
-
-/*
-////////////////////////////////////////////
-//
-// Create the table of LCID to POSIX Mapping
-// None of it should be dynamically created.
-//
-// Keep static locale variables inside the function so that
-// it can be created properly during static init.
-//
-// Note: This table should be updated periodically. Check the National Lanaguage Support API Reference Website.
-// Microsoft is moving away from LCID in favor of locale name as of Vista. This table needs to be
-// maintained for support of older Windows version.
-// Update: Windows 7 (091130)
-//
-// Note: Microsoft assign a different LCID if a locale has a sorting variant. POSIX IDs below may contain
-// @collation=XXX, but no other keywords are allowed (at least for now). When uprv_convertToLCID() is
-// called from uloc_getLCID(), keywords other than collation are already removed. If we really need
-// to support other keywords in this mapping data, we must update the implementation.
-////////////////////////////////////////////
-*/
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0436, af, af_ZA)
-
-ILCID_POSIX_SUBTABLE(ar) {
- {0x01, "ar"},
- {0x3801, "ar_AE"},
- {0x3c01, "ar_BH"},
- {0x1401, "ar_DZ"},
- {0x0c01, "ar_EG"},
- {0x0801, "ar_IQ"},
- {0x2c01, "ar_JO"},
- {0x3401, "ar_KW"},
- {0x3001, "ar_LB"},
- {0x1001, "ar_LY"},
- {0x1801, "ar_MA"},
- {0x1801, "ar_MO"},
- {0x2001, "ar_OM"},
- {0x4001, "ar_QA"},
- {0x0401, "ar_SA"},
- {0x2801, "ar_SY"},
- {0x1c01, "ar_TN"},
- {0x2401, "ar_YE"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x044d, as, as_IN)
-ILCID_POSIX_ELEMENT_ARRAY(0x045e, am, am_ET)
-ILCID_POSIX_ELEMENT_ARRAY(0x047a, arn,arn_CL)
-
-ILCID_POSIX_SUBTABLE(az) {
- {0x2c, "az"},
- {0x082c, "az_Cyrl_AZ"}, /* Cyrillic based */
- {0x742c, "az_Cyrl"}, /* Cyrillic based */
- {0x042c, "az_Latn_AZ"}, /* Latin based */
- {0x782c, "az_Latn"}, /* Latin based */
- {0x042c, "az_AZ"} /* Latin based */
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x046d, ba, ba_RU)
-ILCID_POSIX_ELEMENT_ARRAY(0x0423, be, be_BY)
-
-/*ILCID_POSIX_SUBTABLE(ber) {
- {0x5f, "ber"},
- {0x045f, "ber_Arab_DZ"},
- {0x045f, "ber_Arab"},
- {0x085f, "ber_Latn_DZ"},
- {0x085f, "ber_Latn"}
-};*/
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0402, bg, bg_BG)
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0466, bin, bin_NG)
-
-ILCID_POSIX_SUBTABLE(bn) {
- {0x45, "bn"},
- {0x0845, "bn_BD"},
- {0x0445, "bn_IN"}
-};
-
-ILCID_POSIX_SUBTABLE(bo) {
- {0x51, "bo"},
- {0x0851, "bo_BT"},
- {0x0451, "bo_CN"},
- {0x0c51, "dz_BT"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x047e, br, br_FR)
-
-ILCID_POSIX_SUBTABLE(ca) {
- {0x03, "ca"},
- {0x0403, "ca_ES"},
- {0x0803, "ca_ES_VALENCIA"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0483, co, co_FR)
-ILCID_POSIX_ELEMENT_ARRAY(0x045c, chr,chr_US)
-
-ILCID_POSIX_SUBTABLE(ckb) {
- {0x92, "ckb"},
- {0x7c92, "ckb_Arab"},
- {0x0492, "ckb_Arab_IQ"}
-};
-
-/* Declared as cs_CZ to get around compiler errors on z/OS, which defines cs as a function */
-ILCID_POSIX_ELEMENT_ARRAY(0x0405, cs, cs_CZ)
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0452, cy, cy_GB)
-ILCID_POSIX_ELEMENT_ARRAY(0x0406, da, da_DK)
-
-ILCID_POSIX_SUBTABLE(de) {
- {0x07, "de"},
- {0x0c07, "de_AT"},
- {0x0807, "de_CH"},
- {0x0407, "de_DE"},
- {0x1407, "de_LI"},
- {0x1007, "de_LU"},
- {0x10407,"de_DE at collation=phonebook"}, /*This is really de_DE_PHONEBOOK on Windows*/
- {0x10407,"de at collation=phonebook"} /*This is really de_DE_PHONEBOOK on Windows*/
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0465, dv, dv_MV)
-ILCID_POSIX_ELEMENT_ARRAY(0x0408, el, el_GR)
-
-ILCID_POSIX_SUBTABLE(en) {
- {0x09, "en"},
- {0x0c09, "en_AU"},
- {0x2809, "en_BZ"},
- {0x1009, "en_CA"},
- {0x0809, "en_GB"},
- {0x3c09, "en_HK"},
- {0x3809, "en_ID"},
- {0x1809, "en_IE"},
- {0x4009, "en_IN"},
- {0x2009, "en_JM"},
- {0x4409, "en_MY"},
- {0x1409, "en_NZ"},
- {0x3409, "en_PH"},
- {0x4809, "en_SG"},
- {0x2C09, "en_TT"},
- {0x0409, "en_US"},
- {0x007f, "en_US_POSIX"}, /* duplicate for roundtripping */
- {0x2409, "en_VI"}, /* Virgin Islands AKA Caribbean Islands (en_CB). */
- {0x1c09, "en_ZA"},
- {0x3009, "en_ZW"},
- {0x2409, "en_029"},
- {0x0409, "en_AS"}, /* Alias for en_US. Leave last. */
- {0x0409, "en_GU"}, /* Alias for en_US. Leave last. */
- {0x0409, "en_MH"}, /* Alias for en_US. Leave last. */
- {0x0409, "en_MP"}, /* Alias for en_US. Leave last. */
- {0x0409, "en_UM"} /* Alias for en_US. Leave last. */
-};
-
-ILCID_POSIX_SUBTABLE(en_US_POSIX) {
- {0x007f, "en_US_POSIX"} /* duplicate for roundtripping */
-};
-
-ILCID_POSIX_SUBTABLE(es) {
- {0x0a, "es"},
- {0x2c0a, "es_AR"},
- {0x400a, "es_BO"},
- {0x340a, "es_CL"},
- {0x240a, "es_CO"},
- {0x140a, "es_CR"},
- {0x5c0a, "es_CU"},
- {0x1c0a, "es_DO"},
- {0x300a, "es_EC"},
- {0x0c0a, "es_ES"}, /*Modern sort.*/
- {0x100a, "es_GT"},
- {0x480a, "es_HN"},
- {0x080a, "es_MX"},
- {0x4c0a, "es_NI"},
- {0x180a, "es_PA"},
- {0x280a, "es_PE"},
- {0x500a, "es_PR"},
- {0x3c0a, "es_PY"},
- {0x440a, "es_SV"},
- {0x540a, "es_US"},
- {0x380a, "es_UY"},
- {0x200a, "es_VE"},
- {0x580a, "es_419"},
- {0x040a, "es_ES at collation=traditional"},
- {0x040a, "es at collation=traditional"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0425, et, et_EE)
-ILCID_POSIX_ELEMENT_ARRAY(0x042d, eu, eu_ES)
-
-/* ISO-639 doesn't distinguish between Persian and Dari.*/
-ILCID_POSIX_SUBTABLE(fa) {
- {0x29, "fa"},
- {0x0429, "fa_IR"}, /* Persian/Farsi (Iran) */
- {0x048c, "fa_AF"} /* Persian/Dari (Afghanistan) */
-};
-
-/* duplicate for roundtripping */
-ILCID_POSIX_SUBTABLE(fa_AF) {
- {0x8c, "fa_AF"}, /* Persian/Dari (Afghanistan) */
- {0x048c, "fa_AF"} /* Persian/Dari (Afghanistan) */
-};
-
-ILCID_POSIX_SUBTABLE(ff) {
- {0x67, "ff"},
- {0x7c67, "ff_Latn"},
- {0x0867, "ff_Latn_SN"},
- {0x0467, "ff_NG"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x040b, fi, fi_FI)
-ILCID_POSIX_ELEMENT_ARRAY(0x0464, fil,fil_PH)
-ILCID_POSIX_ELEMENT_ARRAY(0x0438, fo, fo_FO)
-
-ILCID_POSIX_SUBTABLE(fr) {
- {0x0c, "fr"},
- {0x080c, "fr_BE"},
- {0x0c0c, "fr_CA"},
- {0x240c, "fr_CD"},
- {0x240c, "fr_CG"},
- {0x100c, "fr_CH"},
- {0x300c, "fr_CI"},
- {0x2c0c, "fr_CM"},
- {0x040c, "fr_FR"},
- {0x3c0c, "fr_HT"},
- {0x140c, "fr_LU"},
- {0x380c, "fr_MA"},
- {0x180c, "fr_MC"},
- {0x340c, "fr_ML"},
- {0x200c, "fr_RE"},
- {0x280c, "fr_SN"},
- {0xe40c, "fr_015"},
- {0x1c0c, "fr_029"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0467, fuv, fuv_NG)
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0462, fy, fy_NL)
-
-ILCID_POSIX_SUBTABLE(ga) { /* Gaelic (Ireland) */
- {0x3c, "ga"},
- {0x083c, "ga_IE"},
- {0x043c, "gd_GB"}
-};
-
-ILCID_POSIX_SUBTABLE(gd) { /* Gaelic (Scotland) */
- {0x91, "gd"},
- {0x0491, "gd_GB"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0456, gl, gl_ES)
-ILCID_POSIX_ELEMENT_ARRAY(0x0447, gu, gu_IN)
-ILCID_POSIX_ELEMENT_ARRAY(0x0474, gn, gn_PY)
-ILCID_POSIX_ELEMENT_ARRAY(0x0484, gsw,gsw_FR)
-
-ILCID_POSIX_SUBTABLE(ha) {
- {0x68, "ha"},
- {0x7c68, "ha_Latn"},
- {0x0468, "ha_Latn_NG"},
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0475, haw,haw_US)
-ILCID_POSIX_ELEMENT_ARRAY(0x040d, he, he_IL)
-ILCID_POSIX_ELEMENT_ARRAY(0x0439, hi, hi_IN)
-
-/* This LCID is really four different locales.*/
-ILCID_POSIX_SUBTABLE(hr) {
- {0x1a, "hr"},
- {0x141a, "bs_Latn_BA"}, /* Bosnian, Bosnia and Herzegovina */
- {0x681a, "bs_Latn"}, /* Bosnian, Bosnia and Herzegovina */
- {0x141a, "bs_BA"}, /* Bosnian, Bosnia and Herzegovina */
- {0x781a, "bs"}, /* Bosnian */
- {0x201a, "bs_Cyrl_BA"}, /* Bosnian, Bosnia and Herzegovina */
- {0x641a, "bs_Cyrl"}, /* Bosnian, Bosnia and Herzegovina */
- {0x101a, "hr_BA"}, /* Croatian in Bosnia */
- {0x041a, "hr_HR"}, /* Croatian*/
- {0x2c1a, "sr_Latn_ME"},
- {0x241a, "sr_Latn_RS"},
- {0x181a, "sr_Latn_BA"}, /* Serbo-Croatian in Bosnia */
- {0x081a, "sr_Latn_CS"}, /* Serbo-Croatian*/
- {0x701a, "sr_Latn"}, /* It's 0x1a or 0x081a, pick one to make the test program happy. */
- {0x1c1a, "sr_Cyrl_BA"}, /* Serbo-Croatian in Bosnia */
- {0x0c1a, "sr_Cyrl_CS"}, /* Serbian*/
- {0x301a, "sr_Cyrl_ME"},
- {0x281a, "sr_Cyrl_RS"},
- {0x6c1a, "sr_Cyrl"}, /* It's 0x1a or 0x0c1a, pick one to make the test program happy. */
- {0x7c1a, "sr"} /* In CLDR sr is sr_Cyrl. */
-};
-
-ILCID_POSIX_SUBTABLE(hsb) {
- {0x2E, "hsb"},
- {0x042E, "hsb_DE"},
- {0x082E, "dsb_DE"},
- {0x7C2E, "dsb"},
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x040e, hu, hu_HU)
-ILCID_POSIX_ELEMENT_ARRAY(0x042b, hy, hy_AM)
-ILCID_POSIX_ELEMENT_ARRAY(0x0469, ibb, ibb_NG)
-ILCID_POSIX_ELEMENT_ARRAY(0x0421, id, id_ID)
-ILCID_POSIX_ELEMENT_ARRAY(0x0470, ig, ig_NG)
-ILCID_POSIX_ELEMENT_ARRAY(0x0478, ii, ii_CN)
-ILCID_POSIX_ELEMENT_ARRAY(0x040f, is, is_IS)
-
-ILCID_POSIX_SUBTABLE(it) {
- {0x10, "it"},
- {0x0810, "it_CH"},
- {0x0410, "it_IT"}
-};
-
-ILCID_POSIX_SUBTABLE(iu) {
- {0x5d, "iu"},
- {0x045d, "iu_Cans_CA"},
- {0x785d, "iu_Cans"},
- {0x085d, "iu_Latn_CA"},
- {0x7c5d, "iu_Latn"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x040d, iw, iw_IL) /*Left in for compatibility*/
-ILCID_POSIX_ELEMENT_ARRAY(0x0411, ja, ja_JP)
-ILCID_POSIX_ELEMENT_ARRAY(0x0437, ka, ka_GE)
-ILCID_POSIX_ELEMENT_ARRAY(0x043f, kk, kk_KZ)
-ILCID_POSIX_ELEMENT_ARRAY(0x046f, kl, kl_GL)
-ILCID_POSIX_ELEMENT_ARRAY(0x0453, km, km_KH)
-ILCID_POSIX_ELEMENT_ARRAY(0x044b, kn, kn_IN)
-
-ILCID_POSIX_SUBTABLE(ko) {
- {0x12, "ko"},
- {0x0812, "ko_KP"},
- {0x0412, "ko_KR"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0457, kok, kok_IN)
-ILCID_POSIX_ELEMENT_ARRAY(0x0471, kr, kr_NG)
-
-ILCID_POSIX_SUBTABLE(ks) { /* We could add PK and CN too */
- {0x60, "ks"},
- {0x0860, "ks_IN"}, /* Documentation doesn't mention script */
- {0x0460, "ks_Arab_IN"},
- {0x0860, "ks_Deva_IN"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0440, ky, ky_KG) /* Kyrgyz is spoken in Kyrgyzstan */
-ILCID_POSIX_ELEMENT_ARRAY(0x0476, la, la_IT) /* TODO: Verify the country */
-ILCID_POSIX_ELEMENT_ARRAY(0x046e, lb, lb_LU)
-ILCID_POSIX_ELEMENT_ARRAY(0x0454, lo, lo_LA)
-ILCID_POSIX_ELEMENT_ARRAY(0x0427, lt, lt_LT)
-ILCID_POSIX_ELEMENT_ARRAY(0x0426, lv, lv_LV)
-ILCID_POSIX_ELEMENT_ARRAY(0x0481, mi, mi_NZ)
-ILCID_POSIX_ELEMENT_ARRAY(0x042f, mk, mk_MK)
-ILCID_POSIX_ELEMENT_ARRAY(0x044c, ml, ml_IN)
-
-ILCID_POSIX_SUBTABLE(mn) {
- {0x50, "mn"},
- {0x0450, "mn_MN"},
- {0x7c50, "mn_Mong"},
- {0x0850, "mn_Mong_CN"},
- {0x0850, "mn_CN"},
- {0x7850, "mn_Cyrl"},
- {0x0c50, "mn_Mong_MN"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0458, mni,mni_IN)
-ILCID_POSIX_ELEMENT_ARRAY(0x047c, moh,moh_CA)
-ILCID_POSIX_ELEMENT_ARRAY(0x044e, mr, mr_IN)
-
-ILCID_POSIX_SUBTABLE(ms) {
- {0x3e, "ms"},
- {0x083e, "ms_BN"}, /* Brunei Darussalam*/
- {0x043e, "ms_MY"} /* Malaysia*/
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x043a, mt, mt_MT)
-ILCID_POSIX_ELEMENT_ARRAY(0x0455, my, my_MM)
-
-ILCID_POSIX_SUBTABLE(ne) {
- {0x61, "ne"},
- {0x0861, "ne_IN"}, /* India*/
- {0x0461, "ne_NP"} /* Nepal*/
-};
-
-ILCID_POSIX_SUBTABLE(nl) {
- {0x13, "nl"},
- {0x0813, "nl_BE"},
- {0x0413, "nl_NL"}
-};
-
-/* The "no" locale split into nb and nn. By default in ICU, "no" is nb.*/
-ILCID_POSIX_SUBTABLE(no) {
- {0x14, "no"}, /* really nb_NO */
- {0x7c14, "nb"}, /* really nb */
- {0x0414, "nb_NO"}, /* really nb_NO. Keep first in the 414 list. */
- {0x0414, "no_NO"}, /* really nb_NO */
- {0x0814, "nn_NO"}, /* really nn_NO. Keep first in the 814 list. */
- {0x7814, "nn"}, /* It's 0x14 or 0x814, pick one to make the test program happy. */
- {0x0814, "no_NO_NY"}/* really nn_NO */
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x046c, nso,nso_ZA) /* TODO: Verify the ISO-639 code */
-ILCID_POSIX_ELEMENT_ARRAY(0x0482, oc, oc_FR)
-
-ILCID_POSIX_SUBTABLE(om) { /* TODO: Verify the country */
- {0x72, "om"},
- {0x0472, "om_ET"},
- {0x0472, "gaz_ET"}
-};
-
-/* Declared as or_IN to get around compiler errors*/
-ILCID_POSIX_SUBTABLE(or_IN) {
- {0x48, "or"},
- {0x0448, "or_IN"},
-};
-
-
-ILCID_POSIX_SUBTABLE(pa) {
- {0x46, "pa"},
- {0x0446, "pa_IN"},
- {0x0846, "pa_PK"},
- {0x0846, "pa_Arab_PK"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0479, pap, pap_AN)
-ILCID_POSIX_ELEMENT_ARRAY(0x0415, pl, pl_PL)
-ILCID_POSIX_ELEMENT_ARRAY(0x0463, ps, ps_AF)
-
-ILCID_POSIX_SUBTABLE(pt) {
- {0x16, "pt"},
- {0x0416, "pt_BR"},
- {0x0816, "pt_PT"}
-};
-
-ILCID_POSIX_SUBTABLE(qu) {
- {0x6b, "qu"},
- {0x046b, "qu_BO"},
- {0x086b, "qu_EC"},
- {0x0C6b, "qu_PE"},
- {0x046b, "quz_BO"},
- {0x086b, "quz_EC"},
- {0x0C6b, "quz_PE"}
-};
-
-ILCID_POSIX_SUBTABLE(quc) {
- {0x93, "quc"},
- {0x0493, "quc_CO"},
- /*
- "quc_Latn_GT" is an exceptional case. Language ID of "quc"
- is 0x93, but LCID of "quc_Latn_GT" is 0x486, which should be
- under the group of "qut". "qut" is a retired ISO 639-3 language
- code for West Central Quiche, and merged to "quc".
- It looks Windows previously reserved "qut" for K'iche', but,
- decided to use "quc" when adding a locale for K'iche' (Guatemala).
-
- This data structure used here assumes language ID bits in
- LCID is unique for alphabetic language code. But this is not true
- for "quc_Latn_GT". If we don't have the data below, LCID look up
- by alphabetic locale ID (POSIX) will fail. The same entry is found
- under "qut" below, which is required for reverse look up.
- */
- {0x0486, "quc_Latn_GT"}
-};
-
-ILCID_POSIX_SUBTABLE(qut) {
- {0x86, "qut"},
- {0x0486, "qut_GT"},
- /*
- See the note in "quc" above.
- */
- {0x0486, "quc_Latn_GT"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0417, rm, rm_CH)
-
-ILCID_POSIX_SUBTABLE(ro) {
- {0x18, "ro"},
- {0x0418, "ro_RO"},
- {0x0818, "ro_MD"}
-};
-
-ILCID_POSIX_SUBTABLE(root) {
- {0x00, "root"}
-};
-
-ILCID_POSIX_SUBTABLE(ru) {
- {0x19, "ru"},
- {0x0419, "ru_RU"},
- {0x0819, "ru_MD"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0487, rw, rw_RW)
-ILCID_POSIX_ELEMENT_ARRAY(0x044f, sa, sa_IN)
-ILCID_POSIX_ELEMENT_ARRAY(0x0485, sah,sah_RU)
-
-ILCID_POSIX_SUBTABLE(sd) {
- {0x59, "sd"},
- {0x0459, "sd_IN"},
- {0x0459, "sd_Deva_IN"},
- {0x0859, "sd_PK"}
-};
-
-ILCID_POSIX_SUBTABLE(se) {
- {0x3b, "se"},
- {0x0c3b, "se_FI"},
- {0x043b, "se_NO"},
- {0x083b, "se_SE"},
- {0x783b, "sma"},
- {0x183b, "sma_NO"},
- {0x1c3b, "sma_SE"},
- {0x7c3b, "smj"},
- {0x703b, "smn"},
- {0x743b, "sms"},
- {0x103b, "smj_NO"},
- {0x143b, "smj_SE"},
- {0x243b, "smn_FI"},
- {0x203b, "sms_FI"},
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x045b, si, si_LK)
-ILCID_POSIX_ELEMENT_ARRAY(0x041b, sk, sk_SK)
-ILCID_POSIX_ELEMENT_ARRAY(0x0424, sl, sl_SI)
-
-ILCID_POSIX_SUBTABLE(so) { /* TODO: Verify the country */
- {0x77, "so"},
- {0x0477, "so_ET"},
- {0x0477, "so_SO"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x041c, sq, sq_AL)
-ILCID_POSIX_ELEMENT_ARRAY(0x0430, st, st_ZA)
-
-ILCID_POSIX_SUBTABLE(sv) {
- {0x1d, "sv"},
- {0x081d, "sv_FI"},
- {0x041d, "sv_SE"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0441, sw, sw_KE)
-ILCID_POSIX_ELEMENT_ARRAY(0x045A, syr, syr_SY)
-
-ILCID_POSIX_SUBTABLE(ta) {
- {0x49, "ta"},
- {0x0449, "ta_IN"},
- {0x0849, "ta_LK"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x044a, te, te_IN)
-
-/* Cyrillic based by default */
-ILCID_POSIX_SUBTABLE(tg) {
- {0x28, "tg"},
- {0x7c28, "tg_Cyrl"},
- {0x0428, "tg_Cyrl_TJ"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x041e, th, th_TH)
-
-ILCID_POSIX_SUBTABLE(ti) {
- {0x73, "ti"},
- {0x0873, "ti_ER"},
- {0x0473, "ti_ET"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0442, tk, tk_TM)
-
-ILCID_POSIX_SUBTABLE(tn) {
- {0x32, "tn"},
- {0x0832, "tn_BW"},
- {0x0432, "tn_ZA"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x041f, tr, tr_TR)
-ILCID_POSIX_ELEMENT_ARRAY(0x0431, ts, ts_ZA)
-ILCID_POSIX_ELEMENT_ARRAY(0x0444, tt, tt_RU)
-
-ILCID_POSIX_SUBTABLE(tzm) {
- {0x5f, "tzm"},
- {0x7c5f, "tzm_Latn"},
- {0x085f, "tzm_Latn_DZ"},
- {0x105f, "tzm_Tfng_MA"},
- {0x045f, "tzm_Arab_MA"},
- {0x045f, "tmz"}
-};
-
-ILCID_POSIX_SUBTABLE(ug) {
- {0x80, "ug"},
- {0x0480, "ug_CN"},
- {0x0480, "ug_Arab_CN"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0422, uk, uk_UA)
-
-ILCID_POSIX_SUBTABLE(ur) {
- {0x20, "ur"},
- {0x0820, "ur_IN"},
- {0x0420, "ur_PK"}
-};
-
-ILCID_POSIX_SUBTABLE(uz) {
- {0x43, "uz"},
- {0x0843, "uz_Cyrl_UZ"}, /* Cyrillic based */
- {0x7843, "uz_Cyrl"}, /* Cyrillic based */
- {0x0843, "uz_UZ"}, /* Cyrillic based */
- {0x0443, "uz_Latn_UZ"}, /* Latin based */
- {0x7c43, "uz_Latn"} /* Latin based */
-};
-
-ILCID_POSIX_SUBTABLE(ve) { /* TODO: Verify the country */
- {0x33, "ve"},
- {0x0433, "ve_ZA"},
- {0x0433, "ven_ZA"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x042a, vi, vi_VN)
-ILCID_POSIX_ELEMENT_ARRAY(0x0488, wo, wo_SN)
-ILCID_POSIX_ELEMENT_ARRAY(0x0434, xh, xh_ZA)
-ILCID_POSIX_ELEMENT_ARRAY(0x043d, yi, yi)
-ILCID_POSIX_ELEMENT_ARRAY(0x046a, yo, yo_NG)
-
-ILCID_POSIX_SUBTABLE(zh) {
- {0x0004, "zh_Hans"},
- {0x7804, "zh"},
- {0x0804, "zh_CN"},
- {0x0804, "zh_Hans_CN"},
- {0x0c04, "zh_Hant_HK"},
- {0x0c04, "zh_HK"},
- {0x1404, "zh_Hant_MO"},
- {0x1404, "zh_MO"},
- {0x1004, "zh_Hans_SG"},
- {0x1004, "zh_SG"},
- {0x0404, "zh_Hant_TW"},
- {0x7c04, "zh_Hant"},
- {0x0404, "zh_TW"},
- {0x30404,"zh_Hant_TW"}, /* Bopomofo order */
- {0x30404,"zh_TW"}, /* Bopomofo order */
- {0x20004,"zh at collation=stroke"},
- {0x20404,"zh_Hant at collation=stroke"},
- {0x20404,"zh_Hant_TW at collation=stroke"},
- {0x20404,"zh_TW at collation=stroke"},
- {0x20804,"zh_Hans at collation=stroke"},
- {0x20804,"zh_Hans_CN at collation=stroke"},
- {0x20804,"zh_CN at collation=stroke"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0435, zu, zu_ZA)
-
-/* This must be static and grouped by LCID. */
-static const ILcidPosixMap gPosixIDmap[] = {
- ILCID_POSIX_MAP(af), /* af Afrikaans 0x36 */
- ILCID_POSIX_MAP(am), /* am Amharic 0x5e */
- ILCID_POSIX_MAP(ar), /* ar Arabic 0x01 */
- ILCID_POSIX_MAP(arn), /* arn Araucanian/Mapudungun 0x7a */
- ILCID_POSIX_MAP(as), /* as Assamese 0x4d */
- ILCID_POSIX_MAP(az), /* az Azerbaijani 0x2c */
- ILCID_POSIX_MAP(ba), /* ba Bashkir 0x6d */
- ILCID_POSIX_MAP(be), /* be Belarusian 0x23 */
-/* ILCID_POSIX_MAP(ber), ber Berber/Tamazight 0x5f */
- ILCID_POSIX_MAP(bg), /* bg Bulgarian 0x02 */
- ILCID_POSIX_MAP(bin), /* bin Edo 0x66 */
- ILCID_POSIX_MAP(bn), /* bn Bengali; Bangla 0x45 */
- ILCID_POSIX_MAP(bo), /* bo Tibetan 0x51 */
- ILCID_POSIX_MAP(br), /* br Breton 0x7e */
- ILCID_POSIX_MAP(ca), /* ca Catalan 0x03 */
- ILCID_POSIX_MAP(chr), /* chr Cherokee 0x5c */
- ILCID_POSIX_MAP(ckb), /* ckb Sorani (Central Kurdish) 0x92 */
- ILCID_POSIX_MAP(co), /* co Corsican 0x83 */
- ILCID_POSIX_MAP(cs), /* cs Czech 0x05 */
- ILCID_POSIX_MAP(cy), /* cy Welsh 0x52 */
- ILCID_POSIX_MAP(da), /* da Danish 0x06 */
- ILCID_POSIX_MAP(de), /* de German 0x07 */
- ILCID_POSIX_MAP(dv), /* dv Divehi 0x65 */
- ILCID_POSIX_MAP(el), /* el Greek 0x08 */
- ILCID_POSIX_MAP(en), /* en English 0x09 */
- ILCID_POSIX_MAP(en_US_POSIX), /* invariant 0x7f */
- ILCID_POSIX_MAP(es), /* es Spanish 0x0a */
- ILCID_POSIX_MAP(et), /* et Estonian 0x25 */
- ILCID_POSIX_MAP(eu), /* eu Basque 0x2d */
- ILCID_POSIX_MAP(fa), /* fa Persian/Farsi 0x29 */
- ILCID_POSIX_MAP(fa_AF), /* fa Persian/Dari 0x8c */
- ILCID_POSIX_MAP(ff), /* ff Fula 0x67 */
- ILCID_POSIX_MAP(fi), /* fi Finnish 0x0b */
- ILCID_POSIX_MAP(fil), /* fil Filipino 0x64 */
- ILCID_POSIX_MAP(fo), /* fo Faroese 0x38 */
- ILCID_POSIX_MAP(fr), /* fr French 0x0c */
- ILCID_POSIX_MAP(fuv), /* fuv Fulfulde - Nigeria 0x67 */
- ILCID_POSIX_MAP(fy), /* fy Frisian 0x62 */
- ILCID_POSIX_MAP(ga), /* * Gaelic (Ireland,Scotland) 0x3c */
- ILCID_POSIX_MAP(gd), /* gd Gaelic (United Kingdom) 0x91 */
- ILCID_POSIX_MAP(gl), /* gl Galician 0x56 */
- ILCID_POSIX_MAP(gn), /* gn Guarani 0x74 */
- ILCID_POSIX_MAP(gsw), /* gsw Alemanic/Alsatian/Swiss German 0x84 */
- ILCID_POSIX_MAP(gu), /* gu Gujarati 0x47 */
- ILCID_POSIX_MAP(ha), /* ha Hausa 0x68 */
- ILCID_POSIX_MAP(haw), /* haw Hawaiian 0x75 */
- ILCID_POSIX_MAP(he), /* he Hebrew (formerly iw) 0x0d */
- ILCID_POSIX_MAP(hi), /* hi Hindi 0x39 */
- ILCID_POSIX_MAP(hr), /* * Croatian and others 0x1a */
- ILCID_POSIX_MAP(hsb), /* hsb Upper Sorbian 0x2e */
- ILCID_POSIX_MAP(hu), /* hu Hungarian 0x0e */
- ILCID_POSIX_MAP(hy), /* hy Armenian 0x2b */
- ILCID_POSIX_MAP(ibb), /* ibb Ibibio - Nigeria 0x69 */
- ILCID_POSIX_MAP(id), /* id Indonesian (formerly in) 0x21 */
- ILCID_POSIX_MAP(ig), /* ig Igbo 0x70 */
- ILCID_POSIX_MAP(ii), /* ii Sichuan Yi 0x78 */
- ILCID_POSIX_MAP(is), /* is Icelandic 0x0f */
- ILCID_POSIX_MAP(it), /* it Italian 0x10 */
- ILCID_POSIX_MAP(iu), /* iu Inuktitut 0x5d */
- ILCID_POSIX_MAP(iw), /* iw Hebrew 0x0d */
- ILCID_POSIX_MAP(ja), /* ja Japanese 0x11 */
- ILCID_POSIX_MAP(ka), /* ka Georgian 0x37 */
- ILCID_POSIX_MAP(kk), /* kk Kazakh 0x3f */
- ILCID_POSIX_MAP(kl), /* kl Kalaallisut 0x6f */
- ILCID_POSIX_MAP(km), /* km Khmer 0x53 */
- ILCID_POSIX_MAP(kn), /* kn Kannada 0x4b */
- ILCID_POSIX_MAP(ko), /* ko Korean 0x12 */
- ILCID_POSIX_MAP(kok), /* kok Konkani 0x57 */
- ILCID_POSIX_MAP(kr), /* kr Kanuri 0x71 */
- ILCID_POSIX_MAP(ks), /* ks Kashmiri 0x60 */
- ILCID_POSIX_MAP(ky), /* ky Kyrgyz 0x40 */
- ILCID_POSIX_MAP(lb), /* lb Luxembourgish 0x6e */
- ILCID_POSIX_MAP(la), /* la Latin 0x76 */
- ILCID_POSIX_MAP(lo), /* lo Lao 0x54 */
- ILCID_POSIX_MAP(lt), /* lt Lithuanian 0x27 */
- ILCID_POSIX_MAP(lv), /* lv Latvian, Lettish 0x26 */
- ILCID_POSIX_MAP(mi), /* mi Maori 0x81 */
- ILCID_POSIX_MAP(mk), /* mk Macedonian 0x2f */
- ILCID_POSIX_MAP(ml), /* ml Malayalam 0x4c */
- ILCID_POSIX_MAP(mn), /* mn Mongolian 0x50 */
- ILCID_POSIX_MAP(mni), /* mni Manipuri 0x58 */
- ILCID_POSIX_MAP(moh), /* moh Mohawk 0x7c */
- ILCID_POSIX_MAP(mr), /* mr Marathi 0x4e */
- ILCID_POSIX_MAP(ms), /* ms Malay 0x3e */
- ILCID_POSIX_MAP(mt), /* mt Maltese 0x3a */
- ILCID_POSIX_MAP(my), /* my Burmese 0x55 */
-/* ILCID_POSIX_MAP(nb), // no Norwegian 0x14 */
- ILCID_POSIX_MAP(ne), /* ne Nepali 0x61 */
- ILCID_POSIX_MAP(nl), /* nl Dutch 0x13 */
-/* ILCID_POSIX_MAP(nn), // no Norwegian 0x14 */
- ILCID_POSIX_MAP(no), /* * Norwegian 0x14 */
- ILCID_POSIX_MAP(nso), /* nso Sotho, Northern (Sepedi dialect) 0x6c */
- ILCID_POSIX_MAP(oc), /* oc Occitan 0x82 */
- ILCID_POSIX_MAP(om), /* om Oromo 0x72 */
- ILCID_POSIX_MAP(or_IN), /* or Oriya 0x48 */
- ILCID_POSIX_MAP(pa), /* pa Punjabi 0x46 */
- ILCID_POSIX_MAP(pap), /* pap Papiamentu 0x79 */
- ILCID_POSIX_MAP(pl), /* pl Polish 0x15 */
- ILCID_POSIX_MAP(ps), /* ps Pashto 0x63 */
- ILCID_POSIX_MAP(pt), /* pt Portuguese 0x16 */
- ILCID_POSIX_MAP(qu), /* qu Quechua 0x6B */
- ILCID_POSIX_MAP(quc), /* quc K'iche 0x93 */
- ILCID_POSIX_MAP(qut), /* qut K'iche 0x86 */
- ILCID_POSIX_MAP(rm), /* rm Raeto-Romance/Romansh 0x17 */
- ILCID_POSIX_MAP(ro), /* ro Romanian 0x18 */
- ILCID_POSIX_MAP(root), /* root 0x00 */
- ILCID_POSIX_MAP(ru), /* ru Russian 0x19 */
- ILCID_POSIX_MAP(rw), /* rw Kinyarwanda 0x87 */
- ILCID_POSIX_MAP(sa), /* sa Sanskrit 0x4f */
- ILCID_POSIX_MAP(sah), /* sah Yakut 0x85 */
- ILCID_POSIX_MAP(sd), /* sd Sindhi 0x59 */
- ILCID_POSIX_MAP(se), /* se Sami 0x3b */
-/* ILCID_POSIX_MAP(sh), // sh Serbo-Croatian 0x1a */
- ILCID_POSIX_MAP(si), /* si Sinhalese 0x5b */
- ILCID_POSIX_MAP(sk), /* sk Slovak 0x1b */
- ILCID_POSIX_MAP(sl), /* sl Slovenian 0x24 */
- ILCID_POSIX_MAP(so), /* so Somali 0x77 */
- ILCID_POSIX_MAP(sq), /* sq Albanian 0x1c */
-/* ILCID_POSIX_MAP(sr), // sr Serbian 0x1a */
- ILCID_POSIX_MAP(st), /* st Sutu 0x30 */
- ILCID_POSIX_MAP(sv), /* sv Swedish 0x1d */
- ILCID_POSIX_MAP(sw), /* sw Swahili 0x41 */
- ILCID_POSIX_MAP(syr), /* syr Syriac 0x5A */
- ILCID_POSIX_MAP(ta), /* ta Tamil 0x49 */
- ILCID_POSIX_MAP(te), /* te Telugu 0x4a */
- ILCID_POSIX_MAP(tg), /* tg Tajik 0x28 */
- ILCID_POSIX_MAP(th), /* th Thai 0x1e */
- ILCID_POSIX_MAP(ti), /* ti Tigrigna 0x73 */
- ILCID_POSIX_MAP(tk), /* tk Turkmen 0x42 */
- ILCID_POSIX_MAP(tn), /* tn Tswana 0x32 */
- ILCID_POSIX_MAP(tr), /* tr Turkish 0x1f */
- ILCID_POSIX_MAP(ts), /* ts Tsonga 0x31 */
- ILCID_POSIX_MAP(tt), /* tt Tatar 0x44 */
- ILCID_POSIX_MAP(tzm), /* tzm Tamazight 0x5f */
- ILCID_POSIX_MAP(ug), /* ug Uighur 0x80 */
- ILCID_POSIX_MAP(uk), /* uk Ukrainian 0x22 */
- ILCID_POSIX_MAP(ur), /* ur Urdu 0x20 */
- ILCID_POSIX_MAP(uz), /* uz Uzbek 0x43 */
- ILCID_POSIX_MAP(ve), /* ve Venda 0x33 */
- ILCID_POSIX_MAP(vi), /* vi Vietnamese 0x2a */
- ILCID_POSIX_MAP(wo), /* wo Wolof 0x88 */
- ILCID_POSIX_MAP(xh), /* xh Xhosa 0x34 */
- ILCID_POSIX_MAP(yi), /* yi Yiddish 0x3d */
- ILCID_POSIX_MAP(yo), /* yo Yoruba 0x6a */
- ILCID_POSIX_MAP(zh), /* zh Chinese 0x04 */
- ILCID_POSIX_MAP(zu), /* zu Zulu 0x35 */
-};
-
-static const uint32_t gLocaleCount = UPRV_LENGTHOF(gPosixIDmap);
-
-/**
- * Do not call this function. It is called by hostID.
- * The function is not private because this struct must stay as a C struct,
- * and this is an internal class.
- */
-static int32_t
-idCmp(const char* id1, const char* id2)
-{
- int32_t diffIdx = 0;
- while (*id1 == *id2 && *id1 != 0) {
- diffIdx++;
- id1++;
- id2++;
- }
- return diffIdx;
-}
-
-/**
- * Searches for a Windows LCID
- *
- * @param posixid the Posix style locale id.
- * @param status gets set to U_ILLEGAL_ARGUMENT_ERROR when the Posix ID has
- * no equivalent Windows LCID.
- * @return the LCID
- */
-static uint32_t
-getHostID(const ILcidPosixMap *this_0, const char* posixID, UErrorCode* status)
-{
- int32_t bestIdx = 0;
- int32_t bestIdxDiff = 0;
- int32_t posixIDlen = (int32_t)uprv_strlen(posixID);
- uint32_t idx;
-
- for (idx = 0; idx < this_0->numRegions; idx++ ) {
- int32_t sameChars = idCmp(posixID, this_0->regionMaps[idx].posixID);
- if (sameChars > bestIdxDiff && this_0->regionMaps[idx].posixID[sameChars] == 0) {
- if (posixIDlen == sameChars) {
- /* Exact match */
- return this_0->regionMaps[idx].hostID;
- }
- bestIdxDiff = sameChars;
- bestIdx = idx;
- }
- }
- /* We asked for something unusual, like en_ZZ, and we try to return the number for the same language. */
- /* We also have to make sure that sid and si and similar string subsets don't match. */
- if ((posixID[bestIdxDiff] == '_' || posixID[bestIdxDiff] == '@')
- && this_0->regionMaps[bestIdx].posixID[bestIdxDiff] == 0)
- {
- *status = U_USING_FALLBACK_WARNING;
- return this_0->regionMaps[bestIdx].hostID;
- }
-
- /*no match found */
- *status = U_ILLEGAL_ARGUMENT_ERROR;
- return this_0->regionMaps->hostID;
-}
-
-static const char*
-getPosixID(const ILcidPosixMap *this_0, uint32_t hostID)
-{
- uint32_t i;
- for (i = 0; i <= this_0->numRegions; i++)
- {
- if (this_0->regionMaps[i].hostID == hostID)
- {
- return this_0->regionMaps[i].posixID;
- }
- }
-
- /* If you get here, then no matching region was found,
- so return the language id with the wild card region. */
- return this_0->regionMaps[0].posixID;
-}
-
-/*
-//////////////////////////////////////
-//
-// LCID --> POSIX
-//
-/////////////////////////////////////
-*/
-#ifdef USE_WINDOWS_LOCALE_API
-/*
- * Various language tags needs to be changed:
- * quz -> qu
- * prs -> fa
- */
-#define FIX_LANGUAGE_ID_TAG(buffer, len) \
- if (len >= 3) { \
- if (buffer[0] == 'q' && buffer[1] == 'u' && buffer[2] == 'z') {\
- buffer[2] = 0; \
- uprv_strcat(buffer, buffer+3); \
- } else if (buffer[0] == 'p' && buffer[1] == 'r' && buffer[2] == 's') {\
- buffer[0] = 'f'; buffer[1] = 'a'; buffer[2] = 0; \
- uprv_strcat(buffer, buffer+3); \
- } \
- }
-
-#endif
-U_CAPI int32_t
-uprv_convertToPosix(uint32_t hostid, char *posixID, int32_t posixIDCapacity, UErrorCode* status)
-{
- uint16_t langID;
- uint32_t localeIndex;
- UBool bLookup = TRUE;
- const char *pPosixID = NULL;
-
-#ifdef USE_WINDOWS_LOCALE_API
- // Note: Windows primary lang ID 0x92 in LCID is used for Central Kurdish and
- // GetLocaleInfo() maps such LCID to "ku". However, CLDR uses "ku" for
- // Northern Kurdish and "ckb" for Central Kurdish. For this reason, we cannot
- // use the Windows API to resolve locale ID for this specific case.
- if ((hostid & 0x3FF) != 0x92) {
- int32_t tmpLen = 0;
- char locName[157]; /* ULOC_FULLNAME_CAPACITY */
-
- tmpLen = GetLocaleInfoA(hostid, LOCALE_SNAME, (LPSTR)locName, UPRV_LENGTHOF(locName));
- if (tmpLen > 1) {
- /* Windows locale name may contain sorting variant, such as "es-ES_tradnl".
- In such case, we need special mapping data found in the hardcoded table
- in this source file. */
- char *p = uprv_strchr(locName, '_');
- if (p) {
- /* Keep the base locale, without variant */
- *p = 0;
- tmpLen = uprv_strlen(locName);
- }
- else {
- /* No hardcoded table lookup necessary */
- bLookup = FALSE;
- }
- /* Change the tag separator from '-' to '_' */
- p = locName;
- while (*p) {
- if (*p == '-') {
- *p = '_';
- }
- p++;
- }
- FIX_LANGUAGE_ID_TAG(locName, tmpLen);
- pPosixID = locName;
- }
- }
-#endif
- if (bLookup) {
- const char *pCandidate = NULL;
- langID = LANGUAGE_LCID(hostid);
-
- for (localeIndex = 0; localeIndex < gLocaleCount; localeIndex++) {
- if (langID == gPosixIDmap[localeIndex].regionMaps->hostID) {
- pCandidate = getPosixID(&gPosixIDmap[localeIndex], hostid);
- break;
- }
- }
-
- /* On Windows, when locale name has a variant, we still look up the hardcoded table.
- If a match in the hardcoded table is longer than the Windows locale name without
- variant, we use the one as the result */
- if (pCandidate && (pPosixID == NULL || uprv_strlen(pCandidate) > uprv_strlen(pPosixID))) {
- pPosixID = pCandidate;
- }
- }
-
- if (pPosixID) {
- int32_t resLen = uprv_strlen(pPosixID);
- int32_t copyLen = resLen <= posixIDCapacity ? resLen : posixIDCapacity;
- uprv_memcpy(posixID, pPosixID, copyLen);
- if (resLen < posixIDCapacity) {
- posixID[resLen] = 0;
- if (*status == U_STRING_NOT_TERMINATED_WARNING) {
- *status = U_ZERO_ERROR;
- }
- } else if (resLen == posixIDCapacity) {
- *status = U_STRING_NOT_TERMINATED_WARNING;
- } else {
- *status = U_BUFFER_OVERFLOW_ERROR;
- }
- return resLen;
- }
-
- /* no match found */
- *status = U_ILLEGAL_ARGUMENT_ERROR;
- return -1;
-}
-
-/*
-//////////////////////////////////////
-//
-// POSIX --> LCID
-// This should only be called from uloc_getLCID.
-// The locale ID must be in canonical form.
-// langID is separate so that this file doesn't depend on the uloc_* API.
-//
-/////////////////////////////////////
-*/
-
-U_CAPI uint32_t
-uprv_convertToLCID(const char *langID, const char* posixID, UErrorCode* status)
-{
-
- uint32_t low = 0;
- uint32_t high = gLocaleCount;
- uint32_t mid;
- uint32_t oldmid = 0;
- int32_t compVal;
-
- uint32_t value = 0;
- uint32_t fallbackValue = (uint32_t)-1;
- UErrorCode myStatus;
- uint32_t idx;
-
- /* Check for incomplete id. */
- if (!langID || !posixID || uprv_strlen(langID) < 2 || uprv_strlen(posixID) < 2) {
- return 0;
- }
-
- /*Binary search for the map entry for normal cases */
-
- while (high > low) /*binary search*/{
-
- mid = (high+low) >> 1; /*Finds median*/
-
- if (mid == oldmid)
- break;
-
- compVal = uprv_strcmp(langID, gPosixIDmap[mid].regionMaps->posixID);
- if (compVal < 0){
- high = mid;
- }
- else if (compVal > 0){
- low = mid;
- }
- else /*we found it*/{
- return getHostID(&gPosixIDmap[mid], posixID, status);
- }
- oldmid = mid;
- }
-
- /*
- * Sometimes we can't do a binary search on posixID because some LCIDs
- * go to different locales. We hit one of those special cases.
- */
- for (idx = 0; idx < gLocaleCount; idx++ ) {
- myStatus = U_ZERO_ERROR;
- value = getHostID(&gPosixIDmap[idx], posixID, &myStatus);
- if (myStatus == U_ZERO_ERROR) {
- return value;
- }
- else if (myStatus == U_USING_FALLBACK_WARNING) {
- fallbackValue = value;
- }
- }
-
- if (fallbackValue != (uint32_t)-1) {
- *status = U_USING_FALLBACK_WARNING;
- return fallbackValue;
- }
-
- /* no match found */
- *status = U_ILLEGAL_ARGUMENT_ERROR;
- return 0; /* return international (root) */
-}
-
Added: trunk/Build/source/libs/icu/icu-src/source/common/locmap.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locmap.cpp (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locmap.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,1320 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ **********************************************************************
+ * Copyright (C) 1996-2016, International Business Machines
+ * Corporation and others. All Rights Reserved.
+ **********************************************************************
+ *
+ * Provides functionality for mapping between
+ * LCID and Posix IDs or ICU locale to codepage
+ *
+ * Note: All classes and code in this file are
+ * intended for internal use only.
+ *
+ * Methods of interest:
+ * unsigned long convertToLCID(const char*);
+ * const char* convertToPosix(unsigned long);
+ *
+ * Kathleen Wilson, 4/30/96
+ *
+ * Date Name Description
+ * 3/11/97 aliu Fixed off-by-one bug in assignment operator. Added
+ * setId() method and safety check against
+ * MAX_ID_LENGTH.
+ * 04/23/99 stephen Added C wrapper for convertToPosix.
+ * 09/18/00 george Removed the memory leaks.
+ * 08/23/01 george Convert to C
+ */
+
+#include "locmap.h"
+#include "cstring.h"
+#include "cmemory.h"
+#include "unicode/uloc.h"
+
+#if U_PLATFORM == U_PF_WINDOWS && defined(_MSC_VER) && (_MSC_VER >= 1500)
+/*
+ * TODO: It seems like we should widen this to
+ * either U_PLATFORM_USES_ONLY_WIN32_API (includes MinGW)
+ * or U_PLATFORM_HAS_WIN32_API (includes MinGW and Cygwin)
+ * but those use gcc and won't have defined(_MSC_VER).
+ * We might need to #include some Windows header and test for some version macro from there.
+ * Or call some Windows function and see what it returns.
+ */
+#define USE_WINDOWS_LCID_MAPPING_API
+#include <windows.h>
+#include <winnls.h>
+#endif
+
+/*
+ * Note:
+ * The mapping from Win32 locale ID numbers to POSIX locale strings should
+ * be the faster one.
+ *
+ * Windows LCIDs are defined at https://msdn.microsoft.com/en-us/library/cc233965.aspx
+ * [MS-LCID] Windows Language Code Identifier (LCID) Reference
+ */
+
+/*
+////////////////////////////////////////////////
+//
+// Internal Classes for LCID <--> POSIX Mapping
+//
+/////////////////////////////////////////////////
+*/
+
+typedef struct ILcidPosixElement
+{
+ const uint32_t hostID;
+ const char * const posixID;
+} ILcidPosixElement;
+
+typedef struct ILcidPosixMap
+{
+ const uint32_t numRegions;
+ const struct ILcidPosixElement* const regionMaps;
+} ILcidPosixMap;
+
+
+/*
+/////////////////////////////////////////////////
+//
+// Easy macros to make the LCID <--> POSIX Mapping
+//
+/////////////////////////////////////////////////
+*/
+
+/**
+ * The standard one language/one country mapping for LCID.
+ * The first element must be the language, and the following
+ * elements are the language with the country.
+ * @param hostID LCID in host format such as 0x044d
+ * @param languageID posix ID of just the language such as 'de'
+ * @param posixID posix ID of the language_TERRITORY such as 'de_CH'
+ */
+#define ILCID_POSIX_ELEMENT_ARRAY(hostID, languageID, posixID) \
+static const ILcidPosixElement locmap_ ## languageID [] = { \
+ {LANGUAGE_LCID(hostID), #languageID}, /* parent locale */ \
+ {hostID, #posixID}, \
+};
+
+/**
+ * Define a subtable by ID
+ * @param id the POSIX ID, either a language or language_TERRITORY
+ */
+#define ILCID_POSIX_SUBTABLE(id) \
+static const ILcidPosixElement locmap_ ## id [] =
+
+
+/**
+ * Create the map for the posixID. This macro supposes that the language string
+ * name is the same as the global variable name, and that the first element
+ * in the ILcidPosixElement is just the language.
+ * @param _posixID the full POSIX ID for this entry.
+ */
+#define ILCID_POSIX_MAP(_posixID) \
+ {UPRV_LENGTHOF(locmap_ ## _posixID), locmap_ ## _posixID}
+
+/*
+////////////////////////////////////////////
+//
+// Create the table of LCID to POSIX Mapping
+// None of it should be dynamically created.
+//
+// Keep static locale variables inside the function so that
+// it can be created properly during static init.
+//
+// Note: This table should be updated periodically. Check the [MS-LCID] Windows Language Code Identifier
+// (LCID) Reference defined at https://msdn.microsoft.com/en-us/library/cc233965.aspx
+//
+// Microsoft is moving away from LCID in favor of locale name as of Vista. This table needs to be
+// maintained for support of older Windows version.
+// Update: Windows 7 (091130)
+//
+// Note: Microsoft assign a different LCID if a locale has a sorting variant. POSIX IDs below may contain
+// @collation=XXX, but no other keywords are allowed (at least for now). When uprv_convertToLCID() is
+// called from uloc_getLCID(), keywords other than collation are already removed. If we really need
+// to support other keywords in this mapping data, we must update the implementation.
+////////////////////////////////////////////
+*/
+
+// TODO: For Windows ideally this table would be a list of exceptions rather than a complete list as
+// LocaleNameToLCID and LCIDToLocaleName provide 90% of these.
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0436, af, af_ZA)
+
+ILCID_POSIX_SUBTABLE(ar) {
+ {0x01, "ar"},
+ {0x3801, "ar_AE"},
+ {0x3c01, "ar_BH"},
+ {0x1401, "ar_DZ"},
+ {0x0c01, "ar_EG"},
+ {0x0801, "ar_IQ"},
+ {0x2c01, "ar_JO"},
+ {0x3401, "ar_KW"},
+ {0x3001, "ar_LB"},
+ {0x1001, "ar_LY"},
+ {0x1801, "ar_MA"},
+ {0x1801, "ar_MO"},
+ {0x2001, "ar_OM"},
+ {0x4001, "ar_QA"},
+ {0x0401, "ar_SA"},
+ {0x2801, "ar_SY"},
+ {0x1c01, "ar_TN"},
+ {0x2401, "ar_YE"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x044d, as, as_IN)
+ILCID_POSIX_ELEMENT_ARRAY(0x045e, am, am_ET)
+ILCID_POSIX_ELEMENT_ARRAY(0x047a, arn,arn_CL)
+
+ILCID_POSIX_SUBTABLE(az) {
+ {0x2c, "az"},
+ {0x082c, "az_Cyrl_AZ"}, /* Cyrillic based */
+ {0x742c, "az_Cyrl"}, /* Cyrillic based */
+ {0x042c, "az_Latn_AZ"}, /* Latin based */
+ {0x782c, "az_Latn"}, /* Latin based */
+ {0x042c, "az_AZ"} /* Latin based */
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x046d, ba, ba_RU)
+ILCID_POSIX_ELEMENT_ARRAY(0x0423, be, be_BY)
+
+/*ILCID_POSIX_SUBTABLE(ber) {
+ {0x5f, "ber"},
+ {0x045f, "ber_Arab_DZ"},
+ {0x045f, "ber_Arab"},
+ {0x085f, "ber_Latn_DZ"},
+ {0x085f, "ber_Latn"}
+};*/
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0402, bg, bg_BG)
+
+ILCID_POSIX_SUBTABLE(bin) {
+ {0x66, "bin"},
+ {0x0466, "bin_NG"}
+};
+
+ILCID_POSIX_SUBTABLE(bn) {
+ {0x45, "bn"},
+ {0x0845, "bn_BD"},
+ {0x0445, "bn_IN"}
+};
+
+ILCID_POSIX_SUBTABLE(bo) {
+ {0x51, "bo"},
+ {0x0851, "bo_BT"},
+ {0x0451, "bo_CN"},
+ {0x0c51, "dz_BT"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x047e, br, br_FR)
+
+ILCID_POSIX_SUBTABLE(ca) {
+ {0x03, "ca"},
+ {0x0403, "ca_ES"},
+ {0x0803, "ca_ES_VALENCIA"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0483, co, co_FR)
+
+ILCID_POSIX_SUBTABLE(chr) {
+ {0x05c, "chr"},
+ {0x7c5c, "chr_Cher"},
+ {0x045c, "chr_Cher_US"},
+ {0x045c, "chr_US"}
+};
+
+// ICU has chosen different names for these.
+ILCID_POSIX_SUBTABLE(ckb) {
+ {0x92, "ckb"},
+ {0x7c92, "ckb_Arab"},
+ {0x0492, "ckb_Arab_IQ"}
+};
+
+/* Declared as cs_CZ to get around compiler errors on z/OS, which defines cs as a function */
+ILCID_POSIX_ELEMENT_ARRAY(0x0405, cs, cs_CZ)
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0452, cy, cy_GB)
+ILCID_POSIX_ELEMENT_ARRAY(0x0406, da, da_DK)
+
+// Windows doesn't know POSIX or BCP47 Unicode phonebook sort names
+ILCID_POSIX_SUBTABLE(de) {
+ {0x07, "de"},
+ {0x0c07, "de_AT"},
+ {0x0807, "de_CH"},
+ {0x0407, "de_DE"},
+ {0x1407, "de_LI"},
+ {0x1007, "de_LU"},
+ {0x10407,"de_DE at collation=phonebook"}, /*This is really de_DE_PHONEBOOK on Windows*/
+ {0x10407,"de at collation=phonebook"} /*This is really de_DE_PHONEBOOK on Windows*/
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0465, dv, dv_MV)
+ILCID_POSIX_ELEMENT_ARRAY(0x0408, el, el_GR)
+
+// Windows uses an empty string for 'invariant'
+ILCID_POSIX_SUBTABLE(en) {
+ {0x09, "en"},
+ {0x0c09, "en_AU"},
+ {0x2809, "en_BZ"},
+ {0x1009, "en_CA"},
+ {0x0809, "en_GB"},
+ {0x3c09, "en_HK"},
+ {0x3809, "en_ID"},
+ {0x1809, "en_IE"},
+ {0x4009, "en_IN"},
+ {0x2009, "en_JM"},
+ {0x4409, "en_MY"},
+ {0x1409, "en_NZ"},
+ {0x3409, "en_PH"},
+ {0x4809, "en_SG"},
+ {0x2C09, "en_TT"},
+ {0x0409, "en_US"},
+ {0x007f, "en_US_POSIX"}, /* duplicate for round-tripping */
+ {0x2409, "en_029"},
+ {0x1c09, "en_ZA"},
+ {0x3009, "en_ZW"},
+ {0x2409, "en_VI"}, /* Virgin Islands AKA Caribbean Islands (en_CB). On Windows8+ This is 0x1000 or dynamically assigned */
+ {0x0409, "en_AS"}, /* Alias for en_US. Leave last. On Windows8+ This is 0x1000 or dynamically assigned */
+ {0x0409, "en_GU"}, /* Alias for en_US. Leave last. On Windows8+ This is 0x1000 or dynamically assigned */
+ {0x0409, "en_MH"}, /* Alias for en_US. Leave last. On Windows8+ This is 0x1000 or dynamically assigned */
+ {0x0409, "en_MP"}, /* Alias for en_US. Leave last. On Windows8+ This is 0x1000 or dynamically assigned */
+ {0x0409, "en_UM"} /* Alias for en_US. Leave last. On Windows8+ This is 0x1000 or dynamically assigned */
+};
+
+ILCID_POSIX_SUBTABLE(en_US_POSIX) {
+ {0x007f, "en_US_POSIX"} /* duplicate for roundtripping */
+};
+
+// Windows doesn't know POSIX or BCP47 Unicode traditional sort names
+ILCID_POSIX_SUBTABLE(es) {
+ {0x0a, "es"},
+ {0x2c0a, "es_AR"},
+ {0x400a, "es_BO"},
+ {0x340a, "es_CL"},
+ {0x240a, "es_CO"},
+ {0x140a, "es_CR"},
+ {0x5c0a, "es_CU"},
+ {0x1c0a, "es_DO"},
+ {0x300a, "es_EC"},
+ {0x0c0a, "es_ES"}, /*Modern sort.*/
+ {0x100a, "es_GT"},
+ {0x480a, "es_HN"},
+ {0x080a, "es_MX"},
+ {0x4c0a, "es_NI"},
+ {0x180a, "es_PA"},
+ {0x280a, "es_PE"},
+ {0x500a, "es_PR"},
+ {0x3c0a, "es_PY"},
+ {0x440a, "es_SV"},
+ {0x540a, "es_US"},
+ {0x380a, "es_UY"},
+ {0x200a, "es_VE"},
+ {0x580a, "es_419"},
+ {0x040a, "es_ES at collation=traditional"},
+ {0x040a, "es at collation=traditional"} // Windows will treat this as es-ES at collation=traditional
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0425, et, et_EE)
+ILCID_POSIX_ELEMENT_ARRAY(0x042d, eu, eu_ES)
+
+/* ISO-639 doesn't distinguish between Persian and Dari.*/
+ILCID_POSIX_SUBTABLE(fa) {
+ {0x29, "fa"},
+ {0x0429, "fa_IR"}, /* Persian/Farsi (Iran) */
+ {0x048c, "fa_AF"} /* Persian/Dari (Afghanistan) */
+};
+
+
+/* duplicate for roundtripping */
+ILCID_POSIX_SUBTABLE(fa_AF) {
+ {0x8c, "fa_AF"}, /* Persian/Dari (Afghanistan) */
+ {0x048c, "fa_AF"} /* Persian/Dari (Afghanistan) */
+};
+
+ILCID_POSIX_SUBTABLE(ff) {
+ {0x67, "ff"},
+ {0x7c67, "ff_Latn"},
+ {0x0867, "ff_Latn_SN"},
+ {0x0467, "ff_NG"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x040b, fi, fi_FI)
+ILCID_POSIX_ELEMENT_ARRAY(0x0464, fil,fil_PH)
+ILCID_POSIX_ELEMENT_ARRAY(0x0438, fo, fo_FO)
+
+ILCID_POSIX_SUBTABLE(fr) {
+ {0x0c, "fr"},
+ {0x080c, "fr_BE"},
+ {0x0c0c, "fr_CA"},
+ {0x240c, "fr_CD"},
+ {0x240c, "fr_CG"},
+ {0x100c, "fr_CH"},
+ {0x300c, "fr_CI"},
+ {0x2c0c, "fr_CM"},
+ {0x040c, "fr_FR"},
+ {0x3c0c, "fr_HT"},
+ {0x140c, "fr_LU"},
+ {0x380c, "fr_MA"},
+ {0x180c, "fr_MC"},
+ {0x340c, "fr_ML"},
+ {0x200c, "fr_RE"},
+ {0x280c, "fr_SN"},
+ {0xe40c, "fr_015"},
+ {0x1c0c, "fr_029"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0467, fuv, fuv_NG)
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0462, fy, fy_NL)
+
+ILCID_POSIX_SUBTABLE(ga) { /* Gaelic (Ireland) */
+ {0x3c, "ga"},
+ {0x083c, "ga_IE"},
+ {0x043c, "gd_GB"}
+};
+
+ILCID_POSIX_SUBTABLE(gd) { /* Gaelic (Scotland) */
+ {0x91, "gd"},
+ {0x0491, "gd_GB"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0456, gl, gl_ES)
+ILCID_POSIX_ELEMENT_ARRAY(0x0447, gu, gu_IN)
+ILCID_POSIX_ELEMENT_ARRAY(0x0474, gn, gn_PY)
+ILCID_POSIX_ELEMENT_ARRAY(0x0484, gsw,gsw_FR)
+
+ILCID_POSIX_SUBTABLE(ha) {
+ {0x68, "ha"},
+ {0x7c68, "ha_Latn"},
+ {0x0468, "ha_Latn_NG"},
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0475, haw,haw_US)
+ILCID_POSIX_ELEMENT_ARRAY(0x040d, he, he_IL)
+ILCID_POSIX_ELEMENT_ARRAY(0x0439, hi, hi_IN)
+
+/* This LCID is really four different locales.*/
+ILCID_POSIX_SUBTABLE(hr) {
+ {0x1a, "hr"},
+ {0x141a, "bs_Latn_BA"}, /* Bosnian, Bosnia and Herzegovina */
+ {0x681a, "bs_Latn"}, /* Bosnian, Bosnia and Herzegovina */
+ {0x141a, "bs_BA"}, /* Bosnian, Bosnia and Herzegovina */
+ {0x781a, "bs"}, /* Bosnian */
+ {0x201a, "bs_Cyrl_BA"}, /* Bosnian, Bosnia and Herzegovina */
+ {0x641a, "bs_Cyrl"}, /* Bosnian, Bosnia and Herzegovina */
+ {0x101a, "hr_BA"}, /* Croatian in Bosnia */
+ {0x041a, "hr_HR"}, /* Croatian*/
+ {0x2c1a, "sr_Latn_ME"},
+ {0x241a, "sr_Latn_RS"},
+ {0x181a, "sr_Latn_BA"}, /* Serbo-Croatian in Bosnia */
+ {0x081a, "sr_Latn_CS"}, /* Serbo-Croatian*/
+ {0x701a, "sr_Latn"}, /* It's 0x1a or 0x081a, pick one to make the test program happy. */
+ {0x1c1a, "sr_Cyrl_BA"}, /* Serbo-Croatian in Bosnia */
+ {0x0c1a, "sr_Cyrl_CS"}, /* Serbian*/
+ {0x301a, "sr_Cyrl_ME"},
+ {0x281a, "sr_Cyrl_RS"},
+ {0x6c1a, "sr_Cyrl"}, /* It's 0x1a or 0x0c1a, pick one to make the test program happy. */
+ {0x7c1a, "sr"} /* In CLDR sr is sr_Cyrl. */
+};
+
+ILCID_POSIX_SUBTABLE(hsb) {
+ {0x2E, "hsb"},
+ {0x042E, "hsb_DE"},
+ {0x082E, "dsb_DE"},
+ {0x7C2E, "dsb"},
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x040e, hu, hu_HU)
+ILCID_POSIX_ELEMENT_ARRAY(0x042b, hy, hy_AM)
+
+ILCID_POSIX_SUBTABLE(ibb) {
+ {0x69, "ibb"},
+ {0x0469, "ibb_NG"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0421, id, id_ID)
+ILCID_POSIX_ELEMENT_ARRAY(0x0470, ig, ig_NG)
+ILCID_POSIX_ELEMENT_ARRAY(0x0478, ii, ii_CN)
+ILCID_POSIX_ELEMENT_ARRAY(0x040f, is, is_IS)
+
+ILCID_POSIX_SUBTABLE(it) {
+ {0x10, "it"},
+ {0x0810, "it_CH"},
+ {0x0410, "it_IT"}
+};
+
+ILCID_POSIX_SUBTABLE(iu) {
+ {0x5d, "iu"},
+ {0x045d, "iu_Cans_CA"},
+ {0x785d, "iu_Cans"},
+ {0x085d, "iu_Latn_CA"},
+ {0x7c5d, "iu_Latn"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x040d, iw, iw_IL) /*Left in for compatibility*/
+ILCID_POSIX_ELEMENT_ARRAY(0x0411, ja, ja_JP)
+ILCID_POSIX_ELEMENT_ARRAY(0x0437, ka, ka_GE)
+ILCID_POSIX_ELEMENT_ARRAY(0x043f, kk, kk_KZ)
+ILCID_POSIX_ELEMENT_ARRAY(0x046f, kl, kl_GL)
+ILCID_POSIX_ELEMENT_ARRAY(0x0453, km, km_KH)
+ILCID_POSIX_ELEMENT_ARRAY(0x044b, kn, kn_IN)
+
+ILCID_POSIX_SUBTABLE(ko) {
+ {0x12, "ko"},
+ {0x0812, "ko_KP"},
+ {0x0412, "ko_KR"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0457, kok, kok_IN)
+ILCID_POSIX_ELEMENT_ARRAY(0x0471, kr, kr_NG)
+
+ILCID_POSIX_SUBTABLE(ks) { /* We could add PK and CN too */
+ {0x60, "ks"},
+ {0x0460, "ks_Arab_IN"},
+ {0x0860, "ks_Deva_IN"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0440, ky, ky_KG) /* Kyrgyz is spoken in Kyrgyzstan */
+
+ILCID_POSIX_SUBTABLE(la) {
+ {0x76, "la"},
+ {0x0476, "la_001"},
+ {0x0476, "la_IT"} /*Left in for compatibility*/
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x046e, lb, lb_LU)
+ILCID_POSIX_ELEMENT_ARRAY(0x0454, lo, lo_LA)
+ILCID_POSIX_ELEMENT_ARRAY(0x0427, lt, lt_LT)
+ILCID_POSIX_ELEMENT_ARRAY(0x0426, lv, lv_LV)
+ILCID_POSIX_ELEMENT_ARRAY(0x0481, mi, mi_NZ)
+ILCID_POSIX_ELEMENT_ARRAY(0x042f, mk, mk_MK)
+ILCID_POSIX_ELEMENT_ARRAY(0x044c, ml, ml_IN)
+
+ILCID_POSIX_SUBTABLE(mn) {
+ {0x50, "mn"},
+ {0x0450, "mn_MN"},
+ {0x7c50, "mn_Mong"},
+ {0x0850, "mn_Mong_CN"},
+ {0x0850, "mn_CN"},
+ {0x7850, "mn_Cyrl"},
+ {0x0c50, "mn_Mong_MN"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0458, mni,mni_IN)
+ILCID_POSIX_ELEMENT_ARRAY(0x047c, moh,moh_CA)
+ILCID_POSIX_ELEMENT_ARRAY(0x044e, mr, mr_IN)
+
+ILCID_POSIX_SUBTABLE(ms) {
+ {0x3e, "ms"},
+ {0x083e, "ms_BN"}, /* Brunei Darussalam*/
+ {0x043e, "ms_MY"} /* Malaysia*/
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x043a, mt, mt_MT)
+ILCID_POSIX_ELEMENT_ARRAY(0x0455, my, my_MM)
+
+ILCID_POSIX_SUBTABLE(ne) {
+ {0x61, "ne"},
+ {0x0861, "ne_IN"}, /* India*/
+ {0x0461, "ne_NP"} /* Nepal*/
+};
+
+ILCID_POSIX_SUBTABLE(nl) {
+ {0x13, "nl"},
+ {0x0813, "nl_BE"},
+ {0x0413, "nl_NL"}
+};
+
+/* The "no" locale split into nb and nn. By default in ICU, "no" is nb.*/
+// TODO: Not all of these are needed on Windows, but I don't know how ICU treats preferred ones here.
+ILCID_POSIX_SUBTABLE(no) {
+ {0x14, "no"}, /* really nb_NO - actually Windows differentiates between neutral (no region) and specific (with region) */
+ {0x7c14, "nb"}, /* really nb */
+ {0x0414, "nb_NO"}, /* really nb_NO. Keep first in the 414 list. */
+ {0x0414, "no_NO"}, /* really nb_NO */
+ {0x0814, "nn_NO"}, /* really nn_NO. Keep first in the 814 list. */
+ {0x7814, "nn"}, /* It's 0x14 or 0x814, pick one to make the test program happy. */
+ {0x0814, "no_NO_NY"}/* really nn_NO */
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x046c, nso,nso_ZA) /* TODO: Verify the ISO-639 code */
+ILCID_POSIX_ELEMENT_ARRAY(0x0482, oc, oc_FR)
+
+ILCID_POSIX_SUBTABLE(om) { /* TODO: Verify the country */
+ {0x72, "om"},
+ {0x0472, "om_ET"},
+ {0x0472, "gaz_ET"}
+};
+
+/* Declared as or_IN to get around compiler errors*/
+ILCID_POSIX_SUBTABLE(or_IN) {
+ {0x48, "or"},
+ {0x0448, "or_IN"},
+};
+
+ILCID_POSIX_SUBTABLE(pa) {
+ {0x46, "pa"},
+ {0x0446, "pa_IN"},
+ {0x0846, "pa_Arab_PK"},
+ {0x0846, "pa_PK"}
+};
+
+ILCID_POSIX_SUBTABLE(pap) {
+ {0x79, "pap"},
+ {0x0479, "pap_029"},
+ {0x0479, "pap_AN"} /*Left in for compatibility*/
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0415, pl, pl_PL)
+ILCID_POSIX_ELEMENT_ARRAY(0x0463, ps, ps_AF)
+
+ILCID_POSIX_SUBTABLE(pt) {
+ {0x16, "pt"},
+ {0x0416, "pt_BR"},
+ {0x0816, "pt_PT"}
+};
+
+ILCID_POSIX_SUBTABLE(qu) {
+ {0x6b, "qu"},
+ {0x046b, "qu_BO"},
+ {0x086b, "qu_EC"},
+ {0x0C6b, "qu_PE"},
+ {0x046b, "quz_BO"},
+ {0x086b, "quz_EC"},
+ {0x0C6b, "quz_PE"}
+};
+
+ILCID_POSIX_SUBTABLE(quc) {
+ {0x93, "quc"},
+ {0x0493, "quc_CO"},
+ /*
+ "quc_Latn_GT" is an exceptional case. Language ID of "quc"
+ is 0x93, but LCID of "quc_Latn_GT" is 0x486, which should be
+ under the group of "qut". "qut" is a retired ISO 639-3 language
+ code for West Central Quiche, and merged to "quc".
+ It looks Windows previously reserved "qut" for K'iche', but,
+ decided to use "quc" when adding a locale for K'iche' (Guatemala).
+
+ This data structure used here assumes language ID bits in
+ LCID is unique for alphabetic language code. But this is not true
+ for "quc_Latn_GT". If we don't have the data below, LCID look up
+ by alphabetic locale ID (POSIX) will fail. The same entry is found
+ under "qut" below, which is required for reverse look up.
+ */
+ {0x0486, "quc_Latn_GT"}
+};
+
+ILCID_POSIX_SUBTABLE(qut) {
+ {0x86, "qut"},
+ {0x0486, "qut_GT"},
+ /*
+ See the note in "quc" above.
+ */
+ {0x0486, "quc_Latn_GT"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0417, rm, rm_CH)
+
+ILCID_POSIX_SUBTABLE(ro) {
+ {0x18, "ro"},
+ {0x0418, "ro_RO"},
+ {0x0818, "ro_MD"}
+};
+
+// TODO: This is almost certainly 'wrong'. 0 in Windows is a synonym for LOCALE_USER_DEFAULT.
+// More likely this is a similar concept to the Windows 0x7f Invariant locale ""
+// (Except that it's not invariant in ICU)
+ILCID_POSIX_SUBTABLE(root) {
+ {0x00, "root"}
+};
+
+ILCID_POSIX_SUBTABLE(ru) {
+ {0x19, "ru"},
+ {0x0419, "ru_RU"},
+ {0x0819, "ru_MD"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0487, rw, rw_RW)
+ILCID_POSIX_ELEMENT_ARRAY(0x044f, sa, sa_IN)
+ILCID_POSIX_ELEMENT_ARRAY(0x0485, sah,sah_RU)
+
+ILCID_POSIX_SUBTABLE(sd) {
+ {0x59, "sd"},
+ {0x0459, "sd_Deva_IN"},
+ {0x0459, "sd_IN"},
+ {0x0859, "sd_Arab_PK"},
+ {0x0859, "sd_PK"},
+ {0x7c59, "sd_Arab"}
+};
+
+ILCID_POSIX_SUBTABLE(se) {
+ {0x3b, "se"},
+ {0x0c3b, "se_FI"},
+ {0x043b, "se_NO"},
+ {0x083b, "se_SE"},
+ {0x783b, "sma"},
+ {0x183b, "sma_NO"},
+ {0x1c3b, "sma_SE"},
+ {0x7c3b, "smj"},
+ {0x703b, "smn"},
+ {0x743b, "sms"},
+ {0x103b, "smj_NO"},
+ {0x143b, "smj_SE"},
+ {0x243b, "smn_FI"},
+ {0x203b, "sms_FI"},
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x045b, si, si_LK)
+ILCID_POSIX_ELEMENT_ARRAY(0x041b, sk, sk_SK)
+ILCID_POSIX_ELEMENT_ARRAY(0x0424, sl, sl_SI)
+
+ILCID_POSIX_SUBTABLE(so) {
+ {0x77, "so"},
+ {0x0477, "so_SO"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x041c, sq, sq_AL)
+ILCID_POSIX_ELEMENT_ARRAY(0x0430, st, st_ZA)
+
+ILCID_POSIX_SUBTABLE(sv) {
+ {0x1d, "sv"},
+ {0x081d, "sv_FI"},
+ {0x041d, "sv_SE"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0441, sw, sw_KE)
+ILCID_POSIX_ELEMENT_ARRAY(0x045A, syr, syr_SY)
+
+ILCID_POSIX_SUBTABLE(ta) {
+ {0x49, "ta"},
+ {0x0449, "ta_IN"},
+ {0x0849, "ta_LK"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x044a, te, te_IN)
+
+/* Cyrillic based by default */
+ILCID_POSIX_SUBTABLE(tg) {
+ {0x28, "tg"},
+ {0x7c28, "tg_Cyrl"},
+ {0x0428, "tg_Cyrl_TJ"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x041e, th, th_TH)
+
+ILCID_POSIX_SUBTABLE(ti) {
+ {0x73, "ti"},
+ {0x0873, "ti_ER"},
+ {0x0473, "ti_ET"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0442, tk, tk_TM)
+
+ILCID_POSIX_SUBTABLE(tn) {
+ {0x32, "tn"},
+ {0x0832, "tn_BW"},
+ {0x0432, "tn_ZA"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x041f, tr, tr_TR)
+ILCID_POSIX_ELEMENT_ARRAY(0x0431, ts, ts_ZA)
+ILCID_POSIX_ELEMENT_ARRAY(0x0444, tt, tt_RU)
+
+ILCID_POSIX_SUBTABLE(tzm) {
+ {0x5f, "tzm"},
+ {0x7c5f, "tzm_Latn"},
+ {0x085f, "tzm_Latn_DZ"},
+ {0x105f, "tzm_Tfng_MA"},
+ {0x045f, "tzm_Arab_MA"},
+ {0x045f, "tmz"}
+};
+
+ILCID_POSIX_SUBTABLE(ug) {
+ {0x80, "ug"},
+ {0x0480, "ug_CN"},
+ {0x0480, "ug_Arab_CN"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0422, uk, uk_UA)
+
+ILCID_POSIX_SUBTABLE(ur) {
+ {0x20, "ur"},
+ {0x0820, "ur_IN"},
+ {0x0420, "ur_PK"}
+};
+
+ILCID_POSIX_SUBTABLE(uz) {
+ {0x43, "uz"},
+ {0x0843, "uz_Cyrl_UZ"}, /* Cyrillic based */
+ {0x7843, "uz_Cyrl"}, /* Cyrillic based */
+ {0x0843, "uz_UZ"}, /* Cyrillic based */
+ {0x0443, "uz_Latn_UZ"}, /* Latin based */
+ {0x7c43, "uz_Latn"} /* Latin based */
+};
+
+ILCID_POSIX_SUBTABLE(ve) { /* TODO: Verify the country */
+ {0x33, "ve"},
+ {0x0433, "ve_ZA"},
+ {0x0433, "ven_ZA"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x042a, vi, vi_VN)
+ILCID_POSIX_ELEMENT_ARRAY(0x0488, wo, wo_SN)
+ILCID_POSIX_ELEMENT_ARRAY(0x0434, xh, xh_ZA)
+
+ILCID_POSIX_SUBTABLE(yi) {
+ {0x003d, "yi"},
+ {0x043d, "yi_001"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x046a, yo, yo_NG)
+
+// Windows & ICU tend to different names for some of these
+// TODO: Windows probably does not need all of these entries, but I don't know how the precedence works.
+ILCID_POSIX_SUBTABLE(zh) {
+ {0x0004, "zh_Hans"},
+ {0x7804, "zh"},
+ {0x0804, "zh_CN"},
+ {0x0804, "zh_Hans_CN"},
+ {0x0c04, "zh_Hant_HK"},
+ {0x0c04, "zh_HK"},
+ {0x1404, "zh_Hant_MO"},
+ {0x1404, "zh_MO"},
+ {0x1004, "zh_Hans_SG"},
+ {0x1004, "zh_SG"},
+ {0x0404, "zh_Hant_TW"},
+ {0x7c04, "zh_Hant"},
+ {0x0404, "zh_TW"},
+ {0x30404,"zh_Hant_TW"}, /* Bopomofo order */
+ {0x30404,"zh_TW"}, /* Bopomofo order */
+ {0x20004,"zh at collation=stroke"},
+ {0x20404,"zh_Hant at collation=stroke"},
+ {0x20404,"zh_Hant_TW at collation=stroke"},
+ {0x20404,"zh_TW at collation=stroke"},
+ {0x20804,"zh_Hans at collation=stroke"},
+ {0x20804,"zh_Hans_CN at collation=stroke"},
+ {0x20804,"zh_CN at collation=stroke"}
+ // TODO: Alternate collations for other LCIDs are missing, eg: 0x50804
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0435, zu, zu_ZA)
+
+/* This must be static and grouped by LCID. */
+static const ILcidPosixMap gPosixIDmap[] = {
+ ILCID_POSIX_MAP(af), /* af Afrikaans 0x36 */
+ ILCID_POSIX_MAP(am), /* am Amharic 0x5e */
+ ILCID_POSIX_MAP(ar), /* ar Arabic 0x01 */
+ ILCID_POSIX_MAP(arn), /* arn Araucanian/Mapudungun 0x7a */
+ ILCID_POSIX_MAP(as), /* as Assamese 0x4d */
+ ILCID_POSIX_MAP(az), /* az Azerbaijani 0x2c */
+ ILCID_POSIX_MAP(ba), /* ba Bashkir 0x6d */
+ ILCID_POSIX_MAP(be), /* be Belarusian 0x23 */
+/* ILCID_POSIX_MAP(ber), ber Berber/Tamazight 0x5f */
+ ILCID_POSIX_MAP(bg), /* bg Bulgarian 0x02 */
+ ILCID_POSIX_MAP(bin), /* bin Edo 0x66 */
+ ILCID_POSIX_MAP(bn), /* bn Bengali; Bangla 0x45 */
+ ILCID_POSIX_MAP(bo), /* bo Tibetan 0x51 */
+ ILCID_POSIX_MAP(br), /* br Breton 0x7e */
+ ILCID_POSIX_MAP(ca), /* ca Catalan 0x03 */
+ ILCID_POSIX_MAP(chr), /* chr Cherokee 0x5c */
+ ILCID_POSIX_MAP(ckb), /* ckb Sorani (Central Kurdish) 0x92 */
+ ILCID_POSIX_MAP(co), /* co Corsican 0x83 */
+ ILCID_POSIX_MAP(cs), /* cs Czech 0x05 */
+ ILCID_POSIX_MAP(cy), /* cy Welsh 0x52 */
+ ILCID_POSIX_MAP(da), /* da Danish 0x06 */
+ ILCID_POSIX_MAP(de), /* de German 0x07 */
+ ILCID_POSIX_MAP(dv), /* dv Divehi 0x65 */
+ ILCID_POSIX_MAP(el), /* el Greek 0x08 */
+ ILCID_POSIX_MAP(en), /* en English 0x09 */
+ ILCID_POSIX_MAP(en_US_POSIX), /* invariant 0x7f */
+ ILCID_POSIX_MAP(es), /* es Spanish 0x0a */
+ ILCID_POSIX_MAP(et), /* et Estonian 0x25 */
+ ILCID_POSIX_MAP(eu), /* eu Basque 0x2d */
+ ILCID_POSIX_MAP(fa), /* fa Persian/Farsi 0x29 */
+ ILCID_POSIX_MAP(fa_AF), /* fa Persian/Dari 0x8c */
+ ILCID_POSIX_MAP(ff), /* ff Fula 0x67 */
+ ILCID_POSIX_MAP(fi), /* fi Finnish 0x0b */
+ ILCID_POSIX_MAP(fil), /* fil Filipino 0x64 */
+ ILCID_POSIX_MAP(fo), /* fo Faroese 0x38 */
+ ILCID_POSIX_MAP(fr), /* fr French 0x0c */
+ ILCID_POSIX_MAP(fuv), /* fuv Fulfulde - Nigeria 0x67 */
+ ILCID_POSIX_MAP(fy), /* fy Frisian 0x62 */
+ ILCID_POSIX_MAP(ga), /* * Gaelic (Ireland,Scotland) 0x3c */
+ ILCID_POSIX_MAP(gd), /* gd Gaelic (United Kingdom) 0x91 */
+ ILCID_POSIX_MAP(gl), /* gl Galician 0x56 */
+ ILCID_POSIX_MAP(gn), /* gn Guarani 0x74 */
+ ILCID_POSIX_MAP(gsw), /* gsw Alemanic/Alsatian/Swiss German 0x84 */
+ ILCID_POSIX_MAP(gu), /* gu Gujarati 0x47 */
+ ILCID_POSIX_MAP(ha), /* ha Hausa 0x68 */
+ ILCID_POSIX_MAP(haw), /* haw Hawaiian 0x75 */
+ ILCID_POSIX_MAP(he), /* he Hebrew (formerly iw) 0x0d */
+ ILCID_POSIX_MAP(hi), /* hi Hindi 0x39 */
+ ILCID_POSIX_MAP(hr), /* * Croatian and others 0x1a */
+ ILCID_POSIX_MAP(hsb), /* hsb Upper Sorbian 0x2e */
+ ILCID_POSIX_MAP(hu), /* hu Hungarian 0x0e */
+ ILCID_POSIX_MAP(hy), /* hy Armenian 0x2b */
+ ILCID_POSIX_MAP(ibb), /* ibb Ibibio - Nigeria 0x69 */
+ ILCID_POSIX_MAP(id), /* id Indonesian (formerly in) 0x21 */
+ ILCID_POSIX_MAP(ig), /* ig Igbo 0x70 */
+ ILCID_POSIX_MAP(ii), /* ii Sichuan Yi 0x78 */
+ ILCID_POSIX_MAP(is), /* is Icelandic 0x0f */
+ ILCID_POSIX_MAP(it), /* it Italian 0x10 */
+ ILCID_POSIX_MAP(iu), /* iu Inuktitut 0x5d */
+ ILCID_POSIX_MAP(iw), /* iw Hebrew 0x0d */
+ ILCID_POSIX_MAP(ja), /* ja Japanese 0x11 */
+ ILCID_POSIX_MAP(ka), /* ka Georgian 0x37 */
+ ILCID_POSIX_MAP(kk), /* kk Kazakh 0x3f */
+ ILCID_POSIX_MAP(kl), /* kl Kalaallisut 0x6f */
+ ILCID_POSIX_MAP(km), /* km Khmer 0x53 */
+ ILCID_POSIX_MAP(kn), /* kn Kannada 0x4b */
+ ILCID_POSIX_MAP(ko), /* ko Korean 0x12 */
+ ILCID_POSIX_MAP(kok), /* kok Konkani 0x57 */
+ ILCID_POSIX_MAP(kr), /* kr Kanuri 0x71 */
+ ILCID_POSIX_MAP(ks), /* ks Kashmiri 0x60 */
+ ILCID_POSIX_MAP(ky), /* ky Kyrgyz 0x40 */
+ ILCID_POSIX_MAP(lb), /* lb Luxembourgish 0x6e */
+ ILCID_POSIX_MAP(la), /* la Latin 0x76 */
+ ILCID_POSIX_MAP(lo), /* lo Lao 0x54 */
+ ILCID_POSIX_MAP(lt), /* lt Lithuanian 0x27 */
+ ILCID_POSIX_MAP(lv), /* lv Latvian, Lettish 0x26 */
+ ILCID_POSIX_MAP(mi), /* mi Maori 0x81 */
+ ILCID_POSIX_MAP(mk), /* mk Macedonian 0x2f */
+ ILCID_POSIX_MAP(ml), /* ml Malayalam 0x4c */
+ ILCID_POSIX_MAP(mn), /* mn Mongolian 0x50 */
+ ILCID_POSIX_MAP(mni), /* mni Manipuri 0x58 */
+ ILCID_POSIX_MAP(moh), /* moh Mohawk 0x7c */
+ ILCID_POSIX_MAP(mr), /* mr Marathi 0x4e */
+ ILCID_POSIX_MAP(ms), /* ms Malay 0x3e */
+ ILCID_POSIX_MAP(mt), /* mt Maltese 0x3a */
+ ILCID_POSIX_MAP(my), /* my Burmese 0x55 */
+/* ILCID_POSIX_MAP(nb), // no Norwegian 0x14 */
+ ILCID_POSIX_MAP(ne), /* ne Nepali 0x61 */
+ ILCID_POSIX_MAP(nl), /* nl Dutch 0x13 */
+/* ILCID_POSIX_MAP(nn), // no Norwegian 0x14 */
+ ILCID_POSIX_MAP(no), /* * Norwegian 0x14 */
+ ILCID_POSIX_MAP(nso), /* nso Sotho, Northern (Sepedi dialect) 0x6c */
+ ILCID_POSIX_MAP(oc), /* oc Occitan 0x82 */
+ ILCID_POSIX_MAP(om), /* om Oromo 0x72 */
+ ILCID_POSIX_MAP(or_IN), /* or Oriya 0x48 */
+ ILCID_POSIX_MAP(pa), /* pa Punjabi 0x46 */
+ ILCID_POSIX_MAP(pap), /* pap Papiamentu 0x79 */
+ ILCID_POSIX_MAP(pl), /* pl Polish 0x15 */
+ ILCID_POSIX_MAP(ps), /* ps Pashto 0x63 */
+ ILCID_POSIX_MAP(pt), /* pt Portuguese 0x16 */
+ ILCID_POSIX_MAP(qu), /* qu Quechua 0x6B */
+ ILCID_POSIX_MAP(quc), /* quc K'iche 0x93 */
+ ILCID_POSIX_MAP(qut), /* qut K'iche 0x86 */
+ ILCID_POSIX_MAP(rm), /* rm Raeto-Romance/Romansh 0x17 */
+ ILCID_POSIX_MAP(ro), /* ro Romanian 0x18 */
+ ILCID_POSIX_MAP(root), /* root 0x00 */
+ ILCID_POSIX_MAP(ru), /* ru Russian 0x19 */
+ ILCID_POSIX_MAP(rw), /* rw Kinyarwanda 0x87 */
+ ILCID_POSIX_MAP(sa), /* sa Sanskrit 0x4f */
+ ILCID_POSIX_MAP(sah), /* sah Yakut 0x85 */
+ ILCID_POSIX_MAP(sd), /* sd Sindhi 0x59 */
+ ILCID_POSIX_MAP(se), /* se Sami 0x3b */
+/* ILCID_POSIX_MAP(sh), // sh Serbo-Croatian 0x1a */
+ ILCID_POSIX_MAP(si), /* si Sinhalese 0x5b */
+ ILCID_POSIX_MAP(sk), /* sk Slovak 0x1b */
+ ILCID_POSIX_MAP(sl), /* sl Slovenian 0x24 */
+ ILCID_POSIX_MAP(so), /* so Somali 0x77 */
+ ILCID_POSIX_MAP(sq), /* sq Albanian 0x1c */
+/* ILCID_POSIX_MAP(sr), // sr Serbian 0x1a */
+ ILCID_POSIX_MAP(st), /* st Sutu 0x30 */
+ ILCID_POSIX_MAP(sv), /* sv Swedish 0x1d */
+ ILCID_POSIX_MAP(sw), /* sw Swahili 0x41 */
+ ILCID_POSIX_MAP(syr), /* syr Syriac 0x5A */
+ ILCID_POSIX_MAP(ta), /* ta Tamil 0x49 */
+ ILCID_POSIX_MAP(te), /* te Telugu 0x4a */
+ ILCID_POSIX_MAP(tg), /* tg Tajik 0x28 */
+ ILCID_POSIX_MAP(th), /* th Thai 0x1e */
+ ILCID_POSIX_MAP(ti), /* ti Tigrigna 0x73 */
+ ILCID_POSIX_MAP(tk), /* tk Turkmen 0x42 */
+ ILCID_POSIX_MAP(tn), /* tn Tswana 0x32 */
+ ILCID_POSIX_MAP(tr), /* tr Turkish 0x1f */
+ ILCID_POSIX_MAP(ts), /* ts Tsonga 0x31 */
+ ILCID_POSIX_MAP(tt), /* tt Tatar 0x44 */
+ ILCID_POSIX_MAP(tzm), /* tzm Tamazight 0x5f */
+ ILCID_POSIX_MAP(ug), /* ug Uighur 0x80 */
+ ILCID_POSIX_MAP(uk), /* uk Ukrainian 0x22 */
+ ILCID_POSIX_MAP(ur), /* ur Urdu 0x20 */
+ ILCID_POSIX_MAP(uz), /* uz Uzbek 0x43 */
+ ILCID_POSIX_MAP(ve), /* ve Venda 0x33 */
+ ILCID_POSIX_MAP(vi), /* vi Vietnamese 0x2a */
+ ILCID_POSIX_MAP(wo), /* wo Wolof 0x88 */
+ ILCID_POSIX_MAP(xh), /* xh Xhosa 0x34 */
+ ILCID_POSIX_MAP(yi), /* yi Yiddish 0x3d */
+ ILCID_POSIX_MAP(yo), /* yo Yoruba 0x6a */
+ ILCID_POSIX_MAP(zh), /* zh Chinese 0x04 */
+ ILCID_POSIX_MAP(zu), /* zu Zulu 0x35 */
+};
+
+static const uint32_t gLocaleCount = UPRV_LENGTHOF(gPosixIDmap);
+
+/**
+ * Do not call this function. It is called by hostID.
+ * The function is not private because this struct must stay as a C struct,
+ * and this is an internal class.
+ */
+static int32_t
+idCmp(const char* id1, const char* id2)
+{
+ int32_t diffIdx = 0;
+ while (*id1 == *id2 && *id1 != 0) {
+ diffIdx++;
+ id1++;
+ id2++;
+ }
+ return diffIdx;
+}
+
+/**
+ * Searches for a Windows LCID
+ *
+ * @param posixid the Posix style locale id.
+ * @param status gets set to U_ILLEGAL_ARGUMENT_ERROR when the Posix ID has
+ * no equivalent Windows LCID.
+ * @return the LCID
+ */
+static uint32_t
+getHostID(const ILcidPosixMap *this_0, const char* posixID, UErrorCode* status)
+{
+ int32_t bestIdx = 0;
+ int32_t bestIdxDiff = 0;
+ int32_t posixIDlen = (int32_t)uprv_strlen(posixID);
+ uint32_t idx;
+
+ for (idx = 0; idx < this_0->numRegions; idx++ ) {
+ int32_t sameChars = idCmp(posixID, this_0->regionMaps[idx].posixID);
+ if (sameChars > bestIdxDiff && this_0->regionMaps[idx].posixID[sameChars] == 0) {
+ if (posixIDlen == sameChars) {
+ /* Exact match */
+ return this_0->regionMaps[idx].hostID;
+ }
+ bestIdxDiff = sameChars;
+ bestIdx = idx;
+ }
+ }
+ /* We asked for something unusual, like en_ZZ, and we try to return the number for the same language. */
+ /* We also have to make sure that sid and si and similar string subsets don't match. */
+ if ((posixID[bestIdxDiff] == '_' || posixID[bestIdxDiff] == '@')
+ && this_0->regionMaps[bestIdx].posixID[bestIdxDiff] == 0)
+ {
+ *status = U_USING_FALLBACK_WARNING;
+ return this_0->regionMaps[bestIdx].hostID;
+ }
+
+ /*no match found */
+ *status = U_ILLEGAL_ARGUMENT_ERROR;
+ return this_0->regionMaps->hostID;
+}
+
+static const char*
+getPosixID(const ILcidPosixMap *this_0, uint32_t hostID)
+{
+ uint32_t i;
+ for (i = 0; i <= this_0->numRegions; i++)
+ {
+ if (this_0->regionMaps[i].hostID == hostID)
+ {
+ return this_0->regionMaps[i].posixID;
+ }
+ }
+
+ /* If you get here, then no matching region was found,
+ so return the language id with the wild card region. */
+ return this_0->regionMaps[0].posixID;
+}
+
+/*
+//////////////////////////////////////
+//
+// LCID --> POSIX
+//
+/////////////////////////////////////
+*/
+#ifdef USE_WINDOWS_LCID_MAPPING_API
+/*
+ * Various language tags needs to be changed:
+ * quz -> qu
+ * prs -> fa
+ */
+#define FIX_LANGUAGE_ID_TAG(buffer, len) \
+ if (len >= 3) { \
+ if (buffer[0] == 'q' && buffer[1] == 'u' && buffer[2] == 'z') {\
+ buffer[2] = 0; \
+ uprv_strcat(buffer, buffer+3); \
+ } else if (buffer[0] == 'p' && buffer[1] == 'r' && buffer[2] == 's') {\
+ buffer[0] = 'f'; buffer[1] = 'a'; buffer[2] = 0; \
+ uprv_strcat(buffer, buffer+3); \
+ } \
+ }
+
+#endif
+U_CAPI int32_t
+uprv_convertToPosix(uint32_t hostid, char *posixID, int32_t posixIDCapacity, UErrorCode* status)
+{
+ uint16_t langID;
+ uint32_t localeIndex;
+ UBool bLookup = TRUE;
+ const char *pPosixID = NULL;
+
+#ifdef USE_WINDOWS_LCID_MAPPING_API
+ char locName[LOCALE_NAME_MAX_LENGTH] = {}; // ICU name can't be longer than Windows name
+
+ // Note: Windows primary lang ID 0x92 in LCID is used for Central Kurdish and
+ // GetLocaleInfo() maps such LCID to "ku". However, CLDR uses "ku" for
+ // Northern Kurdish and "ckb" for Central Kurdish. For this reason, we cannot
+ // use the Windows API to resolve locale ID for this specific case.
+ if ((hostid & 0x3FF) != 0x92) {
+ int32_t tmpLen = 0;
+ UChar windowsLocaleName[LOCALE_NAME_MAX_LENGTH]; // ULOC_FULLNAME_CAPACITY > LOCALE_NAME_MAX_LENGTH
+
+ // Note: LOCALE_ALLOW_NEUTRAL_NAMES was enabled in Windows7+, prior versions did not handle neutral (no-region) locale names.
+ tmpLen = LCIDToLocaleName(hostid, (PWSTR)windowsLocaleName, UPRV_LENGTHOF(windowsLocaleName), LOCALE_ALLOW_NEUTRAL_NAMES);
+ if (tmpLen > 1) {
+ int32_t i = 0;
+ // Only need to look up in table if have _, eg for de-de_phoneb type alternate sort.
+ bLookup = FALSE;
+ for (i = 0; i < UPRV_LENGTHOF(locName); i++)
+ {
+ locName[i] = (char)(windowsLocaleName[i]);
+
+ // Windows locale name may contain sorting variant, such as "es-ES_tradnl".
+ // In such cases, we need special mapping data found in the hardcoded table
+ // in this source file.
+ if (windowsLocaleName[i] == L'_')
+ {
+ // Keep the base locale, without variant
+ // TODO: Should these be mapped from _phoneb to @collation=phonebook, etc.?
+ locName[i] = '\0';
+ tmpLen = i;
+ bLookup = TRUE;
+ break;
+ }
+ else if (windowsLocaleName[i] == L'-')
+ {
+ // Windows names use -, ICU uses _
+ locName[i] = '_';
+ }
+ else if (windowsLocaleName[i] == L'\0')
+ {
+ // No point in doing more work than necessary
+ break;
+ }
+ }
+ // TODO: Need to understand this better, why isn't it an alias?
+ FIX_LANGUAGE_ID_TAG(locName, tmpLen);
+ pPosixID = locName;
+ }
+ }
+#endif // USE_WINDOWS_LCID_MAPPING_API
+
+ if (bLookup) {
+ const char *pCandidate = NULL;
+ langID = LANGUAGE_LCID(hostid);
+
+ for (localeIndex = 0; localeIndex < gLocaleCount; localeIndex++) {
+ if (langID == gPosixIDmap[localeIndex].regionMaps->hostID) {
+ pCandidate = getPosixID(&gPosixIDmap[localeIndex], hostid);
+ break;
+ }
+ }
+
+ /* On Windows, when locale name has a variant, we still look up the hardcoded table.
+ If a match in the hardcoded table is longer than the Windows locale name without
+ variant, we use the one as the result */
+ if (pCandidate && (pPosixID == NULL || uprv_strlen(pCandidate) > uprv_strlen(pPosixID))) {
+ pPosixID = pCandidate;
+ }
+ }
+
+ if (pPosixID) {
+ int32_t resLen = static_cast<int32_t>(uprv_strlen(pPosixID));
+ int32_t copyLen = resLen <= posixIDCapacity ? resLen : posixIDCapacity;
+ uprv_memcpy(posixID, pPosixID, copyLen);
+ if (resLen < posixIDCapacity) {
+ posixID[resLen] = 0;
+ if (*status == U_STRING_NOT_TERMINATED_WARNING) {
+ *status = U_ZERO_ERROR;
+ }
+ } else if (resLen == posixIDCapacity) {
+ *status = U_STRING_NOT_TERMINATED_WARNING;
+ } else {
+ *status = U_BUFFER_OVERFLOW_ERROR;
+ }
+ return resLen;
+ }
+
+ /* no match found */
+ *status = U_ILLEGAL_ARGUMENT_ERROR;
+ return -1;
+}
+
+/*
+//////////////////////////////////////
+//
+// POSIX --> LCID
+// This should only be called from uloc_getLCID.
+// The locale ID must be in canonical form.
+//
+/////////////////////////////////////
+*/
+U_CAPI uint32_t
+uprv_convertToLCIDPlatform(const char* localeID)
+{
+ // The purpose of this function is to leverage native platform name->lcid
+ // conversion functionality when available.
+#ifdef USE_WINDOWS_LCID_MAPPING_API
+ DWORD nameLCIDFlags = 0;
+ UErrorCode myStatus = U_ZERO_ERROR;
+
+ // First check for a Windows name->LCID match, fall through to catch
+ // ICU special cases, but Windows may know it already.
+#if LOCALE_ALLOW_NEUTRAL_NAMES
+ nameLCIDFlags = LOCALE_ALLOW_NEUTRAL_NAMES;
+#endif /* LOCALE_ALLOW_NEUTRAL_NAMES */
+
+ 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, &myStatus);
+ if (U_SUCCESS(myStatus) && len > 0)
+ {
+ // If it contains the keyword collation, return 0 so that the LCID lookup table will be used.
+ return 0;
+ }
+ else
+ {
+ // If the locale ID contains keywords other than collation, just use the base name.
+ len = uloc_getBaseName(localeID, baseName, UPRV_LENGTHOF(baseName) - 1, &myStatus);
+
+ if (U_SUCCESS(myStatus) && len > 0)
+ {
+ baseName[len] = 0;
+ mylocaleID = baseName;
+ }
+ }
+ }
+
+ char asciiBCP47Tag[LOCALE_NAME_MAX_LENGTH] = {};
+ // this will change it from de_DE at collation=phonebook to de-DE-u-co-phonebk form
+ (void)uloc_toLanguageTag(mylocaleID, asciiBCP47Tag, UPRV_LENGTHOF(asciiBCP47Tag), FALSE, &myStatus);
+
+ if (U_SUCCESS(myStatus))
+ {
+ // Need it to be UTF-16, not 8-bit
+ wchar_t bcp47Tag[LOCALE_NAME_MAX_LENGTH] = {};
+ int32_t i;
+ for (i = 0; i < UPRV_LENGTHOF(bcp47Tag); i++)
+ {
+ if (asciiBCP47Tag[i] == '\0')
+ {
+ break;
+ }
+ else
+ {
+ // Copy the character
+ bcp47Tag[i] = static_cast<wchar_t>(asciiBCP47Tag[i]);
+ }
+ }
+
+ if (i < (UPRV_LENGTHOF(bcp47Tag) - 1))
+ {
+ // Ensure it's null terminated
+ bcp47Tag[i] = L'\0';
+ LCID lcid = LocaleNameToLCID(bcp47Tag, nameLCIDFlags);
+ if (lcid > 0)
+ {
+ // Found LCID from windows, return that one, unless its completely ambiguous
+ // LOCALE_USER_DEFAULT and transients are OK because they will round trip
+ // for this process.
+ if (lcid != LOCALE_CUSTOM_UNSPECIFIED)
+ {
+ return lcid;
+ }
+ }
+ }
+ }
+#else
+ (void)localeID; // Suppress unused variable warning.
+#endif /* USE_WINDOWS_LCID_MAPPING_API */
+
+ // No found, or not implemented on platforms without native name->lcid conversion
+ return 0;
+}
+
+U_CAPI uint32_t
+uprv_convertToLCID(const char *langID, const char* posixID, UErrorCode* status)
+{
+ // This function does the table lookup when native platform name->lcid conversion isn't available,
+ // or for locales that don't follow patterns the platform expects.
+ uint32_t low = 0;
+ uint32_t high = gLocaleCount;
+ uint32_t mid;
+ uint32_t oldmid = 0;
+ int32_t compVal;
+
+ uint32_t value = 0;
+ uint32_t fallbackValue = (uint32_t)-1;
+ UErrorCode myStatus;
+ uint32_t idx;
+
+ /* Check for incomplete id. */
+ if (!langID || !posixID || uprv_strlen(langID) < 2 || uprv_strlen(posixID) < 2) {
+ return 0;
+ }
+
+ /*Binary search for the map entry for normal cases */
+
+ while (high > low) /*binary search*/{
+
+ mid = (high+low) >> 1; /*Finds median*/
+
+ if (mid == oldmid)
+ break;
+
+ compVal = uprv_strcmp(langID, gPosixIDmap[mid].regionMaps->posixID);
+ if (compVal < 0){
+ high = mid;
+ }
+ else if (compVal > 0){
+ low = mid;
+ }
+ else /*we found it*/{
+ return getHostID(&gPosixIDmap[mid], posixID, status);
+ }
+ oldmid = mid;
+ }
+
+ /*
+ * Sometimes we can't do a binary search on posixID because some LCIDs
+ * go to different locales. We hit one of those special cases.
+ */
+ for (idx = 0; idx < gLocaleCount; idx++ ) {
+ myStatus = U_ZERO_ERROR;
+ value = getHostID(&gPosixIDmap[idx], posixID, &myStatus);
+ if (myStatus == U_ZERO_ERROR) {
+ return value;
+ }
+ else if (myStatus == U_USING_FALLBACK_WARNING) {
+ fallbackValue = value;
+ }
+ }
+
+ if (fallbackValue != (uint32_t)-1) {
+ *status = U_USING_FALLBACK_WARNING;
+ return fallbackValue;
+ }
+
+ /* no match found */
+ *status = U_ILLEGAL_ARGUMENT_ERROR;
+ return 0; /* return international (root) */
+}
Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/locmap.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/locmap.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locmap.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locmap.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
******************************************************************************
@@ -32,7 +32,8 @@
U_CAPI int32_t uprv_convertToPosix(uint32_t hostid, char* posixID, int32_t posixIDCapacity, UErrorCode* status);
-/* Don't call this function directly. Use uloc_getLCID instead. */
+/* Don't call these functions directly. Use uloc_getLCID instead. */
+U_CAPI uint32_t uprv_convertToLCIDPlatform(const char *localeID); // Leverage platform conversion if possible
U_CAPI uint32_t uprv_convertToLCID(const char *langID, const char* posixID, UErrorCode* status);
#endif /* LOCMAP_H */
Modified: trunk/Build/source/libs/icu/icu-src/source/common/locresdata.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locresdata.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locresdata.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -8,7 +8,7 @@
*
*******************************************************************************
* file name: loclikely.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
Modified: trunk/Build/source/libs/icu/icu-src/source/common/locutil.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locutil.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locutil.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/locutil.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locutil.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locutil.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/**
*******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/messageimpl.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/messageimpl.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/messageimpl.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -6,7 +6,7 @@
* Corporation and others. All Rights Reserved.
*******************************************************************************
* file name: messageimpl.h
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
Modified: trunk/Build/source/libs/icu/icu-src/source/common/messagepattern.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/messagepattern.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/messagepattern.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -6,7 +6,7 @@
* Corporation and others. All Rights Reserved.
*******************************************************************************
* file name: messagepattern.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
Modified: trunk/Build/source/libs/icu/icu-src/source/common/msvcres.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/msvcres.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/msvcres.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
//{{NO_DEPENDENCIES}}
// Copyright (c) 2003-2010 International Business Machines
Modified: trunk/Build/source/libs/icu/icu-src/source/common/mutex.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/mutex.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/mutex.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,24 +1,25 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * Copyright (C) 1999-2016, International Business Machines
- * Corporation and others. All Rights Reserved.
- *
- * file name: norm2_nfc_data.h
- *
- * machine-generated by: icu/source/tools/gennorm2/n2builder.cpp
- */
+//
+// Copyright (C) 1999-2016, International Business Machines
+// Corporation and others. All Rights Reserved.
+//
+// file name: norm2_nfc_data.h
+//
+// machine-generated by: icu/source/tools/gennorm2/n2builder.cpp
+
#ifdef INCLUDED_FROM_NORMALIZER2_CPP
-static const UVersionInfo norm2_nfc_data_formatVersion={2,0,0,0};
-static const UVersionInfo norm2_nfc_data_dataVersion={9,0,0,0};
+static const UVersionInfo norm2_nfc_data_formatVersion={3,0,0,0};
+static const UVersionInfo norm2_nfc_data_dataVersion={0xa,0,0,0};
static const int32_t norm2_nfc_data_indexes[Normalizer2Impl::IX_COUNT]={
-0x40,0x4bb8,0x880c,0x890c,0x890c,0x890c,0x890c,0x890c,0xc0,0x300,0x56e,0x14e7,0x1e2a,0xfe00,0x941,0
+0x50,0x4cc0,0x8918,0x8a18,0x8a18,0x8a18,0x8a18,0x8a18,0xc0,0x300,0xadc,0x29d0,0x3c56,0xfc00,0x1282,0x3b8c,
+0x3c24,0x3c56,0x300,0
};
-static const uint16_t norm2_nfc_data_trieIndex[9652]={
+static const uint16_t norm2_nfc_data_trieIndex[9776]={
0x2a8,0x2b0,0x2b8,0x2c0,0x2ce,0x2d6,0x2de,0x2e6,0x2ee,0x2f6,0x2fe,0x306,0x30e,0x316,0x31c,0x324,
0x32c,0x334,0x2c7,0x2cf,0x339,0x341,0x2c7,0x2cf,0x349,0x351,0x359,0x361,0x369,0x371,0x379,0x381,
0x389,0x391,0x399,0x3a1,0x3a9,0x3b1,0x3b9,0x3c1,0x2c7,0x2cf,0x2c7,0x2cf,0x3c8,0x3d0,0x3d8,0x3e0,
@@ -25,25 +26,25 @@
0x3e4,0x3ec,0x3f2,0x3fa,0x2c7,0x2cf,0x402,0x40a,0x40e,0x416,0x41e,0x426,0x2c7,0x2cf,0x424,0x42c,
0x431,0x438,0x43c,0x2c7,0x2c7,0x2c7,0x443,0x44b,0x2c7,0x453,0x45b,0x2c7,0x2c7,0x463,0x46b,0x2c7,
0x2c7,0x473,0x47b,0x2c7,0x2c7,0x483,0x48b,0x2c7,0x2c7,0x463,0x492,0x2c7,0x49a,0x4a0,0x4a8,0x2c7,
-0x2c7,0x2c7,0x4af,0x2c7,0x2c7,0x4b5,0x4bd,0x2c7,0x2c7,0x4a0,0x4c4,0x2c7,0x2c7,0x2c7,0x4ca,0x2c7,
-0x2c7,0x4d2,0x4d9,0x2c7,0x2c7,0x4dc,0x4e3,0x2c7,0x4e6,0x4ed,0x4f5,0x4fd,0x505,0x50d,0x514,0x2c7,
-0x2c7,0x51b,0x2c7,0x2c7,0x522,0x2c7,0x2c7,0x2c7,0x929,0x2c7,0x2c7,0x931,0x2c7,0x937,0x93f,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x526,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x4af,0x2c7,0x2c7,0x4b5,0x4bd,0x2c7,0x2c7,0x4c3,0x4cb,0x2c7,0x2c7,0x2c7,0x4d1,0x2c7,
+0x2c7,0x4d9,0x4e0,0x2c7,0x2c7,0x4e3,0x4ea,0x2c7,0x4ed,0x4f4,0x4fc,0x504,0x50c,0x514,0x51b,0x2c7,
+0x2c7,0x522,0x2c7,0x2c7,0x529,0x2c7,0x2c7,0x2c7,0x93b,0x2c7,0x2c7,0x943,0x2c7,0x949,0x951,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x52d,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x52e,0x52e,0x2c7,0x2c7,0x2c7,0x2c7,0x534,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x53c,0x2c7,0x2c7,0x2c7,0x53f,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x546,0x2c7,0x2c7,0x54e,0x2c7,0x556,0x2c7,0x2c7,0x55e,0x563,0x56b,0x571,0x2c7,0x577,0x2c7,0x57e,
-0x2c7,0x583,0x2c7,0x2c7,0x2c7,0x2c7,0x589,0x591,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x599,0x59e,
-0x5a6,0x5ae,0x5b6,0x5be,0x5c6,0x5ce,0x5d6,0x5de,0x5e6,0x5ee,0x5f6,0x5fe,0x606,0x60e,0x616,0x61e,
-0x626,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x62a,0x632,0x2c7,0x639,0x2c7,0x2c7,0x63d,0x644,0x649,0x2c7,
-0x651,0x659,0x661,0x669,0x671,0x679,0x2c7,0x681,0x2c7,0x687,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x535,0x535,0x2c7,0x2c7,0x2c7,0x2c7,0x53b,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x543,0x2c7,0x2c7,0x2c7,0x546,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x54d,0x2c7,0x2c7,0x555,0x2c7,0x55d,0x2c7,0x2c7,0x565,0x56a,0x572,0x578,0x2c7,0x57e,0x2c7,0x585,
+0x2c7,0x58a,0x2c7,0x2c7,0x2c7,0x2c7,0x590,0x598,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x5a0,0x5a5,
+0x5ad,0x5b5,0x5bd,0x5c5,0x5cd,0x5d5,0x5dd,0x5e5,0x5ed,0x5f5,0x5fd,0x605,0x60d,0x615,0x61d,0x625,
+0x62d,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x631,0x639,0x2c7,0x640,0x2c7,0x2c7,0x644,0x64b,0x650,0x2c7,
+0x658,0x660,0x668,0x670,0x678,0x680,0x2c7,0x688,0x2c7,0x68e,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x68a,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x692,0x2c7,0x2c7,0x2c7,0x697,0x2c7,0x2c7,0x2c7,0x69f,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x691,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x699,0x2c7,0x2c7,0x2c7,0x69e,0x2c7,0x2c7,0x2c7,0x6a6,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x6a7,0x6ae,0x6b6,0x6be,0x6c6,0x6ce,0x6d6,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x6ae,0x6b5,0x6bd,0x6c5,0x6cd,0x6d5,0x6dd,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
@@ -102,32 +103,32 @@
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x6de,0x6e6,0x2c7,0x2c7,0x6ee,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x6f5,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x6fc,0x704,0x2c7,0x70a,0x70e,0x2c7,0x2c7,0x584,0x716,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x71a,0x722,0x725,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x48b,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x94e,0x2c7,0x2c7,
-0x956,0x95d,0x2a8,0x964,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+0x2c7,0x2c7,0x2c7,0x6e5,0x6ed,0x2c7,0x2c7,0x6f5,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x6fc,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x703,0x70b,0x2c7,0x711,0x715,0x2c7,0x2c7,0x58b,0x71d,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x721,0x729,0x72c,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x48b,
+0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,
+0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,
+0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,
+0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,
+0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,
+0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,
+0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,
+0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,
+0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,
+0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,
+0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,
+0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,
+0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,
+0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,
+0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,
+0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,
+0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,
+0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,
+0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,
+0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,
+0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,
+0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x965,0x2c7,0x2c7,
+0x975,0x97c,0x2a8,0x983,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
@@ -143,489 +144,496 @@
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x72d,0x735,0x73d,0x745,0x74d,0x755,0x75d,0x765,
-0x76d,0x775,0x77d,0x785,0x78d,0x795,0x79d,0x2c7,0x7a4,0x7ac,0x7b4,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x734,0x73c,0x744,0x74c,0x754,0x75c,0x764,0x76c,
+0x774,0x77c,0x784,0x78c,0x794,0x79c,0x7a4,0x2c7,0x7ab,0x7b3,0x7bb,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x7bc,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x7c3,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0xb20,0xb20,0xb38,0xb78,0xbb8,0xbf8,0xc38,0xc70,0xcb0,0xb1c,0xce4,0xb1c,0xd24,0xd64,0xda4,0xde4,
0xe24,0xe64,0xea4,0xee4,0xb1c,0xb1c,0xf20,0xf60,0xf90,0xfc8,0xb1c,0x1008,0x1038,0x1078,0xb1c,0x1090,
-0x880,0x8b0,0x8ee,0x928,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x951,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x96d,0x188,0x188,0x9a3,0x188,0x9e3,0xa1d,0x188,0x188,
+0x880,0x8b0,0x8ee,0x928,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x953,0x188,0x188,
+0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x96f,0x188,0x188,0x9a5,0x188,0x9e5,0xa1f,0x188,0x188,
0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0xa5d,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7c0,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7c8,0x2c7,0x2c7,0x2c7,0x7cb,0x2c7,0x2c7,0x2c7,0x2c7,
+0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0xa5f,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7cf,0x2c7,0x2c7,0x2c7,0x7d2,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x7d2,0x7d6,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7de,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x7d9,0x7dd,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7e5,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x6f5,0x697,0x7e0,0x7e8,0x2c7,0x2c7,0x7f0,0x7f7,0x2c7,0x584,0x2c7,0x2c7,0x7ff,0x2c7,0x2c7,0x802,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x808,0x2c7,0x463,0x80f,0x816,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x81e,0x2c7,0x2c7,0x822,0x82a,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x82f,0x837,0x2c7,0x2c7,0x697,
-0x2c7,0x2c7,0x2c7,0x83a,0x2c7,0x2c7,0x2c7,0x840,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x6fc,0x69e,0x7e7,0x7ef,0x2c7,0x2c7,0x7f7,0x7fe,0x2c7,0x58b,0x2c7,0x2c7,0x806,0x2c7,0x2c7,0x809,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x80f,0x2c7,0x463,0x816,0x81d,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x825,0x2c7,0x2c7,0x829,0x831,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x836,0x83e,0x2c7,0x2c7,0x69e,
+0x2c7,0x2c7,0x2c7,0x841,0x2c7,0x2c7,0x2c7,0x847,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x535,0x848,0x2c7,0x84a,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x69e,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x852,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x856,0x2c7,0x85c,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x697,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x844,0x2c7,0x84a,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x862,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x86a,
+0x872,0x87a,0x880,0x888,0x2c7,0x2c7,0x2c7,0x890,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x850,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x858,0x860,0x868,
-0x86e,0x876,0x2c7,0x2c7,0x2c7,0x87e,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x898,0x8a0,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x886,0x88e,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x8a4,0x2c7,0x2c7,0x2c7,0x8ab,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x892,0x2c7,0x2c7,0x2c7,0x899,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x8b3,
+0x8bb,0x8c3,0x8cb,0x8d3,0x8db,0x8e3,0x8eb,0x8f3,0x8fb,0x903,0x90b,0x913,0x91b,0x923,0x92b,0x933,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x8a1,0x8a9,0x8b1,
-0x8b9,0x8c1,0x8c9,0x8d1,0x8d9,0x8e1,0x8e9,0x8f1,0x8f9,0x901,0x909,0x911,0x919,0x921,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2a7,0x2a7,0x2a7,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,2,4,6,0,
-0,8,0x28,0x2e,0x38,0x44,0x66,0x68,0x76,0x84,0xa2,0xa4,0xae,0xba,0xc0,0xd2,
-0xf2,0,0xf6,0x106,0x114,0x122,0x148,0x14c,0x158,0x15c,0x16e,0,0,0,0,0,
-0,0x17a,0x19a,0x1a0,0x1aa,0x1b6,0x1d8,0x1da,0x1e8,0x1f8,0x214,0x218,0x222,0x22e,0x234,0x246,
-0x266,0,0x26a,0x27a,0x288,0x298,0x2be,0x2c2,0x2d0,0x2d4,0x2e8,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x2f4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x941,0x944,0x56f,0x947,0x57a,0x57f,0x2fa,0x584,
-0x94a,0x94d,0x589,0x950,0x953,0x956,0x959,0x594,0,0x95c,0x95f,0x962,0x599,0x5a4,0x5ad,0,
-0x2fe,0x965,0x968,0x96b,0x5b2,0x96e,0,0,0x971,0x974,0x5bd,0x977,0x5c8,0x5cd,0x300,0x5d2,
-0x97a,0x97d,0x5d7,0x980,0x983,0x986,0x989,0x5e2,0,0x98c,0x98f,0x992,0x5e7,0x5f2,0x5fb,0,
-0x304,0x995,0x998,0x99b,0x600,0x99e,0,0x9a1,0x9a4,0x9a7,0x60b,0x616,0x9aa,0x9ad,0x9b0,0x9b3,
-0x9b6,0x9b9,0x9bc,0x9bf,0x9c2,0x9c5,0x9c8,0x9cb,0,0,0x621,0x628,0x9ce,0x9d1,0x9d4,0x9d7,
-0x9da,0x9dd,0x9e0,0x9e3,0x9e6,0x9e9,0x9ec,0x9ef,0x9f2,0x9f5,0x9f8,0x9fb,0x9fe,0xa01,0,0,
-0xa04,0xa07,0xa0a,0xa0d,0xa10,0xa13,0xa16,0xa19,0xa1c,0,0,0,0xa1f,0xa22,0xa25,0xa28,
-0,0xa2b,0xa2e,0xa31,0xa34,0xa37,0xa3a,0,0,0,0,0xa3d,0xa40,0xa43,0xa46,0xa49,
-0xa4c,0,0,0,0x62f,0x636,0xa4f,0xa52,0xa55,0xa58,0,0,0xa5b,0xa5e,0xa61,0xa64,
-0xa67,0xa6a,0x63d,0x642,0xa6d,0xa70,0xa73,0xa76,0x647,0x64c,0xa79,0xa7c,0xa7f,0xa82,0,0,
-0x651,0x656,0x65b,0x660,0xa85,0xa88,0xa8b,0xa8e,0xa91,0xa94,0xa97,0xa9a,0xa9d,0xaa0,0xaa3,0xaa6,
-0xaa9,0xaac,0xaaf,0xab2,0xab5,0xab8,0xabb,0x306,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x665,0x672,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x67f,0x68c,0,0,0,0,0,0,0x308,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xabe,0xac1,0xac4,
-0xac7,0xaca,0xacd,0xad0,0xad3,0xad7,0xadc,0xae1,0xae6,0xaeb,0xaf0,0xaf5,0xafa,0,0xaff,0xb04,
-0xb09,0xb0e,0xb12,0xb15,0,0,0xb18,0xb1b,0xb1e,0xb21,0x699,0x69e,0xb25,0xb2a,0xb2e,0xb31,
-0xb34,0,0,0,0xb37,0xb3a,0,0,0xb3d,0xb40,0xb44,0xb49,0xb4d,0xb50,0xb53,0xb56,
-0xb59,0xb5c,0xb5f,0xb62,0xb65,0xb68,0xb6b,0xb6e,0xb71,0xb74,0xb77,0xb7a,0xb7d,0xb80,0xb83,0xb86,
-0xb89,0xb8c,0xb8f,0xb92,0xb95,0xb98,0xb9b,0xb9e,0xba1,0xba4,0xba7,0xbaa,0,0,0xbad,0xbb0,
-0,0,0,0,0,0,0x6a3,0x6a8,0x6ad,0x6b2,0xbb4,0xbb9,0xbbe,0xbc3,0x6b7,0x6bc,
-0xbc8,0xbcd,0xbd1,0xbd4,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x30a,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xfee6,0xfee6,0xfee6,0xfee6,0xfee6,0xffe6,0xfee6,0xfee6,0xfee6,0xfee6,0xfee6,0xfee6,
-0xfee6,0xffe6,0xffe6,0xfee6,0xffe6,0xfee6,0xffe6,0xfee6,0xfee6,0xffe8,0xffdc,0xffdc,0xffdc,0xffdc,0xffe8,0xfed8,
-0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffca,0xffca,0xfedc,0xfedc,0xfedc,0xfedc,0xfeca,0xfeca,0xffdc,0xffdc,0xffdc,
-0xffdc,0xfedc,0xfedc,0xffdc,0xfedc,0xfedc,0xffdc,0xffdc,0xff01,0xff01,0xff01,0xff01,0xfe01,0xffdc,0xffdc,0xffdc,
-0xffdc,0xffe6,0xffe6,0xffe6,0x14e8,0x14eb,0xfee6,0x14ee,0x14f1,0xfef0,0xffe6,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,
-0xffe6,0xffdc,0xffdc,0,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe8,0xffdc,0xffdc,0xffe6,
-0xffe9,0xffea,0xffea,0xffe9,0xffea,0xffea,0xffe9,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0x14f4,0,0,0,0,0,0,0,
-0,0,0x14f6,0,0,0,0,0,0,0xbd7,0xbda,0x14f8,0xbdd,0xbe0,0xbe3,0,
-0xbe6,0,0xbe9,0xbec,0xbf0,0x30c,0,0,0,0x31a,0,0x322,0,0x32c,0,0,
-0,0,0,0x33a,0,0x342,0,0,0,0x344,0,0,0,0x350,0xbf4,0xbf7,
-0x6c1,0xbfa,0x6c6,0xbfd,0xc01,0x35a,0,0,0,0x36a,0,0x372,0,0x37e,0,0,
-0,0,0,0x38e,0,0x396,0,0,0,0x39a,0,0,0,0x3aa,0x6cb,0x6d4,
-0xc05,0xc08,0x6dd,0,0,0,0x3b6,0xc0b,0xc0e,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xc11,0xc14,0,0xc17,0,0,0x3ba,0xc1a,0,0,0,0,
-0xc1d,0xc20,0xc23,0,0x3bc,0,0,0x3c0,0,0x3c2,0x3c8,0x3cc,0x3ce,0xc26,0x3d6,0,
-0,0,0x3d8,0,0,0,0,0x3da,0,0,0,0x3e2,0,0,0,0x3e4,
-0,0x3e6,0,0,0x3e8,0,0,0x3ec,0,0x3ee,0x3f4,0x3f8,0x3fa,0xc29,0x402,0,
-0,0,0x404,0,0,0,0,0x406,0,0,0,0x40e,0,0,0,0x410,
-0,0x412,0,0,0xc2c,0xc2f,0,0xc32,0,0,0x414,0xc35,0,0,0,0,
-0xc38,0xc3b,0xc3e,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x416,0x418,0xc41,0xc44,0,0,0,0,
-0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xc47,0xc4a,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xc4d,0xc50,0xc53,0xc56,0,0,0xc59,0xc5c,0x41a,0x41c,0xc5f,0xc62,
-0xc65,0xc68,0xc6b,0xc6e,0,0,0xc71,0xc74,0xc77,0xc7a,0xc7d,0xc80,0x41e,0x420,0xc83,0xc86,
-0xc89,0xc8c,0xc8f,0xc92,0xc95,0xc98,0xc9b,0xc9e,0xca1,0xca4,0,0,0xca7,0xcaa,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffde,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffde,0xffe4,0xffe6,
-0xff0a,0xff0b,0xff0c,0xff0d,0xff0e,0xff0f,0xff10,0xff11,0xff12,0xff13,0xff13,0xff14,0xff15,0xff16,0,0xff17,
-0,0xff18,0xff19,0,0xffe6,0xffdc,0,0xff12,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xff1e,0xff1f,0xff20,0,0,0,0,0,
-0,0,0xcad,0xcb0,0xcb3,0xcb6,0xcb9,0x422,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x428,0,0x42a,0xff1b,0xff1c,0xff1d,0xff1e,0xff1f,0xff20,0xff21,0xff22,0xfee6,0xfee6,0xfedc,0xffdc,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xff23,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xcbc,0x42c,0xcbf,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x42e,0xcc2,0,0x430,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0,0,0xffe6,
-0xffe6,0,0xffdc,0xffe6,0xffe6,0xffdc,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xff24,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,
-0xffdc,0xffdc,0xffe6,0xffdc,0xffdc,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffdc,0xffe6,0xffdc,0xffe6,
-0xffdc,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffdc,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xffdc,0xffdc,0xffdc,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0xffdc,
-0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xff1b,0xff1c,0xff1d,0xffe6,
-0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,
-0,0,0,0,0x432,0xcc5,0,0,0,0,0,0,0x434,0xcc8,0,0x436,
-0xccb,0,0,0,0,0,0,0,0xfe07,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0xffe6,0xffdc,0xffe6,
-0xffe6,0,0,0,0x14fa,0x14fd,0x1500,0x1503,0x1506,0x1509,0x150c,0x150f,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xff07,0,0xfe00,0,0,0,0,0,
-0,0,0,0x438,0,0,0,0xcce,0xcd1,0xff09,0,0,0,0,0,0,
-0,0,0,0xfe00,0,0,0,0,0x1512,0x1515,0,0x1518,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x151b,
-0,0,0x151e,0,0,0,0,0,0xff07,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0,
-0,0,0,0,0,0x1521,0x1524,0x1527,0,0,0x152a,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xff07,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x43c,
-0xcd4,0,0,0xcd7,0xcda,0xff09,0,0,0,0,0,0,0,0,0xfe00,0xfe00,
-0,0,0,0,0x152d,0x1530,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x442,0,0xcdd,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xfe00,0,
-0,0,0,0,0,0,0x444,0x448,0,0,0xce0,0xce3,0xce6,0xff09,0,0,
-0,0,0,0,0,0,0,0xfe00,0,0,0,0,0,0,0,0,
-0,0,0x44a,0,0xce9,0,0,0,0,0xff09,0,0,0,0,0,0,
-0,0xff54,0xfe5b,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xff07,0,0,0x44c,0xcec,0,0xfe00,0,0,0,0x44e,0xcef,0xcf2,0,0x6e2,0xcf6,
-0,0xff09,0,0,0,0,0,0,0,0xfe00,0xfe00,0,0,0,0,0,
-0,0,0,0,0,0,0x454,0x458,0,0,0xcfa,0xcfd,0xd00,0xff09,0,0,
-0,0,0,0,0,0,0,0xfe00,0,0,0,0,0,0,0,0,
-0,0,0xfe09,0,0,0,0,0xfe00,0,0,0,0,0,0,0,0,
-0,0x45a,0xd03,0,0x6e7,0xd07,0xd0b,0xfe00,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xff67,0xff67,0xff09,0,0,0,0,0,0,0,0,0,0xff6b,0xff6b,0xff6b,0xff6b,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xff76,0xff76,0,0,0,0,0,0,
-0,0,0,0,0xff7a,0xff7a,0xff7a,0xff7a,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xffdc,0xffdc,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xffdc,0,0xffdc,0,0xffd8,0,0,
-0,0,0,0,0,0,0,0x1533,0,0,0,0,0,0,0,0,
-0,0x1536,0,0,0,0,0x1539,0,0,0,0,0x153c,0,0,0,0,
-0x153f,0,0,0,0,0,0,0,0,0,0,0,0,0x1542,0,0,
-0,0,0,0,0,0xff81,0xff82,0x1546,0xff84,0x154a,0x154d,0,0x1550,0,0xff82,0xff82,
-0xff82,0xff82,0,0,0xff82,0x1554,0xffe6,0xffe6,0xff09,0,0xffe6,0xffe6,0,0,0,0,
-0,0,0,0,0,0,0,0x1557,0,0,0,0,0,0,0,0,
-0,0x155a,0,0,0,0,0x155d,0,0,0,0,0x1560,0,0,0,0,
-0x1563,0,0,0,0,0,0,0,0,0,0,0,0,0x1566,0,0,
-0,0,0,0,0,0,0xffdc,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x460,0xd0e,0,0,0,0,0,0,0,0xfe00,0,0,0,0,0,
-0,0,0,0xff07,0,0xff09,0xff09,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xffdc,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0xff09,0,0,0,0,0,0,0,0,0,0,0xffe6,0,0,
-0,0,0,0,0,0,0,0,0,0xffe4,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xffde,0xffe6,0xffdc,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,
-0xffdc,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0xffdc,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,
-0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0xffdc,0,0,0,0,0,0,0,0x462,0xd11,0x464,
-0xd14,0x466,0xd17,0x468,0xd1a,0x46a,0xd1d,0,0,0x46c,0xd20,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xff07,0xfe00,0,0,0,0,0x46e,0xd23,0x470,0xd26,0x472,0x474,0xd29,0xd2c,0x476,0xd2f,
-0xff09,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,
-0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xff09,0xff09,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xff07,0,
-0,0,0,0,0,0,0,0,0,0,0xff09,0xff09,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xff07,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xffe6,0xffe6,0xffe6,0,0xff01,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,
-0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0,0xff01,0xff01,0xff01,0xff01,0xff01,0xff01,0xff01,0,0,0,
-0,0xffdc,0,0,0,0,0,0,0xffe6,0,0,0,0xffe6,0xffe6,0,0,
-0,0,0,0,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,
-0xffe6,0xffea,0xffd6,0xffdc,0xffca,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,
-0,0,0,0xffe6,0xffe9,0xffdc,0xffe6,0xffdc,0xd32,0xd35,0xd38,0xd3b,0xd3e,0xd41,0xd44,0xd47,
-0xd4b,0xd50,0xd54,0xd57,0xd5a,0xd5d,0xd60,0xd63,0xd66,0xd69,0xd6c,0xd6f,0xd73,0xd78,0xd7d,0xd82,
-0xd86,0xd89,0xd8c,0xd8f,0xd93,0xd98,0xd9c,0xd9f,0xda2,0xda5,0xda8,0xdab,0xdae,0xdb1,0xdb4,0xdb7,
-0xdba,0xdbd,0xdc0,0xdc3,0xdc6,0xdc9,0xdcd,0xdd2,0xdd6,0xdd9,0xddc,0xddf,0xde2,0xde5,0x6ec,0x6f1,
-0xde9,0xdee,0xdf2,0xdf5,0xdf8,0xdfb,0xdfe,0xe01,0xe04,0xe07,0xe0a,0xe0d,0xe10,0xe13,0xe16,0xe19,
-0xe1c,0xe1f,0xe22,0xe25,0xe29,0xe2e,0xe33,0xe38,0xe3d,0xe42,0xe47,0xe4c,0xe50,0xe53,0xe56,0xe59,
-0xe5c,0xe5f,0x6f6,0x6fb,0xe63,0xe68,0xe6c,0xe6f,0xe72,0xe75,0x700,0x705,0xe79,0xe7e,0xe83,0xe88,
-0xe8d,0xe92,0xe96,0xe99,0xe9c,0xe9f,0xea2,0xea5,0xea8,0xeab,0xeae,0xeb1,0xeb4,0xeb7,0xeba,0xebd,
-0xec1,0xec6,0xecb,0xed0,0xed4,0xed7,0xeda,0xedd,0xee0,0xee3,0xee6,0xee9,0xeec,0xeef,0xef2,0xef5,
-0xef8,0xefb,0xefe,0xf01,0xf04,0xf07,0xf0a,0xf0d,0xf10,0xf13,0xf16,0xf19,0xf1c,0xf1f,0xf22,0xf25,
-0xf28,0xf2b,0,0xf2e,0,0,0,0,0x70a,0x711,0xf31,0xf34,0xf38,0xf3d,0xf42,0xf47,
-0xf4c,0xf51,0xf56,0xf5b,0xf60,0xf65,0xf6a,0xf6f,0xf74,0xf79,0xf7e,0xf83,0xf88,0xf8d,0xf92,0xf97,
-0x718,0x71d,0xf9b,0xf9e,0xfa1,0xfa4,0xfa8,0xfad,0xfb2,0xfb7,0xfbc,0xfc1,0xfc6,0xfcb,0xfd0,0xfd5,
-0xfd9,0xfdc,0xfdf,0xfe2,0x722,0x727,0xfe5,0xfe8,0xfec,0xff1,0xff6,0xffb,0x1000,0x1005,0x100a,0x100f,
-0x1014,0x1019,0x101e,0x1023,0x1028,0x102d,0x1032,0x1037,0x103c,0x1041,0x1046,0x104b,0x104f,0x1052,0x1055,0x1058,
-0x105c,0x1061,0x1066,0x106b,0x1070,0x1075,0x107a,0x107f,0x1084,0x1089,0x108d,0x1090,0x1093,0x1096,0x1099,0x109c,
-0x109f,0x10a2,0,0,0,0,0,0,0x72c,0x737,0x743,0x74a,0x751,0x758,0x75f,0x766,
-0x76c,0x777,0x783,0x78a,0x791,0x798,0x79f,0x7a6,0x7ac,0x7b3,0x10a6,0x10ab,0x10b0,0x10b5,0,0,
-0x7ba,0x7c1,0x10ba,0x10bf,0x10c4,0x10c9,0,0,0x7c8,0x7d3,0x7df,0x7e6,0x7ed,0x7f4,0x7fb,0x802,
-0x808,0x813,0x81f,0x826,0x82d,0x834,0x83b,0x842,0x848,0x851,0x10ce,0x10d3,0x10d8,0x10dd,0x10e2,0x10e7,
-0x85a,0x863,0x10ec,0x10f1,0x10f6,0x10fb,0x1100,0x1105,0x86c,0x873,0x110a,0x110f,0x1114,0x1119,0,0,
-0x87a,0x881,0x111e,0x1123,0x1128,0x112d,0,0,0x888,0x891,0x1132,0x1137,0x113c,0x1141,0x1146,0x114b,
-0,0x89a,0,0x1150,0,0x1155,0,0x115a,0x8a3,0x8ae,0x8ba,0x8c1,0x8c8,0x8cf,0x8d6,0x8dd,
-0x8e3,0x8ee,0x8fa,0x901,0x908,0x90f,0x916,0x91d,0x923,0x156a,0x115e,0x156e,0x928,0x1572,0x1161,0x1576,
-0x1164,0x157a,0x1167,0x157e,0x92d,0x1582,0,0,0x116b,0x1170,0x1177,0x117f,0x1187,0x118f,0x1197,0x119f,
-0x11a5,0x11aa,0x11b1,0x11b9,0x11c1,0x11c9,0x11d1,0x11d9,0x11df,0x11e4,0x11eb,0x11f3,0x11fb,0x1203,0x120b,0x1213,
-0x1219,0x121e,0x1225,0x122d,0x1235,0x123d,0x1245,0x124d,0x1253,0x1258,0x125f,0x1267,0x126f,0x1277,0x127f,0x1287,
-0x128d,0x1292,0x1299,0x12a1,0x12a9,0x12b1,0x12b9,0x12c1,0x12c6,0x12c9,0x12cd,0x12d1,0x12d5,0,0x932,0x12da,
-0x12de,0x12e1,0x12e4,0x1586,0x12e7,0,0x1589,0x478,0,0x12ea,0x12ee,0x12f2,0x12f6,0,0x937,0x12fb,
-0x12ff,0x158c,0x1302,0x1590,0x1305,0x1308,0x130b,0x130e,0x1311,0x1314,0x1318,0x1595,0,0,0x131c,0x1320,
-0x1324,0x1327,0x132a,0x159a,0,0x132d,0x1330,0x1333,0x1336,0x1339,0x133d,0x159f,0x1341,0x1344,0x1347,0x134b,
-0x134f,0x1352,0x1355,0x15a4,0x1358,0x135b,0x15a8,0x15ab,0,0,0x135f,0x1363,0x1367,0,0x93c,0x136c,
-0x1370,0x15ae,0x1373,0x15b2,0x1376,0x15b5,0x47e,0,0xfdc1,0xfdc1,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xff01,0xff01,0xffe6,0xffe6,0xffe6,0xffe6,
-0xff01,0xff01,0xff01,0xffe6,0xffe6,0,0,0,0,0xffe6,0,0,0,0xff01,0xff01,0xffe6,
-0xffdc,0xffe6,0xff01,0xff01,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x15b7,0,0,0,0x15b9,0x15bc,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x484,0,0x486,0,0x488,0,0,0,0,0,0x1379,0x137c,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x137f,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x1382,0x1385,0x1388,0x48a,0,0x48c,0,0x48e,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x490,0x138b,0,0,0,0x492,0x138e,0,0x494,
-0x1391,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x496,0x1394,0x498,0x1397,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x49a,0,0,0,0,0x139a,0,0x49c,0x139d,0x49e,0,0x13a0,0x4a0,0x13a3,0,0,
-0,0x4a2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x13a6,0x4a4,0x13a9,0,0x4a6,0x4a8,0,0,0,0,0,0,
-0,0x13ac,0x13af,0x13b2,0x13b5,0x13b8,0x4aa,0x4ac,0x13bb,0x13be,0x4ae,0x4b0,0x13c1,0x13c4,0x4b2,0x4b4,
-0x4b6,0x4b8,0,0,0x13c7,0x13ca,0x4ba,0x4bc,0x13cd,0x13d0,0x4be,0x4c0,0x13d3,0x13d6,0,0,
-0,0,0,0,0,0x4c2,0x4c4,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x4c6,0,0,0,0,0,0x4c8,0x4ca,0,0x4cc,
-0x13d9,0x13dc,0x13df,0x13e2,0,0,0x4ce,0x4d0,0x4d2,0x4d4,0,0,0,0,0,0,
-0,0,0,0,0x13e5,0x13e8,0x13eb,0x13ee,0,0,0,0,0,0,0x13f1,0x13f4,
-0x13f7,0x13fa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x15bf,0x15c1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x15c3,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xff09,0xffe6,0xffe6,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,
-0,0,0,0,0,0,0xffda,0xffe4,0xffe8,0xffde,0xffe0,0xffe0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x4d6,0,
-0,0,0,0x4d8,0x13fd,0x4da,0x1400,0x4dc,0x1403,0x4de,0x1406,0x4e0,0x1409,0x4e2,0x140c,0x4e4,
-0x140f,0x4e6,0x1412,0x4e8,0x1415,0x4ea,0x1418,0x4ec,0x141b,0x4ee,0x141e,0,0x4f0,0x1421,0x4f2,0x1424,
-0x4f4,0x1427,0,0,0,0,0,0x4f6,0x142a,0x142d,0x4fa,0x1430,0x1433,0x4fe,0x1436,0x1439,
-0x502,0x143c,0x143f,0x506,0x1442,0x1445,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x1448,0,0,0,
-0,0xfe08,0xfe08,0,0,0x50a,0x144b,0,0,0,0,0,0,0,0x50c,0,
-0,0,0,0x50e,0x144e,0x510,0x1451,0x512,0x1454,0x514,0x1457,0x516,0x145a,0x518,0x145d,0x51a,
-0x1460,0x51c,0x1463,0x51e,0x1466,0x520,0x1469,0x522,0x146c,0x524,0x146f,0,0x526,0x1472,0x528,0x1475,
-0x52a,0x1478,0,0,0,0,0,0x52c,0x147b,0x147e,0x530,0x1481,0x1484,0x534,0x1487,0x148a,
-0x538,0x148d,0x1490,0x53c,0x1493,0x1496,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x540,0x542,0x544,0x546,0,0x1499,0,0,0x149c,
-0x149f,0x14a2,0x14a5,0,0,0x548,0x14a8,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xffe6,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xffe6,0xffe6,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xffe6,0xffe6,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xff09,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,
-0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xffdc,0xffdc,0xffdc,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,
-0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xffe6,0,0xffe6,0xffe6,0xffdc,0,0,0xffe6,
-0xffe6,0,0,0,0,0,0xffe6,0xffe6,0,0xffe6,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,
-0,0,0,0,0x15c6,0x15c8,0x15ca,0x15cc,0x15ce,0x15d0,0x15d2,0x15d4,0x15d4,0x15d6,0x15d8,0x15da,
-0x15dc,0x15de,0x15e0,0x15e2,0x15e4,0x15e6,0x15e8,0x15ea,0x15ec,0x15ee,0x15f0,0x15f2,0x15f4,0x15f6,0x15f8,0x15fa,
-0x15fc,0x15fe,0x1600,0x1602,0x1604,0x1606,0x1608,0x160a,0x160c,0x160e,0x1610,0x1612,0x1614,0x1616,0x1618,0x161a,
-0x161c,0x161e,0x1620,0x1622,0x1624,0x1626,0x1628,0x162a,0x162c,0x162e,0x1630,0x1632,0x1634,0x1636,0x1638,0x163a,
-0x163c,0x163e,0x1640,0x1642,0x1644,0x1646,0x1648,0x164a,0x164c,0x164e,0x1650,0x1652,0x1654,0x1656,0x1658,0x165a,
-0x165c,0x165e,0x1660,0x1662,0x1664,0x1666,0x1668,0x166a,0x166c,0x166e,0x1670,0x1672,0x1674,0x1676,0x1678,0x167a,
-0x15ec,0x167c,0x167e,0x1680,0x1682,0x1684,0x1686,0x1688,0x168a,0x168c,0x168e,0x1690,0x1692,0x1694,0x1696,0x1698,
-0x169a,0x169c,0x169e,0x16a0,0x16a2,0x16a4,0x16a6,0x16a8,0x16aa,0x16ac,0x16ae,0x16b0,0x16b2,0x16b4,0x16b6,0x16b8,
-0x16ba,0x16bc,0x16be,0x16c0,0x16c2,0x16c4,0x16c6,0x16c8,0x16ca,0x16cc,0x16ce,0x16d0,0x16d2,0x16d4,0x16d6,0x16d8,
-0x16da,0x16dc,0x16de,0x16e0,0x16e2,0x16e4,0x16e6,0x16e8,0x16ea,0x16ec,0x16ee,0x16f0,0x16f2,0x16f4,0x16f6,0x16f8,
-0x16fa,0x16fc,0x16fe,0x1700,0x1702,0x16a0,0x1704,0x1706,0x1708,0x170a,0x170c,0x170e,0x1710,0x1712,0x1680,0x1714,
-0x1716,0x1718,0x171a,0x171c,0x171e,0x1720,0x1722,0x1724,0x1726,0x1728,0x172a,0x172c,0x172e,0x1730,0x1732,0x1734,
-0x1736,0x1738,0x173a,0x15ec,0x173c,0x173e,0x1740,0x1742,0x1744,0x1746,0x1748,0x174a,0x174c,0x174e,0x1750,0x1752,
-0x1754,0x1756,0x1758,0x175a,0x175c,0x175e,0x1760,0x1762,0x1764,0x1766,0x1768,0x176a,0x176c,0x176e,0x1770,0x1684,
-0x1772,0x1774,0x1776,0x1778,0x177a,0x177c,0x177e,0x1780,0x1782,0x1784,0x1786,0x1788,0x178a,0x178c,0x178e,0x1790,
-0x1792,0x1794,0x1796,0x1798,0x179a,0x179c,0x179e,0x17a0,0x17a2,0x17a4,0x17a6,0x17a8,0x17aa,0x17ac,0x17ae,0x17b0,
-0x17b2,0x17b4,0x17b6,0x17b8,0x17ba,0x17bc,0x17be,0x17c0,0x17c2,0x17c4,0x17c6,0x17c8,0x17ca,0x17cc,0x17ce,0x17d0,
-0x17d2,0x17d4,0,0,0x17d6,0,0x17d8,0,0,0x17da,0x17dc,0x17de,0x17e0,0x17e2,0x17e4,0x17e6,
-0x17e8,0x17ea,0x17ec,0,0x17ee,0,0x17f0,0,0,0x17f2,0x17f4,0,0,0,0x17f6,0x17f8,
-0x17fa,0x17fc,0x17fe,0x1800,0x1802,0x1804,0x1806,0x1808,0x180a,0x180c,0x180e,0x1810,0x1812,0x1814,0x1816,0x1818,
-0x181a,0x181c,0x181e,0x1820,0x1822,0x1824,0x1826,0x1828,0x182a,0x182c,0x182e,0x1830,0x1832,0x1834,0x1836,0x1838,
-0x183a,0x183c,0x183e,0x1840,0x1842,0x1844,0x1846,0x1848,0x184a,0x184c,0x184e,0x16ee,0x1850,0x1852,0x1854,0x1856,
-0x1858,0x185a,0x185a,0x185c,0x185e,0x1860,0x1862,0x1864,0x1866,0x1868,0x186a,0x17f2,0x186c,0x186e,0x1870,0x1872,
-0x1874,0x1877,0,0,0x1879,0x187b,0x187d,0x187f,0x1881,0x1883,0x1885,0x1887,0x180e,0x1889,0x188b,0x188d,
-0x17d6,0x188f,0x1891,0x1893,0x1895,0x1897,0x1899,0x189b,0x189d,0x189f,0x18a1,0x18a3,0x18a5,0x1820,0x18a7,0x1822,
-0x18a9,0x18ab,0x18ad,0x18af,0x18b1,0x17d8,0x1616,0x18b3,0x18b5,0x18b7,0x16a2,0x1750,0x18b9,0x18bb,0x1830,0x18bd,
-0x1832,0x18bf,0x18c1,0x18c3,0x17dc,0x18c5,0x18c7,0x18c9,0x18cb,0x18cd,0x17de,0x18cf,0x18d1,0x18d3,0x18d5,0x18d7,
-0x18d9,0x184e,0x18db,0x18dd,0x16ee,0x18df,0x1856,0x18e1,0x18e3,0x18e5,0x18e7,0x18e9,0x1860,0x18eb,0x17f0,0x18ed,
-0x1862,0x167c,0x18ef,0x1864,0x18f1,0x1868,0x18f3,0x18f5,0x18f7,0x18f9,0x18fb,0x186c,0x17e8,0x18fd,0x186e,0x18ff,
-0x1870,0x1901,0x15d4,0x1903,0x1906,0x1909,0x190c,0x190e,0x1910,0x1912,0x1915,0x1918,0x191b,0x191d,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0x191f,0xff1a,0x1922,
-0,0,0,0,0,0,0,0,0,0,0x1925,0x1928,0x192c,0x1931,0x1935,0x1938,
-0x193b,0x193e,0x1941,0x1944,0x1947,0x194a,0x194d,0,0x1950,0x1953,0x1956,0x1959,0x195c,0,0x195f,0,
-0x1962,0x1965,0,0x1968,0x196b,0,0x196e,0x1971,0x1974,0x1977,0x197a,0x197d,0x1980,0x1983,0x1986,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xffdc,0,0,
-0xffdc,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xffdc,0,0xffe6,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xffe6,0xff01,0xffdc,0,0,0,0,0xff09,0,0,0,0,0,0xffe6,0xffdc,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0x54a,0x14ab,0x54d,0x14b0,0,0,0,
-0,0,0,0,0,0x550,0,0,0,0,0,0x14b5,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xff09,0xfe07,0,0,0,0,0,
-0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xfe00,0,0,0,0,0,0,0x14ba,0x14bf,0,0x553,0x556,0xff09,
-0xff09,0,0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,
-0,0,0,0,0,0,0xff07,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xff09,0xff07,0,
-0,0,0,0,0,0,0,0,0,0xff07,0xff09,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x559,0,0,0,0x14c4,0x14c9,0xff09,0,0,0,0,0,0,
-0,0,0,0xfe00,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0xff07,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xfe00,0,0,0,0,0,0,0,
-0,0x55f,0xfe00,0x14ce,0x14d3,0xfe00,0x14d8,0,0,0,0xff09,0xff07,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xfe00,0,0,0,0,
-0,0,0,0,0x568,0x56b,0x14dd,0x14e2,0,0,0,0xff09,0xff07,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xff09,0xff07,
-0,0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xff01,0xff01,0xff01,0xff01,0xff01,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xff01,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x1989,0x198e,
-0x1998,0x19a4,0x19b0,0x19bc,0x19c8,0xffd8,0xffd8,0xff01,0xff01,0xff01,0,0,0,0xffe2,0xffd8,0xffd8,
-0xffd8,0xffd8,0xffd8,0,0,0,0,0,0,0,0,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,
-0xffdc,0xffdc,0xffdc,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x19cf,0x19d4,0x19de,0x19ea,0x19f6,0x1a02,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,
-0xffe6,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0,
-0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xff07,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1a09,0x1a0b,0x1a0d,0x1a0f,0x1a12,0x1802,0x1a14,0x1a16,0x1a18,0x1a1a,0x1804,0x1a1c,
-0x1a1e,0x1a20,0x1806,0x1a23,0x1a25,0x1a27,0x1a29,0x1a2c,0x1a2e,0x1a30,0x1a32,0x1a35,0x1a37,0x1a39,0x1a3b,0x187b,
-0x1a3d,0x1a40,0x1a42,0x1a44,0x1a46,0x1a48,0x1a4a,0x1a4c,0x1a4e,0x1885,0x1808,0x180a,0x1887,0x1a50,0x1a52,0x1688,
-0x1a54,0x180c,0x1a56,0x1a58,0x1a5a,0x1a5c,0x1a5c,0x1a5c,0x1a5e,0x1a61,0x1a63,0x1a65,0x1a67,0x1a6a,0x1a6c,0x1a6e,
-0x1a70,0x1a72,0x1a74,0x1a76,0x1a78,0x1a7a,0x1a7c,0x1a7e,0x1a80,0x1a82,0x1a82,0x188b,0x1a84,0x1a86,0x1a88,0x1a8a,
-0x1810,0x1a8c,0x1a8e,0x1a90,0x17ba,0x1a92,0x1a94,0x1a96,0x1a98,0x1a9a,0x1a9c,0x1a9e,0x1aa0,0x1aa2,0x1aa5,0x1aa7,
-0x1aa9,0x1aab,0x1aad,0x1aaf,0x1ab1,0x1ab4,0x1ab7,0x1ab9,0x1abb,0x1abd,0x1abf,0x1ac1,0x1ac3,0x1ac5,0x1ac7,0x1ac7,
-0x1ac9,0x1acc,0x1ace,0x1680,0x1ad0,0x1ad2,0x1ad5,0x1ad7,0x1ad9,0x1adb,0x1add,0x1adf,0x181a,0x1ae1,0x1ae3,0x1ae5,
-0x1ae8,0x1aea,0x1aed,0x1aef,0x1af1,0x1af3,0x1af5,0x1af7,0x1af9,0x1afb,0x1afd,0x1aff,0x1b01,0x1b03,0x1b06,0x1b08,
-0x1b0a,0x1b0c,0x1614,0x1b0e,0x1b11,0x1b13,0x1b13,0x1b16,0x1b18,0x1b18,0x1b1a,0x1b1c,0x1b1f,0x1b22,0x1b24,0x1b26,
-0x1b28,0x1b2a,0x1b2c,0x1b2e,0x1b30,0x1b32,0x1b34,0x181c,0x1b36,0x1b39,0x1b3b,0x1b3d,0x18a3,0x1b3d,0x1b3f,0x1820,
-0x1b41,0x1b43,0x1b45,0x1b47,0x1822,0x15de,0x1b49,0x1b4b,0x1b4d,0x1b4f,0x1b51,0x1b53,0x1b55,0x1b58,0x1b5a,0x1b5c,
-0x1b5e,0x1b60,0x1b62,0x1b65,0x1b67,0x1b69,0x1b6b,0x1b6d,0x1b6f,0x1b71,0x1b73,0x1b75,0x1824,0x1b77,0x1b79,0x1b7c,
-0x1b7e,0x1b80,0x1b82,0x1828,0x1b84,0x1b86,0x1b88,0x1b8a,0x1b8c,0x1b8e,0x1b90,0x1b92,0x1616,0x18b3,0x1b94,0x1b96,
-0x1b98,0x1b9a,0x1b9d,0x1b9f,0x1ba1,0x1ba3,0x182a,0x1ba5,0x1ba8,0x1baa,0x1bac,0x190c,0x1bae,0x1bb0,0x1bb2,0x1bb4,
-0x1bb6,0x1bb9,0x1bbb,0x1bbd,0x1bbf,0x1bc2,0x1bc4,0x1bc6,0x1bc8,0x16a2,0x1bca,0x1bcc,0x1bcf,0x1bd2,0x1bd5,0x1bd7,
-0x1bda,0x1bdc,0x1bde,0x1be0,0x1be2,0x182c,0x1750,0x1be4,0x1be6,0x1be8,0x1bea,0x1bed,0x1bef,0x1bf1,0x1bf3,0x18bb,
-0x1bf5,0x1bf7,0x1bfa,0x1bfc,0x1bfe,0x1c01,0x1c04,0x1c06,0x18bd,0x1c08,0x1c0a,0x1c0c,0x1c0e,0x1c10,0x1c12,0x1c14,
-0x1c17,0x1c19,0x1c1c,0x1c1e,0x1c21,0x18c1,0x1c23,0x1c25,0x1c28,0x1c2a,0x1c2c,0x1c2f,0x1c32,0x1c34,0x1c36,0x1c38,
-0x1c3a,0x1c3a,0x1c3c,0x1c3e,0x18c5,0x1c40,0x1c42,0x1c44,0x1c46,0x1c48,0x1c4b,0x1c4d,0x1686,0x1c50,0x1c53,0x1c55,
-0x1c58,0x1c5b,0x1c5e,0x1c60,0x18d1,0x1c62,0x1c65,0x1c68,0x1c6b,0x1c6e,0x1c70,0x1c70,0x18d3,0x1910,0x1c72,0x1c74,
-0x1c76,0x1c78,0x1c7b,0x163a,0x18d7,0x1c7d,0x1c7f,0x1842,0x1c82,0x1c85,0x17e6,0x1c88,0x1c8a,0x184a,0x1c8c,0x1c8e,
-0x1c90,0x1c93,0x1c93,0x1c96,0x1c98,0x1c9a,0x1c9d,0x1c9f,0x1ca1,0x1ca3,0x1ca6,0x1ca8,0x1caa,0x1cac,0x1cae,0x1cb0,
-0x1cb3,0x1cb5,0x1cb7,0x1cb9,0x1cbb,0x1cbd,0x1cbf,0x1cc2,0x1cc5,0x1cc7,0x1cca,0x1ccc,0x1ccf,0x1cd1,0x1856,0x1cd3,
-0x1cd6,0x1cd9,0x1cdb,0x1cde,0x1ce0,0x1ce3,0x1ce5,0x1ce7,0x1ce9,0x1ceb,0x1ced,0x1cef,0x1cf2,0x1cf5,0x1cf8,0x1b16,
-0x1cfb,0x1cfd,0x1cff,0x1d01,0x1d03,0x1d05,0x1d07,0x1d09,0x1d0b,0x1d0d,0x1d0f,0x1d11,0x16aa,0x1d14,0x1d16,0x1d18,
-0x1d1a,0x1d1c,0x1d1e,0x185c,0x1d20,0x1d22,0x1d24,0x1d26,0x1d28,0x1d2b,0x1d2e,0x1d31,0x1d33,0x1d35,0x1d37,0x1d39,
-0x1d3c,0x1d3e,0x1d41,0x1d43,0x1d45,0x1d48,0x1d4b,0x1d4d,0x1630,0x1d4f,0x1d51,0x1d53,0x1d55,0x1d57,0x1d59,0x18e5,
-0x1d5b,0x1d5d,0x1d5f,0x1d61,0x1d63,0x1d65,0x1d67,0x1d69,0x1d6b,0x1d6d,0x1d70,0x1d72,0x1d74,0x1d76,0x1d78,0x1d7a,
-0x1d7d,0x1d80,0x1d82,0x1d84,0x18ef,0x18f1,0x1d86,0x1d88,0x1d8b,0x1d8d,0x1d8f,0x1d91,0x1d93,0x1d96,0x1d99,0x1d9b,
-0x1d9d,0x1d9f,0x1da2,0x18f3,0x1da4,0x1da7,0x1daa,0x1dac,0x1dae,0x1db0,0x1db3,0x1db5,0x1db7,0x1db9,0x1dbb,0x1dbd,
-0x1dbf,0x1dc1,0x1dc4,0x1dc6,0x1dc8,0x1dca,0x1dcd,0x1dcf,0x1dd1,0x1dd3,0x1dd5,0x1dd8,0x1ddb,0x1ddd,0x1ddf,0x1de1,
-0x1de4,0x1de6,0x18ff,0x18ff,0x1de9,0x1deb,0x1dee,0x1df0,0x1df2,0x1df4,0x1df6,0x1df8,0x1dfa,0x1dfc,0x1901,0x1dff,
-0x1e01,0x1e03,0x1e05,0x1e07,0x1e09,0x1e0c,0x1e0e,0x1e11,0x1e14,0x1e17,0x1e19,0x1e1b,0x1e1d,0x1e1f,0x1e21,0x1e23,
-0x1e25,0x1e27,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,0,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,
-0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0,0,0,0,0,0,
-0,0,0,0,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,
-0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x56e,0x56e,0x56e,0x56e,
-0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,
-0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x1e29,0,0x1e29,0,0x1e29,0x1e29,0,0x1e29,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0x1e29,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x1e29,0,0,0,0,0x1e29,0,0,0,0x1e29,0,0x1e29,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x1e27,0,
-0,0,0,0
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2a7,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,4,8,0xc,1,
+1,0x10,0x50,0x5c,0x70,0x88,0xcc,0xd0,0xec,0x108,0x144,0x148,0x15c,0x174,0x180,0x1a4,
+0x1e4,1,0x1ec,0x20c,0x228,0x244,0x290,0x298,0x2b0,0x2b8,0x2dc,1,1,1,1,1,
+1,0x2f4,0x334,0x340,0x354,0x36c,0x3b0,0x3b4,0x3d0,0x3f0,0x428,0x430,0x444,0x45c,0x468,0x48c,
+0x4cc,1,0x4d4,0x4f4,0x510,0x530,0x57c,0x584,0x5a0,0x5a8,0x5d0,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,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,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,0x614,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0xfdcc,0xfdcc,0xfdcc,0xfdcc,0xfdcc,0xffcc,0xfdcc,0xfdcc,0xfdcc,0xfdcc,0xfdcc,0xfdcc,
+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,
+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,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,1,1,1,1,1,1,1,1,1,1,1,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,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,1,0x808,1,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,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,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,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,0xfe24,0xfe26,0xfe26,0xfe28,0xfe2a,0xfe2c,1,0xfe2e,
+1,0xfe30,0xfe32,1,0xffcc,0xffb8,1,0xfe24,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,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,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,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,1,0xfe48,1,1,1,1,1,1,
+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,0xffb8,0xffcc,0xffcc,0xffb8,
+0xffb8,0xffb8,0xffcc,0xffb8,0xffb8,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,0xffb8,0xffcc,0xffb8,0xffcc,
+0xffb8,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,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffb8,0xffcc,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,1,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffcc,1,0xffcc,0xffcc,0xffcc,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,0xffb8,0xffb8,0xffb8,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,1,0xffb8,
+0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xfe36,0xfe38,0xfe3a,0xffcc,
+0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffb8,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,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,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,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,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,1,1,1,1,1,1,1,1,0x2a1e,
+1,1,0x2a24,1,1,1,1,1,0xfe0e,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,0x2a2a,0x2a30,0x2a36,1,1,0x2a3c,1,1,1,1,1,
+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,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,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,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,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,1,0x888,0x890,1,1,0x19c3,0x19c9,0x19cf,0xfe12,1,1,
+1,1,1,1,1,1,1,0xfc00,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,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,
+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,
+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,1,0x8a8,0x8b0,1,1,0x19f7,0x19fd,0x1a03,0xfe12,1,1,1,1,1,1,
+1,1,1,0xfc00,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,1,1,1,1,1,1,1,1,1,0xfece,0xfece,0xfe12,1,
+1,1,1,1,1,1,1,1,0xfed6,0xfed6,0xfed6,0xfed6,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0xfeec,0xfeec,1,1,1,1,1,1,1,1,1,1,
+0xfef4,0xfef4,0xfef4,0xfef4,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,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,
+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,
+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,0x8c0,0x1a1f,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,
+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,0xffcc,0xffcc,0xffcc,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,0xfe12,1,
+1,1,1,1,1,1,1,1,1,0xffcc,1,1,1,1,1,1,
+1,1,1,1,1,0xffc8,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,0xffbc,0xffcc,0xffb8,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,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,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,1,1,0xffb8,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,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,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,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffcc,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,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,1,1,1,1,1,1,1,0xfe0e,
+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,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,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,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,0x2701,1,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,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,
+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,
+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,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,1,
+0x2abf,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,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,0xfe12,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,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,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,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,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,0xffcc,0xffcc,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,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,
+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,0xffb8,
+0xffb8,0xffb8,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,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,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,0xfe12,1,1,1,1,1,1,1,1,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,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,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,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0xffb8,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,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,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,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xfe02,0xffb8,1,
+1,1,1,0xfe12,1,1,1,1,1,0xffcc,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,0xa94,0x2959,0xa9a,0x2963,1,1,1,1,1,1,1,
+1,0xaa0,1,1,1,1,1,0x296d,1,1,1,1,1,1,1,1,
+1,1,1,1,1,0xfe12,0xfc0e,1,1,1,1,1,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,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,1,1,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,1,1,0xfe0e,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,0xab2,
+1,1,1,0x298b,0x2995,0xfe12,1,1,1,1,1,1,1,1,1,0xfc00,
+1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,
+1,1,1,1,1,1,0xfe12,1,1,1,0xfe0e,1,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,1,1,0xabe,0xfc00,0x299f,
+0x29a9,0xfc00,0x29b3,1,1,1,0xfe12,0xfe0e,1,1,1,1,1,1,1,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,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,1,1,1,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,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,0xfe12,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,1,1,1,1,1,
+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,1,1,1,1,1,
+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,0xfe02,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,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,0xffb0,0xffb0,1,1,1,1,1,
+1,1,1,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,1,1,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffb8,0xffb8,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,1,1,
+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,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,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,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,1,0xffcc,0xffcc,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,
+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,1,1,1,1,
+1,1,1,1,1,1,1,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,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,0xfe00,0xfe00,0xfe00,
+0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,
+0xfe00,0xfe00,1,1,1,1,1,1,1,1,1,1,0xfe00,0xfe00,0xfe00,0xfe00,
+0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,
+0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,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,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,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,0x3c54,1,0x3c54,1,0x3c54,0x3c54,0x3c54,0x3c54,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x3c54,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x3c54,
+1,1,1,1,0x3c54,1,1,1,0x3c54,1,0x3c54,1,1,1,1,1,
+1,1,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,1,1,1,1
};
-static const uint16_t norm2_nfc_data_extraData[7722]={
+static const uint16_t norm2_nfc_data_extraData[7724]={
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,
@@ -712,407 +720,407 @@
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,0,0xe622,
-0x41,0x302,0x600,0x3d4c,0x602,0x3d48,0x606,0x3d54,0x8612,0x3d50,0xe622,0x41,0x308,0x8608,0x3bc,0xe622,
-0x41,0x30a,0x8602,0x3f4,0xca22,0x43,0x327,0x8602,0x3c10,0xe622,0x45,0x302,0x600,0x3d80,0x602,0x3d7c,
-0x606,0x3d88,0x8612,0x3d84,0xe622,0x49,0x308,0x8602,0x3c5c,0xe622,0x4f,0x302,0x600,0x3da4,0x602,0x3da0,
-0x606,0x3dac,0x8612,0x3da8,0xe622,0x4f,0x303,0x602,0x3c98,0x608,0x458,0x8610,0x3c9c,0xe622,0x4f,0x308,
-0x8608,0x454,0xe622,0x55,0x308,0x600,0x3b6,0x602,0x3ae,0x608,0x3aa,0x8618,0x3b2,0xe622,0x61,0x302,
-0x600,0x3d4e,0x602,0x3d4a,0x606,0x3d56,0x8612,0x3d52,0xe622,0x61,0x308,0x8608,0x3be,0xe622,0x61,0x30a,
-0x8602,0x3f6,0xca22,0x63,0x327,0x8602,0x3c12,0xe622,0x65,0x302,0x600,0x3d82,0x602,0x3d7e,0x606,0x3d8a,
-0x8612,0x3d86,0xe622,0x69,0x308,0x8602,0x3c5e,0xe622,0x6f,0x302,0x600,0x3da6,0x602,0x3da2,0x606,0x3dae,
-0x8612,0x3daa,0xe622,0x6f,0x303,0x602,0x3c9a,0x608,0x45a,0x8610,0x3c9e,0xe622,0x6f,0x308,0x8608,0x456,
-0xe622,0x75,0x308,0x600,0x3b8,0x602,0x3b0,0x608,0x3ac,0x8618,0x3b4,0xe622,0x41,0x306,0x600,0x3d60,
-0x602,0x3d5c,0x606,0x3d68,0x8612,0x3d64,0xe622,0x61,0x306,0x600,0x3d62,0x602,0x3d5e,0x606,0x3d6a,0x8612,
-0x3d66,0xe622,0x45,0x304,0x600,0x3c28,0x8602,0x3c2c,0xe622,0x65,0x304,0x600,0x3c2a,0x8602,0x3c2e,0xe622,
-0x4f,0x304,0x600,0x3ca0,0x8602,0x3ca4,0xe622,0x6f,0x304,0x600,0x3ca2,0x8602,0x3ca6,0xe622,0x53,0x301,
-0x860e,0x3cc8,0xe622,0x73,0x301,0x860e,0x3cca,0xe622,0x53,0x30c,0x860e,0x3ccc,0xe622,0x73,0x30c,0x860e,
-0x3cce,0xe622,0x55,0x303,0x8602,0x3cf0,0xe622,0x75,0x303,0x8602,0x3cf2,0xe622,0x55,0x304,0x8610,0x3cf4,
-0xe622,0x75,0x304,0x8610,0x3cf6,0xd822,0x4f,0x31b,0x600,0x3db8,0x602,0x3db4,0x606,0x3dc0,0x612,0x3dbc,
-0x8646,0x3dc4,0xd822,0x6f,0x31b,0x600,0x3dba,0x602,0x3db6,0x606,0x3dc2,0x612,0x3dbe,0x8646,0x3dc6,0xd822,
-0x55,0x31b,0x600,0x3dd4,0x602,0x3dd0,0x606,0x3ddc,0x612,0x3dd8,0x8646,0x3de0,0xd822,0x75,0x31b,0x600,
-0x3dd6,0x602,0x3dd2,0x606,0x3dde,0x612,0x3dda,0x8646,0x3de2,0xca22,0x4f,0x328,0x8608,0x3d8,0xca22,0x6f,
-0x328,0x8608,0x3da,0xe622,0x41,0x307,0x8608,0x3c0,0xe622,0x61,0x307,0x8608,0x3c2,0xca22,0x45,0x327,
-0x860c,0x3c38,0xca22,0x65,0x327,0x860c,0x3c3a,0xe622,0x4f,0x307,0x8608,0x460,0xe622,0x6f,0x307,0x8608,
-0x462,0xe622,0x3b1,0x301,0x868a,0x3f68,0xe622,0x3b7,0x301,0x868a,0x3f88,0xe622,0x3b9,0x308,0x600,0x3fa4,
-0x602,0x720,0x8684,0x3fae,0xe622,0x3c5,0x308,0x600,0x3fc4,0x602,0x760,0x8684,0x3fce,0xe622,0x3c9,0x301,
-0x868a,0x3fe8,0x22,0xcc6,0xcc2,0x99aa,0x1996,0x22,0xdd9,0xdcf,0x9b94,0x1bba,0xdc22,0x4c,0x323,0x8608,
-0x3c70,0xdc22,0x6c,0x323,0x8608,0x3c72,0xdc22,0x52,0x323,0x8608,0x3cb8,0xdc22,0x72,0x323,0x8608,0x3cba,
-0xdc22,0x53,0x323,0x860e,0x3cd0,0xdc22,0x73,0x323,0x860e,0x3cd2,0xdc22,0x41,0x323,0x604,0x3d58,0x860c,
-0x3d6c,0xdc22,0x61,0x323,0x604,0x3d5a,0x860c,0x3d6e,0xdc22,0x45,0x323,0x8604,0x3d8c,0xdc22,0x65,0x323,
-0x8604,0x3d8e,0xdc22,0x4f,0x323,0x8604,0x3db0,0xdc22,0x6f,0x323,0x8604,0x3db2,0xe622,0x3b1,0x313,0x600,
-0x3e05,0x602,0x3e09,0x684,0x3e0d,0x868a,0x3f00,0xe622,0x3b1,0x314,0x600,0x3e07,0x602,0x3e0b,0x684,0x3e0f,
-0x868a,0x3f02,0x1f00,0xe663,0x3b1,0x313,0x300,0x868a,0x3f04,0x1f01,0xe663,0x3b1,0x314,0x300,0x868a,0x3f06,
-0x1f00,0xe663,0x3b1,0x313,0x301,0x868a,0x3f08,0x1f01,0xe663,0x3b1,0x314,0x301,0x868a,0x3f0a,0x1f00,0xe663,
-0x3b1,0x313,0x342,0x868a,0x3f0c,0x1f01,0xe663,0x3b1,0x314,0x342,0x868a,0x3f0e,0xe622,0x391,0x313,0x600,
-0x3e15,0x602,0x3e19,0x684,0x3e1d,0x868a,0x3f10,0xe622,0x391,0x314,0x600,0x3e17,0x602,0x3e1b,0x684,0x3e1f,
-0x868a,0x3f12,0x1f08,0xe663,0x391,0x313,0x300,0x868a,0x3f14,0x1f09,0xe663,0x391,0x314,0x300,0x868a,0x3f16,
-0x1f08,0xe663,0x391,0x313,0x301,0x868a,0x3f18,0x1f09,0xe663,0x391,0x314,0x301,0x868a,0x3f1a,0x1f08,0xe663,
-0x391,0x313,0x342,0x868a,0x3f1c,0x1f09,0xe663,0x391,0x314,0x342,0x868a,0x3f1e,0xe622,0x3b5,0x313,0x600,
-0x3e24,0x8602,0x3e28,0xe622,0x3b5,0x314,0x600,0x3e26,0x8602,0x3e2a,0xe622,0x395,0x313,0x600,0x3e34,0x8602,
-0x3e38,0xe622,0x395,0x314,0x600,0x3e36,0x8602,0x3e3a,0xe622,0x3b7,0x313,0x600,0x3e45,0x602,0x3e49,0x684,
-0x3e4d,0x868a,0x3f20,0xe622,0x3b7,0x314,0x600,0x3e47,0x602,0x3e4b,0x684,0x3e4f,0x868a,0x3f22,0x1f20,0xe663,
-0x3b7,0x313,0x300,0x868a,0x3f24,0x1f21,0xe663,0x3b7,0x314,0x300,0x868a,0x3f26,0x1f20,0xe663,0x3b7,0x313,
-0x301,0x868a,0x3f28,0x1f21,0xe663,0x3b7,0x314,0x301,0x868a,0x3f2a,0x1f20,0xe663,0x3b7,0x313,0x342,0x868a,
-0x3f2c,0x1f21,0xe663,0x3b7,0x314,0x342,0x868a,0x3f2e,0xe622,0x397,0x313,0x600,0x3e55,0x602,0x3e59,0x684,
-0x3e5d,0x868a,0x3f30,0xe622,0x397,0x314,0x600,0x3e57,0x602,0x3e5b,0x684,0x3e5f,0x868a,0x3f32,0x1f28,0xe663,
-0x397,0x313,0x300,0x868a,0x3f34,0x1f29,0xe663,0x397,0x314,0x300,0x868a,0x3f36,0x1f28,0xe663,0x397,0x313,
-0x301,0x868a,0x3f38,0x1f29,0xe663,0x397,0x314,0x301,0x868a,0x3f3a,0x1f28,0xe663,0x397,0x313,0x342,0x868a,
-0x3f3c,0x1f29,0xe663,0x397,0x314,0x342,0x868a,0x3f3e,0xe622,0x3b9,0x313,0x600,0x3e64,0x602,0x3e68,0x8684,
-0x3e6c,0xe622,0x3b9,0x314,0x600,0x3e66,0x602,0x3e6a,0x8684,0x3e6e,0xe622,0x399,0x313,0x600,0x3e74,0x602,
-0x3e78,0x8684,0x3e7c,0xe622,0x399,0x314,0x600,0x3e76,0x602,0x3e7a,0x8684,0x3e7e,0xe622,0x3bf,0x313,0x600,
-0x3e84,0x8602,0x3e88,0xe622,0x3bf,0x314,0x600,0x3e86,0x8602,0x3e8a,0xe622,0x39f,0x313,0x600,0x3e94,0x8602,
-0x3e98,0xe622,0x39f,0x314,0x600,0x3e96,0x8602,0x3e9a,0xe622,0x3c5,0x313,0x600,0x3ea4,0x602,0x3ea8,0x8684,
-0x3eac,0xe622,0x3c5,0x314,0x600,0x3ea6,0x602,0x3eaa,0x8684,0x3eae,0xe622,0x3a5,0x314,0x600,0x3eb6,0x602,
-0x3eba,0x8684,0x3ebe,0xe622,0x3c9,0x313,0x600,0x3ec5,0x602,0x3ec9,0x684,0x3ecd,0x868a,0x3f40,0xe622,0x3c9,
-0x314,0x600,0x3ec7,0x602,0x3ecb,0x684,0x3ecf,0x868a,0x3f42,0x1f60,0xe663,0x3c9,0x313,0x300,0x868a,0x3f44,
-0x1f61,0xe663,0x3c9,0x314,0x300,0x868a,0x3f46,0x1f60,0xe663,0x3c9,0x313,0x301,0x868a,0x3f48,0x1f61,0xe663,
-0x3c9,0x314,0x301,0x868a,0x3f4a,0x1f60,0xe663,0x3c9,0x313,0x342,0x868a,0x3f4c,0x1f61,0xe663,0x3c9,0x314,
-0x342,0x868a,0x3f4e,0xe622,0x3a9,0x313,0x600,0x3ed5,0x602,0x3ed9,0x684,0x3edd,0x868a,0x3f50,0xe622,0x3a9,
-0x314,0x600,0x3ed7,0x602,0x3edb,0x684,0x3edf,0x868a,0x3f52,0x1f68,0xe663,0x3a9,0x313,0x300,0x868a,0x3f54,
-0x1f69,0xe663,0x3a9,0x314,0x300,0x868a,0x3f56,0x1f68,0xe663,0x3a9,0x313,0x301,0x868a,0x3f58,0x1f69,0xe663,
-0x3a9,0x314,0x301,0x868a,0x3f5a,0x1f68,0xe663,0x3a9,0x313,0x342,0x868a,0x3f5c,0x1f69,0xe663,0x3a9,0x314,
-0x342,0x868a,0x3f5e,0xe622,0x3b1,0x300,0x868a,0x3f64,0xe622,0x3b7,0x300,0x868a,0x3f84,0xe622,0x3c9,0x300,
-0x868a,0x3fe4,0xe622,0x3b1,0x342,0x868a,0x3f6e,0xe622,0x3b7,0x342,0x868a,0x3f8e,0xe622,0x3c9,0x342,0x868a,
-0x3fee,0xe622,0x41,0x300,0xe622,0x41,0x301,0xe622,0x41,0x303,0xe622,0x45,0x300,0xe622,0x45,0x301,
-0xe622,0x45,0x308,0xe622,0x49,0x300,0xe622,0x49,0x301,0xe622,0x49,0x302,0xe622,0x4e,0x303,0xe622,
-0x4f,0x300,0xe622,0x4f,0x301,0xe622,0x55,0x300,0xe622,0x55,0x301,0xe622,0x55,0x302,0xe622,0x59,
-0x301,0xe622,0x61,0x300,0xe622,0x61,0x301,0xe622,0x61,0x303,0xe622,0x65,0x300,0xe622,0x65,0x301,
-0xe622,0x65,0x308,0xe622,0x69,0x300,0xe622,0x69,0x301,0xe622,0x69,0x302,0xe622,0x6e,0x303,0xe622,
-0x6f,0x300,0xe622,0x6f,0x301,0xe622,0x75,0x300,0xe622,0x75,0x301,0xe622,0x75,0x302,0xe622,0x79,
-0x301,0xe622,0x79,0x308,0xe622,0x41,0x304,0xe622,0x61,0x304,0xca02,0x41,0x328,0xca02,0x61,0x328,
-0xe622,0x43,0x301,0xe622,0x63,0x301,0xe622,0x43,0x302,0xe622,0x63,0x302,0xe622,0x43,0x307,0xe622,
-0x63,0x307,0xe622,0x43,0x30c,0xe622,0x63,0x30c,0xe622,0x44,0x30c,0xe622,0x64,0x30c,0xe622,0x45,
-0x306,0xe622,0x65,0x306,0xe622,0x45,0x307,0xe622,0x65,0x307,0xca02,0x45,0x328,0xca02,0x65,0x328,
-0xe622,0x45,0x30c,0xe622,0x65,0x30c,0xe622,0x47,0x302,0xe622,0x67,0x302,0xe622,0x47,0x306,0xe622,
-0x67,0x306,0xe622,0x47,0x307,0xe622,0x67,0x307,0xca02,0x47,0x327,0xca02,0x67,0x327,0xe622,0x48,
-0x302,0xe622,0x68,0x302,0xe622,0x49,0x303,0xe622,0x69,0x303,0xe622,0x49,0x304,0xe622,0x69,0x304,
-0xe622,0x49,0x306,0xe622,0x69,0x306,0xca02,0x49,0x328,0xca02,0x69,0x328,0xe622,0x49,0x307,0xe602,
-0x4a,0x302,0xe602,0x6a,0x302,0xca02,0x4b,0x327,0xca02,0x6b,0x327,0xe622,0x4c,0x301,0xe622,0x6c,
-0x301,0xca02,0x4c,0x327,0xca02,0x6c,0x327,0xe622,0x4c,0x30c,0xe622,0x6c,0x30c,0xe622,0x4e,0x301,
-0xe622,0x6e,0x301,0xca02,0x4e,0x327,0xca02,0x6e,0x327,0xe622,0x4e,0x30c,0xe622,0x6e,0x30c,0xe622,
-0x4f,0x306,0xe622,0x6f,0x306,0xe622,0x4f,0x30b,0xe622,0x6f,0x30b,0xe622,0x52,0x301,0xe622,0x72,
-0x301,0xca02,0x52,0x327,0xca02,0x72,0x327,0xe622,0x52,0x30c,0xe622,0x72,0x30c,0xe622,0x53,0x302,
-0xe622,0x73,0x302,0xca02,0x53,0x327,0xca02,0x73,0x327,0xca02,0x54,0x327,0xca02,0x74,0x327,0xe622,
-0x54,0x30c,0xe622,0x74,0x30c,0xe622,0x55,0x306,0xe622,0x75,0x306,0xe622,0x55,0x30a,0xe622,0x75,
-0x30a,0xe622,0x55,0x30b,0xe622,0x75,0x30b,0xca02,0x55,0x328,0xca02,0x75,0x328,0xe622,0x57,0x302,
-0xe622,0x77,0x302,0xe622,0x59,0x302,0xe622,0x79,0x302,0xe622,0x59,0x308,0xe622,0x5a,0x301,0xe622,
-0x7a,0x301,0xe622,0x5a,0x307,0xe622,0x7a,0x307,0xe622,0x5a,0x30c,0xe622,0x7a,0x30c,0xe622,0x41,
-0x30c,0xe622,0x61,0x30c,0xe622,0x49,0x30c,0xe622,0x69,0x30c,0xe622,0x4f,0x30c,0xe622,0x6f,0x30c,
-0xe622,0x55,0x30c,0xe622,0x75,0x30c,0xdc,0xe663,0x55,0x308,0x304,0xfc,0xe663,0x75,0x308,0x304,
-0xdc,0xe663,0x55,0x308,0x301,0xfc,0xe663,0x75,0x308,0x301,0xdc,0xe663,0x55,0x308,0x30c,0xfc,
-0xe663,0x75,0x308,0x30c,0xdc,0xe663,0x55,0x308,0x300,0xfc,0xe663,0x75,0x308,0x300,0xc4,0xe663,
-0x41,0x308,0x304,0xe4,0xe663,0x61,0x308,0x304,0x226,0xe663,0x41,0x307,0x304,0x227,0xe663,0x61,
-0x307,0x304,0xe602,0xc6,0x304,0xe602,0xe6,0x304,0xe622,0x47,0x30c,0xe622,0x67,0x30c,0xe622,0x4b,
-0x30c,0xe622,0x6b,0x30c,0x1ea,0xe643,0x4f,0x328,0x304,0x1eb,0xe643,0x6f,0x328,0x304,0xe602,0x1b7,
-0x30c,0xe602,0x292,0x30c,0xe602,0x6a,0x30c,0xe622,0x47,0x301,0xe622,0x67,0x301,0xe622,0x4e,0x300,
-0xe622,0x6e,0x300,0xc5,0xe663,0x41,0x30a,0x301,0xe5,0xe663,0x61,0x30a,0x301,0xe602,0xc6,0x301,
-0xe602,0xe6,0x301,0xe602,0xd8,0x301,0xe602,0xf8,0x301,0xe622,0x41,0x30f,0xe622,0x61,0x30f,0xe622,
-0x41,0x311,0xe622,0x61,0x311,0xe622,0x45,0x30f,0xe622,0x65,0x30f,0xe622,0x45,0x311,0xe622,0x65,
-0x311,0xe622,0x49,0x30f,0xe622,0x69,0x30f,0xe622,0x49,0x311,0xe622,0x69,0x311,0xe622,0x4f,0x30f,
-0xe622,0x6f,0x30f,0xe622,0x4f,0x311,0xe622,0x6f,0x311,0xe622,0x52,0x30f,0xe622,0x72,0x30f,0xe622,
-0x52,0x311,0xe622,0x72,0x311,0xe622,0x55,0x30f,0xe622,0x75,0x30f,0xe622,0x55,0x311,0xe622,0x75,
-0x311,0xdc22,0x53,0x326,0xdc22,0x73,0x326,0xdc22,0x54,0x326,0xdc22,0x74,0x326,0xe622,0x48,0x30c,
-0xe622,0x68,0x30c,0xd6,0xe663,0x4f,0x308,0x304,0xf6,0xe663,0x6f,0x308,0x304,0xd5,0xe663,0x4f,
-0x303,0x304,0xf5,0xe663,0x6f,0x303,0x304,0x22e,0xe663,0x4f,0x307,0x304,0x22f,0xe663,0x6f,0x307,
-0x304,0xe622,0x59,0x304,0xe622,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,0xe622,0x627,0x653,
-0xe622,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,0xdc22,0x41,0x325,0xdc22,0x61,0x325,0xe622,0x42,0x307,0xe622,0x62,0x307,0xdc02,0x42,
-0x323,0xdc02,0x62,0x323,0xdc02,0x42,0x331,0xdc02,0x62,0x331,0xc7,0xe643,0x43,0x327,0x301,0xe7,
-0xe643,0x63,0x327,0x301,0xe622,0x44,0x307,0xe622,0x64,0x307,0xdc22,0x44,0x323,0xdc22,0x64,0x323,
-0xdc22,0x44,0x331,0xdc22,0x64,0x331,0xca02,0x44,0x327,0xca02,0x64,0x327,0xdc22,0x44,0x32d,0xdc22,
-0x64,0x32d,0x112,0xe663,0x45,0x304,0x300,0x113,0xe663,0x65,0x304,0x300,0x112,0xe663,0x45,0x304,
-0x301,0x113,0xe663,0x65,0x304,0x301,0xdc22,0x45,0x32d,0xdc22,0x65,0x32d,0xdc22,0x45,0x330,0xdc22,
-0x65,0x330,0x228,0xe643,0x45,0x327,0x306,0x229,0xe643,0x65,0x327,0x306,0xe602,0x46,0x307,0xe602,
-0x66,0x307,0xe622,0x47,0x304,0xe622,0x67,0x304,0xe622,0x48,0x307,0xe622,0x68,0x307,0xdc22,0x48,
-0x323,0xdc22,0x68,0x323,0xe622,0x48,0x308,0xe622,0x68,0x308,0xca02,0x48,0x327,0xca02,0x68,0x327,
-0xdc22,0x48,0x32e,0xdc22,0x68,0x32e,0xdc22,0x49,0x330,0xdc22,0x69,0x330,0xcf,0xe663,0x49,0x308,
-0x301,0xef,0xe663,0x69,0x308,0x301,0xe622,0x4b,0x301,0xe622,0x6b,0x301,0xdc22,0x4b,0x323,0xdc22,
-0x6b,0x323,0xdc22,0x4b,0x331,0xdc22,0x6b,0x331,0x1e36,0xe663,0x4c,0x323,0x304,0x1e37,0xe663,0x6c,
-0x323,0x304,0xdc22,0x4c,0x331,0xdc22,0x6c,0x331,0xdc22,0x4c,0x32d,0xdc22,0x6c,0x32d,0xe622,0x4d,
-0x301,0xe622,0x6d,0x301,0xe622,0x4d,0x307,0xe622,0x6d,0x307,0xdc02,0x4d,0x323,0xdc02,0x6d,0x323,
-0xe622,0x4e,0x307,0xe622,0x6e,0x307,0xdc22,0x4e,0x323,0xdc22,0x6e,0x323,0xdc22,0x4e,0x331,0xdc22,
-0x6e,0x331,0xdc22,0x4e,0x32d,0xdc22,0x6e,0x32d,0xd5,0xe663,0x4f,0x303,0x301,0xf5,0xe663,0x6f,
-0x303,0x301,0xd5,0xe663,0x4f,0x303,0x308,0xf5,0xe663,0x6f,0x303,0x308,0x14c,0xe663,0x4f,0x304,
-0x300,0x14d,0xe663,0x6f,0x304,0x300,0x14c,0xe663,0x4f,0x304,0x301,0x14d,0xe663,0x6f,0x304,0x301,
-0xe602,0x50,0x301,0xe602,0x70,0x301,0xe602,0x50,0x307,0xe602,0x70,0x307,0xe622,0x52,0x307,0xe622,
-0x72,0x307,0x1e5a,0xe663,0x52,0x323,0x304,0x1e5b,0xe663,0x72,0x323,0x304,0xdc22,0x52,0x331,0xdc22,
-0x72,0x331,0xe622,0x53,0x307,0xe622,0x73,0x307,0x15a,0xe663,0x53,0x301,0x307,0x15b,0xe663,0x73,
-0x301,0x307,0x160,0xe663,0x53,0x30c,0x307,0x161,0xe663,0x73,0x30c,0x307,0x1e62,0xe663,0x53,0x323,
-0x307,0x1e63,0xe663,0x73,0x323,0x307,0xe622,0x54,0x307,0xe622,0x74,0x307,0xdc22,0x54,0x323,0xdc22,
-0x74,0x323,0xdc22,0x54,0x331,0xdc22,0x74,0x331,0xdc22,0x54,0x32d,0xdc22,0x74,0x32d,0xdc22,0x55,
-0x324,0xdc22,0x75,0x324,0xdc22,0x55,0x330,0xdc22,0x75,0x330,0xdc22,0x55,0x32d,0xdc22,0x75,0x32d,
-0x168,0xe663,0x55,0x303,0x301,0x169,0xe663,0x75,0x303,0x301,0x16a,0xe663,0x55,0x304,0x308,0x16b,
-0xe663,0x75,0x304,0x308,0xe622,0x56,0x303,0xe622,0x76,0x303,0xdc02,0x56,0x323,0xdc02,0x76,0x323,
-0xe622,0x57,0x300,0xe622,0x77,0x300,0xe622,0x57,0x301,0xe622,0x77,0x301,0xe622,0x57,0x308,0xe622,
-0x77,0x308,0xe622,0x57,0x307,0xe622,0x77,0x307,0xdc02,0x57,0x323,0xdc02,0x77,0x323,0xe602,0x58,
-0x307,0xe602,0x78,0x307,0xe602,0x58,0x308,0xe602,0x78,0x308,0xe622,0x59,0x307,0xe622,0x79,0x307,
-0xe622,0x5a,0x302,0xe622,0x7a,0x302,0xdc02,0x5a,0x323,0xdc02,0x7a,0x323,0xdc02,0x5a,0x331,0xdc02,
-0x7a,0x331,0xdc22,0x68,0x331,0xe622,0x74,0x308,0xe622,0x77,0x30a,0xe622,0x79,0x30a,0xe602,0x17f,
-0x307,0xe622,0x41,0x309,0xe622,0x61,0x309,0xc2,0xe663,0x41,0x302,0x301,0xe2,0xe663,0x61,0x302,
-0x301,0xc2,0xe663,0x41,0x302,0x300,0xe2,0xe663,0x61,0x302,0x300,0xc2,0xe663,0x41,0x302,0x309,
-0xe2,0xe663,0x61,0x302,0x309,0xc2,0xe663,0x41,0x302,0x303,0xe2,0xe663,0x61,0x302,0x303,0x1ea0,
-0xe663,0x41,0x323,0x302,0x1ea1,0xe663,0x61,0x323,0x302,0x102,0xe663,0x41,0x306,0x301,0x103,0xe663,
-0x61,0x306,0x301,0x102,0xe663,0x41,0x306,0x300,0x103,0xe663,0x61,0x306,0x300,0x102,0xe663,0x41,
-0x306,0x309,0x103,0xe663,0x61,0x306,0x309,0x102,0xe663,0x41,0x306,0x303,0x103,0xe663,0x61,0x306,
-0x303,0x1ea0,0xe663,0x41,0x323,0x306,0x1ea1,0xe663,0x61,0x323,0x306,0xe622,0x45,0x309,0xe622,0x65,
-0x309,0xe622,0x45,0x303,0xe622,0x65,0x303,0xca,0xe663,0x45,0x302,0x301,0xea,0xe663,0x65,0x302,
-0x301,0xca,0xe663,0x45,0x302,0x300,0xea,0xe663,0x65,0x302,0x300,0xca,0xe663,0x45,0x302,0x309,
-0xea,0xe663,0x65,0x302,0x309,0xca,0xe663,0x45,0x302,0x303,0xea,0xe663,0x65,0x302,0x303,0x1eb8,
-0xe663,0x45,0x323,0x302,0x1eb9,0xe663,0x65,0x323,0x302,0xe622,0x49,0x309,0xe622,0x69,0x309,0xdc22,
-0x49,0x323,0xdc22,0x69,0x323,0xe622,0x4f,0x309,0xe622,0x6f,0x309,0xd4,0xe663,0x4f,0x302,0x301,
-0xf4,0xe663,0x6f,0x302,0x301,0xd4,0xe663,0x4f,0x302,0x300,0xf4,0xe663,0x6f,0x302,0x300,0xd4,
-0xe663,0x4f,0x302,0x309,0xf4,0xe663,0x6f,0x302,0x309,0xd4,0xe663,0x4f,0x302,0x303,0xf4,0xe663,
-0x6f,0x302,0x303,0x1ecc,0xe663,0x4f,0x323,0x302,0x1ecd,0xe663,0x6f,0x323,0x302,0x1a0,0xe663,0x4f,
-0x31b,0x301,0x1a1,0xe663,0x6f,0x31b,0x301,0x1a0,0xe663,0x4f,0x31b,0x300,0x1a1,0xe663,0x6f,0x31b,
-0x300,0x1a0,0xe663,0x4f,0x31b,0x309,0x1a1,0xe663,0x6f,0x31b,0x309,0x1a0,0xe663,0x4f,0x31b,0x303,
-0x1a1,0xe663,0x6f,0x31b,0x303,0x1a0,0xdc63,0x4f,0x31b,0x323,0x1a1,0xdc63,0x6f,0x31b,0x323,0xdc22,
-0x55,0x323,0xdc22,0x75,0x323,0xe622,0x55,0x309,0xe622,0x75,0x309,0x1af,0xe663,0x55,0x31b,0x301,
-0x1b0,0xe663,0x75,0x31b,0x301,0x1af,0xe663,0x55,0x31b,0x300,0x1b0,0xe663,0x75,0x31b,0x300,0x1af,
-0xe663,0x55,0x31b,0x309,0x1b0,0xe663,0x75,0x31b,0x309,0x1af,0xe663,0x55,0x31b,0x303,0x1b0,0xe663,
-0x75,0x31b,0x303,0x1af,0xdc63,0x55,0x31b,0x323,0x1b0,0xdc63,0x75,0x31b,0x323,0xe622,0x59,0x300,
-0xe622,0x79,0x300,0xdc02,0x59,0x323,0xdc02,0x79,0x323,0xe622,0x59,0x309,0xe622,0x79,0x309,0xe622,
-0x59,0x303,0xe622,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,0xf063,0x3b1,0x313,0x345,0x1f01,
-0xf063,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,0xf063,0x391,0x313,0x345,0x1f09,0xf063,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,0xf063,
-0x3b7,0x313,0x345,0x1f21,0xf063,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,0xf063,0x397,0x313,0x345,0x1f29,0xf063,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,0xf063,0x3c9,0x313,0x345,0x1f61,0xf063,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,0xf063,0x3a9,0x313,
-0x345,0x1f69,0xf063,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,0xf022,0x3b1,0x345,0x3ac,0xf043,0x3b1,0x301,0x345,0x1fb6,0xf043,0x3b1,0x342,0x345,0xe602,0x391,
-0x306,0xe602,0x391,0x304,0xe602,0x391,0x300,0xf022,0x391,0x345,0xe602,0xa8,0x342,0x1f74,0xf043,0x3b7,
-0x300,0x345,0xf022,0x3b7,0x345,0x3ae,0xf043,0x3b7,0x301,0x345,0x1fc6,0xf043,0x3b7,0x342,0x345,0xe602,
-0x395,0x300,0xe602,0x397,0x300,0xf022,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,0xf022,0x3c9,0x345,0x3ce,0xf043,0x3c9,0x301,0x345,0x1ff6,0xf043,0x3c9,0x342,0x345,
-0xe602,0x39f,0x300,0xe602,0x3a9,0x300,0xf022,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,0xe6e6,0xe6a1,0x300,0xe6e6,0xe6a1,0x301,0xe6e6,0xe6a1,0x313,
-0xe6e6,0xe6a2,0x308,0x301,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,0x8100,0x82a2,0xf71,0xf72,0x8100,0x84a2,0xf71,0xf74,0x8202,0xfb2,0xf80,
-0x8202,0xfb3,0xf80,0x8100,0x82a2,0xf71,0xf80,2,0xf92,0xfb7,2,0xf9c,0xfb7,2,0xfa1,0xfb7,
-2,0xfa6,0xfb7,2,0xfab,0xfb7,2,0xf90,0xfb5,0x3ac,0xe662,0x3b1,0x301,0x3ad,0xe642,0x3b5,
-0x301,0x3ae,0xe662,0x3b7,0x301,0x3af,0xe642,0x3b9,0x301,0x3cc,0xe642,0x3bf,0x301,0x3cd,0xe642,0x3c5,
-0x301,0x3ce,0xe662,0x3c9,0x301,0x386,0xe642,0x391,0x301,0x21,0x3b9,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,1,0x60,0x38c,0xe642,0x39f,
-0x301,0x38f,0xe642,0x3a9,0x301,1,0xb4,0x21,0x3a9,0x21,0x4b,0xc5,0xe662,0x41,0x30a,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
+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
};
static const uint8_t norm2_nfc_data_smallFCD[256]={
-0xc0,0xef,3,0x7f,0xdf,0x70,0xcf,0x87,0xc7,0x66,0x66,0x46,0x64,0x44,0x66,0x5b,
+0xc0,0xef,3,0x7f,0xdf,0x70,0xcf,0x87,0xc7,0x66,0x66,0x46,0x64,0x46,0x66,0x5b,
0x12,0,0,4,0,0,0,0x43,0x20,2,0x29,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,
@@ -1135,13 +1143,13 @@
norm2_nfc_data_trieIndex+2720,
NULL,
2720,
- 6932,
+ 7056,
0x188,
0xb1c,
- 0x0,
- 0x0,
+ 0x1,
+ 0x1,
0x30000,
- 0x25b0,
+ 0x262c,
NULL, 0, FALSE, FALSE, 0, NULL
};
Modified: trunk/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -5,7 +5,7 @@
* Copyright (C) 2014, International Business Machines
* Corporation and others. All Rights Reserved.
*******************************************************************************
-* loadednormalizer2impl.h
+* norm2allmodes.h
*
* created on: 2014sep07
* created by: Markus W. Scherer
@@ -18,7 +18,9 @@
#if !UCONFIG_NO_NORMALIZATION
+#include "unicode/edits.h"
#include "unicode/normalizer2.h"
+#include "unicode/stringoptions.h"
#include "unicode/unistr.h"
#include "cpputils.h"
#include "normalizer2impl.h"
@@ -210,8 +212,8 @@
virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const {
return impl.isDecompYes(impl.getNorm16(c)) ? UNORM_YES : UNORM_NO;
}
- virtual UBool hasBoundaryBefore(UChar32 c) const { return impl.hasDecompBoundary(c, TRUE); }
- virtual UBool hasBoundaryAfter(UChar32 c) const { return impl.hasDecompBoundary(c, FALSE); }
+ virtual UBool hasBoundaryBefore(UChar32 c) const { return impl.hasDecompBoundaryBefore(c); }
+ virtual UBool hasBoundaryAfter(UChar32 c) const { return impl.hasDecompBoundaryAfter(c); }
virtual UBool isInert(UChar32 c) const { return impl.isDecompInert(c); }
};
@@ -224,19 +226,35 @@
private:
virtual void
normalize(const UChar *src, const UChar *limit,
- ReorderingBuffer &buffer, UErrorCode &errorCode) const {
+ ReorderingBuffer &buffer, UErrorCode &errorCode) const U_OVERRIDE {
impl.compose(src, limit, onlyContiguous, TRUE, buffer, errorCode);
}
using Normalizer2WithImpl::normalize; // Avoid warning about hiding base class function.
+
+ void
+ normalizeUTF8(uint32_t options, StringPiece src, ByteSink &sink,
+ Edits *edits, UErrorCode &errorCode) const U_OVERRIDE {
+ if (U_FAILURE(errorCode)) {
+ return;
+ }
+ if (edits != nullptr && (options & U_EDITS_NO_RESET) == 0) {
+ edits->reset();
+ }
+ const uint8_t *s = reinterpret_cast<const uint8_t *>(src.data());
+ impl.composeUTF8(options, onlyContiguous, s, s + src.length(),
+ &sink, edits, errorCode);
+ sink.Flush();
+ }
+
virtual void
normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize,
UnicodeString &safeMiddle,
- ReorderingBuffer &buffer, UErrorCode &errorCode) const {
+ ReorderingBuffer &buffer, UErrorCode &errorCode) const U_OVERRIDE {
impl.composeAndAppend(src, limit, doNormalize, onlyContiguous, safeMiddle, buffer, errorCode);
}
virtual UBool
- isNormalized(const UnicodeString &s, UErrorCode &errorCode) const {
+ isNormalized(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE {
if(U_FAILURE(errorCode)) {
return FALSE;
}
@@ -252,8 +270,16 @@
}
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;
+ }
+ const uint8_t *s = reinterpret_cast<const uint8_t *>(sp.data());
+ return impl.composeUTF8(0, onlyContiguous, s, s + sp.length(), nullptr, nullptr, errorCode);
+ }
virtual UNormalizationCheckResult
- quickCheck(const UnicodeString &s, UErrorCode &errorCode) const {
+ quickCheck(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE {
if(U_FAILURE(errorCode)) {
return UNORM_MAYBE;
}
@@ -267,21 +293,21 @@
return qcResult;
}
virtual const UChar *
- spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &) const {
+ spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &) const U_OVERRIDE {
return impl.composeQuickCheck(src, limit, onlyContiguous, NULL);
}
using Normalizer2WithImpl::spanQuickCheckYes; // Avoid warning about hiding base class function.
- virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const {
+ virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const U_OVERRIDE {
return impl.getCompQuickCheck(impl.getNorm16(c));
}
- virtual UBool hasBoundaryBefore(UChar32 c) const {
+ virtual UBool hasBoundaryBefore(UChar32 c) const U_OVERRIDE {
return impl.hasCompBoundaryBefore(c);
}
- virtual UBool hasBoundaryAfter(UChar32 c) const {
- return impl.hasCompBoundaryAfter(c, onlyContiguous, FALSE);
+ virtual UBool hasBoundaryAfter(UChar32 c) const U_OVERRIDE {
+ return impl.hasCompBoundaryAfter(c, onlyContiguous);
}
- virtual UBool isInert(UChar32 c) const {
- return impl.hasCompBoundaryAfter(c, onlyContiguous, TRUE);
+ virtual UBool isInert(UChar32 c) const U_OVERRIDE {
+ return impl.isCompInert(c, onlyContiguous);
}
const UBool onlyContiguous;
Modified: trunk/Build/source/libs/icu/icu-src/source/common/normalizer2.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/normalizer2.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/normalizer2.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -8,7 +8,7 @@
*
*******************************************************************************
* file name: normalizer2.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
@@ -20,7 +20,9 @@
#if !UCONFIG_NO_NORMALIZATION
+#include "unicode/edits.h"
#include "unicode/normalizer2.h"
+#include "unicode/stringoptions.h"
#include "unicode/unistr.h"
#include "unicode/unorm.h"
#include "cstring.h"
@@ -42,6 +44,20 @@
Normalizer2::~Normalizer2() {}
+void
+Normalizer2::normalizeUTF8(uint32_t /*options*/, StringPiece src, ByteSink &sink,
+ Edits *edits, UErrorCode &errorCode) const {
+ if (U_FAILURE(errorCode)) {
+ return;
+ }
+ if (edits != nullptr) {
+ errorCode = U_UNSUPPORTED_ERROR;
+ return;
+ }
+ UnicodeString src16 = UnicodeString::fromUTF8(src);
+ normalize(src16, errorCode).toUTF8(sink);
+}
+
UBool
Normalizer2::getRawDecomposition(UChar32, UnicodeString &) const {
return FALSE;
@@ -57,6 +73,11 @@
return 0;
}
+UBool
+Normalizer2::isNormalizedUTF8(StringPiece s, UErrorCode &errorCode) const {
+ return U_SUCCESS(errorCode) && isNormalized(UnicodeString::fromUTF8(s), errorCode);
+}
+
// Normalizer2 implementation for the old UNORM_NONE.
class NoopNormalizer2 : public Normalizer2 {
virtual ~NoopNormalizer2();
@@ -64,7 +85,7 @@
virtual UnicodeString &
normalize(const UnicodeString &src,
UnicodeString &dest,
- UErrorCode &errorCode) const {
+ UErrorCode &errorCode) const U_OVERRIDE {
if(U_SUCCESS(errorCode)) {
if(&dest!=&src) {
dest=src;
@@ -74,10 +95,27 @@
}
return dest;
}
+ virtual void
+ normalizeUTF8(uint32_t options, StringPiece src, ByteSink &sink,
+ Edits *edits, UErrorCode &errorCode) const U_OVERRIDE {
+ if(U_SUCCESS(errorCode)) {
+ if (edits != nullptr) {
+ if ((options & U_EDITS_NO_RESET) == 0) {
+ edits->reset();
+ }
+ edits->addUnchanged(src.length());
+ }
+ if ((options & U_OMIT_UNCHANGED_TEXT) == 0) {
+ sink.Append(src.data(), src.length());
+ }
+ sink.Flush();
+ }
+ }
+
virtual UnicodeString &
normalizeSecondAndAppend(UnicodeString &first,
const UnicodeString &second,
- UErrorCode &errorCode) const {
+ UErrorCode &errorCode) const U_OVERRIDE {
if(U_SUCCESS(errorCode)) {
if(&first!=&second) {
first.append(second);
@@ -90,7 +128,7 @@
virtual UnicodeString &
append(UnicodeString &first,
const UnicodeString &second,
- UErrorCode &errorCode) const {
+ UErrorCode &errorCode) const U_OVERRIDE {
if(U_SUCCESS(errorCode)) {
if(&first!=&second) {
first.append(second);
@@ -101,25 +139,29 @@
return first;
}
virtual UBool
- getDecomposition(UChar32, UnicodeString &) const {
+ getDecomposition(UChar32, UnicodeString &) const U_OVERRIDE {
return FALSE;
}
- // No need to override the default getRawDecomposition().
+ // No need to U_OVERRIDE the default getRawDecomposition().
virtual UBool
- isNormalized(const UnicodeString &, UErrorCode &) const {
- return TRUE;
+ isNormalized(const UnicodeString &, UErrorCode &errorCode) const U_OVERRIDE {
+ return U_SUCCESS(errorCode);
}
+ virtual UBool
+ isNormalizedUTF8(StringPiece, UErrorCode &errorCode) const U_OVERRIDE {
+ return U_SUCCESS(errorCode);
+ }
virtual UNormalizationCheckResult
- quickCheck(const UnicodeString &, UErrorCode &) const {
+ quickCheck(const UnicodeString &, UErrorCode &) const U_OVERRIDE {
return UNORM_YES;
}
virtual int32_t
- spanQuickCheckYes(const UnicodeString &s, UErrorCode &) const {
+ spanQuickCheckYes(const UnicodeString &s, UErrorCode &) const U_OVERRIDE {
return s.length();
}
- virtual UBool hasBoundaryBefore(UChar32) const { return TRUE; }
- virtual UBool hasBoundaryAfter(UChar32) const { return TRUE; }
- virtual UBool isInert(UChar32) const { return TRUE; }
+ virtual UBool hasBoundaryBefore(UChar32) const U_OVERRIDE { return TRUE; }
+ virtual UBool hasBoundaryAfter(UChar32) const U_OVERRIDE { return TRUE; }
+ virtual UBool isInert(UChar32) const U_OVERRIDE { return TRUE; }
};
NoopNormalizer2::~NoopNormalizer2() {}
Modified: trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -8,7 +8,7 @@
*
*******************************************************************************
* file name: normalizer2impl.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
@@ -20,10 +20,15 @@
#if !UCONFIG_NO_NORMALIZATION
+#include "unicode/bytestream.h"
+#include "unicode/edits.h"
#include "unicode/normalizer2.h"
+#include "unicode/stringoptions.h"
#include "unicode/udata.h"
#include "unicode/ustring.h"
#include "unicode/utf16.h"
+#include "unicode/utf8.h"
+#include "bytesinkutil.h"
#include "cmemory.h"
#include "mutex.h"
#include "normalizer2impl.h"
@@ -35,8 +40,142 @@
U_NAMESPACE_BEGIN
+namespace {
+
+/**
+ * UTF-8 lead byte for minNoMaybeCP.
+ * Can be lower than the actual lead byte for c.
+ * Typically U+0300 for NFC/NFD, U+00A0 for NFKC/NFKD, U+0041 for NFKC_Casefold.
+ */
+inline uint8_t leadByteForCP(UChar32 c) {
+ if (c <= 0x7f) {
+ return (uint8_t)c;
+ } else if (c <= 0x7ff) {
+ return (uint8_t)(0xc0+(c>>6));
+ } else {
+ // Should not occur because ccc(U+0300)!=0.
+ return 0xe0;
+ }
+}
+
+/**
+ * Returns the code point from one single well-formed UTF-8 byte sequence
+ * between cpStart and cpLimit.
+ *
+ * UTrie2 UTF-8 macros do not assemble whole code points (for efficiency).
+ * When we do need the code point, we call this function.
+ * We should not need it for normalization-inert data (norm16==0).
+ * Illegal sequences yield the error value norm16==0 just like real normalization-inert code points.
+ */
+UChar32 codePointFromValidUTF8(const uint8_t *cpStart, const uint8_t *cpLimit) {
+ // Similar to U8_NEXT_UNSAFE(s, i, c).
+ U_ASSERT(cpStart < cpLimit);
+ uint8_t c = *cpStart;
+ switch(cpLimit-cpStart) {
+ case 1:
+ return c;
+ case 2:
+ return ((c&0x1f)<<6) | (cpStart[1]&0x3f);
+ case 3:
+ // no need for (c&0xf) because the upper bits are truncated after <<12 in the cast to (UChar)
+ return (UChar)((c<<12) | ((cpStart[1]&0x3f)<<6) | (cpStart[2]&0x3f));
+ case 4:
+ return ((c&7)<<18) | ((cpStart[1]&0x3f)<<12) | ((cpStart[2]&0x3f)<<6) | (cpStart[3]&0x3f);
+ default:
+ U_ASSERT(FALSE); // Should not occur.
+ return U_SENTINEL;
+ }
+}
+
+/**
+ * Returns the last code point in [start, p[ if it is valid and in U+1000..U+D7FF.
+ * Otherwise returns a negative value.
+ */
+UChar32 previousHangulOrJamo(const uint8_t *start, const uint8_t *p) {
+ if ((p - start) >= 3) {
+ p -= 3;
+ uint8_t l = *p;
+ uint8_t t1, t2;
+ if (0xe1 <= l && l <= 0xed &&
+ (t1 = (uint8_t)(p[1] - 0x80)) <= 0x3f &&
+ (t2 = (uint8_t)(p[2] - 0x80)) <= 0x3f &&
+ (l < 0xed || t1 <= 0x1f)) {
+ return ((l & 0xf) << 12) | (t1 << 6) | t2;
+ }
+ }
+ return U_SENTINEL;
+}
+
+/**
+ * Returns the offset from the Jamo T base if [src, limit[ starts with a single Jamo T code point.
+ * Otherwise returns a negative value.
+ */
+int32_t getJamoTMinusBase(const uint8_t *src, const uint8_t *limit) {
+ // Jamo T: E1 86 A8..E1 87 82
+ if ((limit - src) >= 3 && *src == 0xe1) {
+ if (src[1] == 0x86) {
+ uint8_t t = src[2];
+ // The first Jamo T is U+11A8 but JAMO_T_BASE is 11A7.
+ // Offset 0 does not correspond to any conjoining Jamo.
+ if (0xa8 <= t && t <= 0xbf) {
+ return t - 0xa7;
+ }
+ } else if (src[1] == 0x87) {
+ uint8_t t = src[2];
+ if ((int8_t)t <= (int8_t)0x82) {
+ return t - (0xa7 - 0x40);
+ }
+ }
+ }
+ return -1;
+}
+
+void
+appendCodePointDelta(const uint8_t *cpStart, const uint8_t *cpLimit, int32_t delta,
+ ByteSink &sink, Edits *edits) {
+ char buffer[U8_MAX_LENGTH];
+ int32_t length;
+ int32_t cpLength = (int32_t)(cpLimit - cpStart);
+ if (cpLength == 1) {
+ // The builder makes ASCII map to ASCII.
+ buffer[0] = (uint8_t)(*cpStart + delta);
+ length = 1;
+ } else {
+ int32_t trail = *(cpLimit-1) + delta;
+ if (0x80 <= trail && trail <= 0xbf) {
+ // The delta only changes the last trail byte.
+ --cpLimit;
+ length = 0;
+ do { buffer[length++] = *cpStart++; } while (cpStart < cpLimit);
+ buffer[length++] = (uint8_t)trail;
+ } else {
+ // Decode the code point, add the delta, re-encode.
+ UChar32 c = codePointFromValidUTF8(cpStart, cpLimit) + delta;
+ length = 0;
+ U8_APPEND_UNSAFE(buffer, length, c);
+ }
+ }
+ if (edits != nullptr) {
+ edits->addReplace(cpLength, length);
+ }
+ sink.Append(buffer, length);
+}
+
+} // namespace
+
// ReorderingBuffer -------------------------------------------------------- ***
+ReorderingBuffer::ReorderingBuffer(const Normalizer2Impl &ni, UnicodeString &dest,
+ UErrorCode &errorCode) :
+ impl(ni), str(dest),
+ start(str.getBuffer(8)), reorderStart(start), limit(start),
+ remainingCapacity(str.getCapacity()), lastCC(0) {
+ if (start == nullptr && U_SUCCESS(errorCode)) {
+ // getBuffer() already did str.setToBogus()
+ errorCode = U_MEMORY_ALLOCATION_ERROR;
+ }
+}
+
UBool ReorderingBuffer::init(int32_t destCapacity, UErrorCode &errorCode) {
int32_t length=str.length();
start=str.getBuffer(destCapacity);
@@ -69,6 +208,32 @@
0==u_memcmp(start, otherStart, length);
}
+UBool ReorderingBuffer::equals(const uint8_t *otherStart, const uint8_t *otherLimit) const {
+ U_ASSERT((otherLimit - otherStart) <= INT32_MAX); // ensured by caller
+ int32_t length = (int32_t)(limit - start);
+ int32_t otherLength = (int32_t)(otherLimit - otherStart);
+ // For equal strings, UTF-8 is at least as long as UTF-16, and at most three times as long.
+ if (otherLength < length || (otherLength / 3) > length) {
+ return FALSE;
+ }
+ // Compare valid strings from between normalization boundaries.
+ // (Invalid sequences are normalization-inert.)
+ for (int32_t i = 0, j = 0;;) {
+ if (i >= length) {
+ return j >= otherLength;
+ } else if (j >= otherLength) {
+ return FALSE;
+ }
+ // Not at the end of either string yet.
+ UChar32 c, other;
+ U16_NEXT_UNSAFE(start, i, c);
+ U8_NEXT_UNSAFE(otherStart, j, other);
+ if (c != other) {
+ return FALSE;
+ }
+ }
+}
+
UBool ReorderingBuffer::appendSupplementary(UChar32 c, uint8_t cc, UErrorCode &errorCode) {
if(remainingCapacity<2 && !resize(2, errorCode)) {
return FALSE;
@@ -216,16 +381,12 @@
return 0;
}
UChar32 c=*--codePointStart;
- if(c<Normalizer2Impl::MIN_CCC_LCCC_CP) {
- return 0;
- }
-
UChar c2;
if(U16_IS_TRAIL(c) && start<codePointStart && U16_IS_LEAD(c2=*(codePointStart-1))) {
--codePointStart;
c=U16_GET_SUPPLEMENTARY(c2, c);
}
- return Normalizer2Impl::getCCFromYesOrMaybe(impl.getNorm16(c));
+ return impl.getCCFromYesOrMaybeCP(c);
}
// Inserts c somewhere before the last character.
@@ -263,68 +424,36 @@
const uint16_t *inExtraData, const uint8_t *inSmallFCD) {
minDecompNoCP=inIndexes[IX_MIN_DECOMP_NO_CP];
minCompNoMaybeCP=inIndexes[IX_MIN_COMP_NO_MAYBE_CP];
+ minLcccCP=inIndexes[IX_MIN_LCCC_CP];
minYesNo=inIndexes[IX_MIN_YES_NO];
minYesNoMappingsOnly=inIndexes[IX_MIN_YES_NO_MAPPINGS_ONLY];
minNoNo=inIndexes[IX_MIN_NO_NO];
+ minNoNoCompBoundaryBefore=inIndexes[IX_MIN_NO_NO_COMP_BOUNDARY_BEFORE];
+ minNoNoCompNoMaybeCC=inIndexes[IX_MIN_NO_NO_COMP_NO_MAYBE_CC];
+ minNoNoEmpty=inIndexes[IX_MIN_NO_NO_EMPTY];
limitNoNo=inIndexes[IX_LIMIT_NO_NO];
minMaybeYes=inIndexes[IX_MIN_MAYBE_YES];
+ U_ASSERT((minMaybeYes&7)==0); // 8-aligned for noNoDelta bit fields
+ centerNoNoDelta=(minMaybeYes>>DELTA_SHIFT)-MAX_DELTA-1;
normTrie=inTrie;
maybeYesCompositions=inExtraData;
- extraData=maybeYesCompositions+(MIN_NORMAL_MAYBE_YES-minMaybeYes);
+ extraData=maybeYesCompositions+((MIN_NORMAL_MAYBE_YES-minMaybeYes)>>OFFSET_SHIFT);
smallFCD=inSmallFCD;
-
- // Build tccc180[].
- // gennorm2 enforces lccc=0 for c<MIN_CCC_LCCC_CP=U+0300.
- uint8_t bits=0;
- for(UChar c=0; c<0x180; bits>>=1) {
- if((c&0xff)==0) {
- bits=smallFCD[c>>8]; // one byte per 0x100 code points
- }
- if(bits&1) {
- for(int i=0; i<0x20; ++i, ++c) {
- tccc180[c]=(uint8_t)getFCD16FromNormData(c);
- }
- } else {
- uprv_memset(tccc180+c, 0, 0x20);
- c+=0x20;
- }
- }
}
-uint8_t Normalizer2Impl::getTrailCCFromCompYesAndZeroCC(const UChar *cpStart, const UChar *cpLimit) const {
- UChar32 c;
- if(cpStart==(cpLimit-1)) {
- c=*cpStart;
- } else {
- c=U16_GET_SUPPLEMENTARY(cpStart[0], cpStart[1]);
- }
- uint16_t prevNorm16=getNorm16(c);
- if(prevNorm16<=minYesNo) {
- return 0; // yesYes and Hangul LV/LVT have ccc=tccc=0
- } else {
- return (uint8_t)(*getMapping(prevNorm16)>>8); // tccc from yesNo
- }
-}
-
-namespace {
-
class LcccContext {
public:
LcccContext(const Normalizer2Impl &ni, UnicodeSet &s) : impl(ni), set(s) {}
void handleRange(UChar32 start, UChar32 end, uint16_t norm16) {
- if(impl.isAlgorithmicNoNo(norm16)) {
- // Range of code points with same-norm16-value algorithmic decompositions.
- // They might have different non-zero FCD16 values.
- do {
- uint16_t fcd16=impl.getFCD16(start);
- if(fcd16>0xff) { set.add(start); }
- } while(++start<=end);
- } else {
+ if (norm16 > Normalizer2Impl::MIN_NORMAL_MAYBE_YES &&
+ norm16 != Normalizer2Impl::JAMO_VT) {
+ set.add(start, end);
+ } else if (impl.minNoNoCompNoMaybeCC <= norm16 && norm16 < impl.limitNoNo) {
uint16_t fcd16=impl.getFCD16(start);
if(fcd16>0xff) { set.add(start, end); }
}
@@ -335,6 +464,8 @@
UnicodeSet &set;
};
+namespace {
+
struct PropertyStartsContext {
PropertyStartsContext(const Normalizer2Impl &ni, const USetAdder *adder)
: impl(ni), sa(adder) {}
@@ -359,7 +490,8 @@
const PropertyStartsContext *ctx=(const PropertyStartsContext *)context;
const USetAdder *sa=ctx->sa;
sa->add(sa->set, start);
- if(start!=end && ctx->impl.isAlgorithmicNoNo((uint16_t)value)) {
+ if (start != end && ctx->impl.isAlgorithmicNoNo((uint16_t)value) &&
+ (value & Normalizer2Impl::DELTA_TCCC_MASK) > Normalizer2Impl::DELTA_TCCC_1) {
// Range of code points with same-norm16-value algorithmic decompositions.
// They might have different non-zero FCD16 values.
uint16_t prevFCD16=ctx->impl.getFCD16(start);
@@ -391,7 +523,6 @@
void
Normalizer2Impl::addLcccChars(UnicodeSet &set) const {
- /* add the start code point of each same-value range of each trie */
LcccContext context(*this, set);
utrie2_enum(normTrie, NULL, enumLcccRange, &context);
}
@@ -568,77 +699,174 @@
// fail the quick check loop and/or where the quick check loop's overhead
// is unlikely to be amortized.
// Called by the compose() and makeFCD() implementations.
-UBool Normalizer2Impl::decomposeShort(const UChar *src, const UChar *limit,
- ReorderingBuffer &buffer,
- UErrorCode &errorCode) const {
+const UChar *
+Normalizer2Impl::decomposeShort(const UChar *src, const UChar *limit,
+ UBool stopAtCompBoundary, UBool onlyContiguous,
+ ReorderingBuffer &buffer, UErrorCode &errorCode) const {
+ if (U_FAILURE(errorCode)) {
+ return nullptr;
+ }
while(src<limit) {
+ if (stopAtCompBoundary && *src < minCompNoMaybeCP) {
+ return src;
+ }
+ const UChar *prevSrc = src;
UChar32 c;
uint16_t norm16;
UTRIE2_U16_NEXT16(normTrie, src, limit, c, norm16);
+ if (stopAtCompBoundary && norm16HasCompBoundaryBefore(norm16)) {
+ return prevSrc;
+ }
if(!decompose(c, norm16, buffer, errorCode)) {
- return FALSE;
+ return nullptr;
}
+ if (stopAtCompBoundary && norm16HasCompBoundaryAfter(norm16, onlyContiguous)) {
+ return src;
+ }
}
- return TRUE;
+ return src;
}
UBool Normalizer2Impl::decompose(UChar32 c, uint16_t norm16,
ReorderingBuffer &buffer,
UErrorCode &errorCode) const {
- // Only loops for 1:1 algorithmic mappings.
- for(;;) {
- // get the decomposition and the lead and trail cc's
- if(isDecompYes(norm16)) {
- // c does not decompose
+ // get the decomposition and the lead and trail cc's
+ if (norm16 >= limitNoNo) {
+ if (isMaybeOrNonZeroCC(norm16)) {
return buffer.append(c, getCCFromYesOrMaybe(norm16), errorCode);
- } else if(isHangul(norm16)) {
+ }
+ // Maps to an isCompYesAndZeroCC.
+ c=mapAlgorithmic(c, norm16);
+ norm16=getNorm16(c);
+ }
+ if (norm16 < minYesNo) {
+ // c does not decompose
+ return buffer.append(c, 0, errorCode);
+ } else if(isHangulLV(norm16) || isHangulLVT(norm16)) {
+ // Hangul syllable: decompose algorithmically
+ UChar jamos[3];
+ return buffer.appendZeroCC(jamos, jamos+Hangul::decompose(c, jamos), errorCode);
+ }
+ // c decomposes, get everything from the variable-length extra data
+ const uint16_t *mapping=getMapping(norm16);
+ uint16_t firstUnit=*mapping;
+ int32_t length=firstUnit&MAPPING_LENGTH_MASK;
+ uint8_t leadCC, trailCC;
+ trailCC=(uint8_t)(firstUnit>>8);
+ if(firstUnit&MAPPING_HAS_CCC_LCCC_WORD) {
+ leadCC=(uint8_t)(*(mapping-1)>>8);
+ } else {
+ leadCC=0;
+ }
+ return buffer.append((const UChar *)mapping+1, length, leadCC, trailCC, errorCode);
+}
+
+const uint8_t *
+Normalizer2Impl::decomposeShort(const uint8_t *src, const uint8_t *limit,
+ UBool stopAtCompBoundary, UBool onlyContiguous,
+ ReorderingBuffer &buffer, UErrorCode &errorCode) const {
+ if (U_FAILURE(errorCode)) {
+ return nullptr;
+ }
+ while (src < limit) {
+ const uint8_t *prevSrc = src;
+ uint16_t norm16;
+ UTRIE2_U8_NEXT16(normTrie, src, limit, norm16);
+ // Get the decomposition and the lead and trail cc's.
+ UChar32 c = U_SENTINEL;
+ if (norm16 >= limitNoNo) {
+ if (isMaybeOrNonZeroCC(norm16)) {
+ // No boundaries around this character.
+ c = codePointFromValidUTF8(prevSrc, src);
+ if (!buffer.append(c, getCCFromYesOrMaybe(norm16), errorCode)) {
+ return nullptr;
+ }
+ continue;
+ }
+ // Maps to an isCompYesAndZeroCC.
+ if (stopAtCompBoundary) {
+ return prevSrc;
+ }
+ c = codePointFromValidUTF8(prevSrc, src);
+ c = mapAlgorithmic(c, norm16);
+ norm16 = getNorm16(c);
+ } else if (stopAtCompBoundary && norm16 < minNoNoCompNoMaybeCC) {
+ return prevSrc;
+ }
+ // norm16!=INERT guarantees that [prevSrc, src[ is valid UTF-8.
+ // We do not see invalid UTF-8 here because
+ // its norm16==INERT is normalization-inert,
+ // so it gets copied unchanged in the fast path,
+ // and we stop the slow path where invalid UTF-8 begins.
+ U_ASSERT(norm16 != INERT);
+ if (norm16 < minYesNo) {
+ if (c < 0) {
+ c = codePointFromValidUTF8(prevSrc, src);
+ }
+ // does not decompose
+ if (!buffer.append(c, 0, errorCode)) {
+ return nullptr;
+ }
+ } else if (isHangulLV(norm16) || isHangulLVT(norm16)) {
// Hangul syllable: decompose algorithmically
- UChar jamos[3];
- return buffer.appendZeroCC(jamos, jamos+Hangul::decompose(c, jamos), errorCode);
- } else if(isDecompNoAlgorithmic(norm16)) {
- c=mapAlgorithmic(c, norm16);
- norm16=getNorm16(c);
+ if (c < 0) {
+ c = codePointFromValidUTF8(prevSrc, src);
+ }
+ char16_t jamos[3];
+ if (!buffer.appendZeroCC(jamos, jamos+Hangul::decompose(c, jamos), errorCode)) {
+ return nullptr;
+ }
} else {
- // c decomposes, get everything from the variable-length extra data
- const uint16_t *mapping=getMapping(norm16);
- uint16_t firstUnit=*mapping;
- int32_t length=firstUnit&MAPPING_LENGTH_MASK;
- uint8_t leadCC, trailCC;
- trailCC=(uint8_t)(firstUnit>>8);
- if(firstUnit&MAPPING_HAS_CCC_LCCC_WORD) {
- leadCC=(uint8_t)(*(mapping-1)>>8);
+ // The character decomposes, get everything from the variable-length extra data.
+ const uint16_t *mapping = getMapping(norm16);
+ uint16_t firstUnit = *mapping;
+ int32_t length = firstUnit & MAPPING_LENGTH_MASK;
+ uint8_t trailCC = (uint8_t)(firstUnit >> 8);
+ uint8_t leadCC;
+ if (firstUnit & MAPPING_HAS_CCC_LCCC_WORD) {
+ leadCC = (uint8_t)(*(mapping-1) >> 8);
} else {
- leadCC=0;
+ leadCC = 0;
}
- return buffer.append((const UChar *)mapping+1, length, leadCC, trailCC, errorCode);
+ if (!buffer.append((const char16_t *)mapping+1, length, leadCC, trailCC, errorCode)) {
+ return nullptr;
+ }
}
+ if (stopAtCompBoundary && norm16HasCompBoundaryAfter(norm16, onlyContiguous)) {
+ return src;
+ }
}
+ return src;
}
const UChar *
Normalizer2Impl::getDecomposition(UChar32 c, UChar buffer[4], int32_t &length) const {
- const UChar *decomp=NULL;
uint16_t norm16;
- for(;;) {
- if(c<minDecompNoCP || isDecompYes(norm16=getNorm16(c))) {
- // c does not decompose
- return decomp;
- } else if(isHangul(norm16)) {
- // Hangul syllable: decompose algorithmically
- length=Hangul::decompose(c, buffer);
- return buffer;
- } else if(isDecompNoAlgorithmic(norm16)) {
- c=mapAlgorithmic(c, norm16);
- decomp=buffer;
- length=0;
- U16_APPEND_UNSAFE(buffer, length, c);
- } else {
- // c decomposes, get everything from the variable-length extra data
- const uint16_t *mapping=getMapping(norm16);
- length=*mapping&MAPPING_LENGTH_MASK;
- return (const UChar *)mapping+1;
- }
+ if(c<minDecompNoCP || isMaybeOrNonZeroCC(norm16=getNorm16(c))) {
+ // c does not decompose
+ return nullptr;
}
+ const UChar *decomp = nullptr;
+ if(isDecompNoAlgorithmic(norm16)) {
+ // Maps to an isCompYesAndZeroCC.
+ c=mapAlgorithmic(c, norm16);
+ decomp=buffer;
+ length=0;
+ U16_APPEND_UNSAFE(buffer, length, c);
+ // The mapping might decompose further.
+ norm16 = getNorm16(c);
+ }
+ if (norm16 < minYesNo) {
+ return decomp;
+ } else if(isHangulLV(norm16) || isHangulLVT(norm16)) {
+ // Hangul syllable: decompose algorithmically
+ length=Hangul::decompose(c, buffer);
+ return buffer;
+ }
+ // c decomposes, get everything from the variable-length extra data
+ const uint16_t *mapping=getMapping(norm16);
+ length=*mapping&MAPPING_LENGTH_MASK;
+ return (const UChar *)mapping+1;
}
// The capacity of the buffer must be 30=MAPPING_LENGTH_MASK-1
@@ -647,13 +875,11 @@
// The maximum length of a normal mapping is 31=MAPPING_LENGTH_MASK.
const UChar *
Normalizer2Impl::getRawDecomposition(UChar32 c, UChar buffer[30], int32_t &length) const {
- // We do not loop in this method because an algorithmic mapping itself
- // becomes a final result rather than having to be decomposed recursively.
uint16_t norm16;
if(c<minDecompNoCP || isDecompYes(norm16=getNorm16(c))) {
// c does not decompose
return NULL;
- } else if(isHangul(norm16)) {
+ } else if(isHangulLV(norm16) || isHangulLVT(norm16)) {
// Hangul syllable: decompose algorithmically
Hangul::getRawDecomposition(c, buffer);
length=2;
@@ -663,30 +889,29 @@
length=0;
U16_APPEND_UNSAFE(buffer, length, c);
return buffer;
- } else {
- // c decomposes, get everything from the variable-length extra data
- const uint16_t *mapping=getMapping(norm16);
- uint16_t firstUnit=*mapping;
- int32_t mLength=firstUnit&MAPPING_LENGTH_MASK; // length of normal mapping
- if(firstUnit&MAPPING_HAS_RAW_MAPPING) {
- // Read the raw mapping from before the firstUnit and before the optional ccc/lccc word.
- // Bit 7=MAPPING_HAS_CCC_LCCC_WORD
- const uint16_t *rawMapping=mapping-((firstUnit>>7)&1)-1;
- uint16_t rm0=*rawMapping;
- if(rm0<=MAPPING_LENGTH_MASK) {
- length=rm0;
- return (const UChar *)rawMapping-rm0;
- } else {
- // Copy the normal mapping and replace its first two code units with rm0.
- buffer[0]=(UChar)rm0;
- u_memcpy(buffer+1, (const UChar *)mapping+1+2, mLength-2);
- length=mLength-1;
- return buffer;
- }
+ }
+ // c decomposes, get everything from the variable-length extra data
+ const uint16_t *mapping=getMapping(norm16);
+ uint16_t firstUnit=*mapping;
+ int32_t mLength=firstUnit&MAPPING_LENGTH_MASK; // length of normal mapping
+ if(firstUnit&MAPPING_HAS_RAW_MAPPING) {
+ // Read the raw mapping from before the firstUnit and before the optional ccc/lccc word.
+ // Bit 7=MAPPING_HAS_CCC_LCCC_WORD
+ const uint16_t *rawMapping=mapping-((firstUnit>>7)&1)-1;
+ uint16_t rm0=*rawMapping;
+ if(rm0<=MAPPING_LENGTH_MASK) {
+ length=rm0;
+ return (const UChar *)rawMapping-rm0;
} else {
- length=mLength;
- return (const UChar *)mapping+1;
+ // Copy the normal mapping and replace its first two code units with rm0.
+ buffer[0]=(UChar)rm0;
+ u_memcpy(buffer+1, (const UChar *)mapping+1+2, mLength-2);
+ length=mLength-1;
+ return buffer;
}
+ } else {
+ length=mLength;
+ return (const UChar *)mapping+1;
}
}
@@ -717,43 +942,60 @@
}
}
-// Note: hasDecompBoundary() could be implemented as aliases to
-// hasFCDBoundaryBefore() and hasFCDBoundaryAfter()
-// at the cost of building the FCD trie for a decomposition normalizer.
-UBool Normalizer2Impl::hasDecompBoundary(UChar32 c, UBool before) const {
- for(;;) {
- if(c<minDecompNoCP) {
- return TRUE;
+UBool Normalizer2Impl::hasDecompBoundaryBefore(UChar32 c) const {
+ return c < minLcccCP || (c <= 0xffff && !singleLeadMightHaveNonZeroFCD16(c)) ||
+ norm16HasDecompBoundaryBefore(getNorm16(c));
+}
+
+UBool Normalizer2Impl::norm16HasDecompBoundaryBefore(uint16_t norm16) const {
+ if (norm16 < minNoNoCompNoMaybeCC) {
+ return TRUE;
+ }
+ if (norm16 >= limitNoNo) {
+ return norm16 <= MIN_NORMAL_MAYBE_YES || norm16 == JAMO_VT;
+ }
+ // c decomposes, get everything from the variable-length extra data
+ const uint16_t *mapping=getMapping(norm16);
+ uint16_t firstUnit=*mapping;
+ // TRUE if leadCC==0 (hasFCDBoundaryBefore())
+ return (firstUnit&MAPPING_HAS_CCC_LCCC_WORD)==0 || (*(mapping-1)&0xff00)==0;
+}
+
+UBool Normalizer2Impl::hasDecompBoundaryAfter(UChar32 c) const {
+ if (c < minDecompNoCP) {
+ return TRUE;
+ }
+ if (c <= 0xffff && !singleLeadMightHaveNonZeroFCD16(c)) {
+ return TRUE;
+ }
+ return norm16HasDecompBoundaryAfter(getNorm16(c));
+}
+
+UBool Normalizer2Impl::norm16HasDecompBoundaryAfter(uint16_t norm16) const {
+ if(norm16 <= minYesNo || isHangulLVT(norm16)) {
+ return TRUE;
+ }
+ if (norm16 >= limitNoNo) {
+ if (isMaybeOrNonZeroCC(norm16)) {
+ return norm16 <= MIN_NORMAL_MAYBE_YES || norm16 == JAMO_VT;
}
- uint16_t norm16=getNorm16(c);
- if(isHangul(norm16) || isDecompYesAndZeroCC(norm16)) {
- return TRUE;
- } else if(norm16>MIN_NORMAL_MAYBE_YES) {
- return FALSE; // ccc!=0
- } else if(isDecompNoAlgorithmic(norm16)) {
- c=mapAlgorithmic(c, norm16);
- } else {
- // c decomposes, get everything from the variable-length extra data
- const uint16_t *mapping=getMapping(norm16);
- uint16_t firstUnit=*mapping;
- if((firstUnit&MAPPING_LENGTH_MASK)==0) {
- return FALSE;
- }
- if(!before) {
- // decomp after-boundary: same as hasFCDBoundaryAfter(),
- // fcd16<=1 || trailCC==0
- if(firstUnit>0x1ff) {
- return FALSE; // trailCC>1
- }
- if(firstUnit<=0xff) {
- return TRUE; // trailCC==0
- }
- // if(trailCC==1) test leadCC==0, same as checking for before-boundary
- }
- // TRUE if leadCC==0 (hasFCDBoundaryBefore())
- return (firstUnit&MAPPING_HAS_CCC_LCCC_WORD)==0 || (*(mapping-1)&0xff00)==0;
- }
+ // Maps to an isCompYesAndZeroCC.
+ return (norm16 & DELTA_TCCC_MASK) <= DELTA_TCCC_1;
}
+ // c decomposes, get everything from the variable-length extra data
+ const uint16_t *mapping=getMapping(norm16);
+ uint16_t firstUnit=*mapping;
+ // decomp after-boundary: same as hasFCDBoundaryAfter(),
+ // fcd16<=1 || trailCC==0
+ if(firstUnit>0x1ff) {
+ return FALSE; // trailCC>1
+ }
+ if(firstUnit<=0xff) {
+ return TRUE; // trailCC==0
+ }
+ // if(trailCC==1) test leadCC==0, same as checking for before-boundary
+ // TRUE if leadCC==0 (hasFCDBoundaryBefore())
+ return (firstUnit&MAPPING_HAS_CCC_LCCC_WORD)==0 || (*(mapping-1)&0xff00)==0;
}
/*
@@ -1031,6 +1273,7 @@
if(isInert(norm16)) {
return U_SENTINEL;
} else if(norm16<minYesNoMappingsOnly) {
+ // a combines forward.
if(isJamoL(norm16)) {
b-=Hangul::JAMO_V_BASE;
if(0<=b && b<Hangul::JAMO_V_COUNT) {
@@ -1041,9 +1284,9 @@
} else {
return U_SENTINEL;
}
- } else if(isHangul(norm16)) {
+ } else if(isHangulLV(norm16)) {
b-=Hangul::JAMO_T_BASE;
- if(Hangul::isHangulWithoutJamoT(a) && 0<b && b<Hangul::JAMO_T_COUNT) { // not b==0!
+ if(0<b && b<Hangul::JAMO_T_COUNT) { // not b==0!
return a+b;
} else {
return U_SENTINEL;
@@ -1050,10 +1293,10 @@
}
} else {
// 'a' has a compositions list in extraData
- list=extraData+norm16;
+ list=getMapping(norm16);
if(norm16>minYesNo) { // composite 'a' has both mapping & compositions list
list+= // mapping pointer
- 1+ // +1 to skip the first unit with the mapping lenth
+ 1+ // +1 to skip the first unit with the mapping length
(*list&MAPPING_LENGTH_MASK); // + mapping length
}
}
@@ -1060,7 +1303,7 @@
} else if(norm16<minMaybeYes || MIN_NORMAL_MAYBE_YES<=norm16) {
return U_SENTINEL;
} else {
- list=maybeYesCompositions+norm16-minMaybeYes;
+ list=getCompositionsListForMaybe(norm16);
}
if(b<0 || 0x10ffff<b) { // combine(list, b) requires a valid code point b
return U_SENTINEL;
@@ -1082,18 +1325,6 @@
UBool doCompose,
ReorderingBuffer &buffer,
UErrorCode &errorCode) const {
- /*
- * prevBoundary points to the last character before the current one
- * that has a composition boundary before it with ccc==0 and quick check "yes".
- * Keeping track of prevBoundary saves us looking for a composition boundary
- * when we find a "no" or "maybe".
- *
- * When we back out from prevSrc back to prevBoundary,
- * then we also remove those same characters (which had been simply copied
- * or canonically-order-inserted) from the ReorderingBuffer.
- * Therefore, at all times, the [prevBoundary..prevSrc[ source units
- * must correspond 1:1 to destination units at the end of the destination buffer.
- */
const UChar *prevBoundary=src;
UChar32 minNoMaybeCP=minCompNoMaybeCP;
if(limit==NULL) {
@@ -1103,231 +1334,260 @@
if(U_FAILURE(errorCode)) {
return FALSE;
}
- if(prevBoundary<src) {
- // Set prevBoundary to the last character in the prefix.
- prevBoundary=src-1;
+ limit=u_strchr(src, 0);
+ if (prevBoundary != src) {
+ if (hasCompBoundaryAfter(*(src-1), onlyContiguous)) {
+ prevBoundary = src;
+ } else {
+ buffer.removeSuffix(1);
+ prevBoundary = --src;
+ }
}
- limit=u_strchr(src, 0);
}
- const UChar *prevSrc;
- UChar32 c=0;
- uint16_t norm16=0;
-
- // only for isNormalized
- uint8_t prevCC=0;
-
- for(;;) {
- // count code units below the minimum or with irrelevant data for the quick check
- for(prevSrc=src; src!=limit;) {
+ for (;;) {
+ // Fast path: Scan over a sequence of characters below the minimum "no or maybe" code point,
+ // or with (compYes && ccc==0) properties.
+ const UChar *prevSrc;
+ UChar32 c = 0;
+ uint16_t norm16 = 0;
+ for (;;) {
+ if (src == limit) {
+ if (prevBoundary != limit && doCompose) {
+ buffer.appendZeroCC(prevBoundary, limit, errorCode);
+ }
+ return TRUE;
+ }
if( (c=*src)<minNoMaybeCP ||
isCompYesAndZeroCC(norm16=UTRIE2_GET16_FROM_U16_SINGLE_LEAD(normTrie, c))
) {
++src;
- } else if(!U16_IS_SURROGATE(c)) {
- break;
} else {
- UChar c2;
- if(U16_IS_SURROGATE_LEAD(c)) {
- if((src+1)!=limit && U16_IS_TRAIL(c2=src[1])) {
- c=U16_GET_SUPPLEMENTARY(c, c2);
+ prevSrc = src++;
+ if(!U16_IS_SURROGATE(c)) {
+ break;
+ } else {
+ UChar c2;
+ if(U16_IS_SURROGATE_LEAD(c)) {
+ if(src!=limit && U16_IS_TRAIL(c2=*src)) {
+ ++src;
+ c=U16_GET_SUPPLEMENTARY(c, c2);
+ }
+ } else /* trail surrogate */ {
+ if(prevBoundary<prevSrc && U16_IS_LEAD(c2=*(prevSrc-1))) {
+ --prevSrc;
+ c=U16_GET_SUPPLEMENTARY(c2, c);
+ }
}
- } else /* trail surrogate */ {
- if(prevSrc<src && U16_IS_LEAD(c2=*(src-1))) {
- --src;
- c=U16_GET_SUPPLEMENTARY(c2, c);
+ if(!isCompYesAndZeroCC(norm16=getNorm16(c))) {
+ break;
}
}
- if(isCompYesAndZeroCC(norm16=getNorm16(c))) {
- src+=U16_LENGTH(c);
- } else {
- break;
- }
}
}
- // copy these code units all at once
- if(src!=prevSrc) {
- if(doCompose) {
- if(!buffer.appendZeroCC(prevSrc, src, errorCode)) {
- break;
+ // isCompYesAndZeroCC(norm16) is false, that is, norm16>=minNoNo.
+ // The current character is either a "noNo" (has a mapping)
+ // or a "maybeYes" (combines backward)
+ // or a "yesYes" with ccc!=0.
+ // It is not a Hangul syllable or Jamo L because those have "yes" properties.
+
+ // Medium-fast path: Handle cases that do not require full decomposition and recomposition.
+ if (!isMaybeOrNonZeroCC(norm16)) { // minNoNo <= norm16 < minMaybeYes
+ if (!doCompose) {
+ return FALSE;
+ }
+ // Fast path for mapping a character that is immediately surrounded by boundaries.
+ // In this case, we need not decompose around the current character.
+ if (isDecompNoAlgorithmic(norm16)) {
+ // Maps to a single isCompYesAndZeroCC character
+ // which also implies hasCompBoundaryBefore.
+ if (norm16HasCompBoundaryAfter(norm16, onlyContiguous) ||
+ hasCompBoundaryBefore(src, limit)) {
+ if (prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) {
+ break;
+ }
+ if(!buffer.append(mapAlgorithmic(c, norm16), 0, errorCode)) {
+ break;
+ }
+ prevBoundary = src;
+ continue;
}
- } else {
- prevCC=0;
+ } else if (norm16 < minNoNoCompBoundaryBefore) {
+ // The mapping is comp-normalized which also implies hasCompBoundaryBefore.
+ if (norm16HasCompBoundaryAfter(norm16, onlyContiguous) ||
+ hasCompBoundaryBefore(src, limit)) {
+ if (prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) {
+ break;
+ }
+ const UChar *mapping = reinterpret_cast<const UChar *>(getMapping(norm16));
+ int32_t length = *mapping++ & MAPPING_LENGTH_MASK;
+ if(!buffer.appendZeroCC(mapping, mapping + length, errorCode)) {
+ break;
+ }
+ prevBoundary = src;
+ continue;
+ }
+ } else if (norm16 >= minNoNoEmpty) {
+ // The current character maps to nothing.
+ // Simply omit it from the output if there is a boundary before _or_ after it.
+ // The character itself implies no boundaries.
+ if (hasCompBoundaryBefore(src, limit) ||
+ hasCompBoundaryAfter(prevBoundary, prevSrc, onlyContiguous)) {
+ if (prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) {
+ break;
+ }
+ prevBoundary = src;
+ continue;
+ }
}
- if(src==limit) {
- break;
- }
- // Set prevBoundary to the last character in the quick check loop.
- prevBoundary=src-1;
- if( U16_IS_TRAIL(*prevBoundary) && prevSrc<prevBoundary &&
- U16_IS_LEAD(*(prevBoundary-1))
- ) {
- --prevBoundary;
- }
- // The start of the current character (c).
- prevSrc=src;
- } else if(src==limit) {
- break;
- }
-
- src+=U16_LENGTH(c);
- /*
- * isCompYesAndZeroCC(norm16) is false, that is, norm16>=minNoNo.
- * c is either a "noNo" (has a mapping) or a "maybeYes" (combines backward)
- * or has ccc!=0.
- * Check for Jamo V/T, then for regular characters.
- * c is not a Hangul syllable or Jamo L because those have "yes" properties.
- */
- if(isJamoVT(norm16) && prevBoundary!=prevSrc) {
+ // Other "noNo" type, or need to examine more text around this character:
+ // Fall through to the slow path.
+ } else if (isJamoVT(norm16) && prevBoundary != prevSrc) {
UChar prev=*(prevSrc-1);
- UBool needToDecompose=FALSE;
if(c<Hangul::JAMO_T_BASE) {
- // c is a Jamo Vowel, compose with previous Jamo L and following Jamo T.
- prev=(UChar)(prev-Hangul::JAMO_L_BASE);
- if(prev<Hangul::JAMO_L_COUNT) {
- if(!doCompose) {
+ // The current character is a Jamo Vowel,
+ // compose with previous Jamo L and following Jamo T.
+ UChar l = (UChar)(prev-Hangul::JAMO_L_BASE);
+ if(l<Hangul::JAMO_L_COUNT) {
+ if (!doCompose) {
return FALSE;
}
- UChar syllable=(UChar)
- (Hangul::HANGUL_BASE+
- (prev*Hangul::JAMO_V_COUNT+(c-Hangul::JAMO_V_BASE))*
- Hangul::JAMO_T_COUNT);
- UChar t;
- if(src!=limit && (t=(UChar)(*src-Hangul::JAMO_T_BASE))<Hangul::JAMO_T_COUNT) {
+ int32_t t;
+ if (src != limit &&
+ 0 < (t = ((int32_t)*src - Hangul::JAMO_T_BASE)) &&
+ t < Hangul::JAMO_T_COUNT) {
+ // The next character is a Jamo T.
++src;
- syllable+=t; // The next character was a Jamo T.
- prevBoundary=src;
- buffer.setLastChar(syllable);
+ } else if (hasCompBoundaryBefore(src, limit)) {
+ // No Jamo T follows, not even via decomposition.
+ t = 0;
+ } else {
+ t = -1;
+ }
+ if (t >= 0) {
+ UChar32 syllable = Hangul::HANGUL_BASE +
+ (l*Hangul::JAMO_V_COUNT + (c-Hangul::JAMO_V_BASE)) *
+ Hangul::JAMO_T_COUNT + t;
+ --prevSrc; // Replace the Jamo L as well.
+ if (prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) {
+ break;
+ }
+ if(!buffer.appendBMP((UChar)syllable, 0, errorCode)) {
+ break;
+ }
+ prevBoundary = src;
continue;
}
// If we see L+V+x where x!=T then we drop to the slow path,
// decompose and recompose.
// This is to deal with NFKC finding normal L and V but a
- // compatibility variant of a T. We need to either fully compose that
- // combination here (which would complicate the code and may not work
- // with strange custom data) or use the slow path -- or else our replacing
- // two input characters (L+V) with one output character (LV syllable)
- // would violate the invariant that [prevBoundary..prevSrc[ has the same
- // length as what we appended to the buffer since prevBoundary.
- needToDecompose=TRUE;
+ // compatibility variant of a T.
+ // We need to either fully compose that combination here
+ // (which would complicate the code and may not work with strange custom data)
+ // or use the slow path.
}
- } else if(Hangul::isHangulWithoutJamoT(prev)) {
- // c is a Jamo Trailing consonant,
+ } else if (Hangul::isHangulLV(prev)) {
+ // The current character is a Jamo Trailing consonant,
// compose with previous Hangul LV that does not contain a Jamo T.
- if(!doCompose) {
+ if (!doCompose) {
return FALSE;
}
- buffer.setLastChar((UChar)(prev+c-Hangul::JAMO_T_BASE));
- prevBoundary=src;
- continue;
- }
- if(!needToDecompose) {
- // The Jamo V/T did not compose into a Hangul syllable.
- if(doCompose) {
- if(!buffer.appendBMP((UChar)c, 0, errorCode)) {
- break;
- }
- } else {
- prevCC=0;
+ UChar32 syllable = prev + c - Hangul::JAMO_T_BASE;
+ --prevSrc; // Replace the Hangul LV as well.
+ if (prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) {
+ break;
}
+ if(!buffer.appendBMP((UChar)syllable, 0, errorCode)) {
+ break;
+ }
+ prevBoundary = src;
continue;
}
- }
- /*
- * Source buffer pointers:
- *
- * all done quick check current char not yet
- * "yes" but (c) processed
- * may combine
- * forward
- * [-------------[-------------[-------------[-------------[
- * | | | | |
- * orig. src prevBoundary prevSrc src limit
- *
- *
- * Destination buffer pointers inside the ReorderingBuffer:
- *
- * all done might take not filled yet
- * characters for
- * reordering
- * [-------------[-------------[-------------[
- * | | | |
- * start reorderStart limit |
- * +remainingCap.+
- */
- if(norm16>=MIN_YES_YES_WITH_CC) {
- uint8_t cc=(uint8_t)norm16; // cc!=0
- if( onlyContiguous && // FCC
- (doCompose ? buffer.getLastCC() : prevCC)==0 &&
- prevBoundary<prevSrc &&
- // buffer.getLastCC()==0 && prevBoundary<prevSrc tell us that
- // [prevBoundary..prevSrc[ (which is exactly one character under these conditions)
- // passed the quick check "yes && ccc==0" test.
- // Check whether the last character was a "yesYes" or a "yesNo".
- // If a "yesNo", then we get its trailing ccc from its
- // mapping and check for canonical order.
- // All other cases are ok.
- getTrailCCFromCompYesAndZeroCC(prevBoundary, prevSrc)>cc
- ) {
+ // No matching context, or may need to decompose surrounding text first:
+ // Fall through to the slow path.
+ } else if (norm16 > JAMO_VT) { // norm16 >= MIN_YES_YES_WITH_CC
+ // One or more combining marks that do not combine-back:
+ // Check for canonical order, copy unchanged if ok and
+ // if followed by a character with a boundary-before.
+ uint8_t cc = getCCFromNormalYesOrMaybe(norm16); // cc!=0
+ if (onlyContiguous /* FCC */ && getPreviousTrailCC(prevBoundary, prevSrc) > cc) {
// Fails FCD test, need to decompose and contiguously recompose.
- if(!doCompose) {
+ if (!doCompose) {
return FALSE;
}
- } else if(doCompose) {
- if(!buffer.append(c, cc, errorCode)) {
- break;
+ } else {
+ // If !onlyContiguous (not FCC), then we ignore the tccc of
+ // the previous character which passed the quick check "yes && ccc==0" test.
+ const UChar *nextSrc;
+ uint16_t n16;
+ for (;;) {
+ if (src == limit) {
+ if (doCompose) {
+ buffer.appendZeroCC(prevBoundary, limit, errorCode);
+ }
+ return TRUE;
+ }
+ uint8_t prevCC = cc;
+ nextSrc = src;
+ UTRIE2_U16_NEXT16(normTrie, nextSrc, limit, c, n16);
+ if (n16 >= MIN_YES_YES_WITH_CC) {
+ cc = getCCFromNormalYesOrMaybe(n16);
+ if (prevCC > cc) {
+ if (!doCompose) {
+ return FALSE;
+ }
+ break;
+ }
+ } else {
+ break;
+ }
+ src = nextSrc;
}
- continue;
- } else if(prevCC<=cc) {
- prevCC=cc;
- continue;
- } else {
- return FALSE;
+ // src is after the last in-order combining mark.
+ // If there is a boundary here, then we continue with no change.
+ if (norm16HasCompBoundaryBefore(n16)) {
+ if (isCompYesAndZeroCC(n16)) {
+ src = nextSrc;
+ }
+ continue;
+ }
+ // Use the slow path. There is no boundary in [prevSrc, src[.
}
- } else if(!doCompose && !isMaybeOrNonZeroCC(norm16)) {
- return FALSE;
}
- /*
- * Find appropriate boundaries around this character,
- * decompose the source text from between the boundaries,
- * and recompose it.
- *
- * We may need to remove the last few characters from the ReorderingBuffer
- * to account for source text that was copied or appended
- * but needs to take part in the recomposition.
- */
-
- /*
- * Find the last composition boundary in [prevBoundary..src[.
- * It is either the decomposition of the current character (at prevSrc),
- * or prevBoundary.
- */
- if(hasCompBoundaryBefore(c, norm16)) {
- prevBoundary=prevSrc;
- } else if(doCompose) {
- buffer.removeSuffix((int32_t)(prevSrc-prevBoundary));
+ // Slow path: Find the nearest boundaries around the current character,
+ // decompose and recompose.
+ if (prevBoundary != prevSrc && !norm16HasCompBoundaryBefore(norm16)) {
+ const UChar *p = prevSrc;
+ UTRIE2_U16_PREV16(normTrie, prevBoundary, p, c, norm16);
+ if (!norm16HasCompBoundaryAfter(norm16, onlyContiguous)) {
+ prevSrc = p;
+ }
}
-
- // Find the next composition boundary in [src..limit[ -
- // modifies src to point to the next starter.
- src=(UChar *)findNextCompBoundary(src, limit);
-
- // Decompose [prevBoundary..src[ into the buffer and then recompose that part of it.
+ if (doCompose && prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) {
+ break;
+ }
int32_t recomposeStartIndex=buffer.length();
- if(!decomposeShort(prevBoundary, src, buffer, errorCode)) {
+ // We know there is not a boundary here.
+ decomposeShort(prevSrc, src, FALSE /* !stopAtCompBoundary */, onlyContiguous,
+ buffer, errorCode);
+ // Decompose until the next boundary.
+ src = decomposeShort(src, limit, TRUE /* stopAtCompBoundary */, onlyContiguous,
+ buffer, errorCode);
+ if (U_FAILURE(errorCode)) {
break;
}
+ if ((src - prevSrc) > INT32_MAX) { // guard before buffer.equals()
+ errorCode = U_INDEX_OUTOFBOUNDS_ERROR;
+ return TRUE;
+ }
recompose(buffer, recomposeStartIndex, onlyContiguous);
if(!doCompose) {
- if(!buffer.equals(prevBoundary, src)) {
+ if(!buffer.equals(prevSrc, src)) {
return FALSE;
}
buffer.remove();
- prevCC=0;
}
-
- // Move to the next starter. We never need to look back before this point again.
prevBoundary=src;
}
return TRUE;
@@ -1340,30 +1600,28 @@
Normalizer2Impl::composeQuickCheck(const UChar *src, const UChar *limit,
UBool onlyContiguous,
UNormalizationCheckResult *pQCResult) const {
- /*
- * prevBoundary points to the last character before the current one
- * that has a composition boundary before it with ccc==0 and quick check "yes".
- */
const UChar *prevBoundary=src;
UChar32 minNoMaybeCP=minCompNoMaybeCP;
if(limit==NULL) {
UErrorCode errorCode=U_ZERO_ERROR;
src=copyLowPrefixFromNulTerminated(src, minNoMaybeCP, NULL, errorCode);
- if(prevBoundary<src) {
- // Set prevBoundary to the last character in the prefix.
- prevBoundary=src-1;
+ limit=u_strchr(src, 0);
+ if (prevBoundary != src) {
+ if (hasCompBoundaryAfter(*(src-1), onlyContiguous)) {
+ prevBoundary = src;
+ } else {
+ prevBoundary = --src;
+ }
}
- limit=u_strchr(src, 0);
}
- const UChar *prevSrc;
- UChar32 c=0;
- uint16_t norm16=0;
- uint8_t prevCC=0;
-
for(;;) {
- // count code units below the minimum or with irrelevant data for the quick check
- for(prevSrc=src;;) {
+ // Fast path: Scan over a sequence of characters below the minimum "no or maybe" code point,
+ // or with (compYes && ccc==0) properties.
+ const UChar *prevSrc;
+ UChar32 c = 0;
+ uint16_t norm16 = 0;
+ for (;;) {
if(src==limit) {
return src;
}
@@ -1371,72 +1629,93 @@
isCompYesAndZeroCC(norm16=UTRIE2_GET16_FROM_U16_SINGLE_LEAD(normTrie, c))
) {
++src;
- } else if(!U16_IS_SURROGATE(c)) {
- break;
} else {
- UChar c2;
- if(U16_IS_SURROGATE_LEAD(c)) {
- if((src+1)!=limit && U16_IS_TRAIL(c2=src[1])) {
- c=U16_GET_SUPPLEMENTARY(c, c2);
+ prevSrc = src++;
+ if(!U16_IS_SURROGATE(c)) {
+ break;
+ } else {
+ UChar c2;
+ if(U16_IS_SURROGATE_LEAD(c)) {
+ if(src!=limit && U16_IS_TRAIL(c2=*src)) {
+ ++src;
+ c=U16_GET_SUPPLEMENTARY(c, c2);
+ }
+ } else /* trail surrogate */ {
+ if(prevBoundary<prevSrc && U16_IS_LEAD(c2=*(prevSrc-1))) {
+ --prevSrc;
+ c=U16_GET_SUPPLEMENTARY(c2, c);
+ }
}
- } else /* trail surrogate */ {
- if(prevSrc<src && U16_IS_LEAD(c2=*(src-1))) {
- --src;
- c=U16_GET_SUPPLEMENTARY(c2, c);
+ if(!isCompYesAndZeroCC(norm16=getNorm16(c))) {
+ break;
}
}
- if(isCompYesAndZeroCC(norm16=getNorm16(c))) {
- src+=U16_LENGTH(c);
+ }
+ }
+ // isCompYesAndZeroCC(norm16) is false, that is, norm16>=minNoNo.
+ // The current character is either a "noNo" (has a mapping)
+ // or a "maybeYes" (combines backward)
+ // or a "yesYes" with ccc!=0.
+ // It is not a Hangul syllable or Jamo L because those have "yes" properties.
+
+ uint16_t prevNorm16 = INERT;
+ if (prevBoundary != prevSrc) {
+ if (norm16HasCompBoundaryBefore(norm16)) {
+ prevBoundary = prevSrc;
+ } else {
+ const UChar *p = prevSrc;
+ uint16_t n16;
+ UTRIE2_U16_PREV16(normTrie, prevBoundary, p, c, n16);
+ if (norm16HasCompBoundaryAfter(n16, onlyContiguous)) {
+ prevBoundary = prevSrc;
} else {
- break;
+ prevBoundary = p;
+ prevNorm16 = n16;
}
}
}
- if(src!=prevSrc) {
- // Set prevBoundary to the last character in the quick check loop.
- prevBoundary=src-1;
- if( U16_IS_TRAIL(*prevBoundary) && prevSrc<prevBoundary &&
- U16_IS_LEAD(*(prevBoundary-1))
- ) {
- --prevBoundary;
- }
- prevCC=0;
- // The start of the current character (c).
- prevSrc=src;
- }
- src+=U16_LENGTH(c);
- /*
- * isCompYesAndZeroCC(norm16) is false, that is, norm16>=minNoNo.
- * c is either a "noNo" (has a mapping) or a "maybeYes" (combines backward)
- * or has ccc!=0.
- */
if(isMaybeOrNonZeroCC(norm16)) {
uint8_t cc=getCCFromYesOrMaybe(norm16);
- if( onlyContiguous && // FCC
- cc!=0 &&
- prevCC==0 &&
- prevBoundary<prevSrc &&
- // prevCC==0 && prevBoundary<prevSrc tell us that
- // [prevBoundary..prevSrc[ (which is exactly one character under these conditions)
- // passed the quick check "yes && ccc==0" test.
- // Check whether the last character was a "yesYes" or a "yesNo".
- // If a "yesNo", then we get its trailing ccc from its
- // mapping and check for canonical order.
- // All other cases are ok.
- getTrailCCFromCompYesAndZeroCC(prevBoundary, prevSrc)>cc
- ) {
- // Fails FCD test.
- } else if(prevCC<=cc || cc==0) {
- prevCC=cc;
- if(norm16<MIN_YES_YES_WITH_CC) {
- if(pQCResult!=NULL) {
- *pQCResult=UNORM_MAYBE;
+ if (onlyContiguous /* FCC */ && cc != 0 &&
+ getTrailCCFromCompYesAndZeroCC(prevNorm16) > cc) {
+ // The [prevBoundary..prevSrc[ character
+ // passed the quick check "yes && ccc==0" test
+ // but is out of canonical order with the current combining mark.
+ } else {
+ // If !onlyContiguous (not FCC), then we ignore the tccc of
+ // the previous character which passed the quick check "yes && ccc==0" test.
+ const UChar *nextSrc;
+ for (;;) {
+ if (norm16 < MIN_YES_YES_WITH_CC) {
+ if (pQCResult != nullptr) {
+ *pQCResult = UNORM_MAYBE;
+ } else {
+ return prevBoundary;
+ }
+ }
+ if (src == limit) {
+ return src;
+ }
+ uint8_t prevCC = cc;
+ nextSrc = src;
+ UTRIE2_U16_NEXT16(normTrie, nextSrc, limit, c, norm16);
+ if (isMaybeOrNonZeroCC(norm16)) {
+ cc = getCCFromYesOrMaybe(norm16);
+ if (!(prevCC <= cc || cc == 0)) {
+ break;
+ }
} else {
- return prevBoundary;
+ break;
}
+ src = nextSrc;
}
- continue;
+ // src is after the last in-order combining mark.
+ if (isCompYesAndZeroCC(norm16)) {
+ prevBoundary = src;
+ src = nextSrc;
+ continue;
+ }
}
}
if(pQCResult!=NULL) {
@@ -1453,10 +1732,10 @@
ReorderingBuffer &buffer,
UErrorCode &errorCode) const {
if(!buffer.isEmpty()) {
- const UChar *firstStarterInSrc=findNextCompBoundary(src, limit);
+ const UChar *firstStarterInSrc=findNextCompBoundary(src, limit, onlyContiguous);
if(src!=firstStarterInSrc) {
const UChar *lastStarterInDest=findPreviousCompBoundary(buffer.getStart(),
- buffer.getLimit());
+ buffer.getLimit(), onlyContiguous);
int32_t destSuffixLength=(int32_t)(buffer.getLimit()-lastStarterInDest);
UnicodeString middle(lastStarterInDest, destSuffixLength);
buffer.removeSuffix(destSuffixLength);
@@ -1481,135 +1760,391 @@
}
}
-/**
- * Does c have a composition boundary before it?
- * True if its decomposition begins with a character that has
- * ccc=0 && NFC_QC=Yes (isCompYesAndZeroCC()).
- * As a shortcut, this is true if c itself has ccc=0 && NFC_QC=Yes
- * (isCompYesAndZeroCC()) so we need not decompose.
- */
-UBool Normalizer2Impl::hasCompBoundaryBefore(UChar32 c, uint16_t norm16) const {
- for(;;) {
- if(isCompYesAndZeroCC(norm16)) {
+UBool
+Normalizer2Impl::composeUTF8(uint32_t options, UBool onlyContiguous,
+ const uint8_t *src, const uint8_t *limit,
+ ByteSink *sink, Edits *edits, UErrorCode &errorCode) const {
+ U_ASSERT(limit != nullptr);
+ UnicodeString s16;
+ uint8_t minNoMaybeLead = leadByteForCP(minCompNoMaybeCP);
+ const uint8_t *prevBoundary = src;
+
+ for (;;) {
+ // Fast path: Scan over a sequence of characters below the minimum "no or maybe" code point,
+ // or with (compYes && ccc==0) properties.
+ const uint8_t *prevSrc;
+ uint16_t norm16 = 0;
+ for (;;) {
+ if (src == limit) {
+ if (prevBoundary != limit && sink != nullptr) {
+ ByteSinkUtil::appendUnchanged(prevBoundary, limit,
+ *sink, options, edits, errorCode);
+ }
+ return TRUE;
+ }
+ if (*src < minNoMaybeLead) {
+ ++src;
+ } else {
+ prevSrc = src;
+ UTRIE2_U8_NEXT16(normTrie, src, limit, norm16);
+ if (!isCompYesAndZeroCC(norm16)) {
+ break;
+ }
+ }
+ }
+ // isCompYesAndZeroCC(norm16) is false, that is, norm16>=minNoNo.
+ // The current character is either a "noNo" (has a mapping)
+ // or a "maybeYes" (combines backward)
+ // or a "yesYes" with ccc!=0.
+ // It is not a Hangul syllable or Jamo L because those have "yes" properties.
+
+ // Medium-fast path: Handle cases that do not require full decomposition and recomposition.
+ if (!isMaybeOrNonZeroCC(norm16)) { // minNoNo <= norm16 < minMaybeYes
+ if (sink == nullptr) {
+ return FALSE;
+ }
+ // Fast path for mapping a character that is immediately surrounded by boundaries.
+ // In this case, we need not decompose around the current character.
+ if (isDecompNoAlgorithmic(norm16)) {
+ // Maps to a single isCompYesAndZeroCC character
+ // which also implies hasCompBoundaryBefore.
+ if (norm16HasCompBoundaryAfter(norm16, onlyContiguous) ||
+ hasCompBoundaryBefore(src, limit)) {
+ if (prevBoundary != prevSrc &&
+ !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc,
+ *sink, options, edits, errorCode)) {
+ break;
+ }
+ appendCodePointDelta(prevSrc, src, getAlgorithmicDelta(norm16), *sink, edits);
+ prevBoundary = src;
+ continue;
+ }
+ } else if (norm16 < minNoNoCompBoundaryBefore) {
+ // The mapping is comp-normalized which also implies hasCompBoundaryBefore.
+ if (norm16HasCompBoundaryAfter(norm16, onlyContiguous) ||
+ hasCompBoundaryBefore(src, limit)) {
+ if (prevBoundary != prevSrc &&
+ !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc,
+ *sink, options, edits, errorCode)) {
+ break;
+ }
+ const uint16_t *mapping = getMapping(norm16);
+ int32_t length = *mapping++ & MAPPING_LENGTH_MASK;
+ if (!ByteSinkUtil::appendChange(prevSrc, src, (const UChar *)mapping, length,
+ *sink, edits, errorCode)) {
+ break;
+ }
+ prevBoundary = src;
+ continue;
+ }
+ } else if (norm16 >= minNoNoEmpty) {
+ // The current character maps to nothing.
+ // Simply omit it from the output if there is a boundary before _or_ after it.
+ // The character itself implies no boundaries.
+ if (hasCompBoundaryBefore(src, limit) ||
+ hasCompBoundaryAfter(prevBoundary, prevSrc, onlyContiguous)) {
+ if (prevBoundary != prevSrc &&
+ !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc,
+ *sink, options, edits, errorCode)) {
+ break;
+ }
+ if (edits != nullptr) {
+ edits->addReplace((int32_t)(src - prevSrc), 0);
+ }
+ prevBoundary = src;
+ continue;
+ }
+ }
+ // Other "noNo" type, or need to examine more text around this character:
+ // Fall through to the slow path.
+ } else if (isJamoVT(norm16)) {
+ // Jamo L: E1 84 80..92
+ // Jamo V: E1 85 A1..B5
+ // Jamo T: E1 86 A8..E1 87 82
+ U_ASSERT((src - prevSrc) == 3 && *prevSrc == 0xe1);
+ UChar32 prev = previousHangulOrJamo(prevBoundary, prevSrc);
+ if (prevSrc[1] == 0x85) {
+ // The current character is a Jamo Vowel,
+ // compose with previous Jamo L and following Jamo T.
+ UChar32 l = prev - Hangul::JAMO_L_BASE;
+ if ((uint32_t)l < Hangul::JAMO_L_COUNT) {
+ if (sink == nullptr) {
+ return FALSE;
+ }
+ int32_t t = getJamoTMinusBase(src, limit);
+ if (t >= 0) {
+ // The next character is a Jamo T.
+ src += 3;
+ } else if (hasCompBoundaryBefore(src, limit)) {
+ // No Jamo T follows, not even via decomposition.
+ t = 0;
+ }
+ if (t >= 0) {
+ UChar32 syllable = Hangul::HANGUL_BASE +
+ (l*Hangul::JAMO_V_COUNT + (prevSrc[2]-0xa1)) *
+ Hangul::JAMO_T_COUNT + t;
+ prevSrc -= 3; // Replace the Jamo L as well.
+ if (prevBoundary != prevSrc &&
+ !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc,
+ *sink, options, edits, errorCode)) {
+ break;
+ }
+ ByteSinkUtil::appendCodePoint(prevSrc, src, syllable, *sink, edits);
+ prevBoundary = src;
+ continue;
+ }
+ // If we see L+V+x where x!=T then we drop to the slow path,
+ // decompose and recompose.
+ // This is to deal with NFKC finding normal L and V but a
+ // compatibility variant of a T.
+ // We need to either fully compose that combination here
+ // (which would complicate the code and may not work with strange custom data)
+ // or use the slow path.
+ }
+ } else if (Hangul::isHangulLV(prev)) {
+ // The current character is a Jamo Trailing consonant,
+ // compose with previous Hangul LV that does not contain a Jamo T.
+ if (sink == nullptr) {
+ return FALSE;
+ }
+ UChar32 syllable = prev + getJamoTMinusBase(prevSrc, src);
+ prevSrc -= 3; // Replace the Hangul LV as well.
+ if (prevBoundary != prevSrc &&
+ !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc,
+ *sink, options, edits, errorCode)) {
+ break;
+ }
+ ByteSinkUtil::appendCodePoint(prevSrc, src, syllable, *sink, edits);
+ prevBoundary = src;
+ continue;
+ }
+ // No matching context, or may need to decompose surrounding text first:
+ // Fall through to the slow path.
+ } else if (norm16 > JAMO_VT) { // norm16 >= MIN_YES_YES_WITH_CC
+ // One or more combining marks that do not combine-back:
+ // Check for canonical order, copy unchanged if ok and
+ // if followed by a character with a boundary-before.
+ uint8_t cc = getCCFromNormalYesOrMaybe(norm16); // cc!=0
+ if (onlyContiguous /* FCC */ && getPreviousTrailCC(prevBoundary, prevSrc) > cc) {
+ // Fails FCD test, need to decompose and contiguously recompose.
+ if (sink == nullptr) {
+ return FALSE;
+ }
+ } else {
+ // If !onlyContiguous (not FCC), then we ignore the tccc of
+ // the previous character which passed the quick check "yes && ccc==0" test.
+ const uint8_t *nextSrc;
+ uint16_t n16;
+ for (;;) {
+ if (src == limit) {
+ if (sink != nullptr) {
+ ByteSinkUtil::appendUnchanged(prevBoundary, limit,
+ *sink, options, edits, errorCode);
+ }
+ return TRUE;
+ }
+ uint8_t prevCC = cc;
+ nextSrc = src;
+ UTRIE2_U8_NEXT16(normTrie, nextSrc, limit, n16);
+ if (n16 >= MIN_YES_YES_WITH_CC) {
+ cc = getCCFromNormalYesOrMaybe(n16);
+ if (prevCC > cc) {
+ if (sink == nullptr) {
+ return FALSE;
+ }
+ break;
+ }
+ } else {
+ break;
+ }
+ src = nextSrc;
+ }
+ // src is after the last in-order combining mark.
+ // If there is a boundary here, then we continue with no change.
+ if (norm16HasCompBoundaryBefore(n16)) {
+ if (isCompYesAndZeroCC(n16)) {
+ src = nextSrc;
+ }
+ continue;
+ }
+ // Use the slow path. There is no boundary in [prevSrc, src[.
+ }
+ }
+
+ // Slow path: Find the nearest boundaries around the current character,
+ // decompose and recompose.
+ if (prevBoundary != prevSrc && !norm16HasCompBoundaryBefore(norm16)) {
+ const uint8_t *p = prevSrc;
+ UTRIE2_U8_PREV16(normTrie, prevBoundary, p, norm16);
+ if (!norm16HasCompBoundaryAfter(norm16, onlyContiguous)) {
+ prevSrc = p;
+ }
+ }
+ ReorderingBuffer buffer(*this, s16, errorCode);
+ if (U_FAILURE(errorCode)) {
+ break;
+ }
+ // We know there is not a boundary here.
+ decomposeShort(prevSrc, src, FALSE /* !stopAtCompBoundary */, onlyContiguous,
+ buffer, errorCode);
+ // Decompose until the next boundary.
+ src = decomposeShort(src, limit, TRUE /* stopAtCompBoundary */, onlyContiguous,
+ buffer, errorCode);
+ if (U_FAILURE(errorCode)) {
+ break;
+ }
+ if ((src - prevSrc) > INT32_MAX) { // guard before buffer.equals()
+ errorCode = U_INDEX_OUTOFBOUNDS_ERROR;
return TRUE;
- } else if(isMaybeOrNonZeroCC(norm16)) {
- return FALSE;
- } else if(isDecompNoAlgorithmic(norm16)) {
- c=mapAlgorithmic(c, norm16);
- norm16=getNorm16(c);
- } else {
- // c decomposes, get everything from the variable-length extra data
- const uint16_t *mapping=getMapping(norm16);
- uint16_t firstUnit=*mapping;
- if((firstUnit&MAPPING_LENGTH_MASK)==0) {
+ }
+ recompose(buffer, 0, onlyContiguous);
+ if (!buffer.equals(prevSrc, src)) {
+ if (sink == nullptr) {
return FALSE;
}
- if((firstUnit&MAPPING_HAS_CCC_LCCC_WORD) && (*(mapping-1)&0xff00)) {
- return FALSE; // non-zero leadCC
+ if (prevBoundary != prevSrc &&
+ !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc,
+ *sink, options, edits, errorCode)) {
+ break;
}
- int32_t i=1; // skip over the firstUnit
- UChar32 c;
- U16_NEXT_UNSAFE(mapping, i, c);
- return isCompYesAndZeroCC(getNorm16(c));
+ if (!ByteSinkUtil::appendChange(prevSrc, src, buffer.getStart(), buffer.length(),
+ *sink, edits, errorCode)) {
+ break;
+ }
+ prevBoundary = src;
}
}
+ return TRUE;
}
-UBool Normalizer2Impl::hasCompBoundaryAfter(UChar32 c, UBool onlyContiguous, UBool testInert) const {
- for(;;) {
- uint16_t norm16=getNorm16(c);
- if(isInert(norm16)) {
- return TRUE;
- } else if(norm16<=minYesNo) {
- // Hangul: norm16==minYesNo
- // Hangul LVT has a boundary after it.
- // Hangul LV and non-inert yesYes characters combine forward.
- return isHangul(norm16) && !Hangul::isHangulWithoutJamoT((UChar)c);
- } else if(norm16>= (testInert ? minNoNo : minMaybeYes)) {
- return FALSE;
- } else if(isDecompNoAlgorithmic(norm16)) {
- c=mapAlgorithmic(c, norm16);
- } else {
- // c decomposes, get everything from the variable-length extra data.
- // If testInert, then c must be a yesNo character which has lccc=0,
- // otherwise it could be a noNo.
- const uint16_t *mapping=getMapping(norm16);
- uint16_t firstUnit=*mapping;
- // TRUE if
- // not MAPPING_NO_COMP_BOUNDARY_AFTER
- // (which is set if
- // c is not deleted, and
- // it and its decomposition do not combine forward, and it has a starter)
- // and if FCC then trailCC<=1
- return
- (firstUnit&MAPPING_NO_COMP_BOUNDARY_AFTER)==0 &&
- (!onlyContiguous || firstUnit<=0x1ff);
- }
+UBool Normalizer2Impl::hasCompBoundaryBefore(const UChar *src, const UChar *limit) const {
+ if (src == limit || *src < minCompNoMaybeCP) {
+ return TRUE;
}
+ UChar32 c;
+ uint16_t norm16;
+ UTRIE2_U16_NEXT16(normTrie, src, limit, c, norm16);
+ return norm16HasCompBoundaryBefore(norm16);
}
-const UChar *Normalizer2Impl::findPreviousCompBoundary(const UChar *start, const UChar *p) const {
- BackwardUTrie2StringIterator iter(normTrie, start, p);
+UBool Normalizer2Impl::hasCompBoundaryBefore(const uint8_t *src, const uint8_t *limit) const {
+ if (src == limit) {
+ return TRUE;
+ }
uint16_t norm16;
- do {
- norm16=iter.previous16();
- } while(!hasCompBoundaryBefore(iter.codePoint, norm16));
- // We could also test hasCompBoundaryAfter() and return iter.codePointLimit,
- // but that's probably not worth the extra cost.
- return iter.codePointStart;
+ UTRIE2_U8_NEXT16(normTrie, src, limit, norm16);
+ return norm16HasCompBoundaryBefore(norm16);
}
-const UChar *Normalizer2Impl::findNextCompBoundary(const UChar *p, const UChar *limit) const {
- ForwardUTrie2StringIterator iter(normTrie, p, limit);
+UBool Normalizer2Impl::hasCompBoundaryAfter(const UChar *start, const UChar *p,
+ UBool onlyContiguous) const {
+ if (start == p) {
+ return TRUE;
+ }
+ UChar32 c;
uint16_t norm16;
- do {
- norm16=iter.next16();
- } while(!hasCompBoundaryBefore(iter.codePoint, norm16));
- return iter.codePointStart;
+ UTRIE2_U16_PREV16(normTrie, start, p, c, norm16);
+ return norm16HasCompBoundaryAfter(norm16, onlyContiguous);
}
+UBool Normalizer2Impl::hasCompBoundaryAfter(const uint8_t *start, const uint8_t *p,
+ UBool onlyContiguous) const {
+ if (start == p) {
+ return TRUE;
+ }
+ uint16_t norm16;
+ UTRIE2_U8_PREV16(normTrie, start, p, norm16);
+ return norm16HasCompBoundaryAfter(norm16, onlyContiguous);
+}
+
+const UChar *Normalizer2Impl::findPreviousCompBoundary(const UChar *start, const UChar *p,
+ UBool onlyContiguous) const {
+ BackwardUTrie2StringIterator iter(normTrie, start, p);
+ for(;;) {
+ uint16_t norm16=iter.previous16();
+ if (norm16HasCompBoundaryAfter(norm16, onlyContiguous)) {
+ return iter.codePointLimit;
+ }
+ if (hasCompBoundaryBefore(iter.codePoint, norm16)) {
+ return iter.codePointStart;
+ }
+ }
+}
+
+const UChar *Normalizer2Impl::findNextCompBoundary(const UChar *p, const UChar *limit,
+ UBool onlyContiguous) const {
+ ForwardUTrie2StringIterator iter(normTrie, p, limit);
+ for(;;) {
+ uint16_t norm16=iter.next16();
+ if (hasCompBoundaryBefore(iter.codePoint, norm16)) {
+ return iter.codePointStart;
+ }
+ if (norm16HasCompBoundaryAfter(norm16, onlyContiguous)) {
+ return iter.codePointLimit;
+ }
+ }
+}
+
+uint8_t Normalizer2Impl::getPreviousTrailCC(const UChar *start, const UChar *p) const {
+ if (start == p) {
+ return 0;
+ }
+ int32_t i = (int32_t)(p - start);
+ UChar32 c;
+ U16_PREV(start, 0, i, c);
+ return (uint8_t)getFCD16(c);
+}
+
+uint8_t Normalizer2Impl::getPreviousTrailCC(const uint8_t *start, const uint8_t *p) const {
+ if (start == p) {
+ return 0;
+ }
+ int32_t i = (int32_t)(p - start);
+ UChar32 c;
+ U8_PREV(start, 0, i, c);
+ return (uint8_t)getFCD16(c);
+}
+
// Note: normalizer2impl.cpp r30982 (2011-nov-27)
// still had getFCDTrie() which built and cached an FCD trie.
// That provided faster access to FCD data than getFCD16FromNormData()
// but required synchronization and consumed some 10kB of heap memory
// in any process that uses FCD (e.g., via collation).
-// tccc180[] and smallFCD[] are intended to help with any loss of performance,
-// at least for Latin & CJK.
+// minDecompNoCP etc. and smallFCD[] are intended to help with any loss of performance,
+// at least for ASCII & CJK.
// Gets the FCD value from the regular normalization data.
uint16_t Normalizer2Impl::getFCD16FromNormData(UChar32 c) const {
- // Only loops for 1:1 algorithmic mappings.
- for(;;) {
- uint16_t norm16=getNorm16(c);
- if(norm16<=minYesNo) {
- // no decomposition or Hangul syllable, all zeros
- return 0;
- } else if(norm16>=MIN_NORMAL_MAYBE_YES) {
+ uint16_t norm16=getNorm16(c);
+ if (norm16 >= limitNoNo) {
+ if(norm16>=MIN_NORMAL_MAYBE_YES) {
// combining mark
- norm16&=0xff;
+ norm16=getCCFromNormalYesOrMaybe(norm16);
return norm16|(norm16<<8);
} else if(norm16>=minMaybeYes) {
return 0;
- } else if(isDecompNoAlgorithmic(norm16)) {
+ } else { // isDecompNoAlgorithmic(norm16)
+ uint16_t deltaTrailCC = norm16 & DELTA_TCCC_MASK;
+ if (deltaTrailCC <= DELTA_TCCC_1) {
+ return deltaTrailCC >> OFFSET_SHIFT;
+ }
+ // Maps to an isCompYesAndZeroCC.
c=mapAlgorithmic(c, norm16);
- } else {
- // c decomposes, get everything from the variable-length extra data
- const uint16_t *mapping=getMapping(norm16);
- uint16_t firstUnit=*mapping;
- if((firstUnit&MAPPING_LENGTH_MASK)==0) {
- // A character that is deleted (maps to an empty string) must
- // get the worst-case lccc and tccc values because arbitrary
- // characters on both sides will become adjacent.
- return 0x1ff;
- } else {
- norm16=firstUnit>>8; // tccc
- if(firstUnit&MAPPING_HAS_CCC_LCCC_WORD) {
- norm16|=*(mapping-1)&0xff00; // lccc
- }
- return norm16;
- }
+ norm16=getNorm16(c);
}
}
+ if(norm16<=minYesNo || isHangulLVT(norm16)) {
+ // no decomposition or Hangul syllable, all zeros
+ return 0;
+ }
+ // c decomposes, get everything from the variable-length extra data
+ const uint16_t *mapping=getMapping(norm16);
+ uint16_t firstUnit=*mapping;
+ norm16=firstUnit>>8; // tccc
+ if(firstUnit&MAPPING_HAS_CCC_LCCC_WORD) {
+ norm16|=*(mapping-1)&0xff00; // lccc
+ }
+ return norm16;
}
// Dual functionality:
@@ -1624,7 +2159,7 @@
const UChar *prevBoundary=src;
int32_t prevFCD16=0;
if(limit==NULL) {
- src=copyLowPrefixFromNulTerminated(src, MIN_CCC_LCCC_CP, buffer, errorCode);
+ src=copyLowPrefixFromNulTerminated(src, minLcccCP, buffer, errorCode);
if(U_FAILURE(errorCode)) {
return src;
}
@@ -1653,7 +2188,7 @@
for(;;) {
// count code units with lccc==0
for(prevSrc=src; src!=limit;) {
- if((c=*src)<MIN_CCC_LCCC_CP) {
+ if((c=*src)<minLcccCP) {
prevFCD16=~c;
++src;
} else if(!singleLeadMightHaveNonZeroFCD16(c)) {
@@ -1692,11 +2227,15 @@
prevBoundary=src;
// We know that the previous character's lccc==0.
if(prevFCD16<0) {
- // Fetching the fcd16 value was deferred for this below-U+0300 code point.
+ // Fetching the fcd16 value was deferred for this below-minLcccCP code point.
UChar32 prev=~prevFCD16;
- prevFCD16= prev<0x180 ? tccc180[prev] : getFCD16FromNormData(prev);
- if(prevFCD16>1) {
- --prevBoundary;
+ if(prev<minDecompNoCP) {
+ prevFCD16=0;
+ } else {
+ prevFCD16=getFCD16FromNormData(prev);
+ if(prevFCD16>1) {
+ --prevBoundary;
+ }
}
} else {
const UChar *p=src-1;
@@ -1748,7 +2287,8 @@
* The source text does not fulfill the conditions for FCD.
* Decompose and reorder a limited piece of the text.
*/
- if(!decomposeShort(prevBoundary, src, *buffer, errorCode)) {
+ decomposeShort(prevBoundary, src, FALSE, FALSE, *buffer, errorCode);
+ if (U_FAILURE(errorCode)) {
break;
}
prevBoundary=src;
@@ -1792,7 +2332,18 @@
}
const UChar *Normalizer2Impl::findPreviousFCDBoundary(const UChar *start, const UChar *p) const {
- while(start<p && previousFCD16(start, p)>0xff) {}
+ while(start<p) {
+ const UChar *codePointLimit = p;
+ UChar32 c;
+ uint16_t norm16;
+ UTRIE2_U16_PREV16(normTrie, start, p, c, norm16);
+ if (c < minDecompNoCP || norm16HasDecompBoundaryAfter(norm16)) {
+ return codePointLimit;
+ }
+ if (norm16HasDecompBoundaryBefore(norm16)) {
+ return p;
+ }
+ }
return p;
}
@@ -1799,9 +2350,15 @@
const UChar *Normalizer2Impl::findNextFCDBoundary(const UChar *p, const UChar *limit) const {
while(p<limit) {
const UChar *codePointStart=p;
- if(nextFCD16(p, limit)<=0xff) {
+ UChar32 c;
+ uint16_t norm16;
+ UTRIE2_U16_NEXT16(normTrie, p, limit, c, norm16);
+ if (c < minLcccCP || norm16HasDecompBoundaryBefore(norm16)) {
return codePointStart;
}
+ if (norm16HasDecompBoundaryAfter(norm16)) {
+ return p;
+ }
}
return p;
}
@@ -1845,27 +2402,36 @@
}
}
+// C++ class for friend access to private Normalizer2Impl members.
+class InitCanonIterData {
+public:
+ static void doInit(Normalizer2Impl *impl, UErrorCode &errorCode);
+ static void handleRange(Normalizer2Impl *impl, UChar32 start, UChar32 end, uint16_t value, UErrorCode &errorCode);
+};
+
U_CDECL_BEGIN
+// UInitOnce instantiation function for CanonIterData
+static void U_CALLCONV
+initCanonIterData(Normalizer2Impl *impl, UErrorCode &errorCode) {
+ InitCanonIterData::doInit(impl, errorCode);
+}
+
// Call Normalizer2Impl::makeCanonIterDataFromNorm16() for a range of same-norm16 characters.
// context: the Normalizer2Impl
static UBool U_CALLCONV
enumCIDRangeHandler(const void *context, UChar32 start, UChar32 end, uint32_t value) {
UErrorCode errorCode = U_ZERO_ERROR;
- if (value != 0) {
+ if (value != Normalizer2Impl::INERT) {
Normalizer2Impl *impl = (Normalizer2Impl *)context;
- impl->makeCanonIterDataFromNorm16(
- start, end, (uint16_t)value, *impl->fCanonIterData, errorCode);
+ InitCanonIterData::handleRange(impl, start, end, (uint16_t)value, errorCode);
}
return U_SUCCESS(errorCode);
}
+U_CDECL_END
-
-// UInitOnce instantiation function for CanonIterData
-
-static void U_CALLCONV
-initCanonIterData(Normalizer2Impl *impl, UErrorCode &errorCode) {
+void InitCanonIterData::doInit(Normalizer2Impl *impl, UErrorCode &errorCode) {
U_ASSERT(impl->fCanonIterData == NULL);
impl->fCanonIterData = new CanonIterData(errorCode);
if (impl->fCanonIterData == NULL) {
@@ -1872,7 +2438,7 @@
errorCode=U_MEMORY_ALLOCATION_ERROR;
}
if (U_SUCCESS(errorCode)) {
- utrie2_enum(impl->getNormTrie(), NULL, enumCIDRangeHandler, impl);
+ utrie2_enum(impl->normTrie, NULL, enumCIDRangeHandler, impl);
utrie2_freeze(impl->fCanonIterData->trie, UTRIE2_32_VALUE_BITS, &errorCode);
}
if (U_FAILURE(errorCode)) {
@@ -1881,12 +2447,15 @@
}
}
-U_CDECL_END
+void InitCanonIterData::handleRange(
+ Normalizer2Impl *impl, UChar32 start, UChar32 end, uint16_t value, UErrorCode &errorCode) {
+ impl->makeCanonIterDataFromNorm16(start, end, value, *impl->fCanonIterData, errorCode);
+}
-void Normalizer2Impl::makeCanonIterDataFromNorm16(UChar32 start, UChar32 end, uint16_t norm16,
+void Normalizer2Impl::makeCanonIterDataFromNorm16(UChar32 start, UChar32 end, const uint16_t norm16,
CanonIterData &newData,
UErrorCode &errorCode) const {
- if(norm16==0 || (minYesNo<=norm16 && norm16<minNoNo)) {
+ if(isInert(norm16) || (minYesNo<=norm16 && norm16<minNoNo)) {
// Inert, or 2-way mapping (including Hangul syllable).
// We do not write a canonStartSet for any yesNo character.
// Composites from 2-way mappings are added at runtime from the
@@ -1898,7 +2467,7 @@
for(UChar32 c=start; c<=end; ++c) {
uint32_t oldValue=utrie2_get32(newData.trie, c);
uint32_t newValue=oldValue;
- if(norm16>=minMaybeYes) {
+ if(isMaybeOrNonZeroCC(norm16)) {
// not a segment starter if it occurs in a decomposition or has cc!=0
newValue|=CANON_NOT_SEGMENT_STARTER;
if(norm16<MIN_NORMAL_MAYBE_YES) {
@@ -1909,12 +2478,16 @@
} else {
// c has a one-way decomposition
UChar32 c2=c;
+ // Do not modify the whole-range norm16 value.
uint16_t norm16_2=norm16;
- while(limitNoNo<=norm16_2 && norm16_2<minMaybeYes) {
- c2=mapAlgorithmic(c2, norm16_2);
- norm16_2=getNorm16(c2);
+ if (isDecompNoAlgorithmic(norm16_2)) {
+ // Maps to an isCompYesAndZeroCC.
+ c2 = mapAlgorithmic(c2, norm16_2);
+ norm16_2 = getNorm16(c2);
+ // No compatibility mappings for the CanonicalIterator.
+ U_ASSERT(!(isHangulLV(norm16_2) || isHangulLVT(norm16_2)));
}
- if(minYesNo<=norm16_2 && norm16_2<limitNoNo) {
+ if (norm16_2 > minYesNo) {
// c decomposes, get everything from the variable-length extra data
const uint16_t *mapping=getMapping(norm16_2);
uint16_t firstUnit=*mapping;
@@ -2017,7 +2590,7 @@
uint8_t *outBytes;
const int32_t *inIndexes;
- int32_t indexes[Normalizer2Impl::IX_MIN_MAYBE_YES+1];
+ int32_t indexes[Normalizer2Impl::IX_TOTAL_SIZE+1];
int32_t i, offset, nextOffset, size;
@@ -2029,12 +2602,13 @@
/* check data format and format version */
pInfo=(const UDataInfo *)((const char *)inData+4);
+ uint8_t formatVersion0=pInfo->formatVersion[0];
if(!(
pInfo->dataFormat[0]==0x4e && /* dataFormat="Nrm2" */
pInfo->dataFormat[1]==0x72 &&
pInfo->dataFormat[2]==0x6d &&
pInfo->dataFormat[3]==0x32 &&
- (pInfo->formatVersion[0]==1 || pInfo->formatVersion[0]==2)
+ (1<=formatVersion0 && formatVersion0<=3)
)) {
udata_printError(ds, "unorm2_swap(): data format %02x.%02x.%02x.%02x (format version %02x) is not recognized as Normalizer2 data\n",
pInfo->dataFormat[0], pInfo->dataFormat[1],
@@ -2048,10 +2622,18 @@
outBytes=(uint8_t *)outData+headerSize;
inIndexes=(const int32_t *)inBytes;
+ int32_t minIndexesLength;
+ if(formatVersion0==1) {
+ minIndexesLength=Normalizer2Impl::IX_MIN_MAYBE_YES+1;
+ } else if(formatVersion0==2) {
+ minIndexesLength=Normalizer2Impl::IX_MIN_YES_NO_MAPPINGS_ONLY+1;
+ } else {
+ minIndexesLength=Normalizer2Impl::IX_MIN_LCCC_CP+1;
+ }
if(length>=0) {
length-=headerSize;
- if(length<(int32_t)sizeof(indexes)) {
+ if(length<minIndexesLength*4) {
udata_printError(ds, "unorm2_swap(): too few bytes (%d after header) for Normalizer2 data\n",
length);
*pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR;
@@ -2060,7 +2642,7 @@
}
/* read the first few indexes */
- for(i=0; i<=Normalizer2Impl::IX_MIN_MAYBE_YES; ++i) {
+ for(i=0; i<UPRV_LENGTHOF(indexes); ++i) {
indexes[i]=udata_readInt32(ds, inIndexes[i]);
}
Modified: trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -8,7 +8,7 @@
*
*******************************************************************************
* file name: normalizer2impl.h
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
@@ -35,6 +35,11 @@
struct CanonIterData;
+class ByteSink;
+class Edits;
+class InitCanonIterData;
+class LcccContext;
+
class U_COMMON_API Hangul {
public:
/* Korean Hangul and Jamo constants */
@@ -63,9 +68,9 @@
return HANGUL_BASE<=c && c<HANGUL_LIMIT;
}
static inline UBool
- isHangulWithoutJamoT(UChar c) {
+ isHangulLV(UChar32 c) {
c-=HANGUL_BASE;
- return c<HANGUL_COUNT && c%JAMO_T_COUNT==0;
+ return 0<=c && c<HANGUL_COUNT && c%JAMO_T_COUNT==0;
}
static inline UBool isJamoL(UChar32 c) {
return (uint32_t)(c-JAMO_L_BASE)<JAMO_L_COUNT;
@@ -73,6 +78,14 @@
static inline UBool isJamoV(UChar32 c) {
return (uint32_t)(c-JAMO_V_BASE)<JAMO_V_COUNT;
}
+ static inline UBool isJamoT(UChar32 c) {
+ int32_t t=c-JAMO_T_BASE;
+ return 0<t && t<JAMO_T_COUNT; // not JAMO_T_BASE itself
+ }
+ static UBool isJamo(UChar32 c) {
+ return JAMO_L_BASE<=c && c<=JAMO_T_END &&
+ (c<=JAMO_L_END || (JAMO_V_BASE<=c && c<=JAMO_V_END) || JAMO_T_BASE<c);
+ }
/**
* Decomposes c, which must be a Hangul syllable, into buffer
@@ -117,10 +130,13 @@
class U_COMMON_API ReorderingBuffer : public UMemory {
public:
+ /** Constructs only; init() should be called. */
ReorderingBuffer(const Normalizer2Impl &ni, UnicodeString &dest) :
impl(ni), str(dest),
start(NULL), reorderStart(NULL), limit(NULL),
remainingCapacity(0), lastCC(0) {}
+ /** Constructs, removes the string contents, and initializes for a small initial capacity. */
+ ReorderingBuffer(const Normalizer2Impl &ni, UnicodeString &dest, UErrorCode &errorCode);
~ReorderingBuffer() {
if(start!=NULL) {
str.releaseBuffer((int32_t)(limit-start));
@@ -135,12 +151,8 @@
uint8_t getLastCC() const { return lastCC; }
UBool equals(const UChar *start, const UChar *limit) const;
+ UBool equals(const uint8_t *otherStart, const uint8_t *otherLimit) const;
- // For Hangul composition, replacing the Leading consonant Jamo with the syllable.
- void setLastChar(UChar c) {
- *(limit-1)=c;
- }
-
UBool append(UChar32 c, uint8_t cc, UErrorCode &errorCode) {
return (c<=0xffff) ?
appendBMP((UChar)c, cc, errorCode) :
@@ -176,7 +188,7 @@
lastCC=0;
}
void copyReorderableSuffixTo(UnicodeString &s) const {
- s.setTo(reorderStart, (int32_t)(limit-reorderStart));
+ s.setTo(ConstChar16Ptr(reorderStart), (int32_t)(limit-reorderStart));
}
private:
/*
@@ -218,6 +230,12 @@
UChar *codePointStart, *codePointLimit;
};
+/**
+ * Low-level implementation of the Unicode Normalization Algorithm.
+ * For the data structure and details see the documentation at the end of
+ * this normalizer2impl.h and in the design doc at
+ * http://site.icu-project.org/design/normalization/custom
+ */
class U_COMMON_API Normalizer2Impl : public UObject {
public:
Normalizer2Impl() : normTrie(NULL), fCanonIterData(NULL) {
@@ -234,8 +252,6 @@
// low-level properties ------------------------------------------------ ***
- const UTrie2 *getNormTrie() const { return normTrie; }
-
UBool ensureCanonIterData(UErrorCode &errorCode) const;
uint16_t getNorm16(UChar32 c) const { return UTRIE2_GET16(normTrie, c); }
@@ -255,7 +271,7 @@
uint8_t getCC(uint16_t norm16) const {
if(norm16>=MIN_NORMAL_MAYBE_YES) {
- return (uint8_t)norm16;
+ return getCCFromNormalYesOrMaybe(norm16);
}
if(norm16<minNoNo || limitNoNo<=norm16) {
return 0;
@@ -262,9 +278,16 @@
}
return getCCFromNoNo(norm16);
}
+ static uint8_t getCCFromNormalYesOrMaybe(uint16_t norm16) {
+ return (uint8_t)(norm16 >> OFFSET_SHIFT);
+ }
static uint8_t getCCFromYesOrMaybe(uint16_t norm16) {
- return norm16>=MIN_NORMAL_MAYBE_YES ? (uint8_t)norm16 : 0;
+ return norm16>=MIN_NORMAL_MAYBE_YES ? getCCFromNormalYesOrMaybe(norm16) : 0;
}
+ uint8_t getCCFromYesOrMaybeCP(UChar32 c) const {
+ if (c < minCompNoMaybeCP) { return 0; }
+ return getCCFromYesOrMaybe(getNorm16(c));
+ }
/**
* Returns the FCD data for code point c.
@@ -272,10 +295,8 @@
* @return The lccc(c) in bits 15..8 and tccc(c) in bits 7..0.
*/
uint16_t getFCD16(UChar32 c) const {
- if(c<0) {
+ if(c<minDecompNoCP) {
return 0;
- } else if(c<0x180) {
- return tccc180[c];
} else if(c<=0xffff) {
if(!singleLeadMightHaveNonZeroFCD16(c)) { return 0; }
}
@@ -291,9 +312,7 @@
*/
uint16_t nextFCD16(const UChar *&s, const UChar *limit) const {
UChar32 c=*s++;
- if(c<0x180) {
- return tccc180[c];
- } else if(!singleLeadMightHaveNonZeroFCD16(c)) {
+ if(c<minDecompNoCP || !singleLeadMightHaveNonZeroFCD16(c)) {
return 0;
}
UChar c2;
@@ -311,8 +330,8 @@
*/
uint16_t previousFCD16(const UChar *start, const UChar *&s) const {
UChar32 c=*--s;
- if(c<0x180) {
- return tccc180[c];
+ if(c<minDecompNoCP) {
+ return 0;
}
if(!U16_IS_TRAIL(c)) {
if(!singleLeadMightHaveNonZeroFCD16(c)) {
@@ -328,8 +347,6 @@
return getFCD16FromNormData(c);
}
- /** Returns the FCD data for U+0000<=c<U+0180. */
- uint16_t getFCD16FromBelow180(UChar32 c) const { return tccc180[c]; }
/** Returns TRUE if the single-or-lead code unit c might have non-zero FCD data. */
UBool singleLeadMightHaveNonZeroFCD16(UChar32 lead) const {
// 0<=lead<=0xffff
@@ -340,9 +357,6 @@
/** Returns the FCD value from the regular normalization data. */
uint16_t getFCD16FromNormData(UChar32 c) const;
- void makeCanonIterDataFromNorm16(UChar32 start, UChar32 end, uint16_t norm16,
- CanonIterData &newData, UErrorCode &errorCode) const;
-
/**
* Gets the decomposition for one code point.
* @param c code point
@@ -367,14 +381,25 @@
UBool getCanonStartSet(UChar32 c, UnicodeSet &set) const;
enum {
- MIN_CCC_LCCC_CP=0x300
- };
+ // Fixed norm16 values.
+ 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
- enum {
- MIN_YES_YES_WITH_CC=0xff01,
- JAMO_VT=0xff00,
- MIN_NORMAL_MAYBE_YES=0xfe00,
- JAMO_L=1,
+ // norm16 bit 0 is comp-boundary-after.
+ HAS_COMP_BOUNDARY_AFTER=1,
+ OFFSET_SHIFT=1,
+
+ // For algorithmic one-way mappings, norm16 bits 2..1 indicate the
+ // tccc (0, 1, >1) for quick FCC boundary-after tests.
+ DELTA_TCCC_0=0,
+ DELTA_TCCC_1=2,
+ DELTA_TCCC_GT_1=4,
+ DELTA_TCCC_MASK=6,
+ DELTA_SHIFT=3,
+
MAX_DELTA=0x40
};
@@ -394,14 +419,25 @@
IX_MIN_COMP_NO_MAYBE_CP,
// Norm16 value thresholds for quick check combinations and types of extra data.
- IX_MIN_YES_NO, // Mappings & compositions in [minYesNo..minYesNoMappingsOnly[.
+
+ /** Mappings & compositions in [minYesNo..minYesNoMappingsOnly[. */
+ IX_MIN_YES_NO,
+ /** Mappings are comp-normalized. */
IX_MIN_NO_NO,
IX_LIMIT_NO_NO,
IX_MIN_MAYBE_YES,
- IX_MIN_YES_NO_MAPPINGS_ONLY, // Mappings only in [minYesNoMappingsOnly..minNoNo[.
+ /** Mappings only in [minYesNoMappingsOnly..minNoNo[. */
+ IX_MIN_YES_NO_MAPPINGS_ONLY,
+ /** Mappings are not comp-normalized but have a comp boundary before. */
+ IX_MIN_NO_NO_COMP_BOUNDARY_BEFORE,
+ /** Mappings do not have a comp boundary before. */
+ IX_MIN_NO_NO_COMP_NO_MAYBE_CC,
+ /** Mappings to the empty string. */
+ IX_MIN_NO_NO_EMPTY,
- IX_RESERVED15,
+ IX_MIN_LCCC_CP,
+ IX_RESERVED19,
IX_COUNT
};
@@ -408,7 +444,7 @@
enum {
MAPPING_HAS_CCC_LCCC_WORD=0x80,
MAPPING_HAS_RAW_MAPPING=0x40,
- MAPPING_NO_COMP_BOUNDARY_AFTER=0x20,
+ // unused bit 0x20,
MAPPING_LENGTH_MASK=0x1f
};
@@ -457,6 +493,12 @@
UnicodeString &safeMiddle,
ReorderingBuffer &buffer,
UErrorCode &errorCode) const;
+
+ /** sink==nullptr: isNormalized() */
+ UBool composeUTF8(uint32_t options, UBool onlyContiguous,
+ const uint8_t *src, const uint8_t *limit,
+ ByteSink *sink, icu::Edits *edits, UErrorCode &errorCode) const;
+
const UChar *makeFCD(const UChar *src, const UChar *limit,
ReorderingBuffer *buffer, UErrorCode &errorCode) const;
void makeFCDAndAppend(const UChar *src, const UChar *limit,
@@ -465,27 +507,42 @@
ReorderingBuffer &buffer,
UErrorCode &errorCode) const;
- UBool hasDecompBoundary(UChar32 c, UBool before) const;
+ UBool hasDecompBoundaryBefore(UChar32 c) const;
+ UBool norm16HasDecompBoundaryBefore(uint16_t norm16) const;
+ UBool hasDecompBoundaryAfter(UChar32 c) const;
+ UBool norm16HasDecompBoundaryAfter(uint16_t norm16) const;
UBool isDecompInert(UChar32 c) const { return isDecompYesAndZeroCC(getNorm16(c)); }
UBool hasCompBoundaryBefore(UChar32 c) const {
- return c<minCompNoMaybeCP || hasCompBoundaryBefore(c, getNorm16(c));
+ return c<minCompNoMaybeCP || norm16HasCompBoundaryBefore(getNorm16(c));
}
- UBool hasCompBoundaryAfter(UChar32 c, UBool onlyContiguous, UBool testInert) const;
+ UBool hasCompBoundaryAfter(UChar32 c, UBool onlyContiguous) const {
+ return norm16HasCompBoundaryAfter(getNorm16(c), onlyContiguous);
+ }
+ UBool isCompInert(UChar32 c, UBool onlyContiguous) const {
+ uint16_t norm16=getNorm16(c);
+ return isCompYesAndZeroCC(norm16) &&
+ (norm16 & HAS_COMP_BOUNDARY_AFTER) != 0 &&
+ (!onlyContiguous || isInert(norm16) || *getMapping(norm16) <= 0x1ff);
+ }
- UBool hasFCDBoundaryBefore(UChar32 c) const { return c<MIN_CCC_LCCC_CP || getFCD16(c)<=0xff; }
- UBool hasFCDBoundaryAfter(UChar32 c) const {
- uint16_t fcd16=getFCD16(c);
- return fcd16<=1 || (fcd16&0xff)==0;
- }
+ UBool hasFCDBoundaryBefore(UChar32 c) const { return hasDecompBoundaryBefore(c); }
+ UBool hasFCDBoundaryAfter(UChar32 c) const { return hasDecompBoundaryAfter(c); }
UBool isFCDInert(UChar32 c) const { return getFCD16(c)<=1; }
private:
+ friend class InitCanonIterData;
+ friend class LcccContext;
+
UBool isMaybe(uint16_t norm16) const { return minMaybeYes<=norm16 && norm16<=JAMO_VT; }
UBool isMaybeOrNonZeroCC(uint16_t norm16) const { return norm16>=minMaybeYes; }
- static UBool isInert(uint16_t norm16) { return norm16==0; }
- static UBool isJamoL(uint16_t norm16) { return norm16==1; }
+ static UBool isInert(uint16_t norm16) { return norm16==INERT; }
+ static UBool isJamoL(uint16_t norm16) { return norm16==JAMO_L; }
static UBool isJamoVT(uint16_t norm16) { return norm16==JAMO_VT; }
- UBool isHangul(uint16_t norm16) const { return norm16==minYesNo; }
+ uint16_t hangulLVT() const { return minYesNoMappingsOnly|HAS_COMP_BOUNDARY_AFTER; }
+ UBool isHangulLV(uint16_t norm16) const { return norm16==minYesNo; }
+ UBool isHangulLVT(uint16_t norm16) const {
+ return norm16==hangulLVT();
+ }
UBool isCompYesAndZeroCC(uint16_t norm16) const { return norm16<minNoNo; }
// UBool isCompYes(uint16_t norm16) const {
// return norm16>=MIN_YES_YES_WITH_CC || norm16<minNoNo;
@@ -504,7 +561,7 @@
/**
* A little faster and simpler than isDecompYesAndZeroCC() but does not include
* the MaybeYes which combine-forward and have ccc=0.
- * (Standard Unicode 5.2 normalization does not have such characters.)
+ * (Standard Unicode 10 normalization does not have such characters.)
*/
UBool isMostDecompYesAndZeroCC(uint16_t norm16) const {
return norm16<minYesNo || norm16==MIN_NORMAL_MAYBE_YES || norm16==JAMO_VT;
@@ -514,7 +571,7 @@
// For use with isCompYes().
// Perhaps the compiler can combine the two tests for MIN_YES_YES_WITH_CC.
// static uint8_t getCCFromYes(uint16_t norm16) {
- // return norm16>=MIN_YES_YES_WITH_CC ? (uint8_t)norm16 : 0;
+ // return norm16>=MIN_YES_YES_WITH_CC ? getCCFromNormalYesOrMaybe(norm16) : 0;
// }
uint8_t getCCFromNoNo(uint16_t norm16) const {
const uint16_t *mapping=getMapping(norm16);
@@ -525,30 +582,47 @@
}
}
// requires that the [cpStart..cpLimit[ character passes isCompYesAndZeroCC()
- uint8_t getTrailCCFromCompYesAndZeroCC(const UChar *cpStart, const UChar *cpLimit) const;
+ uint8_t getTrailCCFromCompYesAndZeroCC(uint16_t norm16) const {
+ if(norm16<=minYesNo) {
+ return 0; // yesYes and Hangul LV have ccc=tccc=0
+ } else {
+ // For Hangul LVT we harmlessly fetch a firstUnit with tccc=0 here.
+ return (uint8_t)(*getMapping(norm16)>>8); // tccc from yesNo
+ }
+ }
+ uint8_t getPreviousTrailCC(const UChar *start, const UChar *p) const;
+ uint8_t getPreviousTrailCC(const uint8_t *start, const uint8_t *p) const;
// Requires algorithmic-NoNo.
UChar32 mapAlgorithmic(UChar32 c, uint16_t norm16) const {
- return c+norm16-(minMaybeYes-MAX_DELTA-1);
+ return c+(norm16>>DELTA_SHIFT)-centerNoNoDelta;
}
+ UChar32 getAlgorithmicDelta(uint16_t norm16) const {
+ return (norm16>>DELTA_SHIFT)-centerNoNoDelta;
+ }
// Requires minYesNo<norm16<limitNoNo.
- const uint16_t *getMapping(uint16_t norm16) const { return extraData+norm16; }
+ const uint16_t *getMapping(uint16_t norm16) const { return extraData+(norm16>>OFFSET_SHIFT); }
const uint16_t *getCompositionsListForDecompYes(uint16_t norm16) const {
- if(norm16==0 || MIN_NORMAL_MAYBE_YES<=norm16) {
+ if(norm16<JAMO_L || MIN_NORMAL_MAYBE_YES<=norm16) {
return NULL;
} else if(norm16<minMaybeYes) {
- return extraData+norm16; // for yesYes; if Jamo L: harmless empty list
+ return getMapping(norm16); // for yesYes; if Jamo L: harmless empty list
} else {
return maybeYesCompositions+norm16-minMaybeYes;
}
}
const uint16_t *getCompositionsListForComposite(uint16_t norm16) const {
- const uint16_t *list=extraData+norm16; // composite has both mapping & compositions list
+ // A composite has both mapping & compositions list.
+ const uint16_t *list=getMapping(norm16);
return list+ // mapping pointer
- 1+ // +1 to skip the first unit with the mapping lenth
+ 1+ // +1 to skip the first unit with the mapping length
(*list&MAPPING_LENGTH_MASK); // + mapping length
}
+ const uint16_t *getCompositionsListForMaybe(uint16_t norm16) const {
+ // minMaybeYes<=norm16<MIN_NORMAL_MAYBE_YES
+ return maybeYesCompositions+((norm16-minMaybeYes)>>OFFSET_SHIFT);
+ }
/**
* @param c code point must have compositions
* @return compositions list pointer
@@ -563,37 +637,71 @@
UChar32 minNeedDataCP,
ReorderingBuffer *buffer,
UErrorCode &errorCode) const;
- UBool decomposeShort(const UChar *src, const UChar *limit,
- ReorderingBuffer &buffer, UErrorCode &errorCode) const;
+ const UChar *decomposeShort(const UChar *src, const UChar *limit,
+ UBool stopAtCompBoundary, UBool onlyContiguous,
+ ReorderingBuffer &buffer, UErrorCode &errorCode) const;
UBool decompose(UChar32 c, uint16_t norm16,
ReorderingBuffer &buffer, UErrorCode &errorCode) const;
+ const uint8_t *decomposeShort(const uint8_t *src, const uint8_t *limit,
+ UBool stopAtCompBoundary, UBool onlyContiguous,
+ ReorderingBuffer &buffer, UErrorCode &errorCode) const;
+
static int32_t combine(const uint16_t *list, UChar32 trail);
void addComposites(const uint16_t *list, UnicodeSet &set) const;
void recompose(ReorderingBuffer &buffer, int32_t recomposeStartIndex,
UBool onlyContiguous) const;
- UBool hasCompBoundaryBefore(UChar32 c, uint16_t norm16) const;
- const UChar *findPreviousCompBoundary(const UChar *start, const UChar *p) const;
- const UChar *findNextCompBoundary(const UChar *p, const UChar *limit) const;
+ UBool hasCompBoundaryBefore(UChar32 c, uint16_t norm16) const {
+ return c<minCompNoMaybeCP || norm16HasCompBoundaryBefore(norm16);
+ }
+ UBool norm16HasCompBoundaryBefore(uint16_t norm16) const {
+ return norm16 < minNoNoCompNoMaybeCC || isAlgorithmicNoNo(norm16);
+ }
+ UBool hasCompBoundaryBefore(const UChar *src, const UChar *limit) const;
+ UBool hasCompBoundaryBefore(const uint8_t *src, const uint8_t *limit) const;
+ UBool hasCompBoundaryAfter(const UChar *start, const UChar *p,
+ UBool onlyContiguous) const;
+ UBool hasCompBoundaryAfter(const uint8_t *start, const uint8_t *p,
+ UBool onlyContiguous) const;
+ UBool norm16HasCompBoundaryAfter(uint16_t norm16, UBool onlyContiguous) const {
+ return (norm16 & HAS_COMP_BOUNDARY_AFTER) != 0 &&
+ (!onlyContiguous || isTrailCC01ForCompBoundaryAfter(norm16));
+ }
+ /** For FCC: Given norm16 HAS_COMP_BOUNDARY_AFTER, does it have tccc<=1? */
+ UBool isTrailCC01ForCompBoundaryAfter(uint16_t norm16) const {
+ return isInert(norm16) || (isDecompNoAlgorithmic(norm16) ?
+ (norm16 & DELTA_TCCC_MASK) <= DELTA_TCCC_1 : *getMapping(norm16) <= 0x1ff);
+ }
+ const UChar *findPreviousCompBoundary(const UChar *start, const UChar *p, UBool onlyContiguous) const;
+ const UChar *findNextCompBoundary(const UChar *p, const UChar *limit, UBool onlyContiguous) const;
+
const UChar *findPreviousFCDBoundary(const UChar *start, const UChar *p) const;
const UChar *findNextFCDBoundary(const UChar *p, const UChar *limit) const;
+ void makeCanonIterDataFromNorm16(UChar32 start, UChar32 end, const uint16_t norm16,
+ CanonIterData &newData, UErrorCode &errorCode) const;
+
int32_t getCanonValue(UChar32 c) const;
const UnicodeSet &getCanonStartSet(int32_t n) const;
// UVersionInfo dataVersion;
- // Code point thresholds for quick check codes.
- UChar32 minDecompNoCP;
- UChar32 minCompNoMaybeCP;
+ // BMP code point thresholds for quick check loops looking at single UTF-16 code units.
+ UChar minDecompNoCP;
+ UChar minCompNoMaybeCP;
+ UChar minLcccCP;
// Norm16 value thresholds for quick check combinations and types of extra data.
uint16_t minYesNo;
uint16_t minYesNoMappingsOnly;
uint16_t minNoNo;
+ uint16_t minNoNoCompBoundaryBefore;
+ uint16_t minNoNoCompNoMaybeCC;
+ uint16_t minNoNoEmpty;
uint16_t limitNoNo;
+ uint16_t centerNoNoDelta;
uint16_t minMaybeYes;
const UTrie2 *normTrie;
@@ -600,9 +708,7 @@
const uint16_t *maybeYesCompositions;
const uint16_t *extraData; // mappings and/or compositions for yesYes, yesNo & noNo characters
const uint8_t *smallFCD; // [0x100] one bit per 32 BMP code points, set if any FCD!=0
- uint8_t tccc180[0x180]; // tccc values for U+0000..U+017F
-public: // CanonIterData is public to allow access from C callback functions.
UInitOnce fCanonIterDataInitOnce;
CanonIterData *fCanonIterData;
};
@@ -658,7 +764,7 @@
/**
* Format of Normalizer2 .nrm data files.
- * Format version 2.0.
+ * Format version 3.0.
*
* Normalizer2 .nrm data files provide data for the Unicode Normalization algorithms.
* ICU ships with data files for standard Unicode Normalization Forms
@@ -665,6 +771,7 @@
* NFC and NFD (nfc.nrm), NFKC and NFKD (nfkc.nrm) and NFKC_Casefold (nfkc_cf.nrm).
* Custom (application-specific) data can be built into additional .nrm files
* with the gennorm2 build tool.
+ * ICU ships with one such file, uts46.nrm, for the implementation of UTS #46.
*
* Normalizer2.getInstance() causes a .nrm file to be loaded, unless it has been
* cached already. Internally, Normalizer2Impl.load() reads the .nrm file.
@@ -695,14 +802,20 @@
* with a decomposition mapping, that is, with NF*D_QC=No.
* minCompNoMaybeCP=indexes[IX_MIN_COMP_NO_MAYBE_CP] is the lowest code point
* with NF*C_QC=No (has a one-way mapping) or Maybe (combines backward).
+ * minLcccCP=indexes[IX_MIN_LCCC_CP] (index 18, new in formatVersion 3)
+ * is the lowest code point with lccc!=0.
*
- * The next five indexes are thresholds of 16-bit trie values for ranges of
+ * The next eight indexes are thresholds of 16-bit trie values for ranges of
* values indicating multiple normalization properties.
+ * They are listed here in threshold order, not in the order they are stored in the indexes.
* minYesNo=indexes[IX_MIN_YES_NO];
+ * minYesNoMappingsOnly=indexes[IX_MIN_YES_NO_MAPPINGS_ONLY];
* minNoNo=indexes[IX_MIN_NO_NO];
+ * minNoNoCompBoundaryBefore=indexes[IX_MIN_NO_NO_COMP_BOUNDARY_BEFORE];
+ * minNoNoCompNoMaybeCC=indexes[IX_MIN_NO_NO_COMP_NO_MAYBE_CC];
+ * minNoNoEmpty=indexes[IX_MIN_NO_NO_EMPTY];
* limitNoNo=indexes[IX_LIMIT_NO_NO];
* minMaybeYes=indexes[IX_MIN_MAYBE_YES];
- * minYesNoMappingsOnly=indexes[IX_MIN_YES_NO_MAPPINGS_ONLY];
* See the normTrie description below and the design doc for details.
*
* UTrie2 normTrie; -- see utrie2_impl.h and utrie2.h
@@ -710,12 +823,14 @@
* The trie holds the main normalization data. Each code point is mapped to a 16-bit value.
* Rather than using independent bits in the value (which would require more than 16 bits),
* information is extracted primarily via range checks.
+ * Except, format version 3 uses bit 0 for hasCompBoundaryAfter().
* For example, a 16-bit value norm16 in the range minYesNo<=norm16<minNoNo
* means that the character has NF*C_QC=Yes and NF*D_QC=No properties,
* which means it has a two-way (round-trip) decomposition mapping.
* Values in the range 2<=norm16<limitNoNo are also directly indexes into the extraData
* pointing to mappings, compositions lists, or both.
- * Value norm16==0 means that the character is normalization-inert, that is,
+ * Value norm16==INERT (0 in versions 1 & 2, 1 in version 3)
+ * means that the character is normalization-inert, that is,
* it does not have a mapping, does not participate in composition, has a zero
* canonical combining class, and forms a boundary where text before it and after it
* can be normalized independently.
@@ -729,7 +844,7 @@
* The trie has a value for each lead surrogate code unit representing the "worst case"
* properties of the 1024 supplementary characters whose UTF-16 form starts with
* the lead surrogate. If all of the 1024 supplementary characters are normalization-inert,
- * then their lead surrogate code unit has the trie value 0.
+ * then their lead surrogate code unit has the trie value INERT.
* When the lead surrogate unit's value exceeds the quick check minimum during processing,
* the properties for the full supplementary code point need to be looked up.
*
@@ -738,6 +853,7 @@
*
* There is only one byte offset for the end of these two arrays.
* The split between them is given by the constant and variable mentioned above.
+ * In version 3, the difference must be shifted right by OFFSET_SHIFT.
*
* The maybeYesCompositions array contains compositions lists for characters that
* combine both forward (as starters in composition pairs)
@@ -754,6 +870,8 @@
* followed by only mappings for "NoNo" characters.
* (Referring to pairs of NFC/NFD quick check values.)
* The norm16 values of those characters are directly indexes into the extraData array.
+ * In version 3, the norm16 values must be shifted right by OFFSET_SHIFT
+ * for accessing extraData.
*
* The data structures for compositions lists and mappings are described in the design doc.
*
@@ -784,6 +902,50 @@
* This is fully equivalent with formatVersion 1's MAPPING_PLUS_COMPOSITION_LIST flag.
* It is needed for the new (in ICU 49) composePair(), not for other normalization.
* - Addition of the smallFCD[] bit set.
+ *
+ * Changes from format version 2 to format version 3 (ICU 60) ------------------
+ *
+ * - norm16 bit 0 indicates hasCompBoundaryAfter(),
+ * except that for contiguous composition (FCC) the tccc must be checked as well.
+ * Data indexes and ccc values are shifted left by one (OFFSET_SHIFT).
+ * Thresholds like minNoNo are tested before shifting.
+ *
+ * - Algorithmic mapping deltas are shifted left by two more bits (total DELTA_SHIFT),
+ * to make room for two bits (three values) indicating whether the tccc is 0, 1, or greater.
+ * See DELTA_TCCC_MASK etc.
+ * This helps with fetching tccc/FCD values and FCC hasCompBoundaryAfter().
+ * minMaybeYes is 8-aligned so that the DELTA_TCCC_MASK bits can be tested directly.
+ *
+ * - Algorithmic mappings are only used for mapping to "comp yes and ccc=0" characters,
+ * and ASCII characters are mapped algorithmically only to other ASCII characters.
+ * This helps with hasCompBoundaryBefore() and compose() fast paths.
+ * It is never necessary any more to loop for algorithmic mappings.
+ *
+ * - Addition of indexes[IX_MIN_NO_NO_COMP_BOUNDARY_BEFORE],
+ * indexes[IX_MIN_NO_NO_COMP_NO_MAYBE_CC], and indexes[IX_MIN_NO_NO_EMPTY],
+ * and separation of the noNo extraData into distinct ranges.
+ * With this, the noNo norm16 value indicates whether the mapping is
+ * compose-normalized, not normalized but hasCompBoundaryBefore(),
+ * not even that, or maps to an empty string.
+ * hasCompBoundaryBefore() can be determined solely from the norm16 value.
+ *
+ * - The norm16 value for Hangul LVT is now different from that for Hangul LV,
+ * so that hasCompBoundaryAfter() need not check for the syllable type.
+ * For Hangul LV, minYesNo continues to be used (no comp-boundary-after).
+ * For Hangul LVT, minYesNoMappingsOnly|HAS_COMP_BOUNDARY_AFTER is used.
+ * The extraData units at these indexes are set to firstUnit=2 and firstUnit=3, respectively,
+ * to simplify some code.
+ *
+ * - The extraData firstUnit bit 5 is no longer necessary
+ * (norm16 bit 0 used instead of firstUnit MAPPING_NO_COMP_BOUNDARY_AFTER),
+ * is reserved again, and always set to 0.
+ *
+ * - Addition of indexes[IX_MIN_LCCC_CP], the first code point where lccc!=0.
+ * This used to be hardcoded to U+0300, but in data like NFKC_Casefold it is lower:
+ * U+00AD Soft Hyphen maps to an empty string,
+ * which is artificially assigned "worst case" values lccc=1 and tccc=255.
+ *
+ * - A mapping to an empty string has explicit lccc=1 and tccc=255 values.
*/
#endif /* !UCONFIG_NO_NORMALIZATION */
Modified: trunk/Build/source/libs/icu/icu-src/source/common/normlzr.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/normlzr.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/normlzr.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*************************************************************************
@@ -23,6 +23,12 @@
#include "normalizer2impl.h"
#include "uprops.h" // for uniset_getUnicode32Instance()
+#if defined(_ARM64_) && defined(move32)
+ // System can define move32 intrinsics, but the char iters define move32 method
+ // using same undef trick in headers, so undef here to re-enable the method.
+#undef move32
+#endif
+
U_NAMESPACE_BEGIN
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(Normalizer)
@@ -40,7 +46,7 @@
init();
}
-Normalizer::Normalizer(const UChar *str, int32_t length, UNormalizationMode mode) :
+Normalizer::Normalizer(ConstChar16Ptr str, int32_t length, UNormalizationMode mode) :
UObject(), fFilteredNorm2(NULL), fNorm2(NULL), fUMode(mode), fOptions(0),
text(new UCharCharacterIterator(str, length)),
currentIndex(0), nextIndex(0),
@@ -435,7 +441,7 @@
}
void
-Normalizer::setText(const UChar* newText,
+Normalizer::setText(ConstChar16Ptr newText,
int32_t length,
UErrorCode &status)
{
Modified: trunk/Build/source/libs/icu/icu-src/source/common/parsepos.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/parsepos.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/parsepos.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
**********************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/patternprops.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/patternprops.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/patternprops.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -6,7 +6,7 @@
* Corporation and others. All Rights Reserved.
*******************************************************************************
* file name: patternprops.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
Modified: trunk/Build/source/libs/icu/icu-src/source/common/patternprops.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/patternprops.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/patternprops.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -6,7 +6,7 @@
* Corporation and others. All Rights Reserved.
*******************************************************************************
* file name: patternprops.h
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
Modified: trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
* Copyright (C) 2015, International Business Machines Corporation and
Modified: trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/propname.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/propname.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/propname.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
**********************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/propname.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/propname.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/propname.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
**********************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/propname_data.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/propname_data.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/propname_data.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
//
// Copyright (C) 1999-2016, International Business Machines
@@ -13,90 +13,92 @@
U_NAMESPACE_BEGIN
-const int32_t PropNameData::indexes[8]={0x20,0x135c,0x468d,0x8e95,0x8e95,0x8e95,0x2f,0};
+const int32_t PropNameData::indexes[8]={0x20,0x13c8,0x4831,0x92bb,0x92bb,0x92bb,0x2f,0};
-const int32_t PropNameData::valueMaps[1231]={
-6,0,0x3d,0,0xd5,0x356,0xd5,0x36c,0xd5,0x381,0xd5,0x397,0xd5,0x3a2,0xd5,0x3c3,
-0xd5,0x3d3,0xd5,0x3e2,0xd5,0x3f0,0xd5,0x414,0xd5,0x42b,0xd5,0x443,0xd5,0x45a,0xd5,0x469,
-0xd5,0x478,0xd5,0x489,0xd5,0x497,0xd5,0x4a9,0xd5,0x4c3,0xd5,0x4de,0xd5,0x4f3,0xd5,0x510,
-0xd5,0x521,0xd5,0x52c,0xd5,0x54b,0xd5,0x561,0xd5,0x572,0xd5,0x582,0xd5,0x59d,0xd5,0x5b6,
-0xd5,0x5c7,0xd5,0x5e1,0xd5,0x5f4,0xd5,0x604,0xd5,0x61e,0xd5,0x637,0xd5,0x64e,0xd5,0x662,
-0xd5,0x678,0xd5,0x68c,0xd5,0x6a2,0xd5,0x6bc,0xd5,0x6d4,0xd5,0x6f0,0xd5,0x6f8,0xd5,0x700,
-0xd5,0x708,0xd5,0x710,0xd5,0x719,0xd5,0x726,0xd5,0x739,0xd5,0x756,0xd5,0x773,0xd5,0x790,
-0xd5,0x7ae,0xd5,0x7cc,0xd5,0x7f0,0xd5,0x7fd,0xd5,0x824,0xd5,0x843,0xd5,0x1000,0x1016,0x86c,
-0x14f,0xa8c,0x16a,0x2a61,0xdb,0x2a80,0x280,0x2bbe,0x296,0x2c18,0x2a0,0x2e75,0x2c2,0x35d7,0x31f,0x3647,
-0x329,0x38f8,0x358,0x3936,0x360,0x42e5,0x413,0x4363,0x41d,0x4388,0x423,0x43a2,0x429,0x43c3,0x430,0x43dd,
-0xdb,0x4402,0xdb,0x4428,0x437,0x44d2,0x44d,0x454b,0x460,0x45e8,0x47a,0x2000,0x2001,0x461f,0x481,0x3000,
-0x3001,0x46ab,0,0x4000,0x400e,0x46bd,0,0x46c6,0,0x46e0,0,0x46f1,0,0x4702,0,0x4718,
-0,0x4721,0,0x473e,0,0x475c,0,0x477a,0,0x4798,0,0x47ae,0,0x47c2,0,0x47d8,
-0,0x7000,0x7001,0x47f1,0,0x702,0x12,0,1,0x12,0x20,0x720,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,0x8b2,
-1,0,0x17,0x87b,0x88c,0x89d,0x8b1,0x8c8,0x8e0,0x8f2,0x907,0x91e,0x933,0x943,0x955,0x972,
-0x98e,0x9a0,0x9bd,0x9d9,0x9f5,0xa0a,0xa1f,0xa39,0xa54,0xa6f,0xa54,1,0,0x112,0xa97,0xaa4,
-0xab7,0xadf,0xafd,0xb1b,0xb33,0xb5e,0xb88,0xba0,0xbb3,0xbc6,0xbd5,0xbe4,0xbf3,0xc02,0xc19,0xc2a,
-0xc3d,0xc50,0xc5d,0xc6a,0xc79,0xc8a,0xc9f,0xcb0,0xcbb,0xcc4,0xcd5,0xce6,0xcf9,0xd0b,0xd1e,0xd31,
-0xd70,0xd7d,0xd8a,0xd97,0xdac,0xddc,0xdf6,0xe17,0xe42,0xe65,0xec3,0xeea,0xf05,0xf14,0xf3b,0xf63,
-0xf86,0xfa9,0xfd3,0xfec,0x100b,0x102e,0x1052,0x1065,0x107f,0x10a9,0x10c1,0x10e9,0x1112,0x1125,0x1138,0x114b,
-0x1172,0x1181,0x11a1,0x11cf,0x11ed,0x121b,0x1237,0x1252,0x126b,0x1284,0x12a5,0x12d5,0x12f4,0x1316,0x134a,0x1377,
-0x13bc,0x13dd,0x1407,0x1428,0x1451,0x1464,0x1497,0x14ae,0x14bd,0x14ce,0x14f9,0x1510,0x1541,0x156f,0x15b2,0x15bd,
-0x15f6,0x1607,0x1618,0x1625,0x1638,0x1672,0x1696,0x16ba,0x16f4,0x172c,0x1757,0x176f,0x179b,0x17c7,0x17d4,0x17e3,
-0x1800,0x1822,0x1850,0x1870,0x1897,0x18be,0x18dd,0x18f0,0x1901,0x1912,0x1937,0x195c,0x1983,0x19b7,0x19e4,0x1a02,
-0x1a15,0x1a2e,0x1a67,0x1a76,0x1a96,0x1ab8,0x1ada,0x1af1,0x1b08,0x1b35,0x1b4e,0x1b67,0x1b98,0x1bc2,0x1bdd,0x1bf0,
-0x1c0f,0x1c18,0x1c2b,0x1c49,0x1c67,0x1c7a,0x1c91,0x1ca6,0x1cdb,0x1cff,0x1d14,0x1d23,0x1d36,0x1d5a,0x1d63,0x1d87,
-0x1d9e,0x1db1,0x1dc0,0x1dcb,0x1dec,0x1e04,0x1e13,0x1e22,0x1e31,0x1e48,0x1e5d,0x1e72,0x1eab,0x1ebe,0x1eda,0x1ee5,
-0x1ef2,0x1f20,0x1f44,0x1f67,0x1f7a,0x1f9c,0x1faf,0x1fca,0x1fed,0x2010,0x2035,0x2046,0x2075,0x20a2,0x20b9,0x20d4,
-0x20e3,0x210e,0x2146,0x2180,0x21ae,0x21bf,0x21cc,0x21f0,0x21ff,0x221b,0x2235,0x2252,0x228a,0x229f,0x22cc,0x22eb,
-0x2319,0x2339,0x236d,0x237c,0x23a6,0x23c9,0x23f4,0x23ff,0x2410,0x242b,0x244f,0x245c,0x2471,0x2498,0x24c3,0x24fa,
-0x250d,0x251e,0x254e,0x255f,0x256e,0x2583,0x25a1,0x25b4,0x25c7,0x25de,0x25fb,0x2606,0x260f,0x2631,0x2646,0x266b,
-0x2682,0x26ab,0x26c6,0x26db,0x26f4,0x2715,0x274a,0x275b,0x278c,0x27b0,0x27c1,0x27da,0x27e5,0x2812,0x2834,0x2862,
-0x2895,0x28a4,0x28b5,0x28d2,0x2914,0x293b,0x2948,0x295d,0x2981,0x29a7,0x29e0,0x29f1,0x2a15,0x2a20,0x2a2d,0x2a3c,
-0x1b91,1,0,0x12,0x2a97,0x2aa7,0x2aba,0x2aca,0x2ada,0x2ae9,0x2af9,0x2b0b,0x2b1e,0x2b30,0x2b40,0x2b50,
-0x2b5f,0x2b6e,0x2b7e,0x2b8b,0x2b9a,0x2bae,0x1c4f,1,0,6,0x2bd3,0x2bde,0x2beb,0x2bf8,0x2c05,0x2c10,
-0x1c93,1,0,0x1e,0x2c2d,0x2c3c,0x2c51,0x2c66,0x2c7b,0x2c8f,0x2ca0,0x2cb4,0x2cc7,0x2cd8,0x2cf1,0x2d03,
-0x2d14,0x2d28,0x2d3b,0x2d53,0x2d65,0x2d70,0x2d80,0x2d8e,0x2da3,0x2db8,0x2dce,0x2de8,0x2dfe,0x2e0e,0x2e22,0x2e36,
-0x2e47,0x2e5f,0x1ebe,1,0,0x59,0x2e87,0x2eaa,0x2eb3,0x2ec0,0x2ecb,0x2ed4,0x2edf,0x2ee8,0x2f01,0x2f06,
-0x2f0f,0x2f2c,0x2f35,0x2f42,0x2f4b,0x2f6f,0x2f76,0x2f7f,0x2f92,0x2f9d,0x2fa6,0x2fb1,0x2fca,0x2fd3,0x2fe2,0x2fed,
-0x2ff6,0x3001,0x300a,0x3011,0x301a,0x3025,0x302e,0x3047,0x3050,0x305d,0x3068,0x3079,0x3084,0x3099,0x30b0,0x30b9,
-0x30c2,0x30db,0x30e6,0x30ef,0x30f8,0x310f,0x312c,0x3137,0x3148,0x3153,0x315a,0x3167,0x3174,0x31a1,0x31b6,0x31bf,
-0x31da,0x31fd,0x321e,0x323f,0x3264,0x328b,0x32ac,0x32cf,0x32f0,0x3317,0x3338,0x335d,0x337c,0x339b,0x33ba,0x33d7,
-0x33f8,0x3419,0x343c,0x3461,0x3480,0x349f,0x34c0,0x34e7,0x350c,0x352b,0x354c,0x356f,0x358a,0x35a3,0x35be,0x2191,
-1,0,6,0x35e8,0x35f7,0x3607,0x3617,0x3627,0x3638,0x21ef,1,0,0x2b,0x3656,0x3662,0x3670,
-0x367f,0x368e,0x369e,0x36af,0x36c3,0x36d8,0x36ee,0x3701,0x3715,0x3725,0x372e,0x3739,0x3749,0x3765,0x3777,0x3785,
-0x3794,0x37a0,0x37b5,0x37c9,0x37dc,0x37ea,0x37fe,0x380c,0x3816,0x3828,0x3834,0x3842,0x3852,0x3859,0x3860,0x3867,
-0x386e,0x3875,0x388b,0x38ac,0x38be,0x38d5,0x38e0,0x38ef,0x2448,1,0,4,0x3909,0x3914,0x3920,0x392a,
-0x246e,1,0,0xaf,0x3941,0x394e,0x3963,0x3970,0x397f,0x398d,0x399c,0x39ab,0x39bd,0x39cc,0x39da,0x39eb,
-0x39fa,0x3a09,0x3a16,0x3a22,0x3a31,0x3a40,0x3a4a,0x3a57,0x3a64,0x3a73,0x3a81,0x3a90,0x3a9c,0x3aa6,0x3ab2,0x3ac2,
-0x3ad2,0x3ae0,0x3aec,0x3afd,0x3b09,0x3b15,0x3b23,0x3b30,0x3b3c,0x3b49,0xcb0,0x3b56,0x3b64,0x3b7e,0x3b87,0x3b95,
-0x3ba3,0x3baf,0x3bbe,0x3bcc,0x3bda,0x3be6,0x3bf5,0x3c03,0x3c11,0x3c1e,0x3c2d,0x3c48,0x3c57,0x3c68,0x3c79,0x3c8c,
-0x3c9e,0x3cad,0x3cbf,0x3cce,0x3cda,0x3ce5,0x1dc0,0x3cf2,0x3cfd,0x3d08,0x3d13,0x3d1e,0x3d39,0x3d44,0x3d4f,0x3d5a,
-0x3d6d,0x3d81,0x3d8c,0x3d9b,0x3daa,0x3db5,0x3dc0,0x3dcd,0x3ddc,0x3dea,0x3df5,0x3e10,0x3e1a,0x3e2b,0x3e3c,0x3e4b,
-0x3e5c,0x3e67,0x3e72,0x3e7d,0x3e88,0x3e93,0x3e9e,0x3ea9,0x3eb3,0x3ebe,0x3ece,0x3ed9,0x3ee7,0x3ef4,0x3eff,0x3f0e,
-0x3f1b,0x3f28,0x3f37,0x3f44,0x3f55,0x3f67,0x3f77,0x3f82,0x3f95,0x3fac,0x3fba,0x3fc7,0x3fd2,0x3fdf,0x3ff0,0x400c,
-0x4022,0x402d,0x404a,0x405a,0x4069,0x4074,0x407f,0x1eda,0x408b,0x4096,0x40ae,0x40be,0x40cd,0x40db,0x40e9,0x40f4,
-0x40ff,0x4113,0x412a,0x4142,0x4152,0x4162,0x4172,0x4184,0x418f,0x419a,0x41a4,0x41af,0x41bd,0x41d0,0x41dc,0x41e9,
-0x41f4,0x4210,0x421d,0x422b,0x4244,0x27da,0x4253,0x25fb,0x4260,0x426e,0x4280,0x428e,0x429a,0x42aa,0x2a15,0x42b8,
-0x42c4,0x42cf,0x42da,0x2d1f,1,0,6,0x42ff,0x4312,0x4322,0x4330,0x4341,0x4351,0x2d7b,0x12,0,
-1,0x437b,0x4381,0x2d88,0x12,0,1,0x437b,0x4381,0x2d95,1,0,3,0x437b,0x4381,0x43ba,
-0x2dab,1,0,3,0x437b,0x4381,0x43ba,0x2dc1,1,0,0x12,0x4444,0x444e,0x445a,0x4461,0x446c,
-0x4471,0x4478,0x447f,0x4488,0x448d,0x4492,0x44a2,0x38be,0x38d5,0x44ae,0x38e0,0x44be,0x38ef,0x2e6a,1,0,
-0xf,0x4444,0x44e5,0x44ef,0x44f9,0x4504,0x3794,0x450e,0x451a,0x4522,0x4529,0x4533,0x445a,0x4461,0x4471,0x453d,
-0x2ef1,1,0,0x16,0x4444,0x455a,0x44f9,0x4566,0x4573,0x4581,0x3794,0x458c,0x445a,0x459d,0x4471,0x45ac,
-0x45ba,0x38be,0x38ac,0x45c6,0x45d7,0x38d5,0x44ae,0x38e0,0x44be,0x38ef,0x3001,1,0,3,0x4606,0x460e,
-0x4616,0x301a,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,0x2c2d,0x2c3c,0x2c51,0x2c66,0x464d,0x2c7b,0x2c8f,
-0x4643,0x2ca0,0x2cb4,0x2cc7,0x465e,0x2cd8,0x2cf1,0x2d03,0x4675,0x2d14,0x2d28,0x2d3b,0x469e,0x2d53,0x2d65,0x2d70,
-0x2d80,0x463a,0x2d8e,0x2da3,0x2db8,0x2dce,0x2de8,0x2dfe,0x2e0e,0x2e22,0x2e36,0x4694,0x2e47,0x2e5f,0x467f
+const int32_t PropNameData::valueMaps[1258]={
+6,0,0x40,0,0xdb,0x356,0xdb,0x36c,0xdb,0x381,0xdb,0x397,0xdb,0x3a2,0xdb,0x3c3,
+0xdb,0x3d3,0xdb,0x3e2,0xdb,0x3f0,0xdb,0x414,0xdb,0x42b,0xdb,0x443,0xdb,0x45a,0xdb,0x469,
+0xdb,0x478,0xdb,0x489,0xdb,0x497,0xdb,0x4a9,0xdb,0x4c3,0xdb,0x4de,0xdb,0x4f3,0xdb,0x510,
+0xdb,0x521,0xdb,0x52c,0xdb,0x54b,0xdb,0x561,0xdb,0x572,0xdb,0x582,0xdb,0x59d,0xdb,0x5b6,
+0xdb,0x5c7,0xdb,0x5e1,0xdb,0x5f4,0xdb,0x604,0xdb,0x61e,0xdb,0x637,0xdb,0x64e,0xdb,0x662,
+0xdb,0x678,0xdb,0x68c,0xdb,0x6a2,0xdb,0x6bc,0xdb,0x6d4,0xdb,0x6f0,0xdb,0x6f8,0xdb,0x700,
+0xdb,0x708,0xdb,0x710,0xdb,0x719,0xdb,0x726,0xdb,0x739,0xdb,0x756,0xdb,0x773,0xdb,0x790,
+0xdb,0x7ae,0xdb,0x7cc,0xdb,0x7f0,0xdb,0x7fd,0xdb,0x824,0xdb,0x843,0xdb,0x86c,0xdb,0x88d,
+0xdb,0x8a4,0xdb,0x1000,0x1016,0x8c6,0x155,0xae6,0x170,0x2b81,0xe1,0x2ba0,0x28d,0x2cde,0x2a3,0x2d38,
+0x2ad,0x2f95,0x2cf,0x3836,0x337,0x38a6,0x341,0x3b40,0x370,0x3b7e,0x378,0x4567,0x42e,0x45e5,0x438,0x460a,
+0x43e,0x4624,0x444,0x4645,0x44b,0x465f,0xe1,0x4684,0xe1,0x46aa,0x452,0x4754,0x468,0x47cd,0x47b,0x486a,
+0x495,0x2000,0x2001,0x48a1,0x49c,0x3000,0x3001,0x492d,0,0x4000,0x400e,0x493f,0,0x4948,0,0x4962,
+0,0x4973,0,0x4984,0,0x499a,0,0x49a3,0,0x49c0,0,0x49de,0,0x49fc,0,0x4a1a,
+0,0x4a30,0,0x4a44,0,0x4a5a,0,0x7000,0x7001,0x4a73,0,0x748,0x12,0,1,0x12,
+0x20,0x766,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,0x8f8,1,0,0x17,0x8d5,0x8e6,0x8f7,0x90b,0x922,0x93a,0x94c,
+0x961,0x978,0x98d,0x99d,0x9af,0x9cc,0x9e8,0x9fa,0xa17,0xa33,0xa4f,0xa64,0xa79,0xa93,0xaae,0xac9,
+0xa9a,1,0,0x119,0xaf1,0xafe,0xb11,0xb39,0xb57,0xb75,0xb8d,0xbb8,0xbe2,0xbfa,0xc0d,0xc20,
+0xc2f,0xc3e,0xc4d,0xc5c,0xc73,0xc84,0xc97,0xcaa,0xcb7,0xcc4,0xcd3,0xce4,0xcf9,0xd0a,0xd15,0xd1e,
+0xd2f,0xd40,0xd53,0xd65,0xd78,0xd8b,0xdca,0xdd7,0xde4,0xdf1,0xe06,0xe36,0xe50,0xe71,0xe9c,0xebf,
+0xf1d,0xf44,0xf5f,0xf6e,0xf95,0xfbd,0xfe0,0x1003,0x102d,0x1046,0x1065,0x1088,0x10ac,0x10bf,0x10d9,0x1103,
+0x111b,0x1143,0x116c,0x117f,0x1192,0x11a5,0x11cc,0x11db,0x11fb,0x1229,0x1247,0x1275,0x1291,0x12ac,0x12c5,0x12de,
+0x12ff,0x132f,0x134e,0x1370,0x13a4,0x13d1,0x1416,0x1437,0x1461,0x1482,0x14ab,0x14be,0x14f1,0x1508,0x1517,0x1528,
+0x1553,0x156a,0x159b,0x15c9,0x160c,0x1617,0x1650,0x1661,0x1672,0x167f,0x1692,0x16cc,0x16f0,0x1714,0x174e,0x1786,
+0x17b1,0x17c9,0x17f5,0x1821,0x182e,0x183d,0x185a,0x187c,0x18aa,0x18ca,0x18f1,0x1918,0x1937,0x194a,0x195b,0x196c,
+0x1991,0x19b6,0x19dd,0x1a11,0x1a3e,0x1a5c,0x1a6f,0x1a88,0x1ac1,0x1ad0,0x1af0,0x1b12,0x1b34,0x1b4b,0x1b62,0x1b8f,
+0x1ba8,0x1bc1,0x1bf2,0x1c1c,0x1c37,0x1c4a,0x1c69,0x1c72,0x1c85,0x1ca3,0x1cc1,0x1cd4,0x1ceb,0x1d00,0x1d35,0x1d59,
+0x1d6e,0x1d7d,0x1d90,0x1db4,0x1dbd,0x1de1,0x1df8,0x1e0b,0x1e1a,0x1e25,0x1e46,0x1e5e,0x1e6d,0x1e7c,0x1e8b,0x1ea2,
+0x1eb7,0x1ecc,0x1f05,0x1f18,0x1f34,0x1f3f,0x1f4c,0x1f7a,0x1f9e,0x1fc1,0x1fd4,0x1ff6,0x2009,0x2024,0x2047,0x206a,
+0x208f,0x20a0,0x20cf,0x20fc,0x2113,0x212e,0x213d,0x2168,0x21a0,0x21da,0x2208,0x2219,0x2226,0x224a,0x2259,0x2275,
+0x228f,0x22ac,0x22e4,0x22f9,0x2326,0x2345,0x2373,0x2393,0x23c7,0x23d6,0x2400,0x2423,0x244e,0x2459,0x246a,0x2485,
+0x24a9,0x24b6,0x24cb,0x24f2,0x251d,0x2554,0x2567,0x2578,0x25a8,0x25b9,0x25c8,0x25dd,0x25fb,0x260e,0x2621,0x2638,
+0x2655,0x2660,0x2669,0x268b,0x26a0,0x26c5,0x26dc,0x2705,0x2720,0x2735,0x274e,0x276f,0x27a4,0x27b5,0x27e6,0x280a,
+0x281b,0x2834,0x283f,0x286c,0x288e,0x28bc,0x28ef,0x28fe,0x290f,0x292c,0x296e,0x2995,0x29a2,0x29b7,0x29db,0x2a01,
+0x2a3a,0x2a4b,0x2a6f,0x2a7a,0x2a87,0x2a96,0x2abb,0x2ae9,0x2b05,0x2b22,0x2b2f,0x2b40,0x2b5e,0x1c30,1,0,
+0x12,0x2bb7,0x2bc7,0x2bda,0x2bea,0x2bfa,0x2c09,0x2c19,0x2c2b,0x2c3e,0x2c50,0x2c60,0x2c70,0x2c7f,0x2c8e,0x2c9e,
+0x2cab,0x2cba,0x2cce,0x1cee,1,0,6,0x2cf3,0x2cfe,0x2d0b,0x2d18,0x2d25,0x2d30,0x1d32,1,0,
+0x1e,0x2d4d,0x2d5c,0x2d71,0x2d86,0x2d9b,0x2daf,0x2dc0,0x2dd4,0x2de7,0x2df8,0x2e11,0x2e23,0x2e34,0x2e48,0x2e5b,
+0x2e73,0x2e85,0x2e90,0x2ea0,0x2eae,0x2ec3,0x2ed8,0x2eee,0x2f08,0x2f1e,0x2f2e,0x2f42,0x2f56,0x2f67,0x2f7f,0x1f5d,
+1,0,0x64,0x2fa7,0x2fca,0x2fd3,0x2fe0,0x2feb,0x2ff4,0x2fff,0x3008,0x3021,0x3026,0x302f,0x304c,0x3055,
+0x3062,0x306b,0x308f,0x3096,0x309f,0x30b2,0x30bd,0x30c6,0x30d1,0x30ea,0x30f3,0x3102,0x310d,0x3116,0x3121,0x312a,
+0x3131,0x313a,0x3145,0x314e,0x3167,0x3170,0x317d,0x3188,0x3199,0x31a4,0x31b9,0x31d0,0x31d9,0x31e2,0x31fb,0x3206,
+0x320f,0x3218,0x322f,0x324c,0x3257,0x3268,0x3273,0x327a,0x3287,0x3294,0x32c1,0x32d6,0x32df,0x32fa,0x331d,0x333e,
+0x335f,0x3384,0x33ab,0x33cc,0x33ef,0x3410,0x3437,0x3458,0x347d,0x349c,0x34bb,0x34da,0x34f7,0x3518,0x3539,0x355c,
+0x3581,0x35a0,0x35bf,0x35e0,0x3607,0x362c,0x364b,0x366c,0x368f,0x36aa,0x36c3,0x36de,0x36f7,0x3714,0x372f,0x374c,
+0x376b,0x3788,0x37a5,0x37c4,0x37e1,0x37fc,0x3819,0x2283,1,0,6,0x3847,0x3856,0x3866,0x3876,0x3886,
+0x3897,0x22e1,1,0,0x2b,0x38b5,0x38c1,0x38cf,0x38de,0x38ed,0x38fd,0x390e,0x3922,0x3937,0x394d,0x3960,
+0x3974,0x3984,0x398d,0x3998,0x39a8,0x39c4,0x39d6,0x39e4,0x39f3,0x39ff,0x3a14,0x3a28,0x3a3b,0x3a49,0x3a5d,0x3a6b,
+0x3a75,0x3a87,0x3a93,0x3aa1,0x3ab1,0x3ab8,0x3abf,0x3ac6,0x3acd,0x3ad4,0x3aea,0x3b0b,0x88d,0x3b1d,0x3b28,0x3b37,
+0x253a,1,0,4,0x3b51,0x3b5c,0x3b68,0x3b72,0x2560,1,0,0xb2,0x3b89,0x3b96,0x3bab,0x3bb8,
+0x3bc7,0x3bd5,0x3be4,0x3bf3,0x3c05,0x3c14,0x3c22,0x3c33,0x3c42,0x3c51,0x3c5e,0x3c6a,0x3c79,0x3c88,0x3c92,0x3c9f,
+0x3cac,0x3cbb,0x3cc9,0x3cd8,0x3ce4,0x3cee,0x3cfa,0x3d0a,0x3d1a,0x3d28,0x3d34,0x3d45,0x3d51,0x3d5d,0x3d6b,0x3d78,
+0x3d84,0x3d91,0xd0a,0x3d9e,0x3dac,0x3dc6,0x3dcf,0x3ddd,0x3deb,0x3df7,0x3e06,0x3e14,0x3e22,0x3e2e,0x3e3d,0x3e4b,
+0x3e59,0x3e66,0x3e75,0x3e90,0x3e9f,0x3eb0,0x3ec1,0x3ed4,0x3ee6,0x3ef5,0x3f07,0x3f16,0x3f22,0x3f2d,0x1e1a,0x3f3a,
+0x3f45,0x3f50,0x3f5b,0x3f66,0x3f81,0x3f8c,0x3f97,0x3fa2,0x3fb5,0x3fc9,0x3fd4,0x3fe3,0x3ff2,0x3ffd,0x4008,0x4015,
+0x4024,0x4032,0x403d,0x4058,0x4062,0x4073,0x4084,0x4093,0x40a4,0x40af,0x40ba,0x40c5,0x40d0,0x40db,0x40e6,0x40f1,
+0x40fb,0x4106,0x4116,0x4121,0x412f,0x413c,0x4147,0x4156,0x4163,0x4170,0x417f,0x418c,0x419d,0x41af,0x41bf,0x41ca,
+0x41dd,0x41f4,0x4202,0x420f,0x421a,0x4227,0x4238,0x4254,0x426a,0x4275,0x4292,0x42a2,0x42b1,0x42bc,0x42c7,0x1f34,
+0x42d3,0x42de,0x42f6,0x4306,0x4315,0x4323,0x4331,0x433c,0x4347,0x435b,0x4372,0x438a,0x439a,0x43aa,0x43ba,0x43cc,
+0x43d7,0x43e2,0x43ec,0x43f8,0x4406,0x4419,0x4425,0x4432,0x443d,0x4459,0x4466,0x4474,0x448d,0x2834,0x449c,0x2655,
+0x44a9,0x44b7,0x44c9,0x44d7,0x44e3,0x44f3,0x2a6f,0x4501,0x450d,0x4518,0x4523,0x452e,0x4542,0x4550,0x2e57,1,
+0,6,0x4581,0x4594,0x45a4,0x45b2,0x45c3,0x45d3,0x2eb3,0x12,0,1,0x45fd,0x4603,0x2ec0,0x12,
+0,1,0x45fd,0x4603,0x2ecd,1,0,3,0x45fd,0x4603,0x463c,0x2ee3,1,0,3,0x45fd,
+0x4603,0x463c,0x2ef9,1,0,0x12,0x46c6,0x46d0,0x46dc,0x46e3,0x46ee,0x46f3,0x46fa,0x4701,0x470a,0x470f,
+0x4714,0x4724,0x88d,0x3b1d,0x4730,0x3b28,0x4740,0x3b37,0x2fa2,1,0,0xf,0x46c6,0x4767,0x4771,0x477b,
+0x4786,0x39f3,0x4790,0x479c,0x47a4,0x47ab,0x47b5,0x46dc,0x46e3,0x46f3,0x47bf,0x3029,1,0,0x16,0x46c6,
+0x47dc,0x477b,0x47e8,0x47f5,0x4803,0x39f3,0x480e,0x46dc,0x481f,0x46f3,0x482e,0x483c,0x88d,0x3b0b,0x4848,0x4859,
+0x3b1d,0x4730,0x3b28,0x4740,0x3b37,0x3139,1,0,3,0x4888,0x4890,0x4898,0x3152,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,0x2d4d,0x2d5c,0x2d71,0x2d86,0x48cf,0x2d9b,0x2daf,0x48c5,0x2dc0,0x2dd4,0x2de7,0x48e0,
+0x2df8,0x2e11,0x2e23,0x48f7,0x2e34,0x2e48,0x2e5b,0x4920,0x2e73,0x2e85,0x2e90,0x2ea0,0x48bc,0x2eae,0x2ec3,0x2ed8,
+0x2eee,0x2f08,0x2f1e,0x2f2e,0x2f42,0x2f56,0x4916,0x2f67,0x2f7f,0x4901
};
-const uint8_t PropNameData::bytesTries[13105]={
-0,0x15,0x6d,0xc3,0x23,0x73,0xc1,0xf7,0x76,0x5f,0x76,0x68,0x77,0x90,0x78,1,
+const uint8_t PropNameData::bytesTries[13417]={
+0,0x15,0x6d,0xc3,0x5d,0x73,0xc1,0xf7,0x76,0x5f,0x76,0x68,0x77,0x90,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,0x81,
1,0x61,0x24,0x73,0x69,0x1e,0x72,0x69,0x61,0x74,0x69,0x6f,0x6e,0x73,0x65,0x6c,
@@ -128,625 +130,644 @@
0xd8,0x40,0xa,0x11,0x63,0x63,0xc3,0x11,0x11,0x72,0x6d,0x58,0x1e,0x69,0x6e,0x61,
0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x59,0x1d,0x74,0x6c,
0x65,0x63,0x61,0x73,0x65,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,0x40,0xa,0x6d,
-0x42,0x6e,0x48,0x70,0xa2,0xda,0x71,0xa4,9,0x72,0x15,0x61,0x64,0x69,0x63,0x61,
-0x6c,0x55,0x12,0x61,0x74,0x68,0x4f,6,0x6f,0x39,0x6f,0x32,0x74,0xc3,9,0x75,
-0x54,0x76,0xd9,0x30,0,0x12,0x6e,0x63,0x68,0x1f,0x61,0x72,0x61,0x63,0x74,0x65,
-0x72,0x63,0x6f,0x64,0x65,0x70,0x6f,0x69,0x6e,0x74,0x51,0x14,0x6d,0x65,0x72,0x69,
-0x63,1,0x74,0x32,0x76,0x13,0x61,0x6c,0x75,0x65,0xd9,0x30,0,0x12,0x79,0x70,
-0x65,0xc3,9,0x61,0xa2,0x77,0x63,0xa2,0x82,0x66,2,0x63,0x98,0x64,0xa2,0x53,
-0x6b,1,0x63,0x56,0x64,1,0x69,0x42,0x71,1,0x63,0xc3,0xd,0x75,0x17,0x69,
-0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xd,0x13,0x6e,0x65,0x72,0x74,0x6d,1,
-0x69,0x42,0x71,1,0x63,0xc3,0xf,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,
-0x6b,0xc3,0xf,0x13,0x6e,0x65,0x72,0x74,0x71,1,0x69,0x42,0x71,1,0x63,0xc3,
-0xe,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xe,0x13,0x6e,0x65,
-0x72,0x74,0x6f,1,0x69,0x42,0x71,1,0x63,0xc3,0xc,0x75,0x17,0x69,0x63,0x6b,
-0x63,0x68,0x65,0x63,0x6b,0xc3,0xc,0x13,0x6e,0x65,0x72,0x74,0x6b,0xd8,0x40,5,
-1,0x31,0xd9,0x40,0xb,0x6d,0x10,0x65,0xd9,0x40,5,0x12,0x68,0x61,0x72,0x51,
-1,0x61,0x2c,0x72,0x12,0x69,0x6e,0x74,0x7f,0x10,0x74,2,0x73,0x2c,0x74,0x30,
-0x77,0x10,0x73,0x77,0x11,0x79,0x6e,0x75,0x12,0x65,0x72,0x6e,1,0x73,0x38,0x77,
-0x18,0x68,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x77,0x14,0x79,0x6e,0x74,0x61,
-0x78,0x75,1,0x6d,0x3c,0x75,0x1a,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0x6d,0x61,
-0x72,0x6b,0x53,0x12,0x61,0x72,0x6b,0x53,0x66,0xc1,0xb9,0x69,0xc0,0xfd,0x69,0xa2,
-0x6f,0x6a,0xa2,0xca,0x6c,4,0x62,0xc3,8,0x63,0x8c,0x65,0x98,0x69,0xa2,0x56,
-0x6f,2,0x65,0x4b,0x67,0x4c,0x77,0x11,0x65,0x72,0x4c,0x13,0x63,0x61,0x73,0x65,
-0x4c,0x16,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,0x40,4,0x11,0x69,0x63,0x1f,
-0x61,0x6c,0x6f,0x72,0x64,0x65,0x72,0x65,0x78,0x63,0x65,0x70,0x74,0x69,0x6f,0x6e,
-0x4b,0xd8,0x40,4,0x11,0x63,0x63,0xc3,0x10,0x18,0x61,0x64,0x63,0x61,0x6e,0x6f,
-0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62,0x69,0x6e,0x69,0x6e,0x67,0x63,
-0x6c,0x61,0x73,0x73,0xc3,0x10,0x16,0x6e,0x65,0x62,0x72,0x65,0x61,0x6b,0xc3,8,
-1,0x64,0x44,0x73,1,0x63,0xd9,0x40,3,0x6f,0x16,0x63,0x6f,0x6d,0x6d,0x65,
-0x6e,0x74,0xd9,0x40,3,2,0x63,0x80,0x65,0x90,0x73,0x40,1,0x62,0x52,0x74,
-0x46,1,0x61,0x40,0x72,0x1c,0x69,0x6e,0x61,0x72,0x79,0x6f,0x70,0x65,0x72,0x61,
-0x74,0x6f,0x72,0x47,0x11,0x72,0x74,0x41,0x44,0x1c,0x69,0x6e,0x61,0x72,0x79,0x6f,
-0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x45,0x3e,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,
-0x65,0x3f,0x10,0x6f,0x42,0x16,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x43,2,0x67,
-0xc3,6,0x6f,0x26,0x74,0xc3,7,0x11,0x69,0x6e,1,0x63,0x4a,0x69,0x11,0x6e,
-0x67,1,0x67,0x2e,0x74,0x12,0x79,0x70,0x65,0xc3,7,0x13,0x72,0x6f,0x75,0x70,
-0xc3,6,0x48,0x15,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x49,0x66,0x86,0x67,0xa2,0x4a,
-0x68,3,0x61,0x36,0x65,0x58,0x73,0x68,0x79,0x13,0x70,0x68,0x65,0x6e,0x3d,0x1f,
-0x6e,0x67,0x75,0x6c,0x73,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x74,0x79,0x70,0x65,
-0xc3,0xb,0x10,0x78,0x3a,0x14,0x64,0x69,0x67,0x69,0x74,0x3b,0x10,0x74,0xc3,0xb,
-0x16,0x75,0x6c,0x6c,0x63,0x6f,0x6d,0x70,0x1f,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,
-0x65,0x78,0x63,0x6c,0x75,0x73,0x69,0x6f,0x6e,0x33,2,0x63,0xa2,0x44,0x65,0xa2,
-0x4b,0x72,3,0x61,0x34,0x62,0x84,0x65,0x8a,0x6c,0x12,0x69,0x6e,0x6b,0x39,0x11,
-0x70,0x68,0x7c,0x12,0x65,0x6d,0x65,3,0x62,0x5e,0x63,0x30,0x65,0x48,0x6c,0x12,
-0x69,0x6e,0x6b,0x39,0x1a,0x6c,0x75,0x73,0x74,0x65,0x72,0x62,0x72,0x65,0x61,0x6b,
-0xc3,0x12,0x14,0x78,0x74,0x65,0x6e,0x64,0x37,0x12,0x61,0x73,0x65,0x35,0x11,0x78,
-0x74,0x37,0xc2,5,1,0x62,0xc3,0x12,0x6d,0xd9,0x20,0,0x1c,0x6e,0x65,0x72,
-0x61,0x6c,0x63,0x61,0x74,0x65,0x67,0x6f,0x72,0x79,0xc2,5,0x13,0x6d,0x61,0x73,
-0x6b,0xd9,0x20,0,0x61,0xa2,0x50,0x62,0xa2,0x7e,0x63,0xa2,0xf0,0x64,0xa4,0xbd,
-0x65,2,0x61,0x3a,0x6d,0x58,0x78,0x10,0x74,0x30,0x14,0x65,0x6e,0x64,0x65,0x72,
-0x31,0xc2,4,0x1b,0x73,0x74,0x61,0x73,0x69,0x61,0x6e,0x77,0x69,0x64,0x74,0x68,
-0xc3,4,0x12,0x6f,0x6a,0x69,0x92,1,0x6d,0x3c,0x70,0x1a,0x72,0x65,0x73,0x65,
-0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x95,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,
-0x96,0x13,0x62,0x61,0x73,0x65,0x99,3,0x67,0x44,0x68,0x4a,0x6c,0x4e,0x73,0x1a,
-0x63,0x69,0x69,0x68,0x65,0x78,0x64,0x69,0x67,0x69,0x74,0x23,0x10,0x65,0xd9,0x40,
-0,0x11,0x65,0x78,0x23,1,0x6e,0x38,0x70,0x11,0x68,0x61,0x20,0x14,0x62,0x65,
-0x74,0x69,0x63,0x21,0x11,0x75,0x6d,0x79,4,0x63,0xc3,0,0x69,0x3e,0x6c,0xa2,
-0x57,0x6d,0xa2,0x64,0x70,1,0x62,0xd9,0x40,0xd,0x74,0xc3,0x15,0x11,0x64,0x69,
-2,0x63,0x54,0x6d,0x74,0x70,0x1b,0x61,0x69,0x72,0x65,0x64,0x62,0x72,0x61,0x63,
-0x6b,0x65,0x74,0xd8,0x40,0xd,0x13,0x74,0x79,0x70,0x65,0xc3,0x15,0x24,1,0x6c,
-0x30,0x6f,0x14,0x6e,0x74,0x72,0x6f,0x6c,0x25,0x12,0x61,0x73,0x73,0xc3,0,0x26,
-0x14,0x69,0x72,0x72,0x6f,0x72,1,0x65,0x38,0x69,0x16,0x6e,0x67,0x67,0x6c,0x79,
-0x70,0x68,0xd9,0x40,1,0x10,0x64,0x27,2,0x61,0x32,0x6b,0xc3,1,0x6f,0x11,
-0x63,0x6b,0xc3,1,0x11,0x6e,0x6b,0x7b,0x10,0x67,0xd9,0x40,1,6,0x68,0x7c,
-0x68,0x54,0x69,0x85,0x6f,0xa2,0x6f,0x77,4,0x63,0x30,0x6b,0x36,0x6c,0x87,0x74,
-0x8b,0x75,0x89,1,0x66,0x8d,0x6d,0x8f,0x11,0x63,0x66,0x91,0x18,0x61,0x6e,0x67,
-0x65,0x73,0x77,0x68,0x65,0x6e,4,0x63,0x44,0x6c,0x6c,0x6e,0x7e,0x74,0x98,0x75,
-0x18,0x70,0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x64,0x89,0x12,0x61,0x73,0x65,1,
-0x66,0x30,0x6d,0x14,0x61,0x70,0x70,0x65,0x64,0x8f,0x14,0x6f,0x6c,0x64,0x65,0x64,
-0x8d,0x18,0x6f,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x64,0x87,0x1c,0x66,0x6b,0x63,
-0x63,0x61,0x73,0x65,0x66,0x6f,0x6c,0x64,0x65,0x64,0x91,0x18,0x69,0x74,0x6c,0x65,
-0x63,0x61,0x73,0x65,0x64,0x8b,0x13,0x6d,0x70,0x65,0x78,0x33,0x61,0x2e,0x63,0xa2,
-0x48,0x66,0xd9,0x40,2,1,0x6e,0x72,0x73,0x10,0x65,3,0x64,0x83,0x66,0x3a,
-0x69,0x4a,0x73,0x17,0x65,0x6e,0x73,0x69,0x74,0x69,0x76,0x65,0x65,0x15,0x6f,0x6c,
-0x64,0x69,0x6e,0x67,0xd9,0x40,2,0x17,0x67,0x6e,0x6f,0x72,0x61,0x62,0x6c,0x65,
-0x85,0x13,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62,0x69,0x6e,0x69,
-0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,2,0x10,0x63,0xc3,2,3,0x61,0x30,
-0x65,0x34,0x69,0xa2,0x41,0x74,0xc3,3,0x11,0x73,0x68,0x29,2,0x63,0x3a,0x66,
-0x58,0x70,0x2c,0x16,0x72,0x65,0x63,0x61,0x74,0x65,0x64,0x2d,0x1d,0x6f,0x6d,0x70,
-0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x74,0x79,0x70,0x65,0xc3,3,0x15,0x61,0x75,
-0x6c,0x74,0x69,0x67,0x1f,0x6e,0x6f,0x72,0x61,0x62,0x6c,0x65,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,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,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,0x37,0xa3,0x6b,0x36,
-0x10,0x38,0xa3,0x76,0x38,1,0x32,0xa3,0x7a,0x39,0xa3,0x81,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,0x15,0x6d,0xc7,0x81,0x73,0xc3,0x8b,0x76,0x9c,0x76,0x92,
-0x77,0xa2,0x8b,0x79,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,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,0x18,0x61,
-0x72,0x61,0x6e,0x67,0x63,0x69,0x74,0x69,0xa3,0xfc,0x73,0xa2,0x4b,0x74,0xa6,0x2b,
-0x75,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,7,0x6f,0xc1,0x5b,0x6f,0x54,0x70,0x68,
-0x75,0xa2,0x43,0x79,1,0x6c,0x2c,0x72,0x12,0x69,0x61,0x63,0x3b,0x17,0x6f,0x74,
-0x69,0x6e,0x61,0x67,0x72,0x69,0xa3,0x8f,0x18,0x72,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,0x5a,0x68,0x84,0x69,0xa2,0x5b,0x6d,0x16,
-0x61,0x6c,0x6c,0x66,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,4,0x61,0x68,0x65,0xa2,
-0x8a,0x68,0xa2,0x8d,0x69,0xa2,0x95,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,0x49,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,0x6d,0x84,0x6e,0xa6,0x34,0x6f,0xa6,0x6d,0x70,
-0xa8,0x29,0x72,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,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,0x29,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,4,0x68,0xa2,0x52,0x6c,0xa2,0x68,0x6e,0xa2,0x6d,0x72,0xa2,0x7d,0x74,
-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,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,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x4f,1,0x64,0x34,0x69,0x15,0x63,0x68,
-0x61,0x65,0x61,0x6e,0xa3,0xea,0x12,0x61,0x69,0x63,0xa3,0xc6,0x13,0x63,0x68,0x65,
-0x6e,0xa5,0xc,2,0x65,0x66,0x6e,0x98,0x72,0x14,0x6f,0x69,0x74,0x69,0x63,1,
+0x70,0x6e,0x76,0x70,0xa2,0xf1,0x71,0xa4,0x43,0x72,2,0x61,0x28,0x65,0x32,0x69,
+0x9d,0x14,0x64,0x69,0x63,0x61,0x6c,0x55,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,
+0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,0x72,0x9d,0x12,0x61,0x74,0x68,0x4f,6,0x6f,
+0x39,0x6f,0x32,0x74,0xc3,9,0x75,0x54,0x76,0xd9,0x30,0,0x12,0x6e,0x63,0x68,
+0x1f,0x61,0x72,0x61,0x63,0x74,0x65,0x72,0x63,0x6f,0x64,0x65,0x70,0x6f,0x69,0x6e,
+0x74,0x51,0x14,0x6d,0x65,0x72,0x69,0x63,1,0x74,0x32,0x76,0x13,0x61,0x6c,0x75,
+0x65,0xd9,0x30,0,0x12,0x79,0x70,0x65,0xc3,9,0x61,0xa2,0x77,0x63,0xa2,0x82,
+0x66,2,0x63,0x98,0x64,0xa2,0x53,0x6b,1,0x63,0x56,0x64,1,0x69,0x42,0x71,
+1,0x63,0xc3,0xd,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xd,
+0x13,0x6e,0x65,0x72,0x74,0x6d,1,0x69,0x42,0x71,1,0x63,0xc3,0xf,0x75,0x17,
+0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xf,0x13,0x6e,0x65,0x72,0x74,0x71,
+1,0x69,0x42,0x71,1,0x63,0xc3,0xe,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,
+0x63,0x6b,0xc3,0xe,0x13,0x6e,0x65,0x72,0x74,0x6f,1,0x69,0x42,0x71,1,0x63,
+0xc3,0xc,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xc,0x13,0x6e,
+0x65,0x72,0x74,0x6b,0xd8,0x40,5,1,0x31,0xd9,0x40,0xb,0x6d,0x10,0x65,0xd9,
+0x40,5,0x12,0x68,0x61,0x72,0x51,2,0x61,0x6c,0x63,0xa2,0x4c,0x72,1,0x65,
+0x2a,0x69,0x11,0x6e,0x74,0x7f,0x16,0x70,0x65,0x6e,0x64,0x65,0x64,0x63,0x1f,0x6f,
+0x6e,0x63,0x61,0x74,0x65,0x6e,0x61,0x74,0x69,0x6f,0x6e,0x6d,0x61,0x72,0x6b,0x9f,
+0x10,0x74,2,0x73,0x2c,0x74,0x30,0x77,0x10,0x73,0x77,0x11,0x79,0x6e,0x75,0x12,
+0x65,0x72,0x6e,1,0x73,0x38,0x77,0x18,0x68,0x69,0x74,0x65,0x73,0x70,0x61,0x63,
+0x65,0x77,0x14,0x79,0x6e,0x74,0x61,0x78,0x75,0x10,0x6d,0x9f,1,0x6d,0x3c,0x75,
+0x1a,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0x6d,0x61,0x72,0x6b,0x53,0x12,0x61,0x72,
+0x6b,0x53,0x66,0xc1,0xb9,0x69,0xc0,0xfd,0x69,0xa2,0x6f,0x6a,0xa2,0xca,0x6c,4,
+0x62,0xc3,8,0x63,0x8c,0x65,0x98,0x69,0xa2,0x56,0x6f,2,0x65,0x4b,0x67,0x4c,
+0x77,0x11,0x65,0x72,0x4c,0x13,0x63,0x61,0x73,0x65,0x4c,0x16,0x6d,0x61,0x70,0x70,
+0x69,0x6e,0x67,0xd9,0x40,4,0x11,0x69,0x63,0x1f,0x61,0x6c,0x6f,0x72,0x64,0x65,
+0x72,0x65,0x78,0x63,0x65,0x70,0x74,0x69,0x6f,0x6e,0x4b,0xd8,0x40,4,0x11,0x63,
+0x63,0xc3,0x10,0x18,0x61,0x64,0x63,0x61,0x6e,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c,
+0x63,0x6f,0x6d,0x62,0x69,0x6e,0x69,0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,0x10,
+0x16,0x6e,0x65,0x62,0x72,0x65,0x61,0x6b,0xc3,8,1,0x64,0x44,0x73,1,0x63,
+0xd9,0x40,3,0x6f,0x16,0x63,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0xd9,0x40,3,2,
+0x63,0x80,0x65,0x90,0x73,0x40,1,0x62,0x52,0x74,0x46,1,0x61,0x40,0x72,0x1c,
+0x69,0x6e,0x61,0x72,0x79,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x47,0x11,0x72,
+0x74,0x41,0x44,0x1c,0x69,0x6e,0x61,0x72,0x79,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,
+0x72,0x45,0x3e,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x3f,0x10,0x6f,0x42,0x16,
+0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x43,2,0x67,0xc3,6,0x6f,0x26,0x74,0xc3,
+7,0x11,0x69,0x6e,1,0x63,0x4a,0x69,0x11,0x6e,0x67,1,0x67,0x2e,0x74,0x12,
+0x79,0x70,0x65,0xc3,7,0x13,0x72,0x6f,0x75,0x70,0xc3,6,0x48,0x15,0x6f,0x6e,
+0x74,0x72,0x6f,0x6c,0x49,0x66,0x86,0x67,0xa2,0x4a,0x68,3,0x61,0x36,0x65,0x58,
+0x73,0x68,0x79,0x13,0x70,0x68,0x65,0x6e,0x3d,0x1f,0x6e,0x67,0x75,0x6c,0x73,0x79,
+0x6c,0x6c,0x61,0x62,0x6c,0x65,0x74,0x79,0x70,0x65,0xc3,0xb,0x10,0x78,0x3a,0x14,
+0x64,0x69,0x67,0x69,0x74,0x3b,0x10,0x74,0xc3,0xb,0x16,0x75,0x6c,0x6c,0x63,0x6f,
+0x6d,0x70,0x1f,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x78,0x63,0x6c,0x75,0x73,
+0x69,0x6f,0x6e,0x33,2,0x63,0xa2,0x44,0x65,0xa2,0x4b,0x72,3,0x61,0x34,0x62,
+0x84,0x65,0x8a,0x6c,0x12,0x69,0x6e,0x6b,0x39,0x11,0x70,0x68,0x7c,0x12,0x65,0x6d,
+0x65,3,0x62,0x5e,0x63,0x30,0x65,0x48,0x6c,0x12,0x69,0x6e,0x6b,0x39,0x1a,0x6c,
+0x75,0x73,0x74,0x65,0x72,0x62,0x72,0x65,0x61,0x6b,0xc3,0x12,0x14,0x78,0x74,0x65,
+0x6e,0x64,0x37,0x12,0x61,0x73,0x65,0x35,0x11,0x78,0x74,0x37,0xc2,5,1,0x62,
+0xc3,0x12,0x6d,0xd9,0x20,0,0x1c,0x6e,0x65,0x72,0x61,0x6c,0x63,0x61,0x74,0x65,
+0x67,0x6f,0x72,0x79,0xc2,5,0x13,0x6d,0x61,0x73,0x6b,0xd9,0x20,0,0x61,0xa2,
+0x5c,0x62,0xa2,0x8a,0x63,0xa2,0xfc,0x64,0xa4,0xc9,0x65,2,0x61,0x3a,0x6d,0x58,
+0x78,0x10,0x74,0x30,0x14,0x65,0x6e,0x64,0x65,0x72,0x31,0xc2,4,0x1b,0x73,0x74,
+0x61,0x73,0x69,0x61,0x6e,0x77,0x69,0x64,0x74,0x68,0xc3,4,0x12,0x6f,0x6a,0x69,
+0x92,2,0x63,0x40,0x6d,0x50,0x70,0x1a,0x72,0x65,0x73,0x65,0x6e,0x74,0x61,0x74,
+0x69,0x6f,0x6e,0x95,0x17,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x9b,0x16,0x6f,
+0x64,0x69,0x66,0x69,0x65,0x72,0x96,0x13,0x62,0x61,0x73,0x65,0x99,3,0x67,0x44,
+0x68,0x4a,0x6c,0x4e,0x73,0x1a,0x63,0x69,0x69,0x68,0x65,0x78,0x64,0x69,0x67,0x69,
+0x74,0x23,0x10,0x65,0xd9,0x40,0,0x11,0x65,0x78,0x23,1,0x6e,0x38,0x70,0x11,
+0x68,0x61,0x20,0x14,0x62,0x65,0x74,0x69,0x63,0x21,0x11,0x75,0x6d,0x79,4,0x63,
+0xc3,0,0x69,0x3e,0x6c,0xa2,0x57,0x6d,0xa2,0x64,0x70,1,0x62,0xd9,0x40,0xd,
+0x74,0xc3,0x15,0x11,0x64,0x69,2,0x63,0x54,0x6d,0x74,0x70,0x1b,0x61,0x69,0x72,
+0x65,0x64,0x62,0x72,0x61,0x63,0x6b,0x65,0x74,0xd8,0x40,0xd,0x13,0x74,0x79,0x70,
+0x65,0xc3,0x15,0x24,1,0x6c,0x30,0x6f,0x14,0x6e,0x74,0x72,0x6f,0x6c,0x25,0x12,
+0x61,0x73,0x73,0xc3,0,0x26,0x14,0x69,0x72,0x72,0x6f,0x72,1,0x65,0x38,0x69,
+0x16,0x6e,0x67,0x67,0x6c,0x79,0x70,0x68,0xd9,0x40,1,0x10,0x64,0x27,2,0x61,
+0x32,0x6b,0xc3,1,0x6f,0x11,0x63,0x6b,0xc3,1,0x11,0x6e,0x6b,0x7b,0x10,0x67,
+0xd9,0x40,1,6,0x68,0x7c,0x68,0x54,0x69,0x85,0x6f,0xa2,0x6f,0x77,4,0x63,
+0x30,0x6b,0x36,0x6c,0x87,0x74,0x8b,0x75,0x89,1,0x66,0x8d,0x6d,0x8f,0x11,0x63,
+0x66,0x91,0x18,0x61,0x6e,0x67,0x65,0x73,0x77,0x68,0x65,0x6e,4,0x63,0x44,0x6c,
+0x6c,0x6e,0x7e,0x74,0x98,0x75,0x18,0x70,0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x64,
+0x89,0x12,0x61,0x73,0x65,1,0x66,0x30,0x6d,0x14,0x61,0x70,0x70,0x65,0x64,0x8f,
+0x14,0x6f,0x6c,0x64,0x65,0x64,0x8d,0x18,0x6f,0x77,0x65,0x72,0x63,0x61,0x73,0x65,
+0x64,0x87,0x1c,0x66,0x6b,0x63,0x63,0x61,0x73,0x65,0x66,0x6f,0x6c,0x64,0x65,0x64,
+0x91,0x18,0x69,0x74,0x6c,0x65,0x63,0x61,0x73,0x65,0x64,0x8b,0x13,0x6d,0x70,0x65,
+0x78,0x33,0x61,0x2e,0x63,0xa2,0x48,0x66,0xd9,0x40,2,1,0x6e,0x72,0x73,0x10,
+0x65,3,0x64,0x83,0x66,0x3a,0x69,0x4a,0x73,0x17,0x65,0x6e,0x73,0x69,0x74,0x69,
+0x76,0x65,0x65,0x15,0x6f,0x6c,0x64,0x69,0x6e,0x67,0xd9,0x40,2,0x17,0x67,0x6e,
+0x6f,0x72,0x61,0x62,0x6c,0x65,0x85,0x13,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,
+0x6f,0x6d,0x62,0x69,0x6e,0x69,0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,2,0x10,
+0x63,0xc3,2,3,0x61,0x30,0x65,0x34,0x69,0xa2,0x41,0x74,0xc3,3,0x11,0x73,
+0x68,0x29,2,0x63,0x3a,0x66,0x58,0x70,0x2c,0x16,0x72,0x65,0x63,0x61,0x74,0x65,
+0x64,0x2d,0x1d,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x74,0x79,0x70,
+0x65,0xc3,3,0x15,0x61,0x75,0x6c,0x74,0x69,0x67,0x1f,0x6e,0x6f,0x72,0x61,0x62,
+0x6c,0x65,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,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,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,0x37,0xa3,0x6b,0x36,0x10,0x38,0xa3,0x76,0x38,1,0x32,0xa3,0x7a,0x39,
+0xa3,0x81,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,0xc7,0xc5,0x74,
+0xc1,0xb8,0x77,0x57,0x77,0x48,0x79,0x5c,0x7a,0x1d,0x61,0x6e,0x61,0x62,0x61,0x7a,
+0x61,0x72,0x73,0x71,0x75,0x61,0x72,0x65,0xa5,0x18,0x18,0x61,0x72,0x61,0x6e,0x67,
+0x63,0x69,0x74,0x69,0xa3,0xfc,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,
+0x12,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,0x8a,0x68,0xa2,0x8d,
+0x69,0xa2,0x95,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,0x49,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,0xc2,0xeb,0x70,0xa6,1,
+0x72,0xa6,0xbd,0x73,7,0x6f,0xc1,0x75,0x6f,0x74,0x70,0x9c,0x75,0xa2,0x5d,0x79,
+1,0x6c,0x4c,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,1,0x72,0x30,0x79,0x13,0x6f,0x6d,0x62,0x6f,0xa5,0x16,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,0x5a,0x68,
+0x84,0x69,0xa2,0x5b,0x6d,0x16,0x61,0x6c,0x6c,0x66,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,0xc3,0x6e,0xa6,0xd2,0x6f,5,
+0x70,0x4b,0x70,0x46,0x72,0x7a,0x73,1,0x61,0x30,0x6d,0x13,0x61,0x6e,0x79,0x61,
+0xa3,0x7a,0x11,0x67,0x65,0xa5,0xf,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,0x63,0xa2,0x66,
+0x67,0xa2,0x66,0x6c,1,0x63,0xa2,0x57,0x64,5,0x70,0x2d,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,0x1a,0x6f,0x75,0x74,0x68,
+0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0xbb,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,0x36,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,5,0x72,0x62,0x72,0xa2,0x4c,0x73,0xa2,0x50,0x74,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,0x13,0x63,0x68,0x65,0x6e,0xa5,0xc,0x18,0x61,
+0x72,0x61,0x6d,0x67,0x6f,0x6e,0x64,0x69,0xa5,0x14,0x68,0x4c,0x6c,0x7a,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,0x15,0x61,0x79,0x61,0x6c,
+0x61,0x6d,0x4f,2,0x65,0x66,0x6e,0x98,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,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,
-5,0x6b,0x1b,0x6b,0x3c,0x6f,0x40,0x75,0x18,0x6d,0x62,0x65,0x72,0x66,0x6f,0x72,
-0x6d,0x73,0x7b,0x10,0x6f,0xa3,0x92,0x14,0x62,0x6c,0x6f,0x63,0x6b,0x21,0x61,0x44,
-0x62,0x21,0x65,0x10,0x77,1,0x61,0xa5,0xe,0x74,0x14,0x61,0x69,0x6c,0x75,0x65,
-0xa3,0x8b,0x16,0x62,0x61,0x74,0x61,0x65,0x61,0x6e,0xa3,0xef,5,0x70,0x4b,0x70,
-0x46,0x72,0x7a,0x73,1,0x61,0x30,0x6d,0x13,0x61,0x6e,0x79,0x61,0xa3,0x7a,0x11,
-0x67,0x65,0xa5,0xf,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,0x63,0xa2,0x66,0x67,0xa2,0x66,
-0x6c,1,0x63,0xa2,0x57,0x64,5,0x70,0x2d,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,0x1a,0x6f,0x75,0x74,0x68,0x61,0x72,0x61,
-0x62,0x69,0x61,0x6e,0xa3,0xbb,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,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,0x67,0xc3,0xb9,0x6a,0xc1,0x81,
-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,0x38,0x6e,0x40,0x74,0x9c,0x79,0x13,
-0x61,0x68,0x6c,0x69,0xa3,0xa2,0x12,0x74,0x68,0x69,0xa3,0xc1,3,0x61,0x34,0x62,
-0x50,0x67,0x56,0x6e,0x12,0x61,0x64,0x61,0x4d,0x12,0x73,0x75,0x70,0xa2,0xcb,0x16,
-0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xcb,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,0xa3,0x68,0xa4,0x53,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,0x1c,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,
-0x66,0x6f,0x72,0x6d,0x73,0xa3,0xb2,4,0x65,0x58,0x6c,0xa2,0x63,0x6f,0xa2,0x7b,
-0x72,0xa2,0x7f,0x75,1,0x6a,0x30,0x72,0x14,0x6d,0x75,0x6b,0x68,0x69,0x43,0x14,
-0x61,0x72,0x61,0x74,0x69,0x45,1,0x6e,0x8c,0x6f,1,0x6d,0x4e,0x72,0x13,0x67,
-0x69,0x61,0x6e,0x5a,0x12,0x73,0x75,0x70,0xa2,0x87,0x16,0x70,0x6c,0x65,0x6d,0x65,
-0x6e,0x74,0xa3,0x87,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,
-0xcf,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,1,0x67,0x2e,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,
-0x13,0x62,0x72,0x65,0x77,0x37,0x61,0xa2,0xe9,0x62,0xa6,0x29,0x63,0xa6,0xfe,0x64,
-0xac,0x7b,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,0x36,0x67,0x62,0x6c,0x14,0x62,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,0x10,0x79,0x1f,
-0x70,0x74,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,
-0xa3,0xc2,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,0x1b,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,0xda,
-0x68,0xa4,4,0x6a,0x10,0x6b,0xa2,0x47,4,0x63,0x8e,0x65,0xa2,0x81,0x72,0xa2,
-0x91,0x73,0xa2,0xa3,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,4,0x61,0xa3,0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x64,0xa3,0xd1,0x65,
-0xa5,0,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,4,0x61,0xa3,0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x64,0xa3,0xd1,0x65,
-0xa5,0,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,0x50,0x65,0x14,0x72,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,0x13,0x6d,0x69,0x6e,0x6f,0xa2,0xab,0x14,0x74,0x69,0x6c,0x65,0x73,0xa3,
-0xab,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,0xc1,0xec,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,0x18,0x70,0xa4,0x35,0x71,0xa4,
-0x35,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,0xa2,0xeb,0x69,0x10,0x6d,0x53,0x17,0x6e,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,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,
-0x7b,0x66,0x42,0x67,0x7a,0x68,0x8a,0x6b,0xa2,0x56,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,1,
-0x68,0x3b,0x6d,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,0xc3,0x95,0x74,0xc1,0x38,0x77,0x61,0x77,0x88,0x78,0xa2,0x48,0x79,0xa2,0x52,
-0x7a,5,0x78,0x13,0x78,0x30,0x79,0x36,0x7a,0x11,0x7a,0x7a,0xa3,0x67,0x11,0x78,
-0x78,0xa3,0x66,0x11,0x79,0x79,0x21,0x69,0x38,0x6d,0x3c,0x73,0x10,0x79,1,0x65,
-0xa3,0xae,0x6d,0xa3,0x81,0x11,0x6e,0x68,0x23,0x11,0x74,0x68,0xa3,0x80,1,0x61,
-0x2c,0x6f,0x11,0x6c,0x65,0xa3,0x9b,0x11,0x72,0x61,0xa2,0x92,0x15,0x6e,0x67,0x63,
-0x69,0x74,0x69,0xa3,0x92,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,0xc0,
-0xef,0x71,0xa2,0xc1,0x72,0xa2,0xc6,0x73,6,0x69,0x6d,0x69,0x72,0x6f,0xa2,0x4c,
-0x75,0xa2,0x58,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,0x11,0x72,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,0x11,0x72,0x6f,0xa3,0x5d,
-0x6e,0xa2,0x83,0x6f,0xa2,0xc1,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,4,0x61,0x38,0x62,0x56,0x65,0x5c,0x6b,0x74,0x73,
-0x11,0x68,0x75,0xa3,0x96,1,0x62,0x2a,0x72,0x10,0x62,0xa3,0x8e,0x15,0x61,0x74,
-0x61,0x65,0x61,0x6e,0xa3,0x8f,0x11,0x61,0x74,0xa3,0x8f,0x10,0x77,1,0x61,0xa3,
-0xaa,0x74,0x14,0x61,0x69,0x6c,0x75,0x65,0x97,1,0x67,0x2e,0x6f,0xa2,0x57,0x10,
-0x6f,0xa3,0x57,0x10,0x62,0xa3,0x84,3,0x67,0x5a,0x6c,0x6c,0x72,0xa2,0x88,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,0x55,0x64,5,0x70,0x2c,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,0x1a,0x6f,0x75,0x74,0x68,0x61,0x72,0x61,
-0x62,0x69,0x61,0x6e,0xa3,0x85,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,0xb3,0x6b,0xc1,0xdc,0x6b,0xa2,
-0xe9,0x6c,0xa4,0x6a,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,0x4c,0x69,0xa2,0x8f,0x6c,0x11,0x79,0x6d,0x55,4,0x68,0x36,0x6c,0x4c,
-0x6e,0x58,0x72,0x82,0x79,0x10,0x61,0xa3,0x55,1,0x61,0x26,0x6a,0xa3,0xa0,0x13,
-0x6a,0x61,0x6e,0x69,0xa3,0xa0,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,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,2,
+5,0x6b,0x23,0x6b,0x4c,0x6f,0x50,0x75,1,0x6d,0x2c,0x73,0x11,0x68,0x75,0xa5,
+0x15,0x17,0x62,0x65,0x72,0x66,0x6f,0x72,0x6d,0x73,0x7b,0x10,0x6f,0xa3,0x92,0x14,
+0x62,0x6c,0x6f,0x63,0x6b,0x21,0x61,0x44,0x62,0x21,0x65,0x10,0x77,1,0x61,0xa5,
+0xe,0x74,0x14,0x61,0x69,0x6c,0x75,0x65,0xa3,0x8b,0x16,0x62,0x61,0x74,0x61,0x65,
+0x61,0x6e,0xa3,0xef,0x67,0xc3,0xcd,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,0xa3,0x68,0xa4,0x53,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,0x1c,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,0x66,0x6f,
+0x72,0x6d,0x73,0xa3,0xb2,4,0x65,0x58,0x6c,0xa2,0x63,0x6f,0xa2,0x7b,0x72,0xa2,
+0x7f,0x75,1,0x6a,0x30,0x72,0x14,0x6d,0x75,0x6b,0x68,0x69,0x43,0x14,0x61,0x72,
+0x61,0x74,0x69,0x45,1,0x6e,0x8c,0x6f,1,0x6d,0x4e,0x72,0x13,0x67,0x69,0x61,
+0x6e,0x5a,0x12,0x73,0x75,0x70,0xa2,0x87,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,
+0xa3,0x87,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,0xcf,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,1,0x67,0x2e,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,0x13,0x62,
+0x72,0x65,0x77,0x37,0x61,0xa2,0xe9,0x62,0xa6,0x29,0x63,0xa6,0xfe,0x64,0xac,0x7c,
+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,0x36,0x67,0x62,0x6c,0x14,0x62,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,0x10,0x79,0x1f,0x70,0x74,
+0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xc2,
+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,0x1c,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,0x50,0x65,0x14,0x72,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,0x13,0x6d,0x69,0x6e,0x6f,0xa2,0xab,0x14,0x74,0x69,0x6c,0x65,0x73,0xa3,0xab,
+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,0x7b,0x66,0x42,0x67,0x7a,0x68,0x8a,0x6b,0xa2,0x56,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,1,0x68,0x3b,0x6d,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,0xc3,0xc4,0x74,0xc1,0x51,0x77,0x7a,0x77,0xa2,0x4c,0x78,0xa2,0x60,
+0x79,0xa2,0x6a,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,1,0x61,0x2c,0x6f,0x11,0x6c,0x65,
+0xa3,0x9b,0x11,0x72,0x61,0xa2,0x92,0x15,0x6e,0x67,0x63,0x69,0x74,0x69,0xa3,0x92,
+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,0xc0,0xfc,0x71,0xa2,0xce,0x72,
+0xa2,0xd3,0x73,6,0x69,0x7a,0x69,0x72,0x6f,0xa2,0x4c,0x75,0xa2,0x65,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,1,0x72,0x36,0x79,0x10,0x6f,0xa2,0xb0,0x12,
+0x6d,0x62,0x6f,0xa3,0xb0,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,0x11,0x72,0x6f,0xa3,0x5d,0x6e,0xa2,0x83,0x6f,0xa2,0xca,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,5,0x6b,
+0x1e,0x6b,0x32,0x73,0x4a,0x75,0x12,0x73,0x68,0x75,0xa3,0x96,1,0x67,0x2e,0x6f,
+0xa2,0x57,0x10,0x6f,0xa3,0x57,0x10,0x62,0xa3,0x84,0x11,0x68,0x75,0xa3,0x96,0x61,
+0x42,0x62,0x60,0x65,0x10,0x77,1,0x61,0xa3,0xaa,0x74,0x14,0x61,0x69,0x6c,0x75,
+0x65,0x97,1,0x62,0x2a,0x72,0x10,0x62,0xa3,0x8e,0x15,0x61,0x74,0x61,0x65,0x61,
+0x6e,0xa3,0x8f,0x11,0x61,0x74,0xa3,0x8f,3,0x67,0x5a,0x6c,0x6c,0x72,0xa2,0x88,
+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,0x55,0x64,5,0x70,0x2c,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,0x1a,0x6f,0x75,0x74,0x68,0x61,0x72,
+0x61,0x62,0x69,0x61,0x6e,0xa3,0x85,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,0xc2,0x6b,0xc1,0xeb,0x6b,
+0xa2,0xf8,0x6c,0xa4,0x79,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,0x5b,0x69,0xa2,0x9e,0x6c,0x11,0x79,0x6d,0x55,5,0x72,0x1f,0x72,
+0x2e,0x73,0x3e,0x79,0x10,0x61,0xa3,0x55,0x10,0x63,0xa2,0xa9,0x12,0x68,0x65,0x6e,
+0xa3,0xa9,0x18,0x61,0x72,0x61,0x6d,0x67,0x6f,0x6e,0x64,0x69,0xa3,0xaf,0x68,0x54,
+0x6c,0x6a,0x6e,1,0x64,0x38,0x69,0xa2,0x79,0x15,0x63,0x68,0x61,0x65,0x61,0x6e,
+0xa3,0x79,0xa2,0x54,0x12,0x61,0x69,0x63,0xa3,0x54,1,0x61,0x26,0x6a,0xa3,0xa0,
+0x13,0x6a,0x61,0x6e,0x69,0xa3,0xa0,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x55,2,
0x65,0x72,0x6e,0x84,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,0x17,0x74,0x65,0x69,0x6d,
@@ -780,145 +801,145 @@
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,
-0xc7,0x64,0xa2,0x60,0x65,0xa2,0x88,0x67,4,0x65,0x62,0x6c,0x7a,0x6f,0x8e,0x72,
-0x9a,0x75,1,0x6a,0x38,0x72,1,0x6d,0x24,0x75,0x41,0x13,0x75,0x6b,0x68,0x69,
-0x41,1,0x61,0x24,0x72,0x3f,0x13,0x72,0x61,0x74,0x69,0x3f,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,0x11,0x74,0x68,0x3a,0x11,0x69,0x63,0x3b,1,0x61,
-0x32,0x65,1,0x65,0x24,0x6b,0x3d,0x10,0x6b,0x3d,0x10,0x6e,0xa2,0x89,0x12,0x74,
-0x68,0x61,0xa3,0x89,2,0x65,0x3e,0x73,0x64,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,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,0x11,0x62,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,0xf,0x6c,0x7c,0x72,0x34,0x72,0x32,0x73,0x5a,0x78,0x76,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,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,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
+0xcf,0x64,0xa2,0x68,0x65,0xa2,0x90,0x67,4,0x65,0x64,0x6c,0x7c,0x6f,0x90,0x72,
+0xa2,0x44,0x75,1,0x6a,0x38,0x72,1,0x6d,0x24,0x75,0x41,0x13,0x75,0x6b,0x68,
+0x69,0x41,1,0x61,0x24,0x72,0x3f,0x13,0x72,0x61,0x74,0x69,0x3f,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,0x10,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,2,0x65,0x3e,0x73,
+0x64,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,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,0x11,0x62,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,0xf,0x6c,0x7c,0x72,0x34,0x72,0x32,
+0x73,0x5a,0x78,0x76,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,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,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[18440]={
+const char PropNameData::nameGroups[19082]={
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,
@@ -1008,7 +1029,11 @@
't','a','t','i','o','n',0,2,'E','m','o','j','i','_','M','o','d','i','f','i','e','r',0,'E','m','o','j','i','_','M','o','d',
'i','f','i','e','r',0,2,'E','m','o','j','i','_','M','o','d','i','f','i','e','r','_','B','a','s','e',0,
'E','m','o','j','i','_','M','o','d','i','f','i','e','r','_','B','a','s','e',0,
-2,'b','c',0,'B','i','d','i','_','C','l','a','s','s',0,2,'L',0,'L','e','f','t','_','T','o','_','R','i','g','h','t',0,
+2,'E','m','o','j','i','_','C','o','m','p','o','n','e','n','t',0,'E','m','o','j','i','_','C','o','m','p','o','n','e','n','t',
+0,2,'R','I',0,'R','e','g','i','o','n','a','l','_','I','n','d','i','c','a','t','o','r',0,
+2,'P','C','M',0,'P','r','e','p','e','n','d','e','d','_','C','o','n','c','a','t','e','n','a','t','i','o','n','_','M','a','r',
+'k',0,2,'b','c',0,'B','i','d','i','_','C','l','a','s','s',0,
+2,'L',0,'L','e','f','t','_','T','o','_','R','i','g','h','t',0,
2,'R',0,'R','i','g','h','t','_','T','o','_','L','e','f','t',0,
2,'E','N',0,'E','u','r','o','p','e','a','n','_','N','u','m','b','e','r',0,
2,'E','S',0,'E','u','r','o','p','e','a','n','_','S','e','p','a','r','a','t','o','r',0,
@@ -1339,8 +1364,15 @@
'e','n','t',0,2,'N','e','w','a',0,'N','e','w','a',0,2,'O','s','a','g','e',0,'O','s','a','g','e',0,
2,'T','a','n','g','u','t',0,'T','a','n','g','u','t',0,2,'T','a','n','g','u','t','_','C','o','m','p','o','n','e','n','t',
's',0,'T','a','n','g','u','t','_','C','o','m','p','o','n','e','n','t','s',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,
+2,'C','J','K','_','E','x','t','_','F',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','_','F',0,2,'K','a','n','a','_','E','x','t','_','A',0,
+'K','a','n','a','_','E','x','t','e','n','d','e','d','_','A',0,
+2,'M','a','s','a','r','a','m','_','G','o','n','d','i',0,'M','a','s','a','r','a','m','_','G','o','n','d','i',0,
+2,'N','u','s','h','u',0,'N','u','s','h','u',0,2,'S','o','y','o','m','b','o',0,'S','o','y','o','m','b','o',0,
+2,'S','y','r','i','a','c','_','S','u','p',0,'S','y','r','i','a','c','_','S','u','p','p','l','e','m','e','n','t',0,
+2,'Z','a','n','a','b','a','z','a','r','_','S','q','u','a','r','e',0,'Z','a','n','a','b','a','z','a','r','_','S','q','u','a',
+'r','e',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,
3,'C','o','m',0,'C','o','m','p','a','t',0,'c','o','m',0,
@@ -1460,6 +1492,17 @@
2,'A','f','r','i','c','a','n','_','F','e','h',0,'A','f','r','i','c','a','n','_','F','e','h',0,
2,'A','f','r','i','c','a','n','_','N','o','o','n',0,'A','f','r','i','c','a','n','_','N','o','o','n',0,
2,'A','f','r','i','c','a','n','_','Q','a','f',0,'A','f','r','i','c','a','n','_','Q','a','f',0,
+2,'M','a','l','a','y','a','l','a','m','_','B','h','a',0,'M','a','l','a','y','a','l','a','m','_','B','h','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','J','a',0,'M','a','l','a','y','a','l','a','m','_','J','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','L','l','a',0,'M','a','l','a','y','a','l','a','m','_','L','l','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','L','l','l','a',0,'M','a','l','a','y','a','l','a','m','_','L','l','l','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','N','g','a',0,'M','a','l','a','y','a','l','a','m','_','N','g','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','N','n','a',0,'M','a','l','a','y','a','l','a','m','_','N','n','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','N','n','n','a',0,'M','a','l','a','y','a','l','a','m','_','N','n','n','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','N','y','a',0,'M','a','l','a','y','a','l','a','m','_','N','y','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','R','a',0,'M','a','l','a','y','a','l','a','m','_','R','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','S','s','a',0,'M','a','l','a','y','a','l','a','m','_','S','s','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','T','t','a',0,'M','a','l','a','y','a','l','a','m','_','T','t','a',0,
2,'j','t',0,'J','o','i','n','i','n','g','_','T','y','p','e',0,
2,'U',0,'N','o','n','_','J','o','i','n','i','n','g',0,2,'C',0,'J','o','i','n','_','C','a','u','s','i','n','g',0,
2,'D',0,'D','u','a','l','_','J','o','i','n','i','n','g',0,
@@ -1493,7 +1536,6 @@
2,'J','T',0,'J','T',0,2,'J','V',0,'J','V',0,2,'C','P',0,'C','l','o','s','e','_','P','a','r','e','n','t','h','e',
's','i','s',0,2,'C','J',0,'C','o','n','d','i','t','i','o','n','a','l','_','J','a','p','a','n','e','s','e','_','S','t','a',
'r','t','e','r',0,2,'H','L',0,'H','e','b','r','e','w','_','L','e','t','t','e','r',0,
-2,'R','I',0,'R','e','g','i','o','n','a','l','_','I','n','d','i','c','a','t','o','r',0,
2,'E','B',0,'E','_','B','a','s','e',0,2,'E','M',0,'E','_','M','o','d','i','f','i','e','r',0,
2,'Z','W','J',0,'Z','W','J',0,2,'n','t',0,'N','u','m','e','r','i','c','_','T','y','p','e',0,
2,'N','o','n','e',0,'N','o','n','e',0,2,'D','e',0,'D','e','c','i','m','a','l',0,
@@ -1587,7 +1629,7 @@
2,'S','i','n','d',0,'K','h','u','d','a','w','a','d','i',0,
2,'W','a','r','a',0,'W','a','r','a','n','g','_','C','i','t','i',0,
2,'A','f','a','k',0,'A','f','a','k',0,2,'J','u','r','c',0,'J','u','r','c',0,
-2,'M','r','o','o',0,'M','r','o',0,2,'N','s','h','u',0,'N','s','h','u',0,
+2,'M','r','o','o',0,'M','r','o',0,2,'N','s','h','u',0,'N','u','s','h','u',0,
2,'S','h','r','d',0,'S','h','a','r','a','d','a',0,2,'S','o','r','a',0,'S','o','r','a','_','S','o','m','p','e','n','g',
0,2,'T','a','k','r',0,'T','a','k','r','i',0,2,'T','a','n','g',0,'T','a','n','g','u','t',0,
2,'W','o','l','e',0,'W','o','l','e',0,2,'H','l','u','w',0,'A','n','a','t','o','l','i','a','n','_','H','i','e','r','o',
@@ -1600,8 +1642,10 @@
2,'B','h','k','s',0,'B','h','a','i','k','s','u','k','i',0,
2,'M','a','r','c',0,'M','a','r','c','h','e','n',0,2,'O','s','g','e',0,'O','s','a','g','e',0,
2,'H','a','n','b',0,'H','a','n','b',0,2,'J','a','m','o',0,'J','a','m','o',0,
-2,'Z','s','y','e',0,'Z','s','y','e',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,'Z','s','y','e',0,'Z','s','y','e',0,2,'G','o','n','m',0,'M','a','s','a','r','a','m','_','G','o','n','d','i',0,
+2,'S','o','y','o',0,'S','o','y','o','m','b','o',0,2,'Z','a','n','b',0,'Z','a','n','a','b','a','z','a','r','_','S','q',
+'u','a','r','e',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,
2,'L','V',0,'L','V','_','S','y','l','l','a','b','l','e',0,
Deleted: trunk/Build/source/libs/icu/icu-src/source/common/propsvec.c
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/propsvec.c 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/propsvec.c 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,527 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-*******************************************************************************
-*
-* Copyright (C) 2002-2011, International Business Machines
-* Corporation and others. All Rights Reserved.
-*
-*******************************************************************************
-* file name: propsvec.c
-* encoding: US-ASCII
-* tab size: 8 (not used)
-* indentation:4
-*
-* created on: 2002feb22
-* created by: Markus W. Scherer
-*
-* Store bits (Unicode character properties) in bit set vectors.
-*/
-
-#include <stdlib.h>
-#include "unicode/utypes.h"
-#include "cmemory.h"
-#include "utrie.h"
-#include "utrie2.h"
-#include "uarrsort.h"
-#include "propsvec.h"
-#include "uassert.h"
-
-struct UPropsVectors {
- uint32_t *v;
- int32_t columns; /* number of columns, plus two for start & limit values */
- int32_t maxRows;
- int32_t rows;
- int32_t prevRow; /* search optimization: remember last row seen */
- UBool isCompacted;
-};
-
-#define UPVEC_INITIAL_ROWS (1<<12)
-#define UPVEC_MEDIUM_ROWS ((int32_t)1<<16)
-#define UPVEC_MAX_ROWS (UPVEC_MAX_CP+1)
-
-U_CAPI UPropsVectors * U_EXPORT2
-upvec_open(int32_t columns, UErrorCode *pErrorCode) {
- UPropsVectors *pv;
- uint32_t *v, *row;
- uint32_t cp;
-
- if(U_FAILURE(*pErrorCode)) {
- return NULL;
- }
- if(columns<1) {
- *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
- return NULL;
- }
- columns+=2; /* count range start and limit columns */
-
- pv=(UPropsVectors *)uprv_malloc(sizeof(UPropsVectors));
- v=(uint32_t *)uprv_malloc(UPVEC_INITIAL_ROWS*columns*4);
- if(pv==NULL || v==NULL) {
- uprv_free(pv);
- uprv_free(v);
- *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
- return NULL;
- }
- uprv_memset(pv, 0, sizeof(UPropsVectors));
- pv->v=v;
- pv->columns=columns;
- pv->maxRows=UPVEC_INITIAL_ROWS;
- pv->rows=2+(UPVEC_MAX_CP-UPVEC_FIRST_SPECIAL_CP);
-
- /* set the all-Unicode row and the special-value rows */
- row=pv->v;
- uprv_memset(row, 0, pv->rows*columns*4);
- row[0]=0;
- row[1]=0x110000;
- row+=columns;
- for(cp=UPVEC_FIRST_SPECIAL_CP; cp<=UPVEC_MAX_CP; ++cp) {
- row[0]=cp;
- row[1]=cp+1;
- row+=columns;
- }
- return pv;
-}
-
-U_CAPI void U_EXPORT2
-upvec_close(UPropsVectors *pv) {
- if(pv!=NULL) {
- uprv_free(pv->v);
- uprv_free(pv);
- }
-}
-
-static uint32_t *
-_findRow(UPropsVectors *pv, UChar32 rangeStart) {
- uint32_t *row;
- int32_t columns, i, start, limit, prevRow;
-
- columns=pv->columns;
- limit=pv->rows;
- prevRow=pv->prevRow;
-
- /* check the vicinity of the last-seen row (start searching with an unrolled loop) */
- row=pv->v+prevRow*columns;
- if(rangeStart>=(UChar32)row[0]) {
- if(rangeStart<(UChar32)row[1]) {
- /* same row as last seen */
- return row;
- } else if(rangeStart<(UChar32)(row+=columns)[1]) {
- /* next row after the last one */
- pv->prevRow=prevRow+1;
- return row;
- } else if(rangeStart<(UChar32)(row+=columns)[1]) {
- /* second row after the last one */
- pv->prevRow=prevRow+2;
- return row;
- } else if((rangeStart-(UChar32)row[1])<10) {
- /* we are close, continue looping */
- prevRow+=2;
- do {
- ++prevRow;
- row+=columns;
- } while(rangeStart>=(UChar32)row[1]);
- pv->prevRow=prevRow;
- return row;
- }
- } else if(rangeStart<(UChar32)pv->v[1]) {
- /* the very first row */
- pv->prevRow=0;
- return pv->v;
- }
-
- /* do a binary search for the start of the range */
- start=0;
- while(start<limit-1) {
- i=(start+limit)/2;
- row=pv->v+i*columns;
- if(rangeStart<(UChar32)row[0]) {
- limit=i;
- } else if(rangeStart<(UChar32)row[1]) {
- pv->prevRow=i;
- return row;
- } else {
- start=i;
- }
- }
-
- /* must be found because all ranges together always cover all of Unicode */
- pv->prevRow=start;
- return pv->v+start*columns;
-}
-
-U_CAPI void U_EXPORT2
-upvec_setValue(UPropsVectors *pv,
- UChar32 start, UChar32 end,
- int32_t column,
- uint32_t value, uint32_t mask,
- UErrorCode *pErrorCode) {
- uint32_t *firstRow, *lastRow;
- int32_t columns;
- UChar32 limit;
- UBool splitFirstRow, splitLastRow;
-
- /* argument checking */
- if(U_FAILURE(*pErrorCode)) {
- return;
- }
- if( pv==NULL ||
- start<0 || start>end || end>UPVEC_MAX_CP ||
- column<0 || column>=(pv->columns-2)
- ) {
- *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
- return;
- }
- if(pv->isCompacted) {
- *pErrorCode=U_NO_WRITE_PERMISSION;
- return;
- }
- limit=end+1;
-
- /* initialize */
- columns=pv->columns;
- column+=2; /* skip range start and limit columns */
- value&=mask;
-
- /* find the rows whose ranges overlap with the input range */
-
- /* find the first and last rows, always successful */
- firstRow=_findRow(pv, start);
- lastRow=_findRow(pv, end);
-
- /*
- * Rows need to be split if they partially overlap with the
- * input range (only possible for the first and last rows)
- * and if their value differs from the input value.
- */
- splitFirstRow= (UBool)(start!=(UChar32)firstRow[0] && value!=(firstRow[column]&mask));
- splitLastRow= (UBool)(limit!=(UChar32)lastRow[1] && value!=(lastRow[column]&mask));
-
- /* split first/last rows if necessary */
- if(splitFirstRow || splitLastRow) {
- int32_t count, rows;
-
- rows=pv->rows;
- if((rows+splitFirstRow+splitLastRow)>pv->maxRows) {
- uint32_t *newVectors;
- int32_t newMaxRows;
-
- if(pv->maxRows<UPVEC_MEDIUM_ROWS) {
- newMaxRows=UPVEC_MEDIUM_ROWS;
- } else if(pv->maxRows<UPVEC_MAX_ROWS) {
- newMaxRows=UPVEC_MAX_ROWS;
- } else {
- /* Implementation bug, or UPVEC_MAX_ROWS too low. */
- *pErrorCode=U_INTERNAL_PROGRAM_ERROR;
- return;
- }
- newVectors=(uint32_t *)uprv_malloc(newMaxRows*columns*4);
- if(newVectors==NULL) {
- *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
- return;
- }
- uprv_memcpy(newVectors, pv->v, (size_t)rows*columns*4);
- firstRow=newVectors+(firstRow-pv->v);
- lastRow=newVectors+(lastRow-pv->v);
- uprv_free(pv->v);
- pv->v=newVectors;
- pv->maxRows=newMaxRows;
- }
-
- /* count the number of row cells to move after the last row, and move them */
- count = (int32_t)((pv->v+rows*columns)-(lastRow+columns));
- if(count>0) {
- uprv_memmove(
- lastRow+(1+splitFirstRow+splitLastRow)*columns,
- lastRow+columns,
- count*4);
- }
- pv->rows=rows+splitFirstRow+splitLastRow;
-
- /* split the first row, and move the firstRow pointer to the second part */
- if(splitFirstRow) {
- /* copy all affected rows up one and move the lastRow pointer */
- count = (int32_t)((lastRow-firstRow)+columns);
- uprv_memmove(firstRow+columns, firstRow, (size_t)count*4);
- lastRow+=columns;
-
- /* split the range and move the firstRow pointer */
- firstRow[1]=firstRow[columns]=(uint32_t)start;
- firstRow+=columns;
- }
-
- /* split the last row */
- if(splitLastRow) {
- /* copy the last row data */
- uprv_memcpy(lastRow+columns, lastRow, (size_t)columns*4);
-
- /* split the range and move the firstRow pointer */
- lastRow[1]=lastRow[columns]=(uint32_t)limit;
- }
- }
-
- /* set the "row last seen" to the last row for the range */
- pv->prevRow=(int32_t)((lastRow-(pv->v))/columns);
-
- /* set the input value in all remaining rows */
- firstRow+=column;
- lastRow+=column;
- mask=~mask;
- for(;;) {
- *firstRow=(*firstRow&mask)|value;
- if(firstRow==lastRow) {
- break;
- }
- firstRow+=columns;
- }
-}
-
-U_CAPI uint32_t U_EXPORT2
-upvec_getValue(const UPropsVectors *pv, UChar32 c, int32_t column) {
- uint32_t *row;
- UPropsVectors *ncpv;
-
- if(pv->isCompacted || c<0 || c>UPVEC_MAX_CP || column<0 || column>=(pv->columns-2)) {
- return 0;
- }
- ncpv=(UPropsVectors *)pv;
- row=_findRow(ncpv, c);
- return row[2+column];
-}
-
-U_CAPI uint32_t * U_EXPORT2
-upvec_getRow(const UPropsVectors *pv, int32_t rowIndex,
- UChar32 *pRangeStart, UChar32 *pRangeEnd) {
- uint32_t *row;
- int32_t columns;
-
- if(pv->isCompacted || rowIndex<0 || rowIndex>=pv->rows) {
- return NULL;
- }
-
- columns=pv->columns;
- row=pv->v+rowIndex*columns;
- if(pRangeStart!=NULL) {
- *pRangeStart=(UChar32)row[0];
- }
- if(pRangeEnd!=NULL) {
- *pRangeEnd=(UChar32)row[1]-1;
- }
- return row+2;
-}
-
-static int32_t U_CALLCONV
-upvec_compareRows(const void *context, const void *l, const void *r) {
- const uint32_t *left=(const uint32_t *)l, *right=(const uint32_t *)r;
- const UPropsVectors *pv=(const UPropsVectors *)context;
- int32_t i, count, columns;
-
- count=columns=pv->columns; /* includes start/limit columns */
-
- /* start comparing after start/limit but wrap around to them */
- i=2;
- do {
- if(left[i]!=right[i]) {
- return left[i]<right[i] ? -1 : 1;
- }
- if(++i==columns) {
- i=0;
- }
- } while(--count>0);
-
- return 0;
-}
-
-U_CAPI void U_EXPORT2
-upvec_compact(UPropsVectors *pv, UPVecCompactHandler *handler, void *context, UErrorCode *pErrorCode) {
- uint32_t *row;
- int32_t i, columns, valueColumns, rows, count;
- UChar32 start, limit;
-
- /* argument checking */
- if(U_FAILURE(*pErrorCode)) {
- return;
- }
- if(handler==NULL) {
- *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
- return;
- }
- if(pv->isCompacted) {
- return;
- }
-
- /* Set the flag now: Sorting and compacting destroys the builder data structure. */
- pv->isCompacted=TRUE;
-
- rows=pv->rows;
- columns=pv->columns;
- U_ASSERT(columns>=3); /* upvec_open asserts this */
- valueColumns=columns-2; /* not counting start & limit */
-
- /* sort the properties vectors to find unique vector values */
- uprv_sortArray(pv->v, rows, columns*4,
- upvec_compareRows, pv, FALSE, pErrorCode);
- if(U_FAILURE(*pErrorCode)) {
- return;
- }
-
- /*
- * Find and set the special values.
- * This has to do almost the same work as the compaction below,
- * to find the indexes where the special-value rows will move.
- */
- row=pv->v;
- count=-valueColumns;
- for(i=0; i<rows; ++i) {
- start=(UChar32)row[0];
-
- /* count a new values vector if it is different from the current one */
- if(count<0 || 0!=uprv_memcmp(row+2, row-valueColumns, valueColumns*4)) {
- count+=valueColumns;
- }
-
- if(start>=UPVEC_FIRST_SPECIAL_CP) {
- handler(context, start, start, count, row+2, valueColumns, pErrorCode);
- if(U_FAILURE(*pErrorCode)) {
- return;
- }
- }
-
- row+=columns;
- }
-
- /* count is at the beginning of the last vector, add valueColumns to include that last vector */
- count+=valueColumns;
-
- /* Call the handler once more to signal the start of delivering real values. */
- handler(context, UPVEC_START_REAL_VALUES_CP, UPVEC_START_REAL_VALUES_CP,
- count, row-valueColumns, valueColumns, pErrorCode);
- if(U_FAILURE(*pErrorCode)) {
- return;
- }
-
- /*
- * Move vector contents up to a contiguous array with only unique
- * vector values, and call the handler function for each vector.
- *
- * This destroys the Properties Vector structure and replaces it
- * with an array of just vector values.
- */
- row=pv->v;
- count=-valueColumns;
- for(i=0; i<rows; ++i) {
- /* fetch these first before memmove() may overwrite them */
- start=(UChar32)row[0];
- limit=(UChar32)row[1];
-
- /* add a new values vector if it is different from the current one */
- if(count<0 || 0!=uprv_memcmp(row+2, pv->v+count, valueColumns*4)) {
- count+=valueColumns;
- uprv_memmove(pv->v+count, row+2, (size_t)valueColumns*4);
- }
-
- if(start<UPVEC_FIRST_SPECIAL_CP) {
- handler(context, start, limit-1, count, pv->v+count, valueColumns, pErrorCode);
- if(U_FAILURE(*pErrorCode)) {
- return;
- }
- }
-
- row+=columns;
- }
-
- /* count is at the beginning of the last vector, add one to include that last vector */
- pv->rows=count/valueColumns+1;
-}
-
-U_CAPI const uint32_t * U_EXPORT2
-upvec_getArray(const UPropsVectors *pv, int32_t *pRows, int32_t *pColumns) {
- if(!pv->isCompacted) {
- return NULL;
- }
- if(pRows!=NULL) {
- *pRows=pv->rows;
- }
- if(pColumns!=NULL) {
- *pColumns=pv->columns-2;
- }
- return pv->v;
-}
-
-U_CAPI uint32_t * U_EXPORT2
-upvec_cloneArray(const UPropsVectors *pv,
- int32_t *pRows, int32_t *pColumns, UErrorCode *pErrorCode) {
- uint32_t *clonedArray;
- int32_t byteLength;
-
- if(U_FAILURE(*pErrorCode)) {
- return NULL;
- }
- if(!pv->isCompacted) {
- *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
- return NULL;
- }
- byteLength=pv->rows*(pv->columns-2)*4;
- clonedArray=(uint32_t *)uprv_malloc(byteLength);
- if(clonedArray==NULL) {
- *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
- return NULL;
- }
- uprv_memcpy(clonedArray, pv->v, byteLength);
- if(pRows!=NULL) {
- *pRows=pv->rows;
- }
- if(pColumns!=NULL) {
- *pColumns=pv->columns-2;
- }
- return clonedArray;
-}
-
-U_CAPI UTrie2 * U_EXPORT2
-upvec_compactToUTrie2WithRowIndexes(UPropsVectors *pv, UErrorCode *pErrorCode) {
- UPVecToUTrie2Context toUTrie2={ NULL, 0, 0, 0 };
- upvec_compact(pv, upvec_compactToUTrie2Handler, &toUTrie2, pErrorCode);
- utrie2_freeze(toUTrie2.trie, UTRIE2_16_VALUE_BITS, pErrorCode);
- if(U_FAILURE(*pErrorCode)) {
- utrie2_close(toUTrie2.trie);
- toUTrie2.trie=NULL;
- }
- return toUTrie2.trie;
-}
-
-/*
- * TODO(markus): Add upvec_16BitsToUTrie2() function that enumerates all rows, extracts
- * some 16-bit field and builds and returns a UTrie2.
- */
-
-U_CAPI void U_CALLCONV
-upvec_compactToUTrie2Handler(void *context,
- UChar32 start, UChar32 end,
- int32_t rowIndex, uint32_t *row, int32_t columns,
- UErrorCode *pErrorCode) {
- UPVecToUTrie2Context *toUTrie2=(UPVecToUTrie2Context *)context;
- if(start<UPVEC_FIRST_SPECIAL_CP) {
- utrie2_setRange32(toUTrie2->trie, start, end, (uint32_t)rowIndex, TRUE, pErrorCode);
- } else {
- switch(start) {
- case UPVEC_INITIAL_VALUE_CP:
- toUTrie2->initialValue=rowIndex;
- break;
- case UPVEC_ERROR_VALUE_CP:
- toUTrie2->errorValue=rowIndex;
- break;
- case UPVEC_START_REAL_VALUES_CP:
- toUTrie2->maxValue=rowIndex;
- if(rowIndex>0xffff) {
- /* too many rows for a 16-bit trie */
- *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR;
- } else {
- toUTrie2->trie=utrie2_open(toUTrie2->initialValue,
- toUTrie2->errorValue, pErrorCode);
- }
- break;
- default:
- break;
- }
- }
-}
Added: trunk/Build/source/libs/icu/icu-src/source/common/propsvec.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/propsvec.cpp (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/propsvec.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,529 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+*******************************************************************************
+*
+* Copyright (C) 2002-2011, International Business Machines
+* Corporation and others. All Rights Reserved.
+*
+*******************************************************************************
+* file name: propsvec.c
+* encoding: UTF-8
+* tab size: 8 (not used)
+* indentation:4
+*
+* created on: 2002feb22
+* created by: Markus W. Scherer
+*
+* Store bits (Unicode character properties) in bit set vectors.
+*/
+
+#include <stdlib.h>
+#include "unicode/utypes.h"
+#include "cmemory.h"
+#include "utrie.h"
+#include "utrie2.h"
+#include "uarrsort.h"
+#include "propsvec.h"
+#include "uassert.h"
+
+struct UPropsVectors {
+ uint32_t *v;
+ int32_t columns; /* number of columns, plus two for start & limit values */
+ int32_t maxRows;
+ int32_t rows;
+ int32_t prevRow; /* search optimization: remember last row seen */
+ UBool isCompacted;
+};
+
+#define UPVEC_INITIAL_ROWS (1<<12)
+#define UPVEC_MEDIUM_ROWS ((int32_t)1<<16)
+#define UPVEC_MAX_ROWS (UPVEC_MAX_CP+1)
+
+U_CAPI UPropsVectors * U_EXPORT2
+upvec_open(int32_t columns, UErrorCode *pErrorCode) {
+ UPropsVectors *pv;
+ uint32_t *v, *row;
+ uint32_t cp;
+
+ if(U_FAILURE(*pErrorCode)) {
+ return NULL;
+ }
+ if(columns<1) {
+ *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
+ return NULL;
+ }
+ columns+=2; /* count range start and limit columns */
+
+ pv=(UPropsVectors *)uprv_malloc(sizeof(UPropsVectors));
+ v=(uint32_t *)uprv_malloc(UPVEC_INITIAL_ROWS*columns*4);
+ if(pv==NULL || v==NULL) {
+ uprv_free(pv);
+ uprv_free(v);
+ *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
+ return NULL;
+ }
+ uprv_memset(pv, 0, sizeof(UPropsVectors));
+ pv->v=v;
+ pv->columns=columns;
+ pv->maxRows=UPVEC_INITIAL_ROWS;
+ pv->rows=2+(UPVEC_MAX_CP-UPVEC_FIRST_SPECIAL_CP);
+
+ /* set the all-Unicode row and the special-value rows */
+ row=pv->v;
+ uprv_memset(row, 0, pv->rows*columns*4);
+ row[0]=0;
+ row[1]=0x110000;
+ row+=columns;
+ for(cp=UPVEC_FIRST_SPECIAL_CP; cp<=UPVEC_MAX_CP; ++cp) {
+ row[0]=cp;
+ row[1]=cp+1;
+ row+=columns;
+ }
+ return pv;
+}
+
+U_CAPI void U_EXPORT2
+upvec_close(UPropsVectors *pv) {
+ if(pv!=NULL) {
+ uprv_free(pv->v);
+ uprv_free(pv);
+ }
+}
+
+static uint32_t *
+_findRow(UPropsVectors *pv, UChar32 rangeStart) {
+ uint32_t *row;
+ int32_t columns, i, start, limit, prevRow;
+
+ columns=pv->columns;
+ limit=pv->rows;
+ prevRow=pv->prevRow;
+
+ /* check the vicinity of the last-seen row (start searching with an unrolled loop) */
+ row=pv->v+prevRow*columns;
+ if(rangeStart>=(UChar32)row[0]) {
+ if(rangeStart<(UChar32)row[1]) {
+ /* same row as last seen */
+ return row;
+ } else if(rangeStart<(UChar32)(row+=columns)[1]) {
+ /* next row after the last one */
+ pv->prevRow=prevRow+1;
+ return row;
+ } else if(rangeStart<(UChar32)(row+=columns)[1]) {
+ /* second row after the last one */
+ pv->prevRow=prevRow+2;
+ return row;
+ } else if((rangeStart-(UChar32)row[1])<10) {
+ /* we are close, continue looping */
+ prevRow+=2;
+ do {
+ ++prevRow;
+ row+=columns;
+ } while(rangeStart>=(UChar32)row[1]);
+ pv->prevRow=prevRow;
+ return row;
+ }
+ } else if(rangeStart<(UChar32)pv->v[1]) {
+ /* the very first row */
+ pv->prevRow=0;
+ return pv->v;
+ }
+
+ /* do a binary search for the start of the range */
+ start=0;
+ while(start<limit-1) {
+ i=(start+limit)/2;
+ row=pv->v+i*columns;
+ if(rangeStart<(UChar32)row[0]) {
+ limit=i;
+ } else if(rangeStart<(UChar32)row[1]) {
+ pv->prevRow=i;
+ return row;
+ } else {
+ start=i;
+ }
+ }
+
+ /* must be found because all ranges together always cover all of Unicode */
+ pv->prevRow=start;
+ return pv->v+start*columns;
+}
+
+U_CAPI void U_EXPORT2
+upvec_setValue(UPropsVectors *pv,
+ UChar32 start, UChar32 end,
+ int32_t column,
+ uint32_t value, uint32_t mask,
+ UErrorCode *pErrorCode) {
+ uint32_t *firstRow, *lastRow;
+ int32_t columns;
+ UChar32 limit;
+ UBool splitFirstRow, splitLastRow;
+
+ /* argument checking */
+ if(U_FAILURE(*pErrorCode)) {
+ return;
+ }
+ if( pv==NULL ||
+ start<0 || start>end || end>UPVEC_MAX_CP ||
+ column<0 || column>=(pv->columns-2)
+ ) {
+ *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+ if(pv->isCompacted) {
+ *pErrorCode=U_NO_WRITE_PERMISSION;
+ return;
+ }
+ limit=end+1;
+
+ /* initialize */
+ columns=pv->columns;
+ column+=2; /* skip range start and limit columns */
+ value&=mask;
+
+ /* find the rows whose ranges overlap with the input range */
+
+ /* find the first and last rows, always successful */
+ firstRow=_findRow(pv, start);
+ lastRow=_findRow(pv, end);
+
+ /*
+ * Rows need to be split if they partially overlap with the
+ * input range (only possible for the first and last rows)
+ * and if their value differs from the input value.
+ */
+ splitFirstRow= (UBool)(start!=(UChar32)firstRow[0] && value!=(firstRow[column]&mask));
+ splitLastRow= (UBool)(limit!=(UChar32)lastRow[1] && value!=(lastRow[column]&mask));
+
+ /* split first/last rows if necessary */
+ if(splitFirstRow || splitLastRow) {
+ int32_t count, rows;
+
+ rows=pv->rows;
+ if((rows+splitFirstRow+splitLastRow)>pv->maxRows) {
+ uint32_t *newVectors;
+ int32_t newMaxRows;
+
+ if(pv->maxRows<UPVEC_MEDIUM_ROWS) {
+ newMaxRows=UPVEC_MEDIUM_ROWS;
+ } else if(pv->maxRows<UPVEC_MAX_ROWS) {
+ newMaxRows=UPVEC_MAX_ROWS;
+ } else {
+ /* Implementation bug, or UPVEC_MAX_ROWS too low. */
+ *pErrorCode=U_INTERNAL_PROGRAM_ERROR;
+ return;
+ }
+ newVectors=(uint32_t *)uprv_malloc(newMaxRows*columns*4);
+ if(newVectors==NULL) {
+ *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ uprv_memcpy(newVectors, pv->v, (size_t)rows*columns*4);
+ firstRow=newVectors+(firstRow-pv->v);
+ lastRow=newVectors+(lastRow-pv->v);
+ uprv_free(pv->v);
+ pv->v=newVectors;
+ pv->maxRows=newMaxRows;
+ }
+
+ /* count the number of row cells to move after the last row, and move them */
+ count = (int32_t)((pv->v+rows*columns)-(lastRow+columns));
+ if(count>0) {
+ uprv_memmove(
+ lastRow+(1+splitFirstRow+splitLastRow)*columns,
+ lastRow+columns,
+ count*4);
+ }
+ pv->rows=rows+splitFirstRow+splitLastRow;
+
+ /* split the first row, and move the firstRow pointer to the second part */
+ if(splitFirstRow) {
+ /* copy all affected rows up one and move the lastRow pointer */
+ count = (int32_t)((lastRow-firstRow)+columns);
+ uprv_memmove(firstRow+columns, firstRow, (size_t)count*4);
+ lastRow+=columns;
+
+ /* split the range and move the firstRow pointer */
+ firstRow[1]=firstRow[columns]=(uint32_t)start;
+ firstRow+=columns;
+ }
+
+ /* split the last row */
+ if(splitLastRow) {
+ /* copy the last row data */
+ uprv_memcpy(lastRow+columns, lastRow, (size_t)columns*4);
+
+ /* split the range and move the firstRow pointer */
+ lastRow[1]=lastRow[columns]=(uint32_t)limit;
+ }
+ }
+
+ /* set the "row last seen" to the last row for the range */
+ pv->prevRow=(int32_t)((lastRow-(pv->v))/columns);
+
+ /* set the input value in all remaining rows */
+ firstRow+=column;
+ lastRow+=column;
+ mask=~mask;
+ for(;;) {
+ *firstRow=(*firstRow&mask)|value;
+ if(firstRow==lastRow) {
+ break;
+ }
+ firstRow+=columns;
+ }
+}
+
+U_CAPI uint32_t U_EXPORT2
+upvec_getValue(const UPropsVectors *pv, UChar32 c, int32_t column) {
+ uint32_t *row;
+ UPropsVectors *ncpv;
+
+ if(pv->isCompacted || c<0 || c>UPVEC_MAX_CP || column<0 || column>=(pv->columns-2)) {
+ return 0;
+ }
+ ncpv=(UPropsVectors *)pv;
+ row=_findRow(ncpv, c);
+ return row[2+column];
+}
+
+U_CAPI uint32_t * U_EXPORT2
+upvec_getRow(const UPropsVectors *pv, int32_t rowIndex,
+ UChar32 *pRangeStart, UChar32 *pRangeEnd) {
+ uint32_t *row;
+ int32_t columns;
+
+ if(pv->isCompacted || rowIndex<0 || rowIndex>=pv->rows) {
+ return NULL;
+ }
+
+ columns=pv->columns;
+ row=pv->v+rowIndex*columns;
+ if(pRangeStart!=NULL) {
+ *pRangeStart=(UChar32)row[0];
+ }
+ if(pRangeEnd!=NULL) {
+ *pRangeEnd=(UChar32)row[1]-1;
+ }
+ return row+2;
+}
+
+static int32_t U_CALLCONV
+upvec_compareRows(const void *context, const void *l, const void *r) {
+ const uint32_t *left=(const uint32_t *)l, *right=(const uint32_t *)r;
+ const UPropsVectors *pv=(const UPropsVectors *)context;
+ int32_t i, count, columns;
+
+ count=columns=pv->columns; /* includes start/limit columns */
+
+ /* start comparing after start/limit but wrap around to them */
+ i=2;
+ do {
+ if(left[i]!=right[i]) {
+ return left[i]<right[i] ? -1 : 1;
+ }
+ if(++i==columns) {
+ i=0;
+ }
+ } while(--count>0);
+
+ return 0;
+}
+
+U_CAPI void U_EXPORT2
+upvec_compact(UPropsVectors *pv, UPVecCompactHandler *handler, void *context, UErrorCode *pErrorCode) {
+ uint32_t *row;
+ int32_t i, columns, valueColumns, rows, count;
+ UChar32 start, limit;
+
+ /* argument checking */
+ if(U_FAILURE(*pErrorCode)) {
+ return;
+ }
+ if(handler==NULL) {
+ *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+ if(pv->isCompacted) {
+ return;
+ }
+
+ /* Set the flag now: Sorting and compacting destroys the builder data structure. */
+ pv->isCompacted=TRUE;
+
+ rows=pv->rows;
+ columns=pv->columns;
+ U_ASSERT(columns>=3); /* upvec_open asserts this */
+ valueColumns=columns-2; /* not counting start & limit */
+
+ /* sort the properties vectors to find unique vector values */
+ uprv_sortArray(pv->v, rows, columns*4,
+ upvec_compareRows, pv, FALSE, pErrorCode);
+ if(U_FAILURE(*pErrorCode)) {
+ return;
+ }
+
+ /*
+ * Find and set the special values.
+ * This has to do almost the same work as the compaction below,
+ * to find the indexes where the special-value rows will move.
+ */
+ row=pv->v;
+ count=-valueColumns;
+ for(i=0; i<rows; ++i) {
+ start=(UChar32)row[0];
+
+ /* count a new values vector if it is different from the current one */
+ if(count<0 || 0!=uprv_memcmp(row+2, row-valueColumns, valueColumns*4)) {
+ count+=valueColumns;
+ }
+
+ if(start>=UPVEC_FIRST_SPECIAL_CP) {
+ handler(context, start, start, count, row+2, valueColumns, pErrorCode);
+ if(U_FAILURE(*pErrorCode)) {
+ return;
+ }
+ }
+
+ row+=columns;
+ }
+
+ /* count is at the beginning of the last vector, add valueColumns to include that last vector */
+ count+=valueColumns;
+
+ /* Call the handler once more to signal the start of delivering real values. */
+ handler(context, UPVEC_START_REAL_VALUES_CP, UPVEC_START_REAL_VALUES_CP,
+ count, row-valueColumns, valueColumns, pErrorCode);
+ if(U_FAILURE(*pErrorCode)) {
+ return;
+ }
+
+ /*
+ * Move vector contents up to a contiguous array with only unique
+ * vector values, and call the handler function for each vector.
+ *
+ * This destroys the Properties Vector structure and replaces it
+ * with an array of just vector values.
+ */
+ row=pv->v;
+ count=-valueColumns;
+ for(i=0; i<rows; ++i) {
+ /* fetch these first before memmove() may overwrite them */
+ start=(UChar32)row[0];
+ limit=(UChar32)row[1];
+
+ /* add a new values vector if it is different from the current one */
+ if(count<0 || 0!=uprv_memcmp(row+2, pv->v+count, valueColumns*4)) {
+ count+=valueColumns;
+ uprv_memmove(pv->v+count, row+2, (size_t)valueColumns*4);
+ }
+
+ if(start<UPVEC_FIRST_SPECIAL_CP) {
+ handler(context, start, limit-1, count, pv->v+count, valueColumns, pErrorCode);
+ if(U_FAILURE(*pErrorCode)) {
+ return;
+ }
+ }
+
+ row+=columns;
+ }
+
+ /* count is at the beginning of the last vector, add one to include that last vector */
+ pv->rows=count/valueColumns+1;
+}
+
+U_CAPI const uint32_t * U_EXPORT2
+upvec_getArray(const UPropsVectors *pv, int32_t *pRows, int32_t *pColumns) {
+ if(!pv->isCompacted) {
+ return NULL;
+ }
+ if(pRows!=NULL) {
+ *pRows=pv->rows;
+ }
+ if(pColumns!=NULL) {
+ *pColumns=pv->columns-2;
+ }
+ return pv->v;
+}
+
+U_CAPI uint32_t * U_EXPORT2
+upvec_cloneArray(const UPropsVectors *pv,
+ int32_t *pRows, int32_t *pColumns, UErrorCode *pErrorCode) {
+ uint32_t *clonedArray;
+ int32_t byteLength;
+
+ if(U_FAILURE(*pErrorCode)) {
+ return NULL;
+ }
+ if(!pv->isCompacted) {
+ *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
+ return NULL;
+ }
+ byteLength=pv->rows*(pv->columns-2)*4;
+ clonedArray=(uint32_t *)uprv_malloc(byteLength);
+ if(clonedArray==NULL) {
+ *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
+ return NULL;
+ }
+ uprv_memcpy(clonedArray, pv->v, byteLength);
+ if(pRows!=NULL) {
+ *pRows=pv->rows;
+ }
+ if(pColumns!=NULL) {
+ *pColumns=pv->columns-2;
+ }
+ return clonedArray;
+}
+
+U_CAPI UTrie2 * U_EXPORT2
+upvec_compactToUTrie2WithRowIndexes(UPropsVectors *pv, UErrorCode *pErrorCode) {
+ UPVecToUTrie2Context toUTrie2={ NULL, 0, 0, 0 };
+ upvec_compact(pv, upvec_compactToUTrie2Handler, &toUTrie2, pErrorCode);
+ utrie2_freeze(toUTrie2.trie, UTRIE2_16_VALUE_BITS, pErrorCode);
+ if(U_FAILURE(*pErrorCode)) {
+ utrie2_close(toUTrie2.trie);
+ toUTrie2.trie=NULL;
+ }
+ return toUTrie2.trie;
+}
+
+/*
+ * TODO(markus): Add upvec_16BitsToUTrie2() function that enumerates all rows, extracts
+ * some 16-bit field and builds and returns a UTrie2.
+ */
+
+U_CAPI void U_CALLCONV
+upvec_compactToUTrie2Handler(void *context,
+ UChar32 start, UChar32 end,
+ int32_t rowIndex, uint32_t *row, int32_t columns,
+ UErrorCode *pErrorCode) {
+ (void)row;
+ (void)columns;
+ UPVecToUTrie2Context *toUTrie2=(UPVecToUTrie2Context *)context;
+ if(start<UPVEC_FIRST_SPECIAL_CP) {
+ utrie2_setRange32(toUTrie2->trie, start, end, (uint32_t)rowIndex, TRUE, pErrorCode);
+ } else {
+ switch(start) {
+ case UPVEC_INITIAL_VALUE_CP:
+ toUTrie2->initialValue=rowIndex;
+ break;
+ case UPVEC_ERROR_VALUE_CP:
+ toUTrie2->errorValue=rowIndex;
+ break;
+ case UPVEC_START_REAL_VALUES_CP:
+ toUTrie2->maxValue=rowIndex;
+ if(rowIndex>0xffff) {
+ /* too many rows for a 16-bit trie */
+ *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR;
+ } else {
+ toUTrie2->trie=utrie2_open(toUTrie2->initialValue,
+ toUTrie2->errorValue, pErrorCode);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+}
Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/propsvec.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/propsvec.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/propsvec.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/propsvec.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -8,7 +8,7 @@
*
*******************************************************************************
* file name: propsvec.h
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
Modified: trunk/Build/source/libs/icu/icu-src/source/common/punycode.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/punycode.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/punycode.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -8,7 +8,7 @@
*
*******************************************************************************
* file name: punycode.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
Modified: trunk/Build/source/libs/icu/icu-src/source/common/punycode.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/punycode.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/punycode.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -8,7 +8,7 @@
*
*******************************************************************************
* file name: punycode.h
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
Modified: trunk/Build/source/libs/icu/icu-src/source/common/putil.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/putil.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/putil.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
******************************************************************************
@@ -43,7 +43,10 @@
// Must be before any other #includes.
#include "uposixdefs.h"
-#if (U_PF_MINGW <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN) && defined(__STRICT_ANSI__)
+// First, the platform type. Need this for U_PLATFORM.
+#include "unicode/platform.h"
+
+#if (U_PF_CYGWIN <= U_PLATFORM) && defined(__STRICT_ANSI__)
/* tzset isn't defined in strict ANSI on Cygwin and MinGW. */
#undef __STRICT_ANSI__
#endif
@@ -57,8 +60,7 @@
#include <sys/time.h>
#endif
-/* include ICU headers */
-#include "unicode/utypes.h"
+/* include the rest of the ICU headers */
#include "unicode/putil.h"
#include "unicode/ustring.h"
#include "putilimp.h"
@@ -90,7 +92,9 @@
* Should Cygwin be included as well (U_PLATFORM_HAS_WIN32_API)
* to use native APIs as much as possible?
*/
+#ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
+#endif
# define VC_EXTRALEAN
# define NOUSER
# define NOSERVICE
@@ -97,7 +101,20 @@
# define NOIME
# define NOMCX
# include <windows.h>
+# include "unicode/uloc.h"
+#if U_PLATFORM_HAS_WINUWP_API == 0
# include "wintz.h"
+#else // U_PLATFORM_HAS_WINUWP_API
+typedef PVOID LPMSG; // TODO: figure out how to get rid of this typedef
+#include <Windows.Globalization.h>
+#include <windows.system.userprofile.h>
+#include <wrl/wrappers/corewrappers.h>
+#include <wrl/client.h>
+
+using namespace ABI::Windows::Foundation;
+using namespace Microsoft::WRL;
+using namespace Microsoft::WRL::Wrappers;
+#endif
#elif U_PLATFORM == U_PF_OS400
# include <float.h>
# include <qusec.h> /* error code structure */
@@ -651,7 +668,7 @@
/* Note that U_TZNAME does *not* have to be tzname, but if it is,
some platforms need to have it declared here. */
-#if defined(U_TZNAME) && (U_PLATFORM == U_PF_IRIX || U_PLATFORM_IS_DARWIN_BASED || (U_PLATFORM == U_PF_CYGWIN && !U_PLATFORM_USES_ONLY_WIN32_API))
+#if defined(U_TZNAME) && (U_PLATFORM == U_PF_IRIX || U_PLATFORM_IS_DARWIN_BASED)
/* RS6000 and others reject char **tzname. */
extern U_IMPORT char *U_TZNAME[];
#endif
@@ -658,6 +675,16 @@
#if !UCONFIG_NO_FILE_IO && ((U_PLATFORM_IS_DARWIN_BASED && (U_PLATFORM != U_PF_IPHONE || defined(U_TIMEZONE))) || U_PLATFORM_IS_LINUX_BASED || U_PLATFORM == U_PF_BSD || U_PLATFORM == U_PF_SOLARIS)
/* These platforms are likely to use Olson timezone IDs. */
+/* common targets of the symbolic link at TZDEFAULT are:
+ * "/usr/share/zoneinfo/<olsonID>" default, older Linux distros, macOS to 10.12
+ * "../usr/share/zoneinfo/<olsonID>" newer Linux distros: Red Hat Enterprise Linux 7, Ubuntu 16, SuSe Linux 12
+ * "/usr/share/lib/zoneinfo/<olsonID>" Solaris
+ * "../usr/share/lib/zoneinfo/<olsonID>" Solaris
+ * "/var/db/timezone/zoneinfo/<olsonID>" macOS 10.13
+ * To avoid checking lots of paths, just check that the target path
+ * before the <olsonID> ends with "/zoneinfo/", and the <olsonID> is valid.
+ */
+
#define CHECK_LOCALTIME_LINK 1
#if U_PLATFORM_IS_DARWIN_BASED
#include <tzfile.h>
@@ -665,12 +692,12 @@
#elif U_PLATFORM == U_PF_SOLARIS
#define TZDEFAULT "/etc/localtime"
#define TZZONEINFO "/usr/share/lib/zoneinfo/"
-#define TZZONEINFO2 "../usr/share/lib/zoneinfo/"
#define TZ_ENV_CHECK "localtime"
#else
#define TZDEFAULT "/etc/localtime"
#define TZZONEINFO "/usr/share/zoneinfo/"
#endif
+#define TZZONEINFOTAIL "/zoneinfo/"
#if U_HAVE_DIRENT_H
#define TZFILE_SKIP "posixrules" /* tz file to skip when searching. */
/* Some Linux distributions have 'localtime' in /usr/share/zoneinfo
@@ -922,30 +949,30 @@
* This function is not thread safe - it uses a global, gSearchTZFileResult, to hold its results.
*/
static char* searchForTZFile(const char* path, DefaultTZInfo* tzInfo) {
- DIR* dirp = opendir(path);
- DIR* subDirp = NULL;
+ DIR* dirp = NULL;
struct dirent* dirEntry = NULL;
+ char* result = NULL;
+ UErrorCode status = U_ZERO_ERROR;
- char* result = NULL;
+ /* Save the current path */
+ CharString curpath(path, -1, status);
+ if (U_FAILURE(status)) {
+ goto cleanupAndReturn;
+ }
+
+ dirp = opendir(path);
if (dirp == NULL) {
- return result;
+ goto cleanupAndReturn;
}
if (gSearchTZFileResult == NULL) {
gSearchTZFileResult = new CharString;
if (gSearchTZFileResult == NULL) {
- return NULL;
+ goto cleanupAndReturn;
}
ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
}
- /* Save the current path */
- UErrorCode status = U_ZERO_ERROR;
- CharString curpath(path, -1, status);
- if (U_FAILURE(status)) {
- return NULL;
- }
-
/* Check each entry in the directory. */
while((dirEntry = readdir(dirp)) != NULL) {
const char* dirName = dirEntry->d_name;
@@ -954,15 +981,16 @@
CharString newpath(curpath, status);
newpath.append(dirName, -1, status);
if (U_FAILURE(status)) {
- return NULL;
+ break;
}
+ DIR* subDirp = NULL;
if ((subDirp = opendir(newpath.data())) != NULL) {
/* If this new path is a directory, make a recursive call with the newpath. */
closedir(subDirp);
newpath.append('/', status);
if (U_FAILURE(status)) {
- return NULL;
+ break;
}
result = searchForTZFile(newpath.data(), tzInfo);
/*
@@ -986,7 +1014,7 @@
gSearchTZFileResult->clear();
gSearchTZFileResult->append(zoneid, -1, status);
if (U_FAILURE(status)) {
- return NULL;
+ break;
}
result = gSearchTZFileResult->data();
/* Get out after the first one found. */
@@ -995,7 +1023,11 @@
}
}
}
- closedir(dirp);
+
+ cleanupAndReturn:
+ if (dirp) {
+ closedir(dirp);
+ }
return result;
}
#endif
@@ -1008,16 +1040,66 @@
#endif
}
+// With the Universal Windows Platform we can just ask Windows for the name
+#if U_PLATFORM_HAS_WINUWP_API
U_CAPI const char* U_EXPORT2
+uprv_getWindowsTimeZone()
+{
+ // Get default Windows timezone.
+ ComPtr<IInspectable> calendar;
+ HRESULT hr = RoActivateInstance(
+ HStringReference(RuntimeClass_Windows_Globalization_Calendar).Get(),
+ &calendar);
+ if (SUCCEEDED(hr))
+ {
+ ComPtr<ABI::Windows::Globalization::ITimeZoneOnCalendar> timezone;
+ hr = calendar.As(&timezone);
+ if (SUCCEEDED(hr))
+ {
+ HString timezoneString;
+ hr = timezone->GetTimeZone(timezoneString.GetAddressOf());
+ if (SUCCEEDED(hr))
+ {
+ int32_t length = static_cast<int32_t>(wcslen(timezoneString.GetRawBuffer(NULL)));
+ char* asciiId = (char*)uprv_calloc(length + 1, sizeof(char));
+ if (asciiId != nullptr)
+ {
+ u_UCharsToChars((UChar*)timezoneString.GetRawBuffer(NULL), asciiId, length);
+ return asciiId;
+ }
+ }
+ }
+ }
+
+ // Failed
+ return nullptr;
+}
+#endif
+
+U_CAPI const char* U_EXPORT2
uprv_tzname(int n)
{
+ (void)n; // Avoid unreferenced parameter warning.
const char *tzid = NULL;
#if U_PLATFORM_USES_ONLY_WIN32_API
+#if U_PLATFORM_HAS_WINUWP_API > 0
+ tzid = uprv_getWindowsTimeZone();
+#else
tzid = uprv_detectWindowsTimeZone();
+#endif
if (tzid != NULL) {
return tzid;
}
+
+#ifndef U_TZNAME
+ // The return value is free'd in timezone.cpp on Windows because
+ // the other code path returns a pointer to a heap location.
+ // If we don't have a name already, then tzname wouldn't be any
+ // better, so just fall back.
+ return uprv_strdup("Etc/UTC");
+#endif // !U_TZNAME
+
#else
/*#if U_PLATFORM_IS_DARWIN_BASED
@@ -1059,24 +1141,15 @@
*/
int32_t ret = (int32_t)readlink(TZDEFAULT, gTimeZoneBuffer, sizeof(gTimeZoneBuffer)-1);
if (0 < ret) {
- int32_t tzZoneInfoLen = uprv_strlen(TZZONEINFO);
+ int32_t tzZoneInfoTailLen = uprv_strlen(TZZONEINFOTAIL);
gTimeZoneBuffer[ret] = 0;
- if (uprv_strncmp(gTimeZoneBuffer, TZZONEINFO, tzZoneInfoLen) == 0
- && isValidOlsonID(gTimeZoneBuffer + tzZoneInfoLen))
+ char * tzZoneInfoTailPtr = uprv_strstr(gTimeZoneBuffer, TZZONEINFOTAIL);
+
+ if (tzZoneInfoTailPtr != NULL
+ && isValidOlsonID(tzZoneInfoTailPtr + tzZoneInfoTailLen))
{
- return (gTimeZoneBufferPtr = gTimeZoneBuffer + tzZoneInfoLen);
+ return (gTimeZoneBufferPtr = tzZoneInfoTailPtr + tzZoneInfoTailLen);
}
-#if U_PLATFORM == U_PF_SOLARIS
- else
- {
- tzZoneInfoLen = uprv_strlen(TZZONEINFO2);
- if (uprv_strncmp(gTimeZoneBuffer, TZZONEINFO2, tzZoneInfoLen) == 0
- && isValidOlsonID(gTimeZoneBuffer + tzZoneInfoLen))
- {
- return (gTimeZoneBufferPtr = gTimeZoneBuffer + tzZoneInfoLen);
- }
- }
-#endif
} else {
#if defined(SEARCH_TZFILE)
DefaultTZInfo* tzInfo = (DefaultTZInfo*)uprv_malloc(sizeof(DefaultTZInfo));
@@ -1162,7 +1235,8 @@
static CharString *gTimeZoneFilesDirectory = NULL;
#if U_POSIX_LOCALE || U_PLATFORM_USES_ONLY_WIN32_API
- static char *gCorrectedPOSIXLocale = NULL; /* Heap allocated */
+ static const char *gCorrectedPOSIXLocale = NULL; /* Sometimes heap allocated */
+ static bool gCorrectedPOSIXLocaleHeapAllocated = false;
#endif
static UBool U_CALLCONV putil_cleanup(void)
@@ -1183,9 +1257,10 @@
#endif
#if U_POSIX_LOCALE || U_PLATFORM_USES_ONLY_WIN32_API
- if (gCorrectedPOSIXLocale) {
- uprv_free(gCorrectedPOSIXLocale);
+ if (gCorrectedPOSIXLocale && gCorrectedPOSIXLocaleHeapAllocated) {
+ uprv_free(const_cast<char *>(gCorrectedPOSIXLocale));
gCorrectedPOSIXLocale = NULL;
+ gCorrectedPOSIXLocaleHeapAllocated = false;
}
#endif
return TRUE;
@@ -1219,7 +1294,7 @@
#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR)
{
char *p;
- while(p = uprv_strchr(newDataDir, U_FILE_ALT_SEP_CHAR)) {
+ while((p = uprv_strchr(newDataDir, U_FILE_ALT_SEP_CHAR)) != NULL) {
*p = U_FILE_SEP_CHAR;
}
}
@@ -1297,7 +1372,9 @@
*/
# if !defined(ICU_NO_USER_DATA_OVERRIDE) && !UCONFIG_NO_FILE_IO
/* First try to get the environment variable */
- path=getenv("ICU_DATA");
+# if U_PLATFORM_HAS_WINUWP_API == 0 // Windows UWP does not support getenv
+ path=getenv("ICU_DATA");
+# endif
# endif
/* ICU_DATA_DIR may be set as a compile option.
@@ -1326,9 +1403,35 @@
}
#endif
+#if defined(ICU_DATA_DIR_WINDOWS) && U_PLATFORM_HAS_WINUWP_API != 0
+ // Use data from the %windir%\globalization\icu directory
+ // This is only available if ICU is built as a system component
+ char datadir_path_buffer[MAX_PATH];
+ UINT length = GetWindowsDirectoryA(datadir_path_buffer, UPRV_LENGTHOF(datadir_path_buffer));
+ if (length > 0 && length < (UPRV_LENGTHOF(datadir_path_buffer) - sizeof(ICU_DATA_DIR_WINDOWS) - 1))
+ {
+ if (datadir_path_buffer[length - 1] != '\\')
+ {
+ datadir_path_buffer[length++] = '\\';
+ datadir_path_buffer[length] = '\0';
+ }
+
+ if ((length + 1 + sizeof(ICU_DATA_DIR_WINDOWS)) < UPRV_LENGTHOF(datadir_path_buffer))
+ {
+ uprv_strcat(datadir_path_buffer, ICU_DATA_DIR_WINDOWS);
+ path = datadir_path_buffer;
+ }
+ }
+#endif
+
if(path==NULL) {
/* It looks really bad, set it to something. */
+#if U_PLATFORM_HAS_WIN32_API
+ // Windows UWP will require icudtl.dat file in same directory as icuuc.dll
+ path = ".\\";
+#else
path = "";
+#endif
}
u_setDataDirectory(path);
@@ -1349,7 +1452,7 @@
gTimeZoneFilesDirectory->append(path, status);
#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR)
char *p = gTimeZoneFilesDirectory->data();
- while (p = uprv_strchr(p, U_FILE_ALT_SEP_CHAR)) {
+ while ((p = uprv_strchr(p, U_FILE_ALT_SEP_CHAR)) != NULL) {
*p = U_FILE_SEP_CHAR;
}
#endif
@@ -1366,7 +1469,12 @@
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
+#if U_PLATFORM_HAS_WINUWP_API == 0
const char *dir = getenv("ICU_TIMEZONE_FILES_DIR");
+#else
+ // TODO: UWP does not support alternate timezone data directories at this time
+ const char *dir = "";
+#endif // U_PLATFORM_HAS_WINUWP_API
#if defined(U_TIMEZONE_FILES_DIR)
if (dir == NULL) {
dir = TO_STRING(U_TIMEZONE_FILES_DIR);
@@ -1603,6 +1711,7 @@
if (gCorrectedPOSIXLocale == NULL) {
gCorrectedPOSIXLocale = correctedPOSIXLocale;
+ gCorrectedPOSIXLocaleHeapAllocated = true;
ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
correctedPOSIXLocale = NULL;
}
@@ -1618,25 +1727,117 @@
UErrorCode status = U_ZERO_ERROR;
char *correctedPOSIXLocale = 0;
+ // If we have already figured this out just use the cached value
if (gCorrectedPOSIXLocale != NULL) {
return gCorrectedPOSIXLocale;
}
- LCID id = GetThreadLocale();
- correctedPOSIXLocale = static_cast<char *>(uprv_malloc(POSIX_LOCALE_CAPACITY + 1));
- if (correctedPOSIXLocale) {
- int32_t posixLen = uprv_convertToPosix(id, correctedPOSIXLocale, POSIX_LOCALE_CAPACITY, &status);
- if (U_SUCCESS(status)) {
- *(correctedPOSIXLocale + posixLen) = 0;
- gCorrectedPOSIXLocale = correctedPOSIXLocale;
- ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
- } else {
- uprv_free(correctedPOSIXLocale);
+ // No cached value, need to determine the current value
+ static WCHAR windowsLocale[LOCALE_NAME_MAX_LENGTH];
+#if U_PLATFORM_HAS_WINUWP_API == 0
+ // If not a Universal Windows App, we'll need user default language.
+ // Vista and above should use Locale Names instead of LCIDs
+ int length = GetUserDefaultLocaleName(windowsLocale, UPRV_LENGTHOF(windowsLocale));
+#else
+ // In a UWP app, we want the top language that the application and user agreed upon
+ ComPtr<ABI::Windows::Foundation::Collections::IVectorView<HSTRING>> languageList;
+
+ ComPtr<ABI::Windows::Globalization::IApplicationLanguagesStatics> applicationLanguagesStatics;
+ HRESULT hr = GetActivationFactory(
+ HStringReference(RuntimeClass_Windows_Globalization_ApplicationLanguages).Get(),
+ &applicationLanguagesStatics);
+ if (SUCCEEDED(hr))
+ {
+ hr = applicationLanguagesStatics->get_Languages(&languageList);
+ }
+
+ if (FAILED(hr))
+ {
+ // If there is no application context, then use the top language from the user language profile
+ ComPtr<ABI::Windows::System::UserProfile::IGlobalizationPreferencesStatics> globalizationPreferencesStatics;
+ hr = GetActivationFactory(
+ HStringReference(RuntimeClass_Windows_System_UserProfile_GlobalizationPreferences).Get(),
+ &globalizationPreferencesStatics);
+ if (SUCCEEDED(hr))
+ {
+ hr = globalizationPreferencesStatics->get_Languages(&languageList);
}
}
+ // We have a list of languages, ICU knows one, so use the top one for our locale
+ HString topLanguage;
+ if (SUCCEEDED(hr))
+ {
+ hr = languageList->GetAt(0, topLanguage.GetAddressOf());
+ }
+
+ if (FAILED(hr))
+ {
+ // Unexpected, use en-US by default
+ if (gCorrectedPOSIXLocale == NULL) {
+ gCorrectedPOSIXLocale = "en_US";
+ }
+
+ return gCorrectedPOSIXLocale;
+ }
+
+ // ResolveLocaleName will get a likely subtags form consistent with Windows behavior.
+ int length = ResolveLocaleName(topLanguage.GetRawBuffer(NULL), windowsLocale, UPRV_LENGTHOF(windowsLocale));
+#endif
+ // Now we should have a Windows locale name that needs converted to the POSIX style,
+ if (length > 0)
+ {
+ // First we need to go from UTF-16 to char (and also convert from _ to - while we're at it.)
+ char modifiedWindowsLocale[LOCALE_NAME_MAX_LENGTH];
+
+ int32_t i;
+ for (i = 0; i < UPRV_LENGTHOF(modifiedWindowsLocale); i++)
+ {
+ if (windowsLocale[i] == '_')
+ {
+ modifiedWindowsLocale[i] = '-';
+ }
+ else
+ {
+ modifiedWindowsLocale[i] = static_cast<char>(windowsLocale[i]);
+ }
+
+ if (modifiedWindowsLocale[i] == '\0')
+ {
+ break;
+ }
+ }
+
+ if (i >= UPRV_LENGTHOF(modifiedWindowsLocale))
+ {
+ // Ran out of room, can't really happen, maybe we'll be lucky about a matching
+ // locale when tags are dropped
+ modifiedWindowsLocale[UPRV_LENGTHOF(modifiedWindowsLocale) - 1] = '\0';
+ }
+
+ // Now normalize the resulting name
+ correctedPOSIXLocale = static_cast<char *>(uprv_malloc(POSIX_LOCALE_CAPACITY + 1));
+ /* TODO: Should we just exit on memory allocation failure? */
+ if (correctedPOSIXLocale)
+ {
+ int32_t posixLen = uloc_canonicalize(modifiedWindowsLocale, correctedPOSIXLocale, POSIX_LOCALE_CAPACITY, &status);
+ if (U_SUCCESS(status))
+ {
+ *(correctedPOSIXLocale + posixLen) = 0;
+ gCorrectedPOSIXLocale = correctedPOSIXLocale;
+ gCorrectedPOSIXLocaleHeapAllocated = true;
+ ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
+ }
+ else
+ {
+ uprv_free(correctedPOSIXLocale);
+ }
+ }
+ }
+
+ // If unable to find a locale we can agree upon, use en-US by default
if (gCorrectedPOSIXLocale == NULL) {
- return "en_US";
+ gCorrectedPOSIXLocale = "en_US";
}
return gCorrectedPOSIXLocale;
@@ -1923,9 +2124,35 @@
#elif U_PLATFORM_USES_ONLY_WIN32_API
static char codepage[64];
- sprintf(codepage, "windows-%d", GetACP());
- return codepage;
+ DWORD codepageNumber = 0;
+#if U_PLATFORM_HAS_WINUWP_API > 0
+ // UWP doesn't have a direct API to get the default ACP as Microsoft would rather
+ // have folks use Unicode than a "system" code page, however this is the same
+ // codepage as the system default locale codepage. (FWIW, the system locale is
+ // ONLY used for codepage, it should never be used for anything else)
+ GetLocaleInfoEx(LOCALE_NAME_SYSTEM_DEFAULT, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER,
+ (LPWSTR)&codepageNumber, sizeof(codepageNumber) / sizeof(WCHAR));
+#else
+ // Win32 apps can call GetACP
+ codepageNumber = GetACP();
+#endif
+ // Special case for UTF-8
+ if (codepageNumber == 65001)
+ {
+ return "UTF-8";
+ }
+ // Windows codepages can look like windows-1252, so format the found number
+ // the numbers are eclectic, however all valid system code pages, besides UTF-8
+ // are between 3 and 19999
+ if (codepageNumber > 0 && codepageNumber < 20000)
+ {
+ sprintf(codepage, "windows-%ld", codepageNumber);
+ return codepage;
+ }
+ // If the codepage number call failed then return UTF-8
+ return "UTF-8";
+
#elif U_POSIX_LOCALE
static char codesetName[100];
const char *localeName = NULL;
@@ -2108,12 +2335,9 @@
* icucfg.h dependent code
*/
-#if U_ENABLE_DYLOAD
-
-#if HAVE_DLOPEN && !U_PLATFORM_USES_ONLY_WIN32_API
+#if U_ENABLE_DYLOAD && HAVE_DLOPEN && !U_PLATFORM_USES_ONLY_WIN32_API
#if HAVE_DLFCN_H
-
#ifdef __MVS__
#ifndef __SUSV3
#define __SUSV3 1
@@ -2120,7 +2344,7 @@
#endif
#endif
#include <dlfcn.h>
-#endif
+#endif /* HAVE_DLFCN_H */
U_INTERNAL void * U_EXPORT2
uprv_dl_open(const char *libName, UErrorCode *status) {
@@ -2160,41 +2384,13 @@
return uret.fp;
}
-#else
+#elif U_ENABLE_DYLOAD && U_PLATFORM_USES_ONLY_WIN32_API && !U_PLATFORM_HAS_WINUWP_API
-/* null (nonexistent) implementation. */
+/* Windows API implementation. */
+// Note: UWP does not expose/allow these APIs, so the UWP version gets the null implementation. */
U_INTERNAL void * U_EXPORT2
uprv_dl_open(const char *libName, UErrorCode *status) {
- if(U_FAILURE(*status)) return NULL;
- *status = U_UNSUPPORTED_ERROR;
- return NULL;
-}
-
-U_INTERNAL void U_EXPORT2
-uprv_dl_close(void *lib, UErrorCode *status) {
- if(U_FAILURE(*status)) return;
- *status = U_UNSUPPORTED_ERROR;
- return;
-}
-
-
-U_INTERNAL UVoidFunction* U_EXPORT2
-uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
- if(U_SUCCESS(*status)) {
- *status = U_UNSUPPORTED_ERROR;
- }
- return (UVoidFunction*)NULL;
-}
-
-
-
-#endif
-
-#elif U_PLATFORM_USES_ONLY_WIN32_API
-
-U_INTERNAL void * U_EXPORT2
-uprv_dl_open(const char *libName, UErrorCode *status) {
HMODULE lib = NULL;
if(U_FAILURE(*status)) return NULL;
@@ -2218,7 +2414,6 @@
return;
}
-
U_INTERNAL UVoidFunction* U_EXPORT2
uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
HMODULE handle = (HMODULE)lib;
@@ -2240,10 +2435,9 @@
return addr;
}
-
#else
-/* No dynamic loading set. */
+/* No dynamic loading, null (nonexistent) implementation. */
U_INTERNAL void * U_EXPORT2
uprv_dl_open(const char *libName, UErrorCode *status) {
@@ -2261,7 +2455,6 @@
return;
}
-
U_INTERNAL UVoidFunction* U_EXPORT2
uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
(void)lib;
@@ -2272,7 +2465,7 @@
return (UVoidFunction*)NULL;
}
-#endif /* U_ENABLE_DYLOAD */
+#endif
/*
* Hey, Emacs, please set the following:
Modified: trunk/Build/source/libs/icu/icu-src/source/common/putilimp.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/putilimp.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/putilimp.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
******************************************************************************
@@ -72,15 +72,6 @@
typedef size_t uintptr_t;
#endif
-/**
- * \def U_HAVE_MSVC_2003_OR_EARLIER
- * Flag for workaround of MSVC 2003 optimization bugs
- * @internal
- */
-#if !defined(U_HAVE_MSVC_2003_OR_EARLIER) && defined(_MSC_VER) && (_MSC_VER < 1400)
-#define U_HAVE_MSVC_2003_OR_EARLIER
-#endif
-
/*===========================================================================*/
/** @{ Information about POSIX support */
/*===========================================================================*/
@@ -87,7 +78,7 @@
#ifdef U_HAVE_NL_LANGINFO_CODESET
/* Use the predefined value. */
-#elif U_PLATFORM_HAS_WIN32_API || U_PLATFORM == U_PF_ANDROID || U_PLATFORM == U_PF_QNX
+#elif U_PLATFORM_USES_ONLY_WIN32_API || U_PLATFORM == U_PF_ANDROID || U_PLATFORM == U_PF_QNX
# define U_HAVE_NL_LANGINFO_CODESET 0
#else
# define U_HAVE_NL_LANGINFO_CODESET 1
@@ -106,7 +97,10 @@
#ifdef U_TZSET
/* Use the predefined value. */
#elif U_PLATFORM_USES_ONLY_WIN32_API
+ // UWP doesn't support tzset or environment variables for tz
+#if U_PLATFORM_HAS_WINUWP_API == 0
# define U_TZSET _tzset
+#endif
#elif U_PLATFORM == U_PF_OS400
/* not defined */
#else
@@ -117,15 +111,15 @@
/* Use the predefined value. */
#elif U_PLATFORM == U_PF_ANDROID
# define U_TIMEZONE timezone
+#elif defined(__UCLIBC__)
+ // uClibc does not have __timezone or _timezone.
+#elif defined(_NEWLIB_VERSION)
+# define U_TIMEZONE _timezone
+#elif defined(__GLIBC__)
+ // glibc
+# define U_TIMEZONE __timezone
#elif U_PLATFORM_IS_LINUX_BASED
-# if defined(__UCLIBC__)
- /* uClibc does not have __timezone or _timezone. */
-# elif defined(_NEWLIB_VERSION)
-# define U_TIMEZONE _timezone
-# elif defined(__GLIBC__)
- /* glibc */
-# define U_TIMEZONE __timezone
-# endif
+ // not defined
#elif U_PLATFORM_USES_ONLY_WIN32_API
# define U_TIMEZONE _timezone
#elif U_PLATFORM == U_PF_BSD && !defined(__NetBSD__)
@@ -141,7 +135,10 @@
#ifdef U_TZNAME
/* Use the predefined value. */
#elif U_PLATFORM_USES_ONLY_WIN32_API
+ /* not usable on all windows platforms */
+#if U_PLATFORM_HAS_WINUWP_API == 0
# define U_TZNAME _tzname
+#endif
#elif U_PLATFORM == U_PF_OS400
/* not defined */
#else
@@ -208,7 +205,7 @@
/**
* \def U_HAVE_STD_ATOMICS
* Defines whether the standard C++11 <atomic> is available.
- * ICU will use this when avialable,
+ * ICU will use this when available,
* otherwise will fall back to compiler or platform specific alternatives.
* @internal
*/
@@ -233,7 +230,7 @@
/**
* \def U_HAVE_CLANG_ATOMICS
- * Defines whether Clang c11 style built-in atomics are avaialable.
+ * Defines whether Clang c11 style built-in atomics are available.
* These are used in preference to gcc atomics when both are available.
*/
#ifdef U_HAVE_CLANG_ATOMICS
@@ -271,7 +268,7 @@
/**
* Platform utilities isolates the platform dependencies of the
- * libarary. For each platform which this code is ported to, these
+ * library. For each platform which this code is ported to, these
* functions may have to be re-implemented.
*/
@@ -419,7 +416,7 @@
/**
* Please use uloc_getDefault() instead.
- * Return the default locale ID string by querying ths system, or
+ * Return the default locale ID string by querying the system, or
* 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.
Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbi.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbi.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbi.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
***************************************************************************
@@ -7,7 +7,7 @@
***************************************************************************
*/
//
-// file: rbbi.c Contains the implementation of the rule based break iterator
+// file: rbbi.cpp Contains the implementation of the rule based break iterator
// runtime engine and the API implementation for
// class RuleBasedBreakIterator
//
@@ -21,19 +21,20 @@
#include "unicode/rbbi.h"
#include "unicode/schriter.h"
#include "unicode/uchriter.h"
+#include "unicode/uclean.h"
#include "unicode/udata.h"
-#include "unicode/uclean.h"
+
+#include "brkeng.h"
+#include "ucln_cmn.h"
+#include "cmemory.h"
+#include "cstring.h"
#include "rbbidata.h"
+#include "rbbi_cache.h"
#include "rbbirb.h"
-#include "cmemory.h"
-#include "cstring.h"
+#include "uassert.h"
#include "umutex.h"
-#include "ucln_cmn.h"
-#include "brkeng.h"
+#include "uvectr32.h"
-#include "uassert.h"
-#include "uvector.h"
-
// if U_LOCAL_SERVICE_HOOK is defined, then localsvc.cpp is expected to be included.
#if U_LOCAL_SERVICE_HOOK
#include "localsvc.h"
@@ -40,16 +41,16 @@
#endif
#ifdef RBBI_DEBUG
-static UBool fTrace = FALSE;
+static UBool gTrace = FALSE;
#endif
U_NAMESPACE_BEGIN
// The state number of the starting state
-#define START_STATE 1
+constexpr int32_t START_STATE = 1;
// The state-transition value indicating "stop"
-#define STOP_STATE 0
+constexpr int32_t STOP_STATE = 0;
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RuleBasedBreakIterator)
@@ -63,9 +64,8 @@
* Constructs a RuleBasedBreakIterator that uses the already-created
* tables object that is passed in as a parameter.
*/
-RuleBasedBreakIterator::RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status)
-{
- init();
+RuleBasedBreakIterator::RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status) {
+ init(status);
fData = new RBBIDataWrapper(data, status); // status checked in constructor
if (U_FAILURE(status)) {return;}
if(fData == 0) {
@@ -81,7 +81,7 @@
RuleBasedBreakIterator::RuleBasedBreakIterator(const uint8_t *compiledRules,
uint32_t ruleLength,
UErrorCode &status) {
- init();
+ init(status);
if (U_FAILURE(status)) {
return;
}
@@ -94,13 +94,13 @@
status = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
- fData = new RBBIDataWrapper(data, RBBIDataWrapper::kDontAdopt, status);
+ fData = new RBBIDataWrapper(data, RBBIDataWrapper::kDontAdopt, status);
if (U_FAILURE(status)) {return;}
if(fData == 0) {
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
-}
+}
//-------------------------------------------------------------------------------
@@ -111,7 +111,7 @@
//-------------------------------------------------------------------------------
RuleBasedBreakIterator::RuleBasedBreakIterator(UDataMemory* udm, UErrorCode &status)
{
- init();
+ init(status);
fData = new RBBIDataWrapper(udm, status); // status checked in constructor
if (U_FAILURE(status)) {return;}
if(fData == 0) {
@@ -131,7 +131,7 @@
UParseError &parseError,
UErrorCode &status)
{
- init();
+ init(status);
if (U_FAILURE(status)) {return;}
RuleBasedBreakIterator *bi = (RuleBasedBreakIterator *)
RBBIRuleBuilder::createRuleBasedBreakIterator(rules, &parseError, status);
@@ -153,7 +153,8 @@
// of rules.
//-------------------------------------------------------------------------------
RuleBasedBreakIterator::RuleBasedBreakIterator() {
- init();
+ UErrorCode status = U_ZERO_ERROR;
+ init(status);
}
@@ -166,7 +167,8 @@
RuleBasedBreakIterator::RuleBasedBreakIterator(const RuleBasedBreakIterator& other)
: BreakIterator(other)
{
- this->init();
+ UErrorCode status = U_ZERO_ERROR;
+ this->init(status);
*this = other;
}
@@ -181,10 +183,10 @@
}
fCharIter = NULL;
delete fSCharIter;
- fCharIter = NULL;
+ fSCharIter = NULL;
delete fDCharIter;
fDCharIter = NULL;
-
+
utext_close(fText);
if (fData != NULL) {
@@ -191,18 +193,17 @@
fData->removeReference();
fData = NULL;
}
- if (fCachedBreakPositions) {
- uprv_free(fCachedBreakPositions);
- fCachedBreakPositions = NULL;
- }
- if (fLanguageBreakEngines) {
- delete fLanguageBreakEngines;
- fLanguageBreakEngines = NULL;
- }
- if (fUnhandledBreakEngine) {
- delete fUnhandledBreakEngine;
- fUnhandledBreakEngine = NULL;
- }
+ delete fBreakCache;
+ fBreakCache = NULL;
+
+ delete fDictionaryCache;
+ fDictionaryCache = NULL;
+
+ delete fLanguageBreakEngines;
+ fLanguageBreakEngines = NULL;
+
+ delete fUnhandledBreakEngine;
+ fUnhandledBreakEngine = NULL;
}
/**
@@ -214,7 +215,8 @@
if (this == &that) {
return *this;
}
- reset(); // Delete break cache information
+ BreakIterator::operator=(that);
+
fBreakType = that.fBreakType;
if (fLanguageBreakEngines != NULL) {
delete fLanguageBreakEngines;
@@ -244,6 +246,17 @@
fData = that.fData->addReference();
}
+ fPosition = that.fPosition;
+ fRuleStatusIndex = that.fRuleStatusIndex;
+ fDone = that.fDone;
+
+ // TODO: both the dictionary and the main cache need to be copied.
+ // Current position could be within a dictionary range. Trying to continue
+ // the iteration without the caches present would go to the rules, with
+ // the assumption that the current position is on a rule boundary.
+ fBreakCache->reset(fPosition, fRuleStatusIndex);
+ fDictionaryCache->reset();
+
return *this;
}
@@ -255,15 +268,15 @@
// Initializes all fields, leaving the object in a consistent state.
//
//-----------------------------------------------------------------------------
-void RuleBasedBreakIterator::init() {
- UErrorCode status = U_ZERO_ERROR;
- fText = utext_openUChars(NULL, NULL, 0, &status);
+void RuleBasedBreakIterator::init(UErrorCode &status) {
+ fText = NULL;
fCharIter = NULL;
fSCharIter = NULL;
fDCharIter = NULL;
fData = NULL;
- fLastRuleStatusIndex = 0;
- fLastStatusIndexValid = TRUE;
+ fPosition = 0;
+ fRuleStatusIndex = 0;
+ fDone = false;
fDictionaryCharCount = 0;
fBreakType = UBRK_WORD; // Defaulting BreakType to word gives reasonable
// dictionary behavior for Break Iterators that are
@@ -270,18 +283,28 @@
// built from rules. Even better would be the ability to
// declare the type in the rules.
- fCachedBreakPositions = NULL;
- fLanguageBreakEngines = NULL;
- fUnhandledBreakEngine = NULL;
- fNumCachedBreakPositions = 0;
- fPositionInCache = 0;
+ fLanguageBreakEngines = NULL;
+ fUnhandledBreakEngine = NULL;
+ fBreakCache = NULL;
+ fDictionaryCache = NULL;
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ fText = utext_openUChars(NULL, NULL, 0, &status);
+ fDictionaryCache = new DictionaryCache(this, status);
+ fBreakCache = new BreakCache(this, status);
+ if (U_SUCCESS(status) && (fText == NULL || fDictionaryCache == NULL || fBreakCache == NULL)) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ }
+
#ifdef RBBI_DEBUG
static UBool debugInitDone = FALSE;
if (debugInitDone == FALSE) {
char *debugEnv = getenv("U_RBBIDEBUG");
if (debugEnv && uprv_strstr(debugEnv, "trace")) {
- fTrace = TRUE;
+ gTrace = TRUE;
}
debugInitDone = TRUE;
}
@@ -311,16 +334,28 @@
if (typeid(*this) != typeid(that)) {
return FALSE;
}
+ if (this == &that) {
+ return TRUE;
+ }
+ // The base class BreakIterator carries no state that participates in equality,
+ // and does not implement an equality function that would otherwise be
+ // checked at this point.
+
const RuleBasedBreakIterator& that2 = (const RuleBasedBreakIterator&) that;
if (!utext_equals(fText, that2.fText)) {
// The two break iterators are operating on different text,
- // or have a different interation position.
+ // or have a different iteration position.
+ // Note that fText's position is always the same as the break iterator's position.
return FALSE;
};
- // TODO: need a check for when in a dictionary region at different offsets.
+ if (!(fPosition == that2.fPosition &&
+ fRuleStatusIndex == that2.fRuleStatusIndex &&
+ fDone == that2.fDone)) {
+ return FALSE;
+ }
if (that2.fData == fData ||
(fData != NULL && that2.fData != NULL && *that2.fData == *fData)) {
@@ -348,7 +383,8 @@
if (U_FAILURE(status)) {
return;
}
- reset();
+ fBreakCache->reset();
+ fDictionaryCache->reset();
fText = utext_clone(fText, ut, FALSE, TRUE, &status);
// Set up a dummy CharacterIterator to be returned if anyone
@@ -377,38 +413,17 @@
UText *RuleBasedBreakIterator::getUText(UText *fillIn, UErrorCode &status) const {
- UText *result = utext_clone(fillIn, fText, FALSE, TRUE, &status);
+ UText *result = utext_clone(fillIn, fText, FALSE, TRUE, &status);
return result;
}
-
-/**
- * Returns the description used to create this iterator
- */
-const UnicodeString&
-RuleBasedBreakIterator::getRules() const {
- if (fData != NULL) {
- return fData->getRuleSourceString();
- } else {
- static const UnicodeString *s;
- if (s == NULL) {
- // TODO: something more elegant here.
- // perhaps API should return the string by value.
- // Note: thread unsafe init & leak are semi-ok, better than
- // what was before. Sould be cleaned up, though.
- s = new UnicodeString;
- }
- return *s;
- }
-}
-
//=======================================================================
// BreakIterator overrides
//=======================================================================
/**
- * Return a CharacterIterator over the text being analyzed.
+ * Return a CharacterIterator over the text being analyzed.
*/
CharacterIterator&
RuleBasedBreakIterator::getText() const {
@@ -422,7 +437,7 @@
*/
void
RuleBasedBreakIterator::adoptText(CharacterIterator* newText) {
- // If we are holding a CharacterIterator adopted from a
+ // If we are holding a CharacterIterator adopted from a
// previous call to this function, delete it now.
if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) {
delete fCharIter;
@@ -430,8 +445,9 @@
fCharIter = newText;
UErrorCode status = U_ZERO_ERROR;
- reset();
- if (newText==NULL || newText->startIndex() != 0) {
+ fBreakCache->reset();
+ fDictionaryCache->reset();
+ if (newText==NULL || newText->startIndex() != 0) {
// startIndex !=0 wants to be an error, but there's no way to report it.
// Make the iterator text be an empty string.
fText = utext_openUChars(fText, NULL, 0, &status);
@@ -449,10 +465,11 @@
void
RuleBasedBreakIterator::setText(const UnicodeString& newText) {
UErrorCode status = U_ZERO_ERROR;
- reset();
+ fBreakCache->reset();
+ fDictionaryCache->reset();
fText = utext_openConstUnicodeString(fText, &newText, &status);
- // Set up a character iterator on the string.
+ // Set up a character iterator on the string.
// Needed in case someone calls getText().
// Can not, unfortunately, do this lazily on the (probably never)
// call to getText(), because getText is const.
@@ -509,13 +526,12 @@
* @return The new iterator position, which is zero.
*/
int32_t RuleBasedBreakIterator::first(void) {
- reset();
- fLastRuleStatusIndex = 0;
- fLastStatusIndexValid = TRUE;
- //if (fText == NULL)
- // return BreakIterator::DONE;
-
- utext_setNativeIndex(fText, 0);
+ UErrorCode status = U_ZERO_ERROR;
+ if (!fBreakCache->seek(0)) {
+ fBreakCache->populateNear(0, status);
+ }
+ fBreakCache->current();
+ U_ASSERT(fPosition == 0);
return 0;
}
@@ -524,17 +540,12 @@
* @return The text's past-the-end offset.
*/
int32_t RuleBasedBreakIterator::last(void) {
- reset();
- if (fText == NULL) {
- fLastRuleStatusIndex = 0;
- fLastStatusIndexValid = TRUE;
- return BreakIterator::DONE;
- }
-
- fLastStatusIndexValid = FALSE;
- int32_t pos = (int32_t)utext_nativeLength(fText);
- utext_setNativeIndex(fText, pos);
- return pos;
+ int32_t endPos = (int32_t)utext_nativeLength(fText);
+ UBool endShouldBeBoundary = isBoundary(endPos); // Has side effect of setting iterator position.
+ (void)endShouldBeBoundary;
+ U_ASSERT(endShouldBeBoundary);
+ U_ASSERT(fPosition == endPos);
+ return endPos;
}
/**
@@ -547,15 +558,18 @@
* the current one.
*/
int32_t RuleBasedBreakIterator::next(int32_t n) {
- int32_t result = current();
- while (n > 0) {
- result = next();
- --n;
+ int32_t result = 0;
+ if (n > 0) {
+ for (; n > 0 && result != UBRK_DONE; --n) {
+ result = next();
+ }
+ } else if (n < 0) {
+ for (; n < 0 && result != UBRK_DONE; ++n) {
+ result = previous();
+ }
+ } else {
+ result = current();
}
- while (n < 0) {
- result = previous();
- ++n;
- }
return result;
}
@@ -564,346 +578,67 @@
* @return The position of the first boundary after this one.
*/
int32_t RuleBasedBreakIterator::next(void) {
- // if we have cached break positions and we're still in the range
- // covered by them, just move one step forward in the cache
- if (fCachedBreakPositions != NULL) {
- if (fPositionInCache < fNumCachedBreakPositions - 1) {
- ++fPositionInCache;
- int32_t pos = fCachedBreakPositions[fPositionInCache];
- utext_setNativeIndex(fText, pos);
- return pos;
- }
- else {
- reset();
- }
- }
-
- int32_t startPos = current();
- fDictionaryCharCount = 0;
- int32_t result = handleNext(fData->fForwardTable);
- if (fDictionaryCharCount > 0) {
- result = checkDictionary(startPos, result, FALSE);
- }
- return result;
+ fBreakCache->next();
+ return fDone ? UBRK_DONE : fPosition;
}
/**
- * Advances the iterator backwards, to the last boundary preceding this one.
- * @return The position of the last boundary position preceding this one.
+ * Move the iterator backwards, to the boundary preceding the current one.
+ *
+ * Starts from the current position within fText.
+ * Starting position need not be on a boundary.
+ *
+ * @return The position of the boundary position immediately preceding the starting position.
*/
int32_t RuleBasedBreakIterator::previous(void) {
- int32_t result;
- int32_t startPos;
-
- // if we have cached break positions and we're still in the range
- // covered by them, just move one step backward in the cache
- if (fCachedBreakPositions != NULL) {
- if (fPositionInCache > 0) {
- --fPositionInCache;
- // If we're at the beginning of the cache, need to reevaluate the
- // rule status
- if (fPositionInCache <= 0) {
- fLastStatusIndexValid = FALSE;
- }
- int32_t pos = fCachedBreakPositions[fPositionInCache];
- utext_setNativeIndex(fText, pos);
- return pos;
- }
- else {
- reset();
- }
- }
-
- // if we're already sitting at the beginning of the text, return DONE
- if (fText == NULL || (startPos = current()) == 0) {
- fLastRuleStatusIndex = 0;
- fLastStatusIndexValid = TRUE;
- return BreakIterator::DONE;
- }
-
- if (fData->fSafeRevTable != NULL || fData->fSafeFwdTable != NULL) {
- result = handlePrevious(fData->fReverseTable);
- if (fDictionaryCharCount > 0) {
- result = checkDictionary(result, startPos, TRUE);
- }
- return result;
- }
-
- // old rule syntax
- // set things up. handlePrevious() will back us up to some valid
- // break position before the current position (we back our internal
- // iterator up one step to prevent handlePrevious() from returning
- // the current position), but not necessarily the last one before
- // where we started
-
- int32_t start = current();
-
- (void)UTEXT_PREVIOUS32(fText);
- int32_t lastResult = handlePrevious(fData->fReverseTable);
- if (lastResult == UBRK_DONE) {
- lastResult = 0;
- utext_setNativeIndex(fText, 0);
- }
- result = lastResult;
- int32_t lastTag = 0;
- UBool breakTagValid = FALSE;
-
- // iterate forward from the known break position until we pass our
- // starting point. The last break position before the starting
- // point is our return value
-
- for (;;) {
- result = next();
- if (result == BreakIterator::DONE || result >= start) {
- break;
- }
- lastResult = result;
- lastTag = fLastRuleStatusIndex;
- breakTagValid = TRUE;
- }
-
- // fLastBreakTag wants to have the value for section of text preceding
- // the result position that we are to return (in lastResult.) If
- // the backwards rules overshot and the above loop had to do two or more
- // next()s to move up to the desired return position, we will have a valid
- // tag value. But, if handlePrevious() took us to exactly the correct result position,
- // we wont have a tag value for that position, which is only set by handleNext().
-
- // Set the current iteration position to be the last break position
- // before where we started, and then return that value.
- utext_setNativeIndex(fText, lastResult);
- fLastRuleStatusIndex = lastTag; // for use by getRuleStatus()
- fLastStatusIndexValid = breakTagValid;
-
- // No need to check the dictionary; it will have been handled by
- // next()
-
- return lastResult;
+ UErrorCode status = U_ZERO_ERROR;
+ fBreakCache->previous(status);
+ return fDone ? UBRK_DONE : fPosition;
}
/**
* Sets the iterator to refer to the first boundary position following
* the specified position.
- * @offset The position from which to begin searching for a break position.
+ * @param startPos The position from which to begin searching for a break position.
* @return The position of the first break after the current position.
*/
-int32_t RuleBasedBreakIterator::following(int32_t offset) {
- // if the offset passed in is already past the end of the text,
- // just return DONE; if it's before the beginning, return the
+int32_t RuleBasedBreakIterator::following(int32_t startPos) {
+ // if the supplied position is before the beginning, return the
// text's starting offset
- if (fText == NULL || offset >= utext_nativeLength(fText)) {
- last();
- return next();
- }
- else if (offset < 0) {
+ if (startPos < 0) {
return first();
}
// Move requested offset to a code point start. It might be on a trail surrogate,
- // or on a trail byte if the input is UTF-8.
- utext_setNativeIndex(fText, offset);
- offset = (int32_t)utext_getNativeIndex(fText);
+ // or on a trail byte if the input is UTF-8. Or it may be beyond the end of the text.
+ utext_setNativeIndex(fText, startPos);
+ startPos = (int32_t)utext_getNativeIndex(fText);
- // if we have cached break positions and offset is in the range
- // covered by them, use them
- // TODO: could use binary search
- // TODO: what if offset is outside range, but break is not?
- if (fCachedBreakPositions != NULL) {
- if (offset >= fCachedBreakPositions[0]
- && offset < fCachedBreakPositions[fNumCachedBreakPositions - 1]) {
- fPositionInCache = 0;
- // We are guaranteed not to leave the array due to range test above
- while (offset >= fCachedBreakPositions[fPositionInCache]) {
- ++fPositionInCache;
- }
- int32_t pos = fCachedBreakPositions[fPositionInCache];
- utext_setNativeIndex(fText, pos);
- return pos;
- }
- else {
- reset();
- }
- }
-
- // Set our internal iteration position (temporarily)
- // to the position passed in. If this is the _beginning_ position,
- // then we can just use next() to get our return value
-
- int32_t result = 0;
-
- if (fData->fSafeRevTable != NULL) {
- // new rule syntax
- utext_setNativeIndex(fText, offset);
- // move forward one codepoint to prepare for moving back to a
- // safe point.
- // this handles offset being between a supplementary character
- // TODO: is this still needed, with move to code point boundary handled above?
- (void)UTEXT_NEXT32(fText);
- // handlePrevious will move most of the time to < 1 boundary away
- handlePrevious(fData->fSafeRevTable);
- int32_t result = next();
- while (result <= offset) {
- result = next();
- }
- return result;
- }
- if (fData->fSafeFwdTable != NULL) {
- // backup plan if forward safe table is not available
- utext_setNativeIndex(fText, offset);
- (void)UTEXT_PREVIOUS32(fText);
- // handle next will give result >= offset
- handleNext(fData->fSafeFwdTable);
- // previous will give result 0 or 1 boundary away from offset,
- // most of the time
- // we have to
- int32_t oldresult = previous();
- while (oldresult > offset) {
- int32_t result = previous();
- if (result <= offset) {
- return oldresult;
- }
- oldresult = result;
- }
- int32_t result = next();
- if (result <= offset) {
- return next();
- }
- return result;
- }
- // otherwise, we have to sync up first. Use handlePrevious() to back
- // up to a known break position before the specified position (if
- // we can determine that the specified position is a break position,
- // we don't back up at all). This may or may not be the last break
- // position at or before our starting position. Advance forward
- // from here until we've passed the starting position. The position
- // we stop on will be the first break position after the specified one.
- // old rule syntax
-
- utext_setNativeIndex(fText, offset);
- if (offset==0 ||
- (offset==1 && utext_getNativeIndex(fText)==0)) {
- return next();
- }
- result = previous();
-
- while (result != BreakIterator::DONE && result <= offset) {
- result = next();
- }
-
- return result;
+ UErrorCode status = U_ZERO_ERROR;
+ fBreakCache->following(startPos, status);
+ return fDone ? UBRK_DONE : fPosition;
}
/**
* Sets the iterator to refer to the last boundary position before the
* specified position.
- * @offset The position to begin searching for a break from.
+ * @param offset The position to begin searching for a break from.
* @return The position of the last boundary before the starting position.
*/
int32_t RuleBasedBreakIterator::preceding(int32_t offset) {
- // if the offset passed in is already past the end of the text,
- // just return DONE; if it's before the beginning, return the
- // text's starting offset
if (fText == NULL || offset > utext_nativeLength(fText)) {
return last();
}
- else if (offset < 0) {
- return first();
- }
// Move requested offset to a code point start. It might be on a trail surrogate,
// or on a trail byte if the input is UTF-8.
+
utext_setNativeIndex(fText, offset);
- offset = (int32_t)utext_getNativeIndex(fText);
+ int32_t adjustedOffset = utext_getNativeIndex(fText);
- // if we have cached break positions and offset is in the range
- // covered by them, use them
- if (fCachedBreakPositions != NULL) {
- // TODO: binary search?
- // TODO: What if offset is outside range, but break is not?
- if (offset > fCachedBreakPositions[0]
- && offset <= fCachedBreakPositions[fNumCachedBreakPositions - 1]) {
- fPositionInCache = 0;
- while (fPositionInCache < fNumCachedBreakPositions
- && offset > fCachedBreakPositions[fPositionInCache])
- ++fPositionInCache;
- --fPositionInCache;
- // If we're at the beginning of the cache, need to reevaluate the
- // rule status
- if (fPositionInCache <= 0) {
- fLastStatusIndexValid = FALSE;
- }
- utext_setNativeIndex(fText, fCachedBreakPositions[fPositionInCache]);
- return fCachedBreakPositions[fPositionInCache];
- }
- else {
- reset();
- }
- }
-
- // if we start by updating the current iteration position to the
- // position specified by the caller, we can just use previous()
- // to carry out this operation
-
- if (fData->fSafeFwdTable != NULL) {
- // new rule syntax
- utext_setNativeIndex(fText, offset);
- int32_t newOffset = (int32_t)UTEXT_GETNATIVEINDEX(fText);
- if (newOffset != offset) {
- // Will come here if specified offset was not a code point boundary AND
- // the underlying implmentation is using UText, which snaps any non-code-point-boundary
- // indices to the containing code point.
- // For breakitereator::preceding only, these non-code-point indices need to be moved
- // up to refer to the following codepoint.
- (void)UTEXT_NEXT32(fText);
- offset = (int32_t)UTEXT_GETNATIVEINDEX(fText);
- }
-
- // TODO: (synwee) would it be better to just check for being in the middle of a surrogate pair,
- // rather than adjusting the position unconditionally?
- // (Change would interact with safe rules.)
- // TODO: change RBBI behavior for off-boundary indices to match that of UText?
- // affects only preceding(), seems cleaner, but is slightly different.
- (void)UTEXT_PREVIOUS32(fText);
- handleNext(fData->fSafeFwdTable);
- int32_t result = (int32_t)UTEXT_GETNATIVEINDEX(fText);
- while (result >= offset) {
- result = previous();
- }
- return result;
- }
- if (fData->fSafeRevTable != NULL) {
- // backup plan if forward safe table is not available
- // TODO: check whether this path can be discarded
- // It's probably OK to say that rules must supply both safe tables
- // if they use safe tables at all. We have certainly never described
- // to anyone how to work with just one safe table.
- utext_setNativeIndex(fText, offset);
- (void)UTEXT_NEXT32(fText);
-
- // handle previous will give result <= offset
- handlePrevious(fData->fSafeRevTable);
-
- // next will give result 0 or 1 boundary away from offset,
- // most of the time
- // we have to
- int32_t oldresult = next();
- while (oldresult < offset) {
- int32_t result = next();
- if (result >= offset) {
- return oldresult;
- }
- oldresult = result;
- }
- int32_t result = previous();
- if (result >= offset) {
- return previous();
- }
- return result;
- }
-
- // old rule syntax
- utext_setNativeIndex(fText, offset);
- return previous();
+ UErrorCode status = U_ZERO_ERROR;
+ fBreakCache->preceding(adjustedOffset, status);
+ return fDone ? UBRK_DONE : fPosition;
}
/**
@@ -910,21 +645,11 @@
* Returns true if the specfied position is a boundary position. As a side
* effect, leaves the iterator pointing to the first boundary position at
* or after "offset".
+ *
* @param offset the offset to check.
* @return True if "offset" is a boundary position.
*/
UBool RuleBasedBreakIterator::isBoundary(int32_t offset) {
- // the beginning index of the iterator is always a boundary position by definition
- if (offset == 0) {
- first(); // For side effects on current position, tag values.
- return TRUE;
- }
-
- if (offset == (int32_t)utext_nativeLength(fText)) {
- last(); // For side effects on current position, tag values.
- return TRUE;
- }
-
// out-of-range indexes are never boundary positions
if (offset < 0) {
first(); // For side effects on current position, tag values.
@@ -931,29 +656,42 @@
return FALSE;
}
- if (offset > utext_nativeLength(fText)) {
- last(); // For side effects on current position, tag values.
+ // Adjust offset to be on a code point boundary and not beyond the end of the text.
+ // Note that isBoundary() is always be false for offsets that are not on code point boundaries.
+ // But we still need the side effect of leaving iteration at the following boundary.
+
+ utext_setNativeIndex(fText, offset);
+ int32_t adjustedOffset = utext_getNativeIndex(fText);
+
+ bool result = false;
+ UErrorCode status = U_ZERO_ERROR;
+ if (fBreakCache->seek(adjustedOffset) || fBreakCache->populateNear(adjustedOffset, status)) {
+ result = (fBreakCache->current() == offset);
+ }
+
+ if (result && adjustedOffset < offset && utext_char32At(fText, offset) == U_SENTINEL) {
+ // Original offset is beyond the end of the text. Return FALSE, it's not a boundary,
+ // but the iteration position remains set to the end of the text, which is a boundary.
return FALSE;
}
-
- // otherwise, we can use following() on the position before the specified
- // one and return true if the position we get back is the one the user
- // specified
- utext_previous32From(fText, offset);
- int32_t backOne = (int32_t)UTEXT_GETNATIVEINDEX(fText);
- UBool result = following(backOne) == offset;
+ if (!result) {
+ // Not on a boundary. isBoundary() must leave iterator on the following boundary.
+ // Cache->seek(), above, left us on the preceding boundary, so advance one.
+ next();
+ }
return result;
}
+
/**
* Returns the current iteration position.
* @return The current iteration position.
*/
int32_t RuleBasedBreakIterator::current(void) const {
- int32_t pos = (int32_t)UTEXT_GETNATIVEINDEX(fText);
- return pos;
+ return fPosition;
}
-
+
+
//=======================================================================
// implementation
//=======================================================================
@@ -1020,43 +758,43 @@
//-----------------------------------------------------------------------------------
//
-// handleNext(stateTable)
-// This method is the actual implementation of the rbbi next() method.
-// This method initializes the state machine to state 1
-// and advances through the text character by character until we reach the end
-// of the text or the state machine transitions to state 0. We update our return
-// value every time the state machine passes through an accepting state.
+// handleNext()
+// Run the state machine to find a boundary
//
//-----------------------------------------------------------------------------------
-int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) {
+int32_t RuleBasedBreakIterator::handleNext() {
int32_t state;
uint16_t category = 0;
RBBIRunMode mode;
-
+
RBBIStateTableRow *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;
-
#ifdef RBBI_DEBUG
- if (fTrace) {
+ if (gTrace) {
RBBIDebugPuts("Handle Next pos char state category");
}
#endif
- // No matter what, handleNext alway correctly sets the break tag value.
- fLastStatusIndexValid = TRUE;
- fLastRuleStatusIndex = 0;
+ // handleNext alway sets the break tag value.
+ // Set the default for it.
+ fRuleStatusIndex = 0;
+ fDictionaryCharCount = 0;
+
// if we're already at the end of the text, return DONE.
- initialPosition = (int32_t)UTEXT_GETNATIVEINDEX(fText);
+ initialPosition = fPosition;
+ UTEXT_SETNATIVEINDEX(fText, initialPosition);
result = initialPosition;
c = UTEXT_NEXT32(fText);
- if (fData == NULL || c==U_SENTINEL) {
- return BreakIterator::DONE;
+ if (c==U_SENTINEL) {
+ fDone = TRUE;
+ return UBRK_DONE;
}
// Set the initial state for the state machine
@@ -1064,8 +802,8 @@
row = (RBBIStateTableRow *)
//(statetable->fTableData + (statetable->fRowLen * state));
(tableData + tableRowLen * state);
-
-
+
+
mode = RBBI_RUN;
if (statetable->fFlags & RBBI_BOF_REQUIRED) {
category = 2;
@@ -1079,7 +817,7 @@
if (c == U_SENTINEL) {
// Reached end of input string.
if (mode == RBBI_END) {
- // We have already run the loop one last time with the
+ // We have already run the loop one last time with the
// character set to the psueudo {eof} value. Now it is time
// to unconditionally bail out.
break;
@@ -1100,10 +838,10 @@
// 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.
//
- UTRIE_GET16(&fData->fTrie, c, category);
+ category = UTRIE2_GET16(fData->fTrie, c);
// Check the dictionary bit in the character's category.
- // Counter is only used by dictionary based iterators (subclasses).
+ // 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.
//
@@ -1115,7 +853,7 @@
}
#ifdef RBBI_DEBUG
- if (fTrace) {
+ if (gTrace) {
RBBIDebugPrintf(" %4ld ", utext_getNativeIndex(fText));
if (0x20<=c && c<0x7f) {
RBBIDebugPrintf("\"%c\" ", c);
@@ -1144,16 +882,16 @@
if (mode != RBBI_START) {
result = (int32_t)UTEXT_GETNATIVEINDEX(fText);
}
- fLastRuleStatusIndex = row->fTagIdx; // Remember the break status (tag) values.
+ fRuleStatusIndex = row->fTagIdx; // Remember the break status (tag) values.
}
int16_t completedRule = row->fAccepting;
if (completedRule > 0) {
- // Lookahead match is completed.
+ // Lookahead match is completed.
int32_t lookaheadResult = lookAheadMatches.getPosition(completedRule);
if (lookaheadResult >= 0) {
- fLastRuleStatusIndex = row->fTagIdx;
- UTEXT_SETNATIVEINDEX(fText, lookaheadResult);
+ fRuleStatusIndex = row->fTagIdx;
+ fPosition = lookaheadResult;
return lookaheadResult;
}
}
@@ -1170,8 +908,8 @@
// longer match is possible, no matter what characters follow.
break;
}
-
- // Advance to the next character.
+
+ // Advance to the next character.
// If this is a beginning-of-input loop iteration, don't advance
// the input position. The next iteration will be processing the
// first real input character.
@@ -1182,8 +920,6 @@
mode = RBBI_RUN;
}
}
-
-
}
// The state machine is done. Check whether it found a match...
@@ -1192,15 +928,16 @@
// (This really indicates a defect in the break rules. They should always match
// at least one character.)
if (result == initialPosition) {
- UTEXT_SETNATIVEINDEX(fText, initialPosition);
- UTEXT_NEXT32(fText);
- result = (int32_t)UTEXT_GETNATIVEINDEX(fText);
+ utext_setNativeIndex(fText, initialPosition);
+ utext_next32(fText);
+ result = (int32_t)utext_getNativeIndex(fText);
+ fRuleStatusIndex = 0;
}
// Leave the iterator at our result position.
- UTEXT_SETNATIVEINDEX(fText, result);
+ fPosition = result;
#ifdef RBBI_DEBUG
- if (fTrace) {
+ if (gTrace) {
RBBIDebugPrintf("result = %d\n\n", result);
}
#endif
@@ -1213,13 +950,11 @@
//
// handlePrevious()
//
-// Iterate backwards, according to the logic of the reverse rules.
-// This version handles the exact style backwards rules.
-//
+// Iterate backwards using the safe reverse rules.
// The logic of this function is very similar to handleNext(), above.
//
//-----------------------------------------------------------------------------------
-int32_t RuleBasedBreakIterator::handlePrevious(const RBBIStateTable *statetable) {
+int32_t RuleBasedBreakIterator::handlePrevious(int32_t fromPosition) {
int32_t state;
uint16_t category = 0;
RBBIRunMode mode;
@@ -1229,19 +964,14 @@
int32_t result = 0;
int32_t initialPosition = 0;
+ const RBBIStateTable *stateTable = fData->fSafeRevTable;
+ UTEXT_SETNATIVEINDEX(fText, fromPosition);
#ifdef RBBI_DEBUG
- if (fTrace) {
+ if (gTrace) {
RBBIDebugPuts("Handle Previous pos char state category");
}
#endif
- // handlePrevious() never gets the rule status.
- // Flag the status as invalid; if the user ever asks for status, we will need
- // to back up, then re-find the break position using handleNext(), which does
- // get the status value.
- fLastStatusIndexValid = FALSE;
- fLastRuleStatusIndex = 0;
-
// if we're already at the start of the text, return DONE.
if (fText == NULL || fData == NULL || UTEXT_GETNATIVEINDEX(fText)==0) {
return BreakIterator::DONE;
@@ -1255,10 +985,10 @@
// Set the initial state for the state machine
state = START_STATE;
row = (RBBIStateTableRow *)
- (statetable->fTableData + (statetable->fRowLen * state));
+ (stateTable->fTableData + (stateTable->fRowLen * state));
category = 3;
mode = RBBI_RUN;
- if (statetable->fFlags & RBBI_BOF_REQUIRED) {
+ if (stateTable->fFlags & RBBI_BOF_REQUIRED) {
category = 2;
mode = RBBI_START;
}
@@ -1270,15 +1000,9 @@
if (c == U_SENTINEL) {
// Reached end of input string.
if (mode == RBBI_END) {
- // We have already run the loop one last time with the
+ // We have already run the loop one last time with the
// character set to the psueudo {eof} value. Now it is time
// to unconditionally bail out.
- if (result == initialPosition) {
- // Ran off start, no match found.
- // move one index one (towards the start, since we are doing a previous())
- UTEXT_SETNATIVEINDEX(fText, initialPosition);
- (void)UTEXT_PREVIOUS32(fText); // TODO: shouldn't be necessary. We're already at beginning. Check.
- }
break;
}
// Run the loop one last time with the fake end-of-input character category.
@@ -1297,22 +1021,13 @@
// 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.
//
- UTRIE_GET16(&fData->fTrie, c, category);
-
- // Check the dictionary bit in the character's category.
- // Counter is only used by dictionary based iterators (subclasses).
- // 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;
- }
+ // And off the dictionary flag bit. For reverse iteration it is not used.
+ category = UTRIE2_GET16(fData->fTrie, c);
+ category &= ~0x4000;
}
#ifdef RBBI_DEBUG
- if (fTrace) {
+ if (gTrace) {
RBBIDebugPrintf(" %4d ", (int32_t)utext_getNativeIndex(fText));
if (0x20<=c && c<0x7f) {
RBBIDebugPrintf("\"%c\" ", c);
@@ -1332,7 +1047,7 @@
U_ASSERT(category<fData->fHeader->fCatCount);
state = row->fNextState[category]; /*Not accessing beyond memory*/
row = (RBBIStateTableRow *)
- (statetable->fTableData + (statetable->fRowLen * state));
+ (stateTable->fTableData + (stateTable->fRowLen * state));
if (row->fAccepting == -1) {
// Match found, common case.
@@ -1341,7 +1056,7 @@
int16_t completedRule = row->fAccepting;
if (completedRule > 0) {
- // Lookahead match is completed.
+ // Lookahead match is completed.
int32_t lookaheadResult = lookAheadMatches.getPosition(completedRule);
if (lookaheadResult >= 0) {
UTEXT_SETNATIVEINDEX(fText, lookaheadResult);
@@ -1362,13 +1077,13 @@
break;
}
- // Move (backwards) to the next character to process.
+ // Move (backwards) to the next character to process.
// If this is a beginning-of-input loop iteration, don't advance
// the input position. The next iteration will be processing the
// first real input character.
if (mode == RBBI_RUN) {
c = UTEXT_PREVIOUS32(fText);
- } else {
+ } else {
if (mode == RBBI_START) {
mode = RBBI_RUN;
}
@@ -1386,10 +1101,8 @@
result = (int32_t)UTEXT_GETNATIVEINDEX(fText);
}
- // Leave the iterator at our result position.
- UTEXT_SETNATIVEINDEX(fText, result);
#ifdef RBBI_DEBUG
- if (fTrace) {
+ if (gTrace) {
RBBIDebugPrintf("result = %d\n\n", result);
}
#endif
@@ -1397,20 +1110,6 @@
}
-void
-RuleBasedBreakIterator::reset()
-{
- if (fCachedBreakPositions) {
- uprv_free(fCachedBreakPositions);
- }
- fCachedBreakPositions = NULL;
- fNumCachedBreakPositions = 0;
- fDictionaryCharCount = 0;
- fPositionInCache = 0;
-}
-
-
-
//-------------------------------------------------------------------------------
//
// getRuleStatus() Return the break rule tag associated with the current
@@ -1418,46 +1117,14 @@
// position by iterating forwards, the value will have been
// cached by the handleNext() function.
//
-// If no cached status value is available, the status is
-// found by doing a previous() followed by a next(), which
-// leaves the iterator where it started, and computes the
-// status while doing the next().
-//
//-------------------------------------------------------------------------------
-void RuleBasedBreakIterator::makeRuleStatusValid() {
- if (fLastStatusIndexValid == FALSE) {
- // No cached status is available.
- if (fText == NULL || current() == 0) {
- // At start of text, or there is no text. Status is always zero.
- fLastRuleStatusIndex = 0;
- fLastStatusIndexValid = TRUE;
- } else {
- // Not at start of text. Find status the tedious way.
- int32_t pa = current();
- previous();
- if (fNumCachedBreakPositions > 0) {
- reset(); // Blow off the dictionary cache
- }
- int32_t pb = next();
- if (pa != pb) {
- // note: the if (pa != pb) test is here only to eliminate warnings for
- // unused local variables on gcc. Logically, it isn't needed.
- U_ASSERT(pa == pb);
- }
- }
- }
- U_ASSERT(fLastRuleStatusIndex >= 0 && fLastRuleStatusIndex < fData->fStatusMaxIdx);
-}
-
int32_t RuleBasedBreakIterator::getRuleStatus() const {
- RuleBasedBreakIterator *nonConstThis = (RuleBasedBreakIterator *)this;
- nonConstThis->makeRuleStatusValid();
// fLastRuleStatusIndex indexes to the start of the appropriate status record
// (the number of status values.)
// This function returns the last (largest) of the array of status values.
- int32_t idx = fLastRuleStatusIndex + fData->fRuleStatusTable[fLastRuleStatusIndex];
+ int32_t idx = fRuleStatusIndex + fData->fRuleStatusTable[fRuleStatusIndex];
int32_t tagVal = fData->fRuleStatusTable[idx];
return tagVal;
@@ -1464,18 +1131,13 @@
}
-
-
int32_t RuleBasedBreakIterator::getRuleStatusVec(
- int32_t *fillInVec, int32_t capacity, UErrorCode &status)
-{
+ int32_t *fillInVec, int32_t capacity, UErrorCode &status) {
if (U_FAILURE(status)) {
return 0;
}
- RuleBasedBreakIterator *nonConstThis = (RuleBasedBreakIterator *)this;
- nonConstThis->makeRuleStatusValid();
- int32_t numVals = fData->fRuleStatusTable[fLastRuleStatusIndex];
+ int32_t numVals = fData->fRuleStatusTable[fRuleStatusIndex];
int32_t numValsToCopy = numVals;
if (numVals > capacity) {
status = U_BUFFER_OVERFLOW_ERROR;
@@ -1483,7 +1145,7 @@
}
int i;
for (i=0; i<numValsToCopy; i++) {
- fillInVec[i] = fData->fRuleStatusTable[fLastRuleStatusIndex + i + 1];
+ fillInVec[i] = fData->fRuleStatusTable[fRuleStatusIndex + i + 1];
}
return numVals;
}
@@ -1531,205 +1193,25 @@
return (RuleBasedBreakIterator *)clonedBI;
}
-
-//-------------------------------------------------------------------------------
-//
-// isDictionaryChar Return true if the category lookup for this char
-// indicates that it is in the set of dictionary lookup
-// chars.
-//
-// This function is intended for use by dictionary based
-// break iterators.
-//
-//-------------------------------------------------------------------------------
-/*UBool RuleBasedBreakIterator::isDictionaryChar(UChar32 c) {
- if (fData == NULL) {
- return FALSE;
- }
- uint16_t category;
- UTRIE_GET16(&fData->fTrie, c, category);
- return (category & 0x4000) != 0;
-}*/
-
-
-//-------------------------------------------------------------------------------
-//
-// checkDictionary This function handles all processing of characters in
-// the "dictionary" set. It will determine the appropriate
-// course of action, and possibly set up a cache in the
-// process.
-//
-//-------------------------------------------------------------------------------
-int32_t RuleBasedBreakIterator::checkDictionary(int32_t startPos,
- int32_t endPos,
- UBool reverse) {
- // Reset the old break cache first.
- reset();
-
- // note: code segment below assumes that dictionary chars are in the
- // startPos-endPos range
- // value returned should be next character in sequence
- if ((endPos - startPos) <= 1) {
- return (reverse ? startPos : endPos);
- }
-
- // Starting from the starting point, scan towards the proposed result,
- // looking for the first dictionary character (which may be the one
- // we're on, if we're starting in the middle of a range).
- utext_setNativeIndex(fText, reverse ? endPos : startPos);
- if (reverse) {
- UTEXT_PREVIOUS32(fText);
- }
-
- int32_t rangeStart = startPos;
- int32_t rangeEnd = endPos;
-
- uint16_t category;
- int32_t current;
- UErrorCode status = U_ZERO_ERROR;
- UStack breaks(status);
- int32_t foundBreakCount = 0;
- UChar32 c = utext_current32(fText);
-
- UTRIE_GET16(&fData->fTrie, c, category);
-
- // Is the character we're starting on a dictionary character? If so, we
- // need to back up to include the entire run; otherwise the results of
- // the break algorithm will differ depending on where we start. Since
- // the result is cached and there is typically a non-dictionary break
- // within a small number of words, there should be little performance impact.
- if (category & 0x4000) {
- if (reverse) {
- do {
- utext_next32(fText); // TODO: recast to work directly with postincrement.
- c = utext_current32(fText);
- UTRIE_GET16(&fData->fTrie, c, category);
- } while (c != U_SENTINEL && (category & 0x4000));
- // Back up to the last dictionary character
- rangeEnd = (int32_t)UTEXT_GETNATIVEINDEX(fText);
- if (c == U_SENTINEL) {
- // c = fText->last32();
- // TODO: why was this if needed?
- c = UTEXT_PREVIOUS32(fText);
- }
- else {
- c = UTEXT_PREVIOUS32(fText);
- }
- }
- else {
- do {
- c = UTEXT_PREVIOUS32(fText);
- UTRIE_GET16(&fData->fTrie, c, category);
- }
- while (c != U_SENTINEL && (category & 0x4000));
- // Back up to the last dictionary character
- if (c == U_SENTINEL) {
- // c = fText->first32();
- c = utext_current32(fText);
- }
- else {
- utext_next32(fText);
- c = utext_current32(fText);
- }
- rangeStart = (int32_t)UTEXT_GETNATIVEINDEX(fText);;
- }
- UTRIE_GET16(&fData->fTrie, c, category);
- }
-
- // Loop through the text, looking for ranges of dictionary characters.
- // For each span, find the appropriate break engine, and ask it to find
- // any breaks within the span.
- // Note: we always do this in the forward direction, so that the break
- // cache is built in the right order.
- if (reverse) {
- utext_setNativeIndex(fText, rangeStart);
- c = utext_current32(fText);
- UTRIE_GET16(&fData->fTrie, c, category);
- }
- while(U_SUCCESS(status)) {
- while((current = (int32_t)UTEXT_GETNATIVEINDEX(fText)) < rangeEnd && (category & 0x4000) == 0) {
- utext_next32(fText); // TODO: tweak for post-increment operation
- c = utext_current32(fText);
- UTRIE_GET16(&fData->fTrie, c, category);
- }
- if (current >= rangeEnd) {
- break;
- }
-
- // We now have a dictionary character. Get the appropriate language object
- // to deal with it.
- const LanguageBreakEngine *lbe = getLanguageBreakEngine(c);
-
- // Ask the language object if there are any breaks. It will leave the text
- // pointer on the other side of its range, ready to search for the next one.
- if (lbe != NULL) {
- foundBreakCount += lbe->findBreaks(fText, rangeStart, rangeEnd, FALSE, fBreakType, breaks);
- }
-
- // Reload the loop variables for the next go-round
- c = utext_current32(fText);
- UTRIE_GET16(&fData->fTrie, c, category);
- }
-
- // If we found breaks, build a new break cache. The first and last entries must
- // be the original starting and ending position.
- if (foundBreakCount > 0) {
- U_ASSERT(foundBreakCount == breaks.size());
- int32_t totalBreaks = foundBreakCount;
- if (startPos < breaks.elementAti(0)) {
- totalBreaks += 1;
- }
- if (endPos > breaks.peeki()) {
- totalBreaks += 1;
- }
- fCachedBreakPositions = (int32_t *)uprv_malloc(totalBreaks * sizeof(int32_t));
- if (fCachedBreakPositions != NULL) {
- int32_t out = 0;
- fNumCachedBreakPositions = totalBreaks;
- if (startPos < breaks.elementAti(0)) {
- fCachedBreakPositions[out++] = startPos;
- }
- for (int32_t i = 0; i < foundBreakCount; ++i) {
- fCachedBreakPositions[out++] = breaks.elementAti(i);
- }
- if (endPos > fCachedBreakPositions[out-1]) {
- fCachedBreakPositions[out] = endPos;
- }
- // If there are breaks, then by definition, we are replacing the original
- // proposed break by one of the breaks we found. Use following() and
- // preceding() to do the work. They should never recurse in this case.
- if (reverse) {
- return preceding(endPos);
- }
- else {
- return following(startPos);
- }
- }
- // If the allocation failed, just fall through to the "no breaks found" case.
- }
-
- // If we get here, there were no language-based breaks. Set the text pointer
- // to the original proposed break.
- utext_setNativeIndex(fText, reverse ? startPos : endPos);
- return (reverse ? startPos : endPos);
-}
-
U_NAMESPACE_END
-static icu::UStack *gLanguageBreakFactories = NULL;
+static icu::UStack *gLanguageBreakFactories = nullptr;
+static const icu::UnicodeString *gEmptyString = nullptr;
static icu::UInitOnce gLanguageBreakFactoriesInitOnce = U_INITONCE_INITIALIZER;
+static icu::UInitOnce gRBBIInitOnce = U_INITONCE_INITIALIZER;
/**
- * Release all static memory held by breakiterator.
+ * Release all static memory held by breakiterator.
*/
U_CDECL_BEGIN
-static UBool U_CALLCONV breakiterator_cleanup_dict(void) {
- if (gLanguageBreakFactories) {
- delete gLanguageBreakFactories;
- gLanguageBreakFactories = NULL;
- }
+static UBool U_CALLCONV rbbi_cleanup(void) {
+ delete gLanguageBreakFactories;
+ gLanguageBreakFactories = nullptr;
+ delete gEmptyString;
+ gEmptyString = nullptr;
gLanguageBreakFactoriesInitOnce.reset();
+ gRBBIInitOnce.reset();
return TRUE;
}
U_CDECL_END
@@ -1741,6 +1223,11 @@
U_CDECL_END
U_NAMESPACE_BEGIN
+static void U_CALLCONV rbbiInit() {
+ gEmptyString = new UnicodeString();
+ ucln_common_registerCleanup(UCLN_COMMON_RBBI, rbbi_cleanup);
+}
+
static void U_CALLCONV initLanguageFactories() {
UErrorCode status = U_ZERO_ERROR;
U_ASSERT(gLanguageBreakFactories == NULL);
@@ -1755,7 +1242,7 @@
}
#endif
}
- ucln_common_registerCleanup(UCLN_COMMON_BREAKITERATOR_DICT, breakiterator_cleanup_dict);
+ ucln_common_registerCleanup(UCLN_COMMON_RBBI, rbbi_cleanup);
}
@@ -1766,7 +1253,7 @@
if (gLanguageBreakFactories == NULL) {
return NULL;
}
-
+
int32_t i = gLanguageBreakFactories->size();
const LanguageBreakEngine *lbe = NULL;
while (--i >= 0) {
@@ -1790,7 +1277,7 @@
RuleBasedBreakIterator::getLanguageBreakEngine(UChar32 c) {
const LanguageBreakEngine *lbe = NULL;
UErrorCode status = U_ZERO_ERROR;
-
+
if (fLanguageBreakEngines == NULL) {
fLanguageBreakEngines = new UStack(status);
if (fLanguageBreakEngines == NULL || U_FAILURE(status)) {
@@ -1799,7 +1286,7 @@
return NULL;
}
}
-
+
int32_t i = fLanguageBreakEngines->size();
while (--i >= 0) {
lbe = (const LanguageBreakEngine *)(fLanguageBreakEngines->elementAt(i));
@@ -1807,11 +1294,11 @@
return lbe;
}
}
-
+
// No existing dictionary took the character. See if a factory wants to
// give us a new LanguageBreakEngine for this character.
lbe = getLanguageBreakEngineFromFactory(c, fBreakType);
-
+
// If we got one, use it and push it on our stack.
if (lbe != NULL) {
fLanguageBreakEngines->push((void *)lbe, status);
@@ -1819,7 +1306,7 @@
// return it even if the push fails.
return lbe;
}
-
+
// No engine is forthcoming for this character. Add it to the
// reject set. Create the reject break engine if needed.
if (fUnhandledBreakEngine == NULL) {
@@ -1837,11 +1324,11 @@
return NULL;
}
}
-
+
// Tell the reject engine about the character; at its discretion, it may
// add more than just the one character.
fUnhandledBreakEngine->handleCharacter(c, fBreakType);
-
+
return fUnhandledBreakEngine;
}
@@ -1853,9 +1340,26 @@
void RuleBasedBreakIterator::setBreakType(int32_t type) {
fBreakType = type;
- reset();
}
+void RuleBasedBreakIterator::dumpCache() {
+ fBreakCache->dumpCache();
+}
+
+/**
+ * Returns the description used to create this iterator
+ */
+
+const UnicodeString&
+RuleBasedBreakIterator::getRules() const {
+ if (fData != NULL) {
+ return fData->getRuleSourceString();
+ } else {
+ umtx_initOnce(gRBBIInitOnce, &rbbiInit);
+ return *gEmptyString;
+ }
+}
+
U_NAMESPACE_END
#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
Added: trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,630 @@
+// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+// file: rbbi_cache.cpp
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_BREAK_ITERATION
+
+#include "unicode/ubrk.h"
+#include "unicode/rbbi.h"
+
+#include "rbbi_cache.h"
+
+#include "brkeng.h"
+#include "cmemory.h"
+#include "rbbidata.h"
+#include "rbbirb.h"
+#include "uassert.h"
+#include "uvectr32.h"
+
+U_NAMESPACE_BEGIN
+
+/*
+ * DictionaryCache implementation
+ */
+
+RuleBasedBreakIterator::DictionaryCache::DictionaryCache(RuleBasedBreakIterator *bi, UErrorCode &status) :
+ fBI(bi), fBreaks(NULL), fPositionInCache(-1),
+ fStart(0), fLimit(0), fFirstRuleStatusIndex(0), fOtherRuleStatusIndex(0) {
+ fBreaks = new UVector32(status);
+}
+
+RuleBasedBreakIterator::DictionaryCache::~DictionaryCache() {
+ delete fBreaks;
+ fBreaks = NULL;
+}
+
+void RuleBasedBreakIterator::DictionaryCache::reset() {
+ fPositionInCache = -1;
+ fStart = 0;
+ fLimit = 0;
+ fFirstRuleStatusIndex = 0;
+ fOtherRuleStatusIndex = 0;
+ fBreaks->removeAllElements();
+}
+
+UBool RuleBasedBreakIterator::DictionaryCache::following(int32_t fromPos, int32_t *result, int32_t *statusIndex) {
+ if (fromPos >= fLimit || fromPos < fStart) {
+ fPositionInCache = -1;
+ return FALSE;
+ }
+
+ // Sequential iteration, move from previous boundary to the following
+
+ int32_t r = 0;
+ if (fPositionInCache >= 0 && fPositionInCache < fBreaks->size() && fBreaks->elementAti(fPositionInCache) == fromPos) {
+ ++fPositionInCache;
+ if (fPositionInCache >= fBreaks->size()) {
+ fPositionInCache = -1;
+ return FALSE;
+ }
+ r = fBreaks->elementAti(fPositionInCache);
+ U_ASSERT(r > fromPos);
+ *result = r;
+ *statusIndex = fOtherRuleStatusIndex;
+ return TRUE;
+ }
+
+ // Random indexing. Linear search for the boundary following the given position.
+
+ for (fPositionInCache = 0; fPositionInCache < fBreaks->size(); ++fPositionInCache) {
+ r= fBreaks->elementAti(fPositionInCache);
+ if (r > fromPos) {
+ *result = r;
+ *statusIndex = fOtherRuleStatusIndex;
+ return TRUE;
+ }
+ }
+ U_ASSERT(FALSE);
+ fPositionInCache = -1;
+ return FALSE;
+}
+
+
+UBool RuleBasedBreakIterator::DictionaryCache::preceding(int32_t fromPos, int32_t *result, int32_t *statusIndex) {
+ if (fromPos <= fStart || fromPos > fLimit) {
+ fPositionInCache = -1;
+ return FALSE;
+ }
+
+ if (fromPos == fLimit) {
+ fPositionInCache = fBreaks->size() - 1;
+ if (fPositionInCache >= 0) {
+ U_ASSERT(fBreaks->elementAti(fPositionInCache) == fromPos);
+ }
+ }
+
+ int32_t r;
+ if (fPositionInCache > 0 && fPositionInCache < fBreaks->size() && fBreaks->elementAti(fPositionInCache) == fromPos) {
+ --fPositionInCache;
+ r = fBreaks->elementAti(fPositionInCache);
+ U_ASSERT(r < fromPos);
+ *result = r;
+ *statusIndex = ( r== fStart) ? fFirstRuleStatusIndex : fOtherRuleStatusIndex;
+ return TRUE;
+ }
+
+ if (fPositionInCache == 0) {
+ fPositionInCache = -1;
+ return FALSE;
+ }
+
+ for (fPositionInCache = fBreaks->size()-1; fPositionInCache >= 0; --fPositionInCache) {
+ r = fBreaks->elementAti(fPositionInCache);
+ if (r < fromPos) {
+ *result = r;
+ *statusIndex = ( r == fStart) ? fFirstRuleStatusIndex : fOtherRuleStatusIndex;
+ return TRUE;
+ }
+ }
+ U_ASSERT(FALSE);
+ fPositionInCache = -1;
+ return FALSE;
+}
+
+void RuleBasedBreakIterator::DictionaryCache::populateDictionary(int32_t startPos, int32_t endPos,
+ int32_t firstRuleStatus, int32_t otherRuleStatus) {
+ if ((endPos - startPos) <= 1) {
+ return;
+ }
+
+ reset();
+ fFirstRuleStatusIndex = firstRuleStatus;
+ fOtherRuleStatusIndex = otherRuleStatus;
+
+ int32_t rangeStart = startPos;
+ int32_t rangeEnd = endPos;
+
+ uint16_t category;
+ int32_t current;
+ UErrorCode status = U_ZERO_ERROR;
+ int32_t foundBreakCount = 0;
+ UText *text = fBI->fText;
+
+ // Loop through the text, looking for ranges of dictionary characters.
+ // For each span, find the appropriate break engine, and ask it to find
+ // any breaks within the span.
+
+ utext_setNativeIndex(text, rangeStart);
+ UChar32 c = utext_current32(text);
+ category = UTRIE2_GET16(fBI->fData->fTrie, c);
+
+ while(U_SUCCESS(status)) {
+ while((current = (int32_t)UTEXT_GETNATIVEINDEX(text)) < rangeEnd && (category & 0x4000) == 0) {
+ utext_next32(text); // TODO: cleaner loop structure.
+ c = utext_current32(text);
+ category = UTRIE2_GET16(fBI->fData->fTrie, c);
+ }
+ if (current >= rangeEnd) {
+ break;
+ }
+
+ // We now have a dictionary character. Get the appropriate language object
+ // to deal with it.
+ const LanguageBreakEngine *lbe = fBI->getLanguageBreakEngine(c);
+
+ // Ask the language object if there are any breaks. It will add them to the cache and
+ // leave the text pointer on the other side of its range, ready to search for the next one.
+ if (lbe != NULL) {
+ foundBreakCount += lbe->findBreaks(text, rangeStart, rangeEnd, fBI->fBreakType, *fBreaks);
+ }
+
+ // Reload the loop variables for the next go-round
+ c = utext_current32(text);
+ category = UTRIE2_GET16(fBI->fData->fTrie, c);
+ }
+
+ // If we found breaks, ensure that the first and last entries are
+ // the original starting and ending position. And initialize the
+ // cache iteration position to the first entry.
+
+ // printf("foundBreakCount = %d\n", foundBreakCount);
+ if (foundBreakCount > 0) {
+ U_ASSERT(foundBreakCount == fBreaks->size());
+ if (startPos < fBreaks->elementAti(0)) {
+ // The dictionary did not place a boundary at the start of the segment of text.
+ // Add one now. This should not commonly happen, but it would be easy for interactions
+ // of the rules for dictionary segments and the break engine implementations to
+ // inadvertently cause it. Cover it here, just in case.
+ fBreaks->insertElementAt(startPos, 0, status);
+ }
+ if (endPos > fBreaks->peeki()) {
+ fBreaks->push(endPos, status);
+ }
+ fPositionInCache = 0;
+ // Note: Dictionary matching may extend beyond the original limit.
+ fStart = fBreaks->elementAti(0);
+ fLimit = fBreaks->peeki();
+ } else {
+ // there were no language-based breaks, even though the segment contained
+ // dictionary characters. Subsequent attempts to fetch boundaries from the dictionary cache
+ // for this range will fail, and the calling code will fall back to the rule based boundaries.
+ }
+}
+
+
+/*
+ * BreakCache implemetation
+ */
+
+RuleBasedBreakIterator::BreakCache::BreakCache(RuleBasedBreakIterator *bi, UErrorCode &status) :
+ fBI(bi), fSideBuffer(status) {
+ reset();
+}
+
+
+RuleBasedBreakIterator::BreakCache::~BreakCache() {
+}
+
+
+void RuleBasedBreakIterator::BreakCache::reset(int32_t pos, int32_t ruleStatus) {
+ fStartBufIdx = 0;
+ fEndBufIdx = 0;
+ fTextIdx = pos;
+ fBufIdx = 0;
+ fBoundaries[0] = pos;
+ fStatuses[0] = (uint16_t)ruleStatus;
+}
+
+
+int32_t RuleBasedBreakIterator::BreakCache::current() {
+ fBI->fPosition = fTextIdx;
+ fBI->fRuleStatusIndex = fStatuses[fBufIdx];
+ fBI->fDone = FALSE;
+ return fTextIdx;
+}
+
+
+void RuleBasedBreakIterator::BreakCache::following(int32_t startPos, UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return;
+ }
+ if (startPos == fTextIdx || seek(startPos) || populateNear(startPos, status)) {
+ // startPos is in the cache. Do a next() from that position.
+ // TODO: an awkward set of interactions with bi->fDone
+ // seek() does not clear it; it can't because of interactions with populateNear().
+ // next() does not clear it in the fast-path case, where everything matters. Maybe it should.
+ // So clear it here, for the case where seek() succeeded on an iterator that had previously run off the end.
+ fBI->fDone = false;
+ next();
+ }
+ return;
+}
+
+
+void RuleBasedBreakIterator::BreakCache::preceding(int32_t startPos, UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return;
+ }
+ if (startPos == fTextIdx || seek(startPos) || populateNear(startPos, status)) {
+ if (startPos == fTextIdx) {
+ previous(status);
+ } else {
+ // seek() leaves the BreakCache positioned at the preceding boundary
+ // if the requested position is between two bounaries.
+ // current() pushes the BreakCache position out to the BreakIterator itself.
+ U_ASSERT(startPos > fTextIdx);
+ current();
+ }
+ }
+ return;
+}
+
+
+/*
+ * Out-of-line code for BreakCache::next().
+ * Cache does not already contain the boundary
+ */
+void RuleBasedBreakIterator::BreakCache::nextOL() {
+ fBI->fDone = !populateFollowing();
+ fBI->fPosition = fTextIdx;
+ fBI->fRuleStatusIndex = fStatuses[fBufIdx];
+ return;
+}
+
+
+void RuleBasedBreakIterator::BreakCache::previous(UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return;
+ }
+ int32_t initialBufIdx = fBufIdx;
+ if (fBufIdx == fStartBufIdx) {
+ // At start of cache. Prepend to it.
+ populatePreceding(status);
+ } else {
+ // Cache already holds the next boundary
+ fBufIdx = modChunkSize(fBufIdx - 1);
+ fTextIdx = fBoundaries[fBufIdx];
+ }
+ fBI->fDone = (fBufIdx == initialBufIdx);
+ fBI->fPosition = fTextIdx;
+ fBI->fRuleStatusIndex = fStatuses[fBufIdx];
+ return;
+}
+
+
+UBool RuleBasedBreakIterator::BreakCache::seek(int32_t pos) {
+ if (pos < fBoundaries[fStartBufIdx] || pos > fBoundaries[fEndBufIdx]) {
+ return FALSE;
+ }
+ if (pos == fBoundaries[fStartBufIdx]) {
+ // Common case: seek(0), from BreakIterator::first()
+ fBufIdx = fStartBufIdx;
+ fTextIdx = fBoundaries[fBufIdx];
+ return TRUE;
+ }
+ if (pos == fBoundaries[fEndBufIdx]) {
+ fBufIdx = fEndBufIdx;
+ fTextIdx = fBoundaries[fBufIdx];
+ return TRUE;
+ }
+
+ int32_t min = fStartBufIdx;
+ int32_t max = fEndBufIdx;
+ while (min != max) {
+ int32_t probe = (min + max + (min>max ? CACHE_SIZE : 0)) / 2;
+ probe = modChunkSize(probe);
+ if (fBoundaries[probe] > pos) {
+ max = probe;
+ } else {
+ min = modChunkSize(probe + 1);
+ }
+ }
+ U_ASSERT(fBoundaries[max] > pos);
+ fBufIdx = modChunkSize(max - 1);
+ fTextIdx = fBoundaries[fBufIdx];
+ U_ASSERT(fTextIdx <= pos);
+ return TRUE;
+}
+
+
+UBool RuleBasedBreakIterator::BreakCache::populateNear(int32_t position, UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return FALSE;
+ }
+ U_ASSERT(position < fBoundaries[fStartBufIdx] || position > fBoundaries[fEndBufIdx]);
+
+ // Find a boundary somewhere in the vicinity of the requested position.
+ // Depending on the safe rules and the text data, it could be either before, at, or after
+ // the requested position.
+
+
+ // If the requested position is not near already cached positions, clear the existing cache,
+ // find a near-by boundary and begin new cache contents there.
+
+ if ((position < fBoundaries[fStartBufIdx] - 15) || position > (fBoundaries[fEndBufIdx] + 15)) {
+ int32_t aBoundary = 0;
+ int32_t ruleStatusIndex = 0;
+ // TODO: check for position == length of text. Although may still need to back up to get rule status.
+ if (position > 20) {
+ int32_t backupPos = fBI->handlePrevious(position);
+ fBI->fPosition = backupPos;
+ aBoundary = fBI->handleNext(); // Ignore dictionary, just finding a rule based boundary.
+ ruleStatusIndex = fBI->fRuleStatusIndex;
+ }
+ reset(aBoundary, ruleStatusIndex); // Reset cache to hold aBoundary as a single starting point.
+ }
+
+ // Fill in boundaries between existing cache content and the new requested position.
+
+ if (fBoundaries[fEndBufIdx] < position) {
+ // The last position in the cache precedes the requested position.
+ // Add following position(s) to the cache.
+ while (fBoundaries[fEndBufIdx] < position) {
+ if (!populateFollowing()) {
+ U_ASSERT(false);
+ return false;
+ }
+ }
+ fBufIdx = fEndBufIdx; // Set iterator position to the end of the buffer.
+ fTextIdx = fBoundaries[fBufIdx]; // Required because populateFollowing may add extra boundaries.
+ while (fTextIdx > position) { // Move backwards to a position at or preceding the requested pos.
+ previous(status);
+ }
+ return true;
+ }
+
+ if (fBoundaries[fStartBufIdx] > position) {
+ // The first position in the cache is beyond the requested position.
+ // back up more until we get a boundary <= the requested position.
+ while (fBoundaries[fStartBufIdx] > position) {
+ populatePreceding(status);
+ }
+ fBufIdx = fStartBufIdx; // Set iterator position to the start of the buffer.
+ fTextIdx = fBoundaries[fBufIdx]; // Required because populatePreceding may add extra boundaries.
+ while (fTextIdx < position) { // Move forwards to a position at or following the requested pos.
+ next();
+ }
+ if (fTextIdx > position) {
+ // If position is not itself a boundary, the next() loop above will overshoot.
+ // Back up one, leaving cache position at the boundary preceding the requested position.
+ previous(status);
+ }
+ return true;
+ }
+
+ U_ASSERT(fTextIdx == position);
+ return true;
+}
+
+
+
+UBool RuleBasedBreakIterator::BreakCache::populateFollowing() {
+ int32_t fromPosition = fBoundaries[fEndBufIdx];
+ int32_t fromRuleStatusIdx = fStatuses[fEndBufIdx];
+ int32_t pos = 0;
+ int32_t ruleStatusIdx = 0;
+
+ if (fBI->fDictionaryCache->following(fromPosition, &pos, &ruleStatusIdx)) {
+ addFollowing(pos, ruleStatusIdx, UpdateCachePosition);
+ return TRUE;
+ }
+
+ fBI->fPosition = fromPosition;
+ pos = fBI->handleNext();
+ if (pos == UBRK_DONE) {
+ return FALSE;
+ }
+
+ ruleStatusIdx = fBI->fRuleStatusIndex;
+ if (fBI->fDictionaryCharCount > 0) {
+ // The text segment obtained from the rules includes dictionary characters.
+ // Subdivide it, with subdivided results going into the dictionary cache.
+ fBI->fDictionaryCache->populateDictionary(fromPosition, pos, fromRuleStatusIdx, ruleStatusIdx);
+ if (fBI->fDictionaryCache->following(fromPosition, &pos, &ruleStatusIdx)) {
+ addFollowing(pos, ruleStatusIdx, UpdateCachePosition);
+ return TRUE;
+ // TODO: may want to move a sizable chunk of dictionary cache to break cache at this point.
+ // But be careful with interactions with populateNear().
+ }
+ }
+
+ // Rule based segment did not include dictionary characters.
+ // Or, it did contain dictionary chars, but the dictionary segmenter didn't handle them,
+ // meaning that we didn't take the return, above.
+ // Add its end point to the cache.
+ addFollowing(pos, ruleStatusIdx, UpdateCachePosition);
+
+ // Add several non-dictionary boundaries at this point, to optimize straight forward iteration.
+ // (subsequent calls to BreakIterator::next() will take the fast path, getting cached results.
+ //
+ for (int count=0; count<6; ++count) {
+ pos = fBI->handleNext();
+ if (pos == UBRK_DONE || fBI->fDictionaryCharCount > 0) {
+ break;
+ }
+ addFollowing(pos, fBI->fRuleStatusIndex, RetainCachePosition);
+ }
+
+ return TRUE;
+}
+
+
+UBool RuleBasedBreakIterator::BreakCache::populatePreceding(UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return FALSE;
+ }
+
+ int32_t fromPosition = fBoundaries[fStartBufIdx];
+ if (fromPosition == 0) {
+ return FALSE;
+ }
+
+ int32_t position = 0;
+ int32_t positionStatusIdx = 0;
+
+ if (fBI->fDictionaryCache->preceding(fromPosition, &position, &positionStatusIdx)) {
+ addPreceding(position, positionStatusIdx, UpdateCachePosition);
+ return TRUE;
+ }
+
+ int32_t backupPosition = fromPosition;
+
+ // Find a boundary somewhere preceding the first already-cached boundary
+ do {
+ backupPosition = backupPosition - 30;
+ if (backupPosition <= 0) {
+ backupPosition = 0;
+ } else {
+ backupPosition = fBI->handlePrevious(backupPosition);
+ }
+ if (backupPosition == UBRK_DONE || backupPosition == 0) {
+ position = 0;
+ positionStatusIdx = 0;
+ } else {
+ fBI->fPosition = backupPosition; // TODO: pass starting position in a clearer way.
+ position = fBI->handleNext();
+ positionStatusIdx = fBI->fRuleStatusIndex;
+
+ }
+ } while (position >= fromPosition);
+
+ // Find boundaries between the one we just located and the first already-cached boundary
+ // Put them in a side buffer, because we don't yet know where they will fall in the circular cache buffer..
+
+ fSideBuffer.removeAllElements();
+ fSideBuffer.addElement(position, status);
+ fSideBuffer.addElement(positionStatusIdx, status);
+
+ do {
+ int32_t prevPosition = fBI->fPosition = position;
+ int32_t prevStatusIdx = positionStatusIdx;
+ position = fBI->handleNext();
+ positionStatusIdx = fBI->fRuleStatusIndex;
+ if (position == UBRK_DONE) {
+ break;
+ }
+
+ UBool segmentHandledByDictionary = FALSE;
+ if (fBI->fDictionaryCharCount != 0) {
+ // Segment from the rules includes dictionary characters.
+ // Subdivide it, with subdivided results going into the dictionary cache.
+ int32_t dictSegEndPosition = position;
+ fBI->fDictionaryCache->populateDictionary(prevPosition, dictSegEndPosition, prevStatusIdx, positionStatusIdx);
+ while (fBI->fDictionaryCache->following(prevPosition, &position, &positionStatusIdx)) {
+ segmentHandledByDictionary = true;
+ U_ASSERT(position > prevPosition);
+ if (position >= fromPosition) {
+ break;
+ }
+ U_ASSERT(position <= dictSegEndPosition);
+ fSideBuffer.addElement(position, status);
+ fSideBuffer.addElement(positionStatusIdx, status);
+ prevPosition = position;
+ }
+ U_ASSERT(position==dictSegEndPosition || position>=fromPosition);
+ }
+
+ if (!segmentHandledByDictionary && position < fromPosition) {
+ fSideBuffer.addElement(position, status);
+ fSideBuffer.addElement(positionStatusIdx, status);
+ }
+ } while (position < fromPosition);
+
+ // Move boundaries from the side buffer to the main circular buffer.
+ UBool success = FALSE;
+ if (!fSideBuffer.isEmpty()) {
+ positionStatusIdx = fSideBuffer.popi();
+ position = fSideBuffer.popi();
+ addPreceding(position, positionStatusIdx, UpdateCachePosition);
+ success = TRUE;
+ }
+
+ while (!fSideBuffer.isEmpty()) {
+ positionStatusIdx = fSideBuffer.popi();
+ position = fSideBuffer.popi();
+ if (!addPreceding(position, positionStatusIdx, RetainCachePosition)) {
+ // No space in circular buffer to hold a new preceding result while
+ // also retaining the current cache (iteration) position.
+ // Bailing out is safe; the cache will refill again if needed.
+ break;
+ }
+ }
+
+ return success;
+}
+
+
+void RuleBasedBreakIterator::BreakCache::addFollowing(int32_t position, int32_t ruleStatusIdx, UpdatePositionValues update) {
+ U_ASSERT(position > fBoundaries[fEndBufIdx]);
+ U_ASSERT(ruleStatusIdx <= UINT16_MAX);
+ int32_t nextIdx = modChunkSize(fEndBufIdx + 1);
+ if (nextIdx == fStartBufIdx) {
+ fStartBufIdx = modChunkSize(fStartBufIdx + 6); // TODO: experiment. Probably revert to 1.
+ }
+ fBoundaries[nextIdx] = position;
+ fStatuses[nextIdx] = ruleStatusIdx;
+ fEndBufIdx = nextIdx;
+ if (update == UpdateCachePosition) {
+ // Set current position to the newly added boundary.
+ fBufIdx = nextIdx;
+ fTextIdx = position;
+ } else {
+ // Retaining the original cache position.
+ // Check if the added boundary wraps around the buffer, and would over-write the original position.
+ // It's the responsibility of callers of this function to not add too many.
+ U_ASSERT(nextIdx != fBufIdx);
+ }
+}
+
+bool RuleBasedBreakIterator::BreakCache::addPreceding(int32_t position, int32_t ruleStatusIdx, UpdatePositionValues update) {
+ U_ASSERT(position < fBoundaries[fStartBufIdx]);
+ U_ASSERT(ruleStatusIdx <= UINT16_MAX);
+ int32_t nextIdx = modChunkSize(fStartBufIdx - 1);
+ if (nextIdx == fEndBufIdx) {
+ if (fBufIdx == fEndBufIdx && update == RetainCachePosition) {
+ // Failure. The insertion of the new boundary would claim the buffer position that is the
+ // current iteration position. And we also want to retain the current iteration position.
+ // (The buffer is already completely full of entries that precede the iteration position.)
+ return false;
+ }
+ fEndBufIdx = modChunkSize(fEndBufIdx - 1);
+ }
+ fBoundaries[nextIdx] = position;
+ fStatuses[nextIdx] = ruleStatusIdx;
+ fStartBufIdx = nextIdx;
+ if (update == UpdateCachePosition) {
+ fBufIdx = nextIdx;
+ fTextIdx = position;
+ }
+ return true;
+}
+
+
+void RuleBasedBreakIterator::BreakCache::dumpCache() {
+#ifdef RBBI_DEBUG
+ RBBIDebugPrintf("fTextIdx:%d fBufIdx:%d\n", fTextIdx, fBufIdx);
+ for (int32_t i=fStartBufIdx; ; i=modChunkSize(i+1)) {
+ RBBIDebugPrintf("%d %d\n", i, fBoundaries[i]);
+ if (i == fEndBufIdx) {
+ break;
+ }
+ }
+#endif
+}
+
+U_NAMESPACE_END
+
+#endif // #if !UCONFIG_NO_BREAK_ITERATION
Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.h (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,203 @@
+// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+// file: rbbi_cache.h
+//
+#ifndef RBBI_CACHE_H
+#define RBBI_CACHE_H
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_BREAK_ITERATION
+
+#include "unicode/rbbi.h"
+#include "unicode/uobject.h"
+
+#include "uvectr32.h"
+
+U_NAMESPACE_BEGIN
+
+/* DictionaryCache stores the boundaries obtained from a run of dictionary characters.
+ * Dictionary boundaries are moved first to this cache, then from here
+ * to the main BreakCache, where they may inter-leave with non-dictionary
+ * boundaries. The public BreakIterator API always fetches directly
+ * from the main BreakCache, not from here.
+ *
+ * In common situations, the number of boundaries in a single dictionary run
+ * should be quite small, it will be terminated by punctuation, spaces,
+ * or any other non-dictionary characters. The main BreakCache may end
+ * up with boundaries from multiple dictionary based runs.
+ *
+ * The boundaries are stored in a simple ArrayList (vector), with the
+ * assumption that they will be accessed sequentially.
+ */
+class RuleBasedBreakIterator::DictionaryCache: public UMemory {
+ public:
+ DictionaryCache(RuleBasedBreakIterator *bi, UErrorCode &status);
+ ~DictionaryCache();
+
+ void reset();
+
+ UBool following(int32_t fromPos, int32_t *pos, int32_t *statusIndex);
+ UBool preceding(int32_t fromPos, int32_t *pos, int32_t *statusIndex);
+
+ /**
+ * Populate the cache with the dictionary based boundaries within a region of text.
+ * @param startPos The start position of a range of text
+ * @param endPos The end position of a range of text
+ * @param firstRuleStatus The rule status index that applies to the break at startPos
+ * @param otherRuleStatus The rule status index that applies to boundaries other than startPos
+ * @internal
+ */
+ void populateDictionary(int32_t startPos, int32_t endPos,
+ int32_t firstRuleStatus, int32_t otherRuleStatus);
+
+
+
+ RuleBasedBreakIterator *fBI;
+
+ UVector32 *fBreaks; // A vector containing the boundaries.
+ int32_t fPositionInCache; // Index in fBreaks of last boundary returned by following()
+ // or preceding(). Optimizes sequential access.
+ int32_t fStart; // Text position of first boundary in cache.
+ int32_t fLimit; // Last boundary in cache. Which is the limit of the
+ // text segment being handled by the dictionary.
+ int32_t fFirstRuleStatusIndex; // Rule status info for first boundary.
+ int32_t fOtherRuleStatusIndex; // Rule status info for 2nd through last boundaries.
+};
+
+
+/*
+ * class BreakCache
+ *
+ * Cache of break boundary positions and rule status values.
+ * Break iterator API functions, next(), previous(), etc., will use cached results
+ * when possible, and otherwise cache new results as they are obtained.
+ *
+ * Uniformly caches both dictionary and rule based (non-dictionary) boundaries.
+ *
+ * The cache is implemented as a single circular buffer.
+ */
+
+/*
+ * size of the circular cache buffer.
+ */
+
+class RuleBasedBreakIterator::BreakCache: public UMemory {
+ public:
+ BreakCache(RuleBasedBreakIterator *bi, UErrorCode &status);
+ virtual ~BreakCache();
+ void reset(int32_t pos = 0, int32_t ruleStatus = 0);
+ void next() { if (fBufIdx == fEndBufIdx) {
+ nextOL();
+ } else {
+ fBufIdx = modChunkSize(fBufIdx + 1);
+ fTextIdx = fBI->fPosition = fBoundaries[fBufIdx];
+ fBI->fRuleStatusIndex = fStatuses[fBufIdx];
+ }
+ };
+
+
+ void nextOL();
+ void previous(UErrorCode &status);
+
+ // Move the iteration state to the position following the startPosition.
+ // Input position must be pinned to the input length.
+ void following(int32_t startPosition, UErrorCode &status);
+
+ void preceding(int32_t startPosition, UErrorCode &status);
+
+ /*
+ * Update the state of the public BreakIterator (fBI) to reflect the
+ * current state of the break iterator cache (this).
+ */
+ int32_t current();
+
+ /**
+ * Add boundaries to the cache near the specified position.
+ * The given position need not be a boundary itself.
+ * The input position must be within the range of the text, and
+ * on a code point boundary.
+ * If the requested position is a break boundary, leave the iteration
+ * position on it.
+ * If the requested position is not a boundary, leave the iteration
+ * position on the preceding boundary and include both the
+ * preceding and following boundaries in the cache.
+ * Additional boundaries, either preceding or following, may be added
+ * to the cache as a side effect.
+ *
+ * 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.
+ * Leave iteration position at the first newly added boundary, or unchanged if no boundary was added.
+ */
+ UBool populateFollowing();
+
+ /**
+ * Add one or more boundaries to the cache preceding the first currently cached boundary.
+ * Leave the iteration position on the first added boundary.
+ * Return false if no boundaries could be added (if at the start of the text.)
+ */
+ UBool populatePreceding(UErrorCode &status);
+
+ enum UpdatePositionValues {
+ RetainCachePosition = 0,
+ UpdateCachePosition = 1
+ };
+
+ /*
+ * Add the boundary following the current position.
+ * The current position can be left as it was, or changed to the newly added boundary,
+ * as specified by the update parameter.
+ */
+ void addFollowing(int32_t position, int32_t ruleStatusIdx, UpdatePositionValues update);
+
+
+ /*
+ * Add the boundary preceding the current position.
+ * The current position can be left as it was, or changed to the newly added boundary,
+ * as specified by the update parameter.
+ */
+ bool addPreceding(int32_t position, int32_t ruleStatusIdx, UpdatePositionValues update);
+
+ /**
+ * Set the cache position to the specified position, or, if the position
+ * falls between to cached boundaries, to the preceding boundary.
+ * 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
+ * the last cached boundary or before the first.
+ */
+ UBool seek(int32_t startPosition);
+
+ void dumpCache();
+
+ private:
+ static inline int32_t modChunkSize(int index) { return index & (CACHE_SIZE - 1); };
+
+ static constexpr int32_t CACHE_SIZE = 128;
+ static_assert((CACHE_SIZE & (CACHE_SIZE-1)) == 0, "CACHE_SIZE must be power of two.");
+
+ RuleBasedBreakIterator *fBI;
+ int32_t fStartBufIdx;
+ int32_t fEndBufIdx; // inclusive
+
+ int32_t fTextIdx;
+ int32_t fBufIdx;
+
+ int32_t fBoundaries[CACHE_SIZE];
+ uint16_t fStatuses[CACHE_SIZE];
+
+ UVector32 fSideBuffer;
+};
+
+U_NAMESPACE_END
+
+#endif // #if !UCONFIG_NO_BREAK_ITERATION
+
+#endif // RBBI_CACHE_H
Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
***************************************************************************
@@ -14,7 +14,7 @@
#include "unicode/utypes.h"
#include "rbbidata.h"
#include "rbbirb.h"
-#include "utrie.h"
+#include "utrie2.h"
#include "udatamem.h"
#include "cmemory.h"
#include "cstring.h"
@@ -23,23 +23,6 @@
#include "uassert.h"
-//-----------------------------------------------------------------------------------
-//
-// Trie access folding function. Copied as-is from properties code in uchar.c
-//
-//-----------------------------------------------------------------------------------
-U_CDECL_BEGIN
-static int32_t U_CALLCONV
-getFoldingOffset(uint32_t data) {
- /* if bit 15 is set, then the folding offset is in bits 14..0 of the 16-bit trie result */
- if(data&0x8000) {
- return (int32_t)(data&0x7fff);
- } else {
- return 0;
- }
-}
-U_CDECL_END
-
U_NAMESPACE_BEGIN
//-----------------------------------------------------------------------------
@@ -71,9 +54,8 @@
dh->info.dataFormat[0] == 0x42 && // dataFormat="Brk "
dh->info.dataFormat[1] == 0x72 &&
dh->info.dataFormat[2] == 0x6b &&
- dh->info.dataFormat[3] == 0x20)
- // Note: info.fFormatVersion is duplicated in the RBBIDataHeader, and is
- // validated when checking that.
+ dh->info.dataFormat[3] == 0x20 &&
+ isDataVersionAcceptable(dh->info.formatVersion))
) {
status = U_INVALID_FORMAT_ERROR;
return;
@@ -84,6 +66,11 @@
fUDataMem = udm;
}
+UBool RBBIDataWrapper::isDataVersionAcceptable(const UVersionInfo version) {
+ return RBBI_DATA_FORMAT_VERSION[0] == version[0];
+}
+
+
//-----------------------------------------------------------------------------
//
// init(). Does most of the work of construction, shared between the
@@ -96,10 +83,11 @@
fReverseTable = NULL;
fSafeFwdTable = NULL;
fSafeRevTable = NULL;
- fRuleSource = NULL;
+ fRuleSource = NULL;
fRuleStatusTable = NULL;
- fUDataMem = NULL;
- fRefCount = 0;
+ fTrie = NULL;
+ fUDataMem = NULL;
+ fRefCount = 0;
fDontFreeData = TRUE;
}
@@ -108,8 +96,7 @@
return;
}
fHeader = data;
- if (fHeader->fMagic != 0xb1a0 || fHeader->fFormatVersion[0] != 3)
- {
+ if (fHeader->fMagic != 0xb1a0 || !isDataVersionAcceptable(fHeader->fFormatVersion)) {
status = U_INVALID_FORMAT_ERROR;
return;
}
@@ -131,17 +118,24 @@
fSafeRevTable = (RBBIStateTable *)((char *)data + fHeader->fSRTable);
}
+ // Rule Compatibility Hacks
+ // If a rule set includes reverse rules but does not explicitly include safe reverse rules,
+ // the reverse rules are to be treated as safe reverse rules.
- utrie_unserialize(&fTrie,
- (uint8_t *)data + fHeader->fTrie,
- fHeader->fTrieLen,
- &status);
+ if (fSafeRevTable == NULL && fReverseTable != NULL) {
+ fSafeRevTable = fReverseTable;
+ fReverseTable = NULL;
+ }
+
+ fTrie = utrie2_openFromSerialized(UTRIE2_16_VALUE_BITS,
+ (uint8_t *)data + fHeader->fTrie,
+ fHeader->fTrieLen,
+ NULL, // *actual length
+ &status);
if (U_FAILURE(status)) {
return;
}
- fTrie.getFoldingOffset=getFoldingOffset;
-
fRuleSource = (UChar *)((char *)data + fHeader->fRuleSource);
fRuleString.setTo(TRUE, fRuleSource, -1);
U_ASSERT(data->fRuleSourceLen > 0);
@@ -165,6 +159,8 @@
//-----------------------------------------------------------------------------
RBBIDataWrapper::~RBBIDataWrapper() {
U_ASSERT(fRefCount == 0);
+ utrie2_close(fTrie);
+ fTrie = NULL;
if (fUDataMem) {
udata_close(fUDataMem);
} else if (!fDontFreeData) {
@@ -323,7 +319,7 @@
pInfo->dataFormat[1]==0x72 &&
pInfo->dataFormat[2]==0x6b &&
pInfo->dataFormat[3]==0x20 &&
- pInfo->formatVersion[0]==3 )) {
+ RBBIDataWrapper::isDataVersionAcceptable(pInfo->formatVersion) )) {
udata_printError(ds, "ubrk_swap(): data format %02x.%02x.%02x.%02x (format version %02x) is not recognized\n",
pInfo->dataFormat[0], pInfo->dataFormat[1],
pInfo->dataFormat[2], pInfo->dataFormat[3],
@@ -344,17 +340,11 @@
//
// Get the RRBI Data Header, and check that it appears to be OK.
//
- // Note: ICU 3.2 and earlier, RBBIDataHeader::fDataFormat was actually
- // an int32_t with a value of 1. Starting with ICU 3.4,
- // RBBI's fDataFormat matches the dataFormat field from the
- // UDataInfo header, four int8_t bytes. The value is {3,1,0,0}
- //
const uint8_t *inBytes =(const uint8_t *)inData+headerSize;
RBBIDataHeader *rbbiDH = (RBBIDataHeader *)inBytes;
if (ds->readUInt32(rbbiDH->fMagic) != 0xb1a0 ||
- rbbiDH->fFormatVersion[0] != 3 ||
- ds->readUInt32(rbbiDH->fLength) < sizeof(RBBIDataHeader))
- {
+ !RBBIDataWrapper::isDataVersionAcceptable(rbbiDH->fFormatVersion) ||
+ ds->readUInt32(rbbiDH->fLength) < sizeof(RBBIDataHeader)) {
udata_printError(ds, "ubrk_swap(): RBBI Data header is invalid.\n");
*status=U_UNSUPPORTED_ERROR;
return 0;
@@ -451,8 +441,8 @@
}
// Trie table for character categories
- utrie_swap(ds, inBytes+ds->readUInt32(rbbiDH->fTrie), ds->readUInt32(rbbiDH->fTrieLen),
- outBytes+ds->readUInt32(rbbiDH->fTrie), status);
+ 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),
Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -8,7 +8,7 @@
*
*******************************************************************************
* file name: rbbidata.h
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
@@ -51,22 +51,23 @@
#include "unicode/uobject.h"
#include "unicode/unistr.h"
+#include "unicode/uversion.h"
#include "umutex.h"
-#include "utrie.h"
+#include "utrie2.h"
U_NAMESPACE_BEGIN
+// The current RBBI data format version.
+static const uint8_t RBBI_DATA_FORMAT_VERSION[] = {4, 0, 0, 0};
+
/*
* The following structs map exactly onto the raw data from ICU common data file.
*/
struct RBBIDataHeader {
uint32_t fMagic; /* == 0xbla0 */
- uint8_t fFormatVersion[4]; /* Data Format. Same as the value in struct UDataInfo */
+ UVersionInfo fFormatVersion; /* Data Format. Same as the value in struct UDataInfo */
/* if there is one associated with this data. */
/* (version originates in rbbi, is copied to UDataInfo) */
- /* For ICU 3.2 and earlier, this field was */
- /* uint32_t fVersion */
- /* with a value of 1. */
uint32_t fLength; /* Total length in bytes of this RBBI Data, */
/* including all sections, not just the header. */
uint32_t fCatCount; /* Number of character categories. */
@@ -152,6 +153,8 @@
RBBIDataWrapper(UDataMemory* udm, UErrorCode &status);
~RBBIDataWrapper();
+ static UBool isDataVersionAcceptable(const UVersionInfo version);
+
void init0();
void init(const RBBIDataHeader *data, UErrorCode &status);
RBBIDataWrapper *addReference();
@@ -181,11 +184,11 @@
/* number of int32_t values in the rule status table. Used to sanity check indexing */
int32_t fStatusMaxIdx;
- UTrie fTrie;
+ UTrie2 *fTrie;
private:
u_atomic_int32_t fRefCount;
- UDataMemory *fUDataMem;
+ UDataMemory *fUDataMem;
UnicodeString fRuleString;
UBool fDontFreeData;
Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
***************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/********************************************************************
* COPYRIGHT:
Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
//
// file: rbbirb.cpp
@@ -24,16 +24,16 @@
#include "unicode/uchriter.h"
#include "unicode/parsepos.h"
#include "unicode/parseerr.h"
+
#include "cmemory.h"
#include "cstring.h"
-
#include "rbbirb.h"
#include "rbbinode.h"
-
#include "rbbiscan.h"
#include "rbbisetb.h"
#include "rbbitblb.h"
#include "rbbidata.h"
+#include "uassert.h"
U_NAMESPACE_BEGIN
@@ -164,8 +164,13 @@
int32_t statusTableSize = align8(fRuleStatusVals->size() * sizeof(int32_t));
int32_t rulesSize = align8((strippedRules.length()+1) * sizeof(UChar));
- int32_t totalSize = headerSize + forwardTableSize + reverseTableSize
- + safeFwdTableSize + safeRevTableSize
+ (void)safeFwdTableSize;
+
+ int32_t totalSize = headerSize
+ + forwardTableSize
+ + /* reverseTableSize */ 0
+ + /* safeFwdTableSize */ 0
+ + (safeRevTableSize ? safeRevTableSize : reverseTableSize)
+ statusTableSize + trieSize + rulesSize;
RBBIDataHeader *data = (RBBIDataHeader *)uprv_malloc(totalSize);
@@ -177,23 +182,45 @@
data->fMagic = 0xb1a0;
- data->fFormatVersion[0] = 3;
- data->fFormatVersion[1] = 1;
- data->fFormatVersion[2] = 0;
- data->fFormatVersion[3] = 0;
+ data->fFormatVersion[0] = RBBI_DATA_FORMAT_VERSION[0];
+ data->fFormatVersion[1] = RBBI_DATA_FORMAT_VERSION[1];
+ data->fFormatVersion[2] = RBBI_DATA_FORMAT_VERSION[2];
+ data->fFormatVersion[3] = RBBI_DATA_FORMAT_VERSION[3];
data->fLength = totalSize;
data->fCatCount = fSetBuilder->getNumCharCategories();
+ // Only save the forward table and the safe reverse table,
+ // because these are the only ones used at run-time.
+ //
+ // For the moment, we still build the other tables if they are present in the rule source files,
+ // for backwards compatibility. Old rule files need to work, and this is the simplest approach.
+ //
+ // Additional backwards compatibility consideration: if no safe rules are provided, consider the
+ // reverse rules to actually be the safe reverse rules.
+
data->fFTable = headerSize;
data->fFTableLen = forwardTableSize;
+
+ // Do not save Reverse Table.
data->fRTable = data->fFTable + forwardTableSize;
- data->fRTableLen = reverseTableSize;
- data->fSFTable = data->fRTable + reverseTableSize;
- data->fSFTableLen = safeFwdTableSize;
- data->fSRTable = data->fSFTable + safeFwdTableSize;
- data->fSRTableLen = safeRevTableSize;
+ data->fRTableLen = 0;
- data->fTrie = data->fSRTable + safeRevTableSize;
+ // Do not save the Safe Forward table.
+ data->fSFTable = data->fRTable + 0;
+ data->fSFTableLen = 0;
+
+ data->fSRTable = data->fSFTable + 0;
+ if (safeRevTableSize > 0) {
+ data->fSRTableLen = safeRevTableSize;
+ } else if (reverseTableSize > 0) {
+ data->fSRTableLen = reverseTableSize;
+ } else {
+ U_ASSERT(FALSE); // Rule build should have failed for lack of a reverse table
+ // before reaching this point.
+ }
+
+
+ data->fTrie = data->fSRTable + data->fSRTableLen;
data->fTrieLen = fSetBuilder->getTrieSize();
data->fStatusTable = data->fTrie + trieSize;
data->fStatusTableLen= statusTableSize;
@@ -203,9 +230,14 @@
uprv_memset(data->fReserved, 0, sizeof(data->fReserved));
fForwardTables->exportTable((uint8_t *)data + data->fFTable);
- fReverseTables->exportTable((uint8_t *)data + data->fRTable);
- fSafeFwdTables->exportTable((uint8_t *)data + data->fSFTable);
- fSafeRevTables->exportTable((uint8_t *)data + data->fSRTable);
+ // fReverseTables->exportTable((uint8_t *)data + data->fRTable);
+ // fSafeFwdTables->exportTable((uint8_t *)data + data->fSFTable);
+ if (safeRevTableSize > 0) {
+ fSafeRevTables->exportTable((uint8_t *)data + data->fSRTable);
+ } else {
+ fReverseTables->exportTable((uint8_t *)data + data->fSRTable);
+ }
+
fSetBuilder->serializeTrie ((uint8_t *)data + data->fTrie);
int32_t *ruleStatusTable = (int32_t *)((uint8_t *)data + data->fStatusTable);
Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
//
// rbbirb.h
@@ -15,6 +15,9 @@
#define RBBIRB_H
#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_BREAK_ITERATION
+
#include "unicode/uobject.h"
#include "unicode/rbbi.h"
#include "unicode/uniset.h"
@@ -207,6 +210,9 @@
#endif
U_NAMESPACE_END
+
+#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
+
#endif
Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbirpt.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbirpt.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbirpt.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
//---------------------------------------------------------------------------------
//
Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
//
// file: rbbiscan.cpp
@@ -47,6 +47,7 @@
//
//------------------------------------------------------------------------------
static const UChar gRuleSet_rule_char_pattern[] = {
+ // Characters that may appear as literals in patterns without escaping or quoting.
// [ ^ [ \ p { Z } \ u 0 0 2 0
0x5b, 0x5e, 0x5b, 0x5c, 0x70, 0x7b, 0x5a, 0x7d, 0x5c, 0x75, 0x30, 0x30, 0x32, 0x30,
// - \ u 0 0 7 f ] - [ \ p
@@ -558,6 +559,10 @@
fRB->fDefaultTree = &fRB->fSafeRevTree;
} else if (opt == UNICODE_STRING("lookAheadHardBreak", 18)) {
fRB->fLookAheadHardBreak = TRUE;
+ } else if (opt == UNICODE_STRING("quoted_literals_only", 20)) {
+ fRuleSets[kRuleSet_rule_char-128].clear();
+ } else if (opt == UNICODE_STRING("unquoted_literals", 17)) {
+ fRuleSets[kRuleSet_rule_char-128].applyPattern(UnicodeString(gRuleSet_rule_char_pattern), *fRB->fStatus);
} else {
error(U_BRK_UNRECOGNIZED_OPTION);
}
@@ -1179,13 +1184,12 @@
if (U_FAILURE(*fRB->fStatus)) {
return NULL;
}
- fNodeStackPtr++;
- if (fNodeStackPtr >= kStackSize) {
- error(U_BRK_INTERNAL_ERROR);
+ if (fNodeStackPtr >= kStackSize - 1) {
+ error(U_BRK_RULE_SYNTAX);
RBBIDebugPuts("RBBIRuleScanner::pushNewNode - stack overflow.");
- *fRB->fStatus = U_BRK_INTERNAL_ERROR;
return NULL;
}
+ fNodeStackPtr++;
fNodeStack[fNodeStackPtr] = new RBBINode(t);
if (fNodeStack[fNodeStackPtr] == NULL) {
*fRB->fStatus = U_MEMORY_ALLOCATION_ERROR;
Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
//
// rbbiscan.h
Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
//
// rbbisetb.cpp
@@ -35,7 +35,7 @@
#if !UCONFIG_NO_BREAK_ITERATION
#include "unicode/uniset.h"
-#include "utrie.h"
+#include "utrie2.h"
#include "uvector.h"
#include "uassert.h"
#include "cmemory.h"
@@ -44,43 +44,6 @@
#include "rbbisetb.h"
#include "rbbinode.h"
-
-//------------------------------------------------------------------------
-//
-// getFoldedRBBIValue Call-back function used during building of Trie table.
-// Folding value: just store the offset (16 bits)
-// if there is any non-0 entry.
-// (It'd really be nice if the Trie builder would provide a
-// simple default, so this function could go away from here.)
-//
-//------------------------------------------------------------------------
-/* folding value: just store the offset (16 bits) if there is any non-0 entry */
-U_CDECL_BEGIN
-static uint32_t U_CALLCONV
-getFoldedRBBIValue(UNewTrie *trie, UChar32 start, int32_t offset) {
- uint32_t value;
- UChar32 limit;
- UBool inBlockZero;
-
- limit=start+0x400;
- while(start<limit) {
- value=utrie_get32(trie, start, &inBlockZero);
- if(inBlockZero) {
- start+=UTRIE_DATA_BLOCK_LENGTH;
- } else if(value!=0) {
- return (uint32_t)(offset|0x8000);
- } else {
- ++start;
- }
- }
- return 0;
-}
-
-
-U_CDECL_END
-
-
-
U_NAMESPACE_BEGIN
//------------------------------------------------------------------------
@@ -116,7 +79,7 @@
delete r;
}
- utrie_close(fTrie);
+ utrie2_close(fTrie);
}
@@ -287,33 +250,38 @@
// Build the Trie table for mapping UChar32 values to the corresponding
// range group number
//
- fTrie = utrie_open(NULL, // Pre-existing trie to be filled in
- NULL, // Data array (utrie will allocate one)
- 100000, // Max Data Length
- 0, // Initial value for all code points
- 0, // Lead surrogate unit value
- TRUE); // Keep Latin 1 in separately
+ fTrie = utrie2_open(0, // Initial value for all code points.
+ 0, // Error value for out-of-range input.
+ fStatus);
-
- for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) {
- utrie_setRange32(fTrie, rlRange->fStartChar, rlRange->fEndChar+1, rlRange->fNum, TRUE);
+ 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);
}
}
-
//-----------------------------------------------------------------------------------
//
// getTrieSize() Return the size that will be required to serialize the Trie.
//
//-----------------------------------------------------------------------------------
-int32_t RBBISetBuilder::getTrieSize() /*const*/ {
- fTrieSize = utrie_serialize(fTrie,
- NULL, // Buffer
- 0, // Capacity
- getFoldedRBBIValue,
- TRUE, // Reduce to 16 bits
- fStatus);
+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;
+ }
// RBBIDebugPrintf("Trie table size is %d\n", trieSize);
return fTrieSize;
}
@@ -327,12 +295,10 @@
//
//-----------------------------------------------------------------------------------
void RBBISetBuilder::serializeTrie(uint8_t *where) {
- utrie_serialize(fTrie,
- where, // Buffer
- fTrieSize, // Capacity
- getFoldedRBBIValue,
- TRUE, // Reduce to 16 bits
- fStatus);
+ utrie2_serialize(fTrie,
+ where, // Buffer
+ fTrieSize, // Capacity
+ fStatus);
}
//------------------------------------------------------------------------
Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
//
// rbbisetb.h
@@ -13,12 +13,14 @@
#define RBBISETB_H
#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_BREAK_ITERATION
+
#include "unicode/uobject.h"
#include "rbbirb.h"
+#include "utrie2.h"
#include "uvector.h"
-struct UNewTrie;
-
U_NAMESPACE_BEGIN
//
@@ -109,8 +111,8 @@
RangeDescriptor *fRangeList; // Head of the linked list of RangeDescriptors
- UNewTrie *fTrie; // The mapping TRIE that is the end result of processing
- uint32_t fTrieSize; // the Unicode Sets.
+ UTrie2 *fTrie; // The mapping TRIE that is the end result of processing
+ uint32_t fTrieSize; // the Unicode Sets.
// Groups correspond to character categories -
// groups of ranges that are in the same original UnicodeSets.
@@ -129,4 +131,7 @@
U_NAMESPACE_END
+
+#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
+
#endif
Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbistbl.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbistbl.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbistbl.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
//
// file: rbbistbl.cpp Implementation of the ICU RBBISymbolTable class
Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
**********************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
//
// rbbitblb.h
Modified: trunk/Build/source/libs/icu/icu-src/source/common/resbund.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/resbund.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/resbund.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
**********************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/resbund_cnv.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/resbund_cnv.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/resbund_cnv.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
@@ -8,7 +8,7 @@
*
*******************************************************************************
* file name: resbund_cnv.cpp
-* encoding: US-ASCII
+* encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
Modified: trunk/Build/source/libs/icu/icu-src/source/common/resource.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/resource.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/resource.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/resource.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/resource.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/resource.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
**********************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
**********************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/schriter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/schriter.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/schriter.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/serv.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/serv.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/serv.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/**
*******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/serv.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/serv.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/serv.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/**
*******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/servlk.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servlk.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servlk.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/**
*******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/servlkf.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servlkf.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servlkf.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/**
*******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/servloc.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servloc.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servloc.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/**
*******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/servls.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servls.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servls.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/**
*******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/servnotf.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servnotf.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servnotf.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/**
*******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/servnotf.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servnotf.h 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servnotf.h 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/**
*******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/servrbf.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servrbf.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servrbf.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/**
*******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/servslkf.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servslkf.cpp 2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servslkf.cpp 2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/**
*******************************************************************************
Modified: trunk/Build/source/libs/icu/icu-src/source/common/sharedobject.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/sharedobject.cpp 2018-01-12 01:23:08 UTC (rev 46289)
@@ Diff output truncated at 1234567 characters. @@
More information about the tex-live-commits
mailing list