Merge jdk9-b65
authorduke
Wed, 05 Jul 2017 20:33:55 +0200
changeset 30531 4915246064b2
parent 30530 aba5d5e892b2 (diff)
parent 30413 9513d7f112ba (current diff)
child 30532 871626d18474
child 30533 bded950236b3
child 30534 5e259b665bbf
child 30551 3c3444337674
child 30552 ff209a4a81b5
child 30639 d6ec6a7db09c
child 30640 3dba338b5d00
child 30694 aaed6c21c444
child 30696 21563ee87db6
child 30697 85feee7acc91
child 30706 327cc7001310
child 30707 47b636cd6456
child 30710 76bc0159a861
child 30712 6833a5c6781c
child 30713 4a01965154be
Merge
--- a/.hgtags-top-repo	Wed Jul 05 20:32:49 2017 +0200
+++ b/.hgtags-top-repo	Wed Jul 05 20:33:55 2017 +0200
@@ -306,3 +306,4 @@
 ea38728b4f4bdd8fd0d7a89b18069f521cf05013 jdk9-b61
 105d045a69174d870b69bfe471b3f2d05a9f8ecc jdk9-b62
 0b32ed628fa60e4ab99fb0b5866d648e16231f17 jdk9-b63
+82cf9aab9a83e41c8194ba01af9666afdb856cbe jdk9-b64
--- a/common/autoconf/basics.m4	Wed Jul 05 20:32:49 2017 +0200
+++ b/common/autoconf/basics.m4	Wed Jul 05 20:33:55 2017 +0200
@@ -705,9 +705,9 @@
       # is performed.
       filtered_files=`$ECHO "$files_present" \
           | $SED -e 's/config.log//g' \
-	      -e 's/confdefs.h//g' \
-	      -e 's/fixpath.exe//g' \
-	      -e 's/ //g' \
+              -e 's/configure.log//g' \
+              -e 's/confdefs.h//g' \
+              -e 's/ //g' \
           | $TR -d '\n'`
       if test "x$filtered_files" != x; then
         AC_MSG_NOTICE([Current directory is $CURDIR.])
@@ -1054,3 +1054,29 @@
 
   AC_SUBST(BASH_ARGS)
 ])
+
+# Code to run after AC_OUTPUT
+AC_DEFUN_ONCE([BASIC_POST_CONFIG_OUTPUT],
+[
+  # Try to move config.log (generated by autoconf) to the configure-support directory.
+  if test -e ./config.log; then
+    $MV -f ./config.log "$CONFIGURESUPPORT_OUTPUTDIR/config.log" 2> /dev/null
+  fi
+
+  # Rotate our log file (configure.log)
+  if test -e "$OUTPUT_ROOT/configure.log.old"; then
+    $RM -f "$OUTPUT_ROOT/configure.log.old"
+  fi
+  if test -e "$OUTPUT_ROOT/configure.log"; then
+    $MV -f "$OUTPUT_ROOT/configure.log" "$OUTPUT_ROOT/configure.log.old" 2> /dev/null
+  fi
+
+  # Move configure.log from current directory to the build output root
+  if test -e ./configure.log; then
+    echo found it
+    $MV -f ./configure.log "$OUTPUT_ROOT/configure.log" 2> /dev/null
+  fi
+
+  # Make the compare script executable
+  $CHMOD +x $OUTPUT_ROOT/compare.sh
+])
--- a/common/autoconf/configure	Wed Jul 05 20:32:49 2017 +0200
+++ b/common/autoconf/configure	Wed Jul 05 20:33:55 2017 +0200
@@ -255,13 +255,10 @@
   set -x
 fi
 
-if test "x$conf_debug_configure" = xtrue; then
-  # Turn on logging, but don't turn on twice when called recursive
-  conf_debug_logfile=./debug-configure.log
-  (exec 3>&1 ; (. $conf_script_to_run "${conf_processed_arguments[@]}" 2>&1 1>&3 ) | tee -a $conf_debug_logfile 1>&2 ; exec 3>&-) | tee -a $conf_debug_logfile
-else
-  ( . $conf_script_to_run "${conf_processed_arguments[@]}" )
-fi
+# Now transfer control to the script generated by autoconf. This is where the
+# main work is done.
+conf_logfile=./configure.log
+(exec 3>&1 ; (. $conf_script_to_run "${conf_processed_arguments[@]}" 2>&1 1>&3 ) | tee -a $conf_logfile 1>&2 ; exec 3>&-) | tee -a $conf_logfile
 
 conf_result_code=$?
 ###
--- a/common/autoconf/configure.ac	Wed Jul 05 20:32:49 2017 +0200
+++ b/common/autoconf/configure.ac	Wed Jul 05 20:33:55 2017 +0200
@@ -265,15 +265,10 @@
 
 # Create the actual output files. Now the main work of configure is done.
 AC_OUTPUT
+
+# After AC_OUTPUT, we need to do final work
 CUSTOM_CONFIG_OUTPUT_GENERATED_HOOK
-
-# Try to move the config.log file to the output directory.
-if test -e ./config.log; then
-  $MV -f ./config.log "$CONFIGURESUPPORT_OUTPUTDIR/config.log" 2> /dev/null
-fi
-
-# Make the compare script executable
-$CHMOD +x $OUTPUT_ROOT/compare.sh
+BASIC_POST_CONFIG_OUTPUT
 
 # Finally output some useful information to the user
 HELP_PRINT_SUMMARY_AND_WARNINGS
--- a/common/autoconf/flags.m4	Wed Jul 05 20:32:49 2017 +0200
+++ b/common/autoconf/flags.m4	Wed Jul 05 20:33:55 2017 +0200
@@ -231,7 +231,6 @@
 
   AC_SUBST(C_FLAG_REORDER)
   AC_SUBST(CXX_FLAG_REORDER)
-  AC_SUBST(SHARED_LIBRARY_FLAGS)
   AC_SUBST(SET_EXECUTABLE_ORIGIN)
   AC_SUBST(SET_SHARED_LIBRARY_ORIGIN)
   AC_SUBST(SET_SHARED_LIBRARY_NAME)
@@ -524,6 +523,10 @@
   #    CXXFLAGS_JDK  - C++ Compiler flags
   #    COMMON_CCXXFLAGS_JDK - common to C and C++
   if test "x$TOOLCHAIN_TYPE" = xgcc; then
+    if test "x$OPENJDK_TARGET_CPU" = xx86; then
+      # Force compatibility with i586 on 32 bit intel platforms.
+      COMMON_CCXXFLAGS="${COMMON_CCXXFLAGS} -march=i586"
+    fi
     COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -Wall -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \
         -pipe -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE"
     case $OPENJDK_TARGET_CPU_ARCH in
@@ -900,6 +903,24 @@
       [COMPILER_SUPPORTS_TARGET_BITS_FLAG=false])
   AC_SUBST(COMPILER_SUPPORTS_TARGET_BITS_FLAG)
 
+  AC_ARG_ENABLE([warnings-as-errors], [AS_HELP_STRING([--disable-warnings-as-errors],
+      [do not consider native warnings to be an error @<:@enabled@:>@])])
+
+  AC_MSG_CHECKING([if native warnings are errors])
+  if test "x$enable_warnings_as_errors" = "xyes"; then
+    AC_MSG_RESULT([yes (explicitely set)])
+    WARNINGS_AS_ERRORS=true
+  elif test "x$enable_warnings_as_errors" = "xno"; then
+    AC_MSG_RESULT([no])
+    WARNINGS_AS_ERRORS=false
+  elif test "x$enable_warnings_as_errors" = "x"; then
+    AC_MSG_RESULT([yes (default)])
+    WARNINGS_AS_ERRORS=true
+  else
+    AC_MSG_ERROR([--enable-warnings-as-errors accepts no argument])
+  fi
+  AC_SUBST(WARNINGS_AS_ERRORS)
+
   case "${TOOLCHAIN_TYPE}" in
     microsoft)
       DISABLE_WARNING_PREFIX="-wd"
--- a/common/autoconf/generated-configure.sh	Wed Jul 05 20:32:49 2017 +0200
+++ b/common/autoconf/generated-configure.sh	Wed Jul 05 20:33:55 2017 +0200
@@ -684,6 +684,7 @@
 ENABLE_DEBUG_SYMBOLS
 CFLAGS_WARNINGS_ARE_ERRORS
 DISABLE_WARNING_PREFIX
+WARNINGS_AS_ERRORS
 COMPILER_SUPPORTS_TARGET_BITS_FLAG
 ZERO_ARCHFLAG
 LDFLAGS_TESTEXE_SUFFIX
@@ -727,7 +728,6 @@
 SET_SHARED_LIBRARY_NAME
 SET_SHARED_LIBRARY_ORIGIN
 SET_EXECUTABLE_ORIGIN
-SHARED_LIBRARY_FLAGS
 CXX_FLAG_REORDER
 C_FLAG_REORDER
 SYSROOT_LDFLAGS
@@ -1086,6 +1086,7 @@
 with_extra_cflags
 with_extra_cxxflags
 with_extra_ldflags
+enable_warnings_as_errors
 enable_debug_symbols
 enable_zip_debug_info
 enable_native_coverage
@@ -1852,6 +1853,9 @@
   --enable-rmiconnector-iiop
                           enable the JMX RMIConnector iiop transport
                           [disabled]
+  --disable-warnings-as-errors
+                          do not consider native warnings to be an error
+                          [enabled]
   --disable-debug-symbols disable generation of debug symbols [enabled]
   --disable-zip-debug-info
                           disable zipping of debug-info files [enabled]
@@ -3496,6 +3500,9 @@
 # Check for support for specific options in bash
 
 
+# Code to run after AC_OUTPUT
+
+
 #
 # Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -4359,7 +4366,7 @@
 #CUSTOM_AUTOCONF_INCLUDE
 
 # Do not change or remove the following line, it is needed for consistency checks:
-DATE_WHEN_GENERATED=1430918902
+DATE_WHEN_GENERATED=1431429776
 
 ###############################################################################
 #
@@ -15335,9 +15342,9 @@
       # is performed.
       filtered_files=`$ECHO "$files_present" \
           | $SED -e 's/config.log//g' \
-	      -e 's/confdefs.h//g' \
-	      -e 's/fixpath.exe//g' \
-	      -e 's/ //g' \
+              -e 's/configure.log//g' \
+              -e 's/confdefs.h//g' \
+              -e 's/ //g' \
           | $TR -d '\n'`
       if test "x$filtered_files" != x; then
         { $as_echo "$as_me:${as_lineno-$LINENO}: Current directory is $CURDIR." >&5
@@ -41761,7 +41768,6 @@
 
 
 
-
   if test "x$OPENJDK_TARGET_OS" = xsolaris; then
     CFLAGS_JDK="${CFLAGS_JDK} -D__solaris__"
     CXXFLAGS_JDK="${CXXFLAGS_JDK} -D__solaris__"
@@ -42029,6 +42035,10 @@
   #    CXXFLAGS_JDK  - C++ Compiler flags
   #    COMMON_CCXXFLAGS_JDK - common to C and C++
   if test "x$TOOLCHAIN_TYPE" = xgcc; then
+    if test "x$OPENJDK_TARGET_CPU" = xx86; then
+      # Force compatibility with i586 on 32 bit intel platforms.
+      COMMON_CCXXFLAGS="${COMMON_CCXXFLAGS} -march=i586"
+    fi
     COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -Wall -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \
         -pipe -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE"
     case $OPENJDK_TARGET_CPU_ARCH in
@@ -42471,6 +42481,31 @@
 
 
 
+  # Check whether --enable-warnings-as-errors was given.
+if test "${enable_warnings_as_errors+set}" = set; then :
+  enableval=$enable_warnings_as_errors;
+fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if native warnings are errors" >&5
+$as_echo_n "checking if native warnings are errors... " >&6; }
+  if test "x$enable_warnings_as_errors" = "xyes"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (explicitely set)" >&5
+$as_echo "yes (explicitely set)" >&6; }
+    WARNINGS_AS_ERRORS=true
+  elif test "x$enable_warnings_as_errors" = "xno"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    WARNINGS_AS_ERRORS=false
+  elif test "x$enable_warnings_as_errors" = "x"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (default)" >&5
+$as_echo "yes (default)" >&6; }
+    WARNINGS_AS_ERRORS=true
+  else
+    as_fn_error $? "--enable-warnings-as-errors accepts no argument" "$LINENO" 5
+  fi
+
+
   case "${TOOLCHAIN_TYPE}" in
     microsoft)
       DISABLE_WARNING_PREFIX="-wd"
@@ -54179,14 +54214,31 @@
 fi
 
 
-
-# Try to move the config.log file to the output directory.
-if test -e ./config.log; then
-  $MV -f ./config.log "$CONFIGURESUPPORT_OUTPUTDIR/config.log" 2> /dev/null
-fi
-
-# Make the compare script executable
-$CHMOD +x $OUTPUT_ROOT/compare.sh
+# After AC_OUTPUT, we need to do final work
+
+
+  # Try to move config.log (generated by autoconf) to the configure-support directory.
+  if test -e ./config.log; then
+    $MV -f ./config.log "$CONFIGURESUPPORT_OUTPUTDIR/config.log" 2> /dev/null
+  fi
+
+  # Rotate our log file (configure.log)
+  if test -e "$OUTPUT_ROOT/configure.log.old"; then
+    $RM -f "$OUTPUT_ROOT/configure.log.old"
+  fi
+  if test -e "$OUTPUT_ROOT/configure.log"; then
+    $MV -f "$OUTPUT_ROOT/configure.log" "$OUTPUT_ROOT/configure.log.old" 2> /dev/null
+  fi
+
+  # Move configure.log from current directory to the build output root
+  if test -e ./configure.log; then
+    echo found it
+    $MV -f ./configure.log "$OUTPUT_ROOT/configure.log" 2> /dev/null
+  fi
+
+  # Make the compare script executable
+  $CHMOD +x $OUTPUT_ROOT/compare.sh
+
 
 # Finally output some useful information to the user
 
@@ -54280,14 +54332,20 @@
 
 
 
-if test -e "$OUTPUT_ROOT/config.log"; then
-  $GREP '^configure:.*: WARNING:' "$OUTPUT_ROOT/config.log" > /dev/null 2>&1
-  if test $? -eq 0; then
-    printf "The following warnings were produced. Repeated here for convenience:\n"
-    # We must quote sed expression (using []) to stop m4 from eating the [].
-    $GREP '^configure:.*: WARNING:' "$OUTPUT_ROOT/config.log" | $SED -e  's/^configure:[0-9]*: //'
-    printf "\n"
-  fi
-fi
-
-
+  # Locate config.log.
+  if test -e "$CONFIGURESUPPORT_OUTPUTDIR/config.log"; then
+    CONFIG_LOG_PATH="$CONFIGURESUPPORT_OUTPUTDIR"
+  elif test -e "./config.log"; then
+    CONFIG_LOG_PATH="."
+  fi
+
+  if test -e "$CONFIG_LOG_PATH/config.log"; then
+    $GREP '^configure:.*: WARNING:' "$CONFIG_LOG_PATH/config.log" > /dev/null 2>&1
+    if test $? -eq 0; then
+      printf "The following warnings were produced. Repeated here for convenience:\n"
+      # We must quote sed expression (using []) to stop m4 from eating the [].
+      $GREP '^configure:.*: WARNING:' "$CONFIG_LOG_PATH/config.log" | $SED -e  's/^configure:[0-9]*: //'
+      printf "\n"
+    fi
+  fi
+
--- a/common/autoconf/help.m4	Wed Jul 05 20:32:49 2017 +0200
+++ b/common/autoconf/help.m4	Wed Jul 05 20:33:55 2017 +0200
@@ -212,7 +212,7 @@
   if test "x$TOOLCHAIN_VERSION" != "x"; then
     print_version=" $TOOLCHAIN_VERSION"
   fi
-  printf "* Toolchain:      $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION$print_version)\n" 
+  printf "* Toolchain:      $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION$print_version)\n"
   printf "* C Compiler:     Version $CC_VERSION_NUMBER (at $CC)\n"
   printf "* C++ Compiler:   Version $CXX_VERSION_NUMBER (at $CXX)\n"
 
@@ -263,14 +263,20 @@
 
 AC_DEFUN_ONCE([HELP_REPEAT_WARNINGS],
 [
-if test -e "$OUTPUT_ROOT/config.log"; then
-  $GREP '^configure:.*: WARNING:' "$OUTPUT_ROOT/config.log" > /dev/null 2>&1
-  if test $? -eq 0; then
-    printf "The following warnings were produced. Repeated here for convenience:\n"
-    # We must quote sed expression (using []) to stop m4 from eating the [].
-    $GREP '^configure:.*: WARNING:' "$OUTPUT_ROOT/config.log" | $SED -e [ 's/^configure:[0-9]*: //' ]
-    printf "\n"
+  # Locate config.log.
+  if test -e "$CONFIGURESUPPORT_OUTPUTDIR/config.log"; then
+    CONFIG_LOG_PATH="$CONFIGURESUPPORT_OUTPUTDIR"
+  elif test -e "./config.log"; then
+    CONFIG_LOG_PATH="."
   fi
-fi
 
+  if test -e "$CONFIG_LOG_PATH/config.log"; then
+    $GREP '^configure:.*: WARNING:' "$CONFIG_LOG_PATH/config.log" > /dev/null 2>&1
+    if test $? -eq 0; then
+      printf "The following warnings were produced. Repeated here for convenience:\n"
+      # We must quote sed expression (using []) to stop m4 from eating the [].
+      $GREP '^configure:.*: WARNING:' "$CONFIG_LOG_PATH/config.log" | $SED -e [ 's/^configure:[0-9]*: //' ]
+      printf "\n"
+    fi
+  fi
 ])
--- a/common/autoconf/spec.gmk.in	Wed Jul 05 20:32:49 2017 +0200
+++ b/common/autoconf/spec.gmk.in	Wed Jul 05 20:33:55 2017 +0200
@@ -321,6 +321,9 @@
 DISABLE_WARNING_PREFIX := @DISABLE_WARNING_PREFIX@
 CFLAGS_WARNINGS_ARE_ERRORS:=@CFLAGS_WARNINGS_ARE_ERRORS@
 
+# A global flag (true or false) determining if native warnings are considered errors.
+WARNINGS_AS_ERRORS := @WARNINGS_AS_ERRORS@
+
 CFLAGS_CCACHE:=@CFLAGS_CCACHE@
 
 # Tools that potentially need to be cross compilation aware.
@@ -394,9 +397,6 @@
 
 LIPO:=@LIPO@
 
-# Command to create a shared library
-SHARED_LIBRARY_FLAGS:=@SHARED_LIBRARY_FLAGS@
-
 # Options to linker to specify a mapfile.
 # (Note absence of := assignment, because we do not want to evaluate the macro body here)
 SET_SHARED_LIBRARY_MAPFILE=@SET_SHARED_LIBRARY_MAPFILE@
--- a/corba/.hgtags	Wed Jul 05 20:32:49 2017 +0200
+++ b/corba/.hgtags	Wed Jul 05 20:33:55 2017 +0200
@@ -306,3 +306,4 @@
 d690f489ca0bb95a6157d996da2fa72bcbcf02ea jdk9-b61
 d27f7e0a7aca129969de23e9934408a31b4abf4c jdk9-b62
 0acac6937de7a0868f8c6f88b7d036d780abeee6 jdk9-b63
+0a5e5a7c3539e8bde73d9fe55750e49a49cb8dac jdk9-b64
--- a/hotspot/.hgtags	Wed Jul 05 20:32:49 2017 +0200
+++ b/hotspot/.hgtags	Wed Jul 05 20:33:55 2017 +0200
@@ -466,3 +466,4 @@
 715d2da5801c410746e92f08066d53bde1496286 jdk9-b61
 1eab877142cce6ca06e556e2ad0af688f993f00b jdk9-b62
 2ac9b6b36689b50d1562627067c92d51781b5684 jdk9-b63
+bf92b8db249cdfa5651ef954b6c0743a7e0ea4cd jdk9-b64
--- a/hotspot/src/cpu/aarch64/vm/aarch64.ad	Wed Jul 05 20:32:49 2017 +0200
+++ b/hotspot/src/cpu/aarch64/vm/aarch64.ad	Wed Jul 05 20:33:55 2017 +0200
@@ -810,9 +810,6 @@
   bool unnecessary_volatile(const Node *barrier);
   bool needs_releasing_store(const Node *store);
 
-  // Use barrier instructions rather than load acquire / store
-  // release.
-  const bool UseBarriersForVolatile = false;
   // Use barrier instructions for unsafe volatile gets rather than
   // trying to identify an exact signature for them
   const bool UseBarriersForUnsafeVolatileGet = false;
--- a/hotspot/src/cpu/aarch64/vm/globals_aarch64.hpp	Wed Jul 05 20:32:49 2017 +0200
+++ b/hotspot/src/cpu/aarch64/vm/globals_aarch64.hpp	Wed Jul 05 20:33:55 2017 +0200
@@ -98,8 +98,8 @@
   product(bool, NearCpool, true,                                        \
          "constant pool is close to instructions")                      \
                                                                         \
-  notproduct(bool, UseAcqRelForVolatileFields, false,                   \
-             "Use acquire and release insns for volatile fields")       \
+  product(bool, UseBarriersForVolatile, false,                          \
+          "Use memory barriers to implement volatile accesses")         \
                                                                         \
   product(bool, UseCRC32, false,                                        \
           "Use CRC32 instructions for CRC32 computation")               \
@@ -117,8 +117,8 @@
   product(bool, NearCpool, true,                                        \
          "constant pool is close to instructions")                      \
                                                                         \
-  notproduct(bool, UseAcqRelForVolatileFields, false,                   \
-             "Use acquire and release insns for volatile fields")       \
+  product(bool, UseBarriersForVolatile, false,                          \
+          "Use memory barriers to implement volatile accesses")         \
   product(bool, UseNeon, false,                                         \
           "Use Neon for CRC32 computation")                             \
   product(bool, UseCRC32, false,                                        \
--- a/hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.cpp	Wed Jul 05 20:32:49 2017 +0200
+++ b/hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.cpp	Wed Jul 05 20:33:55 2017 +0200
@@ -1314,7 +1314,7 @@
     // case_array_offset_in_bytes()
     movw(reg2, in_bytes(MultiBranchData::per_case_size()));
     movw(rscratch1, in_bytes(MultiBranchData::case_array_offset()));
-    maddw(index, index, reg2, rscratch1);
+    Assembler::maddw(index, index, reg2, rscratch1);
 
     // Update the case count
     increment_mdp_data_at(mdp,
--- a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp	Wed Jul 05 20:32:49 2017 +0200
+++ b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp	Wed Jul 05 20:33:55 2017 +0200
@@ -1625,7 +1625,7 @@
     sdivw(result, ra, rb);
   } else {
     sdivw(scratch, ra, rb);
-    msubw(result, scratch, rb, ra);
+    Assembler::msubw(result, scratch, rb, ra);
   }
 
   return idivl_offset;
@@ -1655,7 +1655,7 @@
     sdiv(result, ra, rb);
   } else {
     sdiv(scratch, ra, rb);
-    msub(result, scratch, rb, ra);
+    Assembler::msub(result, scratch, rb, ra);
   }
 
   return idivq_offset;
@@ -3787,14 +3787,6 @@
   }
 }
 
-  bool MacroAssembler::use_acq_rel_for_volatile_fields() {
-#ifdef PRODUCT
-    return false;
-#else
-    return UseAcqRelForVolatileFields;
-#endif
-  }
-
 void MacroAssembler::build_frame(int framesize) {
   if (framesize == 0) {
     // Is this even possible?
--- a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp	Wed Jul 05 20:32:49 2017 +0200
+++ b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp	Wed Jul 05 20:33:55 2017 +0200
@@ -405,6 +405,18 @@
     umaddl(Rd, Rn, Rm, zr);
   }
 
+#define WRAP(INSN)                                                            \
+  void INSN(Register Rd, Register Rn, Register Rm, Register Ra) {             \
+    if ((VM_Version::cpu_cpuFeatures() & VM_Version::CPU_A53MAC) && Ra != zr) \
+      nop();                                                                  \
+    Assembler::INSN(Rd, Rn, Rm, Ra);                                          \
+  }
+
+  WRAP(madd) WRAP(msub) WRAP(maddw) WRAP(msubw)
+  WRAP(smaddl) WRAP(smsubl) WRAP(umaddl) WRAP(umsubl)
+#undef WRAP
+
+
   // macro assembly operations needed for aarch64
 
   // first two private routines for loading 32 bit or 64 bit constants
@@ -1094,9 +1106,6 @@
   address read_polling_page(Register r, address page, relocInfo::relocType rtype);
   address read_polling_page(Register r, relocInfo::relocType rtype);
 
-  // Used by aarch64.ad to control code generation
-  static bool use_acq_rel_for_volatile_fields();
-
   // CRC32 code for java.util.zip.CRC32::updateBytes() instrinsic.
   void update_byte_crc32(Register crc, Register val, Register table);
   void update_word_crc32(Register crc, Register v, Register tmp,
@@ -1150,10 +1159,6 @@
                             int offset, int size);
 };
 
-// Used by aarch64.ad to control code generation
-#define treat_as_volatile(MEM_NODE)                                     \
-  (MacroAssembler::use_acq_rel_for_volatile_fields() ? (MEM_NODE)->is_volatile() : false)
-
 #ifdef ASSERT
 inline bool AbstractAssembler::pd_check_instruction_mark() { return false; }
 #endif
--- a/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.cpp	Wed Jul 05 20:32:49 2017 +0200
+++ b/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.cpp	Wed Jul 05 20:33:55 2017 +0200
@@ -59,6 +59,9 @@
 
 int VM_Version::_cpu;
 int VM_Version::_model;
+int VM_Version::_model2;
+int VM_Version::_variant;
+int VM_Version::_revision;
 int VM_Version::_stepping;
 int VM_Version::_cpuFeatures;
 const char*           VM_Version::_features_str = "";
@@ -122,13 +125,47 @@
 
   char buf[512];
 
-  strcpy(buf, "simd");
+  _cpuFeatures = auxv;
+
+  int cpu_lines = 0;
+  if (FILE *f = fopen("/proc/cpuinfo", "r")) {
+    char buf[128], *p;
+    while (fgets(buf, sizeof (buf), f) != NULL) {
+      if (p = strchr(buf, ':')) {
+        long v = strtol(p+1, NULL, 0);
+        if (strncmp(buf, "CPU implementer", sizeof "CPU implementer" - 1) == 0) {
+          _cpu = v;
+          cpu_lines++;
+        } else if (strncmp(buf, "CPU variant", sizeof "CPU variant" - 1) == 0) {
+          _variant = v;
+        } else if (strncmp(buf, "CPU part", sizeof "CPU part" - 1) == 0) {
+          if (_model != v)  _model2 = _model;
+          _model = v;
+        } else if (strncmp(buf, "CPU revision", sizeof "CPU revision" - 1) == 0) {
+          _revision = v;
+        }
+      }
+    }
+    fclose(f);
+  }
+
+  // Enable vendor specific features
+  if (_cpu == CPU_CAVIUM && _variant == 0) _cpuFeatures |= CPU_DMB_ATOMICS;
+  if (_cpu == CPU_ARM && (_model == 0xd03 || _model2 == 0xd03)) _cpuFeatures |= CPU_A53MAC;
+  // If an olde style /proc/cpuinfo (cpu_lines == 1) then if _model is an A57 (0xd07)
+  // we assume the worst and assume we could be on a big little system and have
+  // undisclosed A53 cores which we could be swapped to at any stage
+  if (_cpu == CPU_ARM && cpu_lines == 1 && _model == 0xd07) _cpuFeatures |= CPU_A53MAC;
+
+  sprintf(buf, "0x%02x:0x%x:0x%03x:%d", _cpu, _variant, _model, _revision);
+  if (_model2) sprintf(buf+strlen(buf), "(0x%03x)", _model2);
+  if (auxv & HWCAP_ASIMD) strcat(buf, ", simd");
   if (auxv & HWCAP_CRC32) strcat(buf, ", crc");
   if (auxv & HWCAP_AES)   strcat(buf, ", aes");
   if (auxv & HWCAP_SHA1)  strcat(buf, ", sha1");
   if (auxv & HWCAP_SHA2)  strcat(buf, ", sha256");
 
-  _features_str = strdup(buf);
+  _features_str = os::strdup(buf);
 
   if (FLAG_IS_DEFAULT(UseCRC32)) {
     UseCRC32 = (auxv & HWCAP_CRC32) != 0;
@@ -202,6 +239,10 @@
     UseMultiplyToLenIntrinsic = true;
   }
 
+  if (FLAG_IS_DEFAULT(UseBarriersForVolatile)) {
+    UseBarriersForVolatile = (_cpuFeatures & CPU_DMB_ATOMICS) != 0;
+  }
+
 #ifdef COMPILER2
   if (FLAG_IS_DEFAULT(OptoScheduling)) {
     OptoScheduling = true;
--- a/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.hpp	Wed Jul 05 20:32:49 2017 +0200
+++ b/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.hpp	Wed Jul 05 20:33:55 2017 +0200
@@ -34,6 +34,9 @@
 protected:
   static int _cpu;
   static int _model;
+  static int _model2;
+  static int _variant;
+  static int _revision;
   static int _stepping;
   static int _cpuFeatures;     // features returned by the "cpuid" instruction
                                // 0 if this instruction is not available
@@ -49,7 +52,40 @@
   static void assert_is_initialized() {
   }
 
+  enum {
+    CPU_ARM       = 'A',
+    CPU_BROADCOM  = 'B',
+    CPU_CAVIUM    = 'C',
+    CPU_DEC       = 'D',
+    CPU_INFINEON  = 'I',
+    CPU_MOTOROLA  = 'M',
+    CPU_NVIDIA    = 'N',
+    CPU_AMCC      = 'P',
+    CPU_QUALCOM   = 'Q',
+    CPU_MARVELL   = 'V',
+    CPU_INTEL     = 'i',
+  } cpuFamily;
+
+  enum {
+    CPU_FP           = (1<<0),
+    CPU_ASIMD        = (1<<1),
+    CPU_EVTSTRM      = (1<<2),
+    CPU_AES          = (1<<3),
+    CPU_PMULL        = (1<<4),
+    CPU_SHA1         = (1<<5),
+    CPU_SHA2         = (1<<6),
+    CPU_CRC32        = (1<<7),
+    CPU_A53MAC       = (1 << 30),
+    CPU_DMB_ATOMICS  = (1 << 31),
+  } cpuFeatureFlags;
+
   static const char* cpu_features()           { return _features_str; }
+  static int cpu_family()                     { return _cpu; }
+  static int cpu_model()                      { return _model; }
+  static int cpu_model2()                     { return _model2; }
+  static int cpu_variant()                    { return _variant; }
+  static int cpu_revision()                   { return _revision; }
+  static int cpu_cpuFeatures()                { return _cpuFeatures; }
 
 };
 
--- a/jaxp/.hgtags	Wed Jul 05 20:32:49 2017 +0200
+++ b/jaxp/.hgtags	Wed Jul 05 20:33:55 2017 +0200
@@ -306,3 +306,4 @@
 f4a4a54620370f077c2e830a5561c8cfa811712b jdk9-b61
 3bcf83c1bbc1b7663e930d72c133a9bd86c7618d jdk9-b62
 4a8f895f0317dcc90479cb7cc97014312e69edf7 jdk9-b63
+6f91749b5aaef1a171ec2254163233438d1071d1 jdk9-b64
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/MultiDOM.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/MultiDOM.java	Wed Jul 05 20:33:55 2017 +0200
@@ -567,8 +567,12 @@
     }
 
     public NodeList makeNodeList(DTMAxisIterator iter) {
-        // TODO: gather nodes from all DOMs ?
-        return _main.makeNodeList(iter);
+        int index = iter.next();
+        if (index == DTM.NULL) {
+            return null;
+        }
+        iter.reset();
+        return _adapters[getDTMId(index)].makeNodeList(iter);
     }
 
     public String getLanguage(int node) {
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/utils/XMLLimitAnalyzer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/utils/XMLLimitAnalyzer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,7 +1,7 @@
 /*
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
  *
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
  *
  * The contents of this file are subject to the terms of either the GNU
  * General Public License Version 2 only ("GPL") or the Common Development
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/utils/XMLSecurityManager.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/utils/XMLSecurityManager.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/utils/XMLSecurityPropertyManager.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/utils/XMLSecurityPropertyManager.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
--- a/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathEvaluationResult.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathEvaluationResult.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
--- a/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathNodes.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathNodes.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jaxp/test/javax/xml/jaxp/unittest/javax/xml/transform/DocumentExtFunc.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javax.xml.transform;
+
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class DocumentExtFunc {
+
+    public static String test(NodeList list) {
+        Node node = list.item(0);
+        return "["+node.getNodeName() + ":" + node.getNodeValue()+"]";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jaxp/test/javax/xml/jaxp/unittest/javax/xml/transform/XSLTFunctionsTest.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javax.xml.transform;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import static org.testng.Assert.assertEquals;
+
+/*
+ * @summary This class contains tests for XSLT functions.
+ */
+
+public class XSLTFunctionsTest {
+
+    /**
+     * @bug 8062518
+     * Verifies that a reference to the DTM created by XSLT document function is
+     * actually read from the DTM by an extension function.
+     * @param xml Content of xml file to process
+     * @param xsl stylesheet content that loads external document {@code externalDoc}
+     *        with XSLT 'document' function and then reads it with
+     *        DocumentExtFunc.test() function
+     * @param externalDoc Content of the external xml document
+     * @param expectedResult Expected transformation result
+     **/
+    @Test(dataProvider = "document")
+    public void testDocument(final String xml, final String xsl,
+                             final String externalDoc, final String expectedResult) throws Exception {
+        // Prepare sources for transormation
+        Source src = new StreamSource(new StringReader(xml));
+        Source xslsrc = new StreamSource(new StringReader(xsl));
+
+        // Create factory and transformer
+        TransformerFactory tf = TransformerFactory.newInstance();
+        Transformer t = tf.newTransformer( xslsrc );
+        t.setErrorListener(tf.getErrorListener());
+
+        // Set URI Resolver to return the newly constructed xml
+        // stream source object from xml test string
+        t.setURIResolver(new URIResolver() {
+            @Override
+            public Source resolve(String href, String base)
+                    throws TransformerException {
+                if (href.contains("externalDoc")) {
+                    return new StreamSource(new StringReader(externalDoc));
+                } else {
+                    return new StreamSource(new StringReader(xml));
+                }
+            }
+        });
+
+        // Prepare output stream
+        StringWriter xmlResultString = new StringWriter();
+        StreamResult xmlResultStream = new StreamResult(xmlResultString);
+
+        //Transform the xml
+        t.transform(src, xmlResultStream);
+
+        // If the document can't be accessed and the bug is in place then
+        // reported exception will be thrown during transformation
+        System.out.println("Transformation result:"+xmlResultString.toString().trim());
+
+        // Check the result - it should contain two (node name, node values) entries -
+        // one for original document, another for a document created with
+        // call to 'document' function
+        assertEquals(xmlResultString.toString().trim(), expectedResult);
+    }
+
+    @DataProvider(name = "document")
+    public static Object[][] documentTestData() {
+        return new Object[][] {
+            {documentTestXml, documentTestXsl, documentTestExternalDoc, documentTesteExpectedResult},
+        };
+    }
+
+    static final String documentTestXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Test>Doc</Test>";
+
+    static final String documentTestExternalDoc = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Test>External Doc</Test>";
+
+    static final String documentTestXsl = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+            + "<xsl:transform version=\"1.0\""
+            + " xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" "
+            + " xmlns:cfunc=\"http://xml.apache.org/xalan/java/\">"
+            + "<xsl:template match=\"/\">"
+            + "<xsl:element name=\"root\">"
+            + "<xsl:variable name=\"other_doc\" select=\"document(&#39;externalDoc&#39;)\"/>"
+            + "<!-- Source -->"
+            + "<xsl:value-of select=\"cfunc:javax.xml.transform.DocumentExtFunc.test(/Test)\"/>"
+            + "<!-- document() -->"
+            + "<xsl:value-of select=\"cfunc:javax.xml.transform.DocumentExtFunc.test($other_doc/Test)\"/>"
+            + "</xsl:element></xsl:template></xsl:transform>";
+
+    static final String documentTesteExpectedResult = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+                                                    + "<root>[Test:Doc][Test:External Doc]</root>";
+}
--- a/jaxws/.hgtags	Wed Jul 05 20:32:49 2017 +0200
+++ b/jaxws/.hgtags	Wed Jul 05 20:33:55 2017 +0200
@@ -309,3 +309,4 @@
 77f44848c44c003205490bf5ab88035233b65418 jdk9-b61
 cd0cf72b2cbf4adb778a02505fb065bb2292688c jdk9-b62
 b5c22d09b1c91dd49b006f38d8ba9c4397517ccc jdk9-b63
+df100399ed27d0eaa57c137ca99819a0fee66178 jdk9-b64
--- a/jdk/.hgtags	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/.hgtags	Wed Jul 05 20:33:55 2017 +0200
@@ -306,3 +306,4 @@
 da84dcac1b0b12c5b836b05ac75ecbfadee0cd32 jdk9-b61
 49118e68fbd4cc0044e718c47db681946d5efd69 jdk9-b62
 fd3281c400347088b36aeb16273aa679d53a81a4 jdk9-b63
+7de8d036ad0980d988d1b9b4b4e6be555d9fbf98 jdk9-b64
--- a/jdk/make/CompileDemos.gmk	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/CompileDemos.gmk	Wed Jul 05 20:33:55 2017 +0200
@@ -396,7 +396,7 @@
   $(eval $(call SetupNativeCompilation,BUILD_LIBPOLLER, \
       SRC := $(DEMO_SOLARIS_SRC)/jni/Poller, \
       OPTIMIZATION := LOW, \
-      CFLAGS := $(CFLAGS_JDKLIB) $(SHARED_LIBRARY_FLAGS) \
+      CFLAGS := $(CFLAGS_JDKLIB) \
           -I$(SUPPORT_OUTPUTDIR)/demo/classes/jni/Poller, \
       LDFLAGS := $(LDFLAGS_JDKLIB), \
       LDFLAGS_SUFFIX_solaris := -lc, \
--- a/jdk/make/data/charsetmapping/charsets	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/data/charsetmapping/charsets	Wed Jul 05 20:33:55 2017 +0200
@@ -1833,10 +1833,3 @@
 ##
 ########################################################
  
-charset x-COMPOUND_TEXT COMPOUND_TEXT
-    package sun.nio.cs.ext
-    type    source
-    os      unix
-    alias   COMPOUND_TEXT       # JDK historical
-    alias   x11-compound_text
-    alias   x-compound-text
--- a/jdk/make/launcher/Launcher-jdk.accessibility.gmk	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/launcher/Launcher-jdk.accessibility.gmk	Wed Jul 05 20:33:55 2017 +0200
@@ -39,7 +39,7 @@
       CFLAGS := $(filter-out -Zc:wchar_t-, $(CFLAGS_JDKEXE)) -Zc:wchar_t \
           -analyze- -Od -Gd -D_WINDOWS \
           -D_UNICODE -DUNICODE -RTC1 -EHsc, \
-      DISABLED_WARNINGS_microsoft := 4267, \
+      DISABLED_WARNINGS_microsoft := 4267 4996, \
       LDFLAGS := $(LDFLAGS_JDKEXE) \
           Advapi32.lib Version.lib User32.lib, \
       OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/jdk.accessibility/jabswitch, \
--- a/jdk/make/launcher/Launcher-jdk.pack200.gmk	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/launcher/Launcher-jdk.pack200.gmk	Wed Jul 05 20:33:55 2017 +0200
@@ -84,6 +84,7 @@
     CFLAGS_linux := -fPIC, \
     CFLAGS_solaris := -KPIC, \
     CFLAGS_macosx := -fPIC, \
+    DISABLED_WARNINGS_gcc := unused-result, \
     MAPFILE := $(UNPACK_MAPFILE),\
     LDFLAGS := $(UNPACKEXE_ZIPOBJS) \
         $(LDFLAGS_JDKEXE) $(LDFLAGS_CXX_JDK) \
--- a/jdk/make/lib/Awt2dLibraries.gmk	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/lib/Awt2dLibraries.gmk	Wed Jul 05 20:33:55 2017 +0200
@@ -246,9 +246,10 @@
     CFLAGS := $(CFLAGS_JDKLIB) $(LIBAWT_CFLAGS), \
     DISABLED_WARNINGS_gcc := sign-compare unused-result maybe-uninitialized \
         format-nonliteral parentheses, \
-    DISABLED_WARNINGS_clang := logical-op-parentheses, \
+    DISABLED_WARNINGS_clang := logical-op-parentheses extern-initializer, \
     DISABLED_WARNINGS_solstudio := E_DECLARATION_IN_CODE, \
-    DISABLED_WARNINGS_microsoft := 4297 4244 4267, \
+    DISABLED_WARNINGS_microsoft := 4297 4244 4267 4996, \
+    WARNINGS_AS_ERRORS_gcc := false, \
     ASFLAGS := $(LIBAWT_ASFLAGS), \
     MAPFILE := $(LIBAWT_MAPFILE), \
     LDFLAGS := $(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN), \
@@ -357,6 +358,7 @@
             format-security int-to-pointer-cast parentheses, \
         DISABLED_WARNINGS_solstudio := E_DECLARATION_IN_CODE \
             E_ASSIGNMENT_TYPE_MISMATCH E_NON_CONST_INIT, \
+        WARNINGS_AS_ERRORS_gcc := false, \
         MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libawt_xawt/mapfile-vers, \
         LDFLAGS := $(LDFLAGS_JDKLIB) \
             $(X_LIBS) $(LIBAWT_XAWT_LDFLAGS) \
@@ -408,11 +410,11 @@
     INCLUDE_FILES := $(BUILD_LIBLCMS_INCLUDE_FILES), \
     OPTIMIZATION := HIGHEST, \
     CFLAGS := $(filter-out -xc99=%none, $(CFLAGS_JDKLIB)) \
-        $(SHARED_LIBRARY_FLAGS) $(LIBLCMS_CPPFLAGS) \
+        $(LIBLCMS_CPPFLAGS) \
         $(LCMS_CFLAGS), \
     CFLAGS_solaris := -xc99=no_lib, \
     CFLAGS_windows := -DCMS_IS_WINDOWS_, \
-    DISABLED_WARNINGS_gcc := format-nonliteral, \
+    DISABLED_WARNINGS_gcc := format-nonliteral type-limits, \
     DISABLED_WARNINGS_clang := tautological-compare, \
     DISABLED_WARNINGS_solstudio := E_STATEMENT_NOT_REACHED, \
     MAPFILE := $(JDK_TOPDIR)/make/mapfiles/liblcms/mapfile-vers, \
@@ -647,10 +649,13 @@
     OPTIMIZATION := $(LIBFONTMANAGER_OPTIMIZATION), \
     CFLAGS_windows = -DCC_NOEX, \
     DISABLED_WARNINGS_gcc := sign-compare int-to-pointer-cast reorder \
-        delete-non-virtual-dtor, \
-    DISABLED_WARNINGS_clang := unused-value incompatible-pointer-types, \
+        delete-non-virtual-dtor type-limits, \
+    DISABLED_WARNINGS_clang := unused-value incompatible-pointer-types \
+        tautological-constant-out-of-range-compare int-to-pointer-cast, \
     DISABLED_WARNINGS_solstudio := truncwarn, \
-    DISABLED_WARNINGS_microsoft := 4267 4244 4018 4090, \
+    DISABLED_WARNINGS_microsoft := 4267 4244 4018 4090 4996 4146, \
+    WARNINGS_AS_ERRORS_gcc := false, \
+    WARNINGS_AS_ERRORS_solstudio := false, \
     MAPFILE := $(BUILD_LIBFONTMANAGER_MAPFILE), \
     LDFLAGS := $(subst -Xlinker -z -Xlinker defs,,$(LDFLAGS_JDKLIB)) $(LDFLAGS_CXX_JDK) \
         $(call SET_SHARED_LIBRARY_ORIGIN), \
@@ -880,10 +885,10 @@
       OPTIMIZATION := LOW, \
       CFLAGS := $(LIBSPLASHSCREEN_CFLAGS) $(CFLAGS_JDKLIB) \
                 $(GIFLIB_CFLAGS) $(LIBJPEG_CFLAGS) $(PNG_CFLAGS), \
-      DISABLED_WARNINGS_gcc := type-limits unused-result maybe-uninitialized, \
+      DISABLED_WARNINGS_gcc := sign-compare type-limits unused-result maybe-uninitialized, \
       DISABLED_WARNINGS_clang := incompatible-pointer-types, \
-      DISABLED_WARNINGS_solstudio := E_NEWLINE_NOT_LAST, \
-      DISABLED_WARNINGS_microsoft := 4244 4267, \
+      DISABLED_WARNINGS_solstudio := E_NEWLINE_NOT_LAST E_DECLARATION_IN_CODE, \
+      DISABLED_WARNINGS_microsoft := 4018 4244 4267, \
       MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libsplashscreen/mapfile-vers, \
       LDFLAGS := $(LDFLAGS_JDKLIB) \
           $(call SET_SHARED_LIBRARY_ORIGIN), \
@@ -956,6 +961,7 @@
       DISABLED_WARNINGS_clang := incomplete-implementation \
           deprecated-declarations objc-method-access bitwise-op-parentheses \
           incompatible-pointer-types parentheses-equality extra-tokens, \
+      WARNINGS_AS_ERRORS_clang := false, \
       LDFLAGS := $(LDFLAGS_JDKLIB) \
           $(call SET_SHARED_LIBRARY_ORIGIN) \
           -L$(INSTALL_LIBRARIES_HERE), \
--- a/jdk/make/lib/CoreLibraries.gmk	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/lib/CoreLibraries.gmk	Wed Jul 05 20:33:55 2017 +0200
@@ -149,7 +149,8 @@
     DISABLED_WARNINGS_gcc := type-limits format-nonliteral, \
     DISABLED_WARNINGS_clang := int-conversion, \
     DISABLED_WARNINGS_solstudio := E_DECLARATION_IN_CODE, \
-    DISABLED_WARNINGS_microsoft := 4022 4267, \
+    DISABLED_WARNINGS_microsoft := 4022 4267 4996, \
+    WARNINGS_AS_ERRORS_solstudio := false, \
     MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libjava/mapfile-vers, \
     LDFLAGS := $(LDFLAGS_JDKLIB) \
         $(call SET_SHARED_LIBRARY_ORIGIN), \
--- a/jdk/make/lib/Lib-jdk.crypto.ucrypto.gmk	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/lib/Lib-jdk.crypto.ucrypto.gmk	Wed Jul 05 20:33:55 2017 +0200
@@ -38,6 +38,7 @@
       OPTIMIZATION := LOW, \
       CFLAGS := $(CFLAGS_JDKLIB) \
           $(addprefix -I, $(LIBJ2UCRYPTO_SRC)), \
+      DISABLED_WARNINGS_solstudio := E_MACRO_REDEFINED, \
       MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libj2ucrypto/mapfile-vers, \
       LDFLAGS := $(LDFLAGS_JDKLIB), \
       LDFLAGS_SUFFIX := $(LIBDL), \
--- a/jdk/make/lib/NetworkingLibraries.gmk	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/lib/NetworkingLibraries.gmk	Wed Jul 05 20:33:55 2017 +0200
@@ -34,7 +34,7 @@
         $(LIBJAVA_HEADER_FLAGS) $(addprefix -I, $(LIBNET_SRC_DIRS)), \
     DISABLED_WARNINGS_gcc := format-nonliteral, \
     DISABLED_WARNINGS_clang := parentheses-equality constant-logical-operand, \
-    DISABLED_WARNINGS_microsoft := 4244 4047 4133, \
+    DISABLED_WARNINGS_microsoft := 4244 4047 4133 4996, \
     MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libnet/mapfile-vers, \
     LDFLAGS := $(LDFLAGS_JDKLIB) \
         $(call SET_SHARED_LIBRARY_ORIGIN), \
--- a/jdk/make/lib/NioLibraries.gmk	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/lib/NioLibraries.gmk	Wed Jul 05 20:33:55 2017 +0200
@@ -70,7 +70,7 @@
         $(BUILD_LIBNIO_CFLAGS), \
     DISABLED_WARNINGS_gcc := type-limits, \
     DISABLED_WARNINGS_clang := tautological-compare, \
-    DISABLED_WARNINGS_microsoft := 4244, \
+    DISABLED_WARNINGS_microsoft := 4244 4996, \
     MAPFILE := $(BUILD_LIBNIO_MAPFILE), \
     LDFLAGS := $(LDFLAGS_JDKLIB) $(BUILD_LIBNIO_LDFLAGS) \
         $(call SET_SHARED_LIBRARY_ORIGIN), \
--- a/jdk/make/lib/SoundLibraries.gmk	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/lib/SoundLibraries.gmk	Wed Jul 05 20:33:55 2017 +0200
@@ -111,10 +111,6 @@
   LIBJSOUND_SRC_FILES += $(LIBJSOUND_DAUDIOFILES)
 endif # OPENJDK_TARGET_OS solaris
 
-
-  ifeq ($(OPENJDK_TARGET_CPU), aarch64)
-       LIBJSOUND_CFLAGS += -DX_ARCH=X_AARCH64
-  endif
 LIBJSOUND_CFLAGS += -DEXTRA_SOUND_JNI_LIBS='"$(EXTRA_SOUND_JNI_LIBS)"'
 
 $(eval $(call SetupNativeCompilation,BUILD_LIBJSOUND, \
@@ -129,6 +125,7 @@
     CXXFLAGS := $(CXXFLAGS_JDKLIB) $(LIBJSOUND_CFLAGS), \
     DISABLED_WARNINGS_clang := implicit-function-declaration \
         deprecated-writable-strings, \
+    WARNINGS_AS_ERRORS_clang := false, \
     MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libjsound/mapfile-vers, \
     LDFLAGS := $(LDFLAGS_JDKLIB) \
         $(call SET_SHARED_LIBRARY_ORIGIN), \
--- a/jdk/src/java.base/macosx/native/libjli/java_md_macosx.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/macosx/native/libjli/java_md_macosx.c	Wed Jul 05 20:33:55 2017 +0200
@@ -948,8 +948,15 @@
     jmethodID getCanonicalNameMID = NULL;
     NULL_CHECK(getCanonicalNameMID = (*env)->GetMethodID(env, classClass, "getCanonicalName", "()Ljava/lang/String;"));
 
-    jstring mainClassString = NULL;
-    NULL_CHECK(mainClassString = (*env)->CallObjectMethod(env, mainClass, getCanonicalNameMID));
+    jstring mainClassString = (*env)->CallObjectMethod(env, mainClass, getCanonicalNameMID);
+    if ((*env)->ExceptionCheck(env)) {
+        /*
+         * Clears all errors caused by getCanonicalName() on the mainclass and
+         * leaves the JAVA_MAIN_CLASS__<pid> empty.
+         */
+        (*env)->ExceptionClear(env);
+        return;
+    }
 
     const char *mainClassName = NULL;
     NULL_CHECK(mainClassName = (*env)->GetStringUTFChars(env, mainClassString, NULL));
@@ -1056,7 +1063,7 @@
  * Note the jvmInstance must be initialized first before entering into
  * ShowSplashScreen, as there is a callback into the JLI_GetJavaVMInstance.
  */
-void PostJVMInit(JNIEnv *env, jstring mainClass, JavaVM *vm) {
+void PostJVMInit(JNIEnv *env, jclass mainClass, JavaVM *vm) {
     jvmInstance = vm;
     SetMainClassForAWT(env, mainClass);
     CHECK_EXCEPTION_RETURN();
--- a/jdk/src/java.base/share/classes/java/io/BufferedReader.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/BufferedReader.java	Wed Jul 05 20:33:55 2017 +0200
@@ -272,6 +272,7 @@
      *             stream has been reached
      *
      * @exception  IOException  If an I/O error occurs
+     * @exception  IndexOutOfBoundsException {@inheritDoc}
      */
     public int read(char cbuf[], int off, int len) throws IOException {
         synchronized (lock) {
--- a/jdk/src/java.base/share/classes/java/io/CharArrayReader.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/CharArrayReader.java	Wed Jul 05 20:33:55 2017 +0200
@@ -116,6 +116,7 @@
      *          the end of the stream has been reached
      *
      * @exception   IOException  If an I/O error occurs
+     * @exception   IndexOutOfBoundsException {@inheritDoc}
      */
     public int read(char b[], int off, int len) throws IOException {
         synchronized (lock) {
--- a/jdk/src/java.base/share/classes/java/io/FilterReader.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/FilterReader.java	Wed Jul 05 20:33:55 2017 +0200
@@ -69,6 +69,7 @@
      * Reads characters into a portion of an array.
      *
      * @exception  IOException  If an I/O error occurs
+     * @exception  IndexOutOfBoundsException {@inheritDoc}
      */
     public int read(char cbuf[], int off, int len) throws IOException {
         return in.read(cbuf, off, len);
--- a/jdk/src/java.base/share/classes/java/io/InputStreamReader.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/InputStreamReader.java	Wed Jul 05 20:33:55 2017 +0200
@@ -179,6 +179,7 @@
      *             stream has been reached
      *
      * @exception  IOException  If an I/O error occurs
+     * @exception  IndexOutOfBoundsException {@inheritDoc}
      */
     public int read(char cbuf[], int offset, int length) throws IOException {
         return sd.read(cbuf, offset, length);
--- a/jdk/src/java.base/share/classes/java/io/LineNumberReader.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/LineNumberReader.java	Wed Jul 05 20:33:55 2017 +0200
@@ -159,6 +159,8 @@
      *
      * @throws  IOException
      *          If an I/O error occurs
+     *
+     * @throws  IndexOutOfBoundsException {@inheritDoc}
      */
     @SuppressWarnings("fallthrough")
     public int read(char cbuf[], int off, int len) throws IOException {
--- a/jdk/src/java.base/share/classes/java/io/PipedReader.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/PipedReader.java	Wed Jul 05 20:33:55 2017 +0200
@@ -286,6 +286,7 @@
      *                  <a href=PipedInputStream.html#BROKEN> <code>broken</code></a>,
      *                  {@link #connect(java.io.PipedWriter) unconnected}, closed,
      *                  or an I/O error occurs.
+     * @exception  IndexOutOfBoundsException {@inheritDoc}
      */
     public synchronized int read(char cbuf[], int off, int len)  throws IOException {
         if (!connected) {
--- a/jdk/src/java.base/share/classes/java/io/PushbackReader.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/PushbackReader.java	Wed Jul 05 20:33:55 2017 +0200
@@ -102,6 +102,7 @@
      *             stream has been reached
      *
      * @exception  IOException  If an I/O error occurs
+     * @exception  IndexOutOfBoundsException {@inheritDoc}
      */
     public int read(char cbuf[], int off, int len) throws IOException {
         synchronized (lock) {
--- a/jdk/src/java.base/share/classes/java/io/Reader.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/Reader.java	Wed Jul 05 20:33:55 2017 +0200
@@ -153,6 +153,9 @@
      *             stream has been reached
      *
      * @exception  IOException  If an I/O error occurs
+     * @exception  IndexOutOfBoundsException
+     *             If {@code off} is negative, or {@code len} is negative,
+     *             or {@code len} is greater than {@code cbuf.length - off}
      */
     abstract public int read(char cbuf[], int off, int len) throws IOException;
 
--- a/jdk/src/java.base/share/classes/java/io/StringReader.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/StringReader.java	Wed Jul 05 20:33:55 2017 +0200
@@ -84,6 +84,7 @@
      *             stream has been reached
      *
      * @exception  IOException  If an I/O error occurs
+     * @exception  IndexOutOfBoundsException {@inheritDoc}
      */
     public int read(char cbuf[], int off, int len) throws IOException {
         synchronized (lock) {
--- a/jdk/src/java.base/share/classes/java/lang/annotation/Documented.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/annotation/Documented.java	Wed Jul 05 20:33:55 2017 +0200
@@ -26,12 +26,24 @@
 package java.lang.annotation;
 
 /**
- * Indicates that annotations with a type are to be documented by javadoc
- * and similar tools by default.  This type should be used to annotate the
- * declarations of types whose annotations affect the use of annotated
- * elements by their clients.  If a type declaration is annotated with
- * Documented, its annotations become part of the public API
- * of the annotated elements.
+ * If the annotation {@code @Documented} is present on the declaration
+ * of an annotation type <i>A</i>, then any {@code @A} annotation on
+ * an element is considered part of the element's public contract.
+ *
+ * In more detail, when an annotation type <i>A</i> is annotated with
+ * {@code Documented}, the presence and value of annotations of type
+ * <i>A</i> are a part of the public contract of the elements <i>A</i>
+ * annotates.
+ *
+ * Conversely, if an annotation type <i>B</i> is <em>not</em>
+ * annotated with {@code Documented}, the presence and value of
+ * <i>B</i> annotations are <em>not</em> part of the public contract
+ * of the elements <i>B</i> annotates.
+ *
+ * Concretely, if an annotation type is annotated with {@code
+ * Documented}, by default a tool like javadoc will display
+ * annotations of that type in its output while annotations of
+ * annotation types without {@code Documented} will not be displayed.
  *
  * @author  Joshua Bloch
  * @since 1.5
--- a/jdk/src/java.base/share/classes/java/security/Policy.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/Policy.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,7 +49,8 @@
  * implementation (a default subclass implementation of this abstract class).
  * The default Policy implementation can be changed by setting the value
  * of the {@code policy.provider} security property to the fully qualified
- * name of the desired Policy subclass implementation.
+ * name of the desired Policy subclass implementation. The system class loader
+ * is used to load this class.
  *
  * <p> Application code can directly subclass Policy to provide a custom
  * implementation.  In addition, an instance of a Policy object can be
@@ -111,6 +112,10 @@
 
     private static final Debug debug = Debug.getInstance("policy");
 
+    // Default policy provider
+    private static final String DEFAULT_POLICY =
+        "sun.security.provider.PolicyFile";
+
     // Cache mapping ProtectionDomain.Key to PermissionCollection
     private WeakHashMap<ProtectionDomain.Key, PermissionCollection> pdMapping;
 
@@ -169,74 +174,7 @@
             synchronized (Policy.class) {
                 PolicyInfo pinfo = policy.get();
                 if (pinfo.policy == null) {
-                    String policy_class = AccessController.doPrivileged(
-                        new PrivilegedAction<>() {
-                        public String run() {
-                            return Security.getProperty("policy.provider");
-                        }
-                    });
-                    if (policy_class == null) {
-                        policy_class = "sun.security.provider.PolicyFile";
-                    }
-
-                    try {
-                        pinfo = new PolicyInfo(
-                            (Policy) Class.forName(policy_class).newInstance(),
-                            true);
-                    } catch (Exception e) {
-                        /*
-                         * The policy_class seems to be an extension
-                         * so we have to bootstrap loading it via a policy
-                         * provider that is on the bootclasspath.
-                         * If it loads then shift gears to using the configured
-                         * provider.
-                         */
-
-                        // install the bootstrap provider to avoid recursion
-                        Policy polFile = new sun.security.provider.PolicyFile();
-                        pinfo = new PolicyInfo(polFile, false);
-                        policy.set(pinfo);
-
-                        final String pc = policy_class;
-                        Policy pol = AccessController.doPrivileged(
-                            new PrivilegedAction<>() {
-                            public Policy run() {
-                                try {
-                                    ClassLoader cl =
-                                            ClassLoader.getSystemClassLoader();
-                                    // we want the extension loader
-                                    ClassLoader extcl = null;
-                                    while (cl != null) {
-                                        extcl = cl;
-                                        cl = cl.getParent();
-                                    }
-                                    return (extcl != null ? (Policy)Class.forName(
-                                            pc, true, extcl).newInstance() : null);
-                                } catch (Exception e) {
-                                    if (debug != null) {
-                                        debug.println("policy provider " +
-                                                    pc +
-                                                    " not available");
-                                        e.printStackTrace();
-                                    }
-                                    return null;
-                                }
-                            }
-                        });
-                        /*
-                         * if it loaded install it as the policy provider. Otherwise
-                         * continue to use the system default implementation
-                         */
-                        if (pol != null) {
-                            pinfo = new PolicyInfo(pol, true);
-                        } else {
-                            if (debug != null) {
-                                debug.println("using sun.security.provider.PolicyFile");
-                            }
-                            pinfo = new PolicyInfo(polFile, true);
-                        }
-                    }
-                    policy.set(pinfo);
+                    return loadPolicyProvider();
                 }
                 return pinfo.policy;
             }
@@ -245,6 +183,70 @@
     }
 
     /**
+     * Loads and instantiates a Policy implementation specified by the
+     * policy.provider security property. Note that this method should only
+     * be called by getPolicyNoCheck and from within a synchronized block with
+     * an intrinsic lock on the Policy.class.
+     */
+    private static Policy loadPolicyProvider() {
+        String policyProvider =
+            AccessController.doPrivileged(new PrivilegedAction<>() {
+                @Override
+                public String run() {
+                    return Security.getProperty("policy.provider");
+                }
+            });
+
+        /*
+         * If policy.provider is not set or is set to the default provider,
+         * simply instantiate it and return.
+         */
+        if (policyProvider == null || policyProvider.isEmpty() ||
+            policyProvider.equals(DEFAULT_POLICY))
+        {
+            Policy polFile = new sun.security.provider.PolicyFile();
+            policy.set(new PolicyInfo(polFile, true));
+            return polFile;
+        }
+
+        /*
+         * Locate, load, and instantiate the policy.provider impl using
+         * the system class loader. While doing so, install the bootstrap
+         * provider to avoid potential recursion.
+         */
+        Policy polFile = new sun.security.provider.PolicyFile();
+        policy.set(new PolicyInfo(polFile, false));
+
+        Policy pol = AccessController.doPrivileged(new PrivilegedAction<>() {
+            @Override
+            public Policy run() {
+                try {
+                    ClassLoader scl = ClassLoader.getSystemClassLoader();
+                    Class<?> c = Class.forName(policyProvider, true, scl);
+                    return (Policy)c.newInstance();
+                } catch (Exception e) {
+                    if (debug != null) {
+                        debug.println("policy provider " + policyProvider +
+                                      " not available");
+                        e.printStackTrace();
+                    }
+                    return null;
+                }
+            }
+        });
+
+        if (pol == null) {
+            // Fallback and use the system default implementation
+            if (debug != null) {
+                debug.println("using " + DEFAULT_POLICY);
+            }
+            pol = polFile;
+        }
+        policy.set(new PolicyInfo(pol, true));
+        return pol;
+    }
+
+    /**
      * Sets the system-wide Policy object. This method first calls
      * {@code SecurityManager.checkPermission} with a
      * {@code SecurityPermission("setPolicy")}
--- a/jdk/src/java.base/share/classes/java/security/cert/LDAPCertStoreParameters.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/cert/LDAPCertStoreParameters.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,7 +30,12 @@
  * <p>
  * This class is used to provide necessary configuration parameters (server
  * name and port number) to implementations of the LDAP {@code CertStore}
- * algorithm.
+ * algorithm. However, if you are retrieving certificates or CRLs from
+ * an ldap URI as specified by RFC 5280, use the
+ * {@link java.security.cert.URICertStoreParameters URICertStoreParameters}
+ * instead as the URI may contain additional information such as the
+ * distinguished name that will help the LDAP CertStore find the specific
+ * certificates and CRLs.
  * <p>
  * <b>Concurrent Access</b>
  * <p>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/URICertStoreParameters.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,149 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package java.security.cert;
+
+import java.net.URI;
+
+/**
+ * Parameters used as input for {@code CertStore} algorithms which use
+ * information contained in a URI to retrieve certificates and CRLs.
+ * <p>
+ * This class is used to provide necessary configuration parameters
+ * through a URI as defined in RFC 5280 to implementations of
+ * {@code CertStore} algorithms.
+ * <p>
+ * <b>Concurrent Access</b>
+ * <p>
+ * Unless otherwise specified, the methods defined in this class are not
+ * thread-safe. Multiple threads that need to access a single
+ * object concurrently should synchronize amongst themselves and
+ * provide the necessary locking. Multiple threads each manipulating
+ * separate objects need not synchronize.
+ *
+ * @since       1.9
+ * @see         CertStore
+ * @see         java.net.URI
+ */
+public final class URICertStoreParameters implements CertStoreParameters {
+
+    /**
+     * The uri, cannot be null
+     */
+    private final URI uri;
+
+    /*
+     * Hash code for this parameters.
+     */
+    private int myhash = -1;
+
+    /**
+     * Creates an instance of {@code URICertStoreParameters} with the
+     * specified URI.
+     *
+     * @param uri the URI which contains configuration information.
+     * @throws NullPointerException if {@code uri} is null
+     */
+    public URICertStoreParameters(URI uri) {
+        if (uri == null) {
+            throw new NullPointerException();
+        }
+        this.uri = uri;
+    }
+
+    /**
+     * Returns the URI used to construct this
+     * {@code URICertStoreParameters} object.
+     *
+     * @return the URI.
+     */
+    public URI getURI() {
+        return uri;
+    }
+
+    /**
+     * Returns a copy of this object. Changes to the copy will not affect
+     * the original and vice versa.
+     *
+     * @return the copy
+     */
+    @Override
+    public URICertStoreParameters clone() {
+        try {
+            return new URICertStoreParameters(uri);
+        } catch (NullPointerException e) {
+            /* Cannot happen */
+            throw new InternalError(e.toString(), e);
+        }
+    }
+
+    /**
+     * Returns a hash code value for this parameters object.
+     * The hash code is generated using the URI supplied at construction.
+     *
+     * @return a hash code value for this parameters.
+     */
+    @Override
+    public int hashCode() {
+        if (myhash == -1) {
+            myhash = uri.hashCode()*7;
+        }
+        return myhash;
+    }
+
+    /**
+     * Compares the specified object with this parameters object for equality.
+     * Two URICertStoreParameters are considered equal if the URIs used
+     * to construct them are equal.
+     *
+     * @param p the object to test for equality with this parameters.
+     *
+     * @return true if the specified object is equal to this parameters object.
+     */
+    @Override
+    public boolean equals(Object p) {
+        if (p == null || (!(p instanceof URICertStoreParameters))) {
+            return false;
+        }
+
+        if (p == this) {
+            return true;
+        }
+
+        URICertStoreParameters other = (URICertStoreParameters)p;
+        return uri.equals(other.getURI());
+    }
+
+    /**
+     * Returns a formatted string describing the parameters
+     * including the URI used to construct this object.
+     *
+     * @return a formatted string describing the parameters
+     */
+    @Override
+    public String toString() {
+        return "URICertStoreParameters: " + uri.toString();
+    }
+}
--- a/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java	Wed Jul 05 20:33:55 2017 +0200
@@ -64,6 +64,7 @@
 import java.util.function.Function;
 import java.util.function.IntBinaryOperator;
 import java.util.function.LongBinaryOperator;
+import java.util.function.Predicate;
 import java.util.function.ToDoubleBiFunction;
 import java.util.function.ToDoubleFunction;
 import java.util.function.ToIntBiFunction;
@@ -1619,6 +1620,45 @@
     }
 
     /**
+     * Helper method for EntrySet.removeIf
+     */
+    boolean removeEntryIf(Predicate<? super Entry<K, V>> function) {
+        if (function == null) throw new NullPointerException();
+        Node<K,V>[] t;
+        boolean removed = false;
+        if ((t = table) != null) {
+            Traverser<K,V> it = new Traverser<K,V>(t, t.length, 0, t.length);
+            for (Node<K,V> p; (p = it.advance()) != null; ) {
+                K k = p.key;
+                V v = p.val;
+                Map.Entry<K,V> e = new AbstractMap.SimpleImmutableEntry<>(k, v);
+                if (function.test(e) && replaceNode(k, null, v) != null)
+                    removed = true;
+            }
+        }
+        return removed;
+    }
+
+    /**
+     * Helper method for Values.removeIf
+     */
+    boolean removeValueIf(Predicate<? super  V> function) {
+        if (function == null) throw new NullPointerException();
+        Node<K,V>[] t;
+        boolean removed = false;
+        if ((t = table) != null) {
+            Traverser<K,V> it = new Traverser<K,V>(t, t.length, 0, t.length);
+            for (Node<K,V> p; (p = it.advance()) != null; ) {
+                K k = p.key;
+                V v = p.val;
+                if (function.test(v) && replaceNode(k, null, v) != null)
+                    removed = true;
+            }
+        }
+        return removed;
+    }
+
+    /**
      * If the specified key is not already associated with a value,
      * attempts to compute its value using the given mapping function
      * and enters it into this map unless {@code null}.  The entire
@@ -4690,6 +4730,10 @@
             throw new UnsupportedOperationException();
         }
 
+        public boolean removeIf(Predicate<? super V> filter) {
+            return map.removeValueIf(filter);
+        }
+
         public Spliterator<V> spliterator() {
             Node<K,V>[] t;
             ConcurrentHashMap<K,V> m = map;
@@ -4759,6 +4803,10 @@
             return added;
         }
 
+        public boolean removeIf(Predicate<? super Entry<K, V>> filter) {
+            return map.removeEntryIf(filter);
+        }
+
         public final int hashCode() {
             int h = 0;
             Node<K,V>[] t;
--- a/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentMap.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentMap.java	Wed Jul 05 20:33:55 2017 +0200
@@ -34,6 +34,7 @@
  */
 
 package java.util.concurrent;
+
 import java.util.Map;
 import java.util.Objects;
 import java.util.function.BiConsumer;
@@ -44,6 +45,14 @@
  * A {@link java.util.Map} providing thread safety and atomicity
  * guarantees.
  *
+ * <p>To maintain the specified guarantees, default implementations of
+ * methods including {@link #putIfAbsent} inherited from {@link Map}
+ * must be overridden by implementations of this interface. Similarly,
+ * implementations of the collections returned by methods {@link
+ * #keySet}, {@link #values}, and {@link #entrySet} must override
+ * methods such as {@code removeIf} when necessary to
+ * preserve atomicity guarantees.
+ *
  * <p>Memory consistency effects: As with other concurrent
  * collections, actions in a thread prior to placing an object into a
  * {@code ConcurrentMap} as a key or value
@@ -60,7 +69,7 @@
  * @param <K> the type of keys maintained by this map
  * @param <V> the type of mapped values
  */
-public interface ConcurrentMap<K, V> extends Map<K, V> {
+public interface ConcurrentMap<K,V> extends Map<K,V> {
 
     /**
      * {@inheritDoc}
@@ -86,9 +95,9 @@
      * @implSpec The default implementation is equivalent to, for this
      * {@code map}:
      * <pre> {@code
-     * for ((Map.Entry<K, V> entry : map.entrySet())
-     *     action.accept(entry.getKey(), entry.getValue());
-     * }</pre>
+     * for (Map.Entry<K,V> entry : map.entrySet()) {
+     *   action.accept(entry.getKey(), entry.getValue());
+     * }}</pre>
      *
      * @implNote The default implementation assumes that
      * {@code IllegalStateException} thrown by {@code getKey()} or
@@ -101,13 +110,13 @@
     @Override
     default void forEach(BiConsumer<? super K, ? super V> action) {
         Objects.requireNonNull(action);
-        for (Map.Entry<K, V> entry : entrySet()) {
+        for (Map.Entry<K,V> entry : entrySet()) {
             K k;
             V v;
             try {
                 k = entry.getKey();
                 v = entry.getValue();
-            } catch(IllegalStateException ise) {
+            } catch (IllegalStateException ise) {
                 // this usually means the entry is no longer in the map.
                 continue;
             }
@@ -117,14 +126,13 @@
 
     /**
      * If the specified key is not already associated
-     * with a value, associate it with the given value.
-     * This is equivalent to
-     *  <pre> {@code
+     * with a value, associates it with the given value.
+     * This is equivalent to, for this {@code map}:
+     * <pre> {@code
      * if (!map.containsKey(key))
      *   return map.put(key, value);
      * else
-     *   return map.get(key);
-     * }</pre>
+     *   return map.get(key);}</pre>
      *
      * except that the action is performed atomically.
      *
@@ -147,18 +155,19 @@
      * @throws IllegalArgumentException if some property of the specified key
      *         or value prevents it from being stored in this map
      */
-     V putIfAbsent(K key, V value);
+    V putIfAbsent(K key, V value);
 
     /**
      * Removes the entry for a key only if currently mapped to a given value.
-     * This is equivalent to
-     *  <pre> {@code
-     * if (map.containsKey(key) && Objects.equals(map.get(key), value)) {
+     * This is equivalent to, for this {@code map}:
+     * <pre> {@code
+     * if (map.containsKey(key)
+     *     && Objects.equals(map.get(key), value)) {
      *   map.remove(key);
      *   return true;
-     * } else
+     * } else {
      *   return false;
-     * }</pre>
+     * }}</pre>
      *
      * except that the action is performed atomically.
      *
@@ -181,14 +190,15 @@
 
     /**
      * Replaces the entry for a key only if currently mapped to a given value.
-     * This is equivalent to
-     *  <pre> {@code
-     * if (map.containsKey(key) && Objects.equals(map.get(key), oldValue)) {
+     * This is equivalent to, for this {@code map}:
+     * <pre> {@code
+     * if (map.containsKey(key)
+     *     && Objects.equals(map.get(key), oldValue)) {
      *   map.put(key, newValue);
      *   return true;
-     * } else
+     * } else {
      *   return false;
-     * }</pre>
+     * }}</pre>
      *
      * except that the action is performed atomically.
      *
@@ -212,13 +222,12 @@
 
     /**
      * Replaces the entry for a key only if currently mapped to some value.
-     * This is equivalent to
-     *  <pre> {@code
-     * if (map.containsKey(key)) {
+     * This is equivalent to, for this {@code map}:
+     * <pre> {@code
+     * if (map.containsKey(key))
      *   return map.put(key, value);
-     * } else
-     *   return null;
-     * }</pre>
+     * else
+     *   return null;}</pre>
      *
      * except that the action is performed atomically.
      *
@@ -249,12 +258,14 @@
      * @implSpec
      * <p>The default implementation is equivalent to, for this {@code map}:
      * <pre> {@code
-     * for ((Map.Entry<K, V> entry : map.entrySet())
-     *     do {
-     *        K k = entry.getKey();
-     *        V v = entry.getValue();
-     *     } while(!replace(k, v, function.apply(k, v)));
-     * }</pre>
+     * for (Map.Entry<K,V> entry : map.entrySet()) {
+     *   K k;
+     *   V v;
+     *   do {
+     *     k = entry.getKey();
+     *     v = entry.getValue();
+     *   } while (!map.replace(k, v, function.apply(k, v)));
+     * }}</pre>
      *
      * The default implementation may retry these steps when multiple
      * threads attempt updates including potentially calling the function
@@ -275,7 +286,7 @@
     default void replaceAll(BiFunction<? super K, ? super V, ? extends V> function) {
         Objects.requireNonNull(function);
         forEach((k,v) -> {
-            while(!replace(k, v, function.apply(k, v))) {
+            while (!replace(k, v, function.apply(k, v))) {
                 // v changed or k is gone
                 if ( (v = get(k)) == null) {
                     // k is no longer in the map.
@@ -295,11 +306,10 @@
      *
      * <pre> {@code
      * if (map.get(key) == null) {
-     *     V newValue = mappingFunction.apply(key);
-     *     if (newValue != null)
-     *         return map.putIfAbsent(key, newValue);
-     * }
-     * }</pre>
+     *   V newValue = mappingFunction.apply(key);
+     *   if (newValue != null)
+     *     return map.putIfAbsent(key, newValue);
+     * }}</pre>
      *
      * The default implementation may retry these steps when multiple
      * threads attempt updates including potentially calling the mapping
@@ -331,18 +341,17 @@
      * @implSpec
      * The default implementation is equivalent to performing the following
      * steps for this {@code map}, then returning the current value or
-     * {@code null} if now absent. :
+     * {@code null} if now absent:
      *
      * <pre> {@code
      * if (map.get(key) != null) {
-     *     V oldValue = map.get(key);
-     *     V newValue = remappingFunction.apply(key, oldValue);
-     *     if (newValue != null)
-     *         map.replace(key, oldValue, newValue);
-     *     else
-     *         map.remove(key, oldValue);
-     * }
-     * }</pre>
+     *   V oldValue = map.get(key);
+     *   V newValue = remappingFunction.apply(key, oldValue);
+     *   if (newValue != null)
+     *     map.replace(key, oldValue, newValue);
+     *   else
+     *     map.remove(key, oldValue);
+     * }}</pre>
      *
      * The default implementation may retry these steps when multiple threads
      * attempt updates including potentially calling the remapping function
@@ -363,13 +372,13 @@
             BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
         Objects.requireNonNull(remappingFunction);
         V oldValue;
-        while((oldValue = get(key)) != null) {
+        while ((oldValue = get(key)) != null) {
             V newValue = remappingFunction.apply(key, oldValue);
             if (newValue != null) {
                 if (replace(key, oldValue, newValue))
                     return newValue;
             } else if (remove(key, oldValue))
-               return null;
+                return null;
         }
         return oldValue;
     }
@@ -386,17 +395,16 @@
      * V oldValue = map.get(key);
      * V newValue = remappingFunction.apply(key, oldValue);
      * if (oldValue != null ) {
-     *    if (newValue != null)
-     *       map.replace(key, oldValue, newValue);
-     *    else
-     *       map.remove(key, oldValue);
+     *   if (newValue != null)
+     *     map.replace(key, oldValue, newValue);
+     *   else
+     *     map.remove(key, oldValue);
      * } else {
-     *    if (newValue != null)
-     *       map.putIfAbsent(key, newValue);
-     *    else
-     *       return null;
-     * }
-     * }</pre>
+     *   if (newValue != null)
+     *     map.putIfAbsent(key, newValue);
+     *   else
+     *     return null;
+     * }}</pre>
      *
      * The default implementation may retry these steps when multiple
      * threads attempt updates including potentially calling the remapping
@@ -417,7 +425,7 @@
             BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
         Objects.requireNonNull(remappingFunction);
         V oldValue = get(key);
-        for(;;) {
+        for (;;) {
             V newValue = remappingFunction.apply(key, oldValue);
             if (newValue == null) {
                 // delete mapping
@@ -458,7 +466,6 @@
         }
     }
 
-
     /**
      * {@inheritDoc}
      *
@@ -470,12 +477,11 @@
      * <pre> {@code
      * V oldValue = map.get(key);
      * V newValue = (oldValue == null) ? value :
-     *              remappingFunction.apply(oldValue, value);
+     *     remappingFunction.apply(oldValue, value);
      * if (newValue == null)
-     *     map.remove(key);
+     *   map.remove(key);
      * else
-     *     map.put(key, newValue);
-     * }</pre>
+     *   map.put(key, newValue);}</pre>
      *
      * <p>The default implementation may retry these steps when multiple
      * threads attempt updates including potentially calling the remapping
--- a/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentSkipListMap.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentSkipListMap.java	Wed Jul 05 20:33:55 2017 +0200
@@ -58,6 +58,7 @@
 import java.util.function.Consumer;
 import java.util.function.BiConsumer;
 import java.util.function.Function;
+import java.util.function.Predicate;
 
 /**
  * A scalable concurrent {@link ConcurrentNavigableMap} implementation.
@@ -2492,6 +2493,22 @@
             else
                 return (Spliterator<E>)((SubMap<?,E>)m).valueIterator();
         }
+        public boolean removeIf(Predicate<? super E> filter) {
+            if (filter == null) throw new NullPointerException();
+            if (m instanceof ConcurrentSkipListMap)
+                return ((ConcurrentSkipListMap<?,E>)m).removeValueIf(filter);
+            // else use iterator
+            @SuppressWarnings("unchecked") Iterator<Map.Entry<Object,E>> it =
+                    ((SubMap<Object,E>)m).entryIterator();
+            boolean removed = false;
+            while (it.hasNext()) {
+                Map.Entry<Object,E> e = it.next();
+                E v = e.getValue();
+                if (filter.test(v) && m.remove(e.getKey(), v))
+                    removed = true;
+            }
+            return removed;
+        }
     }
 
     static final class EntrySet<K1,V1> extends AbstractSet<Map.Entry<K1,V1>> {
@@ -2554,6 +2571,20 @@
                 return (Spliterator<Map.Entry<K1,V1>>)
                     ((SubMap<K1,V1>)m).entryIterator();
         }
+        public boolean removeIf(Predicate<? super Entry<K1, V1>> filter) {
+            if (filter == null) throw new NullPointerException();
+            if (m instanceof ConcurrentSkipListMap)
+                return ((ConcurrentSkipListMap<K1,V1>)m).removeEntryIf(filter);
+            // else use iterator
+            Iterator<Map.Entry<K1,V1>> it = ((SubMap<K1,V1>)m).entryIterator();
+            boolean removed = false;
+            while (it.hasNext()) {
+                Map.Entry<K1,V1> e = it.next();
+                if (filter.test(e) && m.remove(e.getKey(), e.getValue()))
+                    removed = true;
+            }
+            return removed;
+        }
     }
 
     /**
@@ -3267,6 +3298,41 @@
     }
 
     /**
+     * Helper method for EntrySet.removeIf
+     */
+    boolean removeEntryIf(Predicate<? super Entry<K, V>> function) {
+        if (function == null) throw new NullPointerException();
+        boolean removed = false;
+        for (Node<K,V> n = findFirst(); n != null; n = n.next) {
+            V v;
+            if ((v = n.getValidValue()) != null) {
+                K k = n.key;
+                Map.Entry<K,V> e = new AbstractMap.SimpleImmutableEntry<>(k, v);
+                if (function.test(e) && remove(k, v))
+                    removed = true;
+            }
+        }
+        return removed;
+    }
+
+    /**
+     * Helper method for Values.removeIf
+     */
+    boolean removeValueIf(Predicate<? super V> function) {
+        if (function == null) throw new NullPointerException();
+        boolean removed = false;
+        for (Node<K,V> n = findFirst(); n != null; n = n.next) {
+            V v;
+            if ((v = n.getValidValue()) != null) {
+                K k = n.key;
+                if (function.test(v) && remove(k, v))
+                    removed = true;
+            }
+        }
+        return removed;
+    }
+
+    /**
      * Base class providing common structure for Spliterators.
      * (Although not all that much common functionality; as usual for
      * view classes, details annoyingly vary in key, value, and entry
--- a/jdk/src/java.base/share/classes/javax/security/auth/Subject.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/Subject.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1522,17 +1522,20 @@
             }
         }
 
+        @Override
         public int size() {
             return set.size();
         }
 
+        @Override
         public Iterator<T> iterator() {
             return set.iterator();
         }
 
+        @Override
         public boolean add(T o) {
 
-            if (!o.getClass().isAssignableFrom(c)) {
+            if (!c.isAssignableFrom(o.getClass())) {
                 MessageFormat form = new MessageFormat(ResourcesMgr.getString
                         ("attempting.to.add.an.object.which.is.not.an.instance.of.class"));
                 Object[] source = {c.toString()};
--- a/jdk/src/java.base/share/classes/sun/security/provider/SunEntries.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/security/provider/SunEntries.java	Wed Jul 05 20:33:55 2017 +0200
@@ -67,10 +67,6 @@
  *   in RFC 5280. The ValidationAlgorithm attribute notes the
  *   specification that this provider implements.
  *
- * - LDAP is the CertStore type for LDAP repositories. The
- *   LDAPSchema attribute notes the specification defining the
- *   schema that this provider uses to find certificates and CRLs.
- *
  * - JavaPolicy is the default file-based Policy type.
  *
  * - JavaLoginConfig is the default file-based LoginModule Configuration type.
@@ -275,9 +271,6 @@
         /*
          * CertStores
          */
-        map.put("CertStore.LDAP",
-            "sun.security.provider.certpath.ldap.LDAPCertStore");
-        map.put("CertStore.LDAP LDAPSchema", "RFC2587");
         map.put("CertStore.Collection",
             "sun.security.provider.certpath.CollectionCertStore");
         map.put("CertStore.com.sun.security.IndexedCollection",
@@ -310,7 +303,6 @@
         map.put("KeyStore.JKS ImplementedIn", "Software");
         map.put("CertPathValidator.PKIX ImplementedIn", "Software");
         map.put("CertPathBuilder.PKIX ImplementedIn", "Software");
-        map.put("CertStore.LDAP ImplementedIn", "Software");
         map.put("CertStore.Collection ImplementedIn", "Software");
         map.put("CertStore.com.sun.security.IndexedCollection ImplementedIn",
             "Software");
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/CertStoreHelper.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.security.provider.certpath;
-
-import java.net.URI;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.security.AccessController;
-import java.security.NoSuchAlgorithmException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.security.cert.CertStore;
-import java.security.cert.CertStoreException;
-import java.security.cert.X509CertSelector;
-import java.security.cert.X509CRLSelector;
-import javax.security.auth.x500.X500Principal;
-import java.io.IOException;
-
-import sun.security.util.Cache;
-
-/**
- * Helper used by URICertStore and others when delegating to another CertStore
- * to fetch certs and CRLs.
- */
-
-public abstract class CertStoreHelper {
-
-    private static final int NUM_TYPES = 2;
-    private final static Map<String,String> classMap = new HashMap<>(NUM_TYPES);
-    static {
-        classMap.put(
-            "LDAP",
-            "sun.security.provider.certpath.ldap.LDAPCertStoreHelper");
-        classMap.put(
-            "SSLServer",
-            "sun.security.provider.certpath.ssl.SSLServerCertStoreHelper");
-    };
-    private static Cache<String, CertStoreHelper> cache
-        = Cache.newSoftMemoryCache(NUM_TYPES);
-
-    public static CertStoreHelper getInstance(final String type)
-        throws NoSuchAlgorithmException
-    {
-        CertStoreHelper helper = cache.get(type);
-        if (helper != null) {
-            return helper;
-        }
-        final String cl = classMap.get(type);
-        if (cl == null) {
-            throw new NoSuchAlgorithmException(type + " not available");
-        }
-        try {
-            helper = AccessController.doPrivileged(
-                new PrivilegedExceptionAction<CertStoreHelper>() {
-                    public CertStoreHelper run() throws ClassNotFoundException {
-                        try {
-                            Class<?> c = Class.forName(cl, true, null);
-                            CertStoreHelper csh
-                                = (CertStoreHelper)c.newInstance();
-                            cache.put(type, csh);
-                            return csh;
-                        } catch (InstantiationException |
-                                 IllegalAccessException e) {
-                            throw new AssertionError(e);
-                        }
-                    }
-            });
-            return helper;
-        } catch (PrivilegedActionException e) {
-            throw new NoSuchAlgorithmException(type + " not available",
-                                               e.getException());
-        }
-    }
-
-    static boolean isCausedByNetworkIssue(String type, CertStoreException cse) {
-        switch (type) {
-            case "LDAP":
-            case "SSLServer":
-                try {
-                    CertStoreHelper csh = CertStoreHelper.getInstance(type);
-                    return csh.isCausedByNetworkIssue(cse);
-                } catch (NoSuchAlgorithmException nsae) {
-                    return false;
-                }
-            case "URI":
-                Throwable t = cse.getCause();
-                return (t != null && t instanceof IOException);
-            default:
-                // we don't know about any other remote CertStore types
-                return false;
-        }
-    }
-
-    /**
-     * Returns a CertStore using the given URI as parameters.
-     */
-    public abstract CertStore getCertStore(URI uri)
-        throws NoSuchAlgorithmException, InvalidAlgorithmParameterException;
-
-    /**
-     * Wraps an existing X509CertSelector when needing to avoid DN matching
-     * issues.
-     */
-    public abstract X509CertSelector wrap(X509CertSelector selector,
-                          X500Principal certSubject,
-                          String dn)
-        throws IOException;
-
-    /**
-     * Wraps an existing X509CRLSelector when needing to avoid DN matching
-     * issues.
-     */
-    public abstract X509CRLSelector wrap(X509CRLSelector selector,
-                         Collection<X500Principal> certIssuers,
-                         String dn)
-        throws IOException;
-
-    /**
-     * Returns true if the cause of the CertStoreException is a network
-     * related issue.
-     */
-    public abstract boolean isCausedByNetworkIssue(CertStoreException e);
-}
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/RevocationChecker.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/security/provider/certpath/RevocationChecker.java	Wed Jul 05 20:33:55 2017 +0200
@@ -466,6 +466,34 @@
                   stackedCerts, params.trustAnchors());
     }
 
+    static boolean isCausedByNetworkIssue(String type, CertStoreException cse) {
+        boolean result;
+        Throwable t = cse.getCause();
+
+        switch (type) {
+            case "LDAP":
+                if (t != null) {
+                    // These two exception classes are inside java.naming module
+                    String cn = t.getClass().getName();
+                    result = (cn.equals("javax.naming.ServiceUnavailableException") ||
+                        cn.equals("javax.naming.CommunicationException"));
+                } else {
+                    result = false;
+                }
+                break;
+            case "SSLServer":
+                result = (t != null && t instanceof IOException);
+                break;
+            case "URI":
+                result = (t != null && t instanceof IOException);
+                break;
+            default:
+                // we don't know about any other remote CertStore types
+                return false;
+        }
+        return result;
+    }
+
     private void checkCRLs(X509Certificate cert, PublicKey prevKey,
                            X509Certificate prevCert, boolean signFlag,
                            boolean allowSeparateKey,
@@ -510,7 +538,7 @@
                                   "CertStoreException: " + e.getMessage());
                 }
                 if (networkFailureException == null &&
-                    CertStoreHelper.isCausedByNetworkIssue(store.getType(),e)) {
+                    isCausedByNetworkIssue(store.getType(),e)) {
                     // save this exception, we may need to throw it later
                     networkFailureException = new CertPathValidatorException(
                         "Unable to determine revocation status due to " +
@@ -557,8 +585,7 @@
             } catch (CertStoreException e) {
                 if (e instanceof CertStoreTypeException) {
                     CertStoreTypeException cste = (CertStoreTypeException)e;
-                    if (CertStoreHelper.isCausedByNetworkIssue(cste.getType(),
-                                                               e)) {
+                    if (isCausedByNetworkIssue(cste.getType(), e)) {
                         throw new CertPathValidatorException(
                             "Unable to determine revocation status due to " +
                             "network error", e, null, -1,
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/URICertStore.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/security/provider/certpath/URICertStore.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -42,6 +42,7 @@
 import java.security.cert.CertStoreSpi;
 import java.security.cert.CRLException;
 import java.security.cert.CRLSelector;
+import java.security.cert.URICertStoreParameters;
 import java.security.cert.X509Certificate;
 import java.security.cert.X509CertSelector;
 import java.security.cert.X509CRL;
@@ -118,9 +119,7 @@
 
     // true if URI is ldap
     private boolean ldap = false;
-    private CertStoreHelper ldapHelper;
     private CertStore ldapCertStore;
-    private String ldapPath;
 
     // Default maximum connect timeout in milliseconds (15 seconds)
     // allowed when downloading CRLs
@@ -165,13 +164,8 @@
         // if ldap URI, use an LDAPCertStore to fetch certs and CRLs
         if (uri.getScheme().toLowerCase(Locale.ENGLISH).equals("ldap")) {
             ldap = true;
-            ldapHelper = CertStoreHelper.getInstance("LDAP");
-            ldapCertStore = ldapHelper.getCertStore(uri);
-            ldapPath = uri.getPath();
-            // strip off leading '/'
-            if (ldapPath.charAt(0) == '/') {
-                ldapPath = ldapPath.substring(1);
-            }
+            URICertStoreParameters lparams = new URICertStoreParameters(uri);
+            ldapCertStore = CertStore.getInstance("LDAP", lparams);
         }
         try {
             factory = CertificateFactory.getInstance("X.509");
@@ -246,20 +240,10 @@
     public synchronized Collection<X509Certificate> engineGetCertificates
         (CertSelector selector) throws CertStoreException {
 
-        // if ldap URI we wrap the CertSelector in an LDAPCertSelector to
-        // avoid LDAP DN matching issues (see LDAPCertSelector for more info)
         if (ldap) {
-            X509CertSelector xsel = (X509CertSelector) selector;
-            try {
-                xsel = ldapHelper.wrap(xsel, xsel.getSubject(), ldapPath);
-            } catch (IOException ioe) {
-                throw new CertStoreException(ioe);
-            }
-            // Fetch the certificates via LDAP. LDAPCertStore has its own
             // caching mechanism, see the class description for more info.
-            // Safe cast since xsel is an X509 certificate selector.
             return (Collection<X509Certificate>)
-                ldapCertStore.getCertificates(xsel);
+                ldapCertStore.getCertificates(selector);
         }
 
         // Return the Certificates for this entry. It returns the cached value
@@ -356,20 +340,11 @@
     public synchronized Collection<X509CRL> engineGetCRLs(CRLSelector selector)
         throws CertStoreException {
 
-        // if ldap URI we wrap the CRLSelector in an LDAPCRLSelector to
-        // avoid LDAP DN matching issues (see LDAPCRLSelector for more info)
         if (ldap) {
-            X509CRLSelector xsel = (X509CRLSelector) selector;
-            try {
-                xsel = ldapHelper.wrap(xsel, null, ldapPath);
-            } catch (IOException ioe) {
-                throw new CertStoreException(ioe);
-            }
             // Fetch the CRLs via LDAP. LDAPCertStore has its own
             // caching mechanism, see the class description for more info.
-            // Safe cast since xsel is an X509 certificate selector.
             try {
-                return (Collection<X509CRL>) ldapCertStore.getCRLs(xsel);
+                return (Collection<X509CRL>) ldapCertStore.getCRLs(selector);
             } catch (CertStoreException cse) {
                 throw new PKIX.CertStoreTypeException("LDAP", cse);
             }
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/ssl/SSLServerCertStore.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/security/provider/certpath/ssl/SSLServerCertStore.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -153,7 +153,7 @@
         throw new UnsupportedOperationException();
     }
 
-    static CertStore getInstance(URI uri)
+    public static CertStore getInstance(URI uri)
         throws InvalidAlgorithmParameterException
     {
         return new CS(new SSLServerCertStore(uri), null, "SSLServer", null);
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/ssl/SSLServerCertStoreHelper.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.security.provider.certpath.ssl;
-
-import java.io.IOException;
-import java.net.URI;
-import java.security.NoSuchAlgorithmException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.cert.CertStore;
-import java.security.cert.CertStoreException;
-import java.security.cert.X509CertSelector;
-import java.security.cert.X509CRLSelector;
-import java.util.Collection;
-import javax.security.auth.x500.X500Principal;
-
-import sun.security.provider.certpath.CertStoreHelper;
-
-/**
- * SSL implementation of CertStoreHelper.
- */
-public final class SSLServerCertStoreHelper extends CertStoreHelper {
-
-    @Override
-    public CertStore getCertStore(URI uri)
-        throws NoSuchAlgorithmException, InvalidAlgorithmParameterException
-    {
-        return SSLServerCertStore.getInstance(uri);
-    }
-
-    @Override
-    public X509CertSelector wrap(X509CertSelector selector,
-                                 X500Principal certSubject,
-                                 String ldapDN)
-        throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public X509CRLSelector wrap(X509CRLSelector selector,
-                                Collection<X500Principal> certIssuers,
-                                String ldapDN)
-        throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isCausedByNetworkIssue(CertStoreException e) {
-        Throwable t = e.getCause();
-        return (t != null && t instanceof IOException);
-    }
-}
--- a/jdk/src/java.base/share/classes/sun/security/tools/keytool/Main.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/security/tools/keytool/Main.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -46,6 +46,9 @@
 import java.security.cert.CRL;
 import java.security.cert.X509Certificate;
 import java.security.cert.CertificateException;
+import java.security.cert.URICertStoreParameters;
+
+
 import java.text.Collator;
 import java.text.MessageFormat;
 import java.util.*;
@@ -69,7 +72,7 @@
 import sun.security.pkcs10.PKCS10;
 import sun.security.pkcs10.PKCS10Attribute;
 import sun.security.provider.X509Factory;
-import sun.security.provider.certpath.CertStoreHelper;
+import sun.security.provider.certpath.ssl.SSLServerCertStore;
 import sun.security.util.Password;
 import javax.crypto.KeyGenerator;
 import javax.crypto.SecretKey;
@@ -2208,14 +2211,10 @@
                 }
             }
         } else {    // must be LDAP, and uri is not null
-            // Lazily load LDAPCertStoreHelper if present
-            CertStoreHelper helper = CertStoreHelper.getInstance("LDAP");
-            String path = uri.getPath();
-            if (path.charAt(0) == '/') path = path.substring(1);
-            CertStore s = helper.getCertStore(uri);
-            X509CRLSelector sel =
-                    helper.wrap(new X509CRLSelector(), null, path);
-            return s.getCRLs(sel);
+            URICertStoreParameters params =
+                new URICertStoreParameters(uri);
+            CertStore s = CertStore.getInstance("LDAP", params);
+            return s.getCRLs(new X509CRLSelector());
         }
     }
 
@@ -2463,9 +2462,7 @@
                 out.println(rb.getString("Not.a.signed.jar.file"));
             }
         } else if (sslserver != null) {
-            // Lazily load SSLCertStoreHelper if present
-            CertStoreHelper helper = CertStoreHelper.getInstance("SSLServer");
-            CertStore cs = helper.getCertStore(new URI("https://" + sslserver));
+            CertStore cs = SSLServerCertStore.getInstance(new URI("https://" + sslserver));
             Collection<? extends Certificate> chain;
             try {
                 chain = cs.getCertificates(null);
--- a/jdk/src/java.base/share/conf/security/java.security	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/conf/security/java.security	Wed Jul 05 20:33:55 2017 +0200
@@ -78,6 +78,7 @@
 security.provider.tbd=com.sun.security.sasl.Provider
 security.provider.tbd=org.jcp.xml.dsig.internal.dom.XMLDSigRI
 security.provider.tbd=sun.security.smartcardio.SunPCSC
+security.provider.tbd=sun.security.provider.certpath.ldap.JdkLDAP
 #ifdef windows
 security.provider.tbd=sun.security.mscapi.SunMSCAPI
 #endif
@@ -156,7 +157,8 @@
 
 #
 # Class to instantiate as the system Policy. This is the name of the class
-# that will be used as the Policy object.
+# that will be used as the Policy object. The system class loader is used to
+# locate this class.
 #
 policy.provider=sun.security.provider.PolicyFile
 
--- a/jdk/src/java.base/share/native/libjli/java.h	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/native/libjli/java.h	Wed Jul 05 20:33:55 2017 +0200
@@ -194,7 +194,7 @@
  * For MacOSX and Windows/Unix compatibility we require these
  * entry points, some of them may be stubbed out on Windows/Unixes.
  */
-void     PostJVMInit(JNIEnv *env, jstring mainClass, JavaVM *vm);
+void     PostJVMInit(JNIEnv *env, jclass mainClass, JavaVM *vm);
 void     ShowSplashScreen();
 void     RegisterThread();
 /*
--- a/jdk/src/java.base/share/native/libzip/zip_util.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/native/libzip/zip_util.c	Wed Jul 05 20:33:55 2017 +0200
@@ -1206,7 +1206,7 @@
         }
 
         /* Slash is already there? */
-        if (name[ulen-1] == '/') {
+        if (ulen > 0 && name[ulen - 1] == '/') {
             break;
         }
 
--- a/jdk/src/java.base/unix/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/unix/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2014 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
--- a/jdk/src/java.base/unix/native/libjli/java_md_solinux.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/unix/native/libjli/java_md_solinux.c	Wed Jul 05 20:33:55 2017 +0200
@@ -938,7 +938,7 @@
 }
 
 void
-PostJVMInit(JNIEnv *env, jstring mainClass, JavaVM *vm)
+PostJVMInit(JNIEnv *env, jclass mainClass, JavaVM *vm)
 {
     // stubbed out for windows and *nixes.
 }
--- a/jdk/src/java.base/windows/native/libjli/java_md.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/windows/native/libjli/java_md.c	Wed Jul 05 20:33:55 2017 +0200
@@ -970,7 +970,7 @@
 }
 
 void
-PostJVMInit(JNIEnv *env, jstring mainClass, JavaVM *vm)
+PostJVMInit(JNIEnv *env, jclass mainClass, JavaVM *vm)
 {
     // stubbed out for windows and *nixes.
 }
--- a/jdk/src/java.desktop/macosx/classes/com/apple/eawt/Application.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/eawt/Application.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,14 +25,18 @@
 
 package com.apple.eawt;
 
-import java.awt.*;
-import java.awt.peer.*;
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.PopupMenu;
+import java.awt.Toolkit;
+import java.awt.Window;
 import java.beans.Beans;
 
 import javax.swing.JMenuBar;
 
-import sun.lwawt.*;
-import sun.lwawt.macosx.*;
+import sun.awt.AWTAccessor;
+import sun.lwawt.LWWindowPeer;
+import sun.lwawt.macosx.CPlatformWindow;
 
 /**
  * The <code>Application</code> class allows you to integrate your Java application with the native Mac OS X environment.
@@ -385,10 +389,8 @@
      *
      * @since Java for Mac OS X 10.7 Update 1
      */
-    @SuppressWarnings("deprecation")
     public void requestToggleFullScreen(final Window window) {
-        final ComponentPeer peer = window.getPeer();
-
+        final Object peer = AWTAccessor.getComponentAccessor().getPeer(window);
         if (!(peer instanceof LWWindowPeer)) return;
         Object platformWindow = ((LWWindowPeer) peer).getPlatformWindow();
         if (!(platformWindow instanceof CPlatformWindow)) return;
--- a/jdk/src/java.desktop/macosx/classes/com/apple/eawt/_AppDockIconHandler.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/eawt/_AppDockIconHandler.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,6 +28,7 @@
 import java.awt.*;
 import java.lang.reflect.*;
 
+import sun.awt.AWTAccessor;
 import sun.lwawt.macosx.*;
 import sun.lwawt.macosx.CImage.Creator;
 
@@ -41,7 +42,6 @@
 
     _AppDockIconHandler() { }
 
-    @SuppressWarnings("deprecation")
     public void setDockMenu(final PopupMenu menu) {
         fDockMenu = menu;
 
@@ -61,8 +61,8 @@
 
         // instantiate the menu peer and set the native fDockMenu ivar
         menu.addNotify();
-        final long nsMenuPtr = ((CMenu)fDockMenu.getPeer()).getNativeMenu();
-        nativeSetDockMenu(nsMenuPtr);
+        CMenu peer = AWTAccessor.getMenuComponentAccessor().getPeer(fDockMenu);
+        nativeSetDockMenu(peer.getNativeMenu());
     }
 
     public PopupMenu getDockMenu() {
--- a/jdk/src/java.desktop/macosx/classes/com/apple/eawt/_AppMenuBarHandler.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/eawt/_AppMenuBarHandler.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,6 +32,7 @@
 import javax.swing.plaf.MenuBarUI;
 
 import com.apple.laf.ScreenMenuBar;
+import sun.awt.AWTAccessor;
 import sun.lwawt.macosx.CMenuBar;
 
 import com.apple.laf.AquaMenuBarUI;
@@ -49,7 +50,10 @@
     }
 
     // callback from the native delegate -init function
-    private static void initMenuStates(final boolean aboutMenuItemVisible, final boolean aboutMenuItemEnabled, final boolean prefsMenuItemVisible, final boolean prefsMenuItemEnabled) {
+    private static void initMenuStates(final boolean aboutMenuItemVisible,
+                                       final boolean aboutMenuItemEnabled,
+                                       final boolean prefsMenuItemVisible,
+                                       final boolean prefsMenuItemEnabled) {
         synchronized (instance) {
             instance.aboutMenuItemVisible = aboutMenuItemVisible;
             instance.aboutMenuItemEnabled = aboutMenuItemEnabled;
@@ -92,7 +96,6 @@
         return (frame.getExtendedState() & Frame.ICONIFIED) != 0;
     }
 
-    @SuppressWarnings("deprecation")
     static void installDefaultMenuBar(final JMenuBar menuBar) {
         if (menuBar == null) {
             // intentionally clearing the default menu
@@ -114,7 +117,7 @@
         }
 
         screenMenuBar.addNotify();
-        final MenuComponentPeer peer = screenMenuBar.getPeer();
+        final Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(screenMenuBar);
         if (!(peer instanceof CMenuBar)) {
             // such a thing should not be possible
             throw new IllegalStateException("Unable to determine native menu bar from provided JMenuBar");
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaComboBoxUI.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaComboBoxUI.java	Wed Jul 05 20:33:55 2017 +0200
@@ -152,20 +152,6 @@
         }
 
         @Override
-        public void focusGained(final FocusEvent e) {
-            if (arrowButton != null) {
-                arrowButton.repaint();
-            }
-        }
-
-        @Override
-        public void focusLost(final FocusEvent e) {
-            if (arrowButton != null) {
-                arrowButton.repaint();
-            }
-        }
-
-        @Override
         public void changedUpdate(final DocumentEvent e) {
             editorTextChanged();
         }
@@ -252,6 +238,16 @@
      */
     protected FocusListener createFocusListener() {
         return new BasicComboBoxUI.FocusHandler() {
+            @Override
+            public void focusGained(FocusEvent e) {
+                super.focusGained(e);
+
+                if (arrowButton != null) {
+                    arrowButton.repaint();
+                }
+            }
+
+            @Override
             public void focusLost(final FocusEvent e) {
                 hasFocus = false;
                 if (!e.isTemporary()) {
@@ -264,6 +260,10 @@
                 if (ac != null) {
                     ac.firePropertyChange(AccessibleContext.ACCESSIBLE_STATE_PROPERTY, AccessibleState.FOCUSED, null);
                 }
+
+                if (arrowButton != null) {
+                    arrowButton.repaint();
+                }
             }
         };
     }
@@ -438,6 +438,7 @@
             if (editor != null) {
                 final Rectangle editorRect = rectangleForCurrentValue();
                 editorRect.width += 4;
+                editorRect.height += 1;
                 editor.setBounds(editorRect);
             }
         }
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaTextFieldBorder.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaTextFieldBorder.java	Wed Jul 05 20:33:55 2017 +0200
@@ -124,7 +124,7 @@
 
     public Insets getBorderInsets(final Component c) {
         if (!(c instanceof JTextComponent) || c.isOpaque()) return new InsetsUIResource(3, 7, 3, 7);
-        return new InsetsUIResource(6, 7, 6, 7);
+        return new InsetsUIResource(5, 5, 5, 5);
     }
 
     protected static State getStateFor(final JTextComponent jc) {
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenu.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenu.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,11 +27,11 @@
 
 import java.awt.*;
 import java.awt.event.*;
-import java.awt.peer.MenuComponentPeer;
 import java.util.Hashtable;
 
 import javax.swing.*;
 
+import sun.awt.AWTAccessor;
 import sun.awt.SunToolkit;
 import sun.lwawt.LWToolkit;
 import sun.lwawt.macosx.*;
@@ -212,24 +212,36 @@
                 // Send a mouseExited to the previously hilited item, if it wasn't 0.
                 if (target != fLastMouseEventTarget) {
                     if (fLastMouseEventTarget != null) {
-                        LWToolkit.postEvent(new MouseEvent(fLastMouseEventTarget, MouseEvent.MOUSE_EXITED, when, modifiers, x - fLastTargetRect.x, y - fLastTargetRect.y, 0, false));
+                        LWToolkit.postEvent(
+                                new MouseEvent(fLastMouseEventTarget,
+                                               MouseEvent.MOUSE_EXITED, when,
+                                               modifiers, x - fLastTargetRect.x,
+                                               y - fLastTargetRect.y, 0,
+                                               false));
                     }
-                    // Send a mouseEntered to the current hilited item, if it wasn't 0.
+                    // Send a mouseEntered to the current hilited item, if it
+                    // wasn't 0.
                     if (target != null) {
-                        LWToolkit.postEvent(new MouseEvent(target, MouseEvent.MOUSE_ENTERED, when, modifiers, x - targetRect.x, y - targetRect.y, 0, false));
+                        LWToolkit.postEvent(
+                                new MouseEvent(target, MouseEvent.MOUSE_ENTERED,
+                                               when, modifiers,
+                                               x - targetRect.x,
+                                               y - targetRect.y, 0, false));
                     }
                     fLastMouseEventTarget = target;
                     fLastTargetRect = targetRect;
                 }
                 // Post a mouse event to the current item.
                 if (target == null) return;
-                LWToolkit.postEvent(new MouseEvent(target, kind, when, modifiers, x - targetRect.x, y - targetRect.y, 0, false));
+                LWToolkit.postEvent(
+                        new MouseEvent(target, kind, when, modifiers,
+                                       x - targetRect.x, y - targetRect.y, 0,
+                                       false));
             }
         });
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void addNotify() {
         synchronized (getTreeLock()) {
             super.addNotify();
@@ -248,7 +260,8 @@
                 if (tooltipText != null) {
                     setToolTipText(tooltipText);
                 }
-                final MenuComponentPeer peer = getPeer();
+                final Object peer = AWTAccessor.getMenuComponentAccessor()
+                                               .getPeer(this);
                 if (peer instanceof CMenu) {
                     final CMenu menu = (CMenu) peer;
                     final long nativeMenu = menu.getNativeMenu();
@@ -355,9 +368,8 @@
     public void setIndeterminate(boolean indeterminate) { }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void setToolTipText(final String text) {
-        final MenuComponentPeer peer = getPeer();
+        Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
         if (!(peer instanceof CMenuItem)) return;
 
         final CMenuItem cmi = (CMenuItem)peer;
@@ -365,9 +377,8 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void setIcon(final Icon i) {
-        final MenuComponentPeer peer = getPeer();
+        Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
         if (!(peer instanceof CMenuItem)) return;
 
         final CMenuItem cmi = (CMenuItem)peer;
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenuBar.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenuBar.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,19 +25,21 @@
 
 package com.apple.laf;
 
-import sun.awt.AWTAccessor;
 import sun.lwawt.macosx.CMenuBar;
 
 import java.awt.*;
 import java.awt.event.*;
-import java.lang.reflect.*;
-import java.security.*;
 import java.util.*;
 
 import javax.swing.*;
 
+import static sun.awt.AWTAccessor.*;
+
 @SuppressWarnings("serial") // JDK implementation class
-public class ScreenMenuBar extends MenuBar implements ContainerListener, ScreenMenuPropertyHandler, ComponentListener {
+public class ScreenMenuBar extends MenuBar
+        implements ContainerListener, ScreenMenuPropertyHandler,
+                   ComponentListener {
+
     static boolean sJMenuBarHasHelpMenus = false; //$ could check by calling getHelpMenu in a try block
 
     JMenuBar fSwingBar;
@@ -246,22 +248,23 @@
             fSubmenus.remove(menu);
     }
 
-    @SuppressWarnings("deprecation")
     public Menu add(final Menu m, final int index) {
         synchronized (getTreeLock()) {
             if (m.getParent() != null) {
                 m.getParent().remove(m);
             }
 
-            final Vector<Menu> menus = AWTAccessor.getMenuBarAccessor().getMenus(this);
+            final Vector<Menu> menus = getMenuBarAccessor().getMenus(this);
             menus.insertElementAt(m, index);
-            AWTAccessor.getMenuComponentAccessor().setParent(m, this);
+            final MenuComponentAccessor acc = getMenuComponentAccessor();
+            acc.setParent(m, this);
 
-            final CMenuBar peer = (CMenuBar)getPeer();
+            final CMenuBar peer = acc.getPeer(this);
             if (peer == null) return m;
 
             peer.setNextInsertionIndex(index);
-            if (m.getPeer() == null) {
+            final CMenuBar mPeer = acc.getPeer(m);
+            if (mPeer == null) {
                 m.addNotify();
             }
 
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenuItem.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenuItem.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,15 +27,18 @@
 
 import java.awt.*;
 import java.awt.event.*;
-import java.awt.peer.MenuComponentPeer;
 
 import javax.swing.*;
 import javax.swing.plaf.ComponentUI;
 
+import sun.awt.AWTAccessor;
 import sun.lwawt.macosx.CMenuItem;
 
 @SuppressWarnings("serial") // JDK implementation class
-final class ScreenMenuItem extends MenuItem implements ActionListener, ComponentListener, ScreenMenuPropertyHandler {
+final class ScreenMenuItem extends MenuItem
+        implements ActionListener, ComponentListener,
+                   ScreenMenuPropertyHandler {
+
     ScreenMenuPropertyListener fListener;
     JMenuItem fMenuItem;
 
@@ -97,9 +100,8 @@
         fMenuItem.removeComponentListener(this);
     }
 
-    @SuppressWarnings("deprecation")
     static void syncLabelAndKS(MenuItem menuItem, String label, KeyStroke ks) {
-        final MenuComponentPeer peer = menuItem.getPeer();
+        Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(menuItem);
         if (!(peer instanceof CMenuItem)) {
             //Is it possible?
             return;
@@ -166,18 +168,16 @@
         }
     }
 
-    @SuppressWarnings("deprecation")
     public void setToolTipText(final String text) {
-        final MenuComponentPeer peer = getPeer();
+        Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
         if (!(peer instanceof CMenuItem)) return;
 
         final CMenuItem cmi = (CMenuItem)peer;
         cmi.setToolTipText(text);
     }
 
-    @SuppressWarnings("deprecation")
     public void setIcon(final Icon i) {
-        final MenuComponentPeer peer = getPeer();
+        Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
         if (!(peer instanceof CMenuItem)) return;
 
         final CMenuItem cmi = (CMenuItem)peer;
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenuItemCheckbox.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenuItemCheckbox.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,17 +27,20 @@
 
 import java.awt.*;
 import java.awt.event.*;
-import java.awt.peer.MenuComponentPeer;
 
 import javax.swing.*;
 import javax.swing.plaf.ButtonUI;
 
 import com.apple.laf.AquaMenuItemUI.IndeterminateListener;
 
+import sun.awt.AWTAccessor;
 import sun.lwawt.macosx.*;
 
 @SuppressWarnings("serial") // JDK implementation class
-final class ScreenMenuItemCheckbox extends CheckboxMenuItem implements ActionListener, ComponentListener, ScreenMenuPropertyHandler, ItemListener {
+final class ScreenMenuItemCheckbox extends CheckboxMenuItem
+        implements ActionListener, ComponentListener, ScreenMenuPropertyHandler,
+                   ItemListener {
+
     JMenuItem fMenuItem;
     MenuContainer fParent;
 
@@ -57,12 +60,12 @@
     }
 
     ScreenMenuPropertyListener fPropertyListener;
-    @SuppressWarnings("deprecation")
+
     public void addNotify() {
         super.addNotify();
 
         // Avoid the Auto toggle behavior of AWT CheckBoxMenuItem
-        CCheckboxMenuItem ccb = (CCheckboxMenuItem) getPeer();
+        CCheckboxMenuItem ccb = AWTAccessor.getMenuComponentAccessor().getPeer(this);
         ccb.setAutoToggle(false);
 
         fMenuItem.addComponentListener(this);
@@ -155,17 +158,15 @@
         setVisible(false);
     }
 
-    @SuppressWarnings("deprecation")
     public void setToolTipText(final String text) {
-        final MenuComponentPeer peer = getPeer();
+        Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
         if (!(peer instanceof CMenuItem)) return;
 
         ((CMenuItem)peer).setToolTipText(text);
     }
 
-    @SuppressWarnings("deprecation")
     public void setIcon(final Icon i) {
-        final MenuComponentPeer peer = getPeer();
+        Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
         if (!(peer instanceof CMenuItem)) return;
 
         final CMenuItem cmi = (CMenuItem)peer;
@@ -208,9 +209,8 @@
             }
         }
 
-    @SuppressWarnings("deprecation")
     public void setIndeterminate(final boolean indeterminate) {
-        final MenuComponentPeer peer = getPeer();
+        Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
         if (peer instanceof CCheckboxMenuItem) {
             ((CCheckboxMenuItem)peer).setIsIndeterminate(indeterminate);
         }
--- a/jdk/src/java.desktop/macosx/classes/sun/awt/CGraphicsConfig.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/awt/CGraphicsConfig.java	Wed Jul 05 20:33:55 2017 +0200
@@ -72,7 +72,8 @@
 
     @Override
     public AffineTransform getDefaultTransform() {
-        return new AffineTransform();
+        double scaleFactor = device.getScaleFactor();
+        return AffineTransform.getScaleInstance(scaleFactor, scaleFactor);
     }
 
     @Override
--- a/jdk/src/java.desktop/macosx/classes/sun/awt/CGraphicsDevice.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/awt/CGraphicsDevice.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -206,17 +206,15 @@
         return true;
     }
 
-    @SuppressWarnings("deprecation")
     private static void enterFullScreenExclusive(Window w) {
-        FullScreenCapable peer = (FullScreenCapable)w.getPeer();
+        FullScreenCapable peer = AWTAccessor.getComponentAccessor().getPeer(w);
         if (peer != null) {
             peer.enterFullScreenMode();
         }
     }
 
-    @SuppressWarnings("deprecation")
     private static void exitFullScreenExclusive(Window w) {
-        FullScreenCapable peer = (FullScreenCapable)w.getPeer();
+        FullScreenCapable peer = AWTAccessor.getComponentAccessor().getPeer(w);
         if (peer != null) {
             peer.exitFullScreenMode();
         }
--- a/jdk/src/java.desktop/macosx/classes/sun/java2d/opengl/CGLVolatileSurfaceManager.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/java2d/opengl/CGLVolatileSurfaceManager.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,13 +33,14 @@
 import java.awt.image.ColorModel;
 import java.awt.peer.ComponentPeer;
 
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.image.SunVolatileImage;
 import sun.awt.image.VolatileSurfaceManager;
 import sun.java2d.BackBufferCapsProvider;
 import sun.java2d.SurfaceData;
 import static sun.java2d.opengl.OGLContext.OGLContextCaps.*;
 import sun.java2d.pipe.hw.ExtendedBufferCapabilities;
-import static sun.java2d.pipe.hw.AccelSurface.*;
 import static sun.java2d.pipe.hw.ExtendedBufferCapabilities.VSyncType.*;
 
 public class CGLVolatileSurfaceManager extends VolatileSurfaceManager {
@@ -74,11 +75,11 @@
      * Create a pbuffer-based SurfaceData object (or init the backbuffer
      * of an existing window if this is a double buffered GraphicsConfig)
      */
-    @SuppressWarnings("deprecation")
     protected SurfaceData initAcceleratedSurface() {
         SurfaceData sData = null;
         Component comp = vImg.getComponent();
-        final ComponentPeer peer = (comp != null) ? comp.getPeer() : null;
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        final ComponentPeer peer = (comp != null) ? acc.getPeer(comp) : null;
 
         try {
             boolean createVSynced = false;
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/LWComponentPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/LWComponentPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -930,8 +930,8 @@
                     return false;
                 }
                 final LWWindowPeer parentPeer =
-                        (LWWindowPeer) AWTAccessor.getComponentAccessor()
-                                                  .getPeer(parentWindow);
+                        AWTAccessor.getComponentAccessor()
+                                   .getPeer(parentWindow);
                 if (parentPeer == null) {
                     focusLog.fine("request rejected, parentPeer is null");
                     LWKeyboardFocusManagerPeer.removeLastFocusRequest(getTarget());
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/LWWindowPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/LWWindowPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -33,6 +33,7 @@
 import javax.swing.*;
 
 import sun.awt.*;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.java2d.*;
 import sun.java2d.loops.Blit;
 import sun.java2d.loops.CompositeType;
@@ -505,7 +506,7 @@
     @Override
     public void repositionSecurityWarning() {
         if (warningWindow != null) {
-            AWTAccessor.ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
+            ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
             Window target = getTarget();
             int x = compAccessor.getX(target);
             int y = compAccessor.getY(target);
@@ -563,8 +564,7 @@
     public void blockWindows(List<Window> windows) {
         //TODO: LWX will probably need some collectJavaToplevels to speed this up
         for (Window w : windows) {
-            WindowPeer wp =
-                    (WindowPeer) AWTAccessor.getComponentAccessor().getPeer(w);
+            WindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
             if (wp != null) {
                 wp.setModalBlocked((Dialog)getTarget(), true);
             }
@@ -1247,7 +1247,8 @@
     private boolean isOneOfOwnersOf(LWWindowPeer peer) {
         Window owner = (peer != null ? peer.getTarget().getOwner() : null);
         while (owner != null) {
-            if ((LWWindowPeer)owner.getPeer() == this) {
+            final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+            if (acc.getPeer(owner) == this) {
                 return true;
             }
             owner = owner.getOwner();
@@ -1321,8 +1322,8 @@
         while (owner != null && !(owner instanceof Frame || owner instanceof Dialog)) {
             owner = owner.getOwner();
         }
-        return owner == null ? null :
-               (LWWindowPeer) AWTAccessor.getComponentAccessor().getPeer(owner);
+        return owner == null ? null : AWTAccessor.getComponentAccessor()
+                                                 .getPeer(owner);
     }
 
     /**
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CDragSourceContextPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CDragSourceContextPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -39,6 +39,7 @@
 import java.util.Map;
 import java.util.concurrent.Callable;
 
+import sun.awt.AWTAccessor;
 import sun.awt.dnd.*;
 import sun.lwawt.LWComponentPeer;
 import sun.lwawt.LWWindowPeer;
@@ -88,7 +89,6 @@
         super.startDrag(dsc, cursor, dragImage, dragImageOffset);
     }
 
-    @SuppressWarnings("deprecation")
     protected void startDrag(Transferable transferable, long[] formats, Map<Long, DataFlavor> formatMap) {
         DragGestureEvent trigger = getTrigger();
         InputEvent         triggerEvent = trigger.getTriggerEvent();
@@ -135,7 +135,9 @@
 
         try {
             //It sure will be LWComponentPeer instance as rootComponent is a Window
-            PlatformWindow platformWindow = ((LWComponentPeer)rootComponent.getPeer()).getPlatformWindow();
+            LWComponentPeer<?, ?> peer = AWTAccessor.getComponentAccessor()
+                                                    .getPeer(rootComponent);
+            PlatformWindow platformWindow = peer.getPlatformWindow();
             long nativeViewPtr = CPlatformWindow.getNativeViewPtr(platformWindow);
             if (nativeViewPtr == 0L) throw new InvalidDnDOperationException("Unsupported platform window implementation");
 
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,6 +30,7 @@
 import java.awt.Point;
 import java.awt.Toolkit;
 
+import sun.awt.AWTAccessor;
 import sun.awt.EmbeddedFrame;
 import sun.lwawt.LWWindowPeer;
 
@@ -46,9 +47,8 @@
         show();
     }
 
-    @SuppressWarnings("deprecation")
     public void addNotify() {
-        if (getPeer() == null) {
+        if (!isDisplayable()) {
             LWCToolkit toolkit = (LWCToolkit)Toolkit.getDefaultToolkit();
             LWWindowPeer peer = toolkit.createEmbeddedFrame(this);
             setPeer(peer);
@@ -61,10 +61,9 @@
 
     public void unregisterAccelerator(AWTKeyStroke stroke) {}
 
-    @SuppressWarnings("deprecation")
     protected long getLayerPtr() {
-        LWWindowPeer peer = (LWWindowPeer)getPeer();
-        return peer.getLayerPtr();
+        return AWTAccessor.getComponentAccessor().<LWWindowPeer>getPeer(this)
+                          .getLayerPtr();
     }
 
     // -----------------------------------------------------------------------
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CImage.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CImage.java	Wed Jul 05 20:33:55 2017 +0200
@@ -138,17 +138,6 @@
             return ((DataBufferInt)bimg.getRaster().getDataBuffer()).getData();
         }
 
-        public CImage createFromImageImmediately(final Image image) {
-            int[]  buffer = imageToArray(image, false);
-
-            if (buffer == null) {
-                return null;
-            }
-
-            return new CImage(nativeCreateNSImageFromArray(buffer, image.getWidth(null),
-                                                           image.getHeight(null)));
-        }
-
         public byte[] getPlatformImageBytes(final Image image) {
             int[] buffer = imageToArray(image, false);
 
@@ -168,20 +157,33 @@
 
         // This is used to create a CImage from a Image
         public CImage createFromImage(final Image image) {
+            return createFromImage(image, true);
+        }
+
+        public CImage createFromImageImmediately(final Image image) {
+            return createFromImage(image, false);
+        }
+
+        // This is used to create a CImage from a Image
+        private CImage createFromImage(final Image image, final boolean prepareImage) {
             if (image instanceof MultiResolutionImage) {
                 List<Image> resolutionVariants
                         = ((MultiResolutionImage) image).getResolutionVariants();
-                return createFromImages(resolutionVariants);
+                return createFromImages(resolutionVariants, prepareImage);
             }
 
-            int[] buffer = imageToArray(image, true);
+            int[] buffer = imageToArray(image, prepareImage);
             if (buffer == null) {
                 return null;
             }
             return new CImage(nativeCreateNSImageFromArray(buffer, image.getWidth(null), image.getHeight(null)));
         }
 
-        public CImage createFromImages(List<Image> images) {
+        public CImage createFromImages(final List<Image> images) {
+            return createFromImages(images, true);
+        }
+
+        private CImage createFromImages(final List<Image> images, final boolean prepareImage) {
             if (images == null || images.isEmpty()) {
                 return null;
             }
@@ -194,8 +196,8 @@
 
             num = 0;
 
-            for (Image img : images) {
-                buffers[num] = imageToArray(img, true);
+            for (final Image img : images) {
+                buffers[num] = imageToArray(img, prepareImage);
                 if (buffers[num] == null) {
                     // Unable to process the image
                     continue;
@@ -210,9 +212,9 @@
             }
 
             return new CImage(nativeCreateNSImageFromArrays(
-                        Arrays.copyOf(buffers, num),
-                        Arrays.copyOf(w, num),
-                        Arrays.copyOf(h, num)));
+                    Arrays.copyOf(buffers, num),
+                    Arrays.copyOf(w, num),
+                    Arrays.copyOf(h, num)));
         }
 
         static int getSelectorAsInt(final String fromString) {
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CInputMethod.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CInputMethod.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,9 +38,12 @@
 import java.text.*;
 import javax.swing.text.JTextComponent;
 
+import sun.awt.AWTAccessor;
 import sun.awt.im.InputMethodAdapter;
 import sun.lwawt.*;
 
+import static sun.awt.AWTAccessor.ComponentAccessor;
+
 public class CInputMethod extends InputMethodAdapter {
     private InputMethodContext fIMContext;
     private Component fAwtFocussedComponent;
@@ -385,12 +388,11 @@
 
     // java.awt.Toolkit#getNativeContainer() is not available
     //    from this package
-    @SuppressWarnings("deprecation")
     private LWComponentPeer<?, ?> getNearestNativePeer(Component comp) {
         if (comp==null)
             return null;
-
-        ComponentPeer peer = comp.getPeer();
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        ComponentPeer peer = acc.getPeer(comp);
         if (peer==null)
             return null;
 
@@ -398,7 +400,7 @@
             comp = comp.getParent();
             if (comp==null)
                 return null;
-            peer = comp.getPeer();
+            peer = acc.getPeer(comp);
             if (peer==null)
                 return null;
         }
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CMenuBar.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CMenuBar.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,6 +29,8 @@
 import java.awt.MenuBar;
 import java.awt.peer.MenuBarPeer;
 
+import sun.awt.AWTAccessor;
+
 public class CMenuBar extends CMenuComponent implements MenuBarPeer {
 
     private int nextInsertionIndex = -1;
@@ -43,9 +45,8 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void addHelpMenu(Menu m) {
-        CMenu cMenu = (CMenu)m.getPeer();
+        CMenu cMenu = AWTAccessor.getMenuComponentAccessor().getPeer(m);
         nativeSetHelpMenu(getModel(), cMenu.getModel());
     }
 
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,12 +31,11 @@
 import java.awt.peer.WindowPeer;
 import java.beans.*;
 import java.lang.reflect.InvocationTargetException;
-import java.util.List;
-import java.util.Objects;
 
 import javax.swing.*;
 
 import sun.awt.*;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.java2d.SurfaceData;
 import sun.java2d.opengl.CGLSurfaceData;
 import sun.lwawt.*;
@@ -193,8 +192,9 @@
         @SuppressWarnings("deprecation")
         public CPlatformWindow convertJComponentToTarget(final JRootPane p) {
             Component root = SwingUtilities.getRoot(p);
-            if (root == null || (LWWindowPeer)root.getPeer() == null) return null;
-            return (CPlatformWindow)((LWWindowPeer)root.getPeer()).getPlatformWindow();
+            final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+            if (root == null || acc.getPeer(root) == null) return null;
+            return (CPlatformWindow)((LWWindowPeer)acc.getPeer(root)).getPlatformWindow();
         }
     };
 
@@ -523,15 +523,15 @@
     }
 
     @Override // PlatformWindow
-    @SuppressWarnings("deprecation")
     public void setVisible(boolean visible) {
         final long nsWindowPtr = getNSWindowPtr();
 
         // Process parent-child relationship when hiding
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
         if (!visible) {
             // Unparent my children
             for (Window w : target.getOwnedWindows()) {
-                WindowPeer p = (WindowPeer)w.getPeer();
+                WindowPeer p = acc.getPeer(w);
                 if (p instanceof LWWindowPeer) {
                     CPlatformWindow pw = (CPlatformWindow)((LWWindowPeer)p).getPlatformWindow();
                     if (pw != null && pw.isVisible()) {
@@ -627,7 +627,7 @@
 
             // Add my own children to myself
             for (Window w : target.getOwnedWindows()) {
-                WindowPeer p = (WindowPeer)w.getPeer();
+                final Object p = acc.getPeer(w);
                 if (p instanceof LWWindowPeer) {
                     CPlatformWindow pw = (CPlatformWindow)((LWWindowPeer)p).getPlatformWindow();
                     if (pw != null && pw.isVisible()) {
@@ -679,13 +679,13 @@
     }
 
     @Override  // PlatformWindow
-    @SuppressWarnings("deprecation")
     public void toFront() {
         final long nsWindowPtr = getNSWindowPtr();
         LWCToolkit lwcToolkit = (LWCToolkit) Toolkit.getDefaultToolkit();
         Window w = DefaultKeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
-        if( w != null && w.getPeer() != null
-                && ((LWWindowPeer)w.getPeer()).getPeerType() == LWWindowPeer.PeerType.EMBEDDED_FRAME
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        if( w != null && acc.getPeer(w) != null
+                && ((LWWindowPeer)acc.getPeer(w)).getPeerType() == LWWindowPeer.PeerType.EMBEDDED_FRAME
                 && !lwcToolkit.isApplicationActive()) {
             lwcToolkit.activateApplicationIgnoringOtherApps();
         }
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java	Wed Jul 05 20:33:55 2017 +0200
@@ -36,6 +36,10 @@
 import javax.print.*;
 import javax.print.attribute.PrintRequestAttributeSet;
 import javax.print.attribute.HashPrintRequestAttributeSet;
+import javax.print.attribute.standard.Media;
+import javax.print.attribute.standard.MediaPrintableArea;
+import javax.print.attribute.standard.MediaSize;
+import javax.print.attribute.standard.MediaSizeName;
 import javax.print.attribute.standard.PageRanges;
 
 import sun.java2d.*;
@@ -745,4 +749,34 @@
     protected void startPage(PageFormat arg0, Printable arg1, int arg2, boolean arg3) throws PrinterException {
         // TODO Auto-generated method stub
     }
-}
+
+    @Override
+    protected MediaSize getMediaSize(Media media, PrintService service,
+            PageFormat page) {
+        if (media == null || !(media instanceof MediaSizeName)) {
+            return getDefaultMediaSize(page);
+        }
+        MediaSize size = MediaSize.getMediaSizeForName((MediaSizeName) media);
+        return size != null ? size : getDefaultMediaSize(page);
+    }
+
+    private MediaSize getDefaultMediaSize(PageFormat page){
+            final int inch = 72;
+            Paper paper = page.getPaper();
+            float width = (float) (paper.getWidth() / inch);
+            float height = (float) (paper.getHeight() / inch);
+            return new MediaSize(width, height, MediaSize.INCH);
+    }
+
+    @Override
+    protected MediaPrintableArea getDefaultPrintableArea(PageFormat page, double w, double h) {
+        final float dpi = 72.0f;
+        Paper paper = page.getPaper();
+        return new MediaPrintableArea(
+                (float) (paper.getImageableX() / dpi),
+                (float) (paper.getImageableY() / dpi),
+                (float) (paper.getImageableWidth() / dpi),
+                (float) (paper.getImageableHeight() / dpi),
+                MediaPrintableArea.INCH);
+    }
+}
\ No newline at end of file
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CTrayIcon.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CTrayIcon.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,6 +37,8 @@
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 
+import static sun.awt.AWTAccessor.*;
+
 public class CTrayIcon extends CFRetainedResource implements TrayIconPeer {
     private TrayIcon target;
     private PopupMenu popup;
@@ -68,15 +70,15 @@
         updateImage();
     }
 
-    @SuppressWarnings("deprecation")
     private CPopupMenu checkAndCreatePopupPeer() {
         CPopupMenu menuPeer = null;
         if (popup != null) {
             try {
-                menuPeer = (CPopupMenu)popup.getPeer();
+                final MenuComponentAccessor acc = getMenuComponentAccessor();
+                menuPeer = acc.getPeer(popup);
                 if (menuPeer == null) {
                     popup.addNotify();
-                    menuPeer = (CPopupMenu)popup.getPeer();
+                    menuPeer = acc.getPeer(popup);
                 }
             } catch (Exception e) {
                 e.printStackTrace();
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CViewEmbeddedFrame.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CViewEmbeddedFrame.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,6 +30,7 @@
 import java.awt.Toolkit;
 import java.lang.reflect.InvocationTargetException;
 
+import sun.awt.AWTAccessor;
 import sun.awt.EmbeddedFrame;
 import sun.lwawt.LWWindowPeer;
 
@@ -48,10 +49,9 @@
         this.nsViewPtr = nsViewPtr;
     }
 
-    @SuppressWarnings("deprecation")
     @Override
     public void addNotify() {
-        if (getPeer() == null) {
+        if (!isDisplayable()) {
             LWCToolkit toolkit = (LWCToolkit) Toolkit.getDefaultToolkit();
             setPeer(toolkit.createEmbeddedFrame(this));
         }
@@ -78,11 +78,12 @@
      * Synthetic event delivery for focus management
      */
     @Override
-    @SuppressWarnings("deprecation")
     public void synthesizeWindowActivation(boolean activated) {
         if (isActive != activated) {
             isActive = activated;
-            ((LWWindowPeer)getPeer()).notifyActivation(activated, null);
+            final LWWindowPeer peer = AWTAccessor.getComponentAccessor()
+                                                 .getPeer(this);
+            peer.notifyActivation(activated, null);
         }
     }
 
@@ -91,13 +92,14 @@
      * Designed to be called from the main thread
      * This method should be called once from the initialization of the SWT_AWT Bridge
      */
-    @SuppressWarnings("deprecation")
     public void validateWithBounds(final int x, final int y, final int width, final int height) {
         try {
+            final LWWindowPeer peer = AWTAccessor.getComponentAccessor()
+                                                 .getPeer(this);
             LWCToolkit.invokeAndWait(new Runnable() {
                 @Override
                 public void run() {
-                    ((LWWindowPeer) getPeer()).setBoundsPrivate(0, 0, width, height);
+                    peer.setBoundsPrivate(0, 0, width, height);
                     validate();
                     setVisible(true);
                 }
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -293,7 +293,7 @@
     }
 
     @Override
-    protected DesktopPeer createDesktopPeer(Desktop target) {
+    public DesktopPeer createDesktopPeer(Desktop target) {
         return new CDesktopPeer();
     }
 
@@ -575,7 +575,8 @@
 
         final boolean[] ret = new boolean[1];
 
-        try {  invokeAndWait(new Runnable() { public void run() { synchronized(ret) {
+        try {  invokeAndWait(new Runnable() { @Override
+                                              public void run() { synchronized(ret) {
             ret[0] = a.equals(b);
         }}}, c); } catch (Exception e) { e.printStackTrace(); }
 
--- a/jdk/src/java.desktop/share/classes/java/awt/Button.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Button.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -168,13 +168,12 @@
      * application to change the look of the button without changing
      * its functionality.
      *
-     * @see     java.awt.Toolkit#createButton(java.awt.Button)
      * @see     java.awt.Component#getToolkit()
      */
     public void addNotify() {
         synchronized(getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createButton(this);
+                peer = getComponentFactory().createButton(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/Canvas.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Canvas.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -58,11 +58,13 @@
     }
 
     /**
-     * Constructs a new Canvas given a GraphicsConfiguration object.
+     * Constructs a new Canvas given a GraphicsConfiguration object. If null is
+     * passed, then the default GraphicsConfiguration will be used.
      *
-     * @param config a reference to a GraphicsConfiguration object.
+     * @param config a reference to a GraphicsConfiguration object or null
      *
      * @see GraphicsConfiguration
+     * @see Component#getGraphicsConfiguration()
      */
     public Canvas(GraphicsConfiguration config) {
         this();
@@ -70,10 +72,9 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     void setGraphicsConfiguration(GraphicsConfiguration gc) {
         synchronized(getTreeLock()) {
-            CanvasPeer peer = (CanvasPeer)getPeer();
+            CanvasPeer peer = (CanvasPeer) this.peer;
             if (peer != null) {
                 gc = peer.getAppropriateGraphicsConfiguration(gc);
             }
@@ -94,13 +95,12 @@
     /**
      * Creates the peer of the canvas.  This peer allows you to change the
      * user interface of the canvas without changing its functionality.
-     * @see     java.awt.Toolkit#createCanvas(java.awt.Canvas)
      * @see     java.awt.Component#getToolkit()
      */
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createCanvas(this);
+                peer = getComponentFactory().createCanvas(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/Checkbox.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Checkbox.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -239,13 +239,12 @@
      * Creates the peer of the Checkbox. The peer allows you to change the
      * look of the Checkbox without changing its functionality.
      *
-     * @see     java.awt.Toolkit#createCheckbox(java.awt.Checkbox)
      * @see     java.awt.Component#getToolkit()
      */
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createCheckbox(this);
+                peer = getComponentFactory().createCheckbox(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/CheckboxMenuItem.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/CheckboxMenuItem.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -155,13 +155,12 @@
      * change the look of the checkbox item without changing its
      * functionality.
      * Most applications do not call this method directly.
-     * @see     java.awt.Toolkit#createCheckboxMenuItem(java.awt.CheckboxMenuItem)
      * @see     java.awt.Component#getToolkit()
      */
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = Toolkit.getDefaultToolkit().createCheckboxMenuItem(this);
+                peer = getComponentFactory().createCheckboxMenuItem(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/Choice.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Choice.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -143,13 +143,12 @@
      * Creates the <code>Choice</code>'s peer.  This peer allows us
      * to change the look
      * of the <code>Choice</code> without changing its functionality.
-     * @see     java.awt.Toolkit#createChoice(java.awt.Choice)
      * @see     java.awt.Component#getToolkit()
      */
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createChoice(this);
+                peer = getComponentFactory().createChoice(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/Component.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Component.java	Wed Jul 05 20:33:55 2017 +0200
@@ -61,6 +61,7 @@
 import javax.accessibility.*;
 import java.applet.Applet;
 
+import sun.awt.ComponentFactory;
 import sun.security.action.GetPropertyAction;
 import sun.awt.AppContext;
 import sun.awt.AWTAccessor;
@@ -198,7 +199,7 @@
      * @see #addNotify
      * @see #removeNotify
      */
-    transient ComponentPeer peer;
+    transient volatile ComponentPeer peer;
 
     /**
      * The parent of the object. It may be <code>null</code>
@@ -924,8 +925,9 @@
             public Cursor getCursor(Component comp) {
                 return comp.getCursor_NoClientCode();
             }
-            public ComponentPeer getPeer(Component comp) {
-                return comp.peer;
+            @SuppressWarnings("unchecked")
+            public <T extends ComponentPeer> T getPeer(Component comp) {
+                return (T) comp.peer;
             }
             public void setPeer(Component comp, ComponentPeer peer) {
                 comp.peer = peer;
@@ -1069,17 +1071,6 @@
     }
 
     /**
-     * @deprecated As of JDK version 1.1,
-     * programs should not directly manipulate peers;
-     * replaced by <code>boolean isDisplayable()</code>.
-     * @return the peer for this component
-     */
-    @Deprecated
-    public ComponentPeer getPeer() {
-        return peer;
-    }
-
-    /**
      * Associate a <code>DropTarget</code> with this component.
      * The <code>Component</code> will receive drops only if it
      * is enabled.
@@ -1095,7 +1086,7 @@
         DropTarget old;
 
         if ((old = dropTarget) != null) {
-            if (peer != null) dropTarget.removeNotify(peer);
+            dropTarget.removeNotify();
 
             DropTarget t = dropTarget;
 
@@ -1113,12 +1104,12 @@
         if ((dropTarget = dt) != null) {
             try {
                 dropTarget.setComponent(this);
-                if (peer != null) dropTarget.addNotify(peer);
+                dropTarget.addNotify();
             } catch (IllegalArgumentException iae) {
                 if (old != null) {
                     try {
                         old.setComponent(this);
-                        if (peer != null) dropTarget.addNotify(peer);
+                        dropTarget.addNotify();
                     } catch (IllegalArgumentException iae1) {
                         // ignore it!
                     }
@@ -1179,7 +1170,7 @@
 
         graphicsConfig = gc;
 
-        ComponentPeer peer = getPeer();
+        ComponentPeer peer = this.peer;
         if (peer != null) {
             return peer.updateGraphicsData(gc);
         }
@@ -1239,6 +1230,14 @@
         return Toolkit.getDefaultToolkit();
     }
 
+    final ComponentFactory getComponentFactory() {
+        final Toolkit toolkit = getToolkit();
+        if (toolkit instanceof ComponentFactory) {
+            return (ComponentFactory) toolkit;
+        }
+        throw new AWTError("UI components are unsupported by: " + toolkit);
+    }
+
     /**
      * Determines whether this component is valid. A component is valid
      * when it is correctly sized and positioned within its parent
@@ -1281,7 +1280,7 @@
      * @since 1.2
      */
     public boolean isDisplayable() {
-        return getPeer() != null;
+        return peer != null;
     }
 
     /**
@@ -1336,7 +1335,11 @@
             return null;
         }
         Window win = getContainingWindow();
-        if (!Toolkit.getDefaultToolkit().getMouseInfoPeer().isWindowUnderMouse(win)) {
+        Toolkit toolkit = Toolkit.getDefaultToolkit();
+        if (!(toolkit instanceof ComponentFactory)) {
+            return null;
+        }
+        if (!((ComponentFactory) toolkit).getMouseInfoPeer().isWindowUnderMouse(win)) {
             return null;
         }
         final boolean INCLUDE_DISABLED = true;
@@ -2582,7 +2585,7 @@
      * @since 1.2
      */
     public boolean isOpaque() {
-        if (getPeer() == null) {
+        if (peer == null) {
             return false;
         }
         else {
@@ -2608,7 +2611,7 @@
      * @since 1.2
      */
     public boolean isLightweight() {
-        return getPeer() instanceof LightweightPeer;
+        return peer instanceof LightweightPeer;
     }
 
 
@@ -3126,7 +3129,6 @@
      *          obtained
      * @return the font metrics for <code>font</code>
      * @see       #getFont
-     * @see       #getPeer
      * @see       java.awt.peer.ComponentPeer#getFontMetrics(Font)
      * @see       Toolkit#getFontMetrics(Font)
      * @since     1.0
@@ -3186,7 +3188,7 @@
 
             if (nativeContainer == null) return;
 
-            ComponentPeer cPeer = nativeContainer.getPeer();
+            ComponentPeer cPeer = nativeContainer.peer;
 
             if (cPeer != null) {
                 cPeer.updateCursorImmediately();
@@ -5019,7 +5021,7 @@
                 if (source != null) {
                     Container target = source.getNativeContainer();
                     if (target != null) {
-                        tpeer = target.getPeer();
+                        tpeer = target.peer;
                     }
                 }
             }
@@ -6972,7 +6974,7 @@
                 if (peer == null) {
                     // Update both the Component's peer variable and the local
                     // variable we use for thread safety.
-                    this.peer = peer = getToolkit().createComponent(this);
+                    this.peer = peer = getComponentFactory().createComponent(this);
                 }
 
                 // This is a lightweight component which means it won't be
@@ -7022,7 +7024,7 @@
                 popup.addNotify();
             }
 
-            if (dropTarget != null) dropTarget.addNotify(peer);
+            if (dropTarget != null) dropTarget.addNotify();
 
             peerFont = getFont();
 
@@ -7109,7 +7111,7 @@
                     ((FlipBufferStrategy)bufferStrategy).destroyBuffers();
                 }
 
-                if (dropTarget != null) dropTarget.removeNotify(peer);
+                if (dropTarget != null) dropTarget.removeNotify();
 
                 // Hide peer first to stop system events such as cursor moves.
                 if (visible) {
@@ -9851,7 +9853,7 @@
         }
 
         if (!isLightweight()) {
-            ComponentPeer peer = getPeer();
+            ComponentPeer peer = this.peer;
             if (peer != null) {
                 // The Region class has some optimizations. That's why
                 // we should manually check whether it's empty and
@@ -9975,7 +9977,7 @@
             for (int i = indexAbove; i > -1; i--) {
                 Component comp = cont.getComponent(i);
                 if (comp != null && comp.isDisplayable() && !comp.isLightweight()) {
-                    return comp.getPeer();
+                    return comp.peer;
                 }
             }
             // traversing the hierarchy up to the closest HW container;
--- a/jdk/src/java.desktop/share/classes/java/awt/Container.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Container.java	Wed Jul 05 20:33:55 2017 +0200
@@ -820,7 +820,7 @@
                 }
             } else {
                 // Q: Need to update NativeInLightFixer?
-                comp.getPeer().reparent(parentPeer);
+                comp.peer.reparent(parentPeer);
             }
         }
     }
@@ -840,10 +840,10 @@
             // If component is lightweight container we need to reparent all its explicit  heavyweight children
             if (comp instanceof Container) {
                 // Traverse component's tree till depth-first until encountering heavyweight component
-                reparentTraverse((ContainerPeer)getPeer(), (Container)comp);
+                reparentTraverse((ContainerPeer)peer, (Container)comp);
             }
         } else {
-            comp.getPeer().reparent((ContainerPeer)getPeer());
+            comp.peer.reparent((ContainerPeer) peer);
         }
     }
 
@@ -4195,7 +4195,7 @@
                 }
             } else {
                 if (comp.isVisible()) {
-                    ComponentPeer peer = comp.getPeer();
+                    ComponentPeer peer = comp.peer;
                     if (peer != null) {
                         peer.setVisible(true);
                     }
@@ -4217,7 +4217,7 @@
                 }
             } else {
                 if (comp.isVisible()) {
-                    ComponentPeer peer = comp.getPeer();
+                    ComponentPeer peer = comp.peer;
                     if (peer != null) {
                         peer.setVisible(false);
                     }
@@ -4239,7 +4239,7 @@
                     ((Container)comp).recursiveRelocateHeavyweightChildren(newOrigin);
                 }
             } else {
-                ComponentPeer peer = comp.getPeer();
+                ComponentPeer peer = comp.peer;
                 if (peer != null) {
                     peer.setBounds(origin.x + comp.getX(), origin.y + comp.getY(),
                             comp.getWidth(), comp.getHeight(),
--- a/jdk/src/java.desktop/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java	Wed Jul 05 20:33:55 2017 +0200
@@ -504,7 +504,10 @@
                 } else if (comp instanceof Container && comp != aContainer) {
                     Container cont = (Container)comp;
                     if (cont.isFocusTraversalPolicyProvider()) {
-                        return cont.getFocusTraversalPolicy().getLastComponent(cont);
+                        Component retComp = cont.getFocusTraversalPolicy().getLastComponent(cont);
+                        if (retComp != null) {
+                            return retComp;
+                        }
                     }
                 }
             }
--- a/jdk/src/java.desktop/share/classes/java/awt/DefaultFocusTraversalPolicy.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/DefaultFocusTraversalPolicy.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -93,7 +93,6 @@
      * @return <code>true</code> if aComponent meets the above requirements;
      *         <code>false</code> otherwise
      */
-    @SuppressWarnings("deprecation")
     protected boolean accept(Component aComponent) {
         if (!(aComponent.isVisible() && aComponent.isDisplayable() &&
               aComponent.isEnabled()))
@@ -123,7 +122,7 @@
             return focusable;
         }
 
-        ComponentPeer peer = aComponent.getPeer();
+        ComponentPeer peer = aComponent.peer;
         return (peer != null && peer.isFocusable());
     }
 }
--- a/jdk/src/java.desktop/share/classes/java/awt/DefaultKeyboardFocusManager.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/DefaultKeyboardFocusManager.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -796,7 +796,6 @@
      * @return <code>true</code>
      * @see Component#dispatchEvent
      */
-    @SuppressWarnings("deprecation")
     public boolean dispatchKeyEvent(KeyEvent e) {
         Component focusOwner = (((AWTEvent)e).isPosted) ? getFocusOwner() : e.getComponent();
 
@@ -824,14 +823,14 @@
 
         // Allow the peer to process KeyEvent
         Component source = e.getComponent();
-        ComponentPeer peer = source.getPeer();
+        ComponentPeer peer = source.peer;
 
         if (peer == null || peer instanceof LightweightPeer) {
             // if focus owner is lightweight then its native container
             // processes event
             Container target = source.getNativeContainer();
             if (target != null) {
-                peer = target.getPeer();
+                peer = target.peer;
             }
         }
         if (peer != null) {
@@ -1049,7 +1048,7 @@
             Component source = (Component)ke.getSource();
             Container target = source.getNativeContainer();
             if (target != null) {
-                ComponentPeer peer = target.getPeer();
+                ComponentPeer peer = target.peer;
                 if (peer != null) {
                     peer.handleEvent(ke);
                     /**
--- a/jdk/src/java.desktop/share/classes/java/awt/Desktop.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Desktop.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,19 +25,16 @@
 
 package java.awt;
 
+import java.awt.peer.DesktopPeer;
 import java.io.File;
+import java.io.FilePermission;
 import java.io.IOException;
-import java.net.URISyntaxException;
-import java.net.URI;
-import java.net.URL;
 import java.net.MalformedURLException;
-import java.awt.AWTPermission;
-import java.awt.GraphicsEnvironment;
-import java.awt.HeadlessException;
-import java.awt.peer.DesktopPeer;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+
 import sun.awt.SunToolkit;
-import sun.awt.HeadlessToolkit;
-import java.io.FilePermission;
 import sun.security.util.SecurityConstants;
 
 /**
@@ -122,7 +119,11 @@
      * Suppresses default constructor for noninstantiability.
      */
     private Desktop() {
-        peer = Toolkit.getDefaultToolkit().createDesktopPeer(this);
+        Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
+        // same cast as in isDesktopSupported()
+        if (defaultToolkit instanceof SunToolkit) {
+            peer = ((SunToolkit) defaultToolkit).createDesktopPeer(this);
+        }
     }
 
     /**
--- a/jdk/src/java.desktop/share/classes/java/awt/Dialog.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Dialog.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,11 +36,9 @@
 import sun.awt.AppContext;
 import sun.awt.AWTPermissions;
 import sun.awt.SunToolkit;
-import sun.awt.PeerEvent;
 import sun.awt.util.IdentityArrayList;
 import sun.awt.util.IdentityLinkedList;
 import java.security.AccessControlException;
-import java.util.function.BooleanSupplier;
 
 /**
  * A Dialog is a top-level window with a title and a border
@@ -749,15 +747,14 @@
      * @see Component#isDisplayable
      * @see #removeNotify
      */
-    @SuppressWarnings("deprecation")
     public void addNotify() {
         synchronized (getTreeLock()) {
-            if (parent != null && parent.getPeer() == null) {
+            if (parent != null && parent.peer == null) {
                 parent.addNotify();
             }
 
             if (peer == null) {
-                peer = getToolkit().createDialog(this);
+                peer = getComponentFactory().createDialog(this);
             }
             super.addNotify();
         }
--- a/jdk/src/java.desktop/share/classes/java/awt/FileDialog.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/FileDialog.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -314,14 +314,13 @@
      * Creates the file dialog's peer.  The peer allows us to change the look
      * of the file dialog without changing its functionality.
      */
-    @SuppressWarnings("deprecation")
     public void addNotify() {
         synchronized(getTreeLock()) {
-            if (parent != null && parent.getPeer() == null) {
+            if (parent != null && parent.peer == null) {
                 parent.addNotify();
             }
             if (peer == null)
-                peer = getToolkit().createFileDialog(this);
+                peer = getComponentFactory().createFileDialog(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/Font.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Font.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -41,10 +41,11 @@
 import java.security.PrivilegedExceptionAction;
 import java.text.AttributedCharacterIterator.Attribute;
 import java.text.CharacterIterator;
-import java.text.StringCharacterIterator;
 import java.util.Hashtable;
 import java.util.Locale;
 import java.util.Map;
+
+import sun.awt.ComponentFactory;
 import sun.font.StandardGlyphVector;
 
 import sun.font.AttributeMap;
@@ -239,6 +240,11 @@
         public boolean isCreatedFont(Font font) {
             return font.createdFont;
         }
+
+        @Override
+        public FontPeer getFontPeer(final Font font) {
+            return font.getFontPeer();
+        }
     }
 
     static {
@@ -434,24 +440,16 @@
     private static final long serialVersionUID = -4206021311591459213L;
 
     /**
-     * Gets the peer of this <code>Font</code>.
-     * @return  the peer of the <code>Font</code>.
-     * @since 1.1
-     * @deprecated Font rendering is now platform independent.
+     * Gets the peer of this {@code Font}.
+     *
+     * @return the peer of the {@code Font}.
      */
-    @Deprecated
-    public FontPeer getPeer(){
-        return getPeer_NoClientCode();
-    }
-    // NOTE: This method is called by privileged threads.
-    //       We implement this functionality in a package-private method
-    //       to insure that it cannot be overridden by client subclasses.
-    //       DO NOT INVOKE CLIENT CODE ON THIS THREAD!
-    @SuppressWarnings("deprecation")
-    final FontPeer getPeer_NoClientCode() {
+    private FontPeer getFontPeer() {
         if(peer == null) {
             Toolkit tk = Toolkit.getDefaultToolkit();
-            this.peer = tk.getFontPeer(name, style);
+            if (tk instanceof ComponentFactory) {
+                peer = ((ComponentFactory) tk).getFontPeer(name, style);
+            }
         }
         return peer;
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/Frame.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Frame.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,21 +24,23 @@
  */
 package java.awt;
 
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowEvent;
 import java.awt.peer.FramePeer;
-import java.awt.event.*;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Vector;
-import java.io.Serializable;
+import java.io.IOException;
+import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
-import java.io.IOException;
-import sun.awt.AppContext;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Vector;
+
+import javax.accessibility.AccessibleContext;
+import javax.accessibility.AccessibleRole;
+import javax.accessibility.AccessibleState;
+import javax.accessibility.AccessibleStateSet;
+
+import sun.awt.AWTAccessor;
 import sun.awt.SunToolkit;
-import sun.awt.AWTAccessor;
-import java.lang.ref.WeakReference;
-import javax.accessibility.*;
 
 /**
  * A <code>Frame</code> is a top-level window with a title and a border.
@@ -474,7 +476,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null) {
-                peer = getToolkit().createFrame(this);
+                peer = getComponentFactory().createFrame(this);
             }
             FramePeer p = (FramePeer)peer;
             MenuBar menuBar = this.menuBar;
--- a/jdk/src/java.desktop/share/classes/java/awt/KeyboardFocusManager.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/KeyboardFocusManager.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -3054,11 +3054,10 @@
         return (wto != wfrom);
     }
 
-    @SuppressWarnings("deprecation")
     static Component getHeavyweight(Component comp) {
-        if (comp == null || comp.getPeer() == null) {
+        if (comp == null || comp.peer == null) {
             return null;
-        } else if (comp.getPeer() instanceof LightweightPeer) {
+        } else if (comp.peer instanceof LightweightPeer) {
             return comp.getNativeContainer();
         } else {
             return comp;
--- a/jdk/src/java.desktop/share/classes/java/awt/Label.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Label.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -184,7 +184,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createLabel(this);
+                peer = getComponentFactory().createLabel(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/List.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/List.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -252,7 +252,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createList(this);
+                peer = getComponentFactory().createList(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/Menu.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Menu.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -174,7 +174,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = Toolkit.getDefaultToolkit().createMenu(this);
+                peer = getComponentFactory().createMenu(this);
             int nitems = getItemCount();
             for (int i = 0 ; i < nitems ; i++) {
                 MenuItem mi = getItem(i);
--- a/jdk/src/java.desktop/share/classes/java/awt/MenuBar.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/MenuBar.java	Wed Jul 05 20:33:55 2017 +0200
@@ -143,7 +143,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = Toolkit.getDefaultToolkit().createMenuBar(this);
+                peer = getComponentFactory().createMenuBar(this);
 
             int nmenus = getMenuCount();
             for (int i = 0 ; i < nmenus ; i++) {
--- a/jdk/src/java.desktop/share/classes/java/awt/MenuComponent.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/MenuComponent.java	Wed Jul 05 20:33:55 2017 +0200
@@ -30,6 +30,8 @@
 import java.io.ObjectInputStream;
 import sun.awt.AppContext;
 import sun.awt.AWTAccessor;
+import sun.awt.ComponentFactory;
+
 import javax.accessibility.*;
 
 import java.security.AccessControlContext;
@@ -57,7 +59,7 @@
         }
     }
 
-    transient MenuComponentPeer peer;
+    transient volatile MenuComponentPeer peer;
     transient MenuContainer parent;
 
     /**
@@ -142,6 +144,11 @@
                     menuComp.appContext = appContext;
                 }
                 @Override
+                @SuppressWarnings("unchecked")
+                public <T extends MenuComponentPeer> T getPeer(MenuComponent menuComp) {
+                    return (T) menuComp.peer;
+                }
+                @Override
                 public MenuContainer getParent(MenuComponent menuComp) {
                     return menuComp.parent;
                 }
@@ -179,6 +186,14 @@
                      // getName()
     }
 
+    final ComponentFactory getComponentFactory() {
+        final Toolkit toolkit = Toolkit.getDefaultToolkit();
+        if (toolkit instanceof ComponentFactory) {
+            return (ComponentFactory) toolkit;
+        }
+        throw new AWTError("UI components are unsupported by: " + toolkit);
+    }
+
     /**
      * Gets the name of the menu component.
      * @return        the name of the menu component
@@ -226,16 +241,6 @@
     }
 
     /**
-     * @deprecated As of JDK version 1.1,
-     * programs should not directly manipulate peers.
-     * @return the peer for this component
-     */
-    @Deprecated
-    public MenuComponentPeer getPeer() {
-        return peer;
-    }
-
-    /**
      * Gets the font used for this menu component.
      * @return   the font used in this menu component, if there is one;
      *                  <code>null</code> otherwise
--- a/jdk/src/java.desktop/share/classes/java/awt/MenuItem.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/MenuItem.java	Wed Jul 05 20:33:55 2017 +0200
@@ -233,7 +233,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = Toolkit.getDefaultToolkit().createMenuItem(this);
+                peer = getComponentFactory().createMenuItem(this);
         }
     }
 
--- a/jdk/src/java.desktop/share/classes/java/awt/MouseInfo.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/MouseInfo.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,7 @@
 package java.awt;
 
 import sun.awt.AWTPermissions;
+import sun.awt.ComponentFactory;
 
 /**
  * <code>MouseInfo</code>  provides methods for getting information about the mouse,
@@ -80,8 +81,13 @@
             security.checkPermission(AWTPermissions.WATCH_MOUSE_PERMISSION);
         }
 
+        Toolkit toolkit = Toolkit.getDefaultToolkit();
         Point point = new Point(0, 0);
-        int deviceNum = Toolkit.getDefaultToolkit().getMouseInfoPeer().fillPointWithCoords(point);
+        int deviceNum = 0;
+        if (toolkit instanceof ComponentFactory) {
+            deviceNum = ((ComponentFactory) toolkit).getMouseInfoPeer().fillPointWithCoords(point);
+        }
+
         GraphicsDevice[] gds = GraphicsEnvironment.getLocalGraphicsEnvironment().
                                    getScreenDevices();
         PointerInfo retval = null;
@@ -113,9 +119,13 @@
     /**
      * Returns the number of buttons on the mouse.
      * On systems without a mouse, returns <code>-1</code>.
+     * The number of buttons is obtained from the AWT Toolkit
+     * by requesting the {@code "awt.mouse.numButtons"} desktop property
+     * which is set by the underlying native platform.
      *
      * @exception HeadlessException if GraphicsEnvironment.isHeadless() returns true
      * @return number of buttons on the mouse
+     * @see Toolkit#getDesktopProperty
      * @since 1.5
      */
     public static int getNumberOfButtons() throws HeadlessException {
--- a/jdk/src/java.desktop/share/classes/java/awt/Panel.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Panel.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -83,7 +83,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createPanel(this);
+                peer = getComponentFactory().createPanel(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/PopupMenu.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/PopupMenu.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -121,7 +121,7 @@
             }
             else {
                 if (peer == null)
-                    peer = Toolkit.getDefaultToolkit().createPopupMenu(this);
+                    peer = getComponentFactory().createPopupMenu(this);
                 int nitems = getItemCount();
                 for (int i = 0 ; i < nitems ; i++) {
                     MenuItem mi = getItem(i);
@@ -153,7 +153,6 @@
      *                parent's hierarchy
      * @exception RuntimeException if the parent is not showing on screen
      */
-    @SuppressWarnings("deprecation")
     public void show(Component origin, int x, int y) {
         // Use localParent for thread safety.
         MenuContainer localParent = parent;
@@ -177,7 +176,7 @@
                 throw new IllegalArgumentException("origin not in parent's hierarchy");
             }
         }
-        if (compParent.getPeer() == null || !compParent.isShowing()) {
+        if (compParent.peer == null || !compParent.isShowing()) {
             throw new RuntimeException("parent not showing on screen");
         }
         if (peer == null) {
--- a/jdk/src/java.desktop/share/classes/java/awt/ScrollPane.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/ScrollPane.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,6 @@
  */
 package java.awt;
 
-import java.awt.peer.LightweightPeer;
 import java.awt.peer.ScrollPanePeer;
 import java.awt.event.*;
 import javax.accessibility.*;
@@ -562,7 +561,7 @@
             }
 
             if (peer == null)
-                peer = getToolkit().createScrollPane(this);
+                peer = getComponentFactory().createScrollPane(this);
             super.addNotify();
 
             // Bug 4124460. Restore the adjustable values.
--- a/jdk/src/java.desktop/share/classes/java/awt/Scrollbar.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Scrollbar.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -433,7 +433,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createScrollbar(this);
+                peer = getComponentFactory().createScrollbar(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/TextArea.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/TextArea.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,15 +24,15 @@
  */
 package java.awt;
 
-import java.awt.event.InputEvent;
-import java.awt.event.KeyEvent;
 import java.awt.peer.TextAreaPeer;
-import java.io.ObjectOutputStream;
+import java.io.IOException;
 import java.io.ObjectInputStream;
-import java.io.IOException;
 import java.util.HashSet;
 import java.util.Set;
-import javax.accessibility.*;
+
+import javax.accessibility.AccessibleContext;
+import javax.accessibility.AccessibleState;
+import javax.accessibility.AccessibleStateSet;
 
 /**
  * A <code>TextArea</code> object is a multi-line region
@@ -290,7 +290,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createTextArea(this);
+                peer = getComponentFactory().createTextArea(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/TextField.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/TextField.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -219,7 +219,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createTextField(this);
+                peer = getComponentFactory().createTextField(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/Toolkit.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Toolkit.java	Wed Jul 05 20:33:55 2017 +0200
@@ -25,36 +25,37 @@
 
 package java.awt;
 
-import java.beans.PropertyChangeEvent;
+import java.awt.datatransfer.Clipboard;
+import java.awt.dnd.DragGestureListener;
+import java.awt.dnd.DragGestureRecognizer;
+import java.awt.dnd.DragSource;
 import java.awt.event.*;
-import java.awt.peer.*;
 import java.awt.im.InputMethodHighlight;
+import java.awt.image.ColorModel;
 import java.awt.image.ImageObserver;
 import java.awt.image.ImageProducer;
-import java.awt.image.ColorModel;
-import java.awt.datatransfer.Clipboard;
-import java.awt.dnd.DragSource;
-import java.awt.dnd.DragGestureRecognizer;
-import java.awt.dnd.DragGestureEvent;
-import java.awt.dnd.DragGestureListener;
-import java.awt.dnd.InvalidDnDOperationException;
-import java.awt.dnd.peer.DragSourceContextPeer;
-import java.net.URL;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
 import java.io.File;
 import java.io.FileInputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.EventListener;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.Properties;
+import java.util.ResourceBundle;
+import java.util.StringTokenizer;
+import java.util.WeakHashMap;
 
-import java.util.*;
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
+import sun.awt.AWTAccessor;
+import sun.awt.AWTPermissions;
 import sun.awt.AppContext;
-
 import sun.awt.HeadlessToolkit;
-import sun.awt.NullComponentPeer;
 import sun.awt.PeerEvent;
 import sun.awt.SunToolkit;
-import sun.awt.AWTAccessor;
-import sun.awt.AWTPermissions;
-
 import sun.util.CoreResourceBundleControl;
 
 /**
@@ -112,341 +113,6 @@
  */
 public abstract class Toolkit {
 
-    /**
-     * Creates this toolkit's implementation of the <code>Desktop</code>
-     * using the specified peer interface.
-     * @param     target the desktop to be implemented
-     * @return    this toolkit's implementation of the <code>Desktop</code>
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Desktop
-     * @see       java.awt.peer.DesktopPeer
-     * @since 1.6
-     */
-    protected abstract DesktopPeer createDesktopPeer(Desktop target)
-      throws HeadlessException;
-
-
-    /**
-     * Creates this toolkit's implementation of <code>Button</code> using
-     * the specified peer interface.
-     * @param     target the button to be implemented.
-     * @return    this toolkit's implementation of <code>Button</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Button
-     * @see       java.awt.peer.ButtonPeer
-     */
-    protected abstract ButtonPeer createButton(Button target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>TextField</code> using
-     * the specified peer interface.
-     * @param     target the text field to be implemented.
-     * @return    this toolkit's implementation of <code>TextField</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.TextField
-     * @see       java.awt.peer.TextFieldPeer
-     */
-    protected abstract TextFieldPeer createTextField(TextField target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>Label</code> using
-     * the specified peer interface.
-     * @param     target the label to be implemented.
-     * @return    this toolkit's implementation of <code>Label</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Label
-     * @see       java.awt.peer.LabelPeer
-     */
-    protected abstract LabelPeer createLabel(Label target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>List</code> using
-     * the specified peer interface.
-     * @param     target the list to be implemented.
-     * @return    this toolkit's implementation of <code>List</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.List
-     * @see       java.awt.peer.ListPeer
-     */
-    protected abstract ListPeer createList(java.awt.List target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>Checkbox</code> using
-     * the specified peer interface.
-     * @param     target the check box to be implemented.
-     * @return    this toolkit's implementation of <code>Checkbox</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Checkbox
-     * @see       java.awt.peer.CheckboxPeer
-     */
-    protected abstract CheckboxPeer createCheckbox(Checkbox target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>Scrollbar</code> using
-     * the specified peer interface.
-     * @param     target the scroll bar to be implemented.
-     * @return    this toolkit's implementation of <code>Scrollbar</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Scrollbar
-     * @see       java.awt.peer.ScrollbarPeer
-     */
-    protected abstract ScrollbarPeer createScrollbar(Scrollbar target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>ScrollPane</code> using
-     * the specified peer interface.
-     * @param     target the scroll pane to be implemented.
-     * @return    this toolkit's implementation of <code>ScrollPane</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.ScrollPane
-     * @see       java.awt.peer.ScrollPanePeer
-     * @since     1.1
-     */
-    protected abstract ScrollPanePeer createScrollPane(ScrollPane target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>TextArea</code> using
-     * the specified peer interface.
-     * @param     target the text area to be implemented.
-     * @return    this toolkit's implementation of <code>TextArea</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.TextArea
-     * @see       java.awt.peer.TextAreaPeer
-     */
-    protected abstract TextAreaPeer createTextArea(TextArea target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>Choice</code> using
-     * the specified peer interface.
-     * @param     target the choice to be implemented.
-     * @return    this toolkit's implementation of <code>Choice</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Choice
-     * @see       java.awt.peer.ChoicePeer
-     */
-    protected abstract ChoicePeer createChoice(Choice target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>Frame</code> using
-     * the specified peer interface.
-     * @param     target the frame to be implemented.
-     * @return    this toolkit's implementation of <code>Frame</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Frame
-     * @see       java.awt.peer.FramePeer
-     */
-    protected abstract FramePeer createFrame(Frame target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>Canvas</code> using
-     * the specified peer interface.
-     * @param     target the canvas to be implemented.
-     * @return    this toolkit's implementation of <code>Canvas</code>.
-     * @see       java.awt.Canvas
-     * @see       java.awt.peer.CanvasPeer
-     */
-    protected abstract CanvasPeer       createCanvas(Canvas target);
-
-    /**
-     * Creates this toolkit's implementation of <code>Panel</code> using
-     * the specified peer interface.
-     * @param     target the panel to be implemented.
-     * @return    this toolkit's implementation of <code>Panel</code>.
-     * @see       java.awt.Panel
-     * @see       java.awt.peer.PanelPeer
-     */
-    protected abstract PanelPeer        createPanel(Panel target);
-
-    /**
-     * Creates this toolkit's implementation of <code>Window</code> using
-     * the specified peer interface.
-     * @param     target the window to be implemented.
-     * @return    this toolkit's implementation of <code>Window</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Window
-     * @see       java.awt.peer.WindowPeer
-     */
-    protected abstract WindowPeer createWindow(Window target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>Dialog</code> using
-     * the specified peer interface.
-     * @param     target the dialog to be implemented.
-     * @return    this toolkit's implementation of <code>Dialog</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Dialog
-     * @see       java.awt.peer.DialogPeer
-     */
-    protected abstract DialogPeer createDialog(Dialog target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>MenuBar</code> using
-     * the specified peer interface.
-     * @param     target the menu bar to be implemented.
-     * @return    this toolkit's implementation of <code>MenuBar</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.MenuBar
-     * @see       java.awt.peer.MenuBarPeer
-     */
-    protected abstract MenuBarPeer createMenuBar(MenuBar target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>Menu</code> using
-     * the specified peer interface.
-     * @param     target the menu to be implemented.
-     * @return    this toolkit's implementation of <code>Menu</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Menu
-     * @see       java.awt.peer.MenuPeer
-     */
-    protected abstract MenuPeer createMenu(Menu target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>PopupMenu</code> using
-     * the specified peer interface.
-     * @param     target the popup menu to be implemented.
-     * @return    this toolkit's implementation of <code>PopupMenu</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.PopupMenu
-     * @see       java.awt.peer.PopupMenuPeer
-     * @since     1.1
-     */
-    protected abstract PopupMenuPeer createPopupMenu(PopupMenu target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>MenuItem</code> using
-     * the specified peer interface.
-     * @param     target the menu item to be implemented.
-     * @return    this toolkit's implementation of <code>MenuItem</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.MenuItem
-     * @see       java.awt.peer.MenuItemPeer
-     */
-    protected abstract MenuItemPeer createMenuItem(MenuItem target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>FileDialog</code> using
-     * the specified peer interface.
-     * @param     target the file dialog to be implemented.
-     * @return    this toolkit's implementation of <code>FileDialog</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.FileDialog
-     * @see       java.awt.peer.FileDialogPeer
-     */
-    protected abstract FileDialogPeer createFileDialog(FileDialog target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>CheckboxMenuItem</code> using
-     * the specified peer interface.
-     * @param     target the checkbox menu item to be implemented.
-     * @return    this toolkit's implementation of <code>CheckboxMenuItem</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.CheckboxMenuItem
-     * @see       java.awt.peer.CheckboxMenuItemPeer
-     */
-    protected abstract CheckboxMenuItemPeer createCheckboxMenuItem(
-        CheckboxMenuItem target) throws HeadlessException;
-
-    /**
-     * Obtains this toolkit's implementation of helper class for
-     * <code>MouseInfo</code> operations.
-     * @return    this toolkit's implementation of  helper for <code>MouseInfo</code>
-     * @throws    UnsupportedOperationException if this operation is not implemented
-     * @see       java.awt.peer.MouseInfoPeer
-     * @see       java.awt.MouseInfo
-     * @since 1.5
-     */
-    protected MouseInfoPeer getMouseInfoPeer() {
-        throw new UnsupportedOperationException("Not implemented");
-    }
-
-    private static LightweightPeer lightweightMarker;
-
-    /**
-     * Creates a peer for a component or container.  This peer is windowless
-     * and allows the Component and Container classes to be extended directly
-     * to create windowless components that are defined entirely in java.
-     *
-     * @param  target The Component to be created.
-     * @return the peer for the specified component
-     */
-    protected LightweightPeer createComponent(Component target) {
-        if (lightweightMarker == null) {
-            lightweightMarker = new NullComponentPeer();
-        }
-        return lightweightMarker;
-    }
-
-    /**
-     * Creates this toolkit's implementation of <code>Font</code> using
-     * the specified peer interface.
-     * @param     name the font to be implemented
-     * @param     style the style of the font, such as <code>PLAIN</code>,
-     *            <code>BOLD</code>, <code>ITALIC</code>, or a combination
-     * @return    this toolkit's implementation of <code>Font</code>
-     * @see       java.awt.Font
-     * @see       java.awt.peer.FontPeer
-     * @see       java.awt.GraphicsEnvironment#getAllFonts
-     * @deprecated  see java.awt.GraphicsEnvironment#getAllFonts
-     */
-    @Deprecated
-    protected abstract FontPeer getFontPeer(String name, int style);
-
     // The following method is called by the private method
     // <code>updateSystemColors</code> in <code>SystemColor</code>.
 
@@ -1749,17 +1415,6 @@
     }
 
     /**
-     * Creates the peer for a DragSourceContext.
-     * Always throws InvalidDndOperationException if
-     * GraphicsEnvironment.isHeadless() returns true.
-     *
-     * @param  dge the {@code DragGestureEvent}
-     * @return the peer created
-     * @see java.awt.GraphicsEnvironment#isHeadless
-     */
-    public abstract DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) throws InvalidDnDOperationException;
-
-    /**
      * Creates a concrete, platform dependent, subclass of the abstract
      * DragGestureRecognizer class requested, and associates it with the
      * DragSource, Component and DragGestureListener specified.
--- a/jdk/src/java.desktop/share/classes/java/awt/Window.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Window.java	Wed Jul 05 20:33:55 2017 +0200
@@ -29,7 +29,6 @@
 import java.awt.geom.Point2D;
 import java.awt.im.InputContext;
 import java.awt.image.BufferStrategy;
-import java.awt.image.BufferedImage;
 import java.awt.peer.ComponentPeer;
 import java.awt.peer.WindowPeer;
 import java.beans.PropertyChangeListener;
@@ -56,7 +55,6 @@
 import sun.awt.CausedFocusEvent;
 import sun.awt.SunToolkit;
 import sun.awt.util.IdentityArrayList;
-import sun.java2d.Disposer;
 import sun.java2d.pipe.Region;
 import sun.security.action.GetPropertyAction;
 import sun.util.logging.PlatformLogger;
@@ -755,15 +753,14 @@
      * @see Container#removeNotify
      * @since 1.0
      */
-    @SuppressWarnings("deprecation")
     public void addNotify() {
         synchronized (getTreeLock()) {
             Container parent = this.parent;
-            if (parent != null && parent.getPeer() == null) {
+            if (parent != null && parent.peer == null) {
                 parent.addNotify();
             }
             if (peer == null) {
-                peer = getToolkit().createWindow(this);
+                peer = getComponentFactory().createWindow(this);
             }
             synchronized (allWindows) {
                 allWindows.add(this);
@@ -802,7 +799,7 @@
     @SuppressWarnings("deprecation")
     public void pack() {
         Container parent = this.parent;
-        if (parent != null && parent.getPeer() == null) {
+        if (parent != null && parent.peer == null) {
             parent.addNotify();
         }
         if (peer == null) {
@@ -1072,10 +1069,9 @@
         }
     }
 
-    @SuppressWarnings("deprecation")
     static void updateChildFocusableWindowState(Window w) {
-        if (w.getPeer() != null && w.isShowing()) {
-            ((WindowPeer)w.getPeer()).updateFocusableWindowState();
+        if (w.peer != null && w.isShowing()) {
+            ((WindowPeer)w.peer).updateFocusableWindowState();
         }
         for (int i = 0; i < w.ownedWindowList.size(); i++) {
             Window child = w.ownedWindowList.elementAt(i).get();
@@ -1160,10 +1156,9 @@
      * as reported in javadoc. So we need to implement this functionality even if a
      * child overrides dispose() in a wrong way without calling super.dispose().
      */
-    @SuppressWarnings("deprecation")
     void disposeImpl() {
         dispose();
-        if (getPeer() != null) {
+        if (peer != null) {
             doDispose();
         }
     }
@@ -3651,7 +3646,7 @@
                 }
             }
             this.opacity = opacity;
-            WindowPeer peer = (WindowPeer)getPeer();
+            WindowPeer peer = (WindowPeer) this.peer;
             if (peer != null) {
                 peer.setOpacity(opacity);
             }
@@ -3728,7 +3723,6 @@
      *
      * @since 1.7
      */
-    @SuppressWarnings("deprecation")
     public void setShape(Shape shape) {
         synchronized (getTreeLock()) {
             if (shape != null) {
@@ -3746,7 +3740,7 @@
                 }
             }
             this.shape = (shape == null) ? null : new Path2D.Float(shape);
-            WindowPeer peer = (WindowPeer)getPeer();
+            WindowPeer peer = (WindowPeer) this.peer;
             if (peer != null) {
                 peer.applyShape(shape == null ? null : Region.getInstance(shape, null));
             }
@@ -3846,7 +3840,6 @@
      * @see GraphicsConfiguration#isTranslucencyCapable()
      */
     @Override
-    @SuppressWarnings("deprecation")
     public void setBackground(Color bgColor) {
         Color oldBg = getBackground();
         super.setBackground(bgColor);
@@ -3874,7 +3867,7 @@
         } else if ((oldAlpha < 255) && (alpha == 255)) {
             setLayersOpaque(this, true);
         }
-        WindowPeer peer = (WindowPeer)getPeer();
+        WindowPeer peer = (WindowPeer) this.peer;
         if (peer != null) {
             peer.setOpaque(alpha == 255);
         }
@@ -3899,10 +3892,9 @@
         return bg != null ? bg.getAlpha() == 255 : true;
     }
 
-    @SuppressWarnings("deprecation")
     private void updateWindow() {
         synchronized (getTreeLock()) {
-            WindowPeer peer = (WindowPeer)getPeer();
+            WindowPeer peer = (WindowPeer) this.peer;
             if (peer != null) {
                 peer.updateWindow();
             }
@@ -4090,7 +4082,6 @@
                 window.securityWarningHeight = height;
             }
 
-            @SuppressWarnings("deprecation")
             public void setSecurityWarningPosition(Window window,
                     Point2D point, float alignmentX, float alignmentY)
             {
@@ -4100,7 +4091,7 @@
                 window.securityWarningAlignmentY = alignmentY;
 
                 synchronized (window.getTreeLock()) {
-                    WindowPeer peer = (WindowPeer)window.getPeer();
+                    WindowPeer peer = (WindowPeer) window.peer;
                     if (peer != null) {
                         peer.repositionSecurityWarning();
                     }
--- a/jdk/src/java.desktop/share/classes/java/awt/dnd/DragSource.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/dnd/DragSource.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,13 +35,15 @@
 import java.awt.datatransfer.FlavorMap;
 import java.awt.datatransfer.SystemFlavorMap;
 import java.awt.datatransfer.Transferable;
-import java.awt.dnd.peer.DragSourceContextPeer;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
 import java.security.AccessController;
 import java.util.EventListener;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.DragSourceContextAccessor;
 import sun.awt.dnd.SunDragSourceContextPeer;
 import sun.security.action.GetIntegerAction;
 
@@ -303,22 +305,16 @@
         try {
             if (flavorMap != null) this.flavorMap = flavorMap;
 
-            DragSourceContextPeer dscp = Toolkit.getDefaultToolkit().createDragSourceContextPeer(trigger);
-
-            DragSourceContext     dsc = createDragSourceContext(dscp,
-                                                                trigger,
-                                                                dragCursor,
-                                                                dragImage,
-                                                                imageOffset,
-                                                                transferable,
-                                                                dsl
-                                                                );
+            DragSourceContext dsc = createDragSourceContext(trigger, dragCursor,
+                                                            dragImage,
+                                                            imageOffset,
+                                                            transferable, dsl);
 
             if (dsc == null) {
                 throw new InvalidDnDOperationException();
             }
-
-            dscp.startDrag(dsc, dsc.getCursor(), dragImage, imageOffset); // may throw
+            DragSourceContextAccessor acc = AWTAccessor.getDragSourceContextAccessor();
+            acc.getPeer(dsc).startDrag(dsc, dsc.getCursor(), dragImage, imageOffset); // may throw
         } catch (RuntimeException e) {
             SunDragSourceContextPeer.setDragDropInProgress(false);
             throw e;
@@ -442,7 +438,6 @@
      * is registered with the created <code>DragSourceContext</code>,
      * but <code>NullPointerException</code> is not thrown.
      *
-     * @param dscp          The <code>DragSourceContextPeer</code> for this drag
      * @param dgl           The <code>DragGestureEvent</code> that triggered the
      *                      drag
      * @param dragCursor     The initial {@code Cursor} for this drag operation
@@ -473,8 +468,13 @@
      *         event are equal to <code>DnDConstants.ACTION_NONE</code>.
      */
 
-    protected DragSourceContext createDragSourceContext(DragSourceContextPeer dscp, DragGestureEvent dgl, Cursor dragCursor, Image dragImage, Point imageOffset, Transferable t, DragSourceListener dsl) {
-        return new DragSourceContext(dscp, dgl, dragCursor, dragImage, imageOffset, t, dsl);
+    protected DragSourceContext createDragSourceContext(DragGestureEvent dgl,
+                                                        Cursor dragCursor,
+                                                        Image dragImage,
+                                                        Point imageOffset,
+                                                        Transferable t,
+                                                        DragSourceListener dsl) {
+        return new DragSourceContext(dgl, dragCursor, dragImage, imageOffset, t, dsl);
     }
 
     /**
--- a/jdk/src/java.desktop/share/classes/java/awt/dnd/DragSourceContext.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/dnd/DragSourceContext.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,24 +25,25 @@
 
 package java.awt.dnd;
 
+import java.awt.AWTError;
 import java.awt.Component;
 import java.awt.Cursor;
 import java.awt.Image;
 import java.awt.Point;
-
+import java.awt.Toolkit;
 import java.awt.datatransfer.DataFlavor;
 import java.awt.datatransfer.Transferable;
 import java.awt.datatransfer.UnsupportedFlavorException;
-
 import java.awt.dnd.peer.DragSourceContextPeer;
-
 import java.io.IOException;
 import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
 import java.io.Serializable;
+import java.util.TooManyListenersException;
 
-import java.util.TooManyListenersException;
+import sun.awt.AWTAccessor;
+import sun.awt.ComponentFactory;
 
 /**
  * The <code>DragSourceContext</code> class is responsible for managing the
@@ -123,6 +124,10 @@
 
     protected static final int CHANGED = 3;
 
+    static {
+        AWTAccessor.setDragSourceContextAccessor(dsc -> dsc.peer);
+    }
+
     /**
      * Called from <code>DragSource</code>, this constructor creates a new
      * <code>DragSourceContext</code> given the
@@ -155,7 +160,6 @@
      * If <code>DragSourceListener</code> is <code>null</code> no exception
      * is thrown.
      *
-     * @param dscp       the <code>DragSourceContextPeer</code> for this drag
      * @param trigger    the triggering event
      * @param dragCursor     the initial {@code Cursor} for this drag operation
      *                       or {@code null} for the default cursor handling;
@@ -179,10 +183,16 @@
      * @throws NullPointerException if dscp, trigger, or t are null, or
      *         if dragImage is non-null and offset is null
      */
-    public DragSourceContext(DragSourceContextPeer dscp,
-                             DragGestureEvent trigger, Cursor dragCursor,
+    public DragSourceContext(DragGestureEvent trigger, Cursor dragCursor,
                              Image dragImage, Point offset, Transferable t,
                              DragSourceListener dsl) {
+        Toolkit toolkit = Toolkit.getDefaultToolkit();
+        if (!(toolkit instanceof ComponentFactory)) {
+            throw new AWTError("Unsupported toolkit: " + toolkit);
+        }
+        DragSourceContextPeer dscp = ((ComponentFactory) toolkit).
+                createDragSourceContextPeer(trigger);
+
         if (dscp == null) {
             throw new NullPointerException("DragSourceContextPeer");
         }
@@ -623,8 +633,7 @@
     /*
      * fields
      */
-
-    private transient DragSourceContextPeer peer;
+    private final transient DragSourceContextPeer peer;
 
     /**
      * The event which triggered the start of the drag.
--- a/jdk/src/java.desktop/share/classes/java/awt/dnd/DropTarget.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/dnd/DropTarget.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,6 +49,9 @@
 import java.awt.peer.LightweightPeer;
 import java.awt.dnd.peer.DropTargetPeer;
 
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
+
 
 /**
  * The <code>DropTarget</code> is associated
@@ -204,19 +207,13 @@
         if (component == c || component != null && component.equals(c))
             return;
 
-        Component     old;
-        ComponentPeer oldPeer = null;
+        final Component old = component;
 
-        if ((old = component) != null) {
+        if (old  != null) {
             clearAutoscroll();
 
             component = null;
-
-            if (componentPeer != null) {
-                oldPeer = componentPeer;
-                removeNotify(componentPeer);
-            }
-
+            removeNotify();
             old.setDropTarget(null);
 
         }
@@ -226,7 +223,7 @@
         } catch (Exception e) { // undo the change
             if (old != null) {
                 old.setDropTarget(this);
-                addNotify(oldPeer);
+                addNotify();
             }
         }
     }
@@ -494,24 +491,24 @@
      * association of the ComponentPeer with the Component may result in
      * a malfunction of the DnD system.
      **********************************************************************
-     *
-     * @param peer The Peer of the Component we are associated with!
-     *
      */
-
-    @SuppressWarnings("deprecation")
-    public void addNotify(ComponentPeer peer) {
-        if (peer == componentPeer) return;
+    public void addNotify() {
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        ComponentPeer peer = acc.getPeer(component);
+        if (peer == null || peer == componentPeer) {
+            return;
+        }
 
         componentPeer = peer;
 
+
         for (Component c = component;
              c != null && peer instanceof LightweightPeer; c = c.getParent()) {
-            peer = c.getPeer();
+            peer = acc.getPeer(c);
         }
 
         if (peer instanceof DropTargetPeer) {
-            nativePeer = peer;
+            nativePeer = (DropTargetPeer) peer;
             ((DropTargetPeer)peer).addDropTarget(this);
         } else {
             nativePeer = null;
@@ -530,15 +527,14 @@
      * disassociation of the ComponentPeer from the Component may result in
      * a malfunction of the DnD system.
      **********************************************************************
-     *
-     * @param peer The Peer of the Component we are being disassociated from!
      */
 
-    public void removeNotify(ComponentPeer peer) {
-        if (nativePeer != null)
-            ((DropTargetPeer)nativePeer).removeDropTarget(this);
-
-        componentPeer = nativePeer = null;
+    public void removeNotify() {
+        if (nativePeer != null) {
+            nativePeer.removeDropTarget(this);
+        }
+        componentPeer = null;
+        nativePeer = null;
 
         synchronized (this) {
             if (isDraggingInside) {
@@ -834,7 +830,7 @@
     /*
      * That Component's "native" Peer
      */
-    private transient ComponentPeer nativePeer;
+    private transient DropTargetPeer nativePeer;
 
 
     /**
--- a/jdk/src/java.desktop/share/classes/java/awt/dnd/DropTargetContext.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/dnd/DropTargetContext.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -39,6 +39,8 @@
 import java.util.Arrays;
 import java.util.List;
 
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.DropTargetContextAccessor;
 
 /**
  * A <code>DropTargetContext</code> is created
@@ -58,6 +60,19 @@
 
     private static final long serialVersionUID = -634158968993743371L;
 
+    static {
+        AWTAccessor.setDropTargetContextAccessor(new DropTargetContextAccessor() {
+            @Override
+            public void reset(DropTargetContext dtc) {
+                dtc.reset();
+            }
+            @Override
+            public void setDropTargetContextPeer(DropTargetContext dtc,
+                                                 DropTargetContextPeer dtcp) {
+                dtc.setDropTargetContextPeer(dtcp);
+            }
+        });
+    }
     /**
      * Construct a <code>DropTargetContext</code>
      * given a specified <code>DropTarget</code>.
@@ -90,20 +105,9 @@
     public Component getComponent() { return dropTarget.getComponent(); }
 
     /**
-     * Called when associated with the <code>DropTargetContextPeer</code>.
-     *
-     * @param dtcp the <code>DropTargetContextPeer</code>
-     */
-
-    public void addNotify(DropTargetContextPeer dtcp) {
-        dropTargetContextPeer = dtcp;
-    }
-
-    /**
      * Called when disassociated with the <code>DropTargetContextPeer</code>.
      */
-
-    public void removeNotify() {
+    void reset() {
         dropTargetContextPeer = null;
         transferable          = null;
     }
@@ -282,12 +286,18 @@
      *
      * @return the platform peer
      */
-
     DropTargetContextPeer getDropTargetContextPeer() {
         return dropTargetContextPeer;
     }
 
     /**
+     * Sets the {@code DropTargetContextPeer}
+     */
+    void setDropTargetContextPeer(final DropTargetContextPeer dtcp) {
+        dropTargetContextPeer = dtcp;
+    }
+
+    /**
      * Creates a TransferableProxy to proxy for the specified
      * Transferable.
      *
@@ -412,7 +422,7 @@
      *
      * @serial
      */
-    private DropTarget dropTarget;
+    private final DropTarget dropTarget;
 
     private transient DropTargetContextPeer dropTargetContextPeer;
 
--- a/jdk/src/java.desktop/share/classes/java/awt/geom/Path2D.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/geom/Path2D.java	Wed Jul 05 20:33:55 2017 +0200
@@ -101,6 +101,8 @@
 
     static final int INIT_SIZE = 20;
     static final int EXPAND_MAX = 500;
+    static final int EXPAND_MAX_COORDS = EXPAND_MAX * 2;
+    static final int EXPAND_MIN = 10; // ensure > 6 (cubics)
 
     /**
      * Constructs a new empty {@code Path2D} object.
@@ -141,6 +143,42 @@
     abstract int rectCrossings(double rxmin, double rymin,
                                double rxmax, double rymax);
 
+    static byte[] expandPointTypes(byte[] oldPointTypes, int needed) {
+        final int oldSize = oldPointTypes.length;
+        final int newSizeMin = oldSize + needed;
+        if (newSizeMin < oldSize) {
+            // hard overflow failure - we can't even accommodate
+            // new items without overflowing
+            throw new ArrayIndexOutOfBoundsException(
+                          "pointTypes exceeds maximum capacity !");
+        }
+        // growth algorithm computation
+        int grow = oldSize;
+        if (grow > EXPAND_MAX) {
+            grow = Math.max(EXPAND_MAX, oldSize >> 3); // 1/8th min
+        } else if (grow < EXPAND_MIN) {
+            grow = EXPAND_MIN;
+        }
+        assert grow > 0;
+
+        int newSize = oldSize + grow;
+        if (newSize < newSizeMin) {
+            // overflow in growth algorithm computation
+            newSize = Integer.MAX_VALUE;
+        }
+        while (true) {
+            try {
+                // try allocating the larger array
+                return Arrays.copyOf(oldPointTypes, newSize);
+            } catch (OutOfMemoryError oome) {
+                if (newSize == newSizeMin) {
+                    throw oome;
+                }
+            }
+            newSize = newSizeMin + (newSize - newSizeMin) / 2;
+        }
+    }
+
     /**
      * The {@code Float} class defines a geometric path with
      * coordinates stored in single precision floating point.
@@ -279,31 +317,53 @@
                                      floatCoords[coordindex+1]);
         }
 
+        @Override
         void needRoom(boolean needMove, int newCoords) {
-            if (needMove && numTypes == 0) {
+            if ((numTypes == 0) && needMove) {
                 throw new IllegalPathStateException("missing initial moveto "+
                                                     "in path definition");
             }
-            int size = pointTypes.length;
-            if (numTypes >= size) {
-                int grow = size;
-                if (grow > EXPAND_MAX) {
-                    grow = EXPAND_MAX;
-                } else if (grow == 0) {
-                    grow = 1;
-                }
-                pointTypes = Arrays.copyOf(pointTypes, size+grow);
+            if (numTypes >= pointTypes.length) {
+                pointTypes = expandPointTypes(pointTypes, 1);
+            }
+            if (numCoords > (floatCoords.length - newCoords)) {
+                floatCoords = expandCoords(floatCoords, newCoords);
+            }
+        }
+
+        static float[] expandCoords(float[] oldCoords, int needed) {
+            final int oldSize = oldCoords.length;
+            final int newSizeMin = oldSize + needed;
+            if (newSizeMin < oldSize) {
+                // hard overflow failure - we can't even accommodate
+                // new items without overflowing
+                throw new ArrayIndexOutOfBoundsException(
+                              "coords exceeds maximum capacity !");
             }
-            size = floatCoords.length;
-            if (numCoords + newCoords > size) {
-                int grow = size;
-                if (grow > EXPAND_MAX * 2) {
-                    grow = EXPAND_MAX * 2;
+            // growth algorithm computation
+            int grow = oldSize;
+            if (grow > EXPAND_MAX_COORDS) {
+                grow = Math.max(EXPAND_MAX_COORDS, oldSize >> 3); // 1/8th min
+            } else if (grow < EXPAND_MIN) {
+                grow = EXPAND_MIN;
+            }
+            assert grow > needed;
+
+            int newSize = oldSize + grow;
+            if (newSize < newSizeMin) {
+                // overflow in growth algorithm computation
+                newSize = Integer.MAX_VALUE;
+            }
+            while (true) {
+                try {
+                    // try allocating the larger array
+                    return Arrays.copyOf(oldCoords, newSize);
+                } catch (OutOfMemoryError oome) {
+                    if (newSize == newSizeMin) {
+                        throw oome;
+                    }
                 }
-                if (grow < newCoords) {
-                    grow = newCoords;
-                }
-                floatCoords = Arrays.copyOf(floatCoords, size+grow);
+                newSize = newSizeMin + (newSize - newSizeMin) / 2;
             }
         }
 
@@ -1126,31 +1186,53 @@
                                       doubleCoords[coordindex+1]);
         }
 
+        @Override
         void needRoom(boolean needMove, int newCoords) {
-            if (needMove && numTypes == 0) {
+            if ((numTypes == 0) && needMove) {
                 throw new IllegalPathStateException("missing initial moveto "+
                                                     "in path definition");
             }
-            int size = pointTypes.length;
-            if (numTypes >= size) {
-                int grow = size;
-                if (grow > EXPAND_MAX) {
-                    grow = EXPAND_MAX;
-                } else if (grow == 0) {
-                    grow = 1;
-                }
-                pointTypes = Arrays.copyOf(pointTypes, size+grow);
+            if (numTypes >= pointTypes.length) {
+                pointTypes = expandPointTypes(pointTypes, 1);
+            }
+            if (numCoords > (doubleCoords.length - newCoords)) {
+                doubleCoords = expandCoords(doubleCoords, newCoords);
+            }
+        }
+
+        static double[] expandCoords(double[] oldCoords, int needed) {
+            final int oldSize = oldCoords.length;
+            final int newSizeMin = oldSize + needed;
+            if (newSizeMin < oldSize) {
+                // hard overflow failure - we can't even accommodate
+                // new items without overflowing
+                throw new ArrayIndexOutOfBoundsException(
+                              "coords exceeds maximum capacity !");
             }
-            size = doubleCoords.length;
-            if (numCoords + newCoords > size) {
-                int grow = size;
-                if (grow > EXPAND_MAX * 2) {
-                    grow = EXPAND_MAX * 2;
+            // growth algorithm computation
+            int grow = oldSize;
+            if (grow > EXPAND_MAX_COORDS) {
+                grow = Math.max(EXPAND_MAX_COORDS, oldSize >> 3); // 1/8th min
+            } else if (grow < EXPAND_MIN) {
+                grow = EXPAND_MIN;
+            }
+            assert grow > needed;
+
+            int newSize = oldSize + grow;
+            if (newSize < newSizeMin) {
+                // overflow in growth algorithm computation
+                newSize = Integer.MAX_VALUE;
+            }
+            while (true) {
+                try {
+                    // try allocating the larger array
+                    return Arrays.copyOf(oldCoords, newSize);
+                } catch (OutOfMemoryError oome) {
+                    if (newSize == newSizeMin) {
+                        throw oome;
+                    }
                 }
-                if (grow < newCoords) {
-                    grow = newCoords;
-                }
-                doubleCoords = Arrays.copyOf(doubleCoords, size+grow);
+                newSize = newSizeMin + (newSize - newSizeMin) / 2;
             }
         }
 
--- a/jdk/src/java.desktop/share/classes/java/beans/IndexedPropertyDescriptor.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/beans/IndexedPropertyDescriptor.java	Wed Jul 05 20:33:55 2017 +0200
@@ -431,7 +431,7 @@
     /**
      * Package-private constructor.
      * Merge two property descriptors.  Where they conflict, give the
-     * second argument (y) priority over the first argumnnt (x).
+     * second argument (y) priority over the first argument (x).
      *
      * @param x  The first (lower priority) PropertyDescriptor
      * @param y  The second (higher priority) PropertyDescriptor
@@ -439,39 +439,37 @@
 
     IndexedPropertyDescriptor(PropertyDescriptor x, PropertyDescriptor y) {
         super(x,y);
-        if (x instanceof IndexedPropertyDescriptor) {
-            IndexedPropertyDescriptor ix = (IndexedPropertyDescriptor)x;
-            try {
-                Method xr = ix.getIndexedReadMethod();
-                if (xr != null) {
-                    setIndexedReadMethod(xr);
-                }
+        Method tr = null;
+        Method tw = null;
 
-                Method xw = ix.getIndexedWriteMethod();
-                if (xw != null) {
-                    setIndexedWriteMethod(xw);
-                }
-            } catch (IntrospectionException ex) {
-                // Should not happen
-                throw new AssertionError(ex);
+        if (x instanceof IndexedPropertyDescriptor) {
+            IndexedPropertyDescriptor ix = (IndexedPropertyDescriptor) x;
+            tr = ix.getIndexedReadMethod();
+            tw = ix.getIndexedWriteMethod();
+        }
+        if (y instanceof IndexedPropertyDescriptor) {
+            IndexedPropertyDescriptor iy = (IndexedPropertyDescriptor) y;
+            Method yr = iy.getIndexedReadMethod();
+            if (isAssignable(tr, yr)) {
+                tr = yr;
+            }
+
+            Method yw = iy.getIndexedWriteMethod();
+            if (isAssignable(tw, yw)) {
+                tw = yw;
             }
         }
-        if (y instanceof IndexedPropertyDescriptor) {
-            IndexedPropertyDescriptor iy = (IndexedPropertyDescriptor)y;
-            try {
-                Method yr = iy.getIndexedReadMethod();
-                if (yr != null && yr.getDeclaringClass() == getClass0()) {
-                    setIndexedReadMethod(yr);
-                }
 
-                Method yw = iy.getIndexedWriteMethod();
-                if (yw != null && yw.getDeclaringClass() == getClass0()) {
-                    setIndexedWriteMethod(yw);
-                }
-            } catch (IntrospectionException ex) {
-                // Should not happen
-                throw new AssertionError(ex);
+        try {
+            if(tr != null) {
+                setIndexedReadMethod(tr);
             }
+            if(tw != null) {
+                setIndexedWriteMethod(tw);
+            }
+        } catch(IntrospectionException ex) {
+            // Should not happen
+            throw new AssertionError(ex);
         }
     }
 
--- a/jdk/src/java.desktop/share/classes/java/beans/PropertyDescriptor.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/beans/PropertyDescriptor.java	Wed Jul 05 20:33:55 2017 +0200
@@ -748,7 +748,7 @@
         appendTo(sb, "writeMethod", this.writeMethodRef.get());
     }
 
-    private boolean isAssignable(Method m1, Method m2) {
+    boolean isAssignable(Method m1, Method m2) {
         if (m1 == null) {
             return true; // choose second method
         }
--- a/jdk/src/java.desktop/share/classes/javax/swing/AbstractCellEditor.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/AbstractCellEditor.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -53,7 +53,13 @@
 @SuppressWarnings("serial") // Same-version serialization only
 public abstract class AbstractCellEditor implements CellEditor, Serializable {
 
+    /**
+     * The list of listeners.
+     */
     protected EventListenerList listenerList = new EventListenerList();
+    /**
+     * The change event.
+     */
     transient protected ChangeEvent changeEvent = null;
 
     // Force this to be implemented.
--- a/jdk/src/java.desktop/share/classes/javax/swing/AbstractListModel.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/AbstractListModel.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -50,6 +50,9 @@
 @SuppressWarnings("serial") // Same-version serialization only
 public abstract class AbstractListModel<E> implements ListModel<E>, Serializable
 {
+    /**
+     * The listener list.
+     */
     protected EventListenerList listenerList = new EventListenerList();
 
 
--- a/jdk/src/java.desktop/share/classes/javax/swing/ButtonGroup.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/ButtonGroup.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -69,7 +69,9 @@
 @SuppressWarnings("serial")
 public class ButtonGroup implements Serializable {
 
-    // the list of buttons participating in this group
+    /**
+     * The list of buttons participating in this group.
+     */
     protected Vector<AbstractButton> buttons = new Vector<AbstractButton>();
 
     /**
--- a/jdk/src/java.desktop/share/classes/javax/swing/DefaultFocusManager.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/DefaultFocusManager.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -57,10 +57,19 @@
     private final LayoutComparator comparator =
         new LayoutComparator();
 
+    /**
+     * Constructs a {@code DefaultFocusManager}.
+     */
     public DefaultFocusManager() {
         setDefaultFocusTraversalPolicy(gluePolicy);
     }
 
+    /**
+     * Returns the component after.
+     * @return the component after
+     * @param aContainer a container
+     * @param aComponent a component
+     */
     public Component getComponentAfter(Container aContainer,
                                        Component aComponent)
     {
@@ -83,6 +92,12 @@
         return null;
     }
 
+    /**
+     * Returns the component before.
+     * @return the component before
+     * @param aContainer a container
+     * @param aComponent a component
+     */
     public Component getComponentBefore(Container aContainer,
                                         Component aComponent)
     {
@@ -105,6 +120,11 @@
         return null;
     }
 
+    /**
+     * Returns the first component.
+     * @return the first component
+     * @param aContainer a container
+     */
     public Component getFirstComponent(Container aContainer) {
         Container root = (aContainer.isFocusCycleRoot())
             ? aContainer
@@ -125,6 +145,11 @@
         return null;
     }
 
+    /**
+     * Returns the last component.
+     * @return the last component
+     * @param aContainer a container
+     */
     public Component getLastComponent(Container aContainer) {
         Container root = (aContainer.isFocusCycleRoot())
             ? aContainer
@@ -145,6 +170,12 @@
         return null;
     }
 
+    /**
+     * Compares the components by their focus traversal cycle order.
+     * @param a the first component
+     * @param b the second component
+     * @return a comparison of the components by their focus traversal cycle order
+     */
     public boolean compareTabOrder(Component a, Component b) {
         return (comparator.compare(a, b) < 0);
     }
--- a/jdk/src/java.desktop/share/classes/javax/swing/DefaultListCellRenderer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/DefaultListCellRenderer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -84,6 +84,9 @@
     */
     private static final Border SAFE_NO_FOCUS_BORDER = new EmptyBorder(1, 1, 1, 1);
     private static final Border DEFAULT_NO_FOCUS_BORDER = new EmptyBorder(1, 1, 1, 1);
+    /**
+     * No focus border
+     */
     protected static Border noFocusBorder = DEFAULT_NO_FOCUS_BORDER;
 
     /**
--- a/jdk/src/java.desktop/share/classes/javax/swing/DefaultListSelectionModel.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/DefaultListSelectionModel.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -68,8 +68,14 @@
     private int lastChangedIndex = MIN;
 
     private BitSet value = new BitSet(32);
+    /**
+     * The list of listeners.
+     */
     protected EventListenerList listenerList = new EventListenerList();
 
+    /**
+     * Whether or not the lead anchor notification is enabled.
+     */
     protected boolean leadAnchorNotificationEnabled = true;
 
     /** {@inheritDoc} */
@@ -139,6 +145,8 @@
 
     /**
      * Notifies listeners that we have ended a series of adjustments.
+     * @param isAdjusting true if this is the final change in a series of
+     *          adjustments
      */
     protected void fireValueChanged(boolean isAdjusting) {
         if (lastChangedIndex == MIN) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/DefaultSingleSelectionModel.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/DefaultSingleSelectionModel.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,7 +47,8 @@
 @SuppressWarnings("serial") // Same-version serialization only
 public class DefaultSingleSelectionModel implements SingleSelectionModel,
 Serializable {
-    /* Only one ModelChangeEvent is needed per model instance since the
+    /**
+     * Only one ModelChangeEvent is needed per model instance since the
      * event's only (read-only) state is the source property.  The source
      * of events generated here is always "this".
      */
@@ -57,12 +58,16 @@
 
     private int index = -1;
 
-    // implements javax.swing.SingleSelectionModel
+    /**
+     * {@inheritDoc}
+     */
     public int getSelectedIndex() {
         return index;
     }
 
-    // implements javax.swing.SingleSelectionModel
+    /**
+     * {@inheritDoc}
+     */
     public void setSelectedIndex(int index) {
         if (this.index != index) {
             this.index = index;
@@ -70,12 +75,16 @@
         }
     }
 
-    // implements javax.swing.SingleSelectionModel
+    /**
+     * {@inheritDoc}
+     */
     public void clearSelection() {
         setSelectedIndex(-1);
     }
 
-    // implements javax.swing.SingleSelectionModel
+    /**
+     * {@inheritDoc}
+     */
     public boolean isSelected() {
         boolean ret = false;
         if (getSelectedIndex() != -1) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/DesktopManager.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/DesktopManager.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -145,6 +145,7 @@
      * necessary state.  Normally <b>f</b> will be a JInternalFrame.
      *
      * @param f  the {@code JComponent} being resized
+     * @param direction the direction
      */
     void beginResizingFrame(JComponent f, int direction);
 
--- a/jdk/src/java.desktop/share/classes/javax/swing/JColorChooser.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JColorChooser.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -561,6 +561,9 @@
 // Accessibility support
 ////////////////
 
+    /**
+     * The accessible context.
+     */
     protected AccessibleContext accessibleContext = null;
 
     /**
--- a/jdk/src/java.desktop/share/classes/javax/swing/JComboBox.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JComboBox.java	Wed Jul 05 20:33:55 2017 +0200
@@ -577,6 +577,8 @@
                 if (!found) {
                     return;
                 }
+
+                getEditor().setItem(anObject);
             }
 
             // Must toggle the state of this flag since this method
@@ -1319,16 +1321,12 @@
      * do not call or override.
      */
     public void actionPerformed(ActionEvent e) {
-        ComboBoxEditor editor = getEditor();
-        if ((editor != null) && (e != null) && (editor == e.getSource()
-                || editor.getEditorComponent() == e.getSource())) {
-            setPopupVisible(false);
-            getModel().setSelectedItem(editor.getItem());
-            String oldCommand = getActionCommand();
-            setActionCommand("comboBoxEdited");
-            fireActionEvent();
-            setActionCommand(oldCommand);
-        }
+        setPopupVisible(false);
+        getModel().setSelectedItem(getEditor().getItem());
+        String oldCommand = getActionCommand();
+        setActionCommand("comboBoxEdited");
+        fireActionEvent();
+        setActionCommand(oldCommand);
     }
 
     /**
--- a/jdk/src/java.desktop/share/classes/javax/swing/JComponent.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JComponent.java	Wed Jul 05 20:33:55 2017 +0200
@@ -57,6 +57,7 @@
 import static javax.swing.ClientPropertyKey.*;
 import javax.accessibility.*;
 
+import sun.awt.AWTAccessor;
 import sun.awt.SunToolkit;
 import sun.swing.SwingUtilities2;
 import sun.swing.UIClientPropertyKey;
@@ -4218,9 +4219,10 @@
      * @param c  the {@code Component} to be checked
      * @return true if this component is lightweight
      */
-    @SuppressWarnings("deprecation")
     public static boolean isLightweightComponent(Component c) {
-        return c.getPeer() instanceof LightweightPeer;
+        // TODO we cannot call c.isLightweight() because it is incorrectly
+        // overriden in DelegateContainer on osx.
+        return AWTAccessor.getComponentAccessor().isLightweight(c);
     }
 
 
@@ -5033,7 +5035,6 @@
         this.paintingChild = paintingChild;
     }
 
-    @SuppressWarnings("deprecation")
     void _paintImmediately(int x, int y, int w, int h) {
         Graphics g;
         Container c;
@@ -5159,7 +5160,7 @@
         }
 
         // If the clip width or height is negative, don't bother painting
-        if(c == null || c.getPeer() == null ||
+        if(c == null || !c.isDisplayable() ||
                         paintImmediatelyClip.width <= 0 ||
                         paintImmediatelyClip.height <= 0) {
             recycleRectangle(paintImmediatelyClip);
--- a/jdk/src/java.desktop/share/classes/javax/swing/JEditorPane.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JEditorPane.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -726,6 +726,8 @@
      * URL's can be properly resolved.
      *
      * @param page  the URL of the page
+     * @return a stream for the URL which is about to be loaded
+     * @throws IOException if an I/O problem occurs
      */
     protected InputStream getStream(URL page) throws IOException {
         final URLConnection conn = page.openConnection();
@@ -1712,10 +1714,17 @@
 
         private AccessibleContext accessibleContext;
 
+        /**
+         * Returns the accessible text.
+         * @return the accessible text
+         */
         public AccessibleText getAccessibleText() {
             return new JEditorPaneAccessibleHypertextSupport();
         }
 
+        /**
+         * Constructs an {@code AccessibleJEditorPaneHTML}.
+         */
         protected AccessibleJEditorPaneHTML () {
             HTMLEditorKit kit = (HTMLEditorKit)JEditorPane.this.getEditorKit();
             accessibleContext = kit.getAccessibleContext();
@@ -1791,9 +1800,16 @@
     protected class JEditorPaneAccessibleHypertextSupport
     extends AccessibleJEditorPane implements AccessibleHypertext {
 
+        /**
+         * An HTML link.
+         */
         public class HTMLLink extends AccessibleHyperlink {
             Element element;
 
+            /**
+             * Constructs a {@code HTMLLink}.
+             * @param e the element
+             */
             public HTMLLink(Element e) {
                 element = e;
             }
--- a/jdk/src/java.desktop/share/classes/javax/swing/JInternalFrame.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JInternalFrame.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,7 +38,6 @@
 
 import java.io.ObjectOutputStream;
 import java.io.IOException;
-import java.lang.StringBuilder;
 import java.beans.PropertyChangeListener;
 import sun.awt.AppContext;
 import sun.swing.SwingUtilities2;
@@ -1654,7 +1653,7 @@
      * <dt><code>DO_NOTHING_ON_CLOSE</code>
      * <dd> Do nothing.
      *      This requires the program to handle the operation
-     *      in the <code>windowClosing</code> method
+     *      in the <code>internalFrameClosing</code> method
      *      of a registered <code>InternalFrameListener</code> object.
      * <dt><code>HIDE_ON_CLOSE</code>
      * <dd> Automatically make the internal frame invisible.
--- a/jdk/src/java.desktop/share/classes/javax/swing/JList.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JList.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -2890,6 +2890,9 @@
 
         int leadSelectionIndex;
 
+        /**
+         * Constructs an {@code AccessibleJList}.
+         */
         public AccessibleJList() {
             super();
             JList.this.addPropertyChangeListener(this);
@@ -3193,6 +3196,11 @@
             private ListModel<E> listModel;
             private ListCellRenderer<? super E> cellRenderer = null;
 
+            /**
+             * Constructs an {@code AccessibleJListChild}.
+             * @param parent the parent
+             * @param indexInParent the index in the parent
+             */
             public AccessibleJListChild(JList<E> parent, int indexInParent) {
                 this.parent = parent;
                 this.setAccessibleParent(parent);
--- a/jdk/src/java.desktop/share/classes/javax/swing/JTable.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JTable.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -6803,12 +6803,25 @@
         protected class AccessibleJTableModelChange
             implements AccessibleTableModelChange {
 
+            /** The type */
             protected int type;
+            /** The first row */
             protected int firstRow;
+            /** The last row */
             protected int lastRow;
+            /** The first column */
             protected int firstColumn;
+            /** The last column */
             protected int lastColumn;
 
+            /**
+             * Constructs an {@code AccessibleJTableModelChange}.
+             * @param type the type
+             * @param firstRow the first row
+             * @param lastRow the last row
+             * @param firstColumn the first column
+             * @param lastColumn the last column
+             */
             protected AccessibleJTableModelChange(int type, int firstRow,
                                                   int lastRow, int firstColumn,
                                                   int lastColumn) {
@@ -6819,22 +6832,42 @@
                 this.lastColumn = lastColumn;
             }
 
+            /**
+             * Returns the type.
+             * @return the type
+             */
             public int getType() {
                 return type;
             }
 
+            /**
+             * Returns the first row.
+             * @return the first row
+             */
             public int getFirstRow() {
                 return firstRow;
             }
 
+            /**
+             * Returns the last row.
+             * @return the last row
+             */
             public int getLastRow() {
                 return lastRow;
             }
 
+            /**
+             * Returns the first column.
+             * @return the first column
+             */
             public int getFirstColumn() {
                 return firstColumn;
             }
 
+            /**
+             * Returns the last column.
+             * @return the last column
+             */
             public int getLastColumn() {
                 return lastColumn;
             }
--- a/jdk/src/java.desktop/share/classes/javax/swing/JViewport.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JViewport.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,6 +37,8 @@
 
 import java.io.Serializable;
 
+import sun.awt.AWTAccessor;
+
 /**
  * The "viewport" or "porthole" through which you see the underlying
  * information. When you scroll, what moves is the viewport. It is like
@@ -380,7 +382,6 @@
      * @param contentRect the <code>Rectangle</code> to display
      * @see JComponent#isValidateRoot
      * @see java.awt.Component#isValid
-     * @see java.awt.Component#getPeer
      */
     public void scrollRectToVisible(Rectangle contentRect) {
         Component view = getView();
@@ -1448,7 +1449,6 @@
      * Returns true if the component needs to be completely repainted after
      * a blit and a paint is received.
      */
-    @SuppressWarnings("deprecation")
     private boolean needsRepaintAfterBlit() {
         // Find the first heavy weight ancestor. isObscured and
         // canDetermineObscurity are only appropriate for heavy weights.
@@ -1459,7 +1459,8 @@
         }
 
         if (heavyParent != null) {
-            ComponentPeer peer = heavyParent.getPeer();
+            ComponentPeer peer = AWTAccessor.getComponentAccessor()
+                                            .getPeer(heavyParent);
 
             if (peer != null && peer.canDetermineObscurity() &&
                                 !peer.isObscured()) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/RepaintManager.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/RepaintManager.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -401,7 +401,6 @@
      *
      * @see JComponent#repaint
      */
-    @SuppressWarnings("deprecation")
     private void addDirtyRegion0(Container c, int x, int y, int w, int h) {
         /* Special cases we don't have to bother with.
          */
@@ -432,7 +431,7 @@
         // it could lead to the possibility of getting locks out
         // of order and deadlocking.
         for (Container p = c; p != null; p = p.getParent()) {
-            if (!p.isVisible() || (p.getPeer() == null)) {
+            if (!p.isVisible() || !p.isDisplayable()) {
                 return;
             }
             if ((p instanceof Window) || (p instanceof Applet)) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/SortingFocusTraversalPolicy.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/SortingFocusTraversalPolicy.java	Wed Jul 05 20:33:55 2017 +0200
@@ -570,7 +570,10 @@
             } else if (comp instanceof Container && comp != aContainer) {
                 Container cont = (Container)comp;
                 if (cont.isFocusTraversalPolicyProvider()) {
-                    return cont.getFocusTraversalPolicy().getLastComponent(cont);
+                    Component retComp = cont.getFocusTraversalPolicy().getLastComponent(cont);
+                    if (retComp != null) {
+                        return retComp;
+                    }
                 }
             }
         }
--- a/jdk/src/java.desktop/share/classes/javax/swing/ToolTipManager.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/ToolTipManager.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -80,8 +80,13 @@
     private KeyStroke postTip;
     private KeyStroke hideTip;
 
-    // PENDING(ges)
+    /**
+     * Lightweight popup enabled.
+     */
     protected boolean lightWeightPopupEnabled = true;
+    /**
+     * Heavyweight popup enabled.
+     */
     protected boolean heavyWeightPopupEnabled = false;
 
     ToolTipManager() {
@@ -657,7 +662,13 @@
         }
     }
 
+    /**
+     * Inside timer action.
+     */
     protected class insideTimerAction implements ActionListener {
+        /**
+         * {@inheritDoc}
+         */
         public void actionPerformed(ActionEvent e) {
             if(insideComponent != null && insideComponent.isShowing()) {
                 // Lazy lookup
@@ -681,13 +692,25 @@
         }
     }
 
+    /**
+     * Outside timer action.
+     */
     protected class outsideTimerAction implements ActionListener {
+        /**
+         * {@inheritDoc}
+         */
         public void actionPerformed(ActionEvent e) {
             showImmediately = false;
         }
     }
 
+    /**
+     * Still inside timer action.
+     */
     protected class stillInsideTimerAction implements ActionListener {
+        /**
+         * {@inheritDoc}
+         */
         public void actionPerformed(ActionEvent e) {
             hideTipWindow();
             enterTimer.stop();
--- a/jdk/src/java.desktop/share/classes/javax/swing/UIDefaults.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/UIDefaults.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1191,6 +1191,10 @@
         /** Key bindings are registered under. */
         private Object[] bindings;
 
+        /**
+         * Constructs a {@code LazyInputMap}.
+         * @param bindings the bindings
+         */
         public LazyInputMap(Object[] bindings) {
             this.bindings = bindings;
         }
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/BevelBorder.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/BevelBorder.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -52,10 +52,25 @@
     /** Lowered bevel type. */
     public static final int LOWERED = 1;
 
+    /**
+     * The bevel type.
+     */
     protected int bevelType;
+    /**
+     * The color to use for the bevel outer highlight.
+     */
     protected Color highlightOuter;
+    /**
+     * The color to use for the bevel inner highlight.
+     */
     protected Color highlightInner;
+    /**
+     * The color to use for the bevel inner shadow.
+     */
     protected Color shadowInner;
+    /**
+     * the color to use for the bevel outer shadow
+     */
     protected Color shadowOuter;
 
     /**
@@ -262,6 +277,17 @@
      */
     public boolean isBorderOpaque() { return true; }
 
+    /**
+     * Paints a raised bevel for the specified component with the specified
+     * position and size.
+     *
+     * @param c the component for which the raised bevel is being painted
+     * @param g the paint graphics
+     * @param x the x position of the raised bevel
+     * @param y the y position of the raised bevel
+     * @param width the width of the raised bevel
+     * @param height the height of the raised bevel
+     */
     protected void paintRaisedBevel(Component c, Graphics g, int x, int y,
                                     int width, int height)  {
         Color oldColor = g.getColor();
@@ -291,6 +317,17 @@
 
     }
 
+    /**
+     * Paints a lowered bevel for the specified component with the specified
+     * position and size.
+     *
+     * @param c the component for which the lowered bevel is being painted
+     * @param g the paint graphics
+     * @param x the x position of the lowered bevel
+     * @param y the y position of the lowered bevel
+     * @param width the width of the lowered bevel
+     * @param height the height of the lowered bevel
+     */
     protected void paintLoweredBevel(Component c, Graphics g, int x, int y,
                                         int width, int height)  {
         Color oldColor = g.getColor();
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/CompoundBorder.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/CompoundBorder.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -56,7 +56,13 @@
  */
 @SuppressWarnings("serial")
 public class CompoundBorder extends AbstractBorder {
+    /**
+     * The outside border.
+     */
     protected Border outsideBorder;
+    /**
+     * The inside border.
+     */
     protected Border insideBorder;
 
     /**
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/EmptyBorder.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/EmptyBorder.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,7 +49,22 @@
 @SuppressWarnings("serial")
 public class EmptyBorder extends AbstractBorder implements Serializable
 {
-    protected int left, right, top, bottom;
+    /**
+     * The left inset of the border.
+     */
+    protected int left;
+    /**
+     * The right inset of the border.
+     */
+    protected int right;
+    /**
+     * The top inset of the border.
+     */
+    protected int top;
+    /**
+     * The bottom inset of the border.
+     */
+    protected int bottom;
 
     /**
      * Creates an empty border with the specified insets.
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/EtchedBorder.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/EtchedBorder.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -59,8 +59,17 @@
     /** Lowered etched type. */
     public static final int LOWERED = 1;
 
+    /**
+     * The type of etch to be drawn by the border.
+     */
     protected int etchType;
+    /**
+     * The color to use for the etched highlight.
+     */
     protected Color highlight;
+    /**
+     * The color to use for the etched shadow.
+     */
     protected Color shadow;
 
     /**
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/LineBorder.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/LineBorder.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -56,8 +56,17 @@
     private static Border blackLine;
     private static Border grayLine;
 
+    /**
+     * Thickness of the border.
+     */
     protected int thickness;
+    /**
+     * Color of the border.
+     */
     protected Color lineColor;
+    /**
+     * Whether or not the border has rounded corners.
+     */
     protected boolean roundedCorners;
 
     /**
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/MatteBorder.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/MatteBorder.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,7 +49,13 @@
 @SuppressWarnings("serial")
 public class MatteBorder extends EmptyBorder
 {
+    /**
+     * The color rendered for the border.
+     */
     protected Color color;
+    /**
+     * The icon to be used for tiling the border.
+     */
     protected Icon tileIcon;
 
     /**
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/TitledBorder.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/TitledBorder.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -70,11 +70,29 @@
 @SuppressWarnings("serial")
 public class TitledBorder extends AbstractBorder
 {
+    /**
+     * The title the border should display.
+     */
     protected String title;
+    /**
+     * The border.
+     */
     protected Border border;
+    /**
+     * The position for the title.
+     */
     protected int titlePosition;
+    /**
+     * The justification for the title.
+     */
     protected int titleJustification;
+    /**
+     * The font for rendering the title.
+     */
     protected Font titleFont;
+    /**
+     * The color of the title.
+     */
     protected Color titleColor;
 
     private final JLabel label;
@@ -117,13 +135,19 @@
      */
     static public final int     TRAILING = 5;
 
-    // Space between the border and the component's edge
+    /**
+     * Space between the border and the component's edge
+     */
     static protected final int EDGE_SPACING = 2;
 
-    // Space between the border and text
+    /**
+     * Space between the border and text
+     */
     static protected final int TEXT_SPACING = 2;
 
-    // Horizontal inset of text that is left or right justified
+    /**
+     * Horizontal inset of text that is left or right justified
+     */
     static protected final int TEXT_INSET_H = 5;
 
     /**
@@ -676,6 +700,11 @@
         return justification;
     }
 
+    /**
+     * Returns default font of the titled border.
+     * @return default font of the titled border
+     * @param c the component
+     */
     protected Font getFont(Component c) {
         Font font = getTitleFont();
         if (font != null) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/ActionMapUIResource.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/ActionMapUIResource.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,6 +37,9 @@
  */
 @SuppressWarnings("serial") // Superclass is not serializable across versions
 public class ActionMapUIResource extends ActionMap implements UIResource {
+    /**
+     * Constructs an {@code ActionMapUIResource}.
+     */
     public ActionMapUIResource() {
     }
 }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/BorderUIResource.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/BorderUIResource.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,7 +38,7 @@
 import javax.swing.plaf.UIResource;
 
 
-/*
+/**
  * A Border wrapper class which implements UIResource.  UI
  * classes which set border properties should use this class
  * to wrap any borders specified as defaults.
@@ -67,6 +67,10 @@
     static Border raisedBevel;
     static Border blackLine;
 
+    /**
+     * Returns a etched border UI resource.
+     * @return a etched border UI resource
+     */
     public static Border getEtchedBorderUIResource() {
         if (etched == null) {
             etched = new EtchedBorderUIResource();
@@ -74,6 +78,10 @@
         return etched;
     }
 
+    /**
+     * Returns a lowered bevel border UI resource.
+     * @return a lowered bevel border UI resource
+     */
     public static Border getLoweredBevelBorderUIResource() {
         if (loweredBevel == null) {
             loweredBevel = new BevelBorderUIResource(BevelBorder.LOWERED);
@@ -81,6 +89,10 @@
         return loweredBevel;
     }
 
+    /**
+     * Returns a raised bevel border UI resource.
+     * @return a raised bevel border UI resource
+     */
     public static Border getRaisedBevelBorderUIResource() {
         if (raisedBevel == null) {
             raisedBevel = new BevelBorderUIResource(BevelBorder.RAISED);
@@ -88,6 +100,10 @@
         return raisedBevel;
     }
 
+    /**
+     * Returns a black line border UI resource.
+     * @return a black line border UI resource
+     */
     public static Border getBlackLineBorderUIResource() {
         if (blackLine == null) {
             blackLine = new LineBorderUIResource(Color.black);
@@ -122,7 +138,15 @@
         return delegate.isBorderOpaque();
     }
 
+    /**
+     * A compound border UI resource.
+     */
     public static class CompoundBorderUIResource extends CompoundBorder implements UIResource {
+        /**
+         * Constructs a {@code CompoundBorderUIResource}.
+         * @param outsideBorder the outside border
+         * @param insideBorder the inside border
+         */
         @ConstructorProperties({"outsideBorder", "insideBorder"})
         public CompoundBorderUIResource(Border outsideBorder, Border insideBorder) {
             super(outsideBorder, insideBorder);
@@ -130,23 +154,49 @@
 
     }
 
+    /**
+     * An empty border UI resource.
+     */
     public static class EmptyBorderUIResource extends EmptyBorder implements UIResource {
 
+        /**
+         * Constructs a {@code EmptyBorderUIResource}.
+         * @param top the top inset of the border
+         * @param left the left inset of the border
+         * @param bottom the bottom inset of the border
+         * @param right the right inset of the border
+         */
         public EmptyBorderUIResource(int top, int left, int bottom, int right)   {
             super(top, left, bottom, right);
         }
+        /**
+         * Constructs a {@code EmptyBorderUIResource}.
+         * @param insets the insets of the border
+         */
         @ConstructorProperties({"borderInsets"})
         public EmptyBorderUIResource(Insets insets) {
             super(insets);
         }
     }
 
+    /**
+     * A line border UI resource.
+     */
     public static class LineBorderUIResource extends LineBorder implements UIResource {
 
+        /**
+         * Constructs a {@code LineBorderUIResource}.
+         * @param color the color for the border
+         */
         public LineBorderUIResource(Color color) {
             super(color);
         }
 
+        /**
+         * Constructs a {@code LineBorderUIResource}.
+         * @param color the color for the border
+         * @param thickness the thickness of the border
+         */
         @ConstructorProperties({"lineColor", "thickness"})
         public LineBorderUIResource(Color color, int thickness)  {
             super(color, thickness);
@@ -154,16 +204,37 @@
     }
 
 
+    /**
+     * A bevel border UI resource.
+     */
     public static class BevelBorderUIResource extends BevelBorder implements UIResource {
 
+        /**
+         * Constructs a {@code BevelBorderUIResource}.
+         * @param bevelType the type of bevel for the border
+         */
         public BevelBorderUIResource(int bevelType) {
             super(bevelType);
         }
 
+        /**
+         * Constructs a {@code BevelBorderUIResource}.
+         * @param bevelType the type of bevel for the border
+         * @param highlight the color to use for the bevel highlight
+         * @param shadow the color to use for the bevel shadow
+         */
         public BevelBorderUIResource(int bevelType, Color highlight, Color shadow) {
             super(bevelType, highlight, shadow);
         }
 
+        /**
+         * Constructs a {@code BevelBorderUIResource}.
+         * @param bevelType the type of bevel for the border
+         * @param highlightOuter the color to use for the bevel outer highlight
+         * @param highlightInner the color to use for the bevel inner highlight
+         * @param shadowOuter the color to use for the bevel outer shadow
+         * @param shadowInner the color to use for the bevel inner shadow
+         */
         @ConstructorProperties({"bevelType", "highlightOuterColor", "highlightInnerColor", "shadowOuterColor", "shadowInnerColor"})
         public BevelBorderUIResource(int bevelType,
                                      Color highlightOuter, Color highlightInner,
@@ -172,57 +243,124 @@
         }
     }
 
+    /**
+     * An etched border UI resource.
+     */
     public static class EtchedBorderUIResource extends EtchedBorder implements UIResource {
 
+        /**
+         * Constructs an {@code EtchedBorderUIResource}.
+         */
         public EtchedBorderUIResource()    {
             super();
         }
 
+        /**
+         * Constructs an {@code EtchedBorderUIResource}.
+         * @param etchType the type of etch to be drawn by the border
+         */
         public EtchedBorderUIResource(int etchType)    {
             super(etchType);
         }
 
+        /**
+         * Constructs an {@code EtchedBorderUIResource}.
+         * @param highlight the color to use for the etched highlight
+         * @param shadow the color to use for the etched shadow
+         */
         public EtchedBorderUIResource(Color highlight, Color shadow)    {
             super(highlight, shadow);
         }
 
+        /**
+         * Constructs an {@code EtchedBorderUIResource}.
+         * @param etchType the type of etch to be drawn by the border
+         * @param highlight the color to use for the etched highlight
+         * @param shadow the color to use for the etched shadow
+         */
         @ConstructorProperties({"etchType", "highlightColor", "shadowColor"})
         public EtchedBorderUIResource(int etchType, Color highlight, Color shadow)    {
             super(etchType, highlight, shadow);
         }
     }
 
+    /**
+     * A matte border UI resource.
+     */
     public static class MatteBorderUIResource extends MatteBorder implements UIResource {
 
+        /**
+         * Constructs a {@code MatteBorderUIResource}.
+         * @param top the top inset of the border
+         * @param left the left inset of the border
+         * @param bottom the bottom inset of the border
+         * @param right the right inset of the border
+         * @param color the color rendered for the border
+         */
         public MatteBorderUIResource(int top, int left, int bottom, int right,
                                      Color color)   {
             super(top, left, bottom, right, color);
         }
 
+        /**
+         * Constructs a {@code MatteBorderUIResource}.
+         * @param top the top inset of the border
+         * @param left the left inset of the border
+         * @param bottom the bottom inset of the border
+         * @param right the right inset of the border
+         * @param tileIcon the icon to be used for tiling the border
+         */
         public MatteBorderUIResource(int top, int left, int bottom, int right,
                                      Icon tileIcon)   {
             super(top, left, bottom, right, tileIcon);
         }
 
+        /**
+         * Constructs a {@code MatteBorderUIResource}.
+         * @param tileIcon the icon to be used for tiling the border
+         */
         public MatteBorderUIResource(Icon tileIcon)   {
             super(tileIcon);
         }
     }
 
+    /**
+     * A titled border UI resource.
+     */
     public static class TitledBorderUIResource extends TitledBorder implements UIResource {
 
+        /**
+         * Constructs a {@code TitledBorderUIResource}.
+         * @param title the title the border should display
+         */
         public TitledBorderUIResource(String title)     {
             super(title);
         }
 
+        /**
+         * Constructs a {@code TitledBorderUIResource}.
+         * @param border the border
+         */
         public TitledBorderUIResource(Border border)       {
             super(border);
         }
 
+        /**
+         * Constructs a {@code TitledBorderUIResource}.
+         * @param border the border
+         * @param title the title the border should display
+         */
         public TitledBorderUIResource(Border border, String title) {
             super(border, title);
         }
 
+        /**
+         * Constructs a {@code TitledBorderUIResource}.
+         * @param border the border
+         * @param title the title the border should display
+         * @param titleJustification the justification fro the title
+         * @param titlePosition the position for the title
+         */
         public TitledBorderUIResource(Border border,
                         String title,
                         int titleJustification,
@@ -230,6 +368,14 @@
             super(border, title, titleJustification, titlePosition);
         }
 
+        /**
+         * Constructs a {@code TitledBorderUIResource}.
+         * @param border the border
+         * @param title the title the border should display
+         * @param titleJustification the justification fro the title
+         * @param titlePosition the position for the title
+         * @param titleFont the font for rendering the title
+         */
         public TitledBorderUIResource(Border border,
                         String title,
                         int titleJustification,
@@ -238,6 +384,15 @@
             super(border, title, titleJustification, titlePosition, titleFont);
         }
 
+        /**
+         * Constructs a {@code TitledBorderUIResource}.
+         * @param border the border
+         * @param title the title the border should display
+         * @param titleJustification the justification fro the title
+         * @param titlePosition the position for the title
+         * @param titleFont the font for rendering the title
+         * @param titleColor the color of the title
+         */
         @ConstructorProperties({"border", "title", "titleJustification", "titlePosition", "titleFont", "titleColor"})
         public TitledBorderUIResource(Border border,
                         String title,
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/ColorUIResource.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/ColorUIResource.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,7 +28,7 @@
 import java.awt.Color;
 import java.beans.ConstructorProperties;
 
-/*
+/**
  * A subclass of Color that implements UIResource.  UI
  * classes that create colors should use this class.
  * <p>
@@ -48,19 +48,39 @@
 @SuppressWarnings("serial") // Same-version serialization only
 public class ColorUIResource extends Color implements UIResource
 {
+    /**
+     * Constructs a {@code ColorUIResource}.
+     * @param r the red component
+     * @param g the green component
+     * @param b the blue component
+     */
     @ConstructorProperties({"red", "green", "blue"})
     public ColorUIResource(int r, int g, int b) {
         super(r, g, b);
     }
 
+    /**
+     * Constructs a {@code ColorUIResource}.
+     * @param rgb the combined RGB components
+     */
     public ColorUIResource(int rgb) {
         super(rgb);
     }
 
+    /**
+     * Constructs a {@code ColorUIResource}.
+     * @param r the red component
+     * @param g the green component
+     * @param b the blue component
+     */
     public ColorUIResource(float r, float g, float b) {
         super(r, g, b);
     }
 
+    /**
+     * Constructs a {@code ColorUIResource}.
+     * @param c the color
+     */
     public ColorUIResource(Color c) {
         super(c.getRGB(), (c.getRGB() & 0xFF000000) != 0xFF000000);
     }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/ComponentInputMapUIResource.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/ComponentInputMapUIResource.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,6 +38,10 @@
  */
 @SuppressWarnings("serial") // Superclass is not serializable across versions
 public class ComponentInputMapUIResource extends ComponentInputMap implements UIResource {
+    /**
+     * Constructs a {@code ComponentInputMapUIResource}.
+     * @param component a non-null JComponent
+     */
     public ComponentInputMapUIResource(JComponent component) {
         super(component);
     }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/DimensionUIResource.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/DimensionUIResource.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,7 @@
 import javax.swing.plaf.UIResource;
 
 
-/*
+/**
  * A subclass of <code>Dimension</code> that implements
  * <code>UIResource</code>.  UI classes that use
  * <code>Dimension</code> values for default properties
@@ -51,6 +51,11 @@
 @SuppressWarnings("serial") // Same-version serialization only
 public class DimensionUIResource extends Dimension implements UIResource
 {
+    /**
+     * Constructs a {@code DimensionUIResource}.
+     * @param width the width
+     * @param height the height
+     */
     public DimensionUIResource(int width, int height) {
         super(width, height);
     }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/FileChooserUI.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/FileChooserUI.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,13 +38,42 @@
 
 public abstract class FileChooserUI extends ComponentUI
 {
+    /**
+     * Returns an accept-all file filter.
+     * @param fc the file chooser
+     * @return an accept-all file filter
+     */
     public abstract FileFilter getAcceptAllFileFilter(JFileChooser fc);
+    /**
+     * Returns a file view.
+     * @param fc the file chooser
+     * @return a file view
+     */
     public abstract FileView getFileView(JFileChooser fc);
 
+    /**
+     * Returns approve button text.
+     * @param fc the file chooser
+     * @return approve button text.
+     */
     public abstract String getApproveButtonText(JFileChooser fc);
+    /**
+     * Returns the dialog title.
+     * @param fc the file chooser
+     * @return the dialog title.
+     */
     public abstract String getDialogTitle(JFileChooser fc);
 
+    /**
+     * Rescan the current directory.
+     * @param fc the file chooser
+     */
     public abstract void rescanCurrentDirectory(JFileChooser fc);
+    /**
+     * Ensure the file in question is visible.
+     * @param fc the file chooser
+     * @param f the file
+     */
     public abstract void ensureFileIsVisible(JFileChooser fc, File f);
 
     /**
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/FontUIResource.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/FontUIResource.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -50,10 +50,20 @@
 @SuppressWarnings("serial") // Same-version serialization only
 public class FontUIResource extends Font implements UIResource
 {
+    /**
+     * Constructs a {@code FontUIResource}.
+     * @param name the font name
+     * @param style the style constant for the font
+     * @param size the point size of the font
+     */
     public FontUIResource(String name, int style, int size) {
         super(name, style, size);
     }
 
+    /**
+     * Constructs a {@code FontUIResource}.
+     * @param font the font
+     */
     public FontUIResource(Font font) {
         super(font);
     }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/InputMapUIResource.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/InputMapUIResource.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,6 +37,9 @@
  */
 @SuppressWarnings("serial") // Same-version serialization only
 public class InputMapUIResource extends InputMap implements UIResource {
+    /**
+     * Constructs an {@code InputMapUIResource}.
+     */
     public InputMapUIResource() {
     }
 }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/InsetsUIResource.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/InsetsUIResource.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,7 @@
 import javax.swing.plaf.UIResource;
 
 
-/*
+/**
  * A subclass of Insets that implements UIResource.  UI
  * classes that use Insets values for default properties
  * should use this class.
@@ -50,6 +50,13 @@
 @SuppressWarnings("serial") // Same-version serialization only
 public class InsetsUIResource extends Insets implements UIResource
 {
+    /**
+     * Constructs an {@code InsetsUIResource}.
+     * @param top the inset from the top
+     * @param left the inset from the left
+     * @param bottom the inset from the bottom
+     * @param right the inset from the right
+     */
     public InsetsUIResource(int top, int left, int bottom, int right) {
         super(top, left, bottom, right);
     }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/LayerUI.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/LayerUI.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -730,6 +730,15 @@
      * This method is to be overridden instead of {@code JLayer.imageUpdate}.
      * <p>
      * <b>Note:</b> This method is usually called <b>not</b> on the Event Dispatching Thread.
+     *
+     * @param img the image being observed
+     * @param infoflags see imageUpdate for information
+     * @param x the x coordinate
+     * @param y the y coordinate
+     * @param w the width
+     * @param h the height
+     * @param l a {@code JLayer} component
+     * @return false if the infoflags indicate that the image is completely loaded; true otherwise
      */
     public boolean imageUpdate(Image img, int infoflags, int x, int y, int w, int h, JLayer<? extends V> l) {
         return l.imageUpdate(img, infoflags, x, y, w, h);
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/TabbedPaneUI.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/TabbedPaneUI.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,7 +35,25 @@
  * @author Amy Fowler
  */
 public abstract class TabbedPaneUI extends ComponentUI {
+    /**
+     * Returns the tab for the coordinate.
+     * @param pane the pane
+     * @param x the x coordinate
+     * @param y the y coordinate
+     * @return the tab for the coordinate
+     */
     public abstract int tabForCoordinate(JTabbedPane pane, int x, int y);
+    /**
+     * Returns the rectangle for the tab bounds.
+     * @param pane the pane
+     * @param index the index
+     * @return the rectangle for the tab bounds
+     */
     public abstract Rectangle getTabBounds(JTabbedPane pane, int index);
+    /**
+     * Returns the tab run count.
+     * @param pane the pane
+     * @return the tab run count
+     */
     public abstract int getTabRunCount(JTabbedPane pane);
 }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicComboBoxUI.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicComboBoxUI.java	Wed Jul 05 20:33:55 2017 +0200
@@ -992,7 +992,7 @@
         getDisplaySize();
         if (sameBaseline) {
             Insets insets = c.getInsets();
-            height = height - insets.top - insets.bottom;
+            height = Math.max(height - insets.top - insets.bottom, 0);
             if (!comboBox.isEditable()) {
                 ListCellRenderer<Object> renderer = comboBox.getRenderer();
                 if (renderer == null)  {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -222,12 +222,14 @@
 
     /**
      * Obsolete - not used.
+     * @param e list data event
      */
     public void intervalAdded(ListDataEvent e) {
     }
 
     /**
      * Obsolete - not used.
+     * @param e list data event
      */
     public void intervalRemoved(ListDataEvent e) {
     }
@@ -241,7 +243,12 @@
         ShellFolder.sort(v);
     }
 
-    // Obsolete - not used
+    /**
+     * Obsolete - not used
+     * @return a comparison of the file names
+     * @param a a file
+     * @param b another file
+     */
     protected boolean lt(File a, File b) {
         // First ignore case when comparing
         int diff = a.getName().toLowerCase().compareTo(b.getName().toLowerCase());
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicFileChooserUI.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicFileChooserUI.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -50,23 +50,39 @@
 public class BasicFileChooserUI extends FileChooserUI {
 
     /* FileView icons */
+    /** Directory icon */
     protected Icon directoryIcon = null;
+    /** File icon */
     protected Icon fileIcon = null;
+    /** Computer icon */
     protected Icon computerIcon = null;
+    /** Hard drive icon */
     protected Icon hardDriveIcon = null;
+    /** Floppy drive icon */
     protected Icon floppyDriveIcon = null;
 
+    /** New folder icon */
     protected Icon newFolderIcon = null;
+    /** Up folder icon */
     protected Icon upFolderIcon = null;
+    /** Home folder icon */
     protected Icon homeFolderIcon = null;
+    /** List view icon */
     protected Icon listViewIcon = null;
+    /** Details view icon */
     protected Icon detailsViewIcon = null;
+    /** View menu icon */
     protected Icon viewMenuIcon = null;
 
+    /** Save button mnemonic */
     protected int saveButtonMnemonic = 0;
+    /** Open button mnemonic */
     protected int openButtonMnemonic = 0;
+    /** Cancel button mnemonic */
     protected int cancelButtonMnemonic = 0;
+    /** Update button mnemonic */
     protected int updateButtonMnemonic = 0;
+    /** Help button mnemonic */
     protected int helpButtonMnemonic = 0;
 
     /**
@@ -77,10 +93,15 @@
      */
     protected int directoryOpenButtonMnemonic = 0;
 
+    /** Save button text */
     protected String saveButtonText = null;
+    /** Open button text */
     protected String openButtonText = null;
+    /** Cancel button text */
     protected String cancelButtonText = null;
+    /** Update button text */
     protected String updateButtonText = null;
+    /** Help button text */
     protected String helpButtonText = null;
 
     /**
@@ -91,13 +112,20 @@
      */
     protected String directoryOpenButtonText = null;
 
+    /** Open dialog title text */
     private String openDialogTitleText = null;
+    /** Save dialog title text */
     private String saveDialogTitleText = null;
 
+    /** Save button tool tip text */
     protected String saveButtonToolTipText = null;
+    /** Open button tool tip text */
     protected String openButtonToolTipText = null;
+    /** Cancel button tool tip text */
     protected String cancelButtonToolTipText = null;
+    /** Update button tool tip text */
     protected String updateButtonToolTipText = null;
+    /** Help button tool tip text */
     protected String helpButtonToolTipText = null;
 
     /**
@@ -158,9 +186,17 @@
         return new BasicFileChooserUI((JFileChooser) c);
     }
 
+    /**
+     * Constructs a {@code BasicFileChooserUI}.
+     * @param b file chooser
+     */
     public BasicFileChooserUI(JFileChooser b) {
     }
 
+    /**
+     * Installs the UI.
+     * @param c the component
+     */
     public void installUI(JComponent c) {
         accessoryPanel = new JPanel(new BorderLayout());
         filechooser = (JFileChooser) c;
@@ -175,6 +211,10 @@
         filechooser.applyComponentOrientation(filechooser.getComponentOrientation());
     }
 
+    /**
+     * Uninstalls the UI.
+     * @param c the component
+     */
     public void uninstallUI(JComponent c) {
         uninstallListeners(filechooser);
         uninstallComponents(filechooser);
@@ -190,12 +230,24 @@
         handler = null;
     }
 
+    /**
+     * Installs the components.
+     * @param fc the file chooser
+     */
     public void installComponents(JFileChooser fc) {
     }
 
+    /**
+     * Uninstalls the components.
+     * @param fc the file chooser
+     */
     public void uninstallComponents(JFileChooser fc) {
     }
 
+    /**
+     * Installs the listeners.
+     * @param fc the file chooser
+     */
     protected void installListeners(JFileChooser fc) {
         propertyChangeListener = createPropertyChangeListener(fc);
         if(propertyChangeListener != null) {
@@ -241,6 +293,10 @@
     }
 
 
+    /**
+     * Uninstalls the listeners.
+     * @param fc the file chooser
+     */
     protected void uninstallListeners(JFileChooser fc) {
         if(propertyChangeListener != null) {
             fc.removePropertyChangeListener(propertyChangeListener);
@@ -252,6 +308,10 @@
     }
 
 
+    /**
+     * Installs the defaults.
+     * @param fc the file chooser
+     */
     protected void installDefaults(JFileChooser fc) {
         installIcons(fc);
         installStrings(fc);
@@ -264,6 +324,10 @@
         LookAndFeel.installProperty(fc, "opaque", Boolean.FALSE);
     }
 
+    /**
+     * Installs the icons.
+     * @param fc the file chooser
+     */
     protected void installIcons(JFileChooser fc) {
         directoryIcon    = UIManager.getIcon("FileView.directoryIcon");
         fileIcon         = UIManager.getIcon("FileView.fileIcon");
@@ -279,6 +343,10 @@
         viewMenuIcon     = UIManager.getIcon("FileChooser.viewMenuIcon");
     }
 
+    /**
+     * Installs the strings.
+     * @param fc the file chooser
+     */
     protected void installStrings(JFileChooser fc) {
 
         Locale l = fc.getLocale();
@@ -315,6 +383,10 @@
         directoryOpenButtonToolTipText = UIManager.getString("FileChooser.directoryOpenButtonToolTipText",l);
     }
 
+    /**
+     * Uninstalls the defaults.
+     * @param fc the file chooser
+     */
     protected void uninstallDefaults(JFileChooser fc) {
         uninstallIcons(fc);
         uninstallStrings(fc);
@@ -323,6 +395,10 @@
         }
     }
 
+    /**
+     * Uninstalls the icons.
+     * @param fc the file chooser
+     */
     protected void uninstallIcons(JFileChooser fc) {
         directoryIcon    = null;
         fileIcon         = null;
@@ -338,6 +414,10 @@
         viewMenuIcon     = null;
     }
 
+    /**
+     * Uninstalls the strings.
+     * @param fc the file chooser
+     */
     protected void uninstallStrings(JFileChooser fc) {
         saveButtonText   = null;
         openButtonText   = null;
@@ -354,6 +434,9 @@
         directoryOpenButtonToolTipText = null;
     }
 
+    /**
+     * Creates the model.
+     */
     protected void createModel() {
         if (model != null) {
             model.invalidateFileCache();
@@ -361,50 +444,102 @@
         model = new BasicDirectoryModel(getFileChooser());
     }
 
+    /**
+     * Returns the model.
+     * @return the model
+     */
     public BasicDirectoryModel getModel() {
         return model;
     }
 
+    /**
+     * Creates the property change listener.
+     * @param fc the file chooser
+     * @return the property change listener
+     */
     public PropertyChangeListener createPropertyChangeListener(JFileChooser fc) {
         return null;
     }
 
+    /**
+     * Returns the file name.
+     * @return the file name
+     */
     public String getFileName() {
         return null;
     }
 
+    /**
+     * Returns the directory name.
+     * @return the directory name
+     */
     public String getDirectoryName() {
         return null;
     }
 
+    /**
+     * Sets the file name.
+     * @param filename the file name
+     */
     public void setFileName(String filename) {
     }
 
+    /**
+     * Sets the directory name.
+     * @param dirname the file name
+     */
     public void setDirectoryName(String dirname) {
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void rescanCurrentDirectory(JFileChooser fc) {
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void ensureFileIsVisible(JFileChooser fc, File f) {
     }
 
+    /**
+     * Returns the file chooser.
+     * @return the file chooser
+     */
     public JFileChooser getFileChooser() {
         return filechooser;
     }
 
+    /**
+     * Returns the accessory panel.
+     * @return the accessory panel
+     */
     public JPanel getAccessoryPanel() {
         return accessoryPanel;
     }
 
+    /**
+     * Returns the approve button.
+     * @param fc the file chooser
+     * @return the approve button
+     */
     protected JButton getApproveButton(JFileChooser fc) {
         return null;
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public JButton getDefaultButton(JFileChooser fc) {
         return getApproveButton(fc);
     }
 
+    /**
+     * Returns the approve button tool tip.
+     * @param fc the file chooser
+     * @return the approve button tool tip
+     */
     public String getApproveButtonToolTipText(JFileChooser fc) {
         String tooltipText = fc.getApproveButtonToolTipText();
         if(tooltipText != null) {
@@ -419,6 +554,9 @@
         return null;
     }
 
+    /**
+     * Clears the icon cache.
+     */
     public void clearIconCache() {
         fileView.clearIconCache();
     }
@@ -435,11 +573,22 @@
         return handler;
     }
 
+    /**
+     * Creates a double click listener.
+     * @param fc the file chooser
+     * @param list the list
+     * @return a double click listener
+     */
     protected MouseListener createDoubleClickListener(JFileChooser fc,
                                                       JList<?> list) {
         return new Handler(list);
     }
 
+    /**
+     * Creates a list selection listener.
+     * @param fc the file chooser
+     * @return a list selection listener
+     */
     public ListSelectionListener createListSelectionListener(JFileChooser fc) {
         return getHandler();
     }
@@ -566,12 +715,19 @@
         }
     }
 
+    /**
+     * A double click listener.
+     */
     protected class DoubleClickListener extends MouseAdapter {
         // NOTE: This class exists only for backward compatibility. All
         // its functionality has been moved into Handler. If you need to add
         // new functionality add it to the Handler, but make sure this
         // class calls into the Handler.
         Handler handler;
+        /**
+         * Constucts a {@code DoubleClickListener}.
+         * @param list the lsit
+         */
         public  DoubleClickListener(JList<?> list) {
             handler = new Handler(list);
         }
@@ -587,16 +743,21 @@
             handler.mouseEntered(e);
         }
 
+        /** {@inheritDoc} */
         public void mouseClicked(MouseEvent e) {
             handler.mouseClicked(e);
         }
     }
 
+    /**
+     * A selection listener.
+     */
     protected class SelectionListener implements ListSelectionListener {
         // NOTE: This class exists only for backward compatibility. All
         // its functionality has been moved into Handler. If you need to add
         // new functionality add it to the Handler, but make sure this
         // class calls into the Handler.
+        /** {@inheritDoc} */
         public void valueChanged(ListSelectionEvent e) {
             getHandler().valueChanged(e);
         }
@@ -672,6 +833,8 @@
 
     /**
      * Returns the title of this dialog
+     * @param fc the file chooser
+     * @return the title of this dialog
      */
     public String getDialogTitle(JFileChooser fc) {
         String dialogTitle = fc.getDialogTitle();
@@ -686,7 +849,11 @@
         }
     }
 
-
+    /**
+     * Returns the approve button mnemonic.
+     * @param fc the file chooser
+     * @return the approve button mnemonic
+     */
     public int getApproveButtonMnemonic(JFileChooser fc) {
         int mnemonic = fc.getApproveButtonMnemonic();
         if (mnemonic > 0) {
@@ -700,6 +867,7 @@
         }
     }
 
+    /** {@inheritDoc} */
     public String getApproveButtonText(JFileChooser fc) {
         String buttonText = fc.getApproveButtonText();
         if (buttonText != null) {
@@ -718,6 +886,10 @@
     // ***** Directory Actions *****
     // *****************************
 
+    /**
+     * Returns a new folder action.
+     * @return a new folder action
+     */
     public Action getNewFolderAction() {
         if (newFolderAction == null) {
             newFolderAction = new NewFolderAction();
@@ -730,22 +902,42 @@
         return newFolderAction;
     }
 
+    /**
+     * Returns a go home action.
+     * @return a go home action
+     */
     public Action getGoHomeAction() {
         return goHomeAction;
     }
 
+    /**
+     * Returns a change to parent directory action.
+     * @return a change to parent directory action
+     */
     public Action getChangeToParentDirectoryAction() {
         return changeToParentDirectoryAction;
     }
 
+    /**
+     * Returns an approve selection action.
+     * @return an approve selection  action
+     */
     public Action getApproveSelectionAction() {
         return approveSelectionAction;
     }
 
+    /**
+     * Returns a cancel selection action.
+     * @return a cancel selection action
+     */
     public Action getCancelSelectionAction() {
         return cancelSelectionAction;
     }
 
+    /**
+     * Returns an update action.
+     * @return an update action
+     */
     public Action getUpdateAction() {
         return updateAction;
     }
@@ -756,9 +948,11 @@
      */
     @SuppressWarnings("serial") // Superclass is not serializable across versions
     protected class NewFolderAction extends AbstractAction {
+        /** Constructs a {@code NewFolderAction}. */
         protected NewFolderAction() {
             super(FilePane.ACTION_NEW_FOLDER);
         }
+        /** {@inheritDoc} */
         public void actionPerformed(ActionEvent e) {
             if (readOnly) {
                 return;
@@ -799,6 +993,7 @@
      */
     @SuppressWarnings("serial") // Superclass is not serializable across versions
     protected class GoHomeAction extends AbstractAction {
+        /** Constructs a {@code GoHomeAction}. */
         protected GoHomeAction() {
             super("Go Home");
         }
@@ -808,12 +1003,17 @@
         }
     }
 
+    /**
+     * Change to parent directory action.
+     */
     @SuppressWarnings("serial") // Superclass is not serializable across versions
     protected class ChangeToParentDirectoryAction extends AbstractAction {
+        /** Constructs a {@code ChangeToParentDirectoryAction}. */
         protected ChangeToParentDirectoryAction() {
             super("Go Up");
             putValue(Action.ACTION_COMMAND_KEY, FilePane.ACTION_CHANGE_TO_PARENT_DIRECTORY);
         }
+        /** {@inheritDoc} */
         public void actionPerformed(ActionEvent e) {
             getFileChooser().changeToParentDirectory();
         }
@@ -824,9 +1024,11 @@
      */
     @SuppressWarnings("serial") // Superclass is not serializable across versions
     protected class ApproveSelectionAction extends AbstractAction {
+        /** Constructs an {@code ApproveSelectionAction}. */
         protected ApproveSelectionAction() {
             super(FilePane.ACTION_APPROVE_SELECTION);
         }
+        /** {@inheritDoc} */
         public void actionPerformed(ActionEvent e) {
             if (isDirectorySelected()) {
                 File dir = getDirectory();
@@ -1133,6 +1335,7 @@
      */
     @SuppressWarnings("serial") // Superclass is not serializable across versions
     protected class CancelSelectionAction extends AbstractAction {
+        /** {@inheritDoc} */
         public void actionPerformed(ActionEvent e) {
             getFileChooser().cancelSelection();
         }
@@ -1143,6 +1346,7 @@
      */
     @SuppressWarnings("serial") // Superclass is not serializable across versions
     protected class UpdateAction extends AbstractAction {
+        /** {@inheritDoc} */
         public void actionPerformed(ActionEvent e) {
             JFileChooser fc = getFileChooser();
             fc.setCurrentDirectory(fc.getFileSystemView().createFileObject(getDirectoryName()));
@@ -1188,15 +1392,27 @@
     // *****************************************
     // ***** default AcceptAll file filter *****
     // *****************************************
+    /**
+     * Accept all file filter.
+     */
     protected class AcceptAllFileFilter extends FileFilter {
 
+        /** Constructs an {@code AcceptAllFileFilter}. */
         public AcceptAllFileFilter() {
         }
 
+        /**
+         * Returns true.
+         * @param f the file
+         * @return true
+         */
         public boolean accept(File f) {
             return true;
         }
 
+        /**
+         * {@inheritDoc}
+         */
         public String getDescription() {
             return UIManager.getString("FileChooser.acceptAllFileFilterText");
         }
@@ -1206,18 +1422,26 @@
     // ***********************
     // * FileView operations *
     // ***********************
+    /**
+     * A basic file view.
+     */
     protected class BasicFileView extends FileView {
         /* FileView type descriptions */
-        // PENDING(jeff) - pass in the icon cache size
+        /** The icon cache */
         protected Hashtable<File,Icon> iconCache = new Hashtable<File,Icon>();
 
+        /** Constructs a {@code BasicFileView}. */
         public BasicFileView() {
         }
 
+        /**
+         * Clears the icon cache.
+         */
         public void clearIconCache() {
             iconCache = new Hashtable<File,Icon>();
         }
 
+        /** {@inheritDoc} */
         public String getName(File f) {
             // Note: Returns display name rather than file name
             String fileName = null;
@@ -1227,11 +1451,12 @@
             return fileName;
         }
 
-
+        /** {@inheritDoc} */
         public String getDescription(File f) {
             return f.getName();
         }
 
+        /** {@inheritDoc} */
         public String getTypeDescription(File f) {
             String type = getFileChooser().getFileSystemView().getSystemTypeDescription(f);
             if (type == null) {
@@ -1244,10 +1469,20 @@
             return type;
         }
 
+        /**
+         * Returns the cached icon for the file.
+         * @param f the file
+         * @return the cached icon for the file
+         */
         public Icon getCachedIcon(File f) {
             return iconCache.get(f);
         }
 
+        /**
+         * Caches an icon for a file.
+         * @param f the file
+         * @param i the icon
+         */
         public void cacheIcon(File f, Icon i) {
             if(f == null || i == null) {
                 return;
@@ -1255,6 +1490,7 @@
             iconCache.put(f, i);
         }
 
+        /** {@inheritDoc} */
         public Icon getIcon(File f) {
             Icon icon = getCachedIcon(f);
             if(icon != null) {
@@ -1278,6 +1514,11 @@
             return icon;
         }
 
+        /**
+         * Returns whether or not a file is hidden.
+         * @param f the file
+         * @return whether or not a file is hidden
+         */
         public Boolean isHidden(File f) {
             String name = f.getName();
             if(name != null && name.charAt(0) == '.') {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicInternalFrameUI.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicInternalFrameUI.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -42,22 +42,31 @@
  */
 public class BasicInternalFrameUI extends InternalFrameUI
 {
-
+    /** frame */
     protected JInternalFrame frame;
 
     private Handler handler;
+    /** Border listener */
     protected MouseInputAdapter          borderListener;
+    /** Property change listener */
     protected PropertyChangeListener     propertyChangeListener;
+    /** Internal frame layout */
     protected LayoutManager              internalFrameLayout;
+    /** Component listener */
     protected ComponentListener          componentListener;
+    /** Glass pane dispatcher */
     protected MouseInputListener         glassPaneDispatcher;
     private InternalFrameListener        internalFrameListener;
 
+    /** North pane */
     protected JComponent northPane;
+    /** South pane */
     protected JComponent southPane;
+    /** West pane */
     protected JComponent westPane;
+    /** East pane */
     protected JComponent eastPane;
-
+    /** Title pane */
     protected BasicInternalFrameTitlePane titlePane; // access needs this
 
     private static DesktopManager sharedDesktopManager;
@@ -85,10 +94,19 @@
 /////////////////////////////////////////////////////////////////////////////
 // ComponentUI Interface Implementation methods
 /////////////////////////////////////////////////////////////////////////////
+    /**
+     * Returns a component UI.
+     * @param b a component
+     * @return a component UI
+     */
     public static ComponentUI createUI(JComponent b)    {
         return new BasicInternalFrameUI((JInternalFrame)b);
     }
 
+    /**
+     * Constructs a {@code BasicInternalFrameUI}.
+     * @param b the internal frame
+     */
     public BasicInternalFrameUI(JInternalFrame b)   {
         LookAndFeel laf = UIManager.getLookAndFeel();
         if (laf instanceof BasicLookAndFeel) {
@@ -96,6 +114,10 @@
         }
     }
 
+    /**
+     * Installs the UI.
+     * @param c the component
+     */
     public void installUI(JComponent c)   {
 
         frame = (JInternalFrame)c;
@@ -108,6 +130,10 @@
         LookAndFeel.installProperty(frame, "opaque", Boolean.TRUE);
     }
 
+    /**
+     * Uninstalls the UI.
+     * @param c the component
+     */
     public void uninstallUI(JComponent c) {
         if(c != frame)
             throw new IllegalComponentStateException(
@@ -124,6 +150,9 @@
         frame = null;
     }
 
+    /**
+     * Installs the defaults.
+     */
     protected void installDefaults(){
         Icon frameIcon = frame.getFrameIcon();
         if (frameIcon == null || frameIcon instanceof UIResource) {
@@ -144,6 +173,9 @@
         LookAndFeel.installBorder(frame, "InternalFrame.border");
 
     }
+    /**
+     * Installs the keyboard actions.
+     */
     protected void installKeyboardActions(){
         createInternalFrameListener();
         if (internalFrameListener != null) {
@@ -184,6 +216,9 @@
         BasicLookAndFeel.installAudioActionMap(map);
     }
 
+    /**
+     * Installs the components.
+     */
     protected void installComponents(){
         setNorthPane(createNorthPane(frame));
         setSouthPane(createSouthPane(frame));
@@ -192,6 +227,7 @@
     }
 
     /**
+     * Installs the listeners.
      * @since 1.3
      */
     protected void installListeners() {
@@ -257,6 +293,9 @@
         return null;
     }
 
+    /**
+     * Uninstalls the defaults.
+     */
     protected void uninstallDefaults() {
         Icon frameIcon = frame.getFrameIcon();
         if (frameIcon instanceof UIResource) {
@@ -267,6 +306,9 @@
         LookAndFeel.uninstallBorder(frame);
     }
 
+    /**
+     * Uninstalls the components.
+     */
     protected void uninstallComponents(){
         setNorthPane(null);
         setSouthPane(null);
@@ -279,6 +321,7 @@
     }
 
     /**
+     * Uninstalls the listeners.
      * @since 1.3
      */
     protected void uninstallListeners() {
@@ -298,6 +341,9 @@
       borderListener = null;
     }
 
+    /**
+     * Uninstalls the keyboard actions.
+     */
     protected void uninstallKeyboardActions(){
         if (internalFrameListener != null) {
             frame.removeInternalFrameListener(internalFrameListener);
@@ -321,22 +367,38 @@
         frame.setCursor(s);
     }
 
+    /**
+     * Creates the layout manager.
+     * @return the layout manager
+     */
     protected LayoutManager createLayoutManager(){
         return getHandler();
     }
 
+    /**
+     * Creates the property change listener.
+     * @return the property change listener
+     */
     protected PropertyChangeListener createPropertyChangeListener(){
         return getHandler();
     }
 
-
-
+    /**
+     * Returns the preferred size.
+     * @param x the component
+     * @return the preferred size
+     */
     public Dimension getPreferredSize(JComponent x)    {
         if(frame == x)
             return frame.getLayout().preferredLayoutSize(x);
         return new Dimension(100, 100);
     }
 
+    /**
+     * Returns the minimum size.
+     * @param x the component
+     * @return the minimum size
+     */
     public Dimension getMinimumSize(JComponent x)  {
         if(frame == x) {
             return frame.getLayout().minimumLayoutSize(x);
@@ -344,6 +406,11 @@
         return new Dimension(0, 0);
     }
 
+    /**
+     * Returns the maximum size.
+     * @param x the component
+     * @return the maximum size
+     */
     public Dimension getMaximumSize(JComponent x) {
         return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
     }
@@ -371,60 +438,114 @@
         }
     }
 
+    /**
+     * Deinstalls the mouse handlers.
+     * @param c the component
+     */
     protected void deinstallMouseHandlers(JComponent c) {
       c.removeMouseListener(borderListener);
       c.removeMouseMotionListener(borderListener);
     }
 
+    /**
+     * Installs the mouse handlers.
+     * @param c the component
+     */
     protected void installMouseHandlers(JComponent c) {
       c.addMouseListener(borderListener);
       c.addMouseMotionListener(borderListener);
     }
 
+    /**
+     * Creates the north pane.
+     * @param w the internal frame
+     * @return the north pane
+     */
     protected JComponent createNorthPane(JInternalFrame w) {
       titlePane = new BasicInternalFrameTitlePane(w);
       return titlePane;
     }
 
 
+    /**
+     * Creates the north pane.
+     * @param w the internal frame
+     * @return the north pane
+     */
     protected JComponent createSouthPane(JInternalFrame w) {
         return null;
     }
 
+    /**
+     * Creates the west pane.
+     * @param w the internal frame
+     * @return the west pane
+     */
     protected JComponent createWestPane(JInternalFrame w) {
         return null;
     }
 
+    /**
+     * Creates the east pane.
+     * @param w the internal frame
+     * @return the east pane
+     */
     protected JComponent createEastPane(JInternalFrame w) {
         return null;
     }
 
-
+    /**
+     * Creates the border listener.
+     * @param w the internal frame
+     * @return the border listener
+     */
     protected MouseInputAdapter createBorderListener(JInternalFrame w) {
         return new BorderListener();
     }
 
+    /**
+     * Creates the internal frame listener.
+     */
     protected void createInternalFrameListener(){
         internalFrameListener = getHandler();
     }
 
+    /**
+     * Returns whether or no the key binding is registered.
+     * @return whether or no the key binding is registered
+     */
     protected final boolean isKeyBindingRegistered(){
       return keyBindingRegistered;
     }
 
+    /**
+     * Sets the key binding registration.
+     * @param b new value for key binding registration
+     */
     protected final void setKeyBindingRegistered(boolean b){
       keyBindingRegistered = b;
     }
 
+    /**
+     * Returns whether or no the key binding is active.
+     * @return whether or no the key binding is active
+     */
     public final boolean isKeyBindingActive(){
       return keyBindingActive;
     }
 
+    /**
+     * Sets the key binding activity.
+     * @param b new value for key binding activity
+     */
     protected final void setKeyBindingActive(boolean b){
       keyBindingActive = b;
     }
 
 
+    /**
+     * Setup the menu open key.
+     */
     protected void setupMenuOpenKey(){
         // PENDING(hania): Why are these WHEN_IN_FOCUSED_WINDOWs? Shouldn't
         // they be WHEN_ANCESTOR_OF_FOCUSED_COMPONENT?
@@ -437,13 +558,24 @@
         //SwingUtilities.replaceUIActionMap(frame, actionMap);
     }
 
+    /**
+     * Setup the menu close key.
+     */
     protected void setupMenuCloseKey(){
     }
 
+    /**
+     * Returns the north pane.
+     * @return the north pane
+     */
     public JComponent getNorthPane() {
         return northPane;
     }
 
+    /**
+     * Sets the north pane.
+     * @param c the new north pane
+     */
     public void setNorthPane(JComponent c) {
         if (northPane != null &&
                 northPane instanceof BasicInternalFrameTitlePane) {
@@ -456,30 +588,57 @@
         }
     }
 
+    /**
+     * Returns the south pane.
+     * @return the south pane
+     */
     public JComponent getSouthPane() {
         return southPane;
     }
 
+    /**
+     * Sets the south pane.
+     * @param c the new south pane
+     */
     public void setSouthPane(JComponent c) {
         southPane = c;
     }
 
+    /**
+     * Returns the west pane.
+     * @return the west pane
+     */
     public JComponent getWestPane() {
         return westPane;
     }
 
+    /**
+     * Sets the west pane.
+     * @param c the new west pane
+     */
     public void setWestPane(JComponent c) {
         westPane = c;
     }
 
+    /**
+     * Returns the east pane.
+     * @return the east pane
+     */
     public JComponent getEastPane() {
         return eastPane;
     }
 
+    /**
+     * Sets the east pane.
+     * @param c the new east pane
+     */
     public void setEastPane(JComponent c) {
         eastPane = c;
     }
 
+    /**
+     * Internal frame property change listener.
+     */
     public class InternalFramePropertyChangeListener implements
         PropertyChangeListener {
         // NOTE: This class exists only for backward compatibility. All
@@ -495,27 +654,45 @@
         }
     }
 
+    /**
+     * Internal frame layout.
+     */
   public class InternalFrameLayout implements LayoutManager {
     // NOTE: This class exists only for backward compatibility. All
     // its functionality has been moved into Handler. If you need to add
     // new functionality add it to the Handler, but make sure this
     // class calls into the Handler.
+      /**
+       * {@inheritDoc}
+       */
     public void addLayoutComponent(String name, Component c) {
         getHandler().addLayoutComponent(name, c);
     }
 
+      /**
+       * {@inheritDoc}
+       */
     public void removeLayoutComponent(Component c) {
         getHandler().removeLayoutComponent(c);
     }
 
+      /**
+       * {@inheritDoc}
+       */
     public Dimension preferredLayoutSize(Container c)  {
         return getHandler().preferredLayoutSize(c);
     }
 
+      /**
+       * {@inheritDoc}
+       */
     public Dimension minimumLayoutSize(Container c) {
         return getHandler().minimumLayoutSize(c);
     }
 
+      /**
+       * {@inheritDoc}
+       */
     public void layoutContainer(Container c) {
         getHandler().layoutContainer(c);
     }
@@ -527,6 +704,7 @@
      * find the JDesktop component and returns the desktopManager from
      * it. If this fails, it will return a default DesktopManager that
      * should work in arbitrary parents.
+     * @return the proper DesktopManager
      */
     protected DesktopManager getDesktopManager() {
         if(frame.getDesktopPane() != null
@@ -537,6 +715,10 @@
         return sharedDesktopManager;
     }
 
+    /**
+     * Creates the desktop manager.
+     * @return the desktop manager
+     */
     protected DesktopManager createDesktopManager(){
       return new DefaultDesktopManager();
     }
@@ -653,7 +835,7 @@
         Rectangle startingBounds;
         int resizeDir;
 
-
+        /** resize none */
         protected final int RESIZE_NONE  = 0;
         private boolean discardRelease = false;
 
@@ -1114,6 +1296,9 @@
 
     }    /// End BorderListener Class
 
+    /**
+     * Component handler.
+     */
     protected class ComponentHandler implements ComponentListener {
       // NOTE: This class exists only for backward compatibility. All
       // its functionality has been moved into Handler. If you need to add
@@ -1124,92 +1309,155 @@
           getHandler().componentResized(e);
       }
 
+        /**
+         * {@inheritDoc}
+         */
       public void componentMoved(ComponentEvent e) {
           getHandler().componentMoved(e);
       }
+        /**
+         * {@inheritDoc}
+         */
       public void componentShown(ComponentEvent e) {
           getHandler().componentShown(e);
       }
+        /**
+         * {@inheritDoc}
+         */
       public void componentHidden(ComponentEvent e) {
           getHandler().componentHidden(e);
       }
     }
 
+    /**
+     * Creates a component listener.
+     * @return a component listener
+     */
     protected ComponentListener createComponentListener() {
       return getHandler();
     }
 
 
+    /**
+     * Glass pane dispatcher.
+     */
     protected class GlassPaneDispatcher implements MouseInputListener {
         // NOTE: This class exists only for backward compatibility. All
         // its functionality has been moved into Handler. If you need to add
         // new functionality add it to the Handler, but make sure this
         // class calls into the Handler.
+        /**
+         * {@inheritDoc}
+         */
         public void mousePressed(MouseEvent e) {
             getHandler().mousePressed(e);
         }
 
+        /**
+         * {@inheritDoc}
+         */
         public void mouseEntered(MouseEvent e) {
             getHandler().mouseEntered(e);
         }
 
+        /**
+         * {@inheritDoc}
+         */
         public void mouseMoved(MouseEvent e) {
             getHandler().mouseMoved(e);
         }
 
+        /**
+         * {@inheritDoc}
+         */
         public void mouseExited(MouseEvent e) {
             getHandler().mouseExited(e);
         }
 
+        /**
+         * {@inheritDoc}
+         */
         public void mouseClicked(MouseEvent e) {
             getHandler().mouseClicked(e);
         }
 
+        /**
+         * {@inheritDoc}
+         */
         public void mouseReleased(MouseEvent e) {
             getHandler().mouseReleased(e);
         }
 
+        /**
+         * {@inheritDoc}
+         */
         public void mouseDragged(MouseEvent e) {
             getHandler().mouseDragged(e);
         }
     }
 
+    /**
+     * Creates a {@code GlassPaneDispatcher}.
+     * @return a {@code GlassPaneDispatcher}
+     */
     protected MouseInputListener createGlassPaneDispatcher() {
         return null;
     }
 
-
+    /**
+     * Basic internal frame listener.
+     */
     protected class BasicInternalFrameListener implements InternalFrameListener
     {
       // NOTE: This class exists only for backward compatibility. All
       // its functionality has been moved into Handler. If you need to add
       // new functionality add it to the Handler, but make sure this
       // class calls into the Handler.
+        /**
+         * {@inheritDoc}
+         */
       public void internalFrameClosing(InternalFrameEvent e) {
           getHandler().internalFrameClosing(e);
       }
 
+        /**
+         * {@inheritDoc}
+         */
       public void internalFrameClosed(InternalFrameEvent e) {
           getHandler().internalFrameClosed(e);
       }
 
+        /**
+         * {@inheritDoc}
+         */
       public void internalFrameOpened(InternalFrameEvent e) {
           getHandler().internalFrameOpened(e);
       }
 
+        /**
+         * {@inheritDoc}
+         */
       public void internalFrameIconified(InternalFrameEvent e) {
           getHandler().internalFrameIconified(e);
       }
 
+        /**
+         * {@inheritDoc}
+         */
       public void internalFrameDeiconified(InternalFrameEvent e) {
           getHandler().internalFrameDeiconified(e);
       }
 
+        /**
+         * {@inheritDoc}
+         */
       public void internalFrameActivated(InternalFrameEvent e) {
           getHandler().internalFrameActivated(e);
       }
 
-
+        /**
+         * {@inheritDoc}
+         */
       public void internalFrameDeactivated(InternalFrameEvent e) {
           getHandler().internalFrameDeactivated(e);
       }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicMenuItemUI.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicMenuItemUI.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -875,30 +875,38 @@
         if (dumpStack == true)
             Thread.dumpStack();
     }
+    /** Mouse input handler */
     protected class MouseInputHandler implements MouseInputListener {
         // NOTE: This class exists only for backward compatibility. All
         // its functionality has been moved into Handler. If you need to add
         // new functionality add it to the Handler, but make sure this
         // class calls into the Handler.
 
+        /** {@inheritDoc} */
         public void mouseClicked(MouseEvent e) {
             getHandler().mouseClicked(e);
         }
+        /** {@inheritDoc} */
         public void mousePressed(MouseEvent e) {
             getHandler().mousePressed(e);
         }
+        /** {@inheritDoc} */
         public void mouseReleased(MouseEvent e) {
             getHandler().mouseReleased(e);
         }
+        /** {@inheritDoc} */
         public void mouseEntered(MouseEvent e) {
             getHandler().mouseEntered(e);
         }
+        /** {@inheritDoc} */
         public void mouseExited(MouseEvent e) {
             getHandler().mouseExited(e);
         }
+        /** {@inheritDoc} */
         public void mouseDragged(MouseEvent e) {
             getHandler().mouseDragged(e);
         }
+        /** {@inheritDoc} */
         public void mouseMoved(MouseEvent e) {
             getHandler().mouseMoved(e);
         }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -136,7 +136,7 @@
 
     /**
      * Creates a new {@code BasicOptionPaneUI} instance.
-     *
+     * @param x the component
      * @return a new {@code BasicOptionPaneUI} instance
      */
     public static ComponentUI createUI(JComponent x) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicScrollBarUI.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicScrollBarUI.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -60,35 +60,59 @@
 
     // NOTE: DO NOT use this field directly, SynthScrollBarUI assumes you'll
     // call getMinimumThumbSize to access it.
+    /** Minimum thumb size */
     protected Dimension minimumThumbSize;
+    /** Maximum thumb size */
     protected Dimension maximumThumbSize;
 
+    /** Thumb highlight color */
     protected Color thumbHighlightColor;
+    /** Thumb light shadow color */
     protected Color thumbLightShadowColor;
+    /** Thumb dark shadow color */
     protected Color thumbDarkShadowColor;
+    /** Thumb color */
     protected Color thumbColor;
+    /** Track color */
     protected Color trackColor;
+    /** Track highlight color */
     protected Color trackHighlightColor;
 
+    /** Scrollbar */
     protected JScrollBar scrollbar;
+    /** Increment button */
     protected JButton incrButton;
+    /** Decrement button */
     protected JButton decrButton;
+    /** Dragging */
     protected boolean isDragging;
+    /** Track listener */
     protected TrackListener trackListener;
+    /** Button listener */
     protected ArrowButtonListener buttonListener;
+    /** Model listener */
     protected ModelListener modelListener;
 
+    /** Thumb rectangle */
     protected Rectangle thumbRect;
+    /** Track rectangle */
     protected Rectangle trackRect;
 
+    /** Track highlight */
     protected int trackHighlight;
 
+    /** No highlight */
     protected static final int NO_HIGHLIGHT = 0;
+    /** Decrease highlight */
     protected static final int DECREASE_HIGHLIGHT = 1;
+    /** Increase highlight */
     protected static final int INCREASE_HIGHLIGHT = 2;
 
+    /** Scroll listener */
     protected ScrollListener scrollListener;
+    /** Property change listener */
     protected PropertyChangeListener propertyChangeListener;
+    /** Scroll timer */
     protected Timer scrollTimer;
 
     private final static int scrollSpeedThrottle = 60; // delay in milli seconds
@@ -148,12 +172,18 @@
         map.put(new Actions(Actions.MAX_SCROLL));
     }
 
-
+    /**
+     * Creates the UI.
+     * @param c the component
+     * @return the UI
+     */
     public static ComponentUI createUI(JComponent c)    {
         return new BasicScrollBarUI();
     }
 
-
+    /**
+     * Configures the scroll bar colors.
+     */
     protected void configureScrollBarColors()
     {
         LookAndFeel.installColors(scrollbar, "ScrollBar.background",
@@ -166,7 +196,10 @@
         trackHighlightColor = UIManager.getColor("ScrollBar.trackHighlight");
     }
 
-
+    /**
+     * Installs the UI.
+     * @param c the component
+     */
     public void installUI(JComponent c)   {
         scrollbar = (JScrollBar)c;
         thumbRect = new Rectangle(0, 0, 0, 0);
@@ -177,6 +210,10 @@
         installKeyboardActions();
     }
 
+    /**
+     * Uninstalls the UI.
+     * @param c the component
+     */
     public void uninstallUI(JComponent c) {
         scrollbar = (JScrollBar)c;
         uninstallListeners();
@@ -189,7 +226,9 @@
         decrButton = null;
     }
 
-
+    /**
+     * Installs the defaults.
+     */
     protected void installDefaults()
     {
         scrollBarWidth = UIManager.getInt("ScrollBar.width");
@@ -240,7 +279,9 @@
         }
     }
 
-
+    /**
+     * Installs the components.
+     */
     protected void installComponents(){
         switch (scrollbar.getOrientation()) {
         case JScrollBar.VERTICAL:
@@ -264,12 +305,17 @@
         scrollbar.setEnabled(scrollbar.isEnabled());
     }
 
+    /**
+     * Uninstalls the components.
+     */
     protected void uninstallComponents(){
         scrollbar.remove(incrButton);
         scrollbar.remove(decrButton);
     }
 
-
+    /**
+     * Installs the listeners.
+     */
     protected void installListeners(){
         trackListener = createTrackListener();
         buttonListener = createArrowButtonListener();
@@ -294,7 +340,9 @@
         scrollTimer.setInitialDelay(300);  // default InitialDelay?
     }
 
-
+    /**
+     * Installs the keyboard actions.
+     */
     protected void installKeyboardActions(){
         LazyActionMap.installLazyActionMap(scrollbar, BasicScrollBarUI.class,
                                            "ScrollBar.actionMap");
@@ -307,6 +355,9 @@
                    JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, inputMap);
     }
 
+    /**
+     * Uninstalls the keyboard actions.
+     */
     protected void uninstallKeyboardActions(){
         SwingUtilities.replaceUIInputMap(scrollbar, JComponent.WHEN_FOCUSED,
                                          null);
@@ -343,7 +394,9 @@
         return null;
     }
 
-
+    /**
+     * Uninstall the listeners.
+     */
     protected void uninstallListeners() {
         scrollTimer.stop();
         scrollTimer = null;
@@ -363,7 +416,9 @@
         handler = null;
     }
 
-
+    /**
+     * Uninstalls the defaults.
+     */
     protected void uninstallDefaults(){
         LookAndFeel.uninstallBorder(scrollbar);
         if (scrollbar.getLayout() == this) {
@@ -379,22 +434,42 @@
         return handler;
     }
 
+    /**
+     * Creates a track listener.
+     * @return a track listener
+     */
     protected TrackListener createTrackListener(){
         return new TrackListener();
     }
 
+    /**
+     * Creates an arrow button listener.
+     * @return an arrow button   listener
+     */
     protected ArrowButtonListener createArrowButtonListener(){
         return new ArrowButtonListener();
     }
 
+    /**
+     * Creates a model listener.
+     * @return a model listener
+     */
     protected ModelListener createModelListener(){
         return new ModelListener();
     }
 
+    /**
+     * Creates a scroll listener.
+     * @return a scroll listener
+     */
     protected ScrollListener createScrollListener(){
         return new ScrollListener();
     }
 
+    /**
+     * Creates a property change listener.
+     * @return a property change listener
+     */
     protected PropertyChangeListener createPropertyChangeListener() {
         return getHandler();
     }
@@ -470,6 +545,11 @@
         return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
     }
 
+    /**
+     * Creates a decrease button.
+     * @param orientation the orientation
+     * @return a decrease button
+     */
     protected JButton createDecreaseButton(int orientation)  {
         return new BasicArrowButton(orientation,
                                     UIManager.getColor("ScrollBar.thumb"),
@@ -478,6 +558,11 @@
                                     UIManager.getColor("ScrollBar.thumbHighlight"));
     }
 
+    /**
+     * Creates an increase button.
+     * @param orientation the orientation
+     * @return an increase button
+     */
     protected JButton createIncreaseButton(int orientation)  {
         return new BasicArrowButton(orientation,
                                     UIManager.getColor("ScrollBar.thumb"),
@@ -487,6 +572,10 @@
     }
 
 
+    /**
+     * Paints the decrease highlight.
+     * @param g the graphics
+     */
     protected void paintDecreaseHighlight(Graphics g)
     {
         Insets insets = scrollbar.getInsets();
@@ -519,6 +608,10 @@
     }
 
 
+    /**
+     * Paints the increase highlight.
+     * @param g the graphics
+     */
     protected void paintIncreaseHighlight(Graphics g)
     {
         Insets insets = scrollbar.getInsets();
@@ -552,6 +645,12 @@
     }
 
 
+    /**
+     * Paints the track.
+     * @param g the graphics
+     * @param c the component
+     * @param trackBounds the track bounds
+     */
     protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds)
     {
         g.setColor(trackColor);
@@ -565,7 +664,12 @@
         }
     }
 
-
+    /**
+     * Paints the thumb.
+     * @param g the graphics
+     * @param c the component
+     * @param thumbBounds the thumb bounds
+     */
     protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds)
     {
         if(thumbBounds.isEmpty() || !scrollbar.isEnabled())     {
@@ -644,6 +748,10 @@
         return (useCachedValue) ? scrollBarValue : sb.getValue();
     }
 
+    /**
+     * Laysouts a  vertical scroll bar.
+     * @param sb the scroll bar
+     */
     protected void layoutVScrollbar(JScrollBar sb)
     {
         Dimension sbSize = sb.getSize();
@@ -742,7 +850,10 @@
         }
     }
 
-
+    /**
+     * Laysouts a  vertical scroll bar.
+     * @param sb the scroll bar
+     */
     protected void layoutHScrollbar(JScrollBar sb)
     {
         Dimension sbSize = sb.getSize();
@@ -966,6 +1077,10 @@
             scrollbar.setValue(newValue);
     }
 
+    /**
+     * Scrolls by block.
+     * @param direction the direction to scroll
+     */
     protected void scrollByBlock(int direction)
     {
         scrollByBlock(scrollbar, direction);
@@ -1033,6 +1148,10 @@
         }
     }
 
+    /**
+     * Scrolls by unit.
+     * @param direction the direction to scroll
+     */
     protected void scrollByUnit(int direction)  {
         scrollByUnits(scrollbar, direction, 1, false);
     }
@@ -1050,7 +1169,6 @@
 
     /**
      * A listener to listen for model changes.
-     *
      */
     protected class ModelListener implements ChangeListener {
         public void stateChanged(ChangeEvent e) {
@@ -1069,10 +1187,15 @@
     protected class TrackListener
         extends MouseAdapter implements MouseMotionListener
     {
+        /** The offset */
         protected transient int offset;
-        protected transient int currentMouseX, currentMouseY;
+        /** Current mouse x position */
+        protected transient int currentMouseX;
+        /** Current mouse y position */
+        protected transient int currentMouseY;
         private transient int direction = +1;
 
+        /** {@inheritDoc} */
         public void mouseReleased(MouseEvent e)
         {
             if (isDragging) {
@@ -1339,6 +1462,7 @@
             }
         }
 
+        /** {@inheritDoc} */
         public void mouseMoved(MouseEvent e) {
             if (!isDragging) {
                 updateThumbState(e.getX(), e.getY());
@@ -1406,19 +1530,34 @@
         int direction = +1;
         boolean useBlockIncrement;
 
+        /** Constructs a {@code ScrollListener}. */
         public ScrollListener() {
             direction = +1;
             useBlockIncrement = false;
         }
 
+        /**
+         * Constructs a {@code ScrollListener}.
+         * @param dir direction
+         * @param block use block increment
+         */
         public ScrollListener(int dir, boolean block)   {
             direction = dir;
             useBlockIncrement = block;
         }
 
+        /**
+         * Sets the direction.
+         * @param direction the new direction
+         */
         public void setDirection(int direction) { this.direction = direction; }
+        /**
+         * Sets the scrolling by block
+         * @param block whether or not to scroll by block
+         */
         public void setScrollByBlock(boolean block) { this.useBlockIncrement = block; }
 
+        /** {@inheritDoc} */
         public void actionPerformed(ActionEvent e) {
             if(useBlockIncrement)       {
                 scrollByBlock(direction);
@@ -1497,13 +1636,14 @@
         }
     }
 
+    /** Property change handler */
     public class PropertyChangeHandler implements PropertyChangeListener
     {
         // NOTE: This class exists only for backward compatibility. All
         // its functionality has been moved into Handler. If you need to add
         // new functionality add it to the Handler, but make sure this
         // class calls into the Handler.
-
+        /** {@inheritDoc} */
         public void propertyChange(PropertyChangeEvent e) {
             getHandler().propertyChange(e);
         }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicScrollPaneUI.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicScrollPaneUI.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -746,6 +746,9 @@
         }
     }
 
+    /**
+     * Property change handler.
+     */
     public class PropertyChangeHandler implements PropertyChangeListener
     {
 
@@ -754,6 +757,9 @@
         // new functionality add it to the Handler, but make sure this
         // class calls into the Handler.
 
+        /**
+         * {@inheritDoc}
+         */
         public void propertyChange(PropertyChangeEvent e)
         {
             getHandler().propertyChange(e);
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSliderUI.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSliderUI.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,33 +47,55 @@
     // Old actions forward to an instance of this.
     private static final Actions SHARED_ACTION = new Actions();
 
+    /** Positive scroll */
     public static final int POSITIVE_SCROLL = +1;
+    /** Negative scroll */
     public static final int NEGATIVE_SCROLL = -1;
+    /** Minimum scroll */
     public static final int MIN_SCROLL = -2;
+    /** Maximum scroll */
     public static final int MAX_SCROLL = +2;
 
+    /** Scroll timer */
     protected Timer scrollTimer;
+    /** Slider */
     protected JSlider slider;
 
+    /** Focus insets */
     protected Insets focusInsets = null;
+    /** Inset cache */
     protected Insets insetCache = null;
+    /** Left-to-right cache */
     protected boolean leftToRightCache = true;
+    /** Focus rectangle */
     protected Rectangle focusRect = null;
+    /** Content rectangle */
     protected Rectangle contentRect = null;
+    /** Label rectangle */
     protected Rectangle labelRect = null;
+    /** Tick rectangle */
     protected Rectangle tickRect = null;
+    /** Track rectangle */
     protected Rectangle trackRect = null;
+    /** Thumb rectangle */
     protected Rectangle thumbRect = null;
 
-    protected int trackBuffer = 0;  // The distance that the track is from the side of the control
+    /** The distance that the track is from the side of the control */
+    protected int trackBuffer = 0;
 
     private transient boolean isDragging;
 
+    /** Track listener */
     protected TrackListener trackListener;
+    /** Change listener */
     protected ChangeListener changeListener;
+    /** Component listener */
     protected ComponentListener componentListener;
+    /** Focus listener */
     protected FocusListener focusListener;
+    /** Scroll listener */
     protected ScrollListener scrollListener;
+    /** Property chane listener */
     protected PropertyChangeListener propertyChangeListener;
     private Handler handler;
     private int lastValue;
@@ -93,15 +115,26 @@
      */
     private boolean sameLabelBaselines;
 
-
+    /**
+     * Returns the shadow color.
+     * @return the shadow color
+     */
     protected Color getShadowColor() {
         return shadowColor;
     }
 
+    /**
+     * Returns the highlight color.
+     * @return the highlight color
+     */
     protected Color getHighlightColor() {
         return highlightColor;
     }
 
+    /**
+     * Returns the focus color.
+     * @return the focus color
+     */
     protected Color getFocusColor() {
         return focusColor;
     }
@@ -119,13 +152,26 @@
     /////////////////////////////////////////////////////////////////////////////
     // ComponentUI Interface Implementation methods
     /////////////////////////////////////////////////////////////////////////////
+    /**
+     * Creates a UI.
+     * @param b a component
+     * @return a UI
+     */
     public static ComponentUI createUI(JComponent b)    {
         return new BasicSliderUI((JSlider)b);
     }
 
+    /**
+     * Constructs a {@code BasicSliderUI}.
+     * @param b a slider
+     */
     public BasicSliderUI(JSlider b)   {
     }
 
+    /**
+     * Installs a UI.
+     * @param c a component
+     */
     public void installUI(JComponent c)   {
         slider = (JSlider) c;
 
@@ -162,6 +208,10 @@
         calculateGeometry(); // This figures out where the labels, ticks, track, and thumb are.
     }
 
+    /**
+     * Uninstalls a UI.
+     * @param c a component
+     */
     public void uninstallUI(JComponent c) {
         if ( c != slider )
             throw new IllegalComponentStateException(
@@ -193,6 +243,10 @@
         slider = null;
     }
 
+    /**
+     * Installs the defaults.
+     * @param slider a slider
+     */
     protected void installDefaults( JSlider slider ) {
         LookAndFeel.installBorder(slider, "Slider.border");
         LookAndFeel.installColorsAndFont(slider, "Slider.background",
@@ -208,32 +262,66 @@
         if (focusInsets == null) focusInsets = new InsetsUIResource(2,2,2,2);
     }
 
+    /**
+     * Uninstalls the defaults.
+     * @param slider a slider
+     */
     protected void uninstallDefaults(JSlider slider) {
         LookAndFeel.uninstallBorder(slider);
 
         focusInsets = null;
     }
 
+    /**
+     * Creates a track listener.
+     * @return a track listener
+     * @param slider a slider
+     */
     protected TrackListener createTrackListener(JSlider slider) {
         return new TrackListener();
     }
 
+    /**
+     * Creates a change listener.
+     * @return a change listener
+     * @param slider a slider
+     */
     protected ChangeListener createChangeListener(JSlider slider) {
         return getHandler();
     }
 
+    /**
+     * Creates a composite listener.
+     * @return a composite listener
+     * @param slider a slider
+     */
     protected ComponentListener createComponentListener(JSlider slider) {
         return getHandler();
     }
 
+    /**
+     * Creates a focus listener.
+     * @return a focus listener
+     * @param slider a slider
+     */
     protected FocusListener createFocusListener(JSlider slider) {
         return getHandler();
     }
 
+    /**
+     * Creates a scroll listener.
+     * @return a scroll listener
+     * @param slider a slider
+     */
     protected ScrollListener createScrollListener( JSlider slider ) {
         return new ScrollListener();
     }
 
+    /**
+     * Creates a property change listener.
+     * @return a property change listener
+     * @param slider a slider
+     */
     protected PropertyChangeListener createPropertyChangeListener(
             JSlider slider) {
         return getHandler();
@@ -246,6 +334,10 @@
         return handler;
     }
 
+    /**
+     * Installs listeners.
+     * @param slider a slider
+     */
     protected void installListeners( JSlider slider ) {
         slider.addMouseListener(trackListener);
         slider.addMouseMotionListener(trackListener);
@@ -255,6 +347,10 @@
         slider.getModel().addChangeListener(changeListener);
     }
 
+    /**
+     * Uninstalls listeners.
+     * @param slider a slider
+     */
     protected void uninstallListeners( JSlider slider ) {
         slider.removeMouseListener(trackListener);
         slider.removeMouseMotionListener(trackListener);
@@ -265,6 +361,10 @@
         handler = null;
     }
 
+    /**
+     * Installs keyboard actions.
+     * @param slider a slider
+     */
     protected void installKeyboardActions( JSlider slider ) {
         InputMap km = getInputMap(JComponent.WHEN_FOCUSED, slider);
         SwingUtilities.replaceUIInputMap(slider, JComponent.WHEN_FOCUSED, km);
@@ -302,6 +402,10 @@
         map.put(new Actions(Actions.MAX_SCROLL_INCREMENT));
     }
 
+    /**
+     * Uninstalls keyboard actions.
+     * @param slider a slider
+     */
     protected void uninstallKeyboardActions( JSlider slider ) {
         SwingUtilities.replaceUIActionMap(slider, null);
         SwingUtilities.replaceUIInputMap(slider, JComponent.WHEN_FOCUSED,
@@ -430,6 +534,10 @@
         return sameLabelBaselines;
     }
 
+    /**
+     * Returns the preferred horizontal size.
+     * @return the preferred horizontal size
+     */
     public Dimension getPreferredHorizontalSize() {
         Dimension horizDim = (Dimension)DefaultLookup.get(slider,
                 this, "Slider.horizontalSize");
@@ -439,6 +547,10 @@
         return horizDim;
     }
 
+    /**
+     * Returns the preferred vertical size.
+     * @return the preferred vertical size
+     */
     public Dimension getPreferredVerticalSize() {
         Dimension vertDim = (Dimension)DefaultLookup.get(slider,
                 this, "Slider.verticalSize");
@@ -448,6 +560,10 @@
         return vertDim;
     }
 
+    /**
+     * Returns the minimum horizontal size.
+     * @return the minimum horizontal size
+     */
     public Dimension getMinimumHorizontalSize() {
         Dimension minHorizDim = (Dimension)DefaultLookup.get(slider,
                 this, "Slider.minimumHorizontalSize");
@@ -457,6 +573,10 @@
         return minHorizDim;
     }
 
+    /**
+     * Returns the minimum vertical size.
+     * @return the minimum vertical size
+     */
     public Dimension getMinimumVerticalSize() {
         Dimension minVertDim = (Dimension)DefaultLookup.get(slider,
                 this, "Slider.minimumVerticalSize");
@@ -466,6 +586,11 @@
         return minVertDim;
     }
 
+    /**
+     * Returns the preferred size.
+     * @param c a component
+     * @return the preferred size
+     */
     public Dimension getPreferredSize(JComponent c)    {
         recalculateIfInsetsChanged();
         Dimension d;
@@ -485,6 +610,11 @@
         return d;
     }
 
+    /**
+     * Returns the minimum size.
+     * @param c a component
+     * @return the minimum size
+     */
     public Dimension getMinimumSize(JComponent c)  {
         recalculateIfInsetsChanged();
         Dimension d;
@@ -505,6 +635,11 @@
         return d;
     }
 
+    /**
+     * Returns the maximum size.
+     * @param c a component
+     * @return the maximum size
+     */
     public Dimension getMaximumSize(JComponent c) {
         Dimension d = getPreferredSize(c);
         if ( slider.getOrientation() == JSlider.VERTICAL ) {
@@ -517,6 +652,9 @@
         return d;
     }
 
+    /**
+     * Calculates the geometry.
+     */
     protected void calculateGeometry() {
         calculateFocusRect();
         calculateContentRect();
@@ -528,6 +666,9 @@
         calculateThumbLocation();
     }
 
+    /**
+     * Calculates the focus rectangle.
+     */
     protected void calculateFocusRect() {
         focusRect.x = insetCache.left;
         focusRect.y = insetCache.top;
@@ -535,11 +676,17 @@
         focusRect.height = slider.getHeight() - (insetCache.top + insetCache.bottom);
     }
 
+    /**
+     * Calculates the thumb size rectangle.
+     */
     protected void calculateThumbSize() {
         Dimension size = getThumbSize();
         thumbRect.setSize( size.width, size.height );
     }
 
+    /**
+     * Calculates the content rectangle.
+     */
     protected void calculateContentRect() {
         contentRect.x = focusRect.x + focusInsets.left;
         contentRect.y = focusRect.y + focusInsets.top;
@@ -564,6 +711,9 @@
         return result;
     }
 
+    /**
+     * Calculates the thumb location.
+     */
     protected void calculateThumbLocation() {
         if ( slider.getSnapToTicks() ) {
             int sliderValue = slider.getValue();
@@ -603,6 +753,9 @@
         }
     }
 
+    /**
+     * Calculates the track buffer.
+     */
     protected void calculateTrackBuffer() {
         if ( slider.getPaintLabels() && slider.getLabelTable()  != null ) {
             Component highLabel = getHighestValueLabel();
@@ -627,7 +780,9 @@
         }
     }
 
-
+    /**
+     * Calculates the track rectangle.
+     */
     protected void calculateTrackRect() {
         int centerSpacing; // used to center sliders added using BorderLayout.CENTER (bug 4275631)
         if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
@@ -671,6 +826,9 @@
         return 8;
     }
 
+    /**
+     * Calculates the tick rectangle.
+     */
     protected void calculateTickRect() {
         if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
             tickRect.x = trackRect.x;
@@ -691,6 +849,9 @@
         }
     }
 
+    /**
+     * Calculates the label rectangle.
+     */
     protected void calculateLabelRect() {
         if ( slider.getPaintLabels() ) {
             if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
@@ -733,6 +894,10 @@
         }
     }
 
+    /**
+     * Returns the thumb size.
+     * @return the thumb size
+     */
     protected Dimension getThumbSize() {
         Dimension size = new Dimension();
 
@@ -748,16 +913,24 @@
         return size;
     }
 
+    /**
+     * A property change handler.
+     */
     public class PropertyChangeHandler implements PropertyChangeListener {
         // NOTE: This class exists only for backward compatibility. All
         // its functionality has been moved into Handler. If you need to add
         // new functionality add it to the Handler, but make sure this
         // class calls into the Handler.
+        /** {@inheritDoc} */
         public void propertyChange( PropertyChangeEvent e ) {
             getHandler().propertyChange(e);
         }
     }
 
+    /**
+     * Returns the width of the widest label.
+     * @return the width of the widest label
+     */
     protected int getWidthOfWidestLabel() {
         @SuppressWarnings("rawtypes")
         Dictionary dictionary = slider.getLabelTable();
@@ -772,6 +945,10 @@
         return widest;
     }
 
+    /**
+     * Returns the height of the tallest label.
+     * @return the height of the tallest label
+     */
     protected int getHeightOfTallestLabel() {
         @SuppressWarnings("rawtypes")
         Dictionary dictionary = slider.getLabelTable();
@@ -786,6 +963,10 @@
         return tallest;
     }
 
+    /**
+     * Returns the width of the highest value label.
+     * @return the width of the highest value label
+     */
     protected int getWidthOfHighValueLabel() {
         Component label = getHighestValueLabel();
         int width = 0;
@@ -797,6 +978,10 @@
         return width;
     }
 
+    /**
+     * Returns the width of the lowest value label.
+     * @return the width of the lowest value label
+     */
     protected int getWidthOfLowValueLabel() {
         Component label = getLowestValueLabel();
         int width = 0;
@@ -808,6 +993,10 @@
         return width;
     }
 
+    /**
+     * Returns the height of the highest value label.
+     * @return the height of the highest value label
+     */
     protected int getHeightOfHighValueLabel() {
         Component label = getHighestValueLabel();
         int height = 0;
@@ -819,6 +1008,10 @@
         return height;
     }
 
+    /**
+     * Returns the height of the lowest value label.
+     * @return the height of the lowest value label
+     */
     protected int getHeightOfLowValueLabel() {
         Component label = getLowestValueLabel();
         int height = 0;
@@ -830,6 +1023,10 @@
         return height;
     }
 
+    /**
+     * Draws inverted.
+     * @return the inverted-ness
+     */
     protected boolean drawInverted() {
         if (slider.getOrientation()==JSlider.HORIZONTAL) {
             if(BasicGraphicsUtils.isLeftToRight(slider)) {
@@ -960,6 +1157,9 @@
         }
     }
 
+    /**
+     * Recalculates if the insets have changed.
+     */
     protected void recalculateIfInsetsChanged() {
         Insets newInsets = slider.getInsets();
         if ( !newInsets.equals( insetCache ) ) {
@@ -968,6 +1168,9 @@
         }
     }
 
+    /**
+     * Recalculates if the orientation has changed.
+     */
     protected void recalculateIfOrientationChanged() {
         boolean ltr = BasicGraphicsUtils.isLeftToRight(slider);
         if ( ltr!=leftToRightCache ) {
@@ -976,6 +1179,10 @@
         }
     }
 
+    /**
+     * Paints focus.
+     * @param g the graphics
+     */
     public void paintFocus(Graphics g)  {
         g.setColor( getFocusColor() );
 
@@ -983,6 +1190,10 @@
                                            focusRect.width, focusRect.height );
     }
 
+    /**
+     * Paints track.
+     * @param g the graphics
+     */
     public void paintTrack(Graphics g)  {
 
         Rectangle trackBounds = trackRect;
@@ -1023,6 +1234,10 @@
         }
     }
 
+    /**
+     * Paints ticks.
+     * @param g the graphics
+     */
     public void paintTicks(Graphics g)  {
         Rectangle tickBounds = tickRect;
 
@@ -1120,22 +1335,50 @@
         }
     }
 
+    /**
+     * Paints minor tick for horizontal slider.
+     * @param g the graphics
+     * @param tickBounds the tick bounds
+     * @param x the x coordinate
+     */
     protected void paintMinorTickForHorizSlider( Graphics g, Rectangle tickBounds, int x ) {
         g.drawLine( x, 0, x, tickBounds.height / 2 - 1 );
     }
 
+    /**
+     * Paints major tick for horizontal slider.
+     * @param g the graphics
+     * @param tickBounds the tick bounds
+     * @param x the x coordinate
+     */
     protected void paintMajorTickForHorizSlider( Graphics g, Rectangle tickBounds, int x ) {
         g.drawLine( x, 0, x, tickBounds.height - 2 );
     }
 
+    /**
+     * Paints minor tick for vertical slider.
+     * @param g the graphics
+     * @param tickBounds the tick bounds
+     * @param y the y coordinate
+     */
     protected void paintMinorTickForVertSlider( Graphics g, Rectangle tickBounds, int y ) {
         g.drawLine( 0, y, tickBounds.width / 2 - 1, y );
     }
 
+    /**
+     * Paints major tick for vertical slider.
+     * @param g the graphics
+     * @param tickBounds the tick bounds
+     * @param y the y coordinate
+     */
     protected void paintMajorTickForVertSlider( Graphics g, Rectangle tickBounds, int y ) {
         g.drawLine( 0, y,  tickBounds.width - 2, y );
     }
 
+    /**
+     * Paints the labels.
+     * @param g the graphics
+     */
     public void paintLabels( Graphics g ) {
         Rectangle labelBounds = labelRect;
 
@@ -1222,6 +1465,10 @@
         g.translate( 0, -labelTop );
     }
 
+    /**
+     * Paints the thumb.
+     * @param g the graphics
+     */
     public void paintThumb(Graphics g)  {
         Rectangle knobBounds = thumbRect;
         int w = knobBounds.width;
@@ -1330,6 +1577,11 @@
     // Used exclusively by setThumbLocation()
     private static Rectangle unionRect = new Rectangle();
 
+    /**
+     * Sets the thumb location.
+     * @param x the x coordinate
+     * @param y the y coordinate
+     */
     public void setThumbLocation(int x, int y)  {
         unionRect.setBounds( thumbRect );
 
@@ -1339,6 +1591,10 @@
         slider.repaint( unionRect.x, unionRect.y, unionRect.width, unionRect.height );
     }
 
+    /**
+     * Scrolls by block.
+     * @param direction the direction
+     */
     public void scrollByBlock(int direction)    {
         synchronized(slider)    {
             int blockIncrement =
@@ -1360,6 +1616,10 @@
         }
     }
 
+    /**
+     * Scrolls by unit.
+     * @param direction the direction
+     */
     public void scrollByUnit(int direction) {
         synchronized(slider)    {
             int delta = ((direction > 0) ? POSITIVE_SCROLL : NEGATIVE_SCROLL);
@@ -1384,6 +1644,11 @@
         scrollByBlock( dir );
     }
 
+    /**
+     * Returns the x position for a value.
+     * @param value the value
+     * @return the x position for a value
+     */
     protected int xPositionForValue( int value )    {
         int min = slider.getMinimum();
         int max = slider.getMaximum();
@@ -1409,6 +1674,11 @@
         return xPosition;
     }
 
+    /**
+     * Returns the y position for a value.
+     * @param value the value
+     * @return the y position for a value
+     */
     protected int yPositionForValue( int value )  {
         return yPositionForValue(value, trackRect.y, trackRect.height);
     }
@@ -1605,9 +1875,16 @@
      * Instantiate it only within subclasses of <code>Foo</code>.
      */
     public class TrackListener extends MouseInputAdapter {
+        /** The offset */
         protected transient int offset;
-        protected transient int currentMouseX, currentMouseY;
+        /** Current mouse x. */
+        protected transient int currentMouseX;
+        /** Current mouse y. */
+        protected transient int currentMouseY;
 
+        /**
+         * {@inheritDoc}
+         */
         public void mouseReleased(MouseEvent e) {
             if (!slider.isEnabled()) {
                 return;
@@ -1736,6 +2013,11 @@
             }
         }
 
+        /**
+         * Returns if scrolling should occur
+         * @param direction the direction.
+         * @return if scrolling should occur
+         */
         public boolean shouldScroll(int direction) {
             Rectangle r = thumbRect;
             if (slider.getOrientation() == JSlider.VERTICAL) {
@@ -1772,9 +2054,9 @@
         }
 
         /**
-        * Set the models value to the position of the top/left
-        * of the thumb relative to the origin of the track.
-        */
+         * Set the models value to the position of the top/left
+         * of the thumb relative to the origin of the track.
+         */
         public void mouseDragged(MouseEvent e) {
             int thumbMiddle;
 
@@ -1839,6 +2121,7 @@
             }
         }
 
+        /** {@inheritDoc} */
         public void mouseMoved(MouseEvent e) { }
     }
 
@@ -1855,24 +2138,41 @@
         int direction = POSITIVE_SCROLL;
         boolean useBlockIncrement;
 
+        /**
+         * Constructs a {@code ScrollListener}
+         */
         public ScrollListener() {
             direction = POSITIVE_SCROLL;
             useBlockIncrement = true;
         }
 
+        /**
+         * Constructs a {@code ScrollListener}
+         * @param dir the direction
+         * @param block whether or not to scroll by block
+         */
         public ScrollListener(int dir, boolean block)   {
             direction = dir;
             useBlockIncrement = block;
         }
 
+        /**
+         * Sets the direction.
+         * @param direction the new direction
+         */
         public void setDirection(int direction) {
             this.direction = direction;
         }
 
+        /**
+         * Sets scrolling by block
+         * @param block the new scroll by block value
+         */
         public void setScrollByBlock(boolean block) {
             this.useBlockIncrement = block;
         }
 
+        /** {@inheritDoc} */
         public void actionPerformed(ActionEvent e) {
             if (useBlockIncrement) {
                 scrollByBlock(direction);
@@ -1945,16 +2245,24 @@
         boolean block;
         JSlider slider;
 
+        /**
+         * Constructs an {@code ActionScroller}.
+         * @param slider a slider
+         * @param dir the direction
+         * @param block block scrolling or not
+         */
         public ActionScroller( JSlider slider, int dir, boolean block) {
             this.dir = dir;
             this.block = block;
             this.slider = slider;
         }
 
+        /** {@inheritDoc} */
         public void actionPerformed(ActionEvent e) {
             SHARED_ACTION.scroll(slider, BasicSliderUI.this, dir, block);
         }
 
+        /** {@inheritDoc} */
         public boolean isEnabled() {
             boolean b = true;
             if (slider != null) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSplitPaneUI.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSplitPaneUI.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,8 @@
 package javax.swing.plaf.basic;
 
 
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.swing.DefaultLookup;
 import sun.swing.UIAction;
 import javax.swing.*;
@@ -1191,7 +1193,6 @@
      * Should be messaged before the dragging session starts, resets
      * lastDragLocation and dividerSize.
      */
-    @SuppressWarnings("deprecation")
     protected void startDragging() {
         Component       leftC = splitPane.getLeftComponent();
         Component       rightC = splitPane.getRightComponent();
@@ -1199,10 +1200,11 @@
 
         beginDragDividerLocation = getDividerLocation(splitPane);
         draggingHW = false;
-        if(leftC != null && (cPeer = leftC.getPeer()) != null &&
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        if(leftC != null && (cPeer = acc.getPeer(leftC)) != null &&
            !(cPeer instanceof LightweightPeer)) {
             draggingHW = true;
-        } else if(rightC != null && (cPeer = rightC.getPeer()) != null
+        } else if(rightC != null && (cPeer = acc.getPeer(rightC)) != null
                   && !(cPeer instanceof LightweightPeer)) {
             draggingHW = true;
         }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -56,22 +56,33 @@
 
 // Instance variables initialized at installation
 
+    /** The tab pane */
     protected JTabbedPane tabPane;
 
+    /** Highlight color */
     protected Color highlight;
+    /** Light highlight color */
     protected Color lightHighlight;
+    /** Shadow color */
     protected Color shadow;
+    /** Dark shadow color */
     protected Color darkShadow;
+    /** Focus color */
     protected Color focus;
     private   Color selectedColor;
 
+    /** Text icon gap */
     protected int textIconGap;
-
+    /** Tab run overlay */
     protected int tabRunOverlay;
 
+    /** Tab insets */
     protected Insets tabInsets;
+    /** Selected tab insets */
     protected Insets selectedTabPadInsets;
+    /** Tab area insets */
     protected Insets tabAreaInsets;
+    /** Content border insets */
     protected Insets contentBorderInsets;
     private boolean tabsOverlapBorder;
     private boolean tabsOpaque = true;
@@ -120,19 +131,28 @@
 
 
 // Transient variables (recalculated each time TabbedPane is layed out)
-
+    /** Tab runs */
     protected int tabRuns[] = new int[10];
+    /** Run count */
     protected int runCount = 0;
+    /** Selected run */
     protected int selectedRun = -1;
+    /** Tab rects */
     protected Rectangle rects[] = new Rectangle[0];
+    /** Maximum tab height */
     protected int maxTabHeight;
+    /** Maximum tab width */
     protected int maxTabWidth;
 
 // Listeners
 
+    /** Tab change listener */
     protected ChangeListener tabChangeListener;
+    /** Property change listener */
     protected PropertyChangeListener propertyChangeListener;
+    /** Mouse change listener */
     protected MouseListener mouseListener;
+    /** Focus change listener */
     protected FocusListener focusListener;
 
 // Private instance data
@@ -190,6 +210,11 @@
 
 // UI creation
 
+    /**
+     * Create a UI.
+     * @param c a component
+     * @return a UI
+     */
     public static ComponentUI createUI(JComponent c) {
         return new BasicTabbedPaneUI();
     }
@@ -355,6 +380,9 @@
          tabContainer = null;
     }
 
+    /**
+     * Install the defaults.
+     */
     protected void installDefaults() {
         LookAndFeel.installColorsAndFont(tabPane, "TabbedPane.background",
                                     "TabbedPane.foreground", "TabbedPane.font");
@@ -389,6 +417,9 @@
         if (contentBorderInsets == null) contentBorderInsets = new Insets(2,2,3,3);
     }
 
+    /**
+     * Uninstall the defaults.
+     */
     protected void uninstallDefaults() {
         highlight = null;
         lightHighlight = null;
@@ -401,6 +432,9 @@
         contentBorderInsets = null;
     }
 
+    /**
+     * Install the listeners.
+     */
     protected void installListeners() {
         if ((propertyChangeListener = createPropertyChangeListener()) != null) {
             tabPane.addPropertyChangeListener(propertyChangeListener);
@@ -421,6 +455,9 @@
         }
     }
 
+    /**
+     * Uninstall the listeners.
+     */
     protected void uninstallListeners() {
         if (mouseListener != null) {
             tabPane.removeMouseListener(mouseListener);
@@ -448,18 +485,34 @@
         handler = null;
     }
 
+    /**
+     * Creates a mouse listener.
+     * @return a mouse listener
+     */
     protected MouseListener createMouseListener() {
         return getHandler();
     }
 
+    /**
+     * Creates a focus listener.
+     * @return a focus listener
+     */
     protected FocusListener createFocusListener() {
         return getHandler();
     }
 
+    /**
+     * Creates a change listener.
+     * @return a change listener
+     */
     protected ChangeListener createChangeListener() {
         return getHandler();
     }
 
+    /**
+     * Creates a property change listener.
+     * @return a property change listener
+     */
     protected PropertyChangeListener createPropertyChangeListener() {
         return getHandler();
     }
@@ -471,6 +524,9 @@
         return handler;
     }
 
+    /**
+     * Installs the keyboard actions.
+     */
     protected void installKeyboardActions() {
         InputMap km = getInputMap(JComponent.
                                   WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
@@ -498,6 +554,9 @@
         return null;
     }
 
+    /**
+     * Uninstalls the keyboard actions.
+     */
     protected void uninstallKeyboardActions() {
         SwingUtilities.replaceUIActionMap(tabPane, null);
         SwingUtilities.replaceUIInputMap(tabPane, JComponent.
@@ -844,6 +903,15 @@
         }
     }
 
+    /**
+     * Paints a tab.
+     * @param g the graphics
+     * @param tabPlacement the tab placement
+     * @param rects rectangles
+     * @param tabIndex the tab index
+     * @param iconRect the icon rectangle
+     * @param textRect the text rectangle
+     */
     protected void paintTab(Graphics g, int tabPlacement,
                             Rectangle[] rects, int tabIndex,
                             Rectangle iconRect, Rectangle textRect) {
@@ -1012,6 +1080,18 @@
         }
     }
 
+    /**
+     * Laysout a label.
+     * @param tabPlacement the tab placement
+     * @param metrics the font metric
+     * @param tabIndex the tab index
+     * @param title the title
+     * @param icon the icon
+     * @param tabRect the tab rectangle
+     * @param iconRect the icon rectangle
+     * @param textRect the text rectangle
+     * @param isSelected selection status
+     */
     protected void layoutLabel(int tabPlacement,
                                FontMetrics metrics, int tabIndex,
                                String title, Icon icon,
@@ -1045,6 +1125,15 @@
         textRect.y += yNudge;
     }
 
+    /**
+     * Paints an icon.
+     * @param g the graphics
+     * @param tabPlacement the tab placement
+     * @param tabIndex the tab index
+     * @param icon the icon
+     * @param iconRect the icon rectangle
+     * @param isSelected selection status
+     */
     protected void paintIcon(Graphics g, int tabPlacement,
                              int tabIndex, Icon icon, Rectangle iconRect,
                              boolean isSelected ) {
@@ -1053,6 +1142,17 @@
         }
     }
 
+    /**
+     * Paints text.
+     * @param g the graphics
+     * @param tabPlacement the tab placement
+     * @param font the font
+     * @param metrics the font metrics
+     * @param tabIndex the tab index
+     * @param title the title
+     * @param textRect the text rectangle
+     * @param isSelected selection status
+     */
     protected void paintText(Graphics g, int tabPlacement,
                              Font font, FontMetrics metrics, int tabIndex,
                              String title, Rectangle textRect,
@@ -1096,7 +1196,13 @@
         }
     }
 
-
+    /**
+     * Returns the tab label shift x.
+     * @param tabPlacement the tab placement
+     * @param tabIndex the tab index
+     * @param isSelected selection status
+     * @return the tab label shift x
+     */
     protected int getTabLabelShiftX(int tabPlacement, int tabIndex, boolean isSelected) {
         Rectangle tabRect = rects[tabIndex];
         String propKey = (isSelected ? "selectedLabelShift" : "labelShift");
@@ -1115,6 +1221,13 @@
         }
     }
 
+    /**
+     * Returns the tab label shift y.
+     * @param tabPlacement the tab placement
+     * @param tabIndex the tab index
+     * @param isSelected selection status
+     * @return the tab label shift y
+     */
     protected int getTabLabelShiftY(int tabPlacement, int tabIndex, boolean isSelected) {
         Rectangle tabRect = rects[tabIndex];
         int nudge = (isSelected ? DefaultLookup.getInt(tabPane, this, "TabbedPane.selectedLabelShift", -1) :
@@ -1132,6 +1245,16 @@
         }
     }
 
+    /**
+     * Paints the focus indicator.
+     * @param g the graphics
+     * @param tabPlacement the tab placement
+     * @param rects rectangles
+     * @param tabIndex the tab index
+     * @param iconRect the icon rectangle
+     * @param textRect the text rectangle
+     * @param isSelected selection status
+     */
     protected void paintFocusIndicator(Graphics g, int tabPlacement,
                                        Rectangle[] rects, int tabIndex,
                                        Rectangle iconRect, Rectangle textRect,
@@ -1245,6 +1368,18 @@
         }
     }
 
+    /**
+     * Paints the tab background.
+     * @param g             the graphics context in which to paint
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param tabIndex      the index of the tab with respect to other tabs
+     * @param x             the x coordinate of tab
+     * @param y             the y coordinate of tab
+     * @param w             the width of the tab
+     * @param h             the height of the tab
+     * @param isSelected    a {@code boolean} which determines whether or not
+     * the tab is selected
+     */
     protected void paintTabBackground(Graphics g, int tabPlacement,
                                       int tabIndex,
                                       int x, int y, int w, int h,
@@ -1267,6 +1402,12 @@
         }
     }
 
+    /**
+     * Paints the content border.
+     * @param g             the graphics context in which to paint
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param selectedIndex the tab index of the selected component
+     */
     protected void paintContentBorder(Graphics g, int tabPlacement, int selectedIndex) {
         int width = tabPane.getWidth();
         int height = tabPane.getHeight();
@@ -1329,6 +1470,16 @@
 
     }
 
+    /**
+     * Paints the content border top edge.
+     * @param g             the graphics context in which to paint
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param selectedIndex the tab index of the selected component
+     * @param x             the x coordinate of tab
+     * @param y             the y coordinate of tab
+     * @param w             the width of the tab
+     * @param h             the height of the tab
+     */
     protected void paintContentBorderTopEdge(Graphics g, int tabPlacement,
                                          int selectedIndex,
                                          int x, int y, int w, int h) {
@@ -1358,6 +1509,16 @@
         }
     }
 
+    /**
+     * Paints the content border left edge.
+     * @param g             the graphics context in which to paint
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param selectedIndex the tab index of the selected component
+     * @param x             the x coordinate of tab
+     * @param y             the y coordinate of tab
+     * @param w             the width of the tab
+     * @param h             the height of the tab
+     */
     protected void paintContentBorderLeftEdge(Graphics g, int tabPlacement,
                                                int selectedIndex,
                                                int x, int y, int w, int h) {
@@ -1384,6 +1545,16 @@
         }
     }
 
+    /**
+     * Paints the content border bottom edge.
+     * @param g             the graphics context in which to paint
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param selectedIndex the tab index of the selected component
+     * @param x             the x coordinate of tab
+     * @param y             the y coordinate of tab
+     * @param w             the width of the tab
+     * @param h             the height of the tab
+     */
     protected void paintContentBorderBottomEdge(Graphics g, int tabPlacement,
                                                int selectedIndex,
                                                int x, int y, int w, int h) {
@@ -1417,6 +1588,16 @@
 
     }
 
+    /**
+     * Paints the content border right edge.
+     * @param g             the graphics context in which to paint
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param selectedIndex the tab index of the selected component
+     * @param x             the x coordinate of tab
+     * @param y             the y coordinate of tab
+     * @param w             the width of the tab
+     * @param h             the height of the tab
+     */
     protected void paintContentBorderRightEdge(Graphics g, int tabPlacement,
                                                int selectedIndex,
                                                int x, int y, int w, int h) {
@@ -1618,10 +1799,18 @@
 
 // BasicTabbedPaneUI methods
 
+    /**
+     * Returns the visible component.
+     * @return the visible component
+     */
     protected Component getVisibleComponent() {
         return visibleComponent;
     }
 
+    /**
+     * Sets the visible component.
+     * @param component the component
+     */
     protected void setVisibleComponent(Component component) {
         if (visibleComponent != null
                 && visibleComponent != component
@@ -1636,6 +1825,10 @@
         visibleComponent = component;
     }
 
+    /**
+     * Assure the rectangles are created.
+     * @param tabCount the tab count
+     */
     protected void assureRectsCreated(int tabCount) {
         int rectArrayLen = rects.length;
         if (tabCount != rectArrayLen ) {
@@ -1650,6 +1843,9 @@
 
     }
 
+    /**
+     * Expands the tab runs array.
+     */
     protected void expandTabRunsArray() {
         int rectLen = tabRuns.length;
         int[] newArray = new int[rectLen+10];
@@ -1657,6 +1853,12 @@
         tabRuns = newArray;
     }
 
+    /**
+     * Returns the run for a tab.
+     * @param tabCount the tab count
+     * @param tabIndex the tab index.
+     * @return the run for a tab
+     */
     protected int getRunForTab(int tabCount, int tabIndex) {
         for (int i = 0; i < runCount; i++) {
             int first = tabRuns[i];
@@ -1668,6 +1870,12 @@
         return 0;
     }
 
+    /**
+     * Returns the last tab in a run.
+     * @param tabCount the tab count
+     * @param run the run
+     * @return the last tab in a run
+     */
     protected int lastTabInRun(int tabCount, int run) {
         if (runCount == 1) {
             return tabCount - 1;
@@ -1679,22 +1887,49 @@
         return tabRuns[nextRun]-1;
     }
 
+    /**
+     * Returns the tab run overlay.
+     * @param tabPlacement the placement (left, right, bottom, top) of the tab
+     * @return the tab run overlay
+     */
     protected int getTabRunOverlay(int tabPlacement) {
         return tabRunOverlay;
     }
 
+    /**
+     * Returns the tab run indent.
+     * @param tabPlacement the placement (left, right, bottom, top) of the tab
+     * @param run the tab run
+     * @return the tab run indent
+     */
     protected int getTabRunIndent(int tabPlacement, int run) {
         return 0;
     }
 
+    /**
+     * Returns whether or not the tab run should be padded.
+     * @param tabPlacement the placement (left, right, bottom, top) of the tab
+     * @param run the tab run
+     * @return whether or not the tab run should be padded
+     */
     protected boolean shouldPadTabRun(int tabPlacement, int run) {
         return runCount > 1;
     }
 
+    /**
+     * Returns whether or not the tab run should be rotated.
+     * @param tabPlacement the placement (left, right, bottom, top) of the tab
+     * @return whether or not the tab run should be rotated
+     */
     protected boolean shouldRotateTabRuns(int tabPlacement) {
         return true;
     }
 
+    /**
+     * Returns the icon for a tab.
+     * @param tabIndex the index of the tab
+     * @return the icon for a tab
+     */
     protected Icon getIconForTab(int tabIndex) {
         return (!tabPane.isEnabled() || !tabPane.isEnabledAt(tabIndex))?
                           tabPane.getDisabledIconAt(tabIndex) : tabPane.getIconAt(tabIndex);
@@ -1718,6 +1953,13 @@
         return null;
     }
 
+    /**
+     * Calculates the tab height.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param tabIndex      the index of the tab with respect to other tabs
+     * @param fontHeight    the font height
+     * @return the tab height
+     */
     protected int calculateTabHeight(int tabPlacement, int tabIndex, int fontHeight) {
         int height = 0;
         Component c = tabPane.getTabComponentAt(tabIndex);
@@ -1743,6 +1985,11 @@
         return height;
     }
 
+    /**
+     * Calculates the maximum tab height.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @return the maximum tab height
+     */
     protected int calculateMaxTabHeight(int tabPlacement) {
         FontMetrics metrics = getFontMetrics();
         int tabCount = tabPane.getTabCount();
@@ -1754,6 +2001,13 @@
         return result;
     }
 
+    /**
+     * Calculates the tab width.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param tabIndex      the index of the tab with respect to other tabs
+     * @param metrics       the font metrics
+     * @return the tab width
+     */
     protected int calculateTabWidth(int tabPlacement, int tabIndex, FontMetrics metrics) {
         Insets tabInsets = getTabInsets(tabPlacement, tabIndex);
         int width = tabInsets.left + tabInsets.right + 3;
@@ -1778,6 +2032,11 @@
         return width;
     }
 
+    /**
+     * Calculates the maximum tab width.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @return the maximum tab width
+     */
     protected int calculateMaxTabWidth(int tabPlacement) {
         FontMetrics metrics = getFontMetrics();
         int tabCount = tabPane.getTabCount();
@@ -1788,6 +2047,13 @@
         return result;
     }
 
+    /**
+     * Calculates the tab area height.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param horizRunCount horizontal run count
+     * @param maxTabHeight maximum tab height
+     * @return the tab area height
+     */
     protected int calculateTabAreaHeight(int tabPlacement, int horizRunCount, int maxTabHeight) {
         Insets tabAreaInsets = getTabAreaInsets(tabPlacement);
         int tabRunOverlay = getTabRunOverlay(tabPlacement);
@@ -1797,6 +2063,13 @@
                 0);
     }
 
+    /**
+     * Calculates the tab area width.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param vertRunCount vertical run count
+     * @param maxTabWidth maximum tab width
+     * @return the tab area width
+     */
     protected int calculateTabAreaWidth(int tabPlacement, int vertRunCount, int maxTabWidth) {
         Insets tabAreaInsets = getTabAreaInsets(tabPlacement);
         int tabRunOverlay = getTabRunOverlay(tabPlacement);
@@ -1806,24 +2079,49 @@
                 0);
     }
 
+    /**
+     * Returns the tab insets.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param tabIndex the tab index
+     * @return the tab insets
+     */
     protected Insets getTabInsets(int tabPlacement, int tabIndex) {
         return tabInsets;
     }
 
+    /**
+     * Returns the selected tab pad insets.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @return the selected tab pad insets
+     */
     protected Insets getSelectedTabPadInsets(int tabPlacement) {
         rotateInsets(selectedTabPadInsets, currentPadInsets, tabPlacement);
         return currentPadInsets;
     }
 
+    /**
+     * Returns the tab area insets.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @return the pad area insets
+     */
     protected Insets getTabAreaInsets(int tabPlacement) {
         rotateInsets(tabAreaInsets, currentTabAreaInsets, tabPlacement);
         return currentTabAreaInsets;
     }
 
+    /**
+     * Returns the content border insets.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @return the content border insets
+     */
     protected Insets getContentBorderInsets(int tabPlacement) {
         return contentBorderInsets;
     }
 
+    /**
+     * Returns the font metrics.
+     * @return the font metrics
+     */
     protected FontMetrics getFontMetrics() {
         Font font = tabPane.getFont();
         return tabPane.getFontMetrics(font);
@@ -1832,6 +2130,10 @@
 
 // Tab Navigation methods
 
+    /**
+     * Navigate the selected tab.
+     * @param direction the direction
+     */
     protected void navigateSelectedTab(int direction) {
         int tabPlacement = tabPane.getTabPlacement();
         int current = DefaultLookup.getBoolean(tabPane, this,
@@ -1910,6 +2212,10 @@
         }
     }
 
+    /**
+     * Select the next tab in the run.
+     * @param current the current tab
+     */
     protected void selectNextTabInRun(int current) {
         int tabCount = tabPane.getTabCount();
         int tabIndex = getNextTabIndexInRun(tabCount, current);
@@ -1920,6 +2226,10 @@
         navigateTo(tabIndex);
     }
 
+    /**
+     * Select the previous tab in the run.
+     * @param current the current tab
+     */
     protected void selectPreviousTabInRun(int current) {
         int tabCount = tabPane.getTabCount();
         int tabIndex = getPreviousTabIndexInRun(tabCount, current);
@@ -1930,6 +2240,10 @@
         navigateTo(tabIndex);
     }
 
+    /**
+     * Select the next tab.
+     * @param current the current tab
+     */
     protected void selectNextTab(int current) {
         int tabIndex = getNextTabIndex(current);
 
@@ -1939,6 +2253,10 @@
         navigateTo(tabIndex);
     }
 
+    /**
+     * Select the previous tab.
+     * @param current the current tab
+     */
     protected void selectPreviousTab(int current) {
         int tabIndex = getPreviousTabIndex(current);
 
@@ -1948,6 +2266,12 @@
         navigateTo(tabIndex);
     }
 
+    /**
+     * Selects an adjacent run of tabs.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param tabIndex      the index of the tab with respect to other tabs
+     * @param offset        selection offset
+     */
     protected void selectAdjacentRunTab(int tabPlacement,
                                         int tabIndex, int offset) {
         if ( runCount < 2 ) {
@@ -2026,6 +2350,14 @@
         return focusIndex;
     }
 
+    /**
+     * Returns the tab run offset.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param tabCount the tab count
+     * @param tabIndex      the index of the tab with respect to other tabs
+     * @param forward forward or not
+     * @return the tab run offset
+     */
     protected int getTabRunOffset(int tabPlacement, int tabCount,
                                   int tabIndex, boolean forward) {
         int run = getRunForTab(tabCount, tabIndex);
@@ -2092,15 +2424,31 @@
         return offset;
     }
 
+    /**
+     * Returns the previous tab index.
+     * @param base the base
+     * @return the previous tab index
+     */
     protected int getPreviousTabIndex(int base) {
         int tabIndex = (base - 1 >= 0? base - 1 : tabPane.getTabCount() - 1);
         return (tabIndex >= 0? tabIndex : 0);
     }
 
+    /**
+     * Returns the next tab index.
+     * @param base the base
+     * @return the next tab index
+     */
     protected int getNextTabIndex(int base) {
         return (base+1)%tabPane.getTabCount();
     }
 
+    /**
+     * Returns the next tab index in the run.
+     * @param tabCount the tab count
+     * @param base the base
+     * @return the next tab index in the run
+     */
     protected int getNextTabIndexInRun(int tabCount, int base) {
         if (runCount < 2) {
             return getNextTabIndex(base);
@@ -2113,6 +2461,12 @@
         return next;
     }
 
+    /**
+     * Returns the previous tab index in the run.
+     * @param tabCount the tab count
+     * @param base the base
+     * @return the previous tab index in the run
+     */
     protected int getPreviousTabIndexInRun(int tabCount, int base) {
         if (runCount < 2) {
             return getPreviousTabIndex(base);
@@ -2125,15 +2479,31 @@
         return getPreviousTabIndex(base);
     }
 
+    /**
+     * Returns the previous tab run.
+     * @param baseRun the base run
+     * @return the previous tab run
+     */
     protected int getPreviousTabRun(int baseRun) {
         int runIndex = (baseRun - 1 >= 0? baseRun - 1 : runCount - 1);
         return (runIndex >= 0? runIndex : 0);
     }
 
+    /**
+     * Returns the next tab run.
+     * @param baseRun the base run
+     * @return the next tab run
+     */
     protected int getNextTabRun(int baseRun) {
         return (baseRun+1)%runCount;
     }
 
+    /**
+     * Rotates the insets.
+     * @param topInsets the top insets
+     * @param targetInsets the target insets
+     * @param targetPlacement the target placement
+     */
     protected static void rotateInsets(Insets topInsets, Insets targetInsets, int targetPlacement) {
 
         switch(targetPlacement) {
@@ -2292,6 +2662,11 @@
             return calculateSize(true);
         }
 
+        /**
+         * Returns the calculated size.
+         * @param minimum use the minimum size or preferred size
+         * @return the calculated size
+         */
         protected Dimension calculateSize(boolean minimum) {
             int tabPlacement = tabPane.getTabPlacement();
             Insets insets = tabPane.getInsets();
@@ -2346,6 +2721,12 @@
 
         }
 
+        /**
+         * Returns the preferred tab area height.
+         * @param tabPlacement the tab placement
+         * @param width the width
+         * @return the preferred tab area height
+         */
         protected int preferredTabAreaHeight(int tabPlacement, int width) {
             FontMetrics metrics = getFontMetrics();
             int tabCount = tabPane.getTabCount();
@@ -2370,6 +2751,12 @@
             return total;
         }
 
+        /**
+         * Returns the preferred tab area width.
+         * @param tabPlacement the tab placement
+         * @param height the height
+         * @return the preferred tab area widty
+         */
         protected int preferredTabAreaWidth(int tabPlacement, int height) {
             FontMetrics metrics = getFontMetrics();
             int tabCount = tabPane.getTabCount();
@@ -2395,6 +2782,7 @@
             return total;
         }
 
+        /** {@inheritDoc} */
         @SuppressWarnings("deprecation")
         public void layoutContainer(Container parent) {
             /* Some of the code in this method deals with changing the
@@ -2517,6 +2905,9 @@
             }
         }
 
+        /**
+         * Calculates the layout info.
+         */
         public void calculateLayoutInfo() {
             int tabCount = tabPane.getTabCount();
             assureRectsCreated(tabCount);
@@ -2556,6 +2947,11 @@
             }
         }
 
+        /**
+         * Calculate the tab rectangles.
+         * @param tabPlacement the tab placement
+         * @param tabCount the tab count
+         */
         protected void calculateTabRects(int tabPlacement, int tabCount) {
             FontMetrics metrics = getFontMetrics();
             Dimension size = tabPane.getSize();
@@ -2741,9 +3137,11 @@
         }
 
 
-       /*
-       * Rotates the run-index array so that the selected run is run[0]
-       */
+        /**
+         * Rotates the run-index array so that the selected run is run[0].
+         * @param tabPlacement the tab placement
+         * @param selectedRun the selected run
+         */
         protected void rotateTabRuns(int tabPlacement, int selectedRun) {
             for (int i = 0; i < selectedRun; i++) {
                 int save = tabRuns[0];
@@ -2754,6 +3152,13 @@
             }
         }
 
+        /**
+         * Normalizes the tab runs.
+         * @param tabPlacement the tab placement
+         * @param tabCount the tab count
+         * @param start the start
+         * @param max the max
+         */
         protected void normalizeTabRuns(int tabPlacement, int tabCount,
                                      int start, int max) {
             boolean verticalTabRuns = (tabPlacement == LEFT || tabPlacement == RIGHT);
@@ -2822,6 +3227,13 @@
             }
         }
 
+        /**
+         * Pads the tab run.
+         * @param tabPlacement the tab placement
+         * @param start the start
+         * @param end the end
+         * @param max the max
+         */
         protected void padTabRun(int tabPlacement, int start, int end, int max) {
             Rectangle lastRect = rects[end];
             if (tabPlacement == TOP || tabPlacement == BOTTOM) {
@@ -2853,6 +3265,11 @@
             }
         }
 
+        /**
+         * Pads selected tab.
+         * @param tabPlacement the tab placement
+         * @param selectedIndex the selected index
+         */
         protected void padSelectedTab(int tabPlacement, int selectedIndex) {
 
             if (selectedIndex >= 0) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTextUI.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTextUI.java	Wed Jul 05 20:33:55 2017 +0200
@@ -102,6 +102,7 @@
  */
 @SuppressWarnings("serial") // Same-version serialization only
 public abstract class BasicTextUI extends TextUI implements ViewFactory {
+    private static final int DEFAULT_CARET_MARGIN = 1;
 
     /**
      * Creates a new UI.
@@ -204,6 +205,12 @@
                 evt.getPropertyName().equals("enabled")) {
 
             updateBackground((JTextComponent)evt.getSource());
+        } else if (evt.getPropertyName().equals("caretWidth")) {
+            Object value = evt.getNewValue();
+            if (value instanceof Number) {
+                int width = ((Number) value).intValue();
+                if (width >= 0) caretMargin = width;
+            }
         }
     }
 
@@ -794,6 +801,20 @@
             installDefaults();
             installDefaults2();
 
+            // margin required to show caret in the rightmost position
+            caretMargin = -1;
+            Object property = UIManager.get("Caret.width");
+            if (property instanceof Number) {
+                caretMargin = ((Number) property).intValue();
+            }
+            property = c.getClientProperty("caretWidth");
+            if (property instanceof Number) {
+                caretMargin = ((Number) property).intValue();
+            }
+            if (caretMargin < 0) {
+                caretMargin = DEFAULT_CARET_MARGIN;
+            }
+
             // attach to the model and editor
             editor.addPropertyChangeListener(updateHandler);
             Document doc = editor.getDocument();
@@ -924,7 +945,7 @@
                 rootView.setSize(Integer.MAX_VALUE, Integer.MAX_VALUE);
             }
             d.width = (int) Math.min((long) rootView.getPreferredSpan(View.X_AXIS) +
-                                     (long) i.left + (long) i.right, Integer.MAX_VALUE);
+                         (long) i.left + (long) i.right + caretMargin, Integer.MAX_VALUE);
             d.height = (int) Math.min((long) rootView.getPreferredSpan(View.Y_AXIS) +
                                       (long) i.top + (long) i.bottom, Integer.MAX_VALUE);
         } finally {
@@ -1323,6 +1344,7 @@
     private final DragListener dragListener = getDragListener();
     private static final Position.Bias[] discardBias = new Position.Bias[1];
     private DefaultCaret dropCaret;
+    private int caretMargin;
 
     /**
      * Root view that acts as a gateway between the component
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/AbstractDocument.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/AbstractDocument.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -308,9 +308,8 @@
      *
      * If no such listeners exist, this method returns an empty array.
      *
-     * @param listenerType the type of listeners requested; this parameter
-     *          should specify an interface that descends from
-     *          <code>java.util.EventListener</code>
+     * @param <T> the listener type
+     * @param listenerType the type of listeners requested
      * @return an array of all objects registered as
      *          <code><em>Foo</em>Listener</code>s on this component,
      *          or an empty array if no such
@@ -905,6 +904,8 @@
      * Returns the root element of the bidirectional structure for this
      * document.  Its children represent character runs with a given
      * Unicode bidi level.
+     * @return the root element of the bidirectional structure for this
+     * document
      */
     public Element getBidiRootElement() {
         return bidiRoot;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/AbstractWriter.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/AbstractWriter.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -186,7 +186,7 @@
 
     /**
      * Returns the first offset to be output.
-     *
+     * @return the first offset to be output
      * @since 1.3
      */
     public int getStartOffset() {
@@ -195,7 +195,7 @@
 
     /**
      * Returns the last offset to be output.
-     *
+     * @return the last offset to be output
      * @since 1.3
      */
     public int getEndOffset() {
@@ -213,7 +213,7 @@
 
     /**
      * Returns the Writer that is used to output the content.
-     *
+     * @return the Writer that is used to output the content
      * @since 1.3
      */
     protected Writer getWriter() {
@@ -257,6 +257,9 @@
      * by subclasses.  Its responsibility is to
      * iterate over the elements and use the write()
      * methods to generate output in the desired format.
+     * @throws IOException if an I/O problem has occurred
+     * @throws BadLocationException for an invalid location within
+     * the document
      */
     abstract protected void write() throws IOException, BadLocationException;
 
@@ -314,7 +317,7 @@
 
     /**
      * Returns the maximum line length.
-     *
+     * @return the maximum line length
      * @since 1.3
      */
     protected int getLineLength() {
@@ -323,7 +326,7 @@
 
     /**
      * Sets the current line length.
-     *
+     * @param length the new line length
      * @since 1.3
      */
     protected void setCurrentLineLength(int length) {
@@ -333,7 +336,7 @@
 
     /**
      * Returns the current line length.
-     *
+     * @return the current line length
      * @since 1.3
      */
     protected int getCurrentLineLength() {
@@ -344,7 +347,7 @@
      * Returns true if the current line should be considered empty. This
      * is true when <code>getCurrentLineLength</code> == 0 ||
      * <code>indent</code> has been invoked on an empty line.
-     *
+     * @return true if the current line should be considered empty
      * @since 1.3
      */
     protected boolean isLineEmpty() {
@@ -355,7 +358,7 @@
      * Sets whether or not lines can be wrapped. This can be toggled
      * during the writing of lines. For example, outputting HTML might
      * set this to false when outputting a quoted string.
-     *
+     * @param newValue new value for line wrapping
      * @since 1.3
      */
     protected void setCanWrapLines(boolean newValue) {
@@ -365,7 +368,7 @@
     /**
      * Returns whether or not the lines can be wrapped. If this is false
      * no lineSeparator's will be output.
-     *
+     * @return whether or not the lines can be wrapped
      * @since 1.3
      */
     protected boolean getCanWrapLines() {
@@ -385,7 +388,7 @@
 
     /**
      * Returns the amount of space to indent.
-     *
+     * @return the amount of space to indent
      * @since 1.3
      */
     protected int getIndentSpace() {
@@ -396,7 +399,7 @@
      * Sets the String used to represent newlines. This is initialized
      * in the constructor from either the Document, or the System property
      * line.separator.
-     *
+     * @param value the new line separator
      * @since 1.3
      */
     public void setLineSeparator(String value) {
@@ -405,7 +408,7 @@
 
     /**
      * Returns the string used to represent newlines.
-     *
+     * @return the string used to represent newlines
      * @since 1.3
      */
     public String getLineSeparator() {
@@ -446,7 +449,7 @@
      * Returns the current indentation level. That is, the number of times
      * <code>incrIndent</code> has been invoked minus the number of times
      * <code>decrIndent</code> has been invoked.
-     *
+     * @return the current indentation level
      * @since 1.3
      */
     protected int getIndentLevel() {
@@ -514,7 +517,7 @@
     /**
      * Writes the line separator. This invokes <code>output</code> directly
      * as well as setting the <code>lineLength</code> to 0.
-     *
+     * @throws IOException on any I/O error
      * @since 1.3
      */
     protected void writeLineSeparator() throws IOException {
@@ -539,6 +542,10 @@
      * and won't fit in which case the line length will exceed
      * <code>getLineLength</code>.
      *
+     * @param chars characters to output
+     * @param startIndex starting index
+     * @param length length of output
+     * @throws IOException on any I/O error
      * @since 1.3
      */
     protected void write(char[] chars, int startIndex, int length)
@@ -686,6 +693,10 @@
      * <code>writeLineSeparator</code> to write out a newline, which will
      * property update the current line length.
      *
+     * @param content characters to output
+     * @param start starting index
+     * @param length length of output
+     * @throws IOException on any I/O error
      * @since 1.3
      */
     protected void output(char[] content, int start, int length)
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/AsyncBoxView.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/AsyncBoxView.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -71,6 +71,7 @@
      * Fetch the major axis (the axis the children
      * are tiled along).  This will have a value of
      * either X_AXIS or Y_AXIS.
+     * @return the major axis
      */
     public int getMajorAxis() {
         return axis;
@@ -80,6 +81,7 @@
      * Fetch the minor axis (the axis orthogonal
      * to the tiled axis).  This will have a value of
      * either X_AXIS or Y_AXIS.
+     * @return the minor axis
      */
     public int getMinorAxis() {
         return (axis == X_AXIS) ? Y_AXIS : X_AXIS;
@@ -87,6 +89,7 @@
 
     /**
      * Get the top part of the margin around the view.
+     * @return the top part of the margin around the view
      */
     public float getTopInset() {
         return topInset;
@@ -103,6 +106,7 @@
 
     /**
      * Get the bottom part of the margin around the view.
+     * @return the bottom part of the margin around the view
      */
     public float getBottomInset() {
         return bottomInset;
@@ -119,6 +123,7 @@
 
     /**
      * Get the left part of the margin around the view.
+     * @return the left part of the margin around the view
      */
     public float getLeftInset() {
         return leftInset;
@@ -135,6 +140,7 @@
 
     /**
      * Get the right part of the margin around the view.
+     * @return the right part of the margin around the view
      */
     public float getRightInset() {
         return rightInset;
@@ -154,6 +160,7 @@
      *
      * @param axis the axis to determine the total insets along,
      *  either X_AXIS or Y_AXIS.
+     * @return the span along an axis that is taken up by the insets
      * @since 1.4
      */
     protected float getInsetSpan(int axis) {
@@ -173,6 +180,7 @@
      * considered to be accurate and incremental changes will be
      * added into the total as they are calculated.
      *
+     * @param isEstimated new value for the estimatedMajorSpan property
      * @since 1.4
      */
     protected void setEstimatedMajorSpan(boolean isEstimated) {
@@ -181,6 +189,7 @@
 
     /**
      * Is the major span currently estimated?
+     * @return whether or not the major span currently estimated
      *
      * @since 1.4
      */
@@ -194,6 +203,8 @@
      *
      * @param index the child index.  This should be a
      *   value &gt;= 0 and &lt; getViewCount().
+     * @return the object representing the layout state of
+     * of the child at the given index
      */
     protected ChildState getChildState(int index) {
         synchronized(stats) {
@@ -206,6 +217,7 @@
 
     /**
      * Fetch the queue to use for layout.
+     * @return the queue to use for layout
      */
     protected LayoutQueue getLayoutQueue() {
         return LayoutQueue.getDefaultQueue();
@@ -214,7 +226,9 @@
     /**
      * New ChildState records are created through
      * this method to allow subclasses the extend
-     * the ChildState records to do/hold more
+     * the ChildState records to do/hold more.
+     * @param v the view
+     * @return new child state
      */
     protected ChildState createChildState(View v) {
         return new ChildState(v);
@@ -237,6 +251,8 @@
      * not estimated, it is updated by the given delta to reflect
      * the incremental change.  The delta is ignored if the
      * major span is estimated.
+     * @param cs the child state
+     * @param delta the delta
      */
     protected synchronized void majorRequirementChange(ChildState cs, float delta) {
         if (estimatedMajorSpan == false) {
@@ -254,6 +270,7 @@
      * might be the GUI thread if it is trying to update
      * something immediately (such as to perform a
      * model/view translation).
+     * @param cs the child state
      */
     protected synchronized void minorRequirementChange(ChildState cs) {
         minorChanged = true;
@@ -418,6 +435,7 @@
      * where there is a child view for each child element.
      *
      * @param pos the position &gt;= 0
+     * @param b the position bias
      * @return  index of the view representing the given position, or
      *   -1 if no view represents that position
      */
@@ -946,6 +964,7 @@
          * This is called by a ChildState object that has
          * changed it's major span.  This can therefore be
          * called by multiple threads.
+         * @param cs the child state
          */
         public synchronized void childChanged(ChildState cs) {
             if (lastValidOffset == null) {
@@ -958,6 +977,7 @@
 
         /**
          * Paint the children that intersect the clip area.
+         * @param g the rendering surface to use
          */
         public synchronized void paintChildren(Graphics g) {
             Rectangle clip = g.getClipBounds();
@@ -987,6 +1007,9 @@
          * Fetch the allocation to use for a child view.
          * This will update the offsets for all children
          * not yet updated before the given index.
+         * @param index the child index
+         * @param a the allocation
+         * @return the allocation to use for a child view
          */
         public synchronized Shape getChildAllocation(int index, Shape a) {
             if (a == null) {
@@ -1031,6 +1054,8 @@
          * Fetch the allocation to use for a child view.
          * <em>This does not update the offsets in the ChildState
          * records.</em>
+         * @param index the index
+         * @return the allocation to use for a child view
          */
         protected Shape getChildAllocation(int index) {
             ChildState cs = getChildState(index);
@@ -1057,6 +1082,7 @@
          * Copy the currently allocated shape into the Rectangle
          * used to store the current allocation.  This would be
          * a floating point rectangle in a Java2D-specific implementation.
+         * @param a the allocation
          */
         protected void setAllocation(Shape a) {
             if (a instanceof Rectangle) {
@@ -1072,6 +1098,7 @@
          * along the major axis.  Make sure that offsets are set
          * on the ChildState objects up to the given target span
          * past the desired offset.
+         * @param targetOffset the target offset
          *
          * @return   index of the view representing the given visual
          *   location (targetOffset), or -1 if no view represents
@@ -1201,6 +1228,7 @@
          * Construct a child status.  This needs to start
          * out as fairly large so we don't falsely begin with
          * the idea that all of the children are visible.
+         * @param v the view
          * @since 1.4
          */
         public ChildState(View v) {
@@ -1212,7 +1240,8 @@
         }
 
         /**
-         * Fetch the child view this record represents
+         * Fetch the child view this record represents.
+         * @return the child view this record represents
          */
         public View getChildView() {
             return child;
@@ -1322,6 +1351,7 @@
 
         /**
          * What is the span along the minor axis.
+         * @return the span along the minor axis
          */
         public float getMinorSpan() {
             if (max < minorSpan) {
@@ -1333,6 +1363,7 @@
 
         /**
          * What is the offset along the minor axis
+         * @return the offset along the minor axis
          */
         public float getMinorOffset() {
             if (max < minorSpan) {
@@ -1345,13 +1376,15 @@
 
         /**
          * What is the span along the major axis.
+         * @return the span along the major axis
          */
         public float getMajorSpan() {
             return span;
         }
 
         /**
-         * Get the offset along the major axis
+         * Get the offset along the major axis.
+         * @return the offset along the major axis
          */
         public float getMajorOffset() {
             return offset;
@@ -1361,6 +1394,7 @@
          * This method should only be called by the ChildLocator,
          * it is simply a convenient place to hold the cached
          * location.
+         * @param offs offsets
          */
         public void setMajorOffset(float offs) {
             offset = offs;
@@ -1394,6 +1428,7 @@
 
         /**
          * Has the child view been laid out.
+         * @return whether or not the child view been laid out.
          */
         public boolean isLayoutValid() {
             return (minorValid && majorValid && childSizeValid);
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/BoxView.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/BoxView.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -134,6 +134,7 @@
 
     /**
      * Determines if the layout is valid along the given axis.
+     * @return if the layout is valid along the given axis
      *
      * @param axis either <code>View.X_AXIS</code> or <code>View.Y_AXIS</code>
      *
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/ChangedCharSetException.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/ChangedCharSetException.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,15 +38,28 @@
     String charSetSpec;
     boolean charSetKey;
 
+    /**
+     * Constructs a {@code ChangedCharSetException}.
+     * @param charSetSpec name of the char set specification
+     * @param charSetKey char set key
+     */
     public ChangedCharSetException(String charSetSpec, boolean charSetKey) {
         this.charSetSpec = charSetSpec;
         this.charSetKey = charSetKey;
     }
 
+    /**
+     * Returns the char set specification.
+     * @return the char set specification
+     */
     public String getCharSetSpec() {
         return charSetSpec;
     }
 
+    /**
+     * Returns the char set key.
+     * @return the char set key
+     */
     public boolean keyEqualsCharSet() {
         return charSetKey;
     }
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/ComponentView.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/ComponentView.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -85,6 +85,8 @@
      * This would result from a call to setParent or
      * as a result of being notified that attributes
      * have changed.
+     * @return the component that is associated with
+     * this view
      */
     protected Component createComponent() {
         AttributeSet attr = getElement().getAttributes();
@@ -94,6 +96,7 @@
 
     /**
      * Fetch the component associated with the view.
+     * @return the component associated with the view
      */
     public final Component getComponent() {
         return createdC;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -825,10 +825,8 @@
      * <pre>ChangeListener[] cls = (ChangeListener[])(c.getListeners(ChangeListener.class));</pre>
      *
      * If no such listeners exist, this method returns an empty array.
-     *
-     * @param listenerType the type of listeners requested; this parameter
-     *          should specify an interface that descends from
-     *          <code>java.util.EventListener</code>
+     * @param <T> the listener type
+     * @param listenerType the type of listeners requested
      * @return an array of all objects registered as
      *          <code><em>Foo</em>Listener</code>s on this component,
      *          or an empty array if no such
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultFormatterFactory.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultFormatterFactory.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -97,6 +97,9 @@
     private JFormattedTextField.AbstractFormatter nullFormat;
 
 
+    /**
+     * Constructs a {@code DefaultFormatterFactory}.
+     */
     public DefaultFormatterFactory() {
     }
 
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultHighlighter.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultHighlighter.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -336,11 +336,16 @@
      * (if the offsets are in a highlighted region that is). For this to
      * work the painter supplied must be an instance of
      * LayeredHighlightPainter.
+     * @param newValue the new value
      */
     public void setDrawsLayeredHighlights(boolean newValue) {
         drawsLayeredHighlights = newValue;
     }
 
+    /**
+     * Return the draw layered highlights.
+     * @return the draw layered highlights
+     */
     public boolean getDrawsLayeredHighlights() {
         return drawsLayeredHighlights;
     }
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultStyledDocument.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultStyledDocument.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -122,6 +122,7 @@
      * structure (i.e. the structure reported by the
      * <code>getDefaultRootElement</code> method.  If the
      * document contained any data it will first be removed.
+     * @param data the element data
      */
     protected void create(ElementSpec[] data) {
         try {
@@ -1104,6 +1105,9 @@
      */
     public static final int BUFFER_SIZE_DEFAULT = 4096;
 
+    /**
+     * The element buffer.
+     */
     protected ElementBuffer buffer;
 
     /** Styles listening to. */
@@ -2524,6 +2528,12 @@
      * Element.
      */
     public static class AttributeUndoableEdit extends AbstractUndoableEdit {
+        /**
+         * Constructs an {@code AttributeUndoableEdit}.
+         * @param element the element
+         * @param newAttributes the new attributes
+         * @param isReplacing true if all the attributes in the element were removed first.
+         */
         public AttributeUndoableEdit(Element element, AttributeSet newAttributes,
                               boolean isReplacing) {
             super();
@@ -2561,13 +2571,21 @@
             as.addAttributes(copy);
         }
 
-        // AttributeSet containing additional entries, must be non-mutable!
+        /**
+         * AttributeSet containing additional entries, must be non-mutable!
+         */
         protected AttributeSet newAttributes;
-        // Copy of the AttributeSet the Element contained.
+        /**
+         * Copy of the AttributeSet the Element contained.
+         */
         protected AttributeSet copy;
-        // true if all the attributes in the element were removed first.
+        /**
+         * true if all the attributes in the element were removed first.
+         */
         protected boolean isReplacing;
-        // Efected Element.
+        /**
+         * Affected Element.
+         */
         protected Element element;
     }
 
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/FlowView.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/FlowView.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -70,6 +70,8 @@
      * rows are tiled (the axis of the default flow
      * rows themselves).  This is typically used
      * by the <code>FlowStrategy</code>.
+     * @return the axis along which views should be
+     * flowed
      */
     public int getFlowAxis() {
         if (getAxis() == Y_AXIS) {
@@ -89,6 +91,8 @@
      *
      * @param index the index of the row being updated.
      *   This should be a value &gt;= 0 and &lt; getViewCount().
+     * @return the constraining span to flow against for
+     * the given child index
      * @see #getFlowStart
      */
     public int getFlowSpan(int index) {
@@ -104,6 +108,8 @@
 
      * @param index the index of the row being updated.
      *   This should be a value &gt;= 0 and &lt; getViewCount().
+     * @return the location along the flow axis that the
+     * flow span will start at
      * @see #getFlowSpan
      */
     public int getFlowStart(int index) {
@@ -116,6 +122,8 @@
      * called by the FlowStrategy when new children
      * are added or removed (i.e. rows are added or
      * removed) in the process of updating the flow.
+     * @return a View that should be used to hold a
+     * a rows worth of children in a flow
      */
     protected abstract View createRow();
 
@@ -359,6 +367,7 @@
          * strategy should update the appropriate changed region (which
          * depends upon the strategy used for repair).
          *
+         * @param fv the flow view
          * @param e the change information from the associated document
          * @param alloc the current allocation of the view inside of the insets.
          *   This value will be null if the view has not yet been displayed.
@@ -385,6 +394,7 @@
          * Gives notification that something was removed from the document
          * in a location that the given flow view is responsible for.
          *
+         * @param fv the flow view
          * @param e the change information from the associated document
          * @param alloc the current allocation of the view inside of the insets.
          * @see View#removeUpdate
@@ -426,6 +436,8 @@
         /**
          * This method gives flow strategies access to the logical
          * view of the FlowView.
+         * @param fv the FlowView
+         * @return the logical view of the FlowView
          */
         protected View getLogicalView(FlowView fv) {
             return fv.layoutPool;
@@ -495,6 +507,7 @@
          * the adjustRow method will be called to perform adjustments
          * to the row to try and make it fit into the given span.
          *
+         * @param fv the flow view
          * @param rowIndex the index of the row to fill in with views.  The
          *   row is assumed to be empty on entry.
          * @param pos  The current position in the children of
@@ -578,6 +591,7 @@
          * the row.  If a forced break is encountered, the
          * break will be positioned there.
          *
+         * @param fv the flow view
          * @param rowIndex the row to adjust to the current layout
          *  span.
          * @param desiredSpan the current layout span &gt;= 0
@@ -654,6 +668,8 @@
          * @param startOffset the start location for the view being created
          * @param spanLeft the about of span left to fill in the row
          * @param rowIndex the row the view will be placed into
+         * @return a view that can be used to represent the current piece
+         * of the flow
          */
         protected View createView(FlowView fv, int startOffset, int spanLeft, int rowIndex) {
             // Get the child view that contains the given starting position
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/GapContent.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/GapContent.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -758,6 +758,8 @@
      * to subclasses.
      *
      * @param positions the UndoPosRef instances to reset
+     * @param offset where the string was inserted
+     * @param length length of inserted string
      */
     @SuppressWarnings("rawtypes") // UndoPosRef type cannot be exposed
     protected void updateUndoPositions(Vector positions, int offset,
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/GlyphView.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/GlyphView.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -102,6 +102,7 @@
      * Fetch the currently installed glyph painter.
      * If a painter has not yet been installed, and
      * a default was not yet needed, null is returned.
+     * @return the currently installed glyph painter
      */
     public GlyphPainter getGlyphPainter() {
         return painter;
@@ -109,6 +110,7 @@
 
     /**
      * Sets the painter to use for rendering glyphs.
+     * @param p the painter to use for rendering glyphs
      */
     public void setGlyphPainter(GlyphPainter p) {
         painter = p;
@@ -144,6 +146,7 @@
      * be returned.  This is implemented to call
      * <code>StyledDocument.getBackground</code> if the associated
      * document is a styled document, otherwise it returns null.
+     * @return the background color to use to render the glyphs
      */
     public Color getBackground() {
         Document doc = getDocument();
@@ -165,6 +168,7 @@
      * is not a StyledDocument, the associated components foreground
      * color is used.  If there is no associated component, null
      * is returned.
+     * @return the foreground color to use to render the glyphs
      */
     public Color getForeground() {
         Document doc = getDocument();
@@ -187,6 +191,7 @@
      * is not a StyledDocument, the associated components font
      * is used.  If there is no associated component, null
      * is returned.
+     * @return the font that the glyphs should be based upon
      */
     public Font getFont() {
         Document doc = getDocument();
@@ -204,6 +209,7 @@
     /**
      * Determine if the glyphs should be underlined.  If true,
      * an underline should be drawn through the baseline.
+     * @return if the glyphs should be underlined
      */
     public boolean isUnderline() {
         AttributeSet attr = getAttributes();
@@ -214,6 +220,7 @@
      * Determine if the glyphs should have a strikethrough
      * line.  If true, a line should be drawn through the center
      * of the glyphs.
+     * @return if the glyphs should have a strikethrough line
      */
     public boolean isStrikeThrough() {
         AttributeSet attr = getAttributes();
@@ -222,6 +229,7 @@
 
     /**
      * Determine if the glyphs should be rendered as superscript.
+     * @return if the glyphs should be rendered as superscript
      */
     public boolean isSubscript() {
         AttributeSet attr = getAttributes();
@@ -230,6 +238,7 @@
 
     /**
      * Determine if the glyphs should be rendered as subscript.
+     * @return if the glyphs should be rendered as subscript
      */
     public boolean isSuperscript() {
         AttributeSet attr = getAttributes();
@@ -238,6 +247,7 @@
 
     /**
      * Fetch the TabExpander to use if tabs are present in this view.
+     * @return the TabExpander to use if tabs are present in this view
      */
     public TabExpander getTabExpander() {
         return expander;
@@ -1148,17 +1158,43 @@
         /**
          * Determine the span the glyphs given a start location
          * (for tab expansion).
+         * @param v  the {@code GlyphView}
+         * @param p0 the beginning position
+         * @param p1 the ending position
+         * @param e  how to expand the tabs when encountered
+         * @param x the X coordinate
+         * @return the span the glyphs given a start location
          */
         public abstract float getSpan(GlyphView v, int p0, int p1, TabExpander e, float x);
 
+        /**
+         * Returns of the height.
+         * @param v  the {@code GlyphView}
+         * @return of the height
+         */
         public abstract float getHeight(GlyphView v);
 
+        /**
+         * Returns of the ascent.
+         * @param v  the {@code GlyphView}
+         * @return of the ascent
+         */
         public abstract float getAscent(GlyphView v);
 
+        /**
+         * Returns of the descent.
+         * @param v  the {@code GlyphView}
+         * @return of the descent
+         */
         public abstract float getDescent(GlyphView v);
 
         /**
          * Paint the glyphs representing the given range.
+         * @param v the {@code GlyphView}
+         * @param g the graphics context
+         * @param a the current allocation of the view
+         * @param p0 the beginning position
+         * @param p1 the ending position
          */
         public abstract void paint(GlyphView v, Graphics g, Shape a, int p0, int p1);
 
@@ -1231,6 +1267,7 @@
          * @param v  the <code>GlyphView</code> to provide a painter for
          * @param p0 the starting document offset &gt;= 0
          * @param p1 the ending document offset &gt;= p0
+         * @return a painter to use for the given GlyphView
          */
         public GlyphPainter getPainter(GlyphView v, int p0, int p1) {
             return this;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/Highlighter.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/Highlighter.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -124,6 +124,9 @@
 
     }
 
+    /**
+     * A highlight.
+     */
     public interface Highlight {
 
         /**
@@ -148,5 +151,4 @@
         public HighlightPainter getPainter();
 
     }
-
 };
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -536,6 +536,7 @@
      * Sets the <code>NavigationFilter</code>. <code>NavigationFilter</code>
      * is used by <code>DefaultCaret</code> and the default cursor movement
      * actions as a way to restrict the cursor movement.
+     * @param filter the filter
      *
      * @since 1.4
      */
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/LabelView.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/LabelView.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -161,6 +161,7 @@
 
     /**
      * Fetches the <code>FontMetrics</code> used for this view.
+     * @return the <code>FontMetrics</code> used for this view
      * @deprecated FontMetrics are not used for glyph rendering
      *  when running in the JDK.
      */
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/LayeredHighlighter.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/LayeredHighlighter.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -56,6 +56,15 @@
      * Layered highlight renderer.
      */
     static public abstract class LayerPainter implements Highlighter.HighlightPainter {
+        /**
+         * @return a shape
+         * @param g Graphics used to draw
+         * @param p0 starting offset of view
+         * @param p1 ending offset of view
+         * @param viewBounds Bounds of View
+         * @param editor JTextComponent
+         * @param view View instance being rendered
+         */
         public abstract Shape paintLayer(Graphics g, int p0, int p1,
                                         Shape viewBounds,JTextComponent editor,
                                         View view);
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/LayoutQueue.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/LayoutQueue.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -51,6 +51,7 @@
 
     /**
      * Fetch the default layout queue.
+     * @return the default layout queue
      */
     public static LayoutQueue getDefaultQueue() {
         AppContext ac = AppContext.getAppContext();
@@ -78,6 +79,7 @@
     /**
      * Add a task that is not needed immediately because
      * the results are not believed to be visible.
+     * @param task the task to add to the queue
      */
     public synchronized void addTask(Runnable task) {
         if (worker == null) {
@@ -104,7 +106,8 @@
     }
 
     /**
-     * Used by the worker thread to get a new task to execute
+     * Used by the worker thread to get a new task to execute.
+     * @return a task from the queue
      */
     protected synchronized Runnable waitForWork() {
         while (tasks.size() == 0) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/MaskFormatter.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/MaskFormatter.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -199,7 +199,7 @@
      * Creates a <code>MaskFormatter</code> with the specified mask.
      * A <code>ParseException</code>
      * will be thrown if <code>mask</code> is an invalid mask.
-     *
+     * @param mask the mask
      * @throws ParseException if mask does not contain valid mask characters
      */
     public MaskFormatter(String mask) throws ParseException {
@@ -211,6 +211,7 @@
      * Sets the mask dictating the legal characters.
      * This will throw a <code>ParseException</code> if <code>mask</code> is
      * not valid.
+     * @param mask the mask
      *
      * @throws ParseException if mask does not contain valid mask characters
      */
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/ParagraphView.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/ParagraphView.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -246,6 +246,7 @@
      * <code>rowIndex</code> gives the index of the view that corresponds
      * that should be looked in.
      * @param pos  position into the model
+     * @param b the bias
      * @param a the allocated region to render into
      * @param direction one of the following values:
      * <ul>
@@ -256,6 +257,7 @@
      *  in this method
      * @param rowIndex the index of the view
      * @param x the x coordinate of interest
+     * @throws BadLocationException if a bad location is encountered
      * @return the closest model position to <code>x</code>
      */
     // NOTE: This will not properly work if ParagraphView contains
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/PlainView.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/PlainView.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -520,6 +520,9 @@
      * view.  The longest line is checked to see if it has
      * changed.
      *
+     * @param changes the change information from the associated document
+     * @param a the current allocation of the view
+     * @param f the factory to use to rebuild if the view has children
      * @since 1.4
      */
     protected void updateDamage(DocumentEvent changes, Shape a, ViewFactory f) {
@@ -608,6 +611,7 @@
      * @param a  the region allocated for the view to render into
      * @param line the line number to find the region of.  This must
      *   be a valid line number in the model.
+     * @return the rectangle that represents the given line
      * @since 1.4
      */
     protected Rectangle lineToRect(Shape a, int line) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/StyleContext.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/StyleContext.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -479,9 +479,9 @@
      * behavior of SmallAttributeSet.  This can be reimplemented
      * to return an AttributeSet that provides some sort of
      * attribute conversion.
-     *
      * @param a The set of attributes to be represented in the
      *  the compact form.
+     * @return a compact set of attributes that might be shared
      */
     protected SmallAttributeSet createSmallAttributeSet(AttributeSet a) {
         return new SmallAttributeSet(a);
@@ -498,6 +498,8 @@
      *
      * @param a The set of attributes to be represented in the
      *  the larger form.
+     * @return a large set of attributes that should trade off
+     * space for time
      */
     protected MutableAttributeSet createLargeAttributeSet(AttributeSet a) {
         return new SimpleAttributeSet(a);
@@ -558,6 +560,9 @@
 
     /**
      * Context-specific handling of writing out attributes
+     * @param out the output stream
+     * @param a the attribute set
+     * @exception IOException on any I/O error
      */
     public void writeAttributes(ObjectOutputStream out,
                                   AttributeSet a) throws IOException {
@@ -566,6 +571,13 @@
 
     /**
      * Context-specific handling of reading in attributes
+     * @param in the object stream to read the attribute data from.
+     * @param a  the attribute set to place the attribute
+     *   definitions in.
+     * @exception ClassNotFoundException passed upward if encountered
+     *  when reading the object stream.
+     * @exception IOException passed upward if encountered when
+     *  reading the object stream.
      */
     public void readAttributes(ObjectInputStream in,
                                MutableAttributeSet a) throws ClassNotFoundException, IOException {
@@ -685,6 +697,9 @@
     /**
      * Returns the object previously registered with
      * <code>registerStaticAttributeKey</code>.
+     * @param key the object key
+     * @return Returns the object previously registered with
+     * {@code registerStaticAttributeKey}
      */
     public static Object getStaticAttribute(Object key) {
         if (thawKeyMap == null || key == null) {
@@ -694,9 +709,11 @@
     }
 
     /**
-     * Returns the String that <code>key</code> will be registered with
+     * Returns the String that <code>key</code> will be registered with.
      * @see #getStaticAttribute
      * @see #registerStaticAttributeKey
+     * @param key the object key
+     * @return the String that {@code key} will be registered with
      */
     public static Object getStaticAttributeKey(Object key) {
         return key.getClass().getName() + "." + key.toString();
@@ -772,11 +789,19 @@
      */
     public class SmallAttributeSet implements AttributeSet {
 
+        /**
+         * Constructs a SmallAttributeSet.
+         * @param attributes the attributes
+         */
         public SmallAttributeSet(Object[] attributes) {
             this.attributes = attributes;
             updateResolveParent();
         }
 
+        /**
+         * Constructs a SmallAttributeSet.
+         * @param attrs the attributes
+         */
         public SmallAttributeSet(AttributeSet attrs) {
             int n = attrs.getAttributeCount();
             Object[] tbl = new Object[2 * n];
@@ -818,7 +843,8 @@
         // --- Object methods -------------------------
 
         /**
-         * Returns a string showing the key/value pairs
+         * Returns a string showing the key/value pairs.
+         * @return a string showing the key/value pairs
          */
         public String toString() {
             String s = "{";
@@ -1382,7 +1408,8 @@
         /**
          * Return an array of all the listeners of the given type that
          * were added to this model.
-         *
+         * @param <T> the listener type
+         * @param listenerType the type of listeners requested
          * @return all of the objects receiving <em>listenerType</em> notifications
          *          from this model
          *
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/StyledEditorKit.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/StyledEditorKit.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -288,6 +288,8 @@
      * are in <code>set</code>.<p>
      * This is called anytime the caret moves over a different location.
      *
+     * @param element the element
+     * @param set the attributes
      */
     protected void createInputAttributes(Element element,
                                          MutableAttributeSet set) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/TabSet.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/TabSet.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -58,6 +58,7 @@
     /**
      * Creates and returns an instance of TabSet. The array of Tabs
      * passed in must be sorted in ascending order.
+     * @param tabs the TabStops to initialize the TabSet
      */
     public TabSet(TabStop[] tabs) {
         // PENDING(sky): If this becomes a problem, make it sort.
@@ -73,6 +74,7 @@
 
     /**
      * Returns the number of Tab instances the receiver contains.
+     * @return the number of Tab instances the receiver contains
      */
     public int getTabCount() {
         return (tabs == null) ? 0 : tabs.length;
@@ -82,6 +84,8 @@
      * Returns the TabStop at index <code>index</code>. This will throw an
      * IllegalArgumentException if <code>index</code> is outside the range
      * of tabs.
+     * @param index which TapStop to return
+     * @return the TabStop at index {@code index}
      */
     public TabStop getTab(int index) {
         int          numTabs = getTabCount();
@@ -95,6 +99,8 @@
     /**
      * Returns the Tab instance after <code>location</code>. This will
      * return null if there are no tabs after <code>location</code>.
+     * @param location location to find a Tab after
+     * @return the Tab instance after {@code location}
      */
     public TabStop getTabAfter(float location) {
         int     index = getTabIndexAfter(location);
@@ -103,6 +109,9 @@
     }
 
     /**
+     * Returns the index of the TabStop <code>tab</code>, or -1 if
+     * <code>tab</code> is not contained in the receiver.
+     * @param tab the TabStop to find
      * @return the index of the TabStop <code>tab</code>, or -1 if
      * <code>tab</code> is not contained in the receiver.
      */
@@ -117,6 +126,8 @@
     /**
      * Returns the index of the Tab to be used after <code>location</code>.
      * This will return -1 if there are no tabs after <code>location</code>.
+     * @param location location to find a Tab after
+     * @return the index of the Tab to be used after <code>location</code>
      */
     public int getTabIndexAfter(float location) {
         int     current, min, max;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/TabStop.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/TabStop.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -59,6 +59,7 @@
      * RIGHT_TAB, just includes decimal as additional character to look for.
      */
     public static final int ALIGN_DECIMAL = 4;
+    /** Align bar */
     public static final int ALIGN_BAR     = 5;
 
     /* Bar tabs (whatever they are) are actually a separate kind of tab
@@ -66,11 +67,17 @@
        properties are mutually exclusive, so the reader treats barness
        as being a kind of alignment. */
 
+    /** Lead none */
     public static final int LEAD_NONE      = 0;
+    /** Lead dots */
     public static final int LEAD_DOTS      = 1;
+    /** Lead hyphens */
     public static final int LEAD_HYPHENS   = 2;
+    /** Lead underline */
     public static final int LEAD_UNDERLINE = 3;
+    /** Lead thickline */
     public static final int LEAD_THICKLINE = 4;
+    /** Lead equals */
     public static final int LEAD_EQUALS    = 5;
 
     /** Tab type. */
@@ -82,6 +89,7 @@
     /**
      * Creates a tab at position <code>pos</code> with a default alignment
      * and default leader.
+     * @param pos position of the tab
      */
     public TabStop(float pos) {
         this(pos, ALIGN_LEFT, LEAD_NONE);
@@ -90,6 +98,9 @@
     /**
      * Creates a tab with the specified position <code>pos</code>,
      * alignment <code>align</code> and leader <code>leader</code>.
+     * @param pos position of the tab
+     * @param align alignment of the tab
+     * @param leader leader of the tab
      */
     public TabStop(float pos, int align, int leader) {
         alignment = align;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/Utilities.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/Utilities.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -311,6 +311,23 @@
                                    justificationData);
     }
 
+    /**
+     * Determines the relative offset into the given text that
+     * best represents the given span in the view coordinate
+     * system.
+     *
+     * @param s  the source of the text
+     * @param metrics the font metrics to use for the calculation
+     * @param x0 the starting view location representing the start
+     *   of the given text &gt;= 0.
+     * @param x  the target view location to translate to an
+     *   offset into the text &gt;= 0.
+     * @param e  how to expand the tabs.  If this value is null,
+     *   tabs will be expanded as a space character.
+     * @param startOffset starting offset of the text in the document &gt;= 0
+     * @param round whether or not to round
+     * @return  the offset into the text &gt;= 0
+     */
     public static final int getTabbedTextOffset(Segment s,
                                                 FontMetrics metrics,
                                                 int x0, int x, TabExpander e,
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/View.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/View.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -381,6 +381,7 @@
     /**
      * Removes one of the children at the given position.
      * This is a convenience call to <code>replace</code>.
+     * @param i the position
      * @since 1.3
      */
     public void remove(int i) {
@@ -444,6 +445,7 @@
      * position.
      *
      * @param pos the position &gt;= 0
+     * @param b the bias
      * @return  index of the view representing the given position, or
      *   -1 if no view represents that position
      * @since 1.3
@@ -480,6 +482,7 @@
      * the {@code BadLocationException} will be thrown.
      *
      * @param pos the position to convert
+     * @param b the bias
      * @param a the allocated region in which to render
      * @param direction the direction from the current position that can
      *  be thought of as the arrow keys typically found on a keyboard.
@@ -490,6 +493,7 @@
      * <li>SwingConstants.NORTH
      * <li>SwingConstants.SOUTH
      * </ul>
+     * @param biasRet the returned bias
      * @return the location within the model that best represents the next
      *  location visual position
      * @exception BadLocationException the given position is not a valid
@@ -662,6 +666,7 @@
      * @param x the X coordinate &gt;= 0
      * @param y the Y coordinate &gt;= 0
      * @param a the allocated region in which to render
+     * @param biasReturn the returned bias
      * @return the location within the model that best represents the
      *  given point in the view &gt;= 0.  The <code>biasReturn</code>
      *  argument will be
@@ -864,6 +869,7 @@
      * for the purpose of rendering or layout, and should always
      * access them through the <code>AttributeSet</code> returned
      * by this method.
+     * @return the attributes to use when rendering
      */
     public AttributeSet getAttributes() {
         return elem.getAttributes();
@@ -1026,6 +1032,10 @@
      * Returns the tooltip text at the specified location. The default
      * implementation returns the value from the child View identified by
      * the passed in location.
+     * @param x the x coordinate
+     * @param y the y coordinate
+     * @param allocation current allocation of the View.
+     * @return the tooltip text at the specified location
      *
      * @since 1.4
      * @see JTextComponent#getToolTipText
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/WrappedPlainView.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/WrappedPlainView.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -228,6 +228,9 @@
      * It will either break at word or character boundaries
      * depending upon the break argument given at
      * construction.
+     * @param p0 the starting document location
+     * @param p1 the ending document location to use
+     * @return the break position
      */
     protected int calculateBreakPosition(int p0, int p1) {
         int p;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/ZoneView.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/ZoneView.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -94,6 +94,7 @@
 
     /**
      * Get the current maximum zone size.
+     * @return the current maximum zone size
      */
     public int getMaximumZoneSize() {
         return maxZoneSize;
@@ -117,6 +118,8 @@
     /**
      * Get the current setting of the number of zones
      * allowed to be loaded at the same time.
+     * @return current setting of the number of zones
+     * allowed to be loaded at the same time
      */
     public int getMaxZonesLoaded() {
         return maxZonesLoaded;
@@ -184,6 +187,9 @@
      * child elements of the element this view is responsible for.
      * Therefore, the default implementation is to return
      * true if the view has children.
+     * param zone the child view
+     * @param zone the zone
+     * @return whether or not the zone is in the loaded state.
      */
     protected boolean isZoneLoaded(View zone) {
         return (zone.getViewCount() > 0);
@@ -203,6 +209,8 @@
      * @param p1 the end of the desired zone.  This should
      *  be &gt; getStartOffset() and &lt;= getEndOffset().  This
      *  value should also be &gt; p0.
+     * @return a view to represent a zone for the given range within
+     * the model
      */
     protected View createZone(int p0, int p1) {
         Document doc = getDocument();
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/html/FrameSetView.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/html/FrameSetView.java	Wed Jul 05 20:33:55 2017 +0200
@@ -126,7 +126,7 @@
                 if (children[i].length() > 1) {
                     relativeChildren[i] =
                         Integer.parseInt(children[i].substring(
-                            0, children[i].length()-1));
+                            0, children[i].length()-1).trim());
                     relativeTotals += relativeChildren[i];
                 } else {
                     relativeChildren[i] = 1;
@@ -136,7 +136,11 @@
                 percentChildren[i] = parseDigits(children[i]);
                 percentTotals += percentChildren[i];
             } else {
-                absoluteChildren[i] = Integer.parseInt(children[i]);
+                String value = children[i].toLowerCase();
+                if (value.endsWith("px")) {
+                    value = value.substring(0, value.length()-2).trim();
+                }
+                absoluteChildren[i] = Integer.parseInt(value);
             }
         }
         if (percentTotals > 100) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/html/parser/ContentModel.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/html/parser/ContentModel.java	Wed Jul 05 20:33:55 2017 +0200
@@ -192,10 +192,9 @@
           case '|':
           case '&': {
             Element e = (Element) token;
-            if (valSet == null) {
+            if (valSet == null || valSet.length <= Element.getMaxIndex()) {
                 valSet = new boolean[Element.getMaxIndex() + 1];
                 val = new boolean[valSet.length];
-                // All Element instances are created before this ever executes
             }
             if (valSet[e.index]) {
                 return val[e.index];
--- a/jdk/src/java.desktop/share/classes/sun/awt/AWTAccessor.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/AWTAccessor.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,8 +29,10 @@
 
 import javax.accessibility.AccessibleContext;
 import java.awt.*;
-import java.awt.KeyboardFocusManager;
-import java.awt.DefaultKeyboardFocusManager;
+import java.awt.dnd.DragSourceContext;
+import java.awt.dnd.DropTargetContext;
+import java.awt.dnd.peer.DragSourceContextPeer;
+import java.awt.dnd.peer.DropTargetContextPeer;
 import java.awt.event.InputEvent;
 import java.awt.event.InvocationEvent;
 import java.awt.event.KeyEvent;
@@ -38,6 +40,7 @@
 import java.awt.image.BufferStrategy;
 import java.awt.peer.ComponentPeer;
 
+import java.awt.peer.MenuComponentPeer;
 import java.lang.reflect.InvocationTargetException;
 import java.security.AccessControlContext;
 
@@ -171,7 +174,7 @@
         /**
          * Returns the peer of the component.
          */
-        ComponentPeer getPeer(Component comp);
+        <T extends ComponentPeer> T getPeer(Component comp);
 
         /**
          * Sets the peer of the component to the specified peer.
@@ -481,6 +484,11 @@
         void setAppContext(MenuComponent menuComp, AppContext appContext);
 
         /**
+         * Returns the peer of the menu component.
+         */
+        <T extends MenuComponentPeer> T getPeer(MenuComponent menuComp);
+
+        /**
          * Returns the menu container of the menu component.
          */
         MenuContainer getParent(MenuComponent menuComp);
@@ -781,6 +789,31 @@
     }
 
     /*
+     * An accessor object for the DragSourceContext class
+     */
+    public interface DragSourceContextAccessor {
+        /**
+         * Returns the peer of the DragSourceContext.
+         */
+        DragSourceContextPeer getPeer(DragSourceContext dsc);
+    }
+
+    /*
+     * An accessor object for the DropTargetContext class
+     */
+    public interface DropTargetContextAccessor {
+        /**
+         * Resets the DropTargetContext.
+         */
+        void reset(DropTargetContext dtc);
+        /**
+         * Sets the {@code DropTargetContextPeer}
+         */
+        void setDropTargetContextPeer(DropTargetContext dtc,
+                                      DropTargetContextPeer dtcp);
+    }
+
+    /*
      * Accessor instances are initialized in the static initializers of
      * corresponding AWT classes by using setters defined below.
      */
@@ -811,6 +844,8 @@
     private static InvocationEventAccessor invocationEventAccessor;
     private static SystemColorAccessor systemColorAccessor;
     private static AccessibleContextAccessor accessibleContextAccessor;
+    private static DragSourceContextAccessor dragSourceContextAccessor;
+    private static DropTargetContextAccessor dropTargetContextAccessor;
 
     /*
      * Set an accessor object for the java.awt.Component class.
@@ -1271,4 +1306,39 @@
     public static void setAccessibleContextAccessor(AccessibleContextAccessor accessor) {
         AWTAccessor.accessibleContextAccessor = accessor;
     }
+
+    /*
+     * Get the accessor object for the java.awt.dnd.DragSourceContext class.
+     */
+    public static DragSourceContextAccessor getDragSourceContextAccessor() {
+        if (dragSourceContextAccessor == null) {
+            unsafe.ensureClassInitialized(DragSourceContext.class);
+        }
+        return dragSourceContextAccessor;
+    }
+
+    /*
+     * Set the accessor object for the java.awt.dnd.DragSourceContext class.
+     */
+    public static void setDragSourceContextAccessor(DragSourceContextAccessor accessor) {
+        AWTAccessor.dragSourceContextAccessor = accessor;
+    }
+
+    /*
+     * Get the accessor object for the java.awt.dnd.DropTargetContext class.
+     */
+    public static DropTargetContextAccessor getDropTargetContextAccessor() {
+        if (dropTargetContextAccessor == null) {
+            unsafe.ensureClassInitialized(DropTargetContext.class);
+        }
+        return dropTargetContextAccessor;
+    }
+
+    /*
+     * Set the accessor object for the java.awt.dnd.DropTargetContext class.
+     */
+    public static void setDropTargetContextAccessor(DropTargetContextAccessor accessor) {
+        AWTAccessor.dropTargetContextAccessor = accessor;
+    }
+
 }
--- a/jdk/src/java.desktop/share/classes/sun/awt/AWTAutoShutdown.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/AWTAutoShutdown.java	Wed Jul 05 20:33:55 2017 +0200
@@ -26,7 +26,6 @@
 package sun.awt;
 
 import java.awt.AWTEvent;
-
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.HashSet;
@@ -34,9 +33,9 @@
 import java.util.Map;
 import java.util.Set;
 
+import sun.awt.util.ThreadGroupUtils;
 import sun.misc.InnocuousThread;
 import sun.util.logging.PlatformLogger;
-import sun.awt.util.ThreadGroupUtils;
 
 /**
  * This class is to let AWT shutdown automatically when a user is done
@@ -218,10 +217,7 @@
         synchronized (activationLock) {
             synchronized (mainLock) {
                 if (!isReadyToShutdown() && blockerThread == null) {
-                    AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
-                        activateBlockerThread();
-                        return null;
-                    });
+                    activateBlockerThread();
                 } else {
                     mainLock.notifyAll();
                     timeoutPassed = false;
@@ -337,21 +333,22 @@
     /**
      * Creates and starts a new blocker thread. Doesn't return until
      * the new blocker thread starts.
-     *
-     * Must be called with {@link sun.security.util.SecurityConstants#MODIFY_THREADGROUP_PERMISSION}
      */
     private void activateBlockerThread() {
-        Thread thread;
-        String name =  "AWT-Shutdown";
-        if (System.getSecurityManager() == null) {
-            thread = new Thread(ThreadGroupUtils.getRootThreadGroup(), this, name);
-        } else {
-            thread = new InnocuousThread(this, name);
-        }
-        thread.setContextClassLoader(null);
-        thread.setDaemon(false);
-        blockerThread = thread;
-        thread.start();
+        AccessController.doPrivileged((PrivilegedAction<Thread>) () -> {
+            Thread thread;
+            String name = "AWT-Shutdown";
+            if (System.getSecurityManager() == null) {
+                thread = new Thread(ThreadGroupUtils.getRootThreadGroup(), this,
+                                    name);
+            } else {
+                thread = new InnocuousThread(this, name);
+            }
+            thread.setContextClassLoader(null);
+            thread.setDaemon(false);
+            blockerThread = thread;
+            return thread;
+        }).start();
         try {
             /* Wait for the blocker thread to start. */
             mainLock.wait();
--- a/jdk/src/java.desktop/share/classes/sun/awt/AppContext.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/AppContext.java	Wed Jul 05 20:33:55 2017 +0200
@@ -569,7 +569,7 @@
     static final class PostShutdownEventRunnable implements Runnable {
         private final AppContext appContext;
 
-        public PostShutdownEventRunnable(AppContext ac) {
+        PostShutdownEventRunnable(AppContext ac) {
             appContext = ac;
         }
 
@@ -585,7 +585,7 @@
         private final AppContext appContext;
         private final Runnable runnable;
 
-        public CreateThreadAction(AppContext ac, Runnable r) {
+        CreateThreadAction(AppContext ac, Runnable r) {
             appContext = ac;
             runnable = r;
         }
@@ -597,7 +597,7 @@
             } else {
                 t = new InnocuousThread(appContext.getThreadGroup(), runnable, "AppContext Disposer");
             }
-            t.setContextClassLoader(appContext.getContextClassLoader());
+            t.setContextClassLoader(null);
             t.setPriority(Thread.NORM_PRIORITY + 1);
             t.setDaemon(true);
             return t;
--- a/jdk/src/java.desktop/share/classes/sun/awt/ComponentFactory.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/ComponentFactory.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,76 +25,421 @@
 
 package sun.awt;
 
-import sun.awt.datatransfer.DataTransferer;
-
 import java.awt.*;
-import java.awt.dnd.*;
+import java.awt.dnd.DragGestureEvent;
+import java.awt.dnd.InvalidDnDOperationException;
 import java.awt.dnd.peer.DragSourceContextPeer;
 import java.awt.peer.*;
 
+import sun.awt.datatransfer.DataTransferer;
+
+final class LightweightPeerHolder {
+    static final LightweightPeer lightweightMarker = new NullComponentPeer();
+
+    private LightweightPeerHolder() {
+    }
+}
+
 /**
- * Interface for component creation support in toolkits
+ * Interface for component creation support in toolkits.
  */
 public interface ComponentFactory {
 
-    CanvasPeer createCanvas(Canvas target) throws HeadlessException;
+    /**
+     * Creates a peer for a component or container. This peer is windowless and
+     * allows the Component and Container classes to be extended directly to
+     * create windowless components that are defined entirely in java.
+     *
+     * @param  target The Component to be created
+     * @return the peer for the specified component
+     */
+    default LightweightPeer createComponent(Component target) {
+        return LightweightPeerHolder.lightweightMarker;
+    }
 
-    PanelPeer createPanel(Panel target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of the {@code Desktop} using the
+     * specified peer interface.
+     *
+     * @param  target the desktop to be implemented
+     * @return this toolkit's implementation of the {@code Desktop}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Desktop
+     * @see java.awt.peer.DesktopPeer
+     * @since 1.6
+     */
+    default DesktopPeer createDesktopPeer(Desktop target) {
+        throw new HeadlessException();
+    }
 
-    WindowPeer createWindow(Window target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Button} using the
+     * specified peer interface.
+     *
+     * @param  target the button to be implemented
+     * @return this toolkit's implementation of {@code Button}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Button
+     * @see java.awt.peer.ButtonPeer
+     */
+    default ButtonPeer createButton(Button target) {
+        throw new HeadlessException();
+    }
 
-    FramePeer createFrame(Frame target) throws HeadlessException;
-
-    DialogPeer createDialog(Dialog target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code TextField} using the
+     * specified peer interface.
+     *
+     * @param  target the text field to be implemented
+     * @return this toolkit's implementation of {@code TextField}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.TextField
+     * @see java.awt.peer.TextFieldPeer
+     */
+    default TextFieldPeer createTextField(TextField target) {
+        throw new HeadlessException();
+    }
 
-    ButtonPeer createButton(Button target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Label} using the
+     * specified peer interface.
+     *
+     * @param  target the label to be implemented
+     * @return this toolkit's implementation of {@code Label}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Label
+     * @see java.awt.peer.LabelPeer
+     */
+    default LabelPeer createLabel(Label target) {
+        throw new HeadlessException();
+    }
 
-    TextFieldPeer createTextField(TextField target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code List} using the specified
+     * peer interface.
+     *
+     * @param  target the list to be implemented
+     * @return this toolkit's implementation of {@code List}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.List
+     * @see java.awt.peer.ListPeer
+     */
+    default ListPeer createList(java.awt.List target) {
+        throw new HeadlessException();
+    }
 
-    ChoicePeer createChoice(Choice target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Checkbox} using the
+     * specified peer interface.
+     *
+     * @param  target the check box to be implemented
+     * @return this toolkit's implementation of {@code Checkbox}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Checkbox
+     * @see java.awt.peer.CheckboxPeer
+     */
+    default CheckboxPeer createCheckbox(Checkbox target) {
+        throw new HeadlessException();
+    }
 
-    LabelPeer createLabel(Label target) throws HeadlessException;
-
-    ListPeer createList(List target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Scrollbar} using the
+     * specified peer interface.
+     *
+     * @param  target the scroll bar to be implemented
+     * @return this toolkit's implementation of {@code Scrollbar}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Scrollbar
+     * @see java.awt.peer.ScrollbarPeer
+     */
+    default ScrollbarPeer createScrollbar(Scrollbar target) {
+        throw new HeadlessException();
+    }
 
-    CheckboxPeer createCheckbox(Checkbox target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code ScrollPane} using the
+     * specified peer interface.
+     *
+     * @param  target the scroll pane to be implemented
+     * @return this toolkit's implementation of {@code ScrollPane}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.ScrollPane
+     * @see java.awt.peer.ScrollPanePeer
+     * @since 1.1
+     */
+    default ScrollPanePeer createScrollPane(ScrollPane target) {
+        throw new HeadlessException();
+    }
 
-    ScrollbarPeer createScrollbar(Scrollbar target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code TextArea} using the
+     * specified peer interface.
+     *
+     * @param  target the text area to be implemented
+     * @return this toolkit's implementation of {@code TextArea}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.TextArea
+     * @see java.awt.peer.TextAreaPeer
+     */
+    default TextAreaPeer createTextArea(TextArea target) {
+        throw new HeadlessException();
+    }
 
-    ScrollPanePeer createScrollPane(ScrollPane target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Choice} using the
+     * specified peer interface.
+     *
+     * @param  target the choice to be implemented
+     * @return this toolkit's implementation of {@code Choice}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Choice
+     * @see java.awt.peer.ChoicePeer
+     */
+    default ChoicePeer createChoice(Choice target) {
+        throw new HeadlessException();
+    }
+
+    /**
+     * Creates this toolkit's implementation of {@code Frame} using the
+     * specified peer interface.
+     *
+     * @param  target the frame to be implemented
+     * @return this toolkit's implementation of {@code Frame}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Frame
+     * @see java.awt.peer.FramePeer
+     */
+    default FramePeer createFrame(Frame target) {
+        throw new HeadlessException();
+    }
 
-    TextAreaPeer createTextArea(TextArea target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Canvas} using the
+     * specified peer interface.
+     *
+     * @param  target the canvas to be implemented
+     * @return this toolkit's implementation of {@code Canvas}
+     * @see java.awt.Canvas
+     * @see java.awt.peer.CanvasPeer
+     */
+    default CanvasPeer createCanvas(Canvas target) {
+        return (CanvasPeer) createComponent(target);
+    }
 
-    FileDialogPeer createFileDialog(FileDialog target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Panel} using the
+     * specified peer interface.
+     *
+     * @param  target the panel to be implemented
+     * @return this toolkit's implementation of {@code Panel}
+     * @see java.awt.Panel
+     * @see java.awt.peer.PanelPeer
+     */
+    default PanelPeer createPanel(Panel target) {
+        return (PanelPeer) createComponent(target);
+    }
 
-    MenuBarPeer createMenuBar(MenuBar target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Window} using the
+     * specified peer interface.
+     *
+     * @param  target the window to be implemented
+     * @return this toolkit's implementation of {@code Window}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Window
+     * @see java.awt.peer.WindowPeer
+     */
+    default WindowPeer createWindow(Window target) {
+        throw new HeadlessException();
+    }
 
-    MenuPeer createMenu(Menu target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Dialog} using the
+     * specified peer interface.
+     *
+     * @param  target the dialog to be implemented
+     * @return this toolkit's implementation of {@code Dialog}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Dialog
+     * @see java.awt.peer.DialogPeer
+     */
+    default DialogPeer createDialog(Dialog target) {
+        throw new HeadlessException();
+    }
 
-    PopupMenuPeer createPopupMenu(PopupMenu target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code MenuBar} using the
+     * specified peer interface.
+     *
+     * @param  target the menu bar to be implemented
+     * @return this toolkit's implementation of {@code MenuBar}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.MenuBar
+     * @see java.awt.peer.MenuBarPeer
+     */
+    default MenuBarPeer createMenuBar(MenuBar target) {
+        throw new HeadlessException();
+    }
 
-    MenuItemPeer createMenuItem(MenuItem target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Menu} using the specified
+     * peer interface.
+     *
+     * @param  target the menu to be implemented
+     * @return this toolkit's implementation of {@code Menu}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Menu
+     * @see java.awt.peer.MenuPeer
+     */
+    default MenuPeer createMenu(Menu target) {
+        throw new HeadlessException();
+    }
 
-    CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code PopupMenu} using the
+     * specified peer interface.
+     *
+     * @param  target the popup menu to be implemented
+     * @return this toolkit's implementation of {@code PopupMenu}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.PopupMenu
+     * @see java.awt.peer.PopupMenuPeer
+     * @since 1.1
+     */
+    default PopupMenuPeer createPopupMenu(PopupMenu target) {
+        throw new HeadlessException();
+    }
 
-    DragSourceContextPeer createDragSourceContextPeer(
-        DragGestureEvent dge)
-        throws InvalidDnDOperationException, HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code MenuItem} using the
+     * specified peer interface.
+     *
+     * @param  target the menu item to be implemented
+     * @return this toolkit's implementation of {@code MenuItem}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.MenuItem
+     * @see java.awt.peer.MenuItemPeer
+     */
+    default MenuItemPeer createMenuItem(MenuItem target) {
+        throw new HeadlessException();
+    }
+
+    /**
+     * Creates this toolkit's implementation of {@code FileDialog} using the
+     * specified peer interface.
+     *
+     * @param  target the file dialog to be implemented
+     * @return this toolkit's implementation of {@code FileDialog}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.FileDialog
+     * @see java.awt.peer.FileDialogPeer
+     */
+    default FileDialogPeer createFileDialog(FileDialog target) {
+        throw new HeadlessException();
+    }
 
-    FontPeer getFontPeer(String name, int style);
+    /**
+     * Creates this toolkit's implementation of {@code CheckboxMenuItem} using
+     * the specified peer interface.
+     *
+     * @param  target the checkbox menu item to be implemented
+     * @return this toolkit's implementation of {@code CheckboxMenuItem}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.CheckboxMenuItem
+     * @see java.awt.peer.CheckboxMenuItemPeer
+     */
+    default CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target) {
+        throw new HeadlessException();
+    }
+
+    /**
+     * Creates the peer for a DragSourceContext. Always throws
+     * InvalidDndOperationException if GraphicsEnvironment.isHeadless() returns
+     * true.
+     *
+     * @param  dge the {@code DragGestureEvent}
+     * @return the peer created
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     */
+    default DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) {
+        throw new InvalidDnDOperationException("Headless environment");
+    }
 
-    RobotPeer createRobot(Robot target, GraphicsDevice screen)
-        throws AWTException, HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Font} using the specified
+     * peer interface.
+     *
+     * @param name the font to be implemented
+     * @param style the style of the font, such as {@code PLAIN}, {@code BOLD},
+     *        {@code ITALIC}, or a combination
+     * @return this toolkit's implementation of {@code Font}
+     * @see java.awt.Font
+     * @see java.awt.peer.FontPeer
+     * @see java.awt.GraphicsEnvironment#getAllFonts
+     */
+    default FontPeer getFontPeer(String name, int style) {
+        return null;
+    }
 
-    DataTransferer getDataTransferer();
+    default RobotPeer createRobot(Robot target, GraphicsDevice screen)
+            throws AWTException {
+        throw new HeadlessException();
+    }
+
+    default DataTransferer getDataTransferer() {
+        return null;
+    }
 
+    /**
+     * Obtains this toolkit's implementation of helper class for {@code
+     * MouseInfo} operations.
+     *
+     * @return this toolkit's implementation of helper for {@code MouseInfo}
+     * @throws UnsupportedOperationException if this operation is not
+     *         implemented
+     * @see java.awt.peer.MouseInfoPeer
+     * @see java.awt.MouseInfo
+     * @since 1.5
+     */
+    default MouseInfoPeer getMouseInfoPeer() {
+        throw new UnsupportedOperationException("Not implemented");
+    }
 }
--- a/jdk/src/java.desktop/share/classes/sun/awt/EmbeddedFrame.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/EmbeddedFrame.java	Wed Jul 05 20:33:55 2017 +0200
@@ -27,14 +27,12 @@
 
 import java.awt.*;
 import java.awt.event.*;
-import java.awt.image.*;
 import java.awt.peer.*;
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeEvent;
 import java.util.Set;
 import java.awt.AWTKeyStroke;
 import java.applet.Applet;
-import sun.applet.AppletPanel;
 
 /**
  * A generic container used for embedding Java components, usually applets.
@@ -320,10 +318,9 @@
         return true;
     }
 
-    @SuppressWarnings("deprecation")
     public void addNotify() {
         synchronized (getTreeLock()) {
-            if (getPeer() == null) {
+            if (!isDisplayable()) {
                 setPeer(new NullEmbeddedFramePeer());
             }
             super.addNotify();
@@ -331,10 +328,10 @@
     }
 
     // These three functions consitute RFE 4100710. Do not remove.
-    @SuppressWarnings("deprecation")
     public void setCursorAllowed(boolean isCursorAllowed) {
         this.isCursorAllowed = isCursorAllowed;
-        getPeer().updateCursorImmediately();
+        final FramePeer peer = AWTAccessor.getComponentAccessor().getPeer(this);
+        peer.updateCursorImmediately();
     }
     public boolean isCursorAllowed() {
         return isCursorAllowed;
@@ -345,7 +342,6 @@
             : Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
     }
 
-    @SuppressWarnings("deprecation")
     protected void setPeer(final ComponentPeer p){
         AWTAccessor.getComponentAccessor().setPeer(EmbeddedFrame.this, p);
     };
@@ -458,9 +454,8 @@
      * @see #getBoundsPrivate
      * @since 1.5
      */
-    @SuppressWarnings("deprecation")
     protected void setBoundsPrivate(int x, int y, int width, int height) {
-        final FramePeer peer = (FramePeer)getPeer();
+        final FramePeer peer = AWTAccessor.getComponentAccessor().getPeer(this);
         if (peer != null) {
             peer.setBoundsPrivate(x, y, width, height);
         }
@@ -490,9 +485,8 @@
      * @see #setBoundsPrivate
      * @since 1.6
      */
-    @SuppressWarnings("deprecation")
     protected Rectangle getBoundsPrivate() {
-        final FramePeer peer = (FramePeer)getPeer();
+        final FramePeer peer = AWTAccessor.getComponentAccessor().getPeer(this);
         if (peer != null) {
             return peer.getBoundsPrivate();
         }
--- a/jdk/src/java.desktop/share/classes/sun/awt/FontDescriptor.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/FontDescriptor.java	Wed Jul 05 20:33:55 2017 +0200
@@ -24,10 +24,12 @@
  */
 package sun.awt;
 
+import java.io.ByteArrayInputStream;
+import java.io.InputStreamReader;
+import java.io.IOException;;
 import java.nio.charset.Charset;
 import java.nio.charset.CharsetEncoder;
 import java.nio.charset.StandardCharsets;
-import sun.nio.cs.HistoricallyNamedCharset;
 
 public class FontDescriptor implements Cloneable {
 
@@ -49,11 +51,15 @@
         this.exclusionRanges = exclusionRanges;
         this.useUnicode = false;
         Charset cs = encoder.charset();
-        if (cs instanceof HistoricallyNamedCharset)
-            this.charsetName = ((HistoricallyNamedCharset)cs).historicalName();
-        else
-            this.charsetName = cs.name();
-
+        // The following looks odd but its the only public way to get the
+        // historical name if one exists and the canonical name otherwise.
+        try {
+            ByteArrayInputStream bais = new ByteArrayInputStream(new byte[8]);
+            InputStreamReader isr = new InputStreamReader(bais, cs);
+            this.charsetName = isr.getEncoding();
+            isr.close();
+        } catch (IOException ioe) {
+        }
     }
 
     public String getNativeName() {
--- a/jdk/src/java.desktop/share/classes/sun/awt/HToolkit.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/HToolkit.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,16 +25,18 @@
 
 package sun.awt;
 
-import sun.awt.datatransfer.DataTransferer;
-
 import java.awt.*;
-import java.awt.dnd.*;
-import java.awt.dnd.peer.DragSourceContextPeer;
+import java.awt.datatransfer.Clipboard;
+import java.awt.dnd.DragGestureListener;
+import java.awt.dnd.DragGestureRecognizer;
+import java.awt.dnd.DragSource;
 import java.awt.im.InputMethodHighlight;
 import java.awt.im.spi.InputMethodDescriptor;
-import java.awt.image.*;
-import java.awt.datatransfer.Clipboard;
-import java.awt.peer.*;
+import java.awt.image.ColorModel;
+import java.awt.peer.FramePeer;
+import java.awt.peer.KeyboardFocusManagerPeer;
+import java.awt.peer.SystemTrayPeer;
+import java.awt.peer.TrayIconPeer;
 import java.util.Map;
 import java.util.Properties;
 
@@ -47,10 +49,15 @@
     implements ComponentFactory {
 
     private static final KeyboardFocusManagerPeer kfmPeer = new KeyboardFocusManagerPeer() {
+        @Override
         public void setCurrentFocusedWindow(Window win) {}
+        @Override
         public Window getCurrentFocusedWindow() { return null; }
+        @Override
         public void setCurrentFocusOwner(Component comp) {}
+        @Override
         public Component getCurrentFocusOwner() { return null; }
+        @Override
         public void clearGlobalFocusOwner(Window activeWindow) {}
     };
 
@@ -61,136 +68,35 @@
      * Component peer objects - unsupported.
      */
 
-    public WindowPeer createWindow(Window target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
+    @Override
     public FramePeer createLightweightFrame(LightweightFrame target)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
-    public FramePeer createFrame(Frame target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public DialogPeer createDialog(Dialog target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ButtonPeer createButton(Button target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public TextFieldPeer createTextField(TextField target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ChoicePeer createChoice(Choice target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public LabelPeer createLabel(Label target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ListPeer createList(List target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public CheckboxPeer createCheckbox(Checkbox target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ScrollbarPeer createScrollbar(Scrollbar target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ScrollPanePeer createScrollPane(ScrollPane target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public TextAreaPeer createTextArea(TextArea target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public FileDialogPeer createFileDialog(FileDialog target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public MenuBarPeer createMenuBar(MenuBar target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public MenuPeer createMenu(Menu target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public PopupMenuPeer createPopupMenu(PopupMenu target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public MenuItemPeer createMenuItem(MenuItem target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public DragSourceContextPeer createDragSourceContextPeer(
-        DragGestureEvent dge)
-        throws InvalidDnDOperationException {
-        throw new InvalidDnDOperationException("Headless environment");
-    }
-
-    public RobotPeer createRobot(Robot target, GraphicsDevice screen)
-        throws AWTException, HeadlessException {
-        throw new HeadlessException();
-    }
-
+    @Override
     public KeyboardFocusManagerPeer getKeyboardFocusManagerPeer() {
         // See 6833019.
         return kfmPeer;
     }
 
+    @Override
     public TrayIconPeer createTrayIcon(TrayIcon target)
       throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public SystemTrayPeer createSystemTray(SystemTray target)
       throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public boolean isTraySupported() {
         return false;
     }
 
-    @Override
-    public DataTransferer getDataTransferer() {
-        return null;
-    }
-
     public GlobalCursorManager getGlobalCursorManager()
         throws HeadlessException {
         throw new HeadlessException();
@@ -199,57 +105,68 @@
     /*
      * Headless toolkit - unsupported.
      */
+    @Override
     protected void loadSystemColors(int[] systemColors)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public ColorModel getColorModel()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public int getScreenResolution()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Map<java.awt.font.TextAttribute, ?> mapInputMethodHighlight(
             InputMethodHighlight highlight)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public int getMenuShortcutKeyMask()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public boolean getLockingKeyState(int keyCode)
         throws UnsupportedOperationException {
         throw new HeadlessException();
     }
 
+    @Override
     public void setLockingKeyState(int keyCode, boolean on)
         throws UnsupportedOperationException {
         throw new HeadlessException();
     }
 
+    @Override
     public Cursor createCustomCursor(Image cursor, Point hotSpot, String name)
         throws IndexOutOfBoundsException, HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Dimension getBestCursorSize(int preferredWidth, int preferredHeight)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public int getMaximumCursorColors()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public <T extends DragGestureRecognizer> T
         createDragGestureRecognizer(Class<T> abstractRecognizerClass,
                                     DragSource ds, Component c,
@@ -258,41 +175,49 @@
         return null;
     }
 
+    @Override
     public int getScreenHeight()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public int getScreenWidth()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Dimension getScreenSize()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Insets getScreenInsets(GraphicsConfiguration gc)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public void setDynamicLayout(boolean dynamic)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     protected boolean isDynamicLayoutSet()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public boolean isDynamicLayoutActive()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Clipboard getSystemClipboard()
         throws HeadlessException {
         throw new HeadlessException();
@@ -301,6 +226,7 @@
     /*
      * Printing
      */
+    @Override
     public PrintJob getPrintJob(Frame frame, String jobtitle,
         JobAttributes jobAttributes,
         PageAttributes pageAttributes) {
@@ -312,6 +238,7 @@
                 "PrintJob not supported in a headless environment");
     }
 
+    @Override
     public PrintJob getPrintJob(Frame frame, String doctitle, Properties props)
     {
         if (frame != null) {
@@ -326,65 +253,63 @@
      * Headless toolkit - supported.
      */
 
+    @Override
     public void sync() {
         // Do nothing
     }
 
+    @Override
     protected boolean syncNativeQueue(final long timeout) {
         return false;
     }
 
+    @Override
     public void beep() {
         // Send alert character
         System.out.write(0x07);
     }
 
-
-    /*
-     * Fonts
-     */
-    public FontPeer getFontPeer(String name, int style) {
-        return (FontPeer)null;
-    }
-
     /*
      * Modality
      */
+    @Override
     public boolean isModalityTypeSupported(Dialog.ModalityType modalityType) {
         return false;
     }
 
+    @Override
     public boolean isModalExclusionTypeSupported(Dialog.ModalExclusionType exclusionType) {
         return false;
     }
 
+    @Override
     public boolean isDesktopSupported() {
         return false;
     }
 
-    public DesktopPeer createDesktopPeer(Desktop target)
-    throws HeadlessException{
-        throw new HeadlessException();
-    }
-
     public boolean isWindowOpacityControlSupported() {
         return false;
     }
 
+    @Override
     public boolean isWindowShapingSupported() {
         return false;
     }
 
+    @Override
     public boolean isWindowTranslucencySupported() {
         return false;
     }
 
+    @Override
     public  void grab(Window w) { }
 
+    @Override
     public void ungrab(Window w) { }
 
     protected boolean syncNativeQueue() { return false; }
 
+    @Override
     public InputMethodDescriptor getInputMethodAdapterDescriptor()
         throws AWTException
     {
--- a/jdk/src/java.desktop/share/classes/sun/awt/HeadlessToolkit.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/HeadlessToolkit.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,34 +25,43 @@
 
 package sun.awt;
 
-import sun.awt.datatransfer.DataTransferer;
-
 import java.awt.*;
-import java.awt.dnd.*;
-import java.awt.dnd.peer.DragSourceContextPeer;
-import java.awt.event.*;
+import java.awt.datatransfer.Clipboard;
+import java.awt.dnd.DragGestureListener;
+import java.awt.dnd.DragGestureRecognizer;
+import java.awt.dnd.DragSource;
+import java.awt.event.AWTEventListener;
 import java.awt.font.TextAttribute;
 import java.awt.im.InputMethodHighlight;
-import java.awt.image.*;
-import java.awt.datatransfer.Clipboard;
-import java.awt.peer.*;
+import java.awt.image.ColorModel;
+import java.awt.image.ImageObserver;
+import java.awt.image.ImageProducer;
+import java.awt.peer.FontPeer;
+import java.awt.peer.KeyboardFocusManagerPeer;
+import java.awt.peer.SystemTrayPeer;
+import java.awt.peer.TrayIconPeer;
 import java.beans.PropertyChangeListener;
 import java.net.URL;
 import java.util.Map;
 import java.util.Properties;
 
-public class HeadlessToolkit extends Toolkit
+public final class HeadlessToolkit extends Toolkit
     implements ComponentFactory, KeyboardFocusManagerPeerProvider {
 
     private static final KeyboardFocusManagerPeer kfmPeer = new KeyboardFocusManagerPeer() {
+        @Override
         public void setCurrentFocusedWindow(Window win) {}
+        @Override
         public Window getCurrentFocusedWindow() { return null; }
+        @Override
         public void setCurrentFocusOwner(Component comp) {}
+        @Override
         public Component getCurrentFocusOwner() { return null; }
+        @Override
         public void clearGlobalFocusOwner(Window activeWindow) {}
     };
 
-    private Toolkit tk;
+    private final Toolkit tk;
     private ComponentFactory componentFactory;
 
     public HeadlessToolkit(Toolkit tk) {
@@ -66,125 +75,7 @@
         return tk;
     }
 
-    /*
-     * Component peer objects.
-     */
-
-    /* Lightweight implementation of Canvas and Panel */
-
-    public CanvasPeer createCanvas(Canvas target) {
-        return (CanvasPeer)createComponent(target);
-    }
-
-    public PanelPeer createPanel(Panel target) {
-        return (PanelPeer)createComponent(target);
-    }
-
-    /*
-     * Component peer objects - unsupported.
-     */
-
-    public WindowPeer createWindow(Window target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public FramePeer createFrame(Frame target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public DialogPeer createDialog(Dialog target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ButtonPeer createButton(Button target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public TextFieldPeer createTextField(TextField target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ChoicePeer createChoice(Choice target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public LabelPeer createLabel(Label target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ListPeer createList(List target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public CheckboxPeer createCheckbox(Checkbox target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ScrollbarPeer createScrollbar(Scrollbar target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ScrollPanePeer createScrollPane(ScrollPane target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public TextAreaPeer createTextArea(TextArea target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public FileDialogPeer createFileDialog(FileDialog target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public MenuBarPeer createMenuBar(MenuBar target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public MenuPeer createMenu(Menu target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public PopupMenuPeer createPopupMenu(PopupMenu target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public MenuItemPeer createMenuItem(MenuItem target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public DragSourceContextPeer createDragSourceContextPeer(
-        DragGestureEvent dge)
-        throws InvalidDnDOperationException {
-        throw new InvalidDnDOperationException("Headless environment");
-    }
-
-    public RobotPeer createRobot(Robot target, GraphicsDevice screen)
-        throws AWTException, HeadlessException {
-        throw new HeadlessException();
-    }
-
+    @Override
     public KeyboardFocusManagerPeer getKeyboardFocusManagerPeer() {
         // See 6833019.
         return kfmPeer;
@@ -212,56 +103,67 @@
     /*
      * Headless toolkit - unsupported.
      */
+    @Override
     protected void loadSystemColors(int[] systemColors)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public ColorModel getColorModel()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public int getScreenResolution()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Map<TextAttribute, ?> mapInputMethodHighlight(InputMethodHighlight highlight)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public int getMenuShortcutKeyMask()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public boolean getLockingKeyState(int keyCode)
         throws UnsupportedOperationException {
         throw new HeadlessException();
     }
 
+    @Override
     public void setLockingKeyState(int keyCode, boolean on)
         throws UnsupportedOperationException {
         throw new HeadlessException();
     }
 
+    @Override
     public Cursor createCustomCursor(Image cursor, Point hotSpot, String name)
         throws IndexOutOfBoundsException, HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Dimension getBestCursorSize(int preferredWidth, int preferredHeight)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public int getMaximumCursorColors()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public <T extends DragGestureRecognizer> T
         createDragGestureRecognizer(Class<T> abstractRecognizerClass,
                                     DragSource ds, Component c,
@@ -280,31 +182,37 @@
         throw new HeadlessException();
     }
 
+    @Override
     public Dimension getScreenSize()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Insets getScreenInsets(GraphicsConfiguration gc)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public void setDynamicLayout(boolean dynamic)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     protected boolean isDynamicLayoutSet()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public boolean isDynamicLayoutActive()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Clipboard getSystemClipboard()
         throws HeadlessException {
         throw new HeadlessException();
@@ -313,6 +221,7 @@
     /*
      * Printing
      */
+    @Override
     public PrintJob getPrintJob(Frame frame, String jobtitle,
         JobAttributes jobAttributes,
         PageAttributes pageAttributes) {
@@ -323,6 +232,7 @@
         throw new NullPointerException("frame must not be null");
     }
 
+    @Override
     public PrintJob getPrintJob(Frame frame, String doctitle, Properties props)
     {
         if (frame != null) {
@@ -336,10 +246,12 @@
      * Headless toolkit - supported.
      */
 
+    @Override
     public void sync() {
         // Do nothing
     }
 
+    @Override
     public void beep() {
         // Send alert character
         System.out.write(0x07);
@@ -348,6 +260,7 @@
     /*
      * Event Queue
      */
+    @Override
     public EventQueue getSystemEventQueueImpl() {
         return SunToolkit.getSystemEventQueueImplPP();
     }
@@ -355,39 +268,48 @@
     /*
      * Images.
      */
+    @Override
     public int checkImage(Image img, int w, int h, ImageObserver o) {
         return tk.checkImage(img, w, h, o);
     }
 
+    @Override
     public boolean prepareImage(
         Image img, int w, int h, ImageObserver o) {
         return tk.prepareImage(img, w, h, o);
     }
 
+    @Override
     public Image getImage(String filename) {
         return tk.getImage(filename);
     }
 
+    @Override
     public Image getImage(URL url) {
         return tk.getImage(url);
     }
 
+    @Override
     public Image createImage(String filename) {
         return tk.createImage(filename);
     }
 
+    @Override
     public Image createImage(URL url) {
         return tk.createImage(url);
     }
 
+    @Override
     public Image createImage(byte[] data, int offset, int length) {
         return tk.createImage(data, offset, length);
     }
 
+    @Override
     public Image createImage(ImageProducer producer) {
         return tk.createImage(producer);
     }
 
+    @Override
     public Image createImage(byte[] imagedata) {
         return tk.createImage(imagedata);
     }
@@ -396,7 +318,7 @@
     /*
      * Fonts
      */
-    @SuppressWarnings("deprecation")
+    @Override
     public FontPeer getFontPeer(String name, int style) {
         if (componentFactory != null) {
             return componentFactory.getFontPeer(name, style);
@@ -405,15 +327,12 @@
     }
 
     @Override
-    public DataTransferer getDataTransferer() {
-        return null;
-    }
-
     @SuppressWarnings("deprecation")
     public FontMetrics getFontMetrics(Font font) {
         return tk.getFontMetrics(font);
     }
 
+    @Override
     @SuppressWarnings("deprecation")
     public String[] getFontList() {
         return tk.getFontList();
@@ -423,11 +342,13 @@
      * Desktop properties
      */
 
+    @Override
     public void addPropertyChangeListener(String name,
         PropertyChangeListener pcl) {
         tk.addPropertyChangeListener(name, pcl);
     }
 
+    @Override
     public void removePropertyChangeListener(String name,
         PropertyChangeListener pcl) {
         tk.removePropertyChangeListener(name, pcl);
@@ -436,10 +357,12 @@
     /*
      * Modality
      */
+    @Override
     public boolean isModalityTypeSupported(Dialog.ModalityType modalityType) {
         return false;
     }
 
+    @Override
     public boolean isModalExclusionTypeSupported(Dialog.ModalExclusionType exclusionType) {
         return false;
     }
@@ -447,6 +370,7 @@
     /*
      * Always on top
      */
+    @Override
     public boolean isAlwaysOnTopSupported() {
         return false;
     }
@@ -455,19 +379,23 @@
      * AWT Event listeners
      */
 
+    @Override
     public void addAWTEventListener(AWTEventListener listener,
         long eventMask) {
         tk.addAWTEventListener(listener, eventMask);
     }
 
+    @Override
     public void removeAWTEventListener(AWTEventListener listener) {
         tk.removeAWTEventListener(listener);
     }
 
+    @Override
     public AWTEventListener[] getAWTEventListeners() {
         return tk.getAWTEventListeners();
     }
 
+    @Override
     public AWTEventListener[] getAWTEventListeners(long eventMask) {
         return tk.getAWTEventListeners(eventMask);
     }
@@ -476,11 +404,7 @@
         return false;
     }
 
-    public DesktopPeer createDesktopPeer(Desktop target)
-    throws HeadlessException{
-        throw new HeadlessException();
-    }
-
+    @Override
     public boolean areExtraMouseButtonsEnabled() throws HeadlessException{
         throw new HeadlessException();
     }
--- a/jdk/src/java.desktop/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,7 +25,6 @@
 package sun.awt;
 
 import java.awt.Component;
-import java.awt.KeyboardFocusManager;
 import java.awt.Window;
 import java.awt.Canvas;
 import java.awt.Scrollbar;
@@ -36,9 +35,7 @@
 import java.awt.peer.KeyboardFocusManagerPeer;
 import java.awt.peer.ComponentPeer;
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.util.logging.PlatformLogger;
 
 public abstract class KeyboardFocusManagerPeerImpl implements KeyboardFocusManagerPeer {
@@ -75,7 +72,6 @@
      * 1) accepts focus on click (in general)
      * 2) may be a focus owner (in particular)
      */
-    @SuppressWarnings("deprecation")
     public static boolean shouldFocusOnClick(Component component) {
         boolean acceptFocusOnClick = false;
 
@@ -84,6 +80,7 @@
 
 
         // CANVAS & SCROLLBAR accept focus on click
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
         if (component instanceof Canvas ||
             component instanceof Scrollbar)
         {
@@ -96,11 +93,10 @@
 
         // Other components
         } else {
-            ComponentPeer peer = (component != null ? component.getPeer() : null);
+            ComponentPeer peer = (component != null ? acc.getPeer(component) : null);
             acceptFocusOnClick = (peer != null ? peer.isFocusable() : false);
         }
-        return acceptFocusOnClick &&
-               AWTAccessor.getComponentAccessor().canBeFocusOwner(component);
+        return acceptFocusOnClick && acc.canBeFocusOwner(component);
     }
 
     /*
@@ -120,7 +116,7 @@
         }
 
         Component currentOwner = currentFocusOwner;
-        if (currentOwner != null && currentOwner.getPeer() == null) {
+        if (currentOwner != null && !currentOwner.isDisplayable()) {
             currentOwner = null;
         }
         if (currentOwner != null) {
--- a/jdk/src/java.desktop/share/classes/sun/awt/LightweightFrame.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/LightweightFrame.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -91,7 +91,7 @@
     @SuppressWarnings("deprecation")
     @Override public void addNotify() {
         synchronized (getTreeLock()) {
-            if (getPeer() == null) {
+            if (!isDisplayable()) {
                 SunToolkit stk = (SunToolkit)Toolkit.getDefaultToolkit();
                 try {
                     setPeer(stk.createLightweightFrame(this));
@@ -115,9 +115,9 @@
      * @param activate if <code>true</code>, activates the frame;
      *                 otherwise, deactivates the frame
      */
-    @SuppressWarnings("deprecation")
     public void emulateActivation(boolean activate) {
-        ((FramePeer)getPeer()).emulateActivation(activate);
+        final FramePeer peer = AWTAccessor.getComponentAccessor().getPeer(this);
+        peer.emulateActivation(activate);
     }
 
     /**
--- a/jdk/src/java.desktop/share/classes/sun/awt/SunGraphicsCallback.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/SunGraphicsCallback.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,11 +47,10 @@
         g.clipRect(0, 0, bounds.width, bounds.height);
     }
 
-    @SuppressWarnings("deprecation")
     public final void runOneComponent(Component comp, Rectangle bounds,
                                       Graphics g, Shape clip,
                                       int weightFlags) {
-        if (comp == null || comp.getPeer() == null || !comp.isVisible()) {
+        if (comp == null || !comp.isDisplayable() || !comp.isVisible()) {
             return;
         }
         boolean lightweight = comp.isLightweight();
--- a/jdk/src/java.desktop/share/classes/sun/awt/SunToolkit.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/SunToolkit.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,37 +26,51 @@
 package sun.awt;
 
 import java.awt.*;
-import static java.awt.RenderingHints.*;
-import java.awt.dnd.*;
-import java.awt.dnd.peer.DragSourceContextPeer;
-import java.awt.peer.*;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
 import java.awt.event.WindowEvent;
-import java.awt.event.KeyEvent;
-import java.awt.image.*;
-import java.awt.TrayIcon;
-import java.awt.SystemTray;
-import java.awt.event.InputEvent;
+import java.awt.image.BufferedImage;
+import java.awt.image.DataBuffer;
+import java.awt.image.DataBufferInt;
+import java.awt.image.ImageObserver;
+import java.awt.image.ImageProducer;
+import java.awt.image.Raster;
+import java.awt.peer.FramePeer;
+import java.awt.peer.KeyboardFocusManagerPeer;
+import java.awt.peer.MouseInfoPeer;
+import java.awt.peer.SystemTrayPeer;
+import java.awt.peer.TrayIconPeer;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
 import java.net.URL;
-import java.security.PrivilegedAction;
-import java.util.*;
+import java.security.AccessController;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Vector;
+import java.util.WeakHashMap;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
-import sun.awt.datatransfer.DataTransferer;
-import sun.util.logging.PlatformLogger;
-import sun.misc.SoftCache;
+import sun.awt.im.InputContext;
+import sun.awt.image.ByteArrayImageSource;
+import sun.awt.image.FileImageSource;
+import sun.awt.image.ImageRepresentation;
+import sun.awt.image.MultiResolutionImage;
+import sun.awt.image.MultiResolutionToolkitImage;
+import sun.awt.image.ToolkitImage;
+import sun.awt.image.URLImageSource;
 import sun.font.FontDesignMetrics;
-import sun.awt.im.InputContext;
-import sun.awt.image.*;
+import sun.misc.SoftCache;
+import sun.security.action.GetBooleanAction;
 import sun.security.action.GetPropertyAction;
-import sun.security.action.GetBooleanAction;
-import java.lang.reflect.InvocationTargetException;
-import java.security.AccessController;
+import sun.util.logging.PlatformLogger;
+
+import static java.awt.RenderingHints.*;
 
 public abstract class SunToolkit extends Toolkit
     implements ComponentFactory, InputMethodSupport, KeyboardFocusManagerPeerProvider {
@@ -134,68 +148,9 @@
         return false;
     }
 
-    public abstract WindowPeer createWindow(Window target)
-        throws HeadlessException;
-
-    public abstract FramePeer createFrame(Frame target)
-        throws HeadlessException;
-
     public abstract FramePeer createLightweightFrame(LightweightFrame target)
         throws HeadlessException;
 
-    public abstract DialogPeer createDialog(Dialog target)
-        throws HeadlessException;
-
-    public abstract ButtonPeer createButton(Button target)
-        throws HeadlessException;
-
-    public abstract TextFieldPeer createTextField(TextField target)
-        throws HeadlessException;
-
-    public abstract ChoicePeer createChoice(Choice target)
-        throws HeadlessException;
-
-    public abstract LabelPeer createLabel(Label target)
-        throws HeadlessException;
-
-    public abstract ListPeer createList(java.awt.List target)
-        throws HeadlessException;
-
-    public abstract CheckboxPeer createCheckbox(Checkbox target)
-        throws HeadlessException;
-
-    public abstract ScrollbarPeer createScrollbar(Scrollbar target)
-        throws HeadlessException;
-
-    public abstract ScrollPanePeer createScrollPane(ScrollPane target)
-        throws HeadlessException;
-
-    public abstract TextAreaPeer createTextArea(TextArea target)
-        throws HeadlessException;
-
-    public abstract FileDialogPeer createFileDialog(FileDialog target)
-        throws HeadlessException;
-
-    public abstract MenuBarPeer createMenuBar(MenuBar target)
-        throws HeadlessException;
-
-    public abstract MenuPeer createMenu(Menu target)
-        throws HeadlessException;
-
-    public abstract PopupMenuPeer createPopupMenu(PopupMenu target)
-        throws HeadlessException;
-
-    public abstract MenuItemPeer createMenuItem(MenuItem target)
-        throws HeadlessException;
-
-    public abstract CheckboxMenuItemPeer createCheckboxMenuItem(
-        CheckboxMenuItem target)
-        throws HeadlessException;
-
-    public abstract DragSourceContextPeer createDragSourceContextPeer(
-        DragGestureEvent dge)
-        throws InvalidDnDOperationException;
-
     public abstract TrayIconPeer createTrayIcon(TrayIcon target)
         throws HeadlessException, AWTException;
 
@@ -203,12 +158,7 @@
 
     public abstract boolean isTraySupported();
 
-    @SuppressWarnings("deprecation")
-    public abstract FontPeer getFontPeer(String name, int style);
-
-    public abstract RobotPeer createRobot(Robot target, GraphicsDevice screen)
-        throws AWTException;
-
+    @Override
     public abstract KeyboardFocusManagerPeer getKeyboardFocusManagerPeer()
         throws HeadlessException;
 
@@ -511,6 +461,7 @@
      */
     public static void postPriorityEvent(final AWTEvent e) {
         PeerEvent pe = new PeerEvent(Toolkit.getDefaultToolkit(), new Runnable() {
+                @Override
                 public void run() {
                     AWTAccessor.getAWTEventAccessor().setPosted(e);
                     ((Component)e.getSource()).dispatchEvent(e);
@@ -561,6 +512,7 @@
                                                    final long when) {
         executeOnEventHandlerThread(
             new PeerEvent(target, runnable, PeerEvent.PRIORITY_EVENT) {
+                @Override
                 public long getWhen() {
                     return when;
                 }
@@ -636,17 +588,20 @@
         return accessor.isDispatchThreadImpl(eq);
     }
 
+    @Override
     public Dimension getScreenSize() {
         return new Dimension(getScreenWidth(), getScreenHeight());
     }
     protected abstract int getScreenWidth();
     protected abstract int getScreenHeight();
 
+    @Override
     @SuppressWarnings("deprecation")
     public FontMetrics getFontMetrics(Font font) {
         return FontDesignMetrics.getMetrics(font);
     }
 
+    @Override
     @SuppressWarnings("deprecation")
     public String[] getFontList() {
         String[] hardwiredFontList = {
@@ -660,14 +615,6 @@
         return hardwiredFontList;
     }
 
-    public PanelPeer createPanel(Panel target) {
-        return (PanelPeer)createComponent(target);
-    }
-
-    public CanvasPeer createCanvas(Canvas target) {
-        return (CanvasPeer)createComponent(target);
-    }
-
     /**
      * Disables erasing of background on the canvas before painting if
      * this is supported by the current toolkit. It is recommended to
@@ -747,10 +694,12 @@
         }
     }
 
+    @Override
     public Image getImage(String filename) {
         return getImageFromHash(this, filename);
     }
 
+    @Override
     public Image getImage(URL url) {
         return getImageFromHash(this, url);
     }
@@ -784,20 +733,24 @@
     }
 
 
+    @Override
     public Image createImage(String filename) {
         checkPermissions(filename);
         return createImage(new FileImageSource(filename));
     }
 
+    @Override
     public Image createImage(URL url) {
         checkPermissions(url);
         return createImage(new URLImageSource(url));
     }
 
+    @Override
     public Image createImage(byte[] data, int offset, int length) {
         return createImage(new ByteArrayImageSource(data, offset, length));
     }
 
+    @Override
     public Image createImage(ImageProducer producer) {
         return new ToolkitImage(producer);
     }
@@ -807,6 +760,7 @@
         return new MultiResolutionToolkitImage(image, resolutionVariant);
     }
 
+    @Override
     public int checkImage(Image img, int w, int h, ImageObserver o) {
         if (!(img instanceof ToolkitImage)) {
             return ImageObserver.ALLBITS;
@@ -822,6 +776,7 @@
         return (tkimg.check(o) | repbits) & checkResolutionVariant(img, w, h, o);
     }
 
+    @Override
     public boolean prepareImage(Image img, int w, int h, ImageObserver o) {
         if (w == 0 || h == 0) {
             return true;
@@ -888,14 +843,17 @@
     }
 
     protected static boolean imageExists(String filename) {
-        checkPermissions(filename);
-        return filename != null && new File(filename).exists();
+        if (filename != null) {
+            checkPermissions(filename);
+            return new File(filename).exists();
+        }
+        return false;
     }
 
     @SuppressWarnings("try")
     protected static boolean imageExists(URL url) {
-        checkPermissions(url);
         if (url != null) {
+            checkPermissions(url);
             try (InputStream is = url.openStream()) {
                 return true;
             }catch(IOException e){
@@ -1063,6 +1021,7 @@
         return (DataBufferInt)buffer;
     }
 
+    @Override
     protected EventQueue getSystemEventQueueImpl() {
         return getSystemEventQueueImplPP();
     }
@@ -1144,6 +1103,7 @@
      * SunToolkit subclasses can override this method to return better input
      * method windows.
      */
+    @Override
     public Window createInputMethodWindow(String title, InputContext context) {
         return new sun.awt.im.SimpleInputMethodWindow(title, context);
     }
@@ -1152,6 +1112,7 @@
      * Returns whether enableInputMethods should be set to true for peered
      * TextComponent instances on this platform. False by default.
      */
+    @Override
     public boolean enableInputMethodsForTextComponent() {
         return false;
     }
@@ -1193,13 +1154,15 @@
     /**
      * Returns the default keyboard locale of the underlying operating system
      */
+    @Override
     public Locale getDefaultKeyboardLocale() {
         return getStartupLocale();
     }
 
     private static DefaultMouseInfoPeer mPeer = null;
 
-    protected synchronized MouseInfoPeer getMouseInfoPeer() {
+    @Override
+    public synchronized MouseInfoPeer getMouseInfoPeer() {
         if (mPeer == null) {
             mPeer = new DefaultMouseInfoPeer();
         }
@@ -1331,6 +1294,7 @@
     /**
      * Overridden in XToolkit and WToolkit
      */
+    @Override
     public boolean isModalityTypeSupported(Dialog.ModalityType modalityType) {
         return (modalityType == Dialog.ModalityType.MODELESS) ||
                (modalityType == Dialog.ModalityType.APPLICATION_MODAL);
@@ -1339,6 +1303,7 @@
     /**
      * Overridden in XToolkit and WToolkit
      */
+    @Override
     public boolean isModalExclusionTypeSupported(Dialog.ModalExclusionType exclusionType) {
         return (exclusionType == Dialog.ModalExclusionType.NO_EXCLUDE);
     }
@@ -1386,6 +1351,7 @@
             listeners.removeElement(listener);
         }
 
+        @Override
         public void modalityPushed(ModalityEvent ev) {
             Iterator<ModalityListener> it = listeners.iterator();
             while (it.hasNext()) {
@@ -1393,6 +1359,7 @@
             }
         }
 
+        @Override
         public void modalityPopped(ModalityEvent ev) {
             Iterator<ModalityListener> it = listeners.iterator();
             while (it.hasNext()) {
@@ -1592,6 +1559,7 @@
         synchronized(waitLock) {
             postEvent(AppContext.getAppContext(),
                       new PeerEvent(getSystemEventQueueImpl(), null, PeerEvent.LOW_PRIORITY_EVENT) {
+                          @Override
                           public void dispatch() {
                               // Here we block EDT.  It could have some
                               // events, it should have dispatched them by
--- a/jdk/src/java.desktop/share/classes/sun/awt/datatransfer/SunClipboard.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/datatransfer/SunClipboard.java	Wed Jul 05 20:33:55 2017 +0200
@@ -414,7 +414,7 @@
      * @param formats data formats that have just been retrieved from
      *        this clipboard
      */
-    public final void checkChange(final long[] formats) {
+    protected final void checkChange(final long[] formats) {
         if (Arrays.equals(formats, currentFormats)) {
             // we've been able to successfully get available on the clipboard
             // DataFlavors this and previous time and they are coincident;
--- a/jdk/src/java.desktop/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -48,6 +48,8 @@
 import java.util.Map;
 import java.util.Arrays;
 
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.DropTargetContextAccessor;
 import sun.util.logging.PlatformLogger;
 
 import java.io.IOException;
@@ -313,9 +315,10 @@
         Point      hots = event.getPoint();
 
         local = getJVMLocalSourceTransferable();
-
+        DropTargetContextAccessor acc =
+                AWTAccessor.getDropTargetContextAccessor();
         if (currentDTC != null) { // some wreckage from last time
-            currentDTC.removeNotify();
+            acc.reset(currentDTC);
             currentDTC = null;
         }
 
@@ -323,7 +326,7 @@
             currentDT  = dt;
             currentDTC = currentDT.getDropTargetContext();
 
-            currentDTC.addNotify(this);
+            acc.setDropTargetContextPeer(currentDTC, this);
 
             currentA   = dt.getDefaultActions();
 
@@ -370,13 +373,15 @@
         Component         c   = (Component)event.getSource();
         DropTarget        dt  = c.getDropTarget();
         DropTargetContext dtc = null;
+        DropTargetContextAccessor acc =
+                AWTAccessor.getDropTargetContextAccessor();
 
         if (dt == null) {
             currentDT = null;
             currentT  = null;
 
             if (currentDTC != null) {
-                currentDTC.removeNotify();
+                acc.reset(currentDTC);
             }
 
             currentDTC = null;
@@ -387,13 +392,13 @@
         if (dt != currentDT) {
 
             if (currentDTC != null) {
-                currentDTC.removeNotify();
+                acc.reset(currentDTC);
             }
 
             currentDT  = dt;
             currentDTC = dt.getDropTargetContext();
 
-            currentDTC.addNotify(this);
+            acc.setDropTargetContextPeer(currentDTC, this);
         }
 
         dtc = currentDTC;
@@ -409,7 +414,7 @@
             currentDT = null;
             currentT  = null;
 
-            currentDTC.removeNotify();
+            acc.reset(currentDTC);
             currentDTC = null;
 
             local = null;
@@ -440,11 +445,13 @@
         int               id   = event.getID();
         DropTarget        dt   = c.getDropTarget();
         DropTargetContext dtc  = null;
+        DropTargetContextAccessor acc =
+                AWTAccessor.getDropTargetContextAccessor();
 
         if (c.isShowing() && (dt != null) && dt.isActive()) {
             if (currentDT != dt) {
                 if (currentDTC != null) {
-                    currentDTC.removeNotify();
+                    acc.reset(currentDTC);
                 }
 
                 currentDT  = dt;
@@ -454,11 +461,11 @@
             dtc = currentDT.getDropTargetContext();
             if (dtc != currentDTC) {
                 if (currentDTC != null) {
-                    currentDTC.removeNotify();
+                    acc.reset(currentDTC);
                 }
 
                 currentDTC = dtc;
-                currentDTC.addNotify(this);
+                acc.setDropTargetContextPeer(currentDTC, this);
             }
 
             currentA = currentDT.getDefaultActions();
@@ -518,13 +525,15 @@
             DropTargetContext dtc = dt.getDropTargetContext();
 
             currentDT = dt;
+            DropTargetContextAccessor acc =
+                    AWTAccessor.getDropTargetContextAccessor();
 
             if (currentDTC != null) {
-                currentDTC.removeNotify();
+                acc.reset(currentDTC);
             }
 
             currentDTC = dtc;
-            currentDTC.addNotify(this);
+            acc.setDropTargetContextPeer(currentDTC, this);
             currentA = dt.getDefaultActions();
 
             synchronized(_globalLock) {
@@ -687,7 +696,9 @@
             throw new InvalidDnDOperationException("No Drop pending");
         }
 
-        if (currentDTC != null) currentDTC.removeNotify();
+        if (currentDTC != null) {
+            AWTAccessor.getDropTargetContextAccessor().reset(currentDTC);
+        }
 
         currentDT  = null;
         currentDTC = null;
--- a/jdk/src/java.desktop/share/classes/sun/font/FontAccess.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/font/FontAccess.java	Wed Jul 05 20:33:55 2017 +0200
@@ -26,6 +26,7 @@
 package sun.font;
 
 import java.awt.Font;
+import java.awt.peer.FontPeer;
 
 public abstract class FontAccess {
 
@@ -45,4 +46,5 @@
     public abstract void setFont2D(Font f, Font2DHandle h);
     public abstract void setCreatedFont(Font f);
     public abstract boolean isCreatedFont(Font f);
+    public abstract FontPeer getFontPeer(Font f);
 }
--- a/jdk/src/java.desktop/share/classes/sun/font/FontFamily.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/font/FontFamily.java	Wed Jul 05 20:33:55 2017 +0200
@@ -223,9 +223,15 @@
     public void setFont(Font2D font, int style) {
 
         if (FontUtilities.isLogging()) {
-            FontUtilities.getLogger().info(
-            "Request to add " + font + " with style " + style +
-            " to family " + this);
+            String msg;
+            if (font instanceof CompositeFont) {
+                msg = "Request to add " + font.getFamilyName(null) +
+                      " with style " + style + " to family " + familyName;
+            } else {
+                msg = "Request to add " + font +
+                      " with style " + style + " to family " + this;
+            }
+            FontUtilities.getLogger().info(msg);
         }
         /* Allow a lower-rank font only if its a file font
          * from the exact same source as any previous font.
--- a/jdk/src/java.desktop/share/classes/sun/font/FontUtilities.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/font/FontUtilities.java	Wed Jul 05 20:33:55 2017 +0200
@@ -378,12 +378,8 @@
      * Suggested usage is something like :
      * FontUIResource fuir;
      * Font desktopFont = getDesktopFont(..);
-     * // NOTE even if fontSupportsDefaultEncoding returns true because
-     * // you get Tahoma and are running in an English locale, you may
-     * // still want to just call getCompositeFontUIResource() anyway
-     * // as only then will you get fallback fonts - eg for CJK.
      * if (FontManager.fontSupportsDefaultEncoding(desktopFont)) {
-     *   fuir = new FontUIResource(..);
+     *   fuir = new FontUIResource(desktopFont);
      * } else {
      *   fuir = FontManager.getCompositeFontUIResource(desktopFont);
      * }
--- a/jdk/src/java.desktop/share/classes/sun/font/SunFontManager.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/font/SunFontManager.java	Wed Jul 05 20:33:55 2017 +0200
@@ -568,36 +568,6 @@
         }
     }
 
-    /**
-     * This method is provided for internal and exclusive use by Swing.
-     *
-     * @param font representing a physical font.
-     * @return true if the underlying font is a TrueType or OpenType font
-     * that claims to support the Microsoft Windows encoding corresponding to
-     * the default file.encoding property of this JRE instance.
-     * This narrow value is useful for Swing to decide if the font is useful
-     * for the Windows Look and Feel, or, if a composite font should be
-     * used instead.
-     * The information used to make the decision is obtained from
-     * the ulCodePageRange fields in the font.
-     * A caller can use isLogicalFont(Font) in this class before calling
-     * this method and would not need to call this method if that
-     * returns true.
-     */
-//     static boolean fontSupportsDefaultEncoding(Font font) {
-//      String encoding =
-//          (String) java.security.AccessController.doPrivileged(
-//                new sun.security.action.GetPropertyAction("file.encoding"));
-
-//      if (encoding == null || font == null) {
-//          return false;
-//      }
-
-//      encoding = encoding.toLowerCase(Locale.ENGLISH);
-
-//      return FontManager.fontSupportsEncoding(font, encoding);
-//     }
-
     public Font2DHandle getNewComposite(String family, int style,
                                         Font2DHandle handle) {
 
--- a/jdk/src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java	Wed Jul 05 20:33:55 2017 +0200
@@ -244,7 +244,6 @@
     public Shape usrClip;
     protected Region devClip;           // Actual physical drawable in pixels
 
-    private final int devScale;         // Actual physical scale factor
     private int resolutionVariantHint;
 
     // cached state for text rendering
@@ -268,8 +267,6 @@
         surfaceData = sd;
         foregroundColor = fg;
         backgroundColor = bg;
-
-        transform = new AffineTransform();
         stroke = defaultStroke;
         composite = defaultComposite;
         paint = foregroundColor;
@@ -287,14 +284,13 @@
 
         interpolationType = AffineTransformOp.TYPE_NEAREST_NEIGHBOR;
 
-        validateColor();
-
-        devScale = sd.getDefaultScale();
-        if (devScale != 1) {
-            transform.setToScale(devScale, devScale);
+        transform = getDefaultTransform();
+        if (!transform.isIdentity()) {
             invalidateTransform();
         }
 
+        validateColor();
+
         font = f;
         if (font == null) {
             font = defaultFont;
@@ -304,6 +300,11 @@
         invalidatePipe();
     }
 
+    private AffineTransform getDefaultTransform() {
+        GraphicsConfiguration gc = getDeviceConfiguration();
+        return (gc == null) ? new AffineTransform() : gc.getDefaultTransform();
+    }
+
     protected Object clone() {
         try {
             SunGraphics2D g = (SunGraphics2D) super.clone();
@@ -1610,11 +1611,10 @@
      */
     @Override
     public void setTransform(AffineTransform Tx) {
-        if ((constrainX | constrainY) == 0 && devScale == 1) {
+        if ((constrainX | constrainY) == 0) {
             transform.setTransform(Tx);
         } else {
-            transform.setTransform(devScale, 0, 0, devScale, constrainX,
-                                   constrainY);
+            transform.setToTranslation(constrainX, constrainY);
             transform.concatenate(Tx);
         }
         invalidateTransform();
@@ -1674,13 +1674,11 @@
      */
     @Override
     public AffineTransform getTransform() {
-        if ((constrainX | constrainY) == 0 && devScale == 1) {
+        if ((constrainX | constrainY) == 0) {
             return new AffineTransform(transform);
         }
-        final double invScale = 1.0 / devScale;
-        AffineTransform tx = new AffineTransform(invScale, 0, 0, invScale,
-                                                 -constrainX * invScale,
-                                                 -constrainY * invScale);
+        AffineTransform tx
+                = AffineTransform.getTranslateInstance(-constrainX, -constrainY);
         tx.concatenate(transform);
         return tx;
     }
--- a/jdk/src/java.desktop/share/classes/sun/java2d/pisces/Dasher.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/pisces/Dasher.java	Wed Jul 05 20:33:55 2017 +0200
@@ -146,7 +146,7 @@
         if (dashOn) {
             if (starting) {
                 firstSegmentsBuffer = Helpers.widenArray(firstSegmentsBuffer,
-                                      firstSegidx, type - 2);
+                                      firstSegidx, type - 2 + 1);
                 firstSegmentsBuffer[firstSegidx++] = type;
                 System.arraycopy(pts, off, firstSegmentsBuffer, firstSegidx, type - 2);
                 firstSegidx += type - 2;
--- a/jdk/src/java.desktop/share/classes/sun/print/PSPrinterJob.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/print/PSPrinterJob.java	Wed Jul 05 20:33:55 2017 +0200
@@ -46,6 +46,7 @@
 
 import java.awt.image.BufferedImage;
 
+import java.awt.peer.FontPeer;
 import java.awt.print.Pageable;
 import java.awt.print.PageFormat;
 import java.awt.print.Paper;
@@ -93,6 +94,7 @@
 import sun.awt.FontDescriptor;
 import sun.awt.PlatformFont;
 import sun.awt.SunToolkit;
+import sun.font.FontAccess;
 import sun.font.FontManagerFactory;
 import sun.font.FontUtilities;
 
@@ -1214,13 +1216,13 @@
      * of distinct PS fonts needed to draw this text. This saves us
      * doing this processing one extra time.
      */
-    @SuppressWarnings("deprecation")
     protected int platformFontCount(Font font, String str) {
         if (mFontProps == null) {
             return 0;
         }
-        CharsetString[] acs =
-            ((PlatformFont)(font.getPeer())).makeMultiCharsetString(str,false);
+        PlatformFont peer = (PlatformFont) FontAccess.getFontAccess()
+                                                     .getFontPeer(font);
+        CharsetString[] acs = peer.makeMultiCharsetString(str, false);
         if (acs == null) {
             /* AWT can't convert all chars so use 2D path */
             return 0;
@@ -1229,7 +1231,6 @@
         return (psFonts == null) ? 0 : psFonts.length;
     }
 
-    @SuppressWarnings("deprecation")
      protected boolean textOut(Graphics g, String str, float x, float y,
                                Font mLastFont, FontRenderContext frc,
                                float width) {
@@ -1254,9 +1255,9 @@
             if (str.length() == 0) {
                 return true;
             }
-            CharsetString[] acs =
-                ((PlatformFont)
-                 (mLastFont.getPeer())).makeMultiCharsetString(str, false);
+            PlatformFont peer = (PlatformFont) FontAccess.getFontAccess()
+                                                         .getFontPeer(mLastFont);
+            CharsetString[] acs = peer.makeMultiCharsetString(str, false);
             if (acs == null) {
                 /* AWT can't convert all chars so use 2D path */
                 return false;
--- a/jdk/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java	Wed Jul 05 20:33:55 2017 +0200
@@ -559,18 +559,8 @@
         }
 
         Media media = (Media)attSet.get(Media.class);
-        if (media == null) {
-            media =
-                (Media)service.getDefaultAttributeValue(Media.class);
-        }
-        if (!(media instanceof MediaSizeName)) {
-            media = MediaSizeName.NA_LETTER;
-        }
-        MediaSize size =
-            MediaSize.getMediaSizeForName((MediaSizeName)media);
-        if (size == null) {
-            size = MediaSize.NA.LETTER;
-        }
+        MediaSize size = getMediaSize(media, service, page);
+
         Paper paper = new Paper();
         float dim[] = size.getSize(1); //units == 1 to avoid FP error
         double w = Math.rint((dim[0]*72.0)/Size2DSyntax.INCH);
@@ -579,40 +569,58 @@
         MediaPrintableArea area =
              (MediaPrintableArea)
              attSet.get(MediaPrintableArea.class);
-        double ix, iw, iy, ih;
-
-        if (area != null) {
-            // Should pass in same unit as updatePageAttributes
-            // to avoid rounding off errors.
-            ix = Math.rint(
-                           area.getX(MediaPrintableArea.INCH) * DPI);
-            iy = Math.rint(
-                           area.getY(MediaPrintableArea.INCH) * DPI);
-            iw = Math.rint(
-                           area.getWidth(MediaPrintableArea.INCH) * DPI);
-            ih = Math.rint(
-                           area.getHeight(MediaPrintableArea.INCH) * DPI);
+        if (area == null) {
+            area = getDefaultPrintableArea(page, w, h);
         }
-        else {
-            if (w >= 72.0 * 6.0) {
-                ix = 72.0;
-                iw = w - 2 * 72.0;
-            } else {
-                ix = w / 6.0;
-                iw = w * 0.75;
-            }
-            if (h >= 72.0 * 6.0) {
-                iy = 72.0;
-                ih = h - 2 * 72.0;
-            } else {
-                iy = h / 6.0;
-                ih = h * 0.75;
-            }
-        }
+
+        double ix, iw, iy, ih;
+        // Should pass in same unit as updatePageAttributes
+        // to avoid rounding off errors.
+        ix = Math.rint(
+                area.getX(MediaPrintableArea.INCH) * DPI);
+        iy = Math.rint(
+                area.getY(MediaPrintableArea.INCH) * DPI);
+        iw = Math.rint(
+                area.getWidth(MediaPrintableArea.INCH) * DPI);
+        ih = Math.rint(
+                area.getHeight(MediaPrintableArea.INCH) * DPI);
         paper.setImageableArea(ix, iy, iw, ih);
         page.setPaper(paper);
         return page;
     }
+    protected MediaSize getMediaSize(Media media, PrintService service,
+            PageFormat page) {
+        if (media == null) {
+            media = (Media)service.getDefaultAttributeValue(Media.class);
+        }
+        if (!(media instanceof MediaSizeName)) {
+            media = MediaSizeName.NA_LETTER;
+        }
+        MediaSize size = MediaSize.getMediaSizeForName((MediaSizeName) media);
+        return size != null ? size : MediaSize.NA.LETTER;
+    }
+
+    protected MediaPrintableArea getDefaultPrintableArea(PageFormat page,
+            double w, double h) {
+        double ix, iw, iy, ih;
+        if (w >= 72.0 * 6.0) {
+            ix = 72.0;
+            iw = w - 2 * 72.0;
+        } else {
+            ix = w / 6.0;
+            iw = w * 0.75;
+        }
+        if (h >= 72.0 * 6.0) {
+            iy = 72.0;
+            ih = h - 2 * 72.0;
+        } else {
+            iy = h / 6.0;
+            ih = h * 0.75;
+        }
+
+        return new MediaPrintableArea((float) (ix / DPI), (float) (iy / DPI),
+                (float) (iw / DPI), (float) (ih / DPI), MediaPrintableArea.INCH);
+    }
 
     protected void updatePageAttributes(PrintService service,
                                         PageFormat page) {
@@ -809,7 +817,7 @@
    }
 
    protected PageFormat getPageFormatFromAttributes() {
-       if (attributes == null) {
+       if (attributes == null || attributes.isEmpty()) {
             return null;
         }
         return attributeToPageFormat(getPrintService(), this.attributes);
--- a/jdk/src/java.desktop/share/classes/sun/swing/JLightweightFrame.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/swing/JLightweightFrame.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -61,6 +61,7 @@
 import javax.swing.RootPaneContainer;
 import javax.swing.SwingUtilities;
 
+import sun.awt.AWTAccessor;
 import sun.awt.DisplayChangedListener;
 import sun.awt.LightweightFrame;
 import sun.security.action.GetPropertyAction;
@@ -241,7 +242,6 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void notifyDisplayChanged(final int scaleFactor) {
         if (scaleFactor != this.scaleFactor) {
             if (!copyBufferEnabled) content.paintLock();
@@ -254,18 +254,19 @@
             }
             this.scaleFactor = scaleFactor;
         }
-        if (getPeer() instanceof DisplayChangedListener) {
-            ((DisplayChangedListener)getPeer()).displayChanged();
+        final Object peer = AWTAccessor.getComponentAccessor().getPeer(this);
+        if (peer instanceof DisplayChangedListener) {
+            ((DisplayChangedListener) peer).displayChanged();
         }
         repaint();
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void addNotify() {
         super.addNotify();
-        if (getPeer() instanceof DisplayChangedListener) {
-            ((DisplayChangedListener)getPeer()).displayChanged();
+        final Object peer = AWTAccessor.getComponentAccessor().getPeer(this);
+        if (peer instanceof DisplayChangedListener) {
+            ((DisplayChangedListener) peer).displayChanged();
         }
     }
 
--- a/jdk/src/java.desktop/share/native/libfontmanager/freetypeScaler.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/libfontmanager/freetypeScaler.c	Wed Jul 05 20:33:55 2017 +0200
@@ -147,20 +147,6 @@
 
 #define FILEDATACACHESIZE 1024
 
-/* NB: is it ever called? */
-static void CloseTTFontFileFunc(FT_Stream stream) {
-    FTScalerInfo *scalerInfo = (FTScalerInfo *) stream->pathname.pointer;
-    JNIEnv* env = scalerInfo->env;
-    jclass tmpClass = (*env)->FindClass(env, "sun/font/TrueTypeFont");
-    jfieldID platNameField =
-         (*env)->GetFieldID(env, tmpClass, "platName", "Ljava/lang/String;");
-    jstring platName = (*env)->GetObjectField(env,
-                                              scalerInfo->font2D,
-                                              platNameField);
-    const char *name = JNU_GetStringPlatformChars(env, platName, NULL);
-    JNU_ReleaseStringPlatformChars(env, platName, name);
-}
-
 static unsigned long ReadTTFontFileFunc(FT_Stream stream,
                                         unsigned long offset,
                                         unsigned char* destBuffer,
@@ -305,7 +291,7 @@
                     ftstream->size = filesize;
                     ftstream->pos = 0;
                     ftstream->read = (FT_Stream_IoFunc) ReadTTFontFileFunc;
-                    ftstream->close = (FT_Stream_CloseFunc) CloseTTFontFileFunc;
+                    ftstream->close = NULL;
                     ftstream->pathname.pointer = (void *) scalerInfo;
 
                     memset(&ft_open_args, 0, sizeof(FT_Open_Args));
--- a/jdk/src/java.desktop/share/native/libjsound/SoundDefs.h	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/libjsound/SoundDefs.h	Wed Jul 05 20:33:55 2017 +0200
@@ -34,7 +34,6 @@
 #define X_BSD           4
 #define X_MACOSX        5
 
-#define X_AARCH64       9
 // **********************************
 // Make sure you set X_PLATFORM defines correctly.
 // Everything depends upon this flag being setup correctly.
--- a/jdk/src/java.desktop/share/native/liblcms/cmscgats.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmscgats.c	Wed Jul 05 20:33:55 2017 +0200
@@ -353,7 +353,7 @@
         "XYZ_X",          // X component of tristimulus data
         "XYZ_Y",          // Y component of tristimulus data
         "XYZ_Z",          // Z component of tristimulus data
-        "XYY_X"           // x component of chromaticity data
+        "XYY_X",          // x component of chromaticity data
         "XYY_Y",          // y component of chromaticity data
         "XYY_CAPY",       // Y component of tristimulus data
         "LAB_L",          // L* component of Lab data
@@ -2334,7 +2334,6 @@
 
     it8 = (cmsIT8*) hIT8;
     it8 ->MemoryBlock = (char*) _cmsMalloc(ContextID, len + 1);
-    if (it8 ->MemoryBlock == NULL) return NULL;
 
     strncpy(it8 ->MemoryBlock, (const char*) Ptr, len);
     it8 ->MemoryBlock[len] = 0;
--- a/jdk/src/java.desktop/share/native/liblcms/cmscnvrt.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmscnvrt.c	Wed Jul 05 20:33:55 2017 +0200
@@ -298,6 +298,8 @@
 {
     cmsMAT3 Scale, m1, m2, m3, m4;
 
+    // TODO: Follow Marc Mahy's recommendation to check if CHAD is same by using M1*M2 == M2*M1. If so, do nothing.
+
     // Adaptation state
     if (AdaptationState == 1.0) {
 
@@ -559,7 +561,7 @@
     cmsHPROFILE hProfile;
     cmsMAT3 m;
     cmsVEC3 off;
-    cmsColorSpaceSignature ColorSpaceIn, ColorSpaceOut, CurrentColorSpace;
+    cmsColorSpaceSignature ColorSpaceIn, ColorSpaceOut = cmsSigLabData, CurrentColorSpace;
     cmsProfileClassSignature ClassSig;
     cmsUInt32Number  i, Intent;
 
@@ -661,6 +663,22 @@
         CurrentColorSpace = ColorSpaceOut;
     }
 
+    // Check for non-negatives clip
+    if (dwFlags & cmsFLAGS_NONEGATIVES) {
+
+           if (ColorSpaceOut == cmsSigGrayData ||
+                  ColorSpaceOut == cmsSigRgbData ||
+                  ColorSpaceOut == cmsSigCmykData) {
+
+                  cmsStage* clip = _cmsStageClipNegatives(Result->ContextID, cmsChannelsOf(ColorSpaceOut));
+                  if (clip == NULL) goto Error;
+
+                  if (!cmsPipelineInsertStage(Result, cmsAT_END, clip))
+                         goto Error;
+           }
+
+    }
+
     return Result;
 
 Error:
@@ -1074,7 +1092,7 @@
         if (TheIntents[i] == INTENT_PERCEPTUAL || TheIntents[i] == INTENT_SATURATION) {
 
             // Force BPC for V4 profiles in perceptual and saturation
-            if (cmsGetProfileVersion(hProfiles[i]) >= 4.0)
+            if (cmsGetEncodedICCversion(hProfiles[i]) >= 0x4000000)
                 BPC[i] = TRUE;
         }
     }
--- a/jdk/src/java.desktop/share/native/liblcms/cmserr.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmserr.c	Wed Jul 05 20:33:55 2017 +0200
@@ -30,7 +30,7 @@
 //---------------------------------------------------------------------------------
 //
 //  Little Color Management System
-//  Copyright (c) 1998-2012 Marti Maria Saguer
+//  Copyright (c) 1998-2015 Marti Maria Saguer
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the "Software"),
@@ -54,6 +54,13 @@
 
 #include "lcms2_internal.h"
 
+
+// This function is here to help applications to prevent mixing lcms versions on header and shared objects.
+int CMSEXPORT cmsGetEncodedCMMversion(void)
+{
+       return LCMS_VERSION;
+}
+
 // I am so tired about incompatibilities on those functions that here are some replacements
 // that hopefully would be fully portable.
 
--- a/jdk/src/java.desktop/share/native/liblcms/cmsintrp.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsintrp.c	Wed Jul 05 20:33:55 2017 +0200
@@ -958,7 +958,7 @@
 
                             Rest = c1 * rx + c2 * ry + c3 * rz;
 
-                            Tmp1[OutChan] = (cmsUInt16Number) c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest));
+                            Tmp1[OutChan] = (cmsUInt16Number) ( c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)));
     }
 
 
@@ -1022,7 +1022,7 @@
 
                             Rest = c1 * rx + c2 * ry + c3 * rz;
 
-                            Tmp2[OutChan] = (cmsUInt16Number) c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest));
+                            Tmp2[OutChan] = (cmsUInt16Number) (c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)));
     }
 
 
--- a/jdk/src/java.desktop/share/native/liblcms/cmsio0.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsio0.c	Wed Jul 05 20:33:55 2017 +0200
@@ -482,6 +482,14 @@
 
 // -------------------------------------------------------------------------------------------------------
 
+cmsIOHANDLER* CMSEXPORT cmsGetProfileIOhandler(cmsHPROFILE hProfile)
+{
+        _cmsICCPROFILE* Icc = (_cmsICCPROFILE*)hProfile;
+
+        if (Icc == NULL) return NULL;
+        return Icc->IOhandler;
+}
+
 // Creates an empty structure holding all required parameters
 cmsHPROFILE CMSEXPORT cmsCreateProfilePlaceholder(cmsContext ContextID)
 {
@@ -651,25 +659,26 @@
        return _cmsSearchTag(Icc, sig, FALSE) >= 0;
 }
 
-/*
- * Enforces that the profile version is per. spec.
- * Operates on the big endian bytes from the profile.
- * Called before converting to platform endianness.
- * Byte 0 is BCD major version, so max 9.
- * Byte 1 is 2 BCD digits, one per nibble.
- * Reserved bytes 2 & 3 must be 0.
- */
-static cmsUInt32Number _validatedVersion(cmsUInt32Number DWord)
+
+
+// Enforces that the profile version is per. spec.
+// Operates on the big endian bytes from the profile.
+// Called before converting to platform endianness.
+// Byte 0 is BCD major version, so max 9.
+// Byte 1 is 2 BCD digits, one per nibble.
+// Reserved bytes 2 & 3 must be 0.
+static
+cmsUInt32Number _validatedVersion(cmsUInt32Number DWord)
 {
-    cmsUInt8Number* pByte = (cmsUInt8Number*)&DWord;
+    cmsUInt8Number* pByte = (cmsUInt8Number*) &DWord;
     cmsUInt8Number temp1;
     cmsUInt8Number temp2;
 
-    if (*pByte > 0x09) *pByte = (cmsUInt8Number)9;
+    if (*pByte > 0x09) *pByte = (cmsUInt8Number) 0x09;
     temp1 = *(pByte+1) & 0xf0;
     temp2 = *(pByte+1) & 0x0f;
     if (temp1 > 0x90) temp1 = 0x90;
-    if (temp2 > 9) temp2 = 0x09;
+    if (temp2 > 0x09) temp2 = 0x09;
     *(pByte+1) = (cmsUInt8Number)(temp1 | temp2);
     *(pByte+2) = (cmsUInt8Number)0;
     *(pByte+3) = (cmsUInt8Number)0;
@@ -1167,6 +1176,8 @@
     return cmsOpenProfileFromMemTHR(NULL, MemPtr, dwSize);
 }
 
+
+
 // Dump tag contents. If the profile is being modified, untouched tags are copied from FileOrig
 static
 cmsBool SaveTags(_cmsICCPROFILE* Icc, _cmsICCPROFILE* FileOrig)
@@ -1197,7 +1208,7 @@
 
             // Reach here if we are copying a tag from a disk-based ICC profile which has not been modified by user.
             // In this case a blind copy of the block data is performed
-            if (FileOrig != NULL && FileOrig->IOhandler != NULL && Icc -> TagOffsets[i]) {
+            if (FileOrig != NULL && Icc -> TagOffsets[i]) {
 
                 cmsUInt32Number TagSize   = FileOrig -> TagSizes[i];
                 cmsUInt32Number TagOffset = FileOrig -> TagOffsets[i];
@@ -1846,13 +1857,12 @@
 
 // Similar to the anterior. This function allows to write directly to the ICC profile any data, without
 // checking anything. As a rule, mixing Raw with cooked doesn't work, so writting a tag as raw and then reading
-// it as cooked without serializing does result into an error. If that is wha you want, you will need to dump
+// it as cooked without serializing does result into an error. If that is what you want, you will need to dump
 // the profile to memry or disk and then reopen it.
 cmsBool CMSEXPORT cmsWriteRawTag(cmsHPROFILE hProfile, cmsTagSignature sig, const void* data, cmsUInt32Number Size)
 {
     _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile;
     int i;
-    cmsBool ret = TRUE;
 
     if (!_cmsLockMutex(Icc->ContextID, Icc ->UsrMutex)) return 0;
 
@@ -1868,11 +1878,15 @@
 
     // Keep a copy of the block
     Icc ->TagPtrs[i]  = _cmsDupMem(Icc ->ContextID, data, Size);
-    if (!Icc ->TagPtrs[i]) ret = FALSE;
     Icc ->TagSizes[i] = Size;
 
     _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex);
-    return ret;
+
+    if (Icc->TagPtrs[i] == NULL) {
+           Icc->TagNames[i] = 0;
+           return FALSE;
+    }
+    return TRUE;
 }
 
 // Using this function you can collapse several tag entries to the same block in the profile
--- a/jdk/src/java.desktop/share/native/liblcms/cmsio1.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsio1.c	Wed Jul 05 20:33:55 2017 +0200
@@ -339,8 +339,8 @@
 cmsPipeline* _cmsReadInputLUT(cmsHPROFILE hProfile, int Intent)
 {
     cmsTagTypeSignature OriginalType;
-    cmsTagSignature tag16    = Device2PCS16[Intent];
-    cmsTagSignature tagFloat = Device2PCSFloat[Intent];
+    cmsTagSignature tag16;
+    cmsTagSignature tagFloat;
     cmsContext ContextID = cmsGetProfileContextID(hProfile);
 
     // On named color, take the appropiate tag
@@ -369,6 +369,9 @@
     // matter other LUT are present and have precedence. Intent = -1 means just this.
     if (Intent != -1) {
 
+        tag16 = Device2PCS16[Intent];
+        tagFloat = Device2PCSFloat[Intent];
+
         if (cmsIsTag(hProfile, tagFloat)) {  // Float tag takes precedence
 
             // Floating point LUT are always V4, but the encoding range is no
@@ -611,13 +614,16 @@
 cmsPipeline* _cmsReadOutputLUT(cmsHPROFILE hProfile, int Intent)
 {
     cmsTagTypeSignature OriginalType;
-    cmsTagSignature tag16    = PCS2Device16[Intent];
-    cmsTagSignature tagFloat = PCS2DeviceFloat[Intent];
-    cmsContext ContextID     = cmsGetProfileContextID(hProfile);
+    cmsTagSignature tag16;
+    cmsTagSignature tagFloat;
+    cmsContext ContextID  = cmsGetProfileContextID(hProfile);
 
 
     if (Intent != -1) {
 
+        tag16 = PCS2Device16[Intent];
+        tagFloat = PCS2DeviceFloat[Intent];
+
         if (cmsIsTag(hProfile, tagFloat)) {  // Float tag takes precedence
 
             // Floating point LUT are always V4
@@ -935,7 +941,7 @@
 {
     if (!cmsWriteTag(hProfile, cmsSigProfileSequenceDescTag, seq)) return FALSE;
 
-    if (cmsGetProfileVersion(hProfile) >= 4.0) {
+    if (cmsGetEncodedICCversion(hProfile) >= 0x4000000) {
 
             if (!cmsWriteTag(hProfile, cmsSigProfileSequenceIdTag, seq)) return FALSE;
     }
--- a/jdk/src/java.desktop/share/native/liblcms/cmslut.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmslut.c	Wed Jul 05 20:33:55 2017 +0200
@@ -1154,7 +1154,23 @@
     return mpe;
 }
 
+// Clips values smaller than zero
+static
+void Clipper(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe)
+{
+       cmsUInt32Number i;
+       for (i = 0; i < mpe->InputChannels; i++) {
 
+              cmsFloat32Number n = In[i];
+              Out[i] = n < 0 ? 0 : n;
+       }
+}
+
+cmsStage*  _cmsStageClipNegatives(cmsContext ContextID, int nChannels)
+{
+       return _cmsStageAllocPlaceholder(ContextID, cmsSigClipNegativesElemType,
+              nChannels, nChannels, Clipper, NULL, NULL, NULL);
+}
 
 // ********************************************************************************
 // Type cmsSigXYZ2LabElemType
--- a/jdk/src/java.desktop/share/native/liblcms/cmsnamed.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsnamed.c	Wed Jul 05 20:33:55 2017 +0200
@@ -543,8 +543,9 @@
     v ->nColors   = 0;
     v ->ContextID  = ContextID;
 
-    while (v -> Allocated < n)
-        GrowNamedColorList(v);
+    while (v -> Allocated < n){
+        if (!GrowNamedColorList(v)) return NULL;
+    }
 
     strncpy(v ->Prefix, Prefix, sizeof(v ->Prefix)-1);
     strncpy(v ->Suffix, Suffix, sizeof(v ->Suffix)-1);
@@ -573,8 +574,9 @@
     if (NewNC == NULL) return NULL;
 
     // For really large tables we need this
-    while (NewNC ->Allocated < v ->Allocated)
-        GrowNamedColorList(NewNC);
+    while (NewNC ->Allocated < v ->Allocated){
+        if (!GrowNamedColorList(NewNC)) return NULL;
+    }
 
     memmove(NewNC ->Prefix, v ->Prefix, sizeof(v ->Prefix));
     memmove(NewNC ->Suffix, v ->Suffix, sizeof(v ->Suffix));
--- a/jdk/src/java.desktop/share/native/liblcms/cmsopt.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsopt.c	Wed Jul 05 20:33:55 2017 +0200
@@ -192,6 +192,88 @@
     return AnyOpt;
 }
 
+
+static
+cmsBool CloseEnoughFloat(cmsFloat64Number a, cmsFloat64Number b)
+{
+       return fabs(b - a) < 0.00001f;
+}
+
+static
+cmsBool  isFloatMatrixIdentity(const cmsMAT3* a)
+{
+       cmsMAT3 Identity;
+       int i, j;
+
+       _cmsMAT3identity(&Identity);
+
+       for (i = 0; i < 3; i++)
+              for (j = 0; j < 3; j++)
+                     if (!CloseEnoughFloat(a->v[i].n[j], Identity.v[i].n[j])) return FALSE;
+
+       return TRUE;
+}
+// if two adjacent matrices are found, multiply them.
+static
+cmsBool _MultiplyMatrix(cmsPipeline* Lut)
+{
+       cmsStage** pt1;
+       cmsStage** pt2;
+       cmsStage*  chain;
+       cmsBool AnyOpt = FALSE;
+
+       pt1 = &Lut->Elements;
+       if (*pt1 == NULL) return AnyOpt;
+
+       while (*pt1 != NULL) {
+
+              pt2 = &((*pt1)->Next);
+              if (*pt2 == NULL) return AnyOpt;
+
+              if ((*pt1)->Implements == cmsSigMatrixElemType && (*pt2)->Implements == cmsSigMatrixElemType) {
+
+                     // Get both matrices
+                     _cmsStageMatrixData* m1 = (_cmsStageMatrixData*) cmsStageData(*pt1);
+                     _cmsStageMatrixData* m2 = (_cmsStageMatrixData*) cmsStageData(*pt2);
+                     cmsMAT3 res;
+
+                     // Input offset and output offset should be zero to use this optimization
+                     if (m1->Offset != NULL || m2 ->Offset != NULL ||
+                            cmsStageInputChannels(*pt1) != 3 || cmsStageOutputChannels(*pt1) != 3 ||
+                            cmsStageInputChannels(*pt2) != 3 || cmsStageOutputChannels(*pt2) != 3)
+                            return FALSE;
+
+                     // Multiply both matrices to get the result
+                     _cmsMAT3per(&res, (cmsMAT3*)m2->Double, (cmsMAT3*)m1->Double);
+
+                     // Get the next in chain afer the matrices
+                     chain = (*pt2)->Next;
+
+                     // Remove both matrices
+                     _RemoveElement(pt2);
+                     _RemoveElement(pt1);
+
+                     // Now what if the result is a plain identity?
+                     if (!isFloatMatrixIdentity(&res)) {
+
+                            // We can not get rid of full matrix
+                            cmsStage* Multmat = cmsStageAllocMatrix(Lut->ContextID, 3, 3, (const cmsFloat64Number*) &res, NULL);
+
+                            // Recover the chain
+                            Multmat->Next = chain;
+                            *pt1 = Multmat;
+                     }
+
+                     AnyOpt = TRUE;
+              }
+              else
+                     pt1 = &((*pt1)->Next);
+       }
+
+       return AnyOpt;
+}
+
+
 // Preoptimize just gets rif of no-ops coming paired. Conversion from v2 to v4 followed
 // by a v4 to v2 and vice-versa. The elements are then discarded.
 static
@@ -224,6 +306,9 @@
         // Remove float pcs Lab conversions
         Opt |= _Remove2Op(Lut, cmsSigXYZ2FloatPCS, cmsSigFloatPCS2XYZ);
 
+        // Simplify matrix.
+        Opt |= _MultiplyMatrix(Lut);
+
         if (Opt) AnyOpt = TRUE;
 
     } while (Opt);
@@ -280,12 +365,12 @@
 void* Prelin16dup(cmsContext ContextID, const void* ptr)
 {
     Prelin16Data* p16 = (Prelin16Data*) ptr;
-    Prelin16Data* Duped = _cmsDupMem(ContextID, p16, sizeof(Prelin16Data));
+    Prelin16Data* Duped = (Prelin16Data*) _cmsDupMem(ContextID, p16, sizeof(Prelin16Data));
 
     if (Duped == NULL) return NULL;
 
-    Duped ->EvalCurveOut16   = _cmsDupMem(ContextID, p16 ->EvalCurveOut16, p16 ->nOutputs * sizeof(_cmsInterpFn16));
-    Duped ->ParamsCurveOut16 = _cmsDupMem(ContextID, p16 ->ParamsCurveOut16, p16 ->nOutputs * sizeof(cmsInterpParams* ));
+    Duped->EvalCurveOut16 = (_cmsInterpFn16*) _cmsDupMem(ContextID, p16->EvalCurveOut16, p16->nOutputs * sizeof(_cmsInterpFn16));
+    Duped->ParamsCurveOut16 = (cmsInterpParams**)_cmsDupMem(ContextID, p16->ParamsCurveOut16, p16->nOutputs * sizeof(cmsInterpParams*));
 
     return Duped;
 }
@@ -298,7 +383,7 @@
                                int nOutputs, cmsToneCurve** Out )
 {
     int i;
-    Prelin16Data* p16 = _cmsMallocZero(ContextID, sizeof(Prelin16Data));
+    Prelin16Data* p16 = (Prelin16Data*)_cmsMallocZero(ContextID, sizeof(Prelin16Data));
     if (p16 == NULL) return NULL;
 
     p16 ->nInputs = nInputs;
@@ -787,7 +872,7 @@
     cmsS15Fixed16Number v1, v2, v3;
     Prelin8Data* p8;
 
-    p8 = _cmsMallocZero(ContextID, sizeof(Prelin8Data));
+    p8 = (Prelin8Data*)_cmsMallocZero(ContextID, sizeof(Prelin8Data));
     if (p8 == NULL) return NULL;
 
     // Since this only works for 8 bit input, values comes always as x * 257,
@@ -861,7 +946,7 @@
     Prelin8Data* p8 = (Prelin8Data*) D;
     register const cmsInterpParams* p = p8 ->p;
     int                    TotalOut = p -> nOutputs;
-    const cmsUInt16Number* LutTable = p -> Table;
+    const cmsUInt16Number* LutTable = (const cmsUInt16Number*) p->Table;
 
     r = Input[0] >> 8;
     g = Input[1] >> 8;
@@ -1180,29 +1265,15 @@
 static
 void* CurvesDup(cmsContext ContextID, const void* ptr)
 {
-    Curves16Data* Data = _cmsDupMem(ContextID, ptr, sizeof(Curves16Data));
-    int i, j;
+    Curves16Data* Data = (Curves16Data*)_cmsDupMem(ContextID, ptr, sizeof(Curves16Data));
+    int i;
 
     if (Data == NULL) return NULL;
 
-    Data ->Curves = _cmsDupMem(ContextID, Data ->Curves, Data ->nCurves * sizeof(cmsUInt16Number*));
-    if (Data -> Curves == NULL) {
-        _cmsFree(ContextID, Data);
-        return NULL;
-    }
+    Data->Curves = (cmsUInt16Number**) _cmsDupMem(ContextID, Data->Curves, Data->nCurves * sizeof(cmsUInt16Number*));
 
     for (i=0; i < Data -> nCurves; i++) {
-        Data ->Curves[i] = _cmsDupMem(ContextID, Data ->Curves[i], Data -> nElements * sizeof(cmsUInt16Number));
-        if (Data->Curves[i] == NULL) {
-
-            for (j=0; j < i; j++) {
-                _cmsFree(ContextID, Data->Curves[j]);
-            }
-            _cmsFree(ContextID, Data->Curves);
-            _cmsFree(ContextID, Data);
-            return NULL;
-        }
-
+        Data->Curves[i] = (cmsUInt16Number*) _cmsDupMem(ContextID, Data->Curves[i], Data->nElements * sizeof(cmsUInt16Number));
     }
 
     return (void*) Data;
@@ -1215,18 +1286,18 @@
     int i, j;
     Curves16Data* c16;
 
-    c16 = _cmsMallocZero(ContextID, sizeof(Curves16Data));
+    c16 = (Curves16Data*)_cmsMallocZero(ContextID, sizeof(Curves16Data));
     if (c16 == NULL) return NULL;
 
     c16 ->nCurves = nCurves;
     c16 ->nElements = nElements;
 
-    c16 ->Curves = _cmsCalloc(ContextID, nCurves, sizeof(cmsUInt16Number*));
+    c16->Curves = (cmsUInt16Number**) _cmsCalloc(ContextID, nCurves, sizeof(cmsUInt16Number*));
     if (c16 ->Curves == NULL) return NULL;
 
     for (i=0; i < nCurves; i++) {
 
-        c16->Curves[i] = _cmsCalloc(ContextID, nElements, sizeof(cmsUInt16Number));
+        c16->Curves[i] = (cmsUInt16Number*) _cmsCalloc(ContextID, nElements, sizeof(cmsUInt16Number));
 
         if (c16->Curves[i] == NULL) {
 
@@ -1574,49 +1645,83 @@
 }
 
 //  8 bits on input allows matrix-shaper boot up to 25 Mpixels per second on RGB. That's fast!
-// TODO: Allow a third matrix for abs. colorimetric
 static
 cmsBool OptimizeMatrixShaper(cmsPipeline** Lut, cmsUInt32Number Intent, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags)
 {
-    cmsStage* Curve1, *Curve2;
-    cmsStage* Matrix1, *Matrix2;
-    _cmsStageMatrixData* Data1;
-    _cmsStageMatrixData* Data2;
-    cmsMAT3 res;
-    cmsBool IdentityMat;
-    cmsPipeline* Dest, *Src;
+       cmsStage* Curve1, *Curve2;
+       cmsStage* Matrix1, *Matrix2;
+       cmsMAT3 res;
+       cmsBool IdentityMat;
+       cmsPipeline* Dest, *Src;
+       cmsFloat64Number* Offset;
+
+       // Only works on RGB to RGB
+       if (T_CHANNELS(*InputFormat) != 3 || T_CHANNELS(*OutputFormat) != 3) return FALSE;
+
+       // Only works on 8 bit input
+       if (!_cmsFormatterIs8bit(*InputFormat)) return FALSE;
+
+       // Seems suitable, proceed
+       Src = *Lut;
 
-    // Only works on RGB to RGB
-    if (T_CHANNELS(*InputFormat) != 3 || T_CHANNELS(*OutputFormat) != 3) return FALSE;
+       // Check for:
+       //
+       //    shaper-matrix-matrix-shaper
+       //    shaper-matrix-shaper
+       //
+       // Both of those constructs are possible (first because abs. colorimetric).
+       // additionally, In the first case, the input matrix offset should be zero.
 
-    // Only works on 8 bit input
-    if (!_cmsFormatterIs8bit(*InputFormat)) return FALSE;
+       IdentityMat = FALSE;
+       if (cmsPipelineCheckAndRetreiveStages(Src, 4,
+              cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType,
+              &Curve1, &Matrix1, &Matrix2, &Curve2)) {
 
-    // Seems suitable, proceed
-    Src = *Lut;
+              // Get both matrices
+              _cmsStageMatrixData* Data1 = (_cmsStageMatrixData*)cmsStageData(Matrix1);
+              _cmsStageMatrixData* Data2 = (_cmsStageMatrixData*)cmsStageData(Matrix2);
+
+              // Input offset should be zero
+              if (Data1->Offset != NULL) return FALSE;
 
-    // Check for shaper-matrix-matrix-shaper structure, that is what this optimizer stands for
-    if (!cmsPipelineCheckAndRetreiveStages(Src, 4,
-        cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType,
-        &Curve1, &Matrix1, &Matrix2, &Curve2)) return FALSE;
+              // Multiply both matrices to get the result
+              _cmsMAT3per(&res, (cmsMAT3*)Data2->Double, (cmsMAT3*)Data1->Double);
+
+              // Only 2nd matrix has offset, or it is zero
+              Offset = Data2->Offset;
 
-    // Get both matrices
-    Data1 = (_cmsStageMatrixData*) cmsStageData(Matrix1);
-    Data2 = (_cmsStageMatrixData*) cmsStageData(Matrix2);
+              // Now the result is in res + Data2 -> Offset. Maybe is a plain identity?
+              if (_cmsMAT3isIdentity(&res) && Offset == NULL) {
+
+                     // We can get rid of full matrix
+                     IdentityMat = TRUE;
+              }
+
+       }
+       else {
 
-    // Input offset should be zero
-    if (Data1 ->Offset != NULL) return FALSE;
+              if (cmsPipelineCheckAndRetreiveStages(Src, 3,
+                     cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType,
+                     &Curve1, &Matrix1, &Curve2)) {
 
-    // Multiply both matrices to get the result
-    _cmsMAT3per(&res, (cmsMAT3*) Data2 ->Double, (cmsMAT3*) Data1 ->Double);
+                     _cmsStageMatrixData* Data = (_cmsStageMatrixData*)cmsStageData(Matrix1);
+
+                     // Copy the matrix to our result
+                     memcpy(&res, Data->Double, sizeof(res));
 
-    // Now the result is in res + Data2 -> Offset. Maybe is a plain identity?
-    IdentityMat = FALSE;
-    if (_cmsMAT3isIdentity(&res) && Data2 ->Offset == NULL) {
+                     // Preserve the Odffset (may be NULL as a zero offset)
+                     Offset = Data->Offset;
+
+                     if (_cmsMAT3isIdentity(&res) && Offset == NULL) {
 
-        // We can get rid of full matrix
-        IdentityMat = TRUE;
-    }
+                            // We can get rid of full matrix
+                            IdentityMat = TRUE;
+                     }
+              }
+              else
+                     return FALSE; // Not optimizeable this time
+
+       }
 
       // Allocate an empty LUT
     Dest =  cmsPipelineAlloc(Src ->ContextID, Src ->InputChannels, Src ->OutputChannels);
@@ -1626,9 +1731,12 @@
     if (!cmsPipelineInsertStage(Dest, cmsAT_BEGIN, cmsStageDup(Curve1)))
         goto Error;
 
-    if (!IdentityMat)
-        if (!cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageAllocMatrix(Dest ->ContextID, 3, 3, (const cmsFloat64Number*) &res, Data2 ->Offset)))
-            goto Error;
+    if (!IdentityMat) {
+
+           if (!cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageAllocMatrix(Dest->ContextID, 3, 3, (const cmsFloat64Number*)&res, Offset)))
+                  goto Error;
+    }
+
     if (!cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageDup(Curve2)))
         goto Error;
 
@@ -1646,7 +1754,7 @@
         *dwFlags |= cmsFLAGS_NOCACHE;
 
         // Setup the optimizarion routines
-        SetMatShaper(Dest, mpeC1 ->TheCurves, &res, (cmsVEC3*) Data2 ->Offset, mpeC2->TheCurves, OutputFormat);
+        SetMatShaper(Dest, mpeC1 ->TheCurves, &res, (cmsVEC3*) Offset, mpeC2->TheCurves, OutputFormat);
     }
 
     cmsPipelineFree(Src);
--- a/jdk/src/java.desktop/share/native/liblcms/cmspack.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmspack.c	Wed Jul 05 20:33:55 2017 +0200
@@ -2438,9 +2438,6 @@
             ((cmsFloat64Number*) output)[i + start] = v;
     }
 
-    if (!ExtraFirst) {
-        output += Extra * sizeof(cmsFloat64Number);
-    }
 
     if (Extra == 0 && SwapFirst) {
 
@@ -2451,7 +2448,7 @@
     if (T_PLANAR(info -> OutputFormat))
         return output + sizeof(cmsFloat64Number);
     else
-        return output + nChan * sizeof(cmsFloat64Number);
+        return output + (nChan + Extra) * sizeof(cmsFloat64Number);
 
 }
 
@@ -2462,50 +2459,47 @@
                                 register cmsUInt8Number* output,
                                 register cmsUInt32Number Stride)
 {
-    int nChan      = T_CHANNELS(info -> OutputFormat);
-    int DoSwap     = T_DOSWAP(info ->OutputFormat);
-    int Reverse    = T_FLAVOR(info ->OutputFormat);
-    int Extra      = T_EXTRA(info -> OutputFormat);
-    int SwapFirst  = T_SWAPFIRST(info -> OutputFormat);
-    int Planar     = T_PLANAR(info -> OutputFormat);
-    int ExtraFirst = DoSwap ^ SwapFirst;
-    cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 655.35 : 65535.0;
-    cmsFloat64Number v = 0;
-    cmsFloat32Number* swap1 = (cmsFloat32Number*) output;
-    int i, start = 0;
-
-    if (ExtraFirst)
-        start = Extra;
-
-    for (i=0; i < nChan; i++) {
-
-        int index = DoSwap ? (nChan - i - 1) : i;
-
-        v = (cmsFloat64Number) wOut[index] / maximum;
-
-        if (Reverse)
-            v = maximum - v;
-
-        if (Planar)
-            ((cmsFloat32Number*) output)[(i + start ) * Stride]= (cmsFloat32Number) v;
-        else
-            ((cmsFloat32Number*) output)[i + start] = (cmsFloat32Number) v;
-    }
-
-    if (!ExtraFirst) {
-        output += Extra * sizeof(cmsFloat32Number);
-    }
-
-  if (Extra == 0 && SwapFirst) {
-
-         memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsFloat32Number));
-        *swap1 = (cmsFloat32Number) v;
-    }
-
-    if (T_PLANAR(info -> OutputFormat))
-        return output + sizeof(cmsFloat32Number);
-    else
-        return output + nChan * sizeof(cmsFloat32Number);
+       int nChan = T_CHANNELS(info->OutputFormat);
+       int DoSwap = T_DOSWAP(info->OutputFormat);
+       int Reverse = T_FLAVOR(info->OutputFormat);
+       int Extra = T_EXTRA(info->OutputFormat);
+       int SwapFirst = T_SWAPFIRST(info->OutputFormat);
+       int Planar = T_PLANAR(info->OutputFormat);
+       int ExtraFirst = DoSwap ^ SwapFirst;
+       cmsFloat64Number maximum = IsInkSpace(info->OutputFormat) ? 655.35 : 65535.0;
+       cmsFloat64Number v = 0;
+       cmsFloat32Number* swap1 = (cmsFloat32Number*)output;
+       int i, start = 0;
+
+       if (ExtraFirst)
+              start = Extra;
+
+       for (i = 0; i < nChan; i++) {
+
+              int index = DoSwap ? (nChan - i - 1) : i;
+
+              v = (cmsFloat64Number)wOut[index] / maximum;
+
+              if (Reverse)
+                     v = maximum - v;
+
+              if (Planar)
+                     ((cmsFloat32Number*)output)[(i + start) * Stride] = (cmsFloat32Number)v;
+              else
+                     ((cmsFloat32Number*)output)[i + start] = (cmsFloat32Number)v;
+       }
+
+
+       if (Extra == 0 && SwapFirst) {
+
+              memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsFloat32Number));
+              *swap1 = (cmsFloat32Number)v;
+       }
+
+       if (T_PLANAR(info->OutputFormat))
+              return output + sizeof(cmsFloat32Number);
+       else
+              return output + (nChan + Extra) * sizeof(cmsFloat32Number);
 }
 
 
@@ -2518,50 +2512,47 @@
                                     cmsUInt8Number* output,
                                     cmsUInt32Number Stride)
 {
-    int nChan      = T_CHANNELS(info -> OutputFormat);
-    int DoSwap     = T_DOSWAP(info ->OutputFormat);
-    int Reverse    = T_FLAVOR(info ->OutputFormat);
-    int Extra      = T_EXTRA(info -> OutputFormat);
-    int SwapFirst  = T_SWAPFIRST(info -> OutputFormat);
-    int Planar     = T_PLANAR(info -> OutputFormat);
-    int ExtraFirst = DoSwap ^ SwapFirst;
-    cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 100.0 : 1.0;
-    cmsFloat32Number* swap1 = (cmsFloat32Number*) output;
-    cmsFloat64Number v = 0;
-    int i, start = 0;
-
-    if (ExtraFirst)
-        start = Extra;
-
-    for (i=0; i < nChan; i++) {
-
-        int index = DoSwap ? (nChan - i - 1) : i;
-
-        v = wOut[index] * maximum;
-
-        if (Reverse)
-            v = maximum - v;
-
-        if (Planar)
-            ((cmsFloat32Number*) output)[(i + start)* Stride]= (cmsFloat32Number) v;
-        else
-            ((cmsFloat32Number*) output)[i + start] = (cmsFloat32Number) v;
-    }
-
-    if (!ExtraFirst) {
-        output += Extra * sizeof(cmsFloat32Number);
-    }
-
-   if (Extra == 0 && SwapFirst) {
-
-         memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsFloat32Number));
-        *swap1 = (cmsFloat32Number) v;
-    }
-
-    if (T_PLANAR(info -> OutputFormat))
-        return output + sizeof(cmsFloat32Number);
-    else
-        return output + nChan * sizeof(cmsFloat32Number);
+       int nChan = T_CHANNELS(info->OutputFormat);
+       int DoSwap = T_DOSWAP(info->OutputFormat);
+       int Reverse = T_FLAVOR(info->OutputFormat);
+       int Extra = T_EXTRA(info->OutputFormat);
+       int SwapFirst = T_SWAPFIRST(info->OutputFormat);
+       int Planar = T_PLANAR(info->OutputFormat);
+       int ExtraFirst = DoSwap ^ SwapFirst;
+       cmsFloat64Number maximum = IsInkSpace(info->OutputFormat) ? 100.0 : 1.0;
+       cmsFloat32Number* swap1 = (cmsFloat32Number*)output;
+       cmsFloat64Number v = 0;
+       int i, start = 0;
+
+       if (ExtraFirst)
+              start = Extra;
+
+       for (i = 0; i < nChan; i++) {
+
+              int index = DoSwap ? (nChan - i - 1) : i;
+
+              v = wOut[index] * maximum;
+
+              if (Reverse)
+                     v = maximum - v;
+
+              if (Planar)
+                     ((cmsFloat32Number*)output)[(i + start)* Stride] = (cmsFloat32Number)v;
+              else
+                     ((cmsFloat32Number*)output)[i + start] = (cmsFloat32Number)v;
+       }
+
+
+       if (Extra == 0 && SwapFirst) {
+
+              memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsFloat32Number));
+              *swap1 = (cmsFloat32Number)v;
+       }
+
+       if (T_PLANAR(info->OutputFormat))
+              return output + sizeof(cmsFloat32Number);
+       else
+              return output + (nChan + Extra) * sizeof(cmsFloat32Number);
 }
 
 static
@@ -2570,51 +2561,47 @@
                                     cmsUInt8Number* output,
                                     cmsUInt32Number Stride)
 {
-    int nChan      = T_CHANNELS(info -> OutputFormat);
-    int DoSwap     = T_DOSWAP(info ->OutputFormat);
-    int Reverse    = T_FLAVOR(info ->OutputFormat);
-    int Extra      = T_EXTRA(info -> OutputFormat);
-    int SwapFirst  = T_SWAPFIRST(info -> OutputFormat);
-    int Planar     = T_PLANAR(info -> OutputFormat);
-    int ExtraFirst = DoSwap ^ SwapFirst;
-    cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 100.0 : 1.0;
-    cmsFloat64Number v = 0;
-    cmsFloat64Number* swap1 = (cmsFloat64Number*) output;
-    int i, start = 0;
-
-    if (ExtraFirst)
-        start = Extra;
-
-    for (i=0; i < nChan; i++) {
-
-        int index = DoSwap ? (nChan - i - 1) : i;
-
-        v = wOut[index] * maximum;
-
-        if (Reverse)
-            v = maximum - v;
-
-        if (Planar)
-            ((cmsFloat64Number*) output)[(i + start) * Stride] =  v;
-        else
-            ((cmsFloat64Number*) output)[i + start] =  v;
-    }
-
-    if (!ExtraFirst) {
-        output += Extra * sizeof(cmsFloat64Number);
-    }
-
-   if (Extra == 0 && SwapFirst) {
-
-         memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsFloat64Number));
-        *swap1 = v;
-    }
-
-
-    if (T_PLANAR(info -> OutputFormat))
-        return output + sizeof(cmsFloat64Number);
-    else
-        return output + nChan * sizeof(cmsFloat64Number);
+       int nChan = T_CHANNELS(info->OutputFormat);
+       int DoSwap = T_DOSWAP(info->OutputFormat);
+       int Reverse = T_FLAVOR(info->OutputFormat);
+       int Extra = T_EXTRA(info->OutputFormat);
+       int SwapFirst = T_SWAPFIRST(info->OutputFormat);
+       int Planar = T_PLANAR(info->OutputFormat);
+       int ExtraFirst = DoSwap ^ SwapFirst;
+       cmsFloat64Number maximum = IsInkSpace(info->OutputFormat) ? 100.0 : 1.0;
+       cmsFloat64Number v = 0;
+       cmsFloat64Number* swap1 = (cmsFloat64Number*)output;
+       int i, start = 0;
+
+       if (ExtraFirst)
+              start = Extra;
+
+       for (i = 0; i < nChan; i++) {
+
+              int index = DoSwap ? (nChan - i - 1) : i;
+
+              v = wOut[index] * maximum;
+
+              if (Reverse)
+                     v = maximum - v;
+
+              if (Planar)
+                     ((cmsFloat64Number*)output)[(i + start) * Stride] = v;
+              else
+                     ((cmsFloat64Number*)output)[i + start] = v;
+       }
+
+       if (Extra == 0 && SwapFirst) {
+
+              memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsFloat64Number));
+              *swap1 = v;
+       }
+
+
+       if (T_PLANAR(info->OutputFormat))
+              return output + sizeof(cmsFloat64Number);
+       else
+              return output + (nChan + Extra) * sizeof(cmsFloat64Number);
 
 }
 
@@ -2850,50 +2837,47 @@
                                 register cmsUInt8Number* output,
                                 register cmsUInt32Number Stride)
 {
-    int nChan      = T_CHANNELS(info -> OutputFormat);
-    int DoSwap     = T_DOSWAP(info ->OutputFormat);
-    int Reverse    = T_FLAVOR(info ->OutputFormat);
-    int Extra      = T_EXTRA(info -> OutputFormat);
-    int SwapFirst  = T_SWAPFIRST(info -> OutputFormat);
-    int Planar     = T_PLANAR(info -> OutputFormat);
-    int ExtraFirst = DoSwap ^ SwapFirst;
-    cmsFloat32Number maximum = IsInkSpace(info ->OutputFormat) ? 655.35F : 65535.0F;
-    cmsFloat32Number v = 0;
-    cmsUInt16Number* swap1 = (cmsUInt16Number*) output;
-    int i, start = 0;
-
-    if (ExtraFirst)
-        start = Extra;
-
-    for (i=0; i < nChan; i++) {
-
-        int index = DoSwap ? (nChan - i - 1) : i;
-
-        v = (cmsFloat32Number) wOut[index] / maximum;
-
-        if (Reverse)
-            v = maximum - v;
-
-        if (Planar)
-            ((cmsUInt16Number*) output)[(i + start ) * Stride]= _cmsFloat2Half(v);
-        else
-            ((cmsUInt16Number*) output)[i + start] =  _cmsFloat2Half(v);
-    }
-
-    if (!ExtraFirst) {
-        output += Extra * sizeof(cmsUInt16Number);
-    }
-
-  if (Extra == 0 && SwapFirst) {
-
-         memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsUInt16Number));
-        *swap1 = _cmsFloat2Half(v);
-    }
-
-    if (T_PLANAR(info -> OutputFormat))
-        return output + sizeof(cmsUInt16Number);
-    else
-        return output + nChan * sizeof(cmsUInt16Number);
+       int nChan = T_CHANNELS(info->OutputFormat);
+       int DoSwap = T_DOSWAP(info->OutputFormat);
+       int Reverse = T_FLAVOR(info->OutputFormat);
+       int Extra = T_EXTRA(info->OutputFormat);
+       int SwapFirst = T_SWAPFIRST(info->OutputFormat);
+       int Planar = T_PLANAR(info->OutputFormat);
+       int ExtraFirst = DoSwap ^ SwapFirst;
+       cmsFloat32Number maximum = IsInkSpace(info->OutputFormat) ? 655.35F : 65535.0F;
+       cmsFloat32Number v = 0;
+       cmsUInt16Number* swap1 = (cmsUInt16Number*)output;
+       int i, start = 0;
+
+       if (ExtraFirst)
+              start = Extra;
+
+       for (i = 0; i < nChan; i++) {
+
+              int index = DoSwap ? (nChan - i - 1) : i;
+
+              v = (cmsFloat32Number)wOut[index] / maximum;
+
+              if (Reverse)
+                     v = maximum - v;
+
+              if (Planar)
+                     ((cmsUInt16Number*)output)[(i + start) * Stride] = _cmsFloat2Half(v);
+              else
+                     ((cmsUInt16Number*)output)[i + start] = _cmsFloat2Half(v);
+       }
+
+
+       if (Extra == 0 && SwapFirst) {
+
+              memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsUInt16Number));
+              *swap1 = _cmsFloat2Half(v);
+       }
+
+       if (T_PLANAR(info->OutputFormat))
+              return output + sizeof(cmsUInt16Number);
+       else
+              return output + (nChan + Extra) * sizeof(cmsUInt16Number);
 }
 
 
@@ -2904,50 +2888,47 @@
                                     cmsUInt8Number* output,
                                     cmsUInt32Number Stride)
 {
-    int nChan      = T_CHANNELS(info -> OutputFormat);
-    int DoSwap     = T_DOSWAP(info ->OutputFormat);
-    int Reverse    = T_FLAVOR(info ->OutputFormat);
-    int Extra      = T_EXTRA(info -> OutputFormat);
-    int SwapFirst  = T_SWAPFIRST(info -> OutputFormat);
-    int Planar     = T_PLANAR(info -> OutputFormat);
-    int ExtraFirst = DoSwap ^ SwapFirst;
-    cmsFloat32Number maximum = IsInkSpace(info ->OutputFormat) ? 100.0F : 1.0F;
-    cmsUInt16Number* swap1 = (cmsUInt16Number*) output;
-    cmsFloat32Number v = 0;
-    int i, start = 0;
-
-    if (ExtraFirst)
-        start = Extra;
-
-    for (i=0; i < nChan; i++) {
-
-        int index = DoSwap ? (nChan - i - 1) : i;
-
-        v = wOut[index] * maximum;
-
-        if (Reverse)
-            v = maximum - v;
-
-        if (Planar)
-            ((cmsUInt16Number*) output)[(i + start)* Stride]= _cmsFloat2Half( v );
-        else
-            ((cmsUInt16Number*) output)[i + start] = _cmsFloat2Half( v );
-    }
-
-    if (!ExtraFirst) {
-        output += Extra * sizeof(cmsUInt16Number);
-    }
-
-   if (Extra == 0 && SwapFirst) {
-
-         memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsUInt16Number));
-        *swap1 = (cmsUInt16Number)  _cmsFloat2Half( v );
-    }
-
-    if (T_PLANAR(info -> OutputFormat))
-        return output + sizeof(cmsUInt16Number);
-    else
-        return output + nChan * sizeof(cmsUInt16Number);
+       int nChan = T_CHANNELS(info->OutputFormat);
+       int DoSwap = T_DOSWAP(info->OutputFormat);
+       int Reverse = T_FLAVOR(info->OutputFormat);
+       int Extra = T_EXTRA(info->OutputFormat);
+       int SwapFirst = T_SWAPFIRST(info->OutputFormat);
+       int Planar = T_PLANAR(info->OutputFormat);
+       int ExtraFirst = DoSwap ^ SwapFirst;
+       cmsFloat32Number maximum = IsInkSpace(info->OutputFormat) ? 100.0F : 1.0F;
+       cmsUInt16Number* swap1 = (cmsUInt16Number*)output;
+       cmsFloat32Number v = 0;
+       int i, start = 0;
+
+       if (ExtraFirst)
+              start = Extra;
+
+       for (i = 0; i < nChan; i++) {
+
+              int index = DoSwap ? (nChan - i - 1) : i;
+
+              v = wOut[index] * maximum;
+
+              if (Reverse)
+                     v = maximum - v;
+
+              if (Planar)
+                     ((cmsUInt16Number*)output)[(i + start)* Stride] = _cmsFloat2Half(v);
+              else
+                     ((cmsUInt16Number*)output)[i + start] = _cmsFloat2Half(v);
+       }
+
+
+       if (Extra == 0 && SwapFirst) {
+
+              memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsUInt16Number));
+              *swap1 = (cmsUInt16Number)_cmsFloat2Half(v);
+       }
+
+       if (T_PLANAR(info->OutputFormat))
+              return output + sizeof(cmsUInt16Number);
+       else
+              return output + (nChan + Extra)* sizeof(cmsUInt16Number);
 }
 
 #endif
--- a/jdk/src/java.desktop/share/native/liblcms/cmspcs.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmspcs.c	Wed Jul 05 20:33:55 2017 +0200
@@ -135,6 +135,15 @@
     Dest -> Z = ((1 - Source -> x - Source -> y) / Source -> y) * Source -> Y;
 }
 
+/*
+       The break point (24/116)^3 = (6/29)^3 is a very small amount of tristimulus
+       primary (0.008856).  Generally, this only happens for
+       nearly ideal blacks and for some orange / amber colors in transmission mode.
+       For example, the Z value of the orange turn indicator lamp lens on an
+       automobile will often be below this value.  But the Z does not
+       contribute to the perceived color directly.
+*/
+
 static
 cmsFloat64Number f(cmsFloat64Number t)
 {
--- a/jdk/src/java.desktop/share/native/liblcms/cmsplugin.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsplugin.c	Wed Jul 05 20:33:55 2017 +0200
@@ -712,15 +712,21 @@
 
 
 // Internal: get the memory area associanted with each context client
-// Returns the block assigned to the specific zone.
+// Returns the block assigned to the specific zone. Never return NULL.
 void* _cmsContextGetClientChunk(cmsContext ContextID, _cmsMemoryClient mc)
 {
     struct _cmsContext_struct* ctx;
     void *ptr;
 
-    if (mc < 0 || mc >= MemoryClientMax) {
-        cmsSignalError(ContextID, cmsERROR_RANGE, "Bad context client");
-        return NULL;
+    if ((int) mc < 0 || mc >= MemoryClientMax) {
+
+           cmsSignalError(ContextID, cmsERROR_INTERNAL, "Bad context client -- possible corruption");
+
+           // This is catastrophic. Should never reach here
+           _cmsAssert(0);
+
+           // Reverts to global context
+           return globalContext.chunks[UserPtr];
     }
 
     ctx = _cmsGetContext(ContextID);
@@ -909,7 +915,7 @@
 }
 
 
-
+/*
 static
 struct _cmsContext_struct* FindPrev(struct _cmsContext_struct* id)
 {
@@ -926,6 +932,7 @@
 
     return NULL;  // List is empty or only one element!
 }
+*/
 
 // Frees any resources associated with the given context,
 // and destroys the context placeholder.
@@ -961,8 +968,8 @@
 
             // Search for previous
             for (prev = _cmsContextPoolHead;
-                prev != NULL;
-                prev = prev ->Next)
+                 prev != NULL;
+                 prev = prev ->Next)
             {
                 if (prev -> Next == ctx) {
                     prev -> Next = ctx ->Next;
--- a/jdk/src/java.desktop/share/native/liblcms/cmssamp.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmssamp.c	Wed Jul 05 20:33:55 2017 +0200
@@ -30,7 +30,7 @@
 //---------------------------------------------------------------------------------
 //
 //  Little Color Management System
-//  Copyright (c) 1998-2010 Marti Maria Saguer
+//  Copyright (c) 1998-2014 Marti Maria Saguer
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the "Software"),
@@ -369,28 +369,7 @@
 
 }
 
-/*
-static
-cmsBool IsMonotonic(int n, const cmsFloat64Number Table[])
-{
-    int i;
-    cmsFloat64Number last;
 
-    last = Table[n-1];
-
-    for (i = n-2; i >= 0; --i) {
-
-        if (Table[i] > last)
-
-            return FALSE;
-        else
-            last = Table[i];
-
-    }
-
-    return TRUE;
-}
-*/
 
 // Calculates the black point of a destination profile.
 // This algorithm comes from the Adobe paper disclosing its black point compensation method.
@@ -515,7 +494,6 @@
 
 
     // Test for mid range straight (only on relative colorimetric)
-
     NearlyStraightMidrange = TRUE;
     MinL = outRamp[0]; MaxL = outRamp[255];
     if (Intent == INTENT_RELATIVE_COLORIMETRIC) {
@@ -531,7 +509,6 @@
         // DestinationBlackPoint shall be the same as initialLab.
         // Otherwise, the DestinationBlackPoint shall be determined
         // using curve fitting.
-
         if (NearlyStraightMidrange) {
 
             cmsLab2XYZ(NULL, BlackPoint, &InitialLab);
@@ -543,14 +520,12 @@
 
     // curve fitting: The round-trip curve normally looks like a nearly constant section at the black point,
     // with a corner and a nearly straight line to the white point.
-
     for (l=0; l < 256; l++) {
 
         yRamp[l] = (outRamp[l] - MinL) / (MaxL - MinL);
     }
 
     // find the black point using the least squares error quadratic curve fitting
-
     if (Intent == INTENT_RELATIVE_COLORIMETRIC) {
         lo = 0.1;
         hi = 0.5;
--- a/jdk/src/java.desktop/share/native/liblcms/cmstypes.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmstypes.c	Wed Jul 05 20:33:55 2017 +0200
@@ -1718,10 +1718,7 @@
                 else
                     for (j=0; j < 256; j++) {
 
-                        if (Tables != NULL)
-                            val = (cmsUInt8Number) FROM_16_TO_8(Tables->TheCurves[i]->Table16[j]);
-                        else
-                            val = (cmsUInt8Number) j;
+                        val = (cmsUInt8Number) FROM_16_TO_8(Tables->TheCurves[i]->Table16[j]);
 
                         if (!_cmsWriteUInt8Number(io, val)) return FALSE;
                     }
@@ -3548,7 +3545,6 @@
     if (n ->Desc == NULL) return NULL;
 
     ASCIIString = (char*) _cmsMalloc(self ->ContextID, SizeOfTag + 1);
-    if (ASCIIString == NULL) return NULL;
     if (io ->Read(io, ASCIIString, sizeof(char), SizeOfTag) != SizeOfTag) return NULL;
     ASCIIString[SizeOfTag] = 0;
     cmsMLUsetASCII(n ->Desc, cmsNoLanguage, cmsNoCountry, ASCIIString);
@@ -3576,7 +3572,6 @@
     // Now comes the text. The length is specified by the tag size
     TextSize = cmsMLUgetASCII(Value ->Desc, cmsNoLanguage, cmsNoCountry, NULL, 0);
     Text     = (char*) _cmsMalloc(self ->ContextID, TextSize);
-    if (Text == NULL) return FALSE;
     if (cmsMLUgetASCII(Value ->Desc, cmsNoLanguage, cmsNoCountry, Text, TextSize) != TextSize) return FALSE;
 
     if (!io ->Write(io, TextSize, Text)) return FALSE;
@@ -3674,7 +3669,6 @@
 
     TextSize = cmsMLUgetASCII(mlu, "PS", Section, NULL, 0);
     Text     = (char*) _cmsMalloc(self ->ContextID, TextSize);
-    if (Text == NULL) return FALSE;
 
     if (!_cmsWriteUInt32Number(io, TextSize)) return FALSE;
 
--- a/jdk/src/java.desktop/share/native/liblcms/cmsvirt.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsvirt.c	Wed Jul 05 20:33:55 2017 +0200
@@ -671,7 +671,7 @@
 // Create the ICC virtual profile for sRGB space
 cmsHPROFILE CMSEXPORT cmsCreate_sRGBProfileTHR(cmsContext ContextID)
 {
-       cmsCIExyY       D65;
+       cmsCIExyY       D65 = { 0.3127, 0.3290, 1.0 };
        cmsCIExyYTRIPLE Rec709Primaries = {
                                    {0.6400, 0.3300, 1.0},
                                    {0.3000, 0.6000, 1.0},
@@ -680,7 +680,7 @@
        cmsToneCurve* Gamma22[3];
        cmsHPROFILE  hsRGB;
 
-       cmsWhitePointFromTemp(&D65, 6504);
+      // cmsWhitePointFromTemp(&D65, 6504);
        Gamma22[0] = Gamma22[1] = Gamma22[2] = Build_sRGBGamma(ContextID);
        if (Gamma22[0] == NULL) return NULL;
 
@@ -708,6 +708,7 @@
                 cmsFloat64Number Contrast;
                 cmsFloat64Number Hue;
                 cmsFloat64Number Saturation;
+                cmsBool          lAdjustWP;
                 cmsCIEXYZ WPsrc, WPdest;
 
 } BCHSWADJUSTS, *LPBCHSWADJUSTS;
@@ -737,9 +738,10 @@
     cmsLCh2Lab(&LabOut, &LChOut);
 
     // Move white point in Lab
-
-    cmsLab2XYZ(&bchsw ->WPsrc,  &XYZ, &LabOut);
-    cmsXYZ2Lab(&bchsw ->WPdest, &LabOut, &XYZ);
+    if (bchsw->lAdjustWP) {
+           cmsLab2XYZ(&bchsw->WPsrc, &XYZ, &LabOut);
+           cmsXYZ2Lab(&bchsw->WPdest, &LabOut, &XYZ);
+    }
 
     // Back to encoded
 
@@ -773,18 +775,23 @@
     bchsw.Contrast   = Contrast;
     bchsw.Hue        = Hue;
     bchsw.Saturation = Saturation;
+    if (TempSrc == TempDest) {
 
-    cmsWhitePointFromTemp(&WhitePnt, TempSrc );
-    cmsxyY2XYZ(&bchsw.WPsrc, &WhitePnt);
+           bchsw.lAdjustWP = FALSE;
+    }
+    else {
+           bchsw.lAdjustWP = TRUE;
+           cmsWhitePointFromTemp(&WhitePnt, TempSrc);
+           cmsxyY2XYZ(&bchsw.WPsrc, &WhitePnt);
+           cmsWhitePointFromTemp(&WhitePnt, TempDest);
+           cmsxyY2XYZ(&bchsw.WPdest, &WhitePnt);
 
-    cmsWhitePointFromTemp(&WhitePnt, TempDest);
-    cmsxyY2XYZ(&bchsw.WPdest, &WhitePnt);
+    }
 
     hICC = cmsCreateProfilePlaceholder(ContextID);
     if (!hICC)                          // can't allocate
         return NULL;
 
-
     cmsSetDeviceClass(hICC,      cmsSigAbstractClass);
     cmsSetColorSpace(hICC,       cmsSigLabData);
     cmsSetPCS(hICC,              cmsSigLabData);
@@ -1017,12 +1024,14 @@
 
 } cmsAllowedLUT;
 
+#define cmsSig0 ((cmsTagSignature) 0)
+
 static const cmsAllowedLUT AllowedLUTTypes[] = {
 
-    { FALSE, 0,              cmsSigLut16Type,    4,  { cmsSigMatrixElemType,   cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType}},
-    { FALSE, 0,              cmsSigLut16Type,    3,  { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType}},
-    { FALSE, 0,              cmsSigLut16Type,    2,  { cmsSigCurveSetElemType, cmsSigCLutElemType}},
-    { TRUE , 0,              cmsSigLutAtoBType,  1,  { cmsSigCurveSetElemType }},
+    { FALSE, cmsSig0,        cmsSigLut16Type, 4, { cmsSigMatrixElemType, cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType } },
+    { FALSE, cmsSig0,        cmsSigLut16Type, 3, { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType } },
+    { FALSE, cmsSig0,        cmsSigLut16Type, 2, { cmsSigCurveSetElemType, cmsSigCLutElemType } },
+    { TRUE,  cmsSig0,        cmsSigLutAtoBType, 1, { cmsSigCurveSetElemType } },
     { TRUE , cmsSigAToB0Tag, cmsSigLutAtoBType,  3,  { cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType } },
     { TRUE , cmsSigAToB0Tag, cmsSigLutAtoBType,  3,  { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType   } },
     { TRUE , cmsSigAToB0Tag, cmsSigLutAtoBType,  5,  { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType }},
--- a/jdk/src/java.desktop/share/native/liblcms/cmsxform.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsxform.c	Wed Jul 05 20:33:55 2017 +0200
@@ -621,46 +621,48 @@
      _cmsTransformPluginChunkType* ctx = ( _cmsTransformPluginChunkType*) _cmsContextGetClientChunk(ContextID, TransformPlugin);
      _cmsTransformCollection* Plugin;
 
-    // Allocate needed memory
-    _cmsTRANSFORM* p = (_cmsTRANSFORM*) _cmsMallocZero(ContextID, sizeof(_cmsTRANSFORM));
-    if (!p) return NULL;
+       // Allocate needed memory
+       _cmsTRANSFORM* p = (_cmsTRANSFORM*)_cmsMallocZero(ContextID, sizeof(_cmsTRANSFORM));
+       if (!p) return NULL;
 
-    // Store the proposed pipeline
-    p ->Lut = lut;
+       // Store the proposed pipeline
+       p->Lut = lut;
 
-    // Let's see if any plug-in want to do the transform by itself
-    for (Plugin = ctx ->TransformCollection;
-        Plugin != NULL;
-        Plugin = Plugin ->Next) {
+       // Let's see if any plug-in want to do the transform by itself
+       if (p->Lut != NULL) {
 
-            if (Plugin ->Factory(&p->xform, &p->UserData, &p ->FreeUserData, &p ->Lut, InputFormat, OutputFormat, dwFlags)) {
+              for (Plugin = ctx->TransformCollection;
+                     Plugin != NULL;
+                     Plugin = Plugin->Next) {
 
-                // Last plugin in the declaration order takes control. We just keep
-                // the original parameters as a logging.
-                // Note that cmsFLAGS_CAN_CHANGE_FORMATTER is not set, so by default
-                // an optimized transform is not reusable. The plug-in can, however, change
-                // the flags and make it suitable.
+                     if (Plugin->Factory(&p->xform, &p->UserData, &p->FreeUserData, &p->Lut, InputFormat, OutputFormat, dwFlags)) {
 
-                p ->ContextID       = ContextID;
-                p ->InputFormat     = *InputFormat;
-                p ->OutputFormat    = *OutputFormat;
-                p ->dwOriginalFlags = *dwFlags;
+                            // Last plugin in the declaration order takes control. We just keep
+                            // the original parameters as a logging.
+                            // Note that cmsFLAGS_CAN_CHANGE_FORMATTER is not set, so by default
+                            // an optimized transform is not reusable. The plug-in can, however, change
+                            // the flags and make it suitable.
+
+                            p->ContextID = ContextID;
+                            p->InputFormat = *InputFormat;
+                            p->OutputFormat = *OutputFormat;
+                            p->dwOriginalFlags = *dwFlags;
 
-                // Fill the formatters just in case the optimized routine is interested.
-                // No error is thrown if the formatter doesn't exist. It is up to the optimization
-                // factory to decide what to do in those cases.
-                p ->FromInput      = _cmsGetFormatter(ContextID, *InputFormat,  cmsFormatterInput, CMS_PACK_FLAGS_16BITS).Fmt16;
-                p ->ToOutput       = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_16BITS).Fmt16;
-                p ->FromInputFloat = _cmsGetFormatter(ContextID, *InputFormat,  cmsFormatterInput, CMS_PACK_FLAGS_FLOAT).FmtFloat;
-                p ->ToOutputFloat  = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT).FmtFloat;
+                            // Fill the formatters just in case the optimized routine is interested.
+                            // No error is thrown if the formatter doesn't exist. It is up to the optimization
+                            // factory to decide what to do in those cases.
+                            p->FromInput = _cmsGetFormatter(ContextID, *InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_16BITS).Fmt16;
+                            p->ToOutput = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_16BITS).Fmt16;
+                            p->FromInputFloat = _cmsGetFormatter(ContextID, *InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT).FmtFloat;
+                            p->ToOutputFloat = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT).FmtFloat;
 
-                return p;
-            }
-    }
+                            return p;
+                     }
+              }
 
-    // Not suitable for the transform plug-in, let's check  the pipeline plug-in
-    if (p ->Lut != NULL)
-        _cmsOptimizePipeline(ContextID, &p->Lut, Intent, InputFormat, OutputFormat, dwFlags);
+              // Not suitable for the transform plug-in, let's check  the pipeline plug-in
+              _cmsOptimizePipeline(ContextID, &p->Lut, Intent, InputFormat, OutputFormat, dwFlags);
+       }
 
     // Check whatever this is a true floating point transform
     if (_cmsFormatterIsFloat(*InputFormat) && _cmsFormatterIsFloat(*OutputFormat)) {
--- a/jdk/src/java.desktop/share/native/liblcms/lcms2.h	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/lcms2.h	Wed Jul 05 20:33:55 2017 +0200
@@ -52,7 +52,7 @@
 //
 //---------------------------------------------------------------------------------
 //
-// Version 2.6
+// Version 2.7
 //
 
 #ifndef _lcms2_H
@@ -104,7 +104,7 @@
 #endif
 
 // Version/release
-#define LCMS_VERSION        2060
+#define LCMS_VERSION        2070
 
 // I will give the chance of redefining basic types for compilers that are not fully C99 compliant
 #ifndef CMS_BASIC_TYPES_ALREADY_DEFINED
@@ -213,27 +213,19 @@
 #   define CMS_USE_BIG_ENDIAN   1
 #endif
 
-#  ifdef TARGET_CPU_PPC
-#    if TARGET_CPU_PPC
-#      define CMS_USE_BIG_ENDIAN   1
-#    endif
-#  endif
 
 #if defined(__powerpc__) || defined(__ppc__) || defined(TARGET_CPU_PPC)
+#  if __powerpc__ || __ppc__ || TARGET_CPU_PPC
 #   define CMS_USE_BIG_ENDIAN   1
-#   if defined (__GNUC__) && defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN)
-#       if __BYTE_ORDER  == __LITTLE_ENDIAN
-//               // Don't use big endian for PowerPC little endian mode
+#   if defined (__GNUC__) && defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__)
+#       if __BYTE_ORDER__  == __ORDER_LITTLE_ENDIAN__
+                // Don't use big endian for PowerPC little endian mode
 #                undef CMS_USE_BIG_ENDIAN
 #       endif
+#     endif
 #   endif
 #endif
 
-// WORDS_BIGENDIAN takes precedence
-#if defined(_HOST_BIG_ENDIAN) || defined(__BIG_ENDIAN__) || defined(WORDS_BIGENDIAN)
-#   define CMS_USE_BIG_ENDIAN      1
-#endif
-
 #ifdef macintosh
 # ifdef __BIG_ENDIAN__
 #   define CMS_USE_BIG_ENDIAN      1
@@ -243,6 +235,12 @@
 # endif
 #endif
 
+// WORDS_BIGENDIAN takes precedence
+#if defined(_HOST_BIG_ENDIAN) || defined(__BIG_ENDIAN__) || defined(WORDS_BIGENDIAN)
+#   define CMS_USE_BIG_ENDIAN      1
+#endif
+
+
 // Calling convention -- this is hardly platform and compiler dependent
 #ifdef CMS_IS_WINDOWS_
 #  if defined(CMS_DLL) || defined(CMS_DLL_BUILD)
@@ -553,7 +551,8 @@
     cmsSigLab2FloatPCS                  = 0x64326C20,  // 'd2l '
     cmsSigFloatPCS2Lab                  = 0x6C326420,  // 'l2d '
     cmsSigXYZ2FloatPCS                  = 0x64327820,  // 'd2x '
-    cmsSigFloatPCS2XYZ                  = 0x78326420   // 'x2d '
+    cmsSigFloatPCS2XYZ                  = 0x78326420,  // 'x2d '
+    cmsSigClipNegativesElemType         = 0x636c7020   // 'clp '
 
 } cmsStageSignature;
 
@@ -1031,6 +1030,10 @@
 
     } cmsICCViewingConditions;
 
+// Get LittleCMS version (for shared objects) -----------------------------------------------------------------------------
+
+CMSAPI int               CMSEXPORT cmsGetEncodedCMMversion(void);
+
 // Support of non-standard functions --------------------------------------------------------------------------------------
 
 CMSAPI int               CMSEXPORT cmsstrcasecmp(const char* s1, const char* s2);
@@ -1509,7 +1512,7 @@
 
 CMSAPI cmsUInt32Number   CMSEXPORT cmsChannelsOf(cmsColorSpaceSignature ColorSpace);
 
-// Build a suitable formatter for the colorspace of this profile
+// Build a suitable formatter for the colorspace of this profile. nBytes=1 means 8 bits, nBytes=2 means 16 bits.
 CMSAPI cmsUInt32Number   CMSEXPORT cmsFormatterForColorspaceOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat);
 CMSAPI cmsUInt32Number   CMSEXPORT cmsFormatterForPCSOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat);
 
@@ -1538,6 +1541,7 @@
 CMSAPI cmsIOHANDLER*     CMSEXPORT cmsOpenIOhandlerFromStream(cmsContext ContextID, FILE* Stream);
 CMSAPI cmsIOHANDLER*     CMSEXPORT cmsOpenIOhandlerFromMem(cmsContext ContextID, void *Buffer, cmsUInt32Number size, const char* AccessMode);
 CMSAPI cmsIOHANDLER*     CMSEXPORT cmsOpenIOhandlerFromNULL(cmsContext ContextID);
+CMSAPI cmsIOHANDLER*     CMSEXPORT cmsGetProfileIOhandler(cmsHPROFILE hProfile);
 CMSAPI cmsBool           CMSEXPORT cmsCloseIOhandler(cmsIOHANDLER* io);
 
 // MD5 message digest --------------------------------------------------------------------------------------------------
@@ -1672,6 +1676,10 @@
 #define cmsFLAGS_CLUT_POST_LINEARIZATION  0x0001    // create postlinearization tables if possible
 #define cmsFLAGS_CLUT_PRE_LINEARIZATION   0x0010    // create prelinearization tables if possible
 
+// Specific to unbounded mode
+#define cmsFLAGS_NONEGATIVES              0x8000    // Prevent negative numbers in floating point transforms
+
+
 // Fine-tune control over number of gridpoints
 #define cmsFLAGS_GRIDPOINTS(n)           (((n) & 0xFF) << 16)
 
--- a/jdk/src/java.desktop/share/native/liblcms/lcms2_internal.h	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/lcms2_internal.h	Wed Jul 05 20:33:55 2017 +0200
@@ -223,11 +223,17 @@
 // Microsoft felt that it was necessary to keep it set at -1 for an unlocked critical
 // section, even when they changed the underlying algorithm to be more scalable.
 // The final parts of the critical section object are unimportant, and can be set
-// to zero for their defaults. This yields an initialization macro:
+// to zero for their defaults. This yields to an initialization macro:
 
 typedef CRITICAL_SECTION _cmsMutex;
 
-#define CMS_MUTEX_INITIALIZER {(void*) -1,-1,0,0,0,0}
+#define CMS_MUTEX_INITIALIZER {(PRTL_CRITICAL_SECTION_DEBUG) -1,-1,0,0,0,0}
+
+#ifdef _MSC_VER
+#    if (_MSC_VER >= 1800)
+#          pragma warning(disable : 26135)
+#    endif
+#endif
 
 cmsINLINE int _cmsLockPrimitive(_cmsMutex *m)
 {
@@ -313,38 +319,38 @@
 
 cmsINLINE int _cmsLockPrimitive(_cmsMutex *m)
 {
+    cmsUNUSED_PARAMETER(m);
         return 0;
-    cmsUNUSED_PARAMETER(m);
 }
 
 cmsINLINE int _cmsUnlockPrimitive(_cmsMutex *m)
 {
+    cmsUNUSED_PARAMETER(m);
         return 0;
-    cmsUNUSED_PARAMETER(m);
 }
 
 cmsINLINE int _cmsInitMutexPrimitive(_cmsMutex *m)
 {
+    cmsUNUSED_PARAMETER(m);
         return 0;
-    cmsUNUSED_PARAMETER(m);
 }
 
 cmsINLINE int _cmsDestroyMutexPrimitive(_cmsMutex *m)
 {
+    cmsUNUSED_PARAMETER(m);
         return 0;
-    cmsUNUSED_PARAMETER(m);
 }
 
 cmsINLINE int _cmsEnterCriticalSectionPrimitive(_cmsMutex *m)
 {
+    cmsUNUSED_PARAMETER(m);
         return 0;
-    cmsUNUSED_PARAMETER(m);
 }
 
 cmsINLINE int _cmsLeaveCriticalSectionPrimitive(_cmsMutex *m)
 {
+    cmsUNUSED_PARAMETER(m);
         return 0;
-    cmsUNUSED_PARAMETER(m);
 }
 #endif
 
@@ -852,6 +858,8 @@
 cmsStage*        _cmsStageNormalizeFromXyzFloat(cmsContext ContextID);
 cmsStage*        _cmsStageNormalizeToLabFloat(cmsContext ContextID);
 cmsStage*        _cmsStageNormalizeToXyzFloat(cmsContext ContextID);
+cmsStage*        _cmsStageClipNegatives(cmsContext ContextID, int nChannels);
+
 
 // For curve set only
 cmsToneCurve**     _cmsStageGetPtrToCurveSet(const cmsStage* mpe);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/COPYING	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,19 @@
+The GIFLIB distribution is Copyright (c) 1997  Eric S. Raymond
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
--- a/jdk/src/java.desktop/share/native/libsplashscreen/giflib/dgif_lib.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/dgif_lib.c	Wed Jul 05 20:33:55 2017 +0200
@@ -23,219 +23,211 @@
  */
 
 /******************************************************************************
- *   "Gif-Lib" - Yet another gif library.
- *
- * Written by:  Gershon Elber            IBM PC Ver 1.1,    Aug. 1990
- ******************************************************************************
- * The kernel of the GIF Decoding process can be found here.
- ******************************************************************************
- * History:
- * 16 Jun 89 - Version 1.0 by Gershon Elber.
- *  3 Sep 90 - Version 1.1 by Gershon Elber (Support for Gif89, Unique names).
- *****************************************************************************/
+
+dgif_lib.c - GIF decoding
 
-/* !!!! */
+The functions here and in egif_lib.c are partitioned carefully so that
+if you only require one of read and write capability, only one of these
+two modules will be linked.  Preserve this property!
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+*****************************************************************************/
 
 #include <stdlib.h>
-#if defined (__MSDOS__) && !defined(__DJGPP__) && !defined(__GNUC__)
-#include <io.h>
-#include <alloc.h>
-#include <sys\stat.h>
-#else
-#include <sys/types.h>
-#include <sys/stat.h>
-#endif /* __MSDOS__ */
+#include <limits.h>
+#include <stdint.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
 
 #ifdef _WIN32
 #include <io.h>
-#define _OPEN_BINARY
 #else
 #include <unistd.h>
-#endif
+#endif /* _WIN32 */
 
-#include <fcntl.h>
-
-#include <stdio.h>
-#include <string.h>
 #include "gif_lib.h"
 #include "gif_lib_private.h"
 
-#define COMMENT_EXT_FUNC_CODE 0xfe  /* Extension function code for
-                                       comment. */
+/* compose unsigned little endian value */
+#define UNSIGNED_LITTLE_ENDIAN(lo, hi) ((lo) | ((hi) << 8))
 
 /* avoid extra function call in case we use fread (TVT) */
 #define READ(_gif,_buf,_len)                                     \
   (((GifFilePrivateType*)_gif->Private)->Read ?                   \
-    (size_t)((GifFilePrivateType*)_gif->Private)->Read(_gif,_buf,_len) : \
+    ((GifFilePrivateType*)_gif->Private)->Read(_gif,_buf,_len) : \
     fread(_buf,1,_len,((GifFilePrivateType*)_gif->Private)->File))
 
-static int DGifGetWord(GifFileType *GifFile, int *Word);
+static int DGifGetWord(GifFileType *GifFile, GifWord *Word);
 static int DGifSetupDecompress(GifFileType *GifFile);
 static int DGifDecompressLine(GifFileType *GifFile, GifPixelType *Line,
                               int LineLen);
-static int DGifGetPrefixChar(unsigned int *Prefix, int Code, int ClearCode);
+static int DGifGetPrefixChar(GifPrefixType *Prefix, int Code, int ClearCode);
 static int DGifDecompressInput(GifFileType *GifFile, int *Code);
 static int DGifBufferedInput(GifFileType *GifFile, GifByteType *Buf,
                              GifByteType *NextByte);
 
 /******************************************************************************
- * Open a new gif file for read, given by its name.
- * Returns GifFileType pointer dynamically allocated which serves as the gif
- * info record. _GifError is cleared if succesfull.
- *****************************************************************************/
+ Open a new GIF file for read, given by its name.
+ Returns dynamically allocated GifFileType pointer which serves as the GIF
+ info record.
+******************************************************************************/
 GifFileType *
-DGifOpenFileName(const char *FileName) {
+DGifOpenFileName(const char *FileName, int *Error)
+{
     int FileHandle;
     GifFileType *GifFile;
 
-    if ((FileHandle = open(FileName, O_RDONLY
-#if defined(__MSDOS__) || defined(_OPEN_BINARY)
-                           | O_BINARY
-#endif /* __MSDOS__ || _OPEN_BINARY */
-         )) == -1) {
-        _GifError = D_GIF_ERR_OPEN_FAILED;
+    if ((FileHandle = open(FileName, O_RDONLY)) == -1) {
+        if (Error != NULL)
+            *Error = D_GIF_ERR_OPEN_FAILED;
         return NULL;
     }
 
-    GifFile = DGifOpenFileHandle(FileHandle);
-    if (GifFile == (GifFileType *)NULL)
-        close(FileHandle);
+    GifFile = DGifOpenFileHandle(FileHandle, Error);
     return GifFile;
 }
 
 /******************************************************************************
- * Update a new gif file, given its file handle.
- * Returns GifFileType pointer dynamically allocated which serves as the gif
- * info record. _GifError is cleared if succesfull.
- *****************************************************************************/
+ Update a new GIF file, given its file handle.
+ Returns dynamically allocated GifFileType pointer which serves as the GIF
+ info record.
+******************************************************************************/
 GifFileType *
-DGifOpenFileHandle(int FileHandle) {
-
-    unsigned char Buf[GIF_STAMP_LEN + 1];
+DGifOpenFileHandle(int FileHandle, int *Error)
+{
+    char Buf[GIF_STAMP_LEN + 1];
     GifFileType *GifFile;
     GifFilePrivateType *Private;
     FILE *f;
 
     GifFile = (GifFileType *)malloc(sizeof(GifFileType));
     if (GifFile == NULL) {
-        _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+        if (Error != NULL)
+            *Error = D_GIF_ERR_NOT_ENOUGH_MEM;
+        (void)close(FileHandle);
         return NULL;
     }
 
-    memset(GifFile, '\0', sizeof(GifFileType));
+    /*@i1@*/memset(GifFile, '\0', sizeof(GifFileType));
+
+    /* Belt and suspenders, in case the null pointer isn't zero */
+    GifFile->SavedImages = NULL;
+    GifFile->SColorMap = NULL;
 
     Private = (GifFilePrivateType *)malloc(sizeof(GifFilePrivateType));
     if (Private == NULL) {
-        _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+        if (Error != NULL)
+            *Error = D_GIF_ERR_NOT_ENOUGH_MEM;
+        (void)close(FileHandle);
         free((char *)GifFile);
         return NULL;
     }
-#ifdef __MSDOS__
-    setmode(FileHandle, O_BINARY);    /* Make sure it is in binary mode. */
-#endif /* __MSDOS__ */
+#ifdef _WIN32
+    _setmode(FileHandle, O_BINARY);    /* Make sure it is in binary mode. */
+#endif /* _WIN32 */
 
     f = fdopen(FileHandle, "rb");    /* Make it into a stream: */
 
-#ifdef __MSDOS__
-    setvbuf(f, NULL, _IOFBF, GIF_FILE_BUFFER_SIZE);    /* And inc. stream
-                                                          buffer. */
-#endif /* __MSDOS__ */
-
-    GifFile->Private = (VoidPtr)Private;
+    /*@-mustfreeonly@*/
+    GifFile->Private = (void *)Private;
     Private->FileHandle = FileHandle;
     Private->File = f;
     Private->FileState = FILE_STATE_READ;
-    Private->Read = 0;    /* don't use alternate input method (TVT) */
-    GifFile->UserData = 0;    /* TVT */
+    Private->Read = NULL;        /* don't use alternate input method (TVT) */
+    GifFile->UserData = NULL;    /* TVT */
+    /*@=mustfreeonly@*/
 
-    /* Lets see if this is a GIF file: */
-    if (READ(GifFile, Buf, GIF_STAMP_LEN) != GIF_STAMP_LEN) {
-        _GifError = D_GIF_ERR_READ_FAILED;
-        fclose(f);
+    /* Let's see if this is a GIF file: */
+    /* coverity[check_return] */
+    if (READ(GifFile, (unsigned char *)Buf, GIF_STAMP_LEN) != GIF_STAMP_LEN) {
+        if (Error != NULL)
+            *Error = D_GIF_ERR_READ_FAILED;
+        (void)fclose(f);
         free((char *)Private);
         free((char *)GifFile);
         return NULL;
     }
 
-    /* The GIF Version number is ignored at this time. Maybe we should do
-     * something more useful with it.  */
+    /* Check for GIF prefix at start of file */
     Buf[GIF_STAMP_LEN] = 0;
-    if (strncmp(GIF_STAMP, (const char*)Buf, GIF_VERSION_POS) != 0) {
-        _GifError = D_GIF_ERR_NOT_GIF_FILE;
-        fclose(f);
+    if (strncmp(GIF_STAMP, Buf, GIF_VERSION_POS) != 0) {
+        if (Error != NULL)
+            *Error = D_GIF_ERR_NOT_GIF_FILE;
+        (void)fclose(f);
         free((char *)Private);
         free((char *)GifFile);
         return NULL;
     }
 
     if (DGifGetScreenDesc(GifFile) == GIF_ERROR) {
-        fclose(f);
+        (void)fclose(f);
         free((char *)Private);
         free((char *)GifFile);
         return NULL;
     }
 
-    _GifError = 0;
+    GifFile->Error = 0;
+
+    /* What version of GIF? */
+    Private->gif89 = (Buf[GIF_VERSION_POS] == '9');
 
     return GifFile;
 }
 
 /******************************************************************************
- * GifFileType constructor with user supplied input function (TVT)
- *****************************************************************************/
+ GifFileType constructor with user supplied input function (TVT)
+******************************************************************************/
 GifFileType *
-DGifOpen(void *userData,
-         InputFunc readFunc) {
-
-    unsigned char Buf[GIF_STAMP_LEN + 1];
+DGifOpen(void *userData, InputFunc readFunc, int *Error)
+{
+    char Buf[GIF_STAMP_LEN + 1];
     GifFileType *GifFile;
     GifFilePrivateType *Private;
 
-    if (!readFunc) {
-        _GifError = D_GIF_ERR_READ_FAILED;
-        return NULL;
-    }
-
     GifFile = (GifFileType *)malloc(sizeof(GifFileType));
     if (GifFile == NULL) {
-        _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+        if (Error != NULL)
+            *Error = D_GIF_ERR_NOT_ENOUGH_MEM;
         return NULL;
     }
 
     memset(GifFile, '\0', sizeof(GifFileType));
 
+    /* Belt and suspenders, in case the null pointer isn't zero */
+    GifFile->SavedImages = NULL;
+    GifFile->SColorMap = NULL;
+
     Private = (GifFilePrivateType *)malloc(sizeof(GifFilePrivateType));
     if (!Private) {
-        _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+        if (Error != NULL)
+            *Error = D_GIF_ERR_NOT_ENOUGH_MEM;
         free((char *)GifFile);
         return NULL;
     }
 
-    GifFile->Private = (VoidPtr)Private;
+    GifFile->Private = (void *)Private;
     Private->FileHandle = 0;
-    Private->File = 0;
+    Private->File = NULL;
     Private->FileState = FILE_STATE_READ;
 
     Private->Read = readFunc;    /* TVT */
     GifFile->UserData = userData;    /* TVT */
 
     /* Lets see if this is a GIF file: */
-    if (READ(GifFile, Buf, GIF_STAMP_LEN) != GIF_STAMP_LEN) {
-        _GifError = D_GIF_ERR_READ_FAILED;
+    /* coverity[check_return] */
+    if (READ(GifFile, (unsigned char *)Buf, GIF_STAMP_LEN) != GIF_STAMP_LEN) {
+        if (Error != NULL)
+            *Error = D_GIF_ERR_READ_FAILED;
         free((char *)Private);
         free((char *)GifFile);
         return NULL;
     }
 
-    /* The GIF Version number is ignored at this time. Maybe we should do
-     * something more useful with it. */
-    Buf[GIF_STAMP_LEN] = 0;
-    if (strncmp(GIF_STAMP, (const char*)Buf, GIF_VERSION_POS) != 0) {
-        _GifError = D_GIF_ERR_NOT_GIF_FILE;
+    /* Check for GIF prefix at start of file */
+    Buf[GIF_STAMP_LEN] = '\0';
+    if (strncmp(GIF_STAMP, Buf, GIF_VERSION_POS) != 0) {
+        if (Error != NULL)
+            *Error = D_GIF_ERR_NOT_GIF_FILE;
         free((char *)Private);
         free((char *)GifFile);
         return NULL;
@@ -244,28 +236,34 @@
     if (DGifGetScreenDesc(GifFile) == GIF_ERROR) {
         free((char *)Private);
         free((char *)GifFile);
+        if (Error != NULL)
+            *Error = D_GIF_ERR_NO_SCRN_DSCR;
         return NULL;
     }
 
-    _GifError = 0;
+    GifFile->Error = 0;
+
+    /* What version of GIF? */
+    Private->gif89 = (Buf[GIF_VERSION_POS] == '9');
 
     return GifFile;
 }
 
 /******************************************************************************
- * This routine should be called before any other DGif calls. Note that
- * this routine is called automatically from DGif file open routines.
- *****************************************************************************/
+ This routine should be called before any other DGif calls. Note that
+ this routine is called automatically from DGif file open routines.
+******************************************************************************/
 int
-DGifGetScreenDesc(GifFileType * GifFile) {
-
-    int i, BitsPerPixel;
+DGifGetScreenDesc(GifFileType *GifFile)
+{
+    int BitsPerPixel;
+    bool SortFlag;
     GifByteType Buf[3];
     GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
 
     if (!IS_READABLE(Private)) {
         /* This file was NOT open for reading: */
-        _GifError = D_GIF_ERR_NOT_READABLE;
+        GifFile->Error = D_GIF_ERR_NOT_READABLE;
         return GIF_ERROR;
     }
 
@@ -275,25 +273,33 @@
         return GIF_ERROR;
 
     if (READ(GifFile, Buf, 3) != 3) {
-        _GifError = D_GIF_ERR_READ_FAILED;
+        GifFile->Error = D_GIF_ERR_READ_FAILED;
+        GifFreeMapObject(GifFile->SColorMap);
+        GifFile->SColorMap = NULL;
         return GIF_ERROR;
     }
     GifFile->SColorResolution = (((Buf[0] & 0x70) + 1) >> 4) + 1;
+    SortFlag = (Buf[0] & 0x08) != 0;
     BitsPerPixel = (Buf[0] & 0x07) + 1;
     GifFile->SBackGroundColor = Buf[1];
+    GifFile->AspectByte = Buf[2];
     if (Buf[0] & 0x80) {    /* Do we have global color map? */
+        int i;
 
-        GifFile->SColorMap = MakeMapObject(1 << BitsPerPixel, NULL);
+        GifFile->SColorMap = GifMakeMapObject(1 << BitsPerPixel, NULL);
         if (GifFile->SColorMap == NULL) {
-            _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+            GifFile->Error = D_GIF_ERR_NOT_ENOUGH_MEM;
             return GIF_ERROR;
         }
 
         /* Get the global color map: */
+        GifFile->SColorMap->SortFlag = SortFlag;
         for (i = 0; i < GifFile->SColorMap->ColorCount; i++) {
+            /* coverity[check_return] */
             if (READ(GifFile, Buf, 3) != 3) {
-                FreeMapObject(GifFile->SColorMap);
-                _GifError = D_GIF_ERR_READ_FAILED;
+                GifFreeMapObject(GifFile->SColorMap);
+                GifFile->SColorMap = NULL;
+                GifFile->Error = D_GIF_ERR_READ_FAILED;
                 return GIF_ERROR;
             }
             GifFile->SColorMap->Colors[i].Red = Buf[0];
@@ -308,39 +314,39 @@
 }
 
 /******************************************************************************
- * This routine should be called before any attempt to read an image.
- *****************************************************************************/
+ This routine should be called before any attempt to read an image.
+******************************************************************************/
 int
-DGifGetRecordType(GifFileType * GifFile,
-                  GifRecordType * Type) {
-
+DGifGetRecordType(GifFileType *GifFile, GifRecordType* Type)
+{
     GifByteType Buf;
     GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
 
     if (!IS_READABLE(Private)) {
         /* This file was NOT open for reading: */
-        _GifError = D_GIF_ERR_NOT_READABLE;
+        GifFile->Error = D_GIF_ERR_NOT_READABLE;
         return GIF_ERROR;
     }
 
+    /* coverity[check_return] */
     if (READ(GifFile, &Buf, 1) != 1) {
-        _GifError = D_GIF_ERR_READ_FAILED;
+        GifFile->Error = D_GIF_ERR_READ_FAILED;
         return GIF_ERROR;
     }
 
     switch (Buf) {
-      case ',':
+      case DESCRIPTOR_INTRODUCER:
           *Type = IMAGE_DESC_RECORD_TYPE;
           break;
-      case '!':
+      case EXTENSION_INTRODUCER:
           *Type = EXTENSION_RECORD_TYPE;
           break;
-      case ';':
+      case TERMINATOR_INTRODUCER:
           *Type = TERMINATE_RECORD_TYPE;
           break;
       default:
           *Type = UNDEFINED_RECORD_TYPE;
-          _GifError = D_GIF_ERR_WRONG_RECORD;
+          GifFile->Error = D_GIF_ERR_WRONG_RECORD;
           return GIF_ERROR;
     }
 
@@ -348,20 +354,20 @@
 }
 
 /******************************************************************************
- * This routine should be called before any attempt to read an image.
- * Note it is assumed the Image desc. header (',') has been read.
- *****************************************************************************/
+ This routine should be called before any attempt to read an image.
+ Note it is assumed the Image desc. header has been read.
+******************************************************************************/
 int
-DGifGetImageDesc(GifFileType * GifFile) {
-
-    int i, BitsPerPixel;
+DGifGetImageDesc(GifFileType *GifFile)
+{
+    unsigned int BitsPerPixel;
     GifByteType Buf[3];
     GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
     SavedImage *sp;
 
     if (!IS_READABLE(Private)) {
         /* This file was NOT open for reading: */
-        _GifError = D_GIF_ERR_NOT_READABLE;
+        GifFile->Error = D_GIF_ERR_NOT_READABLE;
         return GIF_ERROR;
     }
 
@@ -371,51 +377,57 @@
         DGifGetWord(GifFile, &GifFile->Image.Height) == GIF_ERROR)
         return GIF_ERROR;
     if (READ(GifFile, Buf, 1) != 1) {
-        _GifError = D_GIF_ERR_READ_FAILED;
+        GifFile->Error = D_GIF_ERR_READ_FAILED;
+        GifFreeMapObject(GifFile->Image.ColorMap);
+        GifFile->Image.ColorMap = NULL;
         return GIF_ERROR;
     }
     BitsPerPixel = (Buf[0] & 0x07) + 1;
-    GifFile->Image.Interlace = (Buf[0] & 0x40);
-    if (Buf[0] & 0x80) {    /* Does this image have local color map? */
+    GifFile->Image.Interlace = (Buf[0] & 0x40) ? true : false;
 
-        /*** FIXME: Why do we check both of these in order to do this?
-         * Why do we have both Image and SavedImages? */
-        if (GifFile->Image.ColorMap && GifFile->SavedImages == NULL)
-            FreeMapObject(GifFile->Image.ColorMap);
+    /* Setup the colormap */
+    if (GifFile->Image.ColorMap) {
+        GifFreeMapObject(GifFile->Image.ColorMap);
+        GifFile->Image.ColorMap = NULL;
+    }
+    /* Does this image have local color map? */
+    if (Buf[0] & 0x80) {
+        unsigned int i;
 
-        GifFile->Image.ColorMap = MakeMapObject(1 << BitsPerPixel, NULL);
+        GifFile->Image.ColorMap = GifMakeMapObject(1 << BitsPerPixel, NULL);
         if (GifFile->Image.ColorMap == NULL) {
-            _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+            GifFile->Error = D_GIF_ERR_NOT_ENOUGH_MEM;
             return GIF_ERROR;
         }
 
         /* Get the image local color map: */
         for (i = 0; i < GifFile->Image.ColorMap->ColorCount; i++) {
+            /* coverity[check_return] */
             if (READ(GifFile, Buf, 3) != 3) {
-                FreeMapObject(GifFile->Image.ColorMap);
-                _GifError = D_GIF_ERR_READ_FAILED;
+                GifFreeMapObject(GifFile->Image.ColorMap);
+                GifFile->Error = D_GIF_ERR_READ_FAILED;
+                GifFile->Image.ColorMap = NULL;
                 return GIF_ERROR;
             }
             GifFile->Image.ColorMap->Colors[i].Red = Buf[0];
             GifFile->Image.ColorMap->Colors[i].Green = Buf[1];
             GifFile->Image.ColorMap->Colors[i].Blue = Buf[2];
         }
-    } else if (GifFile->Image.ColorMap) {
-        FreeMapObject(GifFile->Image.ColorMap);
-        GifFile->Image.ColorMap = NULL;
     }
 
     if (GifFile->SavedImages) {
-        if ((GifFile->SavedImages = (SavedImage *)realloc(GifFile->SavedImages,
-                                      sizeof(SavedImage) *
-                                      (GifFile->ImageCount + 1))) == NULL) {
-            _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+        SavedImage* new_saved_images =
+            (SavedImage *)realloc(GifFile->SavedImages,
+                            sizeof(SavedImage) * (GifFile->ImageCount + 1));
+        if (new_saved_images == NULL) {
+            GifFile->Error = D_GIF_ERR_NOT_ENOUGH_MEM;
             return GIF_ERROR;
         }
+        GifFile->SavedImages = new_saved_images;
     } else {
         if ((GifFile->SavedImages =
              (SavedImage *) malloc(sizeof(SavedImage))) == NULL) {
-            _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+            GifFile->Error = D_GIF_ERR_NOT_ENOUGH_MEM;
             return GIF_ERROR;
         }
     }
@@ -423,11 +435,11 @@
     sp = &GifFile->SavedImages[GifFile->ImageCount];
     memcpy(&sp->ImageDesc, &GifFile->Image, sizeof(GifImageDesc));
     if (GifFile->Image.ColorMap != NULL) {
-        sp->ImageDesc.ColorMap = MakeMapObject(
+        sp->ImageDesc.ColorMap = GifMakeMapObject(
                                  GifFile->Image.ColorMap->ColorCount,
                                  GifFile->Image.ColorMap->Colors);
         if (sp->ImageDesc.ColorMap == NULL) {
-            _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+            GifFile->Error = D_GIF_ERR_NOT_ENOUGH_MEM;
             return GIF_ERROR;
         }
     }
@@ -440,43 +452,40 @@
     Private->PixelCount = (long)GifFile->Image.Width *
        (long)GifFile->Image.Height;
 
-    return DGifSetupDecompress(GifFile);  /* Reset decompress algorithm parameters. */
+    /* Reset decompress algorithm parameters. */
+    return DGifSetupDecompress(GifFile);
 }
 
 /******************************************************************************
- * Get one full scanned line (Line) of length LineLen from GIF file.
- *****************************************************************************/
+ Get one full scanned line (Line) of length LineLen from GIF file.
+******************************************************************************/
 int
-DGifGetLine(GifFileType * GifFile,
-            GifPixelType * Line,
-            int LineLen) {
-
+DGifGetLine(GifFileType *GifFile, GifPixelType *Line, int LineLen)
+{
     GifByteType *Dummy;
     GifFilePrivateType *Private = (GifFilePrivateType *) GifFile->Private;
 
     if (!IS_READABLE(Private)) {
         /* This file was NOT open for reading: */
-        _GifError = D_GIF_ERR_NOT_READABLE;
+        GifFile->Error = D_GIF_ERR_NOT_READABLE;
         return GIF_ERROR;
     }
 
     if (!LineLen)
         LineLen = GifFile->Image.Width;
 
-#if defined(__MSDOS__) || defined(__GNUC__)
     if ((Private->PixelCount -= LineLen) > 0xffff0000UL) {
-#else
-    if ((Private->PixelCount -= LineLen) > 0xffff0000) {
-#endif /* __MSDOS__ */
-        _GifError = D_GIF_ERR_DATA_TOO_BIG;
+        GifFile->Error = D_GIF_ERR_DATA_TOO_BIG;
         return GIF_ERROR;
     }
 
     if (DGifDecompressLine(GifFile, Line, LineLen) == GIF_OK) {
         if (Private->PixelCount == 0) {
-            /* We probably would not be called any more, so lets clean
-             * everything before we return: need to flush out all rest of
-             * image until empty block (size 0) detected. We use GetCodeNext. */
+            /* We probably won't be called any more, so let's clean up
+             * everything before we return: need to flush out all the
+             * rest of image until an empty block (size 0)
+             * detected. We use GetCodeNext.
+             */
             do
                 if (DGifGetCodeNext(GifFile, &Dummy) == GIF_ERROR)
                     return GIF_ERROR;
@@ -488,35 +497,32 @@
 }
 
 /******************************************************************************
- * Put one pixel (Pixel) into GIF file.
- *****************************************************************************/
+ Put one pixel (Pixel) into GIF file.
+******************************************************************************/
 int
-DGifGetPixel(GifFileType * GifFile,
-             GifPixelType Pixel) {
-
+DGifGetPixel(GifFileType *GifFile, GifPixelType Pixel)
+{
     GifByteType *Dummy;
     GifFilePrivateType *Private = (GifFilePrivateType *) GifFile->Private;
 
     if (!IS_READABLE(Private)) {
         /* This file was NOT open for reading: */
-        _GifError = D_GIF_ERR_NOT_READABLE;
+        GifFile->Error = D_GIF_ERR_NOT_READABLE;
         return GIF_ERROR;
     }
-#if defined(__MSDOS__) || defined(__GNUC__)
     if (--Private->PixelCount > 0xffff0000UL)
-#else
-    if (--Private->PixelCount > 0xffff0000)
-#endif /* __MSDOS__ */
     {
-        _GifError = D_GIF_ERR_DATA_TOO_BIG;
+        GifFile->Error = D_GIF_ERR_DATA_TOO_BIG;
         return GIF_ERROR;
     }
 
     if (DGifDecompressLine(GifFile, &Pixel, 1) == GIF_OK) {
         if (Private->PixelCount == 0) {
-            /* We probably would not be called any more, so lets clean
-             * everything before we return: need to flush out all rest of
-             * image until empty block (size 0) detected. We use GetCodeNext. */
+            /* We probably won't be called any more, so let's clean up
+             * everything before we return: need to flush out all the
+             * rest of image until an empty block (size 0)
+             * detected. We use GetCodeNext.
+             */
             do
                 if (DGifGetCodeNext(GifFile, &Dummy) == GIF_ERROR)
                     return GIF_ERROR;
@@ -528,28 +534,27 @@
 }
 
 /******************************************************************************
- * Get an extension block (see GIF manual) from gif file. This routine only
- * returns the first data block, and DGifGetExtensionNext should be called
- * after this one until NULL extension is returned.
- * The Extension should NOT be freed by the user (not dynamically allocated).
- * Note it is assumed the Extension desc. header ('!') has been read.
- *****************************************************************************/
+ Get an extension block (see GIF manual) from GIF file. This routine only
+ returns the first data block, and DGifGetExtensionNext should be called
+ after this one until NULL extension is returned.
+ The Extension should NOT be freed by the user (not dynamically allocated).
+ Note it is assumed the Extension description header has been read.
+******************************************************************************/
 int
-DGifGetExtension(GifFileType * GifFile,
-                 int *ExtCode,
-                 GifByteType ** Extension) {
-
+DGifGetExtension(GifFileType *GifFile, int *ExtCode, GifByteType **Extension)
+{
     GifByteType Buf;
     GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
 
     if (!IS_READABLE(Private)) {
         /* This file was NOT open for reading: */
-        _GifError = D_GIF_ERR_NOT_READABLE;
+        GifFile->Error = D_GIF_ERR_NOT_READABLE;
         return GIF_ERROR;
     }
 
+    /* coverity[check_return] */
     if (READ(GifFile, &Buf, 1) != 1) {
-        _GifError = D_GIF_ERR_READ_FAILED;
+        GifFile->Error = D_GIF_ERR_READ_FAILED;
         return GIF_ERROR;
     }
     *ExtCode = Buf;
@@ -558,26 +563,26 @@
 }
 
 /******************************************************************************
- * Get a following extension block (see GIF manual) from gif file. This
- * routine should be called until NULL Extension is returned.
- * The Extension should NOT be freed by the user (not dynamically allocated).
- *****************************************************************************/
+ Get a following extension block (see GIF manual) from GIF file. This
+ routine should be called until NULL Extension is returned.
+ The Extension should NOT be freed by the user (not dynamically allocated).
+******************************************************************************/
 int
-DGifGetExtensionNext(GifFileType * GifFile,
-                     GifByteType ** Extension) {
-
+DGifGetExtensionNext(GifFileType *GifFile, GifByteType ** Extension)
+{
     GifByteType Buf;
     GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
 
     if (READ(GifFile, &Buf, 1) != 1) {
-        _GifError = D_GIF_ERR_READ_FAILED;
+        GifFile->Error = D_GIF_ERR_READ_FAILED;
         return GIF_ERROR;
     }
     if (Buf > 0) {
         *Extension = Private->Buf;    /* Use private unused buffer. */
         (*Extension)[0] = Buf;  /* Pascal strings notation (pos. 0 is len.). */
+        /* coverity[tainted_data,check_return] */
         if (READ(GifFile, &((*Extension)[1]), Buf) != Buf) {
-            _GifError = D_GIF_ERR_READ_FAILED;
+            GifFile->Error = D_GIF_ERR_READ_FAILED;
             return GIF_ERROR;
         }
     } else
@@ -587,91 +592,141 @@
 }
 
 /******************************************************************************
- * This routine should be called last, to close the GIF file.
- *****************************************************************************/
-int
-DGifCloseFile(GifFileType * GifFile) {
+ Extract a Graphics Control Block from raw extension data
+******************************************************************************/
+
+int DGifExtensionToGCB(const size_t GifExtensionLength,
+                       const GifByteType *GifExtension,
+                       GraphicsControlBlock *GCB)
+{
+    if (GifExtensionLength != 4) {
+        return GIF_ERROR;
+    }
+
+    GCB->DisposalMode = (GifExtension[0] >> 2) & 0x07;
+    GCB->UserInputFlag = (GifExtension[0] & 0x02) != 0;
+    GCB->DelayTime = UNSIGNED_LITTLE_ENDIAN(GifExtension[1], GifExtension[2]);
+    if (GifExtension[0] & 0x01)
+        GCB->TransparentColor = (int)GifExtension[3];
+    else
+        GCB->TransparentColor = NO_TRANSPARENT_COLOR;
+
+    return GIF_OK;
+}
+
+/******************************************************************************
+ Extract the Graphics Control Block for a saved image, if it exists.
+******************************************************************************/
+
+int DGifSavedExtensionToGCB(GifFileType *GifFile,
+                int ImageIndex, GraphicsControlBlock *GCB)
+{
+    int i;
+
+    if (ImageIndex < 0 || ImageIndex > GifFile->ImageCount - 1)
+        return GIF_ERROR;
 
-    GifFilePrivateType *Private;
-    FILE *File;
+    GCB->DisposalMode = DISPOSAL_UNSPECIFIED;
+    GCB->UserInputFlag = false;
+    GCB->DelayTime = 0;
+    GCB->TransparentColor = NO_TRANSPARENT_COLOR;
+
+    for (i = 0; i < GifFile->SavedImages[ImageIndex].ExtensionBlockCount; i++) {
+        ExtensionBlock *ep = &GifFile->SavedImages[ImageIndex].ExtensionBlocks[i];
+        if (ep->Function == GRAPHICS_EXT_FUNC_CODE)
+            return DGifExtensionToGCB(ep->ByteCount, ep->Bytes, GCB);
+    }
+
+    return GIF_ERROR;
+}
 
-    if (GifFile == NULL)
+/******************************************************************************
+ This routine should be called last, to close the GIF file.
+******************************************************************************/
+int
+DGifCloseFile(GifFileType *GifFile, int *ErrorCode)
+{
+    GifFilePrivateType *Private;
+
+    if (GifFile == NULL || GifFile->Private == NULL)
         return GIF_ERROR;
 
+    if (GifFile->Image.ColorMap) {
+        GifFreeMapObject(GifFile->Image.ColorMap);
+        GifFile->Image.ColorMap = NULL;
+    }
+
+    if (GifFile->SColorMap) {
+        GifFreeMapObject(GifFile->SColorMap);
+        GifFile->SColorMap = NULL;
+    }
+
+    if (GifFile->SavedImages) {
+        GifFreeSavedImages(GifFile);
+        GifFile->SavedImages = NULL;
+    }
+
+    GifFreeExtensions(&GifFile->ExtensionBlockCount, &GifFile->ExtensionBlocks);
+
     Private = (GifFilePrivateType *) GifFile->Private;
 
     if (!IS_READABLE(Private)) {
         /* This file was NOT open for reading: */
-        _GifError = D_GIF_ERR_NOT_READABLE;
+        if (ErrorCode != NULL)
+            *ErrorCode = D_GIF_ERR_NOT_READABLE;
+        free((char *)GifFile->Private);
+        free(GifFile);
         return GIF_ERROR;
     }
 
-    File = Private->File;
-
-    if (GifFile->Image.ColorMap) {
-        FreeMapObject(GifFile->Image.ColorMap);
-        GifFile->Image.ColorMap = NULL;
-    }
-
-    if (GifFile->SColorMap) {
-        FreeMapObject(GifFile->SColorMap);
-        GifFile->SColorMap = NULL;
+    if (Private->File && (fclose(Private->File) != 0)) {
+        if (ErrorCode != NULL)
+            *ErrorCode = D_GIF_ERR_CLOSE_FAILED;
+        free((char *)GifFile->Private);
+        free(GifFile);
+        return GIF_ERROR;
     }
 
-    if (Private) {
-        free((char *)Private);
-        Private = NULL;
-    }
-
-    if (GifFile->SavedImages) {
-        FreeSavedImages(GifFile);
-        GifFile->SavedImages = NULL;
-    }
-
+    free((char *)GifFile->Private);
     free(GifFile);
-
-    if (File && (fclose(File) != 0)) {
-        _GifError = D_GIF_ERR_CLOSE_FAILED;
-        return GIF_ERROR;
-    }
+    if (ErrorCode != NULL)
+        *ErrorCode = D_GIF_SUCCEEDED;
     return GIF_OK;
 }
 
 /******************************************************************************
- * Get 2 bytes (word) from the given file:
- *****************************************************************************/
+ Get 2 bytes (word) from the given file:
+******************************************************************************/
 static int
-DGifGetWord(GifFileType * GifFile,
-            int *Word) {
-
+DGifGetWord(GifFileType *GifFile, GifWord *Word)
+{
     unsigned char c[2];
 
+    /* coverity[check_return] */
     if (READ(GifFile, c, 2) != 2) {
-        _GifError = D_GIF_ERR_READ_FAILED;
+        GifFile->Error = D_GIF_ERR_READ_FAILED;
         return GIF_ERROR;
     }
 
-    *Word = (((unsigned int)c[1]) << 8) + c[0];
+    *Word = (GifWord)UNSIGNED_LITTLE_ENDIAN(c[0], c[1]);
     return GIF_OK;
 }
 
 /******************************************************************************
- * Get the image code in compressed form.  This routine can be called if the
- * information needed to be piped out as is. Obviously this is much faster
- * than decoding and encoding again. This routine should be followed by calls
- * to DGifGetCodeNext, until NULL block is returned.
- * The block should NOT be freed by the user (not dynamically allocated).
- *****************************************************************************/
+ Get the image code in compressed form.  This routine can be called if the
+ information needed to be piped out as is. Obviously this is much faster
+ than decoding and encoding again. This routine should be followed by calls
+ to DGifGetCodeNext, until NULL block is returned.
+ The block should NOT be freed by the user (not dynamically allocated).
+******************************************************************************/
 int
-DGifGetCode(GifFileType * GifFile,
-            int *CodeSize,
-            GifByteType ** CodeBlock) {
-
+DGifGetCode(GifFileType *GifFile, int *CodeSize, GifByteType **CodeBlock)
+{
     GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
 
     if (!IS_READABLE(Private)) {
         /* This file was NOT open for reading: */
-        _GifError = D_GIF_ERR_NOT_READABLE;
+        GifFile->Error = D_GIF_ERR_NOT_READABLE;
         return GIF_ERROR;
     }
 
@@ -681,27 +736,30 @@
 }
 
 /******************************************************************************
- * Continue to get the image code in compressed form. This routine should be
- * called until NULL block is returned.
- * The block should NOT be freed by the user (not dynamically allocated).
- *****************************************************************************/
+ Continue to get the image code in compressed form. This routine should be
+ called until NULL block is returned.
+ The block should NOT be freed by the user (not dynamically allocated).
+******************************************************************************/
 int
-DGifGetCodeNext(GifFileType * GifFile,
-                GifByteType ** CodeBlock) {
-
+DGifGetCodeNext(GifFileType *GifFile, GifByteType **CodeBlock)
+{
     GifByteType Buf;
     GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
 
+    /* coverity[tainted_data_argument] */
+    /* coverity[check_return] */
     if (READ(GifFile, &Buf, 1) != 1) {
-        _GifError = D_GIF_ERR_READ_FAILED;
+        GifFile->Error = D_GIF_ERR_READ_FAILED;
         return GIF_ERROR;
     }
 
+    /* coverity[lower_bounds] */
     if (Buf > 0) {
         *CodeBlock = Private->Buf;    /* Use private unused buffer. */
         (*CodeBlock)[0] = Buf;  /* Pascal strings notation (pos. 0 is len.). */
+        /* coverity[tainted_data] */
         if (READ(GifFile, &((*CodeBlock)[1]), Buf) != Buf) {
-            _GifError = D_GIF_ERR_READ_FAILED;
+            GifFile->Error = D_GIF_ERR_READ_FAILED;
             return GIF_ERROR;
         }
     } else {
@@ -714,20 +772,19 @@
 }
 
 /******************************************************************************
- * Setup the LZ decompression for this image:
- *****************************************************************************/
+ Setup the LZ decompression for this image:
+******************************************************************************/
 static int
-DGifSetupDecompress(GifFileType * GifFile) {
-
+DGifSetupDecompress(GifFileType *GifFile)
+{
     int i, BitsPerPixel;
     GifByteType CodeSize;
-    unsigned int *Prefix;
+    GifPrefixType *Prefix;
     GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
 
-    READ(GifFile, &CodeSize, 1);    /* Read Code size from file. */
-    if (CodeSize >= 12) {
-        /* Invalid initial code size: report failure */
-        return GIF_ERROR;
+    /* coverity[check_return] */
+    if (READ(GifFile, &CodeSize, 1) < 1) {    /* Read Code size from file. */
+        return GIF_ERROR;    /* Failed to read Code size. */
     }
     BitsPerPixel = CodeSize;
 
@@ -751,20 +808,18 @@
 }
 
 /******************************************************************************
- * The LZ decompression routine:
- * This version decompress the given gif file into Line of length LineLen.
- * This routine can be called few times (one per scan line, for example), in
- * order the complete the whole image.
- *****************************************************************************/
+ The LZ decompression routine:
+ This version decompress the given GIF file into Line of length LineLen.
+ This routine can be called few times (one per scan line, for example), in
+ order the complete the whole image.
+******************************************************************************/
 static int
-DGifDecompressLine(GifFileType * GifFile,
-                   GifPixelType * Line,
-                   int LineLen) {
-
+DGifDecompressLine(GifFileType *GifFile, GifPixelType *Line, int LineLen)
+{
     int i = 0;
     int j, CrntCode, EOFCode, ClearCode, CrntPrefix, LastCode, StackPtr;
     GifByteType *Stack, *Suffix;
-    unsigned int *Prefix;
+    GifPrefixType *Prefix;
     GifFilePrivateType *Private = (GifFilePrivateType *) GifFile->Private;
 
     StackPtr = Private->StackPtr;
@@ -775,8 +830,12 @@
     ClearCode = Private->ClearCode;
     LastCode = Private->LastCode;
 
+    if (StackPtr > LZ_MAX_CODE) {
+        return GIF_ERROR;
+    }
+
     if (StackPtr != 0) {
-        /* Let pop the stack off before continueing to read the gif file: */
+        /* Let pop the stack off before continueing to read the GIF file: */
         while (StackPtr != 0 && i < LineLen)
             Line[i++] = Stack[--StackPtr];
     }
@@ -789,11 +848,8 @@
             /* Note however that usually we will not be here as we will stop
              * decoding as soon as we got all the pixel, or EOF code will
              * not be read at all, and DGifGetLine/Pixel clean everything.  */
-            if (i != LineLen - 1 || Private->PixelCount != 0) {
-                _GifError = D_GIF_ERR_EOF_TOO_SOON;
-                return GIF_ERROR;
-            }
-            i++;
+            GifFile->Error = D_GIF_ERR_EOF_TOO_SOON;
+            return GIF_ERROR;
         } else if (CrntCode == ClearCode) {
             /* We need to start over again: */
             for (j = 0; j <= LZ_MAX_CODE; j++)
@@ -815,36 +871,37 @@
                  * pixels on our stack. If we done, pop the stack in reverse
                  * (thats what stack is good for!) order to output.  */
                 if (Prefix[CrntCode] == NO_SUCH_CODE) {
+                    CrntPrefix = LastCode;
+
                     /* Only allowed if CrntCode is exactly the running code:
                      * In that case CrntCode = XXXCode, CrntCode or the
                      * prefix code is last code and the suffix char is
                      * exactly the prefix of last code! */
                     if (CrntCode == Private->RunningCode - 2) {
-                        CrntPrefix = LastCode;
                         Suffix[Private->RunningCode - 2] =
                            Stack[StackPtr++] = DGifGetPrefixChar(Prefix,
                                                                  LastCode,
                                                                  ClearCode);
                     } else {
-                        _GifError = D_GIF_ERR_IMAGE_DEFECT;
-                        return GIF_ERROR;
+                        Suffix[Private->RunningCode - 2] =
+                           Stack[StackPtr++] = DGifGetPrefixChar(Prefix,
+                                                                 CrntCode,
+                                                                 ClearCode);
                     }
                 } else
                     CrntPrefix = CrntCode;
 
-                /* Now (if image is O.K.) we should not get an NO_SUCH_CODE
-                 * During the trace. As we might loop forever, in case of
-                 * defective image, we count the number of loops we trace
-                 * and stop if we got LZ_MAX_CODE. obviously we can not
-                 * loop more than that.  */
-                j = 0;
-                while (j++ <= LZ_MAX_CODE &&
+                /* Now (if image is O.K.) we should not get a NO_SUCH_CODE
+                 * during the trace. As we might loop forever, in case of
+                 * defective image, we use StackPtr as loop counter and stop
+                 * before overflowing Stack[]. */
+                while (StackPtr < LZ_MAX_CODE &&
                        CrntPrefix > ClearCode && CrntPrefix <= LZ_MAX_CODE) {
                     Stack[StackPtr++] = Suffix[CrntPrefix];
                     CrntPrefix = Prefix[CrntPrefix];
                 }
-                if (j >= LZ_MAX_CODE || CrntPrefix > LZ_MAX_CODE) {
-                    _GifError = D_GIF_ERR_IMAGE_DEFECT;
+                if (StackPtr >= LZ_MAX_CODE || CrntPrefix > LZ_MAX_CODE) {
+                    GifFile->Error = D_GIF_ERR_IMAGE_DEFECT;
                     return GIF_ERROR;
                 }
                 /* Push the last character on stack: */
@@ -854,7 +911,7 @@
                 while (StackPtr != 0 && i < LineLen)
                     Line[i++] = Stack[--StackPtr];
             }
-            if (LastCode != NO_SUCH_CODE) {
+            if (LastCode != NO_SUCH_CODE && Prefix[Private->RunningCode - 2] == NO_SUCH_CODE) {
                 Prefix[Private->RunningCode - 2] = LastCode;
 
                 if (CrntCode == Private->RunningCode - 2) {
@@ -880,37 +937,38 @@
 }
 
 /******************************************************************************
- * Routine to trace the Prefixes linked list until we get a prefix which is
- * not code, but a pixel value (less than ClearCode). Returns that pixel value.
- * If image is defective, we might loop here forever, so we limit the loops to
- * the maximum possible if image O.k. - LZ_MAX_CODE times.
- *****************************************************************************/
+ Routine to trace the Prefixes linked list until we get a prefix which is
+ not code, but a pixel value (less than ClearCode). Returns that pixel value.
+ If image is defective, we might loop here forever, so we limit the loops to
+ the maximum possible if image O.k. - LZ_MAX_CODE times.
+******************************************************************************/
 static int
-DGifGetPrefixChar(unsigned int *Prefix,
-                  int Code,
-                  int ClearCode) {
-
+DGifGetPrefixChar(GifPrefixType *Prefix, int Code, int ClearCode)
+{
     int i = 0;
 
-    while (Code > ClearCode && i++ <= LZ_MAX_CODE)
+    while (Code > ClearCode && i++ <= LZ_MAX_CODE) {
+        if (Code > LZ_MAX_CODE) {
+            return NO_SUCH_CODE;
+        }
         Code = Prefix[Code];
+    }
     return Code;
 }
 
 /******************************************************************************
- * Interface for accessing the LZ codes directly. Set Code to the real code
- * (12bits), or to -1 if EOF code is returned.
- *****************************************************************************/
+ Interface for accessing the LZ codes directly. Set Code to the real code
+ (12bits), or to -1 if EOF code is returned.
+******************************************************************************/
 int
-DGifGetLZCodes(GifFileType * GifFile,
-               int *Code) {
-
+DGifGetLZCodes(GifFileType *GifFile, int *Code)
+{
     GifByteType *CodeBlock;
     GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
 
     if (!IS_READABLE(Private)) {
         /* This file was NOT open for reading: */
-        _GifError = D_GIF_ERR_NOT_READABLE;
+        GifFile->Error = D_GIF_ERR_NOT_READABLE;
         return GIF_ERROR;
     }
 
@@ -936,32 +994,38 @@
 }
 
 /******************************************************************************
- * The LZ decompression input routine:
- * This routine is responsable for the decompression of the bit stream from
- * 8 bits (bytes) packets, into the real codes.
- * Returns GIF_OK if read succesfully.
- *****************************************************************************/
+ The LZ decompression input routine:
+ This routine is responsable for the decompression of the bit stream from
+ 8 bits (bytes) packets, into the real codes.
+ Returns GIF_OK if read successfully.
+******************************************************************************/
 static int
-DGifDecompressInput(GifFileType * GifFile,
-                    int *Code) {
-
-    GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
-
-    GifByteType NextByte;
-    static unsigned int CodeMasks[] = {
+DGifDecompressInput(GifFileType *GifFile, int *Code)
+{
+    static const unsigned short CodeMasks[] = {
         0x0000, 0x0001, 0x0003, 0x0007,
         0x000f, 0x001f, 0x003f, 0x007f,
         0x00ff, 0x01ff, 0x03ff, 0x07ff,
         0x0fff
     };
 
+    GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
+
+    GifByteType NextByte;
+
+    /* The image can't contain more than LZ_BITS per code. */
+    if (Private->RunningBits > LZ_BITS) {
+        GifFile->Error = D_GIF_ERR_IMAGE_DEFECT;
+        return GIF_ERROR;
+    }
+
     while (Private->CrntShiftState < Private->RunningBits) {
         /* Needs to get more bytes from input stream for next code: */
         if (DGifBufferedInput(GifFile, Private->Buf, &NextByte) == GIF_ERROR) {
             return GIF_ERROR;
         }
         Private->CrntShiftDWord |=
-           ((unsigned long)NextByte) << Private->CrntShiftState;
+            ((unsigned long)NextByte) << Private->CrntShiftState;
         Private->CrntShiftState += 8;
     }
     *Code = Private->CrntShiftDWord & CodeMasks[Private->RunningBits];
@@ -970,37 +1034,45 @@
     Private->CrntShiftState -= Private->RunningBits;
 
     /* If code cannot fit into RunningBits bits, must raise its size. Note
-     * however that codes above 4095 are used for special signaling.  */
-    if (++Private->RunningCode > Private->MaxCode1) {
-        if (Private->RunningBits < LZ_BITS) {
-            Private->MaxCode1 <<= 1;
-            Private->RunningBits++;
-        } else {
-            Private->RunningCode = Private->MaxCode1;
-        }
+     * however that codes above 4095 are used for special signaling.
+     * If we're using LZ_BITS bits already and we're at the max code, just
+     * keep using the table as it is, don't increment Private->RunningCode.
+     */
+    if (Private->RunningCode < LZ_MAX_CODE + 2 &&
+        ++Private->RunningCode > Private->MaxCode1 &&
+        Private->RunningBits < LZ_BITS) {
+        Private->MaxCode1 <<= 1;
+        Private->RunningBits++;
     }
     return GIF_OK;
 }
 
 /******************************************************************************
- * This routines read one gif data block at a time and buffers it internally
- * so that the decompression routine could access it.
- * The routine returns the next byte from its internal buffer (or read next
- * block in if buffer empty) and returns GIF_OK if succesful.
- *****************************************************************************/
+ This routines read one GIF data block at a time and buffers it internally
+ so that the decompression routine could access it.
+ The routine returns the next byte from its internal buffer (or read next
+ block in if buffer empty) and returns GIF_OK if succesful.
+******************************************************************************/
 static int
-DGifBufferedInput(GifFileType * GifFile,
-                  GifByteType * Buf,
-                  GifByteType * NextByte) {
-
+DGifBufferedInput(GifFileType *GifFile, GifByteType *Buf, GifByteType *NextByte)
+{
     if (Buf[0] == 0) {
         /* Needs to read the next buffer - this one is empty: */
+        /* coverity[check_return] */
         if (READ(GifFile, Buf, 1) != 1) {
-            _GifError = D_GIF_ERR_READ_FAILED;
+            GifFile->Error = D_GIF_ERR_READ_FAILED;
+            return GIF_ERROR;
+        }
+        /* There shouldn't be any empty data blocks here as the LZW spec
+         * says the LZW termination code should come first.  Therefore we
+         * shouldn't be inside this routine at that point.
+         */
+        if (Buf[0] == 0) {
+            GifFile->Error = D_GIF_ERR_IMAGE_DEFECT;
             return GIF_ERROR;
         }
         if (READ(GifFile, &Buf[1], Buf[0]) != Buf[0]) {
-            _GifError = D_GIF_ERR_READ_FAILED;
+            GifFile->Error = D_GIF_ERR_READ_FAILED;
             return GIF_ERROR;
         }
         *NextByte = Buf[1];
@@ -1015,21 +1087,21 @@
 }
 
 /******************************************************************************
- * This routine reads an entire GIF into core, hanging all its state info off
- * the GifFileType pointer.  Call DGifOpenFileName() or DGifOpenFileHandle()
- * first to initialize I/O.  Its inverse is EGifSpew().
- ******************************************************************************/
+ This routine reads an entire GIF into core, hanging all its state info off
+ the GifFileType pointer.  Call DGifOpenFileName() or DGifOpenFileHandle()
+ first to initialize I/O.  Its inverse is EGifSpew().
+*******************************************************************************/
 int
-DGifSlurp(GifFileType * GifFile) {
-
-    int ImageSize;
+DGifSlurp(GifFileType *GifFile)
+{
+    size_t ImageSize;
     GifRecordType RecordType;
     SavedImage *sp;
     GifByteType *ExtData;
-    SavedImage temp_save;
+    int ExtFunction;
 
-    temp_save.ExtensionBlocks = NULL;
-    temp_save.ExtensionBlockCount = 0;
+    GifFile->ExtensionBlocks = NULL;
+    GifFile->ExtensionBlockCount = 0;
 
     do {
         if (DGifGetRecordType(GifFile, &RecordType) == GIF_ERROR)
@@ -1041,44 +1113,77 @@
                   return (GIF_ERROR);
 
               sp = &GifFile->SavedImages[GifFile->ImageCount - 1];
+              /* Allocate memory for the image */
+              if (sp->ImageDesc.Width < 0 && sp->ImageDesc.Height < 0 &&
+                      sp->ImageDesc.Width > (INT_MAX / sp->ImageDesc.Height)) {
+                  return GIF_ERROR;
+              }
               ImageSize = sp->ImageDesc.Width * sp->ImageDesc.Height;
 
+              if (ImageSize > (SIZE_MAX / sizeof(GifPixelType))) {
+                  return GIF_ERROR;
+              }
               sp->RasterBits = (unsigned char *)malloc(ImageSize *
-                                                       sizeof(GifPixelType));
+                      sizeof(GifPixelType));
+
               if (sp->RasterBits == NULL) {
                   return GIF_ERROR;
               }
-              if (DGifGetLine(GifFile, sp->RasterBits, ImageSize) ==
-                  GIF_ERROR)
-                  return (GIF_ERROR);
-              if (temp_save.ExtensionBlocks) {
-                  sp->ExtensionBlocks = temp_save.ExtensionBlocks;
-                  sp->ExtensionBlockCount = temp_save.ExtensionBlockCount;
 
-                  temp_save.ExtensionBlocks = NULL;
-                  temp_save.ExtensionBlockCount = 0;
+              if (sp->ImageDesc.Interlace) {
+                  int i, j;
+                   /*
+                    * The way an interlaced image should be read -
+                    * offsets and jumps...
+                    */
+                  int InterlacedOffset[] = { 0, 4, 2, 1 };
+                  int InterlacedJumps[] = { 8, 8, 4, 2 };
+                  /* Need to perform 4 passes on the image */
+                  for (i = 0; i < 4; i++)
+                      for (j = InterlacedOffset[i];
+                       j < sp->ImageDesc.Height;
+                       j += InterlacedJumps[i]) {
+                      if (DGifGetLine(GifFile,
+                              sp->RasterBits+j*sp->ImageDesc.Width,
+                              sp->ImageDesc.Width) == GIF_ERROR)
+                          return GIF_ERROR;
+                      }
+              }
+              else {
+                  if (DGifGetLine(GifFile,sp->RasterBits,ImageSize)==GIF_ERROR)
+                      return (GIF_ERROR);
+              }
 
-                  /* FIXME: The following is wrong.  It is left in only for
-                   * backwards compatibility.  Someday it should go away. Use
-                   * the sp->ExtensionBlocks->Function variable instead. */
-                  sp->Function = sp->ExtensionBlocks[0].Function;
+              if (GifFile->ExtensionBlocks) {
+                  sp->ExtensionBlocks = GifFile->ExtensionBlocks;
+                  sp->ExtensionBlockCount = GifFile->ExtensionBlockCount;
+
+                  GifFile->ExtensionBlocks = NULL;
+                  GifFile->ExtensionBlockCount = 0;
               }
               break;
 
           case EXTENSION_RECORD_TYPE:
-              if (DGifGetExtension(GifFile, &temp_save.Function, &ExtData) ==
-                  GIF_ERROR)
+              if (DGifGetExtension(GifFile,&ExtFunction,&ExtData) == GIF_ERROR)
                   return (GIF_ERROR);
-              while (ExtData != NULL) {
-
-                  /* Create an extension block with our data */
-                  if (AddExtensionBlock(&temp_save, ExtData[0], &ExtData[1])
+              /* Create an extension block with our data */
+              if (ExtData != NULL) {
+                  if (GifAddExtensionBlock(&GifFile->ExtensionBlockCount,
+                               &GifFile->ExtensionBlocks,
+                               ExtFunction, ExtData[0], &ExtData[1])
                       == GIF_ERROR)
                       return (GIF_ERROR);
-
+              }
+              while (ExtData != NULL) {
                   if (DGifGetExtensionNext(GifFile, &ExtData) == GIF_ERROR)
                       return (GIF_ERROR);
-                  temp_save.Function = 0;
+                  /* Continue the extension block */
+                  if (ExtData != NULL)
+                      if (GifAddExtensionBlock(&GifFile->ExtensionBlockCount,
+                                   &GifFile->ExtensionBlocks,
+                                   CONTINUE_EXT_FUNC_CODE,
+                                   ExtData[0], &ExtData[1]) == GIF_ERROR)
+                              return (GIF_ERROR);
               }
               break;
 
@@ -1090,12 +1195,13 @@
         }
     } while (RecordType != TERMINATE_RECORD_TYPE);
 
-    /* Just in case the Gif has an extension block without an associated
-     * image... (Should we save this into a savefile structure with no image
-     * instead? Have to check if the present writing code can handle that as
-     * well.... */
-    if (temp_save.ExtensionBlocks)
-        FreeExtension(&temp_save);
+    /* Sanity check for corrupted file */
+    if (GifFile->ImageCount == 0) {
+        GifFile->Error = D_GIF_ERR_NO_IMAG_DSCR;
+        return(GIF_ERROR);
+    }
 
     return (GIF_OK);
 }
+
+/* end */
--- a/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_err.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_err.c	Wed Jul 05 20:33:55 2017 +0200
@@ -23,71 +23,81 @@
  */
 
 /*****************************************************************************
- *   "Gif-Lib" - Yet another gif library.
- *
- * Written by:  Gershon Elber            IBM PC Ver 0.1,    Jun. 1989
- *****************************************************************************
- * Handle error reporting for the GIF library.
- *****************************************************************************
- * History:
- * 17 Jun 89 - Version 1.0 by Gershon Elber.
- ****************************************************************************/
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+gif_err.c - handle error reporting for the GIF library.
+
+****************************************************************************/
 
 #include <stdio.h>
+
 #include "gif_lib.h"
-
-int _GifError = 0;
+#include "gif_lib_private.h"
 
 /*****************************************************************************
- * Return the last GIF error (0 if none) and reset the error.
- ****************************************************************************/
-int
-GifLastError(void) {
-    int i = _GifError;
-
-    _GifError = 0;
+ Return a string description of  the last GIF error
+*****************************************************************************/
+const char *
+GifErrorString(int ErrorCode)
+{
+    const char *Err;
 
-    return i;
-}
-
-/*****************************************************************************
- * Print the last GIF error to stderr.
- ****************************************************************************/
-void
-PrintGifError(void) {
-    char *Err;
-
-    switch (_GifError) {
+    switch (ErrorCode) {
+      case E_GIF_ERR_OPEN_FAILED:
+        Err = "Failed to open given file";
+        break;
+      case E_GIF_ERR_WRITE_FAILED:
+        Err = "Failed to write to given file";
+        break;
+      case E_GIF_ERR_HAS_SCRN_DSCR:
+        Err = "Screen descriptor has already been set";
+        break;
+      case E_GIF_ERR_HAS_IMAG_DSCR:
+        Err = "Image descriptor is still active";
+        break;
+      case E_GIF_ERR_NO_COLOR_MAP:
+        Err = "Neither global nor local color map";
+        break;
+      case E_GIF_ERR_DATA_TOO_BIG:
+        Err = "Number of pixels bigger than width * height";
+        break;
+      case E_GIF_ERR_NOT_ENOUGH_MEM:
+        Err = "Failed to allocate required memory";
+        break;
+      case E_GIF_ERR_DISK_IS_FULL:
+        Err = "Write failed (disk full?)";
+        break;
+      case E_GIF_ERR_CLOSE_FAILED:
+        Err = "Failed to close given file";
+        break;
+      case E_GIF_ERR_NOT_WRITEABLE:
+        Err = "Given file was not opened for write";
+        break;
       case D_GIF_ERR_OPEN_FAILED:
         Err = "Failed to open given file";
         break;
       case D_GIF_ERR_READ_FAILED:
-        Err = "Failed to Read from given file";
+        Err = "Failed to read from given file";
         break;
       case D_GIF_ERR_NOT_GIF_FILE:
-        Err = "Given file is NOT GIF file";
+        Err = "Data is not in GIF format";
         break;
       case D_GIF_ERR_NO_SCRN_DSCR:
-        Err = "No Screen Descriptor detected";
+        Err = "No screen descriptor detected";
         break;
       case D_GIF_ERR_NO_IMAG_DSCR:
         Err = "No Image Descriptor detected";
         break;
       case D_GIF_ERR_NO_COLOR_MAP:
-        Err = "Neither Global Nor Local color map";
+        Err = "Neither global nor local color map";
         break;
       case D_GIF_ERR_WRONG_RECORD:
         Err = "Wrong record type detected";
         break;
       case D_GIF_ERR_DATA_TOO_BIG:
-        Err = "#Pixels bigger than Width * Height";
+        Err = "Number of pixels bigger than width * height";
         break;
       case D_GIF_ERR_NOT_ENOUGH_MEM:
-        Err = "Fail to allocate required memory";
+        Err = "Failed to allocate required memory";
         break;
       case D_GIF_ERR_CLOSE_FAILED:
         Err = "Failed to close given file";
@@ -99,14 +109,13 @@
         Err = "Image is defective, decoding aborted";
         break;
       case D_GIF_ERR_EOF_TOO_SOON:
-        Err = "Image EOF detected, before image complete";
+        Err = "Image EOF detected before image complete";
         break;
       default:
         Err = NULL;
         break;
     }
-    if (Err != NULL)
-        fprintf(stderr, "\nGIF-LIB error: %s.\n", Err);
-    else
-        fprintf(stderr, "\nGIF-LIB undefined error %d.\n", _GifError);
+    return Err;
 }
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_hash.h	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,62 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/******************************************************************************
+
+gif_hash.h - magfic constants and declarations for GIF LZW
+
+******************************************************************************/
+
+#ifndef _GIF_HASH_H_
+#define _GIF_HASH_H_
+
+#include <stdint.h>
+
+#define HT_SIZE         8192    /* 12bits = 4096 or twice as big! */
+#define HT_KEY_MASK     0x1FFF  /* 13bits keys */
+#define HT_KEY_NUM_BITS 13      /* 13bits keys */
+#define HT_MAX_KEY      8191    /* 13bits - 1, maximal code possible */
+#define HT_MAX_CODE     4095    /* Biggest code possible in 12 bits. */
+
+/* The 32 bits of the long are divided into two parts for the key & code:   */
+/* 1. The code is 12 bits as our compression algorithm is limited to 12bits */
+/* 2. The key is 12 bits Prefix code + 8 bit new char or 20 bits.           */
+/* The key is the upper 20 bits.  The code is the lower 12. */
+#define HT_GET_KEY(l)    (l >> 12)
+#define HT_GET_CODE(l)   (l & 0x0FFF)
+#define HT_PUT_KEY(l)    (l << 12)
+#define HT_PUT_CODE(l)   (l & 0x0FFF)
+
+typedef struct GifHashTableType {
+    uint32_t HTable[HT_SIZE];
+} GifHashTableType;
+
+GifHashTableType *_InitHashTable(void);
+void _ClearHashTable(GifHashTableType *HashTable);
+void _InsertHashTable(GifHashTableType *HashTable, uint32_t Key, int Code);
+int _ExistsHashTable(GifHashTableType *HashTable, uint32_t Key);
+
+#endif /* _GIF_HASH_H_ */
+
+/* end */
--- a/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_lib.h	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_lib.h	Wed Jul 05 20:33:55 2017 +0200
@@ -23,21 +23,10 @@
  */
 
 /******************************************************************************
- * In order to make life a little bit easier when using the GIF file format,
- * this library was written, and which does all the dirty work...
- *
- *                                        Written by Gershon Elber,  Jun. 1989
- *                                        Hacks by Eric S. Raymond,  Sep. 1992
- ******************************************************************************
- * History:
- * 14 Jun 89 - Version 1.0 by Gershon Elber.
- *  3 Sep 90 - Version 1.1 by Gershon Elber (Support for Gif89, Unique names)
- * 15 Sep 90 - Version 2.0 by Eric S. Raymond (Changes to suoport GIF slurp)
- * 26 Jun 96 - Version 3.0 by Eric S. Raymond (Full GIF89 support)
- * 17 Dec 98 - Version 4.0 by Toshio Kuratomi (Fix extension writing code)
- *****************************************************************************/
 
-/* all encoding functionality stripped */
+gif_lib.h - service library for decoding and encoding GIF images
+
+*****************************************************************************/
 
 #ifndef _GIF_LIB_H_
 #define _GIF_LIB_H_ 1
@@ -46,21 +35,21 @@
 extern "C" {
 #endif /* __cplusplus */
 
-#define GIF_LIB_VERSION " Version 4.1, "
+#define GIFLIB_MAJOR 5
+#define GIFLIB_MINOR 1
+#define GIFLIB_RELEASE 1
 
 #define GIF_ERROR   0
 #define GIF_OK      1
 
-#ifndef TRUE
-#define TRUE        1
-#endif /* TRUE */
-#ifndef FALSE
-#define FALSE       0
-#endif /* FALSE */
+#include <stddef.h>
 
-#ifndef NULL
-#define NULL        0
-#endif /* NULL */
+#ifdef bool
+#undef bool
+#endif
+typedef int bool;
+#define false 0
+#define true 1
 
 #define GIF_STAMP "GIFVER"          /* First chars in file - GIF stamp.  */
 #define GIF_STAMP_LEN sizeof(GIF_STAMP) - 1
@@ -68,21 +57,11 @@
 #define GIF87_STAMP "GIF87a"        /* First chars in file - GIF stamp.  */
 #define GIF89_STAMP "GIF89a"        /* First chars in file - GIF stamp.  */
 
-#define GIF_FILE_BUFFER_SIZE 16384  /* Files uses bigger buffers than usual. */
-
-typedef int GifBooleanType;
 typedef unsigned char GifPixelType;
 typedef unsigned char *GifRowType;
 typedef unsigned char GifByteType;
-
-#define GIF_MESSAGE(Msg) fprintf(stderr, "\n%s: %s\n", PROGRAM_NAME, Msg)
-#define GIF_EXIT(Msg)    { GIF_MESSAGE(Msg); exit(-3); }
-
-#ifdef SYSV
-#define VoidPtr char *
-#else
-#define VoidPtr void *
-#endif /* SYSV */
+typedef unsigned int GifPrefixType;
+typedef int GifWord;
 
 typedef struct GifColorType {
     GifByteType Red, Green, Blue;
@@ -91,27 +70,52 @@
 typedef struct ColorMapObject {
     int ColorCount;
     int BitsPerPixel;
+    bool SortFlag;
     GifColorType *Colors;    /* on malloc(3) heap */
 } ColorMapObject;
 
 typedef struct GifImageDesc {
-    int Left, Top, Width, Height,   /* Current image dimensions. */
-      Interlace;                    /* Sequential/Interlaced lines. */
-    ColorMapObject *ColorMap;       /* The local color map */
+    GifWord Left, Top, Width, Height;   /* Current image dimensions. */
+    bool Interlace;                     /* Sequential/Interlaced lines. */
+    ColorMapObject *ColorMap;           /* The local color map */
 } GifImageDesc;
 
+typedef struct ExtensionBlock {
+    int ByteCount;
+    GifByteType *Bytes; /* on malloc(3) heap */
+    int Function;       /* The block function code */
+#define CONTINUE_EXT_FUNC_CODE    0x00    /* continuation subblock */
+#define COMMENT_EXT_FUNC_CODE     0xfe    /* comment */
+#define GRAPHICS_EXT_FUNC_CODE    0xf9    /* graphics control (GIF89) */
+#define PLAINTEXT_EXT_FUNC_CODE   0x01    /* plaintext */
+#define APPLICATION_EXT_FUNC_CODE 0xff    /* application block */
+} ExtensionBlock;
+
+typedef struct SavedImage {
+    GifImageDesc ImageDesc;
+    GifByteType *RasterBits;         /* on malloc(3) heap */
+    int ExtensionBlockCount;         /* Count of extensions before image */
+    ExtensionBlock *ExtensionBlocks; /* Extensions before image */
+} SavedImage;
+
 typedef struct GifFileType {
-    int SWidth, SHeight,        /* Screen dimensions. */
-      SColorResolution,         /* How many colors can we generate? */
-      SBackGroundColor;         /* I hope you understand this one... */
-    ColorMapObject *SColorMap;  /* NULL if not exists. */
-    int ImageCount;             /* Number of current image */
-    GifImageDesc Image;         /* Block describing current image */
-    struct SavedImage *SavedImages; /* Use this to accumulate file state */
-    VoidPtr UserData;           /* hook to attach user data (TVT) */
-    VoidPtr Private;            /* Don't mess with this! */
+    GifWord SWidth, SHeight;         /* Size of virtual canvas */
+    GifWord SColorResolution;        /* How many colors can we generate? */
+    GifWord SBackGroundColor;        /* Background color for virtual canvas */
+    GifByteType AspectByte;          /* Used to compute pixel aspect ratio */
+    ColorMapObject *SColorMap;       /* Global colormap, NULL if nonexistent. */
+    int ImageCount;                  /* Number of current image (both APIs) */
+    GifImageDesc Image;              /* Current image (low-level API) */
+    SavedImage *SavedImages;         /* Image sequence (high-level API) */
+    int ExtensionBlockCount;         /* Count extensions past last image */
+    ExtensionBlock *ExtensionBlocks; /* Extensions past last image */
+    int Error;                       /* Last error condition reported */
+    void *UserData;                  /* hook to attach user data (TVT) */
+    void *Private;                   /* Don't mess with this! */
 } GifFileType;
 
+#define GIF_ASPECT_RATIO(n)    ((n)+15.0/64.0)
+
 typedef enum {
     UNDEFINED_RECORD_TYPE,
     SCREEN_DESC_RECORD_TYPE,
@@ -120,58 +124,95 @@
     TERMINATE_RECORD_TYPE   /* Begin with ';' */
 } GifRecordType;
 
-/* DumpScreen2Gif routine constants identify type of window/screen to dump.
- * Note all values below 1000 are reserved for the IBMPC different display
- * devices (it has many!) and are compatible with the numbering TC2.0
- * (Turbo C 2.0 compiler for IBM PC) gives to these devices.
- */
-typedef enum {
-    GIF_DUMP_SGI_WINDOW = 1000,
-    GIF_DUMP_X_WINDOW = 1001
-} GifScreenDumpType;
-
 /* func type to read gif data from arbitrary sources (TVT) */
 typedef int (*InputFunc) (GifFileType *, GifByteType *, int);
 
-/* func type to write gif data ro arbitrary targets.
+/* func type to write gif data to arbitrary targets.
  * Returns count of bytes written. (MRB)
  */
 typedef int (*OutputFunc) (GifFileType *, const GifByteType *, int);
 
 /******************************************************************************
- *  GIF89 extension function codes
+ GIF89 structures
 ******************************************************************************/
 
-#define COMMENT_EXT_FUNC_CODE     0xfe    /* comment */
-#define GRAPHICS_EXT_FUNC_CODE    0xf9    /* graphics control */
-#define PLAINTEXT_EXT_FUNC_CODE   0x01    /* plaintext */
-#define APPLICATION_EXT_FUNC_CODE 0xff    /* application block */
+typedef struct GraphicsControlBlock {
+    int DisposalMode;
+#define DISPOSAL_UNSPECIFIED      0       /* No disposal specified. */
+#define DISPOSE_DO_NOT            1       /* Leave image in place */
+#define DISPOSE_BACKGROUND        2       /* Set area too background color */
+#define DISPOSE_PREVIOUS          3       /* Restore to previous content */
+    bool UserInputFlag;      /* User confirmation required before disposal */
+    int DelayTime;           /* pre-display delay in 0.01sec units */
+    int TransparentColor;    /* Palette index for transparency, -1 if none */
+#define NO_TRANSPARENT_COLOR    -1
+} GraphicsControlBlock;
 
 /******************************************************************************
- * O.K., here are the routines one can access in order to decode GIF file:
- * (GIF_LIB file DGIF_LIB.C).
- *****************************************************************************/
+ GIF encoding routines
+******************************************************************************/
+
+/* Main entry points */
+GifFileType *EGifOpenFileName(const char *GifFileName,
+                              const bool GifTestExistence, int *Error);
+GifFileType *EGifOpenFileHandle(const int GifFileHandle, int *Error);
+GifFileType *EGifOpen(void *userPtr, OutputFunc writeFunc, int *Error);
+int EGifSpew(GifFileType * GifFile);
+const char *EGifGetGifVersion(GifFileType *GifFile); /* new in 5.x */
+int EGifCloseFile(GifFileType *GifFile, int *ErrorCode);
+
+#define E_GIF_SUCCEEDED          0
+#define E_GIF_ERR_OPEN_FAILED    1    /* And EGif possible errors. */
+#define E_GIF_ERR_WRITE_FAILED   2
+#define E_GIF_ERR_HAS_SCRN_DSCR  3
+#define E_GIF_ERR_HAS_IMAG_DSCR  4
+#define E_GIF_ERR_NO_COLOR_MAP   5
+#define E_GIF_ERR_DATA_TOO_BIG   6
+#define E_GIF_ERR_NOT_ENOUGH_MEM 7
+#define E_GIF_ERR_DISK_IS_FULL   8
+#define E_GIF_ERR_CLOSE_FAILED   9
+#define E_GIF_ERR_NOT_WRITEABLE  10
 
-GifFileType *DGifOpenFileName(const char *GifFileName);
-GifFileType *DGifOpenFileHandle(int GifFileHandle);
-GifFileType *DGifOpen(void *userPtr, InputFunc readFunc);    /* new one
-                                                             * (TVT) */
+/* These are legacy.  You probably do not want to call them directly */
+int EGifPutScreenDesc(GifFileType *GifFile,
+                      const int GifWidth, const int GifHeight,
+                      const int GifColorRes,
+                      const int GifBackGround,
+                      const ColorMapObject *GifColorMap);
+int EGifPutImageDesc(GifFileType *GifFile,
+                     const int GifLeft, const int GifTop,
+                     const int GifWidth, const int GifHeight,
+                     const bool GifInterlace,
+                     const ColorMapObject *GifColorMap);
+void EGifSetGifVersion(GifFileType *GifFile, const bool gif89);
+int EGifPutLine(GifFileType *GifFile, GifPixelType *GifLine,
+                int GifLineLen);
+int EGifPutPixel(GifFileType *GifFile, const GifPixelType GifPixel);
+int EGifPutComment(GifFileType *GifFile, const char *GifComment);
+int EGifPutExtensionLeader(GifFileType *GifFile, const int GifExtCode);
+int EGifPutExtensionBlock(GifFileType *GifFile,
+                         const int GifExtLen, const void *GifExtension);
+int EGifPutExtensionTrailer(GifFileType *GifFile);
+int EGifPutExtension(GifFileType *GifFile, const int GifExtCode,
+                     const int GifExtLen,
+                     const void *GifExtension);
+int EGifPutCode(GifFileType *GifFile, int GifCodeSize,
+                const GifByteType *GifCodeBlock);
+int EGifPutCodeNext(GifFileType *GifFile,
+                    const GifByteType *GifCodeBlock);
+
+/******************************************************************************
+ GIF decoding routines
+******************************************************************************/
+
+/* Main entry points */
+GifFileType *DGifOpenFileName(const char *GifFileName, int *Error);
+GifFileType *DGifOpenFileHandle(int GifFileHandle, int *Error);
 int DGifSlurp(GifFileType * GifFile);
-int DGifGetScreenDesc(GifFileType * GifFile);
-int DGifGetRecordType(GifFileType * GifFile, GifRecordType * GifType);
-int DGifGetImageDesc(GifFileType * GifFile);
-int DGifGetLine(GifFileType * GifFile, GifPixelType * GifLine, int GifLineLen);
-int DGifGetPixel(GifFileType * GifFile, GifPixelType GifPixel);
-int DGifGetComment(GifFileType * GifFile, char *GifComment);
-int DGifGetExtension(GifFileType * GifFile, int *GifExtCode,
-                     GifByteType ** GifExtension);
-int DGifGetExtensionNext(GifFileType * GifFile, GifByteType ** GifExtension);
-int DGifGetCode(GifFileType * GifFile, int *GifCodeSize,
-                GifByteType ** GifCodeBlock);
-int DGifGetCodeNext(GifFileType * GifFile, GifByteType ** GifCodeBlock);
-int DGifGetLZCodes(GifFileType * GifFile, int *GifCode);
-int DGifCloseFile(GifFileType * GifFile);
+GifFileType *DGifOpen(void *userPtr, InputFunc readFunc, int *Error);    /* new one (TVT) */
+    int DGifCloseFile(GifFileType * GifFile, int *ErrorCode);
 
+#define D_GIF_SUCCEEDED          0
 #define D_GIF_ERR_OPEN_FAILED    101    /* And DGif possible errors. */
 #define D_GIF_ERR_READ_FAILED    102
 #define D_GIF_ERR_NOT_GIF_FILE   103
@@ -186,68 +227,113 @@
 #define D_GIF_ERR_IMAGE_DEFECT   112
 #define D_GIF_ERR_EOF_TOO_SOON   113
 
+/* These are legacy.  You probably do not want to call them directly */
+int DGifGetScreenDesc(GifFileType *GifFile);
+int DGifGetRecordType(GifFileType *GifFile, GifRecordType *GifType);
+int DGifGetImageDesc(GifFileType *GifFile);
+int DGifGetLine(GifFileType *GifFile, GifPixelType *GifLine, int GifLineLen);
+int DGifGetPixel(GifFileType *GifFile, GifPixelType GifPixel);
+int DGifGetComment(GifFileType *GifFile, char *GifComment);
+int DGifGetExtension(GifFileType *GifFile, int *GifExtCode,
+                     GifByteType **GifExtension);
+int DGifGetExtensionNext(GifFileType *GifFile, GifByteType **GifExtension);
+int DGifGetCode(GifFileType *GifFile, int *GifCodeSize,
+                GifByteType **GifCodeBlock);
+int DGifGetCodeNext(GifFileType *GifFile, GifByteType **GifCodeBlock);
+int DGifGetLZCodes(GifFileType *GifFile, int *GifCode);
 
-/******************************************************************************
- * O.K., here are the routines from GIF_LIB file GIF_ERR.C.
-******************************************************************************/
-extern void PrintGifError(void);
-extern int GifLastError(void);
 
 /******************************************************************************
- * O.K., here are the routines from GIF_LIB file DEV2GIF.C.
+ Color table quantization (deprecated)
 ******************************************************************************/
-extern int DumpScreen2Gif(const char *FileName,
-                          int ReqGraphDriver,
-                          long ReqGraphMode1,
-                          long ReqGraphMode2,
-                          long ReqGraphMode3);
+int GifQuantizeBuffer(unsigned int Width, unsigned int Height,
+                   int *ColorMapSize, GifByteType * RedInput,
+                   GifByteType * GreenInput, GifByteType * BlueInput,
+                   GifByteType * OutputBuffer,
+                   GifColorType * OutputColorMap);
+
+/******************************************************************************
+ Error handling and reporting.
+******************************************************************************/
+extern const char *GifErrorString(int ErrorCode);     /* new in 2012 - ESR */
 
 /*****************************************************************************
- *
- * Everything below this point is new after version 1.2, supporting `slurp
- * mode' for doing I/O in two big belts with all the image-bashing in core.
- *
- *****************************************************************************/
+ Everything below this point is new after version 1.2, supporting `slurp
+ mode' for doing I/O in two big belts with all the image-bashing in core.
+******************************************************************************/
+
+/******************************************************************************
+ Color map handling from gif_alloc.c
+******************************************************************************/
+
+extern ColorMapObject *GifMakeMapObject(int ColorCount,
+                                     const GifColorType *ColorMap);
+extern void GifFreeMapObject(ColorMapObject *Object);
+extern ColorMapObject *GifUnionColorMap(const ColorMapObject *ColorIn1,
+                                     const ColorMapObject *ColorIn2,
+                                     GifPixelType ColorTransIn2[]);
+extern int GifBitSize(int n);
 
 /******************************************************************************
- * Color Map handling from ALLOCGIF.C
- *****************************************************************************/
+ Support for the in-core structures allocation (slurp mode).
+******************************************************************************/
 
-extern ColorMapObject *MakeMapObject(int ColorCount,
-                                     const GifColorType * ColorMap);
-extern void FreeMapObject(ColorMapObject * Object);
-extern int BitSize(int n);
+extern void GifApplyTranslation(SavedImage *Image, GifPixelType Translation[]);
+extern int GifAddExtensionBlock(int *ExtensionBlock_Count,
+                                ExtensionBlock **ExtensionBlocks,
+                                int Function,
+                                unsigned int Len, unsigned char ExtData[]);
+extern void GifFreeExtensions(int *ExtensionBlock_Count,
+                              ExtensionBlock **ExtensionBlocks);
+extern SavedImage *GifMakeSavedImage(GifFileType *GifFile,
+                                  const SavedImage *CopyFrom);
+extern void GifFreeSavedImages(GifFileType *GifFile);
 
 /******************************************************************************
- * Support for the in-core structures allocation (slurp mode).
- *****************************************************************************/
+ 5.x functions for GIF89 graphics control blocks
+******************************************************************************/
+
+int DGifExtensionToGCB(const size_t GifExtensionLength,
+                       const GifByteType *GifExtension,
+                       GraphicsControlBlock *GCB);
+size_t EGifGCBToExtension(const GraphicsControlBlock *GCB,
+                          GifByteType *GifExtension);
 
-/* This is the in-core version of an extension record */
-typedef struct {
-    int ByteCount;
-    char *Bytes;    /* on malloc(3) heap */
-    int Function;   /* Holds the type of the Extension block. */
-} ExtensionBlock;
+int DGifSavedExtensionToGCB(GifFileType *GifFile,
+                            int ImageIndex,
+                            GraphicsControlBlock *GCB);
+int EGifGCBToSavedExtension(const GraphicsControlBlock *GCB,
+                            GifFileType *GifFile,
+                            int ImageIndex);
+
+/******************************************************************************
+ The library's internal utility font
+******************************************************************************/
 
-/* This holds an image header, its unpacked raster bits, and extensions */
-typedef struct SavedImage {
-    GifImageDesc ImageDesc;
-    unsigned char *RasterBits;  /* on malloc(3) heap */
-    int Function;   /* DEPRECATED: Use ExtensionBlocks[x].Function instead */
-    int ExtensionBlockCount;
-    ExtensionBlock *ExtensionBlocks;    /* on malloc(3) heap */
-} SavedImage;
+#define GIF_FONT_WIDTH  8
+#define GIF_FONT_HEIGHT 8
+extern const unsigned char GifAsciiTable8x8[][GIF_FONT_WIDTH];
+
+extern void GifDrawText8x8(SavedImage *Image,
+                     const int x, const int y,
+                     const char *legend, const int color);
 
-extern void MakeExtension(SavedImage * New, int Function);
-extern int AddExtensionBlock(SavedImage * New, int Len,
-                             unsigned char ExtData[]);
-extern void FreeExtension(SavedImage * Image);
-extern SavedImage *MakeSavedImage(GifFileType * GifFile,
-                                  const SavedImage * CopyFrom);
-extern void FreeSavedImages(GifFileType * GifFile);
+extern void GifDrawBox(SavedImage *Image,
+                    const int x, const int y,
+                    const int w, const int d, const int color);
 
+extern void GifDrawRectangle(SavedImage *Image,
+                   const int x, const int y,
+                   const int w, const int d, const int color);
+
+extern void GifDrawBoxedText8x8(SavedImage *Image,
+                          const int x, const int y,
+                          const char *legend,
+                          const int border, const int bg, const int fg);
 
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
 #endif /* _GIF_LIB_H */
+
+/* end */
--- a/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_lib_private.h	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_lib_private.h	Wed Jul 05 20:33:55 2017 +0200
@@ -22,21 +22,21 @@
  * questions.
  */
 
+/****************************************************************************
+
+gif_lib_private.h - internal giflib routines and structures
+
+****************************************************************************/
+
 #ifndef _GIF_LIB_PRIVATE_H
 #define _GIF_LIB_PRIVATE_H
 
 #include "gif_lib.h"
-
-#define PROGRAM_NAME "LIBUNGIF"
+#include "gif_hash.h"
 
-#ifdef SYSV
-#define VersionStr "Gif library module,\t\tEric S. Raymond\n\
-                    (C) Copyright 1997 Eric S. Raymond\n"
-#else
-#define VersionStr PROGRAM_NAME "    IBMPC " GIF_LIB_VERSION \
-                    "    Eric S. Raymond,    " __DATE__ ",   " \
-                    __TIME__ "\n" "(C) Copyright 1997 Eric S. Raymond\n"
-#endif /* SYSV */
+#define EXTENSION_INTRODUCER      0x21
+#define DESCRIPTOR_INTRODUCER     0x2c
+#define TERMINATOR_INTRODUCER     0x3b
 
 #define LZ_MAX_CODE         4095    /* Biggest code possible in 12 bits. */
 #define LZ_BITS             12
@@ -54,7 +54,7 @@
 #define IS_WRITEABLE(Private)   (Private->FileState & FILE_STATE_WRITE)
 
 typedef struct GifFilePrivateType {
-    int FileState, FileHandle,  /* Where all this data goes to! */
+    GifWord FileState, FileHandle,  /* Where all this data goes to! */
       BitsPerPixel,     /* Bits per pixel (Codes uses at least this + 1). */
       ClearCode,   /* The CLEAR LZ code. */
       EOFCode,     /* The EOF LZ code. */
@@ -73,9 +73,11 @@
     GifByteType Buf[256];   /* Compressed input is buffered here. */
     GifByteType Stack[LZ_MAX_CODE]; /* Decoded pixels are stacked here. */
     GifByteType Suffix[LZ_MAX_CODE + 1];    /* So we can trace the codes. */
-    unsigned int Prefix[LZ_MAX_CODE + 1];
+    GifPrefixType Prefix[LZ_MAX_CODE + 1];
+    GifHashTableType *HashTable;
+    bool gif89;
 } GifFilePrivateType;
 
-extern int _GifError;
+#endif /* _GIF_LIB_PRIVATE_H */
 
-#endif /* _GIF_LIB_PRIVATE_H */
+/* end */
--- a/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gifalloc.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gifalloc.c	Wed Jul 05 20:33:55 2017 +0200
@@ -23,36 +23,27 @@
  */
 
 /*****************************************************************************
- *   "Gif-Lib" - Yet another gif library.
- *
- * Written by:  Gershon Elber                Ver 0.1, Jun. 1989
- * Extensively hacked by: Eric S. Raymond        Ver 1.?, Sep 1992
- *****************************************************************************
- * GIF construction tools
- *****************************************************************************
- * History:
- * 15 Sep 92 - Version 1.0 by Eric Raymond.
- ****************************************************************************/
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+ GIF construction tools
+
+****************************************************************************/
 
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
+
 #include "gif_lib.h"
 
 #define MAX(x, y)    (((x) > (y)) ? (x) : (y))
 
 /******************************************************************************
- * Miscellaneous utility functions
- *****************************************************************************/
+ Miscellaneous utility functions
+******************************************************************************/
 
 /* return smallest bitfield size n will fit in */
 int
-BitSize(int n) {
-
+GifBitSize(int n)
+{
     register int i;
 
     for (i = 1; i <= 8; i++)
@@ -62,22 +53,21 @@
 }
 
 /******************************************************************************
- * Color map object functions
- *****************************************************************************/
+  Color map object functions
+******************************************************************************/
 
 /*
  * Allocate a color map of given size; initialize with contents of
  * ColorMap if that pointer is non-NULL.
  */
 ColorMapObject *
-MakeMapObject(int ColorCount,
-              const GifColorType * ColorMap) {
-
+GifMakeMapObject(int ColorCount, const GifColorType *ColorMap)
+{
     ColorMapObject *Object;
 
     /*** FIXME: Our ColorCount has to be a power of two.  Is it necessary to
      * make the user know that or should we automatically round up instead? */
-    if (ColorCount != (1 << BitSize(ColorCount))) {
+    if (ColorCount != (1 << GifBitSize(ColorCount))) {
         return ((ColorMapObject *) NULL);
     }
 
@@ -93,9 +83,10 @@
     }
 
     Object->ColorCount = ColorCount;
-    Object->BitsPerPixel = BitSize(ColorCount);
+    Object->BitsPerPixel = GifBitSize(ColorCount);
+    Object->SortFlag = false;
 
-    if (ColorMap) {
+    if (ColorMap != NULL) {
         memcpy((char *)Object->Colors,
                (char *)ColorMap, ColorCount * sizeof(GifColorType));
     }
@@ -103,118 +94,222 @@
     return (Object);
 }
 
-/*
- * Free a color map object
- */
+/*******************************************************************************
+Free a color map object
+*******************************************************************************/
 void
-FreeMapObject(ColorMapObject * Object) {
-
+GifFreeMapObject(ColorMapObject *Object)
+{
     if (Object != NULL) {
-        free(Object->Colors);
-        free(Object);
-        Object = NULL;
+        (void)free(Object->Colors);
+        (void)free(Object);
     }
 }
 
 #ifdef DEBUG
 void
-DumpColorMap(ColorMapObject * Object,
-             FILE * fp) {
-
-    if (Object) {
+DumpColorMap(ColorMapObject *Object,
+             FILE * fp)
+{
+    if (Object != NULL) {
         int i, j, Len = Object->ColorCount;
 
         for (i = 0; i < Len; i += 4) {
             for (j = 0; j < 4 && j < Len; j++) {
-                fprintf(fp, "%3d: %02x %02x %02x   ", i + j,
-                        Object->Colors[i + j].Red,
-                        Object->Colors[i + j].Green,
-                        Object->Colors[i + j].Blue);
+                (void)fprintf(fp, "%3d: %02x %02x %02x   ", i + j,
+                              Object->Colors[i + j].Red,
+                              Object->Colors[i + j].Green,
+                              Object->Colors[i + j].Blue);
             }
-            fprintf(fp, "\n");
+            (void)fprintf(fp, "\n");
         }
     }
 }
 #endif /* DEBUG */
 
-/******************************************************************************
- * Extension record functions
- *****************************************************************************/
+/*******************************************************************************
+ Compute the union of two given color maps and return it.  If result can't
+ fit into 256 colors, NULL is returned, the allocated union otherwise.
+ ColorIn1 is copied as is to ColorUnion, while colors from ColorIn2 are
+ copied iff they didn't exist before.  ColorTransIn2 maps the old
+ ColorIn2 into the ColorUnion color map table./
+*******************************************************************************/
+ColorMapObject *
+GifUnionColorMap(const ColorMapObject *ColorIn1,
+              const ColorMapObject *ColorIn2,
+              GifPixelType ColorTransIn2[])
+{
+    int i, j, CrntSlot, RoundUpTo, NewGifBitSize;
+    ColorMapObject *ColorUnion;
+
+    /*
+     * We don't worry about duplicates within either color map; if
+     * the caller wants to resolve those, he can perform unions
+     * with an empty color map.
+     */
 
-void
-MakeExtension(SavedImage * New,
-              int Function) {
+    /* Allocate table which will hold the result for sure. */
+    ColorUnion = GifMakeMapObject(MAX(ColorIn1->ColorCount,
+                               ColorIn2->ColorCount) * 2, NULL);
+
+    if (ColorUnion == NULL)
+        return (NULL);
+
+    /*
+     * Copy ColorIn1 to ColorUnion.
+     */
+    for (i = 0; i < ColorIn1->ColorCount; i++)
+        ColorUnion->Colors[i] = ColorIn1->Colors[i];
+    CrntSlot = ColorIn1->ColorCount;
+
+    /*
+     * Potentially obnoxious hack:
+     *
+     * Back CrntSlot down past all contiguous {0, 0, 0} slots at the end
+     * of table 1.  This is very useful if your display is limited to
+     * 16 colors.
+     */
+    while (ColorIn1->Colors[CrntSlot - 1].Red == 0
+           && ColorIn1->Colors[CrntSlot - 1].Green == 0
+           && ColorIn1->Colors[CrntSlot - 1].Blue == 0)
+        CrntSlot--;
 
-    New->Function = Function;
-    /*** FIXME:
-     * Someday we might have to deal with multiple extensions.
-     * ??? Was this a note from Gershon or from me?  Does the multiple
-     * extension blocks solve this or do we need multiple Functions?  Or is
-     * this an obsolete function?  (People should use AddExtensionBlock
-     * instead?)
-     * Looks like AddExtensionBlock needs to take the int Function argument
-     * then it can take the place of this function.  Right now people have to
-     * use both.  Fix AddExtensionBlock and add this to the deprecation list.
-     */
+    /* Copy ColorIn2 to ColorUnion (use old colors if they exist): */
+    for (i = 0; i < ColorIn2->ColorCount && CrntSlot <= 256; i++) {
+        /* Let's see if this color already exists: */
+        for (j = 0; j < ColorIn1->ColorCount; j++)
+            if (memcmp (&ColorIn1->Colors[j], &ColorIn2->Colors[i],
+                        sizeof(GifColorType)) == 0)
+                break;
+
+        if (j < ColorIn1->ColorCount)
+            ColorTransIn2[i] = j;    /* color exists in Color1 */
+        else {
+            /* Color is new - copy it to a new slot: */
+            ColorUnion->Colors[CrntSlot] = ColorIn2->Colors[i];
+            ColorTransIn2[i] = CrntSlot++;
+        }
+    }
+
+    if (CrntSlot > 256) {
+        GifFreeMapObject(ColorUnion);
+        return ((ColorMapObject *) NULL);
+    }
+
+    NewGifBitSize = GifBitSize(CrntSlot);
+    RoundUpTo = (1 << NewGifBitSize);
+
+    if (RoundUpTo != ColorUnion->ColorCount) {
+        register GifColorType *Map = ColorUnion->Colors;
+
+        /*
+         * Zero out slots up to next power of 2.
+         * We know these slots exist because of the way ColorUnion's
+         * start dimension was computed.
+         */
+        for (j = CrntSlot; j < RoundUpTo; j++)
+            Map[j].Red = Map[j].Green = Map[j].Blue = 0;
+
+        /* perhaps we can shrink the map? */
+        if (RoundUpTo < ColorUnion->ColorCount) {
+            GifColorType *new_map = (GifColorType *)realloc(Map,
+                                 sizeof(GifColorType) * RoundUpTo);
+            if( new_map == NULL ) {
+                GifFreeMapObject(ColorUnion);
+                return ((ColorMapObject *) NULL);
+            }
+            ColorUnion->Colors = new_map;
+        }
+    }
+
+    ColorUnion->ColorCount = RoundUpTo;
+    ColorUnion->BitsPerPixel = NewGifBitSize;
+
+    return (ColorUnion);
 }
 
+/*******************************************************************************
+ Apply a given color translation to the raster bits of an image
+*******************************************************************************/
+void
+GifApplyTranslation(SavedImage *Image, GifPixelType Translation[])
+{
+    register int i;
+    register int RasterSize = Image->ImageDesc.Height * Image->ImageDesc.Width;
+
+    for (i = 0; i < RasterSize; i++)
+        Image->RasterBits[i] = Translation[Image->RasterBits[i]];
+}
+
+/******************************************************************************
+ Extension record functions
+******************************************************************************/
 int
-AddExtensionBlock(SavedImage * New,
-                  int Len,
-                  unsigned char ExtData[]) {
-
+GifAddExtensionBlock(int *ExtensionBlockCount,
+                     ExtensionBlock **ExtensionBlocks,
+                     int Function,
+                     unsigned int Len,
+                     unsigned char ExtData[])
+{
     ExtensionBlock *ep;
 
-    if (New->ExtensionBlocks == NULL)
-        New->ExtensionBlocks=(ExtensionBlock *)malloc(sizeof(ExtensionBlock));
-    else
-        New->ExtensionBlocks = (ExtensionBlock *)realloc(New->ExtensionBlocks,
+    if (*ExtensionBlocks == NULL)
+        *ExtensionBlocks=(ExtensionBlock *)malloc(sizeof(ExtensionBlock));
+    else {
+        ExtensionBlock* ep_new = (ExtensionBlock *)realloc(*ExtensionBlocks,
                                       sizeof(ExtensionBlock) *
-                                      (New->ExtensionBlockCount + 1));
+                                      (*ExtensionBlockCount + 1));
+        if( ep_new == NULL )
+            return (GIF_ERROR);
+        *ExtensionBlocks = ep_new;
+    }
 
-    if (New->ExtensionBlocks == NULL)
+    if (*ExtensionBlocks == NULL)
         return (GIF_ERROR);
 
-    ep = &New->ExtensionBlocks[New->ExtensionBlockCount++];
+    ep = &(*ExtensionBlocks)[(*ExtensionBlockCount)++];
 
+    ep->Function = Function;
     ep->ByteCount=Len;
-    ep->Bytes = (char *)malloc(ep->ByteCount);
+    ep->Bytes = (GifByteType *)malloc(ep->ByteCount);
     if (ep->Bytes == NULL)
         return (GIF_ERROR);
 
-    if (ExtData) {
+    if (ExtData != NULL) {
         memcpy(ep->Bytes, ExtData, Len);
-        ep->Function = New->Function;
     }
 
     return (GIF_OK);
 }
 
 void
-FreeExtension(SavedImage * Image)
+GifFreeExtensions(int *ExtensionBlockCount,
+                  ExtensionBlock **ExtensionBlocks)
 {
     ExtensionBlock *ep;
 
-    if ((Image == NULL) || (Image->ExtensionBlocks == NULL)) {
+    if (*ExtensionBlocks == NULL)
         return;
-    }
-    for (ep = Image->ExtensionBlocks;
-         ep < (Image->ExtensionBlocks + Image->ExtensionBlockCount); ep++)
+
+    for (ep = *ExtensionBlocks;
+         ep < (*ExtensionBlocks + *ExtensionBlockCount);
+         ep++)
         (void)free((char *)ep->Bytes);
-    free((char *)Image->ExtensionBlocks);
-    Image->ExtensionBlocks = NULL;
+    (void)free((char *)*ExtensionBlocks);
+    *ExtensionBlocks = NULL;
+    *ExtensionBlockCount = 0;
 }
 
 /******************************************************************************
- * Image block allocation functions
+ Image block allocation functions
 ******************************************************************************/
 
 /* Private Function:
  * Frees the last image in the GifFile->SavedImages array
  */
 void
-FreeLastSavedImage(GifFileType *GifFile) {
-
+FreeLastSavedImage(GifFileType *GifFile)
+{
     SavedImage *sp;
 
     if ((GifFile == NULL) || (GifFile->SavedImages == NULL))
@@ -225,20 +320,21 @@
     sp = &GifFile->SavedImages[GifFile->ImageCount];
 
     /* Deallocate its Colormap */
-    if (sp->ImageDesc.ColorMap)
-        FreeMapObject(sp->ImageDesc.ColorMap);
+    if (sp->ImageDesc.ColorMap != NULL) {
+        GifFreeMapObject(sp->ImageDesc.ColorMap);
+        sp->ImageDesc.ColorMap = NULL;
+    }
 
     /* Deallocate the image data */
-    if (sp->RasterBits)
+    if (sp->RasterBits != NULL)
         free((char *)sp->RasterBits);
 
     /* Deallocate any extensions */
-    if (sp->ExtensionBlocks)
-        FreeExtension(sp);
+    GifFreeExtensions(&sp->ExtensionBlockCount, &sp->ExtensionBlocks);
 
     /*** FIXME: We could realloc the GifFile->SavedImages structure but is
      * there a point to it? Saves some memory but we'd have to do it every
-     * time.  If this is used in FreeSavedImages then it would be inefficient
+     * time.  If this is used in GifFreeSavedImages then it would be inefficient
      * (The whole array is going to be deallocated.)  If we just use it when
      * we want to free the last Image it's convenient to do it here.
      */
@@ -248,11 +344,8 @@
  * Append an image block to the SavedImages array
  */
 SavedImage *
-MakeSavedImage(GifFileType * GifFile,
-               const SavedImage * CopyFrom) {
-
-    SavedImage *sp;
-
+GifMakeSavedImage(GifFileType *GifFile, const SavedImage *CopyFrom)
+{
     if (GifFile->SavedImages == NULL)
         GifFile->SavedImages = (SavedImage *)malloc(sizeof(SavedImage));
     else
@@ -262,10 +355,10 @@
     if (GifFile->SavedImages == NULL)
         return ((SavedImage *)NULL);
     else {
-        sp = &GifFile->SavedImages[GifFile->ImageCount++];
+        SavedImage *sp = &GifFile->SavedImages[GifFile->ImageCount++];
         memset((char *)sp, '\0', sizeof(SavedImage));
 
-        if (CopyFrom) {
+        if (CopyFrom != NULL) {
             memcpy((char *)sp, CopyFrom, sizeof(SavedImage));
 
             /*
@@ -275,8 +368,8 @@
              */
 
             /* first, the local color map */
-            if (sp->ImageDesc.ColorMap) {
-                sp->ImageDesc.ColorMap = MakeMapObject(
+            if (sp->ImageDesc.ColorMap != NULL) {
+                sp->ImageDesc.ColorMap = GifMakeMapObject(
                                          CopyFrom->ImageDesc.ColorMap->ColorCount,
                                          CopyFrom->ImageDesc.ColorMap->Colors);
                 if (sp->ImageDesc.ColorMap == NULL) {
@@ -298,7 +391,7 @@
                    CopyFrom->ImageDesc.Width);
 
             /* finally, the extension blocks */
-            if (sp->ExtensionBlocks) {
+            if (sp->ExtensionBlocks != NULL) {
                 sp->ExtensionBlocks = (ExtensionBlock *)malloc(
                                       sizeof(ExtensionBlock) *
                                       CopyFrom->ExtensionBlockCount);
@@ -308,17 +401,6 @@
                 }
                 memcpy(sp->ExtensionBlocks, CopyFrom->ExtensionBlocks,
                        sizeof(ExtensionBlock) * CopyFrom->ExtensionBlockCount);
-
-                /*
-                 * For the moment, the actual blocks can take their
-                 * chances with free().  We'll fix this later.
-                 *** FIXME: [Better check this out... Toshio]
-                 * 2004 May 27: Looks like this was an ESR note.
-                 * It means the blocks are shallow copied from InFile to
-                 * OutFile.  However, I don't see that in this code....
-                 * Did ESR fix it but never remove this note (And other notes
-                 * in gifspnge?)
-                 */
             }
         }
 
@@ -327,8 +409,8 @@
 }
 
 void
-FreeSavedImages(GifFileType * GifFile) {
-
+GifFreeSavedImages(GifFileType *GifFile)
+{
     SavedImage *sp;
 
     if ((GifFile == NULL) || (GifFile->SavedImages == NULL)) {
@@ -336,15 +418,18 @@
     }
     for (sp = GifFile->SavedImages;
          sp < GifFile->SavedImages + GifFile->ImageCount; sp++) {
-        if (sp->ImageDesc.ColorMap)
-            FreeMapObject(sp->ImageDesc.ColorMap);
+        if (sp->ImageDesc.ColorMap != NULL) {
+            GifFreeMapObject(sp->ImageDesc.ColorMap);
+            sp->ImageDesc.ColorMap = NULL;
+        }
 
-        if (sp->RasterBits)
+        if (sp->RasterBits != NULL)
             free((char *)sp->RasterBits);
 
-        if (sp->ExtensionBlocks)
-            FreeExtension(sp);
+        GifFreeExtensions(&sp->ExtensionBlockCount, &sp->ExtensionBlocks);
     }
     free((char *)GifFile->SavedImages);
-    GifFile->SavedImages=NULL;
+    GifFile->SavedImages = NULL;
 }
+
+/* end */
--- a/jdk/src/java.desktop/share/native/libsplashscreen/splashscreen_gif.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/splashscreen_gif.c	Wed Jul 05 20:33:55 2017 +0200
@@ -82,8 +82,8 @@
     int i, j;
     int imageIndex;
     int cx, cy, cw, ch; /* clamped coordinates */
-    const int interlacedOffset[] = { 0, 4, 2, 1, 0 };   /* The way Interlaced image should. */
-    const int interlacedJumps[] = { 8, 8, 4, 2, 1 };    /* be read - offsets and jumps... */
+    int numLines;
+    int numPassLines;
 
     if (DGifSlurp(gif) == GIF_ERROR) {
         return 0;
@@ -213,16 +213,6 @@
             byte_t *pSrc = image->RasterBits;
             ImageFormat srcFormat;
             ImageRect srcRect, dstRect;
-            int pass, npass;
-
-            if (desc->Interlace) {
-                pass = 0;
-                npass = 4;
-            }
-            else {
-                pass = 4;
-                npass = 5;
-            }
 
             srcFormat.colorMap = colorMapBuf;
             srcFormat.depthBytes = 1;
@@ -231,26 +221,22 @@
             srcFormat.fixedBits = QUAD_ALPHA_MASK;      // fixed 100% alpha
             srcFormat.premultiplied = 0;
 
-            for (; pass < npass; ++pass) {
-                int jump = interlacedJumps[pass];
-                int ofs = interlacedOffset[pass];
-                /* Number of source lines for current pass */
-                int numPassLines = (desc->Height + jump - ofs - 1) / jump;
-                /* Number of lines that fits to dest buffer */
-                int numLines = (ch + jump - ofs - 1) / jump;
+            /* Number of source lines for current pass */
+            numPassLines = desc->Height;
+            /* Number of lines that fits to dest buffer */
+            numLines = ch;
+
+            initRect(&srcRect, 0, 0, desc->Width, numLines, 1,
+                desc->Width, pSrc, &srcFormat);
 
-                initRect(&srcRect, 0, 0, desc->Width, numLines, 1,
-                    desc->Width, pSrc, &srcFormat);
+            if (numLines > 0) {
+                initRect(&dstRect, cx, cy, cw,
+                         numLines , 1, stride, pBitmapBits, &splash->imageFormat);
 
-                if (numLines > 0) {
-                    initRect(&dstRect, cx, cy + ofs, cw,
-                             numLines , jump, stride, pBitmapBits, &splash->imageFormat);
-
-                    pSrc += convertRect(&srcRect, &dstRect, CVT_ALPHATEST);
-                }
-                // skip extra source data
-                pSrc += (numPassLines - numLines) * srcRect.stride;
+                pSrc += convertRect(&srcRect, &dstRect, CVT_ALPHATEST);
             }
+            // skip extra source data
+            pSrc += (numPassLines - numLines) * srcRect.stride;
         }
 
         // now dispose of the previous frame correctly
@@ -310,7 +296,7 @@
     free(pBitmapBits);
     free(pOldBitmapBits);
 
-    DGifCloseFile(gif);
+    DGifCloseFile(gif, NULL);
 
     return 1;
 }
@@ -318,7 +304,7 @@
 int
 SplashDecodeGifStream(Splash * splash, SplashStream * stream)
 {
-    GifFileType *gif = DGifOpen((void *) stream, SplashStreamGifInputFunc);
+    GifFileType *gif = DGifOpen((void *) stream, SplashStreamGifInputFunc, NULL);
 
     if (!gif)
         return 0;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/solaris/classes/sun/font/X11CNS11643.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,178 @@
+/*
+ * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.CharBuffer;
+import java.nio.ByteBuffer;
+import java.nio.charset.*;
+import sun.nio.cs.*;
+
+public abstract class X11CNS11643 extends Charset {
+    private final int plane;
+    public X11CNS11643 (int plane, String name) {
+        super(name, null);
+        switch (plane) {
+        case 1:
+            this.plane = 0; // CS1
+            break;
+        case 2:
+        case 3:
+            this.plane = plane;
+            break;
+        default:
+            throw new IllegalArgumentException
+                ("Only planes 1, 2, and 3 supported");
+        }
+    }
+
+    public CharsetEncoder newEncoder() {
+        return new Encoder(this, plane);
+    }
+
+    public CharsetDecoder newDecoder() {
+        return new Decoder(this, plane);
+    }
+
+    public boolean contains(Charset cs) {
+        return cs instanceof X11CNS11643;
+    }
+
+    private class Encoder extends EUC_TW.Encoder {
+        private int plane;
+        public Encoder(Charset cs, int plane) {
+            super(cs);
+            this.plane = plane;
+        }
+
+        private byte[] bb = new byte[4];
+        public boolean canEncode(char c) {
+            if (c <= 0x7F) {
+                return false;
+            }
+            int nb = toEUC(c, bb);
+            if (nb == -1)
+                return false;
+            int p = 0;
+            if (nb == 4)
+                p = (bb[1] & 0xff) - 0xa0;
+            return (p == plane);
+        }
+
+        public boolean isLegalReplacement(byte[] repl) {
+            return true;
+        }
+
+        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
+            char[] sa = src.array();
+            int sp = src.arrayOffset() + src.position();
+            int sl = src.arrayOffset() + src.limit();
+            byte[] da = dst.array();
+            int dp = dst.arrayOffset() + dst.position();
+            int dl = dst.arrayOffset() + dst.limit();
+
+            try {
+                while (sp < sl) {
+                    char c = sa[sp];
+                    if ( c > '\u007f'&& c < '\uFFFE') {
+                        int nb = toEUC(c, bb);
+                        if (nb != -1) {
+                            int p = 0;
+                            if (nb == 4)
+                                p = (bb[1] & 0xff) - 0xa0;
+                            if (p == plane) {
+                                if (dl - dp < 2)
+                                    return CoderResult.OVERFLOW;
+                                if (nb == 2) {
+                                    da[dp++] = (byte)(bb[0] & 0x7f);
+                                    da[dp++] = (byte)(bb[1] & 0x7f);
+                                } else {
+                                    da[dp++] = (byte)(bb[2] & 0x7f);
+                                    da[dp++] = (byte)(bb[3] & 0x7f);
+                                }
+                                sp++;
+                                continue;
+                            }
+                        }
+                    }
+                    return CoderResult.unmappableForLength(1);
+                }
+                return CoderResult.UNDERFLOW;
+            } finally {
+                src.position(sp - src.arrayOffset());
+                dst.position(dp - dst.arrayOffset());
+            }
+        }
+    }
+
+    private class Decoder extends EUC_TW.Decoder {
+        int plane;
+        private String table;
+        protected Decoder(Charset cs, int plane) {
+            super(cs);
+            if (plane == 0)
+                this.plane = plane;
+            else if (plane == 2 || plane == 3)
+                this.plane = plane - 1;
+            else
+                throw new IllegalArgumentException
+                    ("Only planes 1, 2, and 3 supported");
+        }
+
+        //we only work on array backed buffer.
+        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
+            byte[] sa = src.array();
+            int sp = src.arrayOffset() + src.position();
+            int sl = src.arrayOffset() + src.limit();
+
+            char[] da = dst.array();
+            int dp = dst.arrayOffset() + dst.position();
+            int dl = dst.arrayOffset() + dst.limit();
+
+            try {
+                while (sp < sl) {
+                    if ( sl - sp < 2) {
+                        return CoderResult.UNDERFLOW;
+                    }
+                    int b1 = (sa[sp] & 0xff) | 0x80;
+                    int b2 = (sa[sp + 1] & 0xff) | 0x80;
+                    char[] cc = toUnicode(b1, b2, plane);
+                    // plane3 has non-bmp characters(added), x11cnsp3
+                    // however does not support them
+                    if (cc == null || cc.length == 2)
+                        return CoderResult.unmappableForLength(2);
+                    if (dl - dp < 1)
+                        return CoderResult.OVERFLOW;
+                    da[dp++] = cc[0];
+                    sp +=2;
+                }
+                return CoderResult.UNDERFLOW;
+            } finally {
+                src.position(sp - src.arrayOffset());
+                dst.position(dp - dst.arrayOffset());
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/solaris/classes/sun/font/X11CNS11643P1.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+package sun.font;
+
+public class X11CNS11643P1 extends X11CNS11643 {
+    public X11CNS11643P1() {
+        super(1, "X11CNS11643P1");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/solaris/classes/sun/font/X11CNS11643P2.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+public class X11CNS11643P2 extends X11CNS11643 {
+    public X11CNS11643P2() {
+        super(2, "X11CNS11643P2");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/solaris/classes/sun/font/X11CNS11643P3.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+public class X11CNS11643P3 extends X11CNS11643 {
+    public X11CNS11643P3() {
+        super(3, "X11CNS11643P3");
+    }
+}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/UNIXToolkit.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/UNIXToolkit.java	Wed Jul 05 20:33:55 2017 +0200
@@ -106,6 +106,7 @@
     /**
      * Overridden to handle GTK icon loading
      */
+    @Override
     protected Object lazilyLoadDesktopProperty(String name) {
         if (name.startsWith("gtk.icon.")) {
             return lazilyLoadGTKIcon(name);
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XBaseMenuWindow.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XBaseMenuWindow.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -326,9 +326,8 @@
      * check for adding duplicate items
      * @param item item to add
      */
-    @SuppressWarnings("deprecation")
     public void addItem(MenuItem item) {
-        XMenuItemPeer mp = (XMenuItemPeer)item.getPeer();
+        XMenuItemPeer mp = AWTAccessor.getMenuComponentAccessor().getPeer(item);
         if (mp != null) {
             mp.setContainer(this);
             synchronized(getMenuTreeLock()) {
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XComponentPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XComponentPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -52,7 +52,6 @@
 import java.awt.event.MouseWheelEvent;
 import java.awt.event.PaintEvent;
 import java.awt.event.WindowEvent;
-import java.awt.event.InvocationEvent;
 import java.awt.image.ImageObserver;
 import java.awt.image.ImageProducer;
 import java.awt.image.VolatileImage;
@@ -63,6 +62,8 @@
 import java.util.Collection;
 import java.util.Objects;
 import java.util.Set;
+
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.util.logging.PlatformLogger;
 import sun.awt.*;
 import sun.awt.event.IgnorePaintEvent;
@@ -182,7 +183,8 @@
         }
 
         if (container instanceof Window) {
-            XWindowPeer wpeer = (XWindowPeer)(container.getPeer());
+            XWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                           .getPeer(container);
             if (wpeer != null) {
                 return (wpeer.winAttr.visibilityState !=
                         XWindowAttributesData.AWT_UNOBSCURED);
@@ -319,7 +321,8 @@
               if (parentWindow == null) {
                   return rejectFocusRequestHelper("WARNING: Parent window is null");
               }
-              XWindowPeer wpeer = (XWindowPeer)parentWindow.getPeer();
+              XWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                             .getPeer(parentWindow);
               if (wpeer == null) {
                   return rejectFocusRequestHelper("WARNING: Parent window's peer is null");
               }
@@ -390,7 +393,6 @@
     /**
      * @see java.awt.peer.ComponentPeer
      */
-    @SuppressWarnings("deprecation")
     public void setEnabled(final boolean value) {
         if (enableLog.isLoggable(PlatformLogger.Level.FINE)) {
             enableLog.fine("{0}ing {1}", (value ? "Enabl" : "Disabl"), this);
@@ -399,8 +401,9 @@
         // If any of our heavyweight ancestors are disable, we should be too
         // See 6176875 for more information
         final Container cp = SunToolkit.getNativeContainer(target);
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
         if (cp != null) {
-            status &= ((XComponentPeer) cp.getPeer()).isEnabled();
+            status &= acc.<XComponentPeer>getPeer(cp).isEnabled();
         }
         synchronized (getStateLock()) {
             if (enabled == status) {
@@ -412,7 +415,7 @@
         if (target instanceof Container) {
             final Component[] list = ((Container) target).getComponents();
             for (final Component child : list) {
-                final ComponentPeer p = child.getPeer();
+                final ComponentPeer p = acc.getPeer(child);
                 if (p != null) {
                     p.setEnabled(status && child.isEnabled());
                 }
@@ -489,7 +492,7 @@
     }
 
     XWindowPeer getParentTopLevel() {
-        AWTAccessor.ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
+        ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
         Container parent = (target instanceof Container) ? ((Container)target) : (compAccessor.getParent(target));
         // Search for parent window
         while (parent != null && !(parent instanceof Window)) {
@@ -1327,11 +1330,10 @@
         }
     }
 
-    @SuppressWarnings("deprecation")
     private void addTree(Collection<Long> order, Set<Long> set, Container cont) {
         for (int i = 0; i < cont.getComponentCount(); i++) {
             Component comp = cont.getComponent(i);
-            ComponentPeer peer = comp.getPeer();
+            Object peer = AWTAccessor.getComponentAccessor().getPeer(comp);
             if (peer instanceof XComponentPeer) {
                 Long window = Long.valueOf(((XComponentPeer)peer).getWindow());
                 if (!set.contains(window)) {
@@ -1348,7 +1350,6 @@
 
     /****** DropTargetPeer implementation ********************/
 
-    @SuppressWarnings("deprecation")
     public void addDropTarget(DropTarget dt) {
         Component comp = target;
         while(!(comp == null || comp instanceof Window)) {
@@ -1356,14 +1357,13 @@
         }
 
         if (comp instanceof Window) {
-            XWindowPeer wpeer = (XWindowPeer)(comp.getPeer());
+            XWindowPeer wpeer = AWTAccessor.getComponentAccessor().getPeer(comp);
             if (wpeer != null) {
                 wpeer.addDropTarget();
             }
         }
     }
 
-    @SuppressWarnings("deprecation")
     public void removeDropTarget(DropTarget dt) {
         Component comp = target;
         while(!(comp == null || comp instanceof Window)) {
@@ -1371,7 +1371,8 @@
         }
 
         if (comp instanceof Window) {
-            XWindowPeer wpeer = (XWindowPeer)(comp.getPeer());
+            XWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                           .getPeer(comp);
             if (wpeer != null) {
                 wpeer.removeDropTarget();
             }
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1226,7 +1226,7 @@
             Window owner = XWindowPeer.getDecoratedOwner(actualFocusedWindow);
 
             if (owner != null && owner == target) {
-                setActualFocusedWindow((XWindowPeer) AWTAccessor.getComponentAccessor().getPeer(actualFocusedWindow));
+                setActualFocusedWindow(AWTAccessor.getComponentAccessor().getPeer(actualFocusedWindow));
             }
         }
         super.handleWindowFocusOut(oppositeWindow, serial);
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDialogPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDialogPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -117,7 +117,7 @@
         try {
             javaToplevels = XWindowPeer.collectJavaToplevels();
             for (Window w : toBlock) {
-                XWindowPeer wp = (XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(w);
+                XWindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
                 if (wp != null) {
                     wp.setModalBlocked((Dialog)target, true, javaToplevels);
                 }
@@ -139,7 +139,7 @@
         XWindowPeer focusedWindowPeer = null;
 
         if (focusedWindow != null) {
-            focusedWindowPeer = (XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(focusedWindow);
+            focusedWindowPeer = AWTAccessor.getComponentAccessor().getPeer(focusedWindow);
         } else {
             /*
              * For the case when a potential blocked window is not yet focused
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDragSourceContextPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDragSourceContextPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -110,7 +110,6 @@
         return theInstance;
     }
 
-    @SuppressWarnings("deprecation")
     protected void startDrag(Transferable transferable,
                              long[] formats, Map<Long, DataFlavor> formatMap) {
         Component component = getTrigger().getComponent();
@@ -121,7 +120,7 @@
              c = AWTAccessor.getComponentAccessor().getParent(c));
 
         if (c instanceof Window) {
-            wpeer = (XWindowPeer)c.getPeer();
+            wpeer = AWTAccessor.getComponentAccessor().getPeer(c);
         }
 
         if (wpeer == null) {
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDropTargetContextPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDropTargetContextPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,6 +32,7 @@
 
 import java.util.Iterator;
 
+import sun.awt.AWTAccessor;
 import sun.util.logging.PlatformLogger;
 
 import sun.awt.AppContext;
@@ -188,12 +189,12 @@
     // If source is an XEmbedCanvasPeer, passes the event to it for processing and
     // return true if the event is forwarded to the XEmbed child.
     // Otherwise, does nothing and return false.
-    @SuppressWarnings("deprecation")
     private boolean processSunDropTargetEvent(SunDropTargetEvent event) {
         Object source = event.getSource();
 
         if (source instanceof Component) {
-            ComponentPeer peer = ((Component)source).getPeer();
+            Object peer = AWTAccessor.getComponentAccessor()
+                                     .getPeer((Component) source);
             if (peer instanceof XEmbedCanvasPeer) {
                 XEmbedCanvasPeer xEmbedCanvasPeer = (XEmbedCanvasPeer)peer;
                 /* The native context is the pointer to the XClientMessageEvent
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XEmbedChildProxyPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XEmbedChildProxyPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -166,7 +166,6 @@
         XToolkit.postEvent(XToolkit.targetToAppContext(proxy), event);
     }
 
-    @SuppressWarnings("deprecation")
     boolean simulateMotifRequestFocus(Component lightweightChild, boolean temporary,
                                       boolean focusedWindowChangeAllowed, long time)
     {
@@ -174,7 +173,7 @@
             lightweightChild = (Component)proxy;
         }
         Component currentOwner = XKeyboardFocusManagerPeer.getInstance().getCurrentFocusOwner();
-        if (currentOwner != null && currentOwner.getPeer() == null) {
+        if (currentOwner != null && !currentOwner.isDisplayable()) {
             currentOwner = null;
         }
         FocusEvent  fg = new FocusEvent(lightweightChild, FocusEvent.FOCUS_GAINED, false, currentOwner );
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XEmbeddedFrame.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XEmbeddedFrame.java	Wed Jul 05 20:33:55 2017 +0200
@@ -26,8 +26,11 @@
 package sun.awt.X11;
 
 import java.awt.AWTKeyStroke;
+import java.awt.Component;
 import java.awt.Toolkit;
+import java.awt.peer.ComponentPeer;
 
+import sun.awt.AWTAccessor;
 import sun.awt.EmbeddedFrame;
 import sun.util.logging.PlatformLogger;
 
@@ -63,10 +66,9 @@
         }
     }
 
-    @SuppressWarnings("deprecation")
     public void addNotify()
     {
-        if (getPeer() == null) {
+        if (!isDisplayable()) {
             XToolkit toolkit = (XToolkit)Toolkit.getDefaultToolkit();
             setPeer(toolkit.createEmbeddedFrame(this));
         }
@@ -80,9 +82,9 @@
     /*
      * The method shouldn't be called in case of active XEmbed.
      */
-    @SuppressWarnings("deprecation")
     public boolean traverseIn(boolean direction) {
-        XEmbeddedFramePeer peer = (XEmbeddedFramePeer)getPeer();
+        XEmbeddedFramePeer peer = AWTAccessor.getComponentAccessor()
+                                             .getPeer(this);
         if (peer != null) {
             if (peer.supportsXEmbed() && peer.isXEmbedActive()) {
                 log.fine("The method shouldn't be called when XEmbed is active!");
@@ -93,9 +95,9 @@
         return false;
     }
 
-    @SuppressWarnings("deprecation")
     protected boolean traverseOut(boolean direction) {
-        XEmbeddedFramePeer xefp = (XEmbeddedFramePeer) getPeer();
+        XEmbeddedFramePeer xefp = AWTAccessor.getComponentAccessor()
+                                             .getPeer(this);
         if (direction == FORWARD) {
             xefp.traverseOutForward();
         }
@@ -108,9 +110,9 @@
     /*
      * The method shouldn't be called in case of active XEmbed.
      */
-    @SuppressWarnings("deprecation")
     public void synthesizeWindowActivation(boolean doActivate) {
-        XEmbeddedFramePeer peer = (XEmbeddedFramePeer)getPeer();
+        XEmbeddedFramePeer peer = AWTAccessor.getComponentAccessor()
+                                             .getPeer(this);
         if (peer != null) {
             if (peer.supportsXEmbed() && peer.isXEmbedActive()) {
                 log.fine("The method shouldn't be called when XEmbed is active!");
@@ -120,16 +122,17 @@
         }
     }
 
-    @SuppressWarnings("deprecation")
     public void registerAccelerator(AWTKeyStroke stroke) {
-        XEmbeddedFramePeer xefp = (XEmbeddedFramePeer) getPeer();
+        XEmbeddedFramePeer xefp = AWTAccessor.getComponentAccessor()
+                                             .getPeer(this);
         if (xefp != null) {
             xefp.registerAccelerator(stroke);
         }
     }
-    @SuppressWarnings("deprecation")
+
     public void unregisterAccelerator(AWTKeyStroke stroke) {
-        XEmbeddedFramePeer xefp = (XEmbeddedFramePeer) getPeer();
+        XEmbeddedFramePeer xefp = AWTAccessor.getComponentAccessor()
+                                             .getPeer(this);
         if (xefp != null) {
             xefp.unregisterAccelerator(stroke);
         }
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XEmbeddingContainer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XEmbeddingContainer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,7 +28,6 @@
 import java.awt.*;
 import java.util.HashMap;
 import java.awt.event.KeyEvent;
-import java.lang.reflect.*;
 import sun.awt.AWTAccessor;
 
 public class XEmbeddingContainer extends XEmbedHelper implements XEventDispatcher {
@@ -46,13 +45,14 @@
         XToolkit.removeEventDispatcher(embedder.getWindow(), this);
     }
 
-    @SuppressWarnings("deprecation")
     void add(long child) {
         if (checkXEmbed(child)) {
             Component proxy = createChildProxy(child);
             ((Container)embedder.getTarget()).add("Center", proxy);
-            if (proxy.getPeer() != null) {
-                children.put(Long.valueOf(child), proxy.getPeer());
+            XEmbeddedFramePeer peer = AWTAccessor.getComponentAccessor()
+                                                 .getPeer(proxy);
+            if (peer != null) {
+                children.put(Long.valueOf(child), peer);
             }
         }
     }
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XFileDialogPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XFileDialogPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,15 +32,19 @@
 import java.io.*;
 import java.util.Locale;
 import java.util.Arrays;
-import com.sun.java.swing.plaf.motif.*;
-import javax.swing.plaf.ComponentUI;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.util.logging.PlatformLogger;
 import sun.awt.AWTAccessor;
 
-class XFileDialogPeer extends XDialogPeer implements FileDialogPeer, ActionListener, ItemListener, KeyEventDispatcher, XChoicePeerListener {
-    private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.X11.XFileDialogPeer");
+class XFileDialogPeer extends XDialogPeer
+        implements FileDialogPeer, ActionListener, ItemListener,
+                   KeyEventDispatcher, XChoicePeerListener {
+
+    private static final PlatformLogger log =
+            PlatformLogger.getLogger("sun.awt.X11.XFileDialogPeer");
 
     FileDialog  target;
 
@@ -286,7 +290,8 @@
         fileDialog.setSize(400, 400);
 
         // Update choice's popup width
-        XChoicePeer choicePeer = (XChoicePeer)pathChoice.getPeer();
+        XChoicePeer choicePeer = AWTAccessor.getComponentAccessor()
+                                            .getPeer(pathChoice);
         choicePeer.setDrawSelectedItem(false);
         choicePeer.setAlignUnder(pathField);
 
@@ -642,7 +647,6 @@
         }
     }
 
-    @SuppressWarnings("deprecation")
     public boolean dispatchKeyEvent(KeyEvent keyEvent) {
         int id = keyEvent.getID();
         int keyCode = keyEvent.getKeyCode();
@@ -653,13 +657,15 @@
                 while (comp != null) {
                     // Fix for 6240084 Disposing a file dialog when the drop-down is active does not dispose the dropdown menu, on Xtoolkit
                     // See also 6259493
+                    ComponentAccessor acc = AWTAccessor.getComponentAccessor();
                     if (comp == pathChoice) {
-                        XChoicePeer choicePeer = (XChoicePeer)pathChoice.getPeer();
+                        XChoicePeer choicePeer = acc.getPeer(pathChoice);
                         if (choicePeer.isUnfurled()){
                             return false;
                         }
                     }
-                    if (comp.getPeer() == this) {
+                    Object peer = acc.getPeer(comp);
+                    if (peer == this) {
                         handleCancel();
                         return true;
                     }
@@ -796,16 +802,18 @@
         }
 
         super.setVisible(b);
+        XChoicePeer choicePeer = AWTAccessor.getComponentAccessor()
+                                            .getPeer(pathChoice);
         if (b == true){
             // See 6240074 for more information
-            XChoicePeer choicePeer = (XChoicePeer)pathChoice.getPeer();
             choicePeer.addXChoicePeerListener(this);
-            KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);
+            KeyboardFocusManager.getCurrentKeyboardFocusManager()
+                                .addKeyEventDispatcher(this);
         }else{
             // See 6240074 for more information
-            XChoicePeer choicePeer = (XChoicePeer)pathChoice.getPeer();
             choicePeer.removeXChoicePeerListener();
-            KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(this);
+            KeyboardFocusManager.getCurrentKeyboardFocusManager()
+                                .removeKeyEventDispatcher(this);
         }
 
         selectionField.requestFocusInWindow();
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XFramePeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XFramePeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -124,7 +124,8 @@
                     }
                 } else {
                     menubar = mb;
-                    menubarPeer = (XMenuBarPeer) mb.getPeer();
+                    menubarPeer = AWTAccessor.getMenuComponentAccessor()
+                                             .getPeer(mb);
                     if (menubarPeer != null) {
                         menubarPeer.init((Frame)target);
                     }
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,6 +31,8 @@
 import java.awt.Rectangle;
 import java.awt.im.spi.InputMethodContext;
 import java.awt.peer.ComponentPeer;
+
+import sun.awt.AWTAccessor;
 import sun.awt.X11InputMethod;
 
 import sun.util.logging.PlatformLogger;
@@ -137,9 +139,10 @@
         XToolkit.awtUnlock();
     }
 
-    @SuppressWarnings("deprecation")
     long getCurrentParentWindow() {
-        return ((XWindow)clientComponentWindow.getPeer()).getContentWindow();
+        XWindow peer = AWTAccessor.getComponentAccessor()
+                                  .getPeer(clientComponentWindow);
+        return peer.getContentWindow();
     }
 
     /*
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -70,13 +70,13 @@
 
         synchronized(this) {
             if (currentFocusedWindow != null) {
-                from = (XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(currentFocusedWindow);
+                from = AWTAccessor.getComponentAccessor().getPeer(currentFocusedWindow);
             }
 
             currentFocusedWindow = win;
 
             if (currentFocusedWindow != null) {
-                to = (XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(currentFocusedWindow);
+                to = AWTAccessor.getComponentAccessor().getPeer(currentFocusedWindow);
             }
         }
 
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XMenuBarPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XMenuBarPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -163,9 +163,8 @@
         postPaintEvent();
     }
 
-    @SuppressWarnings("deprecation")
     public void addHelpMenu(Menu m) {
-        XMenuPeer mp = (XMenuPeer)m.getPeer();
+        XMenuPeer mp = AWTAccessor.getMenuComponentAccessor().getPeer(m);
         synchronized(getMenuTreeLock()) {
             helpMenu = mp;
         }
@@ -180,10 +179,9 @@
     /**
      * called from XFramePeer.setMenuBar
      */
-    @SuppressWarnings("deprecation")
     public void init(Frame frame) {
         this.target = frame;
-        this.framePeer = (XFramePeer)frame.getPeer();
+        this.framePeer = AWTAccessor.getComponentAccessor().getPeer(frame);
         XCreateWindowParams params = getDelayedParams();
         params.remove(DELAYED);
         params.add(PARENT_WINDOW, framePeer.getShell());
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XMouseInfoPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XMouseInfoPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,10 +28,11 @@
 import java.awt.Point;
 import java.awt.Window;
 import java.awt.GraphicsEnvironment;
-import java.awt.GraphicsConfiguration;
 import java.awt.GraphicsDevice;
 import java.awt.peer.MouseInfoPeer;
 
+import sun.awt.AWTAccessor;
+
 public class XMouseInfoPeer implements MouseInfoPeer {
 
     /**
@@ -83,8 +84,8 @@
         // java.awt.Component.findUnderMouseInWindow checks that
         // the peer is non-null by checking that the component
         // is showing.
-
-        long contentWindow = ((XWindow)w.getPeer()).getContentWindow();
+        XWindow peer = AWTAccessor.getComponentAccessor().getPeer(w);
+        long contentWindow = peer.getContentWindow();
         long parent = XlibUtil.getParentWindow(contentWindow);
 
         XToolkit.awtLock();
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XPanelPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XPanelPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,8 @@
 import java.awt.*;
 import java.awt.peer.*;
 
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.SunGraphicsCallback;
 
 public class XPanelPeer extends XCanvasPeer implements PanelPeer {
@@ -76,17 +78,17 @@
 
     }
 
-    @SuppressWarnings("deprecation")
     public void setBackground(Color c) {
         Component comp;
         int i;
 
         Container cont = (Container) target;
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
         synchronized(target.getTreeLock()) {
             int n = cont.getComponentCount();
             for(i=0; i < n; i++) {
                 comp = cont.getComponent(i);
-                ComponentPeer peer = comp.getPeer();
+                ComponentPeer peer = acc.getPeer(comp);
                 if (peer != null) {
                     Color color = comp.getBackground();
                     if (color == null || color.equals(c)) {
@@ -102,15 +104,15 @@
         setForegroundForHierarchy((Container) target, c);
     }
 
-    @SuppressWarnings("deprecation")
     private void setForegroundForHierarchy(Container cont, Color c) {
         synchronized(target.getTreeLock()) {
+            final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
             int n = cont.getComponentCount();
             for(int i=0; i < n; i++) {
                 Component comp = cont.getComponent(i);
                 Color color = comp.getForeground();
                 if (color == null || color.equals(c)) {
-                    ComponentPeer cpeer = comp.getPeer();
+                    ComponentPeer cpeer = acc.getPeer(comp);
                     if (cpeer != null) {
                         cpeer.setForeground(c);
                     }
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XRepaintArea.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XRepaintArea.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,6 +29,7 @@
 import java.awt.Component;
 import java.awt.Graphics;
 
+import sun.awt.AWTAccessor;
 import sun.awt.RepaintArea;
 
 /**
@@ -55,10 +56,10 @@
     /**
      * Calls <code>Component.paint(Graphics)</code> with given Graphics.
      */
-    @SuppressWarnings("deprecation")
     protected void paintComponent(Component comp, Graphics g) {
         if (comp != null) {
-            final XComponentPeer peer = (XComponentPeer) comp.getPeer();
+            final XComponentPeer peer = AWTAccessor.getComponentAccessor()
+                                                   .getPeer(comp);
             if (peer != null) {
                 peer.paintPeer(g);
             }
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XTextAreaPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XTextAreaPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1164,12 +1164,6 @@
         }
 
         @Override
-        @SuppressWarnings("deprecation")
-        public ComponentPeer getPeer() {
-            return (ComponentPeer) (xwin);
-        }
-
-        @Override
         public void updateUI() {
             ComponentUI ui = new XAWTScrollPaneUI();
             setUI(ui);
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XTextFieldPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XTextFieldPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -547,71 +547,63 @@
             implements ActionListener, DocumentListener {
 
         private boolean isFocused = false;
-        private final XComponentPeer peer;
+        private final XComponentPeer xwin;
 
-        XAWTTextField(String text, XComponentPeer peer, Container parent) {
+        XAWTTextField(String text, XComponentPeer xwin, Container parent) {
             super(text);
-            this.peer = peer;
+            this.xwin = xwin;
             setDoubleBuffered(true);
             setFocusable(false);
             AWTAccessor.getComponentAccessor().setParent(this,parent);
-            setBackground(peer.getPeerBackground());
-            setForeground(peer.getPeerForeground());
-            setFont(peer.getPeerFont());
+            setBackground(xwin.getPeerBackground());
+            setForeground(xwin.getPeerForeground());
+            setFont(xwin.getPeerFont());
             setCaretPosition(0);
             addActionListener(this);
             addNotify();
-
         }
 
         @Override
         @SuppressWarnings("deprecation")
         public void actionPerformed( ActionEvent actionEvent ) {
-            peer.postEvent(new ActionEvent(peer.target,
-                                           ActionEvent.ACTION_PERFORMED,
-                                           getText(),
-                                           actionEvent.getWhen(),
-                                           actionEvent.getModifiers()));
+            xwin.postEvent(
+                    new ActionEvent(xwin.target, ActionEvent.ACTION_PERFORMED,
+                                    getText(), actionEvent.getWhen(),
+                                    actionEvent.getModifiers()));
 
         }
 
         @Override
         public void insertUpdate(DocumentEvent e) {
-            if (peer != null) {
-                peer.postEvent(new TextEvent(peer.target,
+            if (xwin != null) {
+                xwin.postEvent(new TextEvent(xwin.target,
                                              TextEvent.TEXT_VALUE_CHANGED));
             }
         }
 
         @Override
         public void removeUpdate(DocumentEvent e) {
-            if (peer != null) {
-                peer.postEvent(new TextEvent(peer.target,
+            if (xwin != null) {
+                xwin.postEvent(new TextEvent(xwin.target,
                                              TextEvent.TEXT_VALUE_CHANGED));
             }
         }
 
         @Override
         public void changedUpdate(DocumentEvent e) {
-            if (peer != null) {
-                peer.postEvent(new TextEvent(peer.target,
+            if (xwin != null) {
+                xwin.postEvent(new TextEvent(xwin.target,
                                              TextEvent.TEXT_VALUE_CHANGED));
             }
         }
 
-        @Override
-        @SuppressWarnings("deprecation")
-        public ComponentPeer getPeer() {
-            return (ComponentPeer) peer;
-        }
-
         public void repaintNow() {
             paintImmediately(getBounds());
         }
 
         @Override
         public Graphics getGraphics() {
-            return peer.getGraphics();
+            return xwin.getGraphics();
         }
 
         @Override
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -175,6 +175,7 @@
         return uidefaults;
     }
 
+    @Override
     public void loadSystemColors(int[] systemColors) {
         nativeLoadSystemColors(systemColors);
         MotifColorUtilities.loadSystemColors(systemColors);
@@ -347,18 +348,21 @@
         }
     }
 
+    @Override
     public ButtonPeer createButton(Button target) {
         ButtonPeer peer = new XButtonPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public FramePeer createLightweightFrame(LightweightFrame target) {
         FramePeer peer = new XLightweightFramePeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public FramePeer createFrame(Frame target) {
         FramePeer peer = new XFramePeer(target);
         targetCreatedPeer(target, peer);
@@ -540,6 +544,7 @@
 
     static native void awt_toolkit_init();
 
+    @Override
     public void run() {
         awt_toolkit_init();
         run(PRIMARY_LOOP);
@@ -605,7 +610,7 @@
                     Component owner =
                         XKeyboardFocusManagerPeer.getInstance().getCurrentFocusOwner();
                     if (owner != null) {
-                        XWindow ownerWindow = (XWindow) AWTAccessor.getComponentAccessor().getPeer(owner);
+                        XWindow ownerWindow = AWTAccessor.getComponentAccessor().getPeer(owner);
                         if (ownerWindow != null) {
                             w = ownerWindow.getContentWindow();
                         }
@@ -680,10 +685,12 @@
         return screenHeight;
     }
 
+    @Override
     protected int getScreenWidth() {
         return getDefaultScreenWidth();
     }
 
+    @Override
     protected int getScreenHeight() {
         return getDefaultScreenHeight();
     }
@@ -724,6 +731,7 @@
      * not set, we try to calculate the insets ourselves using
      * getScreenInsetsManually method.
      */
+    @Override
     public Insets getScreenInsets(GraphicsConfiguration gc)
     {
         XNETProtocol netProto = XWM.getWM().getNETProtocol();
@@ -911,6 +919,7 @@
         SunToolkit.targetDisposedPeer(target, peer);
     }
 
+    @Override
     public RobotPeer createRobot(Robot target, GraphicsDevice screen) {
         return new XRobotPeer(screen.getDefaultConfiguration());
     }
@@ -922,10 +931,12 @@
      * automatically.  The setter method for this property is
      * irrelevant on X.
      */
+    @Override
     public void setDynamicLayout(boolean b) {
         dynamicLayoutSetting = b;
     }
 
+    @Override
     protected boolean isDynamicLayoutSet() {
         return dynamicLayoutSetting;
     }
@@ -937,15 +948,17 @@
         return XWM.getWM().supportsDynamicLayout();
     }
 
+    @Override
     public boolean isDynamicLayoutActive() {
         return isDynamicLayoutSupported();
     }
 
-
+    @Override
     public FontPeer getFontPeer(String name, int style){
         return new XFontPeer(name, style);
     }
 
+    @Override
     public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) throws InvalidDnDOperationException {
         final LightweightFrame f = SunToolkit.getLightweightFrame(dge.getComponent());
         if (f != null) {
@@ -955,6 +968,7 @@
         return XDragSourceContextPeer.createDragSourceContextPeer(dge);
     }
 
+    @Override
     @SuppressWarnings("unchecked")
     public <T extends DragGestureRecognizer> T
     createDragGestureRecognizer(Class<T> recognizerClass,
@@ -974,6 +988,7 @@
             return null;
     }
 
+    @Override
     public CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target) {
         XCheckboxMenuItemPeer peer = new XCheckboxMenuItemPeer(target);
         //vb157120: looks like we don't need to map menu items
@@ -982,6 +997,7 @@
         return peer;
     }
 
+    @Override
     public MenuItemPeer createMenuItem(MenuItem target) {
         XMenuItemPeer peer = new XMenuItemPeer(target);
         //vb157120: looks like we don't need to map menu items
@@ -990,72 +1006,84 @@
         return peer;
     }
 
+    @Override
     public TextFieldPeer createTextField(TextField target) {
         TextFieldPeer  peer = new XTextFieldPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public LabelPeer createLabel(Label target) {
         LabelPeer  peer = new XLabelPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public ListPeer createList(java.awt.List target) {
         ListPeer peer = new XListPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public CheckboxPeer createCheckbox(Checkbox target) {
         CheckboxPeer peer = new XCheckboxPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public ScrollbarPeer createScrollbar(Scrollbar target) {
         XScrollbarPeer peer = new XScrollbarPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public ScrollPanePeer createScrollPane(ScrollPane target) {
         XScrollPanePeer peer = new XScrollPanePeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public TextAreaPeer createTextArea(TextArea target) {
         TextAreaPeer peer = new XTextAreaPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public ChoicePeer createChoice(Choice target) {
         XChoicePeer peer = new XChoicePeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public CanvasPeer createCanvas(Canvas target) {
         XCanvasPeer peer = (isXEmbedServerRequested() ? new XEmbedCanvasPeer(target) : new XCanvasPeer(target));
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public PanelPeer createPanel(Panel target) {
         PanelPeer peer = new XPanelPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public WindowPeer createWindow(Window target) {
         WindowPeer peer = new XWindowPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public DialogPeer createDialog(Dialog target) {
         DialogPeer peer = new XDialogPeer(target);
         targetCreatedPeer(target, peer);
@@ -1076,6 +1104,7 @@
         return sunAwtDisableGtkFileDialogs.booleanValue();
     }
 
+    @Override
     public FileDialogPeer createFileDialog(FileDialog target) {
         FileDialogPeer peer = null;
         // The current GtkFileChooser is available from GTK+ 2.4
@@ -1088,12 +1117,14 @@
         return peer;
     }
 
+    @Override
     public MenuBarPeer createMenuBar(MenuBar target) {
         XMenuBarPeer peer = new XMenuBarPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public MenuPeer createMenu(Menu target) {
         XMenuPeer peer = new XMenuPeer(target);
         //vb157120: looks like we don't need to map menu items
@@ -1102,12 +1133,14 @@
         return peer;
     }
 
+    @Override
     public PopupMenuPeer createPopupMenu(PopupMenu target) {
         XPopupMenuPeer peer = new XPopupMenuPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public synchronized MouseInfoPeer getMouseInfoPeer() {
         if (xPeer == null) {
             xPeer = new XMouseInfoPeer();
@@ -1128,6 +1161,7 @@
         return peer;
     }
 
+    @Override
     public KeyboardFocusManagerPeer getKeyboardFocusManagerPeer() throws HeadlessException {
         return XKeyboardFocusManagerPeer.getInstance();
     }
@@ -1135,11 +1169,13 @@
     /**
      * Returns a new custom cursor.
      */
+    @Override
     public Cursor createCustomCursor(Image cursor, Point hotSpot, String name)
       throws IndexOutOfBoundsException {
         return new XCustomCursor(cursor, hotSpot, name);
     }
 
+    @Override
     public TrayIconPeer createTrayIcon(TrayIcon target)
       throws HeadlessException, AWTException
     {
@@ -1148,11 +1184,13 @@
         return peer;
     }
 
+    @Override
     public SystemTrayPeer createSystemTray(SystemTray target) throws HeadlessException {
         SystemTrayPeer peer = new XSystemTrayPeer(target);
         return peer;
     }
 
+    @Override
     public boolean isTraySupported() {
         XSystemTrayPeer peer = XSystemTrayPeer.getPeerInstance();
         if (peer != null) {
@@ -1169,16 +1207,19 @@
     /**
      * Returns the supported cursor size
      */
+    @Override
     public Dimension getBestCursorSize(int preferredWidth, int preferredHeight) {
         return XCustomCursor.getBestCursorSize(
                                                java.lang.Math.max(1,preferredWidth), java.lang.Math.max(1,preferredHeight));
     }
 
 
+    @Override
     public int getMaximumCursorColors() {
         return 2;  // Black and white.
     }
 
+    @Override
     public Map<TextAttribute, ?> mapInputMethodHighlight( InputMethodHighlight highlight) {
         return XInputMethod.mapInputMethodHighlight(highlight);
     }
@@ -1196,6 +1237,7 @@
         }
     }
 
+    @Override
     public  Clipboard getSystemClipboard() {
         SecurityManager security = System.getSecurityManager();
         if (security != null) {
@@ -1209,6 +1251,7 @@
         return clipboard;
     }
 
+    @Override
     public Clipboard getSystemSelection() {
         SecurityManager security = System.getSecurityManager();
         if (security != null) {
@@ -1222,6 +1265,7 @@
         return selection;
     }
 
+    @Override
     public void beep() {
         awtLock();
         try {
@@ -1232,6 +1276,7 @@
         }
     }
 
+    @Override
     public PrintJob getPrintJob(final Frame frame, final String doctitle,
                                 final Properties props) {
 
@@ -1247,6 +1292,7 @@
         return printJob;
     }
 
+    @Override
     public PrintJob getPrintJob(final Frame frame, final String doctitle,
                 final JobAttributes jobAttributes,
                 final PageAttributes pageAttributes)
@@ -1274,6 +1320,7 @@
         }
     }
 
+    @Override
     public int getScreenResolution() {
         long display = getDisplay();
         awtLock();
@@ -1299,6 +1346,7 @@
         return screenmodel;
     }
 
+    @Override
     public ColorModel getColorModel() {
         return getStaticColorModel();
     }
@@ -1306,6 +1354,7 @@
     /**
      * Returns a new input method adapter descriptor for native input methods.
      */
+    @Override
     public InputMethodDescriptor getInputMethodAdapterDescriptor() throws AWTException {
         return new XInputMethodDescriptor();
     }
@@ -1357,6 +1406,7 @@
         }
     }
 
+    @Override
     public boolean isFrameStateSupported(int state)
       throws HeadlessException
     {
@@ -1399,6 +1449,7 @@
 
     private static final XEventDispatcher timeFetcher =
     new XEventDispatcher() {
+            @Override
             public void dispatchEvent(XEvent ev) {
                 switch (ev.get_type()) {
                   case XConstants.PropertyNotify:
@@ -1467,6 +1518,7 @@
         }
         return timeStamp;
     }
+    @Override
     protected void initializeDesktopProperties() {
         desktopProperties.put("DnD.Autoscroll.initialDelay",
                               Integer.valueOf(50));
@@ -1525,6 +1577,7 @@
     private final static String postfix = ".32x32";
     private static final String dndPrefix  = "DnD.";
 
+    @Override
     protected Object lazilyLoadDesktopProperty(String name) {
         if (name.startsWith(prefix)) {
             String cursorName = name.substring(prefix.length(), name.length()) + postfix;
@@ -1547,6 +1600,7 @@
         return super.lazilyLoadDesktopProperty(name);
     }
 
+    @Override
     public synchronized void addPropertyChangeListener(String name, PropertyChangeListener pcl) {
         if (name == null) {
             // See JavaDoc for the Toolkit.addPropertyChangeListener() method
@@ -2045,12 +2099,14 @@
     /**
      * @see sun.awt.SunToolkit#needsXEmbedImpl
      */
+    @Override
     protected boolean needsXEmbedImpl() {
         // XToolkit implements supports for XEmbed-client protocol and
         // requires the supports from the embedding host for it to work.
         return true;
     }
 
+    @Override
     public boolean isModalityTypeSupported(Dialog.ModalityType modalityType) {
         return (modalityType == null) ||
                (modalityType == Dialog.ModalityType.MODELESS) ||
@@ -2059,6 +2115,7 @@
                (modalityType == Dialog.ModalityType.TOOLKIT_MODAL);
     }
 
+    @Override
     public boolean isModalExclusionTypeSupported(Dialog.ModalExclusionType exclusionType) {
         return (exclusionType == null) ||
                (exclusionType == Dialog.ModalExclusionType.NO_EXCLUDE) ||
@@ -2081,6 +2138,7 @@
             .removeSourceEvents(queue, source, removeAllEvents);
     }
 
+    @Override
     public boolean isAlwaysOnTopSupported() {
         for (XLayerProtocol proto : XWM.getWM().getProtocols(XLayerProtocol.class)) {
             if (proto.supportsLayer(XLayerProtocol.LAYER_ALWAYS_ON_TOP)) {
@@ -2090,6 +2148,7 @@
         return false;
     }
 
+    @Override
     public boolean useBufferPerWindow() {
         return XToolkit.getBackingStoreType() == XConstants.NotUseful;
     }
@@ -2398,11 +2457,13 @@
     /**
      * @inheritDoc
      */
+    @Override
     protected boolean syncNativeQueue(final long timeout) {
         XBaseWindow win = XBaseWindow.getXAWTRootWindow();
 
         if (oops_waiter == null) {
             oops_waiter = new XEventDispatcher() {
+                    @Override
                     public void dispatchEvent(XEvent e) {
                         if (e.get_type() == XConstants.ConfigureNotify) {
                             // OOPS ConfigureNotify event catched
@@ -2449,17 +2510,19 @@
             awtUnlock();
         }
     }
-    @SuppressWarnings("deprecation")
+    @Override
     public void grab(Window w) {
-        if (w.getPeer() != null) {
-            ((XWindowPeer)w.getPeer()).setGrab(true);
+        final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
+        if (peer != null) {
+            ((XWindowPeer) peer).setGrab(true);
         }
     }
 
-    @SuppressWarnings("deprecation")
+    @Override
     public void ungrab(Window w) {
-        if (w.getPeer() != null) {
-           ((XWindowPeer)w.getPeer()).setGrab(false);
+        final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
+        if (peer != null) {
+            ((XWindowPeer) peer).setGrab(false);
         }
     }
     /**
@@ -2469,14 +2532,17 @@
      * The methods of java.awt.Desktop class are supported on the Gnome desktop.
      * Check if the running desktop is Gnome by checking the window manager.
      */
+    @Override
     public boolean isDesktopSupported(){
         return XDesktopPeer.isDesktopSupported();
     }
 
+    @Override
     public DesktopPeer createDesktopPeer(Desktop target){
         return new XDesktopPeer();
     }
 
+    @Override
     public boolean areExtraMouseButtonsEnabled() throws HeadlessException {
         return areExtraMouseButtonsEnabled;
     }
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XTrayIconPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XTrayIconPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,8 +30,6 @@
 import java.awt.peer.TrayIconPeer;
 import sun.awt.*;
 import java.awt.image.*;
-import java.text.BreakIterator;
-import java.util.concurrent.ArrayBlockingQueue;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.lang.reflect.InvocationTargetException;
@@ -347,7 +345,6 @@
     }
 
     // It's synchronized with disposal by EDT.
-    @SuppressWarnings("deprecation")
     public void showPopupMenu(int x, int y) {
         if (isDisposed())
             return;
@@ -366,7 +363,9 @@
         }
 
         if (popup != null) {
-            Point loc = ((XBaseWindow)eframe.getPeer()).toLocal(new Point(x, y));
+            final XBaseWindow peer = AWTAccessor.getComponentAccessor()
+                                                .getPeer(eframe);
+            Point loc = peer.toLocal(new Point(x, y));
             popup.show(eframe, loc.x, loc.y);
         }
     }
@@ -416,9 +415,9 @@
         canvas.addMouseMotionListener(eventProxy);
     }
 
-    @SuppressWarnings("deprecation")
     long getWindow() {
-        return ((XEmbeddedFramePeer)eframe.getPeer()).getWindow();
+        return AWTAccessor.getComponentAccessor()
+                          .<XEmbeddedFramePeer>getPeer(eframe).getWindow();
     }
 
     public boolean isDisposed() {
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XWindow.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XWindow.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,6 +34,7 @@
 
 import java.lang.reflect.Method;
 
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.util.logging.PlatformLogger;
 
 import sun.awt.*;
@@ -282,15 +283,15 @@
         return reparented;
     }
 
-    @SuppressWarnings("deprecation")
     static long getParentWindowID(Component target) {
 
-        ComponentPeer peer = target.getParent().getPeer();
         Component temp = target.getParent();
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        ComponentPeer peer = acc.getPeer(temp);
         while (!(peer instanceof XWindow))
         {
             temp = temp.getParent();
-            peer = temp.getPeer();
+            peer = acc.getPeer(temp);
         }
 
         if (peer != null && peer instanceof XWindow)
@@ -299,17 +300,17 @@
     }
 
 
-    @SuppressWarnings("deprecation")
     static XWindow getParentXWindowObject(Component target) {
         if (target == null) return null;
         Component temp = target.getParent();
         if (temp == null) return null;
-        ComponentPeer peer = temp.getPeer();
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        ComponentPeer peer = acc.getPeer(temp);
         if (peer == null) return null;
         while ((peer != null) && !(peer instanceof XWindow))
         {
             temp = temp.getParent();
-            peer = temp.getPeer();
+            peer = acc.getPeer(temp);
         }
         if (peer != null && peer instanceof XWindow)
             return (XWindow) peer;
@@ -552,7 +553,7 @@
         int h = xe.get_height();
 
         Component target = getEventSource();
-        AWTAccessor.ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
+        ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
 
         if (!compAccessor.getIgnoreRepaint(target)
             && compAccessor.getWidth(target) != 0
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -46,6 +46,7 @@
 
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.util.logging.PlatformLogger;
 
 import sun.awt.AWTAccessor;
@@ -225,7 +226,7 @@
         Window t_window = (Window)target;
         Window owner = t_window.getOwner();
         if (owner != null) {
-            ownerPeer = (XWindowPeer)owner.getPeer();
+            ownerPeer = AWTAccessor.getComponentAccessor().getPeer(owner);
             if (focusLog.isLoggable(PlatformLogger.Level.FINER)) {
                 focusLog.finer("Owner is " + owner);
                 focusLog.finer("Owner peer is " + ownerPeer);
@@ -401,15 +402,15 @@
         }
     }
 
-    @SuppressWarnings("deprecation")
     public void recursivelySetIcon(java.util.List<IconInfo> icons) {
         dumpIcons(winAttr.icons);
         setIconHints(icons);
         Window target = (Window)this.target;
         Window[] children = target.getOwnedWindows();
         int cnt = children.length;
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
         for (int i = 0; i < cnt; i++) {
-            ComponentPeer childPeer = children[i].getPeer();
+            final ComponentPeer childPeer = acc.getPeer(children[i]);
             if (childPeer != null && childPeer instanceof XWindowPeer) {
                 if (((XWindowPeer)childPeer).winAttr.iconsInherited) {
                     ((XWindowPeer)childPeer).winAttr.icons = icons;
@@ -1161,7 +1162,7 @@
         if (warningWindow != null) {
             // We can't use the coordinates stored in the XBaseWindow since
             // they are zeros for decorated frames.
-            AWTAccessor.ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
+            ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
             int x = compAccessor.getX(target);
             int y = compAccessor.getY(target);
             int width = compAccessor.getWidth(target);
@@ -1486,7 +1487,7 @@
         XToolkit.awtLock();
         try {
             if (isReparented() && delayedModalBlocking) {
-                addToTransientFors((XDialogPeer) AWTAccessor.getComponentAccessor().getPeer(modalBlocker));
+                addToTransientFors(AWTAccessor.getComponentAccessor().getPeer(modalBlocker));
                 delayedModalBlocking = false;
             }
         } finally {
@@ -1570,7 +1571,7 @@
         try {
             // State lock should always be after awtLock
             synchronized(getStateLock()) {
-                XDialogPeer blockerPeer = (XDialogPeer) AWTAccessor.getComponentAccessor().getPeer(d);
+                XDialogPeer blockerPeer = AWTAccessor.getComponentAccessor().getPeer(d);
                 if (blocked) {
                     if (log.isLoggable(PlatformLogger.Level.FINE)) {
                         log.fine("{0} is blocked by {1}", this, blockerPeer);
@@ -1852,7 +1853,7 @@
         // current chain iterator in the order from next to prev
         XWindowPeer chainToSplit = prevTransientFor;
         while (chainToSplit != null) {
-            XWindowPeer blocker = (XWindowPeer) AWTAccessor.getComponentAccessor().getPeer(chainToSplit.modalBlocker);
+            XWindowPeer blocker = AWTAccessor.getComponentAccessor().getPeer(chainToSplit.modalBlocker);
             if (thisChainBlockers.contains(blocker)) {
                 // add to this dialog's chain
                 setToplevelTransientFor(thisChain, chainToSplit, true, false);
@@ -1913,7 +1914,7 @@
         }
         focusLog.fine("Parent window is not active");
 
-        XDecoratedPeer wpeer = (XDecoratedPeer)AWTAccessor.getComponentAccessor().getPeer(ownerWindow);
+        XDecoratedPeer wpeer = AWTAccessor.getComponentAccessor().getPeer(ownerWindow);
         if (wpeer != null && wpeer.requestWindowFocus(this, time, timeProvided)) {
             focusLog.fine("Parent window accepted focus request - generating focus for this window");
             return true;
@@ -2259,7 +2260,7 @@
                         while (w != null && toplevel != this && !(toplevel instanceof XDialogPeer)) {
                             w = (Window) AWTAccessor.getComponentAccessor().getParent(w);
                             if (w != null) {
-                                toplevel = (XWindowPeer) AWTAccessor.getComponentAccessor().getPeer(w);
+                                toplevel = AWTAccessor.getComponentAccessor().getPeer(w);
                             }
                         }
                         if (w == null || (w != this.target && w instanceof Dialog)) {
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11ComponentPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11ComponentPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -32,6 +32,7 @@
 import java.awt.Graphics;
 
 public interface X11ComponentPeer {
+    long getWindow();
     long getContentWindow();
     SurfaceData getSurfaceData();
     GraphicsConfiguration getGraphicsConfiguration();
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11FontManager.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11FontManager.java	Wed Jul 05 20:33:55 2017 +0200
@@ -40,7 +40,7 @@
 import java.util.Vector;
 
 import javax.swing.plaf.FontUIResource;
-import sun.awt.motif.MFontConfiguration;
+import sun.font.MFontConfiguration;
 import sun.font.CompositeFont;
 import sun.font.FontManager;
 import sun.font.SunFontManager;
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -299,11 +299,7 @@
 
     @Override
     public boolean isFullScreenSupported() {
-        // REMIND: for now we will only allow fullscreen exclusive mode
-        // on the primary screen; we could change this behavior slightly
-        // in the future by allowing only one screen to be in fullscreen
-        // exclusive mode at any given time...
-        boolean fsAvailable = (screen == 0) && isXrandrExtensionSupported();
+        boolean fsAvailable = isXrandrExtensionSupported();
         if (fsAvailable) {
             SecurityManager security = System.getSecurityManager();
             if (security != null) {
@@ -326,21 +322,19 @@
         return (isFullScreenSupported() && (getFullScreenWindow() != null));
     }
 
-    @SuppressWarnings("deprecation")
     private static void enterFullScreenExclusive(Window w) {
-        X11ComponentPeer peer = (X11ComponentPeer)w.getPeer();
+        X11ComponentPeer peer = AWTAccessor.getComponentAccessor().getPeer(w);
         if (peer != null) {
-            enterFullScreenExclusive(peer.getContentWindow());
+            enterFullScreenExclusive(peer.getWindow());
             peer.setFullScreenExclusiveModeState(true);
         }
     }
 
-    @SuppressWarnings("deprecation")
     private static void exitFullScreenExclusive(Window w) {
-        X11ComponentPeer peer = (X11ComponentPeer)w.getPeer();
+        X11ComponentPeer peer = AWTAccessor.getComponentAccessor().getPeer(w);
         if (peer != null) {
             peer.setFullScreenExclusiveModeState(false);
-            exitFullScreenExclusive(peer.getContentWindow());
+            exitFullScreenExclusive(peer.getWindow());
         }
     }
 
@@ -382,7 +376,11 @@
     @Override
     public synchronized DisplayMode getDisplayMode() {
         if (isFullScreenSupported()) {
-            return getCurrentDisplayMode(screen);
+            DisplayMode mode = getCurrentDisplayMode(screen);
+            if (mode == null) {
+                mode = getDefaultDisplayMode();
+            }
+            return mode;
         } else {
             if (origDisplayMode == null) {
                 origDisplayMode = getDefaultDisplayMode();
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11GraphicsEnvironment.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11GraphicsEnvironment.java	Wed Jul 05 20:33:55 2017 +0200
@@ -43,7 +43,7 @@
 
 import java.util.*;
 
-import sun.awt.motif.MFontConfiguration;
+import sun.font.MFontConfiguration;
 import sun.font.FcFontConfiguration;
 import sun.font.Font2D;
 import sun.font.FontManager;
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/MFontConfiguration.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,332 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import sun.awt.FontConfiguration;
-import sun.awt.X11FontManager;
-import sun.font.FontUtilities;
-import sun.font.SunFontManager;
-import sun.util.logging.PlatformLogger;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.nio.charset.Charset;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Properties;
-import java.util.Scanner;
-
-public class MFontConfiguration extends FontConfiguration {
-
-    private static FontConfiguration fontConfig = null;
-    private static PlatformLogger logger;
-
-    public MFontConfiguration(SunFontManager fm) {
-        super(fm);
-        if (FontUtilities.debugFonts()) {
-            logger = PlatformLogger.getLogger("sun.awt.FontConfiguration");
-        }
-        initTables();
-    }
-
-
-    public MFontConfiguration(SunFontManager fm,
-                              boolean preferLocaleFonts,
-                              boolean preferPropFonts) {
-        super(fm, preferLocaleFonts, preferPropFonts);
-        if (FontUtilities.debugFonts()) {
-            logger = PlatformLogger.getLogger("sun.awt.FontConfiguration");
-        }
-        initTables();
-    }
-
-    /* Needs to be kept in sync with updates in the languages used in
-     * the fontconfig files.
-     */
-    protected void initReorderMap() {
-        reorderMap = new HashMap<>();
-        if (osName == null) {  /* null means SunOS */
-            initReorderMapForSolaris();
-        } else {
-            initReorderMapForLinux();
-        }
-    }
-
-    private void initReorderMapForSolaris() {
-        /* Don't create a no-op entry, so we can optimize this case
-         * i.e. we don't need to do anything so can avoid slower paths in
-         * the code.
-         */
-//      reorderMap.put("UTF-8", "latin-1");
-        reorderMap.put("UTF-8.hi", "devanagari"); // NB is in Lucida.
-        reorderMap.put("UTF-8.ja",
-                       split("japanese-x0201,japanese-x0208,japanese-x0212"));
-        reorderMap.put("UTF-8.ko", "korean-johab");
-        reorderMap.put("UTF-8.th", "thai");
-        reorderMap.put("UTF-8.zh.TW", "chinese-big5");
-        reorderMap.put("UTF-8.zh.HK", split("chinese-big5,chinese-hkscs"));
-        if (FontUtilities.isSolaris8) {
-            reorderMap.put("UTF-8.zh.CN", split("chinese-gb2312,chinese-big5"));
-        } else {
-            reorderMap.put("UTF-8.zh.CN",
-                           split("chinese-gb18030-0,chinese-gb18030-1"));
-        }
-        reorderMap.put("UTF-8.zh",
-                       split("chinese-big5,chinese-hkscs,chinese-gb18030-0,chinese-gb18030-1"));
-        reorderMap.put("Big5", "chinese-big5");
-        reorderMap.put("Big5-HKSCS", split("chinese-big5,chinese-hkscs"));
-        if (! FontUtilities.isSolaris8 && ! FontUtilities.isSolaris9) {
-            reorderMap.put("GB2312", split("chinese-gbk,chinese-gb2312"));
-        } else {
-            reorderMap.put("GB2312","chinese-gb2312");
-        }
-        reorderMap.put("x-EUC-TW",
-            split("chinese-cns11643-1,chinese-cns11643-2,chinese-cns11643-3"));
-        reorderMap.put("GBK", "chinese-gbk");
-        reorderMap.put("GB18030",split("chinese-gb18030-0,chinese-gb18030-1"));
-
-        reorderMap.put("TIS-620", "thai");
-        reorderMap.put("x-PCK",
-                       split("japanese-x0201,japanese-x0208,japanese-x0212"));
-        reorderMap.put("x-eucJP-Open",
-                       split("japanese-x0201,japanese-x0208,japanese-x0212"));
-        reorderMap.put("EUC-KR", "korean");
-        /* Don't create a no-op entry, so we can optimize this case */
-//      reorderMap.put("ISO-8859-1", "latin-1");
-        reorderMap.put("ISO-8859-2", "latin-2");
-        reorderMap.put("ISO-8859-5", "cyrillic-iso8859-5");
-        reorderMap.put("windows-1251", "cyrillic-cp1251");
-        reorderMap.put("KOI8-R", "cyrillic-koi8-r");
-        reorderMap.put("ISO-8859-6", "arabic");
-        reorderMap.put("ISO-8859-7", "greek");
-        reorderMap.put("ISO-8859-8", "hebrew");
-        reorderMap.put("ISO-8859-9", "latin-5");
-        reorderMap.put("ISO-8859-13", "latin-7");
-        reorderMap.put("ISO-8859-15", "latin-9");
-    }
-
-    private void initReorderMapForLinux() {
-        reorderMap.put("UTF-8.ja.JP", "japanese-iso10646");
-        reorderMap.put("UTF-8.ko.KR", "korean-iso10646");
-        reorderMap.put("UTF-8.zh.TW", "chinese-tw-iso10646");
-        reorderMap.put("UTF-8.zh.HK", "chinese-tw-iso10646");
-        reorderMap.put("UTF-8.zh.CN", "chinese-cn-iso10646");
-        reorderMap.put("x-euc-jp-linux",
-                        split("japanese-x0201,japanese-x0208"));
-        reorderMap.put("GB2312", "chinese-gb18030");
-        reorderMap.put("Big5", "chinese-big5");
-        reorderMap.put("EUC-KR", "korean");
-        if (osName.equals("Sun")){
-            reorderMap.put("GB18030", "chinese-cn-iso10646");
-        }
-        else {
-            reorderMap.put("GB18030", "chinese-gb18030");
-        }
-    }
-
-    /**
-     * Sets the OS name and version from environment information.
-     */
-    protected void setOsNameAndVersion(){
-        super.setOsNameAndVersion();
-
-        if (osName.equals("SunOS")) {
-            //don't care os name on Solaris
-            osName = null;
-        } else if (osName.equals("Linux")) {
-            try {
-                File f;
-                if ((f = new File("/etc/fedora-release")).canRead()) {
-                    osName = "Fedora";
-                    osVersion = getVersionString(f);
-                } else if ((f = new File("/etc/redhat-release")).canRead()) {
-                    osName = "RedHat";
-                    osVersion = getVersionString(f);
-                } else if ((f = new File("/etc/turbolinux-release")).canRead()) {
-                    osName = "Turbo";
-                    osVersion = getVersionString(f);
-                } else if ((f = new File("/etc/SuSE-release")).canRead()) {
-                    osName = "SuSE";
-                    osVersion = getVersionString(f);
-                } else if ((f = new File("/etc/lsb-release")).canRead()) {
-                    /* Ubuntu and (perhaps others) use only lsb-release.
-                     * Syntax and encoding is compatible with java properties.
-                     * For Ubuntu the ID is "Ubuntu".
-                     */
-                    Properties props = new Properties();
-                    props.load(new FileInputStream(f));
-                    osName = props.getProperty("DISTRIB_ID");
-                    osVersion =  props.getProperty("DISTRIB_RELEASE");
-                }
-            } catch (Exception e) {
-            }
-        }
-        return;
-    }
-
-    /**
-     * Gets the OS version string from a Linux release-specific file.
-     */
-    private String getVersionString(File f){
-        try {
-            Scanner sc  = new Scanner(f);
-            return sc.findInLine("(\\d)+((\\.)(\\d)+)*");
-        }
-        catch (Exception e){
-        }
-        return null;
-    }
-
-    private static final String fontsDirPrefix = "$JRE_LIB_FONTS";
-
-    protected String mapFileName(String fileName) {
-        if (fileName != null && fileName.startsWith(fontsDirPrefix)) {
-            return SunFontManager.jreFontDirName
-                    + fileName.substring(fontsDirPrefix.length());
-        }
-        return fileName;
-    }
-
-    // overrides FontConfiguration.getFallbackFamilyName
-    public String getFallbackFamilyName(String fontName, String defaultFallback) {
-        // maintain compatibility with old font.properties files, which
-        // either had aliases for TimesRoman & Co. or defined mappings for them.
-        String compatibilityName = getCompatibilityFamilyName(fontName);
-        if (compatibilityName != null) {
-            return compatibilityName;
-        }
-        return defaultFallback;
-    }
-
-    protected String getEncoding(String awtFontName,
-            String characterSubsetName) {
-        // extract encoding field from XLFD
-        int beginIndex = 0;
-        int fieldNum = 13; // charset registry field
-        while (fieldNum-- > 0 && beginIndex >= 0) {
-            beginIndex = awtFontName.indexOf("-", beginIndex) + 1;
-        }
-        if (beginIndex == -1) {
-            return "default";
-        }
-        String xlfdEncoding = awtFontName.substring(beginIndex);
-        if (xlfdEncoding.indexOf("fontspecific") > 0) {
-            if (awtFontName.indexOf("dingbats") > 0) {
-                return "sun.awt.motif.X11Dingbats";
-            } else if (awtFontName.indexOf("symbol") > 0) {
-                return "sun.awt.Symbol";
-            }
-        }
-        String encoding = encodingMap.get(xlfdEncoding);
-        if (encoding == null) {
-            encoding = "default";
-        }
-        return encoding;
-    }
-
-    protected Charset getDefaultFontCharset(String fontName) {
-        return Charset.forName("ISO8859_1");
-    }
-
-    protected String getFaceNameFromComponentFontName(String componentFontName) {
-        return null;
-    }
-
-    protected String getFileNameFromComponentFontName(String componentFontName) {
-        // for X11, component font name is XLFD
-        // if we have a file name already, just use it; otherwise let's see
-        // what the graphics environment can provide
-        String fileName = getFileNameFromPlatformName(componentFontName);
-        if (fileName != null && fileName.charAt(0) == '/' &&
-            !needToSearchForFile(fileName)) {
-            return fileName;
-        }
-        return ((X11FontManager) fontManager).getFileNameFromXLFD(componentFontName);
-    }
-
-    public HashSet<String> getAWTFontPathSet() {
-        HashSet<String> fontDirs = new HashSet<String>();
-        short[] scripts = getCoreScripts(0);
-        for (int i = 0; i< scripts.length; i++) {
-            String path = getString(table_awtfontpaths[scripts[i]]);
-            if (path != null) {
-                int start = 0;
-                int colon = path.indexOf(':');
-                while (colon >= 0) {
-                    fontDirs.add(path.substring(start, colon));
-                    start = colon + 1;
-                    colon = path.indexOf(':', start);
-                }
-                fontDirs.add((start == 0) ? path : path.substring(start));
-            }
-        }
-        return fontDirs;
-    }
-
-    /* methods for table setup ***********************************************/
-
-    private static HashMap<String, String> encodingMap = new HashMap<>();
-
-    private void initTables() {
-        // encodingMap maps XLFD encoding component to
-        // name of corresponding java.nio charset
-        encodingMap.put("iso8859-1", "ISO-8859-1");
-        encodingMap.put("iso8859-2", "ISO-8859-2");
-        encodingMap.put("iso8859-4", "ISO-8859-4");
-        encodingMap.put("iso8859-5", "ISO-8859-5");
-        encodingMap.put("iso8859-6", "ISO-8859-6");
-        encodingMap.put("iso8859-7", "ISO-8859-7");
-        encodingMap.put("iso8859-8", "ISO-8859-8");
-        encodingMap.put("iso8859-9", "ISO-8859-9");
-        encodingMap.put("iso8859-13", "ISO-8859-13");
-        encodingMap.put("iso8859-15", "ISO-8859-15");
-        encodingMap.put("gb2312.1980-0", "sun.awt.motif.X11GB2312");
-        if (osName == null) {
-            // use standard converter on Solaris
-            encodingMap.put("gbk-0", "GBK");
-        } else {
-            encodingMap.put("gbk-0", "sun.awt.motif.X11GBK");
-        }
-        encodingMap.put("gb18030.2000-0", "sun.awt.motif.X11GB18030_0");
-        encodingMap.put("gb18030.2000-1", "sun.awt.motif.X11GB18030_1");
-        encodingMap.put("cns11643-1", "sun.awt.motif.X11CNS11643P1");
-        encodingMap.put("cns11643-2", "sun.awt.motif.X11CNS11643P2");
-        encodingMap.put("cns11643-3", "sun.awt.motif.X11CNS11643P3");
-        encodingMap.put("big5-1", "Big5");
-        encodingMap.put("big5-0", "Big5");
-        encodingMap.put("hkscs-1", "Big5-HKSCS");
-        encodingMap.put("ansi-1251", "windows-1251");
-        encodingMap.put("koi8-r", "KOI8-R");
-        encodingMap.put("jisx0201.1976-0", "sun.awt.motif.X11JIS0201");
-        encodingMap.put("jisx0208.1983-0", "sun.awt.motif.X11JIS0208");
-        encodingMap.put("jisx0212.1990-0", "sun.awt.motif.X11JIS0212");
-        encodingMap.put("ksc5601.1987-0", "sun.awt.motif.X11KSC5601");
-        encodingMap.put("ksc5601.1992-3", "sun.awt.motif.X11Johab");
-        encodingMap.put("tis620.2533-0", "TIS-620");
-        encodingMap.put("iso10646-1", "UTF-16BE");
-    }
-
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11CNS11643.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-
-public abstract class X11CNS11643 extends Charset {
-    private final int plane;
-    public X11CNS11643 (int plane, String name) {
-        super(name, null);
-        switch (plane) {
-        case 1:
-            this.plane = 0; // CS1
-            break;
-        case 2:
-        case 3:
-            this.plane = plane;
-            break;
-        default:
-            throw new IllegalArgumentException
-                ("Only planes 1, 2, and 3 supported");
-        }
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this, plane);
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this, plane);
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11CNS11643;
-    }
-
-    private class Encoder extends EUC_TW.Encoder {
-        private int plane;
-        public Encoder(Charset cs, int plane) {
-            super(cs);
-            this.plane = plane;
-        }
-
-        private byte[] bb = new byte[4];
-        public boolean canEncode(char c) {
-            if (c <= 0x7F) {
-                return false;
-            }
-            int nb = toEUC(c, bb);
-            if (nb == -1)
-                return false;
-            int p = 0;
-            if (nb == 4)
-                p = (bb[1] & 0xff) - 0xa0;
-            return (p == plane);
-        }
-
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    if ( c > '\u007f'&& c < '\uFFFE') {
-                        int nb = toEUC(c, bb);
-                        if (nb != -1) {
-                            int p = 0;
-                            if (nb == 4)
-                                p = (bb[1] & 0xff) - 0xa0;
-                            if (p == plane) {
-                                if (dl - dp < 2)
-                                    return CoderResult.OVERFLOW;
-                                if (nb == 2) {
-                                    da[dp++] = (byte)(bb[0] & 0x7f);
-                                    da[dp++] = (byte)(bb[1] & 0x7f);
-                                } else {
-                                    da[dp++] = (byte)(bb[2] & 0x7f);
-                                    da[dp++] = (byte)(bb[3] & 0x7f);
-                                }
-                                sp++;
-                                continue;
-                            }
-                        }
-                    }
-                    return CoderResult.unmappableForLength(1);
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-    }
-
-    private class Decoder extends EUC_TW.Decoder {
-        int plane;
-        private String table;
-        protected Decoder(Charset cs, int plane) {
-            super(cs);
-            if (plane == 0)
-                this.plane = plane;
-            else if (plane == 2 || plane == 3)
-                this.plane = plane - 1;
-            else
-                throw new IllegalArgumentException
-                    ("Only planes 1, 2, and 3 supported");
-        }
-
-        //we only work on array backed buffer.
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    if ( sl - sp < 2) {
-                        return CoderResult.UNDERFLOW;
-                    }
-                    int b1 = (sa[sp] & 0xff) | 0x80;
-                    int b2 = (sa[sp + 1] & 0xff) | 0x80;
-                    char[] cc = toUnicode(b1, b2, plane);
-                    // plane3 has non-bmp characters(added), x11cnsp3
-                    // however does not support them
-                    if (cc == null || cc.length == 2)
-                        return CoderResult.unmappableForLength(2);
-                    if (dl - dp < 1)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = cc[0];
-                    sp +=2;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11CNS11643P1.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-
-package sun.awt.motif;
-
-public class X11CNS11643P1 extends X11CNS11643 {
-    public X11CNS11643P1() {
-        super(1, "X11CNS11643P1");
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11CNS11643P2.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-public class X11CNS11643P2 extends X11CNS11643 {
-    public X11CNS11643P2() {
-        super(2, "X11CNS11643P2");
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11CNS11643P3.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-public class X11CNS11643P3 extends X11CNS11643 {
-    public X11CNS11643P3() {
-        super(3, "X11CNS11643P3");
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11Dingbats.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.*;
-
-public class X11Dingbats extends Charset {
-    public X11Dingbats () {
-        super("X11Dingbats", null);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    /* Seems like supporting a decoder is required, but we aren't going
-     * to be publically exposing this class, so no need to waste work
-     */
-    public CharsetDecoder newDecoder() {
-        throw new Error("Decoder is not supported by X11Dingbats Charset");
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11Dingbats;
-    }
-
-    private static class Encoder extends CharsetEncoder {
-        public Encoder(Charset cs) {
-            super(cs, 1.0f, 1.0f);
-        }
-
-        public boolean canEncode(char ch) {
-            if (ch >= 0x2701 && ch <= 0x275e) { // direct map
-                return true;
-            }
-            if (ch >= 0x2761 && ch <= 0x27be) {
-                return (table[ch - 0x2761] != 0x00);
-            }
-            return false;
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    if (dl - dp < 1)
-                        return CoderResult.OVERFLOW;
-
-                    if (!canEncode(c))
-                        return CoderResult.unmappableForLength(1);
-                    sp++;
-                    if (c >= 0x2761){
-                        da[dp++] = table[c - 0x2761]; // table lookup
-                    } else {
-                        da[dp++] = (byte)(c + 0x20 - 0x2700); // direct map
-                    }
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private static byte[] table = {
-            (byte)0xa1, (byte)0xa2, (byte)0xa3, (byte)0xa4,
-            (byte)0xa5, (byte)0xa6, (byte)0xa7,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0xb6, (byte)0xb7,
-            (byte)0xb8, (byte)0xb9, (byte)0xba, (byte)0xbb,
-            (byte)0xbc, (byte)0xbd, (byte)0xbe, (byte)0xbf,
-            (byte)0xc0, (byte)0xc1, (byte)0xc2, (byte)0xc3,
-            (byte)0xc4, (byte)0xc5, (byte)0xc6, (byte)0xc7,
-            (byte)0xc8, (byte)0xc9, (byte)0xca, (byte)0xcb,
-            (byte)0xcc, (byte)0xcd, (byte)0xce, (byte)0xcf,
-            (byte)0xd0, (byte)0xd1, (byte)0xd2, (byte)0xd3,
-            (byte)0xd4, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0xd8, (byte)0xd9, (byte)0xda, (byte)0xdb,
-            (byte)0xdc, (byte)0xdd, (byte)0xde, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00};
-
-        /* The default implementation creates a decoder and we don't have one */
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11GB18030_0.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4274 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.ext.DoubleByteEncoder;
-
-public class X11GB18030_0 extends Charset {
-    public X11GB18030_0 () {
-        super("X11GB18030_0", null);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    /* Seems like supporting a decoder is required, but we aren't going
-     * to be publically exposing this class, so no need to waste work
-     */
-    public CharsetDecoder newDecoder() {
-        throw new Error("Decoder is not implemented for X11GB18030_0 Charset");
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11GB18030_0;
-    }
-
-    private static class Encoder extends DoubleByteEncoder {
-        public Encoder(Charset cs) {
-            super(cs, index1, index2);
-        }
-        protected int encodeSingle(char inputChar) {
-            return -1;
-        }
-        private final static String innerIndex0=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uA1E8\u0000\u0000\uA1EC"+
-            "\uA1A7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA1E3\uA1C0\u0000\u0000\u0000\u0000\u0000\uA1A4"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1C1"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA8A4\uA8A2\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA8A8\uA8A6\uA8BA\u0000\uA8AC\uA8AA\u0000\u0000"+
-            "\u0000\u0000\uA8B0\uA8AE\u0000\u0000\u0000\uA1C2"+
-            "\u0000\uA8B4\uA8B2\u0000\uA8B9\u0000\u0000\u0000"+
-            "\u0000\uA8A1\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uA8A5\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uA8A7\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uA8A9\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uA8BD\u0000\u0000\u0000"+
-            "\uA8BE\u0000\u0000\u0000\u0000\uA8AD\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uA8B1\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uA8A3\u0000"+
-            "\uA8AB\u0000\uA8AF\u0000\uA8B3\u0000\uA8B5\u0000"+
-            "\uA8B6\u0000\uA8B7\u0000\uA8B8\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA8BF\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA8BB\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA8C0\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1A6"+
-            "\u0000\uA1A5\uA840\uA841\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA842\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA6A1\uA6A2\uA6A3\uA6A4\uA6A5\uA6A6\uA6A7"+
-            "\uA6A8\uA6A9\uA6AA\uA6AB\uA6AC\uA6AD\uA6AE\uA6AF"+
-            "\uA6B0\uA6B1\u0000\uA6B2\uA6B3\uA6B4\uA6B5\uA6B6"+
-            "\uA6B7\uA6B8\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA6C1\uA6C2\uA6C3\uA6C4\uA6C5\uA6C6\uA6C7"+
-            "\uA6C8\uA6C9\uA6CA\uA6CB\uA6CC\uA6CD\uA6CE\uA6CF"+
-            "\uA6D0\uA6D1\u0000\uA6D2\uA6D3\uA6D4\uA6D5\uA6D6"+
-            "\uA6D7\uA6D8\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA7A7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA7A1\uA7A2\uA7A3\uA7A4\uA7A5\uA7A6\uA7A8\uA7A9"+
-            "\uA7AA\uA7AB\uA7AC\uA7AD\uA7AE\uA7AF\uA7B0\uA7B1"+
-            "\uA7B2\uA7B3\uA7B4\uA7B5\uA7B6\uA7B7\uA7B8\uA7B9"+
-            "\uA7BA\uA7BB\uA7BC\uA7BD\uA7BE\uA7BF\uA7C0\uA7C1"+
-            "\uA7D1\uA7D2\uA7D3\uA7D4\uA7D5\uA7D6\uA7D8\uA7D9"+
-            "\uA7DA\uA7DB\uA7DC\uA7DD\uA7DE\uA7DF\uA7E0\uA7E1"+
-            "\uA7E2\uA7E3\uA7E4\uA7E5\uA7E6\uA7E7\uA7E8\uA7E9"+
-            "\uA7EA\uA7EB\uA7EC\uA7ED\uA7EE\uA7EF\uA7F0\uA7F1"+
-            "\u0000\uA7D7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA95C\u0000\u0000\uA843\uA1AA\uA844\uA1AC\u0000"+
-            "\uA1AE\uA1AF\u0000\u0000\uA1B0\uA1B1\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uA845\uA1AD\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA1EB\u0000\uA1E4\uA1E5\u0000\uA846\u0000\u0000"+
-            "\u0000\u0000\u0000\uA1F9\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uA2E3\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uA1E6\u0000\uA847\u0000\u0000"+
-            "\u0000\uA848\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uA1ED\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA959\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA2F1\uA2F2\uA2F3\uA2F4\uA2F5\uA2F6\uA2F7\uA2F8"+
-            "\uA2F9\uA2FA\uA2FB\uA2FC\u0000\u0000\u0000\u0000"+
-            "\uA2A1\uA2A2\uA2A3\uA2A4\uA2A5\uA2A6\uA2A7\uA2A8"+
-            "\uA2A9\uA2AA\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA1FB\uA1FC\uA1FA\uA1FD\u0000\u0000\uA849\uA84A"+
-            "\uA84B\uA84C\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA1CA\u0000\u0000\u0000\u0000\u0000\u0000\uA1C7"+
-            "\u0000\uA1C6\u0000\u0000\u0000\uA84D\u0000\u0000"+
-            "\u0000\u0000\uA1CC\u0000\u0000\uA1D8\uA1DE\uA84E"+
-            "\uA1CF\u0000\u0000\uA84F\u0000\uA1CE\u0000\uA1C4"+
-            "\uA1C5\uA1C9\uA1C8\uA1D2\u0000\u0000\uA1D3\u0000"+
-            "\u0000\u0000\u0000\u0000\uA1E0\uA1DF\uA1C3\uA1CB"+
-            "\u0000\u0000\u0000\u0000\u0000\uA1D7\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA1D6\u0000\u0000\u0000\uA1D5\u0000\u0000\u0000"+
-            "\u0000\u0000\uA850\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA1D9\uA1D4\u0000\u0000\uA1DC\uA1DD\uA851\uA852"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uA1DA\uA1DB"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uA892\u0000\u0000"+
-            "\u0000\uA1D1\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uA1CD\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA853"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uA1D0\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA2D9\uA2DA\uA2DB\uA2DC\uA2DD\uA2DE\uA2DF\uA2E0"+
-            "\uA2E1\uA2E2\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uA2C5\uA2C6\uA2C7\uA2C8"+
-            "\uA2C9\uA2CA\uA2CB\uA2CC\uA2CD\uA2CE\uA2CF\uA2D0"+
-            "\uA2D1\uA2D2\uA2D3\uA2D4\uA2D5\uA2D6\uA2D7\uA2D8"+
-            "\uA2B1\uA2B2\uA2B3\uA2B4\uA2B5\uA2B6\uA2B7\uA2B8"+
-            "\uA2B9\uA2BA\uA2BB\uA2BC\uA2BD\uA2BE\uA2BF\uA2C0"+
-            "\uA2C1\uA2C2\uA2C3\uA2C4\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA9A4\uA9A5\uA9A6\uA9A7\uA9A8\uA9A9\uA9AA\uA9AB"+
-            "\uA9AC\uA9AD\uA9AE\uA9AF\uA9B0\uA9B1\uA9B2\uA9B3"+
-            "\uA9B4\uA9B5\uA9B6\uA9B7\uA9B8\uA9B9\uA9BA\uA9BB"+
-            "\uA9BC\uA9BD\uA9BE\uA9BF\uA9C0\uA9C1\uA9C2\uA9C3"+
-            "\uA9C4\uA9C5\uA9C6\uA9C7\uA9C8\uA9C9\uA9CA\uA9CB"+
-            "\uA9CC\uA9CD\uA9CE\uA9CF\uA9D0\uA9D1\uA9D2\uA9D3"+
-            "\uA9D4\uA9D5\uA9D6\uA9D7\uA9D8\uA9D9\uA9DA\uA9DB"+
-            "\uA9DC\uA9DD\uA9DE\uA9DF\uA9E0\uA9E1\uA9E2\uA9E3"+
-            "\uA9E4\uA9E5\uA9E6\uA9E7\uA9E8\uA9E9\uA9EA\uA9EB"+
-            "\uA9EC\uA9ED\uA9EE\uA9EF\u0000\u0000\u0000\u0000"+
-            "\uA854\uA855\uA856\uA857\uA858\uA859\uA85A\uA85B"+
-            "\uA85C\uA85D\uA85E\uA85F\uA860\uA861\uA862\uA863"+
-            "\uA864\uA865\uA866\uA867\uA868\uA869\uA86A\uA86B"+
-            "\uA86C\uA86D\uA86E\uA86F\uA870\uA871\uA872\uA873"+
-            "\uA874\uA875\uA876\uA877\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA878\uA879\uA87A\uA87B\uA87C\uA87D\uA87E"+
-            "\uA880\uA881\uA882\uA883\uA884\uA885\uA886\uA887"+
-            "\u0000\u0000\u0000\uA888\uA889\uA88A\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA1F6\uA1F5\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uA1F8\uA1F7\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uA88B\uA88C\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uA1F4\uA1F3"+
-            "\u0000\u0000\u0000\uA1F0\u0000\u0000\uA1F2\uA1F1"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uA88D\uA88E\uA88F\uA890\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uA1EF\uA1EE\u0000"+
-            "\u0000\uA891\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA1E2\u0000\uA1E1\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uFE50\u0000\u0000\uFE54\u0000\u0000\u0000"+
-            "\uFE57\u0000\u0000\uFE58\uFE5D\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE5E"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE6B"+
-            "\u0000\u0000\uFE6E\u0000\u0000\u0000\uFE71\u0000"+
-            "\u0000\u0000\u0000\uFE73\u0000\u0000\uFE74\uFE75"+
-            "\u0000\u0000\u0000\uFE79\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uFE84\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA98A\uA98B\uA98C\uA98D\uA98E\uA98F\uA990\uA991"+
-            "\uA992\uA993\uA994\uA995\u0000\u0000\u0000\u0000"+
-            "\uA1A1\uA1A2\uA1A3\uA1A8\u0000\uA1A9\uA965\uA996"+
-            "\uA1B4\uA1B5\uA1B6\uA1B7\uA1B8\uA1B9\uA1BA\uA1BB"+
-            "\uA1BE\uA1BF\uA893\uA1FE\uA1B2\uA1B3\uA1BC\uA1BD"+
-            "\u0000\u0000\u0000\u0000\u0000\uA894\uA895\u0000"+
-            "\u0000\uA940\uA941\uA942\uA943\uA944\uA945\uA946"+
-            "\uA947\uA948\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uA989\u0000"+
-            "\u0000\uA4A1\uA4A2\uA4A3\uA4A4\uA4A5\uA4A6\uA4A7"+
-            "\uA4A8\uA4A9\uA4AA\uA4AB\uA4AC\uA4AD\uA4AE\uA4AF"+
-            "\uA4B0\uA4B1\uA4B2\uA4B3\uA4B4\uA4B5\uA4B6\uA4B7"+
-            "\uA4B8\uA4B9\uA4BA\uA4BB\uA4BC\uA4BD\uA4BE\uA4BF"+
-            "\uA4C0\uA4C1\uA4C2\uA4C3\uA4C4\uA4C5\uA4C6\uA4C7"+
-            "\uA4C8\uA4C9\uA4CA\uA4CB\uA4CC\uA4CD\uA4CE\uA4CF"+
-            "\uA4D0\uA4D1\uA4D2\uA4D3\uA4D4\uA4D5\uA4D6\uA4D7"+
-            "\uA4D8\uA4D9\uA4DA\uA4DB\uA4DC\uA4DD\uA4DE\uA4DF"+
-            "\uA4E0\uA4E1\uA4E2\uA4E3\uA4E4\uA4E5\uA4E6\uA4E7"+
-            "\uA4E8\uA4E9\uA4EA\uA4EB\uA4EC\uA4ED\uA4EE\uA4EF"+
-            "\uA4F0\uA4F1\uA4F2\uA4F3\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uA961\uA962\uA966\uA967\u0000"+
-            "\u0000\uA5A1\uA5A2\uA5A3\uA5A4\uA5A5\uA5A6\uA5A7"+
-            "\uA5A8\uA5A9\uA5AA\uA5AB\uA5AC\uA5AD\uA5AE\uA5AF"+
-            "\uA5B0\uA5B1\uA5B2\uA5B3\uA5B4\uA5B5\uA5B6\uA5B7"+
-            "\uA5B8\uA5B9\uA5BA\uA5BB\uA5BC\uA5BD\uA5BE\uA5BF"+
-            "\uA5C0\uA5C1\uA5C2\uA5C3\uA5C4\uA5C5\uA5C6\uA5C7"+
-            "\uA5C8\uA5C9\uA5CA\uA5CB\uA5CC\uA5CD\uA5CE\uA5CF"+
-            "\uA5D0\uA5D1\uA5D2\uA5D3\uA5D4\uA5D5\uA5D6\uA5D7"+
-            "\uA5D8\uA5D9\uA5DA\uA5DB\uA5DC\uA5DD\uA5DE\uA5DF"+
-            "\uA5E0\uA5E1\uA5E2\uA5E3\uA5E4\uA5E5\uA5E6\uA5E7"+
-            "\uA5E8\uA5E9\uA5EA\uA5EB\uA5EC\uA5ED\uA5EE\uA5EF"+
-            "\uA5F0\uA5F1\uA5F2\uA5F3\uA5F4\uA5F5\uA5F6\u0000"+
-            "\u0000\u0000\u0000\u0000\uA960\uA963\uA964\u0000";
-
-        private final static String innerIndex1=
-            "\u0000\u0000\u0000\u0000\u0000\uA8C5\uA8C6\uA8C7"+
-            "\uA8C8\uA8C9\uA8CA\uA8CB\uA8CC\uA8CD\uA8CE\uA8CF"+
-            "\uA8D0\uA8D1\uA8D2\uA8D3\uA8D4\uA8D5\uA8D6\uA8D7"+
-            "\uA8D8\uA8D9\uA8DA\uA8DB\uA8DC\uA8DD\uA8DE\uA8DF"+
-            "\uA8E0\uA8E1\uA8E2\uA8E3\uA8E4\uA8E5\uA8E6\uA8E7"+
-            "\uA8E8\uA8E9\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA2E5\uA2E6\uA2E7\uA2E8\uA2E9\uA2EA\uA2EB\uA2EC"+
-            "\uA2ED\uA2EE\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA95A\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uA949\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uA94A\uA94B"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uA94C\uA94D\uA94E\u0000"+
-            "\u0000\uA94F\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uA950\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uA951\u0000"+
-            "\u0000\uA952\uA953\u0000\u0000\uA954\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE56"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uFE55\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE5A\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE5C\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uFE5B\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uFE60\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE5F\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE62"+
-            "\uFE65\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE63"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uFE64\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE68\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE69\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uFE6A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE6F\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE70"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE72"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uFE78\u0000\u0000\u0000"+
-            "\u0000\uFE77\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uFE7A\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE7B\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uFE7D\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uFE7C\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uFE80\u0000\u0000\u0000\u0000"+
-            "\u0000\uFE81\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uFE82\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uFE83\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-        private final static String innerIndex2=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE85"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uFE86\u0000\u0000\uFE87\u0000\u0000"+
-            "\u0000\u0000\uFE88\uFE89\u0000\uFE8A\uFE8B\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uFE8D\u0000\u0000\u0000\uFE8C"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE8F\uFE8E"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE96"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE93"+
-            "\uFE94\uFE95\uFE97\uFE92\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uFE98\uFE99\uFE9A\uFE9B\uFE9C"+
-            "\uFE9D\uFE9E\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE9F\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD2BB\uB6A1\u8140\uC6DF\u8141\u8142\u8143\uCDF2"+
-            "\uD5C9\uC8FD\uC9CF\uCFC2\uD8A2\uB2BB\uD3EB\u8144"+
-            "\uD8A4\uB3F3\u8145\uD7A8\uC7D2\uD8A7\uCAC0\u8146"+
-            "\uC7F0\uB1FB\uD2B5\uB4D4\uB6AB\uCBBF\uD8A9\u8147"+
-            "\u8148\u8149\uB6AA\u814A\uC1BD\uD1CF\u814B\uC9A5"+
-            "\uD8AD\u814C\uB8F6\uD1BE\uE3DC\uD6D0\u814D\u814E"+
-            "\uB7E1\u814F\uB4AE\u8150\uC1D9\u8151\uD8BC\u8152"+
-            "\uCDE8\uB5A4\uCEAA\uD6F7\u8153\uC0F6\uBED9\uD8AF"+
-            "\u8154\u8155\u8156\uC4CB\u8157\uBEC3\u8158\uD8B1"+
-            "\uC3B4\uD2E5\u8159\uD6AE\uCEDA\uD5A7\uBAF5\uB7A6"+
-            "\uC0D6\u815A\uC6B9\uC5D2\uC7C7\u815B\uB9D4\u815C"+
-            "\uB3CB\uD2D2\u815D\u815E\uD8BF\uBEC5\uC6F2\uD2B2"+
-            "\uCFB0\uCFE7\u815F\u8160\u8161\u8162\uCAE9\u8163"+
-            "\u8164\uD8C0\u8165\u8166\u8167\u8168\u8169\u816A"+
-            "\uC2F2\uC2D2\u816B\uC8E9\u816C\u816D\u816E\u816F"+
-            "\u8170\u8171\u8172\u8173\u8174\u8175\uC7AC\u8176"+
-            "\u8177\u8178\u8179\u817A\u817B\u817C\uC1CB\u817D"+
-            "\uD3E8\uD5F9\u817E\uCAC2\uB6FE\uD8A1\uD3DA\uBFF7"+
-            "\u8180\uD4C6\uBBA5\uD8C1\uCEE5\uBEAE\u8181\u8182"+
-            "\uD8A8\u8183\uD1C7\uD0A9\u8184\u8185\u8186\uD8BD"+
-            "\uD9EF\uCDF6\uBFBA\u8187\uBDBB\uBAA5\uD2E0\uB2FA"+
-            "\uBAE0\uC4B6\u8188\uCFED\uBEA9\uCDA4\uC1C1\u8189"+
-            "\u818A\u818B\uC7D7\uD9F1\u818C\uD9F4\u818D\u818E"+
-            "\u818F\u8190\uC8CB\uD8E9\u8191\u8192\u8193\uD2DA"+
-            "\uCAB2\uC8CA\uD8EC\uD8EA\uD8C6\uBDF6\uC6CD\uB3F0"+
-            "\u8194\uD8EB\uBDF1\uBDE9\u8195\uC8D4\uB4D3\u8196"+
-            "\u8197\uC2D8\u8198\uB2D6\uD7D0\uCACB\uCBFB\uD5CC"+
-            "\uB8B6\uCFC9\u8199\u819A\u819B\uD9DA\uD8F0\uC7AA"+
-            "\u819C\uD8EE\u819D\uB4FA\uC1EE\uD2D4\u819E\u819F"+
-            "\uD8ED\u81A0\uD2C7\uD8EF\uC3C7\u81A1\u81A2\u81A3"+
-            "\uD1F6\u81A4\uD6D9\uD8F2\u81A5\uD8F5\uBCFE\uBCDB"+
-            "\u81A6\u81A7\u81A8\uC8CE\u81A9\uB7DD\u81AA\uB7C2"+
-            "\u81AB\uC6F3\u81AC\u81AD\u81AE\u81AF\u81B0\u81B1"+
-            "\u81B2\uD8F8\uD2C1\u81B3\u81B4\uCEE9\uBCBF\uB7FC"+
-            "\uB7A5\uD0DD\u81B5\u81B6\u81B7\u81B8\u81B9\uD6DA"+
-            "\uD3C5\uBBEF\uBBE1\uD8F1\u81BA\u81BB\uC9A1\uCEB0"+
-            "\uB4AB\u81BC\uD8F3\u81BD\uC9CB\uD8F6\uC2D7\uD8F7"+
-            "\u81BE\u81BF\uCEB1\uD8F9\u81C0\u81C1\u81C2\uB2AE"+
-            "\uB9C0\u81C3\uD9A3\u81C4\uB0E9\u81C5\uC1E6\u81C6"+
-            "\uC9EC\u81C7\uCBC5\u81C8\uCBC6\uD9A4\u81C9\u81CA"+
-            "\u81CB\u81CC\u81CD\uB5E8\u81CE\u81CF\uB5AB\u81D0"+
-            "\u81D1\u81D2\u81D3\u81D4\u81D5\uCEBB\uB5CD\uD7A1"+
-            "\uD7F4\uD3D3\u81D6\uCCE5\u81D7\uBACE\u81D8\uD9A2"+
-            "\uD9DC\uD3E0\uD8FD\uB7F0\uD7F7\uD8FE\uD8FA\uD9A1"+
-            "\uC4E3\u81D9\u81DA\uD3B6\uD8F4\uD9DD\u81DB\uD8FB"+
-            "\u81DC\uC5E5\u81DD\u81DE\uC0D0\u81DF\u81E0\uD1F0"+
-            "\uB0DB\u81E1\u81E2\uBCD1\uD9A6\u81E3\uD9A5\u81E4"+
-            "\u81E5\u81E6\u81E7\uD9AC\uD9AE\u81E8\uD9AB\uCAB9"+
-            "\u81E9\u81EA\u81EB\uD9A9\uD6B6\u81EC\u81ED\u81EE"+
-            "\uB3DE\uD9A8\u81EF\uC0FD\u81F0\uCACC\u81F1\uD9AA"+
-            "\u81F2\uD9A7\u81F3\u81F4\uD9B0\u81F5\u81F6\uB6B1"+
-            "\u81F7\u81F8\u81F9\uB9A9\u81FA\uD2C0\u81FB\u81FC"+
-            "\uCFC0\u81FD\u81FE\uC2C2\u8240\uBDC4\uD5EC\uB2E0"+
-            "\uC7C8\uBFEB\uD9AD\u8241\uD9AF\u8242\uCEEA\uBAEE"+
-            "\u8243\u8244\u8245\u8246\u8247\uC7D6\u8248\u8249"+
-            "\u824A\u824B\u824C\u824D\u824E\u824F\u8250\uB1E3"+
-            "\u8251\u8252\u8253\uB4D9\uB6ED\uD9B4\u8254\u8255"+
-            "\u8256\u8257\uBFA1\u8258\u8259\u825A\uD9DE\uC7CE"+
-            "\uC0FE\uD9B8\u825B\u825C\u825D\u825E\u825F\uCBD7"+
-            "\uB7FD\u8260\uD9B5\u8261\uD9B7\uB1A3\uD3E1\uD9B9"+
-            "\u8262\uD0C5\u8263\uD9B6\u8264\u8265\uD9B1\u8266"+
-            "\uD9B2\uC1A9\uD9B3\u8267\u8268\uBCF3\uD0DE\uB8A9"+
-            "\u8269\uBEE3\u826A\uD9BD\u826B\u826C\u826D\u826E"+
-            "\uD9BA\u826F\uB0B3\u8270\u8271\u8272\uD9C2\u8273"+
-            "\u8274\u8275\u8276\u8277\u8278\u8279\u827A\u827B"+
-            "\u827C\u827D\u827E\u8280\uD9C4\uB1B6\u8281\uD9BF"+
-            "\u8282\u8283\uB5B9\u8284\uBEF3\u8285\u8286\u8287"+
-            "\uCCC8\uBAF2\uD2D0\u8288\uD9C3\u8289\u828A\uBDE8"+
-            "\u828B\uB3AB\u828C\u828D\u828E\uD9C5\uBEEB\u828F"+
-            "\uD9C6\uD9BB\uC4DF\u8290\uD9BE\uD9C1\uD9C0\u8291"+
-            "\u8292\u8293\u8294\u8295\u8296\u8297\u8298\u8299"+
-            "\u829A\u829B\uD5AE\u829C\uD6B5\u829D\uC7E3\u829E"+
-            "\u829F\u82A0\u82A1\uD9C8\u82A2\u82A3\u82A4\uBCD9"+
-            "\uD9CA\u82A5\u82A6\u82A7\uD9BC\u82A8\uD9CB\uC6AB"+
-            "\u82A9\u82AA\u82AB\u82AC\u82AD\uD9C9\u82AE\u82AF"+
-            "\u82B0\u82B1\uD7F6\u82B2\uCDA3\u82B3\u82B4\u82B5"+
-            "\u82B6\u82B7\u82B8\u82B9\u82BA\uBDA1\u82BB\u82BC"+
-            "\u82BD\u82BE\u82BF\u82C0\uD9CC\u82C1\u82C2\u82C3"+
-            "\u82C4\u82C5\u82C6\u82C7\u82C8\u82C9\uC5BC\uCDB5"+
-            "\u82CA\u82CB\u82CC\uD9CD\u82CD\u82CE\uD9C7\uB3A5"+
-            "\uBFFE\u82CF\u82D0\u82D1\u82D2\uB8B5\u82D3\u82D4"+
-            "\uC0FC\u82D5\u82D6\u82D7\u82D8\uB0F8\u82D9\u82DA"+
-            "\u82DB\u82DC\u82DD\u82DE\u82DF\u82E0\u82E1\u82E2"+
-            "\u82E3\u82E4\u82E5\u82E6\u82E7\u82E8\u82E9\u82EA"+
-            "\u82EB\u82EC\u82ED\uB4F6\u82EE\uD9CE\u82EF\uD9CF"+
-            "\uB4A2\uD9D0\u82F0\u82F1\uB4DF\u82F2\u82F3\u82F4"+
-            "\u82F5\u82F6\uB0C1\u82F7\u82F8\u82F9\u82FA\u82FB"+
-            "\u82FC\u82FD\uD9D1\uC9B5\u82FE\u8340\u8341\u8342"+
-            "\u8343\u8344\u8345\u8346\u8347\u8348\u8349\u834A"+
-            "\u834B\u834C\u834D\u834E\u834F\u8350\u8351\uCFF1"+
-            "\u8352\u8353\u8354\u8355\u8356\u8357\uD9D2\u8358"+
-            "\u8359\u835A\uC1C5\u835B\u835C\u835D\u835E\u835F"+
-            "\u8360\u8361\u8362\u8363\u8364\u8365\uD9D6\uC9AE"+
-            "\u8366\u8367\u8368\u8369\uD9D5\uD9D4\uD9D7\u836A"+
-            "\u836B\u836C\u836D\uCBDB\u836E\uBDA9\u836F\u8370"+
-            "\u8371\u8372\u8373\uC6A7\u8374\u8375\u8376\u8377"+
-            "\u8378\u8379\u837A\u837B\u837C\u837D\uD9D3\uD9D8"+
-            "\u837E\u8380\u8381\uD9D9\u8382\u8383\u8384\u8385"+
-            "\u8386\u8387\uC8E5\u8388\u8389\u838A\u838B\u838C"+
-            "\u838D\u838E\u838F\u8390\u8391\u8392\u8393\u8394"+
-            "\u8395\uC0DC\u8396\u8397\u8398\u8399\u839A\u839B"+
-            "\u839C\u839D\u839E\u839F\u83A0\u83A1\u83A2\u83A3"+
-            "\u83A4\u83A5\u83A6\u83A7\u83A8\u83A9\u83AA\u83AB"+
-            "\u83AC\u83AD\u83AE\u83AF\u83B0\u83B1\u83B2\uB6F9"+
-            "\uD8A3\uD4CA\u83B3\uD4AA\uD0D6\uB3E4\uD5D7\u83B4"+
-            "\uCFC8\uB9E2\u83B5\uBFCB\u83B6\uC3E2\u83B7\u83B8"+
-            "\u83B9\uB6D2\u83BA\u83BB\uCDC3\uD9EE\uD9F0\u83BC"+
-            "\u83BD\u83BE\uB5B3\u83BF\uB6B5\u83C0\u83C1\u83C2"+
-            "\u83C3\u83C4\uBEA4\u83C5\u83C6\uC8EB\u83C7\u83C8"+
-            "\uC8AB\u83C9\u83CA\uB0CB\uB9AB\uC1F9\uD9E2\u83CB"+
-            "\uC0BC\uB9B2\u83CC\uB9D8\uD0CB\uB1F8\uC6E4\uBEDF"+
-            "\uB5E4\uD7C8\u83CD\uD1F8\uBCE6\uCADE\u83CE\u83CF"+
-            "\uBCBD\uD9E6\uD8E7\u83D0\u83D1\uC4DA\u83D2\u83D3"+
-            "\uB8D4\uC8BD\u83D4\u83D5\uB2E1\uD4D9\u83D6\u83D7"+
-            "\u83D8\u83D9\uC3B0\u83DA\u83DB\uC3E1\uDAA2\uC8DF"+
-            "\u83DC\uD0B4\u83DD\uBEFC\uC5A9\u83DE\u83DF\u83E0"+
-            "\uB9DA\u83E1\uDAA3\u83E2\uD4A9\uDAA4\u83E3\u83E4"+
-            "\u83E5\u83E6\u83E7\uD9FB\uB6AC\u83E8\u83E9\uB7EB"+
-            "\uB1F9\uD9FC\uB3E5\uBEF6\u83EA\uBFF6\uD2B1\uC0E4"+
-            "\u83EB\u83EC\u83ED\uB6B3\uD9FE\uD9FD\u83EE\u83EF"+
-            "\uBEBB\u83F0\u83F1\u83F2\uC6E0\u83F3\uD7BC\uDAA1"+
-            "\u83F4\uC1B9\u83F5\uB5F2\uC1E8\u83F6\u83F7\uBCF5"+
-            "\u83F8\uB4D5\u83F9\u83FA\u83FB\u83FC\u83FD\u83FE"+
-            "\u8440\u8441\u8442\uC1DD\u8443\uC4FD\u8444\u8445"+
-            "\uBCB8\uB7B2\u8446\u8447\uB7EF\u8448\u8449\u844A"+
-            "\u844B\u844C\u844D\uD9EC\u844E\uC6BE\u844F\uBFAD"+
-            "\uBBCB\u8450\u8451\uB5CA\u8452\uDBC9\uD0D7\u8453"+
-            "\uCDB9\uB0BC\uB3F6\uBBF7\uDBCA\uBAAF\u8454\uD4E4"+
-            "\uB5B6\uB5F3\uD8D6\uC8D0\u8455\u8456\uB7D6\uC7D0"+
-            "\uD8D7\u8457\uBFAF\u8458\u8459\uDBBB\uD8D8\u845A"+
-            "\u845B\uD0CC\uBBAE\u845C\u845D\u845E\uEBBE\uC1D0"+
-            "\uC1F5\uD4F2\uB8D5\uB4B4\u845F\uB3F5\u8460\u8461"+
-            "\uC9BE\u8462\u8463\u8464\uC5D0\u8465\u8466\u8467"+
-            "\uC5D9\uC0FB\u8468\uB1F0\u8469\uD8D9\uB9CE\u846A"+
-            "\uB5BD\u846B\u846C\uD8DA\u846D\u846E\uD6C6\uCBA2"+
-            "\uC8AF\uC9B2\uB4CC\uBFCC\u846F\uB9F4\u8470\uD8DB"+
-            "\uD8DC\uB6E7\uBCC1\uCCEA\u8471\u8472\u8473\u8474"+
-            "\u8475\u8476\uCFF7\u8477\uD8DD\uC7B0\u8478\u8479"+
-            "\uB9D0\uBDA3\u847A\u847B\uCCDE\u847C\uC6CA\u847D"+
-            "\u847E\u8480\u8481\u8482\uD8E0\u8483\uD8DE\u8484"+
-            "\u8485\uD8DF\u8486\u8487\u8488\uB0FE\u8489\uBEE7"+
-            "\u848A\uCAA3\uBCF4\u848B\u848C\u848D\u848E\uB8B1"+
-            "\u848F\u8490\uB8EE\u8491\u8492\u8493\u8494\u8495"+
-            "\u8496\u8497\u8498\u8499\u849A\uD8E2\u849B\uBDCB"+
-            "\u849C\uD8E4\uD8E3\u849D\u849E\u849F\u84A0\u84A1"+
-            "\uC5FC\u84A2\u84A3\u84A4\u84A5\u84A6\u84A7\u84A8"+
-            "\uD8E5\u84A9\u84AA\uD8E6\u84AB\u84AC\u84AD\u84AE"+
-            "\u84AF\u84B0\u84B1\uC1A6\u84B2\uC8B0\uB0EC\uB9A6"+
-            "\uBCD3\uCEF1\uDBBD\uC1D3\u84B3\u84B4\u84B5\u84B6"+
-            "\uB6AF\uD6FA\uC5AC\uBDD9\uDBBE\uDBBF\u84B7\u84B8"+
-            "\u84B9\uC0F8\uBEA2\uC0CD\u84BA\u84BB\u84BC\u84BD"+
-            "\u84BE\u84BF\u84C0\u84C1\u84C2\u84C3\uDBC0\uCAC6"+
-            "\u84C4\u84C5\u84C6\uB2AA\u84C7\u84C8\u84C9\uD3C2"+
-            "\u84CA\uC3E3\u84CB\uD1AB\u84CC\u84CD\u84CE\u84CF"+
-            "\uDBC2\u84D0\uC0D5\u84D1\u84D2\u84D3\uDBC3\u84D4"+
-            "\uBFB1\u84D5\u84D6\u84D7\u84D8\u84D9\u84DA\uC4BC"+
-            "\u84DB\u84DC\u84DD\u84DE\uC7DA\u84DF\u84E0\u84E1"+
-            "\u84E2\u84E3\u84E4\u84E5\u84E6\u84E7\u84E8\u84E9"+
-            "\uDBC4\u84EA\u84EB\u84EC\u84ED\u84EE\u84EF\u84F0"+
-            "\u84F1\uD9E8\uC9D7\u84F2\u84F3\u84F4\uB9B4\uCEF0"+
-            "\uD4C8\u84F5\u84F6\u84F7\u84F8\uB0FC\uB4D2\u84F9"+
-            "\uD0D9\u84FA\u84FB\u84FC\u84FD\uD9E9\u84FE\uDECB"+
-            "\uD9EB\u8540\u8541\u8542\u8543\uD8B0\uBBAF\uB1B1"+
-            "\u8544\uB3D7\uD8CE\u8545\u8546\uD4D1\u8547\u8548"+
-            "\uBDB3\uBFEF\u8549\uCFBB\u854A\u854B\uD8D0\u854C"+
-            "\u854D\u854E\uB7CB\u854F\u8550\u8551\uD8D1\u8552"+
-            "\u8553\u8554\u8555\u8556\u8557\u8558\u8559\u855A"+
-            "\u855B\uC6A5\uC7F8\uD2BD\u855C\u855D\uD8D2\uC4E4"+
-            "\u855E\uCAAE\u855F\uC7A7\u8560\uD8A6\u8561\uC9FD"+
-            "\uCEE7\uBBDC\uB0EB\u8562\u8563\u8564\uBBAA\uD0AD"+
-            "\u8565\uB1B0\uD7E4\uD7BF\u8566\uB5A5\uC2F4\uC4CF"+
-            "\u8567\u8568\uB2A9\u8569\uB2B7\u856A\uB1E5\uDFB2"+
-            "\uD5BC\uBFA8\uC2AC\uD8D5\uC2B1\u856B\uD8D4\uCED4"+
-            "\u856C\uDAE0\u856D\uCEC0\u856E\u856F\uD8B4\uC3AE"+
-            "\uD3A1\uCEA3\u8570\uBCB4\uC8B4\uC2D1\u8571\uBEED"+
-            "\uD0B6\u8572\uDAE1\u8573\u8574\u8575\u8576\uC7E4"+
-            "\u8577\u8578\uB3A7\u8579\uB6F2\uCCFC\uC0FA\u857A"+
-            "\u857B\uC0F7\u857C\uD1B9\uD1E1\uD8C7\u857D\u857E"+
-            "\u8580\u8581\u8582\u8583\u8584\uB2DE\u8585\u8586"+
-            "\uC0E5\u8587\uBAF1\u8588\u8589\uD8C8\u858A\uD4AD"+
-            "\u858B\u858C\uCFE1\uD8C9\u858D\uD8CA\uCFC3\u858E"+
-            "\uB3F8\uBEC7\u858F\u8590\u8591\u8592\uD8CB\u8593"+
-            "\u8594\u8595\u8596\u8597\u8598\u8599\uDBCC\u859A"+
-            "\u859B\u859C\u859D\uC8A5\u859E\u859F\u85A0\uCFD8"+
-            "\u85A1\uC8FE\uB2CE\u85A2\u85A3\u85A4\u85A5\u85A6"+
-            "\uD3D6\uB2E6\uBCB0\uD3D1\uCBAB\uB7B4\u85A7\u85A8"+
-            "\u85A9\uB7A2\u85AA\u85AB\uCAE5\u85AC\uC8A1\uCADC"+
-            "\uB1E4\uD0F0\u85AD\uC5D1\u85AE\u85AF\u85B0\uDBC5"+
-            "\uB5FE\u85B1\u85B2\uBFDA\uB9C5\uBEE4\uC1ED\u85B3"+
-            "\uDFB6\uDFB5\uD6BB\uBDD0\uD5D9\uB0C8\uB6A3\uBFC9"+
-            "\uCCA8\uDFB3\uCAB7\uD3D2\u85B4\uD8CF\uD2B6\uBAC5"+
-            "\uCBBE\uCCBE\u85B5\uDFB7\uB5F0\uDFB4\u85B6\u85B7"+
-            "\u85B8\uD3F5\u85B9\uB3D4\uB8F7\u85BA\uDFBA\u85BB"+
-            "\uBACF\uBCAA\uB5F5\u85BC\uCDAC\uC3FB\uBAF3\uC0F4"+
-            "\uCDC2\uCFF2\uDFB8\uCFC5\u85BD\uC2C0\uDFB9\uC2F0"+
-            "\u85BE\u85BF\u85C0\uBEFD\u85C1\uC1DF\uCDCC\uD2F7"+
-            "\uB7CD\uDFC1\u85C2\uDFC4\u85C3\u85C4\uB7F1\uB0C9"+
-            "\uB6D6\uB7D4\u85C5\uBAAC\uCCFD\uBFD4\uCBB1\uC6F4"+
-            "\u85C6\uD6A8\uDFC5\u85C7\uCEE2\uB3B3\u85C8\u85C9"+
-            "\uCEFC\uB4B5\u85CA\uCEC7\uBAF0\u85CB\uCEE1\u85CC"+
-            "\uD1BD\u85CD\u85CE\uDFC0\u85CF\u85D0\uB4F4\u85D1"+
-            "\uB3CA\u85D2\uB8E6\uDFBB\u85D3\u85D4\u85D5\u85D6"+
-            "\uC4C5\u85D7\uDFBC\uDFBD\uDFBE\uC5BB\uDFBF\uDFC2"+
-            "\uD4B1\uDFC3\u85D8\uC7BA\uCED8\u85D9\u85DA\u85DB"+
-            "\u85DC\u85DD\uC4D8\u85DE\uDFCA\u85DF\uDFCF\u85E0"+
-            "\uD6DC\u85E1\u85E2\u85E3\u85E4\u85E5\u85E6\u85E7"+
-            "\u85E8\uDFC9\uDFDA\uCEB6\u85E9\uBAC7\uDFCE\uDFC8"+
-            "\uC5DE\u85EA\u85EB\uC9EB\uBAF4\uC3FC\u85EC\u85ED"+
-            "\uBED7\u85EE\uDFC6\u85EF\uDFCD\u85F0\uC5D8\u85F1"+
-            "\u85F2\u85F3\u85F4\uD5A6\uBACD\u85F5\uBECC\uD3BD"+
-            "\uB8C0\u85F6\uD6E4\u85F7\uDFC7\uB9BE\uBFA7\u85F8"+
-            "\u85F9\uC1FC\uDFCB\uDFCC\u85FA\uDFD0\u85FB\u85FC"+
-            "\u85FD\u85FE\u8640\uDFDB\uDFE5\u8641\uDFD7\uDFD6"+
-            "\uD7C9\uDFE3\uDFE4\uE5EB\uD2A7\uDFD2\u8642\uBFA9"+
-            "\u8643\uD4DB\u8644\uBFC8\uDFD4\u8645\u8646\u8647"+
-            "\uCFCC\u8648\u8649\uDFDD\u864A\uD1CA\u864B\uDFDE"+
-            "\uB0A7\uC6B7\uDFD3\u864C\uBAE5\u864D\uB6DF\uCDDB"+
-            "\uB9FE\uD4D5\u864E\u864F\uDFDF\uCFEC\uB0A5\uDFE7"+
-            "\uDFD1\uD1C6\uDFD5\uDFD8\uDFD9\uDFDC\u8650\uBBA9"+
-            "\u8651\uDFE0\uDFE1\u8652\uDFE2\uDFE6\uDFE8\uD3B4"+
-            "\u8653\u8654\u8655\u8656\u8657\uB8E7\uC5B6\uDFEA"+
-            "\uC9DA\uC1A8\uC4C4\u8658\u8659\uBFDE\uCFF8\u865A"+
-            "\u865B\u865C\uD5DC\uDFEE\u865D\u865E\u865F\u8660"+
-            "\u8661\u8662\uB2B8\u8663\uBADF\uDFEC\u8664\uDBC1"+
-            "\u8665\uD1E4\u8666\u8667\u8668\u8669\uCBF4\uB4BD"+
-            "\u866A\uB0A6\u866B\u866C\u866D\u866E\u866F\uDFF1"+
-            "\uCCC6\uDFF2\u8670\u8671\uDFED\u8672\u8673\u8674"+
-            "\u8675\u8676\u8677\uDFE9\u8678\u8679\u867A\u867B"+
-            "\uDFEB\u867C\uDFEF\uDFF0\uBBBD\u867D\u867E\uDFF3"+
-            "\u8680\u8681\uDFF4\u8682\uBBA3\u8683\uCADB\uCEA8"+
-            "\uE0A7\uB3AA\u8684\uE0A6\u8685\u8686\u8687\uE0A1"+
-            "\u8688\u8689\u868A\u868B\uDFFE\u868C\uCDD9\uDFFC"+
-            "\u868D\uDFFA\u868E\uBFD0\uD7C4\u868F\uC9CC\u8690"+
-            "\u8691\uDFF8\uB0A1\u8692\u8693\u8694\u8695\u8696"+
-            "\uDFFD\u8697\u8698\u8699\u869A\uDFFB\uE0A2\u869B"+
-            "\u869C\u869D\u869E\u869F\uE0A8\u86A0\u86A1\u86A2"+
-            "\u86A3\uB7C8\u86A4\u86A5\uC6A1\uC9B6\uC0B2\uDFF5"+
-            "\u86A6\u86A7\uC5BE\u86A8\uD8C4\uDFF9\uC4F6\u86A9"+
-            "\u86AA\u86AB\u86AC\u86AD\u86AE\uE0A3\uE0A4\uE0A5"+
-            "\uD0A5\u86AF\u86B0\uE0B4\uCCE4\u86B1\uE0B1\u86B2"+
-            "\uBFA6\uE0AF\uCEB9\uE0AB\uC9C6\u86B3\u86B4\uC0AE"+
-            "\uE0AE\uBAED\uBAB0\uE0A9\u86B5\u86B6\u86B7\uDFF6"+
-            "\u86B8\uE0B3\u86B9\u86BA\uE0B8\u86BB\u86BC\u86BD"+
-            "\uB4AD\uE0B9\u86BE\u86BF\uCFB2\uBAC8\u86C0\uE0B0"+
-            "\u86C1\u86C2\u86C3\u86C4\u86C5\u86C6\u86C7\uD0FA"+
-            "\u86C8\u86C9\u86CA\u86CB\u86CC\u86CD\u86CE\u86CF"+
-            "\u86D0\uE0AC\u86D1\uD4FB\u86D2\uDFF7\u86D3\uC5E7"+
-            "\u86D4\uE0AD\u86D5\uD3F7\u86D6\uE0B6\uE0B7\u86D7"+
-            "\u86D8\u86D9\u86DA\u86DB\uE0C4\uD0E1\u86DC\u86DD"+
-            "\u86DE\uE0BC\u86DF\u86E0\uE0C9\uE0CA\u86E1\u86E2"+
-            "\u86E3\uE0BE\uE0AA\uC9A4\uE0C1\u86E4\uE0B2\u86E5"+
-            "\u86E6\u86E7\u86E8\u86E9\uCAC8\uE0C3\u86EA\uE0B5"+
-            "\u86EB\uCECB\u86EC\uCBC3\uE0CD\uE0C6\uE0C2\u86ED"+
-            "\uE0CB\u86EE\uE0BA\uE0BF\uE0C0\u86EF\u86F0\uE0C5"+
-            "\u86F1\u86F2\uE0C7\uE0C8\u86F3\uE0CC\u86F4\uE0BB"+
-            "\u86F5\u86F6\u86F7\u86F8\u86F9\uCBD4\uE0D5\u86FA"+
-            "\uE0D6\uE0D2\u86FB\u86FC\u86FD\u86FE\u8740\u8741"+
-            "\uE0D0\uBCCE\u8742\u8743\uE0D1\u8744\uB8C2\uD8C5"+
-            "\u8745\u8746\u8747\u8748\u8749\u874A\u874B\u874C"+
-            "\uD0EA\u874D\u874E\uC2EF\u874F\u8750\uE0CF\uE0BD"+
-            "\u8751\u8752\u8753\uE0D4\uE0D3\u8754\u8755\uE0D7"+
-            "\u8756\u8757\u8758\u8759\uE0DC\uE0D8\u875A\u875B"+
-            "\u875C\uD6F6\uB3B0\u875D\uD7EC\u875E\uCBBB\u875F"+
-            "\u8760\uE0DA\u8761\uCEFB\u8762\u8763\u8764\uBAD9"+
-            "\u8765\u8766\u8767\u8768\u8769\u876A\u876B\u876C"+
-            "\u876D\u876E\u876F\u8770\uE0E1\uE0DD\uD2AD\u8771"+
-            "\u8772\u8773\u8774\u8775\uE0E2\u8776\u8777\uE0DB"+
-            "\uE0D9\uE0DF\u8778\u8779\uE0E0\u877A\u877B\u877C"+
-            "\u877D\u877E\uE0DE\u8780\uE0E4\u8781\u8782\u8783"+
-            "\uC6F7\uD8AC\uD4EB\uE0E6\uCAC9\u8784\u8785\u8786"+
-            "\u8787\uE0E5\u8788\u8789\u878A\u878B\uB8C1\u878C"+
-            "\u878D\u878E\u878F\uE0E7\uE0E8\u8790\u8791\u8792"+
-            "\u8793\u8794\u8795\u8796\u8797\uE0E9\uE0E3\u8798"+
-            "\u8799\u879A\u879B\u879C\u879D\u879E\uBABF\uCCE7"+
-            "\u879F\u87A0\u87A1\uE0EA\u87A2\u87A3\u87A4\u87A5"+
-            "\u87A6\u87A7\u87A8\u87A9\u87AA\u87AB\u87AC\u87AD"+
-            "\u87AE\u87AF\u87B0\uCFF9\u87B1\u87B2\u87B3\u87B4"+
-            "\u87B5\u87B6\u87B7\u87B8\u87B9\u87BA\u87BB\uE0EB"+
-            "\u87BC\u87BD\u87BE\u87BF\u87C0\u87C1\u87C2\uC8C2"+
-            "\u87C3\u87C4\u87C5\u87C6\uBDC0\u87C7\u87C8\u87C9"+
-            "\u87CA\u87CB\u87CC\u87CD\u87CE\u87CF\u87D0\u87D1"+
-            "\u87D2\u87D3\uC4D2\u87D4\u87D5\u87D6\u87D7\u87D8"+
-            "\u87D9\u87DA\u87DB\u87DC\uE0EC\u87DD\u87DE\uE0ED"+
-            "\u87DF\u87E0\uC7F4\uCBC4\u87E1\uE0EE\uBBD8\uD8B6"+
-            "\uD2F2\uE0EF\uCDC5\u87E2\uB6DA\u87E3\u87E4\u87E5"+
-            "\u87E6\u87E7\u87E8\uE0F1\u87E9\uD4B0\u87EA\u87EB"+
-            "\uC0A7\uB4D1\u87EC\u87ED\uCEA7\uE0F0\u87EE\u87EF"+
-            "\u87F0\uE0F2\uB9CC\u87F1\u87F2\uB9FA\uCDBC\uE0F3"+
-            "\u87F3\u87F4\u87F5\uC6D4\uE0F4\u87F6\uD4B2\u87F7"+
-            "\uC8A6\uE0F6\uE0F5\u87F8\u87F9\u87FA\u87FB\u87FC"+
-            "\u87FD\u87FE\u8840\u8841\u8842\u8843\u8844\u8845"+
-            "\u8846\u8847\u8848\u8849\uE0F7\u884A\u884B\uCDC1"+
-            "\u884C\u884D\u884E\uCAA5\u884F\u8850\u8851\u8852"+
-            "\uD4DA\uDBD7\uDBD9\u8853\uDBD8\uB9E7\uDBDC\uDBDD"+
-            "\uB5D8\u8854\u8855\uDBDA\u8856\u8857\u8858\u8859"+
-            "\u885A\uDBDB\uB3A1\uDBDF\u885B\u885C\uBBF8\u885D"+
-            "\uD6B7\u885E\uDBE0\u885F\u8860\u8861\u8862\uBEF9"+
-            "\u8863\u8864\uB7BB\u8865\uDBD0\uCCAE\uBFB2\uBBB5"+
-            "\uD7F8\uBFD3\u8866\u8867\u8868\u8869\u886A\uBFE9"+
-            "\u886B\u886C\uBCE1\uCCB3\uDBDE\uB0D3\uCEEB\uB7D8"+
-            "\uD7B9\uC6C2\u886D\u886E\uC0A4\u886F\uCCB9\u8870"+
-            "\uDBE7\uDBE1\uC6BA\uDBE3\u8871\uDBE8\u8872\uC5F7"+
-            "\u8873\u8874\u8875\uDBEA\u8876\u8877\uDBE9\uBFC0"+
-            "\u8878\u8879\u887A\uDBE6\uDBE5\u887B\u887C\u887D"+
-            "\u887E\u8880\uB4B9\uC0AC\uC2A2\uDBE2\uDBE4\u8881"+
-            "\u8882\u8883\u8884\uD0CD\uDBED\u8885\u8886\u8887"+
-            "\u8888\u8889\uC0DD\uDBF2\u888A\u888B\u888C\u888D"+
-            "\u888E\u888F\u8890\uB6E2\u8891\u8892\u8893\u8894"+
-            "\uDBF3\uDBD2\uB9B8\uD4AB\uDBEC\u8895\uBFD1\uDBF0"+
-            "\u8896\uDBD1\u8897\uB5E6\u8898\uDBEB\uBFE5\u8899"+
-            "\u889A\u889B\uDBEE\u889C\uDBF1\u889D\u889E\u889F"+
-            "\uDBF9\u88A0\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6"+
-            "\u88A7\u88A8\uB9A1\uB0A3\u88A9\u88AA\u88AB\u88AC"+
-            "\u88AD\u88AE\u88AF\uC2F1\u88B0\u88B1\uB3C7\uDBEF"+
-            "\u88B2\u88B3\uDBF8\u88B4\uC6D2\uDBF4\u88B5\u88B6"+
-            "\uDBF5\uDBF7\uDBF6\u88B7\u88B8\uDBFE\u88B9\uD3F2"+
-            "\uB2BA\u88BA\u88BB\u88BC\uDBFD\u88BD\u88BE\u88BF"+
-            "\u88C0\u88C1\u88C2\u88C3\u88C4\uDCA4\u88C5\uDBFB"+
-            "\u88C6\u88C7\u88C8\u88C9\uDBFA\u88CA\u88CB\u88CC"+
-            "\uDBFC\uC5E0\uBBF9\u88CD\u88CE\uDCA3\u88CF\u88D0"+
-            "\uDCA5\u88D1\uCCC3\u88D2\u88D3\u88D4\uB6D1\uDDC0"+
-            "\u88D5\u88D6\u88D7\uDCA1\u88D8\uDCA2\u88D9\u88DA"+
-            "\u88DB\uC7B5\u88DC\u88DD\u88DE\uB6E9\u88DF\u88E0"+
-            "\u88E1\uDCA7\u88E2\u88E3\u88E4\u88E5\uDCA6\u88E6"+
-            "\uDCA9\uB1A4\u88E7\u88E8\uB5CC\u88E9\u88EA\u88EB"+
-            "\u88EC\u88ED\uBFB0\u88EE\u88EF\u88F0\u88F1\u88F2"+
-            "\uD1DF\u88F3\u88F4\u88F5\u88F6\uB6C2\u88F7\u88F8"+
-            "\u88F9\u88FA\u88FB\u88FC\u88FD\u88FE\u8940\u8941"+
-            "\u8942\u8943\u8944\u8945\uDCA8\u8946\u8947\u8948"+
-            "\u8949\u894A\u894B\u894C\uCBFA\uEBF3\u894D\u894E"+
-            "\u894F\uCBDC\u8950\u8951\uCBFE\u8952\u8953\u8954"+
-            "\uCCC1\u8955\u8956\u8957\u8958\u8959\uC8FB\u895A"+
-            "\u895B\u895C\u895D\u895E\u895F\uDCAA\u8960\u8961"+
-            "\u8962\u8963\u8964\uCCEE\uDCAB\u8965\u8966\u8967"+
-            "\u8968\u8969\u896A\u896B\u896C\u896D\u896E\u896F"+
-            "\u8970\u8971\u8972\u8973\u8974\u8975\uDBD3\u8976"+
-            "\uDCAF\uDCAC\u8977\uBEB3\u8978\uCAFB\u8979\u897A"+
-            "\u897B\uDCAD\u897C\u897D\u897E\u8980\u8981\u8982"+
-            "\u8983\u8984\uC9CA\uC4B9\u8985\u8986\u8987\u8988"+
-            "\u8989\uC7BD\uDCAE\u898A\u898B\u898C\uD4F6\uD0E6"+
-            "\u898D\u898E\u898F\u8990\u8991\u8992\u8993\u8994"+
-            "\uC4AB\uB6D5\u8995\u8996\u8997\u8998\u8999\u899A"+
-            "\u899B\u899C\u899D\u899E\u899F\u89A0\u89A1\u89A2"+
-            "\u89A3\u89A4\u89A5\u89A6\uDBD4\u89A7\u89A8\u89A9"+
-            "\u89AA\uB1DA\u89AB\u89AC\u89AD\uDBD5\u89AE\u89AF"+
-            "\u89B0\u89B1\u89B2\u89B3\u89B4\u89B5\u89B6\u89B7"+
-            "\u89B8\uDBD6\u89B9\u89BA\u89BB\uBABE\u89BC\u89BD"+
-            "\u89BE\u89BF\u89C0\u89C1\u89C2\u89C3\u89C4\u89C5"+
-            "\u89C6\u89C7\u89C8\u89C9\uC8C0\u89CA\u89CB\u89CC"+
-            "\u89CD\u89CE\u89CF\uCABF\uC8C9\u89D0\uD7B3\u89D1"+
-            "\uC9F9\u89D2\u89D3\uBFC7\u89D4\u89D5\uBAF8\u89D6"+
-            "\u89D7\uD2BC\u89D8\u89D9\u89DA\u89DB\u89DC\u89DD"+
-            "\u89DE\u89DF\uE2BA\u89E0\uB4A6\u89E1\u89E2\uB1B8"+
-            "\u89E3\u89E4\u89E5\u89E6\u89E7\uB8B4\u89E8\uCFC4"+
-            "\u89E9\u89EA\u89EB\u89EC\uD9E7\uCFA6\uCDE2\u89ED"+
-            "\u89EE\uD9ED\uB6E0\u89EF\uD2B9\u89F0\u89F1\uB9BB"+
-            "\u89F2\u89F3\u89F4\u89F5\uE2B9\uE2B7\u89F6\uB4F3"+
-            "\u89F7\uCCEC\uCCAB\uB7F2\u89F8\uD8B2\uD1EB\uBABB"+
-            "\u89F9\uCAA7\u89FA\u89FB\uCDB7\u89FC\u89FD\uD2C4"+
-            "\uBFE4\uBCD0\uB6E1\u89FE\uDEC5\u8A40\u8A41\u8A42"+
-            "\u8A43\uDEC6\uDBBC\u8A44\uD1D9\u8A45\u8A46\uC6E6"+
-            "\uC4CE\uB7EE\u8A47\uB7DC\u8A48\u8A49\uBFFC\uD7E0"+
-            "\u8A4A\uC6F5\u8A4B\u8A4C\uB1BC\uDEC8\uBDB1\uCCD7"+
-            "\uDECA\u8A4D\uDEC9\u8A4E\u8A4F\u8A50\u8A51\u8A52"+
-            "\uB5EC\u8A53\uC9DD\u8A54\u8A55\uB0C2\u8A56\u8A57"+
-            "\u8A58\u8A59\u8A5A\u8A5B\u8A5C\u8A5D\u8A5E\u8A5F"+
-            "\u8A60\u8A61\u8A62\uC5AE\uC5AB\u8A63\uC4CC\u8A64"+
-            "\uBCE9\uCBFD\u8A65\u8A66\u8A67\uBAC3\u8A68\u8A69"+
-            "\u8A6A\uE5F9\uC8E7\uE5FA\uCDFD\u8A6B\uD7B1\uB8BE"+
-            "\uC2E8\u8A6C\uC8D1\u8A6D\u8A6E\uE5FB\u8A6F\u8A70"+
-            "\u8A71\u8A72\uB6CA\uBCCB\u8A73\u8A74\uD1FD\uE6A1"+
-            "\u8A75\uC3EE\u8A76\u8A77\u8A78\u8A79\uE6A4\u8A7A"+
-            "\u8A7B\u8A7C\u8A7D\uE5FE\uE6A5\uCDD7\u8A7E\u8A80"+
-            "\uB7C1\uE5FC\uE5FD\uE6A3\u8A81\u8A82\uC4DD\uE6A8"+
-            "\u8A83\u8A84\uE6A7\u8A85\u8A86\u8A87\u8A88\u8A89"+
-            "\u8A8A\uC3C3\u8A8B\uC6DE\u8A8C\u8A8D\uE6AA\u8A8E"+
-            "\u8A8F\u8A90\u8A91\u8A92\u8A93\u8A94\uC4B7\u8A95"+
-            "\u8A96\u8A97\uE6A2\uCABC\u8A98\u8A99\u8A9A\u8A9B"+
-            "\uBDE3\uB9C3\uE6A6\uD0D5\uCEAF\u8A9C\u8A9D\uE6A9"+
-            "\uE6B0\u8A9E\uD2A6\u8A9F\uBDAA\uE6AD\u8AA0\u8AA1"+
-            "\u8AA2\u8AA3\u8AA4\uE6AF\u8AA5\uC0D1\u8AA6\u8AA7"+
-            "\uD2CC\u8AA8\u8AA9\u8AAA\uBCA7\u8AAB\u8AAC\u8AAD"+
-            "\u8AAE\u8AAF\u8AB0\u8AB1\u8AB2\u8AB3\u8AB4\u8AB5"+
-            "\u8AB6\uE6B1\u8AB7\uD2F6\u8AB8\u8AB9\u8ABA\uD7CB"+
-            "\u8ABB\uCDFE\u8ABC\uCDDE\uC2A6\uE6AB\uE6AC\uBDBF"+
-            "\uE6AE\uE6B3\u8ABD\u8ABE\uE6B2\u8ABF\u8AC0\u8AC1"+
-            "\u8AC2\uE6B6\u8AC3\uE6B8\u8AC4\u8AC5\u8AC6\u8AC7"+
-            "\uC4EF\u8AC8\u8AC9\u8ACA\uC4C8\u8ACB\u8ACC\uBEEA"+
-            "\uC9EF\u8ACD\u8ACE\uE6B7\u8ACF\uB6F0\u8AD0\u8AD1"+
-            "\u8AD2\uC3E4\u8AD3\u8AD4\u8AD5\u8AD6\u8AD7\u8AD8"+
-            "\u8AD9\uD3E9\uE6B4\u8ADA\uE6B5\u8ADB\uC8A2\u8ADC"+
-            "\u8ADD\u8ADE\u8ADF\u8AE0\uE6BD\u8AE1\u8AE2\u8AE3"+
-            "\uE6B9\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8\uC6C5\u8AE9"+
-            "\u8AEA\uCDF1\uE6BB\u8AEB\u8AEC\u8AED\u8AEE\u8AEF"+
-            "\u8AF0\u8AF1\u8AF2\u8AF3\u8AF4\uE6BC\u8AF5\u8AF6"+
-            "\u8AF7\u8AF8\uBBE9\u8AF9\u8AFA\u8AFB\u8AFC\u8AFD"+
-            "\u8AFE\u8B40\uE6BE\u8B41\u8B42\u8B43\u8B44\uE6BA"+
-            "\u8B45\u8B46\uC0B7\u8B47\u8B48\u8B49\u8B4A\u8B4B"+
-            "\u8B4C\u8B4D\u8B4E\u8B4F\uD3A4\uE6BF\uC9F4\uE6C3"+
-            "\u8B50\u8B51\uE6C4\u8B52\u8B53\u8B54\u8B55\uD0F6"+
-            "\u8B56\u8B57\u8B58\u8B59\u8B5A\u8B5B\u8B5C\u8B5D"+
-            "\u8B5E\u8B5F\u8B60\u8B61\u8B62\u8B63\u8B64\u8B65"+
-            "\u8B66\u8B67\uC3BD\u8B68\u8B69\u8B6A\u8B6B\u8B6C"+
-            "\u8B6D\u8B6E\uC3C4\uE6C2\u8B6F\u8B70\u8B71\u8B72"+
-            "\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78\u8B79\u8B7A"+
-            "\u8B7B\u8B7C\uE6C1\u8B7D\u8B7E\u8B80\u8B81\u8B82"+
-            "\u8B83\u8B84\uE6C7\uCFB1\u8B85\uEBF4\u8B86\u8B87"+
-            "\uE6CA\u8B88\u8B89\u8B8A\u8B8B\u8B8C\uE6C5\u8B8D"+
-            "\u8B8E\uBCDE\uC9A9\u8B8F\u8B90\u8B91\u8B92\u8B93"+
-            "\u8B94\uBCB5\u8B95\u8B96\uCFD3\u8B97\u8B98\u8B99"+
-            "\u8B9A\u8B9B\uE6C8\u8B9C\uE6C9\u8B9D\uE6CE\u8B9E"+
-            "\uE6D0\u8B9F\u8BA0\u8BA1\uE6D1\u8BA2\u8BA3\u8BA4"+
-            "\uE6CB\uB5D5\u8BA5\uE6CC\u8BA6\u8BA7\uE6CF\u8BA8"+
-            "\u8BA9\uC4DB\u8BAA\uE6C6\u8BAB\u8BAC\u8BAD\u8BAE"+
-            "\u8BAF\uE6CD\u8BB0\u8BB1\u8BB2\u8BB3\u8BB4\u8BB5"+
-            "\u8BB6\u8BB7\u8BB8\u8BB9\u8BBA\u8BBB\u8BBC\u8BBD";
-
-        private final static String innerIndex3=
-            "\u8BBE\u8BBF\u8BC0\u8BC1\u8BC2\u8BC3\u8BC4\u8BC5"+
-            "\u8BC6\uE6D2\u8BC7\u8BC8\u8BC9\u8BCA\u8BCB\u8BCC"+
-            "\u8BCD\u8BCE\u8BCF\u8BD0\u8BD1\u8BD2\uE6D4\uE6D3"+
-            "\u8BD3\u8BD4\u8BD5\u8BD6\u8BD7\u8BD8\u8BD9\u8BDA"+
-            "\u8BDB\u8BDC\u8BDD\u8BDE\u8BDF\u8BE0\u8BE1\u8BE2"+
-            "\u8BE3\u8BE4\u8BE5\u8BE6\u8BE7\u8BE8\u8BE9\u8BEA"+
-            "\u8BEB\u8BEC\uE6D5\u8BED\uD9F8\u8BEE\u8BEF\uE6D6"+
-            "\u8BF0\u8BF1\u8BF2\u8BF3\u8BF4\u8BF5\u8BF6\u8BF7"+
-            "\uE6D7\u8BF8\u8BF9\u8BFA\u8BFB\u8BFC\u8BFD\u8BFE"+
-            "\u8C40\u8C41\u8C42\u8C43\u8C44\u8C45\u8C46\u8C47"+
-            "\uD7D3\uE6DD\u8C48\uE6DE\uBFD7\uD4D0\u8C49\uD7D6"+
-            "\uB4E6\uCBEF\uE6DA\uD8C3\uD7CE\uD0A2\u8C4A\uC3CF"+
-            "\u8C4B\u8C4C\uE6DF\uBCBE\uB9C2\uE6DB\uD1A7\u8C4D"+
-            "\u8C4E\uBAA2\uC2CF\u8C4F\uD8AB\u8C50\u8C51\u8C52"+
-            "\uCAEB\uE5EE\u8C53\uE6DC\u8C54\uB7F5\u8C55\u8C56"+
-            "\u8C57\u8C58\uC8E6\u8C59\u8C5A\uC4F5\u8C5B\u8C5C"+
-            "\uE5B2\uC4FE\u8C5D\uCBFC\uE5B3\uD5AC\u8C5E\uD3EE"+
-            "\uCAD8\uB0B2\u8C5F\uCBCE\uCDEA\u8C60\u8C61\uBAEA"+
-            "\u8C62\u8C63\u8C64\uE5B5\u8C65\uE5B4\u8C66\uD7DA"+
-            "\uB9D9\uD6E6\uB6A8\uCDF0\uD2CB\uB1A6\uCAB5\u8C67"+
-            "\uB3E8\uC9F3\uBFCD\uD0FB\uCAD2\uE5B6\uBBC2\u8C68"+
-            "\u8C69\u8C6A\uCFDC\uB9AC\u8C6B\u8C6C\u8C6D\u8C6E"+
-            "\uD4D7\u8C6F\u8C70\uBAA6\uD1E7\uCFFC\uBCD2\u8C71"+
-            "\uE5B7\uC8DD\u8C72\u8C73\u8C74\uBFED\uB1F6\uCBDE"+
-            "\u8C75\u8C76\uBCC5\u8C77\uBCC4\uD2FA\uC3DC\uBFDC"+
-            "\u8C78\u8C79\u8C7A\u8C7B\uB8BB\u8C7C\u8C7D\u8C7E"+
-            "\uC3C2\u8C80\uBAAE\uD4A2\u8C81\u8C82\u8C83\u8C84"+
-            "\u8C85\u8C86\u8C87\u8C88\u8C89\uC7DE\uC4AF\uB2EC"+
-            "\u8C8A\uB9D1\u8C8B\u8C8C\uE5BB\uC1C8\u8C8D\u8C8E"+
-            "\uD5AF\u8C8F\u8C90\u8C91\u8C92\u8C93\uE5BC\u8C94"+
-            "\uE5BE\u8C95\u8C96\u8C97\u8C98\u8C99\u8C9A\u8C9B"+
-            "\uB4E7\uB6D4\uCBC2\uD1B0\uB5BC\u8C9C\u8C9D\uCAD9"+
-            "\u8C9E\uB7E2\u8C9F\u8CA0\uC9E4\u8CA1\uBDAB\u8CA2"+
-            "\u8CA3\uCEBE\uD7F0\u8CA4\u8CA5\u8CA6\u8CA7\uD0A1"+
-            "\u8CA8\uC9D9\u8CA9\u8CAA\uB6FB\uE6D8\uBCE2\u8CAB"+
-            "\uB3BE\u8CAC\uC9D0\u8CAD\uE6D9\uB3A2\u8CAE\u8CAF"+
-            "\u8CB0\u8CB1\uDECC\u8CB2\uD3C8\uDECD\u8CB3\uD2A2"+
-            "\u8CB4\u8CB5\u8CB6\u8CB7\uDECE\u8CB8\u8CB9\u8CBA"+
-            "\u8CBB\uBECD\u8CBC\u8CBD\uDECF\u8CBE\u8CBF\u8CC0"+
-            "\uCAAC\uD2FC\uB3DF\uE5EA\uC4E1\uBEA1\uCEB2\uC4F2"+
-            "\uBED6\uC6A8\uB2E3\u8CC1\u8CC2\uBED3\u8CC3\u8CC4"+
-            "\uC7FC\uCCEB\uBDEC\uCEDD\u8CC5\u8CC6\uCABA\uC6C1"+
-            "\uE5EC\uD0BC\u8CC7\u8CC8\u8CC9\uD5B9\u8CCA\u8CCB"+
-            "\u8CCC\uE5ED\u8CCD\u8CCE\u8CCF\u8CD0\uCAF4\u8CD1"+
-            "\uCDC0\uC2C5\u8CD2\uE5EF\u8CD3\uC2C4\uE5F0\u8CD4"+
-            "\u8CD5\u8CD6\u8CD7\u8CD8\u8CD9\u8CDA\uE5F8\uCDCD"+
-            "\u8CDB\uC9BD\u8CDC\u8CDD\u8CDE\u8CDF\u8CE0\u8CE1"+
-            "\u8CE2\uD2D9\uE1A8\u8CE3\u8CE4\u8CE5\u8CE6\uD3EC"+
-            "\u8CE7\uCBEA\uC6F1\u8CE8\u8CE9\u8CEA\u8CEB\u8CEC"+
-            "\uE1AC\u8CED\u8CEE\u8CEF\uE1A7\uE1A9\u8CF0\u8CF1"+
-            "\uE1AA\uE1AF\u8CF2\u8CF3\uB2ED\u8CF4\uE1AB\uB8DA"+
-            "\uE1AD\uE1AE\uE1B0\uB5BA\uE1B1\u8CF5\u8CF6\u8CF7"+
-            "\u8CF8\u8CF9\uE1B3\uE1B8\u8CFA\u8CFB\u8CFC\u8CFD"+
-            "\u8CFE\uD1D2\u8D40\uE1B6\uE1B5\uC1EB\u8D41\u8D42"+
-            "\u8D43\uE1B7\u8D44\uD4C0\u8D45\uE1B2\u8D46\uE1BA"+
-            "\uB0B6\u8D47\u8D48\u8D49\u8D4A\uE1B4\u8D4B\uBFF9"+
-            "\u8D4C\uE1B9\u8D4D\u8D4E\uE1BB\u8D4F\u8D50\u8D51"+
-            "\u8D52\u8D53\u8D54\uE1BE\u8D55\u8D56\u8D57\u8D58"+
-            "\u8D59\u8D5A\uE1BC\u8D5B\u8D5C\u8D5D\u8D5E\u8D5F"+
-            "\u8D60\uD6C5\u8D61\u8D62\u8D63\u8D64\u8D65\u8D66"+
-            "\u8D67\uCFBF\u8D68\u8D69\uE1BD\uE1BF\uC2CD\u8D6A"+
-            "\uB6EB\u8D6B\uD3F8\u8D6C\u8D6D\uC7CD\u8D6E\u8D6F"+
-            "\uB7E5\u8D70\u8D71\u8D72\u8D73\u8D74\u8D75\u8D76"+
-            "\u8D77\u8D78\u8D79\uBEFE\u8D7A\u8D7B\u8D7C\u8D7D"+
-            "\u8D7E\u8D80\uE1C0\uE1C1\u8D81\u8D82\uE1C7\uB3E7"+
-            "\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88\uC6E9\u8D89"+
-            "\u8D8A\u8D8B\u8D8C\u8D8D\uB4DE\u8D8E\uD1C2\u8D8F"+
-            "\u8D90\u8D91\u8D92\uE1C8\u8D93\u8D94\uE1C6\u8D95"+
-            "\u8D96\u8D97\u8D98\u8D99\uE1C5\u8D9A\uE1C3\uE1C2"+
-            "\u8D9B\uB1C0\u8D9C\u8D9D\u8D9E\uD5B8\uE1C4\u8D9F"+
-            "\u8DA0\u8DA1\u8DA2\u8DA3\uE1CB\u8DA4\u8DA5\u8DA6"+
-            "\u8DA7\u8DA8\u8DA9\u8DAA\u8DAB\uE1CC\uE1CA\u8DAC"+
-            "\u8DAD\u8DAE\u8DAF\u8DB0\u8DB1\u8DB2\u8DB3\uEFFA"+
-            "\u8DB4\u8DB5\uE1D3\uE1D2\uC7B6\u8DB6\u8DB7\u8DB8"+
-            "\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD\u8DBE\u8DBF\u8DC0"+
-            "\uE1C9\u8DC1\u8DC2\uE1CE\u8DC3\uE1D0\u8DC4\u8DC5"+
-            "\u8DC6\u8DC7\u8DC8\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD"+
-            "\u8DCE\uE1D4\u8DCF\uE1D1\uE1CD\u8DD0\u8DD1\uE1CF"+
-            "\u8DD2\u8DD3\u8DD4\u8DD5\uE1D5\u8DD6\u8DD7\u8DD8"+
-            "\u8DD9\u8DDA\u8DDB\u8DDC\u8DDD\u8DDE\u8DDF\u8DE0"+
-            "\u8DE1\u8DE2\uE1D6\u8DE3\u8DE4\u8DE5\u8DE6\u8DE7"+
-            "\u8DE8\u8DE9\u8DEA\u8DEB\u8DEC\u8DED\u8DEE\u8DEF"+
-            "\u8DF0\u8DF1\u8DF2\u8DF3\u8DF4\u8DF5\u8DF6\u8DF7"+
-            "\u8DF8\uE1D7\u8DF9\u8DFA\u8DFB\uE1D8\u8DFC\u8DFD"+
-            "\u8DFE\u8E40\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46"+
-            "\u8E47\u8E48\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E"+
-            "\u8E4F\u8E50\u8E51\u8E52\u8E53\u8E54\u8E55\uE1DA"+
-            "\u8E56\u8E57\u8E58\u8E59\u8E5A\u8E5B\u8E5C\u8E5D"+
-            "\u8E5E\u8E5F\u8E60\u8E61\u8E62\uE1DB\u8E63\u8E64"+
-            "\u8E65\u8E66\u8E67\u8E68\u8E69\uCEA1\u8E6A\u8E6B"+
-            "\u8E6C\u8E6D\u8E6E\u8E6F\u8E70\u8E71\u8E72\u8E73"+
-            "\u8E74\u8E75\u8E76\uE7DD\u8E77\uB4A8\uD6DD\u8E78"+
-            "\u8E79\uD1B2\uB3B2\u8E7A\u8E7B\uB9A4\uD7F3\uC7C9"+
-            "\uBEDE\uB9AE\u8E7C\uCED7\u8E7D\u8E7E\uB2EE\uDBCF"+
-            "\u8E80\uBCBA\uD2D1\uCBC8\uB0CD\u8E81\u8E82\uCFEF"+
-            "\u8E83\u8E84\u8E85\u8E86\u8E87\uD9E3\uBDED\u8E88"+
-            "\u8E89\uB1D2\uCAD0\uB2BC\u8E8A\uCBA7\uB7AB\u8E8B"+
-            "\uCAA6\u8E8C\u8E8D\u8E8E\uCFA3\u8E8F\u8E90\uE0F8"+
-            "\uD5CA\uE0FB\u8E91\u8E92\uE0FA\uC5C1\uCCFB\u8E93"+
-            "\uC1B1\uE0F9\uD6E3\uB2AF\uD6C4\uB5DB\u8E94\u8E95"+
-            "\u8E96\u8E97\u8E98\u8E99\u8E9A\u8E9B\uB4F8\uD6A1"+
-            "\u8E9C\u8E9D\u8E9E\u8E9F\u8EA0\uCFAF\uB0EF\u8EA1"+
-            "\u8EA2\uE0FC\u8EA3\u8EA4\u8EA5\u8EA6\u8EA7\uE1A1"+
-            "\uB3A3\u8EA8\u8EA9\uE0FD\uE0FE\uC3B1\u8EAA\u8EAB"+
-            "\u8EAC\u8EAD\uC3DD\u8EAE\uE1A2\uB7F9\u8EAF\u8EB0"+
-            "\u8EB1\u8EB2\u8EB3\u8EB4\uBBCF\u8EB5\u8EB6\u8EB7"+
-            "\u8EB8\u8EB9\u8EBA\u8EBB\uE1A3\uC4BB\u8EBC\u8EBD"+
-            "\u8EBE\u8EBF\u8EC0\uE1A4\u8EC1\u8EC2\uE1A5\u8EC3"+
-            "\u8EC4\uE1A6\uB4B1\u8EC5\u8EC6\u8EC7\u8EC8\u8EC9"+
-            "\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0\u8ED1"+
-            "\u8ED2\u8ED3\uB8C9\uC6BD\uC4EA\u8ED4\uB2A2\u8ED5"+
-            "\uD0D2\u8ED6\uE7DB\uBBC3\uD3D7\uD3C4\u8ED7\uB9E3"+
-            "\uE2CF\u8ED8\u8ED9\u8EDA\uD7AF\u8EDB\uC7EC\uB1D3"+
-            "\u8EDC\u8EDD\uB4B2\uE2D1\u8EDE\u8EDF\u8EE0\uD0F2"+
-            "\uC2AE\uE2D0\u8EE1\uBFE2\uD3A6\uB5D7\uE2D2\uB5EA"+
-            "\u8EE2\uC3ED\uB8FD\u8EE3\uB8AE\u8EE4\uC5D3\uB7CF"+
-            "\uE2D4\u8EE5\u8EE6\u8EE7\u8EE8\uE2D3\uB6C8\uD7F9"+
-            "\u8EE9\u8EEA\u8EEB\u8EEC\u8EED\uCDA5\u8EEE\u8EEF"+
-            "\u8EF0\u8EF1\u8EF2\uE2D8\u8EF3\uE2D6\uCAFC\uBFB5"+
-            "\uD3B9\uE2D5\u8EF4\u8EF5\u8EF6\u8EF7\uE2D7\u8EF8"+
-            "\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD\u8EFE\u8F40\u8F41"+
-            "\u8F42\uC1AE\uC0C8\u8F43\u8F44\u8F45\u8F46\u8F47"+
-            "\u8F48\uE2DB\uE2DA\uC0AA\u8F49\u8F4A\uC1CE\u8F4B"+
-            "\u8F4C\u8F4D\u8F4E\uE2DC\u8F4F\u8F50\u8F51\u8F52"+
-            "\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58\u8F59\u8F5A"+
-            "\uE2DD\u8F5B\uE2DE\u8F5C\u8F5D\u8F5E\u8F5F\u8F60"+
-            "\u8F61\u8F62\u8F63\u8F64\uDBC8\u8F65\uD1D3\uCDA2"+
-            "\u8F66\u8F67\uBDA8\u8F68\u8F69\u8F6A\uDEC3\uD8A5"+
-            "\uBFAA\uDBCD\uD2EC\uC6FA\uC5AA\u8F6B\u8F6C\u8F6D"+
-            "\uDEC4\u8F6E\uB1D7\uDFAE\u8F6F\u8F70\u8F71\uCABD"+
-            "\u8F72\uDFB1\u8F73\uB9AD\u8F74\uD2FD\u8F75\uB8A5"+
-            "\uBAEB\u8F76\u8F77\uB3DA\u8F78\u8F79\u8F7A\uB5DC"+
-            "\uD5C5\u8F7B\u8F7C\u8F7D\u8F7E\uC3D6\uCFD2\uBBA1"+
-            "\u8F80\uE5F3\uE5F2\u8F81\u8F82\uE5F4\u8F83\uCDE4"+
-            "\u8F84\uC8F5\u8F85\u8F86\u8F87\u8F88\u8F89\u8F8A"+
-            "\u8F8B\uB5AF\uC7BF\u8F8C\uE5F6\u8F8D\u8F8E\u8F8F"+
-            "\uECB0\u8F90\u8F91\u8F92\u8F93\u8F94\u8F95\u8F96"+
-            "\u8F97\u8F98\u8F99\u8F9A\u8F9B\u8F9C\u8F9D\u8F9E"+
-            "\uE5E6\u8F9F\uB9E9\uB5B1\u8FA0\uC2BC\uE5E8\uE5E7"+
-            "\uE5E9\u8FA1\u8FA2\u8FA3\u8FA4\uD2CD\u8FA5\u8FA6"+
-            "\u8FA7\uE1EA\uD0CE\u8FA8\uCDAE\u8FA9\uD1E5\u8FAA"+
-            "\u8FAB\uB2CA\uB1EB\u8FAC\uB1F2\uC5ED\u8FAD\u8FAE"+
-            "\uD5C3\uD3B0\u8FAF\uE1DC\u8FB0\u8FB1\u8FB2\uE1DD"+
-            "\u8FB3\uD2DB\u8FB4\uB3B9\uB1CB\u8FB5\u8FB6\u8FB7"+
-            "\uCDF9\uD5F7\uE1DE\u8FB8\uBEB6\uB4FD\u8FB9\uE1DF"+
-            "\uBADC\uE1E0\uBBB2\uC2C9\uE1E1\u8FBA\u8FBB\u8FBC"+
-            "\uD0EC\u8FBD\uCDBD\u8FBE\u8FBF\uE1E2\u8FC0\uB5C3"+
-            "\uC5C7\uE1E3\u8FC1\u8FC2\uE1E4\u8FC3\u8FC4\u8FC5"+
-            "\u8FC6\uD3F9\u8FC7\u8FC8\u8FC9\u8FCA\u8FCB\u8FCC"+
-            "\uE1E5\u8FCD\uD1AD\u8FCE\u8FCF\uE1E6\uCEA2\u8FD0"+
-            "\u8FD1\u8FD2\u8FD3\u8FD4\u8FD5\uE1E7\u8FD6\uB5C2"+
-            "\u8FD7\u8FD8\u8FD9\u8FDA\uE1E8\uBBD5\u8FDB\u8FDC"+
-            "\u8FDD\u8FDE\u8FDF\uD0C4\uE2E0\uB1D8\uD2E4\u8FE0"+
-            "\u8FE1\uE2E1\u8FE2\u8FE3\uBCC9\uC8CC\u8FE4\uE2E3"+
-            "\uECFE\uECFD\uDFAF\u8FE5\u8FE6\u8FE7\uE2E2\uD6BE"+
-            "\uCDFC\uC3A6\u8FE8\u8FE9\u8FEA\uE3C3\u8FEB\u8FEC"+
-            "\uD6D2\uE2E7\u8FED\u8FEE\uE2E8\u8FEF\u8FF0\uD3C7"+
-            "\u8FF1\u8FF2\uE2EC\uBFEC\u8FF3\uE2ED\uE2E5\u8FF4"+
-            "\u8FF5\uB3C0\u8FF6\u8FF7\u8FF8\uC4EE\u8FF9\u8FFA"+
-            "\uE2EE\u8FFB\u8FFC\uD0C3\u8FFD\uBAF6\uE2E9\uB7DE"+
-            "\uBBB3\uCCAC\uCBCB\uE2E4\uE2E6\uE2EA\uE2EB\u8FFE"+
-            "\u9040\u9041\uE2F7\u9042\u9043\uE2F4\uD4F5\uE2F3"+
-            "\u9044\u9045\uC5AD\u9046\uD5FA\uC5C2\uB2C0\u9047"+
-            "\u9048\uE2EF\u9049\uE2F2\uC1AF\uCBBC\u904A\u904B"+
-            "\uB5A1\uE2F9\u904C\u904D\u904E\uBCB1\uE2F1\uD0D4"+
-            "\uD4B9\uE2F5\uB9D6\uE2F6\u904F\u9050\u9051\uC7D3"+
-            "\u9052\u9053\u9054\u9055\u9056\uE2F0\u9057\u9058"+
-            "\u9059\u905A\u905B\uD7DC\uEDA1\u905C\u905D\uE2F8"+
-            "\u905E\uEDA5\uE2FE\uCAD1\u905F\u9060\u9061\u9062"+
-            "\u9063\u9064\u9065\uC1B5\u9066\uBBD0\u9067\u9068"+
-            "\uBFD6\u9069\uBAE3\u906A\u906B\uCBA1\u906C\u906D"+
-            "\u906E\uEDA6\uEDA3\u906F\u9070\uEDA2\u9071\u9072"+
-            "\u9073\u9074\uBBD6\uEDA7\uD0F4\u9075\u9076\uEDA4"+
-            "\uBADE\uB6F7\uE3A1\uB6B2\uCCF1\uB9A7\u9077\uCFA2"+
-            "\uC7A1\u9078\u9079\uBFD2\u907A\u907B\uB6F1\u907C"+
-            "\uE2FA\uE2FB\uE2FD\uE2FC\uC4D5\uE3A2\u907D\uD3C1"+
-            "\u907E\u9080\u9081\uE3A7\uC7C4\u9082\u9083\u9084"+
-            "\u9085\uCFA4\u9086\u9087\uE3A9\uBAB7\u9088\u9089"+
-            "\u908A\u908B\uE3A8\u908C\uBBDA\u908D\uE3A3\u908E"+
-            "\u908F\u9090\uE3A4\uE3AA\u9091\uE3A6\u9092\uCEF2"+
-            "\uD3C6\u9093\u9094\uBBBC\u9095\u9096\uD4C3\u9097"+
-            "\uC4FA\u9098\u9099\uEDA8\uD0FC\uE3A5\u909A\uC3F5"+
-            "\u909B\uE3AD\uB1AF\u909C\uE3B2\u909D\u909E\u909F"+
-            "\uBCC2\u90A0\u90A1\uE3AC\uB5BF\u90A2\u90A3\u90A4"+
-            "\u90A5\u90A6\u90A7\u90A8\u90A9\uC7E9\uE3B0\u90AA"+
-            "\u90AB\u90AC\uBEAA\uCDEF\u90AD\u90AE\u90AF\u90B0"+
-            "\u90B1\uBBF3\u90B2\u90B3\u90B4\uCCE8\u90B5\u90B6"+
-            "\uE3AF\u90B7\uE3B1\u90B8\uCFA7\uE3AE\u90B9\uCEA9"+
-            "\uBBDD\u90BA\u90BB\u90BC\u90BD\u90BE\uB5EB\uBEE5"+
-            "\uB2D2\uB3CD\u90BF\uB1B9\uE3AB\uB2D1\uB5AC\uB9DF"+
-            "\uB6E8\u90C0\u90C1\uCFEB\uE3B7\u90C2\uBBCC\u90C3"+
-            "\u90C4\uC8C7\uD0CA\u90C5\u90C6\u90C7\u90C8\u90C9"+
-            "\uE3B8\uB3EE\u90CA\u90CB\u90CC\u90CD\uEDA9\u90CE"+
-            "\uD3FA\uD3E4\u90CF\u90D0\u90D1\uEDAA\uE3B9\uD2E2"+
-            "\u90D2\u90D3\u90D4\u90D5\u90D6\uE3B5\u90D7\u90D8"+
-            "\u90D9\u90DA\uD3DE\u90DB\u90DC\u90DD\u90DE\uB8D0"+
-            "\uE3B3\u90DF\u90E0\uE3B6\uB7DF\u90E1\uE3B4\uC0A2"+
-            "\u90E2\u90E3\u90E4\uE3BA\u90E5\u90E6\u90E7\u90E8"+
-            "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
-            "\u90F1\u90F2\u90F3\u90F4\u90F5\u90F6\u90F7\uD4B8"+
-            "\u90F8\u90F9\u90FA\u90FB\u90FC\u90FD\u90FE\u9140"+
-            "\uB4C8\u9141\uE3BB\u9142\uBBC5\u9143\uC9F7\u9144"+
-            "\u9145\uC9E5\u9146\u9147\u9148\uC4BD\u9149\u914A"+
-            "\u914B\u914C\u914D\u914E\u914F\uEDAB\u9150\u9151"+
-            "\u9152\u9153\uC2FD\u9154\u9155\u9156\u9157\uBBDB"+
-            "\uBFAE\u9158\u9159\u915A\u915B\u915C\u915D\u915E"+
-            "\uCEBF\u915F\u9160\u9161\u9162\uE3BC\u9163\uBFB6"+
-            "\u9164\u9165\u9166\u9167\u9168\u9169\u916A\u916B"+
-            "\u916C\u916D\u916E\u916F\u9170\u9171\u9172\u9173"+
-            "\u9174\u9175\u9176\uB1EF\u9177\u9178\uD4F7\u9179"+
-            "\u917A\u917B\u917C\u917D\uE3BE\u917E\u9180\u9181"+
-            "\u9182\u9183\u9184\u9185\u9186\uEDAD\u9187\u9188"+
-            "\u9189\u918A\u918B\u918C\u918D\u918E\u918F\uE3BF"+
-            "\uBAA9\uEDAC\u9190\u9191\uE3BD\u9192\u9193\u9194"+
-            "\u9195\u9196\u9197\u9198\u9199\u919A\u919B\uE3C0"+
-            "\u919C\u919D\u919E\u919F\u91A0\u91A1\uBAB6\u91A2"+
-            "\u91A3\u91A4\uB6AE\u91A5\u91A6\u91A7\u91A8\u91A9"+
-            "\uD0B8\u91AA\uB0C3\uEDAE\u91AB\u91AC\u91AD\u91AE"+
-            "\u91AF\uEDAF\uC0C1\u91B0\uE3C1\u91B1\u91B2\u91B3"+
-            "\u91B4\u91B5\u91B6\u91B7\u91B8\u91B9\u91BA\u91BB"+
-            "\u91BC\u91BD\u91BE\u91BF\u91C0\u91C1\uC5B3\u91C2"+
-            "\u91C3\u91C4\u91C5\u91C6\u91C7\u91C8\u91C9\u91CA"+
-            "\u91CB\u91CC\u91CD\u91CE\u91CF\uE3C2\u91D0\u91D1"+
-            "\u91D2\u91D3\u91D4\u91D5\u91D6\u91D7\u91D8\uDCB2"+
-            "\u91D9\u91DA\u91DB\u91DC\u91DD\u91DE\uEDB0\u91DF"+
-            "\uB8EA\u91E0\uCEEC\uEAA7\uD0E7\uCAF9\uC8D6\uCFB7"+
-            "\uB3C9\uCED2\uBDE4\u91E1\u91E2\uE3DE\uBBF2\uEAA8"+
-            "\uD5BD\u91E3\uC6DD\uEAA9\u91E4\u91E5\u91E6\uEAAA"+
-            "\u91E7\uEAAC\uEAAB\u91E8\uEAAE\uEAAD\u91E9\u91EA"+
-            "\u91EB\u91EC\uBDD8\u91ED\uEAAF\u91EE\uC2BE\u91EF"+
-            "\u91F0\u91F1\u91F2\uB4C1\uB4F7\u91F3\u91F4\uBBA7"+
-            "\u91F5\u91F6\u91F7\u91F8\u91F9\uECE6\uECE5\uB7BF"+
-            "\uCBF9\uB1E2\u91FA\uECE7\u91FB\u91FC\u91FD\uC9C8"+
-            "\uECE8\uECE9\u91FE\uCAD6\uDED0\uB2C5\uD4FA\u9240"+
-            "\u9241\uC6CB\uB0C7\uB4F2\uC8D3\u9242\u9243\u9244"+
-            "\uCDD0\u9245\u9246\uBFB8\u9247\u9248\u9249\u924A"+
-            "\u924B\u924C\u924D\uBFDB\u924E\u924F\uC7A4\uD6B4"+
-            "\u9250\uC0A9\uDED1\uC9A8\uD1EF\uC5A4\uB0E7\uB3B6"+
-            "\uC8C5\u9251\u9252\uB0E2\u9253\u9254\uB7F6\u9255"+
-            "\u9256\uC5FA\u9257\u9258\uB6F3\u9259\uD5D2\uB3D0"+
-            "\uBCBC\u925A\u925B\u925C\uB3AD\u925D\u925E\u925F"+
-            "\u9260\uBEF1\uB0D1\u9261\u9262\u9263\u9264\u9265"+
-            "\u9266\uD2D6\uCAE3\uD7A5\u9267\uCDB6\uB6B6\uBFB9"+
-            "\uD5DB\u9268\uB8A7\uC5D7\u9269\u926A\u926B\uDED2"+
-            "\uBFD9\uC2D5\uC7C0\u926C\uBBA4\uB1A8\u926D\u926E"+
-            "\uC5EA\u926F\u9270\uC5FB\uCCA7\u9271\u9272\u9273"+
-            "\u9274\uB1A7\u9275\u9276\u9277\uB5D6\u9278\u9279"+
-            "\u927A\uC4A8\u927B\uDED3\uD1BA\uB3E9\u927C\uC3F2"+
-            "\u927D\u927E\uB7F7\u9280\uD6F4\uB5A3\uB2F0\uC4B4"+
-            "\uC4E9\uC0AD\uDED4\u9281\uB0E8\uC5C4\uC1E0\u9282"+
-            "\uB9D5\u9283\uBEDC\uCDD8\uB0CE\u9284\uCDCF\uDED6"+
-            "\uBED0\uD7BE\uDED5\uD5D0\uB0DD\u9285\u9286\uC4E2"+
-            "\u9287\u9288\uC2A3\uBCF0\u9289\uD3B5\uC0B9\uC5A1"+
-            "\uB2A6\uD4F1\u928A\u928B\uC0A8\uCAC3\uDED7\uD5FC"+
-            "\u928C\uB9B0\u928D\uC8AD\uCBA9\u928E\uDED9\uBFBD"+
-            "\u928F\u9290\u9291\u9292\uC6B4\uD7A7\uCAB0\uC4C3"+
-            "\u9293\uB3D6\uB9D2\u9294\u9295\u9296\u9297\uD6B8"+
-            "\uEAFC\uB0B4\u9298\u9299\u929A\u929B\uBFE6\u929C"+
-            "\u929D\uCCF4\u929E\u929F\u92A0\u92A1\uCDDA\u92A2"+
-            "\u92A3\u92A4\uD6BF\uC2CE\u92A5\uCECE\uCCA2\uD0AE"+
-            "\uC4D3\uB5B2\uDED8\uD5F5\uBCB7\uBBD3\u92A6\u92A7"+
-            "\uB0A4\u92A8\uC5B2\uB4EC\u92A9\u92AA\u92AB\uD5F1"+
-            "\u92AC\u92AD\uEAFD\u92AE\u92AF\u92B0\u92B1\u92B2"+
-            "\u92B3\uDEDA\uCDA6\u92B4\u92B5\uCDEC\u92B6\u92B7"+
-            "\u92B8\u92B9\uCEE6\uDEDC\u92BA\uCDB1\uC0A6\u92BB"+
-            "\u92BC\uD7BD\u92BD\uDEDB\uB0C6\uBAB4\uC9D3\uC4F3"+
-            "\uBEE8\u92BE\u92BF\u92C0\u92C1\uB2B6\u92C2\u92C3"+
-            "\u92C4\u92C5\u92C6\u92C7\u92C8\u92C9\uC0CC\uCBF0"+
-            "\u92CA\uBCF1\uBBBB\uB5B7\u92CB\u92CC\u92CD\uC5F5"+
-            "\u92CE\uDEE6\u92CF\u92D0\u92D1\uDEE3\uBEDD\u92D2"+
-            "\u92D3\uDEDF\u92D4\u92D5\u92D6\u92D7\uB4B7\uBDDD"+
-            "\u92D8\u92D9\uDEE0\uC4ED\u92DA\u92DB\u92DC\u92DD"+
-            "\uCFC6\u92DE\uB5E0\u92DF\u92E0\u92E1\u92E2\uB6DE"+
-            "\uCADA\uB5F4\uDEE5\u92E3\uD5C6\u92E4\uDEE1\uCCCD"+
-            "\uC6FE\u92E5\uC5C5\u92E6\u92E7\u92E8\uD2B4\u92E9"+
-            "\uBEF2\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
-            "\uC2D3\u92F1\uCCBD\uB3B8\u92F2\uBDD3\u92F3\uBFD8"+
-            "\uCDC6\uD1DA\uB4EB\u92F4\uDEE4\uDEDD\uDEE7\u92F5"+
-            "\uEAFE\u92F6\u92F7\uC2B0\uDEE2\u92F8\u92F9\uD6C0"+
-            "\uB5A7\u92FA\uB2F4\u92FB\uDEE8\u92FC\uDEF2\u92FD"+
-            "\u92FE\u9340\u9341\u9342\uDEED\u9343\uDEF1\u9344"+
-            "\u9345\uC8E0\u9346\u9347\u9348\uD7E1\uDEEF\uC3E8"+
-            "\uCCE1\u9349\uB2E5\u934A\u934B\u934C\uD2BE\u934D"+
-            "\u934E\u934F\u9350\u9351\u9352\u9353\uDEEE\u9354"+
-            "\uDEEB\uCED5\u9355\uB4A7\u9356\u9357\u9358\u9359"+
-            "\u935A\uBFAB\uBEBE\u935B\u935C\uBDD2\u935D\u935E"+
-            "\u935F\u9360\uDEE9\u9361\uD4AE\u9362\uDEDE\u9363"+
-            "\uDEEA\u9364\u9365\u9366\u9367\uC0BF\u9368\uDEEC"+
-            "\uB2F3\uB8E9\uC2A7\u9369\u936A\uBDC1\u936B\u936C"+
-            "\u936D\u936E\u936F\uDEF5\uDEF8\u9370\u9371\uB2AB"+
-            "\uB4A4\u9372\u9373\uB4EA\uC9A6\u9374\u9375\u9376"+
-            "\u9377\u9378\u9379\uDEF6\uCBD1\u937A\uB8E3\u937B"+
-            "\uDEF7\uDEFA\u937C\u937D\u937E\u9380\uDEF9\u9381"+
-            "\u9382\u9383\uCCC2\u9384\uB0E1\uB4EE\u9385\u9386"+
-            "\u9387\u9388\u9389\u938A\uE5BA\u938B\u938C\u938D"+
-            "\u938E\u938F\uD0AF\u9390\u9391\uB2EB\u9392\uEBA1"+
-            "\u9393\uDEF4\u9394\u9395\uC9E3\uDEF3\uB0DA\uD2A1"+
-            "\uB1F7\u9396\uCCAF\u9397\u9398\u9399\u939A\u939B"+
-            "\u939C\u939D\uDEF0\u939E\uCBA4\u939F\u93A0\u93A1"+
-            "\uD5AA\u93A2\u93A3\u93A4\u93A5\u93A6\uDEFB\u93A7"+
-            "\u93A8\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\uB4DD"+
-            "\u93AF\uC4A6\u93B0\u93B1\u93B2\uDEFD\u93B3\u93B4"+
-            "\u93B5\u93B6\u93B7\u93B8\u93B9\u93BA\u93BB\u93BC"+
-            "\uC3FE\uC4A1\uDFA1\u93BD\u93BE\u93BF\u93C0\u93C1"+
-            "\u93C2\u93C3\uC1CC\u93C4\uDEFC\uBEEF\u93C5\uC6B2"+
-            "\u93C6\u93C7\u93C8\u93C9\u93CA\u93CB\u93CC\u93CD"+
-            "\u93CE\uB3C5\uC8F6\u93CF\u93D0\uCBBA\uDEFE\u93D1"+
-            "\u93D2\uDFA4\u93D3\u93D4\u93D5\u93D6\uD7B2\u93D7"+
-            "\u93D8\u93D9\u93DA\u93DB\uB3B7\u93DC\u93DD\u93DE"+
-            "\u93DF\uC1C3\u93E0\u93E1\uC7CB\uB2A5\uB4E9\u93E2"+
-            "\uD7AB\u93E3\u93E4\u93E5\u93E6\uC4EC\u93E7\uDFA2"+
-            "\uDFA3\u93E8\uDFA5\u93E9\uBAB3\u93EA\u93EB\u93EC"+
-            "\uDFA6\u93ED\uC0DE\u93EE\u93EF\uC9C3\u93F0\u93F1"+
-            "\u93F2\u93F3\u93F4\u93F5\u93F6\uB2D9\uC7E6\u93F7"+
-            "\uDFA7\u93F8\uC7DC\u93F9\u93FA\u93FB\u93FC\uDFA8"+
-            "\uEBA2\u93FD\u93FE\u9440\u9441\u9442\uCBD3\u9443"+
-            "\u9444\u9445\uDFAA\u9446\uDFA9\u9447\uB2C1\u9448"+
-            "\u9449\u944A\u944B\u944C\u944D\u944E\u944F\u9450"+
-            "\u9451\u9452\u9453\u9454\u9455\u9456\u9457\u9458"+
-            "\u9459\u945A\u945B\u945C\u945D\u945E\u945F\u9460"+
-            "\uC5CA\u9461\u9462\u9463\u9464\u9465\u9466\u9467"+
-            "\u9468\uDFAB\u9469\u946A\u946B\u946C\u946D\u946E"+
-            "\u946F\u9470\uD4DC\u9471\u9472\u9473\u9474\u9475"+
-            "\uC8C1\u9476\u9477\u9478\u9479\u947A\u947B\u947C"+
-            "\u947D\u947E\u9480\u9481\u9482\uDFAC\u9483\u9484"+
-            "\u9485\u9486\u9487\uBEF0\u9488\u9489\uDFAD\uD6A7"+
-            "\u948A\u948B\u948C\u948D\uEAB7\uEBB6\uCAD5\u948E"+
-            "\uD8FC\uB8C4\u948F\uB9A5\u9490\u9491\uB7C5\uD5FE"+
-            "\u9492\u9493\u9494\u9495\u9496\uB9CA\u9497\u9498"+
-            "\uD0A7\uF4CD\u9499\u949A\uB5D0\u949B\u949C\uC3F4"+
-            "\u949D\uBEC8\u949E\u949F\u94A0\uEBB7\uB0BD\u94A1"+
-            "\u94A2\uBDCC\u94A3\uC1B2\u94A4\uB1D6\uB3A8\u94A5"+
-            "\u94A6\u94A7\uB8D2\uC9A2\u94A8\u94A9\uB6D8\u94AA"+
-            "\u94AB\u94AC\u94AD\uEBB8\uBEB4\u94AE\u94AF\u94B0"+
-            "\uCAFD\u94B1\uC7C3\u94B2\uD5FB\u94B3\u94B4\uB7F3"+
-            "\u94B5\u94B6\u94B7\u94B8\u94B9\u94BA\u94BB\u94BC"+
-            "\u94BD\u94BE\u94BF\u94C0\u94C1\u94C2\u94C3\uCEC4"+
-            "\u94C4\u94C5\u94C6\uD5AB\uB1F3\u94C7\u94C8\u94C9"+
-            "\uECB3\uB0DF\u94CA\uECB5\u94CB\u94CC\u94CD\uB6B7"+
-            "\u94CE\uC1CF\u94CF\uF5FA\uD0B1\u94D0\u94D1\uD5E5"+
-            "\u94D2\uCED3\u94D3\u94D4\uBDEF\uB3E2\u94D5\uB8AB"+
-            "\u94D6\uD5B6\u94D7\uEDBD\u94D8\uB6CF\u94D9\uCBB9"+
-            "\uD0C2\u94DA\u94DB\u94DC\u94DD\u94DE\u94DF\u94E0"+
-            "\u94E1\uB7BD\u94E2\u94E3\uECB6\uCAA9\u94E4\u94E5"+
-            "\u94E6\uC5D4\u94E7\uECB9\uECB8\uC2C3\uECB7\u94E8"+
-            "\u94E9\u94EA\u94EB\uD0FD\uECBA\u94EC\uECBB\uD7E5"+
-            "\u94ED\u94EE\uECBC\u94EF\u94F0\u94F1\uECBD\uC6EC"+
-            "\u94F2\u94F3\u94F4\u94F5\u94F6\u94F7\u94F8\u94F9"+
-            "\uCEDE\u94FA\uBCC8\u94FB\u94FC\uC8D5\uB5A9\uBEC9"+
-            "\uD6BC\uD4E7\u94FD\u94FE\uD1AE\uD0F1\uEAB8\uEAB9"+
-            "\uEABA\uBAB5\u9540\u9541\u9542\u9543\uCAB1\uBFF5"+
-            "\u9544\u9545\uCDFA\u9546\u9547\u9548\u9549\u954A"+
-            "\uEAC0\u954B\uB0BA\uEABE\u954C\u954D\uC0A5\u954E"+
-            "\u954F\u9550\uEABB\u9551\uB2FD\u9552\uC3F7\uBBE8"+
-            "\u9553\u9554\u9555\uD2D7\uCEF4\uEABF\u9556\u9557"+
-            "\u9558\uEABC\u9559\u955A\u955B\uEAC3\u955C\uD0C7"+
-            "\uD3B3\u955D\u955E\u955F\u9560\uB4BA\u9561\uC3C1"+
-            "\uD7F2\u9562\u9563\u9564\u9565\uD5D1\u9566\uCAC7"+
-            "\u9567\uEAC5\u9568\u9569\uEAC4\uEAC7\uEAC6\u956A"+
-            "\u956B\u956C\u956D\u956E\uD6E7\u956F\uCFD4\u9570"+
-            "\u9571\uEACB\u9572\uBBCE\u9573\u9574\u9575\u9576"+
-            "\u9577\u9578\u9579\uBDFA\uC9CE\u957A\u957B\uEACC"+
-            "\u957C\u957D\uC9B9\uCFFE\uEACA\uD4CE\uEACD\uEACF"+
-            "\u957E\u9580\uCDED\u9581\u9582\u9583\u9584\uEAC9"+
-            "\u9585\uEACE\u9586\u9587\uCEEE\u9588\uBBDE\u9589"+
-            "\uB3BF\u958A\u958B\u958C\u958D\u958E\uC6D5\uBEB0"+
-            "\uCEFA\u958F\u9590\u9591\uC7E7\u9592\uBEA7\uEAD0"+
-            "\u9593\u9594\uD6C7\u9595\u9596\u9597\uC1C0\u9598"+
-            "\u9599\u959A\uD4DD\u959B\uEAD1\u959C\u959D\uCFBE"+
-            "\u959E\u959F\u95A0\u95A1\uEAD2\u95A2\u95A3\u95A4"+
-            "\u95A5\uCAEE\u95A6\u95A7\u95A8\u95A9\uC5AF\uB0B5"+
-            "\u95AA\u95AB\u95AC\u95AD\u95AE\uEAD4\u95AF\u95B0"+
-            "\u95B1\u95B2\u95B3\u95B4\u95B5\u95B6\u95B7\uEAD3"+
-            "\uF4DF\u95B8\u95B9\u95BA\u95BB\u95BC\uC4BA\u95BD"+
-            "\u95BE\u95BF\u95C0\u95C1\uB1A9\u95C2\u95C3\u95C4"+
-            "\u95C5\uE5DF\u95C6\u95C7\u95C8\u95C9\uEAD5\u95CA"+
-            "\u95CB\u95CC\u95CD\u95CE\u95CF\u95D0\u95D1\u95D2"+
-            "\u95D3\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9\u95DA"+
-            "\u95DB\u95DC\u95DD\u95DE\u95DF\u95E0\u95E1\u95E2"+
-            "\u95E3\uCAEF\u95E4\uEAD6\uEAD7\uC6D8\u95E5\u95E6"+
-            "\u95E7\u95E8\u95E9\u95EA\u95EB\u95EC\uEAD8\u95ED"+
-            "\u95EE\uEAD9\u95EF\u95F0\u95F1\u95F2\u95F3\u95F4"+
-            "\uD4BB\u95F5\uC7FA\uD2B7\uB8FC\u95F6\u95F7\uEAC2"+
-            "\u95F8\uB2DC\u95F9\u95FA\uC2FC\u95FB\uD4F8\uCCE6"+
-            "\uD7EE\u95FC\u95FD\u95FE\u9640\u9641\u9642\u9643"+
-            "\uD4C2\uD3D0\uEBC3\uC5F3\u9644\uB7FE\u9645\u9646"+
-            "\uEBD4\u9647\u9648\u9649\uCBB7\uEBDE\u964A\uC0CA"+
-            "\u964B\u964C\u964D\uCDFB\u964E\uB3AF\u964F\uC6DA"+
-            "\u9650\u9651\u9652\u9653\u9654\u9655\uEBFC\u9656"+
-            "\uC4BE\u9657\uCEB4\uC4A9\uB1BE\uD4FD\u9658\uCAF5"+
-            "\u9659\uD6EC\u965A\u965B\uC6D3\uB6E4\u965C\u965D"+
-            "\u965E\u965F\uBBFA\u9660\u9661\uD0E0\u9662\u9663"+
-            "\uC9B1\u9664\uD4D3\uC8A8\u9665\u9666\uB8CB\u9667"+
-            "\uE8BE\uC9BC\u9668\u9669\uE8BB\u966A\uC0EE\uD0D3"+
-            "\uB2C4\uB4E5\u966B\uE8BC\u966C\u966D\uD5C8\u966E"+
-            "\u966F\u9670\u9671\u9672\uB6C5\u9673\uE8BD\uCAF8"+
-            "\uB8DC\uCCF5\u9674\u9675\u9676\uC0B4\u9677\u9678"+
-            "\uD1EE\uE8BF\uE8C2\u9679\u967A\uBABC\u967B\uB1AD"+
-            "\uBDDC\u967C\uEABD\uE8C3\u967D\uE8C6\u967E\uE8CB"+
-            "\u9680\u9681\u9682\u9683\uE8CC\u9684\uCBC9\uB0E5"+
-            "\u9685\uBCAB\u9686\u9687\uB9B9\u9688\u9689\uE8C1"+
-            "\u968A\uCDF7\u968B\uE8CA\u968C\u968D\u968E\u968F"+
-            "\uCEF6\u9690\u9691\u9692\u9693\uD5ED\u9694\uC1D6"+
-            "\uE8C4\u9695\uC3B6\u9696\uB9FB\uD6A6\uE8C8\u9697"+
-            "\u9698\u9699\uCAE0\uD4E6\u969A\uE8C0\u969B\uE8C5"+
-            "\uE8C7\u969C\uC7B9\uB7E3\u969D\uE8C9\u969E\uBFDD"+
-            "\uE8D2\u969F\u96A0\uE8D7\u96A1\uE8D5\uBCDC\uBCCF"+
-            "\uE8DB\u96A2\u96A3\u96A4\u96A5\u96A6\u96A7\u96A8"+
-            "\u96A9\uE8DE\u96AA\uE8DA\uB1FA\u96AB\u96AC\u96AD"+
-            "\u96AE\u96AF\u96B0\u96B1\u96B2\u96B3\u96B4\uB0D8"+
-            "\uC4B3\uB8CC\uC6E2\uC8BE\uC8E1\u96B5\u96B6\u96B7"+
-            "\uE8CF\uE8D4\uE8D6\u96B8\uB9F1\uE8D8\uD7F5\u96B9"+
-            "\uC4FB\u96BA\uE8DC\u96BB\u96BC\uB2E9\u96BD\u96BE"+
-            "\u96BF\uE8D1\u96C0\u96C1\uBCED\u96C2\u96C3\uBFC2"+
-            "\uE8CD\uD6F9\u96C4\uC1F8\uB2F1\u96C5\u96C6\u96C7"+
-            "\u96C8\u96C9\u96CA\u96CB\u96CC\uE8DF\u96CD\uCAC1"+
-            "\uE8D9\u96CE\u96CF\u96D0\u96D1\uD5A4\u96D2\uB1EA"+
-            "\uD5BB\uE8CE\uE8D0\uB6B0\uE8D3\u96D3\uE8DD\uC0B8"+
-            "\u96D4\uCAF7\u96D5\uCBA8\u96D6\u96D7\uC6DC\uC0F5"+
-            "\u96D8\u96D9\u96DA\u96DB\u96DC\uE8E9\u96DD\u96DE"+
-            "\u96DF\uD0A3\u96E0\u96E1\u96E2\u96E3\u96E4\u96E5"+
-            "\u96E6\uE8F2\uD6EA\u96E7\u96E8\u96E9\u96EA\u96EB"+
-            "\u96EC\u96ED\uE8E0\uE8E1\u96EE\u96EF\u96F0\uD1F9"+
-            "\uBACB\uB8F9\u96F1\u96F2\uB8F1\uD4D4\uE8EF\u96F3"+
-            "\uE8EE\uE8EC\uB9F0\uCCD2\uE8E6\uCEA6\uBFF2\u96F4"+
-            "\uB0B8\uE8F1\uE8F0\u96F5\uD7C0\u96F6\uE8E4\u96F7"+
-            "\uCDA9\uC9A3\u96F8\uBBB8\uBDDB\uE8EA\u96F9\u96FA"+
-            "\u96FB\u96FC\u96FD\u96FE\u9740\u9741\u9742\u9743"+
-            "\uE8E2\uE8E3\uE8E5\uB5B5\uE8E7\uC7C5\uE8EB\uE8ED"+
-            "\uBDB0\uD7AE\u9744\uE8F8\u9745\u9746\u9747\u9748"+
-            "\u9749\u974A\u974B\u974C\uE8F5\u974D\uCDB0\uE8F6"+
-            "\u974E\u974F\u9750\u9751\u9752\u9753\u9754\u9755"+
-            "\u9756\uC1BA\u9757\uE8E8\u9758\uC3B7\uB0F0\u9759"+
-            "\u975A\u975B\u975C\u975D\u975E\u975F\u9760\uE8F4"+
-            "\u9761\u9762\u9763\uE8F7\u9764\u9765\u9766\uB9A3"+
-            "\u9767\u9768\u9769\u976A\u976B\u976C\u976D\u976E"+
-            "\u976F\u9770\uC9D2\u9771\u9772\u9773\uC3CE\uCEE0"+
-            "\uC0E6\u9774\u9775\u9776\u9777\uCBF3\u9778\uCCDD"+
-            "\uD0B5\u9779\u977A\uCAE1\u977B\uE8F3\u977C\u977D"+
-            "\u977E\u9780\u9781\u9782\u9783\u9784\u9785\u9786"+
-            "\uBCEC\u9787\uE8F9\u9788\u9789\u978A\u978B\u978C"+
-            "\u978D\uC3DE\u978E\uC6E5\u978F\uB9F7\u9790\u9791"+
-            "\u9792\u9793\uB0F4\u9794\u9795\uD7D8\u9796\u9797"+
-            "\uBCAC\u9798\uC5EF\u9799\u979A\u979B\u979C\u979D"+
-            "\uCCC4\u979E\u979F\uE9A6\u97A0\u97A1\u97A2\u97A3"+
-            "\u97A4\u97A5\u97A6\u97A7\u97A8\u97A9\uC9AD\u97AA"+
-            "\uE9A2\uC0E2\u97AB\u97AC\u97AD\uBFC3\u97AE\u97AF"+
-            "\u97B0\uE8FE\uB9D7\u97B1\uE8FB\u97B2\u97B3\u97B4"+
-            "\u97B5\uE9A4\u97B6\u97B7\u97B8\uD2CE\u97B9\u97BA"+
-            "\u97BB\u97BC\u97BD\uE9A3\u97BE\uD6B2\uD7B5\u97BF"+
-            "\uE9A7\u97C0\uBDB7\u97C1\u97C2\u97C3\u97C4\u97C5"+
-            "\u97C6\u97C7\u97C8\u97C9\u97CA\u97CB\u97CC\uE8FC"+
-            "\uE8FD\u97CD\u97CE\u97CF\uE9A1\u97D0\u97D1\u97D2"+
-            "\u97D3\u97D4\u97D5\u97D6\u97D7\uCDD6\u97D8\u97D9"+
-            "\uD2AC\u97DA\u97DB\u97DC\uE9B2\u97DD\u97DE\u97DF"+
-            "\u97E0\uE9A9\u97E1\u97E2\u97E3\uB4AA\u97E4\uB4BB"+
-            "\u97E5\u97E6\uE9AB\u97E7\u97E8\u97E9\u97EA\u97EB"+
-            "\u97EC\u97ED\u97EE\u97EF\u97F0\u97F1\u97F2\u97F3"+
-            "\u97F4\u97F5\u97F6\u97F7\uD0A8\u97F8\u97F9\uE9A5"+
-            "\u97FA\u97FB\uB3FE\u97FC\u97FD\uE9AC\uC0E3\u97FE"+
-            "\uE9AA\u9840\u9841\uE9B9\u9842\u9843\uE9B8\u9844"+
-            "\u9845\u9846\u9847\uE9AE\u9848\u9849\uE8FA\u984A"+
-            "\u984B\uE9A8\u984C\u984D\u984E\u984F\u9850\uBFAC"+
-            "\uE9B1\uE9BA\u9851\u9852\uC2A5\u9853\u9854\u9855"+
-            "\uE9AF\u9856\uB8C5\u9857\uE9AD\u9858\uD3DC\uE9B4"+
-            "\uE9B5\uE9B7\u9859\u985A\u985B\uE9C7\u985C\u985D"+
-            "\u985E\u985F\u9860\u9861\uC0C6\uE9C5\u9862\u9863"+
-            "\uE9B0\u9864\u9865\uE9BB\uB0F1\u9866\u9867\u9868"+
-            "\u9869\u986A\u986B\u986C\u986D\u986E\u986F\uE9BC"+
-            "\uD5A5\u9870\u9871\uE9BE\u9872\uE9BF\u9873\u9874"+
-            "\u9875\uE9C1\u9876\u9877\uC1F1\u9878\u9879\uC8B6"+
-            "\u987A\u987B\u987C\uE9BD\u987D\u987E\u9880\u9881"+
-            "\u9882\uE9C2\u9883\u9884\u9885\u9886\u9887\u9888"+
-            "\u9889\u988A\uE9C3\u988B\uE9B3\u988C\uE9B6\u988D"+
-            "\uBBB1\u988E\u988F\u9890\uE9C0\u9891\u9892\u9893"+
-            "\u9894\u9895\u9896\uBCF7\u9897\u9898\u9899\uE9C4"+
-            "\uE9C6\u989A\u989B\u989C\u989D\u989E\u989F\u98A0"+
-            "\u98A1\u98A2\u98A3\u98A4\u98A5\uE9CA\u98A6\u98A7"+
-            "\u98A8\u98A9\uE9CE\u98AA\u98AB\u98AC\u98AD\u98AE"+
-            "\u98AF\u98B0\u98B1\u98B2\u98B3\uB2DB\u98B4\uE9C8"+
-            "\u98B5\u98B6\u98B7\u98B8\u98B9\u98BA\u98BB\u98BC"+
-            "\u98BD\u98BE\uB7AE\u98BF\u98C0\u98C1\u98C2\u98C3"+
-            "\u98C4\u98C5\u98C6\u98C7\u98C8\u98C9\u98CA\uE9CB"+
-            "\uE9CC\u98CB\u98CC\u98CD\u98CE\u98CF\u98D0\uD5C1"+
-            "\u98D1\uC4A3\u98D2\u98D3\u98D4\u98D5\u98D6\u98D7"+
-            "\uE9D8\u98D8\uBAE1\u98D9\u98DA\u98DB\u98DC\uE9C9"+
-            "\u98DD\uD3A3\u98DE\u98DF\u98E0\uE9D4\u98E1\u98E2"+
-            "\u98E3\u98E4\u98E5\u98E6\u98E7\uE9D7\uE9D0\u98E8"+
-            "\u98E9\u98EA\u98EB\u98EC\uE9CF\u98ED\u98EE\uC7C1"+
-            "\u98EF\u98F0\u98F1\u98F2\u98F3\u98F4\u98F5\u98F6"+
-            "\uE9D2\u98F7\u98F8\u98F9\u98FA\u98FB\u98FC\u98FD"+
-            "\uE9D9\uB3C8\u98FE\uE9D3\u9940\u9941\u9942\u9943"+
-            "\u9944\uCFF0\u9945\u9946\u9947\uE9CD\u9948\u9949"+
-            "\u994A\u994B\u994C\u994D\u994E\u994F\u9950\u9951"+
-            "\u9952\uB3F7\u9953\u9954\u9955\u9956\u9957\u9958"+
-            "\u9959\uE9D6\u995A\u995B\uE9DA\u995C\u995D\u995E"+
-            "\uCCB4\u995F\u9960\u9961\uCFAD\u9962\u9963\u9964"+
-            "\u9965\u9966\u9967\u9968\u9969\u996A\uE9D5\u996B"+
-            "\uE9DC\uE9DB\u996C\u996D\u996E\u996F\u9970\uE9DE"+
-            "\u9971\u9972\u9973\u9974\u9975\u9976\u9977\u9978"+
-            "\uE9D1\u9979\u997A\u997B\u997C\u997D\u997E\u9980"+
-            "\u9981\uE9DD\u9982\uE9DF\uC3CA\u9983\u9984\u9985"+
-            "\u9986\u9987\u9988\u9989\u998A\u998B\u998C\u998D"+
-            "\u998E\u998F\u9990\u9991\u9992\u9993\u9994\u9995"+
-            "\u9996\u9997\u9998\u9999\u999A\u999B\u999C\u999D"+
-            "\u999E\u999F\u99A0\u99A1\u99A2\u99A3\u99A4\u99A5"+
-            "\u99A6\u99A7\u99A8\u99A9\u99AA\u99AB\u99AC\u99AD"+
-            "\u99AE\u99AF\u99B0\u99B1\u99B2\u99B3\u99B4\u99B5"+
-            "\u99B6\u99B7\u99B8\u99B9\u99BA\u99BB\u99BC\u99BD"+
-            "\u99BE\u99BF\u99C0\u99C1\u99C2\u99C3\u99C4\u99C5"+
-            "\u99C6\u99C7\u99C8\u99C9\u99CA\u99CB\u99CC\u99CD"+
-            "\u99CE\u99CF\u99D0\u99D1\u99D2\u99D3\u99D4\u99D5";
-
-        private final static String innerIndex4=
-            "\u99D6\u99D7\u99D8\u99D9\u99DA\u99DB\u99DC\u99DD"+
-            "\u99DE\u99DF\u99E0\u99E1\u99E2\u99E3\u99E4\u99E5"+
-            "\u99E6\u99E7\u99E8\u99E9\u99EA\u99EB\u99EC\u99ED"+
-            "\u99EE\u99EF\u99F0\u99F1\u99F2\u99F3\u99F4\u99F5"+
-            "\uC7B7\uB4CE\uBBB6\uD0C0\uECA3\u99F6\u99F7\uC5B7"+
-            "\u99F8\u99F9\u99FA\u99FB\u99FC\u99FD\u99FE\u9A40"+
-            "\u9A41\u9A42\uD3FB\u9A43\u9A44\u9A45\u9A46\uECA4"+
-            "\u9A47\uECA5\uC6DB\u9A48\u9A49\u9A4A\uBFEE\u9A4B"+
-            "\u9A4C\u9A4D\u9A4E\uECA6\u9A4F\u9A50\uECA7\uD0AA"+
-            "\u9A51\uC7B8\u9A52\u9A53\uB8E8\u9A54\u9A55\u9A56"+
-            "\u9A57\u9A58\u9A59\u9A5A\u9A5B\u9A5C\u9A5D\u9A5E"+
-            "\u9A5F\uECA8\u9A60\u9A61\u9A62\u9A63\u9A64\u9A65"+
-            "\u9A66\u9A67\uD6B9\uD5FD\uB4CB\uB2BD\uCEE4\uC6E7"+
-            "\u9A68\u9A69\uCDE1\u9A6A\u9A6B\u9A6C\u9A6D\u9A6E"+
-            "\u9A6F\u9A70\u9A71\u9A72\u9A73\u9A74\u9A75\u9A76"+
-            "\u9A77\uB4F5\u9A78\uCBC0\uBCDF\u9A79\u9A7A\u9A7B"+
-            "\u9A7C\uE9E2\uE9E3\uD1EA\uE9E5\u9A7D\uB4F9\uE9E4"+
-            "\u9A7E\uD1B3\uCAE2\uB2D0\u9A80\uE9E8\u9A81\u9A82"+
-            "\u9A83\u9A84\uE9E6\uE9E7\u9A85\u9A86\uD6B3\u9A87"+
-            "\u9A88\u9A89\uE9E9\uE9EA\u9A8A\u9A8B\u9A8C\u9A8D"+
-            "\u9A8E\uE9EB\u9A8F\u9A90\u9A91\u9A92\u9A93\u9A94"+
-            "\u9A95\u9A96\uE9EC\u9A97\u9A98\u9A99\u9A9A\u9A9B"+
-            "\u9A9C\u9A9D\u9A9E\uECAF\uC5B9\uB6CE\u9A9F\uD2F3"+
-            "\u9AA0\u9AA1\u9AA2\u9AA3\u9AA4\u9AA5\u9AA6\uB5EE"+
-            "\u9AA7\uBBD9\uECB1\u9AA8\u9AA9\uD2E3\u9AAA\u9AAB"+
-            "\u9AAC\u9AAD\u9AAE\uCEE3\u9AAF\uC4B8\u9AB0\uC3BF"+
-            "\u9AB1\u9AB2\uB6BE\uD8B9\uB1C8\uB1CF\uB1D1\uC5FE"+
-            "\u9AB3\uB1D0\u9AB4\uC3AB\u9AB5\u9AB6\u9AB7\u9AB8"+
-            "\u9AB9\uD5B1\u9ABA\u9ABB\u9ABC\u9ABD\u9ABE\u9ABF"+
-            "\u9AC0\u9AC1\uEBA4\uBAC1\u9AC2\u9AC3\u9AC4\uCCBA"+
-            "\u9AC5\u9AC6\u9AC7\uEBA5\u9AC8\uEBA7\u9AC9\u9ACA"+
-            "\u9ACB\uEBA8\u9ACC\u9ACD\u9ACE\uEBA6\u9ACF\u9AD0"+
-            "\u9AD1\u9AD2\u9AD3\u9AD4\u9AD5\uEBA9\uEBAB\uEBAA"+
-            "\u9AD6\u9AD7\u9AD8\u9AD9\u9ADA\uEBAC\u9ADB\uCACF"+
-            "\uD8B5\uC3F1\u9ADC\uC3A5\uC6F8\uEBAD\uC4CA\u9ADD"+
-            "\uEBAE\uEBAF\uEBB0\uB7D5\u9ADE\u9ADF\u9AE0\uB7FA"+
-            "\u9AE1\uEBB1\uC7E2\u9AE2\uEBB3\u9AE3\uBAA4\uD1F5"+
-            "\uB0B1\uEBB2\uEBB4\u9AE4\u9AE5\u9AE6\uB5AA\uC2C8"+
-            "\uC7E8\u9AE7\uEBB5\u9AE8\uCBAE\uE3DF\u9AE9\u9AEA"+
-            "\uD3C0\u9AEB\u9AEC\u9AED\u9AEE\uD9DB\u9AEF\u9AF0"+
-            "\uCDA1\uD6AD\uC7F3\u9AF1\u9AF2\u9AF3\uD9E0\uBBE3"+
-            "\u9AF4\uBABA\uE3E2\u9AF5\u9AF6\u9AF7\u9AF8\u9AF9"+
-            "\uCFAB\u9AFA\u9AFB\u9AFC\uE3E0\uC9C7\u9AFD\uBAB9"+
-            "\u9AFE\u9B40\u9B41\uD1B4\uE3E1\uC8EA\uB9AF\uBDAD"+
-            "\uB3D8\uCEDB\u9B42\u9B43\uCCC0\u9B44\u9B45\u9B46"+
-            "\uE3E8\uE3E9\uCDF4\u9B47\u9B48\u9B49\u9B4A\u9B4B"+
-            "\uCCAD\u9B4C\uBCB3\u9B4D\uE3EA\u9B4E\uE3EB\u9B4F"+
-            "\u9B50\uD0DA\u9B51\u9B52\u9B53\uC6FB\uB7DA\u9B54"+
-            "\u9B55\uC7DF\uD2CA\uCED6\u9B56\uE3E4\uE3EC\u9B57"+
-            "\uC9F2\uB3C1\u9B58\u9B59\uE3E7\u9B5A\u9B5B\uC6E3"+
-            "\uE3E5\u9B5C\u9B5D\uEDB3\uE3E6\u9B5E\u9B5F\u9B60"+
-            "\u9B61\uC9B3\u9B62\uC5E6\u9B63\u9B64\u9B65\uB9B5"+
-            "\u9B66\uC3BB\u9B67\uE3E3\uC5BD\uC1A4\uC2D9\uB2D7"+
-            "\u9B68\uE3ED\uBBA6\uC4AD\u9B69\uE3F0\uBEDA\u9B6A"+
-            "\u9B6B\uE3FB\uE3F5\uBAD3\u9B6C\u9B6D\u9B6E\u9B6F"+
-            "\uB7D0\uD3CD\u9B70\uD6CE\uD5D3\uB9C1\uD5B4\uD1D8"+
-            "\u9B71\u9B72\u9B73\u9B74\uD0B9\uC7F6\u9B75\u9B76"+
-            "\u9B77\uC8AA\uB2B4\u9B78\uC3DA\u9B79\u9B7A\u9B7B"+
-            "\uE3EE\u9B7C\u9B7D\uE3FC\uE3EF\uB7A8\uE3F7\uE3F4"+
-            "\u9B7E\u9B80\u9B81\uB7BA\u9B82\u9B83\uC5A2\u9B84"+
-            "\uE3F6\uC5DD\uB2A8\uC6FC\u9B85\uC4E0\u9B86\u9B87"+
-            "\uD7A2\u9B88\uC0E1\uE3F9\u9B89\u9B8A\uE3FA\uE3FD"+
-            "\uCCA9\uE3F3\u9B8B\uD3BE\u9B8C\uB1C3\uEDB4\uE3F1"+
-            "\uE3F2\u9B8D\uE3F8\uD0BA\uC6C3\uD4F3\uE3FE\u9B8E"+
-            "\u9B8F\uBDE0\u9B90\u9B91\uE4A7\u9B92\u9B93\uE4A6"+
-            "\u9B94\u9B95\u9B96\uD1F3\uE4A3\u9B97\uE4A9\u9B98"+
-            "\u9B99\u9B9A\uC8F7\u9B9B\u9B9C\u9B9D\u9B9E\uCFB4"+
-            "\u9B9F\uE4A8\uE4AE\uC2E5\u9BA0\u9BA1\uB6B4\u9BA2"+
-            "\u9BA3\u9BA4\u9BA5\u9BA6\u9BA7\uBDF2\u9BA8\uE4A2"+
-            "\u9BA9\u9BAA\uBAE9\uE4AA\u9BAB\u9BAC\uE4AC\u9BAD"+
-            "\u9BAE\uB6FD\uD6DE\uE4B2\u9BAF\uE4AD\u9BB0\u9BB1"+
-            "\u9BB2\uE4A1\u9BB3\uBBEE\uCDDD\uC7A2\uC5C9\u9BB4"+
-            "\u9BB5\uC1F7\u9BB6\uE4A4\u9BB7\uC7B3\uBDAC\uBDBD"+
-            "\uE4A5\u9BB8\uD7C7\uB2E2\u9BB9\uE4AB\uBCC3\uE4AF"+
-            "\u9BBA\uBBEB\uE4B0\uC5A8\uE4B1\u9BBB\u9BBC\u9BBD"+
-            "\u9BBE\uD5E3\uBFA3\u9BBF\uE4BA\u9BC0\uE4B7\u9BC1"+
-            "\uE4BB\u9BC2\u9BC3\uE4BD\u9BC4\u9BC5\uC6D6\u9BC6"+
-            "\u9BC7\uBAC6\uC0CB\u9BC8\u9BC9\u9BCA\uB8A1\uE4B4"+
-            "\u9BCB\u9BCC\u9BCD\u9BCE\uD4A1\u9BCF\u9BD0\uBAA3"+
-            "\uBDFE\u9BD1\u9BD2\u9BD3\uE4BC\u9BD4\u9BD5\u9BD6"+
-            "\u9BD7\u9BD8\uCDBF\u9BD9\u9BDA\uC4F9\u9BDB\u9BDC"+
-            "\uCFFB\uC9E6\u9BDD\u9BDE\uD3BF\u9BDF\uCFD1\u9BE0"+
-            "\u9BE1\uE4B3\u9BE2\uE4B8\uE4B9\uCCE9\u9BE3\u9BE4"+
-            "\u9BE5\u9BE6\u9BE7\uCCCE\u9BE8\uC0D4\uE4B5\uC1B0"+
-            "\uE4B6\uCED0\u9BE9\uBBC1\uB5D3\u9BEA\uC8F3\uBDA7"+
-            "\uD5C7\uC9AC\uB8A2\uE4CA\u9BEB\u9BEC\uE4CC\uD1C4"+
-            "\u9BED\u9BEE\uD2BA\u9BEF\u9BF0\uBAAD\u9BF1\u9BF2"+
-            "\uBAD4\u9BF3\u9BF4\u9BF5\u9BF6\u9BF7\u9BF8\uE4C3"+
-            "\uB5ED\u9BF9\u9BFA\u9BFB\uD7CD\uE4C0\uCFFD\uE4BF"+
-            "\u9BFC\u9BFD\u9BFE\uC1DC\uCCCA\u9C40\u9C41\u9C42"+
-            "\u9C43\uCAE7\u9C44\u9C45\u9C46\u9C47\uC4D7\u9C48"+
-            "\uCCD4\uE4C8\u9C49\u9C4A\u9C4B\uE4C7\uE4C1\u9C4C"+
-            "\uE4C4\uB5AD\u9C4D\u9C4E\uD3D9\u9C4F\uE4C6\u9C50"+
-            "\u9C51\u9C52\u9C53\uD2F9\uB4E3\u9C54\uBBB4\u9C55"+
-            "\u9C56\uC9EE\u9C57\uB4BE\u9C58\u9C59\u9C5A\uBBEC"+
-            "\u9C5B\uD1CD\u9C5C\uCCED\uEDB5\u9C5D\u9C5E\u9C5F"+
-            "\u9C60\u9C61\u9C62\u9C63\u9C64\uC7E5\u9C65\u9C66"+
-            "\u9C67\u9C68\uD4A8\u9C69\uE4CB\uD7D5\uE4C2\u9C6A"+
-            "\uBDA5\uE4C5\u9C6B\u9C6C\uD3E6\u9C6D\uE4C9\uC9F8"+
-            "\u9C6E\u9C6F\uE4BE\u9C70\u9C71\uD3E5\u9C72\u9C73"+
-            "\uC7FE\uB6C9\u9C74\uD4FC\uB2B3\uE4D7\u9C75\u9C76"+
-            "\u9C77\uCEC2\u9C78\uE4CD\u9C79\uCEBC\u9C7A\uB8DB"+
-            "\u9C7B\u9C7C\uE4D6\u9C7D\uBFCA\u9C7E\u9C80\u9C81"+
-            "\uD3CE\u9C82\uC3EC\u9C83\u9C84\u9C85\u9C86\u9C87"+
-            "\u9C88\u9C89\u9C8A\uC5C8\uE4D8\u9C8B\u9C8C\u9C8D"+
-            "\u9C8E\u9C8F\u9C90\u9C91\u9C92\uCDC4\uE4CF\u9C93"+
-            "\u9C94\u9C95\u9C96\uE4D4\uE4D5\u9C97\uBAFE\u9C98"+
-            "\uCFE6\u9C99\u9C9A\uD5BF\u9C9B\u9C9C\u9C9D\uE4D2"+
-            "\u9C9E\u9C9F\u9CA0\u9CA1\u9CA2\u9CA3\u9CA4\u9CA5"+
-            "\u9CA6\u9CA7\u9CA8\uE4D0\u9CA9\u9CAA\uE4CE\u9CAB"+
-            "\u9CAC\u9CAD\u9CAE\u9CAF\u9CB0\u9CB1\u9CB2\u9CB3"+
-            "\u9CB4\u9CB5\u9CB6\u9CB7\u9CB8\u9CB9\uCDE5\uCAAA"+
-            "\u9CBA\u9CBB\u9CBC\uC0A3\u9CBD\uBDA6\uE4D3\u9CBE"+
-            "\u9CBF\uB8C8\u9CC0\u9CC1\u9CC2\u9CC3\u9CC4\uE4E7"+
-            "\uD4B4\u9CC5\u9CC6\u9CC7\u9CC8\u9CC9\u9CCA\u9CCB"+
-            "\uE4DB\u9CCC\u9CCD\u9CCE\uC1EF\u9CCF\u9CD0\uE4E9"+
-            "\u9CD1\u9CD2\uD2E7\u9CD3\u9CD4\uE4DF\u9CD5\uE4E0"+
-            "\u9CD6\u9CD7\uCFAA\u9CD8\u9CD9\u9CDA\u9CDB\uCBDD"+
-            "\u9CDC\uE4DA\uE4D1\u9CDD\uE4E5\u9CDE\uC8DC\uE4E3"+
-            "\u9CDF\u9CE0\uC4E7\uE4E2\u9CE1\uE4E1\u9CE2\u9CE3"+
-            "\u9CE4\uB3FC\uE4E8\u9CE5\u9CE6\u9CE7\u9CE8\uB5E1"+
-            "\u9CE9\u9CEA\u9CEB\uD7CC\u9CEC\u9CED\u9CEE\uE4E6"+
-            "\u9CEF\uBBAC\u9CF0\uD7D2\uCCCF\uEBF8\u9CF1\uE4E4"+
-            "\u9CF2\u9CF3\uB9F6\u9CF4\u9CF5\u9CF6\uD6CD\uE4D9"+
-            "\uE4DC\uC2FA\uE4DE\u9CF7\uC2CB\uC0C4\uC2D0\u9CF8"+
-            "\uB1F5\uCCB2\u9CF9\u9CFA\u9CFB\u9CFC\u9CFD\u9CFE"+
-            "\u9D40\u9D41\u9D42\u9D43\uB5CE\u9D44\u9D45\u9D46"+
-            "\u9D47\uE4EF\u9D48\u9D49\u9D4A\u9D4B\u9D4C\u9D4D"+
-            "\u9D4E\u9D4F\uC6AF\u9D50\u9D51\u9D52\uC6E1\u9D53"+
-            "\u9D54\uE4F5\u9D55\u9D56\u9D57\u9D58\u9D59\uC2A9"+
-            "\u9D5A\u9D5B\u9D5C\uC0EC\uD1DD\uE4EE\u9D5D\u9D5E"+
-            "\u9D5F\u9D60\u9D61\u9D62\u9D63\u9D64\u9D65\u9D66"+
-            "\uC4AE\u9D67\u9D68\u9D69\uE4ED\u9D6A\u9D6B\u9D6C"+
-            "\u9D6D\uE4F6\uE4F4\uC2FE\u9D6E\uE4DD\u9D6F\uE4F0"+
-            "\u9D70\uCAFE\u9D71\uD5C4\u9D72\u9D73\uE4F1\u9D74"+
-            "\u9D75\u9D76\u9D77\u9D78\u9D79\u9D7A\uD1FA\u9D7B"+
-            "\u9D7C\u9D7D\u9D7E\u9D80\u9D81\u9D82\uE4EB\uE4EC"+
-            "\u9D83\u9D84\u9D85\uE4F2\u9D86\uCEAB\u9D87\u9D88"+
-            "\u9D89\u9D8A\u9D8B\u9D8C\u9D8D\u9D8E\u9D8F\u9D90"+
-            "\uC5CB\u9D91\u9D92\u9D93\uC7B1\u9D94\uC2BA\u9D95"+
-            "\u9D96\u9D97\uE4EA\u9D98\u9D99\u9D9A\uC1CA\u9D9B"+
-            "\u9D9C\u9D9D\u9D9E\u9D9F\u9DA0\uCCB6\uB3B1\u9DA1"+
-            "\u9DA2\u9DA3\uE4FB\u9DA4\uE4F3\u9DA5\u9DA6\u9DA7"+
-            "\uE4FA\u9DA8\uE4FD\u9DA9\uE4FC\u9DAA\u9DAB\u9DAC"+
-            "\u9DAD\u9DAE\u9DAF\u9DB0\uB3CE\u9DB1\u9DB2\u9DB3"+
-            "\uB3BA\uE4F7\u9DB4\u9DB5\uE4F9\uE4F8\uC5EC\u9DB6"+
-            "\u9DB7\u9DB8\u9DB9\u9DBA\u9DBB\u9DBC\u9DBD\u9DBE"+
-            "\u9DBF\u9DC0\u9DC1\u9DC2\uC0BD\u9DC3\u9DC4\u9DC5"+
-            "\u9DC6\uD4E8\u9DC7\u9DC8\u9DC9\u9DCA\u9DCB\uE5A2"+
-            "\u9DCC\u9DCD\u9DCE\u9DCF\u9DD0\u9DD1\u9DD2\u9DD3"+
-            "\u9DD4\u9DD5\u9DD6\uB0C4\u9DD7\u9DD8\uE5A4\u9DD9"+
-            "\u9DDA\uE5A3\u9DDB\u9DDC\u9DDD\u9DDE\u9DDF\u9DE0"+
-            "\uBCA4\u9DE1\uE5A5\u9DE2\u9DE3\u9DE4\u9DE5\u9DE6"+
-            "\u9DE7\uE5A1\u9DE8\u9DE9\u9DEA\u9DEB\u9DEC\u9DED"+
-            "\u9DEE\uE4FE\uB1F4\u9DEF\u9DF0\u9DF1\u9DF2\u9DF3"+
-            "\u9DF4\u9DF5\u9DF6\u9DF7\u9DF8\u9DF9\uE5A8\u9DFA"+
-            "\uE5A9\uE5A6\u9DFB\u9DFC\u9DFD\u9DFE\u9E40\u9E41"+
-            "\u9E42\u9E43\u9E44\u9E45\u9E46\u9E47\uE5A7\uE5AA"+
-            "\u9E48\u9E49\u9E4A\u9E4B\u9E4C\u9E4D\u9E4E\u9E4F"+
-            "\u9E50\u9E51\u9E52\u9E53\u9E54\u9E55\u9E56\u9E57"+
-            "\u9E58\u9E59\u9E5A\u9E5B\u9E5C\u9E5D\u9E5E\u9E5F"+
-            "\u9E60\u9E61\u9E62\u9E63\u9E64\u9E65\u9E66\u9E67"+
-            "\u9E68\uC6D9\u9E69\u9E6A\u9E6B\u9E6C\u9E6D\u9E6E"+
-            "\u9E6F\u9E70\uE5AB\uE5AD\u9E71\u9E72\u9E73\u9E74"+
-            "\u9E75\u9E76\u9E77\uE5AC\u9E78\u9E79\u9E7A\u9E7B"+
-            "\u9E7C\u9E7D\u9E7E\u9E80\u9E81\u9E82\u9E83\u9E84"+
-            "\u9E85\u9E86\u9E87\u9E88\u9E89\uE5AF\u9E8A\u9E8B"+
-            "\u9E8C\uE5AE\u9E8D\u9E8E\u9E8F\u9E90\u9E91\u9E92"+
-            "\u9E93\u9E94\u9E95\u9E96\u9E97\u9E98\u9E99\u9E9A"+
-            "\u9E9B\u9E9C\u9E9D\u9E9E\uB9E0\u9E9F\u9EA0\uE5B0"+
-            "\u9EA1\u9EA2\u9EA3\u9EA4\u9EA5\u9EA6\u9EA7\u9EA8"+
-            "\u9EA9\u9EAA\u9EAB\u9EAC\u9EAD\u9EAE\uE5B1\u9EAF"+
-            "\u9EB0\u9EB1\u9EB2\u9EB3\u9EB4\u9EB5\u9EB6\u9EB7"+
-            "\u9EB8\u9EB9\u9EBA\uBBF0\uECE1\uC3F0\u9EBB\uB5C6"+
-            "\uBBD2\u9EBC\u9EBD\u9EBE\u9EBF\uC1E9\uD4EE\u9EC0"+
-            "\uBEC4\u9EC1\u9EC2\u9EC3\uD7C6\u9EC4\uD4D6\uB2D3"+
-            "\uECBE\u9EC5\u9EC6\u9EC7\u9EC8\uEAC1\u9EC9\u9ECA"+
-            "\u9ECB\uC2AF\uB4B6\u9ECC\u9ECD\u9ECE\uD1D7\u9ECF"+
-            "\u9ED0\u9ED1\uB3B4\u9ED2\uC8B2\uBFBB\uECC0\u9ED3"+
-            "\u9ED4\uD6CB\u9ED5\u9ED6\uECBF\uECC1\u9ED7\u9ED8"+
-            "\u9ED9\u9EDA\u9EDB\u9EDC\u9EDD\u9EDE\u9EDF\u9EE0"+
-            "\u9EE1\u9EE2\u9EE3\uECC5\uBEE6\uCCBF\uC5DA\uBEBC"+
-            "\u9EE4\uECC6\u9EE5\uB1FE\u9EE6\u9EE7\u9EE8\uECC4"+
-            "\uD5A8\uB5E3\u9EE9\uECC2\uC1B6\uB3E3\u9EEA\u9EEB"+
-            "\uECC3\uCBB8\uC0C3\uCCFE\u9EEC\u9EED\u9EEE\u9EEF"+
-            "\uC1D2\u9EF0\uECC8\u9EF1\u9EF2\u9EF3\u9EF4\u9EF5"+
-            "\u9EF6\u9EF7\u9EF8\u9EF9\u9EFA\u9EFB\u9EFC\u9EFD"+
-            "\uBAE6\uC0D3\u9EFE\uD6F2\u9F40\u9F41\u9F42\uD1CC"+
-            "\u9F43\u9F44\u9F45\u9F46\uBFBE\u9F47\uB7B3\uC9D5"+
-            "\uECC7\uBBE2\u9F48\uCCCC\uBDFD\uC8C8\u9F49\uCFA9"+
-            "\u9F4A\u9F4B\u9F4C\u9F4D\u9F4E\u9F4F\u9F50\uCDE9"+
-            "\u9F51\uC5EB\u9F52\u9F53\u9F54\uB7E9\u9F55\u9F56"+
-            "\u9F57\u9F58\u9F59\u9F5A\u9F5B\u9F5C\u9F5D\u9F5E"+
-            "\u9F5F\uD1C9\uBAB8\u9F60\u9F61\u9F62\u9F63\u9F64"+
-            "\uECC9\u9F65\u9F66\uECCA\u9F67\uBBC0\uECCB\u9F68"+
-            "\uECE2\uB1BA\uB7D9\u9F69\u9F6A\u9F6B\u9F6C\u9F6D"+
-            "\u9F6E\u9F6F\u9F70\u9F71\u9F72\u9F73\uBDB9\u9F74"+
-            "\u9F75\u9F76\u9F77\u9F78\u9F79\u9F7A\u9F7B\uECCC"+
-            "\uD1E6\uECCD\u9F7C\u9F7D\u9F7E\u9F80\uC8BB\u9F81"+
-            "\u9F82\u9F83\u9F84\u9F85\u9F86\u9F87\u9F88\u9F89"+
-            "\u9F8A\u9F8B\u9F8C\u9F8D\u9F8E\uECD1\u9F8F\u9F90"+
-            "\u9F91\u9F92\uECD3\u9F93\uBBCD\u9F94\uBCE5\u9F95"+
-            "\u9F96\u9F97\u9F98\u9F99\u9F9A\u9F9B\u9F9C\u9F9D"+
-            "\u9F9E\u9F9F\u9FA0\u9FA1\uECCF\u9FA2\uC9B7\u9FA3"+
-            "\u9FA4\u9FA5\u9FA6\u9FA7\uC3BA\u9FA8\uECE3\uD5D5"+
-            "\uECD0\u9FA9\u9FAA\u9FAB\u9FAC\u9FAD\uD6F3\u9FAE"+
-            "\u9FAF\u9FB0\uECD2\uECCE\u9FB1\u9FB2\u9FB3\u9FB4"+
-            "\uECD4\u9FB5\uECD5\u9FB6\u9FB7\uC9BF\u9FB8\u9FB9"+
-            "\u9FBA\u9FBB\u9FBC\u9FBD\uCFA8\u9FBE\u9FBF\u9FC0"+
-            "\u9FC1\u9FC2\uD0DC\u9FC3\u9FC4\u9FC5\u9FC6\uD1AC"+
-            "\u9FC7\u9FC8\u9FC9\u9FCA\uC8DB\u9FCB\u9FCC\u9FCD"+
-            "\uECD6\uCEF5\u9FCE\u9FCF\u9FD0\u9FD1\u9FD2\uCAEC"+
-            "\uECDA\u9FD3\u9FD4\u9FD5\u9FD6\u9FD7\u9FD8\u9FD9"+
-            "\uECD9\u9FDA\u9FDB\u9FDC\uB0BE\u9FDD\u9FDE\u9FDF"+
-            "\u9FE0\u9FE1\u9FE2\uECD7\u9FE3\uECD8\u9FE4\u9FE5"+
-            "\u9FE6\uECE4\u9FE7\u9FE8\u9FE9\u9FEA\u9FEB\u9FEC"+
-            "\u9FED\u9FEE\u9FEF\uC8BC\u9FF0\u9FF1\u9FF2\u9FF3"+
-            "\u9FF4\u9FF5\u9FF6\u9FF7\u9FF8\u9FF9\uC1C7\u9FFA"+
-            "\u9FFB\u9FFC\u9FFD\u9FFE\uECDC\uD1E0\uA040\uA041"+
-            "\uA042\uA043\uA044\uA045\uA046\uA047\uA048\uA049"+
-            "\uECDB\uA04A\uA04B\uA04C\uA04D\uD4EF\uA04E\uECDD"+
-            "\uA04F\uA050\uA051\uA052\uA053\uA054\uDBC6\uA055"+
-            "\uA056\uA057\uA058\uA059\uA05A\uA05B\uA05C\uA05D"+
-            "\uA05E\uECDE\uA05F\uA060\uA061\uA062\uA063\uA064"+
-            "\uA065\uA066\uA067\uA068\uA069\uA06A\uB1AC\uA06B"+
-            "\uA06C\uA06D\uA06E\uA06F\uA070\uA071\uA072\uA073"+
-            "\uA074\uA075\uA076\uA077\uA078\uA079\uA07A\uA07B"+
-            "\uA07C\uA07D\uA07E\uA080\uA081\uECDF\uA082\uA083"+
-            "\uA084\uA085\uA086\uA087\uA088\uA089\uA08A\uA08B"+
-            "\uECE0\uA08C\uD7A6\uA08D\uC5C0\uA08E\uA08F\uA090"+
-            "\uEBBC\uB0AE\uA091\uA092\uA093\uBEF4\uB8B8\uD2AF"+
-            "\uB0D6\uB5F9\uA094\uD8B3\uA095\uCBAC\uA096\uE3DD"+
-            "\uA097\uA098\uA099\uA09A\uA09B\uA09C\uA09D\uC6AC"+
-            "\uB0E6\uA09E\uA09F\uA0A0\uC5C6\uEBB9\uA0A1\uA0A2"+
-            "\uA0A3\uA0A4\uEBBA\uA0A5\uA0A6\uA0A7\uEBBB\uA0A8"+
-            "\uA0A9\uD1C0\uA0AA\uC5A3\uA0AB\uEAF2\uA0AC\uC4B2"+
-            "\uA0AD\uC4B5\uC0CE\uA0AE\uA0AF\uA0B0\uEAF3\uC4C1"+
-            "\uA0B1\uCEEF\uA0B2\uA0B3\uA0B4\uA0B5\uEAF0\uEAF4"+
-            "\uA0B6\uA0B7\uC9FC\uA0B8\uA0B9\uC7A3\uA0BA\uA0BB"+
-            "\uA0BC\uCCD8\uCEFE\uA0BD\uA0BE\uA0BF\uEAF5\uEAF6"+
-            "\uCFAC\uC0E7\uA0C0\uA0C1\uEAF7\uA0C2\uA0C3\uA0C4"+
-            "\uA0C5\uA0C6\uB6BF\uEAF8\uA0C7\uEAF9\uA0C8\uEAFA"+
-            "\uA0C9\uA0CA\uEAFB\uA0CB\uA0CC\uA0CD\uA0CE\uA0CF"+
-            "\uA0D0\uA0D1\uA0D2\uA0D3\uA0D4\uA0D5\uA0D6\uEAF1"+
-            "\uA0D7\uA0D8\uA0D9\uA0DA\uA0DB\uA0DC\uA0DD\uA0DE"+
-            "\uA0DF\uA0E0\uA0E1\uA0E2\uC8AE\uE1EB\uA0E3\uB7B8"+
-            "\uE1EC\uA0E4\uA0E5\uA0E6\uE1ED\uA0E7\uD7B4\uE1EE"+
-            "\uE1EF\uD3CC\uA0E8\uA0E9\uA0EA\uA0EB\uA0EC\uA0ED"+
-            "\uA0EE\uE1F1\uBFF1\uE1F0\uB5D2\uA0EF\uA0F0\uA0F1"+
-            "\uB1B7\uA0F2\uA0F3\uA0F4\uA0F5\uE1F3\uE1F2\uA0F6"+
-            "\uBAFC\uA0F7\uE1F4\uA0F8\uA0F9\uA0FA\uA0FB\uB9B7"+
-            "\uA0FC\uBED1\uA0FD\uA0FE\uAA40\uAA41\uC4FC\uAA42"+
-            "\uBADD\uBDC6\uAA43\uAA44\uAA45\uAA46\uAA47\uAA48"+
-            "\uE1F5\uE1F7\uAA49\uAA4A\uB6C0\uCFC1\uCAA8\uE1F6"+
-            "\uD5F8\uD3FC\uE1F8\uE1FC\uE1F9\uAA4B\uAA4C\uE1FA"+
-            "\uC0EA\uAA4D\uE1FE\uE2A1\uC0C7\uAA4E\uAA4F\uAA50"+
-            "\uAA51\uE1FB\uAA52\uE1FD\uAA53\uAA54\uAA55\uAA56"+
-            "\uAA57\uAA58\uE2A5\uAA59\uAA5A\uAA5B\uC1D4\uAA5C"+
-            "\uAA5D\uAA5E\uAA5F\uE2A3\uAA60\uE2A8\uB2FE\uE2A2"+
-            "\uAA61\uAA62\uAA63\uC3CD\uB2C2\uE2A7\uE2A6\uAA64"+
-            "\uAA65\uE2A4\uE2A9\uAA66\uAA67\uE2AB\uAA68\uAA69"+
-            "\uAA6A\uD0C9\uD6ED\uC3A8\uE2AC\uAA6B\uCFD7\uAA6C"+
-            "\uAA6D\uE2AE\uAA6E\uAA6F\uBAEF\uAA70\uAA71\uE9E0"+
-            "\uE2AD\uE2AA\uAA72\uAA73\uAA74\uAA75\uBBAB\uD4B3"+
-            "\uAA76\uAA77\uAA78\uAA79\uAA7A\uAA7B\uAA7C\uAA7D"+
-            "\uAA7E\uAA80\uAA81\uAA82\uAA83\uE2B0\uAA84\uAA85"+
-            "\uE2AF\uAA86\uE9E1\uAA87\uAA88\uAA89\uAA8A\uE2B1"+
-            "\uAA8B\uAA8C\uAA8D\uAA8E\uAA8F\uAA90\uAA91\uAA92"+
-            "\uE2B2\uAA93\uAA94\uAA95\uAA96\uAA97\uAA98\uAA99"+
-            "\uAA9A\uAA9B\uAA9C\uAA9D\uE2B3\uCCA1\uAA9E\uE2B4"+
-            "\uAA9F\uAAA0\uAB40\uAB41\uAB42\uAB43\uAB44\uAB45"+
-            "\uAB46\uAB47\uAB48\uAB49\uAB4A\uAB4B\uE2B5\uAB4C"+
-            "\uAB4D\uAB4E\uAB4F\uAB50\uD0FE\uAB51\uAB52\uC2CA"+
-            "\uAB53\uD3F1\uAB54\uCDF5\uAB55\uAB56\uE7E0\uAB57"+
-            "\uAB58\uE7E1\uAB59\uAB5A\uAB5B\uAB5C\uBEC1\uAB5D"+
-            "\uAB5E\uAB5F\uAB60\uC2EA\uAB61\uAB62\uAB63\uE7E4"+
-            "\uAB64\uAB65\uE7E3\uAB66\uAB67\uAB68\uAB69\uAB6A"+
-            "\uAB6B\uCDE6\uAB6C\uC3B5\uAB6D\uAB6E\uE7E2\uBBB7"+
-            "\uCFD6\uAB6F\uC1E1\uE7E9\uAB70\uAB71\uAB72\uE7E8"+
-            "\uAB73\uAB74\uE7F4\uB2A3\uAB75\uAB76\uAB77\uAB78"+
-            "\uE7EA\uAB79\uE7E6\uAB7A\uAB7B\uAB7C\uAB7D\uAB7E"+
-            "\uE7EC\uE7EB\uC9BA\uAB80\uAB81\uD5E4\uAB82\uE7E5"+
-            "\uB7A9\uE7E7\uAB83\uAB84\uAB85\uAB86\uAB87\uAB88"+
-            "\uAB89\uE7EE\uAB8A\uAB8B\uAB8C\uAB8D\uE7F3\uAB8E"+
-            "\uD6E9\uAB8F\uAB90\uAB91\uAB92\uE7ED\uAB93\uE7F2"+
-            "\uAB94\uE7F1\uAB95\uAB96\uAB97\uB0E0\uAB98\uAB99"+
-            "\uAB9A\uAB9B\uE7F5\uAB9C\uAB9D\uAB9E\uAB9F\uABA0"+
-            "\uAC40\uAC41\uAC42\uAC43\uAC44\uAC45\uAC46\uAC47"+
-            "\uAC48\uAC49\uAC4A\uC7F2\uAC4B\uC0C5\uC0ED\uAC4C"+
-            "\uAC4D\uC1F0\uE7F0\uAC4E\uAC4F\uAC50\uAC51\uE7F6"+
-            "\uCBF6\uAC52\uAC53\uAC54\uAC55\uAC56\uAC57\uAC58"+
-            "\uAC59\uAC5A\uE8A2\uE8A1\uAC5B\uAC5C\uAC5D\uAC5E"+
-            "\uAC5F\uAC60\uD7C1\uAC61\uAC62\uE7FA\uE7F9\uAC63"+
-            "\uE7FB\uAC64\uE7F7\uAC65\uE7FE\uAC66\uE7FD\uAC67"+
-            "\uE7FC\uAC68\uAC69\uC1D5\uC7D9\uC5FD\uC5C3\uAC6A"+
-            "\uAC6B\uAC6C\uAC6D\uAC6E\uC7ED\uAC6F\uAC70\uAC71"+
-            "\uAC72\uE8A3\uAC73\uAC74\uAC75\uAC76\uAC77\uAC78"+
-            "\uAC79\uAC7A\uAC7B\uAC7C\uAC7D\uAC7E\uAC80\uAC81"+
-            "\uAC82\uAC83\uAC84\uAC85\uAC86\uE8A6\uAC87\uE8A5"+
-            "\uAC88\uE8A7\uBAF7\uE7F8\uE8A4\uAC89\uC8F0\uC9AA"+
-            "\uAC8A\uAC8B\uAC8C\uAC8D\uAC8E\uAC8F\uAC90\uAC91"+
-            "\uAC92\uAC93\uAC94\uAC95\uAC96\uE8A9\uAC97\uAC98"+
-            "\uB9E5\uAC99\uAC9A\uAC9B\uAC9C\uAC9D\uD1FE\uE8A8"+
-            "\uAC9E\uAC9F\uACA0\uAD40\uAD41\uAD42\uE8AA\uAD43"+
-            "\uE8AD\uE8AE\uAD44\uC1A7\uAD45\uAD46\uAD47\uE8AF"+
-            "\uAD48\uAD49\uAD4A\uE8B0\uAD4B\uAD4C\uE8AC\uAD4D"+
-            "\uE8B4\uAD4E\uAD4F\uAD50\uAD51\uAD52\uAD53\uAD54"+
-            "\uAD55\uAD56\uAD57\uAD58\uE8AB\uAD59\uE8B1\uAD5A"+
-            "\uAD5B\uAD5C\uAD5D\uAD5E\uAD5F\uAD60\uAD61\uE8B5"+
-            "\uE8B2\uE8B3\uAD62\uAD63\uAD64\uAD65\uAD66\uAD67"+
-            "\uAD68\uAD69\uAD6A\uAD6B\uAD6C\uAD6D\uAD6E\uAD6F"+
-            "\uAD70\uAD71\uE8B7\uAD72\uAD73\uAD74\uAD75\uAD76"+
-            "\uAD77\uAD78\uAD79\uAD7A\uAD7B\uAD7C\uAD7D\uAD7E"+
-            "\uAD80\uAD81\uAD82\uAD83\uAD84\uAD85\uAD86\uAD87"+
-            "\uAD88\uAD89\uE8B6\uAD8A\uAD8B\uAD8C\uAD8D\uAD8E"+
-            "\uAD8F\uAD90\uAD91\uAD92\uB9CF\uAD93\uF0AC\uAD94"+
-            "\uF0AD\uAD95\uC6B0\uB0EA\uC8BF\uAD96\uCDDF\uAD97"+
-            "\uAD98\uAD99\uAD9A\uAD9B\uAD9C\uAD9D\uCECD\uEAB1"+
-            "\uAD9E\uAD9F\uADA0\uAE40\uEAB2\uAE41\uC6BF\uB4C9"+
-            "\uAE42\uAE43\uAE44\uAE45\uAE46\uAE47\uAE48\uEAB3"+
-            "\uAE49\uAE4A\uAE4B\uAE4C\uD5E7\uAE4D\uAE4E\uAE4F"+
-            "\uAE50\uAE51\uAE52\uAE53\uAE54\uDDF9\uAE55\uEAB4"+
-            "\uAE56\uEAB5\uAE57\uEAB6\uAE58\uAE59\uAE5A\uAE5B"+
-            "\uB8CA\uDFB0\uC9F5\uAE5C\uCCF0\uAE5D\uAE5E\uC9FA"+
-            "\uAE5F\uAE60\uAE61\uAE62\uAE63\uC9FB\uAE64\uAE65"+
-            "\uD3C3\uCBA6\uAE66\uB8A6\uF0AE\uB1C2\uAE67\uE5B8"+
-            "\uCCEF\uD3C9\uBCD7\uC9EA\uAE68\uB5E7\uAE69\uC4D0"+
-            "\uB5E9\uAE6A\uEEAE\uBBAD\uAE6B\uAE6C\uE7DE\uAE6D"+
-            "\uEEAF\uAE6E\uAE6F\uAE70\uAE71\uB3A9\uAE72\uAE73"+
-            "\uEEB2\uAE74\uAE75\uEEB1\uBDE7\uAE76\uEEB0\uCEB7"+
-            "\uAE77\uAE78\uAE79\uAE7A\uC5CF\uAE7B\uAE7C\uAE7D"+
-            "\uAE7E\uC1F4\uDBCE\uEEB3\uD0F3\uAE80\uAE81\uAE82"+
-            "\uAE83\uAE84\uAE85\uAE86\uAE87\uC2D4\uC6E8\uAE88"+
-            "\uAE89\uAE8A\uB7AC\uAE8B\uAE8C\uAE8D\uAE8E\uAE8F"+
-            "\uAE90\uAE91\uEEB4\uAE92\uB3EB\uAE93\uAE94\uAE95"+
-            "\uBBFB\uEEB5\uAE96\uAE97\uAE98\uAE99\uAE9A\uE7DC"+
-            "\uAE9B\uAE9C\uAE9D\uEEB6\uAE9E\uAE9F\uBDAE\uAEA0"+
-            "\uAF40\uAF41\uAF42\uF1E2\uAF43\uAF44\uAF45\uCAE8"+
-            "\uAF46\uD2C9\uF0DA\uAF47\uF0DB\uAF48\uF0DC\uC1C6"+
-            "\uAF49\uB8ED\uBECE\uAF4A\uAF4B\uF0DE\uAF4C\uC5B1"+
-            "\uF0DD\uD1F1\uAF4D\uF0E0\uB0CC\uBDEA\uAF4E\uAF4F"+
-            "\uAF50\uAF51\uAF52\uD2DF\uF0DF\uAF53\uB4AF\uB7E8"+
-            "\uF0E6\uF0E5\uC6A3\uF0E1\uF0E2\uB4C3\uAF54\uAF55"+
-            "\uF0E3\uD5EE\uAF56\uAF57\uCCDB\uBED2\uBCB2\uAF58"+
-            "\uAF59\uAF5A\uF0E8\uF0E7\uF0E4\uB2A1\uAF5B\uD6A2"+
-            "\uD3B8\uBEB7\uC8AC\uAF5C\uAF5D\uF0EA\uAF5E\uAF5F"+
-            "\uAF60\uAF61\uD1F7\uAF62\uD6CC\uBADB\uF0E9\uAF63"+
-            "\uB6BB\uAF64\uAF65\uCDB4\uAF66\uAF67\uC6A6\uAF68"+
-            "\uAF69\uAF6A\uC1A1\uF0EB\uF0EE\uAF6B\uF0ED\uF0F0"+
-            "\uF0EC\uAF6C\uBBBE\uF0EF\uAF6D\uAF6E\uAF6F\uAF70"+
-            "\uCCB5\uF0F2\uAF71\uAF72\uB3D5\uAF73\uAF74\uAF75"+
-            "\uAF76\uB1D4\uAF77\uAF78\uF0F3\uAF79\uAF7A\uF0F4"+
-            "\uF0F6\uB4E1\uAF7B\uF0F1\uAF7C\uF0F7\uAF7D\uAF7E"+
-            "\uAF80\uAF81\uF0FA\uAF82\uF0F8\uAF83\uAF84\uAF85"+
-            "\uF0F5\uAF86\uAF87\uAF88\uAF89\uF0FD\uAF8A\uF0F9"+
-            "\uF0FC\uF0FE\uAF8B\uF1A1\uAF8C\uAF8D\uAF8E\uCEC1"+
-            "\uF1A4\uAF8F\uF1A3\uAF90\uC1F6\uF0FB\uCADD\uAF91"+
-            "\uAF92\uB4F1\uB1F1\uCCB1\uAF93\uF1A6\uAF94\uAF95"+
-            "\uF1A7\uAF96\uAF97\uF1AC\uD5CE\uF1A9\uAF98\uAF99"+
-            "\uC8B3\uAF9A\uAF9B\uAF9C\uF1A2\uAF9D\uF1AB\uF1A8"+
-            "\uF1A5\uAF9E\uAF9F\uF1AA\uAFA0\uB040\uB041\uB042"+
-            "\uB043\uB044\uB045\uB046\uB0A9\uF1AD\uB047\uB048"+
-            "\uB049\uB04A\uB04B\uB04C\uF1AF\uB04D\uF1B1\uB04E"+
-            "\uB04F\uB050\uB051\uB052\uF1B0\uB053\uF1AE\uB054"+
-            "\uB055\uB056\uB057\uD1A2\uB058\uB059\uB05A\uB05B"+
-            "\uB05C\uB05D\uB05E\uF1B2\uB05F\uB060\uB061\uF1B3"+
-            "\uB062\uB063\uB064\uB065\uB066\uB067\uB068\uB069"+
-            "\uB9EF\uB06A\uB06B\uB5C7\uB06C\uB0D7\uB0D9\uB06D"+
-            "\uB06E\uB06F\uD4ED\uB070\uB5C4\uB071\uBDD4\uBBCA"+
-            "\uF0A7\uB072\uB073\uB8DE\uB074\uB075\uF0A8\uB076"+
-            "\uB077\uB0A8\uB078\uF0A9\uB079\uB07A\uCDEE\uB07B"+
-            "\uB07C\uF0AA\uB07D\uB07E\uB080\uB081\uB082\uB083"+
-            "\uB084\uB085\uB086\uB087\uF0AB\uB088\uB089\uB08A"+
-            "\uB08B\uB08C\uB08D\uB08E\uB08F\uB090\uC6A4\uB091"+
-            "\uB092\uD6E5\uF1E4\uB093\uF1E5\uB094\uB095\uB096"+
-            "\uB097\uB098\uB099\uB09A\uB09B\uB09C\uB09D\uC3F3"+
-            "\uB09E\uB09F\uD3DB\uB0A0\uB140\uD6D1\uC5E8\uB141"+
-            "\uD3AF\uB142\uD2E6\uB143\uB144\uEEC1\uB0BB\uD5B5"+
-            "\uD1CE\uBCE0\uBAD0\uB145\uBFF8\uB146\uB8C7\uB5C1"+
-            "\uC5CC\uB147\uB148\uCAA2\uB149\uB14A\uB14B\uC3CB"+
-            "\uB14C\uB14D\uB14E\uB14F\uB150\uEEC2\uB151\uB152"+
-            "\uB153\uB154\uB155\uB156\uB157\uB158\uC4BF\uB6A2"+
-            "\uB159\uEDEC\uC3A4\uB15A\uD6B1\uB15B\uB15C\uB15D"+
-            "\uCFE0\uEDEF\uB15E\uB15F\uC5CE\uB160\uB6DC\uB161"+
-            "\uB162\uCAA1\uB163\uB164\uEDED\uB165\uB166\uEDF0"+
-            "\uEDF1\uC3BC\uB167\uBFB4\uB168\uEDEE\uB169\uB16A"+
-            "\uB16B\uB16C\uB16D\uB16E\uB16F\uB170\uB171\uB172"+
-            "\uB173\uEDF4\uEDF2\uB174\uB175\uB176\uB177\uD5E6"+
-            "\uC3DF\uB178\uEDF3\uB179\uB17A\uB17B\uEDF6\uB17C"+
-            "\uD5A3\uD1A3\uB17D\uB17E\uB180\uEDF5\uB181\uC3D0"+
-            "\uB182\uB183\uB184\uB185\uB186\uEDF7\uBFF4\uBEEC"+
-            "\uEDF8\uB187\uCCF7\uB188\uD1DB\uB189\uB18A\uB18B"+
-            "\uD7C5\uD5F6\uB18C\uEDFC\uB18D\uB18E\uB18F\uEDFB"+
-            "\uB190\uB191\uB192\uB193\uB194\uB195\uB196\uB197"+
-            "\uEDF9\uEDFA\uB198\uB199\uB19A\uB19B\uB19C\uB19D"+
-            "\uB19E\uB19F\uEDFD\uBEA6\uB1A0\uB240\uB241\uB242"+
-            "\uB243\uCBAF\uEEA1\uB6BD\uB244\uEEA2\uC4C0\uB245"+
-            "\uEDFE\uB246\uB247\uBDDE\uB2C7\uB248\uB249\uB24A"+
-            "\uB24B\uB24C\uB24D\uB24E\uB24F\uB250\uB251\uB252"+
-            "\uB253\uB6C3\uB254\uB255\uB256\uEEA5\uD8BA\uEEA3"+
-            "\uEEA6\uB257\uB258\uB259\uC3E9\uB3F2\uB25A\uB25B"+
-            "\uB25C\uB25D\uB25E\uB25F\uEEA7\uEEA4\uCFB9\uB260"+
-            "\uB261\uEEA8\uC2F7\uB262\uB263\uB264\uB265\uB266"+
-            "\uB267\uB268\uB269\uB26A\uB26B\uB26C\uB26D\uEEA9"+
-            "\uEEAA\uB26E\uDEAB\uB26F\uB270\uC6B3\uB271\uC7C6"+
-            "\uB272\uD6F5\uB5C9\uB273\uCBB2\uB274\uB275\uB276"+
-            "\uEEAB\uB277\uB278\uCDAB\uB279\uEEAC\uB27A\uB27B"+
-            "\uB27C\uB27D\uB27E\uD5B0\uB280\uEEAD\uB281\uF6C4"+
-            "\uB282\uB283\uB284\uB285\uB286\uB287\uB288\uB289"+
-            "\uB28A\uB28B\uB28C\uB28D\uB28E\uDBC7\uB28F\uB290"+
-            "\uB291\uB292\uB293\uB294\uB295\uB296\uB297\uB4A3"+
-            "\uB298\uB299\uB29A\uC3AC\uF1E6\uB29B\uB29C\uB29D"+
-            "\uB29E\uB29F\uCAB8\uD2D3\uB2A0\uD6AA\uB340\uEFF2"+
-            "\uB341\uBED8\uB342\uBDC3\uEFF3\uB6CC\uB0AB\uB343"+
-            "\uB344\uB345\uB346\uCAAF\uB347\uB348\uEDB6\uB349"+
-            "\uEDB7\uB34A\uB34B\uB34C\uB34D\uCEF9\uB7AF\uBFF3"+
-            "\uEDB8\uC2EB\uC9B0\uB34E\uB34F\uB350\uB351\uB352"+
-            "\uB353\uEDB9\uB354\uB355\uC6F6\uBFB3\uB356\uB357"+
-            "\uB358\uEDBC\uC5F8\uB359\uD1D0\uB35A\uD7A9\uEDBA"+
-            "\uEDBB\uB35B\uD1E2\uB35C\uEDBF\uEDC0\uB35D\uEDC4"+
-            "\uB35E\uB35F\uB360\uEDC8\uB361\uEDC6\uEDCE\uD5E8"+
-            "\uB362\uEDC9\uB363\uB364\uEDC7\uEDBE\uB365\uB366"+
-            "\uC5E9\uB367\uB368\uB369\uC6C6\uB36A\uB36B\uC9E9"+
-            "\uD4D2\uEDC1\uEDC2\uEDC3\uEDC5\uB36C\uC0F9\uB36D"+
-            "\uB4A1\uB36E\uB36F\uB370\uB371\uB9E8\uB372\uEDD0"+
-            "\uB373\uB374\uB375\uB376\uEDD1\uB377\uEDCA\uB378"+
-            "\uEDCF\uB379\uCEF8\uB37A\uB37B\uCBB6\uEDCC\uEDCD"+
-            "\uB37C\uB37D\uB37E\uB380\uB381\uCFF5\uB382\uB383"+
-            "\uB384\uB385\uB386\uB387\uB388\uB389\uB38A\uB38B"+
-            "\uB38C\uB38D\uEDD2\uC1F2\uD3B2\uEDCB\uC8B7\uB38E"+
-            "\uB38F\uB390\uB391\uB392\uB393\uB394\uB395\uBCEF"+
-            "\uB396\uB397\uB398\uB399\uC5F0\uB39A\uB39B\uB39C"+
-            "\uB39D\uB39E\uB39F\uB3A0\uB440\uB441\uB442\uEDD6"+
-            "\uB443\uB5EF\uB444\uB445\uC2B5\uB0AD\uCBE9\uB446"+
-            "\uB447\uB1AE\uB448\uEDD4\uB449\uB44A\uB44B\uCDEB"+
-            "\uB5E2\uB44C\uEDD5\uEDD3\uEDD7\uB44D\uB44E\uB5FA"+
-            "\uB44F\uEDD8\uB450\uEDD9\uB451\uEDDC\uB452\uB1CC"+
-            "\uB453\uB454\uB455\uB456\uB457\uB458\uB459\uB45A"+
-            "\uC5F6\uBCEE\uEDDA\uCCBC\uB2EA\uB45B\uB45C\uB45D"+
-            "\uB45E\uEDDB\uB45F\uB460\uB461\uB462\uC4EB\uB463"+
-            "\uB464\uB4C5\uB465\uB466\uB467\uB0F5\uB468\uB469"+
-            "\uB46A\uEDDF\uC0DA\uB4E8\uB46B\uB46C\uB46D\uB46E"+
-            "\uC5CD\uB46F\uB470\uB471\uEDDD\uBFC4\uB472\uB473"+
-            "\uB474\uEDDE\uB475\uB476\uB477\uB478\uB479\uB47A"+
-            "\uB47B\uB47C\uB47D\uB47E\uB480\uB481\uB482\uB483"+
-            "\uC4A5\uB484\uB485\uB486\uEDE0\uB487\uB488\uB489"+
-            "\uB48A\uB48B\uEDE1\uB48C\uEDE3\uB48D\uB48E\uC1D7"+
-            "\uB48F\uB490\uBBC7\uB491\uB492\uB493\uB494\uB495"+
-            "\uB496\uBDB8\uB497\uB498\uB499\uEDE2\uB49A\uB49B"+
-            "\uB49C\uB49D\uB49E\uB49F\uB4A0\uB540\uB541\uB542"+
-            "\uB543\uB544\uB545\uEDE4\uB546\uB547\uB548\uB549"+
-            "\uB54A\uB54B\uB54C\uB54D\uB54E\uB54F\uEDE6\uB550"+
-            "\uB551\uB552\uB553\uB554\uEDE5\uB555\uB556\uB557"+
-            "\uB558\uB559\uB55A\uB55B\uB55C\uB55D\uB55E\uB55F"+
-            "\uB560\uB561\uB562\uB563\uEDE7\uB564\uB565\uB566"+
-            "\uB567\uB568\uCABE\uECEA\uC0F1\uB569\uC9E7\uB56A"+
-            "\uECEB\uC6EE\uB56B\uB56C\uB56D\uB56E\uECEC\uB56F"+
-            "\uC6ED\uECED\uB570\uB571\uB572\uB573\uB574\uB575"+
-            "\uB576\uB577\uB578\uECF0\uB579\uB57A\uD7E6\uECF3"+
-            "\uB57B\uB57C\uECF1\uECEE\uECEF\uD7A3\uC9F1\uCBEE"+
-            "\uECF4\uB57D\uECF2\uB57E\uB580\uCFE9\uB581\uECF6"+
-            "\uC6B1\uB582\uB583\uB584\uB585\uBCC0\uB586\uECF5"+
-            "\uB587\uB588\uB589\uB58A\uB58B\uB58C\uB58D\uB5BB"+
-            "\uBBF6\uB58E\uECF7\uB58F\uB590\uB591\uB592\uB593"+
-            "\uD9F7\uBDFB\uB594\uB595\uC2BB\uECF8\uB596\uB597"+
-            "\uB598\uB599\uECF9\uB59A\uB59B\uB59C\uB59D\uB8A3"+
-            "\uB59E\uB59F\uB5A0\uB640\uB641\uB642\uB643\uB644"+
-            "\uB645\uB646\uECFA\uB647\uB648\uB649\uB64A\uB64B"+
-            "\uB64C\uB64D\uB64E\uB64F\uB650\uB651\uB652\uECFB"+
-            "\uB653\uB654\uB655\uB656\uB657\uB658\uB659\uB65A"+
-            "\uB65B\uB65C\uB65D\uECFC\uB65E\uB65F\uB660\uB661"+
-            "\uB662\uD3ED\uD8AE\uC0EB\uB663\uC7DD\uBACC\uB664"+
-            "\uD0E3\uCBBD\uB665\uCDBA\uB666\uB667\uB8D1\uB668"+
-            "\uB669\uB1FC\uB66A\uC7EF\uB66B\uD6D6\uB66C\uB66D"+
-            "\uB66E\uBFC6\uC3EB\uB66F\uB670\uEFF5\uB671\uB672"+
-            "\uC3D8\uB673\uB674\uB675\uB676\uB677\uB678\uD7E2"+
-            "\uB679\uB67A\uB67B\uEFF7\uB3D3\uB67C\uC7D8\uD1ED"+
-            "\uB67D\uD6C8\uB67E\uEFF8\uB680\uEFF6\uB681\uBBFD"+
-            "\uB3C6\uB682\uB683\uB684\uB685\uB686\uB687\uB688"+
-            "\uBDD5\uB689\uB68A\uD2C6\uB68B\uBBE0\uB68C\uB68D"+
-            "\uCFA1\uB68E\uEFFC\uEFFB\uB68F\uB690\uEFF9\uB691"+
-            "\uB692\uB693\uB694\uB3CC\uB695\uC9D4\uCBB0\uB696"+
-            "\uB697\uB698\uB699\uB69A\uEFFE\uB69B\uB69C\uB0DE"+
-            "\uB69D\uB69E\uD6C9\uB69F\uB6A0\uB740\uEFFD\uB741"+
-            "\uB3ED\uB742\uB743\uF6D5\uB744\uB745\uB746\uB747"+
-            "\uB748\uB749\uB74A\uB74B\uB74C\uB74D\uB74E\uB74F"+
-            "\uB750\uB751\uB752\uCEC8\uB753\uB754\uB755\uF0A2"+
-            "\uB756\uF0A1\uB757\uB5BE\uBCDA\uBBFC\uB758\uB8E5"+
-            "\uB759\uB75A\uB75B\uB75C\uB75D\uB75E\uC4C2\uB75F"+
-            "\uB760\uB761\uB762\uB763\uB764\uB765\uB766\uB767"+
-            "\uB768\uF0A3\uB769\uB76A\uB76B\uB76C\uB76D\uCBEB"+
-            "\uB76E\uB76F\uB770\uB771\uB772\uB773\uB774\uB775"+
-            "\uB776\uB777\uB778\uB779\uB77A\uB77B\uB77C\uB77D"+
-            "\uB77E\uB780\uB781\uB782\uB783\uB784\uB785\uB786"+
-            "\uF0A6\uB787\uB788\uB789\uD1A8\uB78A\uBEBF\uC7EE"+
-            "\uF1B6\uF1B7\uBFD5\uB78B\uB78C\uB78D\uB78E\uB4A9"+
-            "\uF1B8\uCDBB\uB78F\uC7D4\uD5AD\uB790\uF1B9\uB791"+
-            "\uF1BA\uB792\uB793\uB794\uB795\uC7CF\uB796\uB797"+
-            "\uB798\uD2A4\uD6CF\uB799\uB79A\uF1BB\uBDD1\uB4B0"+
-            "\uBEBD\uB79B\uB79C\uB79D\uB4DC\uCED1\uB79E\uBFDF"+
-            "\uF1BD\uB79F\uB7A0\uB840\uB841\uBFFA\uF1BC\uB842"+
-            "\uF1BF\uB843\uB844\uB845\uF1BE\uF1C0\uB846\uB847"+
-            "\uB848\uB849\uB84A\uF1C1\uB84B\uB84C\uB84D\uB84E"+
-            "\uB84F\uB850\uB851\uB852\uB853\uB854\uB855\uC1FE"+
-            "\uB856\uB857\uB858\uB859\uB85A\uB85B\uB85C\uB85D"+
-            "\uB85E\uB85F\uB860\uC1A2\uB861\uB862\uB863\uB864"+
-            "\uB865\uB866\uB867\uB868\uB869\uB86A\uCAFA\uB86B"+
-            "\uB86C\uD5BE\uB86D\uB86E\uB86F\uB870\uBEBA\uBEB9"+
-            "\uD5C2\uB871\uB872\uBFA2\uB873\uCDAF\uF1B5\uB874"+
-            "\uB875\uB876\uB877\uB878\uB879\uBDDF\uB87A\uB6CB"+
-            "\uB87B\uB87C\uB87D\uB87E\uB880\uB881\uB882\uB883"+
-            "\uB884\uD6F1\uF3C3\uB885\uB886\uF3C4\uB887\uB8CD";
-
-        private final static String innerIndex5=
-            "\uB888\uB889\uB88A\uF3C6\uF3C7\uB88B\uB0CA\uB88C"+
-            "\uF3C5\uB88D\uF3C9\uCBF1\uB88E\uB88F\uB890\uF3CB"+
-            "\uB891\uD0A6\uB892\uB893\uB1CA\uF3C8\uB894\uB895"+
-            "\uB896\uF3CF\uB897\uB5D1\uB898\uB899\uF3D7\uB89A"+
-            "\uF3D2\uB89B\uB89C\uB89D\uF3D4\uF3D3\uB7FB\uB89E"+
-            "\uB1BF\uB89F\uF3CE\uF3CA\uB5DA\uB8A0\uF3D0\uB940"+
-            "\uB941\uF3D1\uB942\uF3D5\uB943\uB944\uB945\uB946"+
-            "\uF3CD\uB947\uBCE3\uB948\uC1FD\uB949\uF3D6\uB94A"+
-            "\uB94B\uB94C\uB94D\uB94E\uB94F\uF3DA\uB950\uF3CC"+
-            "\uB951\uB5C8\uB952\uBDEE\uF3DC\uB953\uB954\uB7A4"+
-            "\uBFF0\uD6FE\uCDB2\uB955\uB4F0\uB956\uB2DF\uB957"+
-            "\uF3D8\uB958\uF3D9\uC9B8\uB959\uF3DD\uB95A\uB95B"+
-            "\uF3DE\uB95C\uF3E1\uB95D\uB95E\uB95F\uB960\uB961"+
-            "\uB962\uB963\uB964\uB965\uB966\uB967\uF3DF\uB968"+
-            "\uB969\uF3E3\uF3E2\uB96A\uB96B\uF3DB\uB96C\uBFEA"+
-            "\uB96D\uB3EF\uB96E\uF3E0\uB96F\uB970\uC7A9\uB971"+
-            "\uBCF2\uB972\uB973\uB974\uB975\uF3EB\uB976\uB977"+
-            "\uB978\uB979\uB97A\uB97B\uB97C\uB9BF\uB97D\uB97E"+
-            "\uF3E4\uB980\uB981\uB982\uB2AD\uBBFE\uB983\uCBE3"+
-            "\uB984\uB985\uB986\uB987\uF3ED\uF3E9\uB988\uB989"+
-            "\uB98A\uB9DC\uF3EE\uB98B\uB98C\uB98D\uF3E5\uF3E6"+
-            "\uF3EA\uC2E1\uF3EC\uF3EF\uF3E8\uBCFD\uB98E\uB98F"+
-            "\uB990\uCFE4\uB991\uB992\uF3F0\uB993\uB994\uB995"+
-            "\uF3E7\uB996\uB997\uB998\uB999\uB99A\uB99B\uB99C"+
-            "\uB99D\uF3F2\uB99E\uB99F\uB9A0\uBA40\uD7AD\uC6AA"+
-            "\uBA41\uBA42\uBA43\uBA44\uF3F3\uBA45\uBA46\uBA47"+
-            "\uBA48\uF3F1\uBA49\uC2A8\uBA4A\uBA4B\uBA4C\uBA4D"+
-            "\uBA4E\uB8DD\uF3F5\uBA4F\uBA50\uF3F4\uBA51\uBA52"+
-            "\uBA53\uB4DB\uBA54\uBA55\uBA56\uF3F6\uF3F7\uBA57"+
-            "\uBA58\uBA59\uF3F8\uBA5A\uBA5B\uBA5C\uC0BA\uBA5D"+
-            "\uBA5E\uC0E9\uBA5F\uBA60\uBA61\uBA62\uBA63\uC5F1"+
-            "\uBA64\uBA65\uBA66\uBA67\uF3FB\uBA68\uF3FA\uBA69"+
-            "\uBA6A\uBA6B\uBA6C\uBA6D\uBA6E\uBA6F\uBA70\uB4D8"+
-            "\uBA71\uBA72\uBA73\uF3FE\uF3F9\uBA74\uBA75\uF3FC"+
-            "\uBA76\uBA77\uBA78\uBA79\uBA7A\uBA7B\uF3FD\uBA7C"+
-            "\uBA7D\uBA7E\uBA80\uBA81\uBA82\uBA83\uBA84\uF4A1"+
-            "\uBA85\uBA86\uBA87\uBA88\uBA89\uBA8A\uF4A3\uBBC9"+
-            "\uBA8B\uBA8C\uF4A2\uBA8D\uBA8E\uBA8F\uBA90\uBA91"+
-            "\uBA92\uBA93\uBA94\uBA95\uBA96\uBA97\uBA98\uBA99"+
-            "\uF4A4\uBA9A\uBA9B\uBA9C\uBA9D\uBA9E\uBA9F\uB2BE"+
-            "\uF4A6\uF4A5\uBAA0\uBB40\uBB41\uBB42\uBB43\uBB44"+
-            "\uBB45\uBB46\uBB47\uBB48\uBB49\uBCAE\uBB4A\uBB4B"+
-            "\uBB4C\uBB4D\uBB4E\uBB4F\uBB50\uBB51\uBB52\uBB53"+
-            "\uBB54\uBB55\uBB56\uBB57\uBB58\uBB59\uBB5A\uBB5B"+
-            "\uBB5C\uBB5D\uBB5E\uBB5F\uBB60\uBB61\uBB62\uBB63"+
-            "\uBB64\uBB65\uBB66\uBB67\uBB68\uBB69\uBB6A\uBB6B"+
-            "\uBB6C\uBB6D\uBB6E\uC3D7\uD9E1\uBB6F\uBB70\uBB71"+
-            "\uBB72\uBB73\uBB74\uC0E0\uF4CC\uD7D1\uBB75\uBB76"+
-            "\uBB77\uBB78\uBB79\uBB7A\uBB7B\uBB7C\uBB7D\uBB7E"+
-            "\uBB80\uB7DB\uBB81\uBB82\uBB83\uBB84\uBB85\uBB86"+
-            "\uBB87\uF4CE\uC1A3\uBB88\uBB89\uC6C9\uBB8A\uB4D6"+
-            "\uD5B3\uBB8B\uBB8C\uBB8D\uF4D0\uF4CF\uF4D1\uCBDA"+
-            "\uBB8E\uBB8F\uF4D2\uBB90\uD4C1\uD6E0\uBB91\uBB92"+
-            "\uBB93\uBB94\uB7E0\uBB95\uBB96\uBB97\uC1B8\uBB98"+
-            "\uBB99\uC1BB\uF4D3\uBEAC\uBB9A\uBB9B\uBB9C\uBB9D"+
-            "\uBB9E\uB4E2\uBB9F\uBBA0\uF4D4\uF4D5\uBEAB\uBC40"+
-            "\uBC41\uF4D6\uBC42\uBC43\uBC44\uF4DB\uBC45\uF4D7"+
-            "\uF4DA\uBC46\uBAFD\uBC47\uF4D8\uF4D9\uBC48\uBC49"+
-            "\uBC4A\uBC4B\uBC4C\uBC4D\uBC4E\uB8E2\uCCC7\uF4DC"+
-            "\uBC4F\uB2DA\uBC50\uBC51\uC3D3\uBC52\uBC53\uD4E3"+
-            "\uBFB7\uBC54\uBC55\uBC56\uBC57\uBC58\uBC59\uBC5A"+
-            "\uF4DD\uBC5B\uBC5C\uBC5D\uBC5E\uBC5F\uBC60\uC5B4"+
-            "\uBC61\uBC62\uBC63\uBC64\uBC65\uBC66\uBC67\uBC68"+
-            "\uF4E9\uBC69\uBC6A\uCFB5\uBC6B\uBC6C\uBC6D\uBC6E"+
-            "\uBC6F\uBC70\uBC71\uBC72\uBC73\uBC74\uBC75\uBC76"+
-            "\uBC77\uBC78\uCEC9\uBC79\uBC7A\uBC7B\uBC7C\uBC7D"+
-            "\uBC7E\uBC80\uBC81\uBC82\uBC83\uBC84\uBC85\uBC86"+
-            "\uBC87\uBC88\uBC89\uBC8A\uBC8B\uBC8C\uBC8D\uBC8E"+
-            "\uCBD8\uBC8F\uCBF7\uBC90\uBC91\uBC92\uBC93\uBDF4"+
-            "\uBC94\uBC95\uBC96\uD7CF\uBC97\uBC98\uBC99\uC0DB"+
-            "\uBC9A\uBC9B\uBC9C\uBC9D\uBC9E\uBC9F\uBCA0\uBD40"+
-            "\uBD41\uBD42\uBD43\uBD44\uBD45\uBD46\uBD47\uBD48"+
-            "\uBD49\uBD4A\uBD4B\uBD4C\uBD4D\uBD4E\uBD4F\uBD50"+
-            "\uBD51\uBD52\uBD53\uBD54\uBD55\uBD56\uBD57\uBD58"+
-            "\uBD59\uBD5A\uBD5B\uBD5C\uBD5D\uBD5E\uBD5F\uBD60"+
-            "\uBD61\uBD62\uBD63\uBD64\uBD65\uBD66\uBD67\uBD68"+
-            "\uBD69\uBD6A\uBD6B\uBD6C\uBD6D\uBD6E\uBD6F\uBD70"+
-            "\uBD71\uBD72\uBD73\uBD74\uBD75\uBD76\uD0F5\uBD77"+
-            "\uBD78\uBD79\uBD7A\uBD7B\uBD7C\uBD7D\uBD7E\uF4EA"+
-            "\uBD80\uBD81\uBD82\uBD83\uBD84\uBD85\uBD86\uBD87"+
-            "\uBD88\uBD89\uBD8A\uBD8B\uBD8C\uBD8D\uBD8E\uBD8F"+
-            "\uBD90\uBD91\uBD92\uBD93\uBD94\uBD95\uBD96\uBD97"+
-            "\uBD98\uBD99\uBD9A\uBD9B\uBD9C\uBD9D\uBD9E\uBD9F"+
-            "\uBDA0\uBE40\uBE41\uBE42\uBE43\uBE44\uBE45\uBE46"+
-            "\uBE47\uBE48\uBE49\uBE4A\uBE4B\uBE4C\uF4EB\uBE4D"+
-            "\uBE4E\uBE4F\uBE50\uBE51\uBE52\uBE53\uF4EC\uBE54"+
-            "\uBE55\uBE56\uBE57\uBE58\uBE59\uBE5A\uBE5B\uBE5C"+
-            "\uBE5D\uBE5E\uBE5F\uBE60\uBE61\uBE62\uBE63\uBE64"+
-            "\uBE65\uBE66\uBE67\uBE68\uBE69\uBE6A\uBE6B\uBE6C"+
-            "\uBE6D\uBE6E\uBE6F\uBE70\uBE71\uBE72\uBE73\uBE74"+
-            "\uBE75\uBE76\uBE77\uBE78\uBE79\uBE7A\uBE7B\uBE7C"+
-            "\uBE7D\uBE7E\uBE80\uBE81\uBE82\uBE83\uBE84\uBE85"+
-            "\uBE86\uBE87\uBE88\uBE89\uBE8A\uBE8B\uBE8C\uBE8D"+
-            "\uBE8E\uBE8F\uBE90\uBE91\uBE92\uBE93\uBE94\uBE95"+
-            "\uBE96\uBE97\uBE98\uBE99\uBE9A\uBE9B\uBE9C\uBE9D"+
-            "\uBE9E\uBE9F\uBEA0\uBF40\uBF41\uBF42\uBF43\uBF44"+
-            "\uBF45\uBF46\uBF47\uBF48\uBF49\uBF4A\uBF4B\uBF4C"+
-            "\uBF4D\uBF4E\uBF4F\uBF50\uBF51\uBF52\uBF53\uBF54"+
-            "\uBF55\uBF56\uBF57\uBF58\uBF59\uBF5A\uBF5B\uBF5C"+
-            "\uBF5D\uBF5E\uBF5F\uBF60\uBF61\uBF62\uBF63\uBF64"+
-            "\uBF65\uBF66\uBF67\uBF68\uBF69\uBF6A\uBF6B\uBF6C"+
-            "\uBF6D\uBF6E\uBF6F\uBF70\uBF71\uBF72\uBF73\uBF74"+
-            "\uBF75\uBF76\uBF77\uBF78\uBF79\uBF7A\uBF7B\uBF7C"+
-            "\uBF7D\uBF7E\uBF80\uF7E3\uBF81\uBF82\uBF83\uBF84"+
-            "\uBF85\uB7B1\uBF86\uBF87\uBF88\uBF89\uBF8A\uF4ED"+
-            "\uBF8B\uBF8C\uBF8D\uBF8E\uBF8F\uBF90\uBF91\uBF92"+
-            "\uBF93\uBF94\uBF95\uBF96\uBF97\uBF98\uBF99\uBF9A"+
-            "\uBF9B\uBF9C\uBF9D\uBF9E\uBF9F\uBFA0\uC040\uC041"+
-            "\uC042\uC043\uC044\uC045\uC046\uC047\uC048\uC049"+
-            "\uC04A\uC04B\uC04C\uC04D\uC04E\uC04F\uC050\uC051"+
-            "\uC052\uC053\uC054\uC055\uC056\uC057\uC058\uC059"+
-            "\uC05A\uC05B\uC05C\uC05D\uC05E\uC05F\uC060\uC061"+
-            "\uC062\uC063\uD7EB\uC064\uC065\uC066\uC067\uC068"+
-            "\uC069\uC06A\uC06B\uC06C\uC06D\uC06E\uC06F\uC070"+
-            "\uC071\uC072\uC073\uC074\uC075\uC076\uC077\uC078"+
-            "\uC079\uC07A\uC07B\uF4EE\uC07C\uC07D\uC07E\uE6F9"+
-            "\uBEC0\uE6FA\uBAEC\uE6FB\uCFCB\uE6FC\uD4BC\uBCB6"+
-            "\uE6FD\uE6FE\uBCCD\uC8D2\uCEB3\uE7A1\uC080\uB4BF"+
-            "\uE7A2\uC9B4\uB8D9\uC4C9\uC081\uD7DD\uC2DA\uB7D7"+
-            "\uD6BD\uCEC6\uB7C4\uC082\uC083\uC5A6\uE7A3\uCFDF"+
-            "\uE7A4\uE7A5\uE7A6\uC1B7\uD7E9\uC9F0\uCFB8\uD6AF"+
-            "\uD6D5\uE7A7\uB0ED\uE7A8\uE7A9\uC9DC\uD2EF\uBEAD"+
-            "\uE7AA\uB0F3\uC8DE\uBDE1\uE7AB\uC8C6\uC084\uE7AC"+
-            "\uBBE6\uB8F8\uD1A4\uE7AD\uC2E7\uBEF8\uBDCA\uCDB3"+
-            "\uE7AE\uE7AF\uBEEE\uD0E5\uC085\uCBE7\uCCD0\uBCCC"+
-            "\uE7B0\uBCA8\uD0F7\uE7B1\uC086\uD0F8\uE7B2\uE7B3"+
-            "\uB4C2\uE7B4\uE7B5\uC9FE\uCEAC\uC3E0\uE7B7\uB1C1"+
-            "\uB3F1\uC087\uE7B8\uE7B9\uD7DB\uD5C0\uE7BA\uC2CC"+
-            "\uD7BA\uE7BB\uE7BC\uE7BD\uBCEA\uC3E5\uC0C2\uE7BE"+
-            "\uE7BF\uBCA9\uC088\uE7C0\uE7C1\uE7B6\uB6D0\uE7C2"+
-            "\uC089\uE7C3\uE7C4\uBBBA\uB5DE\uC2C6\uB1E0\uE7C5"+
-            "\uD4B5\uE7C6\uB8BF\uE7C8\uE7C7\uB7EC\uC08A\uE7C9"+
-            "\uB2F8\uE7CA\uE7CB\uE7CC\uE7CD\uE7CE\uE7CF\uE7D0"+
-            "\uD3A7\uCBF5\uE7D1\uE7D2\uE7D3\uE7D4\uC9C9\uE7D5"+
-            "\uE7D6\uE7D7\uE7D8\uE7D9\uBDC9\uE7DA\uF3BE\uC08B"+
-            "\uB8D7\uC08C\uC8B1\uC08D\uC08E\uC08F\uC090\uC091"+
-            "\uC092\uC093\uF3BF\uC094\uF3C0\uF3C1\uC095\uC096"+
-            "\uC097\uC098\uC099\uC09A\uC09B\uC09C\uC09D\uC09E"+
-            "\uB9DE\uCDF8\uC09F\uC0A0\uD8E8\uBAB1\uC140\uC2DE"+
-            "\uEEB7\uC141\uB7A3\uC142\uC143\uC144\uC145\uEEB9"+
-            "\uC146\uEEB8\uB0D5\uC147\uC148\uC149\uC14A\uC14B"+
-            "\uEEBB\uD5D6\uD7EF\uC14C\uC14D\uC14E\uD6C3\uC14F"+
-            "\uC150\uEEBD\uCAF0\uC151\uEEBC\uC152\uC153\uC154"+
-            "\uC155\uEEBE\uC156\uC157\uC158\uC159\uEEC0\uC15A"+
-            "\uC15B\uEEBF\uC15C\uC15D\uC15E\uC15F\uC160\uC161"+
-            "\uC162\uC163\uD1F2\uC164\uC7BC\uC165\uC3C0\uC166"+
-            "\uC167\uC168\uC169\uC16A\uB8E1\uC16B\uC16C\uC16D"+
-            "\uC16E\uC16F\uC1E7\uC170\uC171\uF4C6\uD0DF\uF4C7"+
-            "\uC172\uCFDB\uC173\uC174\uC8BA\uC175\uC176\uF4C8"+
-            "\uC177\uC178\uC179\uC17A\uC17B\uC17C\uC17D\uF4C9"+
-            "\uF4CA\uC17E\uF4CB\uC180\uC181\uC182\uC183\uC184"+
-            "\uD9FA\uB8FE\uC185\uC186\uE5F1\uD3F0\uC187\uF4E0"+
-            "\uC188\uCECC\uC189\uC18A\uC18B\uB3E1\uC18C\uC18D"+
-            "\uC18E\uC18F\uF1B4\uC190\uD2EE\uC191\uF4E1\uC192"+
-            "\uC193\uC194\uC195\uC196\uCFE8\uF4E2\uC197\uC198"+
-            "\uC7CC\uC199\uC19A\uC19B\uC19C\uC19D\uC19E\uB5D4"+
-            "\uB4E4\uF4E4\uC19F\uC1A0\uC240\uF4E3\uF4E5\uC241"+
-            "\uC242\uF4E6\uC243\uC244\uC245\uC246\uF4E7\uC247"+
-            "\uBAB2\uB0BF\uC248\uF4E8\uC249\uC24A\uC24B\uC24C"+
-            "\uC24D\uC24E\uC24F\uB7AD\uD2ED\uC250\uC251\uC252"+
-            "\uD2AB\uC0CF\uC253\uBFBC\uEBA3\uD5DF\uEAC8\uC254"+
-            "\uC255\uC256\uC257\uF1F3\uB6F8\uCBA3\uC258\uC259"+
-            "\uC4CD\uC25A\uF1E7\uC25B\uF1E8\uB8FB\uF1E9\uBAC4"+
-            "\uD4C5\uB0D2\uC25C\uC25D\uF1EA\uC25E\uC25F\uC260"+
-            "\uF1EB\uC261\uF1EC\uC262\uC263\uF1ED\uF1EE\uF1EF"+
-            "\uF1F1\uF1F0\uC5D5\uC264\uC265\uC266\uC267\uC268"+
-            "\uC269\uF1F2\uC26A\uB6FA\uC26B\uF1F4\uD2AE\uDEC7"+
-            "\uCBCA\uC26C\uC26D\uB3DC\uC26E\uB5A2\uC26F\uB9A2"+
-            "\uC270\uC271\uC4F4\uF1F5\uC272\uC273\uF1F6\uC274"+
-            "\uC275\uC276\uC1C4\uC1FB\uD6B0\uF1F7\uC277\uC278"+
-            "\uC279\uC27A\uF1F8\uC27B\uC1AA\uC27C\uC27D\uC27E"+
-            "\uC6B8\uC280\uBEDB\uC281\uC282\uC283\uC284\uC285"+
-            "\uC286\uC287\uC288\uC289\uC28A\uC28B\uC28C\uC28D"+
-            "\uC28E\uF1F9\uB4CF\uC28F\uC290\uC291\uC292\uC293"+
-            "\uC294\uF1FA\uC295\uC296\uC297\uC298\uC299\uC29A"+
-            "\uC29B\uC29C\uC29D\uC29E\uC29F\uC2A0\uC340\uEDB2"+
-            "\uEDB1\uC341\uC342\uCBE0\uD2DE\uC343\uCBC1\uD5D8"+
-            "\uC344\uC8E2\uC345\uC0DF\uBCA1\uC346\uC347\uC348"+
-            "\uC349\uC34A\uC34B\uEBC1\uC34C\uC34D\uD0A4\uC34E"+
-            "\uD6E2\uC34F\uB6C7\uB8D8\uEBC0\uB8CE\uC350\uEBBF"+
-            "\uB3A6\uB9C9\uD6AB\uC351\uB7F4\uB7CA\uC352\uC353"+
-            "\uC354\uBCE7\uB7BE\uEBC6\uC355\uEBC7\uB0B9\uBFCF"+
-            "\uC356\uEBC5\uD3FD\uC357\uEBC8\uC358\uC359\uEBC9"+
-            "\uC35A\uC35B\uB7CE\uC35C\uEBC2\uEBC4\uC9F6\uD6D7"+
-            "\uD5CD\uD0B2\uEBCF\uCEB8\uEBD0\uC35D\uB5A8\uC35E"+
-            "\uC35F\uC360\uC361\uC362\uB1B3\uEBD2\uCCA5\uC363"+
-            "\uC364\uC365\uC366\uC367\uC368\uC369\uC5D6\uEBD3"+
-            "\uC36A\uEBD1\uC5DF\uEBCE\uCAA4\uEBD5\uB0FB\uC36B"+
-            "\uC36C\uBAFA\uC36D\uC36E\uD8B7\uF1E3\uC36F\uEBCA"+
-            "\uEBCB\uEBCC\uEBCD\uEBD6\uE6C0\uEBD9\uC370\uBFE8"+
-            "\uD2C8\uEBD7\uEBDC\uB8EC\uEBD8\uC371\uBDBA\uC372"+
-            "\uD0D8\uC373\uB0B7\uC374\uEBDD\uC4DC\uC375\uC376"+
-            "\uC377\uC378\uD6AC\uC379\uC37A\uC37B\uB4E0\uC37C"+
-            "\uC37D\uC2F6\uBCB9\uC37E\uC380\uEBDA\uEBDB\uD4E0"+
-            "\uC6EA\uC4D4\uEBDF\uC5A7\uD9F5\uC381\uB2B1\uC382"+
-            "\uEBE4\uC383\uBDC5\uC384\uC385\uC386\uEBE2\uC387"+
-            "\uC388\uC389\uC38A\uC38B\uC38C\uC38D\uC38E\uC38F"+
-            "\uC390\uC391\uC392\uC393\uEBE3\uC394\uC395\uB8AC"+
-            "\uC396\uCDD1\uEBE5\uC397\uC398\uC399\uEBE1\uC39A"+
-            "\uC1B3\uC39B\uC39C\uC39D\uC39E\uC39F\uC6A2\uC3A0"+
-            "\uC440\uC441\uC442\uC443\uC444\uC445\uCCF3\uC446"+
-            "\uEBE6\uC447\uC0B0\uD2B8\uEBE7\uC448\uC449\uC44A"+
-            "\uB8AF\uB8AD\uC44B\uEBE8\uC7BB\uCDF3\uC44C\uC44D"+
-            "\uC44E\uEBEA\uEBEB\uC44F\uC450\uC451\uC452\uC453"+
-            "\uEBED\uC454\uC455\uC456\uC457\uD0C8\uC458\uEBF2"+
-            "\uC459\uEBEE\uC45A\uC45B\uC45C\uEBF1\uC8F9\uC45D"+
-            "\uD1FC\uEBEC\uC45E\uC45F\uEBE9\uC460\uC461\uC462"+
-            "\uC463\uB8B9\uCFD9\uC4E5\uEBEF\uEBF0\uCCDA\uCDC8"+
-            "\uB0F2\uC464\uEBF6\uC465\uC466\uC467\uC468\uC469"+
-            "\uEBF5\uC46A\uB2B2\uC46B\uC46C\uC46D\uC46E\uB8E0"+
-            "\uC46F\uEBF7\uC470\uC471\uC472\uC473\uC474\uC475"+
-            "\uB1EC\uC476\uC477\uCCC5\uC4A4\uCFA5\uC478\uC479"+
-            "\uC47A\uC47B\uC47C\uEBF9\uC47D\uC47E\uECA2\uC480"+
-            "\uC5F2\uC481\uEBFA\uC482\uC483\uC484\uC485\uC486"+
-            "\uC487\uC488\uC489\uC9C5\uC48A\uC48B\uC48C\uC48D"+
-            "\uC48E\uC48F\uE2DF\uEBFE\uC490\uC491\uC492\uC493"+
-            "\uCDCE\uECA1\uB1DB\uD3B7\uC494\uC495\uD2DC\uC496"+
-            "\uC497\uC498\uEBFD\uC499\uEBFB\uC49A\uC49B\uC49C"+
-            "\uC49D\uC49E\uC49F\uC4A0\uC540\uC541\uC542\uC543"+
-            "\uC544\uC545\uC546\uC547\uC548\uC549\uC54A\uC54B"+
-            "\uC54C\uC54D\uC54E\uB3BC\uC54F\uC550\uC551\uEAB0"+
-            "\uC552\uC553\uD7D4\uC554\uF4AB\uB3F4\uC555\uC556"+
-            "\uC557\uC558\uC559\uD6C1\uD6C2\uC55A\uC55B\uC55C"+
-            "\uC55D\uC55E\uC55F\uD5E9\uBECA\uC560\uF4A7\uC561"+
-            "\uD2A8\uF4A8\uF4A9\uC562\uF4AA\uBECB\uD3DF\uC563"+
-            "\uC564\uC565\uC566\uC567\uC9E0\uC9E1\uC568\uC569"+
-            "\uF3C2\uC56A\uCAE6\uC56B\uCCF2\uC56C\uC56D\uC56E"+
-            "\uC56F\uC570\uC571\uE2B6\uCBB4\uC572\uCEE8\uD6DB"+
-            "\uC573\uF4AD\uF4AE\uF4AF\uC574\uC575\uC576\uC577"+
-            "\uF4B2\uC578\uBABD\uF4B3\uB0E3\uF4B0\uC579\uF4B1"+
-            "\uBDA2\uB2D5\uC57A\uF4B6\uF4B7\uB6E6\uB2B0\uCFCF"+
-            "\uF4B4\uB4AC\uC57B\uF4B5\uC57C\uC57D\uF4B8\uC57E"+
-            "\uC580\uC581\uC582\uC583\uF4B9\uC584\uC585\uCDA7"+
-            "\uC586\uF4BA\uC587\uF4BB\uC588\uC589\uC58A\uF4BC"+
-            "\uC58B\uC58C\uC58D\uC58E\uC58F\uC590\uC591\uC592"+
-            "\uCBD2\uC593\uF4BD\uC594\uC595\uC596\uC597\uF4BE"+
-            "\uC598\uC599\uC59A\uC59B\uC59C\uC59D\uC59E\uC59F"+
-            "\uF4BF\uC5A0\uC640\uC641\uC642\uC643\uF4DE\uC1BC"+
-            "\uBCE8\uC644\uC9AB\uD1DE\uE5F5\uC645\uC646\uC647"+
-            "\uC648\uDCB3\uD2D5\uC649\uC64A\uDCB4\uB0AC\uDCB5"+
-            "\uC64B\uC64C\uBDDA\uC64D\uDCB9\uC64E\uC64F\uC650"+
-            "\uD8C2\uC651\uDCB7\uD3F3\uC652\uC9D6\uDCBA\uDCB6"+
-            "\uC653\uDCBB\uC3A2\uC654\uC655\uC656\uC657\uDCBC"+
-            "\uDCC5\uDCBD\uC658\uC659\uCEDF\uD6A5\uC65A\uDCCF"+
-            "\uC65B\uDCCD\uC65C\uC65D\uDCD2\uBDE6\uC2AB\uC65E"+
-            "\uDCB8\uDCCB\uDCCE\uDCBE\uB7D2\uB0C5\uDCC7\uD0BE"+
-            "\uDCC1\uBBA8\uC65F\uB7BC\uDCCC\uC660\uC661\uDCC6"+
-            "\uDCBF\uC7DB\uC662\uC663\uC664\uD1BF\uDCC0\uC665"+
-            "\uC666\uDCCA\uC667\uC668\uDCD0\uC669\uC66A\uCEAD"+
-            "\uDCC2\uC66B\uDCC3\uDCC8\uDCC9\uB2D4\uDCD1\uCBD5"+
-            "\uC66C\uD4B7\uDCDB\uDCDF\uCCA6\uDCE6\uC66D\uC3E7"+
-            "\uDCDC\uC66E\uC66F\uBFC1\uDCD9\uC670\uB0FA\uB9B6"+
-            "\uDCE5\uDCD3\uC671\uDCC4\uDCD6\uC8F4\uBFE0\uC672"+
-            "\uC673\uC674\uC675\uC9BB\uC676\uC677\uC678\uB1BD"+
-            "\uC679\uD3A2\uC67A\uC67B\uDCDA\uC67C\uC67D\uDCD5"+
-            "\uC67E\uC6BB\uC680\uDCDE\uC681\uC682\uC683\uC684"+
-            "\uC685\uD7C2\uC3AF\uB7B6\uC7D1\uC3A9\uDCE2\uDCD8"+
-            "\uDCEB\uDCD4\uC686\uC687\uDCDD\uC688\uBEA5\uDCD7"+
-            "\uC689\uDCE0\uC68A\uC68B\uDCE3\uDCE4\uC68C\uDCF8"+
-            "\uC68D\uC68E\uDCE1\uDDA2\uDCE7\uC68F\uC690\uC691"+
-            "\uC692\uC693\uC694\uC695\uC696\uC697\uC698\uBCEB"+
-            "\uB4C4\uC699\uC69A\uC3A3\uB2E7\uDCFA\uC69B\uDCF2"+
-            "\uC69C\uDCEF\uC69D\uDCFC\uDCEE\uD2F0\uB2E8\uC69E"+
-            "\uC8D7\uC8E3\uDCFB\uC69F\uDCED\uC6A0\uC740\uC741"+
-            "\uDCF7\uC742\uC743\uDCF5\uC744\uC745\uBEA3\uDCF4"+
-            "\uC746\uB2DD\uC747\uC748\uC749\uC74A\uC74B\uDCF3"+
-            "\uBCF6\uDCE8\uBBC4\uC74C\uC0F3\uC74D\uC74E\uC74F"+
-            "\uC750\uC751\uBCD4\uDCE9\uDCEA\uC752\uDCF1\uDCF6"+
-            "\uDCF9\uB5B4\uC753\uC8D9\uBBE7\uDCFE\uDCFD\uD3AB"+
-            "\uDDA1\uDDA3\uDDA5\uD2F1\uDDA4\uDDA6\uDDA7\uD2A9"+
-            "\uC754\uC755\uC756\uC757\uC758\uC759\uC75A\uBAC9"+
-            "\uDDA9\uC75B\uC75C\uDDB6\uDDB1\uDDB4\uC75D\uC75E"+
-            "\uC75F\uC760\uC761\uC762\uC763\uDDB0\uC6CE\uC764"+
-            "\uC765\uC0F2\uC766\uC767\uC768\uC769\uC9AF\uC76A"+
-            "\uC76B\uC76C\uDCEC\uDDAE\uC76D\uC76E\uC76F\uC770"+
-            "\uDDB7\uC771\uC772\uDCF0\uDDAF\uC773\uDDB8\uC774"+
-            "\uDDAC\uC775\uC776\uC777\uC778\uC779\uC77A\uC77B"+
-            "\uDDB9\uDDB3\uDDAD\uC4AA\uC77C\uC77D\uC77E\uC780"+
-            "\uDDA8\uC0B3\uC1AB\uDDAA\uDDAB\uC781\uDDB2\uBBF1"+
-            "\uDDB5\uD3A8\uDDBA\uC782\uDDBB\uC3A7\uC783\uC784"+
-            "\uDDD2\uDDBC\uC785\uC786\uC787\uDDD1\uC788\uB9BD"+
-            "\uC789\uC78A\uBED5\uC78B\uBEFA\uC78C\uC78D\uBACA"+
-            "\uC78E\uC78F\uC790\uC791\uDDCA\uC792\uDDC5\uC793"+
-            "\uDDBF\uC794\uC795\uC796\uB2CB\uDDC3\uC797\uDDCB"+
-            "\uB2A4\uDDD5\uC798\uC799\uC79A\uDDBE\uC79B\uC79C"+
-            "\uC79D\uC6D0\uDDD0\uC79E\uC79F\uC7A0\uC840\uC841"+
-            "\uDDD4\uC1E2\uB7C6\uC842\uC843\uC844\uC845\uC846"+
-            "\uDDCE\uDDCF\uC847\uC848\uC849\uDDC4\uC84A\uC84B"+
-            "\uC84C\uDDBD\uC84D\uDDCD\uCCD1\uC84E\uDDC9\uC84F"+
-            "\uC850\uC851\uC852\uDDC2\uC3C8\uC6BC\uCEAE\uDDCC"+
-            "\uC853\uDDC8\uC854\uC855\uC856\uC857\uC858\uC859"+
-            "\uDDC1\uC85A\uC85B\uC85C\uDDC6\uC2DC\uC85D\uC85E"+
-            "\uC85F\uC860\uC861\uC862\uD3A9\uD3AA\uDDD3\uCFF4"+
-            "\uC8F8\uC863\uC864\uC865\uC866\uC867\uC868\uC869"+
-            "\uC86A\uDDE6\uC86B\uC86C\uC86D\uC86E\uC86F\uC870"+
-            "\uDDC7\uC871\uC872\uC873\uDDE0\uC2E4\uC874\uC875"+
-            "\uC876\uC877\uC878\uC879\uC87A\uC87B\uDDE1\uC87C"+
-            "\uC87D\uC87E\uC880\uC881\uC882\uC883\uC884\uC885"+
-            "\uC886\uDDD7\uC887\uC888\uC889\uC88A\uC88B\uD6F8"+
-            "\uC88C\uDDD9\uDDD8\uB8F0\uDDD6\uC88D\uC88E\uC88F"+
-            "\uC890\uC6CF\uC891\uB6AD\uC892\uC893\uC894\uC895"+
-            "\uC896\uDDE2\uC897\uBAF9\uD4E1\uDDE7\uC898\uC899"+
-            "\uC89A\uB4D0\uC89B\uDDDA\uC89C\uBFFB\uDDE3\uC89D"+
-            "\uDDDF\uC89E\uDDDD\uC89F\uC8A0\uC940\uC941\uC942"+
-            "\uC943\uC944\uB5D9\uC945\uC946\uC947\uC948\uDDDB"+
-            "\uDDDC\uDDDE\uC949\uBDAF\uDDE4\uC94A\uDDE5\uC94B"+
-            "\uC94C\uC94D\uC94E\uC94F\uC950\uC951\uC952\uDDF5"+
-            "\uC953\uC3C9\uC954\uC955\uCBE2\uC956\uC957\uC958"+
-            "\uC959\uDDF2\uC95A\uC95B\uC95C\uC95D\uC95E\uC95F"+
-            "\uC960\uC961\uC962\uC963\uC964\uC965\uC966\uD8E1"+
-            "\uC967\uC968\uC6D1\uC969\uDDF4\uC96A\uC96B\uC96C"+
-            "\uD5F4\uDDF3\uDDF0\uC96D\uC96E\uDDEC\uC96F\uDDEF"+
-            "\uC970\uDDE8\uC971\uC972\uD0EE\uC973\uC974\uC975"+
-            "\uC976\uC8D8\uDDEE\uC977\uC978\uDDE9\uC979\uC97A"+
-            "\uDDEA\uCBF2\uC97B\uDDED\uC97C\uC97D\uB1CD\uC97E"+
-            "\uC980\uC981\uC982\uC983\uC984\uC0B6\uC985\uBCBB"+
-            "\uDDF1\uC986\uC987\uDDF7\uC988\uDDF6\uDDEB\uC989"+
-            "\uC98A\uC98B\uC98C\uC98D\uC5EE\uC98E\uC98F\uC990"+
-            "\uDDFB\uC991\uC992\uC993\uC994\uC995\uC996\uC997"+
-            "\uC998\uC999\uC99A\uC99B\uDEA4\uC99C\uC99D\uDEA3"+
-            "\uC99E\uC99F\uC9A0\uCA40\uCA41\uCA42\uCA43\uCA44"+
-            "\uCA45\uCA46\uCA47\uCA48\uDDF8\uCA49\uCA4A\uCA4B"+
-            "\uCA4C\uC3EF\uCA4D\uC2FB\uCA4E\uCA4F\uCA50\uD5E1"+
-            "\uCA51\uCA52\uCEB5\uCA53\uCA54\uCA55\uCA56\uDDFD"+
-            "\uCA57\uB2CC\uCA58\uCA59\uCA5A\uCA5B\uCA5C\uCA5D"+
-            "\uCA5E\uCA5F\uCA60\uC4E8\uCADF\uCA61\uCA62\uCA63"+
-            "\uCA64\uCA65\uCA66\uCA67\uCA68\uCA69\uCA6A\uC7BE"+
-            "\uDDFA\uDDFC\uDDFE\uDEA2\uB0AA\uB1CE\uCA6B\uCA6C"+
-            "\uCA6D\uCA6E\uCA6F\uDEAC\uCA70\uCA71\uCA72\uCA73"+
-            "\uDEA6\uBDB6\uC8EF\uCA74\uCA75\uCA76\uCA77\uCA78"+
-            "\uCA79\uCA7A\uCA7B\uCA7C\uCA7D\uCA7E\uDEA1\uCA80"+
-            "\uCA81\uDEA5\uCA82\uCA83\uCA84\uCA85\uDEA9\uCA86"+
-            "\uCA87\uCA88\uCA89\uCA8A\uDEA8\uCA8B\uCA8C\uCA8D"+
-            "\uDEA7\uCA8E\uCA8F\uCA90\uCA91\uCA92\uCA93\uCA94"+
-            "\uCA95\uCA96\uDEAD\uCA97\uD4CC\uCA98\uCA99\uCA9A"+
-            "\uCA9B\uDEB3\uDEAA\uDEAE\uCA9C\uCA9D\uC0D9\uCA9E"+
-            "\uCA9F\uCAA0\uCB40\uCB41\uB1A1\uDEB6\uCB42\uDEB1"+
-            "\uCB43\uCB44\uCB45\uCB46\uCB47\uCB48\uCB49\uDEB2"+
-            "\uCB4A\uCB4B\uCB4C\uCB4D\uCB4E\uCB4F\uCB50\uCB51"+
-            "\uCB52\uCB53\uCB54\uD1A6\uDEB5\uCB55\uCB56\uCB57"+
-            "\uCB58\uCB59\uCB5A\uCB5B\uDEAF\uCB5C\uCB5D\uCB5E"+
-            "\uDEB0\uCB5F\uD0BD\uCB60\uCB61\uCB62\uDEB4\uCAED"+
-            "\uDEB9\uCB63\uCB64\uCB65\uCB66\uCB67\uCB68\uDEB8"+
-            "\uCB69\uDEB7\uCB6A\uCB6B\uCB6C\uCB6D\uCB6E\uCB6F"+
-            "\uCB70\uDEBB\uCB71\uCB72\uCB73\uCB74\uCB75\uCB76"+
-            "\uCB77\uBDE5\uCB78\uCB79\uCB7A\uCB7B\uCB7C\uB2D8"+
-            "\uC3EA\uCB7D\uCB7E\uDEBA\uCB80\uC5BA\uCB81\uCB82"+
-            "\uCB83\uCB84\uCB85\uCB86\uDEBC\uCB87\uCB88\uCB89"+
-            "\uCB8A\uCB8B\uCB8C\uCB8D\uCCD9\uCB8E\uCB8F\uCB90"+
-            "\uCB91\uB7AA\uCB92\uCB93\uCB94\uCB95\uCB96\uCB97"+
-            "\uCB98\uCB99\uCB9A\uCB9B\uCB9C\uCB9D\uCB9E\uCB9F"+
-            "\uCBA0\uCC40\uCC41\uD4E5\uCC42\uCC43\uCC44\uDEBD"+
-            "\uCC45\uCC46\uCC47\uCC48\uCC49\uDEBF\uCC4A\uCC4B"+
-            "\uCC4C\uCC4D\uCC4E\uCC4F\uCC50\uCC51\uCC52\uCC53"+
-            "\uCC54\uC4A2\uCC55\uCC56\uCC57\uCC58\uDEC1\uCC59"+
-            "\uCC5A\uCC5B\uCC5C\uCC5D\uCC5E\uCC5F\uCC60\uCC61"+
-            "\uCC62\uCC63\uCC64\uCC65\uCC66\uCC67\uCC68\uDEBE"+
-            "\uCC69\uDEC0\uCC6A\uCC6B\uCC6C\uCC6D\uCC6E\uCC6F"+
-            "\uCC70\uCC71\uCC72\uCC73\uCC74\uCC75\uCC76\uCC77"+
-            "\uD5BA\uCC78\uCC79\uCC7A\uDEC2\uCC7B\uCC7C\uCC7D"+
-            "\uCC7E\uCC80\uCC81\uCC82\uCC83\uCC84\uCC85\uCC86"+
-            "\uCC87\uCC88\uCC89\uCC8A\uCC8B\uF2AE\uBBA2\uC2B2"+
-            "\uC5B0\uC2C7\uCC8C\uCC8D\uF2AF\uCC8E\uCC8F\uCC90"+
-            "\uCC91\uCC92\uD0E9\uCC93\uCC94\uCC95\uD3DD\uCC96"+
-            "\uCC97\uCC98\uEBBD\uCC99\uCC9A\uCC9B\uCC9C\uCC9D"+
-            "\uCC9E\uCC9F\uCCA0\uB3E6\uF2B0\uCD40\uF2B1\uCD41"+
-            "\uCD42\uCAAD\uCD43\uCD44\uCD45\uCD46\uCD47\uCD48"+
-            "\uCD49\uBAE7\uF2B3\uF2B5\uF2B4\uCBE4\uCFBA\uF2B2"+
-            "\uCAB4\uD2CF\uC2EC\uCD4A\uCD4B\uCD4C\uCD4D\uCD4E"+
-            "\uCD4F\uCD50\uCEC3\uF2B8\uB0F6\uF2B7\uCD51\uCD52"+
-            "\uCD53\uCD54\uCD55\uF2BE\uCD56\uB2CF\uCD57\uCD58"+
-            "\uCD59\uCD5A\uCD5B\uCD5C\uD1C1\uF2BA\uCD5D\uCD5E"+
-            "\uCD5F\uCD60\uCD61\uF2BC\uD4E9\uCD62\uCD63\uF2BB"+
-            "\uF2B6\uF2BF\uF2BD\uCD64\uF2B9\uCD65\uCD66\uF2C7"+
-            "\uF2C4\uF2C6\uCD67\uCD68\uF2CA\uF2C2\uF2C0\uCD69"+
-            "\uCD6A\uCD6B\uF2C5\uCD6C\uCD6D\uCD6E\uCD6F\uCD70"+
-            "\uD6FB\uCD71\uCD72\uCD73\uF2C1\uCD74\uC7F9\uC9DF"+
-            "\uCD75\uF2C8\uB9C6\uB5B0\uCD76\uCD77\uF2C3\uF2C9"+
-            "\uF2D0\uF2D6\uCD78\uCD79\uBBD7\uCD7A\uCD7B\uCD7C"+
-            "\uF2D5\uCDDC\uCD7D\uD6EB\uCD7E\uCD80\uF2D2\uF2D4"+
-            "\uCD81\uCD82\uCD83\uCD84\uB8F2\uCD85\uCD86\uCD87"+
-            "\uCD88\uF2CB\uCD89\uCD8A\uCD8B\uF2CE\uC2F9\uCD8C"+
-            "\uD5DD\uF2CC\uF2CD\uF2CF\uF2D3\uCD8D\uCD8E\uCD8F"+
-            "\uF2D9\uD3BC\uCD90\uCD91\uCD92\uCD93\uB6EA\uCD94"+
-            "\uCAF1\uCD95\uB7E4\uF2D7\uCD96\uCD97\uCD98\uF2D8"+
-            "\uF2DA\uF2DD\uF2DB\uCD99\uCD9A\uF2DC\uCD9B\uCD9C"+
-            "\uCD9D\uCD9E\uD1D1\uF2D1\uCD9F\uCDC9\uCDA0\uCECF"+
-            "\uD6A9\uCE40\uF2E3\uCE41\uC3DB\uCE42\uF2E0\uCE43"+
-            "\uCE44\uC0AF\uF2EC\uF2DE\uCE45\uF2E1\uCE46\uCE47"+
-            "\uCE48\uF2E8\uCE49\uCE4A\uCE4B\uCE4C\uF2E2\uCE4D"+
-            "\uCE4E\uF2E7\uCE4F\uCE50\uF2E6\uCE51\uCE52\uF2E9"+
-            "\uCE53\uCE54\uCE55\uF2DF\uCE56\uCE57\uF2E4\uF2EA"+
-            "\uCE58\uCE59\uCE5A\uCE5B\uCE5C\uCE5D\uCE5E\uD3AC"+
-            "\uF2E5\uB2F5\uCE5F\uCE60\uF2F2\uCE61\uD0AB\uCE62"+
-            "\uCE63\uCE64\uCE65\uF2F5\uCE66\uCE67\uCE68\uBBC8"+
-            "\uCE69\uF2F9\uCE6A\uCE6B\uCE6C\uCE6D\uCE6E\uCE6F"+
-            "\uF2F0\uCE70\uCE71\uF2F6\uF2F8\uF2FA\uCE72\uCE73"+
-            "\uCE74\uCE75\uCE76\uCE77\uCE78\uCE79\uF2F3\uCE7A"+
-            "\uF2F1\uCE7B\uCE7C\uCE7D\uBAFB\uCE7E\uB5FB\uCE80"+
-            "\uCE81\uCE82\uCE83\uF2EF\uF2F7\uF2ED\uF2EE\uCE84"+
-            "\uCE85\uCE86\uF2EB\uF3A6\uCE87\uF3A3\uCE88\uCE89"+
-            "\uF3A2\uCE8A\uCE8B\uF2F4\uCE8C\uC8DA\uCE8D\uCE8E"+
-            "\uCE8F\uCE90\uCE91\uF2FB\uCE92\uCE93\uCE94\uF3A5"+
-            "\uCE95\uCE96\uCE97\uCE98\uCE99\uCE9A\uCE9B\uC3F8"+
-            "\uCE9C\uCE9D\uCE9E\uCE9F\uCEA0\uCF40\uCF41\uCF42"+
-            "\uF2FD\uCF43\uCF44\uF3A7\uF3A9\uF3A4\uCF45\uF2FC"+
-            "\uCF46\uCF47\uCF48\uF3AB\uCF49\uF3AA\uCF4A\uCF4B"+
-            "\uCF4C\uCF4D\uC2DD\uCF4E\uCF4F\uF3AE\uCF50\uCF51"+
-            "\uF3B0\uCF52\uCF53\uCF54\uCF55\uCF56\uF3A1\uCF57"+
-            "\uCF58\uCF59\uF3B1\uF3AC\uCF5A\uCF5B\uCF5C\uCF5D"+
-            "\uCF5E\uF3AF\uF2FE\uF3AD\uCF5F\uCF60\uCF61\uCF62"+
-            "\uCF63\uCF64\uCF65\uF3B2\uCF66\uCF67\uCF68\uCF69"+
-            "\uF3B4\uCF6A\uCF6B\uCF6C\uCF6D\uF3A8\uCF6E\uCF6F"+
-            "\uCF70\uCF71\uF3B3\uCF72\uCF73\uCF74\uF3B5\uCF75"+
-            "\uCF76\uCF77\uCF78\uCF79\uCF7A\uCF7B\uCF7C\uCF7D"+
-            "\uCF7E\uD0B7\uCF80\uCF81\uCF82\uCF83\uF3B8\uCF84"+
-            "\uCF85\uCF86\uCF87\uD9F9\uCF88\uCF89\uCF8A\uCF8B"+
-            "\uCF8C\uCF8D\uF3B9\uCF8E\uCF8F\uCF90\uCF91\uCF92"+
-            "\uCF93\uCF94\uCF95\uF3B7\uCF96\uC8E4\uF3B6\uCF97"+
-            "\uCF98\uCF99\uCF9A\uF3BA\uCF9B\uCF9C\uCF9D\uCF9E"+
-            "\uCF9F\uF3BB\uB4C0\uCFA0\uD040\uD041\uD042\uD043"+
-            "\uD044\uD045\uD046\uD047\uD048\uD049\uD04A\uD04B"+
-            "\uD04C\uD04D\uEEC3\uD04E\uD04F\uD050\uD051\uD052"+
-            "\uD053\uF3BC\uD054\uD055\uF3BD\uD056\uD057\uD058"+
-            "\uD1AA\uD059\uD05A\uD05B\uF4AC\uD0C6\uD05C\uD05D"+
-            "\uD05E\uD05F\uD060\uD061\uD0D0\uD1DC\uD062\uD063"+
-            "\uD064\uD065\uD066\uD067\uCFCE\uD068\uD069\uBDD6"+
-            "\uD06A\uD1C3\uD06B\uD06C\uD06D\uD06E\uD06F\uD070"+
-            "\uD071\uBAE2\uE1E9\uD2C2\uF1C2\uB2B9\uD072\uD073"+
-            "\uB1ED\uF1C3\uD074\uC9C0\uB3C4\uD075\uD9F2\uD076"+
-            "\uCBA5\uD077\uF1C4\uD078\uD079\uD07A\uD07B\uD6D4"+
-            "\uD07C\uD07D\uD07E\uD080\uD081\uF1C5\uF4C0\uF1C6"+
-            "\uD082\uD4AC\uF1C7\uD083\uB0C0\uF4C1\uD084\uD085"+
-            "\uF4C2\uD086\uD087\uB4FC\uD088\uC5DB\uD089\uD08A"+
-            "\uD08B\uD08C\uCCBB\uD08D\uD08E\uD08F\uD0E4\uD090"+
-            "\uD091\uD092\uD093\uD094\uCDE0\uD095\uD096\uD097"+
-            "\uD098\uD099\uF1C8\uD09A\uD9F3\uD09B\uD09C\uD09D"+
-            "\uD09E\uD09F\uD0A0\uB1BB\uD140\uCFAE\uD141\uD142"+
-            "\uD143\uB8A4\uD144\uD145\uD146\uD147\uD148\uF1CA"+
-            "\uD149\uD14A\uD14B\uD14C\uF1CB\uD14D\uD14E\uD14F"+
-            "\uD150\uB2C3\uC1D1\uD151\uD152\uD7B0\uF1C9\uD153"+
-            "\uD154\uF1CC\uD155\uD156\uD157\uD158\uF1CE\uD159"+
-            "\uD15A\uD15B\uD9F6\uD15C\uD2E1\uD4A3\uD15D\uD15E"+
-            "\uF4C3\uC8B9\uD15F\uD160\uD161\uD162\uD163\uF4C4"+
-            "\uD164\uD165\uF1CD\uF1CF\uBFE3\uF1D0\uD166\uD167"+
-            "\uF1D4\uD168\uD169\uD16A\uD16B\uD16C\uD16D\uD16E"+
-            "\uF1D6\uF1D1\uD16F\uC9D1\uC5E1\uD170\uD171\uD172"+
-            "\uC2E3\uB9FC\uD173\uD174\uF1D3\uD175\uF1D5\uD176"+
-            "\uD177\uD178\uB9D3\uD179\uD17A\uD17B\uD17C\uD17D"+
-            "\uD17E\uD180\uF1DB\uD181\uD182\uD183\uD184\uD185"+
-            "\uBAD6\uD186\uB0FD\uF1D9\uD187\uD188\uD189\uD18A"+
-            "\uD18B\uF1D8\uF1D2\uF1DA\uD18C\uD18D\uD18E\uD18F"+
-            "\uD190\uF1D7\uD191\uD192\uD193\uC8EC\uD194\uD195"+
-            "\uD196\uD197\uCDCA\uF1DD\uD198\uD199\uD19A\uD19B"+
-            "\uE5BD\uD19C\uD19D\uD19E\uF1DC\uD19F\uF1DE\uD1A0"+
-            "\uD240\uD241\uD242\uD243\uD244\uD245\uD246\uD247"+
-            "\uD248\uF1DF\uD249\uD24A\uCFE5\uD24B\uD24C\uD24D"+
-            "\uD24E\uD24F\uD250\uD251\uD252\uD253\uD254\uD255"+
-            "\uD256\uD257\uD258\uD259\uD25A\uD25B\uD25C\uD25D"+
-            "\uD25E\uD25F\uD260\uD261\uD262\uD263\uF4C5\uBDF3"+
-            "\uD264\uD265\uD266\uD267\uD268\uD269\uF1E0\uD26A"+
-            "\uD26B\uD26C\uD26D\uD26E\uD26F\uD270\uD271\uD272"+
-            "\uD273\uD274\uD275\uD276\uD277\uD278\uD279\uD27A"+
-            "\uD27B\uD27C\uD27D\uF1E1\uD27E\uD280\uD281\uCEF7"+
-            "\uD282\uD2AA\uD283\uF1FB\uD284\uD285\uB8B2\uD286"+
-            "\uD287\uD288\uD289\uD28A\uD28B\uD28C\uD28D\uD28E"+
-            "\uD28F\uD290\uD291\uD292\uD293\uD294\uD295\uD296"+
-            "\uD297\uD298\uD299\uD29A\uD29B\uD29C\uD29D\uD29E"+
-            "\uD29F\uD2A0\uD340\uD341\uD342\uD343\uD344\uD345"+
-            "\uD346\uD347\uD348\uD349\uD34A\uD34B\uD34C\uD34D"+
-            "\uD34E\uD34F\uD350\uD351\uD352\uD353\uD354\uD355"+
-            "\uD356\uD357\uD358\uD359\uD35A\uD35B\uD35C\uD35D"+
-            "\uD35E\uBCFB\uB9DB\uD35F\uB9E6\uC3D9\uCAD3\uEAE8"+
-            "\uC0C0\uBEF5\uEAE9\uEAEA\uEAEB\uD360\uEAEC\uEAED"+
-            "\uEAEE\uEAEF\uBDC7\uD361\uD362\uD363\uF5FB\uD364"+
-            "\uD365\uD366\uF5FD\uD367\uF5FE\uD368\uF5FC\uD369"+
-            "\uD36A\uD36B\uD36C\uBDE2\uD36D\uF6A1\uB4A5\uD36E"+
-            "\uD36F\uD370\uD371\uF6A2\uD372\uD373\uD374\uF6A3"+
-            "\uD375\uD376\uD377\uECB2\uD378\uD379\uD37A\uD37B"+
-            "\uD37C\uD37D\uD37E\uD380\uD381\uD382\uD383\uD384"+
-            "\uD1D4\uD385\uD386\uD387\uD388\uD389\uD38A\uD9EA"+
-            "\uD38B\uD38C\uD38D\uD38E\uD38F\uD390\uD391\uD392"+
-            "\uD393\uD394\uD395\uD396\uD397\uD398\uD399\uD39A"+
-            "\uD39B\uD39C\uD39D\uD39E\uD39F\uD3A0\uD440\uD441"+
-            "\uD442\uD443\uD444\uD445\uD446\uD447\uD448\uD449"+
-            "\uD44A\uD44B\uD44C\uD44D\uD44E\uD44F\uD450\uD451"+
-            "\uD452\uD453\uD454\uD455\uD456\uD457\uD458\uD459"+
-            "\uD45A\uD45B\uD45C\uD45D\uD45E\uD45F\uF6A4\uD460"+
-            "\uD461\uD462\uD463\uD464\uD465\uD466\uD467\uD468"+
-            "\uEEBA\uD469\uD46A\uD46B\uD46C\uD46D\uD46E\uD46F"+
-            "\uD470\uD471\uD472\uD473\uD474\uD475\uD476\uD477"+
-            "\uD478\uD479\uD47A\uD47B\uD47C\uD47D\uD47E\uD480"+
-            "\uD481\uD482\uD483\uD484\uD485\uD486\uD487\uD488"+
-            "\uD489\uD48A\uD48B\uD48C\uD48D\uD48E\uD48F\uD490"+
-            "\uD491\uD492\uD493\uD494\uD495\uD496\uD497\uD498"+
-            "\uD499\uD5B2\uD49A\uD49B\uD49C\uD49D\uD49E\uD49F"+
-            "\uD4A0\uD540\uD541\uD542\uD543\uD544\uD545\uD546"+
-            "\uD547\uD3FE\uCCDC\uD548\uD549\uD54A\uD54B\uD54C"+
-            "\uD54D\uD54E\uD54F\uCAC4\uD550\uD551\uD552\uD553"+
-            "\uD554\uD555\uD556\uD557\uD558\uD559\uD55A\uD55B"+
-            "\uD55C\uD55D\uD55E\uD55F\uD560\uD561\uD562\uD563"+
-            "\uD564\uD565\uD566\uD567\uD568\uD569\uD56A\uD56B"+
-            "\uD56C\uD56D\uD56E\uD56F\uD570\uD571\uD572\uD573"+
-            "\uD574\uD575\uD576\uD577\uD578\uD579\uD57A\uD57B"+
-            "\uD57C\uD57D\uD57E\uD580\uD581\uD582\uD583\uD584"+
-            "\uD585\uD586\uD587\uD588\uD589\uD58A\uD58B\uD58C"+
-            "\uD58D\uD58E\uD58F\uD590\uD591\uD592\uD593\uD594"+
-            "\uD595\uD596\uD597\uD598\uD599\uD59A\uD59B\uD59C"+
-            "\uD59D\uD59E\uD59F\uD5A0\uD640\uD641\uD642\uD643"+
-            "\uD644\uD645\uD646\uD647\uD648\uD649\uD64A\uD64B"+
-            "\uD64C\uD64D\uD64E\uD64F\uD650\uD651\uD652\uD653"+
-            "\uD654\uD655\uD656\uD657\uD658\uD659\uD65A\uD65B";
-
-        private final static String innerIndex6=
-            "\uD65C\uD65D\uD65E\uD65F\uD660\uD661\uD662\uE5C0"+
-            "\uD663\uD664\uD665\uD666\uD667\uD668\uD669\uD66A"+
-            "\uD66B\uD66C\uD66D\uD66E\uD66F\uD670\uD671\uD672"+
-            "\uD673\uD674\uD675\uD676\uD677\uD678\uD679\uD67A"+
-            "\uD67B\uD67C\uD67D\uD67E\uD680\uD681\uF6A5\uD682"+
-            "\uD683\uD684\uD685\uD686\uD687\uD688\uD689\uD68A"+
-            "\uD68B\uD68C\uD68D\uD68E\uD68F\uD690\uD691\uD692"+
-            "\uD693\uD694\uD695\uD696\uD697\uD698\uD699\uD69A"+
-            "\uD69B\uD69C\uD69D\uD69E\uD69F\uD6A0\uD740\uD741"+
-            "\uD742\uD743\uD744\uD745\uD746\uD747\uD748\uD749"+
-            "\uD74A\uD74B\uD74C\uD74D\uD74E\uD74F\uD750\uD751"+
-            "\uD752\uD753\uD754\uD755\uD756\uD757\uD758\uD759"+
-            "\uD75A\uD75B\uD75C\uD75D\uD75E\uD75F\uBEAF\uD760"+
-            "\uD761\uD762\uD763\uD764\uC6A9\uD765\uD766\uD767"+
-            "\uD768\uD769\uD76A\uD76B\uD76C\uD76D\uD76E\uD76F"+
-            "\uD770\uD771\uD772\uD773\uD774\uD775\uD776\uD777"+
-            "\uD778\uD779\uD77A\uD77B\uD77C\uD77D\uD77E\uD780"+
-            "\uD781\uD782\uD783\uD784\uD785\uD786\uD787\uD788"+
-            "\uD789\uD78A\uD78B\uD78C\uD78D\uD78E\uD78F\uD790"+
-            "\uD791\uD792\uD793\uD794\uD795\uD796\uD797\uD798"+
-            "\uDAA5\uBCC6\uB6A9\uB8BC\uC8CF\uBCA5\uDAA6\uDAA7"+
-            "\uCCD6\uC8C3\uDAA8\uC6FD\uD799\uD1B5\uD2E9\uD1B6"+
-            "\uBCC7\uD79A\uBDB2\uBBE4\uDAA9\uDAAA\uD1C8\uDAAB"+
-            "\uD0ED\uB6EF\uC2DB\uD79B\uCBCF\uB7ED\uC9E8\uB7C3"+
-            "\uBEF7\uD6A4\uDAAC\uDAAD\uC6C0\uD7E7\uCAB6\uD79C"+
-            "\uD5A9\uCBDF\uD5EF\uDAAE\uD6DF\uB4CA\uDAB0\uDAAF"+
-            "\uD79D\uD2EB\uDAB1\uDAB2\uDAB3\uCAD4\uDAB4\uCAAB"+
-            "\uDAB5\uDAB6\uB3CF\uD6EF\uDAB7\uBBB0\uB5AE\uDAB8"+
-            "\uDAB9\uB9EE\uD1AF\uD2E8\uDABA\uB8C3\uCFEA\uB2EF"+
-            "\uDABB\uDABC\uD79E\uBDEB\uCEDC\uD3EF\uDABD\uCEF3"+
-            "\uDABE\uD3D5\uBBE5\uDABF\uCBB5\uCBD0\uDAC0\uC7EB"+
-            "\uD6EE\uDAC1\uC5B5\uB6C1\uDAC2\uB7CC\uBFCE\uDAC3"+
-            "\uDAC4\uCBAD\uDAC5\uB5F7\uDAC6\uC1C2\uD7BB\uDAC7"+
-            "\uCCB8\uD79F\uD2EA\uC4B1\uDAC8\uB5FD\uBBD1\uDAC9"+
-            "\uD0B3\uDACA\uDACB\uCEBD\uDACC\uDACD\uDACE\uB2F7"+
-            "\uDAD1\uDACF\uD1E8\uDAD0\uC3D5\uDAD2\uD7A0\uDAD3"+
-            "\uDAD4\uDAD5\uD0BB\uD2A5\uB0F9\uDAD6\uC7AB\uDAD7"+
-            "\uBDF7\uC3A1\uDAD8\uDAD9\uC3FD\uCCB7\uDADA\uDADB"+
-            "\uC0BE\uC6D7\uDADC\uDADD\uC7B4\uDADE\uDADF\uB9C8"+
-            "\uD840\uD841\uD842\uD843\uD844\uD845\uD846\uD847"+
-            "\uD848\uBBED\uD849\uD84A\uD84B\uD84C\uB6B9\uF4F8"+
-            "\uD84D\uF4F9\uD84E\uD84F\uCDE3\uD850\uD851\uD852"+
-            "\uD853\uD854\uD855\uD856\uD857\uF5B9\uD858\uD859"+
-            "\uD85A\uD85B\uEBE0\uD85C\uD85D\uD85E\uD85F\uD860"+
-            "\uD861\uCFF3\uBBBF\uD862\uD863\uD864\uD865\uD866"+
-            "\uD867\uD868\uBAC0\uD4A5\uD869\uD86A\uD86B\uD86C"+
-            "\uD86D\uD86E\uD86F\uE1D9\uD870\uD871\uD872\uD873"+
-            "\uF5F4\uB1AA\uB2F2\uD874\uD875\uD876\uD877\uD878"+
-            "\uD879\uD87A\uF5F5\uD87B\uD87C\uF5F7\uD87D\uD87E"+
-            "\uD880\uBAD1\uF5F6\uD881\uC3B2\uD882\uD883\uD884"+
-            "\uD885\uD886\uD887\uD888\uF5F9\uD889\uD88A\uD88B"+
-            "\uF5F8\uD88C\uD88D\uD88E\uD88F\uD890\uD891\uD892"+
-            "\uD893\uD894\uD895\uD896\uD897\uD898\uD899\uD89A"+
-            "\uD89B\uD89C\uD89D\uD89E\uD89F\uD8A0\uD940\uD941"+
-            "\uD942\uD943\uD944\uD945\uD946\uD947\uD948\uD949"+
-            "\uD94A\uD94B\uD94C\uD94D\uD94E\uD94F\uD950\uD951"+
-            "\uD952\uD953\uD954\uD955\uD956\uD957\uD958\uD959"+
-            "\uD95A\uD95B\uD95C\uD95D\uD95E\uD95F\uD960\uD961"+
-            "\uD962\uD963\uD964\uD965\uD966\uD967\uD968\uD969"+
-            "\uD96A\uD96B\uD96C\uD96D\uD96E\uD96F\uD970\uD971"+
-            "\uD972\uD973\uD974\uD975\uD976\uD977\uD978\uD979"+
-            "\uD97A\uD97B\uD97C\uD97D\uD97E\uD980\uD981\uD982"+
-            "\uD983\uD984\uD985\uD986\uD987\uD988\uD989\uD98A"+
-            "\uD98B\uD98C\uD98D\uD98E\uD98F\uD990\uD991\uD992"+
-            "\uD993\uD994\uD995\uD996\uD997\uD998\uD999\uD99A"+
-            "\uD99B\uD99C\uD99D\uD99E\uD99F\uD9A0\uDA40\uDA41"+
-            "\uDA42\uDA43\uDA44\uDA45\uDA46\uDA47\uDA48\uDA49"+
-            "\uDA4A\uDA4B\uDA4C\uDA4D\uDA4E\uB1B4\uD5EA\uB8BA"+
-            "\uDA4F\uB9B1\uB2C6\uD4F0\uCFCD\uB0DC\uD5CB\uBBF5"+
-            "\uD6CA\uB7B7\uCCB0\uC6B6\uB1E1\uB9BA\uD6FC\uB9E1"+
-            "\uB7A1\uBCFA\uEADA\uEADB\uCCF9\uB9F3\uEADC\uB4FB"+
-            "\uC3B3\uB7D1\uBAD8\uEADD\uD4F4\uEADE\uBCD6\uBBDF"+
-            "\uEADF\uC1DE\uC2B8\uD4DF\uD7CA\uEAE0\uEAE1\uEAE4"+
-            "\uEAE2\uEAE3\uC9DE\uB8B3\uB6C4\uEAE5\uCAEA\uC9CD"+
-            "\uB4CD\uDA50\uDA51\uE2D9\uC5E2\uEAE6\uC0B5\uDA52"+
-            "\uD7B8\uEAE7\uD7AC\uC8FC\uD8D3\uD8CD\uD4DE\uDA53"+
-            "\uD4F9\uC9C4\uD3AE\uB8D3\uB3E0\uDA54\uC9E2\uF4F6"+
-            "\uDA55\uDA56\uDA57\uBAD5\uDA58\uF4F7\uDA59\uDA5A"+
-            "\uD7DF\uDA5B\uDA5C\uF4F1\uB8B0\uD5D4\uB8CF\uC6F0"+
-            "\uDA5D\uDA5E\uDA5F\uDA60\uDA61\uDA62\uDA63\uDA64"+
-            "\uDA65\uB3C3\uDA66\uDA67\uF4F2\uB3AC\uDA68\uDA69"+
-            "\uDA6A\uDA6B\uD4BD\uC7F7\uDA6C\uDA6D\uDA6E\uDA6F"+
-            "\uDA70\uF4F4\uDA71\uDA72\uF4F3\uDA73\uDA74\uDA75"+
-            "\uDA76\uDA77\uDA78\uDA79\uDA7A\uDA7B\uDA7C\uCCCB"+
-            "\uDA7D\uDA7E\uDA80\uC8A4\uDA81\uDA82\uDA83\uDA84"+
-            "\uDA85\uDA86\uDA87\uDA88\uDA89\uDA8A\uDA8B\uDA8C"+
-            "\uDA8D\uF4F5\uDA8E\uD7E3\uC5BF\uF5C0\uDA8F\uDA90"+
-            "\uF5BB\uDA91\uF5C3\uDA92\uF5C2\uDA93\uD6BA\uF5C1"+
-            "\uDA94\uDA95\uDA96\uD4BE\uF5C4\uDA97\uF5CC\uDA98"+
-            "\uDA99\uDA9A\uDA9B\uB0CF\uB5F8\uDA9C\uF5C9\uF5CA"+
-            "\uDA9D\uC5DC\uDA9E\uDA9F\uDAA0\uDB40\uF5C5\uF5C6"+
-            "\uDB41\uDB42\uF5C7\uF5CB\uDB43\uBEE0\uF5C8\uB8FA"+
-            "\uDB44\uDB45\uDB46\uF5D0\uF5D3\uDB47\uDB48\uDB49"+
-            "\uBFE7\uDB4A\uB9F2\uF5BC\uF5CD\uDB4B\uDB4C\uC2B7"+
-            "\uDB4D\uDB4E\uDB4F\uCCF8\uDB50\uBCF9\uDB51\uF5CE"+
-            "\uF5CF\uF5D1\uB6E5\uF5D2\uDB52\uF5D5\uDB53\uDB54"+
-            "\uDB55\uDB56\uDB57\uDB58\uDB59\uF5BD\uDB5A\uDB5B"+
-            "\uDB5C\uF5D4\uD3BB\uDB5D\uB3EC\uDB5E\uDB5F\uCCA4"+
-            "\uDB60\uDB61\uDB62\uDB63\uF5D6\uDB64\uDB65\uDB66"+
-            "\uDB67\uDB68\uDB69\uDB6A\uDB6B\uF5D7\uBEE1\uF5D8"+
-            "\uDB6C\uDB6D\uCCDF\uF5DB\uDB6E\uDB6F\uDB70\uDB71"+
-            "\uDB72\uB2C8\uD7D9\uDB73\uF5D9\uDB74\uF5DA\uF5DC"+
-            "\uDB75\uF5E2\uDB76\uDB77\uDB78\uF5E0\uDB79\uDB7A"+
-            "\uDB7B\uF5DF\uF5DD\uDB7C\uDB7D\uF5E1\uDB7E\uDB80"+
-            "\uF5DE\uF5E4\uF5E5\uDB81\uCCE3\uDB82\uDB83\uE5BF"+
-            "\uB5B8\uF5E3\uF5E8\uCCA3\uDB84\uDB85\uDB86\uDB87"+
-            "\uDB88\uF5E6\uF5E7\uDB89\uDB8A\uDB8B\uDB8C\uDB8D"+
-            "\uDB8E\uF5BE\uDB8F\uDB90\uDB91\uDB92\uDB93\uDB94"+
-            "\uDB95\uDB96\uDB97\uDB98\uDB99\uDB9A\uB1C4\uDB9B"+
-            "\uDB9C\uF5BF\uDB9D\uDB9E\uB5C5\uB2E4\uDB9F\uF5EC"+
-            "\uF5E9\uDBA0\uB6D7\uDC40\uF5ED\uDC41\uF5EA\uDC42"+
-            "\uDC43\uDC44\uDC45\uDC46\uF5EB\uDC47\uDC48\uB4DA"+
-            "\uDC49\uD4EA\uDC4A\uDC4B\uDC4C\uF5EE\uDC4D\uB3F9"+
-            "\uDC4E\uDC4F\uDC50\uDC51\uDC52\uDC53\uDC54\uF5EF"+
-            "\uF5F1\uDC55\uDC56\uDC57\uF5F0\uDC58\uDC59\uDC5A"+
-            "\uDC5B\uDC5C\uDC5D\uDC5E\uF5F2\uDC5F\uF5F3\uDC60"+
-            "\uDC61\uDC62\uDC63\uDC64\uDC65\uDC66\uDC67\uDC68"+
-            "\uDC69\uDC6A\uDC6B\uC9ED\uB9AA\uDC6C\uDC6D\uC7FB"+
-            "\uDC6E\uDC6F\uB6E3\uDC70\uDC71\uDC72\uDC73\uDC74"+
-            "\uDC75\uDC76\uCCC9\uDC77\uDC78\uDC79\uDC7A\uDC7B"+
-            "\uDC7C\uDC7D\uDC7E\uDC80\uDC81\uDC82\uDC83\uDC84"+
-            "\uDC85\uDC86\uDC87\uDC88\uDC89\uDC8A\uEAA6\uDC8B"+
-            "\uDC8C\uDC8D\uDC8E\uDC8F\uDC90\uDC91\uDC92\uDC93"+
-            "\uDC94\uDC95\uDC96\uDC97\uDC98\uDC99\uDC9A\uDC9B"+
-            "\uDC9C\uDC9D\uDC9E\uDC9F\uDCA0\uDD40\uDD41\uDD42"+
-            "\uDD43\uDD44\uDD45\uDD46\uDD47\uDD48\uDD49\uDD4A"+
-            "\uDD4B\uDD4C\uDD4D\uDD4E\uDD4F\uDD50\uDD51\uDD52"+
-            "\uDD53\uDD54\uDD55\uDD56\uDD57\uDD58\uDD59\uDD5A"+
-            "\uDD5B\uDD5C\uDD5D\uDD5E\uDD5F\uDD60\uDD61\uDD62"+
-            "\uDD63\uDD64\uDD65\uDD66\uDD67\uDD68\uDD69\uDD6A"+
-            "\uDD6B\uDD6C\uDD6D\uDD6E\uDD6F\uDD70\uDD71\uDD72"+
-            "\uDD73\uDD74\uDD75\uDD76\uDD77\uDD78\uDD79\uDD7A"+
-            "\uDD7B\uDD7C\uDD7D\uDD7E\uDD80\uDD81\uDD82\uDD83"+
-            "\uDD84\uDD85\uDD86\uDD87\uDD88\uDD89\uDD8A\uDD8B"+
-            "\uDD8C\uDD8D\uDD8E\uDD8F\uDD90\uDD91\uDD92\uDD93"+
-            "\uDD94\uDD95\uDD96\uDD97\uDD98\uDD99\uDD9A\uDD9B"+
-            "\uDD9C\uDD9D\uDD9E\uDD9F\uDDA0\uDE40\uDE41\uDE42"+
-            "\uDE43\uDE44\uDE45\uDE46\uDE47\uDE48\uDE49\uDE4A"+
-            "\uDE4B\uDE4C\uDE4D\uDE4E\uDE4F\uDE50\uDE51\uDE52"+
-            "\uDE53\uDE54\uDE55\uDE56\uDE57\uDE58\uDE59\uDE5A"+
-            "\uDE5B\uDE5C\uDE5D\uDE5E\uDE5F\uDE60\uB3B5\uD4FE"+
-            "\uB9EC\uD0F9\uDE61\uE9ED\uD7AA\uE9EE\uC2D6\uC8ED"+
-            "\uBAE4\uE9EF\uE9F0\uE9F1\uD6E1\uE9F2\uE9F3\uE9F5"+
-            "\uE9F4\uE9F6\uE9F7\uC7E1\uE9F8\uD4D8\uE9F9\uBDCE"+
-            "\uDE62\uE9FA\uE9FB\uBDCF\uE9FC\uB8A8\uC1BE\uE9FD"+
-            "\uB1B2\uBBD4\uB9F5\uE9FE\uDE63\uEAA1\uEAA2\uEAA3"+
-            "\uB7F8\uBCAD\uDE64\uCAE4\uE0CE\uD4AF\uCFBD\uD5B7"+
-            "\uEAA4\uD5DE\uEAA5\uD0C1\uB9BC\uDE65\uB4C7\uB1D9"+
-            "\uDE66\uDE67\uDE68\uC0B1\uDE69\uDE6A\uDE6B\uDE6C"+
-            "\uB1E6\uB1E7\uDE6D\uB1E8\uDE6E\uDE6F\uDE70\uDE71"+
-            "\uB3BD\uC8E8\uDE72\uDE73\uDE74\uDE75\uE5C1\uDE76"+
-            "\uDE77\uB1DF\uDE78\uDE79\uDE7A\uC1C9\uB4EF\uDE7B"+
-            "\uDE7C\uC7A8\uD3D8\uDE7D\uC6F9\uD1B8\uDE7E\uB9FD"+
-            "\uC2F5\uDE80\uDE81\uDE82\uDE83\uDE84\uD3AD\uDE85"+
-            "\uD4CB\uBDFC\uDE86\uE5C2\uB7B5\uE5C3\uDE87\uDE88"+
-            "\uBBB9\uD5E2\uDE89\uBDF8\uD4B6\uCEA5\uC1AC\uB3D9"+
-            "\uDE8A\uDE8B\uCCF6\uDE8C\uE5C6\uE5C4\uE5C8\uDE8D"+
-            "\uE5CA\uE5C7\uB5CF\uC6C8\uDE8E\uB5FC\uE5C5\uDE8F"+
-            "\uCAF6\uDE90\uDE91\uE5C9\uDE92\uDE93\uDE94\uC3D4"+
-            "\uB1C5\uBCA3\uDE95\uDE96\uDE97\uD7B7\uDE98\uDE99"+
-            "\uCDCB\uCBCD\uCACA\uCCD3\uE5CC\uE5CB\uC4E6\uDE9A"+
-            "\uDE9B\uD1A1\uD1B7\uE5CD\uDE9C\uE5D0\uDE9D\uCDB8"+
-            "\uD6F0\uE5CF\uB5DD\uDE9E\uCDBE\uDE9F\uE5D1\uB6BA"+
-            "\uDEA0\uDF40\uCDA8\uB9E4\uDF41\uCAC5\uB3D1\uCBD9"+
-            "\uD4EC\uE5D2\uB7EA\uDF42\uDF43\uDF44\uE5CE\uDF45"+
-            "\uDF46\uDF47\uDF48\uDF49\uDF4A\uE5D5\uB4FE\uE5D6"+
-            "\uDF4B\uDF4C\uDF4D\uDF4E\uDF4F\uE5D3\uE5D4\uDF50"+
-            "\uD2DD\uDF51\uDF52\uC2DF\uB1C6\uDF53\uD3E2\uDF54"+
-            "\uDF55\uB6DD\uCBEC\uDF56\uE5D7\uDF57\uDF58\uD3F6"+
-            "\uDF59\uDF5A\uDF5B\uDF5C\uDF5D\uB1E9\uDF5E\uB6F4"+
-            "\uE5DA\uE5D8\uE5D9\uB5C0\uDF5F\uDF60\uDF61\uD2C5"+
-            "\uE5DC\uDF62\uDF63\uE5DE\uDF64\uDF65\uDF66\uDF67"+
-            "\uDF68\uDF69\uE5DD\uC7B2\uDF6A\uD2A3\uDF6B\uDF6C"+
-            "\uE5DB\uDF6D\uDF6E\uDF6F\uDF70\uD4E2\uD5DA\uDF71"+
-            "\uDF72\uDF73\uDF74\uDF75\uE5E0\uD7F1\uDF76\uDF77"+
-            "\uDF78\uDF79\uDF7A\uDF7B\uDF7C\uE5E1\uDF7D\uB1DC"+
-            "\uD1FB\uDF7E\uE5E2\uE5E4\uDF80\uDF81\uDF82\uDF83"+
-            "\uE5E3\uDF84\uDF85\uE5E5\uDF86\uDF87\uDF88\uDF89"+
-            "\uDF8A\uD2D8\uDF8B\uB5CB\uDF8C\uE7DF\uDF8D\uDAF5"+
-            "\uDF8E\uDAF8\uDF8F\uDAF6\uDF90\uDAF7\uDF91\uDF92"+
-            "\uDF93\uDAFA\uD0CF\uC4C7\uDF94\uDF95\uB0EE\uDF96"+
-            "\uDF97\uDF98\uD0B0\uDF99\uDAF9\uDF9A\uD3CA\uBAAA"+
-            "\uDBA2\uC7F1\uDF9B\uDAFC\uDAFB\uC9DB\uDAFD\uDF9C"+
-            "\uDBA1\uD7DE\uDAFE\uC1DA\uDF9D\uDF9E\uDBA5\uDF9F"+
-            "\uDFA0\uD3F4\uE040\uE041\uDBA7\uDBA4\uE042\uDBA8"+
-            "\uE043\uE044\uBDBC\uE045\uE046\uE047\uC0C9\uDBA3"+
-            "\uDBA6\uD6A3\uE048\uDBA9\uE049\uE04A\uE04B\uDBAD"+
-            "\uE04C\uE04D\uE04E\uDBAE\uDBAC\uBAC2\uE04F\uE050"+
-            "\uE051\uBFA4\uDBAB\uE052\uE053\uE054\uDBAA\uD4C7"+
-            "\uB2BF\uE055\uE056\uDBAF\uE057\uB9F9\uE058\uDBB0"+
-            "\uE059\uE05A\uE05B\uE05C\uB3BB\uE05D\uE05E\uE05F"+
-            "\uB5A6\uE060\uE061\uE062\uE063\uB6BC\uDBB1\uE064"+
-            "\uE065\uE066\uB6F5\uE067\uDBB2\uE068\uE069\uE06A"+
-            "\uE06B\uE06C\uE06D\uE06E\uE06F\uE070\uE071\uE072"+
-            "\uE073\uE074\uE075\uE076\uE077\uE078\uE079\uE07A"+
-            "\uE07B\uB1C9\uE07C\uE07D\uE07E\uE080\uDBB4\uE081"+
-            "\uE082\uE083\uDBB3\uDBB5\uE084\uE085\uE086\uE087"+
-            "\uE088\uE089\uE08A\uE08B\uE08C\uE08D\uE08E\uDBB7"+
-            "\uE08F\uDBB6\uE090\uE091\uE092\uE093\uE094\uE095"+
-            "\uE096\uDBB8\uE097\uE098\uE099\uE09A\uE09B\uE09C"+
-            "\uE09D\uE09E\uE09F\uDBB9\uE0A0\uE140\uDBBA\uE141"+
-            "\uE142\uD3CF\uF4FA\uC7F5\uD7C3\uC5E4\uF4FC\uF4FD"+
-            "\uF4FB\uE143\uBEC6\uE144\uE145\uE146\uE147\uD0EF"+
-            "\uE148\uE149\uB7D3\uE14A\uE14B\uD4CD\uCCAA\uE14C"+
-            "\uE14D\uF5A2\uF5A1\uBAA8\uF4FE\uCBD6\uE14E\uE14F"+
-            "\uE150\uF5A4\uC0D2\uE151\uB3EA\uE152\uCDAA\uF5A5"+
-            "\uF5A3\uBDB4\uF5A8\uE153\uF5A9\uBDCD\uC3B8\uBFE1"+
-            "\uCBE1\uF5AA\uE154\uE155\uE156\uF5A6\uF5A7\uC4F0"+
-            "\uE157\uE158\uE159\uE15A\uE15B\uF5AC\uE15C\uB4BC"+
-            "\uE15D\uD7ED\uE15E\uB4D7\uF5AB\uF5AE\uE15F\uE160"+
-            "\uF5AD\uF5AF\uD0D1\uE161\uE162\uE163\uE164\uE165"+
-            "\uE166\uE167\uC3D1\uC8A9\uE168\uE169\uE16A\uE16B"+
-            "\uE16C\uE16D\uF5B0\uF5B1\uE16E\uE16F\uE170\uE171"+
-            "\uE172\uE173\uF5B2\uE174\uE175\uF5B3\uF5B4\uF5B5"+
-            "\uE176\uE177\uE178\uE179\uF5B7\uF5B6\uE17A\uE17B"+
-            "\uE17C\uE17D\uF5B8\uE17E\uE180\uE181\uE182\uE183"+
-            "\uE184\uE185\uE186\uE187\uE188\uE189\uE18A\uB2C9"+
-            "\uE18B\uD3D4\uCACD\uE18C\uC0EF\uD6D8\uD2B0\uC1BF"+
-            "\uE18D\uBDF0\uE18E\uE18F\uE190\uE191\uE192\uE193"+
-            "\uE194\uE195\uE196\uE197\uB8AA\uE198\uE199\uE19A"+
-            "\uE19B\uE19C\uE19D\uE19E\uE19F\uE1A0\uE240\uE241"+
-            "\uE242\uE243\uE244\uE245\uE246\uE247\uE248\uE249"+
-            "\uE24A\uE24B\uE24C\uE24D\uE24E\uE24F\uE250\uE251"+
-            "\uE252\uE253\uE254\uE255\uE256\uE257\uE258\uE259"+
-            "\uE25A\uE25B\uE25C\uE25D\uE25E\uE25F\uE260\uE261"+
-            "\uE262\uE263\uE264\uE265\uE266\uE267\uE268\uE269"+
-            "\uE26A\uE26B\uE26C\uE26D\uE26E\uE26F\uE270\uE271"+
-            "\uE272\uE273\uE274\uE275\uE276\uE277\uE278\uE279"+
-            "\uE27A\uE27B\uE27C\uE27D\uE27E\uE280\uE281\uE282"+
-            "\uE283\uE284\uE285\uE286\uE287\uE288\uE289\uE28A"+
-            "\uE28B\uE28C\uE28D\uE28E\uE28F\uE290\uE291\uE292"+
-            "\uE293\uE294\uE295\uE296\uE297\uE298\uE299\uE29A"+
-            "\uE29B\uE29C\uE29D\uE29E\uE29F\uE2A0\uE340\uE341"+
-            "\uE342\uE343\uE344\uE345\uE346\uE347\uE348\uE349"+
-            "\uE34A\uE34B\uE34C\uE34D\uE34E\uE34F\uE350\uE351"+
-            "\uE352\uE353\uE354\uE355\uE356\uE357\uE358\uE359"+
-            "\uE35A\uE35B\uE35C\uE35D\uE35E\uE35F\uE360\uE361"+
-            "\uE362\uE363\uE364\uE365\uE366\uE367\uE368\uE369"+
-            "\uE36A\uE36B\uE36C\uE36D\uBCF8\uE36E\uE36F\uE370"+
-            "\uE371\uE372\uE373\uE374\uE375\uE376\uE377\uE378"+
-            "\uE379\uE37A\uE37B\uE37C\uE37D\uE37E\uE380\uE381"+
-            "\uE382\uE383\uE384\uE385\uE386\uE387\uF6C6\uE388"+
-            "\uE389\uE38A\uE38B\uE38C\uE38D\uE38E\uE38F\uE390"+
-            "\uE391\uE392\uE393\uE394\uE395\uE396\uE397\uE398"+
-            "\uE399\uE39A\uE39B\uE39C\uE39D\uE39E\uE39F\uE3A0"+
-            "\uE440\uE441\uE442\uE443\uE444\uE445\uF6C7\uE446"+
-            "\uE447\uE448\uE449\uE44A\uE44B\uE44C\uE44D\uE44E"+
-            "\uE44F\uE450\uE451\uE452\uE453\uE454\uE455\uE456"+
-            "\uE457\uE458\uE459\uE45A\uE45B\uE45C\uE45D\uE45E"+
-            "\uF6C8\uE45F\uE460\uE461\uE462\uE463\uE464\uE465"+
-            "\uE466\uE467\uE468\uE469\uE46A\uE46B\uE46C\uE46D"+
-            "\uE46E\uE46F\uE470\uE471\uE472\uE473\uE474\uE475"+
-            "\uE476\uE477\uE478\uE479\uE47A\uE47B\uE47C\uE47D"+
-            "\uE47E\uE480\uE481\uE482\uE483\uE484\uE485\uE486"+
-            "\uE487\uE488\uE489\uE48A\uE48B\uE48C\uE48D\uE48E"+
-            "\uE48F\uE490\uE491\uE492\uE493\uE494\uE495\uE496"+
-            "\uE497\uE498\uE499\uE49A\uE49B\uE49C\uE49D\uE49E"+
-            "\uE49F\uE4A0\uE540\uE541\uE542\uE543\uE544\uE545"+
-            "\uE546\uE547\uE548\uE549\uE54A\uE54B\uE54C\uE54D"+
-            "\uE54E\uE54F\uE550\uE551\uE552\uE553\uE554\uE555"+
-            "\uE556\uE557\uE558\uE559\uE55A\uE55B\uE55C\uE55D"+
-            "\uE55E\uE55F\uE560\uE561\uE562\uE563\uE564\uE565"+
-            "\uE566\uE567\uE568\uE569\uE56A\uE56B\uE56C\uE56D"+
-            "\uE56E\uE56F\uE570\uE571\uE572\uE573\uF6C9\uE574"+
-            "\uE575\uE576\uE577\uE578\uE579\uE57A\uE57B\uE57C"+
-            "\uE57D\uE57E\uE580\uE581\uE582\uE583\uE584\uE585"+
-            "\uE586\uE587\uE588\uE589\uE58A\uE58B\uE58C\uE58D"+
-            "\uE58E\uE58F\uE590\uE591\uE592\uE593\uE594\uE595"+
-            "\uE596\uE597\uE598\uE599\uE59A\uE59B\uE59C\uE59D"+
-            "\uE59E\uE59F\uF6CA\uE5A0\uE640\uE641\uE642\uE643"+
-            "\uE644\uE645\uE646\uE647\uE648\uE649\uE64A\uE64B"+
-            "\uE64C\uE64D\uE64E\uE64F\uE650\uE651\uE652\uE653"+
-            "\uE654\uE655\uE656\uE657\uE658\uE659\uE65A\uE65B"+
-            "\uE65C\uE65D\uE65E\uE65F\uE660\uE661\uE662\uF6CC"+
-            "\uE663\uE664\uE665\uE666\uE667\uE668\uE669\uE66A"+
-            "\uE66B\uE66C\uE66D\uE66E\uE66F\uE670\uE671\uE672"+
-            "\uE673\uE674\uE675\uE676\uE677\uE678\uE679\uE67A"+
-            "\uE67B\uE67C\uE67D\uE67E\uE680\uE681\uE682\uE683"+
-            "\uE684\uE685\uE686\uE687\uE688\uE689\uE68A\uE68B"+
-            "\uE68C\uE68D\uE68E\uE68F\uE690\uE691\uE692\uE693"+
-            "\uE694\uE695\uE696\uE697\uE698\uE699\uE69A\uE69B"+
-            "\uE69C\uE69D\uF6CB\uE69E\uE69F\uE6A0\uE740\uE741"+
-            "\uE742\uE743\uE744\uE745\uE746\uE747\uF7E9\uE748"+
-            "\uE749\uE74A\uE74B\uE74C\uE74D\uE74E\uE74F\uE750"+
-            "\uE751\uE752\uE753\uE754\uE755\uE756\uE757\uE758"+
-            "\uE759\uE75A\uE75B\uE75C\uE75D\uE75E\uE75F\uE760"+
-            "\uE761\uE762\uE763\uE764\uE765\uE766\uE767\uE768"+
-            "\uE769\uE76A\uE76B\uE76C\uE76D\uE76E\uE76F\uE770"+
-            "\uE771\uE772\uE773\uE774\uE775\uE776\uE777\uE778"+
-            "\uE779\uE77A\uE77B\uE77C\uE77D\uE77E\uE780\uE781"+
-            "\uE782\uE783\uE784\uE785\uE786\uE787\uE788\uE789"+
-            "\uE78A\uE78B\uE78C\uE78D\uE78E\uE78F\uE790\uE791"+
-            "\uE792\uE793\uE794\uE795\uE796\uE797\uE798\uE799"+
-            "\uE79A\uE79B\uE79C\uE79D\uE79E\uE79F\uE7A0\uE840"+
-            "\uE841\uE842\uE843\uE844\uE845\uE846\uE847\uE848"+
-            "\uE849\uE84A\uE84B\uE84C\uE84D\uE84E\uF6CD\uE84F"+
-            "\uE850\uE851\uE852\uE853\uE854\uE855\uE856\uE857"+
-            "\uE858\uE859\uE85A\uE85B\uE85C\uE85D\uE85E\uE85F"+
-            "\uE860\uE861\uE862\uE863\uE864\uE865\uE866\uE867"+
-            "\uE868\uE869\uE86A\uE86B\uE86C\uE86D\uE86E\uE86F"+
-            "\uE870\uE871\uE872\uE873\uE874\uE875\uE876\uE877"+
-            "\uE878\uE879\uE87A\uF6CE\uE87B\uE87C\uE87D\uE87E"+
-            "\uE880\uE881\uE882\uE883\uE884\uE885\uE886\uE887"+
-            "\uE888\uE889\uE88A\uE88B\uE88C\uE88D\uE88E\uE88F"+
-            "\uE890\uE891\uE892\uE893\uE894\uEEC4\uEEC5\uEEC6"+
-            "\uD5EB\uB6A4\uEEC8\uEEC7\uEEC9\uEECA\uC7A5\uEECB"+
-            "\uEECC\uE895\uB7B0\uB5F6\uEECD\uEECF\uE896\uEECE"+
-            "\uE897\uB8C6\uEED0\uEED1\uEED2\uB6DB\uB3AE\uD6D3"+
-            "\uC4C6\uB1B5\uB8D6\uEED3\uEED4\uD4BF\uC7D5\uBEFB"+
-            "\uCED9\uB9B3\uEED6\uEED5\uEED8\uEED7\uC5A5\uEED9"+
-            "\uEEDA\uC7AE\uEEDB\uC7AF\uEEDC\uB2A7\uEEDD\uEEDE"+
-            "\uEEDF\uEEE0\uEEE1\uD7EA\uEEE2\uEEE3\uBCD8\uEEE4"+
-            "\uD3CB\uCCFA\uB2AC\uC1E5\uEEE5\uC7A6\uC3AD\uE898"+
-            "\uEEE6\uEEE7\uEEE8\uEEE9\uEEEA\uEEEB\uEEEC\uE899"+
-            "\uEEED\uEEEE\uEEEF\uE89A\uE89B\uEEF0\uEEF1\uEEF2"+
-            "\uEEF4\uEEF3\uE89C\uEEF5\uCDAD\uC2C1\uEEF6\uEEF7"+
-            "\uEEF8\uD5A1\uEEF9\uCFB3\uEEFA\uEEFB\uE89D\uEEFC"+
-            "\uEEFD\uEFA1\uEEFE\uEFA2\uB8F5\uC3FA\uEFA3\uEFA4"+
-            "\uBDC2\uD2BF\uB2F9\uEFA5\uEFA6\uEFA7\uD2F8\uEFA8"+
-            "\uD6FD\uEFA9\uC6CC\uE89E\uEFAA\uEFAB\uC1B4\uEFAC"+
-            "\uCFFA\uCBF8\uEFAE\uEFAD\uB3FA\uB9F8\uEFAF\uEFB0"+
-            "\uD0E2\uEFB1\uEFB2\uB7E6\uD0BF\uEFB3\uEFB4\uEFB5"+
-            "\uC8F1\uCCE0\uEFB6\uEFB7\uEFB8\uEFB9\uEFBA\uD5E0"+
-            "\uEFBB\uB4ED\uC3AA\uEFBC\uE89F\uEFBD\uEFBE\uEFBF"+
-            "\uE8A0\uCEFD\uEFC0\uC2E0\uB4B8\uD7B6\uBDF5\uE940"+
-            "\uCFC7\uEFC3\uEFC1\uEFC2\uEFC4\uB6A7\uBCFC\uBEE2"+
-            "\uC3CC\uEFC5\uEFC6\uE941\uEFC7\uEFCF\uEFC8\uEFC9"+
-            "\uEFCA\uC7C2\uEFF1\uB6CD\uEFCB\uE942\uEFCC\uEFCD"+
-            "\uB6C6\uC3BE\uEFCE\uE943\uEFD0\uEFD1\uEFD2\uD5F2"+
-            "\uE944\uEFD3\uC4F7\uE945\uEFD4\uC4F8\uEFD5\uEFD6"+
-            "\uB8E4\uB0F7\uEFD7\uEFD8\uEFD9\uE946\uEFDA\uEFDB"+
-            "\uEFDC\uEFDD\uE947\uEFDE\uBEB5\uEFE1\uEFDF\uEFE0"+
-            "\uE948\uEFE2\uEFE3\uC1CD\uEFE4\uEFE5\uEFE6\uEFE7"+
-            "\uEFE8\uEFE9\uEFEA\uEFEB\uEFEC\uC0D8\uE949\uEFED"+
-            "\uC1AD\uEFEE\uEFEF\uEFF0\uE94A\uE94B\uCFE2\uE94C"+
-            "\uE94D\uE94E\uE94F\uE950\uE951\uE952\uE953\uB3A4"+
-            "\uE954\uE955\uE956\uE957\uE958\uE959\uE95A\uE95B"+
-            "\uE95C\uE95D\uE95E\uE95F\uE960\uE961\uE962\uE963"+
-            "\uE964\uE965\uE966\uE967\uE968\uE969\uE96A\uE96B"+
-            "\uE96C\uE96D\uE96E\uE96F\uE970\uE971\uE972\uE973"+
-            "\uE974\uE975\uE976\uE977\uE978\uE979\uE97A\uE97B"+
-            "\uE97C\uE97D\uE97E\uE980\uE981\uE982\uE983\uE984"+
-            "\uE985\uE986\uE987\uE988\uE989\uE98A\uE98B\uE98C"+
-            "\uE98D\uE98E\uE98F\uE990\uE991\uE992\uE993\uE994"+
-            "\uE995\uE996\uE997\uE998\uE999\uE99A\uE99B\uE99C"+
-            "\uE99D\uE99E\uE99F\uE9A0\uEA40\uEA41\uEA42\uEA43"+
-            "\uEA44\uEA45\uEA46\uEA47\uEA48\uEA49\uEA4A\uEA4B"+
-            "\uEA4C\uEA4D\uEA4E\uEA4F\uEA50\uEA51\uEA52\uEA53"+
-            "\uEA54\uEA55\uEA56\uEA57\uEA58\uEA59\uEA5A\uEA5B"+
-            "\uC3C5\uE3C5\uC9C1\uE3C6\uEA5C\uB1D5\uCECA\uB4B3"+
-            "\uC8F2\uE3C7\uCFD0\uE3C8\uBCE4\uE3C9\uE3CA\uC3C6"+
-            "\uD5A2\uC4D6\uB9EB\uCEC5\uE3CB\uC3F6\uE3CC\uEA5D"+
-            "\uB7A7\uB8F3\uBAD2\uE3CD\uE3CE\uD4C4\uE3CF\uEA5E"+
-            "\uE3D0\uD1CB\uE3D1\uE3D2\uE3D3\uE3D4\uD1D6\uE3D5"+
-            "\uB2FB\uC0BB\uE3D6\uEA5F\uC0AB\uE3D7\uE3D8\uE3D9"+
-            "\uEA60\uE3DA\uE3DB\uEA61\uB8B7\uDAE2\uEA62\uB6D3"+
-            "\uEA63\uDAE4\uDAE3\uEA64\uEA65\uEA66\uEA67\uEA68"+
-            "\uEA69\uEA6A\uDAE6\uEA6B\uEA6C\uEA6D\uC8EE\uEA6E"+
-            "\uEA6F\uDAE5\uB7C0\uD1F4\uD2F5\uD5F3\uBDD7\uEA70"+
-            "\uEA71\uEA72\uEA73\uD7E8\uDAE8\uDAE7\uEA74\uB0A2"+
-            "\uCDD3\uEA75\uDAE9\uEA76\uB8BD\uBCCA\uC2BD\uC2A4"+
-            "\uB3C2\uDAEA\uEA77\uC2AA\uC4B0\uBDB5\uEA78\uEA79"+
-            "\uCFDE\uEA7A\uEA7B\uEA7C\uDAEB\uC9C2\uEA7D\uEA7E"+
-            "\uEA80\uEA81\uEA82\uB1DD\uEA83\uEA84\uEA85\uDAEC"+
-            "\uEA86\uB6B8\uD4BA\uEA87\uB3FD\uEA88\uEA89\uDAED"+
-            "\uD4C9\uCFD5\uC5E3\uEA8A\uDAEE\uEA8B\uEA8C\uEA8D"+
-            "\uEA8E\uEA8F\uDAEF\uEA90\uDAF0\uC1EA\uCCD5\uCFDD"+
-            "\uEA91\uEA92\uEA93\uEA94\uEA95\uEA96\uEA97\uEA98"+
-            "\uEA99\uEA9A\uEA9B\uEA9C\uEA9D\uD3E7\uC2A1\uEA9E"+
-            "\uDAF1\uEA9F\uEAA0\uCBE5\uEB40\uDAF2\uEB41\uCBE6"+
-            "\uD2FE\uEB42\uEB43\uEB44\uB8F4\uEB45\uEB46\uDAF3"+
-            "\uB0AF\uCFB6\uEB47\uEB48\uD5CF\uEB49\uEB4A\uEB4B"+
-            "\uEB4C\uEB4D\uEB4E\uEB4F\uEB50\uEB51\uEB52\uCBED"+
-            "\uEB53\uEB54\uEB55\uEB56\uEB57\uEB58\uEB59\uEB5A"+
-            "\uDAF4\uEB5B\uEB5C\uE3C4\uEB5D\uEB5E\uC1A5\uEB5F"+
-            "\uEB60\uF6BF\uEB61\uEB62\uF6C0\uF6C1\uC4D1\uEB63"+
-            "\uC8B8\uD1E3\uEB64\uEB65\uD0DB\uD1C5\uBCAF\uB9CD"+
-            "\uEB66\uEFF4\uEB67\uEB68\uB4C6\uD3BA\uF6C2\uB3FB"+
-            "\uEB69\uEB6A\uF6C3\uEB6B\uEB6C\uB5F1\uEB6D\uEB6E"+
-            "\uEB6F\uEB70\uEB71\uEB72\uEB73\uEB74\uEB75\uEB76"+
-            "\uF6C5\uEB77\uEB78\uEB79\uEB7A\uEB7B\uEB7C\uEB7D"+
-            "\uD3EA\uF6A7\uD1A9\uEB7E\uEB80\uEB81\uEB82\uF6A9"+
-            "\uEB83\uEB84\uEB85\uF6A8\uEB86\uEB87\uC1E3\uC0D7"+
-            "\uEB88\uB1A2\uEB89\uEB8A\uEB8B\uEB8C\uCEED\uEB8D"+
-            "\uD0E8\uF6AB\uEB8E\uEB8F\uCFF6\uEB90\uF6AA\uD5F0"+
-            "\uF6AC\uC3B9\uEB91\uEB92\uEB93\uBBF4\uF6AE\uF6AD"+
-            "\uEB94\uEB95\uEB96\uC4DE\uEB97\uEB98\uC1D8\uEB99"+
-            "\uEB9A\uEB9B\uEB9C\uEB9D\uCBAA\uEB9E\uCFBC\uEB9F"+
-            "\uEBA0\uEC40\uEC41\uEC42\uEC43\uEC44\uEC45\uEC46"+
-            "\uEC47\uEC48\uF6AF\uEC49\uEC4A\uF6B0\uEC4B\uEC4C"+
-            "\uF6B1\uEC4D\uC2B6\uEC4E\uEC4F\uEC50\uEC51\uEC52"+
-            "\uB0D4\uC5F9\uEC53\uEC54\uEC55\uEC56\uF6B2\uEC57"+
-            "\uEC58\uEC59\uEC5A\uEC5B\uEC5C\uEC5D\uEC5E\uEC5F"+
-            "\uEC60\uEC61\uEC62\uEC63\uEC64\uEC65\uEC66\uEC67"+
-            "\uEC68\uEC69\uC7E0\uF6A6\uEC6A\uEC6B\uBEB8\uEC6C"+
-            "\uEC6D\uBEB2\uEC6E\uB5E5\uEC6F\uEC70\uB7C7\uEC71"+
-            "\uBFBF\uC3D2\uC3E6\uEC72\uEC73\uD8CC\uEC74\uEC75"+
-            "\uEC76\uB8EF\uEC77\uEC78\uEC79\uEC7A\uEC7B\uEC7C"+
-            "\uEC7D\uEC7E\uEC80\uBDF9\uD1A5\uEC81\uB0D0\uEC82"+
-            "\uEC83\uEC84\uEC85\uEC86\uF7B0\uEC87\uEC88\uEC89"+
-            "\uEC8A\uEC8B\uEC8C\uEC8D\uEC8E\uF7B1\uEC8F\uEC90"+
-            "\uEC91\uEC92\uEC93\uD0AC\uEC94\uB0B0\uEC95\uEC96"+
-            "\uEC97\uF7B2\uF7B3\uEC98\uF7B4\uEC99\uEC9A\uEC9B"+
-            "\uC7CA\uEC9C\uEC9D\uEC9E\uEC9F\uECA0\uED40\uED41"+
-            "\uBECF\uED42\uED43\uF7B7\uED44\uED45\uED46\uED47"+
-            "\uED48\uED49\uED4A\uF7B6\uED4B\uB1DE\uED4C\uF7B5"+
-            "\uED4D\uED4E\uF7B8\uED4F\uF7B9\uED50\uED51\uED52"+
-            "\uED53\uED54\uED55\uED56\uED57\uED58\uED59\uED5A"+
-            "\uED5B\uED5C\uED5D\uED5E\uED5F\uED60\uED61\uED62"+
-            "\uED63\uED64\uED65\uED66\uED67\uED68\uED69\uED6A"+
-            "\uED6B\uED6C\uED6D\uED6E\uED6F\uED70\uED71\uED72"+
-            "\uED73\uED74\uED75\uED76\uED77\uED78\uED79\uED7A"+
-            "\uED7B\uED7C\uED7D\uED7E\uED80\uED81\uCEA4\uC8CD"+
-            "\uED82\uBAAB\uE8B8\uE8B9\uE8BA\uBEC2\uED83\uED84"+
-            "\uED85\uED86\uED87\uD2F4\uED88\uD4CF\uC9D8\uED89"+
-            "\uED8A\uED8B\uED8C\uED8D\uED8E\uED8F\uED90\uED91"+
-            "\uED92\uED93\uED94\uED95\uED96\uED97\uED98\uED99"+
-            "\uED9A\uED9B\uED9C\uED9D\uED9E\uED9F\uEDA0\uEE40"+
-            "\uEE41\uEE42\uEE43\uEE44\uEE45\uEE46\uEE47\uEE48"+
-            "\uEE49\uEE4A\uEE4B\uEE4C\uEE4D\uEE4E\uEE4F\uEE50"+
-            "\uEE51\uEE52\uEE53\uEE54\uEE55\uEE56\uEE57\uEE58"+
-            "\uEE59\uEE5A\uEE5B\uEE5C\uEE5D\uEE5E\uEE5F\uEE60"+
-            "\uEE61\uEE62\uEE63\uEE64\uEE65\uEE66\uEE67\uEE68"+
-            "\uEE69\uEE6A\uEE6B\uEE6C\uEE6D\uEE6E\uEE6F\uEE70"+
-            "\uEE71\uEE72\uEE73\uEE74\uEE75\uEE76\uEE77\uEE78"+
-            "\uEE79\uEE7A\uEE7B\uEE7C\uEE7D\uEE7E\uEE80\uEE81"+
-            "\uEE82\uEE83\uEE84\uEE85\uEE86\uEE87\uEE88\uEE89"+
-            "\uEE8A\uEE8B\uEE8C\uEE8D\uEE8E\uEE8F\uEE90\uEE91"+
-            "\uEE92\uEE93\uEE94\uEE95\uEE96\uEE97\uEE98\uEE99"+
-            "\uEE9A\uEE9B\uEE9C\uEE9D\uEE9E\uEE9F\uEEA0\uEF40"+
-            "\uEF41\uEF42\uEF43\uEF44\uEF45\uD2B3\uB6A5\uC7EA"+
-            "\uF1FC\uCFEE\uCBB3\uD0EB\uE7EF\uCDE7\uB9CB\uB6D9"+
-            "\uF1FD\uB0E4\uCBCC\uF1FE\uD4A4\uC2AD\uC1EC\uC6C4"+
-            "\uBEB1\uF2A1\uBCD5\uEF46\uF2A2\uF2A3\uEF47\uF2A4"+
-            "\uD2C3\uC6B5\uEF48\uCDC7\uF2A5\uEF49\uD3B1\uBFC5"+
-            "\uCCE2\uEF4A\uF2A6\uF2A7\uD1D5\uB6EE\uF2A8\uF2A9"+
-            "\uB5DF\uF2AA\uF2AB\uEF4B\uB2FC\uF2AC\uF2AD\uC8A7"+
-            "\uEF4C\uEF4D\uEF4E\uEF4F\uEF50\uEF51\uEF52\uEF53"+
-            "\uEF54\uEF55\uEF56\uEF57\uEF58\uEF59\uEF5A\uEF5B"+
-            "\uEF5C\uEF5D\uEF5E\uEF5F\uEF60\uEF61\uEF62\uEF63"+
-            "\uEF64\uEF65\uEF66\uEF67\uEF68\uEF69\uEF6A\uEF6B"+
-            "\uEF6C\uEF6D\uEF6E\uEF6F\uEF70\uEF71\uB7E7\uEF72"+
-            "\uEF73\uECA9\uECAA\uECAB\uEF74\uECAC\uEF75\uEF76"+
-            "\uC6AE\uECAD\uECAE\uEF77\uEF78\uEF79\uB7C9\uCAB3"+
-            "\uEF7A\uEF7B\uEF7C\uEF7D\uEF7E\uEF80\uEF81\uE2B8"+
-            "\uF7CF\uEF82\uEF83\uEF84\uEF85\uEF86\uEF87\uEF88"+
-            "\uEF89\uEF8A\uEF8B\uEF8C\uEF8D\uEF8E\uEF8F\uEF90"+
-            "\uEF91\uEF92\uEF93\uEF94\uEF95\uEF96\uEF97\uEF98"+
-            "\uEF99\uEF9A\uEF9B\uEF9C\uEF9D\uEF9E\uEF9F\uEFA0"+
-            "\uF040\uF041\uF042\uF043\uF044\uF7D0\uF045\uF046"+
-            "\uB2CD\uF047\uF048\uF049\uF04A\uF04B\uF04C\uF04D"+
-            "\uF04E\uF04F\uF050\uF051\uF052\uF053\uF054\uF055"+
-            "\uF056\uF057\uF058\uF059\uF05A\uF05B\uF05C\uF05D"+
-            "\uF05E\uF05F\uF060\uF061\uF062\uF063\uF7D1\uF064"+
-            "\uF065\uF066\uF067\uF068\uF069\uF06A\uF06B\uF06C"+
-            "\uF06D\uF06E\uF06F\uF070\uF071\uF072\uF073\uF074"+
-            "\uF075\uF076\uF077\uF078\uF079\uF07A\uF07B\uF07C"+
-            "\uF07D\uF07E\uF080\uF081\uF082\uF083\uF084\uF085"+
-            "\uF086\uF087\uF088\uF089\uF7D3\uF7D2\uF08A\uF08B"+
-            "\uF08C\uF08D\uF08E\uF08F\uF090\uF091\uF092\uF093"+
-            "\uF094\uF095\uF096\uE2BB\uF097\uBCA2\uF098\uE2BC"+
-            "\uE2BD\uE2BE\uE2BF\uE2C0\uE2C1\uB7B9\uD2FB\uBDA4"+
-            "\uCACE\uB1A5\uCBC7\uF099\uE2C2\uB6FC\uC8C4\uE2C3"+
-            "\uF09A\uF09B\uBDC8\uF09C\uB1FD\uE2C4\uF09D\uB6F6"+
-            "\uE2C5\uC4D9\uF09E\uF09F\uE2C6\uCFDA\uB9DD\uE2C7"+
-            "\uC0A1\uF0A0\uE2C8\uB2F6\uF140\uE2C9\uF141\uC1F3"+
-            "\uE2CA\uE2CB\uC2F8\uE2CC\uE2CD\uE2CE\uCAD7\uD8B8"+
-            "\uD9E5\uCFE3\uF142\uF143\uF144\uF145\uF146\uF147"+
-            "\uF148\uF149\uF14A\uF14B\uF14C\uF0A5\uF14D\uF14E"+
-            "\uDCB0\uF14F\uF150\uF151\uF152\uF153\uF154\uF155"+
-            "\uF156\uF157\uF158\uF159\uF15A\uF15B\uF15C\uF15D"+
-            "\uF15E\uF15F\uF160\uF161\uF162\uF163\uF164\uF165"+
-            "\uF166\uF167\uF168\uF169\uF16A\uF16B\uF16C\uF16D"+
-            "\uF16E\uF16F\uF170\uF171\uF172\uF173\uF174\uF175"+
-            "\uF176\uF177\uF178\uF179\uF17A\uF17B\uF17C\uF17D"+
-            "\uF17E\uF180\uF181\uF182\uF183\uF184\uF185\uF186"+
-            "\uF187\uF188\uF189\uF18A\uF18B\uF18C\uF18D\uF18E"+
-            "\uF18F\uF190\uF191\uF192\uF193\uF194\uF195\uF196"+
-            "\uF197\uF198\uF199\uF19A\uF19B\uF19C\uF19D\uF19E"+
-            "\uF19F\uF1A0\uF240\uF241\uF242\uF243\uF244\uF245"+
-            "\uF246\uF247\uF248\uF249\uF24A\uF24B\uF24C\uF24D"+
-            "\uF24E\uF24F\uF250\uF251\uF252\uF253\uF254\uF255"+
-            "\uF256\uF257\uF258\uF259\uF25A\uF25B\uF25C\uF25D"+
-            "\uF25E\uF25F\uF260\uF261\uF262\uF263\uF264\uF265"+
-            "\uF266\uF267\uF268\uF269\uF26A\uF26B\uF26C\uF26D"+
-            "\uF26E\uF26F\uF270\uF271\uF272\uF273\uF274\uF275"+
-            "\uF276\uF277\uF278\uF279\uF27A\uF27B\uF27C\uF27D"+
-            "\uF27E\uF280\uF281\uF282\uF283\uF284\uF285\uF286"+
-            "\uF287\uF288\uF289\uF28A\uF28B\uF28C\uF28D\uF28E"+
-            "\uF28F\uF290\uF291\uF292\uF293\uF294\uF295\uF296"+
-            "\uF297\uF298\uF299\uF29A\uF29B\uF29C\uF29D\uF29E"+
-            "\uF29F\uF2A0\uF340\uF341\uF342\uF343\uF344\uF345"+
-            "\uF346\uF347\uF348\uF349\uF34A\uF34B\uF34C\uF34D"+
-            "\uF34E\uF34F\uF350\uF351\uC2ED\uD4A6\uCDD4\uD1B1"+
-            "\uB3DB\uC7FD\uF352\uB2B5\uC2BF\uE6E0\uCABB\uE6E1"+
-            "\uE6E2\uBED4\uE6E3\uD7A4\uCDD5\uE6E5\uBCDD\uE6E4"+
-            "\uE6E6\uE6E7\uC2EE\uF353\uBDBE\uE6E8\uC2E6\uBAA7"+
-            "\uE6E9\uF354\uE6EA\uB3D2\uD1E9\uF355\uF356\uBFA5"+
-            "\uE6EB\uC6EF\uE6EC\uE6ED\uF357\uF358\uE6EE\uC6AD"+
-            "\uE6EF\uF359\uC9A7\uE6F0\uE6F1\uE6F2\uE5B9\uE6F3"+
-            "\uE6F4\uC2E2\uE6F5\uE6F6\uD6E8\uE6F7\uF35A\uE6F8"+
-            "\uB9C7\uF35B\uF35C\uF35D\uF35E\uF35F\uF360\uF361"+
-            "\uF7BB\uF7BA\uF362\uF363\uF364\uF365\uF7BE\uF7BC"+
-            "\uBAA1\uF366\uF7BF\uF367\uF7C0\uF368\uF369\uF36A"+
-            "\uF7C2\uF7C1\uF7C4\uF36B\uF36C\uF7C3\uF36D\uF36E"+
-            "\uF36F\uF370\uF371\uF7C5\uF7C6\uF372\uF373\uF374"+
-            "\uF375\uF7C7\uF376\uCBE8\uF377\uF378\uF379\uF37A"+
-            "\uB8DF\uF37B\uF37C\uF37D\uF37E\uF380\uF381\uF7D4"+
-            "\uF382\uF7D5\uF383\uF384\uF385\uF386\uF7D6\uF387"+
-            "\uF388\uF389\uF38A\uF7D8\uF38B\uF7DA\uF38C\uF7D7"+
-            "\uF38D\uF38E\uF38F\uF390\uF391\uF392\uF393\uF394"+
-            "\uF395\uF7DB\uF396\uF7D9\uF397\uF398\uF399\uF39A";
-
-        private final static String innerIndex7=
-            "\uF39B\uF39C\uF39D\uD7D7\uF39E\uF39F\uF3A0\uF440"+
-            "\uF7DC\uF441\uF442\uF443\uF444\uF445\uF446\uF7DD"+
-            "\uF447\uF448\uF449\uF7DE\uF44A\uF44B\uF44C\uF44D"+
-            "\uF44E\uF44F\uF450\uF451\uF452\uF453\uF454\uF7DF"+
-            "\uF455\uF456\uF457\uF7E0\uF458\uF459\uF45A\uF45B"+
-            "\uF45C\uF45D\uF45E\uF45F\uF460\uF461\uF462\uDBCB"+
-            "\uF463\uF464\uD8AA\uF465\uF466\uF467\uF468\uF469"+
-            "\uF46A\uF46B\uF46C\uE5F7\uB9ED\uF46D\uF46E\uF46F"+
-            "\uF470\uBFFD\uBBEA\uF7C9\uC6C7\uF7C8\uF471\uF7CA"+
-            "\uF7CC\uF7CB\uF472\uF473\uF474\uF7CD\uF475\uCEBA"+
-            "\uF476\uF7CE\uF477\uF478\uC4A7\uF479\uF47A\uF47B"+
-            "\uF47C\uF47D\uF47E\uF480\uF481\uF482\uF483\uF484"+
-            "\uF485\uF486\uF487\uF488\uF489\uF48A\uF48B\uF48C"+
-            "\uF48D\uF48E\uF48F\uF490\uF491\uF492\uF493\uF494"+
-            "\uF495\uF496\uF497\uF498\uF499\uF49A\uF49B\uF49C"+
-            "\uF49D\uF49E\uF49F\uF4A0\uF540\uF541\uF542\uF543"+
-            "\uF544\uF545\uF546\uF547\uF548\uF549\uF54A\uF54B"+
-            "\uF54C\uF54D\uF54E\uF54F\uF550\uF551\uF552\uF553"+
-            "\uF554\uF555\uF556\uF557\uF558\uF559\uF55A\uF55B"+
-            "\uF55C\uF55D\uF55E\uF55F\uF560\uF561\uF562\uF563"+
-            "\uF564\uF565\uF566\uF567\uF568\uF569\uF56A\uF56B"+
-            "\uF56C\uF56D\uF56E\uF56F\uF570\uF571\uF572\uF573"+
-            "\uF574\uF575\uF576\uF577\uF578\uF579\uF57A\uF57B"+
-            "\uF57C\uF57D\uF57E\uF580\uF581\uF582\uF583\uF584"+
-            "\uF585\uF586\uF587\uF588\uF589\uF58A\uF58B\uF58C"+
-            "\uF58D\uF58E\uF58F\uF590\uF591\uF592\uF593\uF594"+
-            "\uF595\uF596\uF597\uF598\uF599\uF59A\uF59B\uF59C"+
-            "\uF59D\uF59E\uF59F\uF5A0\uF640\uF641\uF642\uF643"+
-            "\uF644\uF645\uF646\uF647\uF648\uF649\uF64A\uF64B"+
-            "\uF64C\uF64D\uF64E\uF64F\uF650\uF651\uF652\uF653"+
-            "\uF654\uF655\uF656\uF657\uF658\uF659\uF65A\uF65B"+
-            "\uF65C\uF65D\uF65E\uF65F\uF660\uF661\uF662\uF663"+
-            "\uF664\uF665\uF666\uF667\uF668\uF669\uF66A\uF66B"+
-            "\uF66C\uF66D\uF66E\uF66F\uF670\uF671\uF672\uF673"+
-            "\uF674\uF675\uF676\uF677\uF678\uF679\uF67A\uF67B"+
-            "\uF67C\uF67D\uF67E\uF680\uF681\uF682\uF683\uF684"+
-            "\uF685\uF686\uF687\uF688\uF689\uF68A\uF68B\uF68C"+
-            "\uF68D\uF68E\uF68F\uF690\uF691\uF692\uF693\uF694"+
-            "\uF695\uF696\uF697\uF698\uF699\uF69A\uF69B\uF69C"+
-            "\uF69D\uF69E\uF69F\uF6A0\uF740\uF741\uF742\uF743"+
-            "\uF744\uF745\uF746\uF747\uF748\uF749\uF74A\uF74B"+
-            "\uF74C\uF74D\uF74E\uF74F\uF750\uF751\uF752\uF753"+
-            "\uF754\uF755\uF756\uF757\uF758\uF759\uF75A\uF75B"+
-            "\uF75C\uF75D\uF75E\uF75F\uF760\uF761\uF762\uF763"+
-            "\uF764\uF765\uF766\uF767\uF768\uF769\uF76A\uF76B"+
-            "\uF76C\uF76D\uF76E\uF76F\uF770\uF771\uF772\uF773"+
-            "\uF774\uF775\uF776\uF777\uF778\uF779\uF77A\uF77B"+
-            "\uF77C\uF77D\uF77E\uF780\uD3E3\uF781\uF782\uF6CF"+
-            "\uF783\uC2B3\uF6D0\uF784\uF785\uF6D1\uF6D2\uF6D3"+
-            "\uF6D4\uF786\uF787\uF6D6\uF788\uB1AB\uF6D7\uF789"+
-            "\uF6D8\uF6D9\uF6DA\uF78A\uF6DB\uF6DC\uF78B\uF78C"+
-            "\uF78D\uF78E\uF6DD\uF6DE\uCFCA\uF78F\uF6DF\uF6E0"+
-            "\uF6E1\uF6E2\uF6E3\uF6E4\uC0F0\uF6E5\uF6E6\uF6E7"+
-            "\uF6E8\uF6E9\uF790\uF6EA\uF791\uF6EB\uF6EC\uF792"+
-            "\uF6ED\uF6EE\uF6EF\uF6F0\uF6F1\uF6F2\uF6F3\uF6F4"+
-            "\uBEA8\uF793\uF6F5\uF6F6\uF6F7\uF6F8\uF794\uF795"+
-            "\uF796\uF797\uF798\uC8FA\uF6F9\uF6FA\uF6FB\uF6FC"+
-            "\uF799\uF79A\uF6FD\uF6FE\uF7A1\uF7A2\uF7A3\uF7A4"+
-            "\uF7A5\uF79B\uF79C\uF7A6\uF7A7\uF7A8\uB1EE\uF7A9"+
-            "\uF7AA\uF7AB\uF79D\uF79E\uF7AC\uF7AD\uC1DB\uF7AE"+
-            "\uF79F\uF7A0\uF7AF\uF840\uF841\uF842\uF843\uF844"+
-            "\uF845\uF846\uF847\uF848\uF849\uF84A\uF84B\uF84C"+
-            "\uF84D\uF84E\uF84F\uF850\uF851\uF852\uF853\uF854"+
-            "\uF855\uF856\uF857\uF858\uF859\uF85A\uF85B\uF85C"+
-            "\uF85D\uF85E\uF85F\uF860\uF861\uF862\uF863\uF864"+
-            "\uF865\uF866\uF867\uF868\uF869\uF86A\uF86B\uF86C"+
-            "\uF86D\uF86E\uF86F\uF870\uF871\uF872\uF873\uF874"+
-            "\uF875\uF876\uF877\uF878\uF879\uF87A\uF87B\uF87C"+
-            "\uF87D\uF87E\uF880\uF881\uF882\uF883\uF884\uF885"+
-            "\uF886\uF887\uF888\uF889\uF88A\uF88B\uF88C\uF88D"+
-            "\uF88E\uF88F\uF890\uF891\uF892\uF893\uF894\uF895"+
-            "\uF896\uF897\uF898\uF899\uF89A\uF89B\uF89C\uF89D"+
-            "\uF89E\uF89F\uF8A0\uF940\uF941\uF942\uF943\uF944"+
-            "\uF945\uF946\uF947\uF948\uF949\uF94A\uF94B\uF94C"+
-            "\uF94D\uF94E\uF94F\uF950\uF951\uF952\uF953\uF954"+
-            "\uF955\uF956\uF957\uF958\uF959\uF95A\uF95B\uF95C"+
-            "\uF95D\uF95E\uF95F\uF960\uF961\uF962\uF963\uF964"+
-            "\uF965\uF966\uF967\uF968\uF969\uF96A\uF96B\uF96C"+
-            "\uF96D\uF96E\uF96F\uF970\uF971\uF972\uF973\uF974"+
-            "\uF975\uF976\uF977\uF978\uF979\uF97A\uF97B\uF97C"+
-            "\uF97D\uF97E\uF980\uF981\uF982\uF983\uF984\uF985"+
-            "\uF986\uF987\uF988\uF989\uF98A\uF98B\uF98C\uF98D"+
-            "\uF98E\uF98F\uF990\uF991\uF992\uF993\uF994\uF995"+
-            "\uF996\uF997\uF998\uF999\uF99A\uF99B\uF99C\uF99D"+
-            "\uF99E\uF99F\uF9A0\uFA40\uFA41\uFA42\uFA43\uFA44"+
-            "\uFA45\uFA46\uFA47\uFA48\uFA49\uFA4A\uFA4B\uFA4C"+
-            "\uFA4D\uFA4E\uFA4F\uFA50\uFA51\uFA52\uFA53\uFA54"+
-            "\uFA55\uFA56\uFA57\uFA58\uFA59\uFA5A\uFA5B\uFA5C"+
-            "\uFA5D\uFA5E\uFA5F\uFA60\uFA61\uFA62\uFA63\uFA64"+
-            "\uFA65\uFA66\uFA67\uFA68\uFA69\uFA6A\uFA6B\uFA6C"+
-            "\uFA6D\uFA6E\uFA6F\uFA70\uFA71\uFA72\uFA73\uFA74"+
-            "\uFA75\uFA76\uFA77\uFA78\uFA79\uFA7A\uFA7B\uFA7C"+
-            "\uFA7D\uFA7E\uFA80\uFA81\uFA82\uFA83\uFA84\uFA85"+
-            "\uFA86\uFA87\uFA88\uFA89\uFA8A\uFA8B\uFA8C\uFA8D"+
-            "\uFA8E\uFA8F\uFA90\uFA91\uFA92\uFA93\uFA94\uFA95"+
-            "\uFA96\uFA97\uFA98\uFA99\uFA9A\uFA9B\uFA9C\uFA9D"+
-            "\uFA9E\uFA9F\uFAA0\uFB40\uFB41\uFB42\uFB43\uFB44"+
-            "\uFB45\uFB46\uFB47\uFB48\uFB49\uFB4A\uFB4B\uFB4C"+
-            "\uFB4D\uFB4E\uFB4F\uFB50\uFB51\uFB52\uFB53\uFB54"+
-            "\uFB55\uFB56\uFB57\uFB58\uFB59\uFB5A\uFB5B\uC4F1"+
-            "\uF0AF\uBCA6\uF0B0\uC3F9\uFB5C\uC5B8\uD1BB\uFB5D"+
-            "\uF0B1\uF0B2\uF0B3\uF0B4\uF0B5\uD1BC\uFB5E\uD1EC"+
-            "\uFB5F\uF0B7\uF0B6\uD4A7\uFB60\uCDD2\uF0B8\uF0BA"+
-            "\uF0B9\uF0BB\uF0BC\uFB61\uFB62\uB8EB\uF0BD\uBAE8"+
-            "\uFB63\uF0BE\uF0BF\uBEE9\uF0C0\uB6EC\uF0C1\uF0C2"+
-            "\uF0C3\uF0C4\uC8B5\uF0C5\uF0C6\uFB64\uF0C7\uC5F4"+
-            "\uFB65\uF0C8\uFB66\uFB67\uFB68\uF0C9\uFB69\uF0CA"+
-            "\uF7BD\uFB6A\uF0CB\uF0CC\uF0CD\uFB6B\uF0CE\uFB6C"+
-            "\uFB6D\uFB6E\uFB6F\uF0CF\uBAD7\uFB70\uF0D0\uF0D1"+
-            "\uF0D2\uF0D3\uF0D4\uF0D5\uF0D6\uF0D8\uFB71\uFB72"+
-            "\uD3A5\uF0D7\uFB73\uF0D9\uFB74\uFB75\uFB76\uFB77"+
-            "\uFB78\uFB79\uFB7A\uFB7B\uFB7C\uFB7D\uF5BA\uC2B9"+
-            "\uFB7E\uFB80\uF7E4\uFB81\uFB82\uFB83\uFB84\uF7E5"+
-            "\uF7E6\uFB85\uFB86\uF7E7\uFB87\uFB88\uFB89\uFB8A"+
-            "\uFB8B\uFB8C\uF7E8\uC2B4\uFB8D\uFB8E\uFB8F\uFB90"+
-            "\uFB91\uFB92\uFB93\uFB94\uFB95\uF7EA\uFB96\uF7EB"+
-            "\uFB97\uFB98\uFB99\uFB9A\uFB9B\uFB9C\uC2F3\uFB9D"+
-            "\uFB9E\uFB9F\uFBA0\uFC40\uFC41\uFC42\uFC43\uFC44"+
-            "\uFC45\uFC46\uFC47\uFC48\uF4F0\uFC49\uFC4A\uFC4B"+
-            "\uF4EF\uFC4C\uFC4D\uC2E9\uFC4E\uF7E1\uF7E2\uFC4F"+
-            "\uFC50\uFC51\uFC52\uFC53\uBBC6\uFC54\uFC55\uFC56"+
-            "\uFC57\uD9E4\uFC58\uFC59\uFC5A\uCAF2\uC0E8\uF0A4"+
-            "\uFC5B\uBADA\uFC5C\uFC5D\uC7AD\uFC5E\uFC5F\uFC60"+
-            "\uC4AC\uFC61\uFC62\uF7EC\uF7ED\uF7EE\uFC63\uF7F0"+
-            "\uF7EF\uFC64\uF7F1\uFC65\uFC66\uF7F4\uFC67\uF7F3"+
-            "\uFC68\uF7F2\uF7F5\uFC69\uFC6A\uFC6B\uFC6C\uF7F6"+
-            "\uFC6D\uFC6E\uFC6F\uFC70\uFC71\uFC72\uFC73\uFC74"+
-            "\uFC75\uEDE9\uFC76\uEDEA\uEDEB\uFC77\uF6BC\uFC78"+
-            "\uFC79\uFC7A\uFC7B\uFC7C\uFC7D\uFC7E\uFC80\uFC81"+
-            "\uFC82\uFC83\uFC84\uF6BD\uFC85\uF6BE\uB6A6\uFC86"+
-            "\uD8BE\uFC87\uFC88\uB9C4\uFC89\uFC8A\uFC8B\uD8BB"+
-            "\uFC8C\uDCB1\uFC8D\uFC8E\uFC8F\uFC90\uFC91\uFC92"+
-            "\uCAF3\uFC93\uF7F7\uFC94\uFC95\uFC96\uFC97\uFC98"+
-            "\uFC99\uFC9A\uFC9B\uFC9C\uF7F8\uFC9D\uFC9E\uF7F9"+
-            "\uFC9F\uFCA0\uFD40\uFD41\uFD42\uFD43\uFD44\uF7FB"+
-            "\uFD45\uF7FA\uFD46\uB1C7\uFD47\uF7FC\uF7FD\uFD48"+
-            "\uFD49\uFD4A\uFD4B\uFD4C\uF7FE\uFD4D\uFD4E\uFD4F"+
-            "\uFD50\uFD51\uFD52\uFD53\uFD54\uFD55\uFD56\uFD57"+
-            "\uC6EB\uECB4\uFD58\uFD59\uFD5A\uFD5B\uFD5C\uFD5D"+
-            "\uFD5E\uFD5F\uFD60\uFD61\uFD62\uFD63\uFD64\uFD65"+
-            "\uFD66\uFD67\uFD68\uFD69\uFD6A\uFD6B\uFD6C\uFD6D"+
-            "\uFD6E\uFD6F\uFD70\uFD71\uFD72\uFD73\uFD74\uFD75"+
-            "\uFD76\uFD77\uFD78\uFD79\uFD7A\uFD7B\uFD7C\uFD7D"+
-            "\uFD7E\uFD80\uFD81\uFD82\uFD83\uFD84\uFD85\uB3DD"+
-            "\uF6B3\uFD86\uFD87\uF6B4\uC1E4\uF6B5\uF6B6\uF6B7"+
-            "\uF6B8\uF6B9\uF6BA\uC8A3\uF6BB\uFD88\uFD89\uFD8A"+
-            "\uFD8B\uFD8C\uFD8D\uFD8E\uFD8F\uFD90\uFD91\uFD92"+
-            "\uFD93\uC1FA\uB9A8\uEDE8\uFD94\uFD95\uFD96\uB9EA"+
-            "\uD9DF\uFD97\uFD98\uFD99\uFD9A\uFD9B\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uAAA1\uAAA2\uAAA3\uAAA4\uAAA5\uAAA6\uAAA7\uAAA8"+
-            "\uAAA9\uAAAA\uAAAB\uAAAC\uAAAD\uAAAE\uAAAF\uAAB0"+
-            "\uAAB1\uAAB2\uAAB3\uAAB4\uAAB5\uAAB6\uAAB7\uAAB8"+
-            "\uAAB9\uAABA\uAABB\uAABC\uAABD\uAABE\uAABF\uAAC0"+
-            "\uAAC1\uAAC2\uAAC3\uAAC4\uAAC5\uAAC6\uAAC7\uAAC8"+
-            "\uAAC9\uAACA\uAACB\uAACC\uAACD\uAACE\uAACF\uAAD0"+
-            "\uAAD1\uAAD2\uAAD3\uAAD4\uAAD5\uAAD6\uAAD7\uAAD8"+
-            "\uAAD9\uAADA\uAADB\uAADC\uAADD\uAADE\uAADF\uAAE0"+
-            "\uAAE1\uAAE2\uAAE3\uAAE4\uAAE5\uAAE6\uAAE7\uAAE8"+
-            "\uAAE9\uAAEA\uAAEB\uAAEC\uAAED\uAAEE\uAAEF\uAAF0"+
-            "\uAAF1\uAAF2\uAAF3\uAAF4\uAAF5\uAAF6\uAAF7\uAAF8"+
-            "\uAAF9\uAAFA\uAAFB\uAAFC\uAAFD\uAAFE\uABA1\uABA2"+
-            "\uABA3\uABA4\uABA5\uABA6\uABA7\uABA8\uABA9\uABAA"+
-            "\uABAB\uABAC\uABAD\uABAE\uABAF\uABB0\uABB1\uABB2"+
-            "\uABB3\uABB4\uABB5\uABB6\uABB7\uABB8\uABB9\uABBA"+
-            "\uABBB\uABBC\uABBD\uABBE\uABBF\uABC0\uABC1\uABC2"+
-            "\uABC3\uABC4\uABC5\uABC6\uABC7\uABC8\uABC9\uABCA"+
-            "\uABCB\uABCC\uABCD\uABCE\uABCF\uABD0\uABD1\uABD2"+
-            "\uABD3\uABD4\uABD5\uABD6\uABD7\uABD8\uABD9\uABDA"+
-            "\uABDB\uABDC\uABDD\uABDE\uABDF\uABE0\uABE1\uABE2"+
-            "\uABE3\uABE4\uABE5\uABE6\uABE7\uABE8\uABE9\uABEA"+
-            "\uABEB\uABEC\uABED\uABEE\uABEF\uABF0\uABF1\uABF2"+
-            "\uABF3\uABF4\uABF5\uABF6\uABF7\uABF8\uABF9\uABFA"+
-            "\uABFB\uABFC\uABFD\uABFE\uACA1\uACA2\uACA3\uACA4"+
-            "\uACA5\uACA6\uACA7\uACA8\uACA9\uACAA\uACAB\uACAC"+
-            "\uACAD\uACAE\uACAF\uACB0\uACB1\uACB2\uACB3\uACB4"+
-            "\uACB5\uACB6\uACB7\uACB8\uACB9\uACBA\uACBB\uACBC"+
-            "\uACBD\uACBE\uACBF\uACC0\uACC1\uACC2\uACC3\uACC4"+
-            "\uACC5\uACC6\uACC7\uACC8\uACC9\uACCA\uACCB\uACCC"+
-            "\uACCD\uACCE\uACCF\uACD0\uACD1\uACD2\uACD3\uACD4"+
-            "\uACD5\uACD6\uACD7\uACD8\uACD9\uACDA\uACDB\uACDC"+
-            "\uACDD\uACDE\uACDF\uACE0\uACE1\uACE2\uACE3\uACE4"+
-            "\uACE5\uACE6\uACE7\uACE8\uACE9\uACEA\uACEB\uACEC"+
-            "\uACED\uACEE\uACEF\uACF0\uACF1\uACF2\uACF3\uACF4"+
-            "\uACF5\uACF6\uACF7\uACF8\uACF9\uACFA\uACFB\uACFC"+
-            "\uACFD\uACFE\uADA1\uADA2\uADA3\uADA4\uADA5\uADA6"+
-            "\uADA7\uADA8\uADA9\uADAA\uADAB\uADAC\uADAD\uADAE"+
-            "\uADAF\uADB0\uADB1\uADB2\uADB3\uADB4\uADB5\uADB6"+
-            "\uADB7\uADB8\uADB9\uADBA\uADBB\uADBC\uADBD\uADBE"+
-            "\uADBF\uADC0\uADC1\uADC2\uADC3\uADC4\uADC5\uADC6"+
-            "\uADC7\uADC8\uADC9\uADCA\uADCB\uADCC\uADCD\uADCE"+
-            "\uADCF\uADD0\uADD1\uADD2\uADD3\uADD4\uADD5\uADD6"+
-            "\uADD7\uADD8\uADD9\uADDA\uADDB\uADDC\uADDD\uADDE"+
-            "\uADDF\uADE0\uADE1\uADE2\uADE3\uADE4\uADE5\uADE6"+
-            "\uADE7\uADE8\uADE9\uADEA\uADEB\uADEC\uADED\uADEE"+
-            "\uADEF\uADF0\uADF1\uADF2\uADF3\uADF4\uADF5\uADF6"+
-            "\uADF7\uADF8\uADF9\uADFA\uADFB\uADFC\uADFD\uADFE"+
-            "\uAEA1\uAEA2\uAEA3\uAEA4\uAEA5\uAEA6\uAEA7\uAEA8"+
-            "\uAEA9\uAEAA\uAEAB\uAEAC\uAEAD\uAEAE\uAEAF\uAEB0"+
-            "\uAEB1\uAEB2\uAEB3\uAEB4\uAEB5\uAEB6\uAEB7\uAEB8"+
-            "\uAEB9\uAEBA\uAEBB\uAEBC\uAEBD\uAEBE\uAEBF\uAEC0"+
-            "\uAEC1\uAEC2\uAEC3\uAEC4\uAEC5\uAEC6\uAEC7\uAEC8"+
-            "\uAEC9\uAECA\uAECB\uAECC\uAECD\uAECE\uAECF\uAED0"+
-            "\uAED1\uAED2\uAED3\uAED4\uAED5\uAED6\uAED7\uAED8"+
-            "\uAED9\uAEDA\uAEDB\uAEDC\uAEDD\uAEDE\uAEDF\uAEE0"+
-            "\uAEE1\uAEE2\uAEE3\uAEE4\uAEE5\uAEE6\uAEE7\uAEE8"+
-            "\uAEE9\uAEEA\uAEEB\uAEEC\uAEED\uAEEE\uAEEF\uAEF0"+
-            "\uAEF1\uAEF2\uAEF3\uAEF4\uAEF5\uAEF6\uAEF7\uAEF8"+
-            "\uAEF9\uAEFA\uAEFB\uAEFC\uAEFD\uAEFE\uAFA1\uAFA2"+
-            "\uAFA3\uAFA4\uAFA5\uAFA6\uAFA7\uAFA8\uAFA9\uAFAA"+
-            "\uAFAB\uAFAC\uAFAD\uAFAE\uAFAF\uAFB0\uAFB1\uAFB2"+
-            "\uAFB3\uAFB4\uAFB5\uAFB6\uAFB7\uAFB8\uAFB9\uAFBA"+
-            "\uAFBB\uAFBC\uAFBD\uAFBE\uAFBF\uAFC0\uAFC1\uAFC2"+
-            "\uAFC3\uAFC4\uAFC5\uAFC6\uAFC7\uAFC8\uAFC9\uAFCA"+
-            "\uAFCB\uAFCC\uAFCD\uAFCE\uAFCF\uAFD0\uAFD1\uAFD2"+
-            "\uAFD3\uAFD4\uAFD5\uAFD6\uAFD7\uAFD8\uAFD9\uAFDA"+
-            "\uAFDB\uAFDC\uAFDD\uAFDE\uAFDF\uAFE0\uAFE1\uAFE2"+
-            "\uAFE3\uAFE4\uAFE5\uAFE6\uAFE7\uAFE8\uAFE9\uAFEA"+
-            "\uAFEB\uAFEC\uAFED\uAFEE\uAFEF\uAFF0\uAFF1\uAFF2"+
-            "\uAFF3\uAFF4\uAFF5\uAFF6\uAFF7\uAFF8\uAFF9\uAFFA"+
-            "\uAFFB\uAFFC\uAFFD\uAFFE\uF8A1\uF8A2\uF8A3\uF8A4"+
-            "\uF8A5\uF8A6\uF8A7\uF8A8\uF8A9\uF8AA\uF8AB\uF8AC"+
-            "\uF8AD\uF8AE\uF8AF\uF8B0\uF8B1\uF8B2\uF8B3\uF8B4"+
-            "\uF8B5\uF8B6\uF8B7\uF8B8\uF8B9\uF8BA\uF8BB\uF8BC"+
-            "\uF8BD\uF8BE\uF8BF\uF8C0\uF8C1\uF8C2\uF8C3\uF8C4"+
-            "\uF8C5\uF8C6\uF8C7\uF8C8\uF8C9\uF8CA\uF8CB\uF8CC"+
-            "\uF8CD\uF8CE\uF8CF\uF8D0\uF8D1\uF8D2\uF8D3\uF8D4"+
-            "\uF8D5\uF8D6\uF8D7\uF8D8\uF8D9\uF8DA\uF8DB\uF8DC"+
-            "\uF8DD\uF8DE\uF8DF\uF8E0\uF8E1\uF8E2\uF8E3\uF8E4"+
-            "\uF8E5\uF8E6\uF8E7\uF8E8\uF8E9\uF8EA\uF8EB\uF8EC"+
-            "\uF8ED\uF8EE\uF8EF\uF8F0\uF8F1\uF8F2\uF8F3\uF8F4"+
-            "\uF8F5\uF8F6\uF8F7\uF8F8\uF8F9\uF8FA\uF8FB\uF8FC"+
-            "\uF8FD\uF8FE\uF9A1\uF9A2\uF9A3\uF9A4\uF9A5\uF9A6"+
-            "\uF9A7\uF9A8\uF9A9\uF9AA\uF9AB\uF9AC\uF9AD\uF9AE"+
-            "\uF9AF\uF9B0\uF9B1\uF9B2\uF9B3\uF9B4\uF9B5\uF9B6"+
-            "\uF9B7\uF9B8\uF9B9\uF9BA\uF9BB\uF9BC\uF9BD\uF9BE"+
-            "\uF9BF\uF9C0\uF9C1\uF9C2\uF9C3\uF9C4\uF9C5\uF9C6"+
-            "\uF9C7\uF9C8\uF9C9\uF9CA\uF9CB\uF9CC\uF9CD\uF9CE"+
-            "\uF9CF\uF9D0\uF9D1\uF9D2\uF9D3\uF9D4\uF9D5\uF9D6"+
-            "\uF9D7\uF9D8\uF9D9\uF9DA\uF9DB\uF9DC\uF9DD\uF9DE"+
-            "\uF9DF\uF9E0\uF9E1\uF9E2\uF9E3\uF9E4\uF9E5\uF9E6"+
-            "\uF9E7\uF9E8\uF9E9\uF9EA\uF9EB\uF9EC\uF9ED\uF9EE"+
-            "\uF9EF\uF9F0\uF9F1\uF9F2\uF9F3\uF9F4\uF9F5\uF9F6"+
-            "\uF9F7\uF9F8\uF9F9\uF9FA\uF9FB\uF9FC\uF9FD\uF9FE"+
-            "\uFAA1\uFAA2\uFAA3\uFAA4\uFAA5\uFAA6\uFAA7\uFAA8"+
-            "\uFAA9\uFAAA\uFAAB\uFAAC\uFAAD\uFAAE\uFAAF\uFAB0"+
-            "\uFAB1\uFAB2\uFAB3\uFAB4\uFAB5\uFAB6\uFAB7\uFAB8"+
-            "\uFAB9\uFABA\uFABB\uFABC\uFABD\uFABE\uFABF\uFAC0"+
-            "\uFAC1\uFAC2\uFAC3\uFAC4\uFAC5\uFAC6\uFAC7\uFAC8"+
-            "\uFAC9\uFACA\uFACB\uFACC\uFACD\uFACE\uFACF\uFAD0"+
-            "\uFAD1\uFAD2\uFAD3\uFAD4\uFAD5\uFAD6\uFAD7\uFAD8"+
-            "\uFAD9\uFADA\uFADB\uFADC\uFADD\uFADE\uFADF\uFAE0"+
-            "\uFAE1\uFAE2\uFAE3\uFAE4\uFAE5\uFAE6\uFAE7\uFAE8"+
-            "\uFAE9\uFAEA\uFAEB\uFAEC\uFAED\uFAEE\uFAEF\uFAF0"+
-            "\uFAF1\uFAF2\uFAF3\uFAF4\uFAF5\uFAF6\uFAF7\uFAF8"+
-            "\uFAF9\uFAFA\uFAFB\uFAFC\uFAFD\uFAFE\uFBA1\uFBA2"+
-            "\uFBA3\uFBA4\uFBA5\uFBA6\uFBA7\uFBA8\uFBA9\uFBAA"+
-            "\uFBAB\uFBAC\uFBAD\uFBAE\uFBAF\uFBB0\uFBB1\uFBB2"+
-            "\uFBB3\uFBB4\uFBB5\uFBB6\uFBB7\uFBB8\uFBB9\uFBBA"+
-            "\uFBBB\uFBBC\uFBBD\uFBBE\uFBBF\uFBC0\uFBC1\uFBC2"+
-            "\uFBC3\uFBC4\uFBC5\uFBC6\uFBC7\uFBC8\uFBC9\uFBCA"+
-            "\uFBCB\uFBCC\uFBCD\uFBCE\uFBCF\uFBD0\uFBD1\uFBD2"+
-            "\uFBD3\uFBD4\uFBD5\uFBD6\uFBD7\uFBD8\uFBD9\uFBDA"+
-            "\uFBDB\uFBDC\uFBDD\uFBDE\uFBDF\uFBE0\uFBE1\uFBE2"+
-            "\uFBE3\uFBE4\uFBE5\uFBE6\uFBE7\uFBE8\uFBE9\uFBEA"+
-            "\uFBEB\uFBEC\uFBED\uFBEE\uFBEF\uFBF0\uFBF1\uFBF2"+
-            "\uFBF3\uFBF4\uFBF5\uFBF6\uFBF7\uFBF8\uFBF9\uFBFA"+
-            "\uFBFB\uFBFC\uFBFD\uFBFE\uFCA1\uFCA2\uFCA3\uFCA4"+
-            "\uFCA5\uFCA6\uFCA7\uFCA8\uFCA9\uFCAA\uFCAB\uFCAC"+
-            "\uFCAD\uFCAE\uFCAF\uFCB0\uFCB1\uFCB2\uFCB3\uFCB4"+
-            "\uFCB5\uFCB6\uFCB7\uFCB8\uFCB9\uFCBA\uFCBB\uFCBC"+
-            "\uFCBD\uFCBE\uFCBF\uFCC0\uFCC1\uFCC2\uFCC3\uFCC4"+
-            "\uFCC5\uFCC6\uFCC7\uFCC8\uFCC9\uFCCA\uFCCB\uFCCC"+
-            "\uFCCD\uFCCE\uFCCF\uFCD0\uFCD1\uFCD2\uFCD3\uFCD4"+
-            "\uFCD5\uFCD6\uFCD7\uFCD8\uFCD9\uFCDA\uFCDB\uFCDC"+
-            "\uFCDD\uFCDE\uFCDF\uFCE0\uFCE1\uFCE2\uFCE3\uFCE4"+
-            "\uFCE5\uFCE6\uFCE7\uFCE8\uFCE9\uFCEA\uFCEB\uFCEC"+
-            "\uFCED\uFCEE\uFCEF\uFCF0\uFCF1\uFCF2\uFCF3\uFCF4"+
-            "\uFCF5\uFCF6\uFCF7\uFCF8\uFCF9\uFCFA\uFCFB\uFCFC"+
-            "\uFCFD\uFCFE\uFDA1\uFDA2\uFDA3\uFDA4\uFDA5\uFDA6"+
-            "\uFDA7\uFDA8\uFDA9\uFDAA\uFDAB\uFDAC\uFDAD\uFDAE"+
-            "\uFDAF\uFDB0\uFDB1\uFDB2\uFDB3\uFDB4\uFDB5\uFDB6"+
-            "\uFDB7\uFDB8\uFDB9\uFDBA\uFDBB\uFDBC\uFDBD\uFDBE"+
-            "\uFDBF\uFDC0\uFDC1\uFDC2\uFDC3\uFDC4\uFDC5\uFDC6"+
-            "\uFDC7\uFDC8\uFDC9\uFDCA\uFDCB\uFDCC\uFDCD\uFDCE"+
-            "\uFDCF\uFDD0\uFDD1\uFDD2\uFDD3\uFDD4\uFDD5\uFDD6"+
-            "\uFDD7\uFDD8\uFDD9\uFDDA\uFDDB\uFDDC\uFDDD\uFDDE"+
-            "\uFDDF\uFDE0\uFDE1\uFDE2\uFDE3\uFDE4\uFDE5\uFDE6"+
-            "\uFDE7\uFDE8\uFDE9\uFDEA\uFDEB\uFDEC\uFDED\uFDEE"+
-            "\uFDEF\uFDF0\uFDF1\uFDF2\uFDF3\uFDF4\uFDF5\uFDF6"+
-            "\uFDF7\uFDF8\uFDF9\uFDFA\uFDFB\uFDFC\uFDFD\uFDFE"+
-            "\uFEA1\uFEA2\uFEA3\uFEA4\uFEA5\uFEA6\uFEA7\uFEA8"+
-            "\uFEA9\uFEAA\uFEAB\uFEAC\uFEAD\uFEAE\uFEAF\uFEB0"+
-            "\uFEB1\uFEB2\uFEB3\uFEB4\uFEB5\uFEB6\uFEB7\uFEB8"+
-            "\uFEB9\uFEBA\uFEBB\uFEBC\uFEBD\uFEBE\uFEBF\uFEC0"+
-            "\uFEC1\uFEC2\uFEC3\uFEC4\uFEC5\uFEC6\uFEC7\uFEC8"+
-            "\uFEC9\uFECA\uFECB\uFECC\uFECD\uFECE\uFECF\uFED0"+
-            "\uFED1\uFED2\uFED3\uFED4\uFED5\uFED6\uFED7\uFED8"+
-            "\uFED9\uFEDA\uFEDB\uFEDC\uFEDD\uFEDE\uFEDF\uFEE0"+
-            "\uFEE1\uFEE2\uFEE3\uFEE4\uFEE5\uFEE6\uFEE7\uFEE8"+
-            "\uFEE9\uFEEA\uFEEB\uFEEC\uFEED\uFEEE\uFEEF\uFEF0"+
-            "\uFEF1\uFEF2\uFEF3\uFEF4\uFEF5\uFEF6\uFEF7\uFEF8"+
-            "\uFEF9\uFEFA\uFEFB\uFEFC\uFEFD\uFEFE\uA140\uA141"+
-            "\uA142\uA143\uA144\uA145\uA146\uA147\uA148\uA149"+
-            "\uA14A\uA14B\uA14C\uA14D\uA14E\uA14F\uA150\uA151"+
-            "\uA152\uA153\uA154\uA155\uA156\uA157\uA158\uA159"+
-            "\uA15A\uA15B\uA15C\uA15D\uA15E\uA15F\uA160\uA161"+
-            "\uA162\uA163\uA164\uA165\uA166\uA167\uA168\uA169"+
-            "\uA16A\uA16B\uA16C\uA16D\uA16E\uA16F\uA170\uA171"+
-            "\uA172\uA173\uA174\uA175\uA176\uA177\uA178\uA179"+
-            "\uA17A\uA17B\uA17C\uA17D\uA17E\uA180\uA181\uA182"+
-            "\uA183\uA184\uA185\uA186\uA187\uA188\uA189\uA18A"+
-            "\uA18B\uA18C\uA18D\uA18E\uA18F\uA190\uA191\uA192"+
-            "\uA193\uA194\uA195\uA196\uA197\uA198\uA199\uA19A"+
-            "\uA19B\uA19C\uA19D\uA19E\uA19F\uA1A0\uA240\uA241"+
-            "\uA242\uA243\uA244\uA245\uA246\uA247\uA248\uA249"+
-            "\uA24A\uA24B\uA24C\uA24D\uA24E\uA24F\uA250\uA251"+
-            "\uA252\uA253\uA254\uA255\uA256\uA257\uA258\uA259"+
-            "\uA25A\uA25B\uA25C\uA25D\uA25E\uA25F\uA260\uA261"+
-            "\uA262\uA263\uA264\uA265\uA266\uA267\uA268\uA269"+
-            "\uA26A\uA26B\uA26C\uA26D\uA26E\uA26F\uA270\uA271"+
-            "\uA272\uA273\uA274\uA275\uA276\uA277\uA278\uA279"+
-            "\uA27A\uA27B\uA27C\uA27D\uA27E\uA280\uA281\uA282"+
-            "\uA283\uA284\uA285\uA286\uA287\uA288\uA289\uA28A"+
-            "\uA28B\uA28C\uA28D\uA28E\uA28F\uA290\uA291\uA292"+
-            "\uA293\uA294\uA295\uA296\uA297\uA298\uA299\uA29A"+
-            "\uA29B\uA29C\uA29D\uA29E\uA29F\uA2A0\uA340\uA341"+
-            "\uA342\uA343\uA344\uA345\uA346\uA347\uA348\uA349"+
-            "\uA34A\uA34B\uA34C\uA34D\uA34E\uA34F\uA350\uA351"+
-            "\uA352\uA353\uA354\uA355\uA356\uA357\uA358\uA359"+
-            "\uA35A\uA35B\uA35C\uA35D\uA35E\uA35F\uA360\uA361"+
-            "\uA362\uA363\uA364\uA365\uA366\uA367\uA368\uA369"+
-            "\uA36A\uA36B\uA36C\uA36D\uA36E\uA36F\uA370\uA371"+
-            "\uA372\uA373\uA374\uA375\uA376\uA377\uA378\uA379"+
-            "\uA37A\uA37B\uA37C\uA37D\uA37E\uA380\uA381\uA382"+
-            "\uA383\uA384\uA385\uA386\uA387\uA388\uA389\uA38A"+
-            "\uA38B\uA38C\uA38D\uA38E\uA38F\uA390\uA391\uA392"+
-            "\uA393\uA394\uA395\uA396\uA397\uA398\uA399\uA39A"+
-            "\uA39B\uA39C\uA39D\uA39E\uA39F\uA3A0\uA440\uA441"+
-            "\uA442\uA443\uA444\uA445\uA446\uA447\uA448\uA449"+
-            "\uA44A\uA44B\uA44C\uA44D\uA44E\uA44F\uA450\uA451"+
-            "\uA452\uA453\uA454\uA455\uA456\uA457\uA458\uA459"+
-            "\uA45A\uA45B\uA45C\uA45D\uA45E\uA45F\uA460\uA461"+
-            "\uA462\uA463\uA464\uA465\uA466\uA467\uA468\uA469"+
-            "\uA46A\uA46B\uA46C\uA46D\uA46E\uA46F\uA470\uA471"+
-            "\uA472\uA473\uA474\uA475\uA476\uA477\uA478\uA479"+
-            "\uA47A\uA47B\uA47C\uA47D\uA47E\uA480\uA481\uA482"+
-            "\uA483\uA484\uA485\uA486\uA487\uA488\uA489\uA48A"+
-            "\uA48B\uA48C\uA48D\uA48E\uA48F\uA490\uA491\uA492"+
-            "\uA493\uA494\uA495\uA496\uA497\uA498\uA499\uA49A"+
-            "\uA49B\uA49C\uA49D\uA49E\uA49F\uA4A0\uA540\uA541"+
-            "\uA542\uA543\uA544\uA545\uA546\uA547\uA548\uA549"+
-            "\uA54A\uA54B\uA54C\uA54D\uA54E\uA54F\uA550\uA551"+
-            "\uA552\uA553\uA554\uA555\uA556\uA557\uA558\uA559"+
-            "\uA55A\uA55B\uA55C\uA55D\uA55E\uA55F\uA560\uA561"+
-            "\uA562\uA563\uA564\uA565\uA566\uA567\uA568\uA569"+
-            "\uA56A\uA56B\uA56C\uA56D\uA56E\uA56F\uA570\uA571"+
-            "\uA572\uA573\uA574\uA575\uA576\uA577\uA578\uA579"+
-            "\uA57A\uA57B\uA57C\uA57D\uA57E\uA580\uA581\uA582"+
-            "\uA583\uA584\uA585\uA586\uA587\uA588\uA589\uA58A"+
-            "\uA58B\uA58C\uA58D\uA58E\uA58F\uA590\uA591\uA592"+
-            "\uA593\uA594\uA595\uA596\uA597\uA598\uA599\uA59A"+
-            "\uA59B\uA59C\uA59D\uA59E\uA59F\uA5A0\uA640\uA641"+
-            "\uA642\uA643\uA644\uA645\uA646\uA647\uA648\uA649"+
-            "\uA64A\uA64B\uA64C\uA64D\uA64E\uA64F\uA650\uA651"+
-            "\uA652\uA653\uA654\uA655\uA656\uA657\uA658\uA659"+
-            "\uA65A\uA65B\uA65C\uA65D\uA65E\uA65F\uA660\uA661"+
-            "\uA662\uA663\uA664\uA665\uA666\uA667\uA668\uA669"+
-            "\uA66A\uA66B\uA66C\uA66D\uA66E\uA66F\uA670\uA671"+
-            "\uA672\uA673\uA674\uA675\uA676\uA677\uA678\uA679"+
-            "\uA67A\uA67B\uA67C\uA67D\uA67E\uA680\uA681\uA682"+
-            "\uA683\uA684\uA685\uA686\uA687\uA688\uA689\uA68A"+
-            "\uA68B\uA68C\uA68D\uA68E\uA68F\uA690\uA691\uA692"+
-            "\uA693\uA694\uA695\uA696\uA697\uA698\uA699\uA69A"+
-            "\uA69B\uA69C\uA69D\uA69E\uA69F\uA6A0\uA740\uA741"+
-            "\uA742\uA743\uA744\uA745\uA746\uA747\uA748\uA749"+
-            "\uA74A\uA74B\uA74C\uA74D\uA74E\uA74F\uA750\uA751"+
-            "\uA752\uA753\uA754\uA755\uA756\uA757\uA758\uA759"+
-            "\uA75A\uA75B\uA75C\uA75D\uA75E\uA75F\uA760\uA761"+
-            "\uA762\uA763\uA764\uA765\uA766\uA767\uA768\uA769"+
-            "\uA76A\uA76B\uA76C\uA76D\uA76E\uA76F\uA770\uA771"+
-            "\uA772\uA773\uA774\uA775\uA776\uA777\uA778\uA779"+
-            "\uA77A\uA77B\uA77C\uA77D\uA77E\uA780\uA781\uA782"+
-            "\uA783\uA784\uA785\uA786\uA787\uA788\uA789\uA78A"+
-            "\uA78B\uA78C\uA78D\uA78E\uA78F\uA790\uA791\uA792"+
-            "\uA793\uA794\uA795\uA796\uA797\uA798\uA799\uA79A"+
-            "\uA79B\uA79C\uA79D\uA79E\uA79F\uA7A0\uA2AB\uA2AC"+
-            "\uA2AD\uA2AE\uA2AF\uA2B0\u0000\uA2E4\uA2EF\uA2F0"+
-            "\uA2FD\uA2FE\uA4F4\uA4F5\uA4F6\uA4F7\uA4F8\uA4F9"+
-            "\uA4FA\uA4FB\uA4FC\uA4FD\uA4FE\uA5F7\uA5F8\uA5F9"+
-            "\uA5FA\uA5FB\uA5FC\uA5FD\uA5FE\uA6B9\uA6BA\uA6BB"+
-            "\uA6BC\uA6BD\uA6BE\uA6BF\uA6C0\uA6D9\uA6DA\uA6DB"+
-            "\uA6DC\uA6DD\uA6DE\uA6DF\uA6EC\uA6ED\uA6F3\uA6F6"+
-            "\uA6F7\uA6F8\uA6F9\uA6FA\uA6FB\uA6FC\uA6FD\uA6FE"+
-            "\uA7C2\uA7C3\uA7C4\uA7C5\uA7C6\uA7C7\uA7C8\uA7C9"+
-            "\uA7CA\uA7CB\uA7CC\uA7CD\uA7CE\uA7CF\uA7D0\uA7F2"+
-            "\uA7F3\uA7F4\uA7F5\uA7F6\uA7F7\uA7F8\uA7F9\uA7FA"+
-            "\uA7FB\uA7FC\uA7FD\uA7FE\uA896\uA897\uA898\uA899"+
-            "\uA89A\uA89B\uA89C\uA89D\uA89E\uA89F\uA8A0\uA8BC"+
-            "\u0000\uA8C1\uA8C2\uA8C3\uA8C4\uA8EA\uA8EB\uA8EC"+
-            "\uA8ED\uA8EE\uA8EF\uA8F0\uA8F1\uA8F2\uA8F3\uA8F4"+
-            "\uA8F5\uA8F6\uA8F7\uA8F8\uA8F9\uA8FA\uA8FB\uA8FC"+
-            "\uA8FD\uA8FE\uA958\uA95B\uA95D\uA95E\uA95F\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uA997\uA998\uA999\uA99A"+
-            "\uA99B\uA99C\uA99D\uA99E\uA99F\uA9A0\uA9A1\uA9A2"+
-            "\uA9A3\uA9F0\uA9F1\uA9F2\uA9F3\uA9F4\uA9F5\uA9F6"+
-            "\uA9F7\uA9F8\uA9F9\uA9FA\uA9FB\uA9FC\uA9FD\uA9FE"+
-            "\uD7FA\uD7FB\uD7FC\uD7FD\uD7FE\u0000\uFE51\uFE52"+
-            "\uFE53\u0000\u0000\u0000\u0000\u0000\uFE59\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE61\u0000"+
-            "\u0000\u0000\u0000\uFE66\uFE67\u0000\u0000\u0000"+
-            "\u0000\uFE6C\uFE6D\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uFE76\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uFE7E\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uFE90\uFE91\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uFEA0\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uFD9C\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uFD9D\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uFD9E\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFD9F"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uFDA0\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uFE40\uFE41\uFE42\uFE43"+
-            "\u0000\uFE44\u0000\uFE45\uFE46\u0000\u0000\u0000"+
-            "\uFE47\u0000\u0000\u0000\u0000\u0000\u0000\uFE48"+
-            "\uFE49\uFE4A\u0000\uFE4B\uFE4C\u0000\u0000\uFE4D"+
-            "\uFE4E\uFE4F\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-        private final static String innerIndex8=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA955\uA6F2\u0000\uA6F4\uA6F5\uA6E0\uA6E1\uA6F0"+
-            "\uA6F1\uA6E2\uA6E3\uA6EE\uA6EF\uA6E6\uA6E7\uA6E4"+
-            "\uA6E5\uA6E8\uA6E9\uA6EA\uA6EB\u0000\u0000\u0000"+
-            "\u0000\uA968\uA969\uA96A\uA96B\uA96C\uA96D\uA96E"+
-            "\uA96F\uA970\uA971\u0000\uA972\uA973\uA974\uA975"+
-            "\u0000\uA976\uA977\uA978\uA979\uA97A\uA97B\uA97C"+
-            "\uA97D\uA97E\uA980\uA981\uA982\uA983\uA984\u0000"+
-            "\uA985\uA986\uA987\uA988\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA3A1\uA3A2\uA3A3\uA1E7\uA3A5\uA3A6\uA3A7"+
-            "\uA3A8\uA3A9\uA3AA\uA3AB\uA3AC\uA3AD\uA3AE\uA3AF"+
-            "\uA3B0\uA3B1\uA3B2\uA3B3\uA3B4\uA3B5\uA3B6\uA3B7"+
-            "\uA3B8\uA3B9\uA3BA\uA3BB\uA3BC\uA3BD\uA3BE\uA3BF"+
-            "\uA3C0\uA3C1\uA3C2\uA3C3\uA3C4\uA3C5\uA3C6\uA3C7"+
-            "\uA3C8\uA3C9\uA3CA\uA3CB\uA3CC\uA3CD\uA3CE\uA3CF"+
-            "\uA3D0\uA3D1\uA3D2\uA3D3\uA3D4\uA3D5\uA3D6\uA3D7"+
-            "\uA3D8\uA3D9\uA3DA\uA3DB\uA3DC\uA3DD\uA3DE\uA3DF"+
-            "\uA3E0\uA3E1\uA3E2\uA3E3\uA3E4\uA3E5\uA3E6\uA3E7"+
-            "\uA3E8\uA3E9\uA3EA\uA3EB\uA3EC\uA3ED\uA3EE\uA3EF"+
-            "\uA3F0\uA3F1\uA3F2\uA3F3\uA3F4\uA3F5\uA3F6\uA3F7"+
-            "\uA3F8\uA3F9\uA3FA\uA3FB\uA3FC\uA3FD\uA1AB\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA1E9\uA1EA\uA956\uA3FE\uA957\uA3A4\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-        private final static short index1[] = {
-            1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 13, 14,
-            15, 16, 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, 0, 0, 0,
-            26, 27, 0, 28, 29, 0, 30, 31, 0, 32, 0, 0, 33, 34, 35, 36,
-            37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
-            53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
-            69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
-            85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
-            101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 0, 0, 0, 128, 129
-        };
-
-        private final static String index2[] = {
-            innerIndex0,
-            innerIndex1,
-            innerIndex2,
-            innerIndex3,
-            innerIndex4,
-            innerIndex5,
-            innerIndex6,
-            innerIndex7,
-            innerIndex8
-        };
-
-        /* The default implementation creates a decoder and we don't have one */
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11GB18030_1.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5271 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.ext.DoubleByteEncoder;
-
-public class X11GB18030_1 extends Charset {
-    public X11GB18030_1 () {
-        super("X11GB18030_1", null);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    /* Seems like supporting a decoder is required, but we aren't going
-     * to be publically exposing this class, so no need to waste work
-     */
-    public CharsetDecoder newDecoder() {
-        throw new Error("Decoder is not implemented for X11GB18030_1 Charset");
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11GB18030_1;
-    }
-    private static class Encoder extends DoubleByteEncoder {
-        public Encoder(Charset cs) {
-            super(cs, index1, index2);
-        }
-        protected int encodeSingle(char inputChar) {
-            return -1;
-        }
-        private final static String innerIndex0=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007"+
-            "\b\t\n\u000B\f\r\u000E\u000F"+
-            "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017"+
-            "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F"+
-            "\u0020\u0021\"\u0023\u0000\u0024\u0025\u0000"+
-            "\u0000\u0026\'\u0028\u0029\u002A\u002B\u002C"+
-            "\u0000\u0000\u002D\u002E\u002F\u0030\u0031\u0000"+
-            "\u0032\u0033\u0034\u0035\u0036\u0037\u0038\u0039"+
-            "\u003A\u003B\u003C\u003D\u003E\u003F\u0040\u0041"+
-            "\u0042\u0043\u0044\u0045\u0046\u0047\u0048\u0049"+
-            "\u004A\u004B\u004C\u004D\u004E\u004F\u0050\u0000"+
-            "\u0051\u0052\u0053\u0054\u0055\u0056\u0057\u0058"+
-            "\u0000\u0000\u0059\u005A\u005B\\\u005D\u005E"+
-            "\u0000\u0000\u0000\u005F\u0000\u0000\u0060\u0061"+
-            "\u0062\u0063\u0000\u0000\u0064\u0065\u0066\u0000"+
-            "\u0067\u0000\u0000\u0068\u0000\u0069\u006A\u006B"+
-            "\u006C\u0000\u006D\u006E\u006F\u0070\u0071\u0072"+
-            "\u0073\u0074\u0075\u0076\u0077\u0078\u0079\u007A"+
-            "\u007B\u007C\u007D\u0000\u007E\u007F\u0080\u0081"+
-            "\u0082\u0083\u0084\u0000\u0085\u0086\u0087\u0088"+
-            "\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090"+
-            "\u0091\u0092\u0093\u0000\u0094\u0095\u0096\u0097"+
-            "\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F"+
-            "\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7"+
-            "\u00A8\u00A9\u00AA\u00AB\u0000\u00AC\u00AD\u00AE"+
-            "\u0000\u00AF\u00B0\u00B1\u00B2\u0000\u00B3\u00B4"+
-            "\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC"+
-            "\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4"+
-            "\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC"+
-            "\u00CD\u00CE\u00CF\u0000\u00D0\u00D1\u00D2\u00D3"+
-            "\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB"+
-            "\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3"+
-            "\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB"+
-            "\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3"+
-            "\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB"+
-            "\u00FC\u00FD\u00FE\u00FF\u0100\u0101\u0102\u0103"+
-            "\u0104\u0105\u0106\u0107\u0108\u0109\u010A\u010B"+
-            "\u010C\u010D\u010E\u010F\u0110\u0111\u0112\u0113"+
-            "\u0114\u0115\u0116\u0117\u0118\u0119\u011A\u011B"+
-            "\u011C\u011D\u011E\u011F\u0120\u0121\u0122\u0123"+
-            "\u0124\u0125\u0126\u0127\u0128\u0129\u012A\u012B"+
-            "\u012C\u012D\u012E\u012F\u0130\u0131\u0000\u0132"+
-            "\u0000\u0133\u0000\u0134\u0000\u0135\u0000\u0136"+
-            "\u0000\u0137\u0000\u0138\u0000\u0139\u013A\u013B"+
-            "\u013C\u013D\u013E\u013F\u0140\u0141\u0142\u0143"+
-            "\u0144\u0145\u0146\u0147\u0148\u0149\u014A\u014B"+
-            "\u014C\u014D\u014E\u014F\u0150\u0151\u0152\u0153"+
-            "\u0154\u0000\u0155\u0156\u0157\u0158\u0159\u015A"+
-            "\u015B\u015C\u015D\u015E\u015F\u0160\u0161\u0162"+
-            "\u0163\u0164\u0165\u0166\u0167\u0168\u0169\u016A"+
-            "\u016B\u016C\u016D\u016E\u016F\u0170\u0171\u0172"+
-            "\u0173\u0174\u0175\u0176\u0177\u0178\u0179\u017A"+
-            "\u017B\u017C\u017D\u017E\u017F\u0180\u0181\u0182"+
-            "\u0183\u0184\u0185\u0186\u0187\u0188\u0189\u018A"+
-            "\u018B\u018C\u018D\u018E\u018F\u0190\u0191\u0192"+
-            "\u0193\u0194\u0195\u0196\u0197\u0198\u0199\u019A"+
-            "\u019B\u019C\u019D\u019E\u019F\u01A0\u01A1\u01A2"+
-            "\u01A3\u01A4\u01A5\u01A6\u01A7\u01A8\u01A9\u01AA"+
-            "\u01AB\u0000\u01AC\u01AD\u01AE\u01AF\u01B0\u01B1"+
-            "\u01B2\u01B3\u01B4\u01B5\u01B6\u01B7\u01B8\u01B9"+
-            "\u01BA\u0000\u01BB\u01BC\u01BD\u01BE\u01BF\u01C0"+
-            "\u01C1\u01C2\u01C3\u01C4\u01C5\u01C6\u01C7\u01C8"+
-            "\u01C9\u01CA\u01CB\u01CC\u01CD\u01CE\u01CF\u01D0"+
-            "\u01D1\u01D2\u01D3\u01D4\u01D5\u01D6\u01D7\u01D8"+
-            "\u01D9\u01DA\u01DB\u01DC\u01DD\u01DE\u01DF\u01E0"+
-            "\u01E1\u01E2\u01E3\u01E4\u01E5\u01E6\u01E7\u01E8"+
-            "\u01E9\u01EA\u01EB\u01EC\u01ED\u01EE\u01EF\u01F0"+
-            "\u01F1\u01F2\u01F3\u01F4\u01F5\u01F6\u01F7\u01F8"+
-            "\u01F9\u01FA\u01FB\u01FC\u01FD\u01FE\u01FF\u0200"+
-            "\u0201\u0202\u0203\u0204\u0205\u0206\u0207\u0208"+
-            "\u0209\u020A\u020B\u020C\u020D\u020E\u020F\u0210"+
-            "\u0211\u0212\u0213\u0214\u0215\u0216\u0217\u0218"+
-            "\u0219\u021A\u021B\u021C\u021D\u021E\u021F\u0000"+
-            "\u0220\u0000\u0000\u0000\u0221\u0222\u0223\u0224"+
-            "\u0225\u0226\u0227\u0228\u0229\u022A\u022B\u022C"+
-            "\u022D\u0000\u022E\u022F\u0230\u0231\u0232\u0233"+
-            "\u0234\u0235\u0236\u0237\u0238\u0239\u023A\u023B"+
-            "\u023C\u023D\u023E\u023F\u0240\u0241\u0242\u0243"+
-            "\u0244\u0245\u0246\u0247\u0248\u0249\u024A\u024B"+
-            "\u024C\u024D\u024E\u024F\u0250\u0251\u0252\u0253"+
-            "\u0254\u0255\u0256\u0257\u0258\u0259\u025A\u025B"+
-            "\u025C\u025D\u025E\u025F\u0260\u0261\u0262\u0263"+
-            "\u0264\u0265\u0266\u0267\u0268\u0269\u026A\u026B"+
-            "\u026C\u026D\u026E\u026F\u0270\u0271\u0272\u0273"+
-            "\u0274\u0275\u0276\u0277\u0278\u0279\u027A\u027B"+
-            "\u027C\u027D\u027E\u027F\u0280\u0281\u0282\u0283"+
-            "\u0284\u0285\u0286\u0287\u0288\u0289\u028A\u028B"+
-            "\u028C\u028D\u028E\u028F\u0290\u0291\u0292\u0293"+
-            "\u0294\u0295\u0296\u0297\u0298\u0299\u029A\u029B"+
-            "\u029C\u029D\u029E\u029F\u02A0\u02A1\u02A2\u02A3"+
-            "\u02A4\u02A5\u02A6\u02A7\u02A8\u02A9\u02AA\u02AB"+
-            "\u02AC\u02AD\u02AE\u02AF\u02B0\u02B1\u02B2\u02B3"+
-            "\u02B4\u02B5\u02B6\u02B7\u02B8\u02B9\u02BA\u02BB"+
-            "\u02BC\u02BD\u02BE\u02BF\u02C0\u02C1\u02C2\u02C3"+
-            "\u02C4\u02C5\u02C6\u02C7\u02C8\u02C9\u02CA\u02CB"+
-            "\u02CC\u02CD\u02CE\u02CF\u02D0\u02D1\u02D2\u02D3"+
-            "\u02D4\u02D5\u02D6\u02D7\u02D8\u02D9\u02DA\u02DB"+
-            "\u02DC\u02DD\u02DE\u02DF\u02E0\u02E1\u02E2\u02E3"+
-            "\u02E4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u02E5\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u02E6\u02E7\u02E8\u02E9\u02EA\u02EB"+
-            "\u02EC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u02ED\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u02EE\u02EF\u02F0\u02F1\u02F2\u02F3"+
-            "\u02F4\u02F5\u02F6\u02F7\u02F8\u02F9\u02FA\u02FB"+
-            "\u02FC\u02FD\u02FE\u02FF\u0300\u0301\u0302\u0303"+
-            "\u0304\u0305\u0306\u0307\u0308\u0309\u030A\u030B"+
-            "\u030C\u030D\u030E\u030F\u0310\u0311\u0312\u0313"+
-            "\u0314\u0315\u0316\u0317\u0318\u0319\u031A\u031B"+
-            "\u031C\u031D\u031E\u031F\u0320\u0321\u0322\u0323"+
-            "\u0324\u0000\u0325\u0326\u0327\u0328\u0329\u032A"+
-            "\u032B\u032C\u032D\u032E\u032F\u0330\u0331\u0332"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0333\u0000\u0334\u0335\u0336\u0337\u0338\u0339"+
-            "\u033A\u033B\u033C\u033D\u033E\u033F\u0340\u0341"+
-            "\u0342\u0343\u0344\u0345\u0346\u0347\u0348\u0349"+
-            "\u034A\u034B\u034C\u034D\u034E\u034F\u0350\u0351"+
-            "\u0352\u0353\u0354\u0355\u0356\u0357\u0358\u0359"+
-            "\u035A\u035B\u035C\u035D\u035E\u035F\u0360\u0361"+
-            "\u0362\u0363\u0364\u0365\u0366\u0367\u0368\u0369"+
-            "\u036A\u036B\u036C\u036D\u036E\u036F\u0370\u0371"+
-            "\u0372\u0373\u0374\u0375\u0376\u0377\u0378\u0379"+
-            "\u037A\u037B\u037C\u037D\u037E\u037F\u0380\u0381"+
-            "\u0382\u0383\u0384\u0385\u0386\u0387\u0388\u0389"+
-            "\u038A\u038B\u038C\u038D\u038E\u038F\u0390\u0391"+
-            "\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399"+
-            "\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1"+
-            "\u03A2\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9"+
-            "\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1"+
-            "\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9"+
-            "\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1"+
-            "\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9"+
-            "\u03CA\u03CB\u03CC\u03CD\u03CE\u03CF\u03D0\u03D1"+
-            "\u03D2\u03D3\u03D4\u03D5\u03D6\u03D7\u03D8\u03D9"+
-            "\u03DA\u03DB\u03DC\u03DD\u03DE\u03DF\u03E0\u03E1"+
-            "\u03E2\u03E3\u03E4\u03E5\u03E6\u03E7\u03E8\u03E9"+
-            "\u03EA\u03EB\u03EC\u03ED\u03EE\u03EF\u03F0\u03F1"+
-            "\u03F2\u03F3\u03F4\u03F5\u03F6\u03F7\u03F8\u03F9"+
-            "\u03FA\u03FB\u03FC\u03FD\u03FE\u03FF\u0400\u0401"+
-            "\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409"+
-            "\u040A\u040B\u040C\u040D\u040E\u040F\u0410\u0411"+
-            "\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419"+
-            "\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421"+
-            "\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429"+
-            "\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431"+
-            "\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439"+
-            "\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441"+
-            "\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449"+
-            "\u044A\u044B\u044C\u044D\u044E\u044F\u0450\u0451"+
-            "\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459"+
-            "\u045A\u045B\u045C\u045D\u045E\u045F\u0460\u0461"+
-            "\u0462\u0463\u0464\u0465\u0466\u0467\u0468\u0469"+
-            "\u046A\u046B\u046C\u046D\u046E\u046F\u0470\u0471"+
-            "\u0472\u0473\u0474\u0475\u0476\u0477\u0478\u0479"+
-            "\u047A\u047B\u047C\u047D\u047E\u047F\u0480\u0481"+
-            "\u0482\u0483\u0484\u0485\u0486\u0487\u0488\u0489"+
-            "\u048A\u048B\u048C\u048D\u048E\u048F\u0490\u0491"+
-            "\u0492\u0493\u0494\u0495\u0496\u0497\u0498\u0499"+
-            "\u049A\u049B\u049C\u049D\u049E\u049F\u04A0\u04A1"+
-            "\u04A2\u04A3\u04A4\u04A5\u04A6\u04A7\u04A8\u04A9"+
-            "\u04AA\u04AB\u04AC\u04AD\u04AE\u04AF\u04B0\u04B1"+
-            "\u04B2\u04B3\u04B4\u04B5\u04B6\u04B7\u04B8\u04B9"+
-            "\u04BA\u04BB\u04BC\u04BD\u04BE\u04BF\u04C0\u04C1"+
-            "\u04C2\u04C3\u04C4\u04C5\u04C6\u04C7\u04C8\u04C9"+
-            "\u04CA\u04CB\u04CC\u04CD\u04CE\u04CF\u04D0\u04D1"+
-            "\u04D2\u04D3\u04D4\u04D5\u04D6\u04D7\u04D8\u04D9"+
-            "\u04DA\u04DB\u04DC\u04DD\u04DE\u04DF\u04E0\u04E1"+
-            "\u04E2\u04E3\u04E4\u04E5\u04E6\u04E7\u04E8\u04E9"+
-            "\u04EA\u04EB\u04EC\u04ED\u04EE\u04EF\u04F0\u04F1"+
-            "\u04F2\u04F3\u04F4\u04F5\u04F6\u04F7\u04F8\u04F9"+
-            "\u04FA\u04FB\u04FC\u04FD\u04FE\u04FF\u0500\u0501"+
-            "\u0502\u0503\u0504\u0505\u0506\u0507\u0508\u0509"+
-            "\u050A\u050B\u050C\u050D\u050E\u050F\u0510\u0511"+
-            "\u0512\u0513\u0514\u0515\u0516\u0517\u0518\u0519"+
-            "\u051A\u051B\u051C\u051D\u051E\u051F\u0520\u0521"+
-            "\u0522\u0523\u0524\u0525\u0526\u0527\u0528\u0529"+
-            "\u052A\u052B\u052C\u052D\u052E\u052F\u0530\u0531"+
-            "\u0532\u0533\u0534\u0535\u0536\u0537\u0538\u0539"+
-            "\u053A\u053B\u053C\u053D\u053E\u053F\u0540\u0541"+
-            "\u0542\u0543\u0544\u0545\u0546\u0547\u0548\u0549"+
-            "\u054A\u054B\u054C\u054D\u054E\u054F\u0550\u0551"+
-            "\u0552\u0553\u0554\u0555\u0556\u0557\u0558\u0559"+
-            "\u055A\u055B\u055C\u055D\u055E\u055F\u0560\u0561"+
-            "\u0562\u0563\u0564\u0565\u0566\u0567\u0568\u0569"+
-            "\u056A\u056B\u056C\u056D\u056E\u056F\u0570\u0571"+
-            "\u0572\u0573\u0574\u0575\u0576\u0577\u0578\u0579"+
-            "\u057A\u057B\u057C\u057D\u057E\u057F\u0580\u0581"+
-            "\u0582\u0583\u0584\u0585\u0586\u0587\u0588\u0589"+
-            "\u058A\u058B\u058C\u058D\u058E\u058F\u0590\u0591"+
-            "\u0592\u0593\u0594\u0595\u0596\u0597\u0598\u0599"+
-            "\u059A\u059B\u059C\u059D\u059E\u059F\u05A0\u05A1"+
-            "\u05A2\u05A3\u05A4\u05A5\u05A6\u05A7\u05A8\u05A9"+
-            "\u05AA\u05AB\u05AC\u05AD\u05AE\u05AF\u05B0\u05B1"+
-            "\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9"+
-            "\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1"+
-            "\u05C2\u05C3\u05C4\u05C5\u05C6\u05C7\u05C8\u05C9"+
-            "\u05CA\u05CB\u05CC\u05CD\u05CE\u05CF\u05D0\u05D1"+
-            "\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9"+
-            "\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1"+
-            "\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9"+
-            "\u05EA\u05EB\u05EC\u05ED\u05EE\u05EF\u05F0\u05F1"+
-            "\u05F2\u05F3\u05F4\u05F5\u05F6\u05F7\u05F8\u05F9"+
-            "\u05FA\u05FB\u05FC\u05FD\u05FE\u05FF\u0600\u0601"+
-            "\u0602\u0603\u0604\u0605\u0606\u0607\u0608\u0609"+
-            "\u060A\u060B\u060C\u060D\u060E\u060F\u0610\u0611"+
-            "\u0612\u0613\u0614\u0615\u0616\u0617\u0618\u0619"+
-            "\u061A\u061B\u061C\u061D\u061E\u061F\u0620\u0621"+
-            "\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629"+
-            "\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631"+
-            "\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639"+
-            "\u063A\u063B\u063C\u063D\u063E\u063F\u0640\u0641"+
-            "\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649"+
-            "\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651"+
-            "\u0652\u0653\u0654\u0655\u0656\u0657\u0658\u0659"+
-            "\u065A\u065B\u065C\u065D\u065E\u065F\u0660\u0661"+
-            "\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669"+
-            "\u066A\u066B\u066C\u066D\u066E\u066F\u0670\u0671"+
-            "\u0672\u0673\u0674\u0675\u0676\u0677\u0678\u0679"+
-            "\u067A\u067B\u067C\u067D\u067E\u067F\u0680\u0681"+
-            "\u0682\u0683\u0684\u0685\u0686\u0687\u0688\u0689"+
-            "\u068A\u068B\u068C\u068D\u068E\u068F\u0690\u0691"+
-            "\u0692\u0693\u0694\u0695\u0696\u0697\u0698\u0699"+
-            "\u069A\u069B\u069C\u069D\u069E\u069F\u06A0\u06A1"+
-            "\u06A2\u06A3\u06A4\u06A5\u06A6\u06A7\u06A8\u06A9"+
-            "\u06AA\u06AB\u06AC\u06AD\u06AE\u06AF\u06B0\u06B1"+
-            "\u06B2\u06B3\u06B4\u06B5\u06B6\u06B7\u06B8\u06B9"+
-            "\u06BA\u06BB\u06BC\u06BD\u06BE\u06BF\u06C0\u06C1"+
-            "\u06C2\u06C3\u06C4\u06C5\u06C6\u06C7\u06C8\u06C9"+
-            "\u06CA\u06CB\u06CC\u06CD\u06CE\u06CF\u06D0\u06D1"+
-            "\u06D2\u06D3\u06D4\u06D5\u06D6\u06D7\u06D8\u06D9"+
-            "\u06DA\u06DB\u06DC\u06DD\u06DE\u06DF\u06E0\u06E1"+
-            "\u06E2\u06E3\u06E4\u06E5\u06E6\u06E7\u06E8\u06E9"+
-            "\u06EA\u06EB\u06EC\u06ED\u06EE\u06EF\u06F0\u06F1"+
-            "\u06F2\u06F3\u06F4\u06F5\u06F6\u06F7\u06F8\u06F9"+
-            "\u06FA\u06FB\u06FC\u06FD\u06FE\u06FF\u0700\u0701"+
-            "\u0702\u0703\u0704\u0705\u0706\u0707\u0708\u0709"+
-            "\u070A\u070B\u070C\u070D\u070E\u070F\u0710\u0711"+
-            "\u0712\u0713\u0714\u0715\u0716\u0717\u0718\u0719"+
-            "\u071A\u071B\u071C\u071D\u071E\u071F\u0720\u0721"+
-            "\u0722\u0723\u0724\u0725\u0726\u0727\u0728\u0729"+
-            "\u072A\u072B\u072C\u072D\u072E\u072F\u0730\u0731"+
-            "\u0732\u0733\u0734\u0735\u0736\u0737\u0738\u0739"+
-            "\u073A\u073B\u073C\u073D\u073E\u073F\u0740\u0741"+
-            "\u0742\u0743\u0744\u0745\u0746\u0747\u0748\u0749"+
-            "\u074A\u074B\u074C\u074D\u074E\u074F\u0750\u0751"+
-            "\u0752\u0753\u0754\u0755\u0756\u0757\u0758\u0759"+
-            "\u075A\u075B\u075C\u075D\u075E\u075F\u0760\u0761"+
-            "\u0762\u0763\u0764\u0765\u0766\u0767\u0768\u0769"+
-            "\u076A\u076B\u076C\u076D\u076E\u076F\u0770\u0771"+
-            "\u0772\u0773\u0774\u0775\u0776\u0777\u0778\u0779"+
-            "\u077A\u077B\u077C\u077D\u077E\u077F\u0780\u0781"+
-            "\u0782\u0783\u0784\u0785\u0786\u0787\u0788\u0789"+
-            "\u078A\u078B\u078C\u078D\u078E\u078F\u0790\u0791"+
-            "\u0792\u0793\u0794\u0795\u0796\u0797\u0798\u0799"+
-            "\u079A\u079B\u079C\u079D\u079E\u079F\u07A0\u07A1"+
-            "\u07A2\u07A3\u07A4\u07A5\u07A6\u07A7\u07A8\u07A9"+
-            "\u07AA\u07AB\u07AC\u07AD\u07AE\u07AF\u07B0\u07B1"+
-            "\u07B2\u07B3\u07B4\u07B5\u07B6\u07B7\u07B8\u07B9"+
-            "\u07BA\u07BB\u07BC\u07BD\u07BE\u07BF\u07C0\u07C1"+
-            "\u07C2\u07C3\u07C4\u07C5\u07C6\u07C7\u07C8\u07C9"+
-            "\u07CA\u07CB\u07CC\u07CD\u07CE\u07CF\u07D0\u07D1"+
-            "\u07D2\u07D3\u07D4\u07D5\u07D6\u07D7\u07D8\u07D9"+
-            "\u07DA\u07DB\u07DC\u07DD\u07DE\u07DF\u07E0\u07E1"+
-            "\u07E2\u07E3\u07E4\u07E5\u07E6\u07E7\u07E8\u07E9"+
-            "\u07EA\u07EB\u07EC\u07ED\u07EE\u07EF\u07F0\u07F1"+
-            "\u07F2\u07F3\u07F4\u07F5\u07F6\u07F7\u07F8\u07F9"+
-            "\u07FA\u07FB\u07FC\u07FD\u07FE\u07FF\u0800\u0801"+
-            "\u0802\u0803\u0804\u0805\u0806\u0807\u0808\u0809"+
-            "\u080A\u080B\u080C\u080D\u080E\u080F\u0810\u0811"+
-            "\u0812\u0813\u0814\u0815\u0816\u0817\u0818\u0819"+
-            "\u081A\u081B\u081C\u081D\u081E\u081F\u0820\u0821"+
-            "\u0822\u0823\u0824\u0825\u0826\u0827\u0828\u0829"+
-            "\u082A\u082B\u082C\u082D\u082E\u082F\u0830\u0831"+
-            "\u0832\u0833\u0834\u0835\u0836\u0837\u0838\u0839"+
-            "\u083A\u083B\u083C\u083D\u083E\u083F\u0840\u0841"+
-            "\u0842\u0843\u0844\u0845\u0846\u0847\u0848\u0849"+
-            "\u084A\u084B\u084C\u084D\u084E\u084F\u0850\u0851"+
-            "\u0852\u0853\u0854\u0855\u0856\u0857\u0858\u0859"+
-            "\u085A\u085B\u085C\u085D\u085E\u085F\u0860\u0861"+
-            "\u0862\u0863\u0864\u0865\u0866\u0867\u0868\u0869"+
-            "\u086A\u086B\u086C\u086D\u086E\u086F\u0870\u0871"+
-            "\u0872\u0873\u0874\u0875\u0876\u0877\u0878\u0879"+
-            "\u087A\u087B\u087C\u087D\u087E\u087F\u0880\u0881"+
-            "\u0882\u0883\u0884\u0885\u0886\u0887\u0888\u0889"+
-            "\u088A\u088B\u088C\u088D\u088E\u088F\u0890\u0891"+
-            "\u0892\u0893\u0894\u0895\u0896\u0897\u0898\u0899"+
-            "\u089A\u089B\u089C\u089D\u089E\u089F\u08A0\u08A1"+
-            "\u08A2\u08A3\u08A4\u08A5\u08A6\u08A7\u08A8\u08A9"+
-            "\u08AA\u08AB\u08AC\u08AD\u08AE\u08AF\u08B0\u08B1"+
-            "\u08B2\u08B3\u08B4\u08B5\u08B6\u08B7\u08B8\u08B9"+
-            "\u08BA\u08BB\u08BC\u08BD\u08BE\u08BF\u08C0\u08C1"+
-            "\u08C2\u08C3\u08C4\u08C5\u08C6\u08C7\u08C8\u08C9"+
-            "\u08CA\u08CB\u08CC\u08CD\u08CE\u08CF\u08D0\u08D1"+
-            "\u08D2\u08D3\u08D4\u08D5\u08D6\u08D7\u08D8\u08D9"+
-            "\u08DA\u08DB\u08DC\u08DD\u08DE\u08DF\u08E0\u08E1"+
-            "\u08E2\u08E3\u08E4\u08E5\u08E6\u08E7\u08E8\u08E9"+
-            "\u08EA\u08EB\u08EC\u08ED\u08EE\u08EF\u08F0\u08F1"+
-            "\u08F2\u08F3\u08F4\u08F5\u08F6\u08F7\u08F8\u08F9"+
-            "\u08FA\u08FB\u08FC\u08FD\u08FE\u08FF\u0900\u0901"+
-            "\u0902\u0903\u0904\u0905\u0906\u0907\u0908\u0909"+
-            "\u090A\u090B\u090C\u090D\u090E\u090F\u0910\u0911"+
-            "\u0912\u0913\u0914\u0915\u0916\u0917\u0918\u0919"+
-            "\u091A\u091B\u091C\u091D\u091E\u091F\u0920\u0921"+
-            "\u0922\u0923\u0924\u0925\u0926\u0927\u0928\u0929"+
-            "\u092A\u092B\u092C\u092D\u092E\u092F\u0930\u0931"+
-            "\u0932\u0933\u0934\u0935\u0936\u0937\u0938\u0939"+
-            "\u093A\u093B\u093C\u093D\u093E\u093F\u0940\u0941"+
-            "\u0942\u0943\u0944\u0945\u0946\u0947\u0948\u0949"+
-            "\u094A\u094B\u094C\u094D\u094E\u094F\u0950\u0951"+
-            "\u0952\u0953\u0954\u0955\u0956\u0957\u0958\u0959"+
-            "\u095A\u095B\u095C\u095D\u095E\u095F\u0960\u0961"+
-            "\u0962\u0963\u0964\u0965\u0966\u0967\u0968\u0969"+
-            "\u096A\u096B\u096C\u096D\u096E\u096F\u0970\u0971"+
-            "\u0972\u0973\u0974\u0975\u0976\u0977\u0978\u0979"+
-            "\u097A\u097B\u097C\u097D\u097E\u097F\u0980\u0981"+
-            "\u0982\u0983\u0984\u0985\u0986\u0987\u0988\u0989"+
-            "\u098A\u098B\u098C\u098D\u098E\u098F\u0990\u0991"+
-            "\u0992\u0993\u0994\u0995\u0996\u0997\u0998\u0999"+
-            "\u099A\u099B\u099C\u099D\u099E\u099F\u09A0\u09A1"+
-            "\u09A2\u09A3\u09A4\u09A5\u09A6\u09A7\u09A8\u09A9"+
-            "\u09AA\u09AB\u09AC\u09AD\u09AE\u09AF\u09B0\u09B1"+
-            "\u09B2\u09B3\u09B4\u09B5\u09B6\u09B7\u09B8\u09B9"+
-            "\u09BA\u09BB\u09BC\u09BD\u09BE\u09BF\u09C0\u09C1"+
-            "\u09C2\u09C3\u09C4\u09C5\u09C6\u09C7\u09C8\u09C9"+
-            "\u09CA\u09CB\u09CC\u09CD\u09CE\u09CF\u09D0\u09D1"+
-            "\u09D2\u09D3\u09D4\u09D5\u09D6\u09D7\u09D8\u09D9"+
-            "\u09DA\u09DB\u09DC\u09DD\u09DE\u09DF\u09E0\u09E1"+
-            "\u09E2\u09E3\u09E4\u09E5\u09E6\u09E7\u09E8\u09E9"+
-            "\u09EA\u09EB\u09EC\u09ED\u09EE\u09EF\u09F0\u09F1"+
-            "\u09F2\u09F3\u09F4\u09F5\u09F6\u09F7\u09F8\u09F9"+
-            "\u09FA\u09FB\u09FC\u09FD\u09FE\u09FF\u0A00\u0A01"+
-            "\u0A02\u0A03\u0A04\u0A05\u0A06\u0A07\u0A08\u0A09"+
-            "\u0A0A\u0A0B\u0A0C\u0A0D\u0A0E\u0A0F\u0A10\u0A11"+
-            "\u0A12\u0A13\u0A14\u0A15\u0A16\u0A17\u0A18\u0A19"+
-            "\u0A1A\u0A1B\u0A1C\u0A1D\u0A1E\u0A1F\u0A20\u0A21"+
-            "\u0A22\u0A23\u0A24\u0A25\u0A26\u0A27\u0A28\u0A29"+
-            "\u0A2A\u0A2B\u0A2C\u0A2D\u0A2E\u0A2F\u0A30\u0A31"+
-            "\u0A32\u0A33\u0A34\u0A35\u0A36\u0A37\u0A38\u0A39"+
-            "\u0A3A\u0A3B\u0A3C\u0A3D\u0A3E\u0A3F\u0A40\u0A41"+
-            "\u0A42\u0A43\u0A44\u0A45\u0A46\u0A47\u0A48\u0A49"+
-            "\u0A4A\u0A4B\u0A4C\u0A4D\u0A4E\u0A4F\u0A50\u0A51"+
-            "\u0A52\u0A53\u0A54\u0A55\u0A56\u0A57\u0A58\u0A59"+
-            "\u0A5A\u0A5B\u0A5C\u0A5D\u0A5E\u0A5F\u0A60\u0A61"+
-            "\u0A62\u0A63\u0A64\u0A65\u0A66\u0A67\u0A68\u0A69"+
-            "\u0A6A\u0A6B\u0A6C\u0A6D\u0A6E\u0A6F\u0A70\u0A71"+
-            "\u0A72\u0A73\u0A74\u0A75\u0A76\u0A77\u0A78\u0A79"+
-            "\u0A7A\u0A7B\u0A7C\u0A7D\u0A7E\u0A7F\u0A80\u0A81"+
-            "\u0A82\u0A83\u0A84\u0A85\u0A86\u0A87\u0A88\u0A89"+
-            "\u0A8A\u0A8B\u0A8C\u0A8D\u0A8E\u0A8F\u0A90\u0A91"+
-            "\u0A92\u0A93\u0A94\u0A95\u0A96\u0A97\u0A98\u0A99"+
-            "\u0A9A\u0A9B\u0A9C\u0A9D\u0A9E\u0A9F\u0AA0\u0AA1"+
-            "\u0AA2\u0AA3\u0AA4\u0AA5\u0AA6\u0AA7\u0AA8\u0AA9"+
-            "\u0AAA\u0AAB\u0AAC\u0AAD\u0AAE\u0AAF\u0AB0\u0AB1"+
-            "\u0AB2\u0AB3\u0AB4\u0AB5\u0AB6\u0AB7\u0AB8\u0AB9"+
-            "\u0ABA\u0ABB\u0ABC\u0ABD\u0ABE\u0ABF\u0AC0\u0AC1"+
-            "\u0AC2\u0AC3\u0AC4\u0AC5\u0AC6\u0AC7\u0AC8\u0AC9"+
-            "\u0ACA\u0ACB\u0ACC\u0ACD\u0ACE\u0ACF\u0AD0\u0AD1"+
-            "\u0AD2\u0AD3\u0AD4\u0AD5\u0AD6\u0AD7\u0AD8\u0AD9"+
-            "\u0ADA\u0ADB\u0ADC\u0ADD\u0ADE\u0ADF\u0AE0\u0AE1"+
-            "\u0AE2\u0AE3\u0AE4\u0AE5\u0AE6\u0AE7\u0AE8\u0AE9"+
-            "\u0AEA\u0AEB\u0AEC\u0AED\u0AEE\u0AEF\u0AF0\u0AF1"+
-            "\u0AF2\u0AF3\u0AF4\u0AF5\u0AF6\u0AF7\u0AF8\u0AF9"+
-            "\u0AFA\u0AFB\u0AFC\u0AFD\u0AFE\u0AFF\u0B00\u0B01"+
-            "\u0B02\u0B03\u0B04\u0B05\u0B06\u0B07\u0B08\u0B09"+
-            "\u0B0A\u0B0B\u0B0C\u0B0D\u0B0E\u0B0F\u0B10\u0B11"+
-            "\u0B12\u0B13\u0B14\u0B15\u0B16\u0B17\u0B18\u0B19"+
-            "\u0B1A\u0B1B\u0B1C\u0B1D\u0B1E\u0B1F\u0B20\u0B21"+
-            "\u0B22\u0B23\u0B24\u0B25\u0B26\u0B27\u0B28\u0B29"+
-            "\u0B2A\u0B2B\u0B2C\u0B2D\u0B2E\u0B2F\u0B30\u0B31"+
-            "\u0B32\u0B33\u0B34\u0B35\u0B36\u0B37\u0B38\u0B39"+
-            "\u0B3A\u0B3B\u0B3C\u0B3D\u0B3E\u0B3F\u0B40\u0B41"+
-            "\u0B42\u0B43\u0B44\u0B45\u0B46\u0B47\u0B48\u0B49"+
-            "\u0B4A\u0B4B\u0B4C\u0B4D\u0B4E\u0B4F\u0B50\u0B51"+
-            "\u0B52\u0B53\u0B54\u0B55\u0B56\u0B57\u0B58\u0B59"+
-            "\u0B5A\u0B5B\u0B5C\u0B5D\u0B5E\u0B5F\u0B60\u0B61"+
-            "\u0B62\u0B63\u0B64\u0B65\u0B66\u0B67\u0B68\u0B69"+
-            "\u0B6A\u0B6B\u0B6C\u0B6D\u0B6E\u0B6F\u0B70\u0B71"+
-            "\u0B72\u0B73\u0B74\u0B75\u0B76\u0B77\u0B78\u0B79"+
-            "\u0B7A\u0B7B\u0B7C\u0B7D\u0B7E\u0B7F\u0B80\u0B81"+
-            "\u0B82\u0B83\u0B84\u0B85\u0B86\u0B87\u0B88\u0B89"+
-            "\u0B8A\u0B8B\u0B8C\u0B8D\u0B8E\u0B8F\u0B90\u0B91"+
-            "\u0B92\u0B93\u0B94\u0B95\u0B96\u0B97\u0B98\u0B99"+
-            "\u0B9A\u0B9B\u0B9C\u0B9D\u0B9E\u0B9F\u0BA0\u0BA1"+
-            "\u0BA2\u0BA3\u0BA4\u0BA5\u0BA6\u0BA7\u0BA8\u0BA9"+
-            "\u0BAA\u0BAB\u0BAC\u0BAD\u0BAE\u0BAF\u0BB0\u0BB1"+
-            "\u0BB2\u0BB3\u0BB4\u0BB5\u0BB6\u0BB7\u0BB8\u0BB9"+
-            "\u0BBA\u0BBB\u0BBC\u0BBD\u0BBE\u0BBF\u0BC0\u0BC1"+
-            "\u0BC2\u0BC3\u0BC4\u0BC5\u0BC6\u0BC7\u0BC8\u0BC9"+
-            "\u0BCA\u0BCB\u0BCC\u0BCD\u0BCE\u0BCF\u0BD0\u0BD1"+
-            "\u0BD2\u0BD3\u0BD4\u0BD5\u0BD6\u0BD7\u0BD8\u0BD9"+
-            "\u0BDA\u0BDB\u0BDC\u0BDD\u0BDE\u0BDF\u0BE0\u0BE1"+
-            "\u0BE2\u0BE3\u0BE4\u0BE5\u0BE6\u0BE7\u0BE8\u0BE9"+
-            "\u0BEA\u0BEB\u0BEC\u0BED\u0BEE\u0BEF\u0BF0\u0BF1"+
-            "\u0BF2\u0BF3\u0BF4\u0BF5\u0BF6\u0BF7\u0BF8\u0BF9"+
-            "\u0BFA\u0BFB\u0BFC\u0BFD\u0BFE\u0BFF\u0C00\u0C01"+
-            "\u0C02\u0C03\u0C04\u0C05\u0C06\u0C07\u0C08\u0C09"+
-            "\u0C0A\u0C0B\u0C0C\u0C0D\u0C0E\u0C0F\u0C10\u0C11"+
-            "\u0C12\u0C13\u0C14\u0C15\u0C16\u0C17\u0C18\u0C19"+
-            "\u0C1A\u0C1B\u0C1C\u0C1D\u0C1E\u0C1F\u0C20\u0C21"+
-            "\u0C22\u0C23\u0C24\u0C25\u0C26\u0C27\u0C28\u0C29"+
-            "\u0C2A\u0C2B\u0C2C\u0C2D\u0C2E\u0C2F\u0C30\u0C31"+
-            "\u0C32\u0C33\u0C34\u0C35\u0C36\u0C37\u0C38\u0C39"+
-            "\u0C3A\u0C3B\u0C3C\u0C3D\u0C3E\u0C3F\u0C40\u0C41"+
-            "\u0C42\u0C43\u0C44\u0C45\u0C46\u0C47\u0C48\u0C49"+
-            "\u0C4A\u0C4B\u0C4C\u0C4D\u0C4E\u0C4F\u0C50\u0C51"+
-            "\u0C52\u0C53\u0C54\u0C55\u0C56\u0C57\u0C58\u0C59"+
-            "\u0C5A\u0C5B\u0C5C\u0C5D\u0C5E\u0C5F\u0C60\u0C61"+
-            "\u0C62\u0C63\u0C64\u0C65\u0C66\u0C67\u0C68\u0C69"+
-            "\u0C6A\u0C6B\u0C6C\u0C6D\u0C6E\u0C6F\u0C70\u0C71"+
-            "\u0C72\u0C73\u0C74\u0C75\u0C76\u0C77\u0C78\u0C79"+
-            "\u0C7A\u0C7B\u0C7C\u0C7D\u0C7E\u0C7F\u0C80\u0C81"+
-            "\u0C82\u0C83\u0C84\u0C85\u0C86\u0C87\u0C88\u0C89"+
-            "\u0C8A\u0C8B\u0C8C\u0C8D\u0C8E\u0C8F\u0C90\u0C91"+
-            "\u0C92\u0C93\u0C94\u0C95\u0C96\u0C97\u0C98\u0C99"+
-            "\u0C9A\u0C9B\u0C9C\u0C9D\u0C9E\u0C9F\u0CA0\u0CA1"+
-            "\u0CA2\u0CA3\u0CA4\u0CA5\u0CA6\u0CA7\u0CA8\u0CA9"+
-            "\u0CAA\u0CAB\u0CAC\u0CAD\u0CAE\u0CAF\u0CB0\u0CB1"+
-            "\u0CB2\u0CB3\u0CB4\u0CB5\u0CB6\u0CB7\u0CB8\u0CB9"+
-            "\u0CBA\u0CBB\u0CBC\u0CBD\u0CBE\u0CBF\u0CC0\u0CC1"+
-            "\u0CC2\u0CC3\u0CC4\u0CC5\u0CC6\u0CC7\u0CC8\u0CC9"+
-            "\u0CCA\u0CCB\u0CCC\u0CCD\u0CCE\u0CCF\u0CD0\u0CD1"+
-            "\u0CD2\u0CD3\u0CD4\u0CD5\u0CD6\u0CD7\u0CD8\u0CD9"+
-            "\u0CDA\u0CDB\u0CDC\u0CDD\u0CDE\u0CDF\u0CE0\u0CE1"+
-            "\u0CE2\u0CE3\u0CE4\u0CE5\u0CE6\u0CE7\u0CE8\u0CE9"+
-            "\u0CEA\u0CEB\u0CEC\u0CED\u0CEE\u0CEF\u0CF0\u0CF1"+
-            "\u0CF2\u0CF3\u0CF4\u0CF5\u0CF6\u0CF7\u0CF8\u0CF9"+
-            "\u0CFA\u0CFB\u0CFC\u0CFD\u0CFE\u0CFF\u0D00\u0D01"+
-            "\u0D02\u0D03\u0D04\u0D05\u0D06\u0D07\u0D08\u0D09"+
-            "\u0D0A\u0D0B\u0D0C\u0D0D\u0D0E\u0D0F\u0D10\u0D11"+
-            "\u0D12\u0D13\u0D14\u0D15\u0D16\u0D17\u0D18\u0D19"+
-            "\u0D1A\u0D1B\u0D1C\u0D1D\u0D1E\u0D1F\u0D20\u0D21"+
-            "\u0D22\u0D23\u0D24\u0D25\u0D26\u0D27\u0D28\u0D29"+
-            "\u0D2A\u0D2B\u0D2C\u0D2D\u0D2E\u0D2F\u0D30\u0D31"+
-            "\u0D32\u0D33\u0D34\u0D35\u0D36\u0D37\u0D38\u0D39"+
-            "\u0D3A\u0D3B\u0D3C\u0D3D\u0D3E\u0D3F\u0D40\u0D41"+
-            "\u0D42\u0D43\u0D44\u0D45\u0D46\u0D47\u0D48\u0D49"+
-            "\u0D4A\u0D4B\u0D4C\u0D4D\u0D4E\u0D4F\u0D50\u0D51"+
-            "\u0D52\u0D53\u0D54\u0D55\u0D56\u0D57\u0D58\u0D59"+
-            "\u0D5A\u0D5B\u0D5C\u0D5D\u0D5E\u0D5F\u0D60\u0D61"+
-            "\u0D62\u0D63\u0D64\u0D65\u0D66\u0D67\u0D68\u0D69"+
-            "\u0D6A\u0D6B\u0D6C\u0D6D\u0D6E\u0D6F\u0D70\u0D71"+
-            "\u0D72\u0D73\u0D74\u0D75\u0D76\u0D77\u0D78\u0D79"+
-            "\u0D7A\u0D7B\u0D7C\u0D7D\u0D7E\u0D7F\u0D80\u0D81"+
-            "\u0D82\u0D83\u0D84\u0D85\u0D86\u0D87\u0D88\u0D89"+
-            "\u0D8A\u0D8B\u0D8C\u0D8D\u0D8E\u0D8F\u0D90\u0D91"+
-            "\u0D92\u0D93\u0D94\u0D95\u0D96\u0D97\u0D98\u0D99"+
-            "\u0D9A\u0D9B\u0D9C\u0D9D\u0D9E\u0D9F\u0DA0\u0DA1"+
-            "\u0DA2\u0DA3\u0DA4\u0DA5\u0DA6\u0DA7\u0DA8\u0DA9"+
-            "\u0DAA\u0DAB\u0DAC\u0DAD\u0DAE\u0DAF\u0DB0\u0DB1"+
-            "\u0DB2\u0DB3\u0DB4\u0DB5\u0DB6\u0DB7\u0DB8\u0DB9"+
-            "\u0DBA\u0DBB\u0DBC\u0DBD\u0DBE\u0DBF\u0DC0\u0DC1"+
-            "\u0DC2\u0DC3\u0DC4\u0DC5\u0DC6\u0DC7\u0DC8\u0DC9"+
-            "\u0DCA\u0DCB\u0DCC\u0DCD\u0DCE\u0DCF\u0DD0\u0DD1"+
-            "\u0DD2\u0DD3\u0DD4\u0DD5\u0DD6\u0DD7\u0DD8\u0DD9"+
-            "\u0DDA\u0DDB\u0DDC\u0DDD\u0DDE\u0DDF\u0DE0\u0DE1";
-
-        private final static String innerIndex1=
-            "\u0DE2\u0DE3\u0DE4\u0DE5\u0DE6\u0DE7\u0DE8\u0DE9"+
-            "\u0DEA\u0DEB\u0DEC\u0DED\u0DEE\u0DEF\u0DF0\u0DF1"+
-            "\u0DF2\u0DF3\u0DF4\u0DF5\u0DF6\u0DF7\u0DF8\u0DF9"+
-            "\u0DFA\u0DFB\u0DFC\u0DFD\u0DFE\u0DFF\u0E00\u0E01"+
-            "\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09"+
-            "\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11"+
-            "\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19"+
-            "\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21"+
-            "\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29"+
-            "\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31"+
-            "\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39"+
-            "\u0E3A\u0E3B\u0E3C\u0E3D\u0E3E\u0E3F\u0E40\u0E41"+
-            "\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49"+
-            "\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51"+
-            "\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59"+
-            "\u0E5A\u0E5B\u0E5C\u0E5D\u0E5E\u0E5F\u0E60\u0E61"+
-            "\u0E62\u0E63\u0E64\u0E65\u0E66\u0E67\u0E68\u0E69"+
-            "\u0E6A\u0E6B\u0E6C\u0E6D\u0E6E\u0E6F\u0E70\u0E71"+
-            "\u0E72\u0E73\u0E74\u0E75\u0E76\u0E77\u0E78\u0E79"+
-            "\u0E7A\u0E7B\u0E7C\u0E7D\u0E7E\u0E7F\u0E80\u0E81"+
-            "\u0E82\u0E83\u0E84\u0E85\u0E86\u0E87\u0E88\u0E89"+
-            "\u0E8A\u0E8B\u0E8C\u0E8D\u0E8E\u0E8F\u0E90\u0E91"+
-            "\u0E92\u0E93\u0E94\u0E95\u0E96\u0E97\u0E98\u0E99"+
-            "\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA0\u0EA1"+
-            "\u0EA2\u0EA3\u0EA4\u0EA5\u0EA6\u0EA7\u0EA8\u0EA9"+
-            "\u0EAA\u0EAB\u0EAC\u0EAD\u0EAE\u0EAF\u0EB0\u0EB1"+
-            "\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9"+
-            "\u0EBA\u0EBB\u0EBC\u0EBD\u0EBE\u0EBF\u0EC0\u0EC1"+
-            "\u0EC2\u0EC3\u0EC4\u0EC5\u0EC6\u0EC7\u0EC8\u0EC9"+
-            "\u0ECA\u0ECB\u0ECC\u0ECD\u0ECE\u0ECF\u0ED0\u0ED1"+
-            "\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9"+
-            "\u0EDA\u0EDB\u0EDC\u0EDD\u0EDE\u0EDF\u0EE0\u0EE1"+
-            "\u0EE2\u0EE3\u0EE4\u0EE5\u0EE6\u0EE7\u0EE8\u0EE9"+
-            "\u0EEA\u0EEB\u0EEC\u0EED\u0EEE\u0EEF\u0EF0\u0EF1"+
-            "\u0EF2\u0EF3\u0EF4\u0EF5\u0EF6\u0EF7\u0EF8\u0EF9"+
-            "\u0EFA\u0EFB\u0EFC\u0EFD\u0EFE\u0EFF\u0F00\u0F01"+
-            "\u0F02\u0F03\u0F04\u0F05\u0F06\u0F07\u0F08\u0F09"+
-            "\u0F0A\u0F0B\u0F0C\u0F0D\u0F0E\u0F0F\u0F10\u0F11"+
-            "\u0F12\u0F13\u0F14\u0F15\u0F16\u0F17\u0F18\u0F19"+
-            "\u0F1A\u0F1B\u0F1C\u0F1D\u0F1E\u0F1F\u0F20\u0F21"+
-            "\u0F22\u0F23\u0F24\u0F25\u0F26\u0F27\u0F28\u0F29"+
-            "\u0F2A\u0F2B\u0F2C\u0F2D\u0F2E\u0F2F\u0F30\u0F31"+
-            "\u0F32\u0F33\u0F34\u0F35\u0F36\u0F37\u0F38\u0F39"+
-            "\u0F3A\u0F3B\u0F3C\u0F3D\u0F3E\u0F3F\u0F40\u0F41"+
-            "\u0F42\u0F43\u0F44\u0F45\u0F46\u0F47\u0F48\u0F49"+
-            "\u0F4A\u0F4B\u0F4C\u0F4D\u0F4E\u0F4F\u0F50\u0F51"+
-            "\u0F52\u0F53\u0F54\u0F55\u0F56\u0F57\u0F58\u0F59"+
-            "\u0F5A\u0F5B\u0F5C\u0F5D\u0F5E\u0F5F\u0F60\u0F61"+
-            "\u0F62\u0F63\u0F64\u0F65\u0F66\u0F67\u0F68\u0F69"+
-            "\u0F6A\u0F6B\u0F6C\u0F6D\u0F6E\u0F6F\u0F70\u0F71"+
-            "\u0F72\u0F73\u0F74\u0F75\u0F76\u0F77\u0F78\u0F79"+
-            "\u0F7A\u0F7B\u0F7C\u0F7D\u0F7E\u0F7F\u0F80\u0F81"+
-            "\u0F82\u0F83\u0F84\u0F85\u0F86\u0F87\u0F88\u0F89"+
-            "\u0F8A\u0F8B\u0F8C\u0F8D\u0F8E\u0F8F\u0F90\u0F91"+
-            "\u0F92\u0F93\u0F94\u0F95\u0F96\u0F97\u0F98\u0F99"+
-            "\u0F9A\u0F9B\u0F9C\u0F9D\u0F9E\u0F9F\u0FA0\u0FA1"+
-            "\u0FA2\u0FA3\u0FA4\u0FA5\u0FA6\u0FA7\u0FA8\u0FA9"+
-            "\u0FAA\u0FAB\u0FAC\u0FAD\u0FAE\u0FAF\u0FB0\u0FB1"+
-            "\u0FB2\u0FB3\u0FB4\u0FB5\u0FB6\u0FB7\u0FB8\u0FB9"+
-            "\u0FBA\u0FBB\u0FBC\u0FBD\u0FBE\u0FBF\u0FC0\u0FC1"+
-            "\u0FC2\u0FC3\u0FC4\u0FC5\u0FC6\u0FC7\u0FC8\u0FC9"+
-            "\u0FCA\u0FCB\u0FCC\u0FCD\u0FCE\u0FCF\u0FD0\u0FD1"+
-            "\u0FD2\u0FD3\u0FD4\u0FD5\u0FD6\u0FD7\u0FD8\u0FD9"+
-            "\u0FDA\u0FDB\u0FDC\u0FDD\u0FDE\u0FDF\u0FE0\u0FE1"+
-            "\u0FE2\u0FE3\u0FE4\u0FE5\u0FE6\u0FE7\u0FE8\u0FE9"+
-            "\u0FEA\u0FEB\u0FEC\u0FED\u0FEE\u0FEF\u0FF0\u0FF1"+
-            "\u0FF2\u0FF3\u0FF4\u0FF5\u0FF6\u0FF7\u0FF8\u0FF9"+
-            "\u0FFA\u0FFB\u0FFC\u0FFD\u0FFE\u0FFF\u1000\u1001"+
-            "\u1002\u1003\u1004\u1005\u1006\u1007\u1008\u1009"+
-            "\u100A\u100B\u100C\u100D\u100E\u100F\u1010\u1011"+
-            "\u1012\u1013\u1014\u1015\u1016\u1017\u1018\u1019"+
-            "\u101A\u101B\u101C\u101D\u101E\u101F\u1020\u1021"+
-            "\u1022\u1023\u1024\u1025\u1026\u1027\u1028\u1029"+
-            "\u102A\u102B\u102C\u102D\u102E\u102F\u1030\u1031"+
-            "\u1032\u1033\u1034\u1035\u1036\u1037\u1038\u1039"+
-            "\u103A\u103B\u103C\u103D\u103E\u103F\u1040\u1041"+
-            "\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049"+
-            "\u104A\u104B\u104C\u104D\u104E\u104F\u1050\u1051"+
-            "\u1052\u1053\u1054\u1055\u1056\u1057\u1058\u1059"+
-            "\u105A\u105B\u105C\u105D\u105E\u105F\u1060\u1061"+
-            "\u1062\u1063\u1064\u1065\u1066\u1067\u1068\u1069"+
-            "\u106A\u106B\u106C\u106D\u106E\u106F\u1070\u1071"+
-            "\u1072\u1073\u1074\u1075\u1076\u1077\u1078\u1079"+
-            "\u107A\u107B\u107C\u107D\u107E\u107F\u1080\u1081"+
-            "\u1082\u1083\u1084\u1085\u1086\u1087\u1088\u1089"+
-            "\u108A\u108B\u108C\u108D\u108E\u108F\u1090\u1091"+
-            "\u1092\u1093\u1094\u1095\u1096\u1097\u1098\u1099"+
-            "\u109A\u109B\u109C\u109D\u109E\u109F\u10A0\u10A1"+
-            "\u10A2\u10A3\u10A4\u10A5\u10A6\u10A7\u10A8\u10A9"+
-            "\u10AA\u10AB\u10AC\u10AD\u10AE\u10AF\u10B0\u10B1"+
-            "\u10B2\u10B3\u10B4\u10B5\u10B6\u10B7\u10B8\u10B9"+
-            "\u10BA\u10BB\u10BC\u10BD\u10BE\u10BF\u10C0\u10C1"+
-            "\u10C2\u10C3\u10C4\u10C5\u10C6\u10C7\u10C8\u10C9"+
-            "\u10CA\u10CB\u10CC\u10CD\u10CE\u10CF\u10D0\u10D1"+
-            "\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9"+
-            "\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1"+
-            "\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9"+
-            "\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1"+
-            "\u10F2\u10F3\u10F4\u10F5\u10F6\u10F7\u10F8\u10F9"+
-            "\u10FA\u10FB\u10FC\u10FD\u10FE\u10FF\u1100\u1101"+
-            "\u1102\u1103\u1104\u1105\u1106\u1107\u1108\u1109"+
-            "\u110A\u110B\u110C\u110D\u110E\u110F\u1110\u1111"+
-            "\u1112\u1113\u1114\u1115\u1116\u1117\u1118\u1119"+
-            "\u111A\u111B\u111C\u111D\u111E\u111F\u1120\u1121"+
-            "\u1122\u1123\u1124\u1125\u1126\u1127\u1128\u1129"+
-            "\u112A\u112B\u112C\u112D\u112E\u112F\u1130\u1131"+
-            "\u1132\u1133\u1134\u1135\u1136\u1137\u1138\u1139"+
-            "\u113A\u113B\u113C\u113D\u113E\u113F\u1140\u1141"+
-            "\u1142\u1143\u1144\u1145\u1146\u1147\u1148\u1149"+
-            "\u114A\u114B\u114C\u114D\u114E\u114F\u1150\u1151"+
-            "\u1152\u1153\u1154\u1155\u1156\u1157\u1158\u1159"+
-            "\u115A\u115B\u115C\u115D\u115E\u115F\u1160\u1161"+
-            "\u1162\u1163\u1164\u1165\u1166\u1167\u1168\u1169"+
-            "\u116A\u116B\u116C\u116D\u116E\u116F\u1170\u1171"+
-            "\u1172\u1173\u1174\u1175\u1176\u1177\u1178\u1179"+
-            "\u117A\u117B\u117C\u117D\u117E\u117F\u1180\u1181"+
-            "\u1182\u1183\u1184\u1185\u1186\u1187\u1188\u1189"+
-            "\u118A\u118B\u118C\u118D\u118E\u118F\u1190\u1191"+
-            "\u1192\u1193\u1194\u1195\u1196\u1197\u1198\u1199"+
-            "\u119A\u119B\u119C\u119D\u119E\u119F\u11A0\u11A1"+
-            "\u11A2\u11A3\u11A4\u11A5\u11A6\u11A7\u11A8\u11A9"+
-            "\u11AA\u11AB\u11AC\u11AD\u11AE\u11AF\u11B0\u11B1"+
-            "\u11B2\u11B3\u11B4\u11B5\u11B6\u11B7\u11B8\u11B9"+
-            "\u11BA\u11BB\u11BC\u11BD\u11BE\u11BF\u11C0\u11C1"+
-            "\u11C2\u11C3\u11C4\u11C5\u11C6\u11C7\u11C8\u11C9"+
-            "\u11CA\u11CB\u11CC\u11CD\u11CE\u11CF\u11D0\u11D1"+
-            "\u11D2\u11D3\u11D4\u11D5\u11D6\u11D7\u11D8\u11D9"+
-            "\u11DA\u11DB\u11DC\u11DD\u11DE\u11DF\u11E0\u11E1"+
-            "\u11E2\u11E3\u11E4\u11E5\u11E6\u11E7\u11E8\u11E9"+
-            "\u11EA\u11EB\u11EC\u11ED\u11EE\u11EF\u11F0\u11F1"+
-            "\u11F2\u11F3\u11F4\u11F5\u11F6\u11F7\u11F8\u11F9"+
-            "\u11FA\u11FB\u11FC\u11FD\u11FE\u11FF\u1200\u1201"+
-            "\u1202\u1203\u1204\u1205\u1206\u1207\u1208\u1209"+
-            "\u120A\u120B\u120C\u120D\u120E\u120F\u1210\u1211"+
-            "\u1212\u1213\u1214\u1215\u1216\u1217\u1218\u1219"+
-            "\u121A\u121B\u121C\u121D\u121E\u121F\u1220\u1221"+
-            "\u1222\u1223\u1224\u1225\u1226\u1227\u1228\u1229"+
-            "\u122A\u122B\u122C\u122D\u122E\u122F\u1230\u1231"+
-            "\u1232\u1233\u1234\u1235\u1236\u1237\u1238\u1239"+
-            "\u123A\u123B\u123C\u123D\u123E\u123F\u1240\u1241"+
-            "\u1242\u1243\u1244\u1245\u1246\u1247\u1248\u1249"+
-            "\u124A\u124B\u124C\u124D\u124E\u124F\u1250\u1251"+
-            "\u1252\u1253\u1254\u1255\u1256\u1257\u1258\u1259"+
-            "\u125A\u125B\u125C\u125D\u125E\u125F\u1260\u1261"+
-            "\u1262\u1263\u1264\u1265\u1266\u1267\u1268\u1269"+
-            "\u126A\u126B\u126C\u126D\u126E\u126F\u1270\u1271"+
-            "\u1272\u1273\u1274\u1275\u1276\u1277\u1278\u1279"+
-            "\u127A\u127B\u127C\u127D\u127E\u127F\u1280\u1281"+
-            "\u1282\u1283\u1284\u1285\u1286\u1287\u1288\u1289"+
-            "\u128A\u128B\u128C\u128D\u128E\u128F\u1290\u1291"+
-            "\u1292\u1293\u1294\u1295\u1296\u1297\u1298\u1299"+
-            "\u129A\u129B\u129C\u129D\u129E\u129F\u12A0\u12A1"+
-            "\u12A2\u12A3\u12A4\u12A5\u12A6\u12A7\u12A8\u12A9"+
-            "\u12AA\u12AB\u12AC\u12AD\u12AE\u12AF\u12B0\u12B1"+
-            "\u12B2\u12B3\u12B4\u12B5\u12B6\u12B7\u12B8\u12B9"+
-            "\u12BA\u12BB\u12BC\u12BD\u12BE\u12BF\u12C0\u12C1"+
-            "\u12C2\u12C3\u12C4\u12C5\u12C6\u12C7\u12C8\u12C9"+
-            "\u12CA\u12CB\u12CC\u12CD\u12CE\u12CF\u12D0\u12D1"+
-            "\u12D2\u12D3\u12D4\u12D5\u12D6\u12D7\u12D8\u12D9"+
-            "\u12DA\u12DB\u12DC\u12DD\u12DE\u12DF\u12E0\u12E1"+
-            "\u12E2\u12E3\u12E4\u12E5\u12E6\u12E7\u12E8\u12E9"+
-            "\u12EA\u12EB\u12EC\u12ED\u12EE\u12EF\u12F0\u12F1"+
-            "\u12F2\u12F3\u12F4\u12F5\u12F6\u12F7\u12F8\u12F9"+
-            "\u12FA\u12FB\u12FC\u12FD\u12FE\u12FF\u1300\u1301"+
-            "\u1302\u1303\u1304\u1305\u1306\u1307\u1308\u1309"+
-            "\u130A\u130B\u130C\u130D\u130E\u130F\u1310\u1311"+
-            "\u1312\u1313\u1314\u1315\u1316\u1317\u1318\u1319"+
-            "\u131A\u131B\u131C\u131D\u131E\u131F\u1320\u1321"+
-            "\u1322\u1323\u1324\u1325\u1326\u1327\u1328\u1329"+
-            "\u132A\u132B\u132C\u132D\u132E\u132F\u1330\u1331"+
-            "\u1332\u1333\u1334\u1335\u1336\u1337\u1338\u1339"+
-            "\u133A\u133B\u133C\u133D\u133E\u133F\u1340\u1341"+
-            "\u1342\u1343\u1344\u1345\u1346\u1347\u1348\u1349"+
-            "\u134A\u134B\u134C\u134D\u134E\u134F\u1350\u1351"+
-            "\u1352\u1353\u1354\u1355\u1356\u1357\u1358\u1359"+
-            "\u135A\u135B\u135C\u135D\u135E\u135F\u1360\u1361"+
-            "\u1362\u1363\u1364\u1365\u1366\u1367\u1368\u1369"+
-            "\u136A\u136B\u136C\u136D\u136E\u136F\u1370\u1371"+
-            "\u1372\u1373\u1374\u1375\u1376\u1377\u1378\u1379"+
-            "\u137A\u137B\u137C\u137D\u137E\u137F\u1380\u1381"+
-            "\u1382\u1383\u1384\u1385\u1386\u1387\u1388\u1389"+
-            "\u138A\u138B\u138C\u138D\u138E\u138F\u1390\u1391"+
-            "\u1392\u1393\u1394\u1395\u1396\u1397\u1398\u1399"+
-            "\u139A\u139B\u139C\u139D\u139E\u139F\u13A0\u13A1"+
-            "\u13A2\u13A3\u13A4\u13A5\u13A6\u13A7\u13A8\u13A9"+
-            "\u13AA\u13AB\u13AC\u13AD\u13AE\u13AF\u13B0\u13B1"+
-            "\u13B2\u13B3\u13B4\u13B5\u13B6\u13B7\u13B8\u13B9"+
-            "\u13BA\u13BB\u13BC\u13BD\u13BE\u13BF\u13C0\u13C1"+
-            "\u13C2\u13C3\u13C4\u13C5\u13C6\u13C7\u13C8\u13C9"+
-            "\u13CA\u13CB\u13CC\u13CD\u13CE\u13CF\u13D0\u13D1"+
-            "\u13D2\u13D3\u13D4\u13D5\u13D6\u13D7\u13D8\u13D9"+
-            "\u13DA\u13DB\u13DC\u13DD\u13DE\u13DF\u13E0\u13E1"+
-            "\u13E2\u13E3\u13E4\u13E5\u13E6\u13E7\u13E8\u13E9"+
-            "\u13EA\u13EB\u13EC\u13ED\u13EE\u13EF\u13F0\u13F1"+
-            "\u13F2\u13F3\u13F4\u13F5\u13F6\u13F7\u13F8\u13F9"+
-            "\u13FA\u13FB\u13FC\u13FD\u13FE\u13FF\u1400\u1401"+
-            "\u1402\u1403\u1404\u1405\u1406\u1407\u1408\u1409"+
-            "\u140A\u140B\u140C\u140D\u140E\u140F\u1410\u1411"+
-            "\u1412\u1413\u1414\u1415\u1416\u1417\u1418\u1419"+
-            "\u141A\u141B\u141C\u141D\u141E\u141F\u1420\u1421"+
-            "\u1422\u1423\u1424\u1425\u1426\u1427\u1428\u1429"+
-            "\u142A\u142B\u142C\u142D\u142E\u142F\u1430\u1431"+
-            "\u1432\u1433\u1434\u1435\u1436\u1437\u1438\u1439"+
-            "\u143A\u143B\u143C\u143D\u143E\u143F\u1440\u1441"+
-            "\u1442\u1443\u1444\u1445\u1446\u1447\u1448\u1449"+
-            "\u144A\u144B\u144C\u144D\u144E\u144F\u1450\u1451"+
-            "\u1452\u1453\u1454\u1455\u1456\u1457\u1458\u1459"+
-            "\u145A\u145B\u145C\u145D\u145E\u145F\u1460\u1461"+
-            "\u1462\u1463\u1464\u1465\u1466\u1467\u1468\u1469"+
-            "\u146A\u146B\u146C\u146D\u146E\u146F\u1470\u1471"+
-            "\u1472\u1473\u1474\u1475\u1476\u1477\u1478\u1479"+
-            "\u147A\u147B\u147C\u147D\u147E\u147F\u1480\u1481"+
-            "\u1482\u1483\u1484\u1485\u1486\u1487\u1488\u1489"+
-            "\u148A\u148B\u148C\u148D\u148E\u148F\u1490\u1491"+
-            "\u1492\u1493\u1494\u1495\u1496\u1497\u1498\u1499"+
-            "\u149A\u149B\u149C\u149D\u149E\u149F\u14A0\u14A1"+
-            "\u14A2\u14A3\u14A4\u14A5\u14A6\u14A7\u14A8\u14A9"+
-            "\u14AA\u14AB\u14AC\u14AD\u14AE\u14AF\u14B0\u14B1"+
-            "\u14B2\u14B3\u14B4\u14B5\u14B6\u14B7\u14B8\u14B9"+
-            "\u14BA\u14BB\u14BC\u14BD\u14BE\u14BF\u14C0\u14C1"+
-            "\u14C2\u14C3\u14C4\u14C5\u14C6\u14C7\u14C8\u14C9"+
-            "\u14CA\u14CB\u14CC\u14CD\u14CE\u14CF\u14D0\u14D1"+
-            "\u14D2\u14D3\u14D4\u14D5\u14D6\u14D7\u14D8\u14D9"+
-            "\u14DA\u14DB\u14DC\u14DD\u14DE\u14DF\u14E0\u14E1"+
-            "\u14E2\u14E3\u14E4\u14E5\u14E6\u14E7\u14E8\u14E9"+
-            "\u14EA\u14EB\u14EC\u14ED\u14EE\u14EF\u14F0\u14F1"+
-            "\u14F2\u14F3\u14F4\u14F5\u14F6\u14F7\u14F8\u14F9"+
-            "\u14FA\u14FB\u14FC\u14FD\u14FE\u14FF\u1500\u1501"+
-            "\u1502\u1503\u1504\u1505\u1506\u1507\u1508\u1509"+
-            "\u150A\u150B\u150C\u150D\u150E\u150F\u1510\u1511"+
-            "\u1512\u1513\u1514\u1515\u1516\u1517\u1518\u1519"+
-            "\u151A\u151B\u151C\u151D\u151E\u151F\u1520\u1521"+
-            "\u1522\u1523\u1524\u1525\u1526\u1527\u1528\u1529"+
-            "\u152A\u152B\u152C\u152D\u152E\u152F\u1530\u1531"+
-            "\u1532\u1533\u1534\u1535\u1536\u1537\u1538\u1539"+
-            "\u153A\u153B\u153C\u153D\u153E\u153F\u1540\u1541"+
-            "\u1542\u1543\u1544\u1545\u1546\u1547\u1548\u1549"+
-            "\u154A\u154B\u154C\u154D\u154E\u154F\u1550\u1551"+
-            "\u1552\u1553\u1554\u1555\u1556\u1557\u1558\u1559"+
-            "\u155A\u155B\u155C\u155D\u155E\u155F\u1560\u1561"+
-            "\u1562\u1563\u1564\u1565\u1566\u1567\u1568\u1569"+
-            "\u156A\u156B\u156C\u156D\u156E\u156F\u1570\u1571"+
-            "\u1572\u1573\u1574\u1575\u1576\u1577\u1578\u1579"+
-            "\u157A\u157B\u157C\u157D\u157E\u157F\u1580\u1581"+
-            "\u1582\u1583\u1584\u1585\u1586\u1587\u1588\u1589"+
-            "\u158A\u158B\u158C\u158D\u158E\u158F\u1590\u1591"+
-            "\u1592\u1593\u1594\u1595\u1596\u1597\u1598\u1599"+
-            "\u159A\u159B\u159C\u159D\u159E\u159F\u15A0\u15A1"+
-            "\u15A2\u15A3\u15A4\u15A5\u15A6\u15A7\u15A8\u15A9"+
-            "\u15AA\u15AB\u15AC\u15AD\u15AE\u15AF\u15B0\u15B1"+
-            "\u15B2\u15B3\u15B4\u15B5\u15B6\u15B7\u15B8\u15B9"+
-            "\u15BA\u15BB\u15BC\u15BD\u15BE\u15BF\u15C0\u15C1"+
-            "\u15C2\u15C3\u15C4\u15C5\u15C6\u15C7\u15C8\u15C9"+
-            "\u15CA\u15CB\u15CC\u15CD\u15CE\u15CF\u15D0\u15D1"+
-            "\u15D2\u15D3\u15D4\u15D5\u15D6\u15D7\u15D8\u15D9"+
-            "\u15DA\u15DB\u15DC\u15DD\u15DE\u15DF\u15E0\u15E1"+
-            "\u15E2\u15E3\u15E4\u15E5\u15E6\u15E7\u15E8\u15E9"+
-            "\u15EA\u15EB\u15EC\u15ED\u15EE\u15EF\u15F0\u15F1"+
-            "\u15F2\u15F3\u15F4\u15F5\u15F6\u15F7\u15F8\u15F9"+
-            "\u15FA\u15FB\u15FC\u15FD\u15FE\u15FF\u1600\u1601"+
-            "\u1602\u1603\u1604\u1605\u1606\u1607\u1608\u1609"+
-            "\u160A\u160B\u160C\u160D\u160E\u160F\u1610\u1611"+
-            "\u1612\u1613\u1614\u1615\u1616\u1617\u1618\u1619"+
-            "\u161A\u161B\u161C\u161D\u161E\u161F\u1620\u1621"+
-            "\u1622\u1623\u1624\u1625\u1626\u1627\u1628\u1629"+
-            "\u162A\u162B\u162C\u162D\u162E\u162F\u1630\u1631"+
-            "\u1632\u1633\u1634\u1635\u1636\u1637\u1638\u1639"+
-            "\u163A\u163B\u163C\u163D\u163E\u163F\u1640\u1641"+
-            "\u1642\u1643\u1644\u1645\u1646\u1647\u1648\u1649"+
-            "\u164A\u164B\u164C\u164D\u164E\u164F\u1650\u1651"+
-            "\u1652\u1653\u1654\u1655\u1656\u1657\u1658\u1659"+
-            "\u165A\u165B\u165C\u165D\u165E\u165F\u1660\u1661"+
-            "\u1662\u1663\u1664\u1665\u1666\u1667\u1668\u1669"+
-            "\u166A\u166B\u166C\u166D\u166E\u166F\u1670\u1671"+
-            "\u1672\u1673\u1674\u1675\u1676\u1677\u1678\u1679"+
-            "\u167A\u167B\u167C\u167D\u167E\u167F\u1680\u1681"+
-            "\u1682\u1683\u1684\u1685\u1686\u1687\u1688\u1689"+
-            "\u168A\u168B\u168C\u168D\u168E\u168F\u1690\u1691"+
-            "\u1692\u1693\u1694\u1695\u1696\u1697\u1698\u1699"+
-            "\u169A\u169B\u169C\u169D\u169E\u169F\u16A0\u16A1"+
-            "\u16A2\u16A3\u16A4\u16A5\u16A6\u16A7\u16A8\u16A9"+
-            "\u16AA\u16AB\u16AC\u16AD\u16AE\u16AF\u16B0\u16B1"+
-            "\u16B2\u16B3\u16B4\u16B5\u16B6\u16B7\u16B8\u16B9"+
-            "\u16BA\u16BB\u16BC\u16BD\u16BE\u16BF\u16C0\u16C1"+
-            "\u16C2\u16C3\u16C4\u16C5\u16C6\u16C7\u16C8\u16C9"+
-            "\u16CA\u16CB\u16CC\u16CD\u16CE\u16CF\u16D0\u16D1"+
-            "\u16D2\u16D3\u16D4\u16D5\u16D6\u16D7\u16D8\u16D9"+
-            "\u16DA\u16DB\u16DC\u16DD\u16DE\u16DF\u16E0\u16E1"+
-            "\u16E2\u16E3\u16E4\u16E5\u16E6\u16E7\u16E8\u16E9"+
-            "\u16EA\u16EB\u16EC\u16ED\u16EE\u16EF\u16F0\u16F1"+
-            "\u16F2\u16F3\u16F4\u16F5\u16F6\u16F7\u16F8\u16F9"+
-            "\u16FA\u16FB\u16FC\u16FD\u16FE\u16FF\u1700\u1701"+
-            "\u1702\u1703\u1704\u1705\u1706\u1707\u1708\u1709"+
-            "\u170A\u170B\u170C\u170D\u170E\u170F\u1710\u1711"+
-            "\u1712\u1713\u1714\u1715\u1716\u1717\u1718\u1719"+
-            "\u171A\u171B\u171C\u171D\u171E\u171F\u1720\u1721"+
-            "\u1722\u1723\u1724\u1725\u1726\u1727\u1728\u1729"+
-            "\u172A\u172B\u172C\u172D\u172E\u172F\u1730\u1731"+
-            "\u1732\u1733\u1734\u1735\u1736\u1737\u1738\u1739"+
-            "\u173A\u173B\u173C\u173D\u173E\u173F\u1740\u1741"+
-            "\u1742\u1743\u1744\u1745\u1746\u1747\u1748\u1749"+
-            "\u174A\u174B\u174C\u174D\u174E\u174F\u1750\u1751"+
-            "\u1752\u1753\u1754\u1755\u1756\u1757\u1758\u1759"+
-            "\u175A\u175B\u175C\u175D\u175E\u175F\u1760\u1761"+
-            "\u1762\u1763\u1764\u1765\u1766\u1767\u1768\u1769"+
-            "\u176A\u176B\u176C\u176D\u176E\u176F\u1770\u1771"+
-            "\u1772\u1773\u1774\u1775\u1776\u1777\u1778\u1779"+
-            "\u177A\u177B\u177C\u177D\u177E\u177F\u1780\u1781"+
-            "\u1782\u1783\u1784\u1785\u1786\u1787\u1788\u1789"+
-            "\u178A\u178B\u178C\u178D\u178E\u178F\u1790\u1791"+
-            "\u1792\u1793\u1794\u1795\u1796\u1797\u1798\u1799"+
-            "\u179A\u179B\u179C\u179D\u179E\u179F\u17A0\u17A1"+
-            "\u17A2\u17A3\u17A4\u17A5\u17A6\u17A7\u17A8\u17A9"+
-            "\u17AA\u17AB\u17AC\u17AD\u17AE\u17AF\u17B0\u17B1"+
-            "\u17B2\u17B3\u17B4\u17B5\u17B6\u17B7\u17B8\u17B9"+
-            "\u17BA\u17BB\u17BC\u17BD\u17BE\u17BF\u17C0\u17C1"+
-            "\u17C2\u17C3\u17C4\u17C5\u17C6\u17C7\u17C8\u17C9"+
-            "\u17CA\u17CB\u17CC\u17CD\u17CE\u17CF\u17D0\u17D1"+
-            "\u17D2\u17D3\u17D4\u17D5\u17D6\u17D7\u17D8\u17D9"+
-            "\u17DA\u17DB\u17DC\u17DD\u17DE\u17DF\u17E0\u17E1"+
-            "\u17E2\u17E3\u17E4\u17E5\u17E6\u17E7\u17E8\u17E9"+
-            "\u17EA\u17EB\u17EC\u17ED\u17EE\u17EF\u17F0\u17F1"+
-            "\u17F2\u17F3\u17F4\u17F5\u17F6\u17F7\u17F8\u17F9"+
-            "\u17FA\u17FB\u17FC\u17FD\u17FE\u17FF\u1800\u1801"+
-            "\u1802\u1803\u1804\u1805\u1806\u1807\u1808\u1809"+
-            "\u180A\u180B\u180C\u180D\u180E\u180F\u1810\u1811"+
-            "\u1812\u1813\u1814\u1815\u1816\u1817\u1818\u1819"+
-            "\u181A\u181B\u181C\u181D\u181E\u181F\u1820\u1821"+
-            "\u1822\u1823\u1824\u1825\u1826\u1827\u1828\u1829"+
-            "\u182A\u182B\u182C\u182D\u182E\u182F\u1830\u1831"+
-            "\u1832\u1833\u1834\u1835\u1836\u1837\u1838\u1839"+
-            "\u183A\u183B\u183C\u183D\u183E\u183F\u1840\u1841"+
-            "\u1842\u1843\u1844\u1845\u1846\u1847\u1848\u1849"+
-            "\u184A\u184B\u184C\u184D\u184E\u184F\u1850\u1851"+
-            "\u1852\u1853\u1854\u1855\u1856\u1857\u1858\u1859"+
-            "\u185A\u185B\u185C\u185D\u185E\u185F\u1860\u1861"+
-            "\u1862\u1863\u1864\u1865\u1866\u1867\u1868\u1869"+
-            "\u186A\u186B\u186C\u186D\u186E\u186F\u1870\u1871"+
-            "\u1872\u1873\u1874\u1875\u1876\u1877\u1878\u1879"+
-            "\u187A\u187B\u187C\u187D\u187E\u187F\u1880\u1881"+
-            "\u1882\u1883\u1884\u1885\u1886\u1887\u1888\u1889"+
-            "\u188A\u188B\u188C\u188D\u188E\u188F\u1890\u1891"+
-            "\u1892\u1893\u1894\u1895\u1896\u1897\u1898\u1899"+
-            "\u189A\u189B\u189C\u189D\u189E\u189F\u18A0\u18A1"+
-            "\u18A2\u18A3\u18A4\u18A5\u18A6\u18A7\u18A8\u18A9"+
-            "\u18AA\u18AB\u18AC\u18AD\u18AE\u18AF\u18B0\u18B1"+
-            "\u18B2\u18B3\u18B4\u18B5\u18B6\u18B7\u18B8\u18B9"+
-            "\u18BA\u18BB\u18BC\u18BD\u18BE\u18BF\u18C0\u18C1"+
-            "\u18C2\u18C3\u18C4\u18C5\u18C6\u18C7\u18C8\u18C9"+
-            "\u18CA\u18CB\u18CC\u18CD\u18CE\u18CF\u18D0\u18D1"+
-            "\u18D2\u18D3\u18D4\u18D5\u18D6\u18D7\u18D8\u18D9"+
-            "\u18DA\u18DB\u18DC\u18DD\u18DE\u18DF\u18E0\u18E1"+
-            "\u18E2\u18E3\u18E4\u18E5\u18E6\u18E7\u18E8\u18E9"+
-            "\u18EA\u18EB\u18EC\u18ED\u18EE\u18EF\u18F0\u18F1"+
-            "\u18F2\u18F3\u18F4\u18F5\u18F6\u18F7\u18F8\u18F9"+
-            "\u18FA\u18FB\u18FC\u18FD\u18FE\u18FF\u1900\u1901"+
-            "\u1902\u1903\u1904\u1905\u1906\u1907\u1908\u1909"+
-            "\u190A\u190B\u190C\u190D\u190E\u190F\u1910\u1911"+
-            "\u1912\u1913\u1914\u1915\u1916\u1917\u1918\u1919"+
-            "\u191A\u191B\u191C\u191D\u191E\u191F\u1920\u1921"+
-            "\u1922\u1923\u1924\u1925\u1926\u1927\u1928\u1929"+
-            "\u192A\u192B\u192C\u192D\u192E\u192F\u1930\u1931"+
-            "\u1932\u1933\u1934\u1935\u1936\u1937\u1938\u1939"+
-            "\u193A\u193B\u193C\u193D\u193E\u193F\u1940\u1941"+
-            "\u1942\u1943\u1944\u1945\u1946\u1947\u1948\u1949"+
-            "\u194A\u194B\u194C\u194D\u194E\u194F\u1950\u1951"+
-            "\u1952\u1953\u1954\u1955\u1956\u1957\u1958\u1959"+
-            "\u195A\u195B\u195C\u195D\u195E\u195F\u1960\u1961"+
-            "\u1962\u1963\u1964\u1965\u1966\u1967\u1968\u1969"+
-            "\u196A\u196B\u196C\u196D\u196E\u196F\u1970\u1971"+
-            "\u1972\u1973\u1974\u1975\u1976\u1977\u1978\u1979"+
-            "\u197A\u197B\u197C\u197D\u197E\u197F\u1980\u1981"+
-            "\u1982\u1983\u1984\u1985\u1986\u1987\u1988\u1989"+
-            "\u198A\u198B\u198C\u198D\u198E\u198F\u1990\u1991"+
-            "\u1992\u1993\u1994\u1995\u1996\u1997\u1998\u1999"+
-            "\u199A\u199B\u199C\u199D\u199E\u199F\u19A0\u19A1"+
-            "\u19A2\u19A3\u19A4\u19A5\u19A6\u19A7\u19A8\u19A9"+
-            "\u19AA\u19AB\u19AC\u19AD\u19AE\u19AF\u19B0\u19B1"+
-            "\u19B2\u19B3\u19B4\u19B5\u19B6\u19B7\u19B8\u19B9"+
-            "\u19BA\u19BB\u19BC\u19BD\u19BE\u19BF\u19C0\u19C1"+
-            "\u19C2\u19C3\u19C4\u19C5\u19C6\u19C7\u19C8\u19C9"+
-            "\u19CA\u19CB\u19CC\u19CD\u19CE\u19CF\u19D0\u19D1"+
-            "\u19D2\u19D3\u19D4\u19D5\u19D6\u19D7\u19D8\u19D9"+
-            "\u19DA\u19DB\u19DC\u19DD\u19DE\u19DF\u19E0\u19E1"+
-            "\u19E2\u19E3\u19E4\u19E5\u19E6\u19E7\u19E8\u19E9"+
-            "\u19EA\u19EB\u19EC\u19ED\u19EE\u19EF\u19F0\u19F1"+
-            "\u19F2\u19F3\u19F4\u19F5\u19F6\u19F7\u19F8\u19F9"+
-            "\u19FA\u19FB\u19FC\u19FD\u19FE\u19FF\u1A00\u1A01"+
-            "\u1A02\u1A03\u1A04\u1A05\u1A06\u1A07\u1A08\u1A09"+
-            "\u1A0A\u1A0B\u1A0C\u1A0D\u1A0E\u1A0F\u1A10\u1A11"+
-            "\u1A12\u1A13\u1A14\u1A15\u1A16\u1A17\u1A18\u1A19"+
-            "\u1A1A\u1A1B\u1A1C\u1A1D\u1A1E\u1A1F\u1A20\u1A21"+
-            "\u1A22\u1A23\u1A24\u1A25\u1A26\u1A27\u1A28\u1A29"+
-            "\u1A2A\u1A2B\u1A2C\u1A2D\u1A2E\u1A2F\u1A30\u1A31"+
-            "\u1A32\u1A33\u1A34\u1A35\u1A36\u1A37\u1A38\u1A39"+
-            "\u1A3A\u1A3B\u1A3C\u1A3D\u1A3E\u1A3F\u1A40\u1A41"+
-            "\u1A42\u1A43\u1A44\u1A45\u1A46\u1A47\u1A48\u1A49"+
-            "\u1A4A\u1A4B\u1A4C\u1A4D\u1A4E\u1A4F\u1A50\u1A51"+
-            "\u1A52\u1A53\u1A54\u1A55\u1A56\u1A57\u1A58\u1A59"+
-            "\u1A5A\u1A5B\u1A5C\u1A5D\u1A5E\u1A5F\u1A60\u1A61"+
-            "\u1A62\u1A63\u1A64\u1A65\u1A66\u1A67\u1A68\u1A69"+
-            "\u1A6A\u1A6B\u1A6C\u1A6D\u1A6E\u1A6F\u1A70\u1A71"+
-            "\u1A72\u1A73\u1A74\u1A75\u1A76\u1A77\u1A78\u1A79"+
-            "\u1A7A\u1A7B\u1A7C\u1A7D\u1A7E\u1A7F\u1A80\u1A81"+
-            "\u1A82\u1A83\u1A84\u1A85\u1A86\u1A87\u1A88\u1A89"+
-            "\u1A8A\u1A8B\u1A8C\u1A8D\u1A8E\u1A8F\u1A90\u1A91"+
-            "\u1A92\u1A93\u1A94\u1A95\u1A96\u1A97\u1A98\u1A99"+
-            "\u1A9A\u1A9B\u1A9C\u1A9D\u1A9E\u1A9F\u1AA0\u1AA1"+
-            "\u1AA2\u1AA3\u1AA4\u1AA5\u1AA6\u1AA7\u1AA8\u1AA9"+
-            "\u1AAA\u1AAB\u1AAC\u1AAD\u1AAE\u1AAF\u1AB0\u1AB1"+
-            "\u1AB2\u1AB3\u1AB4\u1AB5\u1AB6\u1AB7\u1AB8\u1AB9"+
-            "\u1ABA\u1ABB\u1ABC\u1ABD\u1ABE\u1ABF\u1AC0\u1AC1"+
-            "\u1AC2\u1AC3\u1AC4\u1AC5\u1AC6\u1AC7\u1AC8\u1AC9"+
-            "\u1ACA\u1ACB\u1ACC\u1ACD\u1ACE\u1ACF\u1AD0\u1AD1"+
-            "\u1AD2\u1AD3\u1AD4\u1AD5\u1AD6\u1AD7\u1AD8\u1AD9"+
-            "\u1ADA\u1ADB\u1ADC\u1ADD\u1ADE\u1ADF\u1AE0\u1AE1"+
-            "\u1AE2\u1AE3\u1AE4\u1AE5\u1AE6\u1AE7\u1AE8\u1AE9"+
-            "\u1AEA\u1AEB\u1AEC\u1AED\u1AEE\u1AEF\u1AF0\u1AF1"+
-            "\u1AF2\u1AF3\u1AF4\u1AF5\u1AF6\u1AF7\u1AF8\u1AF9"+
-            "\u1AFA\u1AFB\u1AFC\u1AFD\u1AFE\u1AFF\u1B00\u1B01"+
-            "\u1B02\u1B03\u1B04\u1B05\u1B06\u1B07\u1B08\u1B09"+
-            "\u1B0A\u1B0B\u1B0C\u1B0D\u1B0E\u1B0F\u1B10\u1B11"+
-            "\u1B12\u1B13\u1B14\u1B15\u1B16\u1B17\u1B18\u1B19"+
-            "\u1B1A\u1B1B\u1B1C\u1B1D\u1B1E\u1B1F\u1B20\u1B21"+
-            "\u1B22\u1B23\u1B24\u1B25\u1B26\u1B27\u1B28\u1B29"+
-            "\u1B2A\u1B2B\u1B2C\u1B2D\u1B2E\u1B2F\u1B30\u1B31"+
-            "\u1B32\u1B33\u1B34\u1B35\u1B36\u1B37\u1B38\u1B39"+
-            "\u1B3A\u1B3B\u1B3C\u1B3D\u1B3E\u1B3F\u1B40\u1B41"+
-            "\u1B42\u1B43\u1B44\u1B45\u1B46\u1B47\u1B48\u1B49"+
-            "\u1B4A\u1B4B\u1B4C\u1B4D\u1B4E\u1B4F\u1B50\u1B51"+
-            "\u1B52\u1B53\u1B54\u1B55\u1B56\u1B57\u1B58\u1B59"+
-            "\u1B5A\u1B5B\u1B5C\u1B5D\u1B5E\u1B5F\u1B60\u1B61"+
-            "\u1B62\u1B63\u1B64\u1B65\u1B66\u1B67\u1B68\u1B69"+
-            "\u1B6A\u1B6B\u1B6C\u1B6D\u1B6E\u1B6F\u1B70\u1B71"+
-            "\u1B72\u1B73\u1B74\u1B75\u1B76\u1B77\u1B78\u1B79"+
-            "\u1B7A\u1B7B\u1B7C\u1B7D\u1B7E\u1B7F\u1B80\u1B81"+
-            "\u1B82\u1B83\u1B84\u1B85\u1B86\u1B87\u1B88\u1B89"+
-            "\u1B8A\u1B8B\u1B8C\u1B8D\u1B8E\u1B8F\u1B90\u1B91"+
-            "\u1B92\u1B93\u1B94\u1B95\u1B96\u1B97\u1B98\u1B99"+
-            "\u1B9A\u1B9B\u1B9C\u1B9D\u1B9E\u1B9F\u1BA0\u1BA1"+
-            "\u1BA2\u1BA3\u1BA4\u1BA5\u1BA6\u1BA7\u1BA8\u1BA9"+
-            "\u1BAA\u1BAB\u1BAC\u1BAD\u1BAE\u1BAF\u1BB0\u1BB1"+
-            "\u1BB2\u1BB3\u1BB4\u1BB5\u1BB6\u1BB7\u1BB8\u1BB9"+
-            "\u1BBA\u1BBB\u1BBC\u1BBD\u1BBE\u1BBF\u1BC0\u1BC1"+
-            "\u1BC2\u1BC3\u1BC4\u1BC5\u1BC6\u1BC7\u1BC8\u1BC9"+
-            "\u1BCA\u1BCB\u1BCC\u1BCD\u1BCE\u1BCF\u1BD0\u1BD1"+
-            "\u1BD2\u1BD3\u1BD4\u1BD5\u1BD6\u1BD7\u1BD8\u1BD9"+
-            "\u1BDA\u1BDB\u1BDC\u1BDD\u1BDE\u1BDF\u1BE0\u1BE1"+
-            "\u1BE2\u1BE3\u1BE4\u1BE5\u1BE6\u1BE7\u1BE8\u1BE9"+
-            "\u1BEA\u1BEB\u1BEC\u1BED\u1BEE\u1BEF\u1BF0\u1BF1"+
-            "\u1BF2\u1BF3\u1BF4\u1BF5\u1BF6\u1BF7\u1BF8\u1BF9"+
-            "\u1BFA\u1BFB\u1BFC\u1BFD\u1BFE\u1BFF\u1C00\u1C01"+
-            "\u1C02\u1C03\u1C04\u1C05\u1C06\u1C07\u1C08\u1C09"+
-            "\u1C0A\u1C0B\u1C0C\u1C0D\u1C0E\u1C0F\u1C10\u1C11"+
-            "\u1C12\u1C13\u1C14\u1C15\u1C16\u1C17\u1C18\u1C19"+
-            "\u1C1A\u1C1B\u1C1C\u1C1D\u1C1E\u1C1F\u1C20\u1C21"+
-            "\u1C22\u1C23\u1C24\u1C25\u1C26\u1C27\u1C28\u1C29"+
-            "\u1C2A\u1C2B\u1C2C\u1C2D\u1C2E\u1C2F\u1C30\u1C31"+
-            "\u1C32\u1C33\u1C34\u1C35\u1C36\u1C37\u1C38\u1C39"+
-            "\u1C3A\u1C3B\u1C3C\u1C3D\u1C3E\u1C3F\u1C40\u1C41"+
-            "\u1C42\u1C43\u1C44\u1C45\u1C46\u1C47\u1C48\u1C49"+
-            "\u1C4A\u1C4B\u1C4C\u1C4D\u1C4E\u1C4F\u1C50\u1C51"+
-            "\u1C52\u1C53\u1C54\u1C55\u1C56\u1C57\u1C58\u1C59"+
-            "\u1C5A\u1C5B\u1C5C\u1C5D\u1C5E\u1C5F\u1C60\u1C61"+
-            "\u1C62\u1C63\u1C64\u1C65\u1C66\u1C67\u1C68\u1C69"+
-            "\u1C6A\u1C6B\u1C6C\u1C6D\u1C6E\u1C6F\u1C70\u1C71"+
-            "\u1C72\u1C73\u1C74\u1C75\u1C76\u1C77\u1C78\u1C79"+
-            "\u1C7A\u1C7B\u1C7C\u1C7D\u1C7E\u1C7F\u1C80\u1C81"+
-            "\u1C82\u1C83\u1C84\u1C85\u1C86\u1C87\u1C88\u1C89"+
-            "\u1C8A\u1C8B\u1C8C\u1C8D\u1C8E\u1C8F\u1C90\u1C91"+
-            "\u1C92\u1C93\u1C94\u1C95\u1C96\u1C97\u1C98\u1C99"+
-            "\u1C9A\u1C9B\u1C9C\u1C9D\u1C9E\u1C9F\u1CA0\u1CA1"+
-            "\u1CA2\u1CA3\u1CA4\u1CA5\u1CA6\u1CA7\u1CA8\u1CA9"+
-            "\u1CAA\u1CAB\u1CAC\u1CAD\u1CAE\u1CAF\u1CB0\u1CB1"+
-            "\u1CB2\u1CB3\u1CB4\u1CB5\u1CB6\u1CB7\u1CB8\u1CB9"+
-            "\u1CBA\u1CBB\u1CBC\u1CBD\u1CBE\u1CBF\u1CC0\u1CC1"+
-            "\u1CC2\u1CC3\u1CC4\u1CC5\u1CC6\u1CC7\u1CC8\u1CC9"+
-            "\u1CCA\u1CCB\u1CCC\u1CCD\u1CCE\u1CCF\u1CD0\u1CD1"+
-            "\u1CD2\u1CD3\u1CD4\u1CD5\u1CD6\u1CD7\u1CD8\u1CD9"+
-            "\u1CDA\u1CDB\u1CDC\u1CDD\u1CDE\u1CDF\u1CE0\u1CE1"+
-            "\u1CE2\u1CE3\u1CE4\u1CE5\u1CE6\u1CE7\u1CE8\u1CE9"+
-            "\u1CEA\u1CEB\u1CEC\u1CED\u1CEE\u1CEF\u1CF0\u1CF1"+
-            "\u1CF2\u1CF3\u1CF4\u1CF5\u1CF6\u1CF7\u1CF8\u1CF9"+
-            "\u1CFA\u1CFB\u1CFC\u1CFD\u1CFE\u1CFF\u1D00\u1D01"+
-            "\u1D02\u1D03\u1D04\u1D05\u1D06\u1D07\u1D08\u1D09"+
-            "\u1D0A\u1D0B\u1D0C\u1D0D\u1D0E\u1D0F\u1D10\u1D11"+
-            "\u1D12\u1D13\u1D14\u1D15\u1D16\u1D17\u1D18\u1D19"+
-            "\u1D1A\u1D1B\u1D1C\u1D1D\u1D1E\u1D1F\u1D20\u1D21"+
-            "\u1D22\u1D23\u1D24\u1D25\u1D26\u1D27\u1D28\u1D29"+
-            "\u1D2A\u1D2B\u1D2C\u1D2D\u1D2E\u1D2F\u1D30\u1D31"+
-            "\u1D32\u1D33\u1D34\u1D35\u1D36\u1D37\u1D38\u1D39"+
-            "\u1D3A\u1D3B\u1D3C\u1D3D\u1D3E\u1D3F\u1D40\u1D41"+
-            "\u1D42\u1D43\u1D44\u1D45\u1D46\u1D47\u1D48\u1D49"+
-            "\u1D4A\u1D4B\u1D4C\u1D4D\u1D4E\u1D4F\u1D50\u1D51"+
-            "\u1D52\u1D53\u1D54\u1D55\u1D56\u1D57\u1D58\u1D59"+
-            "\u1D5A\u1D5B\u1D5C\u1D5D\u1D5E\u1D5F\u1D60\u1D61"+
-            "\u1D62\u1D63\u1D64\u1D65\u1D66\u1D67\u1D68\u1D69"+
-            "\u1D6A\u1D6B\u1D6C\u1D6D\u1D6E\u1D6F\u1D70\u1D71"+
-            "\u1D72\u1D73\u1D74\u1D75\u1D76\u1D77\u1D78\u1D79"+
-            "\u1D7A\u1D7B\u1D7C\u1D7D\u1D7E\u1D7F\u1D80\u1D81"+
-            "\u1D82\u1D83\u1D84\u1D85\u1D86\u1D87\u1D88\u1D89"+
-            "\u1D8A\u1D8B\u1D8C\u1D8D\u1D8E\u1D8F\u1D90\u1D91"+
-            "\u1D92\u1D93\u1D94\u1D95\u1D96\u1D97\u1D98\u1D99"+
-            "\u1D9A\u1D9B\u1D9C\u1D9D\u1D9E\u1D9F\u1DA0\u1DA1"+
-            "\u1DA2\u1DA3\u1DA4\u1DA5\u1DA6\u1DA7\u1DA8\u1DA9"+
-            "\u1DAA\u1DAB\u1DAC\u1DAD\u1DAE\u1DAF\u1DB0\u1DB1"+
-            "\u1DB2\u1DB3\u1DB4\u1DB5\u1DB6\u1DB7\u1DB8\u1DB9"+
-            "\u1DBA\u1DBB\u1DBC\u1DBD\u1DBE\u1DBF\u1DC0\u1DC1"+
-            "\u1DC2\u1DC3\u1DC4\u1DC5\u1DC6\u1DC7\u1DC8\u1DC9"+
-            "\u1DCA\u1DCB\u1DCC\u1DCD\u1DCE\u1DCF\u1DD0\u1DD1"+
-            "\u1DD2\u1DD3\u1DD4\u1DD5\u1DD6\u1DD7\u1DD8\u1DD9"+
-            "\u1DDA\u1DDB\u1DDC\u1DDD\u1DDE\u1DDF\u1DE0\u1DE1";
-
-        private final static String innerIndex2=
-            "\u1DE2\u1DE3\u1DE4\u1DE5\u1DE6\u1DE7\u1DE8\u1DE9"+
-            "\u1DEA\u1DEB\u1DEC\u1DED\u1DEE\u1DEF\u1DF0\u1DF1"+
-            "\u1DF2\u1DF3\u1DF4\u1DF5\u1DF6\u1DF7\u1DF8\u1DF9"+
-            "\u1DFA\u1DFB\u1DFC\u1DFD\u1DFE\u1DFF\u1E00\u1E01"+
-            "\u1E02\u1E03\u1E04\u1E05\u1E06\u1E07\u1E08\u1E09"+
-            "\u1E0A\u1E0B\u1E0C\u1E0D\u1E0E\u1E0F\u1E10\u1E11"+
-            "\u1E12\u1E13\u1E14\u1E15\u1E16\u1E17\u1E18\u1E19"+
-            "\u1E1A\u1E1B\u1E1C\u1E1D\u1E1E\u1E1F\u1E20\u1E21"+
-            "\u1E22\u1E23\u1E24\u1E25\u1E26\u1E27\u1E28\u1E29"+
-            "\u1E2A\u1E2B\u1E2C\u1E2D\u1E2E\u1E2F\u1E30\u1E31"+
-            "\u1E32\u1E33\u1E34\u1E35\u1E36\u1E37\u1E38\u1E39"+
-            "\u1E3A\u1E3B\u1E3C\u1E3D\u1E3E\u1E3F\u1E40\u1E41"+
-            "\u1E42\u1E43\u1E44\u1E45\u1E46\u1E47\u1E48\u1E49"+
-            "\u1E4A\u1E4B\u1E4C\u1E4D\u1E4E\u1E4F\u1E50\u1E51"+
-            "\u1E52\u1E53\u1E54\u1E55\u1E56\u1E57\u1E58\u1E59"+
-            "\u1E5A\u1E5B\u1E5C\u1E5D\u1E5E\u1E5F\u1E60\u1E61"+
-            "\u1E62\u1E63\u1E64\u1E65\u1E66\u1E67\u1E68\u1E69"+
-            "\u1E6A\u1E6B\u1E6C\u1E6D\u1E6E\u1E6F\u1E70\u1E71"+
-            "\u1E72\u1E73\u1E74\u1E75\u1E76\u1E77\u1E78\u1E79"+
-            "\u1E7A\u1E7B\u1E7C\u1E7D\u1E7E\u1E7F\u1E80\u1E81"+
-            "\u1E82\u1E83\u1E84\u1E85\u1E86\u1E87\u1E88\u1E89"+
-            "\u1E8A\u1E8B\u1E8C\u1E8D\u1E8E\u1E8F\u1E90\u1E91"+
-            "\u1E92\u1E93\u1E94\u1E95\u1E96\u1E97\u1E98\u1E99"+
-            "\u1E9A\u1E9B\u1E9C\u1E9D\u1E9E\u1E9F\u1EA0\u1EA1"+
-            "\u1EA2\u1EA3\u1EA4\u1EA5\u1EA6\u1EA7\u1EA8\u1EA9"+
-            "\u1EAA\u1EAB\u1EAC\u1EAD\u1EAE\u1EAF\u1EB0\u1EB1"+
-            "\u1EB2\u1EB3\u1EB4\u1EB5\u1EB6\u1EB7\u1EB8\u1EB9"+
-            "\u1EBA\u1EBB\u1EBC\u1EBD\u1EBE\u1EBF\u1EC0\u1EC1"+
-            "\u1EC2\u1EC3\u1EC4\u1EC5\u1EC6\u1EC7\u1EC8\u1EC9"+
-            "\u1ECA\u1ECB\u1ECC\u1ECD\u1ECE\u1ECF\u1ED0\u1ED1"+
-            "\u1ED2\u1ED3\u1ED4\u1ED5\u1ED6\u1ED7\u1ED8\u1ED9"+
-            "\u1EDA\u1EDB\u1EDC\u1EDD\u1EDE\u1EDF\u1EE0\u1EE1"+
-            "\u1EE2\u1EE3\u1EE4\u1EE5\u1EE6\u1EE7\u1EE8\u1EE9"+
-            "\u1EEA\u1EEB\u1EEC\u1EED\u1EEE\u1EEF\u1EF0\u1EF1"+
-            "\u0000\u1EF2\u1EF3\u0000\u0000\u0000\u0000\u1EF4"+
-            "\u0000\u0000\u1EF5\u1EF6\u0000\u0000\u1EF7\u1EF8"+
-            "\u1EF9\u1EFA\u1EFB\u1EFC\u1EFD\u0000\u0000\u1EFE"+
-            "\u1EFF\u1F00\u1F01\u1F02\u1F03\u1F04\u1F05\u1F06"+
-            "\u0000\u1F07\u0000\u0000\u1F08\u0000\u1F09\u1F0A"+
-            "\u1F0B\u1F0C\u1F0D\u0000\u1F0E\u1F0F\u1F10\u1F11"+
-            "\u1F12\u1F13\u1F14\u1F15\u1F16\u1F17\u1F18\u1F19"+
-            "\u1F1A\u1F1B\u1F1C\u1F1D\u1F1E\u1F1F\u1F20\u1F21"+
-            "\u1F22\u1F23\u1F24\u1F25\u1F26\u1F27\u1F28\u1F29"+
-            "\u1F2A\u1F2B\u1F2C\u1F2D\u1F2E\u1F2F\u1F30\u1F31"+
-            "\u1F32\u1F33\u1F34\u1F35\u1F36\u1F37\u1F38\u1F39"+
-            "\u1F3A\u1F3B\u1F3C\u1F3D\u1F3E\u1F3F\u1F40\u1F41"+
-            "\u1F42\u1F43\u1F44\u1F45\u1F46\u1F47\u1F48\u1F49"+
-            "\u1F4A\u1F4B\u1F4C\u1F4D\u1F4E\u1F4F\u1F50\u1F51"+
-            "\u1F52\u1F53\u1F54\u1F55\u1F56\u1F57\u1F58\u1F59"+
-            "\u1F5A\u1F5B\u1F5C\u1F5D\u1F5E\u1F5F\u1F60\u1F61"+
-            "\u1F62\u1F63\u1F64\u1F65\u1F66\u1F67\u1F68\u1F69"+
-            "\u1F6A\u1F6B\u1F6C\u1F6D\u1F6E\u1F6F\u1F70\u1F71"+
-            "\u1F72\u1F73\u1F74\u1F75\u1F76\u1F77\u1F78\u1F79"+
-            "\u1F7A\u1F7B\u1F7C\u1F7D\u0000\u1F7E\u1F7F\u1F80"+
-            "\u1F81\u1F82\u1F83\u1F84\u1F85\u1F86\u1F87\u1F88"+
-            "\u1F89\u1F8A\u1F8B\u1F8C\u1F8D\u1F8E\u1F8F\u1F90"+
-            "\u1F91\u1F92\u1F93\u1F94\u1F95\u1F96\u1F97\u1F98"+
-            "\u1F99\u1F9A\u1F9B\u1F9C\u1F9D\u1F9E\u1F9F\u1FA0"+
-            "\u1FA1\u1FA2\u1FA3\u1FA4\u1FA5\u1FA6\u1FA7\u1FA8"+
-            "\u1FA9\u1FAA\u1FAB\u1FAC\u1FAD\u1FAE\u1FAF\u1FB0"+
-            "\u1FB1\u1FB2\u1FB3\u1FB4\u1FB5\u1FB6\u1FB7\u1FB8"+
-            "\u1FB9\u1FBA\u1FBB\u1FBC\u1FBD\u1FBE\u1FBF\u1FC0"+
-            "\u1FC1\u1FC2\u1FC3\u1FC4\u1FC5\u1FC6\u1FC7\u1FC8"+
-            "\u1FC9\u1FCA\u1FCB\u1FCC\u1FCD\u1FCE\u1FCF\u1FD0"+
-            "\u1FD1\u1FD2\u1FD3\u0000\u1FD4\u0000\u1FD5\u1FD6"+
-            "\u1FD7\u0000\u1FD8\u1FD9\u1FDA\u1FDB\u1FDC\u1FDD"+
-            "\u1FDE\u1FDF\u1FE0\u1FE1\u1FE2\u1FE3\u0000\u1FE4"+
-            "\u1FE5\u1FE6\u1FE7\u1FE8\u1FE9\u1FEA\u1FEB\u1FEC"+
-            "\u1FED\u0000\u1FEE\u1FEF\u1FF0\u1FF1\u1FF2\u1FF3"+
-            "\u1FF4\u1FF5\u1FF6\u1FF7\u1FF8\u1FF9\u1FFA\u1FFB"+
-            "\u1FFC\u1FFD\u1FFE\u1FFF\u2000\u2001\u2002\u2003"+
-            "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u200B"+
-            "\u200C\u200D\u200E\u200F\u2010\u2011\u2012\u2013"+
-            "\u2014\u2015\u2016\u2017\u2018\u2019\u201A\u201B"+
-            "\u201C\u201D\u201E\u201F\u2020\u2021\u2022\u2023"+
-            "\u2024\u2025\u2026\u2027\u2028\u2029\u202A\u202B"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u202C\u202D\u202E\u202F"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u2030\u2031\u2032\u2033\u2034\u2035"+
-            "\u2036\u2037\u2038\u2039\u203A\u203B\u203C\u203D"+
-            "\u203E\u203F\u2040\u2041\u2042\u2043\u2044\u2045"+
-            "\u0000\u0000\u0000\u0000\u2046\u2047\u0000\u0000"+
-            "\u0000\u0000\u2048\u2049\u204A\u204B\u204C\u204D"+
-            "\u204E\u204F\u2050\u2051\u2052\u2053\u2054\u2055"+
-            "\u2056\u2057\u2058\u2059\u205A\u205B\u205C\u205D"+
-            "\u205E\u205F\u2060\u2061\u2062\u2063\u2064\u2065"+
-            "\u2066\u2067\u2068\u2069\u206A\u206B\u206C\u206D"+
-            "\u206E\u206F\u2070\u2071\u2072\u2073\u2074\u2075"+
-            "\u2076\u2077\u2078\u2079\u207A\u207B\u207C\u207D"+
-            "\u207E\u207F\u2080\u2081\u2082\u2083\u2084\u2085"+
-            "\u2086\u2087\u2088\u2089\u208A\u208B\u208C\u208D"+
-            "\u208E\u208F\u2090\u2091\u2092\u2093\u2094\u2095"+
-            "\u2096\u2097\u2098\u2099\u209A\u209B\u209C\u209D"+
-            "\u209E\u209F\u20A0\u20A1\u20A2\u20A3\u20A4\u20A5"+
-            "\u20A6\u20A7\u20A8\u20A9\u20AA\u20AB\u20AC\u20AD"+
-            "\u20AE\u20AF\u20B0\u20B1\u20B2\u20B3\u20B4\u20B5"+
-            "\u0000\u20B6\u20B7\u20B8\u20B9\u20BA\u20BB\u0000"+
-            "\u20BC\u0000\u20BD\u20BE\u20BF\u0000\u20C0\u20C1"+
-            "\u20C2\u20C3\u0000\u20C4\u20C5\u0000\u0000\u0000"+
-            "\u0000\u20C6\u20C7\u0000\u20C8\u0000\u20C9\u0000"+
-            "\u0000\u0000\u0000\u0000\u20CA\u20CB\u0000\u20CC"+
-            "\u20CD\u20CE\u20CF\u20D0\u0000\u0000\u0000\u0000"+
-            "\u20D1\u20D2\u20D3\u20D4\u20D5\u0000\u20D6\u20D7"+
-            "\u20D8\u20D9\u20DA\u20DB\u20DC\u20DD\u20DE\u20DF"+
-            "\u0000\u20E0\u20E1\u20E2\u0000\u20E3\u20E4\u20E5"+
-            "\u20E6\u20E7\u0000\u20E8\u20E9\u20EA\u20EB\u20EC"+
-            "\u20ED\u20EE\u20EF\u20F0\u20F1\u20F2\u20F3\u20F4"+
-            "\u0000\u0000\u20F5\u20F6\u0000\u0000\u0000\u0000"+
-            "\u20F7\u20F8\u20F9\u20FA\u20FB\u20FC\u0000\u0000"+
-            "\u20FD\u20FE\u20FF\u2100\u2101\u2102\u2103\u2104"+
-            "\u2105\u2106\u2107\u2108\u2109\u210A\u210B\u210C"+
-            "\u210D\u210E\u210F\u2110\u2111\u2112\u2113\u2114"+
-            "\u2115\u2116\u2117\u2118\u2119\u211A\u211B\u211C"+
-            "\u211D\u211E\u211F\u2120\u2121\u0000\u2122\u2123"+
-            "\u2124\u0000\u2125\u2126\u2127\u2128\u2129\u212A"+
-            "\u212B\u212C\u212D\u212E\u212F\u0000\u2130\u2131"+
-            "\u2132\u2133\u2134\u2135\u2136\u2137\u2138\u2139"+
-            "\u213A\u213B\u213C\u213D\u213E\u213F\u2140\u2141"+
-            "\u2142\u2143\u2144\u2145\u2146\u2147\u2148\u0000"+
-            "\u2149\u214A\u214B\u214C\u214D\u214E\u214F\u2150"+
-            "\u2151\u2152\u2153\u2154\u2155\u2156\u2157\u2158"+
-            "\u2159\u215A\u215B\u215C\u215D\u215E\u215F\u2160"+
-            "\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168"+
-            "\u2169\u216A\u216B\u216C\u216D\u216E\u216F\u2170"+
-            "\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178"+
-            "\u2179\u217A\u217B\u217C\u217D\u217E\u217F\u2180"+
-            "\u2181\u2182\u2183\u2184\u2185\u2186\u2187\u2188"+
-            "\u2189\u218A\u218B\u218C\u218D\u218E\u218F\u2190"+
-            "\u2191\u2192\u2193\u2194\u2195\u2196\u2197\u2198"+
-            "\u2199\u219A\u0000\u219B\u219C\u219D\u219E\u219F"+
-            "\u21A0\u21A1\u21A2\u21A3\u21A4\u21A5\u21A6\u21A7"+
-            "\u21A8\u21A9\u21AA\u21AB\u21AC\u21AD\u21AE\u21AF"+
-            "\u21B0\u21B1\u21B2\u21B3\u21B4\u21B5\u21B6\u21B7"+
-            "\u21B8\u21B9\u21BA\u21BB\u21BC\u21BD\u21BE\u21BF"+
-            "\u21C0\u21C1\u21C2\u21C3\u21C4\u21C5\u21C6\u21C7"+
-            "\u21C8\u21C9\u21CA\u21CB\u21CC\u21CD\u21CE\u21CF"+
-            "\u21D0\u21D1\u21D2\u21D3\u21D4\u21D5\u21D6\u21D7"+
-            "\u21D8\u21D9\u21DA\u21DB\u21DC\u21DD\u21DE\u21DF"+
-            "\u21E0\u21E1\u21E2\u21E3\u21E4\u21E5\u21E6\u21E7"+
-            "\u21E8\u21E9\u21EA\u21EB\u21EC\u21ED\u21EE\u21EF"+
-            "\u21F0\u21F1\u21F2\u21F3\u21F4\u21F5\u21F6\u21F7"+
-            "\u21F8\u21F9\u21FA\u21FB\u21FC\u21FD\u21FE\u21FF"+
-            "\u2200\u2201\u2202\u2203\u2204\u2205\u2206\u2207"+
-            "\u2208\u2209\u220A\u220B\u220C\u220D\u220E\u220F"+
-            "\u2210\u2211\u2212\u2213\u2214\u2215\u2216\u2217"+
-            "\u2218\u2219\u221A\u221B\u221C\u221D\u221E\u221F"+
-            "\u2220\u2221\u2222\u2223\u2224\u2225\u2226\u2227"+
-            "\u2228\u2229\u222A\u222B\u222C\u222D\u222E\u222F"+
-            "\u2230\u2231\u2232\u2233\u2234\u2235\u2236\u2237"+
-            "\u2238\u2239\u223A\u223B\u223C\u223D\u223E\u223F"+
-            "\u2240\u2241\u2242\u2243\u2244\u2245\u2246\u2247"+
-            "\u2248\u2249\u224A\u224B\u224C\u224D\u224E\u224F"+
-            "\u2250\u2251\u2252\u2253\u2254\u2255\u2256\u2257"+
-            "\u2258\u2259\u225A\u225B\u225C\u225D\u225E\u225F"+
-            "\u2260\u2261\u2262\u2263\u2264\u2265\u2266\u2267"+
-            "\u2268\u2269\u226A\u226B\u226C\u226D\u226E\u226F"+
-            "\u2270\u2271\u2272\u2273\u2274\u2275\u2276\u2277"+
-            "\u2278\u2279\u227A\u227B\u227C\u227D\u227E\u227F"+
-            "\u2280\u2281\u2282\u2283\u2284\u2285\u2286\u2287"+
-            "\u2288\u2289\u228A\u228B\u228C\u228D\u228E\u228F"+
-            "\u2290\u2291\u2292\u2293\u2294\u2295\u2296\u2297"+
-            "\u2298\u2299\u229A\u229B\u229C\u229D\u229E\u229F"+
-            "\u22A0\u22A1\u22A2\u22A3\u22A4\u22A5\u22A6\u22A7"+
-            "\u22A8\u22A9\u22AA\u22AB\u22AC\u22AD\u22AE\u22AF"+
-            "\u22B0\u22B1\u22B2\u22B3\u22B4\u22B5\u22B6\u22B7"+
-            "\u22B8\u22B9\u22BA\u22BB\u22BC\u22BD\u22BE\u22BF"+
-            "\u22C0\u22C1\u22C2\u22C3\u22C4\u22C5\u22C6\u22C7"+
-            "\u22C8\u22C9\u22CA\u22CB\u22CC\u22CD\u22CE\u22CF"+
-            "\u22D0\u22D1\u22D2\u22D3\u22D4\u22D5\u22D6\u22D7"+
-            "\u22D8\u22D9\u22DA\u22DB\u22DC\u22DD\u22DE\u22DF"+
-            "\u22E0\u22E1\u22E2\u22E3\u22E4\u22E5\u22E6\u22E7"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u22E8\u22E9\u22EA\u22EB\u22EC\u22ED"+
-            "\u22EE\u22EF\u22F0\u22F1\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u22F2\u22F3\u22F4\u22F5"+
-            "\u22F6\u22F7\u22F8\u22F9\u22FA\u22FB\u22FC\u22FD"+
-            "\u22FE\u22FF\u2300\u2301\u2302\u2303\u2304\u2305"+
-            "\u2306\u2307\u2308\u2309\u230A\u230B\u230C\u230D"+
-            "\u230E\u230F\u2310\u2311\u2312\u2313\u2314\u2315"+
-            "\u2316\u2317\u2318\u2319\u231A\u231B\u231C\u231D"+
-            "\u231E\u231F\u2320\u2321\u2322\u2323\u2324\u2325"+
-            "\u2326\u2327\u2328\u2329\u232A\u232B\u232C\u232D"+
-            "\u232E\u232F\u2330\u2331\u2332\u2333\u2334\u2335"+
-            "\u2336\u2337\u2338\u2339\u233A\u233B\u233C\u233D"+
-            "\u233E\u233F\u2340\u2341\u2342\u2343\u2344\u2345"+
-            "\u2346\u2347\u2348\u2349\u234A\u234B\u234C\u234D"+
-            "\u234E\u234F\u2350\u2351\u2352\u2353\u2354\u2355"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u2356\u2357\u2358\u2359"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u235A\u235B\u235C\u235D"+
-            "\u235E\u235F\u2360\u2361\u2362\u2363\u2364\u2365"+
-            "\u2366\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u2367\u2368\u2369\u0000\u0000\u0000\u236A\u236B"+
-            "\u236C\u236D\u236E\u236F\u2370\u2371\u2372\u2373"+
-            "\u0000\u0000\u2374\u2375\u2376\u2377\u2378\u2379"+
-            "\u237A\u237B\u237C\u237D\u237E\u237F\u2380\u2381"+
-            "\u2382\u2383\u0000\u0000\u2384\u2385\u2386\u2387"+
-            "\u2388\u2389\u238A\u238B\u0000\u0000\u238C\u238D"+
-            "\u238E\u238F\u2390\u2391\u2392\u2393\u0000\u0000"+
-            "\u2394\u2395\u2396\u0000\u2397\u2398\u0000\u0000"+
-            "\u2399\u239A\u239B\u239C\u239D\u239E\u239F\u23A0"+
-            "\u23A1\u23A2\u23A3\u23A4\u23A5\u23A6\u23A7\u23A8"+
-            "\u23A9\u23AA\u0000\u0000\u0000\u0000\u23AB\u23AC"+
-            "\u23AD\u23AE\u23AF\u23B0\u23B1\u23B2\u23B3\u23B4"+
-            "\u23B5\u23B6\u23B7\u23B8\u23B9\u23BA\u23BB\u23BC"+
-            "\u23BD\u23BE\u23BF\u23C0\u23C1\u23C2\u23C3\u23C4"+
-            "\u23C5\u23C6\u23C7\u23C8\u23C9\u0000\u0000\u23CA"+
-            "\u23CB\u0000\u23CC\u23CD\u23CE\u23CF\u23D0\u23D1"+
-            "\u23D2\u23D3\u23D4\u23D5\u23D6\u23D7\u23D8\u23D9"+
-            "\u23DA\u23DB\u23DC\u23DD\u23DE\u23DF\u23E0\u23E1"+
-            "\u23E2\u23E3\u23E4\u23E5\u23E6\u23E7\u23E8\u23E9"+
-            "\u23EA\u23EB\u23EC\u23ED\u23EE\u23EF\u23F0\u23F1"+
-            "\u23F2\u23F3\u23F4\u23F5\u23F6\u23F7\u23F8\u23F9"+
-            "\u23FA\u23FB\u23FC\u23FD\u23FE\u23FF\u2400\u2401"+
-            "\u0000\u2402\u0000\u2403\u2404\u2405\u2406\u2407"+
-            "\u2408\u2409\u240A\u240B\u240C\u240D\u240E\u240F"+
-            "\u2410\u2411\u2412\u2413\u2414\u2415\u2416\u2417"+
-            "\u2418\u2419\u241A\u241B\u241C\u241D\u241E\u241F"+
-            "\u2420\u2421\u2422\u2423\u2424\u2425\u2426\u2427"+
-            "\u2428\u2429\u242A\u242B\u242C\u242D\u242E\u242F"+
-            "\u2430\u2431\u2432\u2433\u2434\u2435\u2436\u2437"+
-            "\u2438\u2439\u243A\u243B\u243C\u243D\u243E\u243F"+
-            "\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447"+
-            "\u2448\u2449\u244A\u244B\u244C\u244D\u244E\u244F"+
-            "\u2450\u2451\u2452\u2453\u2454\u2455\u2456\u2457"+
-            "\u2458\u2459\u245A\u245B\u245C\u245D\u245E\u245F"+
-            "\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467"+
-            "\u2468\u2469\u246A\u246B\u246C\u246D\u246E\u246F"+
-            "\u2470\u2471\u2472\u2473\u2474\u2475\u2476\u2477"+
-            "\u2478\u2479\u247A\u247B\u247C\u247D\u247E\u247F"+
-            "\u2480\u2481\u2482\u2483\u2484\u2485\u2486\u2487"+
-            "\u2488\u2489\u248A\u248B\u248C\u248D\u248E\u248F"+
-            "\u2490\u2491\u2492\u2493\u2494\u2495\u2496\u2497"+
-            "\u2498\u2499\u249A\u249B\u249C\u249D\u249E\u249F"+
-            "\u24A0\u24A1\u24A2\u24A3\u24A4\u24A5\u24A6\u24A7"+
-            "\u24A8\u24A9\u24AA\u24AB\u24AC\u24AD\u24AE\u24AF"+
-            "\u24B0\u24B1\u24B2\u24B3\u24B4\u24B5\u24B6\u24B7"+
-            "\u24B8\u24B9\u24BA\u24BB\u24BC\u24BD\u24BE\u24BF"+
-            "\u24C0\u24C1\u24C2\u24C3\u24C4\u24C5\u24C6\u24C7"+
-            "\u24C8\u24C9\u24CA\u24CB\u24CC\u24CD\u24CE\u24CF"+
-            "\u24D0\u24D1\u24D2\u24D3\u24D4\u24D5\u24D6\u24D7"+
-            "\u24D8\u24D9\u24DA\u24DB\u24DC\u24DD\u24DE\u24DF"+
-            "\u24E0\u24E1\u24E2\u24E3\u24E4\u24E5\u24E6\u24E7"+
-            "\u24E8\u24E9\u24EA\u24EB\u24EC\u24ED\u24EE\u24EF"+
-            "\u24F0\u24F1\u24F2\u24F3\u24F4\u24F5\u24F6\u24F7"+
-            "\u24F8\u24F9\u24FA\u24FB\u24FC\u24FD\u24FE\u24FF"+
-            "\u2500\u2501\u2502\u2503\u2504\u2505\u2506\u2507"+
-            "\u2508\u2509\u250A\u250B\u250C\u250D\u250E\u250F"+
-            "\u2510\u2511\u2512\u2513\u2514\u2515\u2516\u2517"+
-            "\u2518\u2519\u251A\u251B\u251C\u251D\u251E\u251F"+
-            "\u2520\u2521\u2522\u2523\u2524\u2525\u2526\u2527"+
-            "\u2528\u2529\u252A\u252B\u252C\u252D\u252E\u252F"+
-            "\u2530\u2531\u2532\u2533\u2534\u2535\u2536\u2537"+
-            "\u2538\u2539\u253A\u253B\u253C\u253D\u253E\u253F"+
-            "\u2540\u2541\u2542\u2543\u2544\u2545\u2546\u2547"+
-            "\u2548\u2549\u254A\u254B\u254C\u254D\u254E\u254F"+
-            "\u2550\u2551\u2552\u2553\u2554\u2555\u2556\u2557"+
-            "\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F"+
-            "\u2560\u2561\u2562\u2563\u2564\u2565\u2566\u2567"+
-            "\u2568\u2569\u256A\u256B\u256C\u256D\u256E\u256F"+
-            "\u2570\u2571\u2572\u2573\u2574\u2575\u2576\u2577"+
-            "\u2578\u2579\u257A\u257B\u257C\u257D\u257E\u257F"+
-            "\u2580\u2581\u2582\u2583\u2584\u2585\u2586\u2587"+
-            "\u2588\u2589\u258A\u258B\u258C\u258D\u258E\u258F"+
-            "\u2590\u2591\u2592\u2593\u2594\u2595\u2596\u2597"+
-            "\u2598\u2599\u259A\u259B\u259C\u259D\u259E\u259F"+
-            "\u25A0\u25A1\u25A2\u25A3\u25A4\u25A5\u25A6\u25A7"+
-            "\u25A8\u25A9\u25AA\u25AB\u25AC\u25AD\u25AE\u25AF"+
-            "\u25B0\u25B1\u25B2\u25B3\u25B4\u25B5\u25B6\u25B7"+
-            "\u25B8\u25B9\u25BA\u25BB\u25BC\u25BD\u25BE\u25BF"+
-            "\u25C0\u25C1\u25C2\u25C3\u25C4\u25C5\u25C6\u25C7"+
-            "\u25C8\u25C9\u25CA\u25CB\u25CC\u25CD\u25CE\u25CF"+
-            "\u25D0\u25D1\u25D2\u25D3\u25D4\u25D5\u25D6\u25D7"+
-            "\u25D8\u25D9\u25DA\u25DB\u25DC\u25DD\u25DE\u25DF"+
-            "\u25E0\u25E1\u25E2\u25E3\u25E4\u25E5\u25E6\u25E7"+
-            "\u25E8\u25E9\u25EA\u25EB\u25EC\u25ED\u25EE\u25EF"+
-            "\u25F0\u25F1\u25F2\u25F3\u25F4\u25F5\u25F6\u25F7"+
-            "\u25F8\u25F9\u25FA\u25FB\u25FC\u25FD\u25FE\u25FF"+
-            "\u2600\u2601\u2602\u2603\u2604\u2605\u2606\u2607"+
-            "\u2608\u2609\u260A\u260B\u260C\u260D\u260E\u260F"+
-            "\u2610\u2611\u2612\u2613\u2614\u2615\u2616\u2617"+
-            "\u2618\u2619\u261A\u261B\u261C\u261D\u261E\u261F"+
-            "\u2620\u2621\u2622\u2623\u2624\u2625\u2626\u2627"+
-            "\u2628\u2629\u262A\u262B\u262C\u262D\u262E\u262F"+
-            "\u2630\u2631\u2632\u2633\u2634\u2635\u2636\u2637"+
-            "\u2638\u2639\u263A\u263B\u263C\u263D\u263E\u263F"+
-            "\u2640\u2641\u2642\u2643\u2644\u2645\u2646\u2647"+
-            "\u2648\u2649\u264A\u264B\u264C\u264D\u264E\u264F"+
-            "\u2650\u2651\u2652\u2653\u2654\u2655\u2656\u2657"+
-            "\u2658\u2659\u265A\u265B\u265C\u265D\u265E\u265F"+
-            "\u2660\u2661\u2662\u2663\u2664\u2665\u2666\u2667"+
-            "\u2668\u2669\u266A\u266B\u266C\u266D\u266E\u266F"+
-            "\u2670\u2671\u2672\u2673\u2674\u2675\u2676\u2677"+
-            "\u2678\u2679\u267A\u267B\u267C\u267D\u267E\u267F"+
-            "\u2680\u2681\u2682\u2683\u2684\u2685\u2686\u2687"+
-            "\u2688\u2689\u268A\u268B\u268C\u268D\u268E\u268F"+
-            "\u2690\u2691\u2692\u2693\u2694\u2695\u2696\u2697"+
-            "\u2698\u2699\u269A\u269B\u269C\u269D\u269E\u269F"+
-            "\u26A0\u26A1\u26A2\u26A3\u26A4\u26A5\u26A6\u26A7"+
-            "\u26A8\u26A9\u26AA\u26AB\u26AC\u26AD\u26AE\u26AF"+
-            "\u26B0\u26B1\u26B2\u26B3\u26B4\u26B5\u26B6\u26B7"+
-            "\u26B8\u26B9\u26BA\u26BB\u26BC\u26BD\u26BE\u26BF"+
-            "\u26C0\u26C1\u26C2\u26C3\u26C4\u26C5\u26C6\u26C7"+
-            "\u26C8\u26C9\u26CA\u26CB\u26CC\u26CD\u26CE\u26CF"+
-            "\u26D0\u26D1\u26D2\u26D3\u26D4\u26D5\u26D6\u26D7"+
-            "\u26D8\u26D9\u26DA\u26DB\u26DC\u26DD\u26DE\u26DF"+
-            "\u26E0\u26E1\u26E2\u26E3\u26E4\u26E5\u26E6\u26E7"+
-            "\u26E8\u26E9\u26EA\u26EB\u26EC\u26ED\u26EE\u26EF"+
-            "\u26F0\u26F1\u26F2\u26F3\u26F4\u26F5\u26F6\u26F7"+
-            "\u26F8\u26F9\u26FA\u26FB\u26FC\u26FD\u26FE\u26FF"+
-            "\u2700\u2701\u2702\u2703\u2704\u2705\u2706\u2707"+
-            "\u2708\u2709\u270A\u270B\u270C\u270D\u270E\u270F"+
-            "\u2710\u2711\u2712\u2713\u2714\u2715\u2716\u2717"+
-            "\u2718\u2719\u271A\u271B\u271C\u271D\u271E\u271F"+
-            "\u2720\u2721\u2722\u2723\u2724\u2725\u2726\u2727"+
-            "\u2728\u2729\u272A\u272B\u272C\u272D\u272E\u272F"+
-            "\u2730\u2731\u2732\u2733\u2734\u2735\u2736\u2737"+
-            "\u2738\u2739\u273A\u273B\u273C\u273D\u273E\u273F"+
-            "\u2740\u2741\u2742\u2743\u2744\u2745\u2746\u2747"+
-            "\u2748\u2749\u274A\u274B\u274C\u274D\u274E\u274F"+
-            "\u2750\u2751\u2752\u2753\u2754\u2755\u2756\u2757"+
-            "\u2758\u2759\u275A\u275B\u275C\u275D\u275E\u275F"+
-            "\u2760\u2761\u2762\u2763\u2764\u2765\u2766\u2767"+
-            "\u2768\u2769\u276A\u276B\u276C\u276D\u276E\u276F"+
-            "\u2770\u2771\u2772\u2773\u2774\u2775\u2776\u2777"+
-            "\u2778\u2779\u277A\u277B\u277C\u277D\u277E\u277F"+
-            "\u2780\u2781\u2782\u2783\u2784\u2785\u2786\u2787"+
-            "\u2788\u2789\u278A\u278B\u278C\u278D\u278E\u278F"+
-            "\u2790\u2791\u2792\u2793\u2794\u2795\u2796\u2797"+
-            "\u2798\u2799\u279A\u279B\u279C\u279D\u279E\u279F"+
-            "\u27A0\u27A1\u27A2\u27A3\u27A4\u27A5\u27A6\u27A7"+
-            "\u27A8\u27A9\u27AA\u27AB\u27AC\u27AD\u27AE\u27AF"+
-            "\u27B0\u27B1\u27B2\u27B3\u27B4\u27B5\u27B6\u27B7"+
-            "\u27B8\u27B9\u27BA\u27BB\u27BC\u27BD\u27BE\u27BF"+
-            "\u27C0\u27C1\u27C2\u27C3\u27C4\u27C5\u27C6\u27C7"+
-            "\u27C8\u27C9\u27CA\u27CB\u27CC\u27CD\u27CE\u27CF"+
-            "\u27D0\u27D1\u27D2\u27D3\u27D4\u27D5\u27D6\u27D7"+
-            "\u27D8\u27D9\u27DA\u27DB\u27DC\u27DD\u27DE\u27DF"+
-            "\u27E0\u27E1\u27E2\u27E3\u27E4\u27E5\u27E6\u27E7"+
-            "\u27E8\u27E9\u27EA\u27EB\u27EC\u27ED\u27EE\u27EF"+
-            "\u27F0\u27F1\u27F2\u27F3\u27F4\u27F5\u27F6\u27F7"+
-            "\u27F8\u27F9\u27FA\u27FB\u27FC\u27FD\u27FE\u27FF"+
-            "\u2800\u2801\u2802\u2803\u2804\u2805\u2806\u2807"+
-            "\u2808\u2809\u280A\u280B\u280C\u280D\u280E\u280F"+
-            "\u2810\u2811\u2812\u2813\u2814\u2815\u2816\u2817"+
-            "\u2818\u2819\u281A\u281B\u281C\u281D\u281E\u281F"+
-            "\u2820\u2821\u2822\u2823\u2824\u2825\u2826\u2827"+
-            "\u2828\u2829\u282A\u282B\u282C\u282D\u282E\u282F"+
-            "\u2830\u2831\u2832\u2833\u2834\u2835\u2836\u2837"+
-            "\u2838\u2839\u283A\u283B\u283C\u283D\u283E\u283F"+
-            "\u2840\u2841\u2842\u2843\u2844\u2845\u2846\u2847"+
-            "\u2848\u2849\u284A\u284B\u284C\u284D\u284E\u284F"+
-            "\u2850\u2851\u2852\u2853\u2854\u2855\u2856\u2857"+
-            "\u2858\u2859\u285A\u285B\u285C\u285D\u285E\u285F"+
-            "\u2860\u2861\u2862\u2863\u2864\u2865\u2866\u2867"+
-            "\u2868\u2869\u286A\u286B\u286C\u286D\u286E\u286F"+
-            "\u2870\u2871\u2872\u2873\u2874\u2875\u2876\u2877"+
-            "\u2878\u2879\u287A\u287B\u287C\u287D\u287E\u287F"+
-            "\u2880\u2881\u2882\u2883\u2884\u2885\u2886\u2887"+
-            "\u2888\u2889\u288A\u288B\u288C\u288D\u288E\u288F"+
-            "\u2890\u2891\u2892\u2893\u2894\u2895\u2896\u2897"+
-            "\u2898\u2899\u289A\u289B\u289C\u289D\u289E\u289F"+
-            "\u28A0\u28A1\u28A2\u28A3\u28A4\u28A5\u28A6\u28A7"+
-            "\u28A8\u28A9\u28AA\u28AB\u28AC\u28AD\u28AE\u28AF"+
-            "\u28B0\u28B1\u28B2\u28B3\u28B4\u28B5\u28B6\u28B7"+
-            "\u28B8\u28B9\u28BA\u28BB\u28BC\u28BD\u28BE\u28BF"+
-            "\u28C0\u28C1\u28C2\u28C3\u28C4\u28C5\u28C6\u28C7"+
-            "\u28C8\u28C9\u28CA\u28CB\u28CC\u28CD\u28CE\u28CF"+
-            "\u28D0\u28D1\u28D2\u28D3\u28D4\u28D5\u28D6\u28D7"+
-            "\u28D8\u28D9\u28DA\u28DB\u28DC\u28DD\u28DE\u28DF"+
-            "\u28E0\u28E1\u28E2\u28E3\u28E4\u28E5\u28E6\u28E7"+
-            "\u28E8\u28E9\u28EA\u28EB\u28EC\u28ED\u28EE\u28EF"+
-            "\u28F0\u28F1\u28F2\u28F3\u28F4\u28F5\u28F6\u28F7"+
-            "\u28F8\u28F9\u28FA\u28FB\u28FC\u28FD\u28FE\u28FF"+
-            "\u2900\u2901\u2902\u2903\u2904\u2905\u2906\u2907"+
-            "\u2908\u2909\u290A\u290B\u290C\u290D\u290E\u290F"+
-            "\u2910\u2911\u2912\u2913\u2914\u2915\u2916\u2917"+
-            "\u2918\u2919\u291A\u291B\u291C\u291D\u291E\u291F"+
-            "\u2920\u2921\u2922\u2923\u2924\u2925\u2926\u2927"+
-            "\u2928\u2929\u292A\u292B\u292C\u292D\u292E\u292F"+
-            "\u2930\u2931\u2932\u2933\u2934\u2935\u2936\u2937"+
-            "\u2938\u2939\u293A\u293B\u293C\u293D\u293E\u293F"+
-            "\u2940\u2941\u2942\u2943\u2944\u2945\u2946\u2947"+
-            "\u2948\u2949\u294A\u294B\u294C\u294D\u294E\u294F"+
-            "\u2950\u2951\u2952\u2953\u2954\u2955\u2956\u2957"+
-            "\u2958\u2959\u295A\u295B\u295C\u295D\u295E\u295F"+
-            "\u2960\u2961\u2962\u2963\u2964\u2965\u2966\u2967"+
-            "\u2968\u2969\u296A\u296B\u296C\u296D\u296E\u296F"+
-            "\u2970\u2971\u2972\u2973\u2974\u2975\u2976\u2977"+
-            "\u2978\u2979\u297A\u297B\u297C\u297D\u297E\u297F"+
-            "\u2980\u2981\u2982\u2983\u2984\u2985\u2986\u2987"+
-            "\u2988\u2989\u298A\u298B\u298C\u298D\u298E\u298F"+
-            "\u2990\u2991\u2992\u2993\u2994\u2995\u2996\u2997"+
-            "\u2998\u2999\u299A\u299B\u299C\u299D\u299E\u299F"+
-            "\u29A0\u29A1\u29A2\u29A3\u29A4\u29A5\u29A6\u29A7"+
-            "\u29A8\u29A9\u29AA\u29AB\u29AC\u29AD\u29AE\u29AF"+
-            "\u29B0\u29B1\u29B2\u29B3\u29B4\u29B5\u29B6\u29B7"+
-            "\u29B8\u29B9\u29BA\u29BB\u29BC\u29BD\u29BE\u29BF"+
-            "\u29C0\u29C1\u29C2\u29C3\u29C4\u29C5\u29C6\u29C7"+
-            "\u29C8\u29C9\u29CA\u29CB\u29CC\u29CD\u29CE\u29CF"+
-            "\u29D0\u29D1\u29D2\u29D3\u29D4\u29D5\u29D6\u29D7"+
-            "\u29D8\u29D9\u29DA\u29DB\u29DC\u29DD\u29DE\u29DF"+
-            "\u29E0\u29E1\u29E2\u29E3\u29E4\u29E5\u29E6\u29E7"+
-            "\u29E8\u29E9\u29EA\u29EB\u29EC\u29ED\u29EE\u29EF"+
-            "\u29F0\u29F1\u29F2\u29F3\u29F4\u29F5\u29F6\u29F7"+
-            "\u29F8\u29F9\u29FA\u29FB\u29FC\u29FD\u29FE\u29FF"+
-            "\u2A00\u2A01\u2A02\u2A03\u2A04\u2A05\u2A06\u2A07"+
-            "\u2A08\u2A09\u2A0A\u2A0B\u2A0C\u2A0D\u2A0E\u2A0F"+
-            "\u2A10\u2A11\u2A12\u2A13\u2A14\u2A15\u2A16\u2A17"+
-            "\u2A18\u2A19\u2A1A\u2A1B\u2A1C\u2A1D\u2A1E\u2A1F"+
-            "\u2A20\u2A21\u2A22\u2A23\u2A24\u2A25\u2A26\u2A27"+
-            "\u2A28\u2A29\u2A2A\u2A2B\u2A2C\u2A2D\u2A2E\u2A2F"+
-            "\u2A30\u2A31\u2A32\u2A33\u2A34\u2A35\u2A36\u2A37"+
-            "\u2A38\u2A39\u2A3A\u2A3B\u2A3C\u2A3D\u2A3E\u2A3F"+
-            "\u2A40\u2A41\u2A42\u2A43\u2A44\u2A45\u2A46\u2A47"+
-            "\u2A48\u2A49\u2A4A\u2A4B\u2A4C\u2A4D\u2A4E\u2A4F"+
-            "\u2A50\u2A51\u2A52\u2A53\u2A54\u2A55\u2A56\u2A57"+
-            "\u2A58\u2A59\u2A5A\u2A5B\u2A5C\u2A5D\u2A5E\u2A5F"+
-            "\u2A60\u2A61\u2A62\u2A63\u2A64\u2A65\u2A66\u2A67"+
-            "\u2A68\u2A69\u2A6A\u2A6B\u2A6C\u2A6D\u2A6E\u2A6F"+
-            "\u2A70\u2A71\u2A72\u2A73\u2A74\u2A75\u2A76\u2A77"+
-            "\u2A78\u2A79\u2A7A\u2A7B\u2A7C\u2A7D\u2A7E\u2A7F"+
-            "\u2A80\u2A81\u2A82\u2A83\u2A84\u2A85\u2A86\u2A87"+
-            "\u2A88\u2A89\u2A8A\u2A8B\u2A8C\u2A8D\u2A8E\u2A8F"+
-            "\u2A90\u2A91\u2A92\u2A93\u2A94\u2A95\u2A96\u2A97"+
-            "\u2A98\u2A99\u2A9A\u2A9B\u2A9C\u2A9D\u2A9E\u2A9F"+
-            "\u2AA0\u2AA1\u2AA2\u2AA3\u2AA4\u2AA5\u2AA6\u2AA7"+
-            "\u2AA8\u2AA9\u2AAA\u2AAB\u2AAC\u2AAD\u2AAE\u2AAF"+
-            "\u2AB0\u2AB1\u2AB2\u2AB3\u2AB4\u2AB5\u2AB6\u2AB7"+
-            "\u2AB8\u2AB9\u2ABA\u2ABB\u2ABC\u2ABD\u2ABE\u2ABF"+
-            "\u2AC0\u2AC1\u2AC2\u2AC3\u2AC4\u2AC5\u2AC6\u2AC7"+
-            "\u2AC8\u2AC9\u2ACA\u2ACB\u2ACC\u2ACD\u2ACE\u2ACF"+
-            "\u2AD0\u2AD1\u2AD2\u2AD3\u2AD4\u2AD5\u2AD6\u2AD7"+
-            "\u2AD8\u2AD9\u2ADA\u2ADB\u2ADC\u2ADD\u2ADE\u2ADF"+
-            "\u2AE0\u2AE1\u2AE2\u2AE3\u2AE4\u2AE5\u2AE6\u2AE7"+
-            "\u2AE8\u2AE9\u2AEA\u2AEB\u2AEC\u2AED\u2AEE\u2AEF"+
-            "\u2AF0\u2AF1\u2AF2\u2AF3\u2AF4\u2AF5\u2AF6\u2AF7"+
-            "\u2AF8\u2AF9\u2AFA\u2AFB\u2AFC\u2AFD\u2AFE\u2AFF"+
-            "\u2B00\u2B01\u2B02\u2B03\u2B04\u2B05\u2B06\u2B07"+
-            "\u2B08\u2B09\u2B0A\u2B0B\u2B0C\u2B0D\u2B0E\u2B0F"+
-            "\u2B10\u2B11\u2B12\u2B13\u2B14\u2B15\u2B16\u2B17"+
-            "\u2B18\u2B19\u2B1A\u2B1B\u2B1C\u2B1D\u2B1E\u2B1F"+
-            "\u2B20\u2B21\u2B22\u2B23\u2B24\u2B25\u2B26\u2B27"+
-            "\u2B28\u2B29\u2B2A\u2B2B\u2B2C\u2B2D\u2B2E\u2B2F"+
-            "\u2B30\u2B31\u2B32\u2B33\u2B34\u2B35\u2B36\u2B37"+
-            "\u2B38\u2B39\u2B3A\u2B3B\u2B3C\u2B3D\u2B3E\u2B3F"+
-            "\u2B40\u2B41\u2B42\u2B43\u2B44\u2B45\u2B46\u2B47"+
-            "\u2B48\u2B49\u2B4A\u2B4B\u2B4C\u2B4D\u2B4E\u2B4F"+
-            "\u2B50\u2B51\u2B52\u2B53\u2B54\u2B55\u2B56\u2B57"+
-            "\u2B58\u2B59\u2B5A\u2B5B\u2B5C\u2B5D\u2B5E\u2B5F"+
-            "\u2B60\u2B61\u2B62\u2B63\u2B64\u2B65\u2B66\u2B67"+
-            "\u2B68\u2B69\u2B6A\u2B6B\u2B6C\u2B6D\u2B6E\u2B6F"+
-            "\u2B70\u2B71\u2B72\u2B73\u2B74\u2B75\u2B76\u2B77"+
-            "\u2B78\u2B79\u2B7A\u2B7B\u2B7C\u2B7D\u2B7E\u2B7F"+
-            "\u2B80\u2B81\u2B82\u2B83\u2B84\u2B85\u2B86\u2B87"+
-            "\u2B88\u2B89\u2B8A\u2B8B\u2B8C\u2B8D\u2B8E\u2B8F"+
-            "\u2B90\u2B91\u2B92\u2B93\u2B94\u2B95\u2B96\u2B97"+
-            "\u2B98\u2B99\u2B9A\u2B9B\u2B9C\u2B9D\u2B9E\u2B9F"+
-            "\u2BA0\u2BA1\u2BA2\u2BA3\u2BA4\u2BA5\u2BA6\u2BA7"+
-            "\u2BA8\u2BA9\u2BAA\u2BAB\u2BAC\u2BAD\u2BAE\u2BAF"+
-            "\u2BB0\u2BB1\u2BB2\u2BB3\u2BB4\u2BB5\u2BB6\u2BB7"+
-            "\u2BB8\u2BB9\u2BBA\u2BBB\u2BBC\u2BBD\u2BBE\u2BBF"+
-            "\u2BC0\u2BC1\u2BC2\u2BC3\u2BC4\u2BC5\u2BC6\u2BC7"+
-            "\u2BC8\u2BC9\u2BCA\u2BCB\u2BCC\u2BCD\u2BCE\u2BCF"+
-            "\u2BD0\u2BD1\u2BD2\u2BD3\u2BD4\u2BD5\u2BD6\u2BD7"+
-            "\u2BD8\u2BD9\u2BDA\u2BDB\u2BDC\u2BDD\u2BDE\u2BDF"+
-            "\u2BE0\u2BE1\u2BE2\u2BE3\u2BE4\u2BE5\u2BE6\u2BE7"+
-            "\u2BE8\u2BE9\u2BEA\u2BEB\u2BEC\u2BED\u2BEE\u2BEF"+
-            "\u2BF0\u2BF1\u2BF2\u2BF3\u2BF4\u2BF5\u2BF6\u2BF7"+
-            "\u2BF8\u2BF9\u2BFA\u2BFB\u2BFC\u2BFD\u2BFE\u2BFF"+
-            "\u2C00\u2C01\u2C02\u2C03\u2C04\u2C05\u2C06\u2C07"+
-            "\u2C08\u2C09\u2C0A\u2C0B\u2C0C\u2C0D\u2C0E\u2C0F"+
-            "\u2C10\u2C11\u2C12\u2C13\u2C14\u2C15\u2C16\u2C17"+
-            "\u2C18\u2C19\u2C1A\u2C1B\u2C1C\u2C1D\u2C1E\u2C1F"+
-            "\u2C20\u2C21\u2C22\u2C23\u2C24\u2C25\u2C26\u2C27"+
-            "\u2C28\u2C29\u2C2A\u2C2B\u2C2C\u2C2D\u2C2E\u2C2F"+
-            "\u2C30\u2C31\u2C32\u2C33\u2C34\u2C35\u2C36\u2C37"+
-            "\u2C38\u2C39\u2C3A\u2C3B\u2C3C\u2C3D\u2C3E\u2C3F"+
-            "\u2C40\u0000\u2C41\u2C42\u0000\u2C43\u2C44\u2C45"+
-            "\u0000\u2C46\u2C47\u0000\u0000\u2C48\u2C49\u2C4A"+
-            "\u2C4B\u2C4C\u2C4D\u2C4E\u2C4F\u2C50\u2C51\u0000"+
-            "\u2C52\u2C53\u2C54\u2C55\u2C56\u2C57\u2C58\u2C59"+
-            "\u2C5A\u2C5B\u2C5C\u2C5D\u2C5E\u2C5F\u2C60\u0000"+
-            "\u2C61\u2C62\u0000\u2C63\u2C64\u2C65\u0000\u2C66"+
-            "\u2C67\u2C68\u2C69\u0000\u2C6A\u2C6B\u0000\u0000"+
-            "\u2C6C\u2C6D\u2C6E\u0000\u2C6F\u2C70\u2C71\u2C72"+
-            "\u2C73\u2C74\u2C75\u2C76\u2C77\u2C78\u2C79\u2C7A"+
-            "\u2C7B\u2C7C\u0000\u2C7D\u2C7E\u2C7F\u2C80\u2C81"+
-            "\u2C82\u2C83\u2C84\u2C85\u2C86\u2C87\u2C88\u2C89"+
-            "\u2C8A\u2C8B\u2C8C\u2C8D\u2C8E\u2C8F\u2C90\u2C91"+
-            "\u2C92\u2C93\u2C94\u2C95\u2C96\u2C97\u2C98\u2C99"+
-            "\u2C9A\u2C9B\u2C9C\u2C9D\u2C9E\u2C9F\u2CA0\u2CA1"+
-            "\u2CA2\u2CA3\u2CA4\u2CA5\u2CA6\u2CA7\u2CA8\u2CA9"+
-            "\u2CAA\u2CAB\u2CAC\u2CAD\u2CAE\u2CAF\u2CB0\u2CB1";
-
-        private final static String innerIndex3=
-            "\u2CB2\u2CB3\u2CB4\u2CB5\u2CB6\u2CB7\u2CB8\u2CB9"+
-            "\u2CBA\u2CBB\u2CBC\u2CBD\u2CBE\u2CBF\u2CC0\u2CC1"+
-            "\u2CC2\u2CC3\u2CC4\u2CC5\u2CC6\u2CC7\u2CC8\u2CC9"+
-            "\u2CCA\u2CCB\u2CCC\u2CCD\u2CCE\u2CCF\u2CD0\u2CD1"+
-            "\u2CD2\u2CD3\u2CD4\u2CD5\u2CD6\u2CD7\u2CD8\u2CD9"+
-            "\u2CDA\u2CDB\u2CDC\u2CDD\u2CDE\u2CDF\u2CE0\u2CE1"+
-            "\u2CE2\u2CE3\u2CE4\u2CE5\u2CE6\u2CE7\u2CE8\u2CE9"+
-            "\u2CEA\u2CEB\u2CEC\u2CED\u2CEE\u2CEF\u2CF0\u2CF1"+
-            "\u2CF2\u2CF3\u2CF4\u2CF5\u2CF6\u2CF7\u2CF8\u2CF9"+
-            "\u2CFA\u2CFB\u2CFC\u2CFD\u2CFE\u2CFF\u2D00\u2D01"+
-            "\u2D02\u2D03\u2D04\u2D05\u2D06\u2D07\u2D08\u2D09"+
-            "\u2D0A\u2D0B\u2D0C\u2D0D\u2D0E\u2D0F\u2D10\u2D11"+
-            "\u2D12\u2D13\u2D14\u2D15\u2D16\u2D17\u2D18\u2D19"+
-            "\u2D1A\u2D1B\u2D1C\u2D1D\u2D1E\u2D1F\u2D20\u2D21"+
-            "\u2D22\u2D23\u2D24\u2D25\u2D26\u2D27\u2D28\u2D29"+
-            "\u2D2A\u2D2B\u2D2C\u2D2D\u2D2E\u2D2F\u2D30\u2D31"+
-            "\u2D32\u2D33\u2D34\u2D35\u2D36\u2D37\u2D38\u2D39"+
-            "\u2D3A\u2D3B\u2D3C\u2D3D\u2D3E\u2D3F\u2D40\u2D41"+
-            "\u2D42\u2D43\u2D44\u2D45\u2D46\u2D47\u2D48\u2D49"+
-            "\u2D4A\u2D4B\u2D4C\u2D4D\u2D4E\u2D4F\u2D50\u2D51"+
-            "\u2D52\u2D53\u2D54\u2D55\u2D56\u2D57\u2D58\u2D59"+
-            "\u2D5A\u2D5B\u2D5C\u2D5D\u2D5E\u2D5F\u2D60\u2D61"+
-            "\u2D62\u2D63\u2D64\u2D65\u2D66\u2D67\u2D68\u2D69"+
-            "\u2D6A\u2D6B\u2D6C\u2D6D\u2D6E\u2D6F\u2D70\u2D71"+
-            "\u2D72\u2D73\u2D74\u2D75\u2D76\u2D77\u2D78\u2D79"+
-            "\u2D7A\u2D7B\u2D7C\u2D7D\u2D7E\u2D7F\u2D80\u2D81"+
-            "\u2D82\u2D83\u2D84\u2D85\u2D86\u2D87\u2D88\u2D89"+
-            "\u2D8A\u2D8B\u2D8C\u2D8D\u2D8E\u2D8F\u2D90\u2D91"+
-            "\u2D92\u2D93\u2D94\u2D95\u2D96\u2D97\u2D98\u2D99"+
-            "\u2D9A\u2D9B\u2D9C\u2D9D\u2D9E\u2D9F\u2DA0\u2DA1"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u2DA2\u2DA3\u2DA4\u2DA5"+
-            "\u0000\u0000\u0000\u0000\u2DA6\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u2DA7\u2DA8\u2DA9\u2DAA\u2DAB\u0000\u0000\u2DAC"+
-            "\u2DAD\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u2DAE\u2DAF\u2DB0\u2DB1\u2DB2\u2DB3"+
-            "\u2DB4\u2DB5\u2DB6\u2DB7\u2DB8\u2DB9\u2DBA\u2DBB"+
-            "\u2DBC\u2DBD\u2DBE\u2DBF\u2DC0\u2DC1\u0000\u2DC2"+
-            "\u2DC3\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u2DC4\u2DC5\u2DC6\u2DC7"+
-            "\u2DC8\u2DC9\u2DCA\u0000\u0000\u0000\u0000\u2DCB"+
-            "\u2DCC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2DCD"+
-            "\u2DCE\u2DCF\u2DD0\u2DD1\u0000\u0000\u0000\u2DD2"+
-            "\u2DD3\u2DD4\u2DD5\u2DD6\u2DD7\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u2DD8\u2DD9\u2DDA\u2DDB\u2DDC\u2DDD"+
-            "\u2DDE\u2DDF\u2DE0\u2DE1\u2DE2\u2DE3\u2DE4\u2DE5"+
-            "\u2DE6\u2DE7\u2DE8\u2DE9\u2DEA\u2DEB\u2DEC\u2DED"+
-            "\u2DEE\u2DEF\u2DF0\u2DF1\u2DF2\u2DF3\u2DF4\u2DF5"+
-            "\u2DF6\u2DF7\u2DF8\u2DF9\u2DFA\u2DFB\u2DFC\u2DFD"+
-            "\u2DFE\u2DFF\u2E00\u2E01\u2E02\u2E03\u2E04\u2E05"+
-            "\u2E06\u2E07\u2E08\u2E09\u2E0A\u2E0B\u2E0C\u2E0D"+
-            "\u2E0E\u2E0F\u2E10\u2E11\u2E12\u2E13\u2E14\u2E15"+
-            "\u2E16\u2E17\u2E18\u2E19\u2E1A\u2E1B\u2E1C\u2E1D"+
-            "\u2E1E\u2E1F\u2E20\u2E21\u2E22\u2E23\u2E24\u2E25"+
-            "\u2E26\u2E27\u2E28\u2E29\u2E2A\u2E2B\u2E2C\u2E2D"+
-            "\u2E2E\u2E2F\u2E30\u2E31\u2E32\u2E33\u2E34\u2E35"+
-            "\u2E36\u2E37\u2E38\u2E39\u2E3A\u2E3B\u2E3C\u2E3D"+
-            "\u2E3E\u2E3F\u2E40\u2E41\u2E42\u2E43\u2E44\u2E45"+
-            "\u2E46\u2E47\u2E48\u2E49\u2E4A\u2E4B\u2E4C\u2E4D"+
-            "\u2E4E\u2E4F\u2E50\u2E51\u2E52\u2E53\u2E54\u2E55"+
-            "\u2E56\u2E57\u2E58\u2E59\u2E5A\u2E5B\u2E5C\u2E5D"+
-            "\u2E5E\u2E5F\u2E60\u2E61\u2E62\u2E63\u2E64\u2E65"+
-            "\u2E66\u2E67\u2E68\u2E69\u2E6A\u2E6B\u2E6C\u2E6D"+
-            "\u2E6E\u2E6F\u2E70\u2E71\u2E72\u2E73\u2E74\u2E75"+
-            "\u2E76\u2E77\u2E78\u2E79\u2E7A\u2E7B\u2E7C\u2E7D"+
-            "\u2E7E\u2E7F\u2E80\u2E81\u2E82\u2E83\u2E84\u2E85"+
-            "\u2E86\u2E87\u2E88\u2E89\u2E8A\u2E8B\u2E8C\u2E8D"+
-            "\u2E8E\u2E8F\u2E90\u2E91\u2E92\u2E93\u2E94\u2E95"+
-            "\u2E96\u2E97\u2E98\u2E99\u2E9A\u2E9B\u2E9C\u2E9D"+
-            "\u2E9E\u2E9F\u2EA0\u2EA1\u2EA2\u2EA3\u2EA4\u2EA5"+
-            "\u2EA6\u2EA7\u2EA8\u2EA9\u2EAA\u2EAB\u2EAC\u2EAD"+
-            "\u2EAE\u2EAF\u2EB0\u2EB1\u2EB2\u2EB3\u2EB4\u2EB5"+
-            "\u2EB6\u2EB7\u2EB8\u2EB9\u2EBA\u2EBB\u2EBC\u2EBD"+
-            "\u2EBE\u2EBF\u2EC0\u2EC1\u2EC2\u2EC3\u2EC4\u2EC5"+
-            "\u2EC6\u2EC7\u2EC8\u2EC9\u2ECA\u2ECB\u2ECC\u2ECD"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u2ECE\u2ECF\u2ED0\u2ED1\u2ED2\u2ED3"+
-            "\u2ED4\u0000\u2ED5\u2ED6\u2ED7\u2ED8\u2ED9\u2EDA"+
-            "\u2EDB\u2EDC\u2EDD\u2EDE\u2EDF\u2EE0\u2EE1\u2EE2"+
-            "\u2EE3\u2EE4\u2EE5\u2EE6\u2EE7\u2EE8\u2EE9\u2EEA"+
-            "\u2EEB\u2EEC\u2EED\u2EEE\u2EEF\u2EF0\u2EF1\u2EF2"+
-            "\u2EF3\u2EF4\u2EF5\u2EF6\u2EF7\u2EF8\u2EF9\u2EFA"+
-            "\u2EFB\u2EFC\u2EFD\u2EFE\u2EFF\u2F00\u2F01\u2F02"+
-            "\u2F03\u2F04\u2F05\u2F06\u2F07\u2F08\u2F09\u2F0A"+
-            "\u2F0B\u2F0C\u2F0D\u2F0E\u2F0F\u2F10\u2F11\u2F12"+
-            "\u2F13\u2F14\u2F15\u2F16\u2F17\u2F18\u2F19\u2F1A"+
-            "\u2F1B\u2F1C\u2F1D\u2F1E\u2F1F\u2F20\u2F21\u2F22"+
-            "\u2F23\u2F24\u2F25\u2F26\u2F27\u2F28\u2F29\u2F2A"+
-            "\u2F2B\u2F2C\u2F2D\u2F2E\u2F2F\u2F30\u2F31\u2F32"+
-            "\u2F33\u2F34\u2F35\u2F36\u2F37\u2F38\u2F39\u2F3A"+
-            "\u2F3B\u2F3C\u2F3D\u2F3E\u2F3F\u2F40\u2F41\u2F42"+
-            "\u2F43\u2F44\u2F45\u0000\u2F46\u2F47\u2F48\u2F49"+
-            "\u2F4A\u2F4B\u2F4C\u2F4D\u2F4E\u2F4F\u2F50\u2F51"+
-            "\u2F52\u2F53\u2F54\u2F55\u2F56\u2F57\u2F58\u2F59"+
-            "\u2F5A\u2F5B\u2F5C\u2F5D\u2F5E\u2F5F\u2F60\u2F61"+
-            "\u2F62\u2F63\u2F64\u2F65\u2F66\u2F67\u2F68\u2F69"+
-            "\u2F6A\u2F6B\u2F6C\u2F6D\u2F6E\u2F6F\u2F70\u2F71"+
-            "\u2F72\u2F73\u2F74\u2F75\u2F76\u2F77\u2F78\u2F79"+
-            "\u2F7A\u2F7B\u2F7C\u2F7D\u2F7E\u2F7F\u2F80\u2F81"+
-            "\u2F82\u2F83\u2F84\u2F85\u2F86\u2F87\u2F88\u2F89"+
-            "\u2F8A\u2F8B\u2F8C\u2F8D\u2F8E\u2F8F\u2F90\u2F91"+
-            "\u2F92\u2F93\u2F94\u2F95\u2F96\u2F97\u2F98\u2F99"+
-            "\u2F9A\u2F9B\u2F9C\u2F9D\u2F9E\u2F9F\u2FA0\u2FA1"+
-            "\u2FA2\u2FA3\u2FA4\u2FA5\u2FA6\u2FA7\u2FA8\u2FA9"+
-            "\u2FAA\u2FAB\u2FAC\u2FAD\u2FAE\u2FAF\u2FB0\u2FB1"+
-            "\u2FB2\u2FB3\u2FB4\u2FB5\u2FB6\u2FB7\u2FB8\u2FB9"+
-            "\u2FBA\u2FBB\u2FBC\u2FBD\u2FBE\u2FBF\u2FC0\u2FC1"+
-            "\u2FC2\u2FC3\u2FC4\u2FC5\u2FC6\u2FC7\u2FC8\u2FC9"+
-            "\u2FCA\u2FCB\u2FCC\u2FCD\u2FCE\u2FCF\u2FD0\u2FD1"+
-            "\u2FD2\u2FD3\u2FD4\u2FD5\u2FD6\u2FD7\u2FD8\u2FD9"+
-            "\u2FDA\u2FDB\u2FDC\u2FDD\u2FDE\u2FDF\u2FE0\u2FE1"+
-            "\u2FE2\u2FE3\u2FE4\u2FE5\u2FE6\u2FE7\u2FE8\u2FE9"+
-            "\u2FEA\u2FEB\u2FEC\u2FED\u2FEE\u2FEF\u2FF0\u2FF1"+
-            "\u2FF2\u2FF3\u2FF4\u2FF5\u2FF6\u2FF7\u2FF8\u2FF9"+
-            "\u2FFA\u2FFB\u2FFC\u2FFD\u2FFE\u2FFF\u3000\u3001"+
-            "\u3002\u3003\u3004\u3005\u3006\u3007\u3008\u3009"+
-            "\u300A\u300B\u300C\u300D\u300E\u300F\u3010\u3011"+
-            "\u3012\u3013\u3014\u3015\u3016\u3017\u3018\u3019"+
-            "\u301A\u301B\u301C\u301D\u301E\u301F\u3020\u3021"+
-            "\u3022\u3023\u3024\u3025\u3026\u3027\u3028\u3029"+
-            "\u302A\u302B\u302C\u302D\u302E\u302F\u0000\u0000"+
-            "\u3030\u3031\u3032\u3033\u3034\u3035\u3036\u3037"+
-            "\u3038\u3039\u303A\u303B\u0000\u0000\u0000\u303C"+
-            "\u303D\u0000\u303E\u303F\u3040\u3041\u3042\u3043"+
-            "\u3044\u3045\u3046\u3047\u3048\u3049\u304A\u304B"+
-            "\u304C\u304D\u304E\u304F\u3050\u3051\u3052\u3053"+
-            "\u3054\u3055\u3056\u3057\u3058\u3059\u305A\u305B"+
-            "\u305C\u305D\u305E\u305F\u0000\u3060\u3061\u3062"+
-            "\u3063\u3064\u3065\u3066\u3067\u3068\u0000\u3069"+
-            "\u306A\u0000\u0000\u306B\u306C\u0000\u306D\u306E"+
-            "\u306F\u3070\u3071\u3072\u3073\u3074\u3075\u3076"+
-            "\u3077\u3078\u3079\u307A\u307B\u307C\u307D\u307E"+
-            "\u307F\u3080\u3081\u3082\u3083\u3084\u3085\u3086"+
-            "\u3087\u3088\u3089\u308A\u308B\u308C\u308D\u308E"+
-            "\u308F\u3090\u3091\u3092\u3093\u3094\u3095\u3096"+
-            "\u3097\u3098\u3099\u309A\u309B\u309C\u309D\u309E"+
-            "\u309F\u30A0\u30A1\u30A2\u30A3\u30A4\u30A5\u30A6"+
-            "\u30A7\u30A8\u30A9\u30AA\u30AB\u30AC\u30AD\u30AE"+
-            "\u30AF\u30B0\u30B1\u30B2\u30B3\u30B4\u30B5\u30B6"+
-            "\u30B7\u30B8\u30B9\u30BA\u30BB\u30BC\u30BD\u30BE"+
-            "\u30BF\u30C0\u30C1\u30C2\u30C3\u30C4\u30C5\u30C6"+
-            "\u30C7\u30C8\u30C9\u30CA\u30CB\u30CC\u30CD\u30CE"+
-            "\u30CF\u30D0\u30D1\u30D2\u30D3\u30D4\u30D5\u30D6"+
-            "\u30D7\u30D8\u30D9\u30DA\u30DB\u30DC\u30DD\u0000"+
-            "\u30DE\u30DF\u30E0\u30E1\u30E2\u30E3\u30E4\u30E5"+
-            "\u30E6\u30E7\u30E8\u30E9\u30EA\u30EB\u30EC\u30ED"+
-            "\u30EE\u30EF\u30F0\u30F1\u30F2\u30F3\u30F4\u30F5"+
-            "\u30F6\u30F7\u30F8\u30F9\u30FA\u30FB\u30FC\u30FD"+
-            "\u30FE\u30FF\u3100\u3101\u3102\u3103\u3104\u3105"+
-            "\u3106\u3107\u3108\u0000\u3109\u310A\u310B\u310C"+
-            "\u310D\u310E\u310F\u3110\u3111\u3112\u3113\u3114"+
-            "\u3115\u3116\u3117\u3118\u3119\u311A\u311B\u311C"+
-            "\u311D\u311E\u311F\u3120\u3121\u3122\u3123\u3124"+
-            "\u3125\u3126\u3127\u3128\u3129\u312A\u312B\u312C"+
-            "\u312D\u312E\u312F\u3130\u3131\u3132\u3133\u3134"+
-            "\u3135\u3136\u3137\u3138\u3139\u313A\u313B\u313C"+
-            "\u313D\u313E\u313F\u3140\u3141\u3142\u3143\u3144"+
-            "\u3145\u3146\u3147\u3148\u3149\u314A\u314B\u314C"+
-            "\u314D\u314E\u314F\u3150\u3151\u3152\u3153\u3154"+
-            "\u3155\u3156\u3157\u3158\u3159\u315A\u315B\u315C"+
-            "\u315D\u315E\u315F\u3160\u3161\u3162\u3163\u3164"+
-            "\u3165\u3166\u3167\u3168\u3169\u316A\u316B\u316C"+
-            "\u316D\u316E\u316F\u3170\u3171\u3172\u3173\u3174"+
-            "\u3175\u3176\u3177\u3178\u3179\u317A\u317B\u317C"+
-            "\u317D\u317E\u317F\u3180\u3181\u3182\u3183\u3184"+
-            "\u3185\u3186\u3187\u3188\u3189\u318A\u318B\u318C"+
-            "\u318D\u318E\u318F\u3190\u3191\u3192\u3193\u3194"+
-            "\u3195\u3196\u3197\u3198\u3199\u319A\u319B\u319C"+
-            "\u319D\u319E\u319F\u31A0\u31A1\u31A2\u31A3\u31A4"+
-            "\u31A5\u31A6\u31A7\u31A8\u31A9\u31AA\u31AB\u31AC"+
-            "\u31AD\u31AE\u31AF\u31B0\u31B1\u31B2\u31B3\u31B4"+
-            "\u31B5\u31B6\u31B7\u31B8\u31B9\u31BA\u31BB\u31BC"+
-            "\u31BD\u31BE\u31BF\u31C0\u31C1\u31C2\u31C3\u31C4"+
-            "\u31C5\u31C6\u31C7\u31C8\u31C9\u31CA\u31CB\u31CC"+
-            "\u31CD\u31CE\u31CF\u31D0\u31D1\u31D2\u31D3\u31D4"+
-            "\u31D5\u31D6\u31D7\u31D8\u31D9\u31DA\u31DB\u31DC"+
-            "\u31DD\u31DE\u31DF\u31E0\u31E1\u31E2\u31E3\u31E4"+
-            "\u31E5\u31E6\u31E7\u31E8\u31E9\u31EA\u31EB\u31EC"+
-            "\u31ED\u31EE\u31EF\u31F0\u31F1\u31F2\u31F3\u31F4"+
-            "\u31F5\u31F6\u31F7\u31F8\u31F9\u31FA\u31FB\u31FC"+
-            "\u31FD\u31FE\u31FF\u3200\u3201\u3202\u3203\u3204"+
-            "\u3205\u3206\u3207\u3208\u3209\u320A\u320B\u320C"+
-            "\u320D\u320E\u320F\u3210\u3211\u3212\u3213\u3214"+
-            "\u3215\u3216\u3217\u3218\u3219\u321A\u321B\u321C"+
-            "\u321D\u321E\u321F\u3220\u3221\u3222\u3223\u3224"+
-            "\u3225\u3226\u3227\u3228\u3229\u322A\u322B\u322C"+
-            "\u322D\u322E\u322F\u3230\u3231\u3232\u0000\u3233"+
-            "\u3234\u3235\u3236\u3237\u3238\u3239\u323A\u323B"+
-            "\u323C\u323D\u323E\u323F\u3240\u3241\u3242\u3243"+
-            "\u3244\u3245\u3246\u3247\u3248\u3249\u324A\u324B"+
-            "\u324C\u324D\u324E\u324F\u3250\u3251\u3252\u3253"+
-            "\u3254\u3255\u3256\u3257\u3258\u3259\u325A\u325B"+
-            "\u325C\u325D\u325E\u325F\u3260\u3261\u3262\u3263"+
-            "\u3264\u3265\u3266\u3267\u3268\u3269\u326A\u326B"+
-            "\u326C\u326D\u326E\u326F\u3270\u3271\u3272\u3273"+
-            "\u3274\u3275\u3276\u3277\u3278\u3279\u327A\u327B"+
-            "\u327C\u327D\u327E\u327F\u3280\u3281\u3282\u3283"+
-            "\u3284\u3285\u3286\u3287\u3288\u3289\u328A\u328B"+
-            "\u328C\u328D\u328E\u328F\u3290\u3291\u3292\u3293"+
-            "\u3294\u3295\u3296\u3297\u3298\u3299\u329A\u329B"+
-            "\u329C\u329D\u329E\u329F\u32A0\u32A1\u0000\u32A2"+
-            "\u32A3\u32A4\u32A5\u32A6\u32A7\u32A8\u32A9\u32AA"+
-            "\u32AB\u32AC\u0000\u32AD\u32AE\u32AF\u32B0\u32B1"+
-            "\u32B2\u32B3\u32B4\u32B5\u32B6\u32B7\u32B8\u32B9"+
-            "\u32BA\u32BB\u32BC\u32BD\u32BE\u32BF\u32C0\u32C1"+
-            "\u32C2\u32C3\u32C4\u32C5\u32C6\u32C7\u32C8\u32C9"+
-            "\u32CA\u32CB\u32CC\u32CD\u32CE\u32CF\u32D0\u32D1"+
-            "\u32D2\u32D3\u32D4\u32D5\u32D6\u32D7\u32D8\u32D9"+
-            "\u32DA\u32DB\u32DC\u32DD\u32DE\u32DF\u32E0\u32E1"+
-            "\u32E2\u32E3\u32E4\u32E5\u32E6\u32E7\u32E8\u32E9"+
-            "\u32EA\u32EB\u32EC\u32ED\u32EE\u32EF\u32F0\u32F1"+
-            "\u32F2\u32F3\u32F4\u32F5\u32F6\u32F7\u32F8\u32F9"+
-            "\u32FA\u32FB\u32FC\u32FD\u32FE\u32FF\u3300\u3301"+
-            "\u3302\u3303\u3304\u3305\u3306\u3307\u3308\u3309"+
-            "\u330A\u330B\u330C\u330D\u330E\u330F\u3310\u3311"+
-            "\u3312\u3313\u3314\u3315\u3316\u3317\u3318\u3319"+
-            "\u331A\u331B\u331C\u331D\u331E\u331F\u3320\u3321"+
-            "\u3322\u3323\u3324\u3325\u3326\u3327\u3328\u3329"+
-            "\u332A\u332B\u332C\u332D\u332E\u332F\u3330\u3331"+
-            "\u3332\u3333\u3334\u3335\u3336\u3337\u3338\u3339"+
-            "\u333A\u333B\u333C\u333D\u333E\u333F\u3340\u3341"+
-            "\u3342\u3343\u3344\u3345\u3346\u3347\u3348\u3349"+
-            "\u334A\u334B\u334C\u334D\u334E\u334F\u3350\u3351"+
-            "\u3352\u3353\u3354\u3355\u3356\u3357\u3358\u3359"+
-            "\u335A\u335B\u335C\u335D\u335E\u335F\u3360\u3361"+
-            "\u3362\u3363\u3364\u3365\u3366\u3367\u3368\u3369"+
-            "\u336A\u336B\u336C\u336D\u336E\u336F\u3370\u3371"+
-            "\u3372\u3373\u3374\u3375\u3376\u3377\u3378\u3379"+
-            "\u337A\u337B\u337C\u337D\u337E\u337F\u3380\u3381"+
-            "\u3382\u3383\u3384\u3385\u3386\u3387\u3388\u3389"+
-            "\u338A\u338B\u338C\u338D\u338E\u338F\u3390\u3391"+
-            "\u3392\u3393\u3394\u3395\u3396\u3397\u3398\u3399"+
-            "\u339A\u339B\u339C\u339D\u339E\u339F\u33A0\u33A1"+
-            "\u33A2\u33A3\u33A4\u33A5\u33A6\u33A7\u33A8\u33A9"+
-            "\u33AA\u33AB\u33AC\u33AD\u33AE\u33AF\u33B0\u33B1"+
-            "\u33B2\u33B3\u33B4\u33B5\u33B6\u33B7\u33B8\u33B9"+
-            "\u33BA\u33BB\u33BC\u33BD\u33BE\u33BF\u33C0\u33C1"+
-            "\u33C2\u33C3\u33C4\u33C5\u33C6\u33C7\u33C8\u33C9"+
-            "\u33CA\u33CB\u33CC\u33CD\u33CE\u33CF\u33D0\u33D1"+
-            "\u33D2\u33D3\u33D4\u33D5\u33D6\u33D7\u33D8\u33D9"+
-            "\u33DA\u33DB\u33DC\u33DD\u33DE\u33DF\u33E0\u33E1"+
-            "\u33E2\u33E3\u33E4\u33E5\u33E6\u33E7\u33E8\u33E9"+
-            "\u33EA\u33EB\u33EC\u33ED\u33EE\u33EF\u33F0\u33F1"+
-            "\u33F2\u33F3\u33F4\u33F5\u33F6\u33F7\u33F8\u33F9"+
-            "\u33FA\u33FB\u33FC\u33FD\u33FE\u33FF\u3400\u3401"+
-            "\u3402\u3403\u3404\u3405\u3406\u3407\u3408\u3409"+
-            "\u340A\u340B\u340C\u340D\u340E\u340F\u3410\u3411"+
-            "\u3412\u3413\u3414\u3415\u3416\u3417\u3418\u3419"+
-            "\u341A\u341B\u341C\u341D\u341E\u341F\u3420\u3421"+
-            "\u3422\u3423\u3424\u3425\u3426\u3427\u3428\u3429"+
-            "\u342A\u342B\u342C\u342D\u342E\u342F\u3430\u3431"+
-            "\u3432\u3433\u3434\u3435\u3436\u3437\u3438\u3439"+
-            "\u343A\u343B\u343C\u343D\u343E\u343F\u3440\u3441"+
-            "\u3442\u3443\u3444\u3445\u3446\u3447\u3448\u3449"+
-            "\u344A\u344B\u344C\u344D\u344E\u344F\u3450\u3451"+
-            "\u3452\u3453\u3454\u3455\u3456\u3457\u3458\u3459"+
-            "\u345A\u345B\u345C\u345D\u345E\u345F\u3460\u3461"+
-            "\u3462\u3463\u3464\u3465\u3466\u3467\u3468\u3469"+
-            "\u346A\u346B\u346C\u346D\u346E\u346F\u3470\u3471"+
-            "\u3472\u3473\u3474\u3475\u3476\u3477\u3478\u3479"+
-            "\u347A\u347B\u347C\u347D\u347E\u347F\u3480\u3481"+
-            "\u3482\u3483\u3484\u3485\u3486\u3487\u3488\u3489"+
-            "\u348A\u348B\u348C\u348D\u348E\u348F\u3490\u3491"+
-            "\u3492\u3493\u3494\u3495\u3496\u3497\u3498\u3499"+
-            "\u349A\u349B\u349C\u349D\u349E\u349F\u34A0\u34A1"+
-            "\u34A2\u34A3\u34A4\u34A5\u34A6\u34A7\u34A8\u34A9"+
-            "\u34AA\u34AB\u34AC\u34AD\u34AE\u34AF\u34B0\u34B1"+
-            "\u34B2\u34B3\u34B4\u34B5\u34B6\u34B7\u34B8\u34B9"+
-            "\u34BA\u34BB\u34BC\u34BD\u34BE\u34BF\u34C0\u34C1"+
-            "\u34C2\u34C3\u34C4\u34C5\u34C6\u34C7\u34C8\u34C9"+
-            "\u34CA\u34CB\u34CC\u34CD\u34CE\u34CF\u34D0\u34D1"+
-            "\u34D2\u34D3\u34D4\u34D5\u34D6\u34D7\u34D8\u34D9"+
-            "\u34DA\u34DB\u34DC\u34DD\u34DE\u34DF\u34E0\u34E1"+
-            "\u34E2\u34E3\u34E4\u34E5\u34E6\u34E7\u34E8\u34E9"+
-            "\u34EA\u34EB\u34EC\u34ED\u34EE\u34EF\u34F0\u34F1"+
-            "\u34F2\u34F3\u34F4\u34F5\u34F6\u34F7\u34F8\u34F9"+
-            "\u34FA\u34FB\u34FC\u34FD\u34FE\u34FF\u3500\u3501"+
-            "\u3502\u3503\u3504\u3505\u3506\u3507\u3508\u3509"+
-            "\u350A\u350B\u350C\u350D\u350E\u350F\u3510\u3511"+
-            "\u3512\u3513\u3514\u3515\u3516\u3517\u3518\u3519"+
-            "\u351A\u351B\u351C\u351D\u351E\u351F\u3520\u3521"+
-            "\u3522\u3523\u3524\u3525\u3526\u3527\u3528\u3529"+
-            "\u352A\u352B\u352C\u352D\u352E\u352F\u3530\u3531"+
-            "\u3532\u3533\u3534\u3535\u3536\u3537\u3538\u3539"+
-            "\u353A\u353B\u353C\u353D\u353E\u353F\u3540\u3541"+
-            "\u3542\u3543\u3544\u3545\u3546\u3547\u3548\u3549"+
-            "\u354A\u354B\u354C\u354D\u354E\u354F\u3550\u3551"+
-            "\u3552\u3553\u3554\u3555\u3556\u3557\u3558\u3559"+
-            "\u355A\u355B\u355C\u355D\u355E\u355F\u3560\u3561"+
-            "\u3562\u3563\u3564\u3565\u3566\u3567\u3568\u3569"+
-            "\u356A\u356B\u356C\u356D\u356E\u356F\u3570\u3571"+
-            "\u3572\u3573\u3574\u3575\u3576\u3577\u3578\u3579"+
-            "\u357A\u357B\u357C\u357D\u357E\u357F\u3580\u3581"+
-            "\u3582\u3583\u3584\u3585\u3586\u3587\u3588\u3589"+
-            "\u358A\u358B\u358C\u358D\u358E\u358F\u3590\u3591"+
-            "\u3592\u3593\u3594\u3595\u3596\u3597\u3598\u3599"+
-            "\u359A\u359B\u359C\u359D\u359E\u359F\u35A0\u35A1"+
-            "\u35A2\u35A3\u35A4\u35A5\u35A6\u35A7\u35A8\u35A9"+
-            "\u0000\u35AA\u35AB\u35AC\u35AD\u35AE\u35AF\u35B0"+
-            "\u35B1\u35B2\u35B3\u35B4\u35B5\u35B6\u35B7\u35B8"+
-            "\u35B9\u35BA\u35BB\u35BC\u35BD\u35BE\u35BF\u35C0"+
-            "\u35C1\u35C2\u35C3\u35C4\u35C5\u35C6\u35C7\u35C8"+
-            "\u35C9\u35CA\u35CB\u35CC\u35CD\u35CE\u35CF\u35D0"+
-            "\u35D1\u35D2\u35D3\u35D4\u35D5\u35D6\u35D7\u35D8"+
-            "\u35D9\u35DA\u35DB\u35DC\u35DD\u35DE\u35DF\u35E0"+
-            "\u35E1\u35E2\u35E3\u35E4\u35E5\u35E6\u35E7\u35E8"+
-            "\u35E9\u35EA\u35EB\u35EC\u35ED\u35EE\u35EF\u35F0"+
-            "\u35F1\u35F2\u35F3\u35F4\u35F5\u35F6\u35F7\u35F8"+
-            "\u35F9\u35FA\u35FB\u35FC\u35FD\u35FE\u0000\u35FF"+
-            "\u3600\u3601\u3602\u3603\u3604\u3605\u3606\u3607"+
-            "\u3608\u3609\u360A\u360B\u360C\u360D\u360E\u360F"+
-            "\u3610\u3611\u3612\u3613\u3614\u3615\u3616\u3617"+
-            "\u3618\u3619\u361A\u361B\u361C\u361D\u361E\u361F"+
-            "\u3620\u3621\u3622\u3623\u3624\u3625\u3626\u3627"+
-            "\u3628\u3629\u362A\u362B\u362C\u362D\u362E\u362F"+
-            "\u3630\u3631\u3632\u3633\u3634\u3635\u3636\u3637"+
-            "\u3638\u3639\u363A\u363B\u363C\u363D\u363E\u363F"+
-            "\u3640\u3641\u3642\u3643\u3644\u3645\u3646\u3647"+
-            "\u3648\u3649\u364A\u364B\u364C\u364D\u364E\u364F"+
-            "\u3650\u3651\u3652\u3653\u3654\u3655\u3656\u3657"+
-            "\u3658\u3659\u365A\u365B\u365C\u365D\u365E\u0000"+
-            "\u0000\u365F\u3660\u3661\u3662\u3663\u3664\u3665"+
-            "\u3666\u3667\u3668\u3669\u366A\u366B\u366C\u0000"+
-            "\u366D\u366E\u366F\u3670\u3671\u3672\u3673\u3674"+
-            "\u3675\u3676\u3677\u3678\u3679\u367A\u367B\u367C"+
-            "\u367D\u367E\u367F\u3680\u3681\u3682\u3683\u3684"+
-            "\u3685\u3686\u3687\u3688\u3689\u368A\u368B\u368C"+
-            "\u368D\u368E\u368F\u3690\u3691\u3692\u3693\u3694"+
-            "\u3695\u3696\u3697\u3698\u3699\u369A\u369B\u369C"+
-            "\u369D\u369E\u369F\u36A0\u36A1\u36A2\u36A3\u36A4"+
-            "\u36A5\u36A6\u36A7\u36A8\u36A9\u36AA\u36AB\u36AC"+
-            "\u36AD\u36AE\u36AF\u36B0\u36B1\u36B2\u36B3\u36B4"+
-            "\u36B5\u36B6\u36B7\u36B8\u36B9\u36BA\u36BB\u36BC"+
-            "\u36BD\u36BE\u36BF\u36C0\u36C1\u36C2\u36C3\u36C4"+
-            "\u36C5\u36C6\u36C7\u36C8\u36C9\u36CA\u36CB\u36CC"+
-            "\u36CD\u36CE\u36CF\u36D0\u36D1\u36D2\u36D3\u36D4"+
-            "\u36D5\u36D6\u36D7\u36D8\u36D9\u36DA\u36DB\u36DC"+
-            "\u36DD\u36DE\u36DF\u36E0\u36E1\u36E2\u36E3\u36E4"+
-            "\u36E5\u36E6\u36E7\u36E8\u36E9\u36EA\u36EB\u36EC"+
-            "\u36ED\u36EE\u36EF\u36F0\u36F1\u36F2\u36F3\u36F4"+
-            "\u36F5\u36F6\u36F7\u36F8\u36F9\u36FA\u36FB\u36FC"+
-            "\u36FD\u36FE\u36FF\u0000\u3700\u3701\u3702\u3703"+
-            "\u3704\u3705\u3706\u3707\u3708\u3709\u370A\u370B"+
-            "\u370C\u370D\u370E\u370F\u3710\u3711\u3712\u3713"+
-            "\u3714\u3715\u3716\u3717\u3718\u3719\u371A\u371B"+
-            "\u371C\u371D\u371E\u371F\u3720\u3721\u3722\u3723"+
-            "\u3724\u3725\u3726\u3727\u3728\u3729\u372A\u372B"+
-            "\u372C\u372D\u372E\u372F\u3730\u3731\u3732\u3733"+
-            "\u3734\u3735\u3736\u3737\u3738\u3739\u373A\u373B"+
-            "\u373C\u373D\u373E\u373F\u3740\u3741\u3742\u3743"+
-            "\u3744\u3745\u3746\u3747\u3748\u3749\u374A\u374B"+
-            "\u374C\u374D\u374E\u374F\u3750\u3751\u3752\u3753"+
-            "\u3754\u3755\u3756\u3757\u3758\u3759\u375A\u375B"+
-            "\u375C\u375D\u375E\u375F\u3760\u3761\u3762\u3763"+
-            "\u3764\u3765\u3766\u3767\u3768\u3769\u376A\u376B"+
-            "\u376C\u376D\u376E\u376F\u3770\u3771\u3772\u3773"+
-            "\u3774\u3775\u3776\u3777\u3778\u3779\u377A\u377B"+
-            "\u377C\u377D\u377E\u377F\u3780\u3781\u3782\u3783"+
-            "\u3784\u3785\u3786\u3787\u3788\u3789\u378A\u378B"+
-            "\u378C\u378D\u378E\u378F\u3790\u3791\u3792\u3793"+
-            "\u3794\u3795\u3796\u3797\u3798\u3799\u379A\u379B"+
-            "\u379C\u379D\u379E\u379F\u37A0\u37A1\u37A2\u37A3"+
-            "\u37A4\u37A5\u37A6\u37A7\u37A8\u37A9\u37AA\u37AB"+
-            "\u37AC\u37AD\u37AE\u37AF\u37B0\u37B1\u37B2\u37B3"+
-            "\u37B4\u37B5\u37B6\u37B7\u37B8\u37B9\u37BA\u37BB"+
-            "\u37BC\u37BD\u37BE\u37BF\u37C0\u37C1\u37C2\u37C3"+
-            "\u37C4\u37C5\u37C6\u37C7\u37C8\u37C9\u37CA\u37CB"+
-            "\u37CC\u37CD\u37CE\u37CF\u37D0\u37D1\u37D2\u37D3"+
-            "\u37D4\u37D5\u37D6\u37D7\u37D8\u37D9\u0000\u37DA"+
-            "\u37DB\u37DC\u37DD\u37DE\u37DF\u37E0\u37E1\u37E2"+
-            "\u37E3\u37E4\u37E5\u37E6\u37E7\u37E8\u37E9\u37EA"+
-            "\u37EB\u37EC\u37ED\u37EE\u37EF\u37F0\u37F1\u37F2"+
-            "\u37F3\u37F4\u37F5\u37F6\u37F7\u37F8\u37F9\u37FA"+
-            "\u37FB\u37FC\u37FD\u37FE\u37FF\u3800\u3801\u3802"+
-            "\u3803\u3804\u3805\u3806\u3807\u3808\u3809\u380A"+
-            "\u380B\u380C\u380D\u380E\u380F\u3810\u3811\u3812"+
-            "\u3813\u3814\u3815\u3816\u3817\u3818\u3819\u381A"+
-            "\u381B\u381C\u381D\u381E\u381F\u3820\u3821\u3822"+
-            "\u3823\u3824\u3825\u3826\u3827\u3828\u3829\u382A"+
-            "\u382B\u382C\u382D\u382E\u382F\u3830\u3831\u3832"+
-            "\u3833\u3834\u3835\u3836\u3837\u3838\u3839\u383A"+
-            "\u383B\u383C\u383D\u383E\u383F\u3840\u3841\u3842"+
-            "\u3843\u3844\u3845\u3846\u3847\u3848\u3849\u384A"+
-            "\u384B\u384C\u384D\u384E\u384F\u3850\u3851\u3852"+
-            "\u3853\u3854\u3855\u3856\u3857\u3858\u3859\u385A"+
-            "\u385B\u385C\u385D\u385E\u385F\u3860\u3861\u3862"+
-            "\u3863\u3864\u3865\u3866\u3867\u3868\u3869\u386A"+
-            "\u386B\u386C\u386D\u386E\u386F\u3870\u3871\u3872"+
-            "\u3873\u3874\u3875\u3876\u3877\u3878\u3879\u387A"+
-            "\u387B\u387C\u387D\u387E\u387F\u3880\u3881\u3882"+
-            "\u3883\u3884\u3885\u3886\u3887\u3888\u3889\u388A"+
-            "\u388B\u388C\u388D\u388E\u388F\u3890\u3891\u3892"+
-            "\u3893\u3894\u3895\u3896\u3897\u3898\u3899\u389A"+
-            "\u389B\u389C\u389D\u389E\u389F\u38A0\u38A1\u38A2"+
-            "\u38A3\u38A4\u38A5\u38A6\u38A7\u38A8\u38A9\u38AA"+
-            "\u38AB\u38AC\u38AD\u38AE\u38AF\u38B0\u38B1\u38B2"+
-            "\u38B3\u38B4\u38B5\u38B6\u38B7\u38B8\u38B9\u38BA"+
-            "\u38BB\u38BC\u38BD\u38BE\u38BF\u38C0\u38C1\u38C2"+
-            "\u38C3\u38C4\u38C5\u38C6\u38C7\u38C8\u38C9\u38CA"+
-            "\u38CB\u38CC\u38CD\u38CE\u38CF\u38D0\u38D1\u38D2"+
-            "\u38D3\u38D4\u38D5\u38D6\u38D7\u38D8\u38D9\u38DA"+
-            "\u38DB\u38DC\u38DD\u38DE\u38DF\u38E0\u38E1\u38E2"+
-            "\u38E3\u38E4\u38E5\u38E6\u38E7\u38E8\u38E9\u38EA"+
-            "\u38EB\u38EC\u38ED\u38EE\u38EF\u38F0\u38F1\u38F2"+
-            "\u38F3\u38F4\u38F5\u38F6\u38F7\u38F8\u0000\u38F9"+
-            "\u38FA\u38FB\u38FC\u38FD\u38FE\u38FF\u3900\u3901"+
-            "\u3902\u3903\u3904\u3905\u3906\u3907\u3908\u3909"+
-            "\u390A\u390B\u390C\u390D\u390E\u390F\u3910\u3911"+
-            "\u3912\u3913\u3914\u3915\u3916\u3917\u3918\u3919"+
-            "\u391A\u391B\u391C\u391D\u391E\u391F\u3920\u3921"+
-            "\u3922\u3923\u3924\u3925\u3926\u3927\u3928\u3929"+
-            "\u392A\u392B\u392C\u392D\u392E\u392F\u3930\u3931"+
-            "\u3932\u3933\u3934\u3935\u3936\u3937\u3938\u3939"+
-            "\u393A\u393B\u393C\u393D\u393E\u393F\u3940\u3941"+
-            "\u3942\u3943\u3944\u3945\u3946\u3947\u3948\u3949"+
-            "\u394A\u394B\u394C\u394D\u394E\u394F\u3950\u3951"+
-            "\u3952\u3953\u3954\u3955\u3956\u3957\u3958\u3959"+
-            "\u395A\u395B\u395C\u395D\u395E\u395F\u3960\u3961"+
-            "\u3962\u3963\u3964\u3965\u3966\u3967\u3968\u3969"+
-            "\u0000\u396A\u396B\u396C\u396D\u396E\u396F\u3970"+
-            "\u3971\u3972\u3973\u3974\u3975\u3976\u3977\u3978"+
-            "\u3979\u397A\u397B\u397C\u397D\u397E\u397F\u3980"+
-            "\u3981\u3982\u3983\u3984\u3985\u3986\u3987\u3988"+
-            "\u3989\u398A\u398B\u398C\u398D\u398E\u398F\u3990"+
-            "\u3991\u3992\u3993\u3994\u3995\u3996\u3997\u3998"+
-            "\u3999\u399A\u399B\u399C\u399D\u399E\u399F\u39A0"+
-            "\u39A1\u39A2\u39A3\u39A4\u39A5\u39A6\u39A7\u39A8"+
-            "\u39A9\u39AA\u39AB\u39AC\u39AD\u39AE\u39AF\u39B0"+
-            "\u39B1\u39B2\u39B3\u39B4\u39B5\u39B6\u39B7\u39B8"+
-            "\u39B9\u39BA\u39BB\u39BC\u39BD\u39BE\u39BF\u39C0"+
-            "\u39C1\u39C2\u39C3\u39C4\u39C5\u39C6\u39C7\u39C8"+
-            "\u39C9\u39CA\u39CB\u39CC\u39CD\u39CE\u39CF\u39D0"+
-            "\u39D1\u39D2\u39D3\u39D4\u39D5\u39D6\u39D7\u39D8"+
-            "\u39D9\u39DA\u39DB\u39DC\u39DD\u39DE\u39DF\u39E0"+
-            "\u39E1\u39E2\u39E3\u39E4\u39E5\u39E6\u39E7\u39E8"+
-            "\u39E9\u39EA\u39EB\u39EC\u39ED\u39EE\u39EF\u39F0"+
-            "\u39F1\u39F2\u39F3\u39F4\u39F5\u39F6\u39F7\u39F8"+
-            "\u39F9\u39FA\u39FB\u39FC\u39FD\u39FE\u39FF\u3A00"+
-            "\u3A01\u3A02\u3A03\u3A04\u3A05\u3A06\u3A07\u3A08"+
-            "\u3A09\u3A0A\u3A0B\u3A0C\u3A0D\u3A0E\u3A0F\u3A10"+
-            "\u3A11\u3A12\u3A13\u3A14\u3A15\u3A16\u3A17\u3A18"+
-            "\u3A19\u3A1A\u3A1B\u3A1C\u3A1D\u3A1E\u3A1F\u3A20"+
-            "\u3A21\u3A22\u3A23\u3A24\u3A25\u3A26\u3A27\u3A28"+
-            "\u3A29\u3A2A\u3A2B\u3A2C\u3A2D\u3A2E\u3A2F\u3A30"+
-            "\u3A31\u3A32\u3A33\u3A34\u3A35\u3A36\u3A37\u3A38"+
-            "\u3A39\u3A3A\u3A3B\u3A3C\u3A3D\u3A3E\u3A3F\u3A40"+
-            "\u3A41\u3A42\u3A43\u3A44\u3A45\u3A46\u3A47\u3A48"+
-            "\u3A49\u3A4A\u3A4B\u3A4C\u3A4D\u3A4E\u3A4F\u3A50"+
-            "\u3A51\u3A52\u3A53\u3A54\u3A55\u3A56\u3A57\u3A58"+
-            "\u3A59\u3A5A\u3A5B\u3A5C\u3A5D\u3A5E\u3A5F\u3A60"+
-            "\u3A61\u3A62\u3A63\u3A64\u3A65\u3A66\u3A67\u3A68"+
-            "\u3A69\u3A6A\u3A6B\u3A6C\u3A6D\u3A6E\u3A6F\u3A70"+
-            "\u3A71\u3A72\u3A73\u3A74\u3A75\u3A76\u3A77\u3A78"+
-            "\u3A79\u3A7A\u3A7B\u3A7C\u3A7D\u3A7E\u3A7F\u3A80"+
-            "\u3A81\u3A82\u3A83\u3A84\u3A85\u3A86\u3A87\u3A88"+
-            "\u3A89\u3A8A\u3A8B\u3A8C\u3A8D\u3A8E\u3A8F\u3A90"+
-            "\u3A91\u3A92\u3A93\u3A94\u3A95\u3A96\u3A97\u3A98"+
-            "\u3A99\u3A9A\u3A9B\u3A9C\u3A9D\u3A9E\u3A9F\u3AA0"+
-            "\u3AA1\u3AA2\u3AA3\u3AA4\u3AA5\u3AA6\u3AA7\u3AA8"+
-            "\u3AA9\u3AAA\u3AAB\u3AAC\u3AAD\u3AAE\u3AAF\u3AB0"+
-            "\u3AB1\u3AB2\u3AB3\u3AB4\u3AB5\u3AB6\u3AB7\u3AB8"+
-            "\u3AB9\u3ABA\u3ABB\u3ABC\u3ABD\u3ABE\u3ABF\u3AC0"+
-            "\u3AC1\u3AC2\u3AC3\u3AC4\u3AC5\u3AC6\u3AC7\u3AC8"+
-            "\u3AC9\u3ACA\u3ACB\u3ACC\u3ACD\u3ACE\u3ACF\u3AD0"+
-            "\u3AD1\u3AD2\u3AD3\u3AD4\u3AD5\u3AD6\u3AD7\u3AD8"+
-            "\u3AD9\u3ADA\u3ADB\u3ADC\u3ADD\u3ADE\u3ADF\u3AE0"+
-            "\u3AE1\u3AE2\u3AE3\u3AE4\u3AE5\u3AE6\u3AE7\u3AE8"+
-            "\u3AE9\u3AEA\u3AEB\u3AEC\u3AED\u3AEE\u3AEF\u3AF0"+
-            "\u3AF1\u3AF2\u3AF3\u3AF4\u3AF5\u3AF6\u3AF7\u3AF8"+
-            "\u3AF9\u3AFA\u3AFB\u3AFC\u3AFD\u3AFE\u3AFF\u3B00"+
-            "\u3B01\u3B02\u3B03\u3B04\u3B05\u3B06\u3B07\u3B08"+
-            "\u3B09\u3B0A\u3B0B\u3B0C\u3B0D\u3B0E\u3B0F\u3B10"+
-            "\u3B11\u3B12\u3B13\u3B14\u3B15\u3B16\u3B17\u3B18"+
-            "\u3B19\u3B1A\u3B1B\u3B1C\u3B1D\u3B1E\u3B1F\u3B20"+
-            "\u3B21\u3B22\u3B23\u3B24\u3B25\u3B26\u3B27\u3B28"+
-            "\u3B29\u3B2A\u3B2B\u3B2C\u3B2D\u3B2E\u3B2F\u3B30"+
-            "\u3B31\u3B32\u3B33\u3B34\u3B35\u3B36\u3B37\u3B38"+
-            "\u3B39\u3B3A\u3B3B\u3B3C\u3B3D\u3B3E\u3B3F\u3B40"+
-            "\u3B41\u3B42\u3B43\u3B44\u3B45\u3B46\u3B47\u3B48"+
-            "\u3B49\u3B4A\u3B4B\u3B4C\u3B4D\u3B4E\u3B4F\u3B50"+
-            "\u3B51\u3B52\u3B53\u3B54\u3B55\u3B56\u3B57\u3B58"+
-            "\u3B59\u3B5A\u3B5B\u3B5C\u3B5D\u3B5E\u3B5F\u3B60"+
-            "\u3B61\u3B62\u3B63\u3B64\u3B65\u3B66\u3B67\u3B68"+
-            "\u3B69\u3B6A\u3B6B\u3B6C\u3B6D\u3B6E\u3B6F\u3B70"+
-            "\u3B71\u3B72\u3B73\u3B74\u3B75\u3B76\u3B77\u3B78"+
-            "\u3B79\u3B7A\u3B7B\u3B7C\u3B7D\u3B7E\u3B7F\u3B80"+
-            "\u3B81\u3B82\u3B83\u3B84\u3B85\u3B86\u3B87\u3B88";
-
-        private final static String innerIndex4=
-            "\u3B89\u3B8A\u3B8B\u3B8C\u3B8D\u3B8E\u3B8F\u3B90"+
-            "\u3B91\u3B92\u3B93\u3B94\u3B95\u3B96\u3B97\u3B98"+
-            "\u3B99\u3B9A\u3B9B\u3B9C\u3B9D\u3B9E\u3B9F\u3BA0"+
-            "\u3BA1\u3BA2\u3BA3\u3BA4\u3BA5\u3BA6\u3BA7\u3BA8"+
-            "\u3BA9\u3BAA\u3BAB\u3BAC\u3BAD\u3BAE\u3BAF\u3BB0"+
-            "\u3BB1\u3BB2\u3BB3\u3BB4\u3BB5\u3BB6\u3BB7\u3BB8"+
-            "\u3BB9\u3BBA\u3BBB\u3BBC\u3BBD\u3BBE\u3BBF\u3BC0"+
-            "\u3BC1\u3BC2\u3BC3\u3BC4\u3BC5\u3BC6\u3BC7\u3BC8"+
-            "\u3BC9\u3BCA\u3BCB\u3BCC\u3BCD\u3BCE\u3BCF\u3BD0"+
-            "\u3BD1\u3BD2\u3BD3\u3BD4\u3BD5\u3BD6\u3BD7\u3BD8"+
-            "\u3BD9\u3BDA\u3BDB\u3BDC\u3BDD\u3BDE\u3BDF\u3BE0"+
-            "\u3BE1\u3BE2\u3BE3\u3BE4\u3BE5\u3BE6\u3BE7\u3BE8"+
-            "\u3BE9\u3BEA\u3BEB\u3BEC\u3BED\u3BEE\u3BEF\u3BF0"+
-            "\u3BF1\u3BF2\u3BF3\u3BF4\u3BF5\u3BF6\u3BF7\u3BF8"+
-            "\u3BF9\u3BFA\u3BFB\u3BFC\u3BFD\u3BFE\u3BFF\u3C00"+
-            "\u3C01\u3C02\u3C03\u3C04\u3C05\u3C06\u3C07\u3C08"+
-            "\u3C09\u3C0A\u3C0B\u3C0C\u3C0D\u3C0E\u3C0F\u3C10"+
-            "\u3C11\u3C12\u3C13\u3C14\u3C15\u3C16\u3C17\u3C18"+
-            "\u3C19\u3C1A\u3C1B\u3C1C\u3C1D\u3C1E\u3C1F\u3C20"+
-            "\u3C21\u3C22\u3C23\u3C24\u3C25\u3C26\u3C27\u3C28"+
-            "\u3C29\u3C2A\u3C2B\u3C2C\u3C2D\u3C2E\u3C2F\u3C30"+
-            "\u3C31\u3C32\u3C33\u3C34\u3C35\u3C36\u3C37\u3C38"+
-            "\u3C39\u3C3A\u3C3B\u3C3C\u3C3D\u3C3E\u3C3F\u3C40"+
-            "\u3C41\u3C42\u3C43\u3C44\u3C45\u3C46\u3C47\u3C48"+
-            "\u3C49\u3C4A\u3C4B\u3C4C\u3C4D\u3C4E\u3C4F\u3C50"+
-            "\u3C51\u3C52\u3C53\u3C54\u3C55\u3C56\u3C57\u3C58"+
-            "\u3C59\u3C5A\u3C5B\u3C5C\u3C5D\u3C5E\u3C5F\u3C60"+
-            "\u3C61\u3C62\u3C63\u3C64\u3C65\u3C66\u3C67\u3C68"+
-            "\u3C69\u3C6A\u3C6B\u3C6C\u3C6D\u3C6E\u3C6F\u3C70"+
-            "\u3C71\u3C72\u3C73\u3C74\u3C75\u3C76\u3C77\u3C78"+
-            "\u3C79\u3C7A\u3C7B\u3C7C\u3C7D\u3C7E\u3C7F\u3C80"+
-            "\u3C81\u3C82\u3C83\u3C84\u3C85\u3C86\u3C87\u3C88"+
-            "\u3C89\u3C8A\u3C8B\u3C8C\u3C8D\u3C8E\u3C8F\u3C90"+
-            "\u3C91\u3C92\u3C93\u3C94\u3C95\u3C96\u3C97\u3C98"+
-            "\u3C99\u3C9A\u3C9B\u3C9C\u3C9D\u3C9E\u3C9F\u3CA0"+
-            "\u3CA1\u3CA2\u3CA3\u3CA4\u3CA5\u3CA6\u3CA7\u3CA8"+
-            "\u3CA9\u3CAA\u3CAB\u3CAC\u3CAD\u3CAE\u3CAF\u3CB0"+
-            "\u3CB1\u3CB2\u3CB3\u3CB4\u3CB5\u3CB6\u3CB7\u3CB8"+
-            "\u3CB9\u3CBA\u3CBB\u3CBC\u3CBD\u3CBE\u3CBF\u3CC0"+
-            "\u3CC1\u3CC2\u3CC3\u3CC4\u3CC5\u3CC6\u3CC7\u3CC8"+
-            "\u3CC9\u3CCA\u3CCB\u3CCC\u3CCD\u3CCE\u3CCF\u3CD0"+
-            "\u3CD1\u3CD2\u3CD3\u3CD4\u3CD5\u3CD6\u3CD7\u3CD8"+
-            "\u3CD9\u3CDA\u3CDB\u3CDC\u3CDD\u3CDE\u0000\u3CDF"+
-            "\u3CE0\u3CE1\u3CE2\u3CE3\u3CE4\u3CE5\u3CE6\u3CE7"+
-            "\u3CE8\u3CE9\u3CEA\u3CEB\u3CEC\u3CED\u3CEE\u3CEF"+
-            "\u3CF0\u3CF1\u3CF2\u3CF3\u3CF4\u3CF5\u3CF6\u3CF7"+
-            "\u3CF8\u3CF9\u3CFA\u3CFB\u3CFC\u3CFD\u3CFE\u3CFF"+
-            "\u3D00\u3D01\u3D02\u3D03\u3D04\u3D05\u3D06\u3D07"+
-            "\u3D08\u3D09\u3D0A\u3D0B\u3D0C\u3D0D\u3D0E\u3D0F"+
-            "\u3D10\u3D11\u3D12\u3D13\u3D14\u3D15\u3D16\u3D17"+
-            "\u3D18\u3D19\u3D1A\u3D1B\u3D1C\u3D1D\u3D1E\u3D1F"+
-            "\u3D20\u3D21\u3D22\u3D23\u3D24\u3D25\u3D26\u3D27"+
-            "\u3D28\u3D29\u3D2A\u3D2B\u3D2C\u3D2D\u3D2E\u3D2F"+
-            "\u3D30\u3D31\u3D32\u3D33\u3D34\u3D35\u3D36\u3D37"+
-            "\u3D38\u3D39\u3D3A\u3D3B\u3D3C\u3D3D\u3D3E\u3D3F"+
-            "\u3D40\u3D41\u3D42\u3D43\u3D44\u3D45\u3D46\u3D47"+
-            "\u3D48\u3D49\u3D4A\u3D4B\u3D4C\u3D4D\u3D4E\u3D4F"+
-            "\u3D50\u3D51\u3D52\u3D53\u3D54\u3D55\u3D56\u3D57"+
-            "\u3D58\u3D59\u3D5A\u3D5B\u3D5C\u3D5D\u3D5E\u3D5F"+
-            "\u3D60\u3D61\u3D62\u3D63\u3D64\u3D65\u3D66\u3D67"+
-            "\u3D68\u3D69\u3D6A\u3D6B\u3D6C\u3D6D\u3D6E\u3D6F"+
-            "\u3D70\u3D71\u3D72\u3D73\u3D74\u3D75\u3D76\u3D77"+
-            "\u3D78\u3D79\u3D7A\u3D7B\u3D7C\u3D7D\u3D7E\u3D7F"+
-            "\u3D80\u3D81\u3D82\u3D83\u3D84\u3D85\u3D86\u3D87"+
-            "\u3D88\u3D89\u3D8A\u3D8B\u3D8C\u3D8D\u3D8E\u3D8F"+
-            "\u3D90\u3D91\u3D92\u3D93\u3D94\u3D95\u3D96\u3D97"+
-            "\u3D98\u3D99\u3D9A\u3D9B\u3D9C\u3D9D\u3D9E\u3D9F"+
-            "\u3DA0\u3DA1\u3DA2\u3DA3\u3DA4\u3DA5\u3DA6\u3DA7"+
-            "\u3DA8\u3DA9\u3DAA\u3DAB\u3DAC\u3DAD\u3DAE\u3DAF"+
-            "\u3DB0\u3DB1\u3DB2\u3DB3\u3DB4\u3DB5\u3DB6\u3DB7"+
-            "\u3DB8\u3DB9\u3DBA\u3DBB\u3DBC\u3DBD\u3DBE\u3DBF"+
-            "\u3DC0\u3DC1\u3DC2\u3DC3\u3DC4\u3DC5\u3DC6\u3DC7"+
-            "\u3DC8\u3DC9\u3DCA\u3DCB\u3DCC\u3DCD\u3DCE\u3DCF"+
-            "\u3DD0\u3DD1\u3DD2\u3DD3\u3DD4\u3DD5\u3DD6\u3DD7"+
-            "\u3DD8\u3DD9\u3DDA\u3DDB\u3DDC\u3DDD\u3DDE\u3DDF"+
-            "\u3DE0\u3DE1\u3DE2\u3DE3\u3DE4\u3DE5\u3DE6\u0000"+
-            "\u3DE7\u3DE8\u3DE9\u3DEA\u3DEB\u3DEC\u3DED\u3DEE"+
-            "\u3DEF\u3DF0\u3DF1\u3DF2\u3DF3\u3DF4\u3DF5\u3DF6"+
-            "\u3DF7\u3DF8\u3DF9\u3DFA\u3DFB\u3DFC\u3DFD\u3DFE"+
-            "\u3DFF\u3E00\u3E01\u3E02\u3E03\u3E04\u3E05\u3E06"+
-            "\u3E07\u3E08\u3E09\u3E0A\u3E0B\u3E0C\u3E0D\u3E0E"+
-            "\u3E0F\u3E10\u3E11\u3E12\u3E13\u3E14\u3E15\u3E16"+
-            "\u3E17\u3E18\u3E19\u3E1A\u3E1B\u3E1C\u3E1D\u3E1E"+
-            "\u3E1F\u3E20\u3E21\u3E22\u3E23\u3E24\u3E25\u3E26"+
-            "\u3E27\u3E28\u3E29\u3E2A\u3E2B\u3E2C\u3E2D\u3E2E"+
-            "\u3E2F\u3E30\u3E31\u3E32\u3E33\u3E34\u3E35\u3E36"+
-            "\u3E37\u3E38\u3E39\u3E3A\u3E3B\u3E3C\u3E3D\u3E3E"+
-            "\u3E3F\u3E40\u3E41\u3E42\u3E43\u3E44\u3E45\u3E46"+
-            "\u3E47\u3E48\u3E49\u3E4A\u3E4B\u3E4C\u3E4D\u3E4E"+
-            "\u3E4F\u3E50\u3E51\u3E52\u3E53\u3E54\u3E55\u3E56"+
-            "\u3E57\u3E58\u3E59\u3E5A\u3E5B\u3E5C\u3E5D\u3E5E"+
-            "\u3E5F\u3E60\u3E61\u3E62\u3E63\u3E64\u3E65\u3E66"+
-            "\u3E67\u3E68\u3E69\u3E6A\u3E6B\u3E6C\u3E6D\u3E6E"+
-            "\u3E6F\u3E70\u3E71\u3E72\u3E73\u3E74\u3E75\u3E76"+
-            "\u3E77\u3E78\u3E79\u3E7A\u3E7B\u3E7C\u3E7D\u3E7E"+
-            "\u3E7F\u3E80\u3E81\u3E82\u3E83\u3E84\u3E85\u3E86"+
-            "\u3E87\u3E88\u3E89\u3E8A\u3E8B\u3E8C\u3E8D\u3E8E"+
-            "\u3E8F\u3E90\u3E91\u3E92\u3E93\u3E94\u3E95\u3E96"+
-            "\u3E97\u3E98\u3E99\u3E9A\u3E9B\u3E9C\u3E9D\u3E9E"+
-            "\u3E9F\u3EA0\u3EA1\u3EA2\u3EA3\u3EA4\u3EA5\u3EA6"+
-            "\u3EA7\u3EA8\u3EA9\u3EAA\u3EAB\u3EAC\u3EAD\u3EAE"+
-            "\u3EAF\u3EB0\u3EB1\u3EB2\u3EB3\u3EB4\u3EB5\u3EB6"+
-            "\u3EB7\u3EB8\u3EB9\u3EBA\u3EBB\u3EBC\u3EBD\u3EBE"+
-            "\u3EBF\u3EC0\u3EC1\u3EC2\u3EC3\u3EC4\u3EC5\u3EC6"+
-            "\u3EC7\u3EC8\u3EC9\u3ECA\u3ECB\u3ECC\u3ECD\u3ECE"+
-            "\u3ECF\u3ED0\u3ED1\u3ED2\u3ED3\u3ED4\u3ED5\u3ED6"+
-            "\u3ED7\u3ED8\u3ED9\u3EDA\u3EDB\u3EDC\u3EDD\u3EDE"+
-            "\u3EDF\u3EE0\u3EE1\u3EE2\u3EE3\u3EE4\u3EE5\u3EE6"+
-            "\u3EE7\u3EE8\u3EE9\u3EEA\u3EEB\u3EEC\u3EED\u3EEE"+
-            "\u3EEF\u3EF0\u3EF1\u3EF2\u3EF3\u3EF4\u3EF5\u3EF6"+
-            "\u3EF7\u3EF8\u3EF9\u3EFA\u3EFB\u3EFC\u3EFD\u3EFE"+
-            "\u3EFF\u3F00\u3F01\u3F02\u3F03\u3F04\u3F05\u3F06"+
-            "\u3F07\u3F08\u3F09\u3F0A\u3F0B\u3F0C\u3F0D\u3F0E"+
-            "\u3F0F\u3F10\u3F11\u3F12\u3F13\u3F14\u3F15\u3F16"+
-            "\u3F17\u3F18\u3F19\u3F1A\u3F1B\u3F1C\u3F1D\u3F1E"+
-            "\u3F1F\u3F20\u3F21\u3F22\u3F23\u3F24\u3F25\u3F26"+
-            "\u3F27\u3F28\u3F29\u3F2A\u3F2B\u3F2C\u3F2D\u3F2E"+
-            "\u3F2F\u3F30\u3F31\u3F32\u3F33\u3F34\u3F35\u3F36"+
-            "\u3F37\u3F38\u3F39\u3F3A\u3F3B\u3F3C\u3F3D\u3F3E"+
-            "\u3F3F\u3F40\u3F41\u3F42\u3F43\u3F44\u3F45\u3F46"+
-            "\u3F47\u3F48\u3F49\u3F4A\u3F4B\u3F4C\u3F4D\u3F4E"+
-            "\u3F4F\u3F50\u3F51\u3F52\u3F53\u3F54\u3F55\u3F56"+
-            "\u3F57\u3F58\u3F59\u3F5A\u3F5B\u3F5C\u3F5D\u3F5E"+
-            "\u3F5F\u3F60\u3F61\u3F62\u3F63\u3F64\u3F65\u3F66"+
-            "\u3F67\u3F68\u3F69\u3F6A\u3F6B\u3F6C\u3F6D\u3F6E"+
-            "\u3F6F\u3F70\u3F71\u3F72\u3F73\u3F74\u3F75\u3F76"+
-            "\u3F77\u3F78\u3F79\u3F7A\u3F7B\u3F7C\u3F7D\u3F7E"+
-            "\u3F7F\u3F80\u3F81\u3F82\u3F83\u3F84\u3F85\u3F86"+
-            "\u3F87\u3F88\u3F89\u3F8A\u3F8B\u3F8C\u3F8D\u3F8E"+
-            "\u3F8F\u3F90\u3F91\u3F92\u3F93\u3F94\u3F95\u3F96"+
-            "\u3F97\u3F98\u3F99\u3F9A\u3F9B\u3F9C\u3F9D\u3F9E"+
-            "\u3F9F\u3FA0\u3FA1\u3FA2\u3FA3\u3FA4\u3FA5\u3FA6"+
-            "\u3FA7\u3FA8\u3FA9\u3FAA\u3FAB\u3FAC\u3FAD\u3FAE"+
-            "\u3FAF\u3FB0\u3FB1\u3FB2\u3FB3\u3FB4\u3FB5\u3FB6"+
-            "\u3FB7\u3FB8\u3FB9\u3FBA\u3FBB\u3FBC\u3FBD\u0000"+
-            "\u3FBE\u3FBF\u3FC0\u3FC1\u3FC2\u3FC3\u3FC4\u3FC5"+
-            "\u3FC6\u3FC7\u3FC8\u3FC9\u3FCA\u3FCB\u3FCC\u3FCD"+
-            "\u3FCE\u3FCF\u3FD0\u3FD1\u3FD2\u3FD3\u3FD4\u3FD5"+
-            "\u3FD6\u3FD7\u3FD8\u3FD9\u3FDA\u3FDB\u3FDC\u3FDD"+
-            "\u3FDE\u3FDF\u3FE0\u3FE1\u3FE2\u3FE3\u3FE4\u3FE5"+
-            "\u3FE6\u3FE7\u3FE8\u3FE9\u3FEA\u3FEB\u3FEC\u3FED"+
-            "\u3FEE\u3FEF\u3FF0\u3FF1\u3FF2\u3FF3\u3FF4\u3FF5"+
-            "\u3FF6\u3FF7\u3FF8\u3FF9\u3FFA\u3FFB\u3FFC\u3FFD"+
-            "\u3FFE\u3FFF\u4000\u4001\u4002\u4003\u4004\u4005"+
-            "\u4006\u4007\u4008\u4009\u400A\u400B\u400C\u400D"+
-            "\u400E\u400F\u4010\u4011\u4012\u4013\u4014\u4015"+
-            "\u4016\u4017\u4018\u4019\u401A\u401B\u401C\u401D"+
-            "\u401E\u401F\u4020\u4021\u4022\u4023\u4024\u4025"+
-            "\u4026\u4027\u4028\u4029\u402A\u402B\u402C\u402D"+
-            "\u402E\u402F\u4030\u4031\u0000\u4032\u4033\u4034"+
-            "\u4035\u0000\u4036\u4037\u4038\u4039\u403A\u403B"+
-            "\u403C\u403D\u403E\u403F\u4040\u4041\u4042\u4043"+
-            "\u4044\u4045\u4046\u4047\u4048\u4049\u404A\u404B"+
-            "\u404C\u404D\u404E\u404F\u4050\u4051\u4052\u4053"+
-            "\u4054\u4055\u4056\u4057\u4058\u4059\u405A\u405B"+
-            "\u405C\u405D\u405E\u405F\u4060\u0000\u4061\u4062"+
-            "\u4063\u4064\u4065\u4066\u4067\u4068\u4069\u406A"+
-            "\u406B\u406C\u406D\u406E\u406F\u4070\u4071\u4072"+
-            "\u4073\u4074\u4075\u4076\u4077\u4078\u4079\u407A"+
-            "\u407B\u407C\u407D\u407E\u407F\u4080\u4081\u4082"+
-            "\u4083\u4084\u4085\u4086\u4087\u4088\u4089\u408A"+
-            "\u408B\u408C\u408D\u408E\u408F\u4090\u4091\u4092"+
-            "\u4093\u4094\u4095\u4096\u4097\u4098\u4099\u409A"+
-            "\u409B\u409C\u409D\u409E\u409F\u40A0\u40A1\u40A2"+
-            "\u40A3\u40A4\u40A5\u40A6\u40A7\u40A8\u40A9\u40AA"+
-            "\u40AB\u40AC\u40AD\u40AE\u40AF\u40B0\u40B1\u40B2"+
-            "\u40B3\u40B4\u40B5\u40B6\u40B7\u40B8\u40B9\u40BA"+
-            "\u40BB\u40BC\u40BD\u40BE\u40BF\u40C0\u40C1\u40C2"+
-            "\u40C3\u40C4\u40C5\u40C6\u40C7\u40C8\u40C9\u40CA"+
-            "\u40CB\u40CC\u40CD\u40CE\u40CF\u40D0\u40D1\u40D2"+
-            "\u40D3\u40D4\u40D5\u40D6\u40D7\u40D8\u40D9\u40DA"+
-            "\u40DB\u40DC\u40DD\u40DE\u40DF\u40E0\u40E1\u40E2"+
-            "\u40E3\u40E4\u40E5\u40E6\u40E7\u40E8\u40E9\u40EA"+
-            "\u40EB\u40EC\u40ED\u40EE\u40EF\u40F0\u40F1\u40F2"+
-            "\u40F3\u40F4\u40F5\u40F6\u40F7\u40F8\u40F9\u40FA"+
-            "\u40FB\u40FC\u40FD\u40FE\u40FF\u4100\u4101\u4102"+
-            "\u4103\u4104\u4105\u4106\u4107\u4108\u4109\u410A"+
-            "\u410B\u410C\u410D\u410E\u410F\u4110\u4111\u4112"+
-            "\u4113\u4114\u4115\u4116\u4117\u4118\u4119\u411A"+
-            "\u411B\u411C\u411D\u411E\u411F\u4120\u4121\u4122"+
-            "\u4123\u4124\u4125\u4126\u4127\u4128\u4129\u412A"+
-            "\u412B\u412C\u412D\u412E\u412F\u4130\u4131\u4132"+
-            "\u4133\u4134\u4135\u4136\u4137\u4138\u4139\u413A"+
-            "\u413B\u413C\u413D\u413E\u413F\u4140\u4141\u4142"+
-            "\u4143\u4144\u4145\u4146\u4147\u4148\u4149\u414A"+
-            "\u414B\u414C\u414D\u414E\u414F\u4150\u4151\u4152"+
-            "\u4153\u4154\u4155\u4156\u4157\u4158\u0000\u4159"+
-            "\u415A\u415B\u415C\u415D\u415E\u415F\u4160\u4161"+
-            "\u4162\u4163\u4164\u4165\u4166\u4167\u4168\u4169"+
-            "\u416A\u416B\u416C\u416D\u416E\u416F\u4170\u4171"+
-            "\u4172\u4173\u4174\u4175\u4176\u4177\u4178\u4179"+
-            "\u417A\u417B\u417C\u417D\u417E\u417F\u4180\u4181"+
-            "\u4182\u4183\u4184\u4185\u4186\u4187\u4188\u4189"+
-            "\u418A\u418B\u418C\u418D\u418E\u418F\u4190\u4191"+
-            "\u4192\u4193\u4194\u4195\u4196\u4197\u4198\u4199"+
-            "\u419A\u419B\u419C\u419D\u419E\u419F\u41A0\u41A1"+
-            "\u41A2\u41A3\u41A4\u41A5\u41A6\u41A7\u41A8\u41A9"+
-            "\u41AA\u41AB\u41AC\u41AD\u41AE\u41AF\u41B0\u41B1"+
-            "\u41B2\u41B3\u41B4\u41B5\u41B6\u41B7\u41B8\u41B9"+
-            "\u41BA\u41BB\u41BC\u41BD\u41BE\u41BF\u41C0\u41C1"+
-            "\u41C2\u41C3\u41C4\u41C5\u41C6\u41C7\u41C8\u41C9"+
-            "\u41CA\u41CB\u41CC\u41CD\u41CE\u41CF\u41D0\u41D1"+
-            "\u41D2\u41D3\u41D4\u41D5\u41D6\u41D7\u41D8\u41D9"+
-            "\u41DA\u41DB\u41DC\u41DD\u41DE\u41DF\u41E0\u41E1"+
-            "\u41E2\u41E3\u41E4\u41E5\u41E6\u41E7\u41E8\u41E9"+
-            "\u41EA\u41EB\u41EC\u41ED\u41EE\u41EF\u41F0\u41F1"+
-            "\u41F2\u41F3\u41F4\u41F5\u41F6\u41F7\u41F8\u41F9"+
-            "\u41FA\u41FB\u41FC\u41FD\u41FE\u41FF\u4200\u4201"+
-            "\u4202\u4203\u4204\u4205\u4206\u4207\u4208\u4209"+
-            "\u420A\u420B\u420C\u420D\u420E\u420F\u4210\u4211"+
-            "\u4212\u4213\u4214\u4215\u4216\u4217\u4218\u4219"+
-            "\u421A\u421B\u421C\u421D\u421E\u421F\u4220\u4221"+
-            "\u4222\u4223\u4224\u4225\u4226\u4227\u4228\u4229"+
-            "\u422A\u422B\u422C\u422D\u422E\u422F\u4230\u4231"+
-            "\u4232\u4233\u4234\u4235\u4236\u4237\u4238\u4239"+
-            "\u423A\u423B\u423C\u423D\u423E\u423F\u4240\u4241"+
-            "\u4242\u4243\u4244\u4245\u4246\u4247\u4248\u4249"+
-            "\u424A\u424B\u424C\u424D\u424E\u424F\u4250\u4251"+
-            "\u4252\u4253\u4254\u4255\u4256\u4257\u4258\u4259"+
-            "\u425A\u425B\u425C\u425D\u425E\u425F\u4260\u4261"+
-            "\u4262\u4263\u4264\u4265\u4266\u4267\u4268\u4269"+
-            "\u426A\u426B\u426C\u426D\u426E\u426F\u4270\u4271"+
-            "\u4272\u4273\u4274\u4275\u4276\u4277\u4278\u4279"+
-            "\u427A\u427B\u427C\u427D\u427E\u427F\u4280\u4281"+
-            "\u4282\u4283\u4284\u4285\u4286\u4287\u4288\u4289"+
-            "\u428A\u428B\u428C\u428D\u428E\u428F\u4290\u4291"+
-            "\u4292\u4293\u4294\u4295\u4296\u4297\u4298\u4299"+
-            "\u429A\u429B\u429C\u429D\u429E\u429F\u42A0\u42A1"+
-            "\u42A2\u42A3\u42A4\u42A5\u42A6\u42A7\u42A8\u42A9"+
-            "\u42AA\u42AB\u42AC\u42AD\u42AE\u42AF\u42B0\u42B1"+
-            "\u42B2\u42B3\u42B4\u42B5\u42B6\u42B7\u42B8\u42B9"+
-            "\u42BA\u42BB\u42BC\u42BD\u42BE\u42BF\u42C0\u42C1"+
-            "\u42C2\u42C3\u42C4\u42C5\u42C6\u42C7\u42C8\u42C9"+
-            "\u42CA\u42CB\u42CC\u42CD\u0000\u42CE\u42CF\u42D0"+
-            "\u42D1\u42D2\u42D3\u42D4\u42D5\u42D6\u42D7\u42D8"+
-            "\u42D9\u42DA\u42DB\u42DC\u42DD\u42DE\u42DF\u42E0"+
-            "\u42E1\u0000\u42E2\u42E3\u42E4\u42E5\u42E6\u42E7"+
-            "\u42E8\u42E9\u42EA\u42EB\u42EC\u42ED\u42EE\u42EF"+
-            "\u42F0\u42F1\u42F2\u42F3\u42F4\u42F5\u42F6\u42F7"+
-            "\u42F8\u42F9\u42FA\u42FB\u42FC\u42FD\u42FE\u42FF"+
-            "\u4300\u4301\u4302\u4303\u4304\u4305\u4306\u4307"+
-            "\u4308\u4309\u430A\u430B\u430C\u430D\u430E\u430F"+
-            "\u4310\u4311\u4312\u4313\u4314\u4315\u4316\u4317"+
-            "\u4318\u4319\u431A\u431B\u431C\u431D\u431E\u431F"+
-            "\u4320\u4321\u4322\u4323\u4324\u4325\u4326\u4327"+
-            "\u4328\u4329\u432A\u432B\u432C\u432D\u432E\u432F"+
-            "\u4330\u4331\u4332\u4333\u4334\u4335\u4336\u4337"+
-            "\u4338\u4339\u433A\u433B\u433C\u433D\u433E\u433F"+
-            "\u4340\u4341\u4342\u4343\u4344\u4345\u4346\u4347"+
-            "\u4348\u4349\u434A\u434B\u434C\u434D\u434E\u434F"+
-            "\u4350\u4351\u4352\u4353\u4354\u4355\u4356\u4357"+
-            "\u4358\u4359\u435A\u435B\u435C\u435D\u435E\u435F"+
-            "\u4360\u4361\u4362\u4363\u4364\u4365\u4366\u4367"+
-            "\u4368\u4369\u436A\u436B\u436C\u436D\u436E\u436F"+
-            "\u4370\u4371\u4372\u4373\u4374\u4375\u4376\u4377"+
-            "\u4378\u4379\u437A\u437B\u437C\u437D\u437E\u437F"+
-            "\u4380\u4381\u4382\u4383\u4384\u4385\u4386\u4387"+
-            "\u4388\u4389\u438A\u438B\u438C\u438D\u438E\u438F"+
-            "\u4390\u4391\u4392\u4393\u4394\u4395\u4396\u4397"+
-            "\u4398\u4399\u439A\u439B\u439C\u439D\u439E\u439F"+
-            "\u43A0\u43A1\u43A2\u0000\u43A3\u43A4\u43A5\u43A6"+
-            "\u43A7\u0000\u43A8\u43A9\u43AA\u43AB\u43AC\u43AD"+
-            "\u43AE\u43AF\u43B0\u43B1\u43B2\u43B3\u43B4\u43B5"+
-            "\u43B6\u43B7\u43B8\u43B9\u43BA\u43BB\u43BC\u43BD"+
-            "\u43BE\u43BF\u43C0\u43C1\u43C2\u43C3\u43C4\u43C5"+
-            "\u43C6\u43C7\u43C8\u43C9\u43CA\u43CB\u43CC\u43CD"+
-            "\u43CE\u43CF\u43D0\u43D1\u43D2\u43D3\u43D4\u43D5"+
-            "\u43D6\u43D7\u43D8\u43D9\u43DA\u43DB\u43DC\u43DD"+
-            "\u43DE\u43DF\u43E0\u43E1\u43E2\u43E3\u43E4\u43E5"+
-            "\u43E6\u43E7\u43E8\u43E9\u43EA\u43EB\u43EC\u43ED"+
-            "\u43EE\u43EF\u43F0\u43F1\u43F2\u43F3\u43F4\u43F5"+
-            "\u43F6\u43F7\u43F8\u43F9\u0000\u43FA\u43FB\u43FC"+
-            "\u43FD\u43FE\u43FF\u4400\u4401\u4402\u4403\u4404"+
-            "\u4405\u4406\u4407\u4408\u4409\u0000\u440A\u440B"+
-            "\u440C\u440D\u440E\u440F\u4410\u4411\u4412\u4413"+
-            "\u4414\u4415\u4416\u4417\u4418\u4419\u441A\u441B"+
-            "\u441C\u441D\u441E\u441F\u4420\u4421\u4422\u4423"+
-            "\u4424\u4425\u4426\u4427\u4428\u4429\u442A\u442B"+
-            "\u442C\u442D\u442E\u442F\u4430\u4431\u4432\u4433"+
-            "\u4434\u4435\u4436\u4437\u4438\u4439\u443A\u443B"+
-            "\u443C\u443D\u443E\u443F\u4440\u4441\u4442\u4443"+
-            "\u4444\u4445\u4446\u4447\u4448\u4449\u444A\u444B"+
-            "\u444C\u444D\u444E\u444F\u4450\u4451\u4452\u4453"+
-            "\u4454\u4455\u4456\u4457\u4458\u4459\u445A\u445B"+
-            "\u445C\u445D\u445E\u445F\u4460\u4461\u4462\u4463"+
-            "\u4464\u4465\u4466\u4467\u4468\u4469\u446A\u446B"+
-            "\u446C\u446D\u446E\u446F\u4470\u4471\u4472\u4473"+
-            "\u4474\u4475\u4476\u4477\u4478\u4479\u447A\u447B"+
-            "\u447C\u447D\u447E\u447F\u4480\u4481\u4482\u4483"+
-            "\u4484\u4485\u4486\u4487\u4488\u4489\u448A\u448B"+
-            "\u448C\u448D\u448E\u448F\u4490\u4491\u4492\u4493"+
-            "\u4494\u4495\u4496\u4497\u4498\u4499\u449A\u449B"+
-            "\u449C\u449D\u449E\u449F\u44A0\u44A1\u44A2\u44A3"+
-            "\u44A4\u44A5\u44A6\u44A7\u44A8\u44A9\u44AA\u44AB"+
-            "\u44AC\u44AD\u44AE\u44AF\u44B0\u44B1\u44B2\u44B3"+
-            "\u44B4\u44B5\u44B6\u44B7\u44B8\u44B9\u44BA\u44BB"+
-            "\u44BC\u44BD\u44BE\u44BF\u44C0\u44C1\u44C2\u44C3"+
-            "\u44C4\u44C5\u44C6\u44C7\u44C8\u44C9\u44CA\u44CB"+
-            "\u44CC\u44CD\u44CE\u44CF\u44D0\u44D1\u44D2\u44D3"+
-            "\u44D4\u44D5\u44D6\u44D7\u44D8\u44D9\u44DA\u44DB"+
-            "\u44DC\u44DD\u44DE\u44DF\u44E0\u44E1\u44E2\u44E3"+
-            "\u44E4\u44E5\u44E6\u44E7\u44E8\u44E9\u44EA\u44EB"+
-            "\u44EC\u44ED\u44EE\u44EF\u44F0\u44F1\u44F2\u44F3"+
-            "\u44F4\u44F5\u44F6\u44F7\u44F8\u44F9\u44FA\u44FB"+
-            "\u44FC\u44FD\u44FE\u44FF\u4500\u4501\u4502\u4503"+
-            "\u4504\u4505\u4506\u4507\u4508\u4509\u450A\u450B"+
-            "\u450C\u450D\u450E\u450F\u4510\u4511\u4512\u4513"+
-            "\u4514\u4515\u4516\u4517\u4518\u4519\u451A\u451B"+
-            "\u451C\u451D\u451E\u451F\u4520\u4521\u4522\u4523"+
-            "\u4524\u4525\u4526\u4527\u4528\u4529\u452A\u452B"+
-            "\u452C\u452D\u452E\u452F\u4530\u4531\u4532\u4533"+
-            "\u4534\u4535\u4536\u4537\u4538\u4539\u453A\u453B"+
-            "\u453C\u453D\u453E\u453F\u4540\u4541\u4542\u4543"+
-            "\u4544\u4545\u4546\u4547\u4548\u4549\u454A\u454B"+
-            "\u454C\u454D\u454E\u454F\u4550\u4551\u4552\u4553"+
-            "\u4554\u4555\u4556\u4557\u4558\u4559\u455A\u455B"+
-            "\u455C\u455D\u455E\u455F\u4560\u4561\u4562\u4563"+
-            "\u4564\u4565\u4566\u4567\u4568\u4569\u456A\u456B"+
-            "\u456C\u456D\u456E\u456F\u4570\u4571\u4572\u4573"+
-            "\u4574\u4575\u4576\u4577\u4578\u4579\u457A\u457B"+
-            "\u457C\u457D\u457E\u457F\u4580\u4581\u4582\u4583"+
-            "\u4584\u4585\u4586\u4587\u4588\u4589\u458A\u458B"+
-            "\u458C\u458D\u458E\u458F\u4590\u4591\u4592\u4593"+
-            "\u4594\u4595\u4596\u4597\u4598\u4599\u459A\u459B"+
-            "\u459C\u459D\u459E\u459F\u45A0\u45A1\u45A2\u45A3"+
-            "\u45A4\u45A5\u45A6\u45A7\u45A8\u45A9\u45AA\u45AB"+
-            "\u45AC\u45AD\u45AE\u45AF\u45B0\u45B1\u45B2\u45B3"+
-            "\u45B4\u45B5\u45B6\u45B7\u45B8\u45B9\u45BA\u45BB"+
-            "\u45BC\u45BD\u45BE\u45BF\u45C0\u45C1\u45C2\u0000"+
-            "\u45C3\u45C4\u45C5\u45C6\u45C7\u45C8\u45C9\u45CA"+
-            "\u45CB\u45CC\u45CD\u45CE\u45CF\u45D0\u45D1\u45D2"+
-            "\u45D3\u45D4\u45D5\u45D6\u45D7\u45D8\u45D9\u45DA"+
-            "\u45DB\u45DC\u45DD\u45DE\u45DF\u45E0\u45E1\u45E2"+
-            "\u45E3\u45E4\u45E5\u45E6\u45E7\u45E8\u45E9\u45EA"+
-            "\u45EB\u45EC\u45ED\u45EE\u45EF\u45F0\u45F1\u45F2"+
-            "\u45F3\u45F4\u0000\u45F5\u45F6\u0000\u45F7\u45F8"+
-            "\u45F9\u45FA\u0000\u0000\u45FB\u0000\u0000\u45FC"+
-            "\u45FD\u45FE\u45FF\u4600\u4601\u4602\u4603\u4604"+
-            "\u4605\u4606\u4607\u4608\u4609\u460A\u460B\u460C"+
-            "\u460D\u460E\u460F\u0000\u4610\u4611\u4612\u0000"+
-            "\u4613\u4614\u4615\u4616\u4617\u4618\u4619\u461A"+
-            "\u461B\u461C\u461D\u461E\u461F\u4620\u4621\u4622"+
-            "\u4623\u4624\u4625\u4626\u4627\u4628\u0000\u0000"+
-            "\u4629\u462A\u462B\u462C\u462D\u462E\u462F\u4630"+
-            "\u4631\u4632\u4633\u4634\u4635\u4636\u4637\u4638"+
-            "\u4639\u463A\u463B\u463C\u463D\u463E\u463F\u4640"+
-            "\u4641\u4642\u4643\u4644\u4645\u4646\u4647\u4648"+
-            "\u4649\u464A\u464B\u464C\u464D\u464E\u464F\u4650"+
-            "\u4651\u4652\u4653\u4654\u4655\u4656\u4657\u4658"+
-            "\u4659\u465A\u465B\u465C\u465D\u465E\u465F\u4660"+
-            "\u4661\u4662\u4663\u4664\u4665\u4666\u4667\u4668"+
-            "\u4669\u466A\u466B\u466C\u466D\u466E\u466F\u4670"+
-            "\u4671\u4672\u4673\u4674\u4675\u4676\u4677\u4678"+
-            "\u4679\u467A\u467B\u467C\u467D\u467E\u467F\u4680"+
-            "\u4681\u4682\u4683\u4684\u4685\u4686\u4687\u4688"+
-            "\u4689\u468A\u468B\u468C\u468D\u468E\u468F\u4690"+
-            "\u4691\u4692\u4693\u4694\u4695\u4696\u4697\u4698"+
-            "\u4699\u469A\u469B\u469C\u469D\u469E\u469F\u46A0"+
-            "\u46A1\u46A2\u46A3\u46A4\u46A5\u46A6\u46A7\u46A8"+
-            "\u46A9\u46AA\u46AB\u46AC\u46AD\u46AE\u46AF\u46B0"+
-            "\u46B1\u46B2\u46B3\u46B4\u46B5\u46B6\u46B7\u46B8"+
-            "\u46B9\u46BA\u46BB\u46BC\u46BD\u46BE\u46BF\u46C0"+
-            "\u46C1\u46C2\u46C3\u46C4\u46C5\u46C6\u46C7\u46C8"+
-            "\u46C9\u46CA\u46CB\u46CC\u46CD\u46CE\u46CF\u46D0"+
-            "\u46D1\u46D2\u46D3\u46D4\u46D5\u46D6\u46D7\u46D8"+
-            "\u46D9\u46DA\u46DB\u46DC\u46DD\u46DE\u46DF\u46E0"+
-            "\u46E1\u46E2\u46E3\u46E4\u46E5\u46E6\u46E7\u46E8"+
-            "\u46E9\u46EA\u46EB\u46EC\u46ED\u46EE\u46EF\u46F0"+
-            "\u46F1\u46F2\u46F3\u46F4\u46F5\u46F6\u46F7\u46F8"+
-            "\u46F9\u46FA\u46FB\u46FC\u46FD\u46FE\u46FF\u4700"+
-            "\u4701\u4702\u4703\u4704\u4705\u4706\u4707\u4708"+
-            "\u4709\u470A\u470B\u470C\u470D\u470E\u470F\u4710"+
-            "\u4711\u4712\u4713\u4714\u4715\u4716\u4717\u4718"+
-            "\u4719\u471A\u471B\u471C\u471D\u471E\u471F\u4720"+
-            "\u4721\u4722\u4723\u4724\u4725\u4726\u4727\u4728"+
-            "\u4729\u472A\u472B\u472C\u472D\u472E\u472F\u4730"+
-            "\u4731\u4732\u4733\u4734\u4735\u4736\u4737\u4738"+
-            "\u4739\u473A\u473B\u473C\u473D\u473E\u473F\u4740"+
-            "\u4741\u4742\u4743\u4744\u4745\u4746\u4747\u4748"+
-            "\u4749\u474A\u474B\u474C\u474D\u474E\u474F\u4750"+
-            "\u4751\u4752\u4753\u4754\u4755\u4756\u4757\u4758"+
-            "\u4759\u475A\u475B\u475C\u475D\u475E\u475F\u4760"+
-            "\u4761\u4762\u4763\u4764\u4765\u4766\u4767\u4768"+
-            "\u4769\u476A\u476B\u476C\u476D\u476E\u476F\u4770"+
-            "\u4771\u4772\u4773\u4774\u4775\u4776\u4777\u4778"+
-            "\u4779\u477A\u477B\u477C\u477D\u477E\u477F\u4780"+
-            "\u4781\u4782\u4783\u4784\u4785\u4786\u4787\u4788"+
-            "\u4789\u478A\u478B\u478C\u478D\u478E\u478F\u4790"+
-            "\u4791\u4792\u4793\u4794\u4795\u4796\u4797\u4798"+
-            "\u4799\u479A\u479B\u479C\u479D\u479E\u479F\u47A0"+
-            "\u47A1\u47A2\u47A3\u47A4\u47A5\u47A6\u47A7\u47A8"+
-            "\u47A9\u47AA\u47AB\u47AC\u47AD\u47AE\u47AF\u47B0"+
-            "\u47B1\u47B2\u47B3\u47B4\u47B5\u47B6\u47B7\u47B8"+
-            "\u47B9\u47BA\u47BB\u47BC\u47BD\u47BE\u47BF\u47C0"+
-            "\u47C1\u47C2\u47C3\u47C4\u47C5\u47C6\u47C7\u47C8"+
-            "\u47C9\u47CA\u47CB\u47CC\u47CD\u47CE\u47CF\u47D0"+
-            "\u47D1\u47D2\u47D3\u47D4\u47D5\u47D6\u47D7\u47D8"+
-            "\u47D9\u47DA\u47DB\u47DC\u47DD\u47DE\u47DF\u47E0"+
-            "\u47E1\u47E2\u47E3\u47E4\u47E5\u47E6\u47E7\u47E8"+
-            "\u47E9\u47EA\u47EB\u47EC\u47ED\u47EE\u47EF\u47F0"+
-            "\u47F1\u47F2\u47F3\u47F4\u47F5\u47F6\u47F7\u47F8"+
-            "\u47F9\u47FA\u47FB\u47FC\u47FD\u47FE\u47FF\u4800"+
-            "\u4801\u4802\u4803\u4804\u4805\u4806\u4807\u4808"+
-            "\u4809\u480A\u480B\u480C\u480D\u480E\u480F\u4810"+
-            "\u4811\u4812\u4813\u4814\u4815\u4816\u4817\u4818"+
-            "\u4819\u481A\u481B\u481C\u481D\u481E\u481F\u4820"+
-            "\u4821\u4822\u4823\u4824\u4825\u4826\u4827\u4828"+
-            "\u4829\u482A\u482B\u482C\u482D\u482E\u482F\u4830"+
-            "\u4831\u4832\u4833\u4834\u4835\u4836\u4837\u4838"+
-            "\u4839\u483A\u483B\u483C\u483D\u483E\u483F\u4840"+
-            "\u4841\u4842\u4843\u4844\u4845\u4846\u4847\u4848"+
-            "\u4849\u484A\u484B\u484C\u484D\u484E\u484F\u4850"+
-            "\u4851\u4852\u4853\u4854\u4855\u4856\u4857\u4858"+
-            "\u4859\u485A\u485B\u485C\u485D\u485E\u485F\u4860"+
-            "\u4861\u4862\u4863\u4864\u4865\u4866\u4867\u4868"+
-            "\u4869\u486A\u486B\u486C\u486D\u486E\u486F\u4870"+
-            "\u4871\u4872\u4873\u4874\u4875\u4876\u4877\u4878"+
-            "\u4879\u487A\u487B\u487C\u487D\u487E\u487F\u4880"+
-            "\u4881\u4882\u4883\u4884\u4885\u4886\u4887\u4888"+
-            "\u4889\u488A\u488B\u488C\u488D\u488E\u488F\u4890"+
-            "\u4891\u4892\u4893\u4894\u4895\u4896\u4897\u4898"+
-            "\u4899\u489A\u489B\u489C\u489D\u489E\u489F\u48A0"+
-            "\u48A1\u48A2\u48A3\u48A4\u48A5\u48A6\u48A7\u48A8"+
-            "\u48A9\u48AA\u48AB\u48AC\u48AD\u48AE\u48AF\u48B0"+
-            "\u48B1\u48B2\u48B3\u48B4\u48B5\u48B6\u48B7\u48B8"+
-            "\u48B9\u48BA\u48BB\u48BC\u48BD\u48BE\u48BF\u48C0"+
-            "\u48C1\u48C2\u48C3\u48C4\u48C5\u48C6\u48C7\u48C8"+
-            "\u48C9\u48CA\u48CB\u48CC\u48CD\u48CE\u48CF\u48D0"+
-            "\u48D1\u48D2\u48D3\u48D4\u48D5\u48D6\u48D7\u48D8"+
-            "\u48D9\u48DA\u48DB\u48DC\u48DD\u48DE\u48DF\u48E0"+
-            "\u48E1\u48E2\u48E3\u48E4\u48E5\u48E6\u48E7\u0000"+
-            "\u48E8\u48E9\u48EA\u48EB\u48EC\u48ED\u48EE\u48EF"+
-            "\u48F0\u48F1\u48F2\u48F3\u48F4\u48F5\u48F6\u48F7"+
-            "\u48F8\u48F9\u48FA\u48FB\u48FC\u48FD\u48FE\u48FF"+
-            "\u4900\u4901\u4902\u4903\u4904\u4905\u4906\u4907"+
-            "\u4908\u4909\u490A\u490B\u490C\u490D\u490E\u0000"+
-            "\u0000\u0000\u0000\u0000\u490F\u4910\u4911\u4912"+
-            "\u4913\u4914\u4915\u4916\u4917\u4918\u4919\u491A"+
-            "\u491B\u491C\u491D\u491E\u491F\u4920\u4921\u4922"+
-            "\u4923\u4924\u4925\u4926\u4927\u4928\u4929\u492A"+
-            "\u492B\u492C\u492D\u492E\u492F\u4930\u4931\u4932"+
-            "\u4933\u4934\u4935\u4936\u4937\u4938\u4939\u493A"+
-            "\u493B\u493C\u493D\u493E\u493F\u4940\u4941\u4942"+
-            "\u4943\u4944\u4945\u4946\u4947\u4948\u4949\u494A"+
-            "\u494B\u494C\u494D\u494E\u494F\u4950\u4951\u4952"+
-            "\u4953\u4954\u4955\u4956\u4957\u4958\u4959\u495A"+
-            "\u495B\u495C\u495D\u495E\u495F\u4960\u4961\u4962"+
-            "\u4963\u4964\u4965\u4966\u4967\u4968\u4969\u496A"+
-            "\u496B\u496C\u496D\u496E\u496F\u4970\u4971\u4972"+
-            "\u4973\u4974\u4975\u4976\u4977\u4978\u4979\u497A"+
-            "\u497B\u497C\u497D\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u497E\u497F\u4980\u4981\u4982\u4983"+
-            "\u4984\u4985\u4986\u4987\u4988\u4989\u498A\u498B"+
-            "\u498C\u498D\u498E\u498F\u4990\u4991\u4992\u4993"+
-            "\u4994\u4995\u4996\u4997\u4998\u4999\u499A\u499B"+
-            "\u499C\u499D\u499E\u499F\u49A0\u49A1\u49A2\u49A3"+
-            "\u49A4\u49A5\u49A6\u49A7\u49A8\u49A9\u49AA\u49AB"+
-            "\u49AC\u49AD\u49AE\u49AF\u49B0\u49B1\u49B2\u49B3"+
-            "\u49B4\u49B5\u49B6\u49B7\u49B8\u49B9\u49BA\u49BB"+
-            "\u49BC\u49BD\u49BE\u49BF\u49C0\u49C1\u49C2\u49C3"+
-            "\u49C4\u49C5\u49C6\u49C7\u49C8\u49C9\u49CA\u49CB"+
-            "\u49CC\u49CD\u49CE\u49CF\u49D0\u49D1\u49D2\u49D3"+
-            "\u49D4\u49D5\u49D6\u49D7\u49D8\u49D9\u49DA\u49DB"+
-            "\u49DC\u49DD\u49DE\u49DF\u49E0\u49E1\u49E2\u49E3"+
-            "\u49E4\u49E5\u49E6\u49E7\u49E8\u49E9\u49EA\u49EB"+
-            "\u49EC\u49ED\u49EE\u49EF\u49F0\u49F1\u49F2\u49F3"+
-            "\u49F4\u49F5\u49F6\u49F7\u49F8\u49F9\u49FA\u49FB"+
-            "\u49FC\u49FD\u49FE\u49FF\u4A00\u4A01\u4A02\u4A03"+
-            "\u4A04\u4A05\u4A06\u4A07\u4A08\u4A09\u4A0A\u4A0B"+
-            "\u4A0C\u4A0D\u4A0E\u4A0F\u4A10\u4A11\u0000\u4A12"+
-            "\u4A13\u4A14\u4A15\u4A16\u4A17\u4A18\u4A19\u4A1A"+
-            "\u4A1B\u4A1C\u4A1D\u4A1E\u4A1F\u4A20\u4A21\u4A22"+
-            "\u4A23\u4A24\u4A25\u4A26\u4A27\u4A28\u4A29\u4A2A"+
-            "\u4A2B\u4A2C\u4A2D\u4A2E\u4A2F\u4A30\u4A31\u4A32"+
-            "\u4A33\u4A34\u4A35\u4A36\u4A37\u4A38\u4A39\u4A3A"+
-            "\u4A3B\u4A3C\u4A3D\u4A3E\u4A3F\u4A40\u4A41\u4A42"+
-            "\u4A43\u4A44\u4A45\u4A46\u4A47\u4A48\u4A49\u4A4A"+
-            "\u4A4B\u4A4C\u4A4D\u4A4E\u4A4F\u4A50\u4A51\u4A52"+
-            "\u4A53\u4A54\u4A55\u4A56\u4A57\u4A58\u4A59\u4A5A"+
-            "\u4A5B\u4A5C\u4A5D\u4A5E\u4A5F\u4A60\u4A61\u4A62"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u4A63\u4A64"+
-            "\u4A65\u4A66\u4A67\u4A68\u4A69\u4A6A\u4A6B\u4A6C"+
-            "\u4A6D\u4A6E\u4A6F\u4A70\u4A71\u4A72\u4A73\u4A74"+
-            "\u4A75\u4A76\u4A77\u4A78\u4A79\u4A7A\u4A7B\u4A7C"+
-            "\u4A7D\u4A7E\u4A7F\u4A80\u4A81\u4A82\u4A83\u4A84"+
-            "\u4A85\u4A86\u4A87\u4A88\u4A89\u4A8A\u4A8B\u4A8C"+
-            "\u4A8D\u4A8E\u4A8F\u4A90\u4A91\u4A92\u4A93\u4A94"+
-            "\u4A95\u4A96\u4A97\u4A98\u4A99\u4A9A\u4A9B\u4A9C"+
-            "\u4A9D\u4A9E\u4A9F\u4AA0\u4AA1\u4AA2\u4AA3\u4AA4"+
-            "\u4AA5\u4AA6\u4AA7\u4AA8\u4AA9\u4AAA\u4AAB\u4AAC"+
-            "\u4AAD\u4AAE\u4AAF\u4AB0\u4AB1\u4AB2\u4AB3\u4AB4"+
-            "\u4AB5\u4AB6\u4AB7\u4AB8\u4AB9\u4ABA\u4ABB\u4ABC";
-
-        private final static String innerIndex5=
-            "\u4ABD\u4ABE\u4ABF\u4AC0\u4AC1\u4AC2\u4AC3\u4AC4"+
-            "\u4AC5\u4AC6\u4AC7\u4AC8\u4AC9\u4ACA\u4ACB\u4ACC"+
-            "\u4ACD\u4ACE\u4ACF\u4AD0\u4AD1\u4AD2\u4AD3\u4AD4"+
-            "\u4AD5\u4AD6\u4AD7\u4AD8\u4AD9\u4ADA\u4ADB\u4ADC"+
-            "\u4ADD\u4ADE\u4ADF\u4AE0\u4AE1\u4AE2\u4AE3\u4AE4"+
-            "\u4AE5\u4AE6\u4AE7\u4AE8\u4AE9\u4AEA\u4AEB\u4AEC"+
-            "\u4AED\u4AEE\u4AEF\u4AF0\u4AF1\u4AF2\u4AF3\u4AF4"+
-            "\u4AF5\u4AF6\u4AF7\u4AF8\u4AF9\u4AFA\u4AFB\u4AFC"+
-            "\u4AFD\u4AFE\u4AFF\u4B00\u4B01\u4B02\u4B03\u4B04"+
-            "\u4B05\u4B06\u4B07\u4B08\u4B09\u4B0A\u4B0B\u4B0C"+
-            "\u4B0D\u4B0E\u4B0F\u4B10\u4B11\u4B12\u4B13\u4B14"+
-            "\u4B15\u4B16\u4B17\u4B18\u4B19\u4B1A\u4B1B\u4B1C"+
-            "\u4B1D\u4B1E\u4B1F\u4B20\u4B21\u4B22\u4B23\u4B24"+
-            "\u4B25\u4B26\u4B27\u4B28\u4B29\u4B2A\u4B2B\u4B2C"+
-            "\u4B2D\u4B2E\u4B2F\u4B30\u4B31\u4B32\u4B33\u4B34"+
-            "\u4B35\u4B36\u4B37\u4B38\u4B39\u4B3A\u4B3B\u4B3C"+
-            "\u4B3D\u4B3E\u4B3F\u4B40\u4B41\u4B42\u4B43\u4B44"+
-            "\u4B45\u4B46\u4B47\u4B48\u4B49\u4B4A\u4B4B\u4B4C"+
-            "\u4B4D\u4B4E\u4B4F\u4B50\u4B51\u4B52\u4B53\u4B54"+
-            "\u4B55\u4B56\u4B57\u4B58\u4B59\u4B5A\u4B5B\u4B5C"+
-            "\u4B5D\u4B5E\u4B5F\u4B60\u4B61\u4B62\u4B63\u4B64"+
-            "\u4B65\u4B66\u4B67\u4B68\u4B69\u4B6A\u4B6B\u4B6C"+
-            "\u4B6D\u4B6E\u4B6F\u4B70\u4B71\u4B72\u4B73\u4B74"+
-            "\u4B75\u4B76\u4B77\u4B78\u4B79\u4B7A\u4B7B\u4B7C"+
-            "\u4B7D\u4B7E\u4B7F\u4B80\u4B81\u4B82\u4B83\u4B84"+
-            "\u4B85\u4B86\u4B87\u4B88\u4B89\u4B8A\u4B8B\u4B8C"+
-            "\u4B8D\u4B8E\u4B8F\u4B90\u4B91\u4B92\u4B93\u4B94"+
-            "\u4B95\u4B96\u4B97\u4B98\u4B99\u4B9A\u4B9B\u4B9C"+
-            "\u4B9D\u4B9E\u4B9F\u4BA0\u4BA1\u4BA2\u4BA3\u4BA4"+
-            "\u4BA5\u4BA6\u4BA7\u4BA8\u4BA9\u4BAA\u4BAB\u4BAC"+
-            "\u4BAD\u4BAE\u4BAF\u4BB0\u4BB1\u4BB2\u4BB3\u4BB4"+
-            "\u4BB5\u4BB6\u4BB7\u4BB8\u4BB9\u4BBA\u4BBB\u4BBC"+
-            "\u4BBD\u4BBE\u4BBF\u4BC0\u4BC1\u4BC2\u4BC3\u4BC4"+
-            "\u4BC5\u4BC6\u4BC7\u4BC8\u4BC9\u4BCA\u4BCB\u4BCC"+
-            "\u4BCD\u4BCE\u4BCF\u4BD0\u4BD1\u4BD2\u4BD3\u4BD4"+
-            "\u4BD5\u4BD6\u4BD7\u4BD8\u4BD9\u4BDA\u4BDB\u4BDC"+
-            "\u4BDD\u4BDE\u4BDF\u4BE0\u4BE1\u4BE2\u4BE3\u4BE4"+
-            "\u4BE5\u4BE6\u4BE7\u4BE8\u4BE9\u4BEA\u4BEB\u4BEC"+
-            "\u4BED\u4BEE\u4BEF\u4BF0\u4BF1\u4BF2\u4BF3\u4BF4"+
-            "\u4BF5\u4BF6\u4BF7\u4BF8\u4BF9\u4BFA\u4BFB\u4BFC"+
-            "\u4BFD\u4BFE\u4BFF\u4C00\u4C01\u4C02\u4C03\u4C04"+
-            "\u4C05\u4C06\u4C07\u4C08\u4C09\u4C0A\u4C0B\u4C0C"+
-            "\u4C0D\u4C0E\u4C0F\u4C10\u4C11\u4C12\u4C13\u4C14"+
-            "\u4C15\u4C16\u4C17\u4C18\u4C19\u4C1A\u4C1B\u4C1C"+
-            "\u4C1D\u4C1E\u4C1F\u4C20\u4C21\u4C22\u4C23\u4C24"+
-            "\u4C25\u4C26\u4C27\u4C28\u4C29\u4C2A\u4C2B\u4C2C"+
-            "\u4C2D\u4C2E\u4C2F\u4C30\u4C31\u4C32\u4C33\u4C34"+
-            "\u4C35\u4C36\u4C37\u4C38\u4C39\u4C3A\u4C3B\u4C3C"+
-            "\u4C3D\u4C3E\u4C3F\u4C40\u4C41\u4C42\u4C43\u4C44"+
-            "\u4C45\u4C46\u4C47\u4C48\u4C49\u4C4A\u4C4B\u4C4C"+
-            "\u4C4D\u4C4E\u4C4F\u4C50\u4C51\u4C52\u4C53\u4C54"+
-            "\u4C55\u4C56\u4C57\u4C58\u4C59\u4C5A\u4C5B\u4C5C"+
-            "\u4C5D\u4C5E\u4C5F\u4C60\u4C61\u4C62\u4C63\u4C64"+
-            "\u4C65\u4C66\u4C67\u4C68\u4C69\u4C6A\u4C6B\u4C6C"+
-            "\u4C6D\u4C6E\u4C6F\u4C70\u4C71\u4C72\u4C73\u4C74"+
-            "\u4C75\u4C76\u4C77\u4C78\u4C79\u4C7A\u4C7B\u4C7C"+
-            "\u4C7D\u4C7E\u4C7F\u4C80\u4C81\u4C82\u4C83\u4C84"+
-            "\u4C85\u4C86\u4C87\u4C88\u4C89\u4C8A\u4C8B\u4C8C"+
-            "\u4C8D\u4C8E\u4C8F\u4C90\u4C91\u4C92\u4C93\u4C94"+
-            "\u4C95\u4C96\u4C97\u4C98\u4C99\u4C9A\u4C9B\u4C9C"+
-            "\u4C9D\u4C9E\u4C9F\u4CA0\u4CA1\u4CA2\u4CA3\u4CA4"+
-            "\u4CA5\u4CA6\u4CA7\u4CA8\u4CA9\u4CAA\u4CAB\u4CAC"+
-            "\u4CAD\u4CAE\u4CAF\u4CB0\u4CB1\u4CB2\u4CB3\u4CB4"+
-            "\u4CB5\u4CB6\u4CB7\u4CB8\u4CB9\u4CBA\u4CBB\u4CBC"+
-            "\u4CBD\u4CBE\u4CBF\u4CC0\u4CC1\u4CC2\u4CC3\u4CC4"+
-            "\u4CC5\u4CC6\u4CC7\u4CC8\u4CC9\u4CCA\u4CCB\u4CCC"+
-            "\u4CCD\u4CCE\u4CCF\u4CD0\u4CD1\u4CD2\u4CD3\u4CD4"+
-            "\u4CD5\u4CD6\u4CD7\u4CD8\u4CD9\u4CDA\u4CDB\u4CDC"+
-            "\u4CDD\u4CDE\u4CDF\u4CE0\u4CE1\u4CE2\u4CE3\u4CE4"+
-            "\u4CE5\u4CE6\u4CE7\u4CE8\u4CE9\u4CEA\u4CEB\u4CEC"+
-            "\u4CED\u4CEE\u4CEF\u4CF0\u4CF1\u4CF2\u4CF3\u4CF4"+
-            "\u4CF5\u4CF6\u4CF7\u4CF8\u4CF9\u4CFA\u4CFB\u4CFC"+
-            "\u4CFD\u4CFE\u4CFF\u4D00\u4D01\u4D02\u4D03\u4D04"+
-            "\u4D05\u4D06\u4D07\u4D08\u4D09\u4D0A\u4D0B\u4D0C"+
-            "\u4D0D\u4D0E\u4D0F\u4D10\u4D11\u4D12\u4D13\u4D14"+
-            "\u4D15\u4D16\u4D17\u4D18\u4D19\u4D1A\u4D1B\u4D1C"+
-            "\u4D1D\u4D1E\u4D1F\u4D20\u4D21\u4D22\u4D23\u4D24"+
-            "\u4D25\u4D26\u4D27\u4D28\u4D29\u4D2A\u4D2B\u4D2C"+
-            "\u4D2D\u4D2E\u4D2F\u4D30\u4D31\u4D32\u4D33\u4D34"+
-            "\u4D35\u4D36\u4D37\u4D38\u4D39\u4D3A\u4D3B\u4D3C"+
-            "\u4D3D\u4D3E\u4D3F\u4D40\u4D41\u4D42\u4D43\u4D44"+
-            "\u4D45\u4D46\u4D47\u4D48\u4D49\u4D4A\u4D4B\u4D4C"+
-            "\u4D4D\u4D4E\u4D4F\u4D50\u4D51\u4D52\u4D53\u4D54"+
-            "\u4D55\u4D56\u4D57\u4D58\u4D59\u4D5A\u4D5B\u4D5C"+
-            "\u4D5D\u4D5E\u4D5F\u4D60\u4D61\u4D62\u4D63\u4D64"+
-            "\u4D65\u4D66\u4D67\u4D68\u4D69\u4D6A\u4D6B\u4D6C"+
-            "\u4D6D\u4D6E\u4D6F\u4D70\u4D71\u4D72\u4D73\u4D74"+
-            "\u4D75\u4D76\u4D77\u4D78\u4D79\u4D7A\u4D7B\u4D7C"+
-            "\u4D7D\u4D7E\u4D7F\u4D80\u4D81\u4D82\u4D83\u4D84"+
-            "\u4D85\u4D86\u4D87\u4D88\u4D89\u4D8A\u4D8B\u4D8C"+
-            "\u4D8D\u4D8E\u4D8F\u4D90\u4D91\u4D92\u4D93\u4D94"+
-            "\u4D95\u4D96\u4D97\u4D98\u4D99\u4D9A\u4D9B\u4D9C"+
-            "\u4D9D\u4D9E\u4D9F\u4DA0\u4DA1\u4DA2\u4DA3\u4DA4"+
-            "\u4DA5\u4DA6\u4DA7\u4DA8\u4DA9\u4DAA\u4DAB\u4DAC"+
-            "\u4DAD\u4DAE\u4DAF\u4DB0\u4DB1\u4DB2\u4DB3\u4DB4"+
-            "\u4DB5\u4DB6\u4DB7\u4DB8\u4DB9\u4DBA\u4DBB\u4DBC"+
-            "\u4DBD\u4DBE\u4DBF\u4DC0\u4DC1\u4DC2\u4DC3\u4DC4"+
-            "\u4DC5\u4DC6\u4DC7\u4DC8\u4DC9\u4DCA\u4DCB\u4DCC"+
-            "\u4DCD\u4DCE\u4DCF\u4DD0\u4DD1\u4DD2\u4DD3\u4DD4"+
-            "\u4DD5\u4DD6\u4DD7\u4DD8\u4DD9\u4DDA\u4DDB\u4DDC"+
-            "\u4DDD\u4DDE\u4DDF\u4DE0\u4DE1\u4DE2\u4DE3\u4DE4"+
-            "\u4DE5\u4DE6\u4DE7\u4DE8\u4DE9\u4DEA\u4DEB\u4DEC"+
-            "\u4DED\u4DEE\u4DEF\u4DF0\u4DF1\u4DF2\u4DF3\u4DF4"+
-            "\u4DF5\u4DF6\u4DF7\u4DF8\u4DF9\u4DFA\u4DFB\u4DFC"+
-            "\u4DFD\u4DFE\u4DFF\u4E00\u4E01\u4E02\u4E03\u4E04"+
-            "\u4E05\u4E06\u4E07\u4E08\u4E09\u4E0A\u4E0B\u4E0C"+
-            "\u4E0D\u4E0E\u4E0F\u4E10\u4E11\u4E12\u4E13\u4E14"+
-            "\u4E15\u4E16\u4E17\u4E18\u4E19\u4E1A\u4E1B\u4E1C"+
-            "\u4E1D\u4E1E\u4E1F\u4E20\u4E21\u4E22\u4E23\u4E24"+
-            "\u4E25\u4E26\u4E27\u4E28\u4E29\u4E2A\u4E2B\u4E2C"+
-            "\u4E2D\u4E2E\u4E2F\u4E30\u4E31\u4E32\u4E33\u4E34"+
-            "\u4E35\u4E36\u4E37\u4E38\u4E39\u4E3A\u4E3B\u4E3C"+
-            "\u4E3D\u4E3E\u4E3F\u4E40\u4E41\u4E42\u4E43\u4E44"+
-            "\u4E45\u4E46\u4E47\u4E48\u4E49\u4E4A\u4E4B\u4E4C"+
-            "\u4E4D\u4E4E\u4E4F\u4E50\u4E51\u4E52\u4E53\u4E54"+
-            "\u4E55\u4E56\u4E57\u4E58\u4E59\u4E5A\u4E5B\u4E5C"+
-            "\u4E5D\u4E5E\u4E5F\u4E60\u4E61\u4E62\u4E63\u4E64"+
-            "\u4E65\u4E66\u4E67\u4E68\u4E69\u4E6A\u4E6B\u4E6C"+
-            "\u4E6D\u4E6E\u4E6F\u4E70\u4E71\u4E72\u4E73\u4E74"+
-            "\u4E75\u4E76\u4E77\u4E78\u4E79\u4E7A\u4E7B\u4E7C"+
-            "\u4E7D\u4E7E\u4E7F\u4E80\u4E81\u4E82\u4E83\u4E84"+
-            "\u4E85\u4E86\u4E87\u4E88\u4E89\u4E8A\u4E8B\u4E8C"+
-            "\u4E8D\u4E8E\u4E8F\u4E90\u4E91\u4E92\u4E93\u4E94"+
-            "\u4E95\u4E96\u4E97\u4E98\u4E99\u4E9A\u4E9B\u4E9C"+
-            "\u4E9D\u4E9E\u4E9F\u4EA0\u4EA1\u4EA2\u4EA3\u4EA4"+
-            "\u4EA5\u4EA6\u4EA7\u4EA8\u4EA9\u4EAA\u4EAB\u4EAC"+
-            "\u4EAD\u4EAE\u4EAF\u4EB0\u4EB1\u4EB2\u4EB3\u4EB4"+
-            "\u4EB5\u4EB6\u4EB7\u4EB8\u4EB9\u4EBA\u4EBB\u4EBC"+
-            "\u4EBD\u4EBE\u4EBF\u4EC0\u4EC1\u4EC2\u4EC3\u4EC4"+
-            "\u4EC5\u4EC6\u4EC7\u4EC8\u4EC9\u4ECA\u4ECB\u4ECC"+
-            "\u4ECD\u4ECE\u4ECF\u4ED0\u4ED1\u4ED2\u4ED3\u4ED4"+
-            "\u4ED5\u4ED6\u4ED7\u4ED8\u4ED9\u4EDA\u4EDB\u4EDC"+
-            "\u4EDD\u4EDE\u4EDF\u4EE0\u4EE1\u4EE2\u4EE3\u4EE4"+
-            "\u4EE5\u4EE6\u4EE7\u4EE8\u4EE9\u4EEA\u4EEB\u4EEC"+
-            "\u4EED\u4EEE\u4EEF\u4EF0\u4EF1\u4EF2\u4EF3\u4EF4"+
-            "\u4EF5\u4EF6\u4EF7\u4EF8\u4EF9\u4EFA\u4EFB\u4EFC"+
-            "\u4EFD\u4EFE\u4EFF\u4F00\u4F01\u4F02\u4F03\u4F04"+
-            "\u4F05\u4F06\u4F07\u4F08\u4F09\u4F0A\u4F0B\u4F0C"+
-            "\u4F0D\u4F0E\u4F0F\u4F10\u4F11\u4F12\u4F13\u4F14"+
-            "\u4F15\u4F16\u4F17\u4F18\u4F19\u4F1A\u4F1B\u4F1C"+
-            "\u4F1D\u4F1E\u4F1F\u4F20\u4F21\u4F22\u4F23\u4F24"+
-            "\u4F25\u4F26\u4F27\u4F28\u4F29\u4F2A\u4F2B\u4F2C"+
-            "\u4F2D\u4F2E\u4F2F\u4F30\u4F31\u4F32\u4F33\u4F34"+
-            "\u4F35\u4F36\u4F37\u4F38\u4F39\u4F3A\u4F3B\u4F3C"+
-            "\u4F3D\u4F3E\u4F3F\u4F40\u4F41\u4F42\u4F43\u4F44"+
-            "\u4F45\u4F46\u4F47\u4F48\u4F49\u4F4A\u4F4B\u4F4C"+
-            "\u4F4D\u4F4E\u4F4F\u4F50\u4F51\u4F52\u4F53\u4F54"+
-            "\u4F55\u4F56\u4F57\u4F58\u4F59\u4F5A\u4F5B\u4F5C"+
-            "\u4F5D\u4F5E\u4F5F\u4F60\u4F61\u4F62\u4F63\u4F64"+
-            "\u4F65\u4F66\u4F67\u4F68\u4F69\u4F6A\u4F6B\u4F6C"+
-            "\u4F6D\u4F6E\u4F6F\u4F70\u4F71\u4F72\u4F73\u4F74"+
-            "\u4F75\u4F76\u4F77\u4F78\u4F79\u4F7A\u4F7B\u4F7C"+
-            "\u4F7D\u4F7E\u4F7F\u4F80\u4F81\u4F82\u4F83\u4F84"+
-            "\u4F85\u4F86\u4F87\u4F88\u4F89\u4F8A\u4F8B\u4F8C"+
-            "\u4F8D\u4F8E\u4F8F\u4F90\u4F91\u4F92\u4F93\u4F94"+
-            "\u4F95\u4F96\u4F97\u4F98\u4F99\u4F9A\u4F9B\u4F9C"+
-            "\u4F9D\u4F9E\u4F9F\u4FA0\u4FA1\u4FA2\u4FA3\u4FA4"+
-            "\u4FA5\u4FA6\u4FA7\u4FA8\u4FA9\u4FAA\u4FAB\u4FAC"+
-            "\u4FAD\u4FAE\u4FAF\u4FB0\u4FB1\u4FB2\u4FB3\u4FB4"+
-            "\u4FB5\u4FB6\u4FB7\u4FB8\u4FB9\u4FBA\u4FBB\u4FBC"+
-            "\u4FBD\u4FBE\u4FBF\u4FC0\u4FC1\u4FC2\u4FC3\u4FC4"+
-            "\u4FC5\u4FC6\u4FC7\u4FC8\u4FC9\u4FCA\u4FCB\u4FCC"+
-            "\u4FCD\u4FCE\u4FCF\u4FD0\u4FD1\u4FD2\u4FD3\u4FD4"+
-            "\u4FD5\u4FD6\u4FD7\u4FD8\u4FD9\u4FDA\u4FDB\u4FDC"+
-            "\u4FDD\u4FDE\u4FDF\u4FE0\u4FE1\u4FE2\u4FE3\u4FE4"+
-            "\u4FE5\u4FE6\u4FE7\u4FE8\u4FE9\u4FEA\u4FEB\u4FEC"+
-            "\u4FED\u4FEE\u4FEF\u4FF0\u4FF1\u4FF2\u4FF3\u4FF4"+
-            "\u4FF5\u4FF6\u4FF7\u4FF8\u4FF9\u4FFA\u4FFB\u4FFC"+
-            "\u4FFD\u4FFE\u4FFF\u5000\u5001\u5002\u5003\u5004"+
-            "\u5005\u5006\u5007\u5008\u5009\u500A\u500B\u500C"+
-            "\u500D\u500E\u500F\u5010\u5011\u5012\u5013\u5014"+
-            "\u5015\u5016\u5017\u5018\u5019\u501A\u501B\u501C"+
-            "\u501D\u501E\u501F\u5020\u5021\u5022\u5023\u5024"+
-            "\u5025\u5026\u5027\u5028\u5029\u502A\u502B\u502C"+
-            "\u502D\u502E\u502F\u5030\u5031\u5032\u5033\u5034"+
-            "\u5035\u5036\u5037\u5038\u5039\u503A\u503B\u503C"+
-            "\u503D\u503E\u503F\u5040\u5041\u5042\u5043\u5044"+
-            "\u5045\u5046\u5047\u5048\u5049\u504A\u504B\u504C"+
-            "\u504D\u504E\u504F\u5050\u5051\u5052\u5053\u5054"+
-            "\u5055\u5056\u5057\u5058\u5059\u505A\u505B\u505C"+
-            "\u505D\u505E\u505F\u5060\u5061\u5062\u5063\u5064"+
-            "\u5065\u5066\u5067\u5068\u5069\u506A\u506B\u506C"+
-            "\u506D\u506E\u506F\u5070\u5071\u5072\u5073\u5074"+
-            "\u5075\u5076\u5077\u5078\u5079\u507A\u507B\u507C"+
-            "\u507D\u507E\u507F\u5080\u5081\u5082\u5083\u5084"+
-            "\u5085\u5086\u5087\u5088\u5089\u508A\u508B\u508C"+
-            "\u508D\u508E\u508F\u5090\u5091\u5092\u5093\u5094"+
-            "\u5095\u5096\u5097\u5098\u5099\u509A\u509B\u509C"+
-            "\u509D\u509E\u509F\u50A0\u50A1\u50A2\u50A3\u50A4"+
-            "\u50A5\u50A6\u50A7\u50A8\u50A9\u50AA\u50AB\u50AC"+
-            "\u50AD\u50AE\u50AF\u50B0\u50B1\u50B2\u50B3\u50B4"+
-            "\u50B5\u50B6\u50B7\u50B8\u50B9\u50BA\u50BB\u50BC"+
-            "\u50BD\u50BE\u50BF\u50C0\u50C1\u50C2\u50C3\u50C4"+
-            "\u50C5\u50C6\u50C7\u50C8\u50C9\u50CA\u50CB\u50CC"+
-            "\u50CD\u50CE\u50CF\u50D0\u50D1\u50D2\u50D3\u50D4"+
-            "\u50D5\u50D6\u50D7\u50D8\u50D9\u50DA\u50DB\u50DC"+
-            "\u50DD\u50DE\u50DF\u50E0\u50E1\u50E2\u50E3\u50E4"+
-            "\u50E5\u50E6\u50E7\u50E8\u50E9\u50EA\u50EB\u50EC"+
-            "\u50ED\u50EE\u50EF\u50F0\u50F1\u50F2\u50F3\u50F4"+
-            "\u50F5\u50F6\u50F7\u50F8\u50F9\u50FA\u50FB\u50FC"+
-            "\u50FD\u50FE\u50FF\u5100\u5101\u5102\u5103\u5104"+
-            "\u5105\u5106\u5107\u5108\u5109\u510A\u510B\u510C"+
-            "\u510D\u510E\u510F\u5110\u5111\u5112\u5113\u5114"+
-            "\u5115\u5116\u5117\u5118\u5119\u511A\u511B\u511C"+
-            "\u511D\u511E\u511F\u5120\u5121\u5122\u5123\u5124"+
-            "\u5125\u5126\u5127\u5128\u5129\u512A\u512B\u512C"+
-            "\u512D\u512E\u512F\u5130\u5131\u5132\u5133\u5134"+
-            "\u5135\u5136\u5137\u5138\u5139\u513A\u513B\u513C"+
-            "\u513D\u513E\u513F\u5140\u5141\u5142\u5143\u5144"+
-            "\u5145\u5146\u5147\u5148\u5149\u514A\u514B\u514C"+
-            "\u514D\u514E\u514F\u5150\u5151\u5152\u5153\u5154"+
-            "\u5155\u5156\u5157\u5158\u5159\u515A\u515B\u515C"+
-            "\u515D\u515E\u515F\u5160\u5161\u5162\u5163\u5164"+
-            "\u5165\u5166\u5167\u5168\u5169\u516A\u516B\u516C"+
-            "\u516D\u516E\u516F\u5170\u5171\u5172\u5173\u5174"+
-            "\u5175\u5176\u5177\u5178\u5179\u517A\u517B\u517C"+
-            "\u517D\u517E\u517F\u5180\u5181\u5182\u5183\u5184"+
-            "\u5185\u5186\u5187\u5188\u5189\u518A\u518B\u518C"+
-            "\u518D\u518E\u518F\u5190\u5191\u5192\u5193\u5194"+
-            "\u5195\u5196\u5197\u5198\u5199\u519A\u519B\u519C"+
-            "\u519D\u519E\u519F\u51A0\u51A1\u51A2\u51A3\u51A4"+
-            "\u51A5\u51A6\u51A7\u51A8\u51A9\u51AA\u51AB\u51AC"+
-            "\u51AD\u51AE\u51AF\u51B0\u51B1\u51B2\u51B3\u51B4"+
-            "\u51B5\u51B6\u51B7\u51B8\u51B9\u51BA\u51BB\u51BC"+
-            "\u51BD\u51BE\u51BF\u51C0\u51C1\u51C2\u51C3\u51C4"+
-            "\u51C5\u51C6\u51C7\u51C8\u51C9\u51CA\u51CB\u51CC"+
-            "\u51CD\u51CE\u51CF\u51D0\u51D1\u51D2\u51D3\u51D4"+
-            "\u51D5\u51D6\u51D7\u51D8\u51D9\u51DA\u51DB\u51DC"+
-            "\u51DD\u51DE\u51DF\u51E0\u51E1\u51E2\u51E3\u51E4"+
-            "\u51E5\u51E6\u51E7\u51E8\u51E9\u51EA\u51EB\u51EC"+
-            "\u51ED\u51EE\u51EF\u51F0\u51F1\u51F2\u51F3\u51F4"+
-            "\u51F5\u51F6\u51F7\u51F8\u51F9\u51FA\u51FB\u51FC"+
-            "\u51FD\u51FE\u51FF\u5200\u5201\u5202\u5203\u5204"+
-            "\u5205\u5206\u5207\u5208\u5209\u520A\u520B\u520C"+
-            "\u520D\u520E\u520F\u5210\u5211\u5212\u5213\u5214"+
-            "\u5215\u5216\u5217\u5218\u5219\u521A\u521B\u521C"+
-            "\u521D\u521E\u521F\u5220\u5221\u5222\u5223\u5224"+
-            "\u5225\u5226\u5227\u5228\u5229\u522A\u522B\u522C"+
-            "\u522D\u522E\u522F\u5230\u5231\u5232\u5233\u5234"+
-            "\u5235\u5236\u5237\u5238\u5239\u523A\u523B\u523C"+
-            "\u523D\u523E\u523F\u5240\u5241\u5242\u5243\u5244"+
-            "\u5245\u5246\u5247\u5248\u5249\u524A\u524B\u524C"+
-            "\u524D\u524E\u524F\u5250\u5251\u5252\u5253\u5254"+
-            "\u5255\u5256\u5257\u5258\u5259\u525A\u525B\u525C"+
-            "\u525D\u525E\u525F\u5260\u5261\u5262\u5263\u5264"+
-            "\u5265\u5266\u5267\u5268\u5269\u526A\u526B\u526C"+
-            "\u526D\u526E\u526F\u5270\u5271\u5272\u5273\u5274"+
-            "\u5275\u5276\u5277\u5278\u5279\u527A\u527B\u527C"+
-            "\u527D\u527E\u527F\u5280\u5281\u5282\u5283\u5284"+
-            "\u5285\u5286\u5287\u5288\u5289\u528A\u528B\u528C"+
-            "\u528D\u528E\u528F\u5290\u5291\u5292\u5293\u5294"+
-            "\u5295\u5296\u5297\u5298\u5299\u529A\u529B\u529C"+
-            "\u529D\u529E\u529F\u52A0\u52A1\u52A2\u52A3\u52A4"+
-            "\u52A5\u52A6\u52A7\u52A8\u52A9\u52AA\u52AB\u52AC"+
-            "\u52AD\u52AE\u52AF\u52B0\u52B1\u52B2\u52B3\u52B4"+
-            "\u52B5\u52B6\u52B7\u52B8\u52B9\u52BA\u52BB\u52BC"+
-            "\u52BD\u52BE\u52BF\u52C0\u52C1\u52C2\u52C3\u52C4"+
-            "\u52C5\u52C6\u52C7\u52C8\u52C9\u52CA\u52CB\u52CC"+
-            "\u52CD\u52CE\u52CF\u52D0\u52D1\u52D2\u52D3\u52D4"+
-            "\u52D5\u52D6\u52D7\u52D8\u52D9\u52DA\u52DB\u52DC"+
-            "\u52DD\u52DE\u52DF\u52E0\u52E1\u52E2\u52E3\u52E4"+
-            "\u52E5\u52E6\u52E7\u52E8\u52E9\u52EA\u52EB\u52EC"+
-            "\u52ED\u52EE\u52EF\u52F0\u52F1\u52F2\u52F3\u52F4"+
-            "\u52F5\u52F6\u52F7\u52F8\u52F9\u52FA\u52FB\u52FC"+
-            "\u52FD\u52FE\u52FF\u5300\u5301\u5302\u5303\u5304"+
-            "\u5305\u5306\u5307\u5308\u5309\u530A\u530B\u530C"+
-            "\u530D\u530E\u530F\u5310\u5311\u5312\u5313\u5314"+
-            "\u5315\u5316\u5317\u5318\u5319\u531A\u531B\u531C"+
-            "\u531D\u531E\u531F\u5320\u5321\u5322\u5323\u5324"+
-            "\u5325\u5326\u5327\u5328\u5329\u532A\u532B\u532C"+
-            "\u532D\u532E\u532F\u5330\u5331\u5332\u5333\u5334"+
-            "\u5335\u5336\u5337\u5338\u5339\u533A\u533B\u533C"+
-            "\u533D\u533E\u533F\u5340\u5341\u5342\u5343\u5344"+
-            "\u5345\u5346\u5347\u5348\u5349\u534A\u534B\u534C"+
-            "\u534D\u534E\u534F\u5350\u5351\u5352\u5353\u5354"+
-            "\u5355\u5356\u5357\u5358\u5359\u535A\u535B\u535C"+
-            "\u535D\u535E\u535F\u5360\u5361\u5362\u5363\u5364"+
-            "\u5365\u5366\u5367\u5368\u5369\u536A\u536B\u536C"+
-            "\u536D\u536E\u536F\u5370\u5371\u5372\u5373\u5374"+
-            "\u5375\u5376\u5377\u5378\u5379\u537A\u537B\u537C"+
-            "\u537D\u537E\u537F\u5380\u5381\u5382\u5383\u5384"+
-            "\u5385\u5386\u5387\u5388\u5389\u538A\u538B\u538C"+
-            "\u538D\u538E\u538F\u5390\u5391\u5392\u5393\u5394"+
-            "\u5395\u5396\u5397\u5398\u5399\u539A\u539B\u539C"+
-            "\u539D\u539E\u539F\u53A0\u53A1\u53A2\u53A3\u53A4"+
-            "\u53A5\u53A6\u53A7\u53A8\u53A9\u53AA\u53AB\u53AC"+
-            "\u53AD\u53AE\u53AF\u53B0\u53B1\u53B2\u53B3\u53B4"+
-            "\u53B5\u53B6\u53B7\u53B8\u53B9\u53BA\u53BB\u53BC"+
-            "\u53BD\u53BE\u53BF\u53C0\u53C1\u53C2\u53C3\u53C4"+
-            "\u53C5\u53C6\u53C7\u53C8\u53C9\u53CA\u53CB\u53CC"+
-            "\u53CD\u53CE\u53CF\u53D0\u53D1\u53D2\u53D3\u53D4"+
-            "\u53D5\u53D6\u53D7\u53D8\u53D9\u53DA\u53DB\u53DC"+
-            "\u53DD\u53DE\u53DF\u53E0\u53E1\u53E2\u53E3\u53E4"+
-            "\u53E5\u53E6\u53E7\u53E8\u53E9\u53EA\u53EB\u53EC"+
-            "\u53ED\u53EE\u53EF\u53F0\u53F1\u53F2\u53F3\u53F4"+
-            "\u53F5\u53F6\u53F7\u53F8\u53F9\u53FA\u53FB\u53FC"+
-            "\u53FD\u53FE\u53FF\u5400\u5401\u5402\u5403\u5404"+
-            "\u5405\u5406\u5407\u5408\u5409\u540A\u540B\u540C"+
-            "\u540D\u540E\u540F\u5410\u5411\u5412\u5413\u5414"+
-            "\u5415\u5416\u5417\u5418\u5419\u541A\u541B\u541C"+
-            "\u541D\u541E\u541F\u5420\u5421\u5422\u5423\u5424"+
-            "\u5425\u5426\u5427\u5428\u5429\u542A\u542B\u542C"+
-            "\u542D\u542E\u542F\u5430\u5431\u5432\u5433\u5434"+
-            "\u5435\u5436\u5437\u5438\u5439\u543A\u543B\u543C"+
-            "\u543D\u543E\u543F\u5440\u5441\u5442\u5443\u5444"+
-            "\u5445\u5446\u5447\u5448\u5449\u544A\u544B\u544C"+
-            "\u544D\u544E\u544F\u5450\u5451\u5452\u5453\u5454"+
-            "\u5455\u5456\u5457\u5458\u5459\u545A\u545B\u545C"+
-            "\u545D\u545E\u545F\u5460\u5461\u5462\u5463\u5464"+
-            "\u5465\u5466\u5467\u5468\u5469\u546A\u546B\u546C"+
-            "\u546D\u546E\u546F\u5470\u5471\u5472\u5473\u5474"+
-            "\u5475\u5476\u5477\u5478\u5479\u547A\u547B\u547C"+
-            "\u547D\u547E\u547F\u5480\u5481\u5482\u5483\u5484"+
-            "\u5485\u5486\u5487\u5488\u5489\u548A\u548B\u548C"+
-            "\u548D\u548E\u548F\u5490\u5491\u5492\u5493\u5494"+
-            "\u5495\u5496\u5497\u5498\u5499\u549A\u549B\u549C"+
-            "\u549D\u549E\u549F\u54A0\u54A1\u54A2\u54A3\u54A4"+
-            "\u54A5\u54A6\u54A7\u54A8\u54A9\u54AA\u54AB\u54AC"+
-            "\u54AD\u54AE\u54AF\u54B0\u54B1\u54B2\u54B3\u54B4"+
-            "\u54B5\u54B6\u54B7\u54B8\u54B9\u54BA\u54BB\u54BC"+
-            "\u54BD\u54BE\u54BF\u54C0\u54C1\u54C2\u54C3\u54C4"+
-            "\u54C5\u54C6\u54C7\u54C8\u54C9\u54CA\u54CB\u54CC"+
-            "\u54CD\u54CE\u54CF\u54D0\u54D1\u54D2\u54D3\u54D4"+
-            "\u54D5\u54D6\u54D7\u54D8\u54D9\u54DA\u54DB\u54DC"+
-            "\u54DD\u54DE\u54DF\u54E0\u54E1\u54E2\u54E3\u54E4"+
-            "\u54E5\u54E6\u54E7\u54E8\u54E9\u54EA\u54EB\u54EC"+
-            "\u54ED\u54EE\u54EF\u54F0\u54F1\u54F2\u54F3\u54F4"+
-            "\u54F5\u54F6\u54F7\u54F8\u54F9\u54FA\u54FB\u54FC"+
-            "\u54FD\u54FE\u54FF\u5500\u5501\u5502\u5503\u5504"+
-            "\u5505\u5506\u5507\u5508\u5509\u550A\u550B\u550C"+
-            "\u550D\u550E\u550F\u5510\u5511\u5512\u5513\u5514"+
-            "\u5515\u5516\u5517\u5518\u5519\u551A\u551B\u551C"+
-            "\u551D\u551E\u551F\u5520\u5521\u5522\u5523\u5524"+
-            "\u5525\u5526\u5527\u5528\u5529\u552A\u552B\u552C"+
-            "\u552D\u552E\u552F\u5530\u5531\u5532\u5533\u5534"+
-            "\u5535\u5536\u5537\u5538\u5539\u553A\u553B\u553C"+
-            "\u553D\u553E\u553F\u5540\u5541\u5542\u5543\u5544"+
-            "\u5545\u5546\u5547\u5548\u5549\u554A\u554B\u554C"+
-            "\u554D\u554E\u554F\u5550\u5551\u5552\u5553\u5554"+
-            "\u5555\u5556\u5557\u5558\u5559\u555A\u555B\u555C"+
-            "\u555D\u555E\u555F\u5560\u5561\u5562\u5563\u5564"+
-            "\u5565\u5566\u5567\u5568\u5569\u556A\u556B\u556C"+
-            "\u556D\u556E\u556F\u5570\u5571\u5572\u5573\u5574"+
-            "\u5575\u5576\u5577\u5578\u5579\u557A\u557B\u557C"+
-            "\u557D\u557E\u557F\u5580\u5581\u5582\u5583\u5584"+
-            "\u5585\u5586\u5587\u5588\u5589\u558A\u558B\u558C"+
-            "\u558D\u558E\u558F\u5590\u5591\u5592\u5593\u5594"+
-            "\u5595\u5596\u5597\u5598\u5599\u559A\u559B\u559C"+
-            "\u559D\u559E\u559F\u55A0\u55A1\u55A2\u55A3\u55A4"+
-            "\u55A5\u55A6\u55A7\u55A8\u55A9\u55AA\u55AB\u55AC"+
-            "\u55AD\u55AE\u55AF\u55B0\u55B1\u55B2\u55B3\u55B4"+
-            "\u55B5\u55B6\u55B7\u55B8\u55B9\u55BA\u55BB\u55BC"+
-            "\u55BD\u55BE\u55BF\u55C0\u55C1\u55C2\u55C3\u55C4"+
-            "\u55C5\u55C6\u55C7\u55C8\u55C9\u55CA\u55CB\u55CC"+
-            "\u55CD\u55CE\u55CF\u55D0\u55D1\u55D2\u55D3\u55D4"+
-            "\u55D5\u55D6\u55D7\u55D8\u55D9\u55DA\u55DB\u55DC"+
-            "\u55DD\u55DE\u55DF\u55E0\u55E1\u55E2\u55E3\u55E4"+
-            "\u55E5\u55E6\u55E7\u55E8\u55E9\u55EA\u55EB\u55EC"+
-            "\u55ED\u55EE\u55EF\u55F0\u55F1\u55F2\u55F3\u55F4"+
-            "\u55F5\u55F6\u55F7\u55F8\u55F9\u55FA\u55FB\u55FC"+
-            "\u55FD\u55FE\u55FF\u5600\u5601\u5602\u5603\u5604"+
-            "\u5605\u5606\u5607\u5608\u5609\u560A\u560B\u560C"+
-            "\u560D\u560E\u560F\u5610\u5611\u5612\u5613\u5614"+
-            "\u5615\u5616\u5617\u5618\u5619\u561A\u561B\u561C"+
-            "\u561D\u561E\u561F\u5620\u5621\u5622\u5623\u5624"+
-            "\u5625\u5626\u5627\u5628\u5629\u562A\u562B\u562C"+
-            "\u562D\u562E\u562F\u5630\u5631\u5632\u5633\u5634"+
-            "\u5635\u5636\u5637\u5638\u5639\u563A\u563B\u563C"+
-            "\u563D\u563E\u563F\u5640\u5641\u5642\u5643\u5644"+
-            "\u5645\u5646\u5647\u5648\u5649\u564A\u564B\u564C"+
-            "\u564D\u564E\u564F\u5650\u5651\u5652\u5653\u5654"+
-            "\u5655\u5656\u5657\u5658\u5659\u565A\u565B\u565C"+
-            "\u565D\u565E\u565F\u5660\u5661\u5662\u5663\u5664"+
-            "\u5665\u5666\u5667\u5668\u5669\u566A\u566B\u566C"+
-            "\u566D\u566E\u566F\u5670\u5671\u5672\u5673\u5674"+
-            "\u5675\u5676\u5677\u5678\u5679\u567A\u567B\u567C"+
-            "\u567D\u567E\u567F\u5680\u5681\u5682\u5683\u5684"+
-            "\u5685\u5686\u5687\u5688\u5689\u568A\u568B\u568C"+
-            "\u568D\u568E\u568F\u5690\u5691\u5692\u5693\u5694"+
-            "\u5695\u5696\u5697\u5698\u5699\u569A\u569B\u569C"+
-            "\u569D\u569E\u569F\u56A0\u56A1\u56A2\u56A3\u56A4"+
-            "\u56A5\u56A6\u56A7\u56A8\u56A9\u56AA\u56AB\u56AC"+
-            "\u56AD\u56AE\u56AF\u56B0\u56B1\u56B2\u56B3\u56B4"+
-            "\u56B5\u56B6\u56B7\u56B8\u56B9\u56BA\u56BB\u56BC"+
-            "\u56BD\u56BE\u56BF\u56C0\u56C1\u56C2\u56C3\u56C4"+
-            "\u56C5\u56C6\u56C7\u56C8\u56C9\u56CA\u56CB\u56CC"+
-            "\u56CD\u56CE\u56CF\u56D0\u56D1\u56D2\u56D3\u56D4"+
-            "\u56D5\u56D6\u56D7\u56D8\u56D9\u56DA\u56DB\u56DC"+
-            "\u56DD\u56DE\u56DF\u56E0\u56E1\u56E2\u56E3\u56E4"+
-            "\u56E5\u56E6\u56E7\u56E8\u56E9\u56EA\u56EB\u56EC"+
-            "\u56ED\u56EE\u56EF\u56F0\u56F1\u56F2\u56F3\u56F4"+
-            "\u56F5\u56F6\u56F7\u56F8\u56F9\u56FA\u56FB\u56FC"+
-            "\u56FD\u56FE\u56FF\u5700\u5701\u5702\u5703\u5704"+
-            "\u5705\u5706\u5707\u5708\u5709\u570A\u570B\u570C"+
-            "\u570D\u570E\u570F\u5710\u5711\u5712\u5713\u5714"+
-            "\u5715\u5716\u5717\u5718\u5719\u571A\u571B\u571C"+
-            "\u571D\u571E\u571F\u5720\u5721\u5722\u5723\u5724"+
-            "\u5725\u5726\u5727\u5728\u5729\u572A\u572B\u572C"+
-            "\u572D\u572E\u572F\u5730\u5731\u5732\u5733\u5734"+
-            "\u5735\u5736\u5737\u5738\u5739\u573A\u573B\u573C"+
-            "\u573D\u573E\u573F\u5740\u5741\u5742\u5743\u5744"+
-            "\u5745\u5746\u5747\u5748\u5749\u574A\u574B\u574C"+
-            "\u574D\u574E\u574F\u5750\u5751\u5752\u5753\u5754"+
-            "\u5755\u5756\u5757\u5758\u5759\u575A\u575B\u575C"+
-            "\u575D\u575E\u575F\u5760\u5761\u5762\u5763\u5764"+
-            "\u5765\u5766\u5767\u5768\u5769\u576A\u576B\u576C"+
-            "\u576D\u576E\u576F\u5770\u5771\u5772\u5773\u5774"+
-            "\u5775\u5776\u5777\u5778\u5779\u577A\u577B\u577C"+
-            "\u577D\u577E\u577F\u5780\u5781\u5782\u5783\u5784"+
-            "\u5785\u5786\u5787\u5788\u5789\u578A\u578B\u578C"+
-            "\u578D\u578E\u578F\u5790\u5791\u5792\u5793\u5794"+
-            "\u5795\u5796\u5797\u5798\u5799\u579A\u579B\u579C"+
-            "\u579D\u579E\u579F\u57A0\u57A1\u57A2\u57A3\u57A4"+
-            "\u57A5\u57A6\u57A7\u57A8\u57A9\u57AA\u57AB\u57AC"+
-            "\u57AD\u57AE\u57AF\u57B0\u57B1\u57B2\u57B3\u57B4"+
-            "\u57B5\u57B6\u57B7\u57B8\u57B9\u57BA\u57BB\u57BC"+
-            "\u57BD\u57BE\u57BF\u57C0\u57C1\u57C2\u57C3\u57C4"+
-            "\u57C5\u57C6\u57C7\u57C8\u57C9\u57CA\u57CB\u57CC"+
-            "\u57CD\u57CE\u57CF\u57D0\u57D1\u57D2\u57D3\u57D4"+
-            "\u57D5\u57D6\u57D7\u57D8\u57D9\u57DA\u57DB\u57DC"+
-            "\u57DD\u57DE\u57DF\u57E0\u57E1\u57E2\u57E3\u57E4"+
-            "\u57E5\u57E6\u57E7\u57E8\u57E9\u57EA\u57EB\u57EC"+
-            "\u57ED\u57EE\u57EF\u57F0\u57F1\u57F2\u57F3\u57F4"+
-            "\u57F5\u57F6\u57F7\u57F8\u57F9\u57FA\u57FB\u57FC"+
-            "\u57FD\u57FE\u57FF\u5800\u5801\u5802\u5803\u5804"+
-            "\u5805\u5806\u5807\u5808\u5809\u580A\u580B\u580C"+
-            "\u580D\u580E\u580F\u5810\u5811\u5812\u5813\u5814"+
-            "\u5815\u5816\u5817\u5818\u5819\u581A\u581B\u581C"+
-            "\u581D\u581E\u581F\u5820\u5821\u5822\u5823\u5824"+
-            "\u5825\u5826\u5827\u5828\u5829\u582A\u582B\u582C"+
-            "\u582D\u582E\u582F\u5830\u5831\u5832\u5833\u5834"+
-            "\u5835\u5836\u5837\u5838\u5839\u583A\u583B\u583C"+
-            "\u583D\u583E\u583F\u5840\u5841\u5842\u5843\u5844"+
-            "\u5845\u5846\u5847\u5848\u5849\u584A\u584B\u584C"+
-            "\u584D\u584E\u584F\u5850\u5851\u5852\u5853\u5854"+
-            "\u5855\u5856\u5857\u5858\u5859\u585A\u585B\u585C"+
-            "\u585D\u585E\u585F\u5860\u5861\u5862\u5863\u5864"+
-            "\u5865\u5866\u5867\u5868\u5869\u586A\u586B\u586C"+
-            "\u586D\u586E\u586F\u5870\u5871\u5872\u5873\u5874"+
-            "\u5875\u5876\u5877\u5878\u5879\u587A\u587B\u587C"+
-            "\u587D\u587E\u587F\u5880\u5881\u5882\u5883\u5884"+
-            "\u5885\u5886\u5887\u5888\u5889\u588A\u588B\u588C"+
-            "\u588D\u588E\u588F\u5890\u5891\u5892\u5893\u5894"+
-            "\u5895\u5896\u5897\u5898\u5899\u589A\u589B\u589C"+
-            "\u589D\u589E\u589F\u58A0\u58A1\u58A2\u58A3\u58A4"+
-            "\u58A5\u58A6\u58A7\u58A8\u58A9\u58AA\u58AB\u58AC"+
-            "\u58AD\u58AE\u58AF\u58B0\u58B1\u58B2\u58B3\u58B4"+
-            "\u58B5\u58B6\u58B7\u58B8\u58B9\u58BA\u58BB\u58BC"+
-            "\u58BD\u58BE\u58BF\u58C0\u58C1\u58C2\u58C3\u58C4"+
-            "\u58C5\u58C6\u58C7\u58C8\u58C9\u58CA\u58CB\u58CC"+
-            "\u58CD\u58CE\u58CF\u58D0\u58D1\u58D2\u58D3\u58D4"+
-            "\u58D5\u58D6\u58D7\u58D8\u58D9\u58DA\u58DB\u58DC"+
-            "\u58DD\u58DE\u58DF\u58E0\u58E1\u58E2\u58E3\u58E4"+
-            "\u58E5\u58E6\u58E7\u58E8\u58E9\u58EA\u58EB\u58EC"+
-            "\u58ED\u58EE\u58EF\u58F0\u58F1\u58F2\u58F3\u58F4"+
-            "\u58F5\u58F6\u58F7\u58F8\u58F9\u58FA\u58FB\u58FC"+
-            "\u58FD\u58FE\u58FF\u5900\u5901\u5902\u5903\u5904"+
-            "\u5905\u5906\u5907\u5908\u5909\u590A\u590B\u590C"+
-            "\u590D\u590E\u590F\u5910\u5911\u5912\u5913\u5914"+
-            "\u5915\u5916\u5917\u5918\u5919\u591A\u591B\u591C"+
-            "\u591D\u591E\u591F\u5920\u5921\u5922\u5923\u5924"+
-            "\u5925\u5926\u5927\u5928\u5929\u592A\u592B\u592C"+
-            "\u592D\u592E\u592F\u5930\u5931\u5932\u5933\u5934"+
-            "\u5935\u5936\u5937\u5938\u5939\u593A\u593B\u593C"+
-            "\u593D\u593E\u593F\u5940\u5941\u5942\u5943\u5944"+
-            "\u5945\u5946\u5947\u5948\u5949\u594A\u594B\u594C"+
-            "\u594D\u594E\u594F\u5950\u5951\u5952\u5953\u5954"+
-            "\u5955\u5956\u5957\u5958\u5959\u595A\u595B\u595C"+
-            "\u595D\u595E\u595F\u5960\u5961\u5962\u5963\u5964"+
-            "\u5965\u5966\u5967\u5968\u5969\u596A\u596B\u596C"+
-            "\u596D\u596E\u596F\u5970\u5971\u5972\u5973\u5974"+
-            "\u5975\u5976\u5977\u5978\u5979\u597A\u597B\u597C"+
-            "\u597D\u597E\u597F\u5980\u5981\u5982\u5983\u5984"+
-            "\u5985\u5986\u5987\u5988\u5989\u598A\u598B\u598C"+
-            "\u598D\u598E\u598F\u5990\u5991\u5992\u5993\u5994"+
-            "\u5995\u5996\u5997\u5998\u5999\u599A\u599B\u599C"+
-            "\u599D\u599E\u599F\u59A0\u59A1\u59A2\u59A3\u59A4"+
-            "\u59A5\u59A6\u59A7\u59A8\u59A9\u59AA\u59AB\u59AC"+
-            "\u59AD\u59AE\u59AF\u59B0\u59B1\u59B2\u59B3\u59B4"+
-            "\u59B5\u59B6\u59B7\u59B8\u59B9\u59BA\u59BB\u59BC"+
-            "\u59BD\u59BE\u59BF\u59C0\u59C1\u59C2\u59C3\u59C4"+
-            "\u59C5\u59C6\u59C7\u59C8\u59C9\u59CA\u59CB\u59CC"+
-            "\u59CD\u59CE\u59CF\u59D0\u59D1\u59D2\u59D3\u59D4"+
-            "\u59D5\u59D6\u59D7\u59D8\u59D9\u59DA\u59DB\u59DC"+
-            "\u59DD\u59DE\u59DF\u59E0\u59E1\u59E2\u59E3\u59E4"+
-            "\u59E5\u59E6\u59E7\u59E8\u59E9\u59EA\u59EB\u59EC"+
-            "\u59ED\u59EE\u59EF\u59F0\u59F1\u59F2\u59F3\u59F4"+
-            "\u59F5\u59F6\u59F7\u59F8\u59F9\u59FA\u59FB\u59FC"+
-            "\u59FD\u59FE\u59FF\u5A00\u5A01\u5A02\u5A03\u5A04"+
-            "\u5A05\u5A06\u5A07\u5A08\u5A09\u5A0A\u5A0B\u5A0C"+
-            "\u5A0D\u5A0E\u5A0F\u5A10\u5A11\u5A12\u5A13\u5A14"+
-            "\u5A15\u5A16\u5A17\u5A18\u5A19\u5A1A\u5A1B\u5A1C"+
-            "\u5A1D\u5A1E\u5A1F\u5A20\u5A21\u5A22\u5A23\u5A24"+
-            "\u5A25\u5A26\u5A27\u5A28\u5A29\u5A2A\u5A2B\u5A2C"+
-            "\u5A2D\u5A2E\u5A2F\u5A30\u5A31\u5A32\u5A33\u5A34"+
-            "\u5A35\u5A36\u5A37\u5A38\u5A39\u5A3A\u5A3B\u5A3C"+
-            "\u5A3D\u5A3E\u5A3F\u5A40\u5A41\u5A42\u5A43\u5A44"+
-            "\u5A45\u5A46\u5A47\u5A48\u5A49\u5A4A\u5A4B\u5A4C"+
-            "\u5A4D\u5A4E\u5A4F\u5A50\u5A51\u5A52\u5A53\u5A54"+
-            "\u5A55\u5A56\u5A57\u5A58\u5A59\u5A5A\u5A5B\u5A5C"+
-            "\u5A5D\u5A5E\u5A5F\u5A60\u5A61\u5A62\u5A63\u5A64"+
-            "\u5A65\u5A66\u5A67\u5A68\u5A69\u5A6A\u5A6B\u5A6C"+
-            "\u5A6D\u5A6E\u5A6F\u5A70\u5A71\u5A72\u5A73\u5A74"+
-            "\u5A75\u5A76\u5A77\u5A78\u5A79\u5A7A\u5A7B\u5A7C"+
-            "\u5A7D\u5A7E\u5A7F\u5A80\u5A81\u5A82\u5A83\u5A84"+
-            "\u5A85\u5A86\u5A87\u5A88\u5A89\u5A8A\u5A8B\u5A8C"+
-            "\u5A8D\u5A8E\u5A8F\u5A90\u5A91\u5A92\u5A93\u5A94"+
-            "\u5A95\u5A96\u5A97\u5A98\u5A99\u5A9A\u5A9B\u5A9C"+
-            "\u5A9D\u5A9E\u5A9F\u5AA0\u5AA1\u5AA2\u5AA3\u5AA4"+
-            "\u5AA5\u5AA6\u5AA7\u5AA8\u5AA9\u5AAA\u5AAB\u5AAC"+
-            "\u5AAD\u5AAE\u5AAF\u5AB0\u5AB1\u5AB2\u5AB3\u5AB4"+
-            "\u5AB5\u5AB6\u5AB7\u5AB8\u5AB9\u5ABA\u5ABB\u5ABC";
-
-        private final static String innerIndex6=
-            "\u5ABD\u5ABE\u5ABF\u5AC0\u5AC1\u5AC2\u5AC3\u5AC4"+
-            "\u5AC5\u5AC6\u5AC7\u5AC8\u5AC9\u5ACA\u5ACB\u5ACC"+
-            "\u5ACD\u5ACE\u5ACF\u5AD0\u5AD1\u5AD2\u5AD3\u5AD4"+
-            "\u5AD5\u5AD6\u5AD7\u5AD8\u5AD9\u5ADA\u5ADB\u5ADC"+
-            "\u5ADD\u5ADE\u5ADF\u5AE0\u5AE1\u5AE2\u5AE3\u5AE4"+
-            "\u5AE5\u5AE6\u5AE7\u5AE8\u5AE9\u5AEA\u5AEB\u5AEC"+
-            "\u5AED\u5AEE\u5AEF\u5AF0\u5AF1\u5AF2\u5AF3\u5AF4"+
-            "\u5AF5\u5AF6\u5AF7\u5AF8\u5AF9\u5AFA\u5AFB\u5AFC"+
-            "\u5AFD\u5AFE\u5AFF\u5B00\u5B01\u5B02\u5B03\u5B04"+
-            "\u5B05\u5B06\u5B07\u5B08\u5B09\u5B0A\u5B0B\u5B0C"+
-            "\u5B0D\u5B0E\u5B0F\u5B10\u5B11\u5B12\u5B13\u5B14"+
-            "\u5B15\u5B16\u5B17\u5B18\u5B19\u5B1A\u5B1B\u5B1C"+
-            "\u5B1D\u5B1E\u5B1F\u5B20\u5B21\u5B22\u5B23\u5B24"+
-            "\u5B25\u5B26\u5B27\u5B28\u5B29\u5B2A\u5B2B\u5B2C"+
-            "\u5B2D\u5B2E\u5B2F\u5B30\u5B31\u5B32\u5B33\u5B34"+
-            "\u5B35\u5B36\u5B37\u5B38\u5B39\u5B3A\u5B3B\u5B3C"+
-            "\u5B3D\u5B3E\u5B3F\u5B40\u5B41\u5B42\u5B43\u5B44"+
-            "\u5B45\u5B46\u5B47\u5B48\u5B49\u5B4A\u5B4B\u5B4C"+
-            "\u5B4D\u5B4E\u5B4F\u5B50\u5B51\u5B52\u5B53\u5B54"+
-            "\u5B55\u5B56\u5B57\u5B58\u5B59\u5B5A\u5B5B\u5B5C"+
-            "\u5B5D\u5B5E\u5B5F\u5B60\u5B61\u5B62\u5B63\u5B64"+
-            "\u5B65\u5B66\u5B67\u5B68\u5B69\u5B6A\u5B6B\u5B6C"+
-            "\u5B6D\u5B6E\u5B6F\u5B70\u5B71\u5B72\u5B73\u5B74"+
-            "\u5B75\u5B76\u5B77\u5B78\u5B79\u5B7A\u5B7B\u5B7C"+
-            "\u5B7D\u5B7E\u5B7F\u5B80\u5B81\u5B82\u5B83\u5B84"+
-            "\u5B85\u5B86\u5B87\u5B88\u5B89\u5B8A\u5B8B\u5B8C"+
-            "\u5B8D\u5B8E\u5B8F\u5B90\u5B91\u5B92\u5B93\u5B94"+
-            "\u5B95\u5B96\u5B97\u5B98\u5B99\u5B9A\u5B9B\u5B9C"+
-            "\u5B9D\u5B9E\u5B9F\u5BA0\u5BA1\u5BA2\u5BA3\u5BA4"+
-            "\u5BA5\u5BA6\u5BA7\u5BA8\u5BA9\u5BAA\u5BAB\u5BAC"+
-            "\u5BAD\u5BAE\u5BAF\u5BB0\u5BB1\u5BB2\u5BB3\u5BB4"+
-            "\u5BB5\u5BB6\u5BB7\u5BB8\u5BB9\u5BBA\u5BBB\u5BBC"+
-            "\u5BBD\u5BBE\u5BBF\u5BC0\u5BC1\u5BC2\u5BC3\u5BC4"+
-            "\u5BC5\u5BC6\u5BC7\u5BC8\u5BC9\u5BCA\u5BCB\u5BCC"+
-            "\u5BCD\u5BCE\u5BCF\u5BD0\u5BD1\u5BD2\u5BD3\u5BD4"+
-            "\u5BD5\u5BD6\u5BD7\u5BD8\u5BD9\u5BDA\u5BDB\u5BDC"+
-            "\u5BDD\u5BDE\u5BDF\u5BE0\u5BE1\u5BE2\u5BE3\u5BE4"+
-            "\u5BE5\u5BE6\u5BE7\u5BE8\u5BE9\u5BEA\u5BEB\u5BEC"+
-            "\u5BED\u5BEE\u5BEF\u5BF0\u5BF1\u5BF2\u5BF3\u5BF4"+
-            "\u5BF5\u5BF6\u5BF7\u5BF8\u5BF9\u5BFA\u5BFB\u5BFC"+
-            "\u5BFD\u5BFE\u5BFF\u5C00\u5C01\u5C02\u5C03\u5C04"+
-            "\u5C05\u5C06\u5C07\u5C08\u5C09\u5C0A\u5C0B\u5C0C"+
-            "\u5C0D\u5C0E\u5C0F\u5C10\u5C11\u5C12\u5C13\u5C14"+
-            "\u5C15\u5C16\u5C17\u5C18\u5C19\u5C1A\u5C1B\u5C1C"+
-            "\u5C1D\u5C1E\u5C1F\u5C20\u5C21\u5C22\u5C23\u5C24"+
-            "\u5C25\u5C26\u5C27\u5C28\u5C29\u5C2A\u5C2B\u5C2C"+
-            "\u5C2D\u5C2E\u5C2F\u5C30\u5C31\u5C32\u5C33\u5C34"+
-            "\u5C35\u5C36\u5C37\u5C38\u5C39\u5C3A\u5C3B\u5C3C"+
-            "\u5C3D\u5C3E\u5C3F\u5C40\u5C41\u5C42\u5C43\u5C44"+
-            "\u5C45\u5C46\u5C47\u5C48\u5C49\u5C4A\u5C4B\u5C4C"+
-            "\u5C4D\u5C4E\u5C4F\u5C50\u5C51\u5C52\u5C53\u5C54"+
-            "\u5C55\u5C56\u5C57\u5C58\u5C59\u5C5A\u5C5B\u5C5C"+
-            "\u5C5D\u5C5E\u5C5F\u5C60\u5C61\u5C62\u5C63\u5C64"+
-            "\u5C65\u5C66\u5C67\u5C68\u5C69\u5C6A\u5C6B\u5C6C"+
-            "\u5C6D\u5C6E\u5C6F\u5C70\u5C71\u5C72\u5C73\u5C74"+
-            "\u5C75\u5C76\u5C77\u5C78\u5C79\u5C7A\u5C7B\u5C7C"+
-            "\u5C7D\u5C7E\u5C7F\u5C80\u5C81\u5C82\u5C83\u5C84"+
-            "\u5C85\u5C86\u5C87\u5C88\u5C89\u5C8A\u5C8B\u5C8C"+
-            "\u5C8D\u5C8E\u5C8F\u5C90\u5C91\u5C92\u5C93\u5C94"+
-            "\u5C95\u5C96\u5C97\u5C98\u5C99\u5C9A\u5C9B\u5C9C"+
-            "\u5C9D\u5C9E\u5C9F\u5CA0\u5CA1\u5CA2\u5CA3\u5CA4"+
-            "\u5CA5\u5CA6\u5CA7\u5CA8\u5CA9\u5CAA\u5CAB\u5CAC"+
-            "\u5CAD\u5CAE\u5CAF\u5CB0\u5CB1\u5CB2\u5CB3\u5CB4"+
-            "\u5CB5\u5CB6\u5CB7\u5CB8\u5CB9\u5CBA\u5CBB\u5CBC"+
-            "\u5CBD\u5CBE\u5CBF\u5CC0\u5CC1\u5CC2\u5CC3\u5CC4"+
-            "\u5CC5\u5CC6\u5CC7\u5CC8\u5CC9\u5CCA\u5CCB\u5CCC"+
-            "\u5CCD\u5CCE\u5CCF\u5CD0\u5CD1\u5CD2\u5CD3\u5CD4"+
-            "\u5CD5\u5CD6\u5CD7\u5CD8\u5CD9\u5CDA\u5CDB\u5CDC"+
-            "\u5CDD\u5CDE\u5CDF\u5CE0\u5CE1\u5CE2\u5CE3\u5CE4"+
-            "\u5CE5\u5CE6\u5CE7\u5CE8\u5CE9\u5CEA\u5CEB\u5CEC"+
-            "\u5CED\u5CEE\u5CEF\u5CF0\u5CF1\u5CF2\u5CF3\u5CF4"+
-            "\u5CF5\u5CF6\u5CF7\u5CF8\u5CF9\u5CFA\u5CFB\u5CFC"+
-            "\u5CFD\u5CFE\u5CFF\u5D00\u5D01\u5D02\u5D03\u5D04"+
-            "\u5D05\u5D06\u5D07\u5D08\u5D09\u5D0A\u5D0B\u5D0C"+
-            "\u5D0D\u5D0E\u5D0F\u5D10\u5D11\u5D12\u5D13\u5D14"+
-            "\u5D15\u5D16\u5D17\u5D18\u5D19\u5D1A\u5D1B\u5D1C"+
-            "\u5D1D\u5D1E\u5D1F\u5D20\u5D21\u5D22\u5D23\u5D24"+
-            "\u5D25\u5D26\u5D27\u5D28\u5D29\u5D2A\u5D2B\u5D2C"+
-            "\u5D2D\u5D2E\u5D2F\u5D30\u5D31\u5D32\u5D33\u5D34"+
-            "\u5D35\u5D36\u5D37\u5D38\u5D39\u5D3A\u5D3B\u5D3C"+
-            "\u5D3D\u5D3E\u5D3F\u5D40\u5D41\u5D42\u5D43\u5D44"+
-            "\u5D45\u5D46\u5D47\u5D48\u5D49\u5D4A\u5D4B\u5D4C"+
-            "\u5D4D\u5D4E\u5D4F\u5D50\u5D51\u5D52\u5D53\u5D54"+
-            "\u5D55\u5D56\u5D57\u5D58\u5D59\u5D5A\u5D5B\u5D5C"+
-            "\u5D5D\u5D5E\u5D5F\u5D60\u5D61\u5D62\u5D63\u5D64"+
-            "\u5D65\u5D66\u5D67\u5D68\u5D69\u5D6A\u5D6B\u5D6C"+
-            "\u5D6D\u5D6E\u5D6F\u5D70\u5D71\u5D72\u5D73\u5D74"+
-            "\u5D75\u5D76\u5D77\u5D78\u5D79\u5D7A\u5D7B\u5D7C"+
-            "\u5D7D\u5D7E\u5D7F\u5D80\u5D81\u5D82\u5D83\u5D84"+
-            "\u5D85\u5D86\u5D87\u5D88\u5D89\u5D8A\u5D8B\u5D8C"+
-            "\u5D8D\u5D8E\u5D8F\u5D90\u5D91\u5D92\u5D93\u5D94"+
-            "\u5D95\u5D96\u5D97\u5D98\u5D99\u5D9A\u5D9B\u5D9C"+
-            "\u5D9D\u5D9E\u5D9F\u5DA0\u5DA1\u5DA2\u5DA3\u5DA4"+
-            "\u5DA5\u5DA6\u5DA7\u5DA8\u5DA9\u5DAA\u5DAB\u5DAC"+
-            "\u5DAD\u5DAE\u5DAF\u5DB0\u5DB1\u5DB2\u5DB3\u5DB4"+
-            "\u5DB5\u5DB6\u5DB7\u5DB8\u5DB9\u5DBA\u5DBB\u5DBC"+
-            "\u5DBD\u5DBE\u5DBF\u5DC0\u5DC1\u5DC2\u5DC3\u5DC4"+
-            "\u5DC5\u5DC6\u5DC7\u5DC8\u5DC9\u5DCA\u5DCB\u5DCC"+
-            "\u5DCD\u5DCE\u5DCF\u5DD0\u5DD1\u5DD2\u5DD3\u5DD4"+
-            "\u5DD5\u5DD6\u5DD7\u5DD8\u5DD9\u5DDA\u5DDB\u5DDC"+
-            "\u5DDD\u5DDE\u5DDF\u5DE0\u5DE1\u5DE2\u5DE3\u5DE4"+
-            "\u5DE5\u5DE6\u5DE7\u5DE8\u5DE9\u5DEA\u5DEB\u5DEC"+
-            "\u5DED\u5DEE\u5DEF\u5DF0\u5DF1\u5DF2\u5DF3\u5DF4"+
-            "\u5DF5\u5DF6\u5DF7\u5DF8\u5DF9\u5DFA\u5DFB\u5DFC"+
-            "\u5DFD\u5DFE\u5DFF\u5E00\u5E01\u5E02\u5E03\u5E04"+
-            "\u5E05\u5E06\u5E07\u5E08\u5E09\u5E0A\u5E0B\u5E0C"+
-            "\u5E0D\u5E0E\u5E0F\u5E10\u5E11\u5E12\u5E13\u5E14"+
-            "\u5E15\u5E16\u5E17\u5E18\u5E19\u5E1A\u5E1B\u5E1C"+
-            "\u5E1D\u5E1E\u5E1F\u5E20\u5E21\u5E22\u5E23\u5E24"+
-            "\u5E25\u5E26\u5E27\u5E28\u5E29\u5E2A\u5E2B\u5E2C"+
-            "\u5E2D\u5E2E\u5E2F\u5E30\u5E31\u5E32\u5E33\u5E34"+
-            "\u5E35\u5E36\u5E37\u5E38\u5E39\u5E3A\u5E3B\u5E3C"+
-            "\u5E3D\u5E3E\u5E3F\u5E40\u5E41\u5E42\u5E43\u5E44"+
-            "\u5E45\u5E46\u5E47\u5E48\u5E49\u5E4A\u5E4B\u5E4C"+
-            "\u5E4D\u5E4E\u5E4F\u5E50\u5E51\u5E52\u5E53\u5E54"+
-            "\u5E55\u5E56\u5E57\u5E58\u5E59\u5E5A\u5E5B\u5E5C"+
-            "\u5E5D\u5E5E\u5E5F\u5E60\u5E61\u5E62\u5E63\u5E64"+
-            "\u5E65\u5E66\u5E67\u5E68\u5E69\u5E6A\u5E6B\u5E6C"+
-            "\u5E6D\u5E6E\u5E6F\u5E70\u5E71\u5E72\u5E73\u5E74"+
-            "\u5E75\u5E76\u5E77\u5E78\u5E79\u5E7A\u5E7B\u5E7C"+
-            "\u5E7D\u5E7E\u5E7F\u5E80\u5E81\u5E82\u5E83\u5E84"+
-            "\u5E85\u5E86\u5E87\u5E88\u5E89\u5E8A\u5E8B\u5E8C"+
-            "\u5E8D\u5E8E\u5E8F\u5E90\u5E91\u5E92\u5E93\u5E94"+
-            "\u5E95\u5E96\u5E97\u5E98\u5E99\u5E9A\u5E9B\u5E9C"+
-            "\u5E9D\u5E9E\u5E9F\u5EA0\u5EA1\u5EA2\u5EA3\u5EA4"+
-            "\u5EA5\u5EA6\u5EA7\u5EA8\u5EA9\u5EAA\u5EAB\u5EAC"+
-            "\u5EAD\u5EAE\u5EAF\u5EB0\u5EB1\u5EB2\u5EB3\u5EB4"+
-            "\u5EB5\u5EB6\u5EB7\u5EB8\u5EB9\u5EBA\u5EBB\u5EBC"+
-            "\u5EBD\u5EBE\u5EBF\u5EC0\u5EC1\u5EC2\u5EC3\u5EC4"+
-            "\u5EC5\u5EC6\u5EC7\u5EC8\u5EC9\u5ECA\u5ECB\u5ECC"+
-            "\u5ECD\u5ECE\u5ECF\u5ED0\u5ED1\u5ED2\u5ED3\u5ED4"+
-            "\u5ED5\u5ED6\u5ED7\u5ED8\u5ED9\u5EDA\u5EDB\u5EDC"+
-            "\u5EDD\u5EDE\u5EDF\u5EE0\u5EE1\u5EE2\u5EE3\u5EE4"+
-            "\u5EE5\u5EE6\u5EE7\u5EE8\u5EE9\u5EEA\u5EEB\u5EEC"+
-            "\u5EED\u5EEE\u5EEF\u5EF0\u5EF1\u5EF2\u5EF3\u5EF4"+
-            "\u5EF5\u5EF6\u5EF7\u5EF8\u5EF9\u5EFA\u5EFB\u5EFC"+
-            "\u5EFD\u5EFE\u5EFF\u5F00\u5F01\u5F02\u5F03\u5F04"+
-            "\u5F05\u5F06\u5F07\u5F08\u5F09\u5F0A\u5F0B\u5F0C"+
-            "\u5F0D\u5F0E\u5F0F\u5F10\u5F11\u5F12\u5F13\u5F14"+
-            "\u5F15\u5F16\u5F17\u5F18\u5F19\u5F1A\u5F1B\u5F1C"+
-            "\u5F1D\u5F1E\u5F1F\u5F20\u5F21\u5F22\u5F23\u5F24"+
-            "\u5F25\u5F26\u5F27\u5F28\u5F29\u5F2A\u5F2B\u5F2C"+
-            "\u5F2D\u5F2E\u5F2F\u5F30\u5F31\u5F32\u5F33\u5F34"+
-            "\u5F35\u5F36\u5F37\u5F38\u5F39\u5F3A\u5F3B\u5F3C"+
-            "\u5F3D\u5F3E\u5F3F\u5F40\u5F41\u5F42\u5F43\u5F44"+
-            "\u5F45\u5F46\u5F47\u5F48\u5F49\u5F4A\u5F4B\u5F4C"+
-            "\u5F4D\u5F4E\u5F4F\u5F50\u5F51\u5F52\u5F53\u5F54"+
-            "\u5F55\u5F56\u5F57\u5F58\u5F59\u5F5A\u5F5B\u5F5C"+
-            "\u5F5D\u5F5E\u5F5F\u5F60\u5F61\u5F62\u5F63\u5F64"+
-            "\u5F65\u5F66\u5F67\u5F68\u5F69\u5F6A\u5F6B\u5F6C"+
-            "\u5F6D\u5F6E\u5F6F\u5F70\u5F71\u5F72\u5F73\u5F74"+
-            "\u5F75\u5F76\u5F77\u5F78\u5F79\u5F7A\u5F7B\u5F7C"+
-            "\u5F7D\u5F7E\u5F7F\u5F80\u5F81\u5F82\u5F83\u5F84"+
-            "\u5F85\u5F86\u5F87\u5F88\u5F89\u5F8A\u5F8B\u5F8C"+
-            "\u5F8D\u5F8E\u5F8F\u5F90\u5F91\u5F92\u5F93\u5F94"+
-            "\u5F95\u5F96\u5F97\u5F98\u5F99\u5F9A\u5F9B\u5F9C"+
-            "\u5F9D\u5F9E\u5F9F\u5FA0\u5FA1\u5FA2\u5FA3\u5FA4"+
-            "\u5FA5\u5FA6\u5FA7\u5FA8\u5FA9\u5FAA\u5FAB\u5FAC"+
-            "\u5FAD\u5FAE\u5FAF\u5FB0\u5FB1\u5FB2\u5FB3\u5FB4"+
-            "\u5FB5\u5FB6\u5FB7\u5FB8\u5FB9\u5FBA\u5FBB\u5FBC"+
-            "\u5FBD\u5FBE\u5FBF\u5FC0\u5FC1\u5FC2\u5FC3\u5FC4"+
-            "\u5FC5\u5FC6\u5FC7\u5FC8\u5FC9\u5FCA\u5FCB\u5FCC"+
-            "\u5FCD\u5FCE\u5FCF\u5FD0\u5FD1\u5FD2\u5FD3\u5FD4"+
-            "\u5FD5\u5FD6\u5FD7\u5FD8\u5FD9\u5FDA\u5FDB\u5FDC"+
-            "\u5FDD\u5FDE\u5FDF\u5FE0\u5FE1\u5FE2\u5FE3\u5FE4"+
-            "\u5FE5\u5FE6\u5FE7\u5FE8\u5FE9\u5FEA\u5FEB\u5FEC"+
-            "\u5FED\u5FEE\u5FEF\u5FF0\u5FF1\u5FF2\u5FF3\u5FF4"+
-            "\u5FF5\u5FF6\u5FF7\u5FF8\u5FF9\u5FFA\u5FFB\u5FFC"+
-            "\u5FFD\u5FFE\u5FFF\u6000\u6001\u6002\u6003\u6004"+
-            "\u6005\u6006\u6007\u6008\u6009\u600A\u600B\u600C"+
-            "\u600D\u600E\u600F\u6010\u6011\u6012\u6013\u6014"+
-            "\u6015\u6016\u6017\u6018\u6019\u601A\u601B\u601C"+
-            "\u601D\u601E\u601F\u6020\u6021\u6022\u6023\u6024"+
-            "\u6025\u6026\u6027\u6028\u6029\u602A\u602B\u602C"+
-            "\u602D\u602E\u602F\u6030\u6031\u6032\u6033\u6034"+
-            "\u6035\u6036\u6037\u6038\u6039\u603A\u603B\u603C"+
-            "\u603D\u603E\u603F\u6040\u6041\u6042\u6043\u6044"+
-            "\u6045\u6046\u6047\u6048\u6049\u604A\u604B\u604C"+
-            "\u604D\u604E\u604F\u6050\u6051\u6052\u6053\u6054"+
-            "\u6055\u6056\u6057\u6058\u6059\u605A\u605B\u605C"+
-            "\u605D\u605E\u605F\u6060\u6061\u6062\u6063\u6064"+
-            "\u6065\u6066\u6067\u6068\u6069\u606A\u606B\u606C"+
-            "\u606D\u606E\u606F\u6070\u6071\u6072\u6073\u6074"+
-            "\u6075\u6076\u6077\u6078\u6079\u607A\u607B\u607C"+
-            "\u607D\u607E\u607F\u6080\u6081\u6082\u6083\u6084"+
-            "\u6085\u6086\u6087\u6088\u6089\u608A\u608B\u608C"+
-            "\u608D\u608E\u608F\u6090\u6091\u6092\u6093\u6094"+
-            "\u6095\u6096\u6097\u6098\u6099\u609A\u609B\u609C"+
-            "\u609D\u609E\u609F\u60A0\u60A1\u60A2\u60A3\u60A4"+
-            "\u60A5\u60A6\u60A7\u60A8\u60A9\u60AA\u60AB\u60AC"+
-            "\u60AD\u60AE\u60AF\u60B0\u60B1\u60B2\u60B3\u60B4"+
-            "\u60B5\u60B6\u60B7\u60B8\u60B9\u60BA\u60BB\u60BC"+
-            "\u60BD\u60BE\u60BF\u60C0\u60C1\u60C2\u60C3\u60C4"+
-            "\u60C5\u60C6\u60C7\u60C8\u60C9\u60CA\u60CB\u60CC"+
-            "\u60CD\u60CE\u60CF\u60D0\u60D1\u60D2\u60D3\u60D4"+
-            "\u60D5\u60D6\u60D7\u60D8\u60D9\u60DA\u60DB\u60DC"+
-            "\u60DD\u60DE\u60DF\u60E0\u60E1\u60E2\u60E3\u60E4"+
-            "\u60E5\u60E6\u60E7\u60E8\u60E9\u60EA\u60EB\u60EC"+
-            "\u60ED\u60EE\u60EF\u60F0\u60F1\u60F2\u60F3\u60F4"+
-            "\u60F5\u60F6\u60F7\u60F8\u60F9\u60FA\u60FB\u60FC"+
-            "\u60FD\u60FE\u60FF\u6100\u6101\u6102\u6103\u6104"+
-            "\u6105\u6106\u6107\u6108\u6109\u610A\u610B\u610C"+
-            "\u610D\u610E\u610F\u6110\u6111\u6112\u6113\u6114"+
-            "\u6115\u6116\u6117\u6118\u6119\u611A\u611B\u611C"+
-            "\u611D\u611E\u611F\u6120\u6121\u6122\u6123\u6124"+
-            "\u6125\u6126\u6127\u6128\u6129\u612A\u612B\u612C"+
-            "\u612D\u612E\u612F\u6130\u6131\u6132\u6133\u6134"+
-            "\u6135\u6136\u6137\u6138\u6139\u613A\u613B\u613C"+
-            "\u613D\u613E\u613F\u6140\u6141\u6142\u6143\u6144"+
-            "\u6145\u6146\u6147\u6148\u6149\u614A\u614B\u614C"+
-            "\u614D\u614E\u614F\u6150\u6151\u6152\u6153\u6154"+
-            "\u6155\u6156\u6157\u6158\u6159\u615A\u615B\u615C"+
-            "\u615D\u615E\u615F\u6160\u6161\u6162\u6163\u6164"+
-            "\u6165\u6166\u6167\u6168\u6169\u616A\u616B\u616C"+
-            "\u616D\u616E\u616F\u6170\u6171\u6172\u6173\u6174"+
-            "\u6175\u6176\u6177\u6178\u6179\u617A\u617B\u617C"+
-            "\u617D\u617E\u617F\u6180\u6181\u6182\u6183\u6184"+
-            "\u6185\u6186\u6187\u6188\u6189\u618A\u618B\u618C"+
-            "\u618D\u618E\u618F\u6190\u6191\u6192\u6193\u6194"+
-            "\u6195\u6196\u6197\u6198\u6199\u619A\u619B\u619C"+
-            "\u619D\u619E\u619F\u61A0\u61A1\u61A2\u61A3\u61A4"+
-            "\u61A5\u61A6\u61A7\u61A8\u61A9\u61AA\u61AB\u61AC"+
-            "\u61AD\u61AE\u61AF\u61B0\u61B1\u61B2\u61B3\u61B4"+
-            "\u61B5\u61B6\u61B7\u61B8\u61B9\u61BA\u61BB\u61BC"+
-            "\u61BD\u61BE\u61BF\u61C0\u61C1\u61C2\u61C3\u61C4"+
-            "\u61C5\u61C6\u61C7\u61C8\u61C9\u61CA\u61CB\u61CC"+
-            "\u61CD\u61CE\u61CF\u61D0\u61D1\u61D2\u61D3\u61D4"+
-            "\u61D5\u61D6\u61D7\u61D8\u61D9\u61DA\u61DB\u61DC"+
-            "\u61DD\u61DE\u61DF\u61E0\u61E1\u61E2\u61E3\u61E4"+
-            "\u61E5\u61E6\u61E7\u61E8\u61E9\u61EA\u61EB\u61EC"+
-            "\u61ED\u61EE\u61EF\u61F0\u61F1\u61F2\u61F3\u61F4"+
-            "\u61F5\u61F6\u61F7\u61F8\u61F9\u61FA\u61FB\u61FC"+
-            "\u61FD\u61FE\u61FF\u6200\u6201\u6202\u6203\u6204"+
-            "\u6205\u6206\u6207\u6208\u6209\u620A\u620B\u620C"+
-            "\u620D\u620E\u620F\u6210\u6211\u6212\u6213\u6214"+
-            "\u6215\u6216\u6217\u6218\u6219\u621A\u621B\u621C"+
-            "\u621D\u621E\u621F\u6220\u6221\u6222\u6223\u6224"+
-            "\u6225\u6226\u6227\u6228\u6229\u622A\u622B\u622C"+
-            "\u622D\u622E\u622F\u6230\u6231\u6232\u6233\u6234"+
-            "\u6235\u6236\u6237\u6238\u6239\u623A\u623B\u623C"+
-            "\u623D\u623E\u623F\u6240\u6241\u6242\u6243\u6244"+
-            "\u6245\u6246\u6247\u6248\u6249\u624A\u624B\u624C"+
-            "\u624D\u624E\u624F\u6250\u6251\u6252\u6253\u6254"+
-            "\u6255\u6256\u6257\u6258\u6259\u625A\u625B\u625C"+
-            "\u625D\u625E\u625F\u6260\u6261\u6262\u6263\u6264"+
-            "\u6265\u6266\u6267\u6268\u6269\u626A\u626B\u626C"+
-            "\u626D\u626E\u626F\u6270\u6271\u6272\u6273\u6274"+
-            "\u6275\u6276\u6277\u6278\u6279\u627A\u627B\u627C"+
-            "\u627D\u627E\u627F\u6280\u6281\u6282\u6283\u6284"+
-            "\u6285\u6286\u6287\u6288\u6289\u628A\u628B\u628C"+
-            "\u628D\u628E\u628F\u6290\u6291\u6292\u6293\u6294"+
-            "\u6295\u6296\u6297\u6298\u6299\u629A\u629B\u629C"+
-            "\u629D\u629E\u629F\u62A0\u62A1\u62A2\u62A3\u62A4"+
-            "\u62A5\u62A6\u62A7\u62A8\u62A9\u62AA\u62AB\u62AC"+
-            "\u62AD\u62AE\u62AF\u62B0\u62B1\u62B2\u62B3\u62B4"+
-            "\u62B5\u62B6\u62B7\u62B8\u62B9\u62BA\u62BB\u62BC"+
-            "\u62BD\u62BE\u62BF\u62C0\u62C1\u62C2\u62C3\u62C4"+
-            "\u62C5\u62C6\u62C7\u62C8\u62C9\u62CA\u62CB\u62CC"+
-            "\u62CD\u62CE\u62CF\u62D0\u62D1\u62D2\u62D3\u62D4"+
-            "\u62D5\u62D6\u62D7\u62D8\u62D9\u62DA\u62DB\u62DC"+
-            "\u62DD\u62DE\u62DF\u62E0\u62E1\u62E2\u62E3\u62E4"+
-            "\u62E5\u62E6\u62E7\u62E8\u62E9\u62EA\u62EB\u62EC"+
-            "\u62ED\u62EE\u62EF\u62F0\u62F1\u62F2\u62F3\u62F4"+
-            "\u62F5\u62F6\u62F7\u62F8\u62F9\u62FA\u62FB\u62FC"+
-            "\u62FD\u62FE\u62FF\u6300\u6301\u6302\u6303\u6304"+
-            "\u6305\u6306\u6307\u6308\u6309\u630A\u630B\u630C"+
-            "\u630D\u630E\u630F\u6310\u6311\u6312\u6313\u6314"+
-            "\u6315\u6316\u6317\u6318\u6319\u631A\u631B\u631C"+
-            "\u631D\u631E\u631F\u6320\u6321\u6322\u6323\u6324"+
-            "\u6325\u6326\u6327\u6328\u6329\u632A\u632B\u632C"+
-            "\u632D\u632E\u632F\u6330\u6331\u6332\u6333\u6334"+
-            "\u6335\u6336\u6337\u6338\u6339\u633A\u633B\u633C"+
-            "\u633D\u633E\u633F\u6340\u6341\u6342\u6343\u6344"+
-            "\u6345\u6346\u6347\u6348\u6349\u634A\u634B\u634C"+
-            "\u634D\u634E\u634F\u6350\u6351\u6352\u6353\u6354"+
-            "\u6355\u6356\u6357\u6358\u6359\u635A\u635B\u635C"+
-            "\u635D\u635E\u635F\u6360\u6361\u6362\u6363\u6364"+
-            "\u6365\u6366\u6367\u6368\u6369\u636A\u636B\u636C"+
-            "\u636D\u636E\u636F\u6370\u6371\u6372\u6373\u6374"+
-            "\u6375\u6376\u6377\u6378\u6379\u637A\u637B\u637C"+
-            "\u637D\u637E\u637F\u6380\u6381\u6382\u6383\u6384"+
-            "\u6385\u6386\u6387\u6388\u6389\u638A\u638B\u638C"+
-            "\u638D\u638E\u638F\u6390\u6391\u6392\u6393\u6394"+
-            "\u6395\u6396\u6397\u6398\u6399\u639A\u639B\u639C"+
-            "\u639D\u639E\u639F\u63A0\u63A1\u63A2\u63A3\u63A4"+
-            "\u63A5\u63A6\u63A7\u63A8\u63A9\u63AA\u63AB\u63AC"+
-            "\u63AD\u63AE\u63AF\u63B0\u63B1\u63B2\u63B3\u63B4"+
-            "\u63B5\u63B6\u63B7\u63B8\u63B9\u63BA\u63BB\u63BC"+
-            "\u63BD\u63BE\u63BF\u63C0\u63C1\u63C2\u63C3\u63C4"+
-            "\u63C5\u63C6\u63C7\u63C8\u63C9\u63CA\u63CB\u63CC"+
-            "\u63CD\u63CE\u63CF\u63D0\u63D1\u63D2\u63D3\u63D4"+
-            "\u63D5\u63D6\u63D7\u63D8\u63D9\u63DA\u63DB\u63DC"+
-            "\u63DD\u63DE\u63DF\u63E0\u63E1\u63E2\u63E3\u63E4"+
-            "\u63E5\u63E6\u63E7\u63E8\u63E9\u63EA\u63EB\u63EC"+
-            "\u63ED\u63EE\u63EF\u63F0\u63F1\u63F2\u63F3\u63F4"+
-            "\u63F5\u63F6\u63F7\u63F8\u63F9\u63FA\u63FB\u63FC"+
-            "\u63FD\u63FE\u63FF\u6400\u6401\u6402\u6403\u6404"+
-            "\u6405\u6406\u6407\u6408\u6409\u640A\u640B\u640C"+
-            "\u640D\u640E\u640F\u6410\u6411\u6412\u6413\u6414"+
-            "\u6415\u6416\u6417\u6418\u6419\u641A\u641B\u641C"+
-            "\u641D\u641E\u641F\u6420\u6421\u6422\u6423\u6424"+
-            "\u6425\u6426\u6427\u6428\u6429\u642A\u642B\u642C"+
-            "\u642D\u642E\u642F\u6430\u6431\u6432\u6433\u6434"+
-            "\u6435\u6436\u6437\u6438\u6439\u643A\u643B\u643C"+
-            "\u643D\u643E\u643F\u6440\u6441\u6442\u6443\u6444"+
-            "\u6445\u6446\u6447\u6448\u6449\u644A\u644B\u644C"+
-            "\u644D\u644E\u644F\u6450\u6451\u6452\u6453\u6454"+
-            "\u6455\u6456\u6457\u6458\u6459\u645A\u645B\u645C"+
-            "\u645D\u645E\u645F\u6460\u6461\u6462\u6463\u6464"+
-            "\u6465\u6466\u6467\u6468\u6469\u646A\u646B\u646C"+
-            "\u646D\u646E\u646F\u6470\u6471\u6472\u6473\u6474"+
-            "\u6475\u6476\u6477\u6478\u6479\u647A\u647B\u647C"+
-            "\u647D\u647E\u647F\u6480\u6481\u6482\u6483\u6484"+
-            "\u6485\u6486\u6487\u6488\u6489\u648A\u648B\u648C"+
-            "\u648D\u648E\u648F\u6490\u6491\u6492\u6493\u6494"+
-            "\u6495\u6496\u6497\u6498\u6499\u649A\u649B\u649C"+
-            "\u649D\u649E\u649F\u64A0\u64A1\u64A2\u64A3\u64A4"+
-            "\u64A5\u64A6\u64A7\u64A8\u64A9\u64AA\u64AB\u64AC"+
-            "\u64AD\u64AE\u64AF\u64B0\u64B1\u64B2\u64B3\u64B4"+
-            "\u64B5\u64B6\u64B7\u64B8\u64B9\u64BA\u64BB\u64BC"+
-            "\u64BD\u64BE\u64BF\u64C0\u64C1\u64C2\u64C3\u64C4"+
-            "\u64C5\u64C6\u64C7\u64C8\u64C9\u64CA\u64CB\u64CC"+
-            "\u64CD\u64CE\u64CF\u64D0\u64D1\u64D2\u64D3\u64D4"+
-            "\u64D5\u64D6\u64D7\u64D8\u64D9\u64DA\u64DB\u64DC"+
-            "\u64DD\u64DE\u64DF\u64E0\u64E1\u64E2\u64E3\u64E4"+
-            "\u64E5\u64E6\u64E7\u64E8\u64E9\u64EA\u64EB\u64EC"+
-            "\u64ED\u64EE\u64EF\u64F0\u64F1\u64F2\u64F3\u64F4"+
-            "\u64F5\u64F6\u64F7\u64F8\u64F9\u64FA\u64FB\u64FC"+
-            "\u64FD\u64FE\u64FF\u6500\u6501\u6502\u6503\u6504"+
-            "\u6505\u6506\u6507\u6508\u6509\u650A\u650B\u650C"+
-            "\u650D\u650E\u650F\u6510\u6511\u6512\u6513\u6514"+
-            "\u6515\u6516\u6517\u6518\u6519\u651A\u651B\u651C"+
-            "\u651D\u651E\u651F\u6520\u6521\u6522\u6523\u6524"+
-            "\u6525\u6526\u6527\u6528\u6529\u652A\u652B\u652C"+
-            "\u652D\u652E\u652F\u6530\u6531\u6532\u6533\u6534"+
-            "\u6535\u6536\u6537\u6538\u6539\u653A\u653B\u653C"+
-            "\u653D\u653E\u653F\u6540\u6541\u6542\u6543\u6544"+
-            "\u6545\u6546\u6547\u6548\u6549\u654A\u654B\u654C"+
-            "\u654D\u654E\u654F\u6550\u6551\u6552\u6553\u6554"+
-            "\u6555\u6556\u6557\u6558\u6559\u655A\u655B\u655C"+
-            "\u655D\u655E\u655F\u6560\u6561\u6562\u6563\u6564"+
-            "\u6565\u6566\u6567\u6568\u6569\u656A\u656B\u656C"+
-            "\u656D\u656E\u656F\u6570\u6571\u6572\u6573\u6574"+
-            "\u6575\u6576\u6577\u6578\u6579\u657A\u657B\u657C"+
-            "\u657D\u657E\u657F\u6580\u6581\u6582\u6583\u6584"+
-            "\u6585\u6586\u6587\u6588\u6589\u658A\u658B\u658C"+
-            "\u658D\u658E\u658F\u6590\u6591\u6592\u6593\u6594"+
-            "\u6595\u6596\u6597\u6598\u6599\u659A\u659B\u659C"+
-            "\u659D\u659E\u659F\u65A0\u65A1\u65A2\u65A3\u65A4"+
-            "\u65A5\u65A6\u65A7\u65A8\u65A9\u65AA\u65AB\u65AC"+
-            "\u65AD\u65AE\u65AF\u65B0\u65B1\u65B2\u65B3\u65B4"+
-            "\u65B5\u65B6\u65B7\u65B8\u65B9\u65BA\u65BB\u65BC"+
-            "\u65BD\u65BE\u65BF\u65C0\u65C1\u65C2\u65C3\u65C4"+
-            "\u65C5\u65C6\u65C7\u65C8\u65C9\u65CA\u65CB\u65CC"+
-            "\u65CD\u65CE\u65CF\u65D0\u65D1\u65D2\u65D3\u65D4"+
-            "\u65D5\u65D6\u65D7\u65D8\u65D9\u65DA\u65DB\u65DC"+
-            "\u65DD\u65DE\u65DF\u65E0\u65E1\u65E2\u65E3\u65E4"+
-            "\u65E5\u65E6\u65E7\u65E8\u65E9\u65EA\u65EB\u65EC"+
-            "\u65ED\u65EE\u65EF\u65F0\u65F1\u65F2\u65F3\u65F4"+
-            "\u65F5\u65F6\u65F7\u65F8\u65F9\u65FA\u65FB\u65FC"+
-            "\u65FD\u65FE\u65FF\u6600\u6601\u6602\u6603\u6604"+
-            "\u6605\u6606\u6607\u6608\u6609\u660A\u660B\u660C"+
-            "\u660D\u660E\u660F\u6610\u6611\u6612\u6613\u6614"+
-            "\u6615\u6616\u6617\u6618\u6619\u661A\u661B\u661C"+
-            "\u661D\u661E\u661F\u6620\u6621\u6622\u6623\u6624"+
-            "\u6625\u6626\u6627\u6628\u6629\u662A\u662B\u662C"+
-            "\u662D\u662E\u662F\u6630\u6631\u6632\u6633\u6634"+
-            "\u6635\u6636\u6637\u6638\u6639\u663A\u663B\u663C"+
-            "\u663D\u663E\u663F\u6640\u6641\u6642\u6643\u6644"+
-            "\u6645\u6646\u6647\u6648\u6649\u664A\u664B\u664C"+
-            "\u664D\u664E\u664F\u6650\u6651\u6652\u6653\u6654"+
-            "\u6655\u6656\u6657\u6658\u6659\u665A\u665B\u665C"+
-            "\u665D\u665E\u665F\u6660\u6661\u6662\u6663\u6664"+
-            "\u6665\u6666\u6667\u6668\u6669\u666A\u666B\u666C"+
-            "\u666D\u666E\u666F\u6670\u6671\u6672\u6673\u6674"+
-            "\u6675\u6676\u6677\u6678\u6679\u667A\u667B\u667C"+
-            "\u667D\u667E\u667F\u6680\u6681\u6682\u6683\u6684"+
-            "\u6685\u6686\u6687\u6688\u6689\u668A\u668B\u668C"+
-            "\u668D\u668E\u668F\u6690\u6691\u6692\u6693\u6694"+
-            "\u6695\u6696\u6697\u6698\u6699\u669A\u669B\u669C"+
-            "\u669D\u669E\u669F\u66A0\u66A1\u66A2\u66A3\u66A4"+
-            "\u66A5\u66A6\u66A7\u66A8\u66A9\u66AA\u66AB\u66AC"+
-            "\u66AD\u66AE\u66AF\u66B0\u66B1\u66B2\u66B3\u66B4"+
-            "\u66B5\u66B6\u66B7\u66B8\u66B9\u66BA\u66BB\u66BC"+
-            "\u66BD\u66BE\u66BF\u66C0\u66C1\u66C2\u66C3\u66C4"+
-            "\u66C5\u66C6\u66C7\u66C8\u66C9\u66CA\u66CB\u66CC"+
-            "\u66CD\u66CE\u66CF\u66D0\u66D1\u66D2\u66D3\u66D4"+
-            "\u66D5\u66D6\u66D7\u66D8\u66D9\u66DA\u66DB\u66DC"+
-            "\u66DD\u66DE\u66DF\u66E0\u66E1\u66E2\u66E3\u66E4"+
-            "\u66E5\u66E6\u66E7\u66E8\u66E9\u66EA\u66EB\u66EC"+
-            "\u66ED\u66EE\u66EF\u66F0\u66F1\u66F2\u66F3\u66F4"+
-            "\u66F5\u66F6\u66F7\u66F8\u66F9\u66FA\u66FB\u66FC"+
-            "\u66FD\u66FE\u66FF\u6700\u6701\u6702\u6703\u6704"+
-            "\u6705\u6706\u6707\u6708\u6709\u670A\u670B\u670C"+
-            "\u670D\u670E\u670F\u6710\u6711\u6712\u6713\u6714"+
-            "\u6715\u6716\u6717\u6718\u6719\u671A\u671B\u671C"+
-            "\u671D\u671E\u671F\u6720\u6721\u6722\u6723\u6724"+
-            "\u6725\u6726\u6727\u6728\u6729\u672A\u672B\u672C"+
-            "\u672D\u672E\u672F\u6730\u6731\u6732\u6733\u6734"+
-            "\u6735\u6736\u6737\u6738\u6739\u673A\u673B\u673C"+
-            "\u673D\u673E\u673F\u6740\u6741\u6742\u6743\u6744"+
-            "\u6745\u6746\u6747\u6748\u6749\u674A\u674B\u674C"+
-            "\u674D\u674E\u674F\u6750\u6751\u6752\u6753\u6754"+
-            "\u6755\u6756\u6757\u6758\u6759\u675A\u675B\u675C"+
-            "\u675D\u675E\u675F\u6760\u6761\u6762\u6763\u6764"+
-            "\u6765\u6766\u6767\u6768\u6769\u676A\u676B\u676C"+
-            "\u676D\u676E\u676F\u6770\u6771\u6772\u6773\u6774"+
-            "\u6775\u6776\u6777\u6778\u6779\u677A\u677B\u677C"+
-            "\u677D\u677E\u677F\u6780\u6781\u6782\u6783\u6784"+
-            "\u6785\u6786\u6787\u6788\u6789\u678A\u678B\u678C"+
-            "\u678D\u678E\u678F\u6790\u6791\u6792\u6793\u6794"+
-            "\u6795\u6796\u6797\u6798\u6799\u679A\u679B\u679C"+
-            "\u679D\u679E\u679F\u67A0\u67A1\u67A2\u67A3\u67A4"+
-            "\u67A5\u67A6\u67A7\u67A8\u67A9\u67AA\u67AB\u67AC"+
-            "\u67AD\u67AE\u67AF\u67B0\u67B1\u67B2\u67B3\u67B4"+
-            "\u67B5\u67B6\u67B7\u67B8\u67B9\u67BA\u67BB\u67BC"+
-            "\u67BD\u67BE\u67BF\u67C0\u67C1\u67C2\u67C3\u67C4"+
-            "\u67C5\u67C6\u67C7\u67C8\u67C9\u67CA\u67CB\u67CC"+
-            "\u67CD\u67CE\u67CF\u67D0\u67D1\u67D2\u67D3\u67D4"+
-            "\u67D5\u67D6\u67D7\u67D8\u67D9\u67DA\u67DB\u67DC"+
-            "\u67DD\u67DE\u67DF\u67E0\u67E1\u67E2\u67E3\u67E4"+
-            "\u67E5\u67E6\u67E7\u67E8\u67E9\u67EA\u67EB\u67EC"+
-            "\u67ED\u67EE\u67EF\u67F0\u67F1\u67F2\u67F3\u67F4"+
-            "\u67F5\u67F6\u67F7\u67F8\u67F9\u67FA\u67FB\u67FC"+
-            "\u67FD\u67FE\u67FF\u6800\u6801\u6802\u6803\u6804"+
-            "\u6805\u6806\u6807\u6808\u6809\u680A\u680B\u680C"+
-            "\u680D\u680E\u680F\u6810\u6811\u6812\u6813\u6814"+
-            "\u6815\u6816\u6817\u6818\u6819\u681A\u681B\u681C"+
-            "\u681D\u681E\u681F\u6820\u6821\u6822\u6823\u6824"+
-            "\u6825\u6826\u6827\u6828\u6829\u682A\u682B\u682C"+
-            "\u682D\u682E\u682F\u6830\u6831\u6832\u6833\u6834"+
-            "\u6835\u6836\u6837\u6838\u6839\u683A\u683B\u683C"+
-            "\u683D\u683E\u683F\u6840\u6841\u6842\u6843\u6844"+
-            "\u6845\u6846\u6847\u6848\u6849\u684A\u684B\u684C"+
-            "\u684D\u684E\u684F\u6850\u6851\u6852\u6853\u6854"+
-            "\u6855\u6856\u6857\u6858\u6859\u685A\u685B\u685C"+
-            "\u685D\u685E\u685F\u6860\u6861\u6862\u6863\u6864"+
-            "\u6865\u6866\u6867\u6868\u6869\u686A\u686B\u686C"+
-            "\u686D\u686E\u686F\u6870\u6871\u6872\u6873\u6874"+
-            "\u6875\u6876\u6877\u6878\u6879\u687A\u687B\u687C"+
-            "\u687D\u687E\u687F\u6880\u6881\u6882\u6883\u6884"+
-            "\u6885\u6886\u6887\u6888\u6889\u688A\u688B\u688C"+
-            "\u688D\u688E\u688F\u6890\u6891\u6892\u6893\u6894"+
-            "\u6895\u6896\u6897\u6898\u6899\u689A\u689B\u689C"+
-            "\u689D\u689E\u689F\u68A0\u68A1\u68A2\u68A3\u68A4"+
-            "\u68A5\u68A6\u68A7\u68A8\u68A9\u68AA\u68AB\u68AC"+
-            "\u68AD\u68AE\u68AF\u68B0\u68B1\u68B2\u68B3\u68B4"+
-            "\u68B5\u68B6\u68B7\u68B8\u68B9\u68BA\u68BB\u68BC"+
-            "\u68BD\u68BE\u68BF\u68C0\u68C1\u68C2\u68C3\u68C4"+
-            "\u68C5\u68C6\u68C7\u68C8\u68C9\u68CA\u68CB\u68CC"+
-            "\u68CD\u68CE\u68CF\u68D0\u68D1\u68D2\u68D3\u68D4"+
-            "\u68D5\u68D6\u68D7\u68D8\u68D9\u68DA\u68DB\u68DC"+
-            "\u68DD\u68DE\u68DF\u68E0\u68E1\u68E2\u68E3\u68E4"+
-            "\u68E5\u68E6\u68E7\u68E8\u68E9\u68EA\u68EB\u68EC"+
-            "\u68ED\u68EE\u68EF\u68F0\u68F1\u68F2\u68F3\u68F4"+
-            "\u68F5\u68F6\u68F7\u68F8\u68F9\u68FA\u68FB\u68FC"+
-            "\u68FD\u68FE\u68FF\u6900\u6901\u6902\u6903\u6904"+
-            "\u6905\u6906\u6907\u6908\u6909\u690A\u690B\u690C"+
-            "\u690D\u690E\u690F\u6910\u6911\u6912\u6913\u6914"+
-            "\u6915\u6916\u6917\u6918\u6919\u691A\u691B\u691C"+
-            "\u691D\u691E\u691F\u6920\u6921\u6922\u6923\u6924"+
-            "\u6925\u6926\u6927\u6928\u6929\u692A\u692B\u692C"+
-            "\u692D\u692E\u692F\u6930\u6931\u6932\u6933\u6934"+
-            "\u6935\u6936\u6937\u6938\u6939\u693A\u693B\u693C"+
-            "\u693D\u693E\u693F\u6940\u6941\u6942\u6943\u6944"+
-            "\u6945\u6946\u6947\u6948\u6949\u694A\u694B\u694C"+
-            "\u694D\u694E\u694F\u6950\u6951\u6952\u6953\u6954"+
-            "\u6955\u6956\u6957\u6958\u6959\u695A\u695B\u695C"+
-            "\u695D\u695E\u695F\u6960\u6961\u6962\u6963\u6964"+
-            "\u6965\u6966\u6967\u6968\u6969\u696A\u696B\u696C"+
-            "\u696D\u696E\u696F\u6970\u6971\u6972\u6973\u6974"+
-            "\u6975\u6976\u6977\u6978\u6979\u697A\u697B\u697C"+
-            "\u697D\u697E\u697F\u6980\u6981\u6982\u6983\u6984"+
-            "\u6985\u6986\u6987\u6988\u6989\u698A\u698B\u698C"+
-            "\u698D\u698E\u698F\u6990\u6991\u6992\u6993\u6994"+
-            "\u6995\u6996\u6997\u6998\u6999\u699A\u699B\u699C"+
-            "\u699D\u699E\u699F\u69A0\u69A1\u69A2\u69A3\u69A4"+
-            "\u69A5\u69A6\u69A7\u69A8\u69A9\u69AA\u69AB\u69AC"+
-            "\u69AD\u69AE\u69AF\u69B0\u69B1\u69B2\u69B3\u69B4"+
-            "\u69B5\u69B6\u69B7\u69B8\u69B9\u69BA\u69BB\u69BC"+
-            "\u69BD\u69BE\u69BF\u69C0\u69C1\u69C2\u69C3\u69C4"+
-            "\u69C5\u69C6\u69C7\u69C8\u69C9\u69CA\u69CB\u69CC"+
-            "\u69CD\u69CE\u69CF\u69D0\u69D1\u69D2\u69D3\u69D4"+
-            "\u69D5\u69D6\u69D7\u69D8\u69D9\u69DA\u69DB\u69DC"+
-            "\u69DD\u69DE\u69DF\u69E0\u69E1\u69E2\u69E3\u69E4"+
-            "\u69E5\u69E6\u69E7\u69E8\u69E9\u69EA\u69EB\u69EC"+
-            "\u69ED\u69EE\u69EF\u69F0\u69F1\u69F2\u69F3\u69F4"+
-            "\u69F5\u69F6\u69F7\u69F8\u69F9\u69FA\u69FB\u69FC"+
-            "\u69FD\u69FE\u69FF\u6A00\u6A01\u6A02\u6A03\u6A04"+
-            "\u6A05\u6A06\u6A07\u6A08\u6A09\u6A0A\u6A0B\u6A0C"+
-            "\u6A0D\u6A0E\u6A0F\u6A10\u6A11\u6A12\u6A13\u6A14"+
-            "\u6A15\u6A16\u6A17\u6A18\u6A19\u6A1A\u6A1B\u6A1C"+
-            "\u6A1D\u6A1E\u6A1F\u6A20\u6A21\u6A22\u6A23\u6A24"+
-            "\u6A25\u6A26\u6A27\u6A28\u6A29\u6A2A\u6A2B\u6A2C"+
-            "\u6A2D\u6A2E\u6A2F\u6A30\u6A31\u6A32\u6A33\u6A34"+
-            "\u6A35\u6A36\u6A37\u6A38\u6A39\u6A3A\u6A3B\u6A3C"+
-            "\u6A3D\u6A3E\u6A3F\u6A40\u6A41\u6A42\u6A43\u6A44"+
-            "\u6A45\u6A46\u6A47\u6A48\u6A49\u6A4A\u6A4B\u6A4C"+
-            "\u6A4D\u6A4E\u6A4F\u6A50\u6A51\u6A52\u6A53\u6A54"+
-            "\u6A55\u6A56\u6A57\u6A58\u6A59\u6A5A\u6A5B\u6A5C"+
-            "\u6A5D\u6A5E\u6A5F\u6A60\u6A61\u6A62\u6A63\u6A64"+
-            "\u6A65\u6A66\u6A67\u6A68\u6A69\u6A6A\u6A6B\u6A6C"+
-            "\u6A6D\u6A6E\u6A6F\u6A70\u6A71\u6A72\u6A73\u6A74"+
-            "\u6A75\u6A76\u6A77\u6A78\u6A79\u6A7A\u6A7B\u6A7C"+
-            "\u6A7D\u6A7E\u6A7F\u6A80\u6A81\u6A82\u6A83\u6A84"+
-            "\u6A85\u6A86\u6A87\u6A88\u6A89\u6A8A\u6A8B\u6A8C"+
-            "\u6A8D\u6A8E\u6A8F\u6A90\u6A91\u6A92\u6A93\u6A94"+
-            "\u6A95\u6A96\u6A97\u6A98\u6A99\u6A9A\u6A9B\u6A9C"+
-            "\u6A9D\u6A9E\u6A9F\u6AA0\u6AA1\u6AA2\u6AA3\u6AA4"+
-            "\u6AA5\u6AA6\u6AA7\u6AA8\u6AA9\u6AAA\u6AAB\u6AAC"+
-            "\u6AAD\u6AAE\u6AAF\u6AB0\u6AB1\u6AB2\u6AB3\u6AB4"+
-            "\u6AB5\u6AB6\u6AB7\u6AB8\u6AB9\u6ABA\u6ABB\u6ABC";
-
-        private final static String innerIndex7=
-            "\u6ABD\u6ABE\u6ABF\u6AC0\u6AC1\u6AC2\u6AC3\u6AC4"+
-            "\u6AC5\u6AC6\u6AC7\u6AC8\u6AC9\u6ACA\u6ACB\u6ACC"+
-            "\u6ACD\u6ACE\u6ACF\u6AD0\u6AD1\u6AD2\u6AD3\u6AD4"+
-            "\u6AD5\u6AD6\u6AD7\u6AD8\u6AD9\u6ADA\u6ADB\u6ADC"+
-            "\u6ADD\u6ADE\u6ADF\u6AE0\u6AE1\u6AE2\u6AE3\u6AE4"+
-            "\u6AE5\u6AE6\u6AE7\u6AE8\u6AE9\u6AEA\u6AEB\u6AEC"+
-            "\u6AED\u6AEE\u6AEF\u6AF0\u6AF1\u6AF2\u6AF3\u6AF4"+
-            "\u6AF5\u6AF6\u6AF7\u6AF8\u6AF9\u6AFA\u6AFB\u6AFC"+
-            "\u6AFD\u6AFE\u6AFF\u6B00\u6B01\u6B02\u6B03\u6B04"+
-            "\u6B05\u6B06\u6B07\u6B08\u6B09\u6B0A\u6B0B\u6B0C"+
-            "\u6B0D\u6B0E\u6B0F\u6B10\u6B11\u6B12\u6B13\u6B14"+
-            "\u6B15\u6B16\u6B17\u6B18\u6B19\u6B1A\u6B1B\u6B1C"+
-            "\u6B1D\u6B1E\u6B1F\u6B20\u6B21\u6B22\u6B23\u6B24"+
-            "\u6B25\u6B26\u6B27\u6B28\u6B29\u6B2A\u6B2B\u6B2C"+
-            "\u6B2D\u6B2E\u6B2F\u6B30\u6B31\u6B32\u6B33\u6B34"+
-            "\u6B35\u6B36\u6B37\u6B38\u6B39\u6B3A\u6B3B\u6B3C"+
-            "\u6B3D\u6B3E\u6B3F\u6B40\u6B41\u6B42\u6B43\u6B44"+
-            "\u6B45\u6B46\u6B47\u6B48\u6B49\u6B4A\u6B4B\u6B4C"+
-            "\u6B4D\u6B4E\u6B4F\u6B50\u6B51\u6B52\u6B53\u6B54"+
-            "\u6B55\u6B56\u6B57\u6B58\u6B59\u6B5A\u6B5B\u6B5C"+
-            "\u6B5D\u6B5E\u6B5F\u6B60\u6B61\u6B62\u6B63\u6B64"+
-            "\u6B65\u6B66\u6B67\u6B68\u6B69\u6B6A\u6B6B\u6B6C"+
-            "\u6B6D\u6B6E\u6B6F\u6B70\u6B71\u6B72\u6B73\u6B74"+
-            "\u6B75\u6B76\u6B77\u6B78\u6B79\u6B7A\u6B7B\u6B7C"+
-            "\u6B7D\u6B7E\u6B7F\u6B80\u6B81\u6B82\u6B83\u6B84"+
-            "\u6B85\u6B86\u6B87\u6B88\u6B89\u6B8A\u6B8B\u6B8C"+
-            "\u6B8D\u6B8E\u6B8F\u6B90\u6B91\u6B92\u6B93\u6B94"+
-            "\u6B95\u6B96\u6B97\u6B98\u6B99\u6B9A\u6B9B\u6B9C"+
-            "\u6B9D\u6B9E\u6B9F\u6BA0\u6BA1\u6BA2\u6BA3\u6BA4"+
-            "\u6BA5\u6BA6\u6BA7\u6BA8\u6BA9\u6BAA\u6BAB\u6BAC"+
-            "\u6BAD\u6BAE\u6BAF\u6BB0\u6BB1\u6BB2\u6BB3\u6BB4"+
-            "\u6BB5\u6BB6\u6BB7\u6BB8\u6BB9\u6BBA\u6BBB\u6BBC"+
-            "\u6BBD\u6BBE\u6BBF\u6BC0\u6BC1\u6BC2\u6BC3\u6BC4"+
-            "\u6BC5\u6BC6\u6BC7\u6BC8\u6BC9\u6BCA\u6BCB\u6BCC"+
-            "\u6BCD\u6BCE\u6BCF\u6BD0\u6BD1\u6BD2\u6BD3\u6BD4"+
-            "\u6BD5\u6BD6\u6BD7\u6BD8\u6BD9\u6BDA\u6BDB\u6BDC"+
-            "\u6BDD\u6BDE\u6BDF\u6BE0\u6BE1\u6BE2\u6BE3\u6BE4"+
-            "\u6BE5\u6BE6\u6BE7\u6BE8\u6BE9\u6BEA\u6BEB\u6BEC"+
-            "\u6BED\u6BEE\u6BEF\u6BF0\u6BF1\u6BF2\u6BF3\u6BF4"+
-            "\u6BF5\u6BF6\u6BF7\u6BF8\u6BF9\u6BFA\u6BFB\u6BFC"+
-            "\u6BFD\u6BFE\u6BFF\u6C00\u6C01\u6C02\u6C03\u6C04"+
-            "\u6C05\u6C06\u6C07\u6C08\u6C09\u6C0A\u6C0B\u6C0C"+
-            "\u6C0D\u6C0E\u6C0F\u6C10\u6C11\u6C12\u6C13\u6C14"+
-            "\u6C15\u6C16\u6C17\u6C18\u6C19\u6C1A\u6C1B\u6C1C"+
-            "\u6C1D\u6C1E\u6C1F\u6C20\u6C21\u6C22\u6C23\u6C24"+
-            "\u6C25\u6C26\u6C27\u6C28\u6C29\u6C2A\u6C2B\u6C2C"+
-            "\u6C2D\u6C2E\u6C2F\u6C30\u6C31\u6C32\u6C33\u6C34"+
-            "\u6C35\u6C36\u6C37\u6C38\u6C39\u6C3A\u6C3B\u6C3C"+
-            "\u6C3D\u6C3E\u6C3F\u6C40\u6C41\u6C42\u6C43\u6C44"+
-            "\u6C45\u6C46\u6C47\u6C48\u6C49\u6C4A\u6C4B\u6C4C"+
-            "\u6C4D\u6C4E\u6C4F\u6C50\u6C51\u6C52\u6C53\u6C54"+
-            "\u6C55\u6C56\u6C57\u6C58\u6C59\u6C5A\u6C5B\u6C5C"+
-            "\u6C5D\u6C5E\u6C5F\u6C60\u6C61\u6C62\u6C63\u6C64"+
-            "\u6C65\u6C66\u6C67\u6C68\u6C69\u6C6A\u6C6B\u6C6C"+
-            "\u6C6D\u6C6E\u6C6F\u6C70\u6C71\u6C72\u6C73\u6C74"+
-            "\u6C75\u6C76\u6C77\u6C78\u6C79\u6C7A\u6C7B\u6C7C"+
-            "\u6C7D\u6C7E\u6C7F\u6C80\u6C81\u6C82\u6C83\u6C84"+
-            "\u6C85\u6C86\u6C87\u6C88\u6C89\u6C8A\u6C8B\u6C8C"+
-            "\u6C8D\u6C8E\u6C8F\u6C90\u6C91\u6C92\u6C93\u6C94"+
-            "\u6C95\u6C96\u6C97\u6C98\u6C99\u6C9A\u6C9B\u6C9C"+
-            "\u6C9D\u6C9E\u6C9F\u6CA0\u6CA1\u6CA2\u6CA3\u6CA4"+
-            "\u6CA5\u6CA6\u6CA7\u6CA8\u6CA9\u6CAA\u6CAB\u6CAC"+
-            "\u6CAD\u6CAE\u6CAF\u6CB0\u6CB1\u6CB2\u6CB3\u6CB4"+
-            "\u6CB5\u6CB6\u6CB7\u6CB8\u6CB9\u6CBA\u6CBB\u6CBC"+
-            "\u6CBD\u6CBE\u6CBF\u6CC0\u6CC1\u6CC2\u6CC3\u6CC4"+
-            "\u6CC5\u6CC6\u6CC7\u6CC8\u6CC9\u6CCA\u6CCB\u6CCC"+
-            "\u6CCD\u6CCE\u6CCF\u6CD0\u6CD1\u6CD2\u6CD3\u6CD4"+
-            "\u6CD5\u6CD6\u6CD7\u6CD8\u6CD9\u6CDA\u6CDB\u6CDC"+
-            "\u6CDD\u6CDE\u6CDF\u6CE0\u6CE1\u6CE2\u6CE3\u6CE4"+
-            "\u6CE5\u6CE6\u6CE7\u6CE8\u6CE9\u6CEA\u6CEB\u6CEC"+
-            "\u6CED\u6CEE\u6CEF\u6CF0\u6CF1\u6CF2\u6CF3\u6CF4"+
-            "\u6CF5\u6CF6\u6CF7\u6CF8\u6CF9\u6CFA\u6CFB\u6CFC"+
-            "\u6CFD\u6CFE\u6CFF\u6D00\u6D01\u6D02\u6D03\u6D04"+
-            "\u6D05\u6D06\u6D07\u6D08\u6D09\u6D0A\u6D0B\u6D0C"+
-            "\u6D0D\u6D0E\u6D0F\u6D10\u6D11\u6D12\u6D13\u6D14"+
-            "\u6D15\u6D16\u6D17\u6D18\u6D19\u6D1A\u6D1B\u6D1C"+
-            "\u6D1D\u6D1E\u6D1F\u6D20\u6D21\u6D22\u6D23\u6D24"+
-            "\u6D25\u6D26\u6D27\u6D28\u6D29\u6D2A\u6D2B\u6D2C"+
-            "\u6D2D\u6D2E\u6D2F\u6D30\u6D31\u6D32\u6D33\u6D34"+
-            "\u6D35\u6D36\u6D37\u6D38\u6D39\u6D3A\u6D3B\u6D3C"+
-            "\u6D3D\u6D3E\u6D3F\u6D40\u6D41\u6D42\u6D43\u6D44"+
-            "\u6D45\u6D46\u6D47\u6D48\u6D49\u6D4A\u6D4B\u6D4C"+
-            "\u6D4D\u6D4E\u6D4F\u6D50\u6D51\u6D52\u6D53\u6D54"+
-            "\u6D55\u6D56\u6D57\u6D58\u6D59\u6D5A\u6D5B\u6D5C"+
-            "\u6D5D\u6D5E\u6D5F\u6D60\u6D61\u6D62\u6D63\u6D64"+
-            "\u6D65\u6D66\u6D67\u6D68\u6D69\u6D6A\u6D6B\u6D6C"+
-            "\u6D6D\u6D6E\u6D6F\u6D70\u6D71\u6D72\u6D73\u6D74"+
-            "\u6D75\u6D76\u6D77\u6D78\u6D79\u6D7A\u6D7B\u6D7C"+
-            "\u6D7D\u6D7E\u6D7F\u6D80\u6D81\u6D82\u6D83\u6D84"+
-            "\u6D85\u6D86\u6D87\u6D88\u6D89\u6D8A\u6D8B\u6D8C"+
-            "\u6D8D\u6D8E\u6D8F\u6D90\u6D91\u6D92\u6D93\u6D94"+
-            "\u6D95\u6D96\u6D97\u6D98\u6D99\u6D9A\u6D9B\u6D9C"+
-            "\u6D9D\u6D9E\u6D9F\u6DA0\u6DA1\u6DA2\u6DA3\u6DA4"+
-            "\u6DA5\u6DA6\u6DA7\u6DA8\u6DA9\u6DAA\u6DAB\u6DAC"+
-            "\u6DAD\u6DAE\u6DAF\u6DB0\u6DB1\u6DB2\u6DB3\u6DB4"+
-            "\u6DB5\u6DB6\u6DB7\u6DB8\u6DB9\u6DBA\u6DBB\u6DBC"+
-            "\u6DBD\u6DBE\u6DBF\u6DC0\u6DC1\u6DC2\u6DC3\u6DC4"+
-            "\u6DC5\u6DC6\u6DC7\u6DC8\u6DC9\u6DCA\u6DCB\u6DCC"+
-            "\u6DCD\u6DCE\u6DCF\u6DD0\u6DD1\u6DD2\u6DD3\u6DD4"+
-            "\u6DD5\u6DD6\u6DD7\u6DD8\u6DD9\u6DDA\u6DDB\u6DDC"+
-            "\u6DDD\u6DDE\u6DDF\u6DE0\u6DE1\u6DE2\u6DE3\u6DE4"+
-            "\u6DE5\u6DE6\u6DE7\u6DE8\u6DE9\u6DEA\u6DEB\u6DEC"+
-            "\u6DED\u6DEE\u6DEF\u6DF0\u6DF1\u6DF2\u6DF3\u6DF4"+
-            "\u6DF5\u6DF6\u6DF7\u6DF8\u6DF9\u6DFA\u6DFB\u6DFC"+
-            "\u6DFD\u6DFE\u6DFF\u6E00\u6E01\u6E02\u6E03\u6E04"+
-            "\u6E05\u6E06\u6E07\u6E08\u6E09\u6E0A\u6E0B\u6E0C"+
-            "\u6E0D\u6E0E\u6E0F\u6E10\u6E11\u6E12\u6E13\u6E14"+
-            "\u6E15\u6E16\u6E17\u6E18\u6E19\u6E1A\u6E1B\u6E1C"+
-            "\u6E1D\u6E1E\u6E1F\u6E20\u6E21\u6E22\u6E23\u6E24"+
-            "\u6E25\u6E26\u6E27\u6E28\u6E29\u6E2A\u6E2B\u6E2C"+
-            "\u6E2D\u6E2E\u6E2F\u6E30\u6E31\u6E32\u6E33\u6E34"+
-            "\u6E35\u6E36\u6E37\u6E38\u6E39\u6E3A\u6E3B\u6E3C"+
-            "\u6E3D\u6E3E\u6E3F\u6E40\u6E41\u6E42\u6E43\u6E44"+
-            "\u6E45\u6E46\u6E47\u6E48\u6E49\u6E4A\u6E4B\u6E4C"+
-            "\u6E4D\u6E4E\u6E4F\u6E50\u6E51\u6E52\u6E53\u6E54"+
-            "\u6E55\u6E56\u6E57\u6E58\u6E59\u6E5A\u6E5B\u6E5C"+
-            "\u6E5D\u6E5E\u6E5F\u6E60\u6E61\u6E62\u6E63\u6E64"+
-            "\u6E65\u6E66\u6E67\u6E68\u6E69\u6E6A\u6E6B\u6E6C"+
-            "\u6E6D\u6E6E\u6E6F\u6E70\u6E71\u6E72\u6E73\u6E74"+
-            "\u6E75\u6E76\u6E77\u6E78\u6E79\u6E7A\u6E7B\u6E7C"+
-            "\u6E7D\u6E7E\u6E7F\u6E80\u6E81\u6E82\u6E83\u6E84"+
-            "\u6E85\u6E86\u6E87\u6E88\u6E89\u6E8A\u6E8B\u6E8C"+
-            "\u6E8D\u6E8E\u6E8F\u6E90\u6E91\u6E92\u6E93\u6E94"+
-            "\u6E95\u6E96\u6E97\u6E98\u6E99\u6E9A\u6E9B\u6E9C"+
-            "\u6E9D\u6E9E\u6E9F\u6EA0\u6EA1\u6EA2\u6EA3\u6EA4"+
-            "\u6EA5\u6EA6\u6EA7\u6EA8\u6EA9\u6EAA\u6EAB\u6EAC"+
-            "\u6EAD\u6EAE\u6EAF\u6EB0\u6EB1\u6EB2\u6EB3\u6EB4"+
-            "\u6EB5\u6EB6\u6EB7\u6EB8\u6EB9\u6EBA\u6EBB\u6EBC"+
-            "\u6EBD\u6EBE\u6EBF\u6EC0\u6EC1\u6EC2\u6EC3\u6EC4"+
-            "\u6EC5\u6EC6\u6EC7\u6EC8\u6EC9\u6ECA\u6ECB\u6ECC"+
-            "\u6ECD\u6ECE\u6ECF\u6ED0\u6ED1\u6ED2\u6ED3\u6ED4"+
-            "\u6ED5\u6ED6\u6ED7\u6ED8\u6ED9\u6EDA\u6EDB\u6EDC"+
-            "\u6EDD\u6EDE\u6EDF\u6EE0\u6EE1\u6EE2\u6EE3\u6EE4"+
-            "\u6EE5\u6EE6\u6EE7\u6EE8\u6EE9\u6EEA\u6EEB\u6EEC"+
-            "\u6EED\u6EEE\u6EEF\u6EF0\u6EF1\u6EF2\u6EF3\u6EF4"+
-            "\u6EF5\u6EF6\u6EF7\u6EF8\u6EF9\u6EFA\u6EFB\u6EFC"+
-            "\u6EFD\u6EFE\u6EFF\u6F00\u6F01\u6F02\u6F03\u6F04"+
-            "\u6F05\u6F06\u6F07\u6F08\u6F09\u6F0A\u6F0B\u6F0C"+
-            "\u6F0D\u6F0E\u6F0F\u6F10\u6F11\u6F12\u6F13\u6F14"+
-            "\u6F15\u6F16\u6F17\u6F18\u6F19\u6F1A\u6F1B\u6F1C"+
-            "\u6F1D\u6F1E\u6F1F\u6F20\u6F21\u6F22\u6F23\u6F24"+
-            "\u6F25\u6F26\u6F27\u6F28\u6F29\u6F2A\u6F2B\u6F2C"+
-            "\u6F2D\u6F2E\u6F2F\u6F30\u6F31\u6F32\u6F33\u6F34"+
-            "\u6F35\u6F36\u6F37\u6F38\u6F39\u6F3A\u6F3B\u6F3C"+
-            "\u6F3D\u6F3E\u6F3F\u6F40\u6F41\u6F42\u6F43\u6F44"+
-            "\u6F45\u6F46\u6F47\u6F48\u6F49\u6F4A\u6F4B\u6F4C"+
-            "\u6F4D\u6F4E\u6F4F\u6F50\u6F51\u6F52\u6F53\u6F54"+
-            "\u6F55\u6F56\u6F57\u6F58\u6F59\u6F5A\u6F5B\u6F5C"+
-            "\u6F5D\u6F5E\u6F5F\u6F60\u6F61\u6F62\u6F63\u6F64"+
-            "\u6F65\u6F66\u6F67\u6F68\u6F69\u6F6A\u6F6B\u6F6C"+
-            "\u6F6D\u6F6E\u6F6F\u6F70\u6F71\u6F72\u6F73\u6F74"+
-            "\u6F75\u6F76\u6F77\u6F78\u6F79\u6F7A\u6F7B\u6F7C"+
-            "\u6F7D\u6F7E\u6F7F\u6F80\u6F81\u6F82\u6F83\u6F84"+
-            "\u6F85\u6F86\u6F87\u6F88\u6F89\u6F8A\u6F8B\u6F8C"+
-            "\u6F8D\u6F8E\u6F8F\u6F90\u6F91\u6F92\u6F93\u6F94"+
-            "\u6F95\u6F96\u6F97\u6F98\u6F99\u6F9A\u6F9B\u6F9C"+
-            "\u6F9D\u6F9E\u6F9F\u6FA0\u6FA1\u6FA2\u6FA3\u6FA4"+
-            "\u6FA5\u6FA6\u6FA7\u6FA8\u6FA9\u6FAA\u6FAB\u6FAC"+
-            "\u6FAD\u6FAE\u6FAF\u6FB0\u6FB1\u6FB2\u6FB3\u6FB4"+
-            "\u6FB5\u6FB6\u6FB7\u6FB8\u6FB9\u6FBA\u6FBB\u6FBC"+
-            "\u6FBD\u6FBE\u6FBF\u6FC0\u6FC1\u6FC2\u6FC3\u6FC4"+
-            "\u6FC5\u6FC6\u6FC7\u6FC8\u6FC9\u6FCA\u6FCB\u6FCC"+
-            "\u6FCD\u6FCE\u6FCF\u6FD0\u6FD1\u6FD2\u6FD3\u6FD4"+
-            "\u6FD5\u6FD6\u6FD7\u6FD8\u6FD9\u6FDA\u6FDB\u6FDC"+
-            "\u6FDD\u6FDE\u6FDF\u6FE0\u6FE1\u6FE2\u6FE3\u6FE4"+
-            "\u6FE5\u6FE6\u6FE7\u6FE8\u6FE9\u6FEA\u6FEB\u6FEC"+
-            "\u6FED\u6FEE\u6FEF\u6FF0\u6FF1\u6FF2\u6FF3\u6FF4"+
-            "\u6FF5\u6FF6\u6FF7\u6FF8\u6FF9\u6FFA\u6FFB\u6FFC"+
-            "\u6FFD\u6FFE\u6FFF\u7000\u7001\u7002\u7003\u7004"+
-            "\u7005\u7006\u7007\u7008\u7009\u700A\u700B\u700C"+
-            "\u700D\u700E\u700F\u7010\u7011\u7012\u7013\u7014"+
-            "\u7015\u7016\u7017\u7018\u7019\u701A\u701B\u701C"+
-            "\u701D\u701E\u701F\u7020\u7021\u7022\u7023\u7024"+
-            "\u7025\u7026\u7027\u7028\u7029\u702A\u702B\u702C"+
-            "\u702D\u702E\u702F\u7030\u7031\u7032\u7033\u7034"+
-            "\u7035\u7036\u7037\u7038\u7039\u703A\u703B\u703C"+
-            "\u703D\u703E\u703F\u7040\u7041\u7042\u7043\u7044"+
-            "\u7045\u7046\u7047\u7048\u7049\u704A\u704B\u704C"+
-            "\u704D\u704E\u704F\u7050\u7051\u7052\u7053\u7054"+
-            "\u7055\u7056\u7057\u7058\u7059\u705A\u705B\u705C"+
-            "\u705D\u705E\u705F\u7060\u7061\u7062\u7063\u7064"+
-            "\u7065\u7066\u7067\u7068\u7069\u706A\u706B\u706C"+
-            "\u706D\u706E\u706F\u7070\u7071\u7072\u7073\u7074"+
-            "\u7075\u7076\u7077\u7078\u7079\u707A\u707B\u707C"+
-            "\u707D\u707E\u707F\u7080\u7081\u7082\u7083\u7084"+
-            "\u7085\u7086\u7087\u7088\u7089\u708A\u708B\u708C"+
-            "\u708D\u708E\u708F\u7090\u7091\u7092\u7093\u7094"+
-            "\u7095\u7096\u7097\u7098\u7099\u709A\u709B\u709C"+
-            "\u709D\u709E\u709F\u70A0\u70A1\u70A2\u70A3\u70A4"+
-            "\u70A5\u70A6\u70A7\u70A8\u70A9\u70AA\u70AB\u70AC"+
-            "\u70AD\u70AE\u70AF\u70B0\u70B1\u70B2\u70B3\u70B4"+
-            "\u70B5\u70B6\u70B7\u70B8\u70B9\u70BA\u70BB\u70BC"+
-            "\u70BD\u70BE\u70BF\u70C0\u70C1\u70C2\u70C3\u70C4"+
-            "\u70C5\u70C6\u70C7\u70C8\u70C9\u70CA\u70CB\u70CC"+
-            "\u70CD\u70CE\u70CF\u70D0\u70D1\u70D2\u70D3\u70D4"+
-            "\u70D5\u70D6\u70D7\u70D8\u70D9\u70DA\u70DB\u70DC"+
-            "\u70DD\u70DE\u70DF\u70E0\u70E1\u70E2\u70E3\u70E4"+
-            "\u70E5\u70E6\u70E7\u70E8\u70E9\u70EA\u70EB\u70EC"+
-            "\u70ED\u70EE\u70EF\u70F0\u70F1\u70F2\u70F3\u70F4"+
-            "\u70F5\u70F6\u70F7\u70F8\u70F9\u70FA\u70FB\u70FC"+
-            "\u70FD\u70FE\u70FF\u7100\u7101\u7102\u7103\u7104"+
-            "\u7105\u7106\u7107\u7108\u7109\u710A\u710B\u710C"+
-            "\u710D\u710E\u710F\u7110\u7111\u7112\u7113\u7114"+
-            "\u7115\u7116\u7117\u7118\u7119\u711A\u711B\u711C"+
-            "\u711D\u711E\u711F\u7120\u7121\u7122\u7123\u7124"+
-            "\u7125\u7126\u7127\u7128\u7129\u712A\u712B\u712C"+
-            "\u712D\u712E\u712F\u7130\u7131\u7132\u7133\u7134"+
-            "\u7135\u7136\u7137\u7138\u7139\u713A\u713B\u713C"+
-            "\u713D\u713E\u713F\u7140\u7141\u7142\u7143\u7144"+
-            "\u7145\u7146\u7147\u7148\u7149\u714A\u714B\u714C"+
-            "\u714D\u714E\u714F\u7150\u7151\u7152\u7153\u7154"+
-            "\u7155\u7156\u7157\u7158\u7159\u715A\u715B\u715C"+
-            "\u715D\u715E\u715F\u7160\u7161\u7162\u7163\u7164"+
-            "\u7165\u7166\u7167\u7168\u7169\u716A\u716B\u716C"+
-            "\u716D\u716E\u716F\u7170\u7171\u7172\u7173\u7174"+
-            "\u7175\u7176\u7177\u7178\u7179\u717A\u717B\u717C"+
-            "\u717D\u717E\u717F\u7180\u7181\u7182\u7183\u7184"+
-            "\u7185\u7186\u7187\u7188\u7189\u718A\u718B\u718C"+
-            "\u718D\u718E\u718F\u7190\u7191\u7192\u7193\u7194"+
-            "\u7195\u7196\u7197\u7198\u7199\u719A\u719B\u719C"+
-            "\u719D\u719E\u719F\u71A0\u71A1\u71A2\u71A3\u71A4"+
-            "\u71A5\u71A6\u71A7\u71A8\u71A9\u71AA\u71AB\u71AC"+
-            "\u71AD\u71AE\u71AF\u71B0\u71B1\u71B2\u71B3\u71B4"+
-            "\u71B5\u71B6\u71B7\u71B8\u71B9\u71BA\u71BB\u71BC"+
-            "\u71BD\u71BE\u71BF\u71C0\u71C1\u71C2\u71C3\u71C4"+
-            "\u71C5\u71C6\u71C7\u71C8\u71C9\u71CA\u71CB\u71CC"+
-            "\u71CD\u71CE\u71CF\u71D0\u71D1\u71D2\u71D3\u71D4"+
-            "\u71D5\u71D6\u71D7\u71D8\u71D9\u71DA\u71DB\u71DC"+
-            "\u71DD\u71DE\u71DF\u71E0\u71E1\u71E2\u71E3\u71E4"+
-            "\u71E5\u71E6\u71E7\u71E8\u71E9\u71EA\u71EB\u71EC"+
-            "\u71ED\u71EE\u71EF\u71F0\u71F1\u71F2\u71F3\u71F4"+
-            "\u71F5\u71F6\u71F7\u71F8\u71F9\u71FA\u71FB\u71FC"+
-            "\u71FD\u71FE\u71FF\u7200\u7201\u7202\u7203\u7204"+
-            "\u7205\u7206\u7207\u7208\u7209\u720A\u720B\u720C"+
-            "\u720D\u720E\u720F\u7210\u7211\u7212\u7213\u7214"+
-            "\u7215\u7216\u7217\u7218\u7219\u721A\u721B\u721C"+
-            "\u721D\u721E\u721F\u7220\u7221\u7222\u7223\u7224"+
-            "\u7225\u7226\u7227\u7228\u7229\u722A\u722B\u722C"+
-            "\u722D\u722E\u722F\u7230\u7231\u7232\u7233\u7234"+
-            "\u7235\u7236\u7237\u7238\u7239\u723A\u723B\u723C"+
-            "\u723D\u723E\u723F\u7240\u7241\u7242\u7243\u7244"+
-            "\u7245\u7246\u7247\u7248\u7249\u724A\u724B\u724C"+
-            "\u724D\u724E\u724F\u7250\u7251\u7252\u7253\u7254"+
-            "\u7255\u7256\u7257\u7258\u7259\u725A\u725B\u725C"+
-            "\u725D\u725E\u725F\u7260\u7261\u7262\u7263\u7264"+
-            "\u7265\u7266\u7267\u7268\u7269\u726A\u726B\u726C"+
-            "\u726D\u726E\u726F\u7270\u7271\u7272\u7273\u7274"+
-            "\u7275\u7276\u7277\u7278\u7279\u727A\u727B\u727C"+
-            "\u727D\u727E\u727F\u7280\u7281\u7282\u7283\u7284"+
-            "\u7285\u7286\u7287\u7288\u7289\u728A\u728B\u728C"+
-            "\u728D\u728E\u728F\u7290\u7291\u7292\u7293\u7294"+
-            "\u7295\u7296\u7297\u7298\u7299\u729A\u729B\u729C"+
-            "\u729D\u729E\u729F\u72A0\u72A1\u72A2\u72A3\u72A4"+
-            "\u72A5\u72A6\u72A7\u72A8\u72A9\u72AA\u72AB\u72AC"+
-            "\u72AD\u72AE\u72AF\u72B0\u72B1\u72B2\u72B3\u72B4"+
-            "\u72B5\u72B6\u72B7\u72B8\u72B9\u72BA\u72BB\u72BC"+
-            "\u72BD\u72BE\u72BF\u72C0\u72C1\u72C2\u72C3\u72C4"+
-            "\u72C5\u72C6\u72C7\u72C8\u72C9\u72CA\u72CB\u72CC"+
-            "\u72CD\u72CE\u72CF\u72D0\u72D1\u72D2\u72D3\u72D4"+
-            "\u72D5\u72D6\u72D7\u72D8\u72D9\u72DA\u72DB\u72DC"+
-            "\u72DD\u72DE\u72DF\u72E0\u72E1\u72E2\u72E3\u72E4"+
-            "\u72E5\u72E6\u72E7\u72E8\u72E9\u72EA\u72EB\u72EC"+
-            "\u72ED\u72EE\u72EF\u72F0\u72F1\u72F2\u72F3\u72F4"+
-            "\u72F5\u72F6\u72F7\u72F8\u72F9\u72FA\u72FB\u72FC"+
-            "\u72FD\u72FE\u72FF\u7300\u7301\u7302\u7303\u7304"+
-            "\u7305\u7306\u7307\u7308\u7309\u730A\u730B\u730C"+
-            "\u730D\u730E\u730F\u7310\u7311\u7312\u7313\u7314"+
-            "\u7315\u7316\u7317\u7318\u7319\u731A\u731B\u731C"+
-            "\u731D\u731E\u731F\u7320\u7321\u7322\u7323\u7324"+
-            "\u7325\u7326\u7327\u7328\u7329\u732A\u732B\u732C"+
-            "\u732D\u732E\u732F\u7330\u7331\u7332\u7333\u7334"+
-            "\u7335\u7336\u7337\u7338\u7339\u733A\u733B\u733C"+
-            "\u733D\u733E\u733F\u7340\u7341\u7342\u7343\u7344"+
-            "\u7345\u7346\u7347\u7348\u7349\u734A\u734B\u734C"+
-            "\u734D\u734E\u734F\u7350\u7351\u7352\u7353\u7354"+
-            "\u7355\u7356\u7357\u7358\u7359\u735A\u735B\u735C"+
-            "\u735D\u735E\u735F\u7360\u7361\u7362\u7363\u7364"+
-            "\u7365\u7366\u7367\u7368\u7369\u736A\u736B\u736C"+
-            "\u736D\u736E\u736F\u7370\u7371\u7372\u7373\u7374"+
-            "\u7375\u7376\u7377\u7378\u7379\u737A\u737B\u737C"+
-            "\u737D\u737E\u737F\u7380\u7381\u7382\u7383\u7384"+
-            "\u7385\u7386\u7387\u7388\u7389\u738A\u738B\u738C"+
-            "\u738D\u738E\u738F\u7390\u7391\u7392\u7393\u7394"+
-            "\u7395\u7396\u7397\u7398\u7399\u739A\u739B\u739C"+
-            "\u739D\u739E\u739F\u73A0\u73A1\u73A2\u73A3\u73A4"+
-            "\u73A5\u73A6\u73A7\u73A8\u73A9\u73AA\u73AB\u73AC"+
-            "\u73AD\u73AE\u73AF\u73B0\u73B1\u73B2\u73B3\u73B4"+
-            "\u73B5\u73B6\u73B7\u73B8\u73B9\u73BA\u73BB\u73BC"+
-            "\u73BD\u73BE\u73BF\u73C0\u73C1\u73C2\u73C3\u73C4"+
-            "\u73C5\u73C6\u73C7\u73C8\u73C9\u73CA\u73CB\u73CC"+
-            "\u73CD\u73CE\u73CF\u73D0\u73D1\u73D2\u73D3\u73D4"+
-            "\u73D5\u73D6\u73D7\u73D8\u73D9\u73DA\u73DB\u73DC"+
-            "\u73DD\u73DE\u73DF\u73E0\u73E1\u73E2\u73E3\u73E4"+
-            "\u73E5\u73E6\u73E7\u73E8\u73E9\u73EA\u73EB\u73EC"+
-            "\u73ED\u73EE\u73EF\u73F0\u73F1\u73F2\u73F3\u73F4"+
-            "\u73F5\u73F6\u73F7\u73F8\u73F9\u73FA\u73FB\u73FC"+
-            "\u73FD\u73FE\u73FF\u7400\u7401\u7402\u7403\u7404"+
-            "\u7405\u7406\u7407\u7408\u7409\u740A\u740B\u740C"+
-            "\u740D\u740E\u740F\u7410\u7411\u7412\u7413\u7414"+
-            "\u7415\u7416\u7417\u7418\u7419\u741A\u741B\u741C"+
-            "\u741D\u741E\u741F\u7420\u7421\u7422\u7423\u7424"+
-            "\u7425\u7426\u7427\u7428\u7429\u742A\u742B\u742C"+
-            "\u742D\u742E\u742F\u7430\u7431\u7432\u7433\u7434"+
-            "\u7435\u7436\u7437\u7438\u7439\u743A\u743B\u743C"+
-            "\u743D\u743E\u743F\u7440\u7441\u7442\u7443\u7444"+
-            "\u7445\u7446\u7447\u7448\u7449\u744A\u744B\u744C"+
-            "\u744D\u744E\u744F\u7450\u7451\u7452\u7453\u7454"+
-            "\u7455\u7456\u7457\u7458\u7459\u745A\u745B\u745C"+
-            "\u745D\u745E\u745F\u7460\u7461\u7462\u7463\u7464"+
-            "\u7465\u7466\u7467\u7468\u7469\u746A\u746B\u746C"+
-            "\u746D\u746E\u746F\u7470\u7471\u7472\u7473\u7474"+
-            "\u7475\u7476\u7477\u7478\u7479\u747A\u747B\u747C"+
-            "\u747D\u747E\u747F\u7480\u7481\u7482\u7483\u7484"+
-            "\u7485\u7486\u7487\u7488\u7489\u748A\u748B\u748C"+
-            "\u748D\u748E\u748F\u7490\u7491\u7492\u7493\u7494"+
-            "\u7495\u7496\u7497\u7498\u7499\u749A\u749B\u749C"+
-            "\u749D\u749E\u749F\u74A0\u74A1\u74A2\u74A3\u74A4"+
-            "\u74A5\u74A6\u74A7\u74A8\u74A9\u74AA\u74AB\u74AC"+
-            "\u74AD\u74AE\u74AF\u74B0\u74B1\u74B2\u74B3\u74B4"+
-            "\u74B5\u74B6\u74B7\u74B8\u74B9\u74BA\u74BB\u74BC"+
-            "\u74BD\u74BE\u74BF\u74C0\u74C1\u74C2\u74C3\u74C4"+
-            "\u74C5\u74C6\u74C7\u74C8\u74C9\u74CA\u74CB\u74CC"+
-            "\u74CD\u74CE\u74CF\u74D0\u74D1\u74D2\u74D3\u74D4"+
-            "\u74D5\u74D6\u74D7\u74D8\u74D9\u74DA\u74DB\u74DC"+
-            "\u74DD\u74DE\u74DF\u74E0\u74E1\u74E2\u74E3\u74E4"+
-            "\u74E5\u74E6\u74E7\u74E8\u74E9\u74EA\u74EB\u74EC"+
-            "\u74ED\u74EE\u74EF\u74F0\u74F1\u74F2\u74F3\u74F4"+
-            "\u74F5\u74F6\u74F7\u74F8\u74F9\u74FA\u74FB\u74FC"+
-            "\u74FD\u74FE\u74FF\u7500\u7501\u7502\u7503\u7504"+
-            "\u7505\u7506\u7507\u7508\u7509\u750A\u750B\u750C"+
-            "\u750D\u750E\u750F\u7510\u7511\u7512\u7513\u7514"+
-            "\u7515\u7516\u7517\u7518\u7519\u751A\u751B\u751C"+
-            "\u751D\u751E\u751F\u7520\u7521\u7522\u7523\u7524"+
-            "\u7525\u7526\u7527\u7528\u7529\u752A\u752B\u752C"+
-            "\u752D\u752E\u752F\u7530\u7531\u7532\u7533\u7534"+
-            "\u7535\u7536\u7537\u7538\u7539\u753A\u753B\u753C"+
-            "\u753D\u753E\u753F\u7540\u7541\u7542\u7543\u7544"+
-            "\u7545\u7546\u7547\u7548\u7549\u754A\u754B\u754C"+
-            "\u754D\u754E\u754F\u7550\u7551\u7552\u7553\u7554"+
-            "\u7555\u7556\u7557\u7558\u7559\u755A\u755B\u755C"+
-            "\u755D\u755E\u755F\u7560\u7561\u7562\u7563\u7564"+
-            "\u7565\u7566\u7567\u7568\u7569\u756A\u756B\u756C"+
-            "\u756D\u756E\u756F\u7570\u7571\u7572\u7573\u7574"+
-            "\u7575\u7576\u7577\u7578\u7579\u757A\u757B\u757C"+
-            "\u757D\u757E\u757F\u7580\u7581\u7582\u7583\u7584"+
-            "\u7585\u7586\u7587\u7588\u7589\u758A\u758B\u758C"+
-            "\u758D\u758E\u758F\u7590\u7591\u7592\u7593\u7594"+
-            "\u7595\u7596\u7597\u7598\u7599\u759A\u759B\u759C"+
-            "\u759D\u759E\u759F\u75A0\u75A1\u75A2\u75A3\u75A4"+
-            "\u75A5\u75A6\u75A7\u75A8\u75A9\u75AA\u75AB\u75AC"+
-            "\u75AD\u75AE\u75AF\u75B0\u75B1\u75B2\u75B3\u75B4"+
-            "\u75B5\u75B6\u75B7\u75B8\u75B9\u75BA\u75BB\u75BC"+
-            "\u75BD\u75BE\u75BF\u75C0\u75C1\u75C2\u75C3\u75C4"+
-            "\u75C5\u75C6\u75C7\u75C8\u75C9\u75CA\u75CB\u75CC"+
-            "\u75CD\u75CE\u75CF\u75D0\u75D1\u75D2\u75D3\u75D4"+
-            "\u75D5\u75D6\u75D7\u75D8\u75D9\u75DA\u75DB\u75DC"+
-            "\u75DD\u75DE\u75DF\u75E0\u75E1\u75E2\u75E3\u75E4"+
-            "\u75E5\u75E6\u75E7\u75E8\u75E9\u75EA\u75EB\u75EC"+
-            "\u75ED\u75EE\u75EF\u75F0\u75F1\u75F2\u75F3\u75F4"+
-            "\u75F5\u75F6\u75F7\u75F8\u75F9\u75FA\u75FB\u75FC"+
-            "\u75FD\u75FE\u75FF\u7600\u7601\u7602\u7603\u7604"+
-            "\u7605\u7606\u7607\u7608\u7609\u760A\u760B\u760C"+
-            "\u760D\u760E\u760F\u7610\u7611\u7612\u7613\u7614"+
-            "\u7615\u7616\u7617\u7618\u7619\u761A\u761B\u761C"+
-            "\u761D\u761E\u761F\u7620\u7621\u7622\u7623\u7624"+
-            "\u7625\u7626\u7627\u7628\u7629\u762A\u762B\u762C"+
-            "\u762D\u762E\u762F\u7630\u7631\u7632\u7633\u7634"+
-            "\u7635\u7636\u7637\u7638\u7639\u763A\u763B\u763C"+
-            "\u763D\u763E\u763F\u7640\u7641\u7642\u7643\u7644"+
-            "\u7645\u7646\u7647\u7648\u7649\u764A\u764B\u764C"+
-            "\u764D\u764E\u764F\u7650\u7651\u7652\u7653\u7654"+
-            "\u7655\u7656\u7657\u7658\u7659\u765A\u765B\u765C"+
-            "\u765D\u765E\u765F\u7660\u7661\u7662\u7663\u7664"+
-            "\u7665\u7666\u7667\u7668\u7669\u766A\u766B\u766C"+
-            "\u766D\u766E\u766F\u7670\u7671\u7672\u7673\u7674"+
-            "\u7675\u7676\u7677\u7678\u7679\u767A\u767B\u767C"+
-            "\u767D\u767E\u767F\u7680\u7681\u7682\u7683\u7684"+
-            "\u7685\u7686\u7687\u7688\u7689\u768A\u768B\u768C"+
-            "\u768D\u768E\u768F\u7690\u7691\u7692\u7693\u7694"+
-            "\u7695\u7696\u7697\u7698\u7699\u769A\u769B\u769C"+
-            "\u769D\u769E\u769F\u76A0\u76A1\u76A2\u76A3\u76A4"+
-            "\u76A5\u76A6\u76A7\u76A8\u76A9\u76AA\u76AB\u76AC"+
-            "\u76AD\u76AE\u76AF\u76B0\u76B1\u76B2\u76B3\u76B4"+
-            "\u76B5\u76B6\u76B7\u76B8\u76B9\u76BA\u76BB\u76BC"+
-            "\u76BD\u76BE\u76BF\u76C0\u76C1\u76C2\u76C3\u76C4"+
-            "\u76C5\u76C6\u76C7\u76C8\u76C9\u76CA\u76CB\u76CC"+
-            "\u76CD\u76CE\u76CF\u76D0\u76D1\u76D2\u76D3\u76D4"+
-            "\u76D5\u76D6\u76D7\u76D8\u76D9\u76DA\u76DB\u76DC"+
-            "\u76DD\u76DE\u76DF\u76E0\u76E1\u76E2\u76E3\u76E4"+
-            "\u76E5\u76E6\u76E7\u76E8\u76E9\u76EA\u76EB\u76EC"+
-            "\u76ED\u76EE\u76EF\u76F0\u76F1\u76F2\u76F3\u76F4"+
-            "\u76F5\u76F6\u76F7\u76F8\u76F9\u76FA\u76FB\u76FC"+
-            "\u76FD\u76FE\u76FF\u7700\u7701\u7702\u7703\u7704"+
-            "\u7705\u7706\u7707\u7708\u7709\u770A\u770B\u770C"+
-            "\u770D\u770E\u770F\u7710\u7711\u7712\u7713\u7714"+
-            "\u7715\u7716\u7717\u7718\u7719\u771A\u771B\u771C"+
-            "\u771D\u771E\u771F\u7720\u7721\u7722\u7723\u7724"+
-            "\u7725\u7726\u7727\u7728\u7729\u772A\u772B\u772C"+
-            "\u772D\u772E\u772F\u7730\u7731\u7732\u7733\u7734"+
-            "\u7735\u7736\u7737\u7738\u7739\u773A\u773B\u773C"+
-            "\u773D\u773E\u773F\u7740\u7741\u7742\u7743\u7744"+
-            "\u7745\u7746\u7747\u7748\u7749\u774A\u774B\u774C"+
-            "\u774D\u774E\u774F\u7750\u7751\u7752\u7753\u7754"+
-            "\u7755\u7756\u7757\u7758\u7759\u775A\u775B\u775C"+
-            "\u775D\u775E\u775F\u7760\u7761\u7762\u7763\u7764"+
-            "\u7765\u7766\u7767\u7768\u7769\u776A\u776B\u776C"+
-            "\u776D\u776E\u776F\u7770\u7771\u7772\u7773\u7774"+
-            "\u7775\u7776\u7777\u7778\u7779\u777A\u777B\u777C"+
-            "\u777D\u777E\u777F\u7780\u7781\u7782\u7783\u7784"+
-            "\u7785\u7786\u7787\u7788\u7789\u778A\u778B\u778C"+
-            "\u778D\u778E\u778F\u7790\u7791\u7792\u7793\u7794"+
-            "\u7795\u7796\u7797\u7798\u7799\u779A\u779B\u779C"+
-            "\u779D\u779E\u779F\u77A0\u77A1\u77A2\u77A3\u77A4"+
-            "\u77A5\u77A6\u77A7\u77A8\u77A9\u77AA\u77AB\u77AC"+
-            "\u77AD\u77AE\u77AF\u77B0\u77B1\u77B2\u77B3\u77B4"+
-            "\u77B5\u77B6\u77B7\u77B8\u77B9\u77BA\u77BB\u77BC"+
-            "\u77BD\u77BE\u77BF\u77C0\u77C1\u77C2\u77C3\u77C4"+
-            "\u77C5\u77C6\u77C7\u77C8\u77C9\u77CA\u77CB\u77CC"+
-            "\u77CD\u77CE\u77CF\u77D0\u77D1\u77D2\u77D3\u77D4"+
-            "\u77D5\u77D6\u77D7\u77D8\u77D9\u77DA\u77DB\u77DC"+
-            "\u77DD\u77DE\u77DF\u77E0\u77E1\u77E2\u77E3\u77E4"+
-            "\u77E5\u77E6\u77E7\u77E8\u77E9\u77EA\u77EB\u77EC"+
-            "\u77ED\u77EE\u77EF\u77F0\u77F1\u77F2\u77F3\u77F4"+
-            "\u77F5\u77F6\u77F7\u77F8\u77F9\u77FA\u77FB\u77FC"+
-            "\u77FD\u77FE\u77FF\u7800\u7801\u7802\u7803\u7804"+
-            "\u7805\u7806\u7807\u7808\u7809\u780A\u780B\u780C"+
-            "\u780D\u780E\u780F\u7810\u7811\u7812\u7813\u7814"+
-            "\u7815\u7816\u7817\u7818\u7819\u781A\u781B\u781C"+
-            "\u781D\u781E\u781F\u7820\u7821\u7822\u7823\u7824"+
-            "\u7825\u7826\u7827\u7828\u7829\u782A\u782B\u782C"+
-            "\u782D\u782E\u782F\u7830\u7831\u7832\u7833\u7834"+
-            "\u7835\u7836\u7837\u7838\u7839\u783A\u783B\u783C"+
-            "\u783D\u783E\u783F\u7840\u7841\u7842\u7843\u7844"+
-            "\u7845\u7846\u7847\u7848\u7849\u784A\u784B\u784C"+
-            "\u784D\u784E\u784F\u7850\u7851\u7852\u7853\u7854"+
-            "\u7855\u7856\u7857\u7858\u7859\u785A\u785B\u785C"+
-            "\u785D\u785E\u785F\u7860\u7861\u7862\u7863\u7864"+
-            "\u7865\u7866\u7867\u7868\u7869\u786A\u786B\u786C"+
-            "\u786D\u786E\u786F\u7870\u7871\u7872\u7873\u7874"+
-            "\u7875\u7876\u7877\u7878\u7879\u787A\u787B\u787C"+
-            "\u787D\u787E\u787F\u7880\u7881\u7882\u7883\u7884"+
-            "\u7885\u7886\u7887\u7888\u7889\u788A\u788B\u788C"+
-            "\u788D\u788E\u788F\u7890\u7891\u7892\u7893\u7894"+
-            "\u7895\u7896\u7897\u7898\u7899\u789A\u789B\u789C"+
-            "\u789D\u789E\u789F\u78A0\u78A1\u78A2\u78A3\u78A4"+
-            "\u78A5\u78A6\u78A7\u78A8\u78A9\u78AA\u78AB\u78AC"+
-            "\u78AD\u78AE\u78AF\u78B0\u78B1\u78B2\u78B3\u78B4"+
-            "\u78B5\u78B6\u78B7\u78B8\u78B9\u78BA\u78BB\u78BC"+
-            "\u78BD\u78BE\u78BF\u78C0\u78C1\u78C2\u78C3\u78C4"+
-            "\u78C5\u78C6\u78C7\u78C8\u78C9\u78CA\u78CB\u78CC"+
-            "\u78CD\u78CE\u78CF\u78D0\u78D1\u78D2\u78D3\u78D4"+
-            "\u78D5\u78D6\u78D7\u78D8\u78D9\u78DA\u78DB\u78DC"+
-            "\u78DD\u78DE\u78DF\u78E0\u78E1\u78E2\u78E3\u78E4"+
-            "\u78E5\u78E6\u78E7\u78E8\u78E9\u78EA\u78EB\u78EC"+
-            "\u78ED\u78EE\u78EF\u78F0\u78F1\u78F2\u78F3\u78F4"+
-            "\u78F5\u78F6\u78F7\u78F8\u78F9\u78FA\u78FB\u78FC"+
-            "\u78FD\u78FE\u78FF\u7900\u7901\u7902\u7903\u7904"+
-            "\u7905\u7906\u7907\u7908\u7909\u790A\u790B\u790C"+
-            "\u790D\u790E\u790F\u7910\u7911\u7912\u7913\u7914"+
-            "\u7915\u7916\u7917\u7918\u7919\u791A\u791B\u791C"+
-            "\u791D\u791E\u791F\u7920\u7921\u7922\u7923\u7924"+
-            "\u7925\u7926\u7927\u7928\u7929\u792A\u792B\u792C"+
-            "\u792D\u792E\u792F\u7930\u7931\u7932\u7933\u7934"+
-            "\u7935\u7936\u7937\u7938\u7939\u793A\u793B\u793C"+
-            "\u793D\u793E\u793F\u7940\u7941\u7942\u7943\u7944"+
-            "\u7945\u7946\u7947\u7948\u7949\u794A\u794B\u794C"+
-            "\u794D\u794E\u794F\u7950\u7951\u7952\u7953\u7954"+
-            "\u7955\u7956\u7957\u7958\u7959\u795A\u795B\u795C"+
-            "\u795D\u795E\u795F\u7960\u7961\u7962\u7963\u7964"+
-            "\u7965\u7966\u7967\u7968\u7969\u796A\u796B\u796C"+
-            "\u796D\u796E\u796F\u7970\u7971\u7972\u7973\u7974"+
-            "\u7975\u7976\u7977\u7978\u7979\u797A\u797B\u797C"+
-            "\u797D\u797E\u797F\u7980\u7981\u7982\u7983\u7984"+
-            "\u7985\u7986\u7987\u7988\u7989\u798A\u798B\u798C"+
-            "\u798D\u798E\u798F\u7990\u7991\u7992\u7993\u7994"+
-            "\u7995\u7996\u7997\u7998\u7999\u799A\u799B\u799C"+
-            "\u799D\u799E\u799F\u79A0\u79A1\u79A2\u79A3\u79A4"+
-            "\u79A5\u79A6\u79A7\u79A8\u79A9\u79AA\u79AB\u79AC"+
-            "\u79AD\u79AE\u79AF\u79B0\u79B1\u79B2\u79B3\u79B4"+
-            "\u79B5\u79B6\u79B7\u79B8\u79B9\u79BA\u79BB\u79BC"+
-            "\u79BD\u79BE\u79BF\u79C0\u79C1\u79C2\u79C3\u79C4"+
-            "\u79C5\u79C6\u79C7\u79C8\u79C9\u79CA\u79CB\u79CC"+
-            "\u79CD\u79CE\u79CF\u79D0\u79D1\u79D2\u79D3\u79D4"+
-            "\u79D5\u79D6\u79D7\u79D8\u79D9\u79DA\u79DB\u79DC"+
-            "\u79DD\u79DE\u79DF\u79E0\u79E1\u79E2\u79E3\u79E4"+
-            "\u79E5\u79E6\u79E7\u79E8\u79E9\u79EA\u79EB\u79EC"+
-            "\u79ED\u79EE\u79EF\u79F0\u79F1\u79F2\u79F3\u79F4"+
-            "\u79F5\u79F6\u79F7\u79F8\u79F9\u79FA\u79FB\u79FC"+
-            "\u79FD\u79FE\u79FF\u7A00\u7A01\u7A02\u7A03\u7A04"+
-            "\u7A05\u7A06\u7A07\u7A08\u7A09\u7A0A\u7A0B\u7A0C"+
-            "\u7A0D\u7A0E\u7A0F\u7A10\u7A11\u7A12\u7A13\u7A14"+
-            "\u7A15\u7A16\u7A17\u7A18\u7A19\u7A1A\u7A1B\u7A1C"+
-            "\u7A1D\u7A1E\u7A1F\u7A20\u7A21\u7A22\u7A23\u7A24"+
-            "\u7A25\u7A26\u7A27\u7A28\u7A29\u7A2A\u7A2B\u7A2C"+
-            "\u7A2D\u7A2E\u7A2F\u7A30\u7A31\u7A32\u7A33\u7A34"+
-            "\u7A35\u7A36\u7A37\u7A38\u7A39\u7A3A\u7A3B\u7A3C"+
-            "\u7A3D\u7A3E\u7A3F\u7A40\u7A41\u7A42\u7A43\u7A44"+
-            "\u7A45\u7A46\u7A47\u7A48\u7A49\u7A4A\u7A4B\u7A4C"+
-            "\u7A4D\u7A4E\u7A4F\u7A50\u7A51\u7A52\u7A53\u7A54"+
-            "\u7A55\u7A56\u7A57\u7A58\u7A59\u7A5A\u7A5B\u7A5C"+
-            "\u7A5D\u7A5E\u7A5F\u7A60\u7A61\u7A62\u7A63\u7A64"+
-            "\u7A65\u7A66\u7A67\u7A68\u7A69\u7A6A\u7A6B\u7A6C"+
-            "\u7A6D\u7A6E\u7A6F\u7A70\u7A71\u7A72\u7A73\u7A74"+
-            "\u7A75\u7A76\u7A77\u7A78\u7A79\u7A7A\u7A7B\u7A7C"+
-            "\u7A7D\u7A7E\u7A7F\u7A80\u7A81\u7A82\u7A83\u7A84"+
-            "\u7A85\u7A86\u7A87\u7A88\u7A89\u7A8A\u7A8B\u7A8C"+
-            "\u7A8D\u7A8E\u7A8F\u7A90\u7A91\u7A92\u7A93\u7A94"+
-            "\u7A95\u7A96\u7A97\u7A98\u7A99\u7A9A\u7A9B\u7A9C"+
-            "\u7A9D\u7A9E\u7A9F\u7AA0\u7AA1\u7AA2\u7AA3\u7AA4"+
-            "\u7AA5\u7AA6\u7AA7\u7AA8\u7AA9\u7AAA\u7AAB\u7AAC"+
-            "\u7AAD\u7AAE\u7AAF\u7AB0\u7AB1\u7AB2\u7AB3\u7AB4"+
-            "\u7AB5\u7AB6\u7AB7\u7AB8\u7AB9\u7ABA\u7ABB\u7ABC";
-
-        private final static String innerIndex8=
-            "\u7ABD\u7ABE\u7ABF\u7AC0\u7AC1\u7AC2\u7AC3\u7AC4"+
-            "\u7AC5\u7AC6\u7AC7\u7AC8\u7AC9\u7ACA\u7ACB\u7ACC"+
-            "\u7ACD\u7ACE\u7ACF\u7AD0\u7AD1\u7AD2\u7AD3\u7AD4"+
-            "\u7AD5\u7AD6\u7AD7\u7AD8\u7AD9\u7ADA\u7ADB\u7ADC"+
-            "\u7ADD\u7ADE\u7ADF\u7AE0\u7AE1\u7AE2\u7AE3\u7AE4"+
-            "\u7AE5\u7AE6\u7AE7\u7AE8\u7AE9\u7AEA\u7AEB\u7AEC"+
-            "\u7AED\u7AEE\u7AEF\u7AF0\u7AF1\u7AF2\u7AF3\u7AF4"+
-            "\u7AF5\u7AF6\u7AF7\u7AF8\u7AF9\u7AFA\u7AFB\u7AFC"+
-            "\u7AFD\u7AFE\u7AFF\u7B00\u7B01\u7B02\u7B03\u7B04"+
-            "\u7B05\u7B06\u7B07\u7B08\u7B09\u7B0A\u7B0B\u7B0C"+
-            "\u7B0D\u7B0E\u7B0F\u7B10\u7B11\u7B12\u7B13\u7B14"+
-            "\u7B15\u7B16\u7B17\u7B18\u7B19\u7B1A\u7B1B\u7B1C"+
-            "\u7B1D\u7B1E\u7B1F\u7B20\u7B21\u7B22\u7B23\u7B24"+
-            "\u7B25\u7B26\u7B27\u7B28\u7B29\u7B2A\u7B2B\u7B2C"+
-            "\u7B2D\u7B2E\u7B2F\u7B30\u7B31\u7B32\u7B33\u7B34"+
-            "\u7B35\u7B36\u7B37\u7B38\u7B39\u7B3A\u7B3B\u7B3C"+
-            "\u7B3D\u7B3E\u7B3F\u7B40\u7B41\u7B42\u7B43\u7B44"+
-            "\u7B45\u7B46\u7B47\u7B48\u7B49\u7B4A\u7B4B\u7B4C"+
-            "\u7B4D\u7B4E\u7B4F\u7B50\u7B51\u7B52\u7B53\u7B54"+
-            "\u7B55\u7B56\u7B57\u7B58\u7B59\u7B5A\u7B5B\u7B5C"+
-            "\u7B5D\u7B5E\u7B5F\u7B60\u7B61\u7B62\u7B63\u7B64"+
-            "\u7B65\u7B66\u7B67\u7B68\u7B69\u7B6A\u7B6B\u7B6C"+
-            "\u7B6D\u7B6E\u7B6F\u7B70\u7B71\u7B72\u7B73\u7B74"+
-            "\u7B75\u7B76\u7B77\u7B78\u7B79\u7B7A\u7B7B\u7B7C"+
-            "\u7B7D\u7B7E\u7B7F\u7B80\u7B81\u7B82\u7B83\u7B84"+
-            "\u7B85\u7B86\u7B87\u7B88\u7B89\u7B8A\u7B8B\u7B8C"+
-            "\u7B8D\u7B8E\u7B8F\u7B90\u7B91\u7B92\u7B93\u7B94"+
-            "\u7B95\u7B96\u7B97\u7B98\u7B99\u7B9A\u7B9B\u7B9C"+
-            "\u7B9D\u7B9E\u7B9F\u7BA0\u7BA1\u7BA2\u7BA3\u7BA4"+
-            "\u7BA5\u7BA6\u7BA7\u7BA8\u7BA9\u7BAA\u7BAB\u7BAC"+
-            "\u7BAD\u7BAE\u7BAF\u7BB0\u7BB1\u7BB2\u7BB3\u7BB4"+
-            "\u7BB5\u7BB6\u7BB7\u7BB8\u7BB9\u7BBA\u7BBB\u7BBC"+
-            "\u7BBD\u7BBE\u7BBF\u7BC0\u7BC1\u7BC2\u7BC3\u7BC4"+
-            "\u7BC5\u7BC6\u7BC7\u7BC8\u7BC9\u7BCA\u7BCB\u7BCC"+
-            "\u7BCD\u7BCE\u7BCF\u7BD0\u7BD1\u7BD2\u7BD3\u7BD4"+
-            "\u7BD5\u7BD6\u7BD7\u7BD8\u7BD9\u7BDA\u7BDB\u7BDC"+
-            "\u7BDD\u7BDE\u7BDF\u7BE0\u7BE1\u7BE2\u7BE3\u7BE4"+
-            "\u7BE5\u7BE6\u7BE7\u7BE8\u7BE9\u7BEA\u7BEB\u7BEC"+
-            "\u7BED\u7BEE\u7BEF\u7BF0\u7BF1\u7BF2\u7BF3\u7BF4"+
-            "\u7BF5\u7BF6\u7BF7\u7BF8\u7BF9\u7BFA\u7BFB\u7BFC"+
-            "\u7BFD\u7BFE\u7BFF\u7C00\u7C01\u7C02\u7C03\u7C04"+
-            "\u7C05\u7C06\u7C07\u7C08\u7C09\u7C0A\u7C0B\u7C0C"+
-            "\u7C0D\u7C0E\u7C0F\u7C10\u7C11\u7C12\u7C13\u7C14"+
-            "\u7C15\u7C16\u7C17\u7C18\u7C19\u7C1A\u7C1B\u7C1C"+
-            "\u7C1D\u7C1E\u7C1F\u7C20\u7C21\u7C22\u7C23\u7C24"+
-            "\u7C25\u7C26\u7C27\u7C28\u7C29\u7C2A\u7C2B\u7C2C"+
-            "\u7C2D\u7C2E\u7C2F\u7C30\u7C31\u7C32\u7C33\u7C34"+
-            "\u7C35\u7C36\u7C37\u7C38\u7C39\u7C3A\u7C3B\u7C3C"+
-            "\u7C3D\u7C3E\u7C3F\u7C40\u7C41\u7C42\u7C43\u7C44"+
-            "\u7C45\u7C46\u7C47\u7C48\u7C49\u7C4A\u7C4B\u7C4C"+
-            "\u7C4D\u7C4E\u7C4F\u7C50\u7C51\u7C52\u7C53\u7C54"+
-            "\u7C55\u7C56\u7C57\u7C58\u7C59\u7C5A\u7C5B\u7C5C"+
-            "\u7C5D\u7C5E\u7C5F\u7C60\u7C61\u7C62\u7C63\u7C64"+
-            "\u7C65\u7C66\u7C67\u7C68\u7C69\u7C6A\u7C6B\u7C6C"+
-            "\u7C6D\u7C6E\u7C6F\u7C70\u7C71\u7C72\u7C73\u7C74"+
-            "\u7C75\u7C76\u7C77\u7C78\u7C79\u7C7A\u7C7B\u7C7C"+
-            "\u7C7D\u7C7E\u7C7F\u7C80\u7C81\u7C82\u7C83\u7C84"+
-            "\u7C85\u7C86\u7C87\u7C88\u7C89\u7C8A\u7C8B\u7C8C"+
-            "\u7C8D\u7C8E\u7C8F\u7C90\u7C91\u7C92\u7C93\u7C94"+
-            "\u7C95\u7C96\u7C97\u7C98\u7C99\u7C9A\u7C9B\u7C9C"+
-            "\u7C9D\u7C9E\u7C9F\u7CA0\u7CA1\u7CA2\u7CA3\u7CA4"+
-            "\u7CA5\u7CA6\u7CA7\u7CA8\u7CA9\u7CAA\u7CAB\u7CAC"+
-            "\u7CAD\u7CAE\u7CAF\u7CB0\u7CB1\u7CB2\u7CB3\u7CB4"+
-            "\u7CB5\u7CB6\u7CB7\u7CB8\u7CB9\u7CBA\u7CBB\u7CBC"+
-            "\u7CBD\u7CBE\u7CBF\u7CC0\u7CC1\u7CC2\u7CC3\u7CC4"+
-            "\u7CC5\u7CC6\u7CC7\u7CC8\u7CC9\u7CCA\u7CCB\u7CCC"+
-            "\u7CCD\u7CCE\u7CCF\u7CD0\u7CD1\u7CD2\u7CD3\u7CD4"+
-            "\u7CD5\u7CD6\u7CD7\u7CD8\u7CD9\u7CDA\u7CDB\u7CDC"+
-            "\u7CDD\u7CDE\u7CDF\u7CE0\u7CE1\u7CE2\u7CE3\u7CE4"+
-            "\u7CE5\u7CE6\u7CE7\u7CE8\u7CE9\u7CEA\u7CEB\u7CEC"+
-            "\u7CED\u7CEE\u7CEF\u7CF0\u7CF1\u7CF2\u7CF3\u7CF4"+
-            "\u7CF5\u7CF6\u7CF7\u7CF8\u7CF9\u7CFA\u7CFB\u7CFC"+
-            "\u7CFD\u7CFE\u7CFF\u7D00\u7D01\u7D02\u7D03\u7D04"+
-            "\u7D05\u7D06\u7D07\u7D08\u7D09\u7D0A\u7D0B\u7D0C"+
-            "\u7D0D\u7D0E\u7D0F\u7D10\u7D11\u7D12\u7D13\u7D14"+
-            "\u7D15\u7D16\u7D17\u7D18\u7D19\u7D1A\u7D1B\u7D1C"+
-            "\u7D1D\u7D1E\u7D1F\u7D20\u7D21\u7D22\u7D23\u7D24"+
-            "\u7D25\u7D26\u7D27\u7D28\u7D29\u7D2A\u7D2B\u7D2C"+
-            "\u7D2D\u7D2E\u7D2F\u7D30\u7D31\u7D32\u7D33\u7D34"+
-            "\u7D35\u7D36\u7D37\u7D38\u7D39\u7D3A\u7D3B\u7D3C"+
-            "\u7D3D\u7D3E\u7D3F\u7D40\u7D41\u7D42\u7D43\u7D44"+
-            "\u7D45\u7D46\u7D47\u7D48\u7D49\u7D4A\u7D4B\u7D4C"+
-            "\u7D4D\u7D4E\u7D4F\u7D50\u7D51\u7D52\u7D53\u7D54"+
-            "\u7D55\u7D56\u7D57\u7D58\u7D59\u7D5A\u7D5B\u7D5C"+
-            "\u7D5D\u7D5E\u7D5F\u7D60\u7D61\u7D62\u7D63\u7D64"+
-            "\u7D65\u7D66\u7D67\u7D68\u7D69\u7D6A\u7D6B\u7D6C"+
-            "\u7D6D\u7D6E\u7D6F\u7D70\u7D71\u7D72\u7D73\u7D74"+
-            "\u7D75\u7D76\u7D77\u7D78\u7D79\u7D7A\u7D7B\u7D7C"+
-            "\u7D7D\u7D7E\u7D7F\u7D80\u7D81\u7D82\u7D83\u7D84"+
-            "\u7D85\u7D86\u7D87\u7D88\u7D89\u7D8A\u7D8B\u7D8C"+
-            "\u7D8D\u7D8E\u7D8F\u7D90\u7D91\u7D92\u7D93\u7D94"+
-            "\u7D95\u7D96\u7D97\u7D98\u7D99\u7D9A\u7D9B\u7D9C"+
-            "\u7D9D\u7D9E\u7D9F\u7DA0\u7DA1\u7DA2\u7DA3\u7DA4"+
-            "\u7DA5\u7DA6\u7DA7\u7DA8\u7DA9\u7DAA\u7DAB\u7DAC"+
-            "\u7DAD\u7DAE\u7DAF\u7DB0\u7DB1\u7DB2\u7DB3\u7DB4"+
-            "\u7DB5\u7DB6\u7DB7\u7DB8\u7DB9\u7DBA\u7DBB\u7DBC"+
-            "\u7DBD\u7DBE\u7DBF\u7DC0\u7DC1\u7DC2\u7DC3\u7DC4"+
-            "\u7DC5\u7DC6\u7DC7\u7DC8\u7DC9\u7DCA\u7DCB\u7DCC"+
-            "\u7DCD\u7DCE\u7DCF\u7DD0\u7DD1\u7DD2\u7DD3\u7DD4"+
-            "\u7DD5\u7DD6\u7DD7\u7DD8\u7DD9\u7DDA\u7DDB\u7DDC"+
-            "\u7DDD\u7DDE\u7DDF\u7DE0\u7DE1\u7DE2\u7DE3\u7DE4"+
-            "\u7DE5\u7DE6\u7DE7\u7DE8\u7DE9\u7DEA\u7DEB\u7DEC"+
-            "\u7DED\u7DEE\u7DEF\u7DF0\u7DF1\u7DF2\u7DF3\u7DF4"+
-            "\u7DF5\u7DF6\u7DF7\u7DF8\u7DF9\u7DFA\u7DFB\u7DFC"+
-            "\u7DFD\u7DFE\u7DFF\u7E00\u7E01\u7E02\u7E03\u7E04"+
-            "\u7E05\u7E06\u7E07\u7E08\u7E09\u7E0A\u7E0B\u7E0C"+
-            "\u7E0D\u7E0E\u7E0F\u7E10\u7E11\u7E12\u7E13\u7E14"+
-            "\u7E15\u7E16\u7E17\u7E18\u7E19\u7E1A\u7E1B\u7E1C"+
-            "\u7E1D\u7E1E\u7E1F\u7E20\u7E21\u7E22\u7E23\u7E24"+
-            "\u7E25\u7E26\u7E27\u7E28\u7E29\u7E2A\u7E2B\u7E2C"+
-            "\u7E2D\u7E2E\u7E2F\u7E30\u7E31\u7E32\u7E33\u7E34"+
-            "\u7E35\u7E36\u7E37\u7E38\u7E39\u7E3A\u7E3B\u7E3C"+
-            "\u7E3D\u7E3E\u7E3F\u7E40\u7E41\u7E42\u7E43\u7E44"+
-            "\u7E45\u7E46\u7E47\u7E48\u7E49\u7E4A\u7E4B\u7E4C"+
-            "\u7E4D\u7E4E\u7E4F\u7E50\u7E51\u7E52\u7E53\u7E54"+
-            "\u7E55\u7E56\u7E57\u7E58\u7E59\u7E5A\u7E5B\u7E5C"+
-            "\u7E5D\u7E5E\u7E5F\u7E60\u7E61\u7E62\u7E63\u7E64"+
-            "\u7E65\u7E66\u7E67\u7E68\u7E69\u7E6A\u7E6B\u7E6C"+
-            "\u7E6D\u7E6E\u7E6F\u7E70\u7E71\u7E72\u7E73\u7E74"+
-            "\u7E75\u7E76\u7E77\u7E78\u7E79\u7E7A\u7E7B\u7E7C"+
-            "\u7E7D\u7E7E\u7E7F\u7E80\u7E81\u7E82\u7E83\u7E84"+
-            "\u7E85\u7E86\u7E87\u7E88\u7E89\u7E8A\u7E8B\u7E8C"+
-            "\u7E8D\u7E8E\u7E8F\u7E90\u7E91\u7E92\u7E93\u7E94"+
-            "\u7E95\u7E96\u7E97\u7E98\u7E99\u7E9A\u7E9B\u7E9C"+
-            "\u7E9D\u7E9E\u7E9F\u7EA0\u7EA1\u7EA2\u7EA3\u7EA4"+
-            "\u7EA5\u7EA6\u7EA7\u7EA8\u7EA9\u7EAA\u7EAB\u7EAC"+
-            "\u7EAD\u7EAE\u7EAF\u7EB0\u7EB1\u7EB2\u7EB3\u7EB4"+
-            "\u7EB5\u7EB6\u7EB7\u7EB8\u7EB9\u7EBA\u7EBB\u7EBC"+
-            "\u7EBD\u7EBE\u7EBF\u7EC0\u7EC1\u7EC2\u7EC3\u7EC4"+
-            "\u7EC5\u7EC6\u7EC7\u7EC8\u7EC9\u7ECA\u7ECB\u7ECC"+
-            "\u7ECD\u7ECE\u7ECF\u7ED0\u7ED1\u7ED2\u7ED3\u7ED4"+
-            "\u7ED5\u7ED6\u7ED7\u7ED8\u7ED9\u7EDA\u7EDB\u7EDC"+
-            "\u7EDD\u7EDE\u7EDF\u7EE0\u7EE1\u7EE2\u7EE3\u7EE4"+
-            "\u7EE5\u7EE6\u7EE7\u7EE8\u7EE9\u7EEA\u7EEB\u7EEC"+
-            "\u7EED\u7EEE\u7EEF\u7EF0\u7EF1\u7EF2\u7EF3\u7EF4"+
-            "\u7EF5\u7EF6\u7EF7\u7EF8\u7EF9\u7EFA\u7EFB\u7EFC"+
-            "\u7EFD\u7EFE\u7EFF\u7F00\u7F01\u7F02\u7F03\u7F04"+
-            "\u7F05\u7F06\u7F07\u7F08\u7F09\u7F0A\u7F0B\u7F0C"+
-            "\u7F0D\u7F0E\u7F0F\u7F10\u7F11\u7F12\u7F13\u7F14"+
-            "\u7F15\u7F16\u7F17\u7F18\u7F19\u7F1A\u7F1B\u7F1C"+
-            "\u7F1D\u7F1E\u7F1F\u7F20\u7F21\u7F22\u7F23\u7F24"+
-            "\u7F25\u7F26\u7F27\u7F28\u7F29\u7F2A\u7F2B\u7F2C"+
-            "\u7F2D\u7F2E\u7F2F\u7F30\u7F31\u7F32\u7F33\u7F34"+
-            "\u7F35\u7F36\u7F37\u7F38\u7F39\u7F3A\u7F3B\u7F3C"+
-            "\u7F3D\u7F3E\u7F3F\u7F40\u7F41\u7F42\u7F43\u7F44"+
-            "\u7F45\u7F46\u7F47\u7F48\u7F49\u7F4A\u7F4B\u7F4C"+
-            "\u7F4D\u7F4E\u7F4F\u7F50\u7F51\u7F52\u7F53\u7F54"+
-            "\u7F55\u7F56\u7F57\u7F58\u7F59\u7F5A\u7F5B\u7F5C"+
-            "\u7F5D\u7F5E\u7F5F\u7F60\u7F61\u7F62\u7F63\u7F64"+
-            "\u7F65\u7F66\u7F67\u7F68\u7F69\u7F6A\u7F6B\u7F6C"+
-            "\u7F6D\u7F6E\u7F6F\u7F70\u7F71\u7F72\u7F73\u7F74"+
-            "\u7F75\u7F76\u7F77\u7F78\u7F79\u7F7A\u7F7B\u7F7C"+
-            "\u7F7D\u7F7E\u7F7F\u7F80\u7F81\u7F82\u7F83\u7F84"+
-            "\u7F85\u7F86\u7F87\u7F88\u7F89\u7F8A\u7F8B\u7F8C"+
-            "\u7F8D\u7F8E\u7F8F\u7F90\u7F91\u7F92\u7F93\u7F94"+
-            "\u7F95\u7F96\u7F97\u7F98\u7F99\u7F9A\u7F9B\u7F9C"+
-            "\u7F9D\u7F9E\u7F9F\u7FA0\u7FA1\u7FA2\u7FA3\u7FA4"+
-            "\u7FA5\u7FA6\u7FA7\u7FA8\u7FA9\u7FAA\u7FAB\u7FAC"+
-            "\u7FAD\u7FAE\u7FAF\u7FB0\u7FB1\u7FB2\u7FB3\u7FB4"+
-            "\u7FB5\u7FB6\u7FB7\u7FB8\u7FB9\u7FBA\u7FBB\u7FBC"+
-            "\u7FBD\u7FBE\u7FBF\u7FC0\u7FC1\u7FC2\u7FC3\u7FC4"+
-            "\u7FC5\u7FC6\u7FC7\u7FC8\u7FC9\u7FCA\u7FCB\u7FCC"+
-            "\u7FCD\u7FCE\u7FCF\u7FD0\u7FD1\u7FD2\u7FD3\u7FD4"+
-            "\u7FD5\u7FD6\u7FD7\u7FD8\u7FD9\u7FDA\u7FDB\u7FDC"+
-            "\u7FDD\u7FDE\u7FDF\u7FE0\u7FE1\u7FE2\u7FE3\u7FE4"+
-            "\u7FE5\u7FE6\u7FE7\u7FE8\u7FE9\u7FEA\u7FEB\u7FEC"+
-            "\u7FED\u7FEE\u7FEF\u7FF0\u7FF1\u7FF2\u7FF3\u7FF4"+
-            "\u7FF5\u7FF6\u7FF7\u7FF8\u7FF9\u7FFA\u7FFB\u7FFC"+
-            "\u7FFD\u7FFE\u7FFF\u8000\u8001\u8002\u8003\u8004"+
-            "\u8005\u8006\u8007\u8008\u8009\u800A\u800B\u800C"+
-            "\u800D\u800E\u800F\u8010\u8011\u8012\u8013\u8014"+
-            "\u8015\u8016\u8017\u8018\u8019\u801A\u801B\u801C"+
-            "\u801D\u801E\u801F\u8020\u8021\u8022\u8023\u8024"+
-            "\u8025\u8026\u8027\u8028\u8029\u802A\u802B\u802C"+
-            "\u802D\u802E\u802F\u8030\u8031\u8032\u8033\u8034"+
-            "\u8035\u8036\u8037\u8038\u8039\u803A\u803B\u803C"+
-            "\u803D\u803E\u803F\u8040\u8041\u8042\u8043\u8044"+
-            "\u8045\u8046\u8047\u8048\u8049\u804A\u804B\u804C"+
-            "\u804D\u804E\u804F\u8050\u8051\u8052\u8053\u8054"+
-            "\u8055\u8056\u8057\u8058\u8059\u805A\u805B\u805C"+
-            "\u805D\u805E\u805F\u8060\u8061\u8062\u8063\u8064"+
-            "\u8065\u8066\u8067\u8068\u8069\u806A\u806B\u806C"+
-            "\u806D\u806E\u806F\u8070\u8071\u8072\u8073\u8074"+
-            "\u8075\u8076\u8077\u8078\u8079\u807A\u807B\u807C"+
-            "\u807D\u807E\u807F\u8080\u8081\u8082\u8083\u8084"+
-            "\u8085\u8086\u8087\u8088\u8089\u808A\u808B\u808C"+
-            "\u808D\u808E\u808F\u8090\u8091\u8092\u8093\u8094"+
-            "\u8095\u8096\u8097\u8098\u8099\u809A\u809B\u809C"+
-            "\u809D\u809E\u809F\u80A0\u80A1\u80A2\u80A3\u80A4"+
-            "\u80A5\u80A6\u80A7\u80A8\u80A9\u80AA\u80AB\u80AC"+
-            "\u80AD\u80AE\u80AF\u80B0\u80B1\u80B2\u80B3\u80B4"+
-            "\u80B5\u80B6\u80B7\u80B8\u80B9\u80BA\u80BB\u80BC"+
-            "\u80BD\u80BE\u80BF\u80C0\u80C1\u80C2\u80C3\u80C4"+
-            "\u80C5\u80C6\u80C7\u80C8\u80C9\u80CA\u80CB\u80CC"+
-            "\u80CD\u80CE\u80CF\u80D0\u80D1\u80D2\u80D3\u80D4"+
-            "\u80D5\u80D6\u80D7\u80D8\u80D9\u80DA\u80DB\u80DC"+
-            "\u80DD\u80DE\u80DF\u80E0\u80E1\u80E2\u80E3\u80E4"+
-            "\u80E5\u80E6\u80E7\u80E8\u80E9\u80EA\u80EB\u80EC"+
-            "\u80ED\u80EE\u80EF\u80F0\u80F1\u80F2\u80F3\u80F4"+
-            "\u80F5\u80F6\u80F7\u80F8\u80F9\u80FA\u80FB\u80FC"+
-            "\u80FD\u80FE\u80FF\u8100\u8101\u8102\u8103\u8104"+
-            "\u8105\u8106\u8107\u8108\u8109\u810A\u810B\u810C"+
-            "\u810D\u810E\u810F\u8110\u8111\u8112\u8113\u8114"+
-            "\u8115\u8116\u8117\u8118\u8119\u811A\u811B\u811C"+
-            "\u811D\u811E\u811F\u8120\u8121\u8122\u8123\u8124"+
-            "\u8125\u8126\u8127\u8128\u8129\u812A\u812B\u812C"+
-            "\u812D\u812E\u812F\u8130\u8131\u8132\u8133\u8134"+
-            "\u8135\u8136\u8137\u8138\u8139\u813A\u813B\u813C"+
-            "\u813D\u813E\u813F\u8140\u8141\u8142\u8143\u8144"+
-            "\u8145\u8146\u8147\u8148\u8149\u814A\u814B\u814C"+
-            "\u814D\u814E\u814F\u8150\u8151\u8152\u8153\u8154"+
-            "\u8155\u8156\u8157\u8158\u8159\u815A\u815B\u815C"+
-            "\u815D\u815E\u815F\u8160\u8161\u8162\u8163\u8164"+
-            "\u8165\u8166\u8167\u8168\u8169\u816A\u816B\u816C"+
-            "\u816D\u816E\u816F\u8170\u8171\u8172\u8173\u8174"+
-            "\u8175\u8176\u8177\u8178\u8179\u817A\u817B\u817C"+
-            "\u817D\u817E\u817F\u8180\u8181\u8182\u8183\u8184"+
-            "\u8185\u8186\u8187\u8188\u8189\u818A\u818B\u818C"+
-            "\u818D\u818E\u818F\u8190\u8191\u8192\u8193\u8194"+
-            "\u8195\u8196\u8197\u8198\u8199\u819A\u819B\u819C"+
-            "\u819D\u819E\u819F\u81A0\u81A1\u81A2\u81A3\u81A4"+
-            "\u81A5\u81A6\u81A7\u81A8\u81A9\u81AA\u81AB\u81AC"+
-            "\u81AD\u81AE\u81AF\u81B0\u81B1\u81B2\u81B3\u81B4"+
-            "\u81B5\u81B6\u81B7\u81B8\u81B9\u81BA\u81BB\u81BC"+
-            "\u81BD\u81BE\u81BF\u81C0\u81C1\u81C2\u81C3\u81C4"+
-            "\u81C5\u81C6\u81C7\u81C8\u81C9\u81CA\u81CB\u81CC"+
-            "\u81CD\u81CE\u81CF\u81D0\u81D1\u81D2\u81D3\u81D4"+
-            "\u81D5\u81D6\u81D7\u81D8\u81D9\u81DA\u81DB\u81DC"+
-            "\u81DD\u81DE\u81DF\u81E0\u81E1\u81E2\u81E3\u81E4"+
-            "\u81E5\u81E6\u81E7\u81E8\u81E9\u81EA\u81EB\u81EC"+
-            "\u81ED\u81EE\u81EF\u81F0\u81F1\u81F2\u81F3\u81F4"+
-            "\u81F5\u81F6\u81F7\u81F8\u81F9\u81FA\u81FB\u81FC"+
-            "\u81FD\u81FE\u81FF\u8200\u8201\u8202\u8203\u8204"+
-            "\u8205\u8206\u8207\u8208\u8209\u820A\u820B\u820C"+
-            "\u820D\u820E\u820F\u8210\u8211\u8212\u8213\u8214"+
-            "\u8215\u8216\u8217\u8218\u8219\u821A\u821B\u821C"+
-            "\u821D\u821E\u821F\u8220\u8221\u8222\u8223\u8224"+
-            "\u8225\u8226\u8227\u8228\u8229\u822A\u822B\u822C"+
-            "\u822D\u822E\u822F\u8230\u8231\u8232\u8233\u8234"+
-            "\u8235\u8236\u8237\u8238\u8239\u823A\u823B\u823C"+
-            "\u823D\u823E\u823F\u8240\u8241\u8242\u8243\u8244"+
-            "\u8245\u8246\u8247\u8248\u8249\u824A\u824B\u824C"+
-            "\u824D\u824E\u824F\u8250\u8251\u8252\u8253\u8254"+
-            "\u8255\u8256\u8257\u8258\u8259\u825A\u825B\u825C"+
-            "\u825D\u825E\u825F\u8260\u8261\u8262\u8263\u8264"+
-            "\u8265\u8266\u8267\u8268\u8269\u826A\u826B\u826C"+
-            "\u826D\u826E\u826F\u8270\u8271\u8272\u8273\u8274"+
-            "\u8275\u8276\u8277\u8278\u8279\u827A\u827B\u827C"+
-            "\u827D\u827E\u827F\u8280\u8281\u8282\u8283\u8284"+
-            "\u8285\u8286\u8287\u8288\u8289\u828A\u828B\u828C"+
-            "\u828D\u828E\u828F\u8290\u8291\u8292\u8293\u8294"+
-            "\u8295\u8296\u8297\u8298\u8299\u829A\u829B\u829C"+
-            "\u829D\u829E\u829F\u82A0\u82A1\u82A2\u82A3\u82A4"+
-            "\u82A5\u82A6\u82A7\u82A8\u82A9\u82AA\u82AB\u82AC"+
-            "\u82AD\u82AE\u82AF\u82B0\u82B1\u82B2\u82B3\u82B4"+
-            "\u82B5\u82B6\u82B7\u82B8\u82B9\u82BA\u82BB\u82BC"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u82BD\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u82BE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u82BF"+
-            "\u82C0\u82C1\u82C2\u82C3\u82C4\u82C5\u82C6\u82C7"+
-            "\u82C8\u82C9\u82CA\u82CB\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u82CC\u0000\u0000"+
-            "\u0000\u82CD\u82CE\u82CF\u82D0\u82D1\u0000\u82D2"+
-            "\u82D3\u82D4\u82D5\u82D6\u82D7\u82D8\u0000\u82D9"+
-            "\u82DA\u82DB\u82DC\u0000\u0000\u82DD\u82DE\u82DF"+
-            "\u82E0\u0000\u0000\u82E1\u82E2\u82E3\u82E4\u82E5"+
-            "\u82E6\u82E7\u82E8\u0000\u82E9\u82EA\u82EB\u82EC"+
-            "\u82ED\u82EE\u82EF\u0000\u82F0\u82F1\u82F2\u82F3"+
-            "\u82F4\u82F5\u82F6\u82F7\u82F8\u82F9\u82FA\u82FB"+
-            "\u82FC\u82FD\u82FE\u82FF\u0000\u0000\u8300\u8301"+
-            "\u8302\u8303\u8304\u8305\u8306\u8307\u8308\u8309"+
-            "\u830A\u830B\u830C\u830D\u0000\u830E\u830F\u8310"+
-            "\u8311\u8312\u8313\u8314\u8315\u8316\u8317\u8318"+
-            "\u8319\u831A\u831B\u831C\u831D\u831E\u831F\u8320"+
-            "\u8321\u8322\u8323\u8324\u8325\u8326\u8327\u8328"+
-            "\u8329\u832A\u832B\u832C\u832D\u832E\u832F\u8330"+
-            "\u8331\u8332\u8333\u8334\u8335\u8336\u8337\u8338"+
-            "\u8339\u833A\u833B\u833C\u833D\u833E\u833F\u8340"+
-            "\u8341\u8342\u8343\u8344\u8345\u8346\u8347\u8348"+
-            "\u8349\u834A\u834B\u834C\u834D\u834E\u834F\u8350"+
-            "\u8351\u8352\u8353\u8354\u8355\u8356\u8357\u8358"+
-            "\u8359\u835A\u835B\u835C\u835D\u835E\u835F\u8360"+
-            "\u8361\u8362\u8363\u8364\u8365\u8366\u8367\u8368"+
-            "\u8369\u836A\u836B\u836C\u836D\u836E\u836F\u8370"+
-            "\u8371\u8372\u8373\u8374\u8375\u8376\u8377\u8378"+
-            "\u8379\u837A\u837B\u837C\u837D\u837E\u837F\u8380"+
-            "\u8381\u8382\u8383\u8384\u8385\u8386\u8387\u8388"+
-            "\u8389\u838A\u838B\u838C\u838D\u838E\u838F\u8390"+
-            "\u8391\u8392\u8393\u8394\u8395\u8396\u8397\u8398"+
-            "\u8399\u839A\u839B\u839C\u839D\u839E\u839F\u83A0"+
-            "\u83A1\u83A2\u83A3\u83A4\u83A5\u83A6\u83A7\u83A8"+
-            "\u83A9\u83AA\u83AB\u83AC\u83AD\u83AE\u83AF\u83B0"+
-            "\u83B1\u83B2\u83B3\u83B4\u83B5\u83B6\u83B7\u83B8"+
-            "\u83B9\u83BA\u83BB\u83BC\u83BD\u83BE\u83BF\u83C0"+
-            "\u83C1\u83C2\u83C3\u83C4\u83C5\u83C6\u83C7\u83C8"+
-            "\u83C9\u83CA\u83CB\u83CC\u83CD\u83CE\u83CF\u83D0"+
-            "\u83D1\u83D2\u83D3\u83D4\u83D5\u83D6\u83D7\u83D8"+
-            "\u83D9\u83DA\u83DB\u83DC\u83DD\u83DE\u83DF\u83E0"+
-            "\u83E1\u83E2\u83E3\u83E4\u83E5\u83E6\u83E7\u83E8"+
-            "\u83E9\u83EA\u83EB\u83EC\u83ED\u83EE\u83EF\u83F0"+
-            "\u83F1\u83F2\u83F3\u83F4\u83F5\u83F6\u83F7\u83F8"+
-            "\u83F9\u83FA\u83FB\u83FC\u83FD\u83FE\u83FF\u8400"+
-            "\u8401\u8402\u8403\u8404\u8405\u8406\u8407\u8408"+
-            "\u8409\u840A\u840B\u840C\u840D\u840E\u840F\u8410"+
-            "\u8411\u8412\u8413\u8414\u8415\u8416\u8417\u8418"+
-            "\u8419\u841A\u841B\u841C\u841D\u841E\u841F\u8420"+
-            "\u8421\u8422\u8423\u8424\u8425\u8426\u8427\u8428"+
-            "\u8429\u842A\u842B\u842C\u842D\u842E\u842F\u8430"+
-            "\u8431\u8432\u8433\u8434\u8435\u8436\u8437\u8438"+
-            "\u8439\u843A\u843B\u843C\u843D\u843E\u843F\u8440"+
-            "\u8441\u8442\u8443\u8444\u8445\u8446\u8447\u8448"+
-            "\u8449\u844A\u844B\u844C\u844D\u844E\u844F\u8450"+
-            "\u8451\u8452\u8453\u8454\u8455\u8456\u8457\u8458"+
-            "\u8459\u845A\u845B\u845C\u845D\u845E\u845F\u8460"+
-            "\u8461\u8462\u8463\u8464\u8465\u8466\u8467\u8468"+
-            "\u8469\u846A\u846B\u846C\u846D\u846E\u846F\u8470"+
-            "\u8471\u8472\u8473\u8474\u8475\u8476\u8477\u8478"+
-            "\u8479\u847A\u847B\u847C\u847D\u847E\u847F\u8480"+
-            "\u8481\u8482\u8483\u8484\u8485\u8486\u8487\u8488"+
-            "\u8489\u848A\u848B\u848C\u848D\u848E\u848F\u8490"+
-            "\u8491\u8492\u8493\u8494\u8495\u8496\u8497\u8498"+
-            "\u8499\u849A\u849B\u849C\u849D\u849E\u849F\u84A0"+
-            "\u84A1\u84A2\u84A3\u84A4\u84A5\u84A6\u84A7\u84A8"+
-            "\u84A9\u84AA\u84AB\u84AC\u84AD\u84AE\u84AF\u84B0"+
-            "\u84B1\u84B2\u84B3\u84B4\u84B5\u84B6\u84B7\u84B8"+
-            "\u84B9\u84BA\u84BB\u84BC\u84BD\u84BE\u84BF\u84C0"+
-            "\u84C1\u84C2\u84C3\u84C4\u84C5\u84C6\u84C7\u84C8"+
-            "\u84C9\u84CA\u84CB\u84CC\u84CD\u84CE\u84CF\u84D0"+
-            "\u84D1\u84D2\u84D3\u84D4\u84D5\u84D6\u84D7\u84D8"+
-            "\u84D9\u84DA\u84DB\u84DC\u84DD\u84DE\u84DF\u84E0"+
-            "\u84E1\u84E2\u84E3\u84E4\u84E5\u84E6\u84E7\u84E8"+
-            "\u84E9\u84EA\u84EB\u84EC\u84ED\u84EE\u84EF\u84F0"+
-            "\u84F1\u84F2\u84F3\u84F4\u84F5\u84F6\u84F7\u84F8"+
-            "\u84F9\u84FA\u84FB\u84FC\u84FD\u84FE\u84FF\u8500"+
-            "\u8501\u8502\u8503\u8504\u8505\u8506\u8507\u8508"+
-            "\u8509\u850A\u850B\u850C\u850D\u850E\u850F\u8510"+
-            "\u8511\u8512\u8513\u8514\u8515\u8516\u8517\u8518"+
-            "\u8519\u851A\u851B\u851C\u851D\u851E\u851F\u8520"+
-            "\u8521\u8522\u8523\u8524\u8525\u8526\u8527\u8528"+
-            "\u8529\u852A\u852B\u852C\u852D\u852E\u852F\u8530"+
-            "\u8531\u8532\u8533\u8534\u8535\u8536\u8537\u8538"+
-            "\u8539\u853A\u853B\u853C\u853D\u853E\u853F\u8540"+
-            "\u8541\u8542\u8543\u8544\u8545\u8546\u8547\u8548"+
-            "\u8549\u854A\u854B\u854C\u854D\u854E\u854F\u8550"+
-            "\u8551\u8552\u8553\u8554\u8555\u8556\u8557\u8558"+
-            "\u8559\u855A\u855B\u855C\u855D\u855E\u855F\u8560"+
-            "\u8561\u8562\u8563\u8564\u8565\u8566\u8567\u8568"+
-            "\u8569\u856A\u856B\u856C\u856D\u856E\u856F\u8570"+
-            "\u8571\u8572\u8573\u8574\u8575\u8576\u8577\u8578"+
-            "\u8579\u857A\u857B\u857C\u857D\u857E\u857F\u8580"+
-            "\u8581\u8582\u8583\u8584\u8585\u8586\u8587\u8588"+
-            "\u8589\u858A\u858B\u858C\u858D\u858E\u858F\u8590"+
-            "\u8591\u8592\u8593\u8594\u8595\u8596\u8597\u8598"+
-            "\u8599\u859A\u859B\u859C\u859D\u859E\u859F\u85A0"+
-            "\u85A1\u85A2\u85A3\u85A4\u85A5\u85A6\u85A7\u85A8"+
-            "\u85A9\u85AA\u85AB\u85AC\u85AD\u85AE\u85AF\u85B0"+
-            "\u85B1\u85B2\u85B3\u85B4\u85B5\u85B6\u85B7\u85B8"+
-            "\u85B9\u85BA\u85BB\u85BC\u85BD\u85BE\u85BF\u85C0"+
-            "\u85C1\u85C2\u85C3\u85C4\u85C5\u85C6\u85C7\u85C8"+
-            "\u85C9\u85CA\u85CB\u85CC\u85CD\u85CE\u85CF\u85D0"+
-            "\u85D1\u85D2\u85D3\u85D4\u85D5\u85D6\u85D7\u85D8"+
-            "\u85D9\u85DA\u85DB\u85DC\u85DD\u85DE\u85DF\u85E0"+
-            "\u85E1\u85E2\u85E3\u85E4\u85E5\u85E6\u85E7\u85E8"+
-            "\u85E9\u85EA\u85EB\u85EC\u85ED\u85EE\u85EF\u85F0"+
-            "\u85F1\u85F2\u85F3\u85F4\u85F5\u85F6\u85F7\u85F8"+
-            "\u85F9\u85FA\u85FB\u85FC\u85FD\u85FE\u85FF\u8600"+
-            "\u8601\u8602\u8603\u8604\u8605\u8606\u8607\u8608"+
-            "\u8609\u860A\u860B\u860C\u860D\u860E\u860F\u8610"+
-            "\u8611\u8612\u8613\u8614\u8615\u8616\u8617\u8618"+
-            "\u8619\u861A\u861B\u861C\u861D\u861E\u861F\u8620"+
-            "\u8621\u8622\u8623\u8624\u8625\u8626\u8627\u8628"+
-            "\u8629\u862A\u862B\u862C\u862D\u862E\u862F\u8630"+
-            "\u8631\u8632\u8633\u8634\u8635\u8636\u8637\u8638"+
-            "\u8639\u863A\u863B\u863C\u863D\u863E\u863F\u8640"+
-            "\u8641\u8642\u8643\u8644\u8645\u8646\u8647\u8648"+
-            "\u8649\u864A\u864B\u864C\u864D\u864E\u864F\u8650"+
-            "\u8651\u8652\u8653\u8654\u8655\u8656\u8657\u8658"+
-            "\u8659\u865A\u865B\u865C\u865D\u865E\u865F\u8660"+
-            "\u8661\u8662\u8663\u8664\u8665\u8666\u8667\u8668"+
-            "\u8669\u866A\u866B\u866C\u866D\u866E\u866F\u8670"+
-            "\u8671\u8672\u8673\u8674\u8675\u8676\u8677\u8678"+
-            "\u8679\u867A\u867B\u867C\u867D\u867E\u867F\u8680"+
-            "\u8681\u8682\u8683\u8684\u8685\u8686\u8687\u8688"+
-            "\u8689\u868A\u868B\u868C\u868D\u868E\u868F\u8690"+
-            "\u8691\u8692\u8693\u8694\u8695\u8696\u8697\u8698"+
-            "\u8699\u869A\u869B\u869C\u869D\u869E\u869F\u86A0"+
-            "\u86A1\u86A2\u86A3\u86A4\u86A5\u86A6\u86A7\u86A8"+
-            "\u86A9\u86AA\u86AB\u86AC\u86AD\u86AE\u86AF\u86B0"+
-            "\u86B1\u86B2\u86B3\u86B4\u86B5\u86B6\u86B7\u86B8"+
-            "\u86B9\u86BA\u86BB\u86BC\u86BD\u86BE\u86BF\u86C0"+
-            "\u86C1\u86C2\u86C3\u86C4\u86C5\u86C6\u86C7\u86C8"+
-            "\u86C9\u86CA\u86CB\u86CC\u86CD\u86CE\u86CF\u86D0"+
-            "\u86D1\u86D2\u86D3\u86D4\u86D5\u86D6\u86D7\u86D8"+
-            "\u86D9\u86DA\u86DB\u86DC\u86DD\u86DE\u86DF\u86E0"+
-            "\u86E1\u86E2\u86E3\u86E4\u86E5\u86E6\u86E7\u86E8"+
-            "\u86E9\u86EA\u86EB\u86EC\u86ED\u86EE\u86EF\u86F0"+
-            "\u86F1\u86F2\u86F3\u86F4\u86F5\u86F6\u86F7\u86F8"+
-            "\u86F9\u86FA\u86FB\u86FC\u86FD\u86FE\u86FF\u8700"+
-            "\u8701\u8702\u8703\u8704\u8705\u8706\u8707\u8708"+
-            "\u8709\u870A\u870B\u870C\u870D\u870E\u870F\u8710"+
-            "\u8711\u8712\u8713\u8714\u8715\u8716\u8717\u8718"+
-            "\u8719\u871A\u871B\u871C\u871D\u871E\u871F\u8720"+
-            "\u8721\u8722\u8723\u8724\u8725\u8726\u8727\u8728"+
-            "\u8729\u872A\u872B\u872C\u872D\u872E\u872F\u8730"+
-            "\u8731\u8732\u8733\u8734\u8735\u8736\u8737\u8738"+
-            "\u8739\u873A\u873B\u873C\u873D\u873E\u873F\u8740"+
-            "\u8741\u8742\u8743\u8744\u8745\u8746\u8747\u8748"+
-            "\u8749\u874A\u874B\u874C\u874D\u874E\u874F\u8750"+
-            "\u8751\u8752\u8753\u8754\u8755\u8756\u8757\u8758"+
-            "\u8759\u875A\u875B\u875C\u875D\u875E\u875F\u8760"+
-            "\u8761\u8762\u8763\u8764\u8765\u8766\u8767\u8768"+
-            "\u8769\u876A\u876B\u876C\u876D\u876E\u876F\u8770"+
-            "\u8771\u8772\u8773\u8774\u8775\u8776\u8777\u8778"+
-            "\u8779\u877A\u877B\u877C\u877D\u877E\u877F\u8780"+
-            "\u8781\u8782\u8783\u8784\u8785\u8786\u8787\u8788"+
-            "\u8789\u878A\u878B\u878C\u878D\u878E\u878F\u8790"+
-            "\u8791\u8792\u8793\u8794\u8795\u8796\u8797\u8798"+
-            "\u8799\u879A\u879B\u879C\u879D\u879E\u879F\u87A0"+
-            "\u87A1\u87A2\u87A3\u87A4\u87A5\u87A6\u87A7\u87A8"+
-            "\u87A9\u87AA\u87AB\u87AC\u87AD\u87AE\u87AF\u87B0"+
-            "\u87B1\u87B2\u87B3\u87B4\u87B5\u87B6\u87B7\u87B8"+
-            "\u87B9\u87BA\u87BB\u87BC\u87BD\u87BE\u87BF\u87C0"+
-            "\u87C1\u87C2\u87C3\u87C4\u87C5\u87C6\u87C7\u87C8"+
-            "\u87C9\u87CA\u87CB\u87CC\u87CD\u87CE\u87CF\u87D0"+
-            "\u87D1\u87D2\u87D3\u87D4\u87D5\u87D6\u87D7\u87D8"+
-            "\u87D9\u87DA\u87DB\u87DC\u87DD\u87DE\u87DF\u87E0"+
-            "\u87E1\u87E2\u87E3\u87E4\u87E5\u87E6\u87E7\u87E8"+
-            "\u87E9\u87EA\u87EB\u87EC\u87ED\u87EE\u87EF\u87F0"+
-            "\u87F1\u87F2\u87F3\u87F4\u87F5\u87F6\u87F7\u87F8"+
-            "\u87F9\u87FA\u87FB\u87FC\u87FD\u87FE\u87FF\u8800"+
-            "\u8801\u8802\u8803\u8804\u8805\u8806\u8807\u8808"+
-            "\u8809\u880A\u880B\u880C\u880D\u880E\u880F\u8810"+
-            "\u8811\u8812\u8813\u8814\u8815\u8816\u8817\u8818"+
-            "\u8819\u881A\u881B\u881C\u881D\u881E\u881F\u8820"+
-            "\u8821\u8822\u8823\u8824\u8825\u8826\u8827\u8828"+
-            "\u8829\u882A\u882B\u882C\u882D\u882E\u882F\u8830"+
-            "\u8831\u8832\u8833\u8834\u8835\u8836\u8837\u8838"+
-            "\u8839\u883A\u883B\u883C\u883D\u883E\u883F\u8840"+
-            "\u8841\u8842\u8843\u8844\u8845\u8846\u8847\u8848"+
-            "\u8849\u884A\u884B\u884C\u884D\u884E\u884F\u8850"+
-            "\u8851\u8852\u8853\u8854\u8855\u8856\u8857\u8858"+
-            "\u8859\u885A\u885B\u885C\u885D\u885E\u885F\u8860"+
-            "\u8861\u8862\u8863\u8864\u8865\u8866\u8867\u8868"+
-            "\u8869\u886A\u886B\u886C\u886D\u886E\u886F\u8870"+
-            "\u8871\u8872\u8873\u8874\u8875\u8876\u8877\u8878"+
-            "\u8879\u887A\u887B\u887C\u887D\u887E\u887F\u8880"+
-            "\u8881\u8882\u8883\u8884\u8885\u8886\u8887\u8888"+
-            "\u8889\u888A\u888B\u888C\u888D\u888E\u888F\u8890"+
-            "\u8891\u8892\u8893\u8894\u8895\u8896\u8897\u8898"+
-            "\u8899\u889A\u889B\u889C\u889D\u889E\u889F\u88A0"+
-            "\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6\u88A7\u88A8"+
-            "\u88A9\u88AA\u88AB\u88AC\u88AD\u88AE\u88AF\u88B0"+
-            "\u88B1\u88B2\u88B3\u88B4\u88B5\u88B6\u88B7\u88B8"+
-            "\u88B9\u88BA\u88BB\u88BC\u88BD\u88BE\u88BF\u88C0"+
-            "\u88C1\u88C2\u88C3\u88C4\u88C5\u88C6\u88C7\u88C8"+
-            "\u88C9\u88CA\u88CB\u88CC\u88CD\u88CE\u88CF\u88D0"+
-            "\u88D1\u88D2\u88D3\u88D4\u88D5\u88D6\u88D7\u88D8"+
-            "\u88D9\u88DA\u88DB\u88DC\u88DD\u88DE\u88DF\u88E0"+
-            "\u88E1\u88E2\u88E3\u88E4\u88E5\u88E6\u88E7\u88E8"+
-            "\u88E9\u88EA\u88EB\u88EC\u88ED\u88EE\u88EF\u88F0"+
-            "\u88F1\u88F2\u88F3\u88F4\u88F5\u88F6\u88F7\u88F8"+
-            "\u88F9\u88FA\u88FB\u88FC\u88FD\u88FE\u88FF\u8900"+
-            "\u8901\u8902\u8903\u8904\u8905\u8906\u8907\u8908"+
-            "\u8909\u890A\u890B\u890C\u890D\u890E\u890F\u8910"+
-            "\u8911\u8912\u8913\u8914\u8915\u8916\u8917\u8918"+
-            "\u8919\u891A\u891B\u891C\u891D\u891E\u891F\u8920"+
-            "\u8921\u8922\u8923\u8924\u8925\u8926\u8927\u8928"+
-            "\u8929\u892A\u892B\u892C\u892D\u892E\u892F\u8930"+
-            "\u8931\u8932\u8933\u8934\u8935\u8936\u8937\u8938"+
-            "\u8939\u893A\u893B\u893C\u893D\u893E\u893F\u8940"+
-            "\u8941\u8942\u8943\u8944\u8945\u8946\u8947\u8948"+
-            "\u8949\u894A\u894B\u894C\u894D\u894E\u894F\u8950"+
-            "\u8951\u8952\u8953\u8954\u8955\u8956\u8957\u8958"+
-            "\u8959\u895A\u895B\u895C\u895D\u895E\u895F\u8960"+
-            "\u8961\u8962\u8963\u8964\u8965\u8966\u8967\u8968"+
-            "\u8969\u896A\u896B\u896C\u896D\u896E\u896F\u8970"+
-            "\u8971\u8972\u8973\u8974\u8975\u8976\u8977\u8978"+
-            "\u8979\u897A\u897B\u897C\u897D\u897E\u897F\u8980"+
-            "\u8981\u8982\u8983\u8984\u8985\u8986\u8987\u8988"+
-            "\u8989\u898A\u898B\u898C\u898D\u898E\u898F\u8990"+
-            "\u8991\u8992\u8993\u8994\u8995\u8996\u8997\u8998"+
-            "\u8999\u899A\u899B\u899C\u899D\u899E\u899F\u89A0"+
-            "\u89A1\u89A2\u89A3\u89A4\u89A5\u89A6\u89A7\u89A8";
-
-        private final static String innerIndex9=
-            "\u89A9\u89AA\u89AB\u89AC\u89AD\u89AE\u89AF\u89B0"+
-            "\u89B1\u89B2\u89B3\u89B4\u89B5\u89B6\u89B7\u89B8"+
-            "\u89B9\u89BA\u89BB\u89BC\u89BD\u89BE\u89BF\u89C0"+
-            "\u89C1\u89C2\u89C3\u89C4\u89C5\u89C6\u89C7\u89C8"+
-            "\u89C9\u89CA\u89CB\u89CC\u89CD\u89CE\u89CF\u89D0"+
-            "\u89D1\u89D2\u89D3\u89D4\u89D5\u89D6\u89D7\u89D8"+
-            "\u89D9\u89DA\u89DB\u89DC\u89DD\u89DE\u89DF\u89E0"+
-            "\u89E1\u89E2\u89E3\u89E4\u89E5\u89E6\u89E7\u89E8"+
-            "\u89E9\u89EA\u89EB\u89EC\u89ED\u89EE\u89EF\u89F0"+
-            "\u89F1\u89F2\u89F3\u89F4\u89F5\u89F6\u89F7\u89F8"+
-            "\u89F9\u89FA\u89FB\u89FC\u89FD\u89FE\u89FF\u8A00"+
-            "\u8A01\u8A02\u8A03\u8A04\u8A05\u8A06\u8A07\u8A08"+
-            "\u8A09\u8A0A\u8A0B\u8A0C\u8A0D\u8A0E\u8A0F\u8A10"+
-            "\u8A11\u8A12\u8A13\u8A14\u8A15\u8A16\u8A17\u8A18"+
-            "\u8A19\u8A1A\u8A1B\u8A1C\u8A1D\u8A1E\u8A1F\u8A20"+
-            "\u8A21\u8A22\u8A23\u8A24\u8A25\u8A26\u8A27\u8A28"+
-            "\u8A29\u8A2A\u8A2B\u8A2C\u8A2D\u8A2E\u8A2F\u8A30"+
-            "\u8A31\u8A32\u8A33\u8A34\u8A35\u8A36\u8A37\u8A38"+
-            "\u8A39\u8A3A\u8A3B\u8A3C\u8A3D\u8A3E\u8A3F\u8A40"+
-            "\u8A41\u8A42\u8A43\u8A44\u8A45\u8A46\u8A47\u8A48"+
-            "\u8A49\u8A4A\u8A4B\u8A4C\u8A4D\u8A4E\u8A4F\u8A50"+
-            "\u8A51\u8A52\u8A53\u8A54\u8A55\u8A56\u8A57\u8A58"+
-            "\u8A59\u8A5A\u8A5B\u8A5C\u8A5D\u8A5E\u8A5F\u8A60"+
-            "\u8A61\u8A62\u8A63\u8A64\u8A65\u8A66\u8A67\u8A68"+
-            "\u8A69\u8A6A\u8A6B\u8A6C\u8A6D\u8A6E\u8A6F\u8A70"+
-            "\u8A71\u8A72\u8A73\u8A74\u8A75\u8A76\u8A77\u8A78"+
-            "\u8A79\u8A7A\u8A7B\u8A7C\u8A7D\u8A7E\u8A7F\u8A80"+
-            "\u8A81\u8A82\u8A83\u8A84\u8A85\u8A86\u8A87\u8A88"+
-            "\u8A89\u8A8A\u8A8B\u8A8C\u8A8D\u8A8E\u8A8F\u8A90"+
-            "\u8A91\u8A92\u8A93\u8A94\u8A95\u8A96\u8A97\u8A98"+
-            "\u8A99\u8A9A\u8A9B\u8A9C\u8A9D\u8A9E\u8A9F\u8AA0"+
-            "\u8AA1\u8AA2\u8AA3\u8AA4\u8AA5\u8AA6\u8AA7\u8AA8"+
-            "\u8AA9\u8AAA\u8AAB\u8AAC\u8AAD\u8AAE\u8AAF\u8AB0"+
-            "\u8AB1\u8AB2\u8AB3\u8AB4\u8AB5\u8AB6\u8AB7\u8AB8"+
-            "\u8AB9\u8ABA\u8ABB\u8ABC\u8ABD\u8ABE\u8ABF\u8AC0"+
-            "\u8AC1\u8AC2\u8AC3\u8AC4\u8AC5\u8AC6\u8AC7\u8AC8"+
-            "\u8AC9\u8ACA\u8ACB\u8ACC\u8ACD\u8ACE\u8ACF\u8AD0"+
-            "\u8AD1\u8AD2\u8AD3\u8AD4\u8AD5\u8AD6\u8AD7\u8AD8"+
-            "\u8AD9\u8ADA\u8ADB\u8ADC\u8ADD\u8ADE\u8ADF\u8AE0"+
-            "\u8AE1\u8AE2\u8AE3\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8"+
-            "\u8AE9\u8AEA\u8AEB\u8AEC\u8AED\u8AEE\u8AEF\u8AF0"+
-            "\u8AF1\u8AF2\u8AF3\u8AF4\u8AF5\u8AF6\u8AF7\u8AF8"+
-            "\u8AF9\u8AFA\u8AFB\u8AFC\u8AFD\u8AFE\u8AFF\u8B00"+
-            "\u8B01\u8B02\u8B03\u8B04\u8B05\u8B06\u8B07\u8B08"+
-            "\u8B09\u8B0A\u8B0B\u8B0C\u8B0D\u8B0E\u8B0F\u8B10"+
-            "\u8B11\u8B12\u8B13\u8B14\u8B15\u8B16\u8B17\u8B18"+
-            "\u8B19\u8B1A\u8B1B\u8B1C\u8B1D\u8B1E\u8B1F\u8B20"+
-            "\u8B21\u8B22\u8B23\u8B24\u8B25\u8B26\u8B27\u8B28"+
-            "\u8B29\u8B2A\u8B2B\u8B2C\u8B2D\u8B2E\u8B2F\u8B30"+
-            "\u8B31\u8B32\u8B33\u8B34\u8B35\u8B36\u8B37\u8B38"+
-            "\u8B39\u8B3A\u8B3B\u8B3C\u8B3D\u8B3E\u8B3F\u8B40"+
-            "\u8B41\u8B42\u8B43\u8B44\u8B45\u8B46\u8B47\u8B48"+
-            "\u8B49\u8B4A\u8B4B\u8B4C\u8B4D\u8B4E\u8B4F\u8B50"+
-            "\u8B51\u8B52\u8B53\u8B54\u8B55\u8B56\u8B57\u8B58"+
-            "\u8B59\u8B5A\u8B5B\u8B5C\u8B5D\u8B5E\u8B5F\u8B60"+
-            "\u8B61\u8B62\u8B63\u8B64\u8B65\u8B66\u8B67\u8B68"+
-            "\u8B69\u8B6A\u8B6B\u8B6C\u8B6D\u8B6E\u8B6F\u8B70"+
-            "\u8B71\u8B72\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78"+
-            "\u8B79\u8B7A\u8B7B\u8B7C\u8B7D\u8B7E\u8B7F\u8B80"+
-            "\u8B81\u8B82\u8B83\u8B84\u8B85\u8B86\u8B87\u8B88"+
-            "\u8B89\u8B8A\u8B8B\u8B8C\u8B8D\u8B8E\u8B8F\u8B90"+
-            "\u8B91\u8B92\u8B93\u8B94\u8B95\u8B96\u8B97\u8B98"+
-            "\u8B99\u8B9A\u8B9B\u8B9C\u8B9D\u8B9E\u8B9F\u8BA0"+
-            "\u8BA1\u8BA2\u8BA3\u8BA4\u8BA5\u8BA6\u8BA7\u8BA8"+
-            "\u8BA9\u8BAA\u8BAB\u8BAC\u8BAD\u8BAE\u8BAF\u8BB0"+
-            "\u8BB1\u8BB2\u8BB3\u8BB4\u8BB5\u8BB6\u8BB7\u8BB8"+
-            "\u8BB9\u8BBA\u8BBB\u8BBC\u8BBD\u8BBE\u8BBF\u8BC0"+
-            "\u8BC1\u8BC2\u8BC3\u8BC4\u8BC5\u8BC6\u8BC7\u8BC8"+
-            "\u8BC9\u8BCA\u8BCB\u8BCC\u8BCD\u8BCE\u8BCF\u8BD0"+
-            "\u8BD1\u8BD2\u8BD3\u8BD4\u8BD5\u8BD6\u8BD7\u8BD8"+
-            "\u8BD9\u8BDA\u8BDB\u8BDC\u8BDD\u8BDE\u8BDF\u8BE0"+
-            "\u8BE1\u8BE2\u8BE3\u8BE4\u8BE5\u8BE6\u8BE7\u8BE8"+
-            "\u8BE9\u8BEA\u8BEB\u8BEC\u8BED\u8BEE\u8BEF\u8BF0"+
-            "\u8BF1\u8BF2\u8BF3\u8BF4\u8BF5\u8BF6\u8BF7\u8BF8"+
-            "\u8BF9\u8BFA\u8BFB\u8BFC\u8BFD\u8BFE\u8BFF\u8C00"+
-            "\u8C01\u8C02\u8C03\u8C04\u8C05\u8C06\u8C07\u8C08"+
-            "\u8C09\u8C0A\u8C0B\u8C0C\u8C0D\u8C0E\u8C0F\u8C10"+
-            "\u8C11\u8C12\u8C13\u8C14\u8C15\u8C16\u8C17\u8C18"+
-            "\u8C19\u8C1A\u8C1B\u8C1C\u8C1D\u8C1E\u8C1F\u8C20"+
-            "\u8C21\u8C22\u8C23\u8C24\u8C25\u8C26\u8C27\u8C28"+
-            "\u8C29\u8C2A\u8C2B\u8C2C\u8C2D\u8C2E\u8C2F\u8C30"+
-            "\u8C31\u8C32\u8C33\u8C34\u8C35\u8C36\u8C37\u8C38"+
-            "\u8C39\u8C3A\u8C3B\u8C3C\u8C3D\u8C3E\u8C3F\u8C40"+
-            "\u8C41\u8C42\u8C43\u8C44\u8C45\u8C46\u8C47\u8C48"+
-            "\u8C49\u8C4A\u8C4B\u8C4C\u8C4D\u8C4E\u8C4F\u8C50"+
-            "\u8C51\u8C52\u8C53\u8C54\u8C55\u8C56\u8C57\u8C58"+
-            "\u8C59\u8C5A\u8C5B\u8C5C\u8C5D\u8C5E\u8C5F\u8C60"+
-            "\u8C61\u8C62\u8C63\u8C64\u8C65\u8C66\u8C67\u8C68"+
-            "\u8C69\u8C6A\u8C6B\u8C6C\u8C6D\u8C6E\u8C6F\u8C70"+
-            "\u8C71\u8C72\u8C73\u8C74\u8C75\u8C76\u8C77\u8C78"+
-            "\u8C79\u8C7A\u8C7B\u8C7C\u8C7D\u8C7E\u8C7F\u8C80"+
-            "\u8C81\u8C82\u8C83\u8C84\u8C85\u8C86\u8C87\u8C88"+
-            "\u8C89\u8C8A\u8C8B\u8C8C\u8C8D\u8C8E\u8C8F\u8C90"+
-            "\u8C91\u8C92\u8C93\u8C94\u8C95\u8C96\u8C97\u8C98"+
-            "\u8C99\u8C9A\u8C9B\u8C9C\u8C9D\u8C9E\u8C9F\u8CA0"+
-            "\u8CA1\u8CA2\u8CA3\u8CA4\u8CA5\u8CA6\u8CA7\u8CA8"+
-            "\u8CA9\u8CAA\u8CAB\u8CAC\u8CAD\u8CAE\u8CAF\u8CB0"+
-            "\u8CB1\u8CB2\u8CB3\u8CB4\u8CB5\u8CB6\u8CB7\u8CB8"+
-            "\u8CB9\u8CBA\u8CBB\u8CBC\u8CBD\u8CBE\u8CBF\u8CC0"+
-            "\u8CC1\u8CC2\u8CC3\u8CC4\u8CC5\u8CC6\u8CC7\u8CC8"+
-            "\u8CC9\u8CCA\u8CCB\u8CCC\u8CCD\u8CCE\u8CCF\u8CD0"+
-            "\u8CD1\u8CD2\u8CD3\u8CD4\u8CD5\u8CD6\u8CD7\u8CD8"+
-            "\u8CD9\u8CDA\u8CDB\u8CDC\u8CDD\u8CDE\u8CDF\u8CE0"+
-            "\u8CE1\u8CE2\u8CE3\u8CE4\u8CE5\u8CE6\u8CE7\u8CE8"+
-            "\u8CE9\u8CEA\u8CEB\u8CEC\u8CED\u8CEE\u8CEF\u8CF0"+
-            "\u8CF1\u8CF2\u8CF3\u8CF4\u8CF5\u8CF6\u8CF7\u8CF8"+
-            "\u8CF9\u8CFA\u8CFB\u8CFC\u8CFD\u8CFE\u8CFF\u8D00"+
-            "\u8D01\u8D02\u8D03\u8D04\u8D05\u8D06\u8D07\u8D08"+
-            "\u8D09\u8D0A\u8D0B\u8D0C\u8D0D\u8D0E\u8D0F\u8D10"+
-            "\u8D11\u8D12\u8D13\u8D14\u8D15\u8D16\u8D17\u8D18"+
-            "\u8D19\u8D1A\u8D1B\u8D1C\u8D1D\u8D1E\u8D1F\u8D20"+
-            "\u8D21\u8D22\u8D23\u8D24\u8D25\u8D26\u8D27\u8D28"+
-            "\u8D29\u8D2A\u8D2B\u8D2C\u8D2D\u8D2E\u8D2F\u8D30"+
-            "\u8D31\u8D32\u8D33\u8D34\u8D35\u8D36\u8D37\u8D38"+
-            "\u8D39\u8D3A\u8D3B\u8D3C\u8D3D\u8D3E\u8D3F\u8D40"+
-            "\u8D41\u8D42\u8D43\u8D44\u8D45\u8D46\u8D47\u8D48"+
-            "\u8D49\u8D4A\u8D4B\u8D4C\u8D4D\u8D4E\u8D4F\u8D50"+
-            "\u8D51\u8D52\u8D53\u8D54\u8D55\u8D56\u8D57\u8D58"+
-            "\u8D59\u8D5A\u8D5B\u8D5C\u8D5D\u8D5E\u8D5F\u8D60"+
-            "\u8D61\u8D62\u8D63\u8D64\u8D65\u8D66\u8D67\u8D68"+
-            "\u8D69\u8D6A\u8D6B\u8D6C\u8D6D\u8D6E\u8D6F\u8D70"+
-            "\u8D71\u8D72\u8D73\u8D74\u8D75\u8D76\u8D77\u8D78"+
-            "\u8D79\u8D7A\u8D7B\u8D7C\u8D7D\u8D7E\u8D7F\u8D80"+
-            "\u8D81\u8D82\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88"+
-            "\u8D89\u8D8A\u8D8B\u8D8C\u8D8D\u8D8E\u8D8F\u8D90"+
-            "\u8D91\u8D92\u8D93\u8D94\u8D95\u8D96\u8D97\u8D98"+
-            "\u8D99\u8D9A\u8D9B\u8D9C\u8D9D\u8D9E\u8D9F\u8DA0"+
-            "\u8DA1\u8DA2\u8DA3\u8DA4\u8DA5\u8DA6\u8DA7\u8DA8"+
-            "\u8DA9\u8DAA\u8DAB\u8DAC\u8DAD\u8DAE\u8DAF\u8DB0"+
-            "\u8DB1\u8DB2\u8DB3\u8DB4\u8DB5\u8DB6\u8DB7\u8DB8"+
-            "\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD\u8DBE\u8DBF\u8DC0"+
-            "\u8DC1\u8DC2\u8DC3\u8DC4\u8DC5\u8DC6\u8DC7\u8DC8"+
-            "\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD\u8DCE\u8DCF\u8DD0"+
-            "\u8DD1\u8DD2\u8DD3\u8DD4\u8DD5\u8DD6\u8DD7\u8DD8"+
-            "\u8DD9\u8DDA\u8DDB\u8DDC\u8DDD\u8DDE\u8DDF\u8DE0"+
-            "\u8DE1\u8DE2\u8DE3\u8DE4\u8DE5\u8DE6\u8DE7\u8DE8"+
-            "\u8DE9\u8DEA\u8DEB\u8DEC\u8DED\u8DEE\u8DEF\u8DF0"+
-            "\u8DF1\u8DF2\u8DF3\u8DF4\u8DF5\u8DF6\u8DF7\u8DF8"+
-            "\u8DF9\u8DFA\u8DFB\u8DFC\u8DFD\u8DFE\u8DFF\u8E00"+
-            "\u8E01\u8E02\u8E03\u8E04\u8E05\u8E06\u8E07\u8E08"+
-            "\u8E09\u8E0A\u8E0B\u8E0C\u8E0D\u8E0E\u8E0F\u8E10"+
-            "\u8E11\u8E12\u8E13\u8E14\u8E15\u8E16\u8E17\u8E18"+
-            "\u8E19\u8E1A\u8E1B\u8E1C\u8E1D\u8E1E\u8E1F\u8E20"+
-            "\u8E21\u8E22\u8E23\u8E24\u8E25\u8E26\u8E27\u8E28"+
-            "\u8E29\u8E2A\u8E2B\u8E2C\u8E2D\u8E2E\u8E2F\u8E30"+
-            "\u8E31\u8E32\u8E33\u8E34\u8E35\u8E36\u8E37\u8E38"+
-            "\u8E39\u8E3A\u8E3B\u8E3C\u8E3D\u8E3E\u8E3F\u8E40"+
-            "\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46\u8E47\u8E48"+
-            "\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E\u8E4F\u8E50"+
-            "\u8E51\u8E52\u8E53\u8E54\u8E55\u8E56\u8E57\u8E58"+
-            "\u8E59\u8E5A\u8E5B\u8E5C\u8E5D\u8E5E\u8E5F\u8E60"+
-            "\u8E61\u8E62\u8E63\u8E64\u8E65\u8E66\u8E67\u8E68"+
-            "\u8E69\u8E6A\u8E6B\u8E6C\u8E6D\u8E6E\u8E6F\u8E70"+
-            "\u8E71\u8E72\u8E73\u8E74\u8E75\u8E76\u8E77\u8E78"+
-            "\u8E79\u8E7A\u8E7B\u8E7C\u8E7D\u8E7E\u8E7F\u8E80"+
-            "\u8E81\u8E82\u8E83\u8E84\u8E85\u8E86\u8E87\u8E88"+
-            "\u8E89\u8E8A\u8E8B\u8E8C\u8E8D\u8E8E\u8E8F\u8E90"+
-            "\u8E91\u8E92\u8E93\u8E94\u8E95\u8E96\u8E97\u8E98"+
-            "\u8E99\u8E9A\u8E9B\u8E9C\u8E9D\u8E9E\u8E9F\u8EA0"+
-            "\u8EA1\u8EA2\u8EA3\u8EA4\u8EA5\u8EA6\u8EA7\u8EA8"+
-            "\u8EA9\u8EAA\u8EAB\u8EAC\u8EAD\u8EAE\u8EAF\u8EB0"+
-            "\u8EB1\u8EB2\u8EB3\u8EB4\u8EB5\u8EB6\u8EB7\u8EB8"+
-            "\u8EB9\u8EBA\u8EBB\u8EBC\u8EBD\u8EBE\u8EBF\u8EC0"+
-            "\u8EC1\u8EC2\u8EC3\u8EC4\u8EC5\u8EC6\u8EC7\u8EC8"+
-            "\u8EC9\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0"+
-            "\u8ED1\u8ED2\u8ED3\u8ED4\u8ED5\u8ED6\u8ED7\u8ED8"+
-            "\u8ED9\u8EDA\u8EDB\u8EDC\u8EDD\u8EDE\u8EDF\u8EE0"+
-            "\u8EE1\u8EE2\u8EE3\u8EE4\u8EE5\u8EE6\u8EE7\u8EE8"+
-            "\u8EE9\u8EEA\u8EEB\u8EEC\u8EED\u8EEE\u8EEF\u8EF0"+
-            "\u8EF1\u8EF2\u8EF3\u8EF4\u8EF5\u8EF6\u8EF7\u8EF8"+
-            "\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD\u8EFE\u8EFF\u8F00"+
-            "\u8F01\u8F02\u8F03\u8F04\u8F05\u8F06\u8F07\u8F08"+
-            "\u8F09\u8F0A\u8F0B\u8F0C\u8F0D\u8F0E\u8F0F\u8F10"+
-            "\u8F11\u8F12\u8F13\u8F14\u8F15\u8F16\u8F17\u8F18"+
-            "\u8F19\u8F1A\u8F1B\u8F1C\u8F1D\u8F1E\u8F1F\u8F20"+
-            "\u8F21\u8F22\u8F23\u8F24\u8F25\u8F26\u8F27\u8F28"+
-            "\u8F29\u8F2A\u8F2B\u8F2C\u8F2D\u8F2E\u8F2F\u8F30"+
-            "\u8F31\u8F32\u8F33\u8F34\u8F35\u8F36\u8F37\u8F38"+
-            "\u8F39\u8F3A\u8F3B\u8F3C\u8F3D\u8F3E\u8F3F\u8F40"+
-            "\u8F41\u8F42\u8F43\u8F44\u8F45\u8F46\u8F47\u8F48"+
-            "\u8F49\u8F4A\u8F4B\u8F4C\u8F4D\u8F4E\u8F4F\u8F50"+
-            "\u8F51\u8F52\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58"+
-            "\u8F59\u8F5A\u8F5B\u8F5C\u8F5D\u8F5E\u8F5F\u8F60"+
-            "\u8F61\u8F62\u8F63\u8F64\u8F65\u8F66\u8F67\u8F68"+
-            "\u8F69\u8F6A\u8F6B\u8F6C\u8F6D\u8F6E\u8F6F\u8F70"+
-            "\u8F71\u8F72\u8F73\u8F74\u8F75\u8F76\u8F77\u8F78"+
-            "\u8F79\u8F7A\u8F7B\u8F7C\u8F7D\u8F7E\u8F7F\u8F80"+
-            "\u8F81\u8F82\u8F83\u8F84\u8F85\u8F86\u8F87\u8F88"+
-            "\u8F89\u8F8A\u8F8B\u8F8C\u8F8D\u8F8E\u8F8F\u8F90"+
-            "\u8F91\u8F92\u8F93\u8F94\u8F95\u8F96\u8F97\u8F98"+
-            "\u8F99\u8F9A\u8F9B\u8F9C\u8F9D\u8F9E\u8F9F\u8FA0"+
-            "\u8FA1\u8FA2\u8FA3\u8FA4\u8FA5\u8FA6\u8FA7\u8FA8"+
-            "\u8FA9\u8FAA\u8FAB\u8FAC\u8FAD\u8FAE\u8FAF\u8FB0"+
-            "\u8FB1\u8FB2\u8FB3\u8FB4\u8FB5\u8FB6\u8FB7\u8FB8"+
-            "\u8FB9\u8FBA\u8FBB\u8FBC\u8FBD\u8FBE\u8FBF\u8FC0"+
-            "\u8FC1\u8FC2\u8FC3\u8FC4\u8FC5\u8FC6\u8FC7\u8FC8"+
-            "\u8FC9\u8FCA\u8FCB\u8FCC\u8FCD\u8FCE\u8FCF\u8FD0"+
-            "\u8FD1\u8FD2\u8FD3\u8FD4\u8FD5\u8FD6\u8FD7\u8FD8"+
-            "\u8FD9\u8FDA\u8FDB\u8FDC\u8FDD\u8FDE\u8FDF\u8FE0"+
-            "\u8FE1\u8FE2\u8FE3\u8FE4\u8FE5\u8FE6\u8FE7\u8FE8"+
-            "\u8FE9\u8FEA\u8FEB\u8FEC\u8FED\u8FEE\u8FEF\u8FF0"+
-            "\u8FF1\u8FF2\u8FF3\u8FF4\u8FF5\u8FF6\u8FF7\u8FF8"+
-            "\u8FF9\u8FFA\u8FFB\u8FFC\u8FFD\u8FFE\u8FFF\u9000"+
-            "\u9001\u9002\u9003\u9004\u9005\u9006\u9007\u9008"+
-            "\u9009\u900A\u900B\u900C\u900D\u900E\u900F\u9010"+
-            "\u9011\u9012\u9013\u9014\u9015\u9016\u9017\u9018"+
-            "\u9019\u901A\u901B\u901C\u901D\u901E\u901F\u9020"+
-            "\u9021\u9022\u9023\u9024\u9025\u9026\u9027\u9028"+
-            "\u9029\u902A\u902B\u902C\u902D\u902E\u902F\u9030"+
-            "\u9031\u9032\u9033\u9034\u9035\u9036\u9037\u9038"+
-            "\u9039\u903A\u903B\u903C\u903D\u903E\u903F\u9040"+
-            "\u9041\u9042\u9043\u9044\u9045\u9046\u9047\u9048"+
-            "\u9049\u904A\u904B\u904C\u904D\u904E\u904F\u9050"+
-            "\u9051\u9052\u9053\u9054\u9055\u9056\u9057\u9058"+
-            "\u9059\u905A\u905B\u905C\u905D\u905E\u905F\u9060"+
-            "\u9061\u9062\u9063\u9064\u9065\u9066\u9067\u9068"+
-            "\u9069\u906A\u906B\u906C\u906D\u906E\u906F\u9070"+
-            "\u9071\u9072\u9073\u9074\u9075\u9076\u9077\u9078"+
-            "\u9079\u907A\u907B\u907C\u907D\u907E\u907F\u9080"+
-            "\u9081\u9082\u9083\u9084\u9085\u9086\u9087\u9088"+
-            "\u9089\u908A\u908B\u908C\u908D\u908E\u908F\u9090"+
-            "\u9091\u9092\u9093\u9094\u9095\u9096\u9097\u9098"+
-            "\u9099\u909A\u909B\u909C\u909D\u909E\u909F\u90A0"+
-            "\u90A1\u90A2\u90A3\u90A4\u90A5\u90A6\u90A7\u90A8"+
-            "\u90A9\u90AA\u90AB\u90AC\u90AD\u90AE\u90AF\u90B0"+
-            "\u90B1\u90B2\u90B3\u90B4\u90B5\u90B6\u90B7\u90B8"+
-            "\u90B9\u90BA\u90BB\u90BC\u90BD\u90BE\u90BF\u90C0"+
-            "\u90C1\u90C2\u90C3\u90C4\u90C5\u90C6\u90C7\u90C8"+
-            "\u90C9\u90CA\u90CB\u90CC\u90CD\u90CE\u90CF\u90D0"+
-            "\u90D1\u90D2\u90D3\u90D4\u90D5\u90D6\u90D7\u90D8"+
-            "\u90D9\u90DA\u90DB\u90DC\u90DD\u90DE\u90DF\u90E0"+
-            "\u90E1\u90E2\u90E3\u90E4\u90E5\u90E6\u90E7\u90E8"+
-            "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
-            "\u90F1\u90F2\u90F3\u90F4\u90F5\u90F6\u90F7\u90F8"+
-            "\u90F9\u90FA\u90FB\u90FC\u90FD\u90FE\u90FF\u9100"+
-            "\u9101\u9102\u9103\u9104\u9105\u9106\u9107\u9108"+
-            "\u9109\u910A\u910B\u910C\u910D\u910E\u910F\u9110"+
-            "\u9111\u9112\u9113\u9114\u9115\u9116\u9117\u9118"+
-            "\u9119\u911A\u911B\u911C\u911D\u911E\u911F\u9120"+
-            "\u9121\u9122\u9123\u9124\u9125\u9126\u9127\u9128"+
-            "\u9129\u912A\u912B\u912C\u912D\u912E\u912F\u9130"+
-            "\u9131\u9132\u9133\u9134\u9135\u9136\u9137\u9138"+
-            "\u9139\u913A\u913B\u913C\u913D\u913E\u913F\u9140"+
-            "\u9141\u9142\u9143\u9144\u9145\u9146\u9147\u9148"+
-            "\u9149\u914A\u914B\u914C\u914D\u914E\u914F\u9150"+
-            "\u9151\u9152\u9153\u9154\u9155\u9156\u9157\u9158"+
-            "\u9159\u915A\u915B\u915C\u915D\u915E\u915F\u9160"+
-            "\u9161\u9162\u9163\u9164\u9165\u9166\u9167\u9168"+
-            "\u9169\u916A\u916B\u916C\u916D\u916E\u916F\u9170"+
-            "\u9171\u9172\u9173\u9174\u9175\u9176\u9177\u9178"+
-            "\u9179\u917A\u917B\u917C\u917D\u917E\u917F\u9180"+
-            "\u9181\u9182\u9183\u9184\u9185\u9186\u9187\u9188"+
-            "\u9189\u918A\u918B\u918C\u918D\u918E\u918F\u9190"+
-            "\u9191\u9192\u9193\u9194\u9195\u9196\u9197\u9198"+
-            "\u9199\u919A\u919B\u919C\u919D\u919E\u919F\u91A0"+
-            "\u91A1\u91A2\u91A3\u91A4\u91A5\u91A6\u91A7\u91A8"+
-            "\u91A9\u91AA\u91AB\u91AC\u91AD\u91AE\u91AF\u91B0"+
-            "\u91B1\u91B2\u91B3\u91B4\u91B5\u91B6\u91B7\u91B8"+
-            "\u91B9\u91BA\u91BB\u91BC\u91BD\u91BE\u91BF\u91C0"+
-            "\u91C1\u91C2\u91C3\u91C4\u91C5\u91C6\u91C7\u91C8"+
-            "\u91C9\u91CA\u91CB\u91CC\u91CD\u91CE\u91CF\u91D0"+
-            "\u91D1\u91D2\u91D3\u91D4\u91D5\u91D6\u91D7\u91D8"+
-            "\u91D9\u91DA\u91DB\u91DC\u91DD\u91DE\u91DF\u91E0"+
-            "\u91E1\u91E2\u91E3\u91E4\u91E5\u91E6\u91E7\u91E8"+
-            "\u91E9\u91EA\u91EB\u91EC\u91ED\u91EE\u91EF\u91F0"+
-            "\u91F1\u91F2\u91F3\u91F4\u91F5\u91F6\u91F7\u91F8"+
-            "\u91F9\u91FA\u91FB\u91FC\u91FD\u91FE\u91FF\u9200"+
-            "\u9201\u9202\u9203\u9204\u9205\u9206\u9207\u9208"+
-            "\u9209\u920A\u920B\u920C\u920D\u920E\u920F\u9210"+
-            "\u9211\u9212\u9213\u9214\u9215\u9216\u9217\u9218"+
-            "\u9219\u921A\u921B\u921C\u921D\u921E\u921F\u9220"+
-            "\u9221\u9222\u9223\u9224\u9225\u9226\u9227\u9228"+
-            "\u9229\u922A\u922B\u922C\u922D\u922E\u922F\u9230"+
-            "\u9231\u9232\u9233\u9234\u9235\u9236\u9237\u9238"+
-            "\u9239\u923A\u923B\u923C\u923D\u923E\u923F\u9240"+
-            "\u9241\u9242\u9243\u9244\u9245\u9246\u9247\u9248"+
-            "\u9249\u924A\u924B\u924C\u924D\u924E\u924F\u9250"+
-            "\u9251\u9252\u9253\u9254\u9255\u9256\u9257\u9258"+
-            "\u9259\u925A\u925B\u925C\u925D\u925E\u925F\u9260"+
-            "\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268"+
-            "\u9269\u926A\u926B\u926C\u926D\u926E\u926F\u9270"+
-            "\u9271\u9272\u9273\u9274\u9275\u9276\u9277\u9278"+
-            "\u9279\u927A\u927B\u927C\u927D\u927E\u927F\u9280"+
-            "\u9281\u9282\u9283\u9284\u9285\u9286\u9287\u9288"+
-            "\u9289\u928A\u928B\u928C\u928D\u928E\u928F\u9290"+
-            "\u9291\u9292\u9293\u9294\u9295\u9296\u9297\u9298"+
-            "\u9299\u929A\u929B\u929C\u929D\u929E\u929F\u92A0"+
-            "\u92A1\u92A2\u92A3\u92A4\u92A5\u92A6\u92A7\u92A8"+
-            "\u92A9\u92AA\u92AB\u92AC\u92AD\u92AE\u92AF\u92B0"+
-            "\u92B1\u92B2\u92B3\u92B4\u92B5\u92B6\u92B7\u92B8"+
-            "\u92B9\u92BA\u92BB\u92BC\u92BD\u92BE\u92BF\u92C0"+
-            "\u92C1\u92C2\u92C3\u92C4\u92C5\u92C6\u92C7\u92C8"+
-            "\u92C9\u92CA\u92CB\u92CC\u92CD\u92CE\u92CF\u92D0"+
-            "\u92D1\u92D2\u92D3\u92D4\u92D5\u92D6\u92D7\u92D8"+
-            "\u92D9\u92DA\u92DB\u92DC\u92DD\u92DE\u92DF\u92E0"+
-            "\u92E1\u92E2\u92E3\u92E4\u92E5\u92E6\u92E7\u92E8"+
-            "\u92E9\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
-            "\u92F1\u92F2\u92F3\u92F4\u92F5\u92F6\u92F7\u92F8"+
-            "\u92F9\u92FA\u92FB\u92FC\u92FD\u92FE\u92FF\u9300"+
-            "\u9301\u9302\u9303\u9304\u9305\u9306\u9307\u9308"+
-            "\u9309\u930A\u930B\u930C\u930D\u930E\u930F\u9310"+
-            "\u9311\u9312\u9313\u9314\u9315\u9316\u9317\u9318"+
-            "\u9319\u931A\u931B\u931C\u931D\u931E\u931F\u9320"+
-            "\u9321\u9322\u9323\u9324\u9325\u9326\u9327\u9328"+
-            "\u9329\u932A\u932B\u932C\u932D\u932E\u932F\u9330"+
-            "\u9331\u9332\u9333\u9334\u9335\u9336\u9337\u9338"+
-            "\u9339\u933A\u933B\u933C\u933D\u933E\u933F\u9340"+
-            "\u9341\u9342\u9343\u9344\u9345\u9346\u9347\u9348"+
-            "\u9349\u934A\u934B\u934C\u934D\u934E\u934F\u9350"+
-            "\u9351\u9352\u9353\u9354\u9355\u9356\u9357\u9358"+
-            "\u9359\u935A\u935B\u935C\u935D\u935E\u935F\u9360"+
-            "\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368"+
-            "\u9369\u936A\u936B\u936C\u936D\u936E\u936F\u9370"+
-            "\u9371\u9372\u9373\u9374\u9375\u9376\u9377\u9378"+
-            "\u9379\u937A\u937B\u937C\u937D\u937E\u937F\u9380"+
-            "\u9381\u9382\u9383\u9384\u9385\u9386\u9387\u9388"+
-            "\u9389\u938A\u938B\u938C\u938D\u938E\u938F\u9390"+
-            "\u9391\u9392\u9393\u9394\u9395\u9396\u9397\u9398"+
-            "\u9399\u939A\u939B\u939C\u939D\u939E\u939F\u93A0"+
-            "\u93A1\u93A2\u93A3\u93A4\u93A5\u93A6\u93A7\u93A8"+
-            "\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\u93AF\u93B0"+
-            "\u93B1\u93B2\u93B3\u93B4\u93B5\u93B6\u93B7\u93B8"+
-            "\u93B9\u93BA\u93BB\u93BC\u93BD\u93BE\u93BF\u93C0"+
-            "\u93C1\u93C2\u93C3\u93C4\u93C5\u93C6\u93C7\u93C8"+
-            "\u93C9\u93CA\u93CB\u93CC\u93CD\u93CE\u93CF\u93D0"+
-            "\u93D1\u93D2\u93D3\u93D4\u0000\u93D5\u93D6\u93D7"+
-            "\u93D8\u93D9\u93DA\u93DB\u93DC\u93DD\u93DE\u93DF"+
-            "\u93E0\u93E1\u93E2\u93E3\u93E4\u93E5\u93E6\u93E7"+
-            "\u93E8\u93E9\u93EA\u93EB\u93EC\u93ED\u93EE\u93EF"+
-            "\u93F0\u93F1\u93F2\u93F3\u93F4\u93F5\u93F6\u93F7"+
-            "\u93F8\u93F9\u93FA\u93FB\u93FC\u93FD\u93FE\u93FF"+
-            "\u9400\u9401\u9402\u9403\u9404\u9405\u9406\u9407"+
-            "\u9408\u9409\u940A\u940B\u940C\u940D\u940E\u940F"+
-            "\u9410\u9411\u9412\u9413\u9414\u9415\u9416\u9417"+
-            "\u9418\u9419\u941A\u941B\u941C\u941D\u941E\u941F"+
-            "\u9420\u0000\u9421\u9422\u9423\u9424\u9425\u9426"+
-            "\u9427\u9428\u9429\u942A\u942B\u942C\u942D\u942E"+
-            "\u942F\u9430\u9431\u9432\u9433\u9434\u9435\u9436"+
-            "\u9437\u9438\u9439\u943A\u943B\u0000\u943C\u943D"+
-            "\u943E\u943F\u9440\u9441\u9442\u9443\u9444\u9445"+
-            "\u9446\u9447\u9448\u9449\u944A\u944B\u944C\u944D"+
-            "\u944E\u944F\u9450\u9451\u9452\u9453\u9454\u9455"+
-            "\u9456\u9457\u9458\u9459\u945A\u945B\u945C\u945D"+
-            "\u945E\u945F\u9460\u9461\u9462\u9463\u9464\u9465"+
-            "\u9466\u9467\u9468\u9469\u946A\u946B\u946C\u946D"+
-            "\u946E\u946F\u9470\u9471\u9472\u9473\u9474\u9475"+
-            "\u9476\u9477\u9478\u9479\u947A\u947B\u947C\u947D"+
-            "\u947E\u947F\u9480\u9481\u9482\u9483\u9484\u9485"+
-            "\u9486\u9487\u9488\u9489\u948A\u948B\u948C\u0000"+
-            "\u948D\u948E\u948F\u9490\u9491\u9492\u9493\u9494"+
-            "\u9495\u0000\u9496\u9497\u9498\u9499\u949A\u949B"+
-            "\u949C\u949D\u949E\u949F\u94A0\u94A1\u94A2\u94A3"+
-            "\u94A4\u94A5\u94A6\u94A7\u94A8\u94A9\u94AA\u94AB"+
-            "\u94AC\u94AD\u94AE\u94AF\u0000\u0000\u0000\u0000"+
-            "\u94B0\u0000\u94B1\u0000\u0000\u94B2\u94B3\u94B4"+
-            "\u0000\u94B5\u94B6\u94B7\u94B8\u94B9\u94BA\u0000"+
-            "\u0000\u0000\u94BB\u0000\u0000\u94BC\u94BD\u0000"+
-            "\u0000\u0000\u94BE\u94BF\u94C0\u94C1\u94C2\u94C3"+
-            "\u94C4\u94C5\u94C6\u94C7\u94C8\u94C9\u94CA\u94CB"+
-            "\u94CC\u94CD\u94CE\u94CF\u94D0\u94D1\u94D2\u94D3"+
-            "\u94D4\u94D5\u94D6\u94D7\u94D8\u94D9\u94DA\u94DB"+
-            "\u94DC\u94DD\u94DE\u94DF\u94E0\u94E1\u94E2\u94E3"+
-            "\u94E4\u94E5\u94E6\u94E7\u94E8\u94E9\u94EA\u94EB"+
-            "\u94EC\u94ED\u94EE\u94EF\u94F0\u94F1\u94F2\u94F3"+
-            "\u94F4\u94F5\u94F6\u94F7\u94F8\u94F9\u94FA\u94FB"+
-            "\u94FC\u94FD\u94FE\u94FF\u9500\u9501\u9502\u9503"+
-            "\u9504\u9505\u9506\u9507\u9508\u9509\u950A\u950B"+
-            "\u950C\u950D\u950E\u950F\u9510\u9511\u9512\u9513"+
-            "\u9514\u9515\u9516\u9517\u9518\u9519\u951A\u951B"+
-            "\u951C\u951D\u951E\u951F\u9520\u9521\u9522\u9523"+
-            "\u9524\u9525\u9526\u9527\u9528\u9529\u952A\u952B"+
-            "\u952C\u952D\u952E\u952F\u9530\u9531\u9532\u9533"+
-            "\u9534\u9535\u9536\u9537\u9538\u9539\u953A\u953B"+
-            "\u953C\u953D\u953E\u953F\u9540\u9541\u9542\u9543"+
-            "\u9544\u9545\u9546\u9547\u9548\u9549\u954A\u954B"+
-            "\u954C\u954D\u954E\u954F\u9550\u9551\u9552\u9553"+
-            "\u9554\u9555\u9556\u9557\u9558\u9559\u955A\u955B"+
-            "\u955C\u955D\u955E\u955F\u9560\u9561\u9562\u9563"+
-            "\u9564\u9565\u9566\u9567\u9568\u9569\u956A\u956B"+
-            "\u956C\u956D\u956E\u956F\u9570\u9571\u9572\u9573"+
-            "\u9574\u9575\u9576\u9577\u9578\u9579\u957A\u957B"+
-            "\u957C\u957D\u957E\u957F\u9580\u9581\u9582\u9583"+
-            "\u9584\u9585\u9586\u9587\u9588\u9589\u958A\u958B"+
-            "\u958C\u958D\u958E\u958F\u9590\u9591\u9592\u9593"+
-            "\u9594\u9595\u9596\u9597\u9598\u9599\u959A\u959B"+
-            "\u959C\u959D\u959E\u959F\u95A0\u95A1\u95A2\u95A3"+
-            "\u95A4\u95A5\u95A6\u95A7\u95A8\u95A9\u95AA\u95AB"+
-            "\u95AC\u95AD\u95AE\u95AF\u95B0\u95B1\u95B2\u95B3"+
-            "\u95B4\u95B5\u95B6\u95B7\u95B8\u95B9\u95BA\u95BB"+
-            "\u95BC\u95BD\u95BE\u95BF\u95C0\u95C1\u95C2\u95C3"+
-            "\u95C4\u95C5\u95C6\u95C7\u95C8\u95C9\u95CA\u95CB"+
-            "\u95CC\u95CD\u95CE\u95CF\u95D0\u95D1\u95D2\u95D3"+
-            "\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9\u95DA\u95DB"+
-            "\u95DC\u95DD\u95DE\u95DF\u95E0\u95E1\u95E2\u95E3"+
-            "\u95E4\u95E5\u95E6\u95E7\u95E8\u95E9\u95EA\u95EB"+
-            "\u95EC\u95ED\u95EE\u95EF\u95F0\u95F1\u95F2\u95F3"+
-            "\u95F4\u95F5\u95F6\u95F7\u95F8\u95F9\u95FA\u95FB"+
-            "\u95FC\u95FD\u95FE\u95FF\u9600\u9601\u9602\u9603"+
-            "\u9604\u9605\u9606\u9607\u9608\u9609\u960A\u960B"+
-            "\u960C\u960D\u960E\u960F\u9610\u9611\u9612\u9613"+
-            "\u9614\u9615\u9616\u9617\u9618\u9619\u961A\u961B"+
-            "\u961C\u961D\u961E\u961F\u9620\u9621\u9622\u9623"+
-            "\u9624\u9625\u9626\u9627\u9628\u9629\u962A\u962B"+
-            "\u962C\u962D\u962E\u962F\u9630\u9631\u9632\u9633"+
-            "\u9634\u9635\u9636\u9637\u9638\u9639\u963A\u963B"+
-            "\u963C\u963D\u963E\u963F\u9640\u9641\u9642\u9643"+
-            "\u9644\u9645\u9646\u9647\u9648\u9649\u964A\u964B"+
-            "\u964C\u964D\u964E\u964F\u9650\u9651\u9652\u9653"+
-            "\u9654\u9655\u9656\u9657\u9658\u9659\u965A\u965B"+
-            "\u965C\u965D\u965E\u965F\u9660\u9661\u9662\u9663"+
-            "\u9664\u9665\u9666\u9667\u9668\u9669\u966A\u966B"+
-            "\u966C\u966D\u966E\u966F\u9670\u9671\u9672\u9673"+
-            "\u9674\u9675\u9676\u9677\u9678\u9679\u967A\u967B"+
-            "\u967C\u967D\u967E\u967F\u9680\u9681\u9682\u9683"+
-            "\u9684\u9685\u9686\u9687\u9688\u9689\u968A\u968B"+
-            "\u968C\u968D\u968E\u968F\u9690\u9691\u9692\u9693"+
-            "\u9694\u9695\u9696\u9697\u9698\u9699\u969A\u969B"+
-            "\u969C\u969D\u969E\u969F\u96A0\u96A1\u96A2\u96A3"+
-            "\u96A4\u96A5\u96A6\u96A7\u96A8\u96A9\u96AA\u96AB"+
-            "\u96AC\u96AD\u96AE\u96AF\u96B0\u96B1\u96B2\u96B3"+
-            "\u96B4\u96B5\u96B6\u96B7\u96B8\u96B9\u96BA\u96BB"+
-            "\u96BC\u96BD\u96BE\u96BF\u96C0\u96C1\u96C2\u96C3"+
-            "\u96C4\u96C5\u96C6\u96C7\u96C8\u96C9\u96CA\u96CB"+
-            "\u96CC\u96CD\u96CE\u96CF\u96D0\u96D1\u96D2\u96D3"+
-            "\u96D4\u96D5\u96D6\u96D7\u96D8\u96D9\u96DA\u96DB"+
-            "\u96DC\u96DD\u96DE\u96DF\u96E0\u96E1\u96E2\u96E3"+
-            "\u96E4\u96E5\u96E6\u96E7\u96E8\u96E9\u96EA\u96EB"+
-            "\u96EC\u96ED\u96EE\u96EF\u96F0\u96F1\u96F2\u96F3"+
-            "\u96F4\u96F5\u96F6\u96F7\u96F8\u96F9\u96FA\u96FB"+
-            "\u96FC\u96FD\u96FE\u96FF\u9700\u9701\u9702\u9703"+
-            "\u9704\u9705\u9706\u9707\u9708\u9709\u970A\u970B"+
-            "\u970C\u970D\u970E\u970F\u9710\u9711\u9712\u9713"+
-            "\u9714\u9715\u9716\u9717\u9718\u9719\u971A\u971B"+
-            "\u971C\u971D\u971E\u971F\u9720\u9721\u9722\u9723"+
-            "\u9724\u9725\u9726\u9727\u9728\u9729\u972A\u972B"+
-            "\u972C\u972D\u972E\u972F\u9730\u9731\u9732\u9733"+
-            "\u9734\u9735\u9736\u9737\u9738\u9739\u973A\u973B"+
-            "\u973C\u973D\u973E\u973F\u9740\u9741\u9742\u9743"+
-            "\u9744\u9745\u9746\u9747\u9748\u9749\u974A\u974B"+
-            "\u974C\u974D\u974E\u974F\u9750\u9751\u9752\u9753"+
-            "\u9754\u9755\u9756\u9757\u9758\u9759\u975A\u975B"+
-            "\u975C\u975D\u975E\u975F\u9760\u9761\u9762\u9763"+
-            "\u9764\u9765\u9766\u9767\u9768\u9769\u976A\u976B"+
-            "\u976C\u976D\u976E\u976F\u9770\u9771\u9772\u9773"+
-            "\u9774\u9775\u9776\u9777\u9778\u9779\u977A\u977B"+
-            "\u977C\u977D\u977E\u977F\u9780\u9781\u9782\u9783"+
-            "\u9784\u9785\u9786\u9787\u9788\u9789\u978A\u978B"+
-            "\u978C\u978D\u978E\u978F\u9790\u9791\u9792\u9793"+
-            "\u9794\u9795\u9796\u9797\u9798\u9799\u979A\u979B"+
-            "\u979C\u979D\u979E\u979F\u97A0\u97A1\u97A2\u97A3"+
-            "\u97A4\u97A5\u97A6\u97A7\u97A8\u97A9\u97AA\u97AB"+
-            "\u97AC\u97AD\u97AE\u97AF\u97B0\u97B1\u97B2\u97B3"+
-            "\u97B4\u97B5\u97B6\u97B7\u97B8\u97B9\u97BA\u97BB"+
-            "\u97BC\u97BD\u97BE\u97BF\u97C0\u97C1\u97C2\u97C3"+
-            "\u97C4\u97C5\u97C6\u97C7\u97C8\u97C9\u97CA\u97CB"+
-            "\u97CC\u97CD\u97CE\u97CF\u97D0\u97D1\u97D2\u97D3"+
-            "\u97D4\u97D5\u97D6\u97D7\u97D8\u97D9\u97DA\u97DB"+
-            "\u97DC\u97DD\u97DE\u97DF\u97E0\u97E1\u97E2\u97E3"+
-            "\u97E4\u97E5\u97E6\u97E7\u97E8\u97E9\u97EA\u97EB"+
-            "\u97EC\u97ED\u97EE\u97EF\u97F0\u97F1\u97F2\u97F3"+
-            "\u97F4\u97F5\u97F6\u97F7\u97F8\u97F9\u97FA\u97FB"+
-            "\u97FC\u97FD\u97FE\u97FF\u9800\u9801\u9802\u9803"+
-            "\u9804\u9805\u9806\u9807\u9808\u9809\u980A\u980B"+
-            "\u980C\u980D\u980E\u980F\u9810\u9811\u9812\u9813"+
-            "\u9814\u9815\u9816\u9817\u9818\u9819\u981A\u981B"+
-            "\u981C\u981D\u981E\u981F\u9820\u9821\u9822\u9823"+
-            "\u9824\u9825\u9826\u9827\u9828\u9829\u982A\u982B"+
-            "\u982C\u982D\u982E\u982F\u9830\u9831\u9832\u9833"+
-            "\u9834\u9835\u9836\u9837\u9838\u9839\u983A\u983B"+
-            "\u983C\u983D\u983E\u983F\u9840\u9841\u9842\u9843"+
-            "\u9844\u9845\u9846\u9847\u9848\u9849\u984A\u984B"+
-            "\u984C\u984D\u984E\u984F\u9850\u9851\u9852\u9853"+
-            "\u9854\u9855\u9856\u9857\u9858\u9859\u985A\u985B"+
-            "\u985C\u985D\u985E\u985F\u9860\u9861\u9862\u9863"+
-            "\u9864\u9865\u9866\u9867\u9868\u9869\u986A\u986B"+
-            "\u986C\u986D\u986E\u986F\u9870\u9871\u9872\u9873"+
-            "\u9874\u9875\u9876\u9877\u9878\u9879\u987A\u987B"+
-            "\u987C\u987D\u987E\u987F\u9880\u9881\u9882\u9883"+
-            "\u9884\u9885\u9886\u9887\u9888\u9889\u988A\u988B"+
-            "\u988C\u988D\u988E\u988F\u9890\u9891\u9892\u9893"+
-            "\u9894\u9895\u9896\u9897\u9898\u9899\u989A\u989B"+
-            "\u989C\u989D\u989E\u989F\u98A0\u98A1\u98A2\u98A3"+
-            "\u98A4\u98A5\u98A6\u98A7\u98A8\u98A9\u98AA\u98AB"+
-            "\u98AC\u98AD\u98AE\u98AF\u98B0\u98B1\u98B2\u98B3"+
-            "\u98B4\u98B5\u98B6\u98B7\u98B8\u98B9\u98BA\u98BB"+
-            "\u98BC\u98BD\u98BE\u98BF\u98C0\u98C1\u98C2\u98C3"+
-            "\u0000\u0000\u98C4\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u98C5\u98C6\u98C7"+
-            "\u98C8\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u98C9\u0000\u0000\u0000\u0000"+
-            "\u98CA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u98CB"+
-            "\u0000\u0000\u0000\u0000\u98CC\u98CD\u98CE\u98CF"+
-            "\u98D0\u98D1\u98D2\u98D3\u98D4\u98D5\u98D6\u98D7"+
-            "\u98D8\u98D9\u98DA\u98DB\u98DC\u98DD\u98DE\u98DF"+
-            "\u98E0\u98E1\u98E2\u98E3\u98E4\u98E5\u98E6\u98E7"+
-            "\u98E8\u98E9\u98EA\u98EB\u98EC\u98ED\u98EE\u98EF"+
-            "\u98F0\u98F1\u98F2\u98F3\u98F4\u98F5\u98F6\u98F7"+
-            "\u98F8\u98F9\u98FA\u98FB\u98FC\u98FD\u98FE\u98FF"+
-            "\u9900\u9901\u9902\u9903\u9904\u9905\u9906\u9907"+
-            "\u9908\u9909\u990A\u990B\u990C\u990D\u990E\u990F"+
-            "\u9910\u9911\u9912\u9913\u9914\u9915\u9916\u9917"+
-            "\u9918\u9919\u991A\u991B\u991C\u991D\u991E\u991F"+
-            "\u9920\u9921\u9922\u9923\u9924\u9925\u9926\u9927"+
-            "\u9928\u9929\u992A\u992B\u992C\u992D\u992E\u992F"+
-            "\u9930\u9931\u9932\u9933\u9934\u9935\u9936\u9937"+
-            "\u9938\u9939\u993A\u993B\u993C\u993D\u993E\u993F"+
-            "\u9940\u9941\u9942\u9943\u9944\u9945\u9946\u9947"+
-            "\u9948\u9949\u994A\u994B\u994C\u994D\u994E\u994F"+
-            "\u9950\u9951\u9952\u9953\u9954\u9955\u9956\u9957"+
-            "\u9958\u9959\u995A\u995B\u995C\u995D\u995E\u995F";
-
-        private final static String innerIndex10=
-            "\u9960\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9961"+
-            "\u9962\u9963\u9964\u9965\u9966\u9967\u9968\u9969"+
-            "\u996A\u996B\u996C\u996D\u996E\u996F\u9970\u9971"+
-            "\u9972\u9973\u9974\u9975\u9976\u9977\u9978\u9979"+
-            "\u997A\u997B\u997C\u997D\u997E\u997F\u9980\u9981"+
-            "\u9982\u9983\u9984\u9985\u9986\u9987\u9988\u9989"+
-            "\u998A\u998B\u998C\u998D\u998E\u998F\u9990\u9991"+
-            "\u9992\u9993\u9994\u9995\u9996\u9997\u9998\u9999"+
-            "\u999A\u999B\u999C\u999D\u999E\u999F\u99A0\u99A1"+
-            "\u99A2\u99A3\u99A4\u99A5\u99A6\u99A7\u99A8\u99A9"+
-            "\u99AA\u99AB\u99AC\u99AD\u99AE\u99AF\u99B0\u99B1"+
-            "\u99B2\u99B3\u99B4\u99B5\u99B6\u99B7\u99B8\u99B9"+
-            "\u99BA\u99BB\u99BC\u99BD\u99BE\u99BF\u99C0\u99C1"+
-            "\u99C2\u99C3\u99C4\u99C5\u99C6\u99C7\u99C8\u99C9"+
-            "\u99CA\u99CB\u99CC\u99CD\u99CE\u99CF\u99D0\u99D1"+
-            "\u99D2\u99D3\u99D4\u99D5\u99D6\u99D7\u99D8\u99D9"+
-            "\u99DA\u99DB\u99DC\u99DD\u99DE\u99DF\u99E0\u99E1"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u99E2\u99E3"+
-            "\u99E4\u99E5\u99E6\u99E7\u99E8\u99E9\u99EA\u99EB"+
-            "\u99EC\u99ED\u99EE\u99EF\u99F0\u99F1\u99F2\u99F3"+
-            "\u99F4\u99F5\u99F6\u99F7\u99F8\u0000\u99FA\u99FB";
-
-        private final static short index1[] = {
-            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-            17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
-            33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
-            49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
-            65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,
-            80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
-            96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
-            112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
-            128, 129, 130, 131, 132, 133, 134, 135, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 136, 137, 138, 139, 140, 141, 142, 143, 144,
-            145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160
-        };
-
-        private final static String index2[] = {
-            innerIndex0,
-            innerIndex1,
-            innerIndex2,
-            innerIndex3,
-            innerIndex4,
-            innerIndex5,
-            innerIndex6,
-            innerIndex7,
-            innerIndex8,
-            innerIndex9,
-            innerIndex10
-        };
-
-        /* The default implementation creates a decoder and we don't have one */
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11GB2312.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class X11GB2312 extends Charset {
-    public X11GB2312 () {
-        super("X11GB2312", null);
-    }
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11GB2312;
-    }
-
-    private class Encoder extends CharsetEncoder {
-        private DoubleByte.Encoder enc = (DoubleByte.Encoder)new EUC_CN().newEncoder();
-
-        public Encoder(Charset cs) {
-            super(cs, 2.0f, 2.0f);
-        }
-
-        public boolean canEncode(char c) {
-            if (c <= 0x7F) {
-                return false;
-            }
-            return enc.canEncode(c);
-        }
-
-        protected int encodeDouble(char c) {
-            return enc.encodeChar(c);
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    if (c <= '\u007f')
-                        return CoderResult.unmappableForLength(1);
-                    int ncode = encodeDouble(c);
-                    if (ncode != 0 && c != '\u0000' ) {
-                        da[dp++] = (byte) ((ncode  >> 8) & 0x7f);
-                        da[dp++] = (byte) (ncode & 0x7f);
-                        sp++;
-                        continue;
-                    }
-                    return CoderResult.unmappableForLength(1);
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-    }
-
-    private class Decoder extends  CharsetDecoder {
-        private DoubleByte.Decoder dec = (DoubleByte.Decoder)new EUC_CN().newDecoder();
-
-        public Decoder(Charset cs) {
-            super(cs, 0.5f, 1.0f);
-        }
-
-        protected char decodeDouble(int b1, int b2) {
-            return dec.decodeDouble(b1, b2);
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            try {
-                while (sp < sl) {
-                    if ( sl - sp < 2) {
-                        return CoderResult.UNDERFLOW;
-                    }
-                    int b1 = sa[sp] & 0xFF | 0x80;
-                    int b2 = sa[sp + 1] & 0xFF | 0x80;
-                    char c = decodeDouble(b1, b2);
-                    if (c == UNMAPPABLE_DECODING) {
-                        return CoderResult.unmappableForLength(2);
-                    }
-                    if (dl - dp < 1)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = c;
-                    sp +=2;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-
-        }
-    }
-
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11GBK.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.charset.*;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class X11GBK extends Charset {
-    public X11GBK () {
-        super("X11GBK", null);
-    }
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-    public CharsetDecoder newDecoder() {
-        return new GBK().newDecoder();
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11GBK;
-    }
-
-    private class Encoder extends DoubleByte.Encoder {
-
-        private DoubleByte.Encoder enc = (DoubleByte.Encoder)new GBK().newEncoder();
-
-        Encoder(Charset cs) {
-            super(cs, (char[])null, (char[])null);
-        }
-
-        public boolean canEncode(char ch){
-            if (ch < 0x80) return false;
-            return enc.canEncode(ch);
-        }
-
-        public int encodeChar(char ch) {
-            if (ch < 0x80)
-                return UNMAPPABLE_ENCODING;
-            return enc.encodeChar(ch);
-        }
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11JIS0201.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class X11JIS0201 extends Charset {
-
-    private static Charset jis0201 = new JIS_X_0201();
-    private static SingleByte.Encoder enc =
-        (SingleByte.Encoder)jis0201.newEncoder();
-
-    public X11JIS0201 () {
-        super("X11JIS0201", null);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    public CharsetDecoder newDecoder() {
-        return jis0201.newDecoder();
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11JIS0201;
-    }
-
-    private class Encoder extends CharsetEncoder {
-
-        public Encoder(Charset cs) {
-            super(cs, 1.0f, 1.0f);
-        }
-
-        public boolean canEncode(char c){
-            if ((c >= 0xff61 && c <= 0xff9f)
-                || c == 0x203e
-                || c == 0xa5) {
-                return true;
-            }
-            return false;
-        }
-
-        private Surrogate.Parser sgp;
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            CoderResult cr = CoderResult.UNDERFLOW;
-            if ((dl - dp) < (sl - sp)) {
-                sl = sp + (dl - dp);
-                cr = CoderResult.OVERFLOW;
-            }
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    int b = enc.encode(c);
-                    if (b == UNMAPPABLE_ENCODING) {
-                        if (Character.isSurrogate(c)) {
-                            if (sgp == null)
-                                sgp = new Surrogate.Parser();
-                            if (sgp.parse(c, sa, sp, sl) >= 0)
-                                return CoderResult.unmappableForLength(2);
-                        }
-                        return CoderResult.unmappableForLength(1);
-                    }
-                    da[dp++] = (byte)b;
-                    sp++;
-                }
-                return cr;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11JIS0208.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-
-public class X11JIS0208 extends Charset {
-
-    private static Charset jis0208 = new JIS_X_0208();
-
-    public X11JIS0208 () {
-        super("X11JIS0208", null);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return jis0208.newEncoder();
-    }
-
-    public CharsetDecoder newDecoder() {
-        return jis0208.newDecoder();
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11JIS0208;
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11JIS0212.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-
-public class X11JIS0212 extends Charset {
-    private static Charset jis0212 = new JIS_X_0212();
-
-    public X11JIS0212 () {
-        super("X11JIS0212", null);
-    }
-    public CharsetEncoder newEncoder() {
-        return jis0212.newEncoder();
-    }
-    public CharsetDecoder newDecoder() {
-        return jis0212.newDecoder();
-    }
-    public boolean contains(Charset cs) {
-        return cs instanceof X11JIS0212;
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11Johab.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4783 +0,0 @@
-/*
- * Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.ext.DoubleByteEncoder;
-
-public class X11Johab extends Charset {
-    public X11Johab () {
-        super("X11Johab", null);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    public CharsetDecoder newDecoder() {
-        throw new Error("Decoder is not supported by X11Johab Charset");
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11GB18030_1;
-    }
-
-    private static class Encoder extends DoubleByteEncoder {
-        public Encoder(Charset cs) {
-            super(cs, index1, index2);
-        }
-
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-
-        private final static String innerIndex0=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uD9AE\u0000\u0000\uD9B4\u0000\u0000\uD967"+
-            "\uD937\u0000\uDCA3\uD97C\u0000\u0000\u0000\u0000"+
-            "\uD956\uD94E\uDD99\uDD9A\uD9A5\u0000\uD9D2\u0000"+
-            "\uD9AC\uDD98\uDCAC\uD97D\uDCF9\uDCF6\uDCFA\uD9AF"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uDCA1\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDCA2\u0000\u0000\u0000\u0000\u0000\u0000\uD94F"+
-            "\uDCAA\u0000\u0000\u0000\u0000\u0000\uDCAD\uDD3C"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uDD31\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDD33\u0000\u0000\u0000\u0000\u0000\u0000\uD950"+
-            "\uDD3A\u0000\u0000\u0000\u0000\u0000\uDD3D\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDD32\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uDCA4\uDD34"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDD35\uDCA6\uDD36\u0000\u0000\u0000\u0000"+
-            "\uDD37\u0000\u0000\u0000\u0000\u0000\u0000\uDCA8"+
-            "\uDD38\uDCA9\uDD39\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDD40\uDCAF\uDD3F\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uDCAB\uDD3B\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uDCAE\uDD3E"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9A7"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD9A8\uD9AB\uD9AA\uD9AD\uD9A6\uD9A9\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDB51\uDB52\uDB53\uDB54\uDB55\uDB56\uDB57"+
-            "\uDB58\uDB59\uDB5A\uDB5B\uDB5C\uDB5D\uDB5E\uDB5F"+
-            "\uDB60\uDB61\u0000\uDB62\uDB63\uDB64\uDB65\uDB66"+
-            "\uDB67\uDB68\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDB71\uDB72\uDB73\uDB74\uDB75\uDB76\uDB77"+
-            "\uDB78\uDB79\uDB7A\uDB7B\uDB7C\uDB7D\uDB7E\uDB91"+
-            "\uDB92\uDB93\u0000\uDB94\uDB95\uDB96\uDB97\uDB98"+
-            "\uDB99\uDB9A\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDEA7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDEA1\uDEA2\uDEA3\uDEA4\uDEA5\uDEA6\uDEA8\uDEA9"+
-            "\uDEAA\uDEAB\uDEAC\uDEAD\uDEAE\uDEAF\uDEB0\uDEB1"+
-            "\uDEB2\uDEB3\uDEB4\uDEB5\uDEB6\uDEB7\uDEB8\uDEB9"+
-            "\uDEBA\uDEBB\uDEBC\uDEBD\uDEBE\uDEBF\uDEC0\uDEC1"+
-            "\uDED1\uDED2\uDED3\uDED4\uDED5\uDED6\uDED8\uDED9"+
-            "\uDEDA\uDEDB\uDEDC\uDEDD\uDEDE\uDEDF\uDEE0\uDEE1"+
-            "\uDEE2\uDEE3\uDEE4\uDEE5\uDEE6\uDEE7\uDEE8\uDEE9"+
-            "\uDEEA\uDEEB\uDEEC\uDEED\uDEEE\uDEEF\uDEF0\uDEF1"+
-            "\u0000\uDED7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uD939\uD93A\u0000\uD93B\u0000"+
-            "\uD93E\uD93F\u0000\u0000\uD940\uD941\u0000\u0000"+
-            "\uD9D3\uD9D4\u0000\u0000\u0000\uD935\uD936\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD9B6\u0000\uD957\uD958\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uD968\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uDD9B\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDD9C"+
-            "\u0000\uDD9D\uDD9E\uDD9F\uDDA0\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uD959\u0000\u0000\u0000\u0000"+
-            "\u0000\uD9B5\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uDC34\u0000\u0000\uD9E0\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uD9E5\uD9E2\u0000\u0000\u0000\uDC69\u0000"+
-            "\u0000\u0000\u0000\uD95A\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uDCF7\uDCF8\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uDCFB\uDCFC\uDCFD\uDCFE\u0000"+
-            "\uDB40\uDB41\uDB42\uDB43\uDB44\uDB45\uDB46\uDB47"+
-            "\uDB48\uDB49\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDB31\uDB32\uDB33\uDB34\uDB35\uDB36\uDB37\uDB38"+
-            "\uDB39\uDB3A\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD977\uD978\uD976\uD979\uD97A\uD9D5\uD9D8\uD9D6"+
-            "\uD9D9\uD9D7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uD9A1\u0000\uD9A2\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD9A3\u0000\uD963\uD9A4\u0000\u0000\u0000\uD964"+
-            "\uD996\u0000\u0000\uD997\u0000\u0000\u0000\uD9B3"+
-            "\u0000\uD9B2\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uD97E\u0000\u0000\uD992\uD954\u0000"+
-            "\uD960\u0000\u0000\u0000\u0000\u0000\u0000\uD99E"+
-            "\uD99F\uD99D\uD99C\uD994\uD995\u0000\uD9B1\u0000"+
-            "\u0000\u0000\u0000\u0000\uD955\uD993\uD9B0\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uD991\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uD966\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD951\uD965\u0000\u0000\uD952\uD953\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uD99A\uD99B\u0000\u0000\uD998\uD999"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uD961\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uD962\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDCE7\uDCE8\uDCE9\uDCEA\uDCEB\uDCEC\uDCED\uDCEE"+
-            "\uDCEF\uDCF0\uDCF1\uDCF2\uDCF3\uDCF4\uDCF5\u0000"+
-            "\u0000\u0000\u0000\u0000\uDD77\uDD78\uDD79\uDD7A"+
-            "\uDD7B\uDD7C\uDD7D\uDD7E\uDD91\uDD92\uDD93\uDD94"+
-            "\uDD95\uDD96\uDD97\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uDD5D\uDD5E\uDD5F\uDD60"+
-            "\uDD61\uDD62\uDD63\uDD64\uDD65\uDD66\uDD67\uDD68"+
-            "\uDD69\uDD6A\uDD6B\uDD6C\uDD6D\uDD6E\uDD6F\uDD70"+
-            "\uDD71\uDD72\uDD73\uDD74\uDD75\uDD76\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDCCD\uDCCE\uDCCF\uDCD0\uDCD1\uDCD2\uDCD3\uDCD4"+
-            "\uDCD5\uDCD6\uDCD7\uDCD8\uDCD9\uDCDA\uDCDB\uDCDC"+
-            "\uDCDD\uDCDE\uDCDF\uDCE0\uDCE1\uDCE2\uDCE3\uDCE4"+
-            "\uDCE5\uDCE6\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDBA1\uDBAC\uDBA2\uDBAD\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uDBA3\uDBC8\uDBC7\uDBAE"+
-            "\uDBA4\uDBC2\uDBC1\uDBAF\uDBA6\uDBC6\uDBC5\uDBB1"+
-            "\uDBA5\uDBC4\uDBC3\uDBB0\uDBA7\uDBBC\uDBC9\uDBCA"+
-            "\uDBB7\uDBCB\uDBCC\uDBB2\uDBA9\uDBBE\uDBCD\uDBCE"+
-            "\uDBB9\uDBCF\uDBD0\uDBB4\uDBA8\uDBD1\uDBD2\uDBB8"+
-            "\uDBBD\uDBD3\uDBD4\uDBB3\uDBAA\uDBD5\uDBD6\uDBBA"+
-            "\uDBBF\uDBD7\uDBD8\uDBB5\uDBAB\uDBD9\uDBDA\uDBBB"+
-            "\uDBDB\uDBDC\uDBC0\uDBDD\uDBDE\uDBDF\uDBE0\uDBE1"+
-            "\uDBE2\uDBE3\uDBE4\uDBB6\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uD9C6\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD971\uD970\u0000\uD9C3\uD9C7\uD9C8\uD9CB\uD9CA"+
-            "\uD9C9\uD9CC\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uD973\uD972\u0000\u0000\uD9BA\uD9B9"+
-            "\u0000\u0000\u0000\u0000\uD975\uD974\u0000\u0000"+
-            "\uD9B8\uD9B7\u0000\u0000\u0000\u0000\uD96F\uD96E"+
-            "\uD9C2\uD9C1\u0000\uD96B\u0000\u0000\uD96D\uD96C"+
-            "\uD9C4\uD9C5\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uD96A\uD969\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uD9CF\uD9CE"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uD9D0\u0000\uD9D1\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD95F\u0000\uD95E\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD9BC\uD9BD\u0000\uD9C0\uD9BB\uD9BE\u0000\uD9BF"+
-            "\uD9CD\uD9DB\uD9DC\u0000\uD9DD\uD9DA\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD931\uD932\uD933\uD938\u0000\u0000\u0000\u0000"+
-            "\uD944\uD945\uD946\uD947\uD948\uD949\uD94A\uD94B"+
-            "\uD94C\uD94D\u0000\uD97B\uD942\uD943\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDDA1\uDDA2\uDDA3\uDDA4\uDDA5\uDDA6\uDDA7"+
-            "\uDDA8\uDDA9\uDDAA\uDDAB\uDDAC\uDDAD\uDDAE\uDDAF"+
-            "\uDDB0\uDDB1\uDDB2\uDDB3\uDDB4\uDDB5\uDDB6\uDDB7"+
-            "\uDDB8\uDDB9\uDDBA\uDDBB\uDDBC\uDDBD\uDDBE\uDDBF"+
-            "\uDDC0\uDDC1\uDDC2\uDDC3\uDDC4\uDDC5\uDDC6\uDDC7"+
-            "\uDDC8\uDDC9\uDDCA\uDDCB\uDDCC\uDDCD\uDDCE\uDDCF"+
-            "\uDDD0\uDDD1\uDDD2\uDDD3\uDDD4\uDDD5\uDDD6\uDDD7"+
-            "\uDDD8\uDDD9\uDDDA\uDDDB\uDDDC\uDDDD\uDDDE\uDDDF"+
-            "\uDDE0\uDDE1\uDDE2\uDDE3\uDDE4\uDDE5\uDDE6\uDDE7"+
-            "\uDDE8\uDDE9\uDDEA\uDDEB\uDDEC\uDDED\uDDEE\uDDEF"+
-            "\uDDF0\uDDF1\uDDF2\uDDF3\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDE31\uDE32\uDE33\uDE34\uDE35\uDE36\uDE37"+
-            "\uDE38\uDE39\uDE3A\uDE3B\uDE3C\uDE3D\uDE3E\uDE3F"+
-            "\uDE40\uDE41\uDE42\uDE43\uDE44\uDE45\uDE46\uDE47"+
-            "\uDE48\uDE49\uDE4A\uDE4B\uDE4C\uDE4D\uDE4E\uDE4F"+
-            "\uDE50\uDE51\uDE52\uDE53\uDE54\uDE55\uDE56\uDE57"+
-            "\uDE58\uDE59\uDE5A\uDE5B\uDE5C\uDE5D\uDE5E\uDE5F"+
-            "\uDE60\uDE61\uDE62\uDE63\uDE64\uDE65\uDE66\uDE67"+
-            "\uDE68\uDE69\uDE6A\uDE6B\uDE6C\uDE6D\uDE6E\uDE6F"+
-            "\uDE70\uDE71\uDE72\uDE73\uDE74\uDE75\uDE76\uDE77"+
-            "\uDE78\uDE79\uDE7A\uDE7B\uDE7C\uDE7D\uDE7E\uDE91"+
-            "\uDE92\uDE93\uDE94\uDE95\uDE96\uDE97\uDE98\u0000"+
-            "\u0000\u0000\u0000\uD934\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDAA1\uDAA2\uDAA3\uDAA4\uDAA5\uDAA6\uDAA7"+
-            "\uDAA8\uDAA9\uDAAA\uDAAB\uDAAC\uDAAD\uDAAE\uDAAF"+
-            "\uDAB0\uDAB1\uDAB2\uDAB3\uDAB4\uDAB5\uDAB6\uDAB7"+
-            "\uDAB8\uDAB9\uDABA\uDABB\uDABC\uDABD\uDABE\uDABF"+
-            "\uDAC0\uDAC1\uDAC2\uDAC3\uDAC4\uDAC5\uDAC6\uDAC7"+
-            "\uDAC8\uDAC9\uDACA\uDACB\uDACC\uDACD\uDACE\uDACF"+
-            "\uDAD0\uDAD1\uDAD2\uDAD3\uDAD4\uDAD5\uDAD6\uDAD7"+
-            "\uDAD8\uDAD9\uDADA\uDADB\uDADC\uDADD\uDADE\uDADF"+
-            "\uDAE0\uDAE1\uDAE2\uDAE3\uDAE4\uDAE5\uDAE6\uDAE7"+
-            "\uDAE8\uDAE9\uDAEA\uDAEB\uDAEC\uDAED\uDAEE\uDAEF"+
-            "\uDAF0\uDAF1\uDAF2\uDAF3\uDAF4\uDAF5\uDAF6\uDAF7"+
-            "\uDAF8\uDAF9\uDAFA\uDAFB\uDAFC\uDAFD\uDAFE\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDD41\uDD42\uDD43\uDD44\uDD45\uDD46\uDD47\uDD48"+
-            "\uDD49\uDD4A\uDD4B\uDD4C\uDD4D\uDD4E\uDD4F\uDD50"+
-            "\uDD51\uDD52\uDD53\uDD54\uDD55\uDD56\uDD57\uDD58"+
-            "\uDD59\uDD5A\uDD5B\uDD5C\uD9DF\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDCB1\uDCB2\uDCB3\uDCB4\uDCB5\uDCB6\uDCB7\uDCB8"+
-            "\uDCB9\uDCBA\uDCBB\uDCBC\uDCBD\uDCBE\uDCBF\uDCC0"+
-            "\uDCC1\uDCC2\uDCC3\uDCC4\uDCC5\uDCC6\uDCC7\uDCC8"+
-            "\uDCC9\uDCCA\uDCCB\uDCCC\u0000\u0000\u0000\uD9DE"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-        private final static String innerIndex1=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDC59\uDC5A\uDC5B\uDC5C\uDC5D\u0000\u0000\u0000"+
-            "\uDC4A\uDC4B\uDC6C\uDC6D\uDC6E\uDC46\uDC47\uDC48"+
-            "\uDC64\uDC65\uDC66\uDC67\uDC68\uDC31\uDC32\uDC33"+
-            "\uDC35\uDC3B\uDC3C\uDC3D\uDC3E\uDC3F\uDC40\uDC41"+
-            "\uDC42\uDC43\uDC44\uDC37\uDC38\uDC39\uDC3A\uDC4D"+
-            "\uDC4E\uDC75\uDC76\uDC77\uDC78\uDC71\uDC72\uDC73"+
-            "\uDC4F\uDC50\uDC51\uDC52\uDC53\uDC54\uDC55\uDC56"+
-            "\uDC57\uDC58\uDC5E\uDC5F\uDC60\uDC61\uDC62\uDC63"+
-            "\uDC6A\uDC6B\uD9E3\uDC7C\uDC36\uDC70\uDC91\uD9E1"+
-            "\uDC4C\uDC7D\uDC45\u0000\u0000\u0000\u0000\uDC49"+
-            "\uDC7A\u0000\u0000\uDC7B\u0000\u0000\uDC6F\u0000"+
-            "\uD9E4\u0000\u0000\uDC74\uDC7E\uDC79\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF179\uF2CB\u0000\uF662\u0000\u0000\u0000\uE742"+
-            "\uF1DB\uEAB2\uEABE\uF7BB\u0000\uE996\u0000\u0000"+
-            "\u0000\uF5E4\u0000\u0000\uF4A6\uE9E0\uEBA6\u0000"+
-            "\uE29A\uE940\u0000\u0000\u0000\u0000\uECAA\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF3E9\u0000\u0000"+
-            "\u0000\u0000\uE1FA\u0000\u0000\u0000\u0000\u0000"+
-            "\uF93F\uE4A1\u0000\uF3AB\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEED1\uE43C\u0000\uE29B\u0000\u0000"+
-            "\u0000\u0000\u0000\uF3FD\u0000\uEA4F\uF8BA\uF7B9"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE262\u0000"+
-            "\uECAB\uF0E0\u0000\u0000\u0000\uE29C\uE0F7\uEDA5"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE071\u0000\uE55C\u0000\u0000"+
-            "\u0000\u0000\u0000\uF071\u0000\u0000\uE973\uEAAD"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE0EB\u0000"+
-            "\u0000\u0000\uE5AF\u0000\u0000\u0000\uE697\u0000"+
-            "\uEDF8\u0000\u0000\uEA50\uF133\u0000\uEFCD\u0000"+
-            "\uF037\uEFF6\uF8BB\u0000\uEEE9\uF2CC\u0000\u0000"+
-            "\uE376\u0000\u0000\uEA51\u0000\u0000\uED3C\u0000"+
-            "\u0000\uE75C\uF7F1\u0000\uE26F\uF834\uEE42\u0000"+
-            "\uF89D\u0000\u0000\uF84D\uE158\uF2CD\uE5D5\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE4A2\u0000"+
-            "\u0000\u0000\uF161\u0000\u0000\u0000\u0000\u0000"+
-            "\uED37\uF162\u0000\u0000\uF641\u0000\u0000\uE29D"+
-            "\u0000\u0000\uE361\uE0BF\u0000\uF1A4\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF1A8\uEA52\uF672\uF1DC"+
-            "\uE997\uEB49\u0000\u0000\u0000\uE55E\u0000\uF545"+
-            "\u0000\u0000\u0000\uE4DB\uE645\uF134\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uED76\u0000\uF3EA\u0000\u0000\u0000\uE0EC\uE0C0"+
-            "\u0000\u0000\u0000\uF194\u0000\u0000\u0000\u0000"+
-            "\u0000\uE37A\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF7F2\uF135\uE36F\u0000\uEEEA\uE37B\uE961"+
-            "\uE8E9\uF9CC\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8D7"+
-            "\u0000\u0000\u0000\u0000\uE871\u0000\uE646\u0000"+
-            "\uECDF\u0000\uEA53\u0000\uEA54\uE031\u0000\u0000"+
-            "\u0000\u0000\u0000\uF27C\u0000\u0000\uE4A3\uF247"+
-            "\uF75F\u0000\u0000\u0000\u0000\uF058\uF248\uF3AC"+
-            "\uF3A5\uEFCE\u0000\u0000\u0000\uF7BC\u0000\u0000"+
-            "\u0000\uEDF9\uF17A\uE9D6\uF1C2\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF735\u0000\u0000\u0000\u0000\u0000\uEDBA"+
-            "\uE8D8\u0000\u0000\uE032\u0000\u0000\uE3CD\u0000"+
-            "\u0000\u0000\uF27D\u0000\u0000\u0000\uF17B\uEA55"+
-            "\u0000\uECE0\u0000\uE059\uF479\u0000\uE5CE\u0000"+
-            "\uF646\u0000\uE252\uE657\u0000\uECB4\u0000\uF3AD"+
-            "\u0000\uF072\u0000\u0000\u0000\u0000\uE6C2\u0000"+
-            "\uF4A7\u0000\u0000\uE1EA\u0000\uF0EE\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE7B2\uF9A5"+
-            "\u0000\u0000\u0000\u0000\u0000\uF665\uE5E2\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF745"+
-            "\u0000\u0000\uE197\uF5B5\uED3D\u0000\u0000\u0000"+
-            "\u0000\uEEEB\uF3D5\u0000\u0000\u0000\uF34B\u0000"+
-            "\u0000\uEFB5\u0000\uE159\uF865\u0000\u0000\uEBD4"+
-            "\u0000\u0000\uE6D6\u0000\u0000\uE951\u0000\uEA56"+
-            "\uF891\uECE1\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEBF3\uE998"+
-            "\u0000\uE29E\u0000\uE8C4\u0000\uF793\u0000\u0000"+
-            "\uE974\u0000\uEDEF\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE941\u0000\u0000\u0000\uE5D6\u0000"+
-            "\u0000\uF4DA\u0000\uE0C1\u0000\uE8C3\u0000\u0000"+
-            "\u0000\uE7FA\uE4EE\u0000\u0000\u0000\uF848\u0000"+
-            "\u0000\uF9A6\uF0EF\u0000\uF536\u0000\uE15A\uF4A8"+
-            "\u0000\uF4DB\u0000\uE8A7\uF647\u0000\uE2E6\uF394"+
-            "\uE0DA\u0000\uEED2\uE6C3\uF692\uEF6E\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEDA6\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEDE7\u0000\u0000\u0000\uE033"+
-            "\uE137\uF059\u0000\u0000\u0000\u0000\u0000\uF746"+
-            "\u0000\u0000\u0000\u0000\u0000\uF835\u0000\u0000"+
-            "\u0000\u0000\uF3AE\u0000\uF2CE\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE0ED\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF640\uF2CF\uEFCF\u0000"+
-            "\uF6DE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE263\u0000\u0000\u0000\u0000\uE999\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE8A8\u0000\u0000"+
-            "\u0000\uE0F8\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEAA1\uE9E1\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF5CA\uEFB6\u0000\u0000"+
-            "\u0000\u0000\uEEEC\uF27E\u0000\uF4F0\u0000\uEABF"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE15B\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE351\u0000\u0000"+
-            "\u0000\uF562\uEB4A\u0000\u0000\u0000\u0000\uEAC0"+
-            "\u0000\uE270\u0000\u0000\u0000\uE962\uF9EA\u0000"+
-            "\u0000\u0000\uE698\u0000\u0000\u0000\uF05A\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEF79\u0000\uECAC"+
-            "\u0000\u0000\u0000\u0000\u0000\uF4D0\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE034\u0000\uE8F8\u0000\u0000\u0000\uEA57"+
-            "\uF0F0\uF3D6\u0000\u0000\uEDE2\u0000\uE15C\u0000"+
-            "\u0000\uE0FB\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF073\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAC1"+
-            "\u0000\uE67D\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEFD0\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF249\u0000\u0000\u0000\u0000\uE5E3"+
-            "\u0000\u0000\uE3D3\u0000\uEDF0\u0000\u0000\u0000"+
-            "\uEF44\uF0C3\u0000\uF03A\uF89E\uF5F6\uF34C\uF9D4"+
-            "\uEB4B\uE253\u0000\uE34A\uF6BA\uE795\uF6CD\u0000"+
-            "\u0000\u0000\uED3E\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE56F\u0000\u0000\u0000"+
-            "\u0000\u0000\uE377\u0000\u0000\uF19F\u0000\uE43E"+
-            "\uF291\uE5D7\uF074\uF732\uE1EB\uE6BF\uF8B1\u0000"+
-            "\u0000\uE1EC\u0000\u0000\u0000\uE942\uE37C\uE29F"+
-            "\uF292\u0000\u0000\u0000\uE152\u0000\u0000\u0000"+
-            "\uE37D\u0000\u0000\u0000\u0000\u0000\uEDF7\u0000"+
-            "\u0000\u0000\uF4FC\u0000\u0000\uF232\u0000\u0000"+
-            "\u0000\u0000\uE7B3\u0000\u0000\uE796\u0000\uEFB7"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE23E\u0000\u0000\u0000\u0000\uE7A2\u0000\u0000"+
-            "\u0000\u0000\uE793\u0000\uE55F\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEDA7\uE5D2"+
-            "\u0000\u0000\u0000\u0000\u0000\uE639\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF532\u0000\uF3D7\u0000"+
-            "\u0000\uE5D8\u0000\uF34D\uE6D0\uE560\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE6CF\uF0EA\uF9EB\u0000"+
-            "\u0000\uE8ED\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF955\uE0C2\u0000\u0000\u0000\u0000\uF9D5\u0000"+
-            "\uF558\uEF7A\uF5F3\u0000\u0000\uF7DE\u0000\u0000"+
-            "\uE4EF\u0000\u0000\uF163\u0000\u0000\uE9C2\uF2B7"+
-            "\uEED4\u0000\uE05A\u0000\u0000\u0000\uE7FB\u0000"+
-            "\u0000\uF89F\u0000\u0000\u0000\u0000\u0000\uE63A"+
-            "\u0000\u0000\u0000\u0000\u0000\uF59A\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF6F7\uE93C\u0000\u0000"+
-            "\u0000\uE6D7\uEAA2\u0000\u0000\u0000\uE24E\u0000"+
-            "\uE4F0\u0000\u0000\u0000\u0000\u0000\uF334\uEBEC"+
-            "\uE2E7\uF4CB\uF1A9\uE04E\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF591\u0000\u0000\u0000\uF65E"+
-            "\u0000\u0000\uEA9D\uE34B\uE5B7\uF293\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF538\u0000\uE99A\u0000"+
-            "\u0000\u0000\u0000\uE0A7\u0000\uE85E\u0000\u0000"+
-            "\u0000\uEB76\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF1A5\uF294\u0000\u0000\u0000\u0000\uE99B"+
-            "\u0000\u0000\uF7DC\u0000\u0000\uF4DC\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF794\u0000\uF59B"+
-            "\u0000\u0000\u0000\uF993\u0000\u0000\u0000\uE34C"+
-            "\uE8F9\uE6B1\u0000\u0000\u0000\uE0FC\u0000\u0000"+
-            "\u0000\uF335\uE0FD\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE5F4\u0000\u0000\u0000\uE1ED"+
-            "\uE035\u0000\u0000\uE63B\uE352\u0000\u0000\u0000"+
-            "\u0000\uF34E\uE44D\uE134\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF846\u0000"+
-            "\u0000\uE15D\u0000\uE89C\u0000\uF65F\u0000\uEFB8"+
-            "\u0000\uE797\u0000\u0000\u0000\uE15E\u0000\u0000"+
-            "\u0000\u0000\uE6CD\u0000\u0000\uE561\uEFED\u0000"+
-            "\uE07B\uE7E2\u0000\uF9B2\u0000\uECAD\uE65C\uE7B4"+
-            "\u0000\u0000\uEBA7\uF263\uE353\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF9B3\u0000\uE5E4\u0000\u0000"+
-            "\uE2E8\u0000\uF1C3\uE342\u0000\u0000\uE2A0\uE838"+
-            "\u0000\u0000\u0000\u0000\u0000\uF760\u0000\u0000"+
-            "\uF9D6\u0000\u0000\u0000\u0000\uF761\u0000\uF762"+
-            "\uE963\u0000\u0000\u0000\u0000\uE9E2\uF8F9\uE9C1"+
-            "\u0000\uECB5\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF1DD\uE254\u0000\uE0A1\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE9E3\u0000\u0000\u0000\u0000\uF96D"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF7AF\u0000\u0000\u0000\u0000\u0000\uE49D"+
-            "\uE2A1\uED38\u0000\uF546\uF1A0\u0000\u0000\uECAE"+
-            "\uEEED\uF9C1\uE872\u0000\u0000\uE743\u0000\u0000"+
-            "\u0000\uE9E4\uF391\uF693\uF892\u0000\u0000\uE3F5"+
-            "\u0000\u0000\uE85F\u0000\uE964\u0000\uE936\u0000"+
-            "\uF2BF\u0000\u0000\u0000\u0000\u0000\uE25F\u0000"+
-            "\uEB69\u0000\u0000\u0000\u0000\u0000\u0000\uE7D6"+
-            "\uF164\uF05B\u0000\u0000\uE04F\uE5B0\u0000\uE2E9"+
-            "\u0000\u0000\u0000\u0000\u0000\uF3ED\u0000\uE15F"+
-            "\u0000\u0000\u0000\u0000\uED9A\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uED7D\u0000\u0000\u0000\u0000"+
-            "\uE6D8\u0000\uF9A7\u0000\u0000\u0000\u0000\uF03B"+
-            "\uF642\u0000\u0000\u0000\u0000\uE2F0\uF7BD\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEE96\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE0DB\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF4D1\u0000\u0000\u0000\u0000"+
-            "\uEFD1\uF4A9\uE370\uEFD2\u0000\uE873\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEC62\u0000\uF632\uEBF4"+
-            "\u0000\u0000\u0000\uE874\u0000\u0000\u0000\u0000"+
-            "\u0000\uEED5\uF5BF\uE2A2\uE1AF\uE2A3\u0000\u0000"+
-            "\u0000\uE1B0\uF3FE\uE333\uEBAF\uF733\u0000\uE036"+
-            "\uF6BB\uF47A\uEA58\uEFD3\u0000\u0000\u0000\u0000"+
-            "\uEA59\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF9DE\uE050\u0000\u0000\u0000"+
-            "\uF7EA\uE3CE\uF264\u0000\uE562\uE7A3\uF9A8\uE6D9"+
-            "\uF6CE\uF84E\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE2D6\u0000\uE6F0\u0000\uF0E1"+
-            "\uF755\u0000\u0000\u0000\u0000\u0000\uE99C\u0000"+
-            "\u0000\uE9C3\u0000\uF7DF\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEEEF\u0000\u0000\u0000\u0000"+
-            "\uF9E5\uF633\u0000\uE7FC\uF9A9\u0000\uEEEE\u0000"+
-            "\u0000\u0000\uE5E5\u0000\u0000\u0000\u0000\u0000"+
-            "\uF2D0\u0000\uE1B1\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF6A2\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF3B2\u0000\uF3B1\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE1B2\u0000\uE83B\u0000\uE037\u0000\u0000"+
-            "\u0000\u0000\u0000\uECE2\uF8BC\uE7A4\u0000\u0000"+
-            "\uF24A\u0000\u0000\u0000\u0000\u0000\uF763\u0000"+
-            "\u0000\u0000\u0000\u0000\uF8FA\u0000\uE2A4\u0000"+
-            "\uE99D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF673\u0000\u0000\u0000"+
-            "\uF1AA\u0000\u0000\uF431\uE271\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF836\u0000\u0000\u0000\u0000"+
-            "\uF7E0\u0000\u0000\u0000\u0000\uF166\u0000\u0000"+
-            "\uED7E\uF7A1\u0000\u0000\uF8EF\u0000\u0000\u0000"+
-            "\uF7EB\uF233\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF03C\u0000\u0000\u0000\uE038\u0000\u0000"+
-            "\uF59C\u0000\u0000\u0000\u0000\uE1D6\uF998\u0000"+
-            "\u0000\u0000\uF559\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF764\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF736\u0000\uEA5A\uF456"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE6DA\u0000"+
-            "\uE4D0\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE755\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF076"+
-            "\u0000\uF4DD\u0000\u0000\u0000\uED6A\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF674\u0000"+
-            "\u0000\u0000\u0000\u0000\uF694\u0000\uEAC2\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7FD"+
-            "\u0000\u0000\u0000\uE198\u0000\u0000\uE4BA\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uED3F\u0000"+
-            "\u0000\u0000\u0000\uF7E1\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF336\u0000\u0000\u0000"+
-            "\uE0D3\u0000\u0000\u0000\uEB4C\u0000\uF55A\uE59C"+
-            "\u0000\uF9AA\uF7E2\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF547\uF9C2\uF940\u0000\uF9EC\uE072\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9BD"+
-            "\u0000\uF077\uEAC3\uE3D2\uE272\u0000\uE4A4\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF9AB\u0000\uEAE0"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF457\u0000\u0000\u0000"+
-            "\u0000\u0000\uEEF0\u0000\uE37E\u0000\u0000\uF4AA"+
-            "\u0000\u0000\u0000\uEA5B\uF648\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEBF5\uF3B3\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF6A3\u0000"+
-            "\u0000\uE039\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE2A5\u0000\u0000\uEAC4"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBB0"+
-            "\u0000\u0000\uF34F\u0000\uF634\u0000\uECB6\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF856\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE391\u0000\u0000\uF9ED\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE9C4\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF999\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEE4F\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEA3D\u0000\uF84F\u0000"+
-            "\u0000\u0000\u0000\u0000\uEDF1\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF1C4\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE435\u0000\u0000\uF9EE\u0000\u0000"+
-            "\u0000\uF5B6\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEBF6\uEA5C\u0000\u0000\uF96E\u0000"+
-            "\uF167\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE1DD\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE647\uE1B3\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF765\uEDD8\u0000\u0000\u0000"+
-            "\uE2EA\u0000\u0000\uE2D0\u0000\uF05C\u0000\u0000"+
-            "\u0000\u0000\uF03E\uF03D\u0000\u0000\uE4F1\u0000"+
-            "\uE4A5\u0000\u0000\u0000\u0000\u0000\u0000\uF6CF"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF234\u0000\u0000\u0000\u0000\uE334\u0000\u0000"+
-            "\uF432\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE392\u0000\u0000\u0000\u0000"+
-            "\uF433\u0000\uF6F8\u0000\u0000\u0000\u0000\uE343"+
-            "\u0000\u0000\uE8A9\u0000\u0000\uE4BB\uE07C\u0000"+
-            "\uF3A6\uE0D5\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF6E7\u0000\u0000\uE1DE\u0000\uF6A4\u0000"+
-            "\u0000\u0000\uF750\u0000\u0000\u0000\uE4DD\u0000"+
-            "\uE160\u0000\u0000\u0000\u0000\uE2A6\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF695\u0000\u0000\u0000"+
-            "\u0000\u0000\uEBF7\u0000\u0000\u0000\u0000\u0000"+
-            "\uE4DC\u0000\u0000\uF8A0\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF837\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF0D9\u0000\uE2A7\uF03F\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uED91\u0000\u0000\u0000\uEFB9"+
-            "\uF3D8\u0000\u0000\uE768\u0000\u0000\uEB94\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE44"+
-            "\uE99E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF4F1\u0000\u0000\u0000\uECD0\u0000\u0000\uF49D"+
-            "\u0000\uE8C6\uE393\u0000\uE394\u0000\u0000\u0000"+
-            "\uE2DC\u0000\uE4D1\u0000\u0000\uE141\uF6D8\u0000"+
-            "\uE0A8\uF0BC\uED4E\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF56C\u0000"+
-            "\u0000\uE952\u0000\u0000\uF337\u0000\u0000\uEE50"+
-            "\u0000\u0000\uE07D\u0000\u0000\u0000\u0000\uEF7B"+
-            "\uEDE8\uE953\u0000\u0000\uF1DE\uE4F2\u0000\u0000"+
-            "\u0000\u0000\uE199\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE264\uEEAB\u0000\u0000\u0000\uE0C3"+
-            "\u0000\uEBB1\u0000\u0000\uF6B2\u0000\u0000\uE4F3"+
-            "\uE4D2\u0000\uF5C0\u0000\u0000\u0000\uEADD\u0000"+
-            "\u0000\uF295\uEEF1\u0000\uF9B4\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF458\u0000\u0000"+
-            "\u0000\uF4D2\u0000\u0000\uF296\u0000\uEC63\u0000"+
-            "\u0000\u0000\u0000\uE161\u0000\uEAEA\u0000\u0000"+
-            "\u0000\uEFBA\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE7D7\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF5CD\u0000\uF3F2\uF857"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE7F8\uE552\u0000\u0000\u0000\u0000\uF675\u0000"+
-            "\u0000\u0000\u0000\uE9C5\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEEF2\uF1DF\u0000\u0000\uE05B\u0000"+
-            "\u0000\uE8FA\u0000\u0000\u0000\uEF45\u0000\uE4A6"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF9B5\u0000"+
-            "\u0000\uF7C9\u0000\uED72\u0000\uF8BD\u0000\u0000"+
-            "\uE6A4\uE255\u0000\u0000\u0000\u0000\uE265\uE676"+
-            "\u0000\u0000\u0000\u0000\uEDBD\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEA5D\uF195\u0000\u0000\uF1E0"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF17C\uF8BE\uEAEB\u0000\uEBF8\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF7BE"+
-            "\u0000\u0000\u0000\u0000\uE395\uEB3A\uEF72\u0000"+
-            "\u0000\uEC64\uE49F\u0000\uEDA8\u0000\u0000\u0000"+
-            "\u0000\u0000\uE7D3\u0000\u0000\u0000\u0000\uE4DE"+
-            "\u0000\uF548\uF6BC\uE99F\u0000\uEF7C\uED77\u0000"+
-            "\u0000\uECF7\u0000\u0000\u0000\u0000\u0000\uF138"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF893\u0000"+
-            "\u0000\u0000\u0000\u0000\uEDF2\u0000\u0000\uE396"+
-            "\uE43F\uE975\u0000\u0000\u0000\u0000\uE335\uF3B4"+
-            "\uF941\uE19A\u0000\u0000\uE9C6\uF861\u0000\uF6DF"+
-            "\u0000\u0000\uF838\u0000\u0000\u0000\u0000\u0000"+
-            "\uF297\u0000\uEA5E\u0000\u0000\u0000\u0000\uEEF3"+
-            "\u0000\u0000\uF6AC\uF0C4\uF1E1\uEB3B\uE9C7\u0000"+
-            "\u0000\u0000\u0000\uE443\uE44F\u0000\u0000\u0000"+
-            "\uE05C\u0000\u0000\u0000\u0000\uF8BF\u0000\u0000"+
-            "\u0000\u0000\uEDFD\uE9E5\uE75D\u0000\u0000\u0000"+
-            "\u0000\u0000\uF196\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE397\u0000\u0000\uEF7D\uE362"+
-            "\u0000\uE7D8\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF676\u0000\u0000"+
-            "\uE8AA\u0000\u0000\u0000\uF6E0\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE769\u0000\uF533\u0000\u0000\uF56D\u0000"+
-            "\u0000\u0000\u0000\uF2D1\u0000\u0000\uE7B5\u0000"+
-            "\u0000\uF1AB\u0000\uECB7\u0000\u0000\u0000\u0000"+
-            "\uF24B\uE1B4\u0000\uEB95\uF05D\u0000\u0000\u0000"+
-            "\u0000\uF197\uEF7E\u0000\uE0A9\uF3AF\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE05D\u0000"+
-            "\uF139\u0000\uF47B\u0000\uF9EF\u0000\uF7F3\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEE51\u0000\u0000\uF168\u0000\u0000\u0000\uF1AC"+
-            "\u0000\uF05E\u0000\uEF6F\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEA5F\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE436\u0000\u0000\uEEF4\uE3D6\u0000\u0000\uEE52"+
-            "\uECE3\u0000\u0000\u0000\u0000\uED40\u0000\u0000"+
-            "\u0000\uE744\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF635\u0000"+
-            "\u0000\u0000\u0000\u0000\uF4DE\u0000\u0000\u0000"+
-            "\u0000\uE6A5\u0000\u0000\u0000\u0000\uF6E8\u0000"+
-            "\u0000\uEF56\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF8E6\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE9E6\u0000\u0000\u0000\uE9A0\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE76A\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE83C\uF040\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uECB8\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE03A\uEBF9\u0000\uF041\u0000\u0000\u0000"+
-            "\u0000\uF47C\u0000\u0000\uF87E\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF265\u0000\u0000\u0000\u0000\uF7F4\u0000"+
-            "\u0000\uE47C\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF8FB\u0000\u0000"+
-            "\u0000\uF9F0\u0000\uEB4D\uE273\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF756\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEA3E\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEAC5\u0000\u0000\uEDBE\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF1AD\uF87A\u0000\u0000\uE1EE\uF1A6\u0000\uF1AE"+
-            "\uF37D\u0000\uE9A1\u0000\uF1AF\uF99A\u0000\uE77B"+
-            "\u0000\u0000\u0000\uE19B\uE1B5\u0000\u0000\u0000"+
-            "\u0000\uF839\u0000\uEBDD\u0000\u0000\u0000\u0000"+
-            "\uEC65\uF1CF\u0000\u0000\u0000\uE9A2\u0000\u0000"+
-            "\uF7CA\u0000\uF078\u0000\uEDED\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE4EB\u0000\uEFD4"+
-            "\uEBFA\uED5C\u0000\uEBE4\uEF57\u0000\u0000\uE26B"+
-            "\u0000\u0000\u0000\uE965\u0000\uF6B5\uF995\uF395"+
-            "\uE23F\uF3B5\uF2D2\uEF58\uF0F1\u0000\u0000\u0000"+
-            "\u0000\u0000\uE0D4\uEB4E\uECF8\uF079\uF942\u0000"+
-            "\u0000\u0000\u0000\u0000\uEB96\u0000\uE2E0\u0000"+
-            "\uF235\u0000\u0000\uF83A\uEE53\uEBB2\uE03B\u0000"+
-            "\uECE4\uEFBB\u0000\u0000\u0000\u0000\u0000\uEC66"+
-            "\uF4F2\u0000\uF266\uF042\uE398\uF169\uE85B\uE2A8"+
-            "\u0000\u0000\u0000\u0000\uE9A3\u0000\u0000\u0000"+
-            "\uE76B\u0000\uF7CE\uEFD5\uECD1\u0000\u0000\uE44C"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE73C\uF4CC"+
-            "\u0000\uE1FB\uF666\u0000\uEEF5\uEF91\uECF9\uE44B"+
-            "\uF4F3\uECFB\u0000\uEA60\uE240\u0000\uE699\uF3D9"+
-            "\u0000\u0000\u0000\u0000\u0000\uF5C1\uE954\u0000"+
-            "\uF5BB\u0000\uEA61\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE976\u0000\u0000\uEA62\u0000\u0000\uF1E2"+
-            "\uF298\uF05F\uF37E\uECFC\u0000\uE4DF\uE4F4\uEBB3"+
-            "\u0000\uEBB4\u0000\u0000\u0000\u0000\uF563\u0000"+
-            "\u0000\uEAC6\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEFD6\u0000\u0000\u0000"+
-            "\uE8AB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF636\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uECB9\uF0C5\uF539\uE1B6\uE49B\u0000\uE83D\uE473"+
-            "\uE2D1\u0000\u0000\u0000\u0000\uE0DC\uE19C\u0000"+
-            "\uE2DD\u0000\u0000\uEF39\u0000\uECBB\uECBA\u0000"+
-            "\u0000\uEB6A\u0000\u0000\u0000\uF299\u0000\u0000"+
-            "\u0000\u0000\u0000\uE943\u0000\u0000\u0000\u0000"+
-            "\uE4F5\u0000\uE6A6\u0000\uF645\uE6DB\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEBD5\u0000\u0000\uE57A"+
-            "\u0000\uEAA3\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF9DF\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE399\uF1D4\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE0AA\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uED6B\u0000\uEBFB\uE0A2\u0000\u0000\u0000"+
-            "\u0000\uE4E0\u0000\uED4F\u0000\uF8C0\u0000\uE84E"+
-            "\uED5D\u0000\uE649\u0000\u0000\u0000\uF2C0\u0000"+
-            "\uEBFC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF649\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEAC7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uED41\u0000\u0000\u0000\u0000\u0000\u0000\uE977"+
-            "\uE978\u0000\u0000\u0000\uF866\u0000\uE4F6\u0000"+
-            "\u0000\u0000\u0000\uF3DA\u0000\uF894\u0000\u0000";
-
-        private final static String innerIndex2=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC9F"+
-            "\u0000\u0000\u0000\u0000\u0000\uE5CF\uE39A\u0000"+
-            "\u0000\uE1DF\u0000\u0000\uF5CB\u0000\uED92\uE0AB"+
-            "\u0000\uE6C4\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECA0"+
-            "\u0000\uE9DA\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE83E\uE07E\u0000\u0000\u0000"+
-            "\uE5B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uECA1\u0000\u0000\uEF73\u0000\u0000\uF4AB"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2A9"+
-            "\u0000\u0000\u0000\uE4F7\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE593\u0000\u0000"+
-            "\uE274\u0000\uEF94\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEDF5\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEEAE\u0000\uE64A\u0000\uEAEC\uED50\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEF74\u0000\u0000"+
-            "\u0000\u0000\uE745\u0000\u0000\u0000\uED6C\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF549\uF3B6\u0000"+
-            "\u0000\uEC6E\uEBB5\u0000\u0000\uE1EF\uF3A7\uE275"+
-            "\uE0DD\u0000\u0000\uE7E3\u0000\u0000\uF4AC\u0000"+
-            "\u0000\uE39B\uF13B\uEA63\uF6E9\u0000\u0000\uF7F5"+
-            "\u0000\u0000\u0000\u0000\u0000\uEBDE\uE0EE\u0000"+
-            "\u0000\u0000\uECBC\uF766\u0000\u0000\uE8EE\u0000"+
-            "\u0000\u0000\u0000\u0000\uF9F1\u0000\u0000\u0000"+
-            "\u0000\uF6B6\u0000\u0000\u0000\u0000\uF56E\u0000"+
-            "\u0000\uF47D\u0000\uE8D9\u0000\uF338\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEBFD\u0000\u0000"+
-            "\u0000\u0000\u0000\uEA64\u0000\uEB3C\u0000\u0000"+
-            "\u0000\u0000\u0000\uF1E3\u0000\u0000\uE4E1\u0000"+
-            "\uEAC8\u0000\u0000\u0000\u0000\uE7B6\u0000\uF9AC"+
-            "\uF2D3\u0000\u0000\u0000\uED51\uF77B\u0000\uE8AC"+
-            "\u0000\u0000\u0000\u0000\uF956\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE73D\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF64A"+
-            "\u0000\uE8DF\uE4D3\uF757\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE05E\uF751\uE444\u0000\u0000\uE944"+
-            "\uF849\uE05F\u0000\uF943\uF07A\uF07B\uE39C\u0000"+
-            "\u0000\u0000\u0000\u0000\uF1E4\u0000\u0000\uE9E7"+
-            "\u0000\u0000\uEAC9\u0000\u0000\u0000\u0000\uEAED"+
-            "\u0000\u0000\u0000\u0000\u0000\uF24C\u0000\uF2C1"+
-            "\u0000\u0000\uE162\u0000\uE9A4\u0000\u0000\u0000"+
-            "\uEACA\u0000\u0000\u0000\u0000\u0000\uE4F8\uF3A8"+
-            "\u0000\u0000\u0000\uE1B7\u0000\uF2D4\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uED6D\uEAEE\uE0AC"+
-            "\uEFBC\u0000\u0000\u0000\u0000\u0000\uF07C\u0000"+
-            "\u0000\u0000\uEACB\u0000\u0000\u0000\u0000\u0000"+
-            "\uF7BF\uE63F\uE5C6\u0000\u0000\u0000\u0000\u0000"+
-            "\uE2AA\u0000\u0000\uE239\u0000\u0000\uE69A\u0000"+
-            "\u0000\u0000\uF3B7\uF29A\u0000\u0000\u0000\uE7D9"+
-            "\uF4DF\u0000\uF758\uE256\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE5E6\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF576\u0000\u0000\uEE55\uF2D5"+
-            "\u0000\u0000\uE0EF\uF96F\u0000\u0000\u0000\u0000"+
-            "\u0000\uE937\u0000\u0000\uE677\u0000\u0000\u0000"+
-            "\u0000\u0000\uF759\u0000\u0000\u0000\u0000\uECD2"+
-            "\u0000\uECBD\u0000\uE2E1\uF350\uF16A\u0000\uE9D7"+
-            "\uF8F0\u0000\u0000\uF13C\u0000\u0000\u0000\uF339"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF867\uF8C1"+
-            "\u0000\uE450\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEDB0\u0000\u0000\u0000\uF1E5\u0000\u0000"+
-            "\u0000\u0000\uE0AD\u0000\uF7B0\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF6A5\u0000\uE0AE\u0000\uE83F\u0000\uE746\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE4A7\uF8B2"+
-            "\u0000\uF9C4\u0000\uF13D\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF8A1\u0000\u0000\u0000\uEDE9\uEFEE"+
-            "\u0000\uF4F4\uF795\uF351\uEA3F\uF740\u0000\u0000"+
-            "\uF4E0\uEEAF\u0000\u0000\u0000\u0000\u0000\uE8AD"+
-            "\u0000\uEE45\u0000\u0000\uF7A8\u0000\u0000\uE9D8"+
-            "\uEF69\uF2D6\u0000\u0000\u0000\uE4E2\u0000\uEC6F"+
-            "\u0000\u0000\uF970\uE6C8\uF9AD\u0000\u0000\u0000"+
-            "\uEAEF\uE163\uE4F9\u0000\u0000\u0000\u0000\uE592"+
-            "\uE8C7\uEA65\u0000\u0000\u0000\u0000\uF396\u0000"+
-            "\uE5D0\uEDD9\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF957\uE966\uEC70\u0000\u0000\u0000\uE840\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF4A3\u0000\uE4EC"+
-            "\u0000\uF55B\u0000\u0000\u0000\uF9C5\u0000\u0000"+
-            "\u0000\u0000\u0000\uECFD\u0000\uF7B1\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE39D\uF16B\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF5BC\uF434"+
-            "\uE75E\uE75F\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF5F7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF671\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE447\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF8EC\u0000\uE9C8"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED78"+
-            "\u0000\u0000\uE451\u0000\u0000\u0000\uF767\u0000"+
-            "\u0000\u0000\u0000\u0000\uE64B\uEA66\u0000\u0000"+
-            "\uF6BD\uF13E\u0000\u0000\u0000\uE371\u0000\uEB97"+
-            "\uF043\u0000\uE266\u0000\u0000\u0000\u0000\uE135"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF198\uEC71\uECBE\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF958\u0000\u0000"+
-            "\uE1F0\u0000\uF7F6\u0000\u0000\uEAF0\u0000\u0000"+
-            "\u0000\uEDBF\u0000\u0000\u0000\uE24F\u0000\u0000"+
-            "\u0000\u0000\uF971\uF1B0\uF9D1\uF64B\u0000\u0000"+
-            "\uF7CF\uF0DA\uE051\u0000\uE448\uE1F1\u0000\uECD3"+
-            "\uF9E6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEE7D\u0000\u0000"+
-            "\u0000\uECFA\u0000\u0000\uF33A\uF7D0\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF972\u0000\uF737\u0000"+
-            "\u0000\u0000\uEBE5\uF29B\u0000\u0000\u0000\uEEF6"+
-            "\uF07D\u0000\u0000\uF944\uF5C2\u0000\u0000\uE6DC"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF397\u0000\uE9E8\uE4ED\uF5FC\u0000\uE84F\u0000"+
-            "\uE19D\u0000\u0000\u0000\uE4FA\uF534\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF2D7\u0000\uE553"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF8E3\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF8ED\u0000\uEB3D\u0000\u0000\uF07E"+
-            "\uF8B3\uED52\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF677\uE46D\u0000\uEACC\u0000\u0000\uF959\u0000"+
-            "\u0000\uEDA9\uEB98\uF643\u0000\u0000\u0000\u0000"+
-            "\u0000\uEBFE\u0000\u0000\u0000\u0000\uE0F0\u0000"+
-            "\uF091\uF092\u0000\u0000\u0000\uE850\uF744\uF0F2"+
-            "\u0000\u0000\u0000\u0000\u0000\uED53\u0000\u0000"+
-            "\u0000\u0000\uEFD7\uED93\u0000\u0000\u0000\uE091"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE267"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF95A\u0000\u0000\u0000\uF4E1\u0000\u0000\uE0C4"+
-            "\u0000\u0000\u0000\u0000\uECE5\u0000\uE0C5\uF044"+
-            "\u0000\u0000\uEFBD\u0000\uE6C9\u0000\u0000\uF0DB"+
-            "\uF1B1\u0000\uE153\uF6BE\uF95B\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF796\u0000\uE7B7\u0000\u0000"+
-            "\uF4D3\uF4D4\u0000\u0000\u0000\uF6E4\u0000\uF6D1"+
-            "\u0000\u0000\uE747\uE241\uE052\u0000\u0000\uF8B4"+
-            "\uE0C6\u0000\u0000\uF398\u0000\u0000\uE5E7\u0000"+
-            "\uF060\u0000\u0000\u0000\u0000\u0000\uE164\uE0AF"+
-            "\u0000\u0000\u0000\u0000\u0000\uF53A\uEFAF\u0000"+
-            "\u0000\uF5C3\uEFD8\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE9E9\u0000\u0000\u0000\uF3F3\u0000"+
-            "\uE5FB\uEA4B\u0000\u0000\uF59D\u0000\u0000\u0000"+
-            "\uF9F3\uF9F2\uF6A6\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE9C9\u0000\u0000\uE563"+
-            "\u0000\uE138\u0000\uE851\uE165\u0000\uE7E4\u0000"+
-            "\u0000\u0000\uF85A\u0000\u0000\u0000\uEDE3\u0000"+
-            "\u0000\u0000\uE4BC\u0000\u0000\u0000\uE092\u0000"+
-            "\u0000\u0000\u0000\uE354\u0000\u0000\u0000\uE060"+
-            "\uF83B\uF0EB\uEEF8\uE7E5\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE3D7\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF4A4\u0000\u0000\u0000\uE59D\uF973"+
-            "\uF868\u0000\uF4D5\u0000\uE2AB\u0000\u0000\uF0F3"+
-            "\uE5FC\u0000\u0000\u0000\u0000\u0000\u0000\uE4D4"+
-            "\uE1FC\u0000\uE7E6\u0000\uEC9B\uEC31\uF0D4\u0000"+
-            "\uEB99\uED42\uE19E\u0000\u0000\u0000\uF8E4\u0000"+
-            "\u0000\u0000\uF53B\u0000\u0000\u0000\u0000\uE34D"+
-            "\u0000\uE093\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF2B8\u0000\u0000\u0000\uE6C0\u0000"+
-            "\uF29C\uF9F4\u0000\u0000\uE4E3\u0000\uF8C2\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5E8\uE8AE"+
-            "\uEBB6\uF747\u0000\u0000\u0000\u0000\u0000\uEB4F"+
-            "\uF8C3\uE9EA\u0000\uEC32\u0000\uF236\u0000\u0000"+
-            "\u0000\u0000\u0000\uF678\u0000\u0000\u0000\u0000"+
-            "\uF697\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE9CA\u0000"+
-            "\u0000\uE372\u0000\u0000\u0000\u0000\uE9A6\u0000"+
-            "\u0000\uE9EB\u0000\u0000\uED9B\u0000\u0000\uECAF"+
-            "\uE39E\u0000\u0000\u0000\uF59E\u0000\u0000\u0000"+
-            "\u0000\uE14C\uF6EA\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEDE4\uEAF1\u0000\u0000\uF6E1\u0000\uF7F7"+
-            "\uF2B9\u0000\u0000\uF768\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF7A9\u0000\u0000\u0000\u0000"+
-            "\u0000\uF769\u0000\u0000\u0000\uF24D\u0000\u0000"+
-            "\u0000\uE756\u0000\u0000\uED73\uF5CE\u0000\u0000"+
-            "\u0000\u0000\uE9D9\u0000\u0000\u0000\u0000\uE7E7"+
-            "\uE449\uE5C3\u0000\u0000\uE875\uE860\u0000\uE3D9"+
-            "\uE268\u0000\uE0DE\uF53C\uE89D\u0000\uF679\uEF95"+
-            "\uE2AC\uF392\u0000\uF59F\uE8C8\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE250\uECD4\uE3CF\uF3F5"+
-            "\u0000\uE1F2\u0000\uE2EB\u0000\u0000\u0000\uE1B8"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uECA6\uE3DA"+
-            "\u0000\uF435\u0000\u0000\u0000\u0000\u0000\uF436"+
-            "\u0000\uED5E\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE4FB\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF3A9\u0000\u0000\u0000\uF459"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF2D8\uEE59\u0000\uE748\uF895\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF4B5\u0000\u0000\uF734\u0000\u0000\uE3F3"+
-            "\uEE58\u0000\u0000\u0000\u0000\uF76A\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE979"+
-            "\uEA67\u0000\u0000\u0000\u0000\u0000\uE0DF\u0000"+
-            "\u0000\u0000\uE2EC\u0000\u0000\u0000\u0000\uF56F"+
-            "\u0000\u0000\uE3F4\uE44A\u0000\u0000\u0000\uEAF2"+
-            "\u0000\u0000\u0000\uEBB7\u0000\u0000\u0000\u0000"+
-            "\uEC33\uE4FC\u0000\u0000\uF1E6\u0000\u0000\u0000"+
-            "\u0000\u0000\uE8C9\u0000\u0000\u0000\uED9C\u0000"+
-            "\uE2DE\u0000\u0000\uE260\u0000\u0000\u0000\u0000"+
-            "\uE5D3\uF4F5\uF6AE\u0000\u0000\uF2C8\u0000\uE1F3"+
-            "\uF5CF\uEDF3\uF352\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE061\u0000\u0000\u0000\uF093\u0000\uE336\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7DA"+
-            "\uF33B\u0000\u0000\u0000\u0000\u0000\uF0E7\u0000"+
-            "\u0000\u0000\uEDC0\uF945\u0000\u0000\u0000\u0000"+
-            "\u0000\uED54\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE139\uF9C6\u0000"+
-            "\u0000\u0000\u0000\u0000\uF045\u0000\uEDAA\uEABA"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEBDF\u0000\uE861"+
-            "\u0000\u0000\u0000\u0000\uEBB8\u0000\uEF96\uE4FD"+
-            "\u0000\u0000\u0000\u0000\uEC34\u0000\u0000\u0000"+
-            "\u0000\u0000\uF45A\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE876\uF6B3\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF9CD\u0000\u0000\u0000\uF4B6\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF267\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF5C4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE734\u0000\u0000\u0000\u0000\u0000\uF437"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE7B8\uE7B9\uF2C9\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE65E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF6CB\uEAAE\uEF97\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE445\u0000\u0000\u0000\uE4D5\u0000"+
-            "\u0000\u0000\u0000\u0000\uF55C\uE89E\u0000\u0000"+
-            "\u0000\u0000\u0000\uE7E8\u0000\uF6EB\uF5C9\u0000"+
-            "\uF4BC\u0000\uE862\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE4B5\u0000\u0000\u0000\u0000"+
-            "\u0000\uEF46\u0000\u0000\uE65F\uF54A\u0000\uF6C9"+
-            "\u0000\u0000\uE13A\u0000\u0000\uF353\uE166\u0000"+
-            "\u0000\u0000\uE363\u0000\uE4BD\u0000\u0000\u0000"+
-            "\uE8FB\u0000\uE0E0\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE4E4\uF699\u0000\u0000\uE5BA\uF4CD\uE0E1"+
-            "\u0000\u0000\u0000\u0000\uF0F4\u0000\u0000\u0000"+
-            "\u0000\u0000\uF53D\u0000\uF93A\u0000\u0000\u0000"+
-            "\u0000\u0000\uF6EC\u0000\u0000\u0000\uEF98\u0000"+
-            "\uE877\u0000\u0000\u0000\uF6CC\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEDC1\u0000\u0000\u0000\u0000\uEB7E\u0000\u0000"+
-            "\u0000\u0000\u0000\uE5FD\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE276\uF93B\uE5BB\u0000\u0000\uF438"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEC35\uE1B9"+
-            "\uF094\uE0C7\u0000\uE1F4\u0000\u0000\uE8AF\uF2D9"+
-            "\u0000\u0000\u0000\u0000\u0000\uE1BA\u0000\u0000"+
-            "\uF99B\u0000\u0000\u0000\u0000\uEAF3\uE277\uE852"+
-            "\u0000\uE2AD\u0000\u0000\u0000\u0000\uEEF9\uF738"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF4E2\u0000"+
-            "\u0000\u0000\uE094\uEAA4\u0000\u0000\uE554\u0000"+
-            "\u0000\u0000\u0000\u0000\uE167\uEDC2\u0000\u0000"+
-            "\u0000\u0000\uE1BB\u0000\uF2DA\uF268\u0000\uE9A7"+
-            "\uEC36\u0000\u0000\u0000\u0000\u0000\uEB50\u0000"+
-            "\u0000\u0000\uE640\uF75A\u0000\uF99C\u0000\uE7FE"+
-            "\u0000\u0000\u0000\u0000\uEA40\u0000\u0000\u0000"+
-            "\uE9EC\uE878\u0000\u0000\u0000\u0000\u0000\uE570"+
-            "\u0000\uE69B\u0000\uE1D7\uEA68\u0000\u0000\uF49A"+
-            "\u0000\uED66\u0000\u0000\uE355\uF53E\u0000\uE9A8"+
-            "\u0000\u0000\u0000\uF1C5\uF4D6\u0000\u0000\uEA69"+
-            "\uECE6\u0000\u0000\u0000\u0000\u0000\u0000\uE4A8"+
-            "\u0000\uE8B0\u0000\u0000\uEDDA\uECBF\u0000\u0000"+
-            "\u0000\uE8B1\u0000\u0000\u0000\uE5E9\u0000\u0000"+
-            "\u0000\u0000\u0000\uEB51\uF2DB\u0000\u0000\uF379"+
-            "\u0000\u0000\uE6B2\u0000\u0000\u0000\u0000\uE39F"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE7E9\u0000\u0000\uE3A0\u0000\uF17D\uE4A9\u0000"+
-            "\uF439\uF354\u0000\u0000\uEC72\uEFEF\u0000\u0000"+
-            "\u0000\uF7D1\u0000\u0000\uEFD9\u0000\u0000\u0000"+
-            "\u0000\u0000\uEF6A\uE853\uE854\uE555\u0000\uEEFA"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE1E0\uECB0"+
-            "\u0000\uE8B2\uF8C4\u0000\uF4E3\u0000\uE7A5\uF8E7"+
-            "\uE9CB\uE364\u0000\uEE46\uEB3E\uF9DA\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE945\uEB9A"+
-            "\uEEB1\u0000\u0000\u0000\u0000\uF5F0\u0000\uE76C"+
-            "\uF1C6\u0000\u0000\u0000\u0000\uEBB9\u0000\uECC0"+
-            "\uF7C0\uEFF0\u0000\u0000\uE7DB\u0000\uF4E4\u0000"+
-            "\u0000\u0000\uE946\uED79\u0000\u0000\u0000\u0000"+
-            "\u0000\uF355\uECC1\uF95C\uF95D\u0000\u0000\u0000"+
-            "\u0000\uF45B\u0000\uF45C\u0000\u0000\u0000\uED5F"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF3DB\u0000\uF869\u0000\uF3B8\uF9F5\uEB9B"+
-            "\u0000\u0000\u0000\u0000\uEEFB\uF947\uF974\uF8C5"+
-            "\uECE7\uE749\u0000\uF69A\u0000\u0000\uE955\uE168"+
-            "\u0000\u0000\u0000\uEB3F\uF577\u0000\uF2DC\uE2FC"+
-            "\uF2DD\u0000\uF43A\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF9BE\u0000\u0000\uE03C"+
-            "\uF9BB\uF9C7\u0000\u0000\u0000\u0000\uEEB2\u0000"+
-            "\uF061\uEAF4\u0000\u0000\u0000\u0000\uE3EC\uED6E"+
-            "\uEDC3\u0000\u0000\u0000\u0000\uE7A6\u0000\u0000"+
-            "\uE1BC\u0000\uF4E5\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF1D5\u0000\u0000\uE7BA\u0000"+
-            "\u0000\u0000\uF1E7\uF8B5\uF77C\u0000\u0000\u0000"+
-            "\u0000\uEB77\u0000\uE169\u0000\u0000\uE556\u0000"+
-            "\u0000\u0000\u0000\u0000\uEEA5\u0000\uE5F5\uE4BE"+
-            "\u0000\uF99D\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uED94\u0000"+
-            "\u0000\uEAF5\u0000\u0000\uEF9A\uF77D\u0000\u0000"+
-            "\uE257\u0000\u0000\u0000\u0000\u0000\uF9F6\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEF68\u0000\uE1D8\uEED6\uE16A\u0000\u0000\uE073"+
-            "\uEAF6\uF357\uF356\u0000\uE74A\u0000\uF3F4\uF592"+
-            "\uF5CC\u0000\u0000\uF975\u0000\u0000\u0000\u0000"+
-            "\uF055\uF095\u0000\uE9DB\u0000\uE967\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEA9F\uF49B\u0000\uE5C7"+
-            "\u0000\u0000\u0000\uE760\u0000\uF358\uE3A1\uE3A2"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE7D4\uE678"+
-            "\uE7CA\u0000\uE841\uE757\uE972\uF4CE\uF5F4\u0000"+
-            "\u0000\uF3B9\u0000\u0000\uE863\u0000\uF67A\u0000"+
-            "\u0000\u0000\uE2F5\u0000\u0000\uF9AE\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE062\u0000"+
-            "\u0000\uEAB4\u0000\u0000\u0000\u0000\uE6DD\uF84A"+
-            "\uF237\uF5BD\u0000\uF797\u0000\u0000\uF1E8\u0000"+
-            "\u0000\u0000\u0000\u0000\uE571\u0000\uE3A3\uEBD6"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF7F8\u0000\uE8CA"+
-            "\uE0F9\uE564\u0000\uE7DC\u0000\uF24E\u0000\uF6ED"+
-            "\u0000\u0000\u0000\uE47E\u0000\u0000\uEBE6\uF6F9"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9ED"+
-            "\u0000\uEF6B\u0000\uE8B3\u0000\u0000\u0000\uE3F7"+
-            "\uEB40\u0000\u0000\uE572\u0000\uF667\u0000\uE6F9"+
-            "\u0000\u0000\uE76D\u0000\uE1FD\uF43B\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1BD"+
-            "\uF752\u0000\u0000\uF43C\u0000\u0000\uE03D\uE03E"+
-            "\uE2AE\u0000\u0000\u0000\u0000\u0000\uECC2\u0000"+
-            "\u0000\u0000\u0000\u0000\uE947\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8DA"+
-            "\uE7BB\uE095\uF663\uEE9A\uF097\u0000\u0000\u0000"+
-            "\u0000\u0000\uF098\u0000\u0000\uF69B\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE2AF\u0000\u0000\uE063\u0000\u0000\uE03F"+
-            "\uE440\uF3BA\u0000\uE6B3\uECC3\uF4FD\uEA6A\u0000"+
-            "\u0000\u0000\u0000\uEA6B\u0000\u0000\uF2DE\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEC73\uF29D\u0000\u0000\uEAF7\uE6CA"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE278\uE8DB\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF3BB\u0000\u0000\u0000\u0000\uEFF1"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF847\uE356\u0000\u0000\uE13B\uF238\u0000\u0000"+
-            "\uE0FA\uF7F9\uE19F\uE4FE\u0000\u0000\u0000\u0000"+
-            "\uED60\u0000\u0000\u0000\u0000\u0000\uF47E\u0000"+
-            "\uE565\uEACD\u0000\uF948\uE3D0\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF45D\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF6D2\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE064"+
-            "\u0000\uE5D9\u0000\u0000\u0000\uE76E\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1D9"+
-            "\u0000\u0000\u0000\uF239\uF64C\u0000\u0000\uE16B"+
-            "\u0000\u0000\u0000\u0000\u0000\uF359\u0000\uF99E"+
-            "\u0000\uEF59\uF5A0\u0000\u0000\u0000\u0000\uEEFC"+
-            "\uE6DE\u0000\u0000\u0000\u0000\uEA6C\u0000\uF33C"+
-            "\uE1A0\uE1E1\u0000\uEBBA\u0000\uE8EF\uE842\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE3A5\uE948\u0000\u0000"+
-            "\u0000\uE798\u0000\uE3A4\u0000\uE1E2\u0000\u0000"+
-            "\u0000\u0000\uE97A\u0000\u0000\uF399\u0000\uF35A"+
-            "\uE34E\u0000\uE9DC\u0000\u0000\u0000\u0000\uE566"+
-            "\uE4D6\u0000\u0000\u0000\u0000\u0000\u0000\uF1D0"+
-            "\uE1A1\u0000\u0000\u0000\u0000\u0000\uEAB5\u0000"+
-            "\u0000\u0000\uEAF8\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE531\uE242\u0000\u0000\u0000\u0000\u0000"+
-            "\uEF5A\u0000\u0000\u0000\u0000\uF0F5\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uECD5\uF5D0\u0000"+
-            "\u0000\u0000\uF5A1\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7A7"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEDAB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEE5B\u0000\uF5F1"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEDC5\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF7A3\uEB6B\uF67B\u0000\uE0F1"+
-            "\u0000\uE7EA\uF5A2\u0000\u0000\u0000\uE6D1\u0000"+
-            "\uE3F8\uF09A\uF09B\uE843\u0000\u0000\u0000\u0000"+
-            "\uF2DF\u0000\u0000\uF3EF\u0000\uEDF6\uF24F\uEC74"+
-            "\u0000\u0000\u0000\u0000\u0000\uE34F\u0000\uF83C"+
-            "\uF5D1\uEEB3\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEFBE\u0000\u0000"+
-            "\u0000\u0000\u0000\uF45E\uE8B4\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF95E\u0000\uE9EE"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEEB4\u0000"+
-            "\u0000\u0000\u0000\u0000\uE6B4\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF6B4\u0000\u0000\u0000\u0000"+
-            "\u0000\uE1BE\u0000\uE879\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE2B0\uF6D9\uF4E6\u0000\u0000"+
-            "\uE269\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE23A\u0000\uE0C8\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE337\u0000\uF35B\u0000\uE357"+
-            "\u0000\u0000\uED55\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE8E0\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE5DA\u0000\uE6A7\u0000\u0000\u0000\uF250"+
-            "\u0000\uF798\u0000\u0000\u0000\u0000\uF5D2\uF1E9"+
-            "\u0000\uE7BC\u0000\uEDC6\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF5A3\u0000\u0000"+
-            "\uE864\uEC37\uF8FC\u0000\u0000\uF3DC\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE096\u0000\u0000\u0000"+
-            "\uEF9C\u0000\u0000\uE279\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEFF8\uEC75\u0000\u0000\u0000\u0000"+
-            "\uE349\uE594\u0000\u0000\u0000\u0000\u0000\uE3A6"+
-            "\u0000\uEACE\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF996\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE4AA\u0000\u0000\u0000\uE13C\u0000\u0000\u0000"+
-            "\u0000\uF2E0\u0000\u0000\u0000\uEDE5\uE365\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8FC"+
-            "\u0000\u0000\u0000\u0000\uF976\u0000\u0000\u0000"+
-            "\u0000\u0000\uE0FE\uF1EA\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEA41\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF7E3\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE532\uE2F6\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE660\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE5EA\uF3EE\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF85B\u0000"+
-            "\u0000\u0000\u0000\uEDA1\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE5B1\u0000\u0000\u0000"+
-            "\u0000\u0000\uE2ED\u0000\uF1EB\u0000\u0000\u0000"+
-            "\u0000\u0000\uE5B2\u0000\u0000\u0000\uE5BC\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF9E2\uF4AD\u0000\uF9DB\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEFB0\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE3A7\u0000\u0000\uF9E3\uE243\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF9E4\uF85E"+
-            "\u0000\u0000\u0000\u0000\uE040\u0000\uF6A7\u0000"+
-            "\uE2B1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE32"+
-            "\u0000\uF946\uF43D\uF2E1\uF4AE\uE956\uE7EB\u0000"+
-            "\u0000\u0000\uEF70\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEBA8\u0000\u0000\u0000\u0000\uE5F6"+
-            "\uE2FD\u0000\u0000\uEA6D\u0000\u0000\u0000\uE7D1"+
-            "\u0000\u0000\u0000\uED7A\uF45F\u0000\uF6BF\u0000"+
-            "\u0000\uEC76\uEC38\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uECD6\u0000"+
-            "\uF1D1\u0000\u0000\u0000\u0000\u0000\uEFF9\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE641\uEA42"+
-            "\u0000\u0000\uEB78\u0000\u0000\uE4AB\u0000\uF0DC"+
-            "\u0000\u0000\uEAAF\u0000\uE053\u0000\u0000\uF29E"+
-            "\u0000\uF9C3\u0000\u0000\u0000\uF0F6\uE2B2\u0000"+
-            "\u0000\u0000\u0000\uE7EC\u0000\uE7BD\u0000\uE76F"+
-            "\u0000\u0000\uE548\uF0BE\uE9EF\u0000\uE9F0\uE9F1"+
-            "\uE9F2\u0000\u0000\uE7BE\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF8C6\uE2B3\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF29F\u0000\u0000\u0000\u0000\u0000\u0000\uED3B"+
-            "\u0000\uE855\u0000\uE77C\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE3A8\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEC39\u0000\u0000\uEA4C"+
-            "\uEEB5\u0000\u0000\u0000\u0000\u0000\uE8F0\u0000"+
-            "\uF2E2\uF3F0\uE2B4\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE8F1\u0000"+
-            "\uEB41\u0000\u0000\u0000\u0000\uEAA5\u0000\uF7D2"+
-            "\u0000\u0000\uEEFD\u0000\u0000\uEE33\uF8F1\uE0B0"+
-            "\uF43E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE1E7\u0000\uEF6C\u0000\u0000\uEED7\u0000\u0000"+
-            "\uF6C0\u0000\uE373\u0000\u0000\u0000\uE831\u0000"+
-            "\u0000\u0000\uE14D\u0000\u0000\uE3A9\uE9CC\u0000"+
-            "\u0000\uECFE\uE3AA\uEF3A\u0000\uF046\uF7FA\uEE5C"+
-            "\uF668\u0000\u0000\u0000\uE557\u0000\u0000\u0000"+
-            "\uE7CB\u0000\uE7D2\uE4CB\uE799\uE839\uF5F8\u0000"+
-            "\u0000\uEA6E\uF43F\uF739\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE758\u0000\u0000\uF251\u0000"+
-            "\u0000\u0000\u0000\uF7C1\u0000\u0000\u0000\u0000"+
-            "\uE9F3\uF09C\u0000\uF64D\uEBBB\uE1BF\uF564\uEE5D"+
-            "\u0000\uF95F\uF8A2\u0000\uEB6C\u0000\u0000\u0000"+
-            "\u0000\uF54B\uE865\u0000\uF7B2\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF8F2\u0000\uE8F6\u0000\uEA6F"+
-            "\u0000\u0000\u0000\uE8F2\u0000\u0000\u0000\u0000"+
-            "\u0000\uF76C\uF6EE\uF0E8\u0000\uE49C\u0000\u0000"+
-            "\uF3BC\u0000\u0000\uF86A\u0000\u0000\uE87A\uE856"+
-            "\uF6C1\u0000\u0000\uEEB6\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-        private final static String innerIndex3=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEDC7\uE63C\u0000\u0000\u0000"+
-            "\u0000\uE957\u0000\u0000\u0000\u0000\u0000\uEBA9"+
-            "\u0000\uEC3A\u0000\uE5A6\u0000\u0000\uE567\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF460\u0000\uF09D"+
-            "\u0000\uEB6D\uF8F3\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF3BD\u0000\u0000\uEC77\uF9D7\u0000"+
-            "\uE258\uF047\u0000\uF950\u0000\uF9E7\uF6EF\u0000"+
-            "\u0000\uE6B5\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF2BA\uF3DD\u0000\uEA43\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEF5B\u0000\u0000\uF76D\u0000"+
-            "\u0000\uF8C7\uE5C8\u0000\uE6DF\u0000\uE9A9\u0000"+
-            "\u0000\u0000\u0000\u0000\uEFB1\u0000\u0000\uF83D"+
-            "\uF669\uF896\u0000\u0000\u0000\u0000\u0000\uF73A"+
-            "\u0000\u0000\u0000\u0000\u0000\uEE7E\u0000\uE16C"+
-            "\uEBBC\uEB91\u0000\u0000\uEFBF\uF99F\uEE5E\u0000"+
-            "\u0000\uEBD7\u0000\uEE5F\u0000\uF593\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED95"+
-            "\u0000\u0000\uED9D\u0000\u0000\uF7E4\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF2E3\u0000\u0000\uE2EE\uF64E\uEB42\uF9A0\uE3AB"+
-            "\u0000\u0000\u0000\uE6FA\u0000\u0000\u0000\uF8C8"+
-            "\u0000\uEC67\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE533\uF39A\uE6A8\u0000\u0000\u0000\uEBE7\u0000"+
-            "\u0000\uE4BF\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF2E4\u0000\uE6C5\uF0E2\u0000\u0000\uF977\u0000"+
-            "\u0000\uED32\u0000\uEC78\u0000\uEE60\u0000\uF8E8"+
-            "\uF578\uEDF4\uF54C\uF565\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAB6"+
-            "\u0000\uF949\uF252\uE097\u0000\u0000\u0000\uF2E5"+
-            "\uE0E2\uE534\u0000\uEA70\uE89F\uED56\uEF4E\u0000"+
-            "\u0000\u0000\u0000\uEB6E\uF644\uF062\u0000\uF7FB"+
-            "\u0000\u0000\uEB52\u0000\uE074\u0000\uEEB7\u0000"+
-            "\uF09F\u0000\uE7DD\u0000\uE844\uF23A\uF8E9\u0000"+
-            "\u0000\u0000\u0000\uE8CB\uE845\u0000\u0000\u0000"+
-            "\u0000\u0000\uF3BE\u0000\u0000\uE4AC\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF8C9\u0000"+
-            "\uEACF\u0000\u0000\uE4C0\uECD7\u0000\uF2E6\uF960"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEFC0"+
-            "\u0000\u0000\u0000\uF5D3\u0000\u0000\uF16C\uF6B7"+
-            "\u0000\u0000\uF048\uE3F9\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE958\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF049\u0000\u0000\u0000\u0000\u0000\uF3DE\u0000"+
-            "\u0000\u0000\u0000\u0000\uE6B6\uE2B5\u0000\uE7A8"+
-            "\u0000\u0000\uF17E\u0000\u0000\uE9AA\u0000\u0000"+
-            "\u0000\u0000\uE1A2\uEF3E\u0000\u0000\u0000\uEBBD"+
-            "\u0000\uF461\u0000\u0000\u0000\u0000\uEFC1\u0000"+
-            "\u0000\u0000\uE49E\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE8B5\u0000\uF4E7\uE7A0\u0000\u0000"+
-            "\u0000\uF961\u0000\uF1B2\uF53F\u0000\uF8A3\u0000"+
-            "\u0000\uF951\u0000\uF23B\uE535\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF594"+
-            "\u0000\u0000\u0000\u0000\uF269\u0000\u0000\u0000"+
-            "\uF8CA\u0000\u0000\u0000\u0000\u0000\uE1E3\uE74B"+
-            "\u0000\uEDDB\uF799\u0000\u0000\u0000\uF664\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6A9"+
-            "\u0000\uE0C9\u0000\u0000\uEE61\uF35C\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE73E\u0000\uF7D3\uE5FE\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE74C\uF440\u0000\u0000\u0000"+
-            "\u0000\uEC3B\uF4E8\u0000\u0000\u0000\u0000\u0000"+
-            "\uF2C2\u0000\u0000\u0000\u0000\u0000\u0000\uF1EC"+
-            "\u0000\uEEB8\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE8A0\u0000\u0000\uE14E\u0000\u0000\uF49E"+
-            "\uE87B\u0000\uEC68\uF1D6\u0000\u0000\uE661\uEB43"+
-            "\u0000\u0000\uF962\u0000\uF0C8\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE4C1\uF35D\u0000"+
-            "\uE2F7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF1D2\u0000\uE568\uE959\uE6F1\u0000"+
-            "\u0000\uEABB\u0000\u0000\uF4A5\u0000\u0000\u0000"+
-            "\uF55D\u0000\u0000\u0000\u0000\uF3BF\uF741\u0000"+
-            "\uEFFA\u0000\u0000\u0000\uF8CB\u0000\u0000\uE065"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF7D4\uF6CA\u0000\u0000\uE658"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF978\uF4BD"+
-            "\u0000\uF2A0\u0000\uEEFE\u0000\u0000\u0000\u0000"+
-            "\u0000\uE4C2\u0000\u0000\u0000\u0000\uE4B6\u0000"+
-            "\uE13D\uF69C\uE642\uE468\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEED8\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uECA5\u0000\u0000"+
-            "\u0000\u0000\uEEB9\u0000\u0000\u0000\u0000\uF33D"+
-            "\uF8CC\uF0A1\u0000\u0000\uE536\u0000\u0000\u0000"+
-            "\u0000\uF8CD\u0000\uE5BD\uF3DF\u0000\u0000\uF69D"+
-            "\u0000\uEA44\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5EB\u0000"+
-            "\u0000\uEDC8\u0000\u0000\u0000\uF8A4\uE549\u0000"+
-            "\u0000\uEA71\u0000\uED33\u0000\u0000\u0000\uE6B7"+
-            "\u0000\uF77E\u0000\u0000\u0000\uEA45\u0000\u0000"+
-            "\uE662\u0000\uF7D5\uEEBA\uF0D5\uE5F7\uF2E7\uEBBE"+
-            "\u0000\u0000\u0000\uF83E\u0000\u0000\u0000\uE679"+
-            "\uE67E\u0000\u0000\u0000\u0000\u0000\u0000\uEEBB"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF15B"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5B3\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE244\u0000\u0000\u0000"+
-            "\uF8A5\uEBEE\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF6A8\u0000\u0000\u0000\u0000\uF8CE\u0000\u0000"+
-            "\u0000\u0000\u0000\uE74D\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF8FD\u0000\u0000\u0000\u0000"+
-            "\uF979\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE2B6\u0000\u0000\u0000\uF1C7\uF23C\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE16D\u0000\u0000"+
-            "\u0000\u0000\uF637\u0000\u0000\u0000\uEE9C\u0000"+
-            "\u0000\u0000\uF5A4\u0000\u0000\u0000\u0000\u0000"+
-            "\uF9DC\uF1B3\uE259\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF2E8\u0000\u0000\uEBBF\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF86B\uE0E3\uF6A9\u0000\uF8A6"+
-            "\u0000\u0000\u0000\uE949\u0000\u0000\u0000\uF3C0"+
-            "\uF1C8\uF2C3\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE63D\u0000\u0000\uF9CE\u0000\u0000\u0000\uEF31"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF8F4\uE5A7\u0000\u0000\u0000\uF3F6\u0000\uEE63"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE16E\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF742\u0000\u0000\u0000\uE97B\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF9B6\u0000\u0000\u0000"+
-            "\u0000\uEDEA\u0000\u0000\uF3E0\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE8CC\uE9CD\u0000\u0000\u0000\uE558\u0000"+
-            "\u0000\uE7ED\u0000\u0000\u0000\u0000\uF5A5\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEE9D\u0000\u0000\u0000\u0000\u0000\uEE64\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9C8"+
-            "\u0000\uE631\uF9BF\u0000\uF963\u0000\uF2A1\u0000"+
-            "\uEEBC\u0000\u0000\u0000\u0000\u0000\uE3EE\u0000"+
-            "\u0000\uEE65\u0000\u0000\uEFF2\u0000\uEAB0\u0000"+
-            "\u0000\u0000\u0000\u0000\uE770\uF94A\uF9AF\uF35E"+
-            "\u0000\uE8E1\u0000\u0000\uEDC9\u0000\uF1B4\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEB53\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uECD8\u0000\u0000\u0000"+
-            "\u0000\uEFFB\uF038\u0000\u0000\u0000\u0000\uF9B7"+
-            "\u0000\u0000\uF8A7\u0000\uEFC2\u0000\u0000\u0000"+
-            "\u0000\uF9F7\u0000\u0000\u0000\u0000\u0000\uEC69"+
-            "\u0000\u0000\uE97C\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEF32\u0000\u0000\u0000"+
-            "\u0000\uEE92\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF9F8\uF9F9\u0000\u0000\u0000\uF64F\u0000"+
-            "\u0000\uEEA7\u0000\uEE67\u0000\u0000\u0000\u0000"+
-            "\uE595\uE559\u0000\u0000\u0000\u0000\uE69C\u0000"+
-            "\uE6F2\u0000\uEBC0\u0000\uE8E2\uEE68\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEEBD"+
-            "\u0000\u0000\u0000\u0000\u0000\uF35F\uF4BE\uEC3C"+
-            "\u0000\u0000\u0000\u0000\u0000\uF5B7\uEB92\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF9B8\uECE8\u0000\uE537\uEF9E"+
-            "\uF862\u0000\u0000\u0000\u0000\u0000\uF791\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE663\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE5B4\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF360\u0000\uF6F0\uF243\u0000\u0000"+
-            "\uF04A\u0000\uF063\u0000\u0000\uF1C9\uE9AB\u0000"+
-            "\u0000\u0000\uEDAC\uF9A1\u0000\uEAD0\uF143\u0000"+
-            "\uEAD1\u0000\u0000\u0000\u0000\u0000\uF1ED\uF748"+
-            "\uF6FA\u0000\u0000\u0000\uF73B\u0000\u0000\u0000"+
-            "\u0000\u0000\uF570\u0000\u0000\u0000\u0000\u0000"+
-            "\uE54A\uED43\u0000\uEFDA\u0000\uEA46\u0000\uE7BF"+
-            "\u0000\uE7C0\uE691\u0000\u0000\u0000\u0000\uE7CC"+
-            "\u0000\uE83A\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEAE5\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF6E5\u0000\u0000\u0000\uE142\u0000\u0000"+
-            "\uEAF9\uE6E0\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE54B\u0000\u0000\u0000\u0000\uF9FA"+
-            "\u0000\u0000\u0000\u0000\uE143\u0000\u0000\uE8F3"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEAD2\u0000\uE25A\u0000\uF26A\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uED74\u0000"+
-            "\uF8CF\u0000\u0000\u0000\u0000\u0000\u0000\uE2B7"+
-            "\u0000\uF253\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE27A\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEC3D\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE6E1\uF897\u0000\u0000\uE5C9\uF73C\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEED9\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF4E9\u0000"+
-            "\u0000\u0000\u0000\uE77D\uECC4\uF393\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEF75\u0000\u0000"+
-            "\u0000\uEB9C\uF254\uE7DE\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF0A2\uF0A3"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF952\uF04B"+
-            "\u0000\u0000\u0000\u0000\uEF3B\uEA72\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF1EF\u0000\uEF33\u0000\u0000\u0000\u0000\uE2F1"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE54C\u0000\uF97A\u0000\u0000\u0000\u0000\u0000"+
-            "\uEEBE\u0000\uF994\u0000\u0000\uE644\u0000\u0000"+
-            "\uEC3E\u0000\uE4B7\uF85C\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF86C\u0000\uF1B5\uEBE3"+
-            "\u0000\uEF3C\u0000\uEF6D\u0000\u0000\uF2E9\u0000"+
-            "\u0000\u0000\u0000\u0000\uF54D\u0000\uE2B8\uEFDB"+
-            "\uE3AC\u0000\u0000\u0000\u0000\u0000\u0000\uE857"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0C9"+
-            "\u0000\uEF5C\u0000\u0000\u0000\uEA47\u0000\u0000"+
-            "\u0000\u0000\uE64C\uE4E5\u0000\u0000\u0000\u0000"+
-            "\u0000\uF86D\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE866\u0000\uE041\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE858\uEAA6\u0000\uF7B3\uF462\u0000\uE054"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE25B\u0000"+
-            "\u0000\uE1F5\u0000\u0000\u0000\uF9B0\uE5A8\u0000"+
-            "\uF3C1\u0000\u0000\uEC79\uE95A\uF144\uF850\u0000"+
-            "\u0000\uF8A8\uE338\u0000\u0000\uE87C\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7EE"+
-            "\u0000\uEB9D\u0000\u0000\u0000\uF2EA\uF86E\u0000"+
-            "\u0000\uEB54\u0000\uE2B9\u0000\uE5CA\uE6E2\uEC3F"+
-            "\u0000\uE6B8\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEF5D\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF66A\u0000\u0000\u0000\u0000"+
-            "\uF2A2\uEC6A\uF69E\u0000\u0000\uF8D0\uE3AD\u0000"+
-            "\uE1E4\u0000\uE3AE\uE97D\uEF5E\u0000\uF39B\uE245"+
-            "\uEE9E\u0000\u0000\uE6FB\uE366\uE9F5\uF6F1\u0000"+
-            "\uF69F\u0000\uE8F7\u0000\u0000\u0000\u0000\uF8EA"+
-            "\uEFDC\uE7C1\u0000\uF5F2\uEB55\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF064\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF7C2\u0000\uF04C"+
-            "\u0000\uE455\uF8D1\uEEC0\uF0A5\u0000\uEAFA\uECA2"+
-            "\uE6B9\u0000\uEFC3\u0000\uEF9F\uEF3F\u0000\u0000"+
-            "\uF463\uF8A9\uE735\u0000\u0000\u0000\u0000\uE5CB"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE358\u0000"+
-            "\u0000\u0000\uE3AF\uE6E3\u0000\u0000\u0000\uEB56"+
-            "\u0000\uE632\u0000\uF1F0\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE6F3\u0000\u0000\u0000\uF964\u0000\uE867\uE16F"+
-            "\u0000\uF464\u0000\uE3B0\u0000\uE170\u0000\uE8FD"+
-            "\uF4BF\u0000\uF361\u0000\u0000\u0000\u0000\u0000"+
-            "\uF94B\u0000\uEC40\u0000\u0000\uEE35\u0000\u0000"+
-            "\u0000\uEC6B\u0000\u0000\u0000\uEADE\u0000\uEB57"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF491\u0000"+
-            "\u0000\u0000\uE171\u0000\u0000\u0000\u0000\uE67A"+
-            "\u0000\u0000\u0000\u0000\uEEC2\u0000\u0000\u0000"+
-            "\uE246\u0000\uF4C0\u0000\uE1FE\u0000\u0000\u0000"+
-            "\uF8D2\u0000\uF79A\uF6FB\u0000\u0000\uEF4F\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEF47\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1B6"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE94A\u0000\u0000\uE144\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF3F7\u0000\u0000\u0000\uEF48\u0000\u0000"+
-            "\uE098\u0000\uED34\uF566\u0000\u0000\u0000\uEAE6"+
-            "\u0000\u0000\u0000\uEAA7\u0000\uEAE7\uEBC1\u0000"+
-            "\uEFC4\u0000\u0000\uE95B\uEFC5\u0000\u0000\u0000"+
-            "\uF2A3\uF0A6\uE0A3\uECE9\u0000\u0000\u0000\uE3FB"+
-            "\uF2A4\u0000\uF2EB\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE344"+
-            "\u0000\u0000\u0000\u0000\uE1A3\u0000\u0000\uEF76"+
-            "\u0000\uF2A5\u0000\uE4CC\uE87D\u0000\u0000\u0000"+
-            "\u0000\uE6BA\u0000\uF465\uF5E5\uE7EF\u0000\u0000"+
-            "\u0000\u0000\uF7B4\u0000\u0000\uE5D4\uF9CF\u0000"+
-            "\u0000\u0000\uE8E3\u0000\u0000\u0000\u0000\uF3E1"+
-            "\uF146\u0000\u0000\u0000\u0000\uF8FE\uE4D7\u0000"+
-            "\uE3B1\u0000\uE0B1\u0000\u0000\u0000\u0000\uE3B2"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE0B2\uF3C2"+
-            "\u0000\u0000\uF571\uF7B5\u0000\u0000\uEBC3\uEBC2"+
-            "\u0000\uF0F7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEAA8\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE0CA\u0000\u0000"+
-            "\u0000\u0000\u0000\uEE49\u0000\u0000\u0000\u0000"+
-            "\u0000\uF76E\uF7AA\uE099\u0000\uF1B7\u0000\u0000"+
-            "\uE4B8\uF466\u0000\u0000\uE569\uF255\uF492\u0000"+
-            "\u0000\u0000\uE042\u0000\u0000\uE94B\u0000\uF3F8"+
-            "\u0000\u0000\u0000\u0000\u0000\uF147\u0000\u0000"+
-            "\u0000\u0000\uEDCA\u0000\uF650\uF9DD\u0000\u0000"+
-            "\uE573\uE172\u0000\uF6D4\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE6E5\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE4C3\u0000\uE736\u0000\uF651\u0000\u0000\u0000"+
-            "\u0000\u0000\uE9F6\u0000\uE1C0\u0000\u0000\u0000"+
-            "\uEDDC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEDCB\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEBC4\u0000\u0000\u0000\u0000\u0000\uEF40"+
-            "\uF540\uF4EA\uE87E\u0000\uE6BB\u0000\uEC41\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE6AA\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE69D\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uED6F\u0000\uE066\u0000"+
-            "\u0000\u0000\uF0A8\u0000\u0000\u0000\uE8FE\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF652\u0000\u0000\uF2BB\u0000\u0000\u0000"+
-            "\u0000\uE59F\u0000\u0000\uEB58\u0000\u0000\u0000"+
-            "\uEF49\u0000\uF2A6\u0000\u0000\u0000\u0000\u0000"+
-            "\uE1A4\u0000\u0000\uE596\uE8A1\uE8DC\uE8DD\u0000"+
-            "\u0000\u0000\u0000\u0000\uF26C\u0000\uE0CB\uF965"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE27B\u0000"+
-            "\uE1C1\u0000\u0000\uF8D3\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF7AB\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF5D4\u0000\u0000\u0000\u0000\uE7A9"+
-            "\u0000\u0000\uEFDD\uE8CD\u0000\u0000\uE9CE\u0000"+
-            "\uEEC3\u0000\uF15C\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF7EC\u0000\u0000\u0000\uE0CC\u0000"+
-            "\u0000\u0000\u0000\uEB9E\uE538\u0000\uF1D3\uE791"+
-            "\u0000\uF467\u0000\uE09A\uE891\u0000\u0000\uE664"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE7CD\u0000"+
-            "\u0000\u0000\uE77E\u0000\uF451\u0000\u0000\u0000"+
-            "\uEAD3\u0000\u0000\u0000\uE892\u0000\uEC7A\u0000"+
-            "\u0000\uEB9F\u0000\u0000\uE79A\u0000\u0000\u0000"+
-            "\uF6AF\uE846\u0000\uE067\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF468\u0000"+
-            "\uE79B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF86F\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2EF"+
-            "\uE7C2\u0000\uF362\u0000\uED61\u0000\u0000\u0000"+
-            "\uF4B7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF870\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF2EC\u0000\u0000\u0000\u0000"+
-            "\u0000\uEC42\u0000\uE54D\u0000\u0000\uE7CE\u0000"+
-            "\u0000\u0000\u0000\uF572\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE539\u0000\u0000\u0000\u0000\uE1C2\uEEDA"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF469\u0000\u0000\u0000\u0000"+
-            "\u0000\uE7AA\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE74E\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE93D\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEC7B\uE69E\u0000\u0000"+
-            "\uE09B\u0000\u0000\uE56A\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF567\uE131\u0000\u0000\uE2BA"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF5B8"+
-            "\u0000\u0000\u0000\uE7C3\uE378\u0000\u0000\u0000"+
-            "\u0000\u0000\uECC5\uF0F8\u0000\uF441\u0000\u0000"+
-            "\u0000\uE2BB\u0000\u0000\u0000\uE4AD\uEF71\uE27C"+
-            "\u0000\u0000\u0000\uEB44\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEA73\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE9F7\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF442\uF4F6\uF66B"+
-            "\u0000\u0000\u0000\u0000\uE6FE\u0000\u0000\u0000"+
-            "\u0000\u0000\uF76F\u0000\uF6F2\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE339\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE6A"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF5A6\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE6BC\uE173\u0000\u0000\uEE6B"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE9DD\u0000\u0000\u0000"+
-            "\u0000\uE3B3\u0000\u0000\u0000\u0000\u0000\uF2ED"+
-            "\u0000\u0000\u0000\u0000\uE66E\uED96\uEBEF\u0000"+
-            "\u0000\uE9F8\u0000\u0000\u0000\u0000\u0000\uEF5F"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE075\u0000\u0000\u0000\uE931"+
-            "\u0000\uEB45\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF93C\uF93D\uE737\u0000\u0000\u0000"+
-            "\u0000\uF1B8\u0000\u0000\u0000\uE8B6\u0000\u0000"+
-            "\u0000\u0000\uE692\uF4AF\u0000\u0000\uE1A5\u0000"+
-            "\uE893\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE738\u0000\u0000\u0000\uE174\u0000\u0000\uE3B4"+
-            "\u0000\u0000\u0000\u0000\u0000\uE068\u0000\u0000"+
-            "\u0000\u0000\u0000\uE894\u0000\u0000\u0000\u0000"+
-            "\u0000\uF5A7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF5A8\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEE36\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE5EC\uE5F8\uE895\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uECC6\u0000\u0000\u0000\uEA74\u0000"+
-            "\uEA75\uE3B5\u0000\u0000\u0000\u0000\u0000\uE3B6"+
-            "\uE3B7\uF443\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEFDE\u0000\u0000\u0000\u0000\u0000\uF363\uF444"+
-            "\u0000\u0000\uF364\uE0E4\uF8D4\uF5E6\uECEA\u0000"+
-            "\uEA76\u0000\u0000\u0000\u0000\uEAD4\u0000\u0000"+
-            "\uF79B\u0000\u0000\u0000\u0000\uF33E\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE3B8\u0000\u0000\u0000\u0000\uE66F"+
-            "\u0000\uE367\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF931\uF2EE\uE968"+
-            "\u0000\uEFDF\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEDDD\uF9FB"+
-            "\u0000\u0000\uEB59\u0000\u0000\u0000\uE659\u0000"+
-            "\u0000\uE53A\u0000\uEDCC\u0000\u0000\u0000\u0000"+
-            "\u0000\uEFE0\u0000\u0000\u0000\uE368\uF932\uE54E"+
-            "\uEC43\uEA77\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE94C\uE446\uF5D5\u0000\u0000\u0000\u0000"+
-            "\u0000\uE231\uF5A9\u0000\u0000\uE9F9\u0000\u0000"+
-            "\uE9FA\u0000\u0000\u0000\u0000\u0000\u0000\uF365"+
-            "\u0000\u0000\u0000\u0000\uF66F\u0000\uF46A\uED7B"+
-            "\u0000\uF493\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF149\u0000\u0000\u0000\u0000"+
-            "\uF9FC\u0000\u0000\u0000\u0000\uEBAA\u0000\u0000"+
-            "\uE069\u0000\u0000\uF2EF\u0000\uF5AA\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF19B\u0000\u0000\uF73D"+
-            "\u0000\uF452\uF653\u0000\uE6D2\u0000\u0000\uF7A2"+
-            "\uF366\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF39C\u0000"+
-            "\u0000\uF670\u0000\u0000\u0000\u0000\uEFF3\uF453"+
-            "\u0000\u0000\u0000\uE53B\uE043\uE1A6\u0000\uE1C3"+
-            "\uE1DA\u0000\u0000\u0000\u0000\u0000\uE7CF\u0000"+
-            "\u0000\uF654\u0000\u0000\u0000\uF26D\uEEC4\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC44"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEAE2\uEEDB\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEF41\u0000\uF93E\u0000\u0000\u0000\u0000"+
-            "\uEDCD\u0000\u0000\u0000\uF87B\u0000\uE2BC\u0000"+
-            "\u0000\uE2E2\uE1F6\u0000\u0000\uF2F0\u0000\uF54E"+
-            "\u0000\uE55D\u0000\u0000\uF4B8\u0000\u0000\u0000"+
-            "\uEFA1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF494\uF4EB\u0000\uF367\u0000\u0000"+
-            "\uE2D7\u0000\u0000\u0000\u0000\u0000\u0000\uE2DF"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEF50\uEF51\u0000\u0000\u0000\uE2E3\uEFA2"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE33A\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF4C1\uE33B\u0000\uE574"+
-            "\u0000\u0000\uF2BC\uE731\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7DF"+
-            "\u0000\uF4D7\u0000\u0000\u0000\uE94D\u0000\uE175"+
-            "\uF1F1\u0000\u0000\uF3E2\u0000\uE56B\u0000\u0000"+
-            "\u0000\u0000\uEC45\u0000\u0000\uE076\u0000\uE4AE"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE176\u0000"+
-            "\u0000\uF3D3\uF5E7\u0000\u0000\u0000\u0000\uE06A"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF8EE"+
-            "\u0000\uEBC5\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEAE9\u0000\uF26E\u0000\u0000\uF6C2\u0000"+
-            "\uE732\u0000\u0000\u0000\u0000\u0000\uE9AC\u0000"+
-            "\u0000\u0000\u0000\u0000\uF33F\uE64D\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEBAB\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF7B6\u0000"+
-            "\u0000\uE597\u0000\uE359\uF2A7\uEC7C\u0000\uE8EA"+
-            "\uE25C\uF5E8\uF6D5\u0000\uE4CD\u0000\uF4FE\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE345\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEBA0\u0000\uEAFB\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEE6D\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEF34\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0CD"+
-            "\u0000\u0000\u0000\uF2A8\u0000\u0000\u0000\uF244"+
-            "\u0000\u0000\u0000\u0000\uE868\uE3B9\u0000\uEAA9"+
-            "\u0000\u0000\uF4B0\u0000\u0000\uE154\u0000\u0000"+
-            "\u0000\uE247\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF2A9\u0000\u0000"+
-            "\u0000\uEAD5\u0000\u0000\uF1D7\u0000\u0000\u0000"+
-            "\uF256\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF2BD\uF966\u0000\u0000\uE8F4\u0000\uF2AA\uF749"+
-            "\u0000\uF5E9\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uECD9\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEBC6\u0000\u0000\u0000\uE54F\u0000\u0000\u0000"+
-            "\u0000\uEA78\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF37A"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF4C2\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE4AF\u0000"+
-            "\u0000\uE06B\u0000\u0000\u0000\u0000\u0000\uF967"+
-            "\u0000\u0000\uF1D8\uEBC7\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF568\uE643\uE9AD"+
-            "\u0000\u0000\u0000\uE5BE\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF3C3\uF26F\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE67B\u0000\u0000\u0000\uF569\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE6E6\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE847\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE9FB\u0000\u0000\u0000\u0000"+
-            "\u0000\uE9CF\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE733\u0000\u0000\uE869\u0000\uF368"+
-            "\uF2C4\u0000\u0000\u0000\u0000\u0000\u0000\uEBD8"+
-            "\u0000\u0000\u0000\u0000\u0000\uF3D4\u0000\uF1F2"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5DB\u0000"+
-            "\u0000\uE5DC\uF4C4\uE0D7\u0000\u0000\u0000\u0000"+
-            "\u0000\uEC46\u0000\u0000\u0000\u0000\uF2F1\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF8D5\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE4D8\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE9D0\uF369"+
-            "\uE0B3\u0000\u0000\u0000\u0000\u0000\u0000\uE5DD"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE1A7\u0000\u0000\uE33C\u0000";
-
-        private final static String innerIndex4=
-            "\uE3BA\u0000\uF3C4\u0000\uEDB3\uF8F5\uEFE1\uF9E0"+
-            "\uF94C\u0000\uE832\uE833\u0000\uE431\u0000\u0000"+
-            "\uE491\u0000\u0000\u0000\uEC7D\u0000\u0000\uEA79"+
-            "\uE26C\uF445\uE374\uE9D1\u0000\u0000\u0000\u0000"+
-            "\uEBC8\uE8B7\uEAE3\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF1B9\uF3C5\u0000\uF4CF\uE6AB"+
-            "\uEBAC\u0000\u0000\uECEB\u0000\uF257\u0000\u0000"+
-            "\u0000\uEBC9\uE09C\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF39D\uF871\uF36A\uE177\uE896\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE14F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE27D\u0000"+
-            "\u0000\uE5A9\uF872\u0000\u0000\u0000\uE375\u0000"+
-            "\uF0D6\u0000\uF16F\u0000\u0000\u0000\uEAFC\u0000"+
-            "\u0000\uF6D6\uEA7A\uE0B4\u0000\u0000\uF2BE\u0000"+
-            "\u0000\uE145\u0000\u0000\u0000\u0000\u0000\uE2BD"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF2F2\uEC47"+
-            "\u0000\u0000\u0000\uE178\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF39E\u0000\u0000\u0000"+
-            "\uE670\u0000\uF3C6\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEC48\uF0AB\u0000\u0000"+
-            "\u0000\uE0B5\uE761\u0000\uF55E\uF4F7\u0000\u0000"+
-            "\uE6C6\u0000\uE3BB\uF6AA\u0000\uF1CA\uE6D3\uE79C"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF655"+
-            "\u0000\u0000\uE3CC\uE9FC\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEAFD\u0000"+
-            "\uF7E5\u0000\uEB5A\u0000\u0000\uF49F\uE4B0\u0000"+
-            "\uF595\uE859\u0000\uEE6E\u0000\u0000\u0000\u0000"+
-            "\uF74A\uEF60\u0000\u0000\uE79D\u0000\u0000\uF065"+
-            "\u0000\u0000\u0000\u0000\uE633\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF656\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF46B\uED9E\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEF42\u0000\u0000"+
-            "\u0000\u0000\u0000\uE86A\u0000\uF46C\uF8D6\uEFB2"+
-            "\u0000\uF23D\u0000\uF873\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE97E\u0000\u0000\uF5EA\uEE70"+
-            "\u0000\uF39F\u0000\u0000\u0000\u0000\u0000\uE6AC"+
-            "\u0000\u0000\u0000\u0000\u0000\uF5C5\uF270\u0000"+
-            "\u0000\uE8E5\u0000\uE9DE\u0000\u0000\uE7F0\uEFA3"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF3F9\u0000\uF454\uEB5B\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEFA4\u0000"+
-            "\u0000\uEC49\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uECB1\uF97B\uE1A8\u0000\uE146\u0000\u0000"+
-            "\uF36B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEE4A\u0000\u0000\uE1A9\u0000\u0000\u0000"+
-            "\u0000\u0000\uF4C3\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEBD9\u0000\u0000\uF2AB"+
-            "\u0000\u0000\u0000\uEEC5\u0000\u0000\uEB79\u0000"+
-            "\uF4C5\u0000\u0000\uE550\uE5BF\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE9AE\u0000"+
-            "\uF7FC\u0000\uE150\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEDA2\u0000\u0000\u0000"+
-            "\uE248\u0000\u0000\u0000\uE762\uF7D6\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF3AA\uE261\u0000\u0000\uF657\u0000"+
-            "\uE8EB\u0000\uEAFE\u0000\u0000\uE771\u0000\uF6F3"+
-            "\u0000\uE6E7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE5A0\u0000\u0000"+
-            "\uE3BC\u0000\uEDCF\u0000\uE0B6\u0000\uE848\u0000"+
-            "\u0000\u0000\u0000\u0000\uE1C4\u0000\u0000\u0000"+
-            "\u0000\u0000\uE64E\u0000\u0000\u0000\uEC4A\u0000"+
-            "\u0000\u0000\u0000\u0000\uE2D8\u0000\u0000\u0000"+
-            "\uEB5C\uF0F9\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF9FD\u0000\u0000\u0000\u0000\u0000"+
-            "\uE6E8\uE0D8\u0000\u0000\u0000\uEFE2\u0000\u0000"+
-            "\u0000\uEF4A\u0000\u0000\u0000\uECC7\u0000\u0000"+
-            "\u0000\u0000\uF15D\u0000\uF15E\u0000\uE64F\u0000"+
-            "\u0000\u0000\uECA7\u0000\uEAD6\uF9E8\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF271"+
-            "\uF638\uE9FD\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF74B\u0000\uEF61\u0000\u0000\u0000\u0000"+
-            "\uF7D7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE27E\u0000\u0000\uF15F\u0000\u0000\u0000"+
-            "\uEFA5\uE665\u0000\uE1C5\u0000\uF1BA\uE3BD\u0000"+
-            "\u0000\uE2BE\u0000\u0000\uF14B\u0000\u0000\u0000"+
-            "\uE441\u0000\u0000\u0000\u0000\uE179\u0000\uE7C4"+
-            "\uEFFC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE3BE\u0000\u0000"+
-            "\u0000\u0000\u0000\uF14C\u0000\u0000\uEDAD\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF6B0\u0000\uE17A"+
-            "\u0000\u0000\u0000\uE4C4\u0000\u0000\uE650\u0000"+
-            "\u0000\u0000\uE69F\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEBA1\u0000"+
-            "\uEA4D\u0000\uF639\u0000\u0000\u0000\uE834\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE634"+
-            "\uF5C6\u0000\uEBA2\uEFC6\u0000\u0000\u0000\uF455"+
-            "\u0000\u0000\u0000\u0000\u0000\uF579\uE67C\uF0D3"+
-            "\u0000\u0000\u0000\u0000\uF14D\uEC6C\uEA7B\uF36C"+
-            "\u0000\uF0BF\u0000\uE6CE\uE3BF\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF5AB\u0000"+
-            "\u0000\u0000\u0000\uF7FD\u0000\uE06C\u0000\u0000"+
-            "\u0000\uE1C6\uF446\u0000\u0000\uE9FE\u0000\u0000"+
-            "\u0000\uE147\uE8B8\u0000\u0000\u0000\u0000\uE379"+
-            "\u0000\uE26D\uF0C0\u0000\uF9A2\u0000\u0000\u0000"+
-            "\u0000\u0000\uF75B\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF066\uF3B0\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE8CE\u0000\uF6C3\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE8CF\uE0A4\u0000\u0000\uF770\u0000"+
-            "\u0000\uF8D7\u0000\u0000\uF0CA\uEB31\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE25D\u0000\u0000\uE56C\u0000\u0000\u0000"+
-            "\uF9D8\u0000\u0000\u0000\u0000\uE498\u0000\u0000"+
-            "\u0000\u0000\uF447\u0000\u0000\uF898\uF63A\uF899"+
-            "\uE776\u0000\uF541\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEF62\u0000\uE055\uE17B\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEC7E\u0000\u0000\u0000\u0000"+
-            "\u0000\uEC4B\u0000\uF6AD\u0000\u0000\u0000\uF771"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF4EC\u0000\u0000\u0000\u0000\uEA31\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uED9F\u0000\u0000\uECEC\u0000"+
-            "\uE9AF\uE9B0\u0000\u0000\uE0B7\uEF63\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEBA3\uE470\u0000"+
-            "\u0000\u0000\u0000\uF3A0\u0000\u0000\u0000\u0000"+
-            "\uEFA6\uE0F2\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF1F3\uE969\uEB5D\u0000\u0000\u0000\u0000\uF6DA"+
-            "\uE8B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE13E\u0000\uE86B\u0000\u0000\u0000\u0000\uE1C7"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE9B1\u0000\uE73F\uECA3\u0000\u0000"+
-            "\uE291\u0000\u0000\uF495\u0000\u0000\u0000\u0000"+
-            "\uF743\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEB5E\u0000\uF5FD\u0000\u0000"+
-            "\u0000\u0000\uF0EC\u0000\u0000\uE4C5\uF97C\uE46B"+
-            "\uE57B\u0000\uEA32\u0000\u0000\u0000\uEDE6\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF340\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE5C4\u0000\u0000\u0000\u0000\u0000\u0000\uF1F4"+
-            "\u0000\u0000\u0000\uECED\u0000\uEF52\u0000\uF1F5"+
-            "\uE6FC\u0000\uF1BB\u0000\u0000\uF63B\u0000\u0000"+
-            "\u0000\u0000\u0000\uF448\uF658\u0000\u0000\u0000"+
-            "\u0000\u0000\uE4E6\uF46D\uE2BF\u0000\uF0AC\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE2C0\u0000\uEE38"+
-            "\uF9E9\u0000\uE2C1\u0000\uEB6F\uEA7C\u0000\u0000"+
-            "\u0000\u0000\uEB32\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF54F\uEC91\u0000\uE7F1\uF3C7"+
-            "\u0000\uE0B8\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF7FE\uE8BA\uE897\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF67C\uE86C\uF874"+
-            "\u0000\uEB5F\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE9B2\u0000\u0000\u0000\u0000\uEE39\u0000\uF2F3"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF4ED\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF0FA\u0000\uF7E6\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE06D\uE5DE"+
-            "\u0000\uE06E\uEAE4\u0000\u0000\u0000\uEE9F\u0000"+
-            "\uF5AC\u0000\u0000\u0000\u0000\u0000\uED97\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEFE3\u0000\uF1CB\uE2E4\u0000"+
-            "\u0000\u0000\uE763\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE9B3\uE57C\u0000\u0000\uF449\u0000\uEAB7"+
-            "\u0000\u0000\u0000\u0000\u0000\uE0CE\uF8D8\u0000"+
-            "\u0000\uE369\u0000\u0000\uE9D2\uF6F4\uEEDC\uED35"+
-            "\u0000\uF933\u0000\uE8BB\u0000\u0000\u0000\uF44A"+
-            "\uEFFD\uE35A\u0000\uF5D6\uE7C5\uED44\u0000\uF1A7"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF04D\uEEA0\u0000\uF6C4\uF5AD\u0000\uE7E0"+
-            "\u0000\u0000\u0000\uE044\u0000\u0000\uF772\uE2C2"+
-            "\u0000\uF14E\u0000\u0000\u0000\uEDB4\uE1C8\uF258"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEEC8\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE1C9\uF7B7\u0000"+
-            "\u0000\uF3E8\uE7F2\uE8F5\uE045\uE7C6\u0000\u0000"+
-            "\u0000\uE759\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7AB"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF1BC\u0000\u0000\uE764\u0000\u0000\u0000\uE96A"+
-            "\u0000\uEC4C\u0000\u0000\uF97D\uF170\uE4A0\u0000"+
-            "\uEFC7\uEE3A\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEC92\u0000\u0000\u0000\u0000\u0000\u0000\uF84B"+
-            "\u0000\uF5AE\uF8AA\u0000\u0000\u0000\u0000\uF19D"+
-            "\u0000\uF14F\uF968\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE575\u0000\u0000\u0000\uF7C3"+
-            "\u0000\u0000\u0000\uF272\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE6E9\uF1F6\u0000\u0000\u0000\uEA7D\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE17C\u0000"+
-            "\uECEE\u0000\u0000\u0000\u0000\u0000\uEF64\u0000"+
-            "\u0000\u0000\uF89A\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE9B4\uED45\uE740\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE765\u0000\u0000"+
-            "\u0000\uF57A\u0000\u0000\u0000\uE249\u0000\u0000"+
-            "\u0000\uE671\uE2D2\u0000\uE346\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE232\u0000\u0000\uF4EE\u0000"+
-            "\u0000\u0000\u0000\u0000\uF4F8\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE95C\u0000\uE35B\u0000\u0000\u0000\uF934"+
-            "\uE1CA\uE6D4\uEA33\u0000\uED70\u0000\u0000\u0000"+
-            "\u0000\uF259\u0000\u0000\u0000\uEC6D\u0000\u0000"+
-            "\u0000\u0000\u0000\uF5FE\uE53C\u0000\u0000\u0000"+
-            "\u0000\u0000\uE5D1\u0000\uE792\uF753\uF067\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF5D7\u0000\u0000\uE74F\u0000\u0000\u0000"+
-            "\u0000\uF9C0\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF0AD\u0000\u0000\u0000\u0000\uE5AA\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEEA8\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF25A"+
-            "\u0000\u0000\u0000\uE077\u0000\u0000\u0000\u0000"+
-            "\u0000\uF773\u0000\uE56D\u0000\u0000\uF068\u0000"+
-            "\u0000\u0000\u0000\uF8D9\uF1F7\u0000\u0000\uEDB5"+
-            "\u0000\u0000\u0000\u0000\u0000\uE33D\u0000\u0000"+
-            "\u0000\u0000\uF3F1\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEC4D\u0000\u0000\u0000\uECC8\u0000\u0000\u0000"+
-            "\u0000\uE7D5\u0000\u0000\uEAAA\u0000\u0000\u0000"+
-            "\u0000\uE8BC\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF774\u0000\u0000\u0000\u0000\u0000"+
-            "\uF3FA\u0000\u0000\uEDB6\uF4EF\u0000\u0000\uF8DA"+
-            "\uEBE0\u0000\uE7AC\u0000\uF5EB\u0000\uEB46\u0000"+
-            "\u0000\uEFC8\u0000\uE0CF\u0000\uECC9\u0000\u0000"+
-            "\u0000\uEA7E\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEC4E\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE991\u0000\uE635\u0000"+
-            "\u0000\u0000\u0000\u0000\uEC93\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE6A0\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE7A1\u0000\uE750\uE96B\u0000\u0000\uF1BD"+
-            "\uEAB8\u0000\uF035\u0000\u0000\u0000\uE6AD\u0000"+
-            "\u0000\uF4F9\u0000\uF1F8\u0000\uF5C7\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEBCA\uF0E3\u0000\uF46E"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF75C\u0000\uF069"+
-            "\u0000\uE4C6\u0000\uE8E6\u0000\u0000\u0000\u0000"+
-            "\u0000\uF5AF\u0000\u0000\u0000\u0000\uE292\u0000"+
-            "\u0000\u0000\u0000\uEFFE\u0000\u0000\u0000\u0000"+
-            "\u0000\uF8B6\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEC94\u0000\u0000\u0000\u0000"+
-            "\uE2F2\uF6B9\uE7F3\u0000\u0000\uEBCB\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE86D\u0000\u0000\uE849"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0FB"+
-            "\u0000\uE0B9\u0000\u0000\uF1F9\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEB70\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF550\u0000"+
-            "\uF9BC\uEAB1\uECEF\u0000\u0000\u0000\u0000\uEB33"+
-            "\uF9B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF341\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE1CB\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF1BE\u0000\u0000\u0000\uE5C0\uECF0\uF1FA"+
-            "\u0000\u0000\u0000\u0000\u0000\uEFE4\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE5ED\uEEDD\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE598\uEDB7\u0000\u0000"+
-            "\u0000\uE8E7\uEC4F\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF25B"+
-            "\u0000\u0000\uE6F4\uF36D\u0000\u0000\u0000\uE23B"+
-            "\u0000\u0000\uEEDE\u0000\u0000\u0000\uE666\uEBCC"+
-            "\u0000\u0000\uEF43\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEDEE\uE932"+
-            "\u0000\u0000\uEB60\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE5B5\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5A1"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF8DB\u0000"+
-            "\uF7CB\u0000\u0000\u0000\uE0F3\uF535\u0000\u0000"+
-            "\u0000\u0000\u0000\uF858\uE667\u0000\uEFE5\uF8DC"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9D0"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF8F6\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE835\u0000\uE8BD\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF172\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE1F7\uF36E\u0000\u0000\u0000"+
-            "\u0000\uF659\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEA91"+
-            "\u0000\u0000\u0000\uE4B1\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF97E\u0000\u0000\u0000"+
-            "\u0000\uEF53\u0000\uF3C8\u0000\u0000\u0000\uE293"+
-            "\u0000\u0000\u0000\u0000\uF7ED\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF496\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uED46\u0000"+
-            "\uF5B9\u0000\uE992\uECF1\u0000\u0000\u0000\u0000"+
-            "\uEF35\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF44B\u0000\uEA34\u0000\uE85C\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE079\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uECDA\u0000\uF969"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF06A"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF7C4\u0000"+
-            "\uECA4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF8DD\u0000\uF2CA\u0000"+
-            "\uEF54\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE5CC\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF0D7\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7AD"+
-            "\u0000\u0000\uF8AB\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE4D9\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE5A2\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF66E\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE898\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEB61\u0000\u0000\uEFA8"+
-            "\u0000\u0000\uF5F9\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF83F\u0000\uF0FC\u0000\u0000\uEB7A\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uECB2\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5C5"+
-            "\u0000\u0000\uF3E3\uE5EE\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE1CC\u0000\u0000\u0000\u0000\uF1D9\u0000"+
-            "\u0000\u0000\u0000\uE751\u0000\u0000\u0000\u0000"+
-            "\uF87C\u0000\u0000\u0000\u0000\u0000\uF3EB\u0000"+
-            "\u0000\u0000\u0000\u0000\uF84C\uEE72\u0000\u0000"+
-            "\u0000\u0000\uF875\uEC9C\u0000\u0000\u0000\uE046"+
-            "\u0000\uED47\u0000\uF06B\u0000\uF5FA\u0000\u0000"+
-            "\u0000\uF8AC\uE2C3\uF0FD\u0000\u0000\u0000\u0000"+
-            "\uF79C\u0000\u0000\uEAB9\u0000\u0000\u0000\u0000"+
-            "\uEBF1\u0000\uE434\u0000\u0000\u0000\u0000\uF5FB"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE36A\uE36B"+
-            "\u0000\uF04E\uE7B1\u0000\u0000\u0000\u0000\u0000"+
-            "\uE047\u0000\u0000\uE4E7\u0000\uF775\u0000\u0000"+
-            "\u0000\u0000\uE4B2\u0000\u0000\u0000\uEC50\uF46F"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE1E5\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF7AC\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE1CD\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF23E\uE63E\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6EA"+
-            "\u0000\u0000\u0000\u0000\uEEE0\uF0AE\u0000\u0000"+
-            "\u0000\uE2D9\u0000\u0000\uE95D\uF1FB\u0000\uEA92"+
-            "\u0000\uE6EB\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEA35\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEAD7\uE8D0\uE8D1\u0000\u0000"+
-            "\uE5A3\u0000\u0000\u0000\u0000\uF342\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE96C"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE078\u0000\uF776\uE95E\u0000\u0000\u0000\u0000"+
-            "\uF06C\uE8D2\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEFB3\u0000\u0000"+
-            "\u0000\u0000\uF6DB\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uECA8\u0000"+
-            "\uE6AE\u0000\u0000\uEB71\u0000\u0000\u0000\u0000"+
-            "\u0000\uE0BA\u0000\u0000\uEDD1\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE36C"+
-            "\u0000\u0000\u0000\u0000\uE5C1\u0000\u0000\u0000"+
-            "\u0000\u0000\uE75A\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uECA9\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEB34"+
-            "\u0000\uEFA9\u0000\uE4C7\u0000\u0000\uE96D\uF73E"+
-            "\u0000\u0000\u0000\uE148\u0000\u0000\u0000\uE33E"+
-            "\u0000\u0000\u0000\uE794\u0000\u0000\uECCA\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE13F\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE53D\uF661\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE35C\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE056\u0000\u0000\uE5C2\u0000\u0000"+
-            "\uE24A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE057\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF840\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEAD8\u0000\u0000\u0000"+
-            "\uF5BA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEDEB\u0000\uF2F4\uE9B5\u0000\u0000\u0000\u0000"+
-            "\uE1AA\u0000\uECF2\u0000\uF8F7\u0000\uF6D0\u0000"+
-            "\u0000\u0000\u0000\uF9BA\u0000\u0000\uF9E1\uF6A0"+
-            "\uE3C0\u0000\u0000\uEF55\u0000\uED48\u0000\uEBE8"+
-            "\u0000\u0000\u0000\uE151\u0000\uE47D\u0000\u0000"+
-            "\u0000\u0000\uE8BE\u0000\u0000\uEB72\u0000\u0000"+
-            "\u0000\uF859\u0000\u0000\uEBCD\u0000\uE048\u0000"+
-            "\u0000\u0000\uF470\uF3C9\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEA93\u0000\u0000\u0000\uF36F\uF754\u0000\u0000"+
-            "\u0000\u0000\u0000\uF25C\u0000\u0000\uEA94\u0000"+
-            "\uEEC9\u0000\uEC95\uEEE1\u0000\u0000\uECCB\u0000"+
-            "\u0000\uECCC\u0000\u0000\u0000\uE2F8\uF2AC\u0000"+
-            "\uF9FE\uF935\uF841\uEAD9\u0000\uEB62\u0000\u0000"+
-            "\u0000\uF56A\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF3CA\u0000\uE233"+
-            "\u0000\u0000\u0000\u0000\uF44C\uF173\u0000\u0000"+
-            "\u0000\u0000\u0000\uEB35\u0000\uF6AB\u0000\u0000"+
-            "\uF0AF\u0000\u0000\u0000\u0000\u0000\uEDDE\u0000"+
-            "\uEBA4\uE1AB\u0000\uE7F4\uEF36\uE1CE\uEBE9\u0000"+
-            "\uF991\u0000\uEB73\u0000\u0000\u0000\u0000\u0000"+
-            "\uEC51\u0000\uE234\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEA36\u0000\u0000\uF0FE\u0000\uF0DD\uF370"+
-            "\u0000\u0000\uF56B\u0000\uEC96\u0000\u0000\uE4C8"+
-            "\u0000\u0000\u0000\uF57B\u0000\uF245\u0000\uF5D8"+
-            "\u0000\u0000\uE5DF\u0000\u0000\u0000\uE675\u0000"+
-            "\u0000\u0000\u0000\uF0B0\uF573\u0000\u0000\u0000"+
-            "\u0000\uECCD\u0000\u0000\u0000\u0000\uF596\uF842"+
-            "\u0000\u0000\uF2F5\uE06F\u0000\uF0B1\uF1BF\u0000"+
-            "\u0000\uF9C9\u0000\u0000\u0000\u0000\uED36\uF7A4"+
-            "\uF343\u0000\uEDEC\u0000\u0000\u0000\uE3E7\u0000"+
-            "\uE7C7\uED67\uF06D\u0000\uE599\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE84A\u0000"+
-            "\uE85D\u0000\u0000\u0000\uF7CC\u0000\uEBDA\uE8BF"+
-            "\u0000\uE155\uF160\uE0BB\u0000\uEA95\u0000\u0000"+
-            "\uEFAA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE7C8\u0000\u0000\uF273\uE6BD\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE2C4\u0000\u0000\u0000\u0000"+
-            "\u0000\uE35D\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF936\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF3FB\u0000\u0000\u0000\u0000\uF9D2\uE3C1"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uECDB\u0000\uE4C9\u0000\uE95F\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE17D\u0000"+
-            "\u0000\u0000\u0000\u0000\uEA37\u0000\u0000\uEE4B"+
-            "\uF131\u0000\u0000\u0000\uE149\u0000\u0000\uF8DE"+
-            "\u0000\u0000\u0000\u0000\u0000\uEEE2\u0000\u0000"+
-            "\uE551\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE938\u0000\u0000\u0000\u0000\u0000"+
-            "\uEC52\u0000\uF4D8\uEDD3\u0000\u0000\uF4D9\u0000"+
-            "\u0000\u0000\uF4C6\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1DB"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1AC"+
-            "\u0000\uF953\u0000\u0000\u0000\u0000\uE577\u0000"+
-            "\uE3C2\u0000\uF7A5\u0000\uEF65\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uECCE\u0000\u0000"+
-            "\u0000\u0000\uE55A\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEADA\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF8DF\uEEE3\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF79D\uECCF\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF5B0\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE777\u0000\uE7C9\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF73F\uF2F6\u0000"+
-            "\uE9B6\uF23F\uE1F8\u0000\u0000\u0000\u0000\uEA48"+
-            "\uF937\uF6FC\uF6B1\uE24B\uF531\u0000\u0000\uF25D"+
-            "\uEBAE\u0000\u0000\uF153\uE2FE\u0000\uF74F\uE772"+
-            "\uE4E8\u0000\u0000\uEA38\uF574\uF152\u0000\uE7F5"+
-            "\uF7C5\uE9D3\uE693\uF19E\uF992\u0000\u0000\uF1C0"+
-            "\uE049\u0000\uF274\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF471\u0000\uEA49\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE694\u0000\uEA96\u0000\uEADB\u0000"+
-            "\uE8D3\u0000\uF877\uE773\uF551\u0000\uE9B7\u0000"+
-            "\u0000\u0000\uF497\u0000\u0000\uE53E\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE695\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE9B8\uE2C5\uEADF\u0000\u0000";
-
-        private final static String innerIndex5=
-            "\u0000\u0000\u0000\u0000\uF44E\uF631\u0000\uF0CB"+
-            "\uF3FC\u0000\uF4C7\u0000\u0000\uEB7B\u0000\u0000"+
-            "\u0000\u0000\u0000\uF1FC\u0000\u0000\uEBDB\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF275\u0000\uEA97\u0000"+
-            "\u0000\u0000\u0000\uF863\u0000\u0000\u0000\u0000"+
-            "\uF3CB\u0000\u0000\uE33F\uE9B9\u0000\u0000\uE3C3"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF5B1\u0000\u0000"+
-            "\u0000\u0000\uF056\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF371\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF63C\u0000\u0000\u0000\u0000"+
-            "\uF5D9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF37B\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE9BA\u0000\u0000\u0000\uF44F\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF6C5\u0000"+
-            "\u0000\u0000\u0000\uE8A2\uF498\u0000\u0000\uE04A"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF6F5\u0000\uE0E5\u0000\u0000"+
-            "\u0000\uF276\u0000\uEB63\u0000\u0000\u0000\u0000"+
-            "\uE235\u0000\u0000\u0000\u0000\u0000\u0000\uE668"+
-            "\u0000\u0000\u0000\uE53F\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEFC9\u0000\u0000\u0000\u0000\uE4CE"+
-            "\uF552\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE0E6\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF3A1\u0000\u0000\u0000\u0000\u0000"+
-            "\uF0B2\u0000\u0000\u0000\u0000\uF3A2\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF0B3\u0000\uF344\u0000\u0000\uE0F4"+
-            "\uE540\uF4B2\uF8B7\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF5EC\u0000\u0000\u0000\u0000\u0000\uF277"+
-            "\uF542\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF5ED\u0000\uE2F3\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF372\u0000\u0000\u0000\u0000\u0000\uF25E"+
-            "\u0000\u0000\uF3CC\u0000\u0000\uEDB8\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE6F5\uECF3\uE2E5\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE2C6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF4B3\uED68\uE2F9\uE2DA\u0000\u0000"+
-            "\u0000\u0000\uF85D\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE73"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF472\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF5EE\u0000\u0000\uE04B\u0000\u0000\uECDC\u0000"+
-            "\u0000\u0000\u0000\uE294\u0000\uE669\u0000\u0000"+
-            "\u0000\uF240\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF575\uE752\uE960\uE17E\u0000\u0000"+
-            "\u0000\u0000\u0000\uE5E0\uF65A\uF9CA\uE766\uF55F"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE636\uE94E"+
-            "\u0000\uE8D4\uE6C7\u0000\u0000\u0000\u0000\uF4A0"+
-            "\u0000\u0000\u0000\uF3CD\u0000\u0000\u0000\u0000"+
-            "\uEC53\uE96E\u0000\uE96F\u0000\u0000\uF2AD\uEE3B"+
-            "\u0000\u0000\u0000\u0000\uF7DD\uF04F\u0000\u0000"+
-            "\u0000\uF2AE\u0000\u0000\u0000\uF560\uE295\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEE3C\u0000\uE26E"+
-            "\u0000\u0000\uE5F9\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uECF4\uE1D0\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE5B8\u0000\u0000\uF6FD\u0000"+
-            "\uE939\u0000\u0000\u0000\u0000\uEA98\u0000\uE93A"+
-            "\uF473\uEFB4\uE46C\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEFE6\u0000\u0000\uECF6\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEECA\u0000"+
-            "\u0000\uE35E\u0000\u0000\uE899\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE04C\u0000"+
-            "\u0000\u0000\uF278\uE86E\u0000\uF499\u0000\u0000"+
-            "\uEC9D\u0000\uE136\u0000\u0000\u0000\u0000\uE84B"+
-            "\u0000\uF279\u0000\u0000\u0000\uF5DA\u0000\u0000"+
-            "\uF6DC\uEBEA\uE251\uE541\u0000\uF9B1\uEE4D\u0000"+
-            "\uF8AD\u0000\u0000\uF777\u0000\uEBCE\u0000\uF6E2"+
-            "\uF5EF\uE2C7\u0000\u0000\uE542\uE191\u0000\uE578"+
-            "\u0000\uF25F\uF6D7\u0000\u0000\uEB36\uE651\uEBDC"+
-            "\uF373\uF3E4\uE993\uE637\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF597\u0000"+
-            "\u0000\uF3CE\uF474\u0000\u0000\uE340\u0000\u0000"+
-            "\uF191\u0000\u0000\u0000\uF7BA\u0000\uF0B5\u0000"+
-            "\u0000\uE57D\uEC54\u0000\u0000\u0000\u0000\uEFE7"+
-            "\u0000\u0000\uF0B4\uF031\u0000\uF74C\uE236\u0000"+
-            "\uF7C6\uF96A\u0000\uE543\uE4B9\uF06E\u0000\u0000"+
-            "\u0000\uEFAB\u0000\u0000\uEBE1\uE4CF\uF598\u0000"+
-            "\uF050\uEBCF\u0000\uE14A\u0000\u0000\u0000\u0000"+
-            "\u0000\uF27A\u0000\u0000\u0000\uF374\uF4B4\uE57E"+
-            "\u0000\u0000\uF450\u0000\u0000\uF3E5\u0000\uF553"+
-            "\uEB64\u0000\uF0B6\u0000\uE6A1\uE0E8\u0000\uF7AD"+
-            "\uEFAD\uE774\uF843\uEC55\uF94D\u0000\u0000\uF154"+
-            "\uE741\u0000\uE93B\u0000\u0000\u0000\u0000\uE5A4"+
-            "\u0000\uF0E9\u0000\u0000\u0000\uEF4B\u0000\u0000"+
-            "\u0000\uE767\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF8AE\uE3E1\u0000\u0000\uE8C0\u0000"+
-            "\uF5BE\u0000\uEA99\u0000\u0000\u0000\u0000\uE09D"+
-            "\uF6C6\uE2C8\u0000\u0000\u0000\uEBD0\u0000\u0000"+
-            "\uF260\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEFF4\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE296\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5CD\u0000"+
-            "\u0000\uE2DB\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE9BB\u0000\u0000\u0000\u0000\uE23C\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEFE8\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE544\u0000\u0000"+
-            "\u0000\u0000\uED57\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF5DB\u0000\u0000\uF851\u0000\u0000"+
-            "\u0000\uEA39\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE59A"+
-            "\u0000\u0000\u0000\u0000\u0000\uF2F7\u0000\u0000"+
-            "\u0000\u0000\uE4B3\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF0B7\uF2F8\uF5DC\uF1CC\uE8D5\uF3CF\u0000"+
-            "\u0000\u0000\uF3D0\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF5B2\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE7AE\uE5AC\u0000\uEC56\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF9A3\u0000\uF8E5"+
-            "\uEAAB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC97"+
-            "\u0000\uF63D\u0000\uF5B3\u0000\uF345\u0000\u0000"+
-            "\u0000\u0000\uEBA5\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF5DD\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF132\uF1FD\u0000\uF5B4\uF8B8"+
-            "\u0000\uE8A3\u0000\u0000\uE65A\uE0D9\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEDD4\u0000\u0000\u0000\u0000\u0000\u0000\uF4FA"+
-            "\u0000\uF0B8\u0000\uEB47\uE6EC\uF3EC\uEDAF\uE5E1"+
-            "\uE6ED\uE3D1\u0000\u0000\u0000\u0000\u0000\uEBF2"+
-            "\uF2F9\u0000\u0000\u0000\uE9BC\uF66C\u0000\u0000"+
-            "\u0000\u0000\u0000\uF375\u0000\u0000\u0000\uF554"+
-            "\u0000\u0000\uEFE9\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF4FB\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE591\u0000\u0000"+
-            "\uE132\uF6FE\uEABC\u0000\u0000\u0000\u0000\uF0CD"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE347\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE652\u0000\u0000\u0000"+
-            "\u0000\u0000\uEF3D\u0000\u0000\u0000\u0000\uF2AF"+
-            "\uE0A5\u0000\u0000\u0000\u0000\uE0E9\u0000\u0000"+
-            "\u0000\uF878\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE156"+
-            "\u0000\u0000\u0000\uEE77\u0000\u0000\uF057\u0000"+
-            "\u0000\u0000\uE8A4\u0000\uE2C9\uEC9E\uF2FA\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF0DE\u0000\u0000\uF5C8\u0000\uE56E\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEB65\u0000\uF2B0\u0000\u0000\uEC57\u0000"+
-            "\uE7AF\u0000\u0000\u0000\uF7E7\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEEE5\u0000\u0000\uE2CA\uEBD1"+
-            "\u0000\uEC58\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF2FB\u0000\u0000\uF89B"+
-            "\u0000\u0000\uE994\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEB37\u0000\u0000\u0000"+
-            "\u0000\u0000\uF778\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE0EA\u0000\u0000\u0000\uE0BC\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE672\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF5DE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF5DF\u0000\uF246\u0000\u0000\u0000\uEC98\uE4CA"+
-            "\uF2FC\uE3C4\uF2B1\u0000\uE3C5\u0000\uE36E\u0000"+
-            "\uE7E1\u0000\u0000\uEB48\u0000\u0000\uE1D1\uF4B9"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEECC\u0000\uE638\uE237\u0000\uE545\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uED58\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE4B4\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF0B9\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE0F5\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF66D\u0000\uF3A3\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE157\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEFCA\u0000\uEBF0\u0000"+
-            "\u0000\u0000\uF5E0\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF8AF\u0000\u0000\u0000\uE0D1"+
-            "\u0000\u0000\u0000\u0000\uF8E0\uF475\u0000\u0000"+
-            "\uF192\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF37C\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF27B\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEFCB\u0000"+
-            "\u0000\uE192\u0000\u0000\uE6AF\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF4A1\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF997\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF3A4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEB66\u0000\u0000"+
-            "\u0000\u0000\u0000\uF2B2\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF561\u0000\u0000"+
-            "\uF6A1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF3D1\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE09E\uE09F\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE25E\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF4C8\u0000\uF4BA"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1FE"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE836\u0000\u0000\uEB7C\u0000\u0000\u0000\u0000"+
-            "\u0000\uF75D\u0000\uE0D2\u0000\u0000\u0000\uF0CE"+
-            "\u0000\uF7D8\uF7D9\uE070\uE85A\u0000\u0000\u0000"+
-            "\uE0A6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE058\uF7EE\uE8EC\u0000\u0000"+
-            "\uE341\u0000\u0000\u0000\u0000\uE5EF\u0000\u0000"+
-            "\u0000\uEE95\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEEA2\uED69\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED71"+
-            "\u0000\u0000\uF954\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF7EF\uE2F4\uF6E6\u0000"+
-            "\u0000\u0000\u0000\u0000\uE24C\u0000\u0000\u0000"+
-            "\u0000\uF555\uE933\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE9BD\u0000\u0000\u0000"+
-            "\u0000\uF556\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF731\u0000\u0000\u0000\uEF66\u0000"+
-            "\u0000\u0000\uE8C1\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF376\u0000\u0000\u0000\uED49"+
-            "\uF67D\u0000\uF7AE\u0000\uE9BE\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE6B0\uE778\uE0BD\u0000\u0000"+
-            "\uF7DA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF75E\uF7F0\uEB7D\uECB3\uF543"+
-            "\u0000\u0000\uF052\uF476\uF346\u0000\u0000\u0000"+
-            "\u0000\u0000\uE8D6\u0000\u0000\u0000\u0000\u0000"+
-            "\uF0E4\u0000\u0000\uF477\u0000\uE6D5\uE546\uF7E8"+
-            "\uE6C1\u0000\u0000\u0000\u0000\uEDD5\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEFEA\uE6CC\u0000"+
-            "\u0000\u0000\uE4E9\uEC59\u0000\uF96B\uE1AD\u0000"+
-            "\u0000\u0000\u0000\u0000\uE140\uF032\u0000\u0000"+
-            "\uED98\uE350\u0000\uF347\uF231\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE6F6\u0000\u0000\u0000\uEC5A"+
-            "\uEC5B\u0000\uF85F\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF0DF\u0000\u0000\u0000\u0000\u0000\uE65B"+
-            "\u0000\u0000\u0000\uF544\u0000\u0000\u0000\u0000"+
-            "\uF1CD\uED62\u0000\u0000\uF039\uED4A\uF4A2\uE1D2"+
-            "\u0000\uF65B\u0000\uF3E6\uF1C1\uEF4C\uF261\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF377\uEC5C\u0000"+
-            "\u0000\uED3A\u0000\uF5E1\uF1DA\u0000\u0000\u0000"+
-            "\u0000\u0000\uE6EE\uE3F1\u0000\u0000\u0000\u0000"+
-            "\uEFEB\uEFEC\uEB74\u0000\u0000\u0000\u0000\uE837"+
-            "\uE9D4\u0000\uF033\u0000\u0000\u0000\uE653\uE696"+
-            "\u0000\uE86F\u0000\uF2B3\u0000\u0000\u0000\u0000"+
-            "\uEC5D\u0000\u0000\u0000\u0000\u0000\uF2FD\uF478"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF2C5\u0000\uEEE7\u0000\u0000\uE6FD\u0000"+
-            "\u0000\uEECE\u0000\u0000\uEADC\u0000\uF7C7\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7F6"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEAAC\u0000\uE66A\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE934\u0000\u0000\u0000\uF348\u0000\u0000"+
-            "\u0000\u0000\uE5FA\u0000\uED99\u0000\u0000\u0000"+
-            "\uE654\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF57C\u0000\u0000\u0000\u0000\uF2FE\u0000"+
-            "\u0000\u0000\u0000\u0000\uF331\u0000\uEA3A\u0000"+
-            "\u0000\uE84C\uE79E\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF864\u0000\u0000\u0000\uF175\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF938\u0000\u0000\uF176"+
-            "\u0000\u0000\uE75B\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF8B9\u0000\uED63\u0000\uE1F9"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE2D3\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE07A\u0000\u0000\uE2D4\u0000\uF74D\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF557\u0000"+
-            "\u0000\u0000\u0000\uF06F\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF7DB\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE547\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF0E5\u0000\u0000\uEBD2\u0000"+
-            "\u0000\u0000\u0000\uF034\u0000\u0000\u0000\uF852"+
-            "\uF8E1\uF87D\uF332\uE193\u0000\uF833\uEC99\u0000"+
-            "\uEC5E\u0000\uEFF5\u0000\uEBEB\u0000\u0000\u0000"+
-            "\uEEE8\uEF67\uE89A\uE55B\u0000\u0000\u0000\uF6F6"+
-            "\uE655\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE579\u0000\u0000"+
-            "\uF89C\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE194\uF6DD\u0000\uEA4A\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE238\u0000"+
-            "\u0000\u0000\u0000\u0000\uF349\uEDA0\uED59\u0000"+
-            "\u0000\u0000\u0000\u0000\uED64\u0000\u0000\u0000"+
-            "\uF053\u0000\uF2B4\u0000\u0000\u0000\uE6BE\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF8E2\u0000\uE1D3"+
-            "\u0000\u0000\u0000\uF2B5\u0000\u0000\u0000\uF879"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF7A6\u0000\u0000\u0000\u0000\u0000\u0000\uEABD"+
-            "\u0000\uF6C7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF79F\u0000\u0000\uF79E"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEA3B\uE8E8\u0000\u0000\uECDD"+
-            "\u0000\uEBE2\uE3C6\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF660\uF0E6\uE89B"+
-            "\u0000\u0000\u0000\u0000\uF157\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEA9A\uF779\uECDE\u0000"+
-            "\u0000\u0000\u0000\uE297\u0000\u0000\u0000\u0000"+
-            "\u0000\uF853\uEDD7\u0000\uF158\u0000\u0000\u0000"+
-            "\uF4C9\u0000\u0000\uED4B\u0000\u0000\u0000\u0000"+
-            "\uEE3E\u0000\u0000\u0000\u0000\u0000\uF2B6\u0000"+
-            "\uE94F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE24D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE753\u0000\u0000"+
-            "\u0000\uE35F\u0000\uE2FA\uF4CA\uEB67\u0000\u0000"+
-            "\u0000\uE3C7\uEFAE\u0000\uEF4D\u0000\u0000\uF854"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEC5F\u0000"+
-            "\u0000\uF855\u0000\u0000\u0000\uF7B8\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE970\u0000\u0000"+
-            "\uF8B0\u0000\u0000\u0000\uE739\uEDDF\uF7A7\u0000"+
-            "\u0000\uF67E\u0000\uF65C\uEC9A\u0000\u0000\u0000"+
-            "\u0000\uF193\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE870\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF3D2\uE45C\uE2CB\u0000\u0000\uE04D\u0000\u0000"+
-            "\u0000\uE9BF\u0000\u0000\u0000\uF691\u0000\uEA9B"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF844\u0000\u0000"+
-            "\u0000\uE5AD\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3E7"+
-            "\u0000\uEA4E\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE950\u0000\u0000\u0000\u0000\u0000\uE3C8\uE3C9"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF74E\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE0F6\u0000\u0000\u0000\u0000"+
-            "\uE59B\u0000\u0000\u0000\u0000\u0000\uF5E2\uEBD3"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE779\u0000\u0000\uF7A0\u0000\uE2CC\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF9A4\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE298\u0000\uF860"+
-            "\u0000\u0000\uE195\uEE4E\u0000\u0000\u0000\uF63E"+
-            "\u0000\u0000\uE5F0\u0000\u0000\uE3CA\u0000\u0000"+
-            "\u0000\uF94E\uE5F1\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE1E9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF845\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEC60\uF599\u0000\u0000\u0000"+
-            "\uE1D4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEEA3\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE8A5\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEC61\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6A2"+
-            "\u0000\u0000\uF6E3\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF036\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE331\u0000\u0000\u0000"+
-            "\u0000\uE26A\uF8EB\uE8A6\uE8DE\uE775\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF070"+
-            "\u0000\u0000\u0000\u0000\uE73A\u0000\u0000\u0000"+
-            "\u0000\u0000\uEDE0\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE66B"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF2C6\u0000"+
-            "\u0000\uF77A\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED65"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE299\u0000\u0000\uEB68\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE6EF\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF57D\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE1E6\u0000\u0000\u0000"+
-            "\uE196\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF5E3\u0000\u0000"+
-            "\uED5A\u0000\uE971\u0000\u0000\uF7C8\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF94F\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEF37\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE754\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0BE"+
-            "\u0000\uE93E\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6F7"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF378\u0000\uE9C0"+
-            "\u0000\uE2CD\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE995\uE7B0\u0000\uEE79\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-        private final static String innerIndex6=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uED4C\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF054\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uED7C\u0000"+
-            "\uED75\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF8F8\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE14B\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uED4D\u0000\u0000"+
-            "\uE1DC\uE7F7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE9DF\u0000\u0000\u0000"+
-            "\u0000\u0000\uF1CE\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE7D0\u0000\u0000\u0000\u0000\u0000\uEDA3"+
-            "\u0000\u0000\u0000\u0000\uF7CD\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE1AE\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2CE"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF63F\u0000\u0000\u0000\u0000\u0000"+
-            "\uF9D3\uF0ED\uE66C\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEDA4\u0000\u0000\u0000\uE5B6\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE66D\u0000\u0000"+
-            "\u0000\uF7E9\u0000\u0000\u0000\uEEA4\u0000\uE673"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE3CB\uE674\u0000\u0000\u0000\uE5F2"+
-            "\u0000\u0000\u0000\u0000\u0000\uEA9C\u0000\uE6F8"+
-            "\u0000\u0000\u0000\u0000\u0000\uE77A\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE2D5\uE79F\u0000\u0000"+
-            "\u0000\u0000\u0000\uE73B\u0000\u0000\uF9CB\u0000"+
-            "\u0000\u0000\u0000\uF96C\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEB38\uE5F3\u0000"+
-            "\u0000\uF9D9\u0000\u0000\uE133\u0000\u0000\u0000"+
-            "\uE7F9\u0000\u0000\uE4EA\uF5F5\u0000\uF2C7\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE4DA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE84D\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEF38"+
-            "\uE93F\u0000\u0000\u0000\u0000\u0000\uF333\u0000"+
-            "\u0000\u0000\u0000\uE1D5\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEB39\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEA3C\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF34A\uF241\u0000\u0000\uF242\u0000"+
-            "\u0000\u0000\uF65D\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF262"+
-            "\u0000\uE656\u0000\u0000\u0000\u0000\u0000\uEB75"+
-            "\u0000\u0000\uF4BB\u0000\uEDE1\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED5B"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE6A3\u0000\u0000"+
-            "\uE8C2\u0000\u0000\u0000\u0000\uE0A0\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE2CF\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u8861\u8862\u8863\u8864\u8865\u8866\u8867\u8868"+
-            "\u8869\u886A\u886B\u886C\u886D\u886E\u886F\u8870"+
-            "\u8871\u8873\u8874\u8875\u8876\u8877\u8878\u8879"+
-            "\u887A\u887B\u887C\u887D\u8881\u8882\u8883\u8884"+
-            "\u8885\u8886\u8887\u8888\u8889\u888A\u888B\u888C"+
-            "\u888D\u888E\u888F\u8890\u8891\u8893\u8894\u8895"+
-            "\u8896\u8897\u8898\u8899\u889A\u889B\u889C\u889D"+
-            "\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6\u88A7\u88A8"+
-            "\u88A9\u88AA\u88AB\u88AC\u88AD\u88AE\u88AF\u88B0"+
-            "\u88B1\u88B3\u88B4\u88B5\u88B6\u88B7\u88B8\u88B9"+
-            "\u88BA\u88BB\u88BC\u88BD\u88C1\u88C2\u88C3\u88C4"+
-            "\u88C5\u88C6\u88C7\u88C8\u88C9\u88CA\u88CB\u88CC"+
-            "\u88CD\u88CE\u88CF\u88D0\u88D1\u88D3\u88D4\u88D5"+
-            "\u88D6\u88D7\u88D8\u88D9\u88DA\u88DB\u88DC\u88DD"+
-            "\u88E1\u88E2\u88E3\u88E4\u88E5\u88E6\u88E7\u88E8"+
-            "\u88E9\u88EA\u88EB\u88EC\u88ED\u88EE\u88EF\u88F0"+
-            "\u88F1\u88F3\u88F4\u88F5\u88F6\u88F7\u88F8\u88F9"+
-            "\u88FA\u88FB\u88FC\u88FD\u8941\u8942\u8943\u8944"+
-            "\u8945\u8946\u8947\u8948\u8949\u894A\u894B\u894C"+
-            "\u894D\u894E\u894F\u8950\u8951\u8953\u8954\u8955"+
-            "\u8956\u8957\u8958\u8959\u895A\u895B\u895C\u895D"+
-            "\u8961\u8962\u8963\u8964\u8965\u8966\u8967\u8968"+
-            "\u8969\u896A\u896B\u896C\u896D\u896E\u896F\u8970"+
-            "\u8971\u8973\u8974\u8975\u8976\u8977\u8978\u8979"+
-            "\u897A\u897B\u897C\u897D\u8981\u8982\u8983\u8984"+
-            "\u8985\u8986\u8987\u8988\u8989\u898A\u898B\u898C"+
-            "\u898D\u898E\u898F\u8990\u8991\u8993\u8994\u8995"+
-            "\u8996\u8997\u8998\u8999\u899A\u899B\u899C\u899D"+
-            "\u89A1\u89A2\u89A3\u89A4\u89A5\u89A6\u89A7\u89A8"+
-            "\u89A9\u89AA\u89AB\u89AC\u89AD\u89AE\u89AF\u89B0"+
-            "\u89B1\u89B3\u89B4\u89B5\u89B6\u89B7\u89B8\u89B9"+
-            "\u89BA\u89BB\u89BC\u89BD\u89C1\u89C2\u89C3\u89C4"+
-            "\u89C5\u89C6\u89C7\u89C8\u89C9\u89CA\u89CB\u89CC"+
-            "\u89CD\u89CE\u89CF\u89D0\u89D1\u89D3\u89D4\u89D5"+
-            "\u89D6\u89D7\u89D8\u89D9\u89DA\u89DB\u89DC\u89DD"+
-            "\u89E1\u89E2\u89E3\u89E4\u89E5\u89E6\u89E7\u89E8"+
-            "\u89E9\u89EA\u89EB\u89EC\u89ED\u89EE\u89EF\u89F0"+
-            "\u89F1\u89F3\u89F4\u89F5\u89F6\u89F7\u89F8\u89F9"+
-            "\u89FA\u89FB\u89FC\u89FD\u8A41\u8A42\u8A43\u8A44"+
-            "\u8A45\u8A46\u8A47\u8A48\u8A49\u8A4A\u8A4B\u8A4C"+
-            "\u8A4D\u8A4E\u8A4F\u8A50\u8A51\u8A53\u8A54\u8A55"+
-            "\u8A56\u8A57\u8A58\u8A59\u8A5A\u8A5B\u8A5C\u8A5D"+
-            "\u8A61\u8A62\u8A63\u8A64\u8A65\u8A66\u8A67\u8A68"+
-            "\u8A69\u8A6A\u8A6B\u8A6C\u8A6D\u8A6E\u8A6F\u8A70"+
-            "\u8A71\u8A73\u8A74\u8A75\u8A76\u8A77\u8A78\u8A79"+
-            "\u8A7A\u8A7B\u8A7C\u8A7D\u8A81\u8A82\u8A83\u8A84"+
-            "\u8A85\u8A86\u8A87\u8A88\u8A89\u8A8A\u8A8B\u8A8C"+
-            "\u8A8D\u8A8E\u8A8F\u8A90\u8A91\u8A93\u8A94\u8A95"+
-            "\u8A96\u8A97\u8A98\u8A99\u8A9A\u8A9B\u8A9C\u8A9D"+
-            "\u8AA1\u8AA2\u8AA3\u8AA4\u8AA5\u8AA6\u8AA7\u8AA8"+
-            "\u8AA9\u8AAA\u8AAB\u8AAC\u8AAD\u8AAE\u8AAF\u8AB0"+
-            "\u8AB1\u8AB3\u8AB4\u8AB5\u8AB6\u8AB7\u8AB8\u8AB9"+
-            "\u8ABA\u8ABB\u8ABC\u8ABD\u8AC1\u8AC2\u8AC3\u8AC4"+
-            "\u8AC5\u8AC6\u8AC7\u8AC8\u8AC9\u8ACA\u8ACB\u8ACC"+
-            "\u8ACD\u8ACE\u8ACF\u8AD0\u8AD1\u8AD3\u8AD4\u8AD5"+
-            "\u8AD6\u8AD7\u8AD8\u8AD9\u8ADA\u8ADB\u8ADC\u8ADD"+
-            "\u8AE1\u8AE2\u8AE3\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8"+
-            "\u8AE9\u8AEA\u8AEB\u8AEC\u8AED\u8AEE\u8AEF\u8AF0"+
-            "\u8AF1\u8AF3\u8AF4\u8AF5\u8AF6\u8AF7\u8AF8\u8AF9"+
-            "\u8AFA\u8AFB\u8AFC\u8AFD\u8B41\u8B42\u8B43\u8B44"+
-            "\u8B45\u8B46\u8B47\u8B48\u8B49\u8B4A\u8B4B\u8B4C"+
-            "\u8B4D\u8B4E\u8B4F\u8B50\u8B51\u8B53\u8B54\u8B55"+
-            "\u8B56\u8B57\u8B58\u8B59\u8B5A\u8B5B\u8B5C\u8B5D"+
-            "\u8B61\u8B62\u8B63\u8B64\u8B65\u8B66\u8B67\u8B68"+
-            "\u8B69\u8B6A\u8B6B\u8B6C\u8B6D\u8B6E\u8B6F\u8B70"+
-            "\u8B71\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78\u8B79"+
-            "\u8B7A\u8B7B\u8B7C\u8B7D\u8B81\u8B82\u8B83\u8B84"+
-            "\u8B85\u8B86\u8B87\u8B88\u8B89\u8B8A\u8B8B\u8B8C"+
-            "\u8B8D\u8B8E\u8B8F\u8B90\u8B91\u8B93\u8B94\u8B95"+
-            "\u8B96\u8B97\u8B98\u8B99\u8B9A\u8B9B\u8B9C\u8B9D"+
-            "\u8BA1\u8BA2\u8BA3\u8BA4\u8BA5\u8BA6\u8BA7\u8BA8"+
-            "\u8BA9\u8BAA\u8BAB\u8BAC\u8BAD\u8BAE\u8BAF\u8BB0"+
-            "\u8BB1\u8BB3\u8BB4\u8BB5\u8BB6\u8BB7\u8BB8\u8BB9"+
-            "\u8BBA\u8BBB\u8BBC\u8BBD\u8C61\u8C62\u8C63\u8C64"+
-            "\u8C65\u8C66\u8C67\u8C68\u8C69\u8C6A\u8C6B\u8C6C"+
-            "\u8C6D\u8C6E\u8C6F\u8C70\u8C71\u8C73\u8C74\u8C75"+
-            "\u8C76\u8C77\u8C78\u8C79\u8C7A\u8C7B\u8C7C\u8C7D"+
-            "\u8C81\u8C82\u8C83\u8C84\u8C85\u8C86\u8C87\u8C88"+
-            "\u8C89\u8C8A\u8C8B\u8C8C\u8C8D\u8C8E\u8C8F\u8C90"+
-            "\u8C91\u8C93\u8C94\u8C95\u8C96\u8C97\u8C98\u8C99"+
-            "\u8C9A\u8C9B\u8C9C\u8C9D\u8CA1\u8CA2\u8CA3\u8CA4"+
-            "\u8CA5\u8CA6\u8CA7\u8CA8\u8CA9\u8CAA\u8CAB\u8CAC"+
-            "\u8CAD\u8CAE\u8CAF\u8CB0\u8CB1\u8CB3\u8CB4\u8CB5"+
-            "\u8CB6\u8CB7\u8CB8\u8CB9\u8CBA\u8CBB\u8CBC\u8CBD"+
-            "\u8CC1\u8CC2\u8CC3\u8CC4\u8CC5\u8CC6\u8CC7\u8CC8"+
-            "\u8CC9\u8CCA\u8CCB\u8CCC\u8CCD\u8CCE\u8CCF\u8CD0"+
-            "\u8CD1\u8CD3\u8CD4\u8CD5\u8CD6\u8CD7\u8CD8\u8CD9"+
-            "\u8CDA\u8CDB\u8CDC\u8CDD\u8CE1\u8CE2\u8CE3\u8CE4"+
-            "\u8CE5\u8CE6\u8CE7\u8CE8\u8CE9\u8CEA\u8CEB\u8CEC"+
-            "\u8CED\u8CEE\u8CEF\u8CF0\u8CF1\u8CF3\u8CF4\u8CF5"+
-            "\u8CF6\u8CF7\u8CF8\u8CF9\u8CFA\u8CFB\u8CFC\u8CFD"+
-            "\u8D41\u8D42\u8D43\u8D44\u8D45\u8D46\u8D47\u8D48"+
-            "\u8D49\u8D4A\u8D4B\u8D4C\u8D4D\u8D4E\u8D4F\u8D50"+
-            "\u8D51\u8D53\u8D54\u8D55\u8D56\u8D57\u8D58\u8D59"+
-            "\u8D5A\u8D5B\u8D5C\u8D5D\u8D61\u8D62\u8D63\u8D64"+
-            "\u8D65\u8D66\u8D67\u8D68\u8D69\u8D6A\u8D6B\u8D6C"+
-            "\u8D6D\u8D6E\u8D6F\u8D70\u8D71\u8D73\u8D74\u8D75"+
-            "\u8D76\u8D77\u8D78\u8D79\u8D7A\u8D7B\u8D7C\u8D7D"+
-            "\u8D81\u8D82\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88"+
-            "\u8D89\u8D8A\u8D8B\u8D8C\u8D8D\u8D8E\u8D8F\u8D90"+
-            "\u8D91\u8D93\u8D94\u8D95\u8D96\u8D97\u8D98\u8D99"+
-            "\u8D9A\u8D9B\u8D9C\u8D9D\u8DA1\u8DA2\u8DA3\u8DA4"+
-            "\u8DA5\u8DA6\u8DA7\u8DA8\u8DA9\u8DAA\u8DAB\u8DAC"+
-            "\u8DAD\u8DAE\u8DAF\u8DB0\u8DB1\u8DB3\u8DB4\u8DB5"+
-            "\u8DB6\u8DB7\u8DB8\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD"+
-            "\u8DC1\u8DC2\u8DC3\u8DC4\u8DC5\u8DC6\u8DC7\u8DC8"+
-            "\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD\u8DCE\u8DCF\u8DD0"+
-            "\u8DD1\u8DD3\u8DD4\u8DD5\u8DD6\u8DD7\u8DD8\u8DD9"+
-            "\u8DDA\u8DDB\u8DDC\u8DDD\u8DE1\u8DE2\u8DE3\u8DE4"+
-            "\u8DE5\u8DE6\u8DE7\u8DE8\u8DE9\u8DEA\u8DEB\u8DEC"+
-            "\u8DED\u8DEE\u8DEF\u8DF0\u8DF1\u8DF3\u8DF4\u8DF5"+
-            "\u8DF6\u8DF7\u8DF8\u8DF9\u8DFA\u8DFB\u8DFC\u8DFD"+
-            "\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46\u8E47\u8E48"+
-            "\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E\u8E4F\u8E50"+
-            "\u8E51\u8E53\u8E54\u8E55\u8E56\u8E57\u8E58\u8E59"+
-            "\u8E5A\u8E5B\u8E5C\u8E5D\u8E61\u8E62\u8E63\u8E64"+
-            "\u8E65\u8E66\u8E67\u8E68\u8E69\u8E6A\u8E6B\u8E6C"+
-            "\u8E6D\u8E6E\u8E6F\u8E70\u8E71\u8E73\u8E74\u8E75"+
-            "\u8E76\u8E77\u8E78\u8E79\u8E7A\u8E7B\u8E7C\u8E7D"+
-            "\u8E81\u8E82\u8E83\u8E84\u8E85\u8E86\u8E87\u8E88"+
-            "\u8E89\u8E8A\u8E8B\u8E8C\u8E8D\u8E8E\u8E8F\u8E90"+
-            "\u8E91\u8E93\u8E94\u8E95\u8E96\u8E97\u8E98\u8E99"+
-            "\u8E9A\u8E9B\u8E9C\u8E9D\u8EA1\u8EA2\u8EA3\u8EA4"+
-            "\u8EA5\u8EA6\u8EA7\u8EA8\u8EA9\u8EAA\u8EAB\u8EAC"+
-            "\u8EAD\u8EAE\u8EAF\u8EB0\u8EB1\u8EB3\u8EB4\u8EB5"+
-            "\u8EB6\u8EB7\u8EB8\u8EB9\u8EBA\u8EBB\u8EBC\u8EBD"+
-            "\u8EC1\u8EC2\u8EC3\u8EC4\u8EC5\u8EC6\u8EC7\u8EC8"+
-            "\u8EC9\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0"+
-            "\u8ED1\u8ED3\u8ED4\u8ED5\u8ED6\u8ED7\u8ED8\u8ED9"+
-            "\u8EDA\u8EDB\u8EDC\u8EDD\u8EE1\u8EE2\u8EE3\u8EE4"+
-            "\u8EE5\u8EE6\u8EE7\u8EE8\u8EE9\u8EEA\u8EEB\u8EEC"+
-            "\u8EED\u8EEE\u8EEF\u8EF0\u8EF1\u8EF3\u8EF4\u8EF5"+
-            "\u8EF6\u8EF7\u8EF8\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD"+
-            "\u8F41\u8F42\u8F43\u8F44\u8F45\u8F46\u8F47\u8F48"+
-            "\u8F49\u8F4A\u8F4B\u8F4C\u8F4D\u8F4E\u8F4F\u8F50"+
-            "\u8F51\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58\u8F59"+
-            "\u8F5A\u8F5B\u8F5C\u8F5D\u8F61\u8F62\u8F63\u8F64"+
-            "\u8F65\u8F66\u8F67\u8F68\u8F69\u8F6A\u8F6B\u8F6C"+
-            "\u8F6D\u8F6E\u8F6F\u8F70\u8F71\u8F73\u8F74\u8F75"+
-            "\u8F76\u8F77\u8F78\u8F79\u8F7A\u8F7B\u8F7C\u8F7D"+
-            "\u8F81\u8F82\u8F83\u8F84\u8F85\u8F86\u8F87\u8F88"+
-            "\u8F89\u8F8A\u8F8B\u8F8C\u8F8D\u8F8E\u8F8F\u8F90"+
-            "\u8F91\u8F93\u8F94\u8F95\u8F96\u8F97\u8F98\u8F99"+
-            "\u8F9A\u8F9B\u8F9C\u8F9D\u8FA1\u8FA2\u8FA3\u8FA4"+
-            "\u8FA5\u8FA6\u8FA7\u8FA8\u8FA9\u8FAA\u8FAB\u8FAC"+
-            "\u8FAD\u8FAE\u8FAF\u8FB0\u8FB1\u8FB3\u8FB4\u8FB5"+
-            "\u8FB6\u8FB7\u8FB8\u8FB9\u8FBA\u8FBB\u8FBC\u8FBD"+
-            "\u9061\u9062\u9063\u9064\u9065\u9066\u9067\u9068"+
-            "\u9069\u906A\u906B\u906C\u906D\u906E\u906F\u9070"+
-            "\u9071\u9073\u9074\u9075\u9076\u9077\u9078\u9079"+
-            "\u907A\u907B\u907C\u907D\u9081\u9082\u9083\u9084"+
-            "\u9085\u9086\u9087\u9088\u9089\u908A\u908B\u908C"+
-            "\u908D\u908E\u908F\u9090\u9091\u9093\u9094\u9095"+
-            "\u9096\u9097\u9098\u9099\u909A\u909B\u909C\u909D"+
-            "\u90A1\u90A2\u90A3\u90A4\u90A5\u90A6\u90A7\u90A8"+
-            "\u90A9\u90AA\u90AB\u90AC\u90AD\u90AE\u90AF\u90B0"+
-            "\u90B1\u90B3\u90B4\u90B5\u90B6\u90B7\u90B8\u90B9"+
-            "\u90BA\u90BB\u90BC\u90BD\u90C1\u90C2\u90C3\u90C4"+
-            "\u90C5\u90C6\u90C7\u90C8\u90C9\u90CA\u90CB\u90CC"+
-            "\u90CD\u90CE\u90CF\u90D0\u90D1\u90D3\u90D4\u90D5"+
-            "\u90D6\u90D7\u90D8\u90D9\u90DA\u90DB\u90DC\u90DD"+
-            "\u90E1\u90E2\u90E3\u90E4\u90E5\u90E6\u90E7\u90E8"+
-            "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
-            "\u90F1\u90F3\u90F4\u90F5\u90F6\u90F7\u90F8\u90F9"+
-            "\u90FA\u90FB\u90FC\u90FD\u9141\u9142\u9143\u9144"+
-            "\u9145\u9146\u9147\u9148\u9149\u914A\u914B\u914C"+
-            "\u914D\u914E\u914F\u9150\u9151\u9153\u9154\u9155"+
-            "\u9156\u9157\u9158\u9159\u915A\u915B\u915C\u915D"+
-            "\u9161\u9162\u9163\u9164\u9165\u9166\u9167\u9168"+
-            "\u9169\u916A\u916B\u916C\u916D\u916E\u916F\u9170"+
-            "\u9171\u9173\u9174\u9175\u9176\u9177\u9178\u9179"+
-            "\u917A\u917B\u917C\u917D\u9181\u9182\u9183\u9184"+
-            "\u9185\u9186\u9187\u9188\u9189\u918A\u918B\u918C"+
-            "\u918D\u918E\u918F\u9190\u9191\u9193\u9194\u9195"+
-            "\u9196\u9197\u9198\u9199\u919A\u919B\u919C\u919D"+
-            "\u91A1\u91A2\u91A3\u91A4\u91A5\u91A6\u91A7\u91A8"+
-            "\u91A9\u91AA\u91AB\u91AC\u91AD\u91AE\u91AF\u91B0"+
-            "\u91B1\u91B3\u91B4\u91B5\u91B6\u91B7\u91B8\u91B9"+
-            "\u91BA\u91BB\u91BC\u91BD\u91C1\u91C2\u91C3\u91C4"+
-            "\u91C5\u91C6\u91C7\u91C8\u91C9\u91CA\u91CB\u91CC"+
-            "\u91CD\u91CE\u91CF\u91D0\u91D1\u91D3\u91D4\u91D5"+
-            "\u91D6\u91D7\u91D8\u91D9\u91DA\u91DB\u91DC\u91DD"+
-            "\u91E1\u91E2\u91E3\u91E4\u91E5\u91E6\u91E7\u91E8"+
-            "\u91E9\u91EA\u91EB\u91EC\u91ED\u91EE\u91EF\u91F0"+
-            "\u91F1\u91F3\u91F4\u91F5\u91F6\u91F7\u91F8\u91F9"+
-            "\u91FA\u91FB\u91FC\u91FD\u9241\u9242\u9243\u9244"+
-            "\u9245\u9246\u9247\u9248\u9249\u924A\u924B\u924C"+
-            "\u924D\u924E\u924F\u9250\u9251\u9253\u9254\u9255"+
-            "\u9256\u9257\u9258\u9259\u925A\u925B\u925C\u925D"+
-            "\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268"+
-            "\u9269\u926A\u926B\u926C\u926D\u926E\u926F\u9270"+
-            "\u9271\u9273\u9274\u9275\u9276\u9277\u9278\u9279"+
-            "\u927A\u927B\u927C\u927D\u9281\u9282\u9283\u9284"+
-            "\u9285\u9286\u9287\u9288\u9289\u928A\u928B\u928C"+
-            "\u928D\u928E\u928F\u9290\u9291\u9293\u9294\u9295"+
-            "\u9296\u9297\u9298\u9299\u929A\u929B\u929C\u929D"+
-            "\u92A1\u92A2\u92A3\u92A4\u92A5\u92A6\u92A7\u92A8"+
-            "\u92A9\u92AA\u92AB\u92AC\u92AD\u92AE\u92AF\u92B0"+
-            "\u92B1\u92B3\u92B4\u92B5\u92B6\u92B7\u92B8\u92B9"+
-            "\u92BA\u92BB\u92BC\u92BD\u92C1\u92C2\u92C3\u92C4"+
-            "\u92C5\u92C6\u92C7\u92C8\u92C9\u92CA\u92CB\u92CC"+
-            "\u92CD\u92CE\u92CF\u92D0\u92D1\u92D3\u92D4\u92D5"+
-            "\u92D6\u92D7\u92D8\u92D9\u92DA\u92DB\u92DC\u92DD"+
-            "\u92E1\u92E2\u92E3\u92E4\u92E5\u92E6\u92E7\u92E8"+
-            "\u92E9\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
-            "\u92F1\u92F3\u92F4\u92F5\u92F6\u92F7\u92F8\u92F9"+
-            "\u92FA\u92FB\u92FC\u92FD\u9341\u9342\u9343\u9344"+
-            "\u9345\u9346\u9347\u9348\u9349\u934A\u934B\u934C"+
-            "\u934D\u934E\u934F\u9350\u9351\u9353\u9354\u9355"+
-            "\u9356\u9357\u9358\u9359\u935A\u935B\u935C\u935D"+
-            "\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368"+
-            "\u9369\u936A\u936B\u936C\u936D\u936E\u936F\u9370"+
-            "\u9371\u9373\u9374\u9375\u9376\u9377\u9378\u9379"+
-            "\u937A\u937B\u937C\u937D\u9381\u9382\u9383\u9384"+
-            "\u9385\u9386\u9387\u9388\u9389\u938A\u938B\u938C"+
-            "\u938D\u938E\u938F\u9390\u9391\u9393\u9394\u9395"+
-            "\u9396\u9397\u9398\u9399\u939A\u939B\u939C\u939D"+
-            "\u93A1\u93A2\u93A3\u93A4\u93A5\u93A6\u93A7\u93A8"+
-            "\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\u93AF\u93B0"+
-            "\u93B1\u93B3\u93B4\u93B5\u93B6\u93B7\u93B8\u93B9"+
-            "\u93BA\u93BB\u93BC\u93BD\u9461\u9462\u9463\u9464"+
-            "\u9465\u9466\u9467\u9468\u9469\u946A\u946B\u946C"+
-            "\u946D\u946E\u946F\u9470\u9471\u9473\u9474\u9475"+
-            "\u9476\u9477\u9478\u9479\u947A\u947B\u947C\u947D"+
-            "\u9481\u9482\u9483\u9484\u9485\u9486\u9487\u9488"+
-            "\u9489\u948A\u948B\u948C\u948D\u948E\u948F\u9490"+
-            "\u9491\u9493\u9494\u9495\u9496\u9497\u9498\u9499"+
-            "\u949A\u949B\u949C\u949D\u94A1\u94A2\u94A3\u94A4"+
-            "\u94A5\u94A6\u94A7\u94A8\u94A9\u94AA\u94AB\u94AC"+
-            "\u94AD\u94AE\u94AF\u94B0\u94B1\u94B3\u94B4\u94B5"+
-            "\u94B6\u94B7\u94B8\u94B9\u94BA\u94BB\u94BC\u94BD"+
-            "\u94C1\u94C2\u94C3\u94C4\u94C5\u94C6\u94C7\u94C8"+
-            "\u94C9\u94CA\u94CB\u94CC\u94CD\u94CE\u94CF\u94D0"+
-            "\u94D1\u94D3\u94D4\u94D5\u94D6\u94D7\u94D8\u94D9"+
-            "\u94DA\u94DB\u94DC\u94DD\u94E1\u94E2\u94E3\u94E4"+
-            "\u94E5\u94E6\u94E7\u94E8\u94E9\u94EA\u94EB\u94EC"+
-            "\u94ED\u94EE\u94EF\u94F0\u94F1\u94F3\u94F4\u94F5"+
-            "\u94F6\u94F7\u94F8\u94F9\u94FA\u94FB\u94FC\u94FD"+
-            "\u9541\u9542\u9543\u9544\u9545\u9546\u9547\u9548"+
-            "\u9549\u954A\u954B\u954C\u954D\u954E\u954F\u9550"+
-            "\u9551\u9553\u9554\u9555\u9556\u9557\u9558\u9559"+
-            "\u955A\u955B\u955C\u955D\u9561\u9562\u9563\u9564"+
-            "\u9565\u9566\u9567\u9568\u9569\u956A\u956B\u956C"+
-            "\u956D\u956E\u956F\u9570\u9571\u9573\u9574\u9575"+
-            "\u9576\u9577\u9578\u9579\u957A\u957B\u957C\u957D"+
-            "\u9581\u9582\u9583\u9584\u9585\u9586\u9587\u9588"+
-            "\u9589\u958A\u958B\u958C\u958D\u958E\u958F\u9590"+
-            "\u9591\u9593\u9594\u9595\u9596\u9597\u9598\u9599"+
-            "\u959A\u959B\u959C\u959D\u95A1\u95A2\u95A3\u95A4"+
-            "\u95A5\u95A6\u95A7\u95A8\u95A9\u95AA\u95AB\u95AC"+
-            "\u95AD\u95AE\u95AF\u95B0\u95B1\u95B3\u95B4\u95B5"+
-            "\u95B6\u95B7\u95B8\u95B9\u95BA\u95BB\u95BC\u95BD"+
-            "\u95C1\u95C2\u95C3\u95C4\u95C5\u95C6\u95C7\u95C8"+
-            "\u95C9\u95CA\u95CB\u95CC\u95CD\u95CE\u95CF\u95D0"+
-            "\u95D1\u95D3\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9"+
-            "\u95DA\u95DB\u95DC\u95DD\u95E1\u95E2\u95E3\u95E4"+
-            "\u95E5\u95E6\u95E7\u95E8\u95E9\u95EA\u95EB\u95EC"+
-            "\u95ED\u95EE\u95EF\u95F0\u95F1\u95F3\u95F4\u95F5"+
-            "\u95F6\u95F7\u95F8\u95F9\u95FA\u95FB\u95FC\u95FD"+
-            "\u9641\u9642\u9643\u9644\u9645\u9646\u9647\u9648"+
-            "\u9649\u964A\u964B\u964C\u964D\u964E\u964F\u9650"+
-            "\u9651\u9653\u9654\u9655\u9656\u9657\u9658\u9659"+
-            "\u965A\u965B\u965C\u965D\u9661\u9662\u9663\u9664"+
-            "\u9665\u9666\u9667\u9668\u9669\u966A\u966B\u966C"+
-            "\u966D\u966E\u966F\u9670\u9671\u9673\u9674\u9675"+
-            "\u9676\u9677\u9678\u9679\u967A\u967B\u967C\u967D"+
-            "\u9681\u9682\u9683\u9684\u9685\u9686\u9687\u9688"+
-            "\u9689\u968A\u968B\u968C\u968D\u968E\u968F\u9690"+
-            "\u9691\u9693\u9694\u9695\u9696\u9697\u9698\u9699"+
-            "\u969A\u969B\u969C\u969D\u96A1\u96A2\u96A3\u96A4"+
-            "\u96A5\u96A6\u96A7\u96A8\u96A9\u96AA\u96AB\u96AC"+
-            "\u96AD\u96AE\u96AF\u96B0\u96B1\u96B3\u96B4\u96B5"+
-            "\u96B6\u96B7\u96B8\u96B9\u96BA\u96BB\u96BC\u96BD"+
-            "\u96C1\u96C2\u96C3\u96C4\u96C5\u96C6\u96C7\u96C8"+
-            "\u96C9\u96CA\u96CB\u96CC\u96CD\u96CE\u96CF\u96D0"+
-            "\u96D1\u96D3\u96D4\u96D5\u96D6\u96D7\u96D8\u96D9"+
-            "\u96DA\u96DB\u96DC\u96DD\u96E1\u96E2\u96E3\u96E4"+
-            "\u96E5\u96E6\u96E7\u96E8\u96E9\u96EA\u96EB\u96EC"+
-            "\u96ED\u96EE\u96EF\u96F0\u96F1\u96F3\u96F4\u96F5"+
-            "\u96F6\u96F7\u96F8\u96F9\u96FA\u96FB\u96FC\u96FD"+
-            "\u9741\u9742\u9743\u9744\u9745\u9746\u9747\u9748"+
-            "\u9749\u974A\u974B\u974C\u974D\u974E\u974F\u9750"+
-            "\u9751\u9753\u9754\u9755\u9756\u9757\u9758\u9759"+
-            "\u975A\u975B\u975C\u975D\u9761\u9762\u9763\u9764"+
-            "\u9765\u9766\u9767\u9768\u9769\u976A\u976B\u976C"+
-            "\u976D\u976E\u976F\u9770\u9771\u9773\u9774\u9775"+
-            "\u9776\u9777\u9778\u9779\u977A\u977B\u977C\u977D"+
-            "\u9781\u9782\u9783\u9784\u9785\u9786\u9787\u9788"+
-            "\u9789\u978A\u978B\u978C\u978D\u978E\u978F\u9790"+
-            "\u9791\u9793\u9794\u9795\u9796\u9797\u9798\u9799"+
-            "\u979A\u979B\u979C\u979D\u97A1\u97A2\u97A3\u97A4"+
-            "\u97A5\u97A6\u97A7\u97A8\u97A9\u97AA\u97AB\u97AC"+
-            "\u97AD\u97AE\u97AF\u97B0\u97B1\u97B3\u97B4\u97B5"+
-            "\u97B6\u97B7\u97B8\u97B9\u97BA\u97BB\u97BC\u97BD"+
-            "\u9861\u9862\u9863\u9864\u9865\u9866\u9867\u9868"+
-            "\u9869\u986A\u986B\u986C\u986D\u986E\u986F\u9870"+
-            "\u9871\u9873\u9874\u9875\u9876\u9877\u9878\u9879"+
-            "\u987A\u987B\u987C\u987D\u9881\u9882\u9883\u9884"+
-            "\u9885\u9886\u9887\u9888\u9889\u988A\u988B\u988C"+
-            "\u988D\u988E\u988F\u9890\u9891\u9893\u9894\u9895"+
-            "\u9896\u9897\u9898\u9899\u989A\u989B\u989C\u989D"+
-            "\u98A1\u98A2\u98A3\u98A4\u98A5\u98A6\u98A7\u98A8"+
-            "\u98A9\u98AA\u98AB\u98AC\u98AD\u98AE\u98AF\u98B0"+
-            "\u98B1\u98B3\u98B4\u98B5\u98B6\u98B7\u98B8\u98B9"+
-            "\u98BA\u98BB\u98BC\u98BD\u98C1\u98C2\u98C3\u98C4"+
-            "\u98C5\u98C6\u98C7\u98C8\u98C9\u98CA\u98CB\u98CC"+
-            "\u98CD\u98CE\u98CF\u98D0\u98D1\u98D3\u98D4\u98D5"+
-            "\u98D6\u98D7\u98D8\u98D9\u98DA\u98DB\u98DC\u98DD"+
-            "\u98E1\u98E2\u98E3\u98E4\u98E5\u98E6\u98E7\u98E8"+
-            "\u98E9\u98EA\u98EB\u98EC\u98ED\u98EE\u98EF\u98F0"+
-            "\u98F1\u98F3\u98F4\u98F5\u98F6\u98F7\u98F8\u98F9"+
-            "\u98FA\u98FB\u98FC\u98FD\u9941\u9942\u9943\u9944"+
-            "\u9945\u9946\u9947\u9948\u9949\u994A\u994B\u994C"+
-            "\u994D\u994E\u994F\u9950\u9951\u9953\u9954\u9955"+
-            "\u9956\u9957\u9958\u9959\u995A\u995B\u995C\u995D"+
-            "\u9961\u9962\u9963\u9964\u9965\u9966\u9967\u9968"+
-            "\u9969\u996A\u996B\u996C\u996D\u996E\u996F\u9970"+
-            "\u9971\u9973\u9974\u9975\u9976\u9977\u9978\u9979"+
-            "\u997A\u997B\u997C\u997D\u9981\u9982\u9983\u9984"+
-            "\u9985\u9986\u9987\u9988\u9989\u998A\u998B\u998C"+
-            "\u998D\u998E\u998F\u9990\u9991\u9993\u9994\u9995"+
-            "\u9996\u9997\u9998\u9999\u999A\u999B\u999C\u999D"+
-            "\u99A1\u99A2\u99A3\u99A4\u99A5\u99A6\u99A7\u99A8"+
-            "\u99A9\u99AA\u99AB\u99AC\u99AD\u99AE\u99AF\u99B0"+
-            "\u99B1\u99B3\u99B4\u99B5\u99B6\u99B7\u99B8\u99B9"+
-            "\u99BA\u99BB\u99BC\u99BD\u99C1\u99C2\u99C3\u99C4"+
-            "\u99C5\u99C6\u99C7\u99C8\u99C9\u99CA\u99CB\u99CC"+
-            "\u99CD\u99CE\u99CF\u99D0\u99D1\u99D3\u99D4\u99D5"+
-            "\u99D6\u99D7\u99D8\u99D9\u99DA\u99DB\u99DC\u99DD"+
-            "\u99E1\u99E2\u99E3\u99E4\u99E5\u99E6\u99E7\u99E8"+
-            "\u99E9\u99EA\u99EB\u99EC\u99ED\u99EE\u99EF\u99F0"+
-            "\u99F1\u99F3\u99F4\u99F5\u99F6\u99F7\u99F8\u99F9"+
-            "\u99FA\u99FB\u99FC\u99FD\u9A41\u9A42\u9A43\u9A44"+
-            "\u9A45\u9A46\u9A47\u9A48\u9A49\u9A4A\u9A4B\u9A4C"+
-            "\u9A4D\u9A4E\u9A4F\u9A50\u9A51\u9A53\u9A54\u9A55"+
-            "\u9A56\u9A57\u9A58\u9A59\u9A5A\u9A5B\u9A5C\u9A5D"+
-            "\u9A61\u9A62\u9A63\u9A64\u9A65\u9A66\u9A67\u9A68"+
-            "\u9A69\u9A6A\u9A6B\u9A6C\u9A6D\u9A6E\u9A6F\u9A70"+
-            "\u9A71\u9A73\u9A74\u9A75\u9A76\u9A77\u9A78\u9A79"+
-            "\u9A7A\u9A7B\u9A7C\u9A7D\u9A81\u9A82\u9A83\u9A84"+
-            "\u9A85\u9A86\u9A87\u9A88\u9A89\u9A8A\u9A8B\u9A8C"+
-            "\u9A8D\u9A8E\u9A8F\u9A90\u9A91\u9A93\u9A94\u9A95"+
-            "\u9A96\u9A97\u9A98\u9A99\u9A9A\u9A9B\u9A9C\u9A9D"+
-            "\u9AA1\u9AA2\u9AA3\u9AA4\u9AA5\u9AA6\u9AA7\u9AA8"+
-            "\u9AA9\u9AAA\u9AAB\u9AAC\u9AAD\u9AAE\u9AAF\u9AB0"+
-            "\u9AB1\u9AB3\u9AB4\u9AB5\u9AB6\u9AB7\u9AB8\u9AB9"+
-            "\u9ABA\u9ABB\u9ABC\u9ABD\u9AC1\u9AC2\u9AC3\u9AC4"+
-            "\u9AC5\u9AC6\u9AC7\u9AC8\u9AC9\u9ACA\u9ACB\u9ACC"+
-            "\u9ACD\u9ACE\u9ACF\u9AD0\u9AD1\u9AD3\u9AD4\u9AD5"+
-            "\u9AD6\u9AD7\u9AD8\u9AD9\u9ADA\u9ADB\u9ADC\u9ADD"+
-            "\u9AE1\u9AE2\u9AE3\u9AE4\u9AE5\u9AE6\u9AE7\u9AE8"+
-            "\u9AE9\u9AEA\u9AEB\u9AEC\u9AED\u9AEE\u9AEF\u9AF0"+
-            "\u9AF1\u9AF3\u9AF4\u9AF5\u9AF6\u9AF7\u9AF8\u9AF9"+
-            "\u9AFA\u9AFB\u9AFC\u9AFD\u9B41\u9B42\u9B43\u9B44"+
-            "\u9B45\u9B46\u9B47\u9B48\u9B49\u9B4A\u9B4B\u9B4C"+
-            "\u9B4D\u9B4E\u9B4F\u9B50\u9B51\u9B53\u9B54\u9B55"+
-            "\u9B56\u9B57\u9B58\u9B59\u9B5A\u9B5B\u9B5C\u9B5D"+
-            "\u9B61\u9B62\u9B63\u9B64\u9B65\u9B66\u9B67\u9B68"+
-            "\u9B69\u9B6A\u9B6B\u9B6C\u9B6D\u9B6E\u9B6F\u9B70"+
-            "\u9B71\u9B73\u9B74\u9B75\u9B76\u9B77\u9B78\u9B79"+
-            "\u9B7A\u9B7B\u9B7C\u9B7D\u9B81\u9B82\u9B83\u9B84"+
-            "\u9B85\u9B86\u9B87\u9B88\u9B89\u9B8A\u9B8B\u9B8C"+
-            "\u9B8D\u9B8E\u9B8F\u9B90\u9B91\u9B93\u9B94\u9B95"+
-            "\u9B96\u9B97\u9B98\u9B99\u9B9A\u9B9B\u9B9C\u9B9D"+
-            "\u9BA1\u9BA2\u9BA3\u9BA4\u9BA5\u9BA6\u9BA7\u9BA8"+
-            "\u9BA9\u9BAA\u9BAB\u9BAC\u9BAD\u9BAE\u9BAF\u9BB0"+
-            "\u9BB1\u9BB3\u9BB4\u9BB5\u9BB6\u9BB7\u9BB8\u9BB9"+
-            "\u9BBA\u9BBB\u9BBC\u9BBD\u9C61\u9C62\u9C63\u9C64"+
-            "\u9C65\u9C66\u9C67\u9C68\u9C69\u9C6A\u9C6B\u9C6C"+
-            "\u9C6D\u9C6E\u9C6F\u9C70\u9C71\u9C73\u9C74\u9C75"+
-            "\u9C76\u9C77\u9C78\u9C79\u9C7A\u9C7B\u9C7C\u9C7D"+
-            "\u9C81\u9C82\u9C83\u9C84\u9C85\u9C86\u9C87\u9C88"+
-            "\u9C89\u9C8A\u9C8B\u9C8C\u9C8D\u9C8E\u9C8F\u9C90"+
-            "\u9C91\u9C93\u9C94\u9C95\u9C96\u9C97\u9C98\u9C99"+
-            "\u9C9A\u9C9B\u9C9C\u9C9D\u9CA1\u9CA2\u9CA3\u9CA4"+
-            "\u9CA5\u9CA6\u9CA7\u9CA8\u9CA9\u9CAA\u9CAB\u9CAC"+
-            "\u9CAD\u9CAE\u9CAF\u9CB0\u9CB1\u9CB3\u9CB4\u9CB5"+
-            "\u9CB6\u9CB7\u9CB8\u9CB9\u9CBA\u9CBB\u9CBC\u9CBD"+
-            "\u9CC1\u9CC2\u9CC3\u9CC4\u9CC5\u9CC6\u9CC7\u9CC8"+
-            "\u9CC9\u9CCA\u9CCB\u9CCC\u9CCD\u9CCE\u9CCF\u9CD0"+
-            "\u9CD1\u9CD3\u9CD4\u9CD5\u9CD6\u9CD7\u9CD8\u9CD9"+
-            "\u9CDA\u9CDB\u9CDC\u9CDD\u9CE1\u9CE2\u9CE3\u9CE4"+
-            "\u9CE5\u9CE6\u9CE7\u9CE8\u9CE9\u9CEA\u9CEB\u9CEC"+
-            "\u9CED\u9CEE\u9CEF\u9CF0\u9CF1\u9CF3\u9CF4\u9CF5"+
-            "\u9CF6\u9CF7\u9CF8\u9CF9\u9CFA\u9CFB\u9CFC\u9CFD"+
-            "\u9D41\u9D42\u9D43\u9D44\u9D45\u9D46\u9D47\u9D48"+
-            "\u9D49\u9D4A\u9D4B\u9D4C\u9D4D\u9D4E\u9D4F\u9D50"+
-            "\u9D51\u9D53\u9D54\u9D55\u9D56\u9D57\u9D58\u9D59"+
-            "\u9D5A\u9D5B\u9D5C\u9D5D\u9D61\u9D62\u9D63\u9D64"+
-            "\u9D65\u9D66\u9D67\u9D68\u9D69\u9D6A\u9D6B\u9D6C"+
-            "\u9D6D\u9D6E\u9D6F\u9D70\u9D71\u9D73\u9D74\u9D75"+
-            "\u9D76\u9D77\u9D78\u9D79\u9D7A\u9D7B\u9D7C\u9D7D"+
-            "\u9D81\u9D82\u9D83\u9D84\u9D85\u9D86\u9D87\u9D88"+
-            "\u9D89\u9D8A\u9D8B\u9D8C\u9D8D\u9D8E\u9D8F\u9D90"+
-            "\u9D91\u9D93\u9D94\u9D95\u9D96\u9D97\u9D98\u9D99"+
-            "\u9D9A\u9D9B\u9D9C\u9D9D\u9DA1\u9DA2\u9DA3\u9DA4"+
-            "\u9DA5\u9DA6\u9DA7\u9DA8\u9DA9\u9DAA\u9DAB\u9DAC"+
-            "\u9DAD\u9DAE\u9DAF\u9DB0\u9DB1\u9DB3\u9DB4\u9DB5"+
-            "\u9DB6\u9DB7\u9DB8\u9DB9\u9DBA\u9DBB\u9DBC\u9DBD"+
-            "\u9DC1\u9DC2\u9DC3\u9DC4\u9DC5\u9DC6\u9DC7\u9DC8"+
-            "\u9DC9\u9DCA\u9DCB\u9DCC\u9DCD\u9DCE\u9DCF\u9DD0"+
-            "\u9DD1\u9DD3\u9DD4\u9DD5\u9DD6\u9DD7\u9DD8\u9DD9"+
-            "\u9DDA\u9DDB\u9DDC\u9DDD\u9DE1\u9DE2\u9DE3\u9DE4"+
-            "\u9DE5\u9DE6\u9DE7\u9DE8\u9DE9\u9DEA\u9DEB\u9DEC"+
-            "\u9DED\u9DEE\u9DEF\u9DF0\u9DF1\u9DF3\u9DF4\u9DF5"+
-            "\u9DF6\u9DF7\u9DF8\u9DF9\u9DFA\u9DFB\u9DFC\u9DFD"+
-            "\u9E41\u9E42\u9E43\u9E44\u9E45\u9E46\u9E47\u9E48"+
-            "\u9E49\u9E4A\u9E4B\u9E4C\u9E4D\u9E4E\u9E4F\u9E50"+
-            "\u9E51\u9E53\u9E54\u9E55\u9E56\u9E57\u9E58\u9E59"+
-            "\u9E5A\u9E5B\u9E5C\u9E5D\u9E61\u9E62\u9E63\u9E64"+
-            "\u9E65\u9E66\u9E67\u9E68\u9E69\u9E6A\u9E6B\u9E6C"+
-            "\u9E6D\u9E6E\u9E6F\u9E70\u9E71\u9E73\u9E74\u9E75"+
-            "\u9E76\u9E77\u9E78\u9E79\u9E7A\u9E7B\u9E7C\u9E7D"+
-            "\u9E81\u9E82\u9E83\u9E84\u9E85\u9E86\u9E87\u9E88"+
-            "\u9E89\u9E8A\u9E8B\u9E8C\u9E8D\u9E8E\u9E8F\u9E90"+
-            "\u9E91\u9E93\u9E94\u9E95\u9E96\u9E97\u9E98\u9E99";
-
-        private final static String innerIndex7=
-            "\u9E9A\u9E9B\u9E9C\u9E9D\u9EA1\u9EA2\u9EA3\u9EA4"+
-            "\u9EA5\u9EA6\u9EA7\u9EA8\u9EA9\u9EAA\u9EAB\u9EAC"+
-            "\u9EAD\u9EAE\u9EAF\u9EB0\u9EB1\u9EB3\u9EB4\u9EB5"+
-            "\u9EB6\u9EB7\u9EB8\u9EB9\u9EBA\u9EBB\u9EBC\u9EBD"+
-            "\u9EC1\u9EC2\u9EC3\u9EC4\u9EC5\u9EC6\u9EC7\u9EC8"+
-            "\u9EC9\u9ECA\u9ECB\u9ECC\u9ECD\u9ECE\u9ECF\u9ED0"+
-            "\u9ED1\u9ED3\u9ED4\u9ED5\u9ED6\u9ED7\u9ED8\u9ED9"+
-            "\u9EDA\u9EDB\u9EDC\u9EDD\u9EE1\u9EE2\u9EE3\u9EE4"+
-            "\u9EE5\u9EE6\u9EE7\u9EE8\u9EE9\u9EEA\u9EEB\u9EEC"+
-            "\u9EED\u9EEE\u9EEF\u9EF0\u9EF1\u9EF3\u9EF4\u9EF5"+
-            "\u9EF6\u9EF7\u9EF8\u9EF9\u9EFA\u9EFB\u9EFC\u9EFD"+
-            "\u9F41\u9F42\u9F43\u9F44\u9F45\u9F46\u9F47\u9F48"+
-            "\u9F49\u9F4A\u9F4B\u9F4C\u9F4D\u9F4E\u9F4F\u9F50"+
-            "\u9F51\u9F53\u9F54\u9F55\u9F56\u9F57\u9F58\u9F59"+
-            "\u9F5A\u9F5B\u9F5C\u9F5D\u9F61\u9F62\u9F63\u9F64"+
-            "\u9F65\u9F66\u9F67\u9F68\u9F69\u9F6A\u9F6B\u9F6C"+
-            "\u9F6D\u9F6E\u9F6F\u9F70\u9F71\u9F73\u9F74\u9F75"+
-            "\u9F76\u9F77\u9F78\u9F79\u9F7A\u9F7B\u9F7C\u9F7D"+
-            "\u9F81\u9F82\u9F83\u9F84\u9F85\u9F86\u9F87\u9F88"+
-            "\u9F89\u9F8A\u9F8B\u9F8C\u9F8D\u9F8E\u9F8F\u9F90"+
-            "\u9F91\u9F93\u9F94\u9F95\u9F96\u9F97\u9F98\u9F99"+
-            "\u9F9A\u9F9B\u9F9C\u9F9D\u9FA1\u9FA2\u9FA3\u9FA4"+
-            "\u9FA5\u9FA6\u9FA7\u9FA8\u9FA9\u9FAA\u9FAB\u9FAC"+
-            "\u9FAD\u9FAE\u9FAF\u9FB0\u9FB1\u9FB3\u9FB4\u9FB5"+
-            "\u9FB6\u9FB7\u9FB8\u9FB9\u9FBA\u9FBB\u9FBC\u9FBD"+
-            "\uA061\uA062\uA063\uA064\uA065\uA066\uA067\uA068"+
-            "\uA069\uA06A\uA06B\uA06C\uA06D\uA06E\uA06F\uA070"+
-            "\uA071\uA073\uA074\uA075\uA076\uA077\uA078\uA079"+
-            "\uA07A\uA07B\uA07C\uA07D\uA081\uA082\uA083\uA084"+
-            "\uA085\uA086\uA087\uA088\uA089\uA08A\uA08B\uA08C"+
-            "\uA08D\uA08E\uA08F\uA090\uA091\uA093\uA094\uA095"+
-            "\uA096\uA097\uA098\uA099\uA09A\uA09B\uA09C\uA09D"+
-            "\uA0A1\uA0A2\uA0A3\uA0A4\uA0A5\uA0A6\uA0A7\uA0A8"+
-            "\uA0A9\uA0AA\uA0AB\uA0AC\uA0AD\uA0AE\uA0AF\uA0B0"+
-            "\uA0B1\uA0B3\uA0B4\uA0B5\uA0B6\uA0B7\uA0B8\uA0B9"+
-            "\uA0BA\uA0BB\uA0BC\uA0BD\uA0C1\uA0C2\uA0C3\uA0C4"+
-            "\uA0C5\uA0C6\uA0C7\uA0C8\uA0C9\uA0CA\uA0CB\uA0CC"+
-            "\uA0CD\uA0CE\uA0CF\uA0D0\uA0D1\uA0D3\uA0D4\uA0D5"+
-            "\uA0D6\uA0D7\uA0D8\uA0D9\uA0DA\uA0DB\uA0DC\uA0DD"+
-            "\uA0E1\uA0E2\uA0E3\uA0E4\uA0E5\uA0E6\uA0E7\uA0E8"+
-            "\uA0E9\uA0EA\uA0EB\uA0EC\uA0ED\uA0EE\uA0EF\uA0F0"+
-            "\uA0F1\uA0F3\uA0F4\uA0F5\uA0F6\uA0F7\uA0F8\uA0F9"+
-            "\uA0FA\uA0FB\uA0FC\uA0FD\uA141\uA142\uA143\uA144"+
-            "\uA145\uA146\uA147\uA148\uA149\uA14A\uA14B\uA14C"+
-            "\uA14D\uA14E\uA14F\uA150\uA151\uA153\uA154\uA155"+
-            "\uA156\uA157\uA158\uA159\uA15A\uA15B\uA15C\uA15D"+
-            "\uA161\uA162\uA163\uA164\uA165\uA166\uA167\uA168"+
-            "\uA169\uA16A\uA16B\uA16C\uA16D\uA16E\uA16F\uA170"+
-            "\uA171\uA173\uA174\uA175\uA176\uA177\uA178\uA179"+
-            "\uA17A\uA17B\uA17C\uA17D\uA181\uA182\uA183\uA184"+
-            "\uA185\uA186\uA187\uA188\uA189\uA18A\uA18B\uA18C"+
-            "\uA18D\uA18E\uA18F\uA190\uA191\uA193\uA194\uA195"+
-            "\uA196\uA197\uA198\uA199\uA19A\uA19B\uA19C\uA19D"+
-            "\uA1A1\uA1A2\uA1A3\uA1A4\uA1A5\uA1A6\uA1A7\uA1A8"+
-            "\uA1A9\uA1AA\uA1AB\uA1AC\uA1AD\uA1AE\uA1AF\uA1B0"+
-            "\uA1B1\uA1B3\uA1B4\uA1B5\uA1B6\uA1B7\uA1B8\uA1B9"+
-            "\uA1BA\uA1BB\uA1BC\uA1BD\uA1C1\uA1C2\uA1C3\uA1C4"+
-            "\uA1C5\uA1C6\uA1C7\uA1C8\uA1C9\uA1CA\uA1CB\uA1CC"+
-            "\uA1CD\uA1CE\uA1CF\uA1D0\uA1D1\uA1D3\uA1D4\uA1D5"+
-            "\uA1D6\uA1D7\uA1D8\uA1D9\uA1DA\uA1DB\uA1DC\uA1DD"+
-            "\uA1E1\uA1E2\uA1E3\uA1E4\uA1E5\uA1E6\uA1E7\uA1E8"+
-            "\uA1E9\uA1EA\uA1EB\uA1EC\uA1ED\uA1EE\uA1EF\uA1F0"+
-            "\uA1F1\uA1F3\uA1F4\uA1F5\uA1F6\uA1F7\uA1F8\uA1F9"+
-            "\uA1FA\uA1FB\uA1FC\uA1FD\uA241\uA242\uA243\uA244"+
-            "\uA245\uA246\uA247\uA248\uA249\uA24A\uA24B\uA24C"+
-            "\uA24D\uA24E\uA24F\uA250\uA251\uA253\uA254\uA255"+
-            "\uA256\uA257\uA258\uA259\uA25A\uA25B\uA25C\uA25D"+
-            "\uA261\uA262\uA263\uA264\uA265\uA266\uA267\uA268"+
-            "\uA269\uA26A\uA26B\uA26C\uA26D\uA26E\uA26F\uA270"+
-            "\uA271\uA273\uA274\uA275\uA276\uA277\uA278\uA279"+
-            "\uA27A\uA27B\uA27C\uA27D\uA281\uA282\uA283\uA284"+
-            "\uA285\uA286\uA287\uA288\uA289\uA28A\uA28B\uA28C"+
-            "\uA28D\uA28E\uA28F\uA290\uA291\uA293\uA294\uA295"+
-            "\uA296\uA297\uA298\uA299\uA29A\uA29B\uA29C\uA29D"+
-            "\uA2A1\uA2A2\uA2A3\uA2A4\uA2A5\uA2A6\uA2A7\uA2A8"+
-            "\uA2A9\uA2AA\uA2AB\uA2AC\uA2AD\uA2AE\uA2AF\uA2B0"+
-            "\uA2B1\uA2B3\uA2B4\uA2B5\uA2B6\uA2B7\uA2B8\uA2B9"+
-            "\uA2BA\uA2BB\uA2BC\uA2BD\uA2C1\uA2C2\uA2C3\uA2C4"+
-            "\uA2C5\uA2C6\uA2C7\uA2C8\uA2C9\uA2CA\uA2CB\uA2CC"+
-            "\uA2CD\uA2CE\uA2CF\uA2D0\uA2D1\uA2D3\uA2D4\uA2D5"+
-            "\uA2D6\uA2D7\uA2D8\uA2D9\uA2DA\uA2DB\uA2DC\uA2DD"+
-            "\uA2E1\uA2E2\uA2E3\uA2E4\uA2E5\uA2E6\uA2E7\uA2E8"+
-            "\uA2E9\uA2EA\uA2EB\uA2EC\uA2ED\uA2EE\uA2EF\uA2F0"+
-            "\uA2F1\uA2F3\uA2F4\uA2F5\uA2F6\uA2F7\uA2F8\uA2F9"+
-            "\uA2FA\uA2FB\uA2FC\uA2FD\uA341\uA342\uA343\uA344"+
-            "\uA345\uA346\uA347\uA348\uA349\uA34A\uA34B\uA34C"+
-            "\uA34D\uA34E\uA34F\uA350\uA351\uA353\uA354\uA355"+
-            "\uA356\uA357\uA358\uA359\uA35A\uA35B\uA35C\uA35D"+
-            "\uA361\uA362\uA363\uA364\uA365\uA366\uA367\uA368"+
-            "\uA369\uA36A\uA36B\uA36C\uA36D\uA36E\uA36F\uA370"+
-            "\uA371\uA373\uA374\uA375\uA376\uA377\uA378\uA379"+
-            "\uA37A\uA37B\uA37C\uA37D\uA381\uA382\uA383\uA384"+
-            "\uA385\uA386\uA387\uA388\uA389\uA38A\uA38B\uA38C"+
-            "\uA38D\uA38E\uA38F\uA390\uA391\uA393\uA394\uA395"+
-            "\uA396\uA397\uA398\uA399\uA39A\uA39B\uA39C\uA39D"+
-            "\uA3A1\uA3A2\uA3A3\uA3A4\uA3A5\uA3A6\uA3A7\uA3A8"+
-            "\uA3A9\uA3AA\uA3AB\uA3AC\uA3AD\uA3AE\uA3AF\uA3B0"+
-            "\uA3B1\uA3B3\uA3B4\uA3B5\uA3B6\uA3B7\uA3B8\uA3B9"+
-            "\uA3BA\uA3BB\uA3BC\uA3BD\uA461\uA462\uA463\uA464"+
-            "\uA465\uA466\uA467\uA468\uA469\uA46A\uA46B\uA46C"+
-            "\uA46D\uA46E\uA46F\uA470\uA471\uA473\uA474\uA475"+
-            "\uA476\uA477\uA478\uA479\uA47A\uA47B\uA47C\uA47D"+
-            "\uA481\uA482\uA483\uA484\uA485\uA486\uA487\uA488"+
-            "\uA489\uA48A\uA48B\uA48C\uA48D\uA48E\uA48F\uA490"+
-            "\uA491\uA493\uA494\uA495\uA496\uA497\uA498\uA499"+
-            "\uA49A\uA49B\uA49C\uA49D\uA4A1\uA4A2\uA4A3\uA4A4"+
-            "\uA4A5\uA4A6\uA4A7\uA4A8\uA4A9\uA4AA\uA4AB\uA4AC"+
-            "\uA4AD\uA4AE\uA4AF\uA4B0\uA4B1\uA4B3\uA4B4\uA4B5"+
-            "\uA4B6\uA4B7\uA4B8\uA4B9\uA4BA\uA4BB\uA4BC\uA4BD"+
-            "\uA4C1\uA4C2\uA4C3\uA4C4\uA4C5\uA4C6\uA4C7\uA4C8"+
-            "\uA4C9\uA4CA\uA4CB\uA4CC\uA4CD\uA4CE\uA4CF\uA4D0"+
-            "\uA4D1\uA4D3\uA4D4\uA4D5\uA4D6\uA4D7\uA4D8\uA4D9"+
-            "\uA4DA\uA4DB\uA4DC\uA4DD\uA4E1\uA4E2\uA4E3\uA4E4"+
-            "\uA4E5\uA4E6\uA4E7\uA4E8\uA4E9\uA4EA\uA4EB\uA4EC"+
-            "\uA4ED\uA4EE\uA4EF\uA4F0\uA4F1\uA4F3\uA4F4\uA4F5"+
-            "\uA4F6\uA4F7\uA4F8\uA4F9\uA4FA\uA4FB\uA4FC\uA4FD"+
-            "\uA541\uA542\uA543\uA544\uA545\uA546\uA547\uA548"+
-            "\uA549\uA54A\uA54B\uA54C\uA54D\uA54E\uA54F\uA550"+
-            "\uA551\uA553\uA554\uA555\uA556\uA557\uA558\uA559"+
-            "\uA55A\uA55B\uA55C\uA55D\uA561\uA562\uA563\uA564"+
-            "\uA565\uA566\uA567\uA568\uA569\uA56A\uA56B\uA56C"+
-            "\uA56D\uA56E\uA56F\uA570\uA571\uA573\uA574\uA575"+
-            "\uA576\uA577\uA578\uA579\uA57A\uA57B\uA57C\uA57D"+
-            "\uA581\uA582\uA583\uA584\uA585\uA586\uA587\uA588"+
-            "\uA589\uA58A\uA58B\uA58C\uA58D\uA58E\uA58F\uA590"+
-            "\uA591\uA593\uA594\uA595\uA596\uA597\uA598\uA599"+
-            "\uA59A\uA59B\uA59C\uA59D\uA5A1\uA5A2\uA5A3\uA5A4"+
-            "\uA5A5\uA5A6\uA5A7\uA5A8\uA5A9\uA5AA\uA5AB\uA5AC"+
-            "\uA5AD\uA5AE\uA5AF\uA5B0\uA5B1\uA5B3\uA5B4\uA5B5"+
-            "\uA5B6\uA5B7\uA5B8\uA5B9\uA5BA\uA5BB\uA5BC\uA5BD"+
-            "\uA5C1\uA5C2\uA5C3\uA5C4\uA5C5\uA5C6\uA5C7\uA5C8"+
-            "\uA5C9\uA5CA\uA5CB\uA5CC\uA5CD\uA5CE\uA5CF\uA5D0"+
-            "\uA5D1\uA5D3\uA5D4\uA5D5\uA5D6\uA5D7\uA5D8\uA5D9"+
-            "\uA5DA\uA5DB\uA5DC\uA5DD\uA5E1\uA5E2\uA5E3\uA5E4"+
-            "\uA5E5\uA5E6\uA5E7\uA5E8\uA5E9\uA5EA\uA5EB\uA5EC"+
-            "\uA5ED\uA5EE\uA5EF\uA5F0\uA5F1\uA5F3\uA5F4\uA5F5"+
-            "\uA5F6\uA5F7\uA5F8\uA5F9\uA5FA\uA5FB\uA5FC\uA5FD"+
-            "\uA641\uA642\uA643\uA644\uA645\uA646\uA647\uA648"+
-            "\uA649\uA64A\uA64B\uA64C\uA64D\uA64E\uA64F\uA650"+
-            "\uA651\uA653\uA654\uA655\uA656\uA657\uA658\uA659"+
-            "\uA65A\uA65B\uA65C\uA65D\uA661\uA662\uA663\uA664"+
-            "\uA665\uA666\uA667\uA668\uA669\uA66A\uA66B\uA66C"+
-            "\uA66D\uA66E\uA66F\uA670\uA671\uA673\uA674\uA675"+
-            "\uA676\uA677\uA678\uA679\uA67A\uA67B\uA67C\uA67D"+
-            "\uA681\uA682\uA683\uA684\uA685\uA686\uA687\uA688"+
-            "\uA689\uA68A\uA68B\uA68C\uA68D\uA68E\uA68F\uA690"+
-            "\uA691\uA693\uA694\uA695\uA696\uA697\uA698\uA699"+
-            "\uA69A\uA69B\uA69C\uA69D\uA6A1\uA6A2\uA6A3\uA6A4"+
-            "\uA6A5\uA6A6\uA6A7\uA6A8\uA6A9\uA6AA\uA6AB\uA6AC"+
-            "\uA6AD\uA6AE\uA6AF\uA6B0\uA6B1\uA6B3\uA6B4\uA6B5"+
-            "\uA6B6\uA6B7\uA6B8\uA6B9\uA6BA\uA6BB\uA6BC\uA6BD"+
-            "\uA6C1\uA6C2\uA6C3\uA6C4\uA6C5\uA6C6\uA6C7\uA6C8"+
-            "\uA6C9\uA6CA\uA6CB\uA6CC\uA6CD\uA6CE\uA6CF\uA6D0"+
-            "\uA6D1\uA6D3\uA6D4\uA6D5\uA6D6\uA6D7\uA6D8\uA6D9"+
-            "\uA6DA\uA6DB\uA6DC\uA6DD\uA6E1\uA6E2\uA6E3\uA6E4"+
-            "\uA6E5\uA6E6\uA6E7\uA6E8\uA6E9\uA6EA\uA6EB\uA6EC"+
-            "\uA6ED\uA6EE\uA6EF\uA6F0\uA6F1\uA6F3\uA6F4\uA6F5"+
-            "\uA6F6\uA6F7\uA6F8\uA6F9\uA6FA\uA6FB\uA6FC\uA6FD"+
-            "\uA741\uA742\uA743\uA744\uA745\uA746\uA747\uA748"+
-            "\uA749\uA74A\uA74B\uA74C\uA74D\uA74E\uA74F\uA750"+
-            "\uA751\uA753\uA754\uA755\uA756\uA757\uA758\uA759"+
-            "\uA75A\uA75B\uA75C\uA75D\uA761\uA762\uA763\uA764"+
-            "\uA765\uA766\uA767\uA768\uA769\uA76A\uA76B\uA76C"+
-            "\uA76D\uA76E\uA76F\uA770\uA771\uA773\uA774\uA775"+
-            "\uA776\uA777\uA778\uA779\uA77A\uA77B\uA77C\uA77D"+
-            "\uA781\uA782\uA783\uA784\uA785\uA786\uA787\uA788"+
-            "\uA789\uA78A\uA78B\uA78C\uA78D\uA78E\uA78F\uA790"+
-            "\uA791\uA793\uA794\uA795\uA796\uA797\uA798\uA799"+
-            "\uA79A\uA79B\uA79C\uA79D\uA7A1\uA7A2\uA7A3\uA7A4"+
-            "\uA7A5\uA7A6\uA7A7\uA7A8\uA7A9\uA7AA\uA7AB\uA7AC"+
-            "\uA7AD\uA7AE\uA7AF\uA7B0\uA7B1\uA7B3\uA7B4\uA7B5"+
-            "\uA7B6\uA7B7\uA7B8\uA7B9\uA7BA\uA7BB\uA7BC\uA7BD"+
-            "\uA861\uA862\uA863\uA864\uA865\uA866\uA867\uA868"+
-            "\uA869\uA86A\uA86B\uA86C\uA86D\uA86E\uA86F\uA870"+
-            "\uA871\uA873\uA874\uA875\uA876\uA877\uA878\uA879"+
-            "\uA87A\uA87B\uA87C\uA87D\uA881\uA882\uA883\uA884"+
-            "\uA885\uA886\uA887\uA888\uA889\uA88A\uA88B\uA88C"+
-            "\uA88D\uA88E\uA88F\uA890\uA891\uA893\uA894\uA895"+
-            "\uA896\uA897\uA898\uA899\uA89A\uA89B\uA89C\uA89D"+
-            "\uA8A1\uA8A2\uA8A3\uA8A4\uA8A5\uA8A6\uA8A7\uA8A8"+
-            "\uA8A9\uA8AA\uA8AB\uA8AC\uA8AD\uA8AE\uA8AF\uA8B0"+
-            "\uA8B1\uA8B3\uA8B4\uA8B5\uA8B6\uA8B7\uA8B8\uA8B9"+
-            "\uA8BA\uA8BB\uA8BC\uA8BD\uA8C1\uA8C2\uA8C3\uA8C4"+
-            "\uA8C5\uA8C6\uA8C7\uA8C8\uA8C9\uA8CA\uA8CB\uA8CC"+
-            "\uA8CD\uA8CE\uA8CF\uA8D0\uA8D1\uA8D3\uA8D4\uA8D5"+
-            "\uA8D6\uA8D7\uA8D8\uA8D9\uA8DA\uA8DB\uA8DC\uA8DD"+
-            "\uA8E1\uA8E2\uA8E3\uA8E4\uA8E5\uA8E6\uA8E7\uA8E8"+
-            "\uA8E9\uA8EA\uA8EB\uA8EC\uA8ED\uA8EE\uA8EF\uA8F0"+
-            "\uA8F1\uA8F3\uA8F4\uA8F5\uA8F6\uA8F7\uA8F8\uA8F9"+
-            "\uA8FA\uA8FB\uA8FC\uA8FD\uA941\uA942\uA943\uA944"+
-            "\uA945\uA946\uA947\uA948\uA949\uA94A\uA94B\uA94C"+
-            "\uA94D\uA94E\uA94F\uA950\uA951\uA953\uA954\uA955"+
-            "\uA956\uA957\uA958\uA959\uA95A\uA95B\uA95C\uA95D"+
-            "\uA961\uA962\uA963\uA964\uA965\uA966\uA967\uA968"+
-            "\uA969\uA96A\uA96B\uA96C\uA96D\uA96E\uA96F\uA970"+
-            "\uA971\uA973\uA974\uA975\uA976\uA977\uA978\uA979"+
-            "\uA97A\uA97B\uA97C\uA97D\uA981\uA982\uA983\uA984"+
-            "\uA985\uA986\uA987\uA988\uA989\uA98A\uA98B\uA98C"+
-            "\uA98D\uA98E\uA98F\uA990\uA991\uA993\uA994\uA995"+
-            "\uA996\uA997\uA998\uA999\uA99A\uA99B\uA99C\uA99D"+
-            "\uA9A1\uA9A2\uA9A3\uA9A4\uA9A5\uA9A6\uA9A7\uA9A8"+
-            "\uA9A9\uA9AA\uA9AB\uA9AC\uA9AD\uA9AE\uA9AF\uA9B0"+
-            "\uA9B1\uA9B3\uA9B4\uA9B5\uA9B6\uA9B7\uA9B8\uA9B9"+
-            "\uA9BA\uA9BB\uA9BC\uA9BD\uA9C1\uA9C2\uA9C3\uA9C4"+
-            "\uA9C5\uA9C6\uA9C7\uA9C8\uA9C9\uA9CA\uA9CB\uA9CC"+
-            "\uA9CD\uA9CE\uA9CF\uA9D0\uA9D1\uA9D3\uA9D4\uA9D5"+
-            "\uA9D6\uA9D7\uA9D8\uA9D9\uA9DA\uA9DB\uA9DC\uA9DD"+
-            "\uA9E1\uA9E2\uA9E3\uA9E4\uA9E5\uA9E6\uA9E7\uA9E8"+
-            "\uA9E9\uA9EA\uA9EB\uA9EC\uA9ED\uA9EE\uA9EF\uA9F0"+
-            "\uA9F1\uA9F3\uA9F4\uA9F5\uA9F6\uA9F7\uA9F8\uA9F9"+
-            "\uA9FA\uA9FB\uA9FC\uA9FD\uAA41\uAA42\uAA43\uAA44"+
-            "\uAA45\uAA46\uAA47\uAA48\uAA49\uAA4A\uAA4B\uAA4C"+
-            "\uAA4D\uAA4E\uAA4F\uAA50\uAA51\uAA53\uAA54\uAA55"+
-            "\uAA56\uAA57\uAA58\uAA59\uAA5A\uAA5B\uAA5C\uAA5D"+
-            "\uAA61\uAA62\uAA63\uAA64\uAA65\uAA66\uAA67\uAA68"+
-            "\uAA69\uAA6A\uAA6B\uAA6C\uAA6D\uAA6E\uAA6F\uAA70"+
-            "\uAA71\uAA73\uAA74\uAA75\uAA76\uAA77\uAA78\uAA79"+
-            "\uAA7A\uAA7B\uAA7C\uAA7D\uAA81\uAA82\uAA83\uAA84"+
-            "\uAA85\uAA86\uAA87\uAA88\uAA89\uAA8A\uAA8B\uAA8C"+
-            "\uAA8D\uAA8E\uAA8F\uAA90\uAA91\uAA93\uAA94\uAA95"+
-            "\uAA96\uAA97\uAA98\uAA99\uAA9A\uAA9B\uAA9C\uAA9D"+
-            "\uAAA1\uAAA2\uAAA3\uAAA4\uAAA5\uAAA6\uAAA7\uAAA8"+
-            "\uAAA9\uAAAA\uAAAB\uAAAC\uAAAD\uAAAE\uAAAF\uAAB0"+
-            "\uAAB1\uAAB3\uAAB4\uAAB5\uAAB6\uAAB7\uAAB8\uAAB9"+
-            "\uAABA\uAABB\uAABC\uAABD\uAAC1\uAAC2\uAAC3\uAAC4"+
-            "\uAAC5\uAAC6\uAAC7\uAAC8\uAAC9\uAACA\uAACB\uAACC"+
-            "\uAACD\uAACE\uAACF\uAAD0\uAAD1\uAAD3\uAAD4\uAAD5"+
-            "\uAAD6\uAAD7\uAAD8\uAAD9\uAADA\uAADB\uAADC\uAADD"+
-            "\uAAE1\uAAE2\uAAE3\uAAE4\uAAE5\uAAE6\uAAE7\uAAE8"+
-            "\uAAE9\uAAEA\uAAEB\uAAEC\uAAED\uAAEE\uAAEF\uAAF0"+
-            "\uAAF1\uAAF3\uAAF4\uAAF5\uAAF6\uAAF7\uAAF8\uAAF9"+
-            "\uAAFA\uAAFB\uAAFC\uAAFD\uAB41\uAB42\uAB43\uAB44"+
-            "\uAB45\uAB46\uAB47\uAB48\uAB49\uAB4A\uAB4B\uAB4C"+
-            "\uAB4D\uAB4E\uAB4F\uAB50\uAB51\uAB53\uAB54\uAB55"+
-            "\uAB56\uAB57\uAB58\uAB59\uAB5A\uAB5B\uAB5C\uAB5D"+
-            "\uAB61\uAB62\uAB63\uAB64\uAB65\uAB66\uAB67\uAB68"+
-            "\uAB69\uAB6A\uAB6B\uAB6C\uAB6D\uAB6E\uAB6F\uAB70"+
-            "\uAB71\uAB73\uAB74\uAB75\uAB76\uAB77\uAB78\uAB79"+
-            "\uAB7A\uAB7B\uAB7C\uAB7D\uAB81\uAB82\uAB83\uAB84"+
-            "\uAB85\uAB86\uAB87\uAB88\uAB89\uAB8A\uAB8B\uAB8C"+
-            "\uAB8D\uAB8E\uAB8F\uAB90\uAB91\uAB93\uAB94\uAB95"+
-            "\uAB96\uAB97\uAB98\uAB99\uAB9A\uAB9B\uAB9C\uAB9D"+
-            "\uABA1\uABA2\uABA3\uABA4\uABA5\uABA6\uABA7\uABA8"+
-            "\uABA9\uABAA\uABAB\uABAC\uABAD\uABAE\uABAF\uABB0"+
-            "\uABB1\uABB3\uABB4\uABB5\uABB6\uABB7\uABB8\uABB9"+
-            "\uABBA\uABBB\uABBC\uABBD\uAC61\uAC62\uAC63\uAC64"+
-            "\uAC65\uAC66\uAC67\uAC68\uAC69\uAC6A\uAC6B\uAC6C"+
-            "\uAC6D\uAC6E\uAC6F\uAC70\uAC71\uAC73\uAC74\uAC75"+
-            "\uAC76\uAC77\uAC78\uAC79\uAC7A\uAC7B\uAC7C\uAC7D"+
-            "\uAC81\uAC82\uAC83\uAC84\uAC85\uAC86\uAC87\uAC88"+
-            "\uAC89\uAC8A\uAC8B\uAC8C\uAC8D\uAC8E\uAC8F\uAC90"+
-            "\uAC91\uAC93\uAC94\uAC95\uAC96\uAC97\uAC98\uAC99"+
-            "\uAC9A\uAC9B\uAC9C\uAC9D\uACA1\uACA2\uACA3\uACA4"+
-            "\uACA5\uACA6\uACA7\uACA8\uACA9\uACAA\uACAB\uACAC"+
-            "\uACAD\uACAE\uACAF\uACB0\uACB1\uACB3\uACB4\uACB5"+
-            "\uACB6\uACB7\uACB8\uACB9\uACBA\uACBB\uACBC\uACBD"+
-            "\uACC1\uACC2\uACC3\uACC4\uACC5\uACC6\uACC7\uACC8"+
-            "\uACC9\uACCA\uACCB\uACCC\uACCD\uACCE\uACCF\uACD0"+
-            "\uACD1\uACD3\uACD4\uACD5\uACD6\uACD7\uACD8\uACD9"+
-            "\uACDA\uACDB\uACDC\uACDD\uACE1\uACE2\uACE3\uACE4"+
-            "\uACE5\uACE6\uACE7\uACE8\uACE9\uACEA\uACEB\uACEC"+
-            "\uACED\uACEE\uACEF\uACF0\uACF1\uACF3\uACF4\uACF5"+
-            "\uACF6\uACF7\uACF8\uACF9\uACFA\uACFB\uACFC\uACFD"+
-            "\uAD41\uAD42\uAD43\uAD44\uAD45\uAD46\uAD47\uAD48"+
-            "\uAD49\uAD4A\uAD4B\uAD4C\uAD4D\uAD4E\uAD4F\uAD50"+
-            "\uAD51\uAD53\uAD54\uAD55\uAD56\uAD57\uAD58\uAD59"+
-            "\uAD5A\uAD5B\uAD5C\uAD5D\uAD61\uAD62\uAD63\uAD64"+
-            "\uAD65\uAD66\uAD67\uAD68\uAD69\uAD6A\uAD6B\uAD6C"+
-            "\uAD6D\uAD6E\uAD6F\uAD70\uAD71\uAD73\uAD74\uAD75"+
-            "\uAD76\uAD77\uAD78\uAD79\uAD7A\uAD7B\uAD7C\uAD7D"+
-            "\uAD81\uAD82\uAD83\uAD84\uAD85\uAD86\uAD87\uAD88"+
-            "\uAD89\uAD8A\uAD8B\uAD8C\uAD8D\uAD8E\uAD8F\uAD90"+
-            "\uAD91\uAD93\uAD94\uAD95\uAD96\uAD97\uAD98\uAD99"+
-            "\uAD9A\uAD9B\uAD9C\uAD9D\uADA1\uADA2\uADA3\uADA4"+
-            "\uADA5\uADA6\uADA7\uADA8\uADA9\uADAA\uADAB\uADAC"+
-            "\uADAD\uADAE\uADAF\uADB0\uADB1\uADB3\uADB4\uADB5"+
-            "\uADB6\uADB7\uADB8\uADB9\uADBA\uADBB\uADBC\uADBD"+
-            "\uADC1\uADC2\uADC3\uADC4\uADC5\uADC6\uADC7\uADC8"+
-            "\uADC9\uADCA\uADCB\uADCC\uADCD\uADCE\uADCF\uADD0"+
-            "\uADD1\uADD3\uADD4\uADD5\uADD6\uADD7\uADD8\uADD9"+
-            "\uADDA\uADDB\uADDC\uADDD\uADE1\uADE2\uADE3\uADE4"+
-            "\uADE5\uADE6\uADE7\uADE8\uADE9\uADEA\uADEB\uADEC"+
-            "\uADED\uADEE\uADEF\uADF0\uADF1\uADF3\uADF4\uADF5"+
-            "\uADF6\uADF7\uADF8\uADF9\uADFA\uADFB\uADFC\uADFD"+
-            "\uAE41\uAE42\uAE43\uAE44\uAE45\uAE46\uAE47\uAE48"+
-            "\uAE49\uAE4A\uAE4B\uAE4C\uAE4D\uAE4E\uAE4F\uAE50"+
-            "\uAE51\uAE53\uAE54\uAE55\uAE56\uAE57\uAE58\uAE59"+
-            "\uAE5A\uAE5B\uAE5C\uAE5D\uAE61\uAE62\uAE63\uAE64"+
-            "\uAE65\uAE66\uAE67\uAE68\uAE69\uAE6A\uAE6B\uAE6C"+
-            "\uAE6D\uAE6E\uAE6F\uAE70\uAE71\uAE73\uAE74\uAE75"+
-            "\uAE76\uAE77\uAE78\uAE79\uAE7A\uAE7B\uAE7C\uAE7D"+
-            "\uAE81\uAE82\uAE83\uAE84\uAE85\uAE86\uAE87\uAE88"+
-            "\uAE89\uAE8A\uAE8B\uAE8C\uAE8D\uAE8E\uAE8F\uAE90"+
-            "\uAE91\uAE93\uAE94\uAE95\uAE96\uAE97\uAE98\uAE99"+
-            "\uAE9A\uAE9B\uAE9C\uAE9D\uAEA1\uAEA2\uAEA3\uAEA4"+
-            "\uAEA5\uAEA6\uAEA7\uAEA8\uAEA9\uAEAA\uAEAB\uAEAC"+
-            "\uAEAD\uAEAE\uAEAF\uAEB0\uAEB1\uAEB3\uAEB4\uAEB5"+
-            "\uAEB6\uAEB7\uAEB8\uAEB9\uAEBA\uAEBB\uAEBC\uAEBD"+
-            "\uAEC1\uAEC2\uAEC3\uAEC4\uAEC5\uAEC6\uAEC7\uAEC8"+
-            "\uAEC9\uAECA\uAECB\uAECC\uAECD\uAECE\uAECF\uAED0"+
-            "\uAED1\uAED3\uAED4\uAED5\uAED6\uAED7\uAED8\uAED9"+
-            "\uAEDA\uAEDB\uAEDC\uAEDD\uAEE1\uAEE2\uAEE3\uAEE4"+
-            "\uAEE5\uAEE6\uAEE7\uAEE8\uAEE9\uAEEA\uAEEB\uAEEC"+
-            "\uAEED\uAEEE\uAEEF\uAEF0\uAEF1\uAEF3\uAEF4\uAEF5"+
-            "\uAEF6\uAEF7\uAEF8\uAEF9\uAEFA\uAEFB\uAEFC\uAEFD"+
-            "\uAF41\uAF42\uAF43\uAF44\uAF45\uAF46\uAF47\uAF48"+
-            "\uAF49\uAF4A\uAF4B\uAF4C\uAF4D\uAF4E\uAF4F\uAF50"+
-            "\uAF51\uAF53\uAF54\uAF55\uAF56\uAF57\uAF58\uAF59"+
-            "\uAF5A\uAF5B\uAF5C\uAF5D\uAF61\uAF62\uAF63\uAF64"+
-            "\uAF65\uAF66\uAF67\uAF68\uAF69\uAF6A\uAF6B\uAF6C"+
-            "\uAF6D\uAF6E\uAF6F\uAF70\uAF71\uAF73\uAF74\uAF75"+
-            "\uAF76\uAF77\uAF78\uAF79\uAF7A\uAF7B\uAF7C\uAF7D"+
-            "\uAF81\uAF82\uAF83\uAF84\uAF85\uAF86\uAF87\uAF88"+
-            "\uAF89\uAF8A\uAF8B\uAF8C\uAF8D\uAF8E\uAF8F\uAF90"+
-            "\uAF91\uAF93\uAF94\uAF95\uAF96\uAF97\uAF98\uAF99"+
-            "\uAF9A\uAF9B\uAF9C\uAF9D\uAFA1\uAFA2\uAFA3\uAFA4"+
-            "\uAFA5\uAFA6\uAFA7\uAFA8\uAFA9\uAFAA\uAFAB\uAFAC"+
-            "\uAFAD\uAFAE\uAFAF\uAFB0\uAFB1\uAFB3\uAFB4\uAFB5"+
-            "\uAFB6\uAFB7\uAFB8\uAFB9\uAFBA\uAFBB\uAFBC\uAFBD"+
-            "\uB061\uB062\uB063\uB064\uB065\uB066\uB067\uB068"+
-            "\uB069\uB06A\uB06B\uB06C\uB06D\uB06E\uB06F\uB070"+
-            "\uB071\uB073\uB074\uB075\uB076\uB077\uB078\uB079"+
-            "\uB07A\uB07B\uB07C\uB07D\uB081\uB082\uB083\uB084"+
-            "\uB085\uB086\uB087\uB088\uB089\uB08A\uB08B\uB08C"+
-            "\uB08D\uB08E\uB08F\uB090\uB091\uB093\uB094\uB095"+
-            "\uB096\uB097\uB098\uB099\uB09A\uB09B\uB09C\uB09D"+
-            "\uB0A1\uB0A2\uB0A3\uB0A4\uB0A5\uB0A6\uB0A7\uB0A8"+
-            "\uB0A9\uB0AA\uB0AB\uB0AC\uB0AD\uB0AE\uB0AF\uB0B0"+
-            "\uB0B1\uB0B3\uB0B4\uB0B5\uB0B6\uB0B7\uB0B8\uB0B9"+
-            "\uB0BA\uB0BB\uB0BC\uB0BD\uB0C1\uB0C2\uB0C3\uB0C4"+
-            "\uB0C5\uB0C6\uB0C7\uB0C8\uB0C9\uB0CA\uB0CB\uB0CC"+
-            "\uB0CD\uB0CE\uB0CF\uB0D0\uB0D1\uB0D3\uB0D4\uB0D5"+
-            "\uB0D6\uB0D7\uB0D8\uB0D9\uB0DA\uB0DB\uB0DC\uB0DD"+
-            "\uB0E1\uB0E2\uB0E3\uB0E4\uB0E5\uB0E6\uB0E7\uB0E8"+
-            "\uB0E9\uB0EA\uB0EB\uB0EC\uB0ED\uB0EE\uB0EF\uB0F0"+
-            "\uB0F1\uB0F3\uB0F4\uB0F5\uB0F6\uB0F7\uB0F8\uB0F9"+
-            "\uB0FA\uB0FB\uB0FC\uB0FD\uB141\uB142\uB143\uB144"+
-            "\uB145\uB146\uB147\uB148\uB149\uB14A\uB14B\uB14C"+
-            "\uB14D\uB14E\uB14F\uB150\uB151\uB153\uB154\uB155"+
-            "\uB156\uB157\uB158\uB159\uB15A\uB15B\uB15C\uB15D"+
-            "\uB161\uB162\uB163\uB164\uB165\uB166\uB167\uB168"+
-            "\uB169\uB16A\uB16B\uB16C\uB16D\uB16E\uB16F\uB170"+
-            "\uB171\uB173\uB174\uB175\uB176\uB177\uB178\uB179"+
-            "\uB17A\uB17B\uB17C\uB17D\uB181\uB182\uB183\uB184"+
-            "\uB185\uB186\uB187\uB188\uB189\uB18A\uB18B\uB18C"+
-            "\uB18D\uB18E\uB18F\uB190\uB191\uB193\uB194\uB195"+
-            "\uB196\uB197\uB198\uB199\uB19A\uB19B\uB19C\uB19D"+
-            "\uB1A1\uB1A2\uB1A3\uB1A4\uB1A5\uB1A6\uB1A7\uB1A8"+
-            "\uB1A9\uB1AA\uB1AB\uB1AC\uB1AD\uB1AE\uB1AF\uB1B0"+
-            "\uB1B1\uB1B3\uB1B4\uB1B5\uB1B6\uB1B7\uB1B8\uB1B9"+
-            "\uB1BA\uB1BB\uB1BC\uB1BD\uB1C1\uB1C2\uB1C3\uB1C4"+
-            "\uB1C5\uB1C6\uB1C7\uB1C8\uB1C9\uB1CA\uB1CB\uB1CC"+
-            "\uB1CD\uB1CE\uB1CF\uB1D0\uB1D1\uB1D3\uB1D4\uB1D5"+
-            "\uB1D6\uB1D7\uB1D8\uB1D9\uB1DA\uB1DB\uB1DC\uB1DD"+
-            "\uB1E1\uB1E2\uB1E3\uB1E4\uB1E5\uB1E6\uB1E7\uB1E8"+
-            "\uB1E9\uB1EA\uB1EB\uB1EC\uB1ED\uB1EE\uB1EF\uB1F0"+
-            "\uB1F1\uB1F3\uB1F4\uB1F5\uB1F6\uB1F7\uB1F8\uB1F9"+
-            "\uB1FA\uB1FB\uB1FC\uB1FD\uB241\uB242\uB243\uB244"+
-            "\uB245\uB246\uB247\uB248\uB249\uB24A\uB24B\uB24C"+
-            "\uB24D\uB24E\uB24F\uB250\uB251\uB253\uB254\uB255"+
-            "\uB256\uB257\uB258\uB259\uB25A\uB25B\uB25C\uB25D"+
-            "\uB261\uB262\uB263\uB264\uB265\uB266\uB267\uB268"+
-            "\uB269\uB26A\uB26B\uB26C\uB26D\uB26E\uB26F\uB270"+
-            "\uB271\uB273\uB274\uB275\uB276\uB277\uB278\uB279"+
-            "\uB27A\uB27B\uB27C\uB27D\uB281\uB282\uB283\uB284"+
-            "\uB285\uB286\uB287\uB288\uB289\uB28A\uB28B\uB28C"+
-            "\uB28D\uB28E\uB28F\uB290\uB291\uB293\uB294\uB295"+
-            "\uB296\uB297\uB298\uB299\uB29A\uB29B\uB29C\uB29D"+
-            "\uB2A1\uB2A2\uB2A3\uB2A4\uB2A5\uB2A6\uB2A7\uB2A8"+
-            "\uB2A9\uB2AA\uB2AB\uB2AC\uB2AD\uB2AE\uB2AF\uB2B0"+
-            "\uB2B1\uB2B3\uB2B4\uB2B5\uB2B6\uB2B7\uB2B8\uB2B9"+
-            "\uB2BA\uB2BB\uB2BC\uB2BD\uB2C1\uB2C2\uB2C3\uB2C4"+
-            "\uB2C5\uB2C6\uB2C7\uB2C8\uB2C9\uB2CA\uB2CB\uB2CC"+
-            "\uB2CD\uB2CE\uB2CF\uB2D0\uB2D1\uB2D3\uB2D4\uB2D5"+
-            "\uB2D6\uB2D7\uB2D8\uB2D9\uB2DA\uB2DB\uB2DC\uB2DD"+
-            "\uB2E1\uB2E2\uB2E3\uB2E4\uB2E5\uB2E6\uB2E7\uB2E8"+
-            "\uB2E9\uB2EA\uB2EB\uB2EC\uB2ED\uB2EE\uB2EF\uB2F0"+
-            "\uB2F1\uB2F3\uB2F4\uB2F5\uB2F6\uB2F7\uB2F8\uB2F9"+
-            "\uB2FA\uB2FB\uB2FC\uB2FD\uB341\uB342\uB343\uB344"+
-            "\uB345\uB346\uB347\uB348\uB349\uB34A\uB34B\uB34C"+
-            "\uB34D\uB34E\uB34F\uB350\uB351\uB353\uB354\uB355"+
-            "\uB356\uB357\uB358\uB359\uB35A\uB35B\uB35C\uB35D"+
-            "\uB361\uB362\uB363\uB364\uB365\uB366\uB367\uB368"+
-            "\uB369\uB36A\uB36B\uB36C\uB36D\uB36E\uB36F\uB370"+
-            "\uB371\uB373\uB374\uB375\uB376\uB377\uB378\uB379"+
-            "\uB37A\uB37B\uB37C\uB37D\uB381\uB382\uB383\uB384"+
-            "\uB385\uB386\uB387\uB388\uB389\uB38A\uB38B\uB38C"+
-            "\uB38D\uB38E\uB38F\uB390\uB391\uB393\uB394\uB395"+
-            "\uB396\uB397\uB398\uB399\uB39A\uB39B\uB39C\uB39D"+
-            "\uB3A1\uB3A2\uB3A3\uB3A4\uB3A5\uB3A6\uB3A7\uB3A8"+
-            "\uB3A9\uB3AA\uB3AB\uB3AC\uB3AD\uB3AE\uB3AF\uB3B0"+
-            "\uB3B1\uB3B3\uB3B4\uB3B5\uB3B6\uB3B7\uB3B8\uB3B9"+
-            "\uB3BA\uB3BB\uB3BC\uB3BD\uB461\uB462\uB463\uB464"+
-            "\uB465\uB466\uB467\uB468\uB469\uB46A\uB46B\uB46C"+
-            "\uB46D\uB46E\uB46F\uB470\uB471\uB473\uB474\uB475"+
-            "\uB476\uB477\uB478\uB479\uB47A\uB47B\uB47C\uB47D"+
-            "\uB481\uB482\uB483\uB484\uB485\uB486\uB487\uB488"+
-            "\uB489\uB48A\uB48B\uB48C\uB48D\uB48E\uB48F\uB490"+
-            "\uB491\uB493\uB494\uB495\uB496\uB497\uB498\uB499"+
-            "\uB49A\uB49B\uB49C\uB49D\uB4A1\uB4A2\uB4A3\uB4A4"+
-            "\uB4A5\uB4A6\uB4A7\uB4A8\uB4A9\uB4AA\uB4AB\uB4AC"+
-            "\uB4AD\uB4AE\uB4AF\uB4B0\uB4B1\uB4B3\uB4B4\uB4B5"+
-            "\uB4B6\uB4B7\uB4B8\uB4B9\uB4BA\uB4BB\uB4BC\uB4BD"+
-            "\uB4C1\uB4C2\uB4C3\uB4C4\uB4C5\uB4C6\uB4C7\uB4C8"+
-            "\uB4C9\uB4CA\uB4CB\uB4CC\uB4CD\uB4CE\uB4CF\uB4D0"+
-            "\uB4D1\uB4D3\uB4D4\uB4D5\uB4D6\uB4D7\uB4D8\uB4D9"+
-            "\uB4DA\uB4DB\uB4DC\uB4DD\uB4E1\uB4E2\uB4E3\uB4E4"+
-            "\uB4E5\uB4E6\uB4E7\uB4E8\uB4E9\uB4EA\uB4EB\uB4EC"+
-            "\uB4ED\uB4EE\uB4EF\uB4F0\uB4F1\uB4F3\uB4F4\uB4F5"+
-            "\uB4F6\uB4F7\uB4F8\uB4F9\uB4FA\uB4FB\uB4FC\uB4FD"+
-            "\uB541\uB542\uB543\uB544\uB545\uB546\uB547\uB548"+
-            "\uB549\uB54A\uB54B\uB54C\uB54D\uB54E\uB54F\uB550"+
-            "\uB551\uB553\uB554\uB555\uB556\uB557\uB558\uB559"+
-            "\uB55A\uB55B\uB55C\uB55D\uB561\uB562\uB563\uB564"+
-            "\uB565\uB566\uB567\uB568\uB569\uB56A\uB56B\uB56C"+
-            "\uB56D\uB56E\uB56F\uB570\uB571\uB573\uB574\uB575"+
-            "\uB576\uB577\uB578\uB579\uB57A\uB57B\uB57C\uB57D"+
-            "\uB581\uB582\uB583\uB584\uB585\uB586\uB587\uB588"+
-            "\uB589\uB58A\uB58B\uB58C\uB58D\uB58E\uB58F\uB590"+
-            "\uB591\uB593\uB594\uB595\uB596\uB597\uB598\uB599"+
-            "\uB59A\uB59B\uB59C\uB59D\uB5A1\uB5A2\uB5A3\uB5A4"+
-            "\uB5A5\uB5A6\uB5A7\uB5A8\uB5A9\uB5AA\uB5AB\uB5AC"+
-            "\uB5AD\uB5AE\uB5AF\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5"+
-            "\uB5B6\uB5B7\uB5B8\uB5B9\uB5BA\uB5BB\uB5BC\uB5BD"+
-            "\uB5C1\uB5C2\uB5C3\uB5C4\uB5C5\uB5C6\uB5C7\uB5C8"+
-            "\uB5C9\uB5CA\uB5CB\uB5CC\uB5CD\uB5CE\uB5CF\uB5D0"+
-            "\uB5D1\uB5D3\uB5D4\uB5D5\uB5D6\uB5D7\uB5D8\uB5D9"+
-            "\uB5DA\uB5DB\uB5DC\uB5DD\uB5E1\uB5E2\uB5E3\uB5E4"+
-            "\uB5E5\uB5E6\uB5E7\uB5E8\uB5E9\uB5EA\uB5EB\uB5EC"+
-            "\uB5ED\uB5EE\uB5EF\uB5F0\uB5F1\uB5F3\uB5F4\uB5F5"+
-            "\uB5F6\uB5F7\uB5F8\uB5F9\uB5FA\uB5FB\uB5FC\uB5FD"+
-            "\uB641\uB642\uB643\uB644\uB645\uB646\uB647\uB648"+
-            "\uB649\uB64A\uB64B\uB64C\uB64D\uB64E\uB64F\uB650"+
-            "\uB651\uB653\uB654\uB655\uB656\uB657\uB658\uB659"+
-            "\uB65A\uB65B\uB65C\uB65D\uB661\uB662\uB663\uB664"+
-            "\uB665\uB666\uB667\uB668\uB669\uB66A\uB66B\uB66C"+
-            "\uB66D\uB66E\uB66F\uB670\uB671\uB673\uB674\uB675"+
-            "\uB676\uB677\uB678\uB679\uB67A\uB67B\uB67C\uB67D"+
-            "\uB681\uB682\uB683\uB684\uB685\uB686\uB687\uB688"+
-            "\uB689\uB68A\uB68B\uB68C\uB68D\uB68E\uB68F\uB690"+
-            "\uB691\uB693\uB694\uB695\uB696\uB697\uB698\uB699"+
-            "\uB69A\uB69B\uB69C\uB69D\uB6A1\uB6A2\uB6A3\uB6A4"+
-            "\uB6A5\uB6A6\uB6A7\uB6A8\uB6A9\uB6AA\uB6AB\uB6AC"+
-            "\uB6AD\uB6AE\uB6AF\uB6B0\uB6B1\uB6B3\uB6B4\uB6B5"+
-            "\uB6B6\uB6B7\uB6B8\uB6B9\uB6BA\uB6BB\uB6BC\uB6BD"+
-            "\uB6C1\uB6C2\uB6C3\uB6C4\uB6C5\uB6C6\uB6C7\uB6C8"+
-            "\uB6C9\uB6CA\uB6CB\uB6CC\uB6CD\uB6CE\uB6CF\uB6D0"+
-            "\uB6D1\uB6D3\uB6D4\uB6D5\uB6D6\uB6D7\uB6D8\uB6D9"+
-            "\uB6DA\uB6DB\uB6DC\uB6DD\uB6E1\uB6E2\uB6E3\uB6E4"+
-            "\uB6E5\uB6E6\uB6E7\uB6E8\uB6E9\uB6EA\uB6EB\uB6EC"+
-            "\uB6ED\uB6EE\uB6EF\uB6F0\uB6F1\uB6F3\uB6F4\uB6F5"+
-            "\uB6F6\uB6F7\uB6F8\uB6F9\uB6FA\uB6FB\uB6FC\uB6FD"+
-            "\uB741\uB742\uB743\uB744\uB745\uB746\uB747\uB748"+
-            "\uB749\uB74A\uB74B\uB74C\uB74D\uB74E\uB74F\uB750"+
-            "\uB751\uB753\uB754\uB755\uB756\uB757\uB758\uB759"+
-            "\uB75A\uB75B\uB75C\uB75D\uB761\uB762\uB763\uB764"+
-            "\uB765\uB766\uB767\uB768\uB769\uB76A\uB76B\uB76C"+
-            "\uB76D\uB76E\uB76F\uB770\uB771\uB773\uB774\uB775"+
-            "\uB776\uB777\uB778\uB779\uB77A\uB77B\uB77C\uB77D"+
-            "\uB781\uB782\uB783\uB784\uB785\uB786\uB787\uB788"+
-            "\uB789\uB78A\uB78B\uB78C\uB78D\uB78E\uB78F\uB790"+
-            "\uB791\uB793\uB794\uB795\uB796\uB797\uB798\uB799"+
-            "\uB79A\uB79B\uB79C\uB79D\uB7A1\uB7A2\uB7A3\uB7A4"+
-            "\uB7A5\uB7A6\uB7A7\uB7A8\uB7A9\uB7AA\uB7AB\uB7AC"+
-            "\uB7AD\uB7AE\uB7AF\uB7B0\uB7B1\uB7B3\uB7B4\uB7B5"+
-            "\uB7B6\uB7B7\uB7B8\uB7B9\uB7BA\uB7BB\uB7BC\uB7BD"+
-            "\uB861\uB862\uB863\uB864\uB865\uB866\uB867\uB868"+
-            "\uB869\uB86A\uB86B\uB86C\uB86D\uB86E\uB86F\uB870"+
-            "\uB871\uB873\uB874\uB875\uB876\uB877\uB878\uB879"+
-            "\uB87A\uB87B\uB87C\uB87D\uB881\uB882\uB883\uB884"+
-            "\uB885\uB886\uB887\uB888\uB889\uB88A\uB88B\uB88C"+
-            "\uB88D\uB88E\uB88F\uB890\uB891\uB893\uB894\uB895"+
-            "\uB896\uB897\uB898\uB899\uB89A\uB89B\uB89C\uB89D"+
-            "\uB8A1\uB8A2\uB8A3\uB8A4\uB8A5\uB8A6\uB8A7\uB8A8"+
-            "\uB8A9\uB8AA\uB8AB\uB8AC\uB8AD\uB8AE\uB8AF\uB8B0"+
-            "\uB8B1\uB8B3\uB8B4\uB8B5\uB8B6\uB8B7\uB8B8\uB8B9"+
-            "\uB8BA\uB8BB\uB8BC\uB8BD\uB8C1\uB8C2\uB8C3\uB8C4"+
-            "\uB8C5\uB8C6\uB8C7\uB8C8\uB8C9\uB8CA\uB8CB\uB8CC"+
-            "\uB8CD\uB8CE\uB8CF\uB8D0\uB8D1\uB8D3\uB8D4\uB8D5"+
-            "\uB8D6\uB8D7\uB8D8\uB8D9\uB8DA\uB8DB\uB8DC\uB8DD"+
-            "\uB8E1\uB8E2\uB8E3\uB8E4\uB8E5\uB8E6\uB8E7\uB8E8"+
-            "\uB8E9\uB8EA\uB8EB\uB8EC\uB8ED\uB8EE\uB8EF\uB8F0"+
-            "\uB8F1\uB8F3\uB8F4\uB8F5\uB8F6\uB8F7\uB8F8\uB8F9"+
-            "\uB8FA\uB8FB\uB8FC\uB8FD\uB941\uB942\uB943\uB944"+
-            "\uB945\uB946\uB947\uB948\uB949\uB94A\uB94B\uB94C"+
-            "\uB94D\uB94E\uB94F\uB950\uB951\uB953\uB954\uB955"+
-            "\uB956\uB957\uB958\uB959\uB95A\uB95B\uB95C\uB95D"+
-            "\uB961\uB962\uB963\uB964\uB965\uB966\uB967\uB968"+
-            "\uB969\uB96A\uB96B\uB96C\uB96D\uB96E\uB96F\uB970"+
-            "\uB971\uB973\uB974\uB975\uB976\uB977\uB978\uB979"+
-            "\uB97A\uB97B\uB97C\uB97D\uB981\uB982\uB983\uB984"+
-            "\uB985\uB986\uB987\uB988\uB989\uB98A\uB98B\uB98C"+
-            "\uB98D\uB98E\uB98F\uB990\uB991\uB993\uB994\uB995"+
-            "\uB996\uB997\uB998\uB999\uB99A\uB99B\uB99C\uB99D"+
-            "\uB9A1\uB9A2\uB9A3\uB9A4\uB9A5\uB9A6\uB9A7\uB9A8"+
-            "\uB9A9\uB9AA\uB9AB\uB9AC\uB9AD\uB9AE\uB9AF\uB9B0"+
-            "\uB9B1\uB9B3\uB9B4\uB9B5\uB9B6\uB9B7\uB9B8\uB9B9"+
-            "\uB9BA\uB9BB\uB9BC\uB9BD\uB9C1\uB9C2\uB9C3\uB9C4"+
-            "\uB9C5\uB9C6\uB9C7\uB9C8\uB9C9\uB9CA\uB9CB\uB9CC"+
-            "\uB9CD\uB9CE\uB9CF\uB9D0\uB9D1\uB9D3\uB9D4\uB9D5"+
-            "\uB9D6\uB9D7\uB9D8\uB9D9\uB9DA\uB9DB\uB9DC\uB9DD"+
-            "\uB9E1\uB9E2\uB9E3\uB9E4\uB9E5\uB9E6\uB9E7\uB9E8"+
-            "\uB9E9\uB9EA\uB9EB\uB9EC\uB9ED\uB9EE\uB9EF\uB9F0"+
-            "\uB9F1\uB9F3\uB9F4\uB9F5\uB9F6\uB9F7\uB9F8\uB9F9"+
-            "\uB9FA\uB9FB\uB9FC\uB9FD\uBA41\uBA42\uBA43\uBA44"+
-            "\uBA45\uBA46\uBA47\uBA48\uBA49\uBA4A\uBA4B\uBA4C"+
-            "\uBA4D\uBA4E\uBA4F\uBA50\uBA51\uBA53\uBA54\uBA55"+
-            "\uBA56\uBA57\uBA58\uBA59\uBA5A\uBA5B\uBA5C\uBA5D"+
-            "\uBA61\uBA62\uBA63\uBA64\uBA65\uBA66\uBA67\uBA68"+
-            "\uBA69\uBA6A\uBA6B\uBA6C\uBA6D\uBA6E\uBA6F\uBA70"+
-            "\uBA71\uBA73\uBA74\uBA75\uBA76\uBA77\uBA78\uBA79"+
-            "\uBA7A\uBA7B\uBA7C\uBA7D\uBA81\uBA82\uBA83\uBA84";
-
-        private final static String innerIndex8=
-            "\uBA85\uBA86\uBA87\uBA88\uBA89\uBA8A\uBA8B\uBA8C"+
-            "\uBA8D\uBA8E\uBA8F\uBA90\uBA91\uBA93\uBA94\uBA95"+
-            "\uBA96\uBA97\uBA98\uBA99\uBA9A\uBA9B\uBA9C\uBA9D"+
-            "\uBAA1\uBAA2\uBAA3\uBAA4\uBAA5\uBAA6\uBAA7\uBAA8"+
-            "\uBAA9\uBAAA\uBAAB\uBAAC\uBAAD\uBAAE\uBAAF\uBAB0"+
-            "\uBAB1\uBAB3\uBAB4\uBAB5\uBAB6\uBAB7\uBAB8\uBAB9"+
-            "\uBABA\uBABB\uBABC\uBABD\uBAC1\uBAC2\uBAC3\uBAC4"+
-            "\uBAC5\uBAC6\uBAC7\uBAC8\uBAC9\uBACA\uBACB\uBACC"+
-            "\uBACD\uBACE\uBACF\uBAD0\uBAD1\uBAD3\uBAD4\uBAD5"+
-            "\uBAD6\uBAD7\uBAD8\uBAD9\uBADA\uBADB\uBADC\uBADD"+
-            "\uBAE1\uBAE2\uBAE3\uBAE4\uBAE5\uBAE6\uBAE7\uBAE8"+
-            "\uBAE9\uBAEA\uBAEB\uBAEC\uBAED\uBAEE\uBAEF\uBAF0"+
-            "\uBAF1\uBAF3\uBAF4\uBAF5\uBAF6\uBAF7\uBAF8\uBAF9"+
-            "\uBAFA\uBAFB\uBAFC\uBAFD\uBB41\uBB42\uBB43\uBB44"+
-            "\uBB45\uBB46\uBB47\uBB48\uBB49\uBB4A\uBB4B\uBB4C"+
-            "\uBB4D\uBB4E\uBB4F\uBB50\uBB51\uBB53\uBB54\uBB55"+
-            "\uBB56\uBB57\uBB58\uBB59\uBB5A\uBB5B\uBB5C\uBB5D"+
-            "\uBB61\uBB62\uBB63\uBB64\uBB65\uBB66\uBB67\uBB68"+
-            "\uBB69\uBB6A\uBB6B\uBB6C\uBB6D\uBB6E\uBB6F\uBB70"+
-            "\uBB71\uBB73\uBB74\uBB75\uBB76\uBB77\uBB78\uBB79"+
-            "\uBB7A\uBB7B\uBB7C\uBB7D\uBB81\uBB82\uBB83\uBB84"+
-            "\uBB85\uBB86\uBB87\uBB88\uBB89\uBB8A\uBB8B\uBB8C"+
-            "\uBB8D\uBB8E\uBB8F\uBB90\uBB91\uBB93\uBB94\uBB95"+
-            "\uBB96\uBB97\uBB98\uBB99\uBB9A\uBB9B\uBB9C\uBB9D"+
-            "\uBBA1\uBBA2\uBBA3\uBBA4\uBBA5\uBBA6\uBBA7\uBBA8"+
-            "\uBBA9\uBBAA\uBBAB\uBBAC\uBBAD\uBBAE\uBBAF\uBBB0"+
-            "\uBBB1\uBBB3\uBBB4\uBBB5\uBBB6\uBBB7\uBBB8\uBBB9"+
-            "\uBBBA\uBBBB\uBBBC\uBBBD\uBC61\uBC62\uBC63\uBC64"+
-            "\uBC65\uBC66\uBC67\uBC68\uBC69\uBC6A\uBC6B\uBC6C"+
-            "\uBC6D\uBC6E\uBC6F\uBC70\uBC71\uBC73\uBC74\uBC75"+
-            "\uBC76\uBC77\uBC78\uBC79\uBC7A\uBC7B\uBC7C\uBC7D"+
-            "\uBC81\uBC82\uBC83\uBC84\uBC85\uBC86\uBC87\uBC88"+
-            "\uBC89\uBC8A\uBC8B\uBC8C\uBC8D\uBC8E\uBC8F\uBC90"+
-            "\uBC91\uBC93\uBC94\uBC95\uBC96\uBC97\uBC98\uBC99"+
-            "\uBC9A\uBC9B\uBC9C\uBC9D\uBCA1\uBCA2\uBCA3\uBCA4"+
-            "\uBCA5\uBCA6\uBCA7\uBCA8\uBCA9\uBCAA\uBCAB\uBCAC"+
-            "\uBCAD\uBCAE\uBCAF\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5"+
-            "\uBCB6\uBCB7\uBCB8\uBCB9\uBCBA\uBCBB\uBCBC\uBCBD"+
-            "\uBCC1\uBCC2\uBCC3\uBCC4\uBCC5\uBCC6\uBCC7\uBCC8"+
-            "\uBCC9\uBCCA\uBCCB\uBCCC\uBCCD\uBCCE\uBCCF\uBCD0"+
-            "\uBCD1\uBCD3\uBCD4\uBCD5\uBCD6\uBCD7\uBCD8\uBCD9"+
-            "\uBCDA\uBCDB\uBCDC\uBCDD\uBCE1\uBCE2\uBCE3\uBCE4"+
-            "\uBCE5\uBCE6\uBCE7\uBCE8\uBCE9\uBCEA\uBCEB\uBCEC"+
-            "\uBCED\uBCEE\uBCEF\uBCF0\uBCF1\uBCF3\uBCF4\uBCF5"+
-            "\uBCF6\uBCF7\uBCF8\uBCF9\uBCFA\uBCFB\uBCFC\uBCFD"+
-            "\uBD41\uBD42\uBD43\uBD44\uBD45\uBD46\uBD47\uBD48"+
-            "\uBD49\uBD4A\uBD4B\uBD4C\uBD4D\uBD4E\uBD4F\uBD50"+
-            "\uBD51\uBD53\uBD54\uBD55\uBD56\uBD57\uBD58\uBD59"+
-            "\uBD5A\uBD5B\uBD5C\uBD5D\uBD61\uBD62\uBD63\uBD64"+
-            "\uBD65\uBD66\uBD67\uBD68\uBD69\uBD6A\uBD6B\uBD6C"+
-            "\uBD6D\uBD6E\uBD6F\uBD70\uBD71\uBD73\uBD74\uBD75"+
-            "\uBD76\uBD77\uBD78\uBD79\uBD7A\uBD7B\uBD7C\uBD7D"+
-            "\uBD81\uBD82\uBD83\uBD84\uBD85\uBD86\uBD87\uBD88"+
-            "\uBD89\uBD8A\uBD8B\uBD8C\uBD8D\uBD8E\uBD8F\uBD90"+
-            "\uBD91\uBD93\uBD94\uBD95\uBD96\uBD97\uBD98\uBD99"+
-            "\uBD9A\uBD9B\uBD9C\uBD9D\uBDA1\uBDA2\uBDA3\uBDA4"+
-            "\uBDA5\uBDA6\uBDA7\uBDA8\uBDA9\uBDAA\uBDAB\uBDAC"+
-            "\uBDAD\uBDAE\uBDAF\uBDB0\uBDB1\uBDB3\uBDB4\uBDB5"+
-            "\uBDB6\uBDB7\uBDB8\uBDB9\uBDBA\uBDBB\uBDBC\uBDBD"+
-            "\uBDC1\uBDC2\uBDC3\uBDC4\uBDC5\uBDC6\uBDC7\uBDC8"+
-            "\uBDC9\uBDCA\uBDCB\uBDCC\uBDCD\uBDCE\uBDCF\uBDD0"+
-            "\uBDD1\uBDD3\uBDD4\uBDD5\uBDD6\uBDD7\uBDD8\uBDD9"+
-            "\uBDDA\uBDDB\uBDDC\uBDDD\uBDE1\uBDE2\uBDE3\uBDE4"+
-            "\uBDE5\uBDE6\uBDE7\uBDE8\uBDE9\uBDEA\uBDEB\uBDEC"+
-            "\uBDED\uBDEE\uBDEF\uBDF0\uBDF1\uBDF3\uBDF4\uBDF5"+
-            "\uBDF6\uBDF7\uBDF8\uBDF9\uBDFA\uBDFB\uBDFC\uBDFD"+
-            "\uBE41\uBE42\uBE43\uBE44\uBE45\uBE46\uBE47\uBE48"+
-            "\uBE49\uBE4A\uBE4B\uBE4C\uBE4D\uBE4E\uBE4F\uBE50"+
-            "\uBE51\uBE53\uBE54\uBE55\uBE56\uBE57\uBE58\uBE59"+
-            "\uBE5A\uBE5B\uBE5C\uBE5D\uBE61\uBE62\uBE63\uBE64"+
-            "\uBE65\uBE66\uBE67\uBE68\uBE69\uBE6A\uBE6B\uBE6C"+
-            "\uBE6D\uBE6E\uBE6F\uBE70\uBE71\uBE73\uBE74\uBE75"+
-            "\uBE76\uBE77\uBE78\uBE79\uBE7A\uBE7B\uBE7C\uBE7D"+
-            "\uBE81\uBE82\uBE83\uBE84\uBE85\uBE86\uBE87\uBE88"+
-            "\uBE89\uBE8A\uBE8B\uBE8C\uBE8D\uBE8E\uBE8F\uBE90"+
-            "\uBE91\uBE93\uBE94\uBE95\uBE96\uBE97\uBE98\uBE99"+
-            "\uBE9A\uBE9B\uBE9C\uBE9D\uBEA1\uBEA2\uBEA3\uBEA4"+
-            "\uBEA5\uBEA6\uBEA7\uBEA8\uBEA9\uBEAA\uBEAB\uBEAC"+
-            "\uBEAD\uBEAE\uBEAF\uBEB0\uBEB1\uBEB3\uBEB4\uBEB5"+
-            "\uBEB6\uBEB7\uBEB8\uBEB9\uBEBA\uBEBB\uBEBC\uBEBD"+
-            "\uBEC1\uBEC2\uBEC3\uBEC4\uBEC5\uBEC6\uBEC7\uBEC8"+
-            "\uBEC9\uBECA\uBECB\uBECC\uBECD\uBECE\uBECF\uBED0"+
-            "\uBED1\uBED3\uBED4\uBED5\uBED6\uBED7\uBED8\uBED9"+
-            "\uBEDA\uBEDB\uBEDC\uBEDD\uBEE1\uBEE2\uBEE3\uBEE4"+
-            "\uBEE5\uBEE6\uBEE7\uBEE8\uBEE9\uBEEA\uBEEB\uBEEC"+
-            "\uBEED\uBEEE\uBEEF\uBEF0\uBEF1\uBEF3\uBEF4\uBEF5"+
-            "\uBEF6\uBEF7\uBEF8\uBEF9\uBEFA\uBEFB\uBEFC\uBEFD"+
-            "\uBF41\uBF42\uBF43\uBF44\uBF45\uBF46\uBF47\uBF48"+
-            "\uBF49\uBF4A\uBF4B\uBF4C\uBF4D\uBF4E\uBF4F\uBF50"+
-            "\uBF51\uBF53\uBF54\uBF55\uBF56\uBF57\uBF58\uBF59"+
-            "\uBF5A\uBF5B\uBF5C\uBF5D\uBF61\uBF62\uBF63\uBF64"+
-            "\uBF65\uBF66\uBF67\uBF68\uBF69\uBF6A\uBF6B\uBF6C"+
-            "\uBF6D\uBF6E\uBF6F\uBF70\uBF71\uBF73\uBF74\uBF75"+
-            "\uBF76\uBF77\uBF78\uBF79\uBF7A\uBF7B\uBF7C\uBF7D"+
-            "\uBF81\uBF82\uBF83\uBF84\uBF85\uBF86\uBF87\uBF88"+
-            "\uBF89\uBF8A\uBF8B\uBF8C\uBF8D\uBF8E\uBF8F\uBF90"+
-            "\uBF91\uBF93\uBF94\uBF95\uBF96\uBF97\uBF98\uBF99"+
-            "\uBF9A\uBF9B\uBF9C\uBF9D\uBFA1\uBFA2\uBFA3\uBFA4"+
-            "\uBFA5\uBFA6\uBFA7\uBFA8\uBFA9\uBFAA\uBFAB\uBFAC"+
-            "\uBFAD\uBFAE\uBFAF\uBFB0\uBFB1\uBFB3\uBFB4\uBFB5"+
-            "\uBFB6\uBFB7\uBFB8\uBFB9\uBFBA\uBFBB\uBFBC\uBFBD"+
-            "\uC061\uC062\uC063\uC064\uC065\uC066\uC067\uC068"+
-            "\uC069\uC06A\uC06B\uC06C\uC06D\uC06E\uC06F\uC070"+
-            "\uC071\uC073\uC074\uC075\uC076\uC077\uC078\uC079"+
-            "\uC07A\uC07B\uC07C\uC07D\uC081\uC082\uC083\uC084"+
-            "\uC085\uC086\uC087\uC088\uC089\uC08A\uC08B\uC08C"+
-            "\uC08D\uC08E\uC08F\uC090\uC091\uC093\uC094\uC095"+
-            "\uC096\uC097\uC098\uC099\uC09A\uC09B\uC09C\uC09D"+
-            "\uC0A1\uC0A2\uC0A3\uC0A4\uC0A5\uC0A6\uC0A7\uC0A8"+
-            "\uC0A9\uC0AA\uC0AB\uC0AC\uC0AD\uC0AE\uC0AF\uC0B0"+
-            "\uC0B1\uC0B3\uC0B4\uC0B5\uC0B6\uC0B7\uC0B8\uC0B9"+
-            "\uC0BA\uC0BB\uC0BC\uC0BD\uC0C1\uC0C2\uC0C3\uC0C4"+
-            "\uC0C5\uC0C6\uC0C7\uC0C8\uC0C9\uC0CA\uC0CB\uC0CC"+
-            "\uC0CD\uC0CE\uC0CF\uC0D0\uC0D1\uC0D3\uC0D4\uC0D5"+
-            "\uC0D6\uC0D7\uC0D8\uC0D9\uC0DA\uC0DB\uC0DC\uC0DD"+
-            "\uC0E1\uC0E2\uC0E3\uC0E4\uC0E5\uC0E6\uC0E7\uC0E8"+
-            "\uC0E9\uC0EA\uC0EB\uC0EC\uC0ED\uC0EE\uC0EF\uC0F0"+
-            "\uC0F1\uC0F3\uC0F4\uC0F5\uC0F6\uC0F7\uC0F8\uC0F9"+
-            "\uC0FA\uC0FB\uC0FC\uC0FD\uC141\uC142\uC143\uC144"+
-            "\uC145\uC146\uC147\uC148\uC149\uC14A\uC14B\uC14C"+
-            "\uC14D\uC14E\uC14F\uC150\uC151\uC153\uC154\uC155"+
-            "\uC156\uC157\uC158\uC159\uC15A\uC15B\uC15C\uC15D"+
-            "\uC161\uC162\uC163\uC164\uC165\uC166\uC167\uC168"+
-            "\uC169\uC16A\uC16B\uC16C\uC16D\uC16E\uC16F\uC170"+
-            "\uC171\uC173\uC174\uC175\uC176\uC177\uC178\uC179"+
-            "\uC17A\uC17B\uC17C\uC17D\uC181\uC182\uC183\uC184"+
-            "\uC185\uC186\uC187\uC188\uC189\uC18A\uC18B\uC18C"+
-            "\uC18D\uC18E\uC18F\uC190\uC191\uC193\uC194\uC195"+
-            "\uC196\uC197\uC198\uC199\uC19A\uC19B\uC19C\uC19D"+
-            "\uC1A1\uC1A2\uC1A3\uC1A4\uC1A5\uC1A6\uC1A7\uC1A8"+
-            "\uC1A9\uC1AA\uC1AB\uC1AC\uC1AD\uC1AE\uC1AF\uC1B0"+
-            "\uC1B1\uC1B3\uC1B4\uC1B5\uC1B6\uC1B7\uC1B8\uC1B9"+
-            "\uC1BA\uC1BB\uC1BC\uC1BD\uC1C1\uC1C2\uC1C3\uC1C4"+
-            "\uC1C5\uC1C6\uC1C7\uC1C8\uC1C9\uC1CA\uC1CB\uC1CC"+
-            "\uC1CD\uC1CE\uC1CF\uC1D0\uC1D1\uC1D3\uC1D4\uC1D5"+
-            "\uC1D6\uC1D7\uC1D8\uC1D9\uC1DA\uC1DB\uC1DC\uC1DD"+
-            "\uC1E1\uC1E2\uC1E3\uC1E4\uC1E5\uC1E6\uC1E7\uC1E8"+
-            "\uC1E9\uC1EA\uC1EB\uC1EC\uC1ED\uC1EE\uC1EF\uC1F0"+
-            "\uC1F1\uC1F3\uC1F4\uC1F5\uC1F6\uC1F7\uC1F8\uC1F9"+
-            "\uC1FA\uC1FB\uC1FC\uC1FD\uC241\uC242\uC243\uC244"+
-            "\uC245\uC246\uC247\uC248\uC249\uC24A\uC24B\uC24C"+
-            "\uC24D\uC24E\uC24F\uC250\uC251\uC253\uC254\uC255"+
-            "\uC256\uC257\uC258\uC259\uC25A\uC25B\uC25C\uC25D"+
-            "\uC261\uC262\uC263\uC264\uC265\uC266\uC267\uC268"+
-            "\uC269\uC26A\uC26B\uC26C\uC26D\uC26E\uC26F\uC270"+
-            "\uC271\uC273\uC274\uC275\uC276\uC277\uC278\uC279"+
-            "\uC27A\uC27B\uC27C\uC27D\uC281\uC282\uC283\uC284"+
-            "\uC285\uC286\uC287\uC288\uC289\uC28A\uC28B\uC28C"+
-            "\uC28D\uC28E\uC28F\uC290\uC291\uC293\uC294\uC295"+
-            "\uC296\uC297\uC298\uC299\uC29A\uC29B\uC29C\uC29D"+
-            "\uC2A1\uC2A2\uC2A3\uC2A4\uC2A5\uC2A6\uC2A7\uC2A8"+
-            "\uC2A9\uC2AA\uC2AB\uC2AC\uC2AD\uC2AE\uC2AF\uC2B0"+
-            "\uC2B1\uC2B3\uC2B4\uC2B5\uC2B6\uC2B7\uC2B8\uC2B9"+
-            "\uC2BA\uC2BB\uC2BC\uC2BD\uC2C1\uC2C2\uC2C3\uC2C4"+
-            "\uC2C5\uC2C6\uC2C7\uC2C8\uC2C9\uC2CA\uC2CB\uC2CC"+
-            "\uC2CD\uC2CE\uC2CF\uC2D0\uC2D1\uC2D3\uC2D4\uC2D5"+
-            "\uC2D6\uC2D7\uC2D8\uC2D9\uC2DA\uC2DB\uC2DC\uC2DD"+
-            "\uC2E1\uC2E2\uC2E3\uC2E4\uC2E5\uC2E6\uC2E7\uC2E8"+
-            "\uC2E9\uC2EA\uC2EB\uC2EC\uC2ED\uC2EE\uC2EF\uC2F0"+
-            "\uC2F1\uC2F3\uC2F4\uC2F5\uC2F6\uC2F7\uC2F8\uC2F9"+
-            "\uC2FA\uC2FB\uC2FC\uC2FD\uC341\uC342\uC343\uC344"+
-            "\uC345\uC346\uC347\uC348\uC349\uC34A\uC34B\uC34C"+
-            "\uC34D\uC34E\uC34F\uC350\uC351\uC353\uC354\uC355"+
-            "\uC356\uC357\uC358\uC359\uC35A\uC35B\uC35C\uC35D"+
-            "\uC361\uC362\uC363\uC364\uC365\uC366\uC367\uC368"+
-            "\uC369\uC36A\uC36B\uC36C\uC36D\uC36E\uC36F\uC370"+
-            "\uC371\uC373\uC374\uC375\uC376\uC377\uC378\uC379"+
-            "\uC37A\uC37B\uC37C\uC37D\uC381\uC382\uC383\uC384"+
-            "\uC385\uC386\uC387\uC388\uC389\uC38A\uC38B\uC38C"+
-            "\uC38D\uC38E\uC38F\uC390\uC391\uC393\uC394\uC395"+
-            "\uC396\uC397\uC398\uC399\uC39A\uC39B\uC39C\uC39D"+
-            "\uC3A1\uC3A2\uC3A3\uC3A4\uC3A5\uC3A6\uC3A7\uC3A8"+
-            "\uC3A9\uC3AA\uC3AB\uC3AC\uC3AD\uC3AE\uC3AF\uC3B0"+
-            "\uC3B1\uC3B3\uC3B4\uC3B5\uC3B6\uC3B7\uC3B8\uC3B9"+
-            "\uC3BA\uC3BB\uC3BC\uC3BD\uC461\uC462\uC463\uC464"+
-            "\uC465\uC466\uC467\uC468\uC469\uC46A\uC46B\uC46C"+
-            "\uC46D\uC46E\uC46F\uC470\uC471\uC473\uC474\uC475"+
-            "\uC476\uC477\uC478\uC479\uC47A\uC47B\uC47C\uC47D"+
-            "\uC481\uC482\uC483\uC484\uC485\uC486\uC487\uC488"+
-            "\uC489\uC48A\uC48B\uC48C\uC48D\uC48E\uC48F\uC490"+
-            "\uC491\uC493\uC494\uC495\uC496\uC497\uC498\uC499"+
-            "\uC49A\uC49B\uC49C\uC49D\uC4A1\uC4A2\uC4A3\uC4A4"+
-            "\uC4A5\uC4A6\uC4A7\uC4A8\uC4A9\uC4AA\uC4AB\uC4AC"+
-            "\uC4AD\uC4AE\uC4AF\uC4B0\uC4B1\uC4B3\uC4B4\uC4B5"+
-            "\uC4B6\uC4B7\uC4B8\uC4B9\uC4BA\uC4BB\uC4BC\uC4BD"+
-            "\uC4C1\uC4C2\uC4C3\uC4C4\uC4C5\uC4C6\uC4C7\uC4C8"+
-            "\uC4C9\uC4CA\uC4CB\uC4CC\uC4CD\uC4CE\uC4CF\uC4D0"+
-            "\uC4D1\uC4D3\uC4D4\uC4D5\uC4D6\uC4D7\uC4D8\uC4D9"+
-            "\uC4DA\uC4DB\uC4DC\uC4DD\uC4E1\uC4E2\uC4E3\uC4E4"+
-            "\uC4E5\uC4E6\uC4E7\uC4E8\uC4E9\uC4EA\uC4EB\uC4EC"+
-            "\uC4ED\uC4EE\uC4EF\uC4F0\uC4F1\uC4F3\uC4F4\uC4F5"+
-            "\uC4F6\uC4F7\uC4F8\uC4F9\uC4FA\uC4FB\uC4FC\uC4FD"+
-            "\uC541\uC542\uC543\uC544\uC545\uC546\uC547\uC548"+
-            "\uC549\uC54A\uC54B\uC54C\uC54D\uC54E\uC54F\uC550"+
-            "\uC551\uC553\uC554\uC555\uC556\uC557\uC558\uC559"+
-            "\uC55A\uC55B\uC55C\uC55D\uC561\uC562\uC563\uC564"+
-            "\uC565\uC566\uC567\uC568\uC569\uC56A\uC56B\uC56C"+
-            "\uC56D\uC56E\uC56F\uC570\uC571\uC573\uC574\uC575"+
-            "\uC576\uC577\uC578\uC579\uC57A\uC57B\uC57C\uC57D"+
-            "\uC581\uC582\uC583\uC584\uC585\uC586\uC587\uC588"+
-            "\uC589\uC58A\uC58B\uC58C\uC58D\uC58E\uC58F\uC590"+
-            "\uC591\uC593\uC594\uC595\uC596\uC597\uC598\uC599"+
-            "\uC59A\uC59B\uC59C\uC59D\uC5A1\uC5A2\uC5A3\uC5A4"+
-            "\uC5A5\uC5A6\uC5A7\uC5A8\uC5A9\uC5AA\uC5AB\uC5AC"+
-            "\uC5AD\uC5AE\uC5AF\uC5B0\uC5B1\uC5B3\uC5B4\uC5B5"+
-            "\uC5B6\uC5B7\uC5B8\uC5B9\uC5BA\uC5BB\uC5BC\uC5BD"+
-            "\uC5C1\uC5C2\uC5C3\uC5C4\uC5C5\uC5C6\uC5C7\uC5C8"+
-            "\uC5C9\uC5CA\uC5CB\uC5CC\uC5CD\uC5CE\uC5CF\uC5D0"+
-            "\uC5D1\uC5D3\uC5D4\uC5D5\uC5D6\uC5D7\uC5D8\uC5D9"+
-            "\uC5DA\uC5DB\uC5DC\uC5DD\uC5E1\uC5E2\uC5E3\uC5E4"+
-            "\uC5E5\uC5E6\uC5E7\uC5E8\uC5E9\uC5EA\uC5EB\uC5EC"+
-            "\uC5ED\uC5EE\uC5EF\uC5F0\uC5F1\uC5F3\uC5F4\uC5F5"+
-            "\uC5F6\uC5F7\uC5F8\uC5F9\uC5FA\uC5FB\uC5FC\uC5FD"+
-            "\uC641\uC642\uC643\uC644\uC645\uC646\uC647\uC648"+
-            "\uC649\uC64A\uC64B\uC64C\uC64D\uC64E\uC64F\uC650"+
-            "\uC651\uC653\uC654\uC655\uC656\uC657\uC658\uC659"+
-            "\uC65A\uC65B\uC65C\uC65D\uC661\uC662\uC663\uC664"+
-            "\uC665\uC666\uC667\uC668\uC669\uC66A\uC66B\uC66C"+
-            "\uC66D\uC66E\uC66F\uC670\uC671\uC673\uC674\uC675"+
-            "\uC676\uC677\uC678\uC679\uC67A\uC67B\uC67C\uC67D"+
-            "\uC681\uC682\uC683\uC684\uC685\uC686\uC687\uC688"+
-            "\uC689\uC68A\uC68B\uC68C\uC68D\uC68E\uC68F\uC690"+
-            "\uC691\uC693\uC694\uC695\uC696\uC697\uC698\uC699"+
-            "\uC69A\uC69B\uC69C\uC69D\uC6A1\uC6A2\uC6A3\uC6A4"+
-            "\uC6A5\uC6A6\uC6A7\uC6A8\uC6A9\uC6AA\uC6AB\uC6AC"+
-            "\uC6AD\uC6AE\uC6AF\uC6B0\uC6B1\uC6B3\uC6B4\uC6B5"+
-            "\uC6B6\uC6B7\uC6B8\uC6B9\uC6BA\uC6BB\uC6BC\uC6BD"+
-            "\uC6C1\uC6C2\uC6C3\uC6C4\uC6C5\uC6C6\uC6C7\uC6C8"+
-            "\uC6C9\uC6CA\uC6CB\uC6CC\uC6CD\uC6CE\uC6CF\uC6D0"+
-            "\uC6D1\uC6D3\uC6D4\uC6D5\uC6D6\uC6D7\uC6D8\uC6D9"+
-            "\uC6DA\uC6DB\uC6DC\uC6DD\uC6E1\uC6E2\uC6E3\uC6E4"+
-            "\uC6E5\uC6E6\uC6E7\uC6E8\uC6E9\uC6EA\uC6EB\uC6EC"+
-            "\uC6ED\uC6EE\uC6EF\uC6F0\uC6F1\uC6F3\uC6F4\uC6F5"+
-            "\uC6F6\uC6F7\uC6F8\uC6F9\uC6FA\uC6FB\uC6FC\uC6FD"+
-            "\uC741\uC742\uC743\uC744\uC745\uC746\uC747\uC748"+
-            "\uC749\uC74A\uC74B\uC74C\uC74D\uC74E\uC74F\uC750"+
-            "\uC751\uC753\uC754\uC755\uC756\uC757\uC758\uC759"+
-            "\uC75A\uC75B\uC75C\uC75D\uC761\uC762\uC763\uC764"+
-            "\uC765\uC766\uC767\uC768\uC769\uC76A\uC76B\uC76C"+
-            "\uC76D\uC76E\uC76F\uC770\uC771\uC773\uC774\uC775"+
-            "\uC776\uC777\uC778\uC779\uC77A\uC77B\uC77C\uC77D"+
-            "\uC781\uC782\uC783\uC784\uC785\uC786\uC787\uC788"+
-            "\uC789\uC78A\uC78B\uC78C\uC78D\uC78E\uC78F\uC790"+
-            "\uC791\uC793\uC794\uC795\uC796\uC797\uC798\uC799"+
-            "\uC79A\uC79B\uC79C\uC79D\uC7A1\uC7A2\uC7A3\uC7A4"+
-            "\uC7A5\uC7A6\uC7A7\uC7A8\uC7A9\uC7AA\uC7AB\uC7AC"+
-            "\uC7AD\uC7AE\uC7AF\uC7B0\uC7B1\uC7B3\uC7B4\uC7B5"+
-            "\uC7B6\uC7B7\uC7B8\uC7B9\uC7BA\uC7BB\uC7BC\uC7BD"+
-            "\uC861\uC862\uC863\uC864\uC865\uC866\uC867\uC868"+
-            "\uC869\uC86A\uC86B\uC86C\uC86D\uC86E\uC86F\uC870"+
-            "\uC871\uC873\uC874\uC875\uC876\uC877\uC878\uC879"+
-            "\uC87A\uC87B\uC87C\uC87D\uC881\uC882\uC883\uC884"+
-            "\uC885\uC886\uC887\uC888\uC889\uC88A\uC88B\uC88C"+
-            "\uC88D\uC88E\uC88F\uC890\uC891\uC893\uC894\uC895"+
-            "\uC896\uC897\uC898\uC899\uC89A\uC89B\uC89C\uC89D"+
-            "\uC8A1\uC8A2\uC8A3\uC8A4\uC8A5\uC8A6\uC8A7\uC8A8"+
-            "\uC8A9\uC8AA\uC8AB\uC8AC\uC8AD\uC8AE\uC8AF\uC8B0"+
-            "\uC8B1\uC8B3\uC8B4\uC8B5\uC8B6\uC8B7\uC8B8\uC8B9"+
-            "\uC8BA\uC8BB\uC8BC\uC8BD\uC8C1\uC8C2\uC8C3\uC8C4"+
-            "\uC8C5\uC8C6\uC8C7\uC8C8\uC8C9\uC8CA\uC8CB\uC8CC"+
-            "\uC8CD\uC8CE\uC8CF\uC8D0\uC8D1\uC8D3\uC8D4\uC8D5"+
-            "\uC8D6\uC8D7\uC8D8\uC8D9\uC8DA\uC8DB\uC8DC\uC8DD"+
-            "\uC8E1\uC8E2\uC8E3\uC8E4\uC8E5\uC8E6\uC8E7\uC8E8"+
-            "\uC8E9\uC8EA\uC8EB\uC8EC\uC8ED\uC8EE\uC8EF\uC8F0"+
-            "\uC8F1\uC8F3\uC8F4\uC8F5\uC8F6\uC8F7\uC8F8\uC8F9"+
-            "\uC8FA\uC8FB\uC8FC\uC8FD\uC941\uC942\uC943\uC944"+
-            "\uC945\uC946\uC947\uC948\uC949\uC94A\uC94B\uC94C"+
-            "\uC94D\uC94E\uC94F\uC950\uC951\uC953\uC954\uC955"+
-            "\uC956\uC957\uC958\uC959\uC95A\uC95B\uC95C\uC95D"+
-            "\uC961\uC962\uC963\uC964\uC965\uC966\uC967\uC968"+
-            "\uC969\uC96A\uC96B\uC96C\uC96D\uC96E\uC96F\uC970"+
-            "\uC971\uC973\uC974\uC975\uC976\uC977\uC978\uC979"+
-            "\uC97A\uC97B\uC97C\uC97D\uC981\uC982\uC983\uC984"+
-            "\uC985\uC986\uC987\uC988\uC989\uC98A\uC98B\uC98C"+
-            "\uC98D\uC98E\uC98F\uC990\uC991\uC993\uC994\uC995"+
-            "\uC996\uC997\uC998\uC999\uC99A\uC99B\uC99C\uC99D"+
-            "\uC9A1\uC9A2\uC9A3\uC9A4\uC9A5\uC9A6\uC9A7\uC9A8"+
-            "\uC9A9\uC9AA\uC9AB\uC9AC\uC9AD\uC9AE\uC9AF\uC9B0"+
-            "\uC9B1\uC9B3\uC9B4\uC9B5\uC9B6\uC9B7\uC9B8\uC9B9"+
-            "\uC9BA\uC9BB\uC9BC\uC9BD\uC9C1\uC9C2\uC9C3\uC9C4"+
-            "\uC9C5\uC9C6\uC9C7\uC9C8\uC9C9\uC9CA\uC9CB\uC9CC"+
-            "\uC9CD\uC9CE\uC9CF\uC9D0\uC9D1\uC9D3\uC9D4\uC9D5"+
-            "\uC9D6\uC9D7\uC9D8\uC9D9\uC9DA\uC9DB\uC9DC\uC9DD"+
-            "\uC9E1\uC9E2\uC9E3\uC9E4\uC9E5\uC9E6\uC9E7\uC9E8"+
-            "\uC9E9\uC9EA\uC9EB\uC9EC\uC9ED\uC9EE\uC9EF\uC9F0"+
-            "\uC9F1\uC9F3\uC9F4\uC9F5\uC9F6\uC9F7\uC9F8\uC9F9"+
-            "\uC9FA\uC9FB\uC9FC\uC9FD\uCA41\uCA42\uCA43\uCA44"+
-            "\uCA45\uCA46\uCA47\uCA48\uCA49\uCA4A\uCA4B\uCA4C"+
-            "\uCA4D\uCA4E\uCA4F\uCA50\uCA51\uCA53\uCA54\uCA55"+
-            "\uCA56\uCA57\uCA58\uCA59\uCA5A\uCA5B\uCA5C\uCA5D"+
-            "\uCA61\uCA62\uCA63\uCA64\uCA65\uCA66\uCA67\uCA68"+
-            "\uCA69\uCA6A\uCA6B\uCA6C\uCA6D\uCA6E\uCA6F\uCA70"+
-            "\uCA71\uCA73\uCA74\uCA75\uCA76\uCA77\uCA78\uCA79"+
-            "\uCA7A\uCA7B\uCA7C\uCA7D\uCA81\uCA82\uCA83\uCA84"+
-            "\uCA85\uCA86\uCA87\uCA88\uCA89\uCA8A\uCA8B\uCA8C"+
-            "\uCA8D\uCA8E\uCA8F\uCA90\uCA91\uCA93\uCA94\uCA95"+
-            "\uCA96\uCA97\uCA98\uCA99\uCA9A\uCA9B\uCA9C\uCA9D"+
-            "\uCAA1\uCAA2\uCAA3\uCAA4\uCAA5\uCAA6\uCAA7\uCAA8"+
-            "\uCAA9\uCAAA\uCAAB\uCAAC\uCAAD\uCAAE\uCAAF\uCAB0"+
-            "\uCAB1\uCAB3\uCAB4\uCAB5\uCAB6\uCAB7\uCAB8\uCAB9"+
-            "\uCABA\uCABB\uCABC\uCABD\uCAC1\uCAC2\uCAC3\uCAC4"+
-            "\uCAC5\uCAC6\uCAC7\uCAC8\uCAC9\uCACA\uCACB\uCACC"+
-            "\uCACD\uCACE\uCACF\uCAD0\uCAD1\uCAD3\uCAD4\uCAD5"+
-            "\uCAD6\uCAD7\uCAD8\uCAD9\uCADA\uCADB\uCADC\uCADD"+
-            "\uCAE1\uCAE2\uCAE3\uCAE4\uCAE5\uCAE6\uCAE7\uCAE8"+
-            "\uCAE9\uCAEA\uCAEB\uCAEC\uCAED\uCAEE\uCAEF\uCAF0"+
-            "\uCAF1\uCAF3\uCAF4\uCAF5\uCAF6\uCAF7\uCAF8\uCAF9"+
-            "\uCAFA\uCAFB\uCAFC\uCAFD\uCB41\uCB42\uCB43\uCB44"+
-            "\uCB45\uCB46\uCB47\uCB48\uCB49\uCB4A\uCB4B\uCB4C"+
-            "\uCB4D\uCB4E\uCB4F\uCB50\uCB51\uCB53\uCB54\uCB55"+
-            "\uCB56\uCB57\uCB58\uCB59\uCB5A\uCB5B\uCB5C\uCB5D"+
-            "\uCB61\uCB62\uCB63\uCB64\uCB65\uCB66\uCB67\uCB68"+
-            "\uCB69\uCB6A\uCB6B\uCB6C\uCB6D\uCB6E\uCB6F\uCB70"+
-            "\uCB71\uCB73\uCB74\uCB75\uCB76\uCB77\uCB78\uCB79"+
-            "\uCB7A\uCB7B\uCB7C\uCB7D\uCB81\uCB82\uCB83\uCB84"+
-            "\uCB85\uCB86\uCB87\uCB88\uCB89\uCB8A\uCB8B\uCB8C"+
-            "\uCB8D\uCB8E\uCB8F\uCB90\uCB91\uCB93\uCB94\uCB95"+
-            "\uCB96\uCB97\uCB98\uCB99\uCB9A\uCB9B\uCB9C\uCB9D"+
-            "\uCBA1\uCBA2\uCBA3\uCBA4\uCBA5\uCBA6\uCBA7\uCBA8"+
-            "\uCBA9\uCBAA\uCBAB\uCBAC\uCBAD\uCBAE\uCBAF\uCBB0"+
-            "\uCBB1\uCBB3\uCBB4\uCBB5\uCBB6\uCBB7\uCBB8\uCBB9"+
-            "\uCBBA\uCBBB\uCBBC\uCBBD\uCC61\uCC62\uCC63\uCC64"+
-            "\uCC65\uCC66\uCC67\uCC68\uCC69\uCC6A\uCC6B\uCC6C"+
-            "\uCC6D\uCC6E\uCC6F\uCC70\uCC71\uCC73\uCC74\uCC75"+
-            "\uCC76\uCC77\uCC78\uCC79\uCC7A\uCC7B\uCC7C\uCC7D"+
-            "\uCC81\uCC82\uCC83\uCC84\uCC85\uCC86\uCC87\uCC88"+
-            "\uCC89\uCC8A\uCC8B\uCC8C\uCC8D\uCC8E\uCC8F\uCC90"+
-            "\uCC91\uCC93\uCC94\uCC95\uCC96\uCC97\uCC98\uCC99"+
-            "\uCC9A\uCC9B\uCC9C\uCC9D\uCCA1\uCCA2\uCCA3\uCCA4"+
-            "\uCCA5\uCCA6\uCCA7\uCCA8\uCCA9\uCCAA\uCCAB\uCCAC"+
-            "\uCCAD\uCCAE\uCCAF\uCCB0\uCCB1\uCCB3\uCCB4\uCCB5"+
-            "\uCCB6\uCCB7\uCCB8\uCCB9\uCCBA\uCCBB\uCCBC\uCCBD"+
-            "\uCCC1\uCCC2\uCCC3\uCCC4\uCCC5\uCCC6\uCCC7\uCCC8"+
-            "\uCCC9\uCCCA\uCCCB\uCCCC\uCCCD\uCCCE\uCCCF\uCCD0"+
-            "\uCCD1\uCCD3\uCCD4\uCCD5\uCCD6\uCCD7\uCCD8\uCCD9"+
-            "\uCCDA\uCCDB\uCCDC\uCCDD\uCCE1\uCCE2\uCCE3\uCCE4"+
-            "\uCCE5\uCCE6\uCCE7\uCCE8\uCCE9\uCCEA\uCCEB\uCCEC"+
-            "\uCCED\uCCEE\uCCEF\uCCF0\uCCF1\uCCF3\uCCF4\uCCF5"+
-            "\uCCF6\uCCF7\uCCF8\uCCF9\uCCFA\uCCFB\uCCFC\uCCFD"+
-            "\uCD41\uCD42\uCD43\uCD44\uCD45\uCD46\uCD47\uCD48"+
-            "\uCD49\uCD4A\uCD4B\uCD4C\uCD4D\uCD4E\uCD4F\uCD50"+
-            "\uCD51\uCD53\uCD54\uCD55\uCD56\uCD57\uCD58\uCD59"+
-            "\uCD5A\uCD5B\uCD5C\uCD5D\uCD61\uCD62\uCD63\uCD64"+
-            "\uCD65\uCD66\uCD67\uCD68\uCD69\uCD6A\uCD6B\uCD6C"+
-            "\uCD6D\uCD6E\uCD6F\uCD70\uCD71\uCD73\uCD74\uCD75"+
-            "\uCD76\uCD77\uCD78\uCD79\uCD7A\uCD7B\uCD7C\uCD7D"+
-            "\uCD81\uCD82\uCD83\uCD84\uCD85\uCD86\uCD87\uCD88"+
-            "\uCD89\uCD8A\uCD8B\uCD8C\uCD8D\uCD8E\uCD8F\uCD90"+
-            "\uCD91\uCD93\uCD94\uCD95\uCD96\uCD97\uCD98\uCD99"+
-            "\uCD9A\uCD9B\uCD9C\uCD9D\uCDA1\uCDA2\uCDA3\uCDA4"+
-            "\uCDA5\uCDA6\uCDA7\uCDA8\uCDA9\uCDAA\uCDAB\uCDAC"+
-            "\uCDAD\uCDAE\uCDAF\uCDB0\uCDB1\uCDB3\uCDB4\uCDB5"+
-            "\uCDB6\uCDB7\uCDB8\uCDB9\uCDBA\uCDBB\uCDBC\uCDBD"+
-            "\uCDC1\uCDC2\uCDC3\uCDC4\uCDC5\uCDC6\uCDC7\uCDC8"+
-            "\uCDC9\uCDCA\uCDCB\uCDCC\uCDCD\uCDCE\uCDCF\uCDD0"+
-            "\uCDD1\uCDD3\uCDD4\uCDD5\uCDD6\uCDD7\uCDD8\uCDD9"+
-            "\uCDDA\uCDDB\uCDDC\uCDDD\uCDE1\uCDE2\uCDE3\uCDE4"+
-            "\uCDE5\uCDE6\uCDE7\uCDE8\uCDE9\uCDEA\uCDEB\uCDEC"+
-            "\uCDED\uCDEE\uCDEF\uCDF0\uCDF1\uCDF3\uCDF4\uCDF5"+
-            "\uCDF6\uCDF7\uCDF8\uCDF9\uCDFA\uCDFB\uCDFC\uCDFD"+
-            "\uCE41\uCE42\uCE43\uCE44\uCE45\uCE46\uCE47\uCE48"+
-            "\uCE49\uCE4A\uCE4B\uCE4C\uCE4D\uCE4E\uCE4F\uCE50"+
-            "\uCE51\uCE53\uCE54\uCE55\uCE56\uCE57\uCE58\uCE59"+
-            "\uCE5A\uCE5B\uCE5C\uCE5D\uCE61\uCE62\uCE63\uCE64"+
-            "\uCE65\uCE66\uCE67\uCE68\uCE69\uCE6A\uCE6B\uCE6C"+
-            "\uCE6D\uCE6E\uCE6F\uCE70\uCE71\uCE73\uCE74\uCE75"+
-            "\uCE76\uCE77\uCE78\uCE79\uCE7A\uCE7B\uCE7C\uCE7D"+
-            "\uCE81\uCE82\uCE83\uCE84\uCE85\uCE86\uCE87\uCE88"+
-            "\uCE89\uCE8A\uCE8B\uCE8C\uCE8D\uCE8E\uCE8F\uCE90"+
-            "\uCE91\uCE93\uCE94\uCE95\uCE96\uCE97\uCE98\uCE99"+
-            "\uCE9A\uCE9B\uCE9C\uCE9D\uCEA1\uCEA2\uCEA3\uCEA4"+
-            "\uCEA5\uCEA6\uCEA7\uCEA8\uCEA9\uCEAA\uCEAB\uCEAC"+
-            "\uCEAD\uCEAE\uCEAF\uCEB0\uCEB1\uCEB3\uCEB4\uCEB5"+
-            "\uCEB6\uCEB7\uCEB8\uCEB9\uCEBA\uCEBB\uCEBC\uCEBD"+
-            "\uCEC1\uCEC2\uCEC3\uCEC4\uCEC5\uCEC6\uCEC7\uCEC8"+
-            "\uCEC9\uCECA\uCECB\uCECC\uCECD\uCECE\uCECF\uCED0"+
-            "\uCED1\uCED3\uCED4\uCED5\uCED6\uCED7\uCED8\uCED9"+
-            "\uCEDA\uCEDB\uCEDC\uCEDD\uCEE1\uCEE2\uCEE3\uCEE4"+
-            "\uCEE5\uCEE6\uCEE7\uCEE8\uCEE9\uCEEA\uCEEB\uCEEC"+
-            "\uCEED\uCEEE\uCEEF\uCEF0\uCEF1\uCEF3\uCEF4\uCEF5"+
-            "\uCEF6\uCEF7\uCEF8\uCEF9\uCEFA\uCEFB\uCEFC\uCEFD"+
-            "\uCF41\uCF42\uCF43\uCF44\uCF45\uCF46\uCF47\uCF48"+
-            "\uCF49\uCF4A\uCF4B\uCF4C\uCF4D\uCF4E\uCF4F\uCF50"+
-            "\uCF51\uCF53\uCF54\uCF55\uCF56\uCF57\uCF58\uCF59"+
-            "\uCF5A\uCF5B\uCF5C\uCF5D\uCF61\uCF62\uCF63\uCF64"+
-            "\uCF65\uCF66\uCF67\uCF68\uCF69\uCF6A\uCF6B\uCF6C"+
-            "\uCF6D\uCF6E\uCF6F\uCF70\uCF71\uCF73\uCF74\uCF75"+
-            "\uCF76\uCF77\uCF78\uCF79\uCF7A\uCF7B\uCF7C\uCF7D"+
-            "\uCF81\uCF82\uCF83\uCF84\uCF85\uCF86\uCF87\uCF88"+
-            "\uCF89\uCF8A\uCF8B\uCF8C\uCF8D\uCF8E\uCF8F\uCF90"+
-            "\uCF91\uCF93\uCF94\uCF95\uCF96\uCF97\uCF98\uCF99"+
-            "\uCF9A\uCF9B\uCF9C\uCF9D\uCFA1\uCFA2\uCFA3\uCFA4"+
-            "\uCFA5\uCFA6\uCFA7\uCFA8\uCFA9\uCFAA\uCFAB\uCFAC"+
-            "\uCFAD\uCFAE\uCFAF\uCFB0\uCFB1\uCFB3\uCFB4\uCFB5"+
-            "\uCFB6\uCFB7\uCFB8\uCFB9\uCFBA\uCFBB\uCFBC\uCFBD"+
-            "\uD061\uD062\uD063\uD064\uD065\uD066\uD067\uD068"+
-            "\uD069\uD06A\uD06B\uD06C\uD06D\uD06E\uD06F\uD070"+
-            "\uD071\uD073\uD074\uD075\uD076\uD077\uD078\uD079"+
-            "\uD07A\uD07B\uD07C\uD07D\uD081\uD082\uD083\uD084"+
-            "\uD085\uD086\uD087\uD088\uD089\uD08A\uD08B\uD08C"+
-            "\uD08D\uD08E\uD08F\uD090\uD091\uD093\uD094\uD095"+
-            "\uD096\uD097\uD098\uD099\uD09A\uD09B\uD09C\uD09D"+
-            "\uD0A1\uD0A2\uD0A3\uD0A4\uD0A5\uD0A6\uD0A7\uD0A8"+
-            "\uD0A9\uD0AA\uD0AB\uD0AC\uD0AD\uD0AE\uD0AF\uD0B0"+
-            "\uD0B1\uD0B3\uD0B4\uD0B5\uD0B6\uD0B7\uD0B8\uD0B9"+
-            "\uD0BA\uD0BB\uD0BC\uD0BD\uD0C1\uD0C2\uD0C3\uD0C4"+
-            "\uD0C5\uD0C6\uD0C7\uD0C8\uD0C9\uD0CA\uD0CB\uD0CC"+
-            "\uD0CD\uD0CE\uD0CF\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5"+
-            "\uD0D6\uD0D7\uD0D8\uD0D9\uD0DA\uD0DB\uD0DC\uD0DD"+
-            "\uD0E1\uD0E2\uD0E3\uD0E4\uD0E5\uD0E6\uD0E7\uD0E8"+
-            "\uD0E9\uD0EA\uD0EB\uD0EC\uD0ED\uD0EE\uD0EF\uD0F0"+
-            "\uD0F1\uD0F3\uD0F4\uD0F5\uD0F6\uD0F7\uD0F8\uD0F9"+
-            "\uD0FA\uD0FB\uD0FC\uD0FD\uD141\uD142\uD143\uD144"+
-            "\uD145\uD146\uD147\uD148\uD149\uD14A\uD14B\uD14C"+
-            "\uD14D\uD14E\uD14F\uD150\uD151\uD153\uD154\uD155"+
-            "\uD156\uD157\uD158\uD159\uD15A\uD15B\uD15C\uD15D"+
-            "\uD161\uD162\uD163\uD164\uD165\uD166\uD167\uD168"+
-            "\uD169\uD16A\uD16B\uD16C\uD16D\uD16E\uD16F\uD170"+
-            "\uD171\uD173\uD174\uD175\uD176\uD177\uD178\uD179"+
-            "\uD17A\uD17B\uD17C\uD17D\uD181\uD182\uD183\uD184"+
-            "\uD185\uD186\uD187\uD188\uD189\uD18A\uD18B\uD18C"+
-            "\uD18D\uD18E\uD18F\uD190\uD191\uD193\uD194\uD195"+
-            "\uD196\uD197\uD198\uD199\uD19A\uD19B\uD19C\uD19D"+
-            "\uD1A1\uD1A2\uD1A3\uD1A4\uD1A5\uD1A6\uD1A7\uD1A8"+
-            "\uD1A9\uD1AA\uD1AB\uD1AC\uD1AD\uD1AE\uD1AF\uD1B0"+
-            "\uD1B1\uD1B3\uD1B4\uD1B5\uD1B6\uD1B7\uD1B8\uD1B9"+
-            "\uD1BA\uD1BB\uD1BC\uD1BD\uD1C1\uD1C2\uD1C3\uD1C4"+
-            "\uD1C5\uD1C6\uD1C7\uD1C8\uD1C9\uD1CA\uD1CB\uD1CC"+
-            "\uD1CD\uD1CE\uD1CF\uD1D0\uD1D1\uD1D3\uD1D4\uD1D5"+
-            "\uD1D6\uD1D7\uD1D8\uD1D9\uD1DA\uD1DB\uD1DC\uD1DD"+
-            "\uD1E1\uD1E2\uD1E3\uD1E4\uD1E5\uD1E6\uD1E7\uD1E8"+
-            "\uD1E9\uD1EA\uD1EB\uD1EC\uD1ED\uD1EE\uD1EF\uD1F0"+
-            "\uD1F1\uD1F3\uD1F4\uD1F5\uD1F6\uD1F7\uD1F8\uD1F9"+
-            "\uD1FA\uD1FB\uD1FC\uD1FD\uD241\uD242\uD243\uD244"+
-            "\uD245\uD246\uD247\uD248\uD249\uD24A\uD24B\uD24C"+
-            "\uD24D\uD24E\uD24F\uD250\uD251\uD253\uD254\uD255"+
-            "\uD256\uD257\uD258\uD259\uD25A\uD25B\uD25C\uD25D"+
-            "\uD261\uD262\uD263\uD264\uD265\uD266\uD267\uD268"+
-            "\uD269\uD26A\uD26B\uD26C\uD26D\uD26E\uD26F\uD270"+
-            "\uD271\uD273\uD274\uD275\uD276\uD277\uD278\uD279"+
-            "\uD27A\uD27B\uD27C\uD27D\uD281\uD282\uD283\uD284"+
-            "\uD285\uD286\uD287\uD288\uD289\uD28A\uD28B\uD28C"+
-            "\uD28D\uD28E\uD28F\uD290\uD291\uD293\uD294\uD295"+
-            "\uD296\uD297\uD298\uD299\uD29A\uD29B\uD29C\uD29D"+
-            "\uD2A1\uD2A2\uD2A3\uD2A4\uD2A5\uD2A6\uD2A7\uD2A8"+
-            "\uD2A9\uD2AA\uD2AB\uD2AC\uD2AD\uD2AE\uD2AF\uD2B0"+
-            "\uD2B1\uD2B3\uD2B4\uD2B5\uD2B6\uD2B7\uD2B8\uD2B9"+
-            "\uD2BA\uD2BB\uD2BC\uD2BD\uD2C1\uD2C2\uD2C3\uD2C4"+
-            "\uD2C5\uD2C6\uD2C7\uD2C8\uD2C9\uD2CA\uD2CB\uD2CC"+
-            "\uD2CD\uD2CE\uD2CF\uD2D0\uD2D1\uD2D3\uD2D4\uD2D5"+
-            "\uD2D6\uD2D7\uD2D8\uD2D9\uD2DA\uD2DB\uD2DC\uD2DD"+
-            "\uD2E1\uD2E2\uD2E3\uD2E4\uD2E5\uD2E6\uD2E7\uD2E8"+
-            "\uD2E9\uD2EA\uD2EB\uD2EC\uD2ED\uD2EE\uD2EF\uD2F0"+
-            "\uD2F1\uD2F3\uD2F4\uD2F5\uD2F6\uD2F7\uD2F8\uD2F9"+
-            "\uD2FA\uD2FB\uD2FC\uD2FD\uD341\uD342\uD343\uD344"+
-            "\uD345\uD346\uD347\uD348\uD349\uD34A\uD34B\uD34C"+
-            "\uD34D\uD34E\uD34F\uD350\uD351\uD353\uD354\uD355"+
-            "\uD356\uD357\uD358\uD359\uD35A\uD35B\uD35C\uD35D"+
-            "\uD361\uD362\uD363\uD364\uD365\uD366\uD367\uD368"+
-            "\uD369\uD36A\uD36B\uD36C\uD36D\uD36E\uD36F\uD370"+
-            "\uD371\uD373\uD374\uD375\uD376\uD377\uD378\uD379"+
-            "\uD37A\uD37B\uD37C\uD37D\uD381\uD382\uD383\uD384"+
-            "\uD385\uD386\uD387\uD388\uD389\uD38A\uD38B\uD38C"+
-            "\uD38D\uD38E\uD38F\uD390\uD391\uD393\uD394\uD395"+
-            "\uD396\uD397\uD398\uD399\uD39A\uD39B\uD39C\uD39D"+
-            "\uD3A1\uD3A2\uD3A3\uD3A4\uD3A5\uD3A6\uD3A7\uD3A8"+
-            "\uD3A9\uD3AA\uD3AB\uD3AC\uD3AD\uD3AE\uD3AF\uD3B0"+
-            "\uD3B1\uD3B3\uD3B4\uD3B5\uD3B6\uD3B7\uD3B8\uD3B9"+
-            "\uD3BA\uD3BB\uD3BC\uD3BD\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE0D0\uE0D6\uE0E7\uE1CF\uE1E8\uE23D\uE2FB\uE332"+
-            "\uE348\uE360\uE36D\uE3D4\uE3D5\uE3D8\uE3DB\uE3DC"+
-            "\uE3DD\uE3DE\uE3DF\uE3E0\uE3E2\uE3E3\uE3E4\uE3E5"+
-            "\uE3E6\uE3E8\uE3E9\uE3EA\uE3EB\uE3ED\uE3EF\uE3F0"+
-            "\uE3F2\uE3F6\uE3FA\uE3FC\uE3FD\uE3FE\uE432\uE433"+
-            "\uE437\uE438\uE439\uE43A\uE43B\uE43D\uE442\uE44E"+
-            "\uE452\uE453\uE454\uE456\uE457\uE458\uE459\uE45A"+
-            "\uE45B\uE45D\uE45E\uE45F\uE460\uE461\uE462\uE463"+
-            "\uE464\uE465\uE466\uE467\uE469\uE46A\uE46E\uE46F"+
-            "\uE471\uE472\uE474\uE475\uE476\uE477\uE478\uE479"+
-            "\uE47A\uE47B\uE492\uE493\uE494\uE495\uE496\uE497"+
-            "\uE499\uE49A\uE576\uE59E\uE5A5\uE5AB\uE5AE\uE648"+
-            "\uE65D\uE6CB\uE6E4\uE8C5\uE8E4\uE935\uE9A5\uE9D5"+
-            "\uE9F4\uEA9E\uEAA0\uEAB3\uEAE1\uEAE8\uEB93\uEBAD"+
-            "\uEBED\uECF5\uED31\uED39\uEDAE\uEDB1\uEDB2\uEDB9"+
-            "\uEDBB\uEDBC\uEDC4\uEDCE\uEDD0\uEDD2\uEDD6\uEDFA"+
-            "\uEDFB\uEDFC\uEDFE\uEE31\uEE34\uEE37\uEE3D\uEE3F"+
-            "\uEE40\uEE41\uEE43\uEE47\uEE48\uEE4C\uEE54\uEE56"+
-            "\uEE57\uEE5A\uEE62\uEE66\uEE69\uEE6C\uEE6F\uEE71"+
-            "\uEE74\uEE75\uEE76\uEE78\uEE7A\uEE7B\uEE7C\uEE91"+
-            "\uEE93\uEE94\uEE97\uEE98\uEE99\uEE9B\uEEA1\uEEA6"+
-            "\uEEA9\uEEAA\uEEAC\uEEAD\uEEB0\uEEBF\uEEC1\uEEC6"+
-            "\uEEC7\uEECB\uEECD\uEECF\uEED0\uEED3\uEEDF\uEEE4"+
-            "\uEEE6\uEEF7\uEF77\uEF78\uEF92\uEF93\uEF99\uEF9B"+
-            "\uEF9D\uEFA0\uEFA7\uEFAC\uEFCC\uEFF7\uF051\uF075"+
-            "\uF096\uF099\uF09E\uF0A0\uF0A4\uF0A7\uF0A9\uF0AA"+
-            "\uF0BA\uF0BB\uF0BD\uF0C1\uF0C2\uF0C6\uF0C7\uF0CC"+
-            "\uF0CF\uF0D0\uF0D1\uF0D2\uF0D8\uF136\uF137\uF13A"+
-            "\uF13F\uF140\uF141\uF142\uF145\uF148\uF14A\uF150"+
-            "\uF151\uF155\uF156\uF159\uF15A\uF165\uF16D\uF16E"+
-            "\uF171\uF174\uF177\uF178\uF199\uF19A\uF19C\uF1A1"+
-            "\uF1A2\uF1A3\uF1EE\uF26B\uF44D\uF49C\uF4B1\uF537";
-
-        private final static String innerIndex9=
-            "\uF57E\uF696\uF698\uF6B8\uF6C8\uF6D3\uF76B\uF792"+
-            "\uF831\uF832\uF876\uF939\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDA31\uDA32\uDA33\uDA34\uDA35\uDA36\uDA37"+
-            "\uDA38\uDA39\uDA3A\uDA3B\uDA3C\uDA3D\uDA3E\uDA3F"+
-            "\uDA40\uDA41\uDA42\uDA43\uDA44\uDA45\uDA46\uDA47"+
-            "\uDA48\uDA49\uDA4A\uDA4B\uDA4C\uDA4D\uDA4E\uDA4F"+
-            "\uDA50\uDA51\uDA52\uDA53\uDA54\uDA55\uDA56\uDA57"+
-            "\uDA58\uDA59\uDA5A\uDA5B\uDA5C\uDA5D\uDA5E\uDA5F"+
-            "\uDA60\uDA61\uDA62\uDA63\uDA64\uDA65\uDA66\uDA67"+
-            "\uDA68\uDA69\uDA6A\uDA6B\uD93C\uDA6D\uDA6E\uDA6F"+
-            "\uDA70\uDA71\uDA72\uDA73\uDA74\uDA75\uDA76\uDA77"+
-            "\uDA78\uDA79\uDA7A\uDA7B\uDA7C\uDA7D\uDA7E\uDA91"+
-            "\uDA92\uDA93\uDA94\uDA95\uDA96\uDA97\uDA98\uDA99"+
-            "\uDA9A\uDA9B\uDA9C\uDA9D\uDA9E\uDA9F\uD93D\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD95B\uD95C\uD9A0\uDAA0\u0000\uD95D\uDA6C\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-        private final static short index1[] = {
-            1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18,
-            19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
-            35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
-            51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
-            67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
-            83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 100, 101, 102,
-            103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
-            119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
-            135, 136, 137, 138, 139, 140, 141, 142, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 144, 0, 0, 0, 0, 145
-        };
-
-        private static String index2[] = {
-            innerIndex0,
-            innerIndex1,
-            innerIndex2,
-            innerIndex3,
-            innerIndex4,
-            innerIndex5,
-            innerIndex6,
-            innerIndex7,
-            innerIndex8,
-            innerIndex9
-        };
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11KSC5601.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class X11KSC5601 extends Charset {
-    public X11KSC5601 () {
-        super("X11KSC5601", null);
-    }
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11KSC5601;
-    }
-
-    private class Encoder extends CharsetEncoder {
-        private DoubleByte.Encoder enc = (DoubleByte.Encoder)new EUC_KR().newEncoder();
-
-        public Encoder(Charset cs) {
-            super(cs, 2.0f, 2.0f);
-        }
-
-        public boolean canEncode(char c) {
-            if (c <= 0x7F) {
-                return false;
-            }
-            return enc.canEncode(c);
-        }
-
-        protected int encodeDouble(char c) {
-            return enc.encodeChar(c);
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    if (c <= '\u007f')
-                        return CoderResult.unmappableForLength(1);
-                    int ncode = encodeDouble(c);
-                    if (ncode != 0 && c != '\u0000' ) {
-                        da[dp++] = (byte) ((ncode  >> 8) & 0x7f);
-                        da[dp++] = (byte) (ncode & 0x7f);
-                        sp++;
-                        continue;
-                    }
-                    return CoderResult.unmappableForLength(1);
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-    }
-
-    private class Decoder extends  CharsetDecoder {
-        private DoubleByte.Decoder dec = (DoubleByte.Decoder)new EUC_KR().newDecoder();
-
-        public Decoder(Charset cs) {
-            super(cs, 0.5f, 1.0f);
-        }
-
-        protected char decodeDouble(int b1, int b2) {
-            return dec.decodeDouble(b1, b2);
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-
-            try {
-                while (sp < sl) {
-                    if ( sl - sp < 2) {
-                        return CoderResult.UNDERFLOW;
-                    }
-                    int b1 = sa[sp] & 0xFF | 0x80;
-                    int b2 = sa[sp + 1] & 0xFF | 0x80;
-                    char c = decodeDouble(b1, b2);
-                    if (c == UNMAPPABLE_DECODING) {
-                        return CoderResult.unmappableForLength(2);
-                    }
-                    if (dl - dp < 1)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = c;
-                    sp +=2;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-
-        }
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11SunUnicode_0.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,153 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-
-package sun.awt.motif;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.ext.DoubleByteEncoder;
-
-public class X11SunUnicode_0 extends Charset {
-    public X11SunUnicode_0 () {
-        super("X11SunUnicode_0", null);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    /* Seems like supporting a decoder is required, but we aren't going
-     * to be publically exposing this class, so no need to waste work
-     */
-    public CharsetDecoder newDecoder() {
-        throw new Error("Decoder is not implemented for X11SunUnicode_0 Charset");
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11SunUnicode_0;
-    }
-
-    private static class Encoder extends DoubleByteEncoder {
-        public Encoder(Charset cs) {
-            super(cs, index1, index2);
-        }
-
-        private final static String innerIndex0=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0120\u0121\u0122\u0000\u0123\u0124\u0125"+
-            "\u0126\u0127\u0128\u0129\u012A\u012B\u012C\u012D"+
-            "\u012E\u012F\u0130\u0131\u0132\u0133\u0134\u0135"+
-            "\u0136\u0137\u0138\u0139\u013A\u013B\u013C\u013D"+
-            "\u013E\u013F\u0140\u0141\u0142\u0143\u0144\u0145"+
-            "\u0146\u0147\u0148\u0149\u014A\u014B\u014C\u014D"+
-            "\u014E\u014F\u0150\u0151\u0152\u0153\u0154\u0155"+
-            "\u0156\u0157\u0000\u0000\u0158\u0159\u015A\u015B"+
-            "\u015C\u015D\u015E\u015F\u0160\u0161\u0162\u0163"+
-            "\u0164\u0165\u0166\u0167\u0168\u0169\u0000\u0000"+
-            "\u016A\u016B\u016C\u016D\u016E\u0000\u0000\u0000"+
-            "\u016F\u0170\u0171\u0172\u0173\u0174\u0175\u0176"+
-            "\u0177\u0178\u0179\u017A\u017B\u017C\u017D\u017E"+
-            "\u017F\u0180\u0181\u0182\u0183\u0184\u0185\u0186"+
-            "\u0187\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-        private final static short index1[] = {
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-        };
-
-        private final static String index2[] = {
-            innerIndex0
-        };
-
-        /* The default implementation creates a decoder and we don't have one */
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/DoubleByteEncoder.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,241 @@
+/*
+ * Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ */
+
+package sun.font;
+
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CoderResult;
+import sun.nio.cs.Surrogate;
+
+public abstract class DoubleByteEncoder
+    extends CharsetEncoder
+{
+
+    private short index1[];
+    private String index2[];
+
+    private final Surrogate.Parser sgp = new Surrogate.Parser();
+
+    protected DoubleByteEncoder(Charset cs,
+                                short[] index1, String[] index2)
+    {
+        super(cs, 2.0f, 2.0f);
+        this.index1 = index1;
+        this.index2 = index2;
+    }
+
+    protected DoubleByteEncoder(Charset cs,
+                                short[] index1, String[] index2,
+                                float avg, float max)
+    {
+        super(cs, avg, max);
+        this.index1 = index1;
+        this.index2 = index2;
+    }
+
+    protected DoubleByteEncoder(Charset cs,
+                                short[] index1, String[] index2, byte[] repl)
+    {
+        super(cs, 2.0f, 2.0f, repl);
+        this.index1 = index1;
+        this.index2 = index2;
+    }
+
+
+    protected DoubleByteEncoder(Charset cs,
+                                short[] index1, String[] index2,
+                                byte[] repl, float avg, float max)
+    {
+        super(cs, avg, max,repl);
+        this.index1 = index1;
+        this.index2 = index2;
+    }
+
+    public boolean canEncode(char c) {
+        return (encodeSingle(c) != -1 ||
+                encodeDouble(c) != 0);
+    }
+
+    private CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
+        char[] sa = src.array();
+        int sp = src.arrayOffset() + src.position();
+        int sl = src.arrayOffset() + src.limit();
+        byte[] da = dst.array();
+        int dp = dst.arrayOffset() + dst.position();
+        int dl = dst.arrayOffset() + dst.limit();
+
+        try {
+            while (sp < sl) {
+                char c = sa[sp];
+                if (Character.isSurrogate(c)) {
+                    if (sgp.parse(c, sa, sp, sl) < 0)
+                        return sgp.error();
+                    if (sl - sp < 2)
+                        return CoderResult.UNDERFLOW;
+                    char c2 = sa[sp + 1];
+
+                    byte[] outputBytes = new byte[2];
+                    outputBytes = encodeSurrogate(c, c2);
+
+                    if (outputBytes == null) {
+                        return sgp.unmappableResult();
+                    }
+                    else {
+                        if (dl - dp < 2)
+                            return CoderResult.OVERFLOW;
+                        da[dp++] = outputBytes[0];
+                        da[dp++] = outputBytes[1];
+                        sp += 2;
+                        continue;
+                    }
+                }
+                if (c >= '\uFFFE')
+                    return CoderResult.unmappableForLength(1);
+
+                int b = encodeSingle(c);
+                if (b != -1) { // Single Byte
+                    if (dl - dp < 1)
+                        return CoderResult.OVERFLOW;
+                    da[dp++] = (byte)b;
+                    sp++;
+                    continue;
+                }
+
+                int ncode  = encodeDouble(c);
+                if (ncode != 0 && c != '\u0000' ) {
+                    if (dl - dp < 2)
+                        return CoderResult.OVERFLOW;
+                    da[dp++] = (byte) ((ncode & 0xff00) >> 8);
+                    da[dp++] = (byte) (ncode & 0xff);
+                    sp++;
+                    continue;
+                }
+                return CoderResult.unmappableForLength(1);
+                }
+            return CoderResult.UNDERFLOW;
+        } finally {
+            src.position(sp - src.arrayOffset());
+            dst.position(dp - dst.arrayOffset());
+        }
+    }
+
+    private CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
+        int mark = src.position();
+
+        try {
+            while (src.hasRemaining()) {
+                char c = src.get();
+                if (Character.isSurrogate(c)) {
+                    int surr;
+                    if ((surr = sgp.parse(c, src)) < 0)
+                        return sgp.error();
+                    char c2 = Surrogate.low(surr);
+                    byte[] outputBytes = new byte[2];
+                    outputBytes = encodeSurrogate(c, c2);
+
+                    if (outputBytes == null) {
+                        return sgp.unmappableResult();
+                    } else {
+                        if (dst.remaining() < 2)
+                            return CoderResult.OVERFLOW;
+                        mark += 2;
+                        dst.put(outputBytes[0]);
+                        dst.put(outputBytes[1]);
+                        continue;
+                    }
+                }
+                if (c >= '\uFFFE')
+                    return CoderResult.unmappableForLength(1);
+                int b = encodeSingle(c);
+
+                if (b != -1) { // Single-byte character
+                    if (dst.remaining() < 1)
+                        return CoderResult.OVERFLOW;
+                    mark++;
+                    dst.put((byte)b);
+                    continue;
+                }
+                // Double Byte character
+
+                int ncode = encodeDouble(c);
+                if (ncode != 0 && c != '\u0000') {
+                    if (dst.remaining() < 2)
+                        return CoderResult.OVERFLOW;
+                    mark++;
+                    dst.put((byte) ((ncode & 0xff00) >> 8));
+                    dst.put((byte) ncode);
+                    continue;
+                }
+                return CoderResult.unmappableForLength(1);
+            }
+
+            return CoderResult.UNDERFLOW;
+        } finally {
+            src.position(mark);
+        }
+    }
+
+    protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
+        if (true && src.hasArray() && dst.hasArray())
+            return encodeArrayLoop(src, dst);
+        else
+            return encodeBufferLoop(src, dst);
+    }
+
+    /*
+     * Can be changed by subclass
+     */
+    protected int encodeDouble(char ch) {
+        int offset = index1[((ch & 0xff00) >> 8 )] << 8;
+        return index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
+    }
+
+    /*
+     * Can be changed by subclass
+     */
+    protected int encodeSingle(char inputChar) {
+        if (inputChar < 0x80)
+            return (byte)inputChar;
+        else
+            return -1;
+    }
+
+    /**
+     *  Protected method which should be overridden by concrete DBCS
+     *  CharsetEncoder classes which included supplementary characters
+     *  within their mapping coverage.
+     *  null return value indicates surrogate values could not be
+     *  handled or encoded.
+     */
+    protected byte[] encodeSurrogate(char highSurrogate, char lowSurrogate) {
+        return null;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/MFontConfiguration.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,332 @@
+/*
+ * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import sun.awt.FontConfiguration;
+import sun.awt.X11FontManager;
+import sun.font.FontUtilities;
+import sun.font.SunFontManager;
+import sun.util.logging.PlatformLogger;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Properties;
+import java.util.Scanner;
+
+public class MFontConfiguration extends FontConfiguration {
+
+    private static FontConfiguration fontConfig = null;
+    private static PlatformLogger logger;
+
+    public MFontConfiguration(SunFontManager fm) {
+        super(fm);
+        if (FontUtilities.debugFonts()) {
+            logger = PlatformLogger.getLogger("sun.awt.FontConfiguration");
+        }
+        initTables();
+    }
+
+
+    public MFontConfiguration(SunFontManager fm,
+                              boolean preferLocaleFonts,
+                              boolean preferPropFonts) {
+        super(fm, preferLocaleFonts, preferPropFonts);
+        if (FontUtilities.debugFonts()) {
+            logger = PlatformLogger.getLogger("sun.awt.FontConfiguration");
+        }
+        initTables();
+    }
+
+    /* Needs to be kept in sync with updates in the languages used in
+     * the fontconfig files.
+     */
+    protected void initReorderMap() {
+        reorderMap = new HashMap<>();
+        if (osName == null) {  /* null means SunOS */
+            initReorderMapForSolaris();
+        } else {
+            initReorderMapForLinux();
+        }
+    }
+
+    private void initReorderMapForSolaris() {
+        /* Don't create a no-op entry, so we can optimize this case
+         * i.e. we don't need to do anything so can avoid slower paths in
+         * the code.
+         */
+//      reorderMap.put("UTF-8", "latin-1");
+        reorderMap.put("UTF-8.hi", "devanagari"); // NB is in Lucida.
+        reorderMap.put("UTF-8.ja",
+                       split("japanese-x0201,japanese-x0208,japanese-x0212"));
+        reorderMap.put("UTF-8.ko", "korean-johab");
+        reorderMap.put("UTF-8.th", "thai");
+        reorderMap.put("UTF-8.zh.TW", "chinese-big5");
+        reorderMap.put("UTF-8.zh.HK", split("chinese-big5,chinese-hkscs"));
+        if (FontUtilities.isSolaris8) {
+            reorderMap.put("UTF-8.zh.CN", split("chinese-gb2312,chinese-big5"));
+        } else {
+            reorderMap.put("UTF-8.zh.CN",
+                           split("chinese-gb18030-0,chinese-gb18030-1"));
+        }
+        reorderMap.put("UTF-8.zh",
+                       split("chinese-big5,chinese-hkscs,chinese-gb18030-0,chinese-gb18030-1"));
+        reorderMap.put("Big5", "chinese-big5");
+        reorderMap.put("Big5-HKSCS", split("chinese-big5,chinese-hkscs"));
+        if (! FontUtilities.isSolaris8 && ! FontUtilities.isSolaris9) {
+            reorderMap.put("GB2312", split("chinese-gbk,chinese-gb2312"));
+        } else {
+            reorderMap.put("GB2312","chinese-gb2312");
+        }
+        reorderMap.put("x-EUC-TW",
+            split("chinese-cns11643-1,chinese-cns11643-2,chinese-cns11643-3"));
+        reorderMap.put("GBK", "chinese-gbk");
+        reorderMap.put("GB18030",split("chinese-gb18030-0,chinese-gb18030-1"));
+
+        reorderMap.put("TIS-620", "thai");
+        reorderMap.put("x-PCK",
+                       split("japanese-x0201,japanese-x0208,japanese-x0212"));
+        reorderMap.put("x-eucJP-Open",
+                       split("japanese-x0201,japanese-x0208,japanese-x0212"));
+        reorderMap.put("EUC-KR", "korean");
+        /* Don't create a no-op entry, so we can optimize this case */
+//      reorderMap.put("ISO-8859-1", "latin-1");
+        reorderMap.put("ISO-8859-2", "latin-2");
+        reorderMap.put("ISO-8859-5", "cyrillic-iso8859-5");
+        reorderMap.put("windows-1251", "cyrillic-cp1251");
+        reorderMap.put("KOI8-R", "cyrillic-koi8-r");
+        reorderMap.put("ISO-8859-6", "arabic");
+        reorderMap.put("ISO-8859-7", "greek");
+        reorderMap.put("ISO-8859-8", "hebrew");
+        reorderMap.put("ISO-8859-9", "latin-5");
+        reorderMap.put("ISO-8859-13", "latin-7");
+        reorderMap.put("ISO-8859-15", "latin-9");
+    }
+
+    private void initReorderMapForLinux() {
+        reorderMap.put("UTF-8.ja.JP", "japanese-iso10646");
+        reorderMap.put("UTF-8.ko.KR", "korean-iso10646");
+        reorderMap.put("UTF-8.zh.TW", "chinese-tw-iso10646");
+        reorderMap.put("UTF-8.zh.HK", "chinese-tw-iso10646");
+        reorderMap.put("UTF-8.zh.CN", "chinese-cn-iso10646");
+        reorderMap.put("x-euc-jp-linux",
+                        split("japanese-x0201,japanese-x0208"));
+        reorderMap.put("GB2312", "chinese-gb18030");
+        reorderMap.put("Big5", "chinese-big5");
+        reorderMap.put("EUC-KR", "korean");
+        if (osName.equals("Sun")){
+            reorderMap.put("GB18030", "chinese-cn-iso10646");
+        }
+        else {
+            reorderMap.put("GB18030", "chinese-gb18030");
+        }
+    }
+
+    /**
+     * Sets the OS name and version from environment information.
+     */
+    protected void setOsNameAndVersion(){
+        super.setOsNameAndVersion();
+
+        if (osName.equals("SunOS")) {
+            //don't care os name on Solaris
+            osName = null;
+        } else if (osName.equals("Linux")) {
+            try {
+                File f;
+                if ((f = new File("/etc/fedora-release")).canRead()) {
+                    osName = "Fedora";
+                    osVersion = getVersionString(f);
+                } else if ((f = new File("/etc/redhat-release")).canRead()) {
+                    osName = "RedHat";
+                    osVersion = getVersionString(f);
+                } else if ((f = new File("/etc/turbolinux-release")).canRead()) {
+                    osName = "Turbo";
+                    osVersion = getVersionString(f);
+                } else if ((f = new File("/etc/SuSE-release")).canRead()) {
+                    osName = "SuSE";
+                    osVersion = getVersionString(f);
+                } else if ((f = new File("/etc/lsb-release")).canRead()) {
+                    /* Ubuntu and (perhaps others) use only lsb-release.
+                     * Syntax and encoding is compatible with java properties.
+                     * For Ubuntu the ID is "Ubuntu".
+                     */
+                    Properties props = new Properties();
+                    props.load(new FileInputStream(f));
+                    osName = props.getProperty("DISTRIB_ID");
+                    osVersion =  props.getProperty("DISTRIB_RELEASE");
+                }
+            } catch (Exception e) {
+            }
+        }
+        return;
+    }
+
+    /**
+     * Gets the OS version string from a Linux release-specific file.
+     */
+    private String getVersionString(File f){
+        try {
+            Scanner sc  = new Scanner(f);
+            return sc.findInLine("(\\d)+((\\.)(\\d)+)*");
+        }
+        catch (Exception e){
+        }
+        return null;
+    }
+
+    private static final String fontsDirPrefix = "$JRE_LIB_FONTS";
+
+    protected String mapFileName(String fileName) {
+        if (fileName != null && fileName.startsWith(fontsDirPrefix)) {
+            return SunFontManager.jreFontDirName
+                    + fileName.substring(fontsDirPrefix.length());
+        }
+        return fileName;
+    }
+
+    // overrides FontConfiguration.getFallbackFamilyName
+    public String getFallbackFamilyName(String fontName, String defaultFallback) {
+        // maintain compatibility with old font.properties files, which
+        // either had aliases for TimesRoman & Co. or defined mappings for them.
+        String compatibilityName = getCompatibilityFamilyName(fontName);
+        if (compatibilityName != null) {
+            return compatibilityName;
+        }
+        return defaultFallback;
+    }
+
+    protected String getEncoding(String awtFontName,
+            String characterSubsetName) {
+        // extract encoding field from XLFD
+        int beginIndex = 0;
+        int fieldNum = 13; // charset registry field
+        while (fieldNum-- > 0 && beginIndex >= 0) {
+            beginIndex = awtFontName.indexOf("-", beginIndex) + 1;
+        }
+        if (beginIndex == -1) {
+            return "default";
+        }
+        String xlfdEncoding = awtFontName.substring(beginIndex);
+        if (xlfdEncoding.indexOf("fontspecific") > 0) {
+            if (awtFontName.indexOf("dingbats") > 0) {
+                return "sun.font.X11Dingbats";
+            } else if (awtFontName.indexOf("symbol") > 0) {
+                return "sun.awt.Symbol";
+            }
+        }
+        String encoding = encodingMap.get(xlfdEncoding);
+        if (encoding == null) {
+            encoding = "default";
+        }
+        return encoding;
+    }
+
+    protected Charset getDefaultFontCharset(String fontName) {
+        return Charset.forName("ISO8859_1");
+    }
+
+    protected String getFaceNameFromComponentFontName(String componentFontName) {
+        return null;
+    }
+
+    protected String getFileNameFromComponentFontName(String componentFontName) {
+        // for X11, component font name is XLFD
+        // if we have a file name already, just use it; otherwise let's see
+        // what the graphics environment can provide
+        String fileName = getFileNameFromPlatformName(componentFontName);
+        if (fileName != null && fileName.charAt(0) == '/' &&
+            !needToSearchForFile(fileName)) {
+            return fileName;
+        }
+        return ((X11FontManager) fontManager).getFileNameFromXLFD(componentFontName);
+    }
+
+    public HashSet<String> getAWTFontPathSet() {
+        HashSet<String> fontDirs = new HashSet<String>();
+        short[] scripts = getCoreScripts(0);
+        for (int i = 0; i< scripts.length; i++) {
+            String path = getString(table_awtfontpaths[scripts[i]]);
+            if (path != null) {
+                int start = 0;
+                int colon = path.indexOf(':');
+                while (colon >= 0) {
+                    fontDirs.add(path.substring(start, colon));
+                    start = colon + 1;
+                    colon = path.indexOf(':', start);
+                }
+                fontDirs.add((start == 0) ? path : path.substring(start));
+            }
+        }
+        return fontDirs;
+    }
+
+    /* methods for table setup ***********************************************/
+
+    private static HashMap<String, String> encodingMap = new HashMap<>();
+
+    private void initTables() {
+        // encodingMap maps XLFD encoding component to
+        // name of corresponding java.nio charset
+        encodingMap.put("iso8859-1", "ISO-8859-1");
+        encodingMap.put("iso8859-2", "ISO-8859-2");
+        encodingMap.put("iso8859-4", "ISO-8859-4");
+        encodingMap.put("iso8859-5", "ISO-8859-5");
+        encodingMap.put("iso8859-6", "ISO-8859-6");
+        encodingMap.put("iso8859-7", "ISO-8859-7");
+        encodingMap.put("iso8859-8", "ISO-8859-8");
+        encodingMap.put("iso8859-9", "ISO-8859-9");
+        encodingMap.put("iso8859-13", "ISO-8859-13");
+        encodingMap.put("iso8859-15", "ISO-8859-15");
+        encodingMap.put("gb2312.1980-0", "sun.font.X11GB2312");
+        if (osName == null) {
+            // use standard converter on Solaris
+            encodingMap.put("gbk-0", "GBK");
+        } else {
+            encodingMap.put("gbk-0", "sun.font.X11GBK");
+        }
+        encodingMap.put("gb18030.2000-0", "sun.font.X11GB18030_0");
+        encodingMap.put("gb18030.2000-1", "sun.font.X11GB18030_1");
+        encodingMap.put("cns11643-1", "sun.font.X11CNS11643P1");
+        encodingMap.put("cns11643-2", "sun.font.X11CNS11643P2");
+        encodingMap.put("cns11643-3", "sun.font.X11CNS11643P3");
+        encodingMap.put("big5-1", "Big5");
+        encodingMap.put("big5-0", "Big5");
+        encodingMap.put("hkscs-1", "Big5-HKSCS");
+        encodingMap.put("ansi-1251", "windows-1251");
+        encodingMap.put("koi8-r", "KOI8-R");
+        encodingMap.put("jisx0201.1976-0", "JIS0201");
+        encodingMap.put("jisx0208.1983-0", "JIS0208");
+        encodingMap.put("jisx0212.1990-0", "JIS0212");
+        encodingMap.put("ksc5601.1987-0", "sun.font.X11KSC5601");
+        encodingMap.put("ksc5601.1992-3", "sun.font.X11Johab");
+        encodingMap.put("tis620.2533-0", "TIS-620");
+        encodingMap.put("iso10646-1", "UTF-16BE");
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11Dingbats.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.*;
+
+public class X11Dingbats extends Charset {
+    public X11Dingbats () {
+        super("X11Dingbats", null);
+    }
+
+    public CharsetEncoder newEncoder() {
+        return new Encoder(this);
+    }
+
+    /* Seems like supporting a decoder is required, but we aren't going
+     * to be publically exposing this class, so no need to waste work
+     */
+    public CharsetDecoder newDecoder() {
+        throw new Error("Decoder is not supported by X11Dingbats Charset");
+    }
+
+    public boolean contains(Charset cs) {
+        return cs instanceof X11Dingbats;
+    }
+
+    private static class Encoder extends CharsetEncoder {
+        public Encoder(Charset cs) {
+            super(cs, 1.0f, 1.0f);
+        }
+
+        public boolean canEncode(char ch) {
+            if (ch >= 0x2701 && ch <= 0x275e) { // direct map
+                return true;
+            }
+            if (ch >= 0x2761 && ch <= 0x27be) {
+                return (table[ch - 0x2761] != 0x00);
+            }
+            return false;
+        }
+
+        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
+            char[] sa = src.array();
+            int sp = src.arrayOffset() + src.position();
+            int sl = src.arrayOffset() + src.limit();
+            assert (sp <= sl);
+            sp = (sp <= sl ? sp : sl);
+            byte[] da = dst.array();
+            int dp = dst.arrayOffset() + dst.position();
+            int dl = dst.arrayOffset() + dst.limit();
+            assert (dp <= dl);
+            dp = (dp <= dl ? dp : dl);
+
+            try {
+                while (sp < sl) {
+                    char c = sa[sp];
+                    if (dl - dp < 1)
+                        return CoderResult.OVERFLOW;
+
+                    if (!canEncode(c))
+                        return CoderResult.unmappableForLength(1);
+                    sp++;
+                    if (c >= 0x2761){
+                        da[dp++] = table[c - 0x2761]; // table lookup
+                    } else {
+                        da[dp++] = (byte)(c + 0x20 - 0x2700); // direct map
+                    }
+                }
+                return CoderResult.UNDERFLOW;
+            } finally {
+                src.position(sp - src.arrayOffset());
+                dst.position(dp - dst.arrayOffset());
+            }
+        }
+
+        private static byte[] table = {
+            (byte)0xa1, (byte)0xa2, (byte)0xa3, (byte)0xa4,
+            (byte)0xa5, (byte)0xa6, (byte)0xa7,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0xb6, (byte)0xb7,
+            (byte)0xb8, (byte)0xb9, (byte)0xba, (byte)0xbb,
+            (byte)0xbc, (byte)0xbd, (byte)0xbe, (byte)0xbf,
+            (byte)0xc0, (byte)0xc1, (byte)0xc2, (byte)0xc3,
+            (byte)0xc4, (byte)0xc5, (byte)0xc6, (byte)0xc7,
+            (byte)0xc8, (byte)0xc9, (byte)0xca, (byte)0xcb,
+            (byte)0xcc, (byte)0xcd, (byte)0xce, (byte)0xcf,
+            (byte)0xd0, (byte)0xd1, (byte)0xd2, (byte)0xd3,
+            (byte)0xd4, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0xd8, (byte)0xd9, (byte)0xda, (byte)0xdb,
+            (byte)0xdc, (byte)0xdd, (byte)0xde, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00};
+
+        /* The default implementation creates a decoder and we don't have one */
+        public boolean isLegalReplacement(byte[] repl) {
+            return true;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11GB18030_0.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,4273 @@
+/*
+ * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CharsetDecoder;
+
+public class X11GB18030_0 extends Charset {
+    public X11GB18030_0 () {
+        super("X11GB18030_0", null);
+    }
+
+    public CharsetEncoder newEncoder() {
+        return new Encoder(this);
+    }
+
+    /* Seems like supporting a decoder is required, but we aren't going
+     * to be publically exposing this class, so no need to waste work
+     */
+    public CharsetDecoder newDecoder() {
+        throw new Error("Decoder is not implemented for X11GB18030_0 Charset");
+    }
+
+    public boolean contains(Charset cs) {
+        return cs instanceof X11GB18030_0;
+    }
+
+    private static class Encoder extends DoubleByteEncoder {
+        public Encoder(Charset cs) {
+            super(cs, index1, index2);
+        }
+        protected int encodeSingle(char inputChar) {
+            return -1;
+        }
+        private final static String innerIndex0=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uA1E8\u0000\u0000\uA1EC"+
+            "\uA1A7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA1E3\uA1C0\u0000\u0000\u0000\u0000\u0000\uA1A4"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1C1"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA8A4\uA8A2\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA8A8\uA8A6\uA8BA\u0000\uA8AC\uA8AA\u0000\u0000"+
+            "\u0000\u0000\uA8B0\uA8AE\u0000\u0000\u0000\uA1C2"+
+            "\u0000\uA8B4\uA8B2\u0000\uA8B9\u0000\u0000\u0000"+
+            "\u0000\uA8A1\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uA8A5\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uA8A7\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uA8A9\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uA8BD\u0000\u0000\u0000"+
+            "\uA8BE\u0000\u0000\u0000\u0000\uA8AD\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uA8B1\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uA8A3\u0000"+
+            "\uA8AB\u0000\uA8AF\u0000\uA8B3\u0000\uA8B5\u0000"+
+            "\uA8B6\u0000\uA8B7\u0000\uA8B8\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA8BF\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA8BB\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA8C0\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1A6"+
+            "\u0000\uA1A5\uA840\uA841\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA842\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA6A1\uA6A2\uA6A3\uA6A4\uA6A5\uA6A6\uA6A7"+
+            "\uA6A8\uA6A9\uA6AA\uA6AB\uA6AC\uA6AD\uA6AE\uA6AF"+
+            "\uA6B0\uA6B1\u0000\uA6B2\uA6B3\uA6B4\uA6B5\uA6B6"+
+            "\uA6B7\uA6B8\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA6C1\uA6C2\uA6C3\uA6C4\uA6C5\uA6C6\uA6C7"+
+            "\uA6C8\uA6C9\uA6CA\uA6CB\uA6CC\uA6CD\uA6CE\uA6CF"+
+            "\uA6D0\uA6D1\u0000\uA6D2\uA6D3\uA6D4\uA6D5\uA6D6"+
+            "\uA6D7\uA6D8\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA7A7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA7A1\uA7A2\uA7A3\uA7A4\uA7A5\uA7A6\uA7A8\uA7A9"+
+            "\uA7AA\uA7AB\uA7AC\uA7AD\uA7AE\uA7AF\uA7B0\uA7B1"+
+            "\uA7B2\uA7B3\uA7B4\uA7B5\uA7B6\uA7B7\uA7B8\uA7B9"+
+            "\uA7BA\uA7BB\uA7BC\uA7BD\uA7BE\uA7BF\uA7C0\uA7C1"+
+            "\uA7D1\uA7D2\uA7D3\uA7D4\uA7D5\uA7D6\uA7D8\uA7D9"+
+            "\uA7DA\uA7DB\uA7DC\uA7DD\uA7DE\uA7DF\uA7E0\uA7E1"+
+            "\uA7E2\uA7E3\uA7E4\uA7E5\uA7E6\uA7E7\uA7E8\uA7E9"+
+            "\uA7EA\uA7EB\uA7EC\uA7ED\uA7EE\uA7EF\uA7F0\uA7F1"+
+            "\u0000\uA7D7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA95C\u0000\u0000\uA843\uA1AA\uA844\uA1AC\u0000"+
+            "\uA1AE\uA1AF\u0000\u0000\uA1B0\uA1B1\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uA845\uA1AD\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA1EB\u0000\uA1E4\uA1E5\u0000\uA846\u0000\u0000"+
+            "\u0000\u0000\u0000\uA1F9\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uA2E3\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uA1E6\u0000\uA847\u0000\u0000"+
+            "\u0000\uA848\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uA1ED\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA959\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA2F1\uA2F2\uA2F3\uA2F4\uA2F5\uA2F6\uA2F7\uA2F8"+
+            "\uA2F9\uA2FA\uA2FB\uA2FC\u0000\u0000\u0000\u0000"+
+            "\uA2A1\uA2A2\uA2A3\uA2A4\uA2A5\uA2A6\uA2A7\uA2A8"+
+            "\uA2A9\uA2AA\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA1FB\uA1FC\uA1FA\uA1FD\u0000\u0000\uA849\uA84A"+
+            "\uA84B\uA84C\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA1CA\u0000\u0000\u0000\u0000\u0000\u0000\uA1C7"+
+            "\u0000\uA1C6\u0000\u0000\u0000\uA84D\u0000\u0000"+
+            "\u0000\u0000\uA1CC\u0000\u0000\uA1D8\uA1DE\uA84E"+
+            "\uA1CF\u0000\u0000\uA84F\u0000\uA1CE\u0000\uA1C4"+
+            "\uA1C5\uA1C9\uA1C8\uA1D2\u0000\u0000\uA1D3\u0000"+
+            "\u0000\u0000\u0000\u0000\uA1E0\uA1DF\uA1C3\uA1CB"+
+            "\u0000\u0000\u0000\u0000\u0000\uA1D7\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA1D6\u0000\u0000\u0000\uA1D5\u0000\u0000\u0000"+
+            "\u0000\u0000\uA850\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA1D9\uA1D4\u0000\u0000\uA1DC\uA1DD\uA851\uA852"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uA1DA\uA1DB"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uA892\u0000\u0000"+
+            "\u0000\uA1D1\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uA1CD\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA853"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uA1D0\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA2D9\uA2DA\uA2DB\uA2DC\uA2DD\uA2DE\uA2DF\uA2E0"+
+            "\uA2E1\uA2E2\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uA2C5\uA2C6\uA2C7\uA2C8"+
+            "\uA2C9\uA2CA\uA2CB\uA2CC\uA2CD\uA2CE\uA2CF\uA2D0"+
+            "\uA2D1\uA2D2\uA2D3\uA2D4\uA2D5\uA2D6\uA2D7\uA2D8"+
+            "\uA2B1\uA2B2\uA2B3\uA2B4\uA2B5\uA2B6\uA2B7\uA2B8"+
+            "\uA2B9\uA2BA\uA2BB\uA2BC\uA2BD\uA2BE\uA2BF\uA2C0"+
+            "\uA2C1\uA2C2\uA2C3\uA2C4\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA9A4\uA9A5\uA9A6\uA9A7\uA9A8\uA9A9\uA9AA\uA9AB"+
+            "\uA9AC\uA9AD\uA9AE\uA9AF\uA9B0\uA9B1\uA9B2\uA9B3"+
+            "\uA9B4\uA9B5\uA9B6\uA9B7\uA9B8\uA9B9\uA9BA\uA9BB"+
+            "\uA9BC\uA9BD\uA9BE\uA9BF\uA9C0\uA9C1\uA9C2\uA9C3"+
+            "\uA9C4\uA9C5\uA9C6\uA9C7\uA9C8\uA9C9\uA9CA\uA9CB"+
+            "\uA9CC\uA9CD\uA9CE\uA9CF\uA9D0\uA9D1\uA9D2\uA9D3"+
+            "\uA9D4\uA9D5\uA9D6\uA9D7\uA9D8\uA9D9\uA9DA\uA9DB"+
+            "\uA9DC\uA9DD\uA9DE\uA9DF\uA9E0\uA9E1\uA9E2\uA9E3"+
+            "\uA9E4\uA9E5\uA9E6\uA9E7\uA9E8\uA9E9\uA9EA\uA9EB"+
+            "\uA9EC\uA9ED\uA9EE\uA9EF\u0000\u0000\u0000\u0000"+
+            "\uA854\uA855\uA856\uA857\uA858\uA859\uA85A\uA85B"+
+            "\uA85C\uA85D\uA85E\uA85F\uA860\uA861\uA862\uA863"+
+            "\uA864\uA865\uA866\uA867\uA868\uA869\uA86A\uA86B"+
+            "\uA86C\uA86D\uA86E\uA86F\uA870\uA871\uA872\uA873"+
+            "\uA874\uA875\uA876\uA877\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA878\uA879\uA87A\uA87B\uA87C\uA87D\uA87E"+
+            "\uA880\uA881\uA882\uA883\uA884\uA885\uA886\uA887"+
+            "\u0000\u0000\u0000\uA888\uA889\uA88A\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA1F6\uA1F5\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uA1F8\uA1F7\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uA88B\uA88C\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uA1F4\uA1F3"+
+            "\u0000\u0000\u0000\uA1F0\u0000\u0000\uA1F2\uA1F1"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uA88D\uA88E\uA88F\uA890\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uA1EF\uA1EE\u0000"+
+            "\u0000\uA891\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA1E2\u0000\uA1E1\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uFE50\u0000\u0000\uFE54\u0000\u0000\u0000"+
+            "\uFE57\u0000\u0000\uFE58\uFE5D\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE5E"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE6B"+
+            "\u0000\u0000\uFE6E\u0000\u0000\u0000\uFE71\u0000"+
+            "\u0000\u0000\u0000\uFE73\u0000\u0000\uFE74\uFE75"+
+            "\u0000\u0000\u0000\uFE79\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uFE84\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA98A\uA98B\uA98C\uA98D\uA98E\uA98F\uA990\uA991"+
+            "\uA992\uA993\uA994\uA995\u0000\u0000\u0000\u0000"+
+            "\uA1A1\uA1A2\uA1A3\uA1A8\u0000\uA1A9\uA965\uA996"+
+            "\uA1B4\uA1B5\uA1B6\uA1B7\uA1B8\uA1B9\uA1BA\uA1BB"+
+            "\uA1BE\uA1BF\uA893\uA1FE\uA1B2\uA1B3\uA1BC\uA1BD"+
+            "\u0000\u0000\u0000\u0000\u0000\uA894\uA895\u0000"+
+            "\u0000\uA940\uA941\uA942\uA943\uA944\uA945\uA946"+
+            "\uA947\uA948\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uA989\u0000"+
+            "\u0000\uA4A1\uA4A2\uA4A3\uA4A4\uA4A5\uA4A6\uA4A7"+
+            "\uA4A8\uA4A9\uA4AA\uA4AB\uA4AC\uA4AD\uA4AE\uA4AF"+
+            "\uA4B0\uA4B1\uA4B2\uA4B3\uA4B4\uA4B5\uA4B6\uA4B7"+
+            "\uA4B8\uA4B9\uA4BA\uA4BB\uA4BC\uA4BD\uA4BE\uA4BF"+
+            "\uA4C0\uA4C1\uA4C2\uA4C3\uA4C4\uA4C5\uA4C6\uA4C7"+
+            "\uA4C8\uA4C9\uA4CA\uA4CB\uA4CC\uA4CD\uA4CE\uA4CF"+
+            "\uA4D0\uA4D1\uA4D2\uA4D3\uA4D4\uA4D5\uA4D6\uA4D7"+
+            "\uA4D8\uA4D9\uA4DA\uA4DB\uA4DC\uA4DD\uA4DE\uA4DF"+
+            "\uA4E0\uA4E1\uA4E2\uA4E3\uA4E4\uA4E5\uA4E6\uA4E7"+
+            "\uA4E8\uA4E9\uA4EA\uA4EB\uA4EC\uA4ED\uA4EE\uA4EF"+
+            "\uA4F0\uA4F1\uA4F2\uA4F3\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uA961\uA962\uA966\uA967\u0000"+
+            "\u0000\uA5A1\uA5A2\uA5A3\uA5A4\uA5A5\uA5A6\uA5A7"+
+            "\uA5A8\uA5A9\uA5AA\uA5AB\uA5AC\uA5AD\uA5AE\uA5AF"+
+            "\uA5B0\uA5B1\uA5B2\uA5B3\uA5B4\uA5B5\uA5B6\uA5B7"+
+            "\uA5B8\uA5B9\uA5BA\uA5BB\uA5BC\uA5BD\uA5BE\uA5BF"+
+            "\uA5C0\uA5C1\uA5C2\uA5C3\uA5C4\uA5C5\uA5C6\uA5C7"+
+            "\uA5C8\uA5C9\uA5CA\uA5CB\uA5CC\uA5CD\uA5CE\uA5CF"+
+            "\uA5D0\uA5D1\uA5D2\uA5D3\uA5D4\uA5D5\uA5D6\uA5D7"+
+            "\uA5D8\uA5D9\uA5DA\uA5DB\uA5DC\uA5DD\uA5DE\uA5DF"+
+            "\uA5E0\uA5E1\uA5E2\uA5E3\uA5E4\uA5E5\uA5E6\uA5E7"+
+            "\uA5E8\uA5E9\uA5EA\uA5EB\uA5EC\uA5ED\uA5EE\uA5EF"+
+            "\uA5F0\uA5F1\uA5F2\uA5F3\uA5F4\uA5F5\uA5F6\u0000"+
+            "\u0000\u0000\u0000\u0000\uA960\uA963\uA964\u0000";
+
+        private final static String innerIndex1=
+            "\u0000\u0000\u0000\u0000\u0000\uA8C5\uA8C6\uA8C7"+
+            "\uA8C8\uA8C9\uA8CA\uA8CB\uA8CC\uA8CD\uA8CE\uA8CF"+
+            "\uA8D0\uA8D1\uA8D2\uA8D3\uA8D4\uA8D5\uA8D6\uA8D7"+
+            "\uA8D8\uA8D9\uA8DA\uA8DB\uA8DC\uA8DD\uA8DE\uA8DF"+
+            "\uA8E0\uA8E1\uA8E2\uA8E3\uA8E4\uA8E5\uA8E6\uA8E7"+
+            "\uA8E8\uA8E9\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA2E5\uA2E6\uA2E7\uA2E8\uA2E9\uA2EA\uA2EB\uA2EC"+
+            "\uA2ED\uA2EE\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA95A\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uA949\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uA94A\uA94B"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uA94C\uA94D\uA94E\u0000"+
+            "\u0000\uA94F\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uA950\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uA951\u0000"+
+            "\u0000\uA952\uA953\u0000\u0000\uA954\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE56"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uFE55\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE5A\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE5C\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uFE5B\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uFE60\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE5F\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE62"+
+            "\uFE65\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE63"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uFE64\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE68\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE69\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uFE6A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE6F\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE70"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE72"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uFE78\u0000\u0000\u0000"+
+            "\u0000\uFE77\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uFE7A\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE7B\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uFE7D\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uFE7C\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uFE80\u0000\u0000\u0000\u0000"+
+            "\u0000\uFE81\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uFE82\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uFE83\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+        private final static String innerIndex2=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE85"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uFE86\u0000\u0000\uFE87\u0000\u0000"+
+            "\u0000\u0000\uFE88\uFE89\u0000\uFE8A\uFE8B\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uFE8D\u0000\u0000\u0000\uFE8C"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE8F\uFE8E"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE96"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE93"+
+            "\uFE94\uFE95\uFE97\uFE92\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uFE98\uFE99\uFE9A\uFE9B\uFE9C"+
+            "\uFE9D\uFE9E\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE9F\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD2BB\uB6A1\u8140\uC6DF\u8141\u8142\u8143\uCDF2"+
+            "\uD5C9\uC8FD\uC9CF\uCFC2\uD8A2\uB2BB\uD3EB\u8144"+
+            "\uD8A4\uB3F3\u8145\uD7A8\uC7D2\uD8A7\uCAC0\u8146"+
+            "\uC7F0\uB1FB\uD2B5\uB4D4\uB6AB\uCBBF\uD8A9\u8147"+
+            "\u8148\u8149\uB6AA\u814A\uC1BD\uD1CF\u814B\uC9A5"+
+            "\uD8AD\u814C\uB8F6\uD1BE\uE3DC\uD6D0\u814D\u814E"+
+            "\uB7E1\u814F\uB4AE\u8150\uC1D9\u8151\uD8BC\u8152"+
+            "\uCDE8\uB5A4\uCEAA\uD6F7\u8153\uC0F6\uBED9\uD8AF"+
+            "\u8154\u8155\u8156\uC4CB\u8157\uBEC3\u8158\uD8B1"+
+            "\uC3B4\uD2E5\u8159\uD6AE\uCEDA\uD5A7\uBAF5\uB7A6"+
+            "\uC0D6\u815A\uC6B9\uC5D2\uC7C7\u815B\uB9D4\u815C"+
+            "\uB3CB\uD2D2\u815D\u815E\uD8BF\uBEC5\uC6F2\uD2B2"+
+            "\uCFB0\uCFE7\u815F\u8160\u8161\u8162\uCAE9\u8163"+
+            "\u8164\uD8C0\u8165\u8166\u8167\u8168\u8169\u816A"+
+            "\uC2F2\uC2D2\u816B\uC8E9\u816C\u816D\u816E\u816F"+
+            "\u8170\u8171\u8172\u8173\u8174\u8175\uC7AC\u8176"+
+            "\u8177\u8178\u8179\u817A\u817B\u817C\uC1CB\u817D"+
+            "\uD3E8\uD5F9\u817E\uCAC2\uB6FE\uD8A1\uD3DA\uBFF7"+
+            "\u8180\uD4C6\uBBA5\uD8C1\uCEE5\uBEAE\u8181\u8182"+
+            "\uD8A8\u8183\uD1C7\uD0A9\u8184\u8185\u8186\uD8BD"+
+            "\uD9EF\uCDF6\uBFBA\u8187\uBDBB\uBAA5\uD2E0\uB2FA"+
+            "\uBAE0\uC4B6\u8188\uCFED\uBEA9\uCDA4\uC1C1\u8189"+
+            "\u818A\u818B\uC7D7\uD9F1\u818C\uD9F4\u818D\u818E"+
+            "\u818F\u8190\uC8CB\uD8E9\u8191\u8192\u8193\uD2DA"+
+            "\uCAB2\uC8CA\uD8EC\uD8EA\uD8C6\uBDF6\uC6CD\uB3F0"+
+            "\u8194\uD8EB\uBDF1\uBDE9\u8195\uC8D4\uB4D3\u8196"+
+            "\u8197\uC2D8\u8198\uB2D6\uD7D0\uCACB\uCBFB\uD5CC"+
+            "\uB8B6\uCFC9\u8199\u819A\u819B\uD9DA\uD8F0\uC7AA"+
+            "\u819C\uD8EE\u819D\uB4FA\uC1EE\uD2D4\u819E\u819F"+
+            "\uD8ED\u81A0\uD2C7\uD8EF\uC3C7\u81A1\u81A2\u81A3"+
+            "\uD1F6\u81A4\uD6D9\uD8F2\u81A5\uD8F5\uBCFE\uBCDB"+
+            "\u81A6\u81A7\u81A8\uC8CE\u81A9\uB7DD\u81AA\uB7C2"+
+            "\u81AB\uC6F3\u81AC\u81AD\u81AE\u81AF\u81B0\u81B1"+
+            "\u81B2\uD8F8\uD2C1\u81B3\u81B4\uCEE9\uBCBF\uB7FC"+
+            "\uB7A5\uD0DD\u81B5\u81B6\u81B7\u81B8\u81B9\uD6DA"+
+            "\uD3C5\uBBEF\uBBE1\uD8F1\u81BA\u81BB\uC9A1\uCEB0"+
+            "\uB4AB\u81BC\uD8F3\u81BD\uC9CB\uD8F6\uC2D7\uD8F7"+
+            "\u81BE\u81BF\uCEB1\uD8F9\u81C0\u81C1\u81C2\uB2AE"+
+            "\uB9C0\u81C3\uD9A3\u81C4\uB0E9\u81C5\uC1E6\u81C6"+
+            "\uC9EC\u81C7\uCBC5\u81C8\uCBC6\uD9A4\u81C9\u81CA"+
+            "\u81CB\u81CC\u81CD\uB5E8\u81CE\u81CF\uB5AB\u81D0"+
+            "\u81D1\u81D2\u81D3\u81D4\u81D5\uCEBB\uB5CD\uD7A1"+
+            "\uD7F4\uD3D3\u81D6\uCCE5\u81D7\uBACE\u81D8\uD9A2"+
+            "\uD9DC\uD3E0\uD8FD\uB7F0\uD7F7\uD8FE\uD8FA\uD9A1"+
+            "\uC4E3\u81D9\u81DA\uD3B6\uD8F4\uD9DD\u81DB\uD8FB"+
+            "\u81DC\uC5E5\u81DD\u81DE\uC0D0\u81DF\u81E0\uD1F0"+
+            "\uB0DB\u81E1\u81E2\uBCD1\uD9A6\u81E3\uD9A5\u81E4"+
+            "\u81E5\u81E6\u81E7\uD9AC\uD9AE\u81E8\uD9AB\uCAB9"+
+            "\u81E9\u81EA\u81EB\uD9A9\uD6B6\u81EC\u81ED\u81EE"+
+            "\uB3DE\uD9A8\u81EF\uC0FD\u81F0\uCACC\u81F1\uD9AA"+
+            "\u81F2\uD9A7\u81F3\u81F4\uD9B0\u81F5\u81F6\uB6B1"+
+            "\u81F7\u81F8\u81F9\uB9A9\u81FA\uD2C0\u81FB\u81FC"+
+            "\uCFC0\u81FD\u81FE\uC2C2\u8240\uBDC4\uD5EC\uB2E0"+
+            "\uC7C8\uBFEB\uD9AD\u8241\uD9AF\u8242\uCEEA\uBAEE"+
+            "\u8243\u8244\u8245\u8246\u8247\uC7D6\u8248\u8249"+
+            "\u824A\u824B\u824C\u824D\u824E\u824F\u8250\uB1E3"+
+            "\u8251\u8252\u8253\uB4D9\uB6ED\uD9B4\u8254\u8255"+
+            "\u8256\u8257\uBFA1\u8258\u8259\u825A\uD9DE\uC7CE"+
+            "\uC0FE\uD9B8\u825B\u825C\u825D\u825E\u825F\uCBD7"+
+            "\uB7FD\u8260\uD9B5\u8261\uD9B7\uB1A3\uD3E1\uD9B9"+
+            "\u8262\uD0C5\u8263\uD9B6\u8264\u8265\uD9B1\u8266"+
+            "\uD9B2\uC1A9\uD9B3\u8267\u8268\uBCF3\uD0DE\uB8A9"+
+            "\u8269\uBEE3\u826A\uD9BD\u826B\u826C\u826D\u826E"+
+            "\uD9BA\u826F\uB0B3\u8270\u8271\u8272\uD9C2\u8273"+
+            "\u8274\u8275\u8276\u8277\u8278\u8279\u827A\u827B"+
+            "\u827C\u827D\u827E\u8280\uD9C4\uB1B6\u8281\uD9BF"+
+            "\u8282\u8283\uB5B9\u8284\uBEF3\u8285\u8286\u8287"+
+            "\uCCC8\uBAF2\uD2D0\u8288\uD9C3\u8289\u828A\uBDE8"+
+            "\u828B\uB3AB\u828C\u828D\u828E\uD9C5\uBEEB\u828F"+
+            "\uD9C6\uD9BB\uC4DF\u8290\uD9BE\uD9C1\uD9C0\u8291"+
+            "\u8292\u8293\u8294\u8295\u8296\u8297\u8298\u8299"+
+            "\u829A\u829B\uD5AE\u829C\uD6B5\u829D\uC7E3\u829E"+
+            "\u829F\u82A0\u82A1\uD9C8\u82A2\u82A3\u82A4\uBCD9"+
+            "\uD9CA\u82A5\u82A6\u82A7\uD9BC\u82A8\uD9CB\uC6AB"+
+            "\u82A9\u82AA\u82AB\u82AC\u82AD\uD9C9\u82AE\u82AF"+
+            "\u82B0\u82B1\uD7F6\u82B2\uCDA3\u82B3\u82B4\u82B5"+
+            "\u82B6\u82B7\u82B8\u82B9\u82BA\uBDA1\u82BB\u82BC"+
+            "\u82BD\u82BE\u82BF\u82C0\uD9CC\u82C1\u82C2\u82C3"+
+            "\u82C4\u82C5\u82C6\u82C7\u82C8\u82C9\uC5BC\uCDB5"+
+            "\u82CA\u82CB\u82CC\uD9CD\u82CD\u82CE\uD9C7\uB3A5"+
+            "\uBFFE\u82CF\u82D0\u82D1\u82D2\uB8B5\u82D3\u82D4"+
+            "\uC0FC\u82D5\u82D6\u82D7\u82D8\uB0F8\u82D9\u82DA"+
+            "\u82DB\u82DC\u82DD\u82DE\u82DF\u82E0\u82E1\u82E2"+
+            "\u82E3\u82E4\u82E5\u82E6\u82E7\u82E8\u82E9\u82EA"+
+            "\u82EB\u82EC\u82ED\uB4F6\u82EE\uD9CE\u82EF\uD9CF"+
+            "\uB4A2\uD9D0\u82F0\u82F1\uB4DF\u82F2\u82F3\u82F4"+
+            "\u82F5\u82F6\uB0C1\u82F7\u82F8\u82F9\u82FA\u82FB"+
+            "\u82FC\u82FD\uD9D1\uC9B5\u82FE\u8340\u8341\u8342"+
+            "\u8343\u8344\u8345\u8346\u8347\u8348\u8349\u834A"+
+            "\u834B\u834C\u834D\u834E\u834F\u8350\u8351\uCFF1"+
+            "\u8352\u8353\u8354\u8355\u8356\u8357\uD9D2\u8358"+
+            "\u8359\u835A\uC1C5\u835B\u835C\u835D\u835E\u835F"+
+            "\u8360\u8361\u8362\u8363\u8364\u8365\uD9D6\uC9AE"+
+            "\u8366\u8367\u8368\u8369\uD9D5\uD9D4\uD9D7\u836A"+
+            "\u836B\u836C\u836D\uCBDB\u836E\uBDA9\u836F\u8370"+
+            "\u8371\u8372\u8373\uC6A7\u8374\u8375\u8376\u8377"+
+            "\u8378\u8379\u837A\u837B\u837C\u837D\uD9D3\uD9D8"+
+            "\u837E\u8380\u8381\uD9D9\u8382\u8383\u8384\u8385"+
+            "\u8386\u8387\uC8E5\u8388\u8389\u838A\u838B\u838C"+
+            "\u838D\u838E\u838F\u8390\u8391\u8392\u8393\u8394"+
+            "\u8395\uC0DC\u8396\u8397\u8398\u8399\u839A\u839B"+
+            "\u839C\u839D\u839E\u839F\u83A0\u83A1\u83A2\u83A3"+
+            "\u83A4\u83A5\u83A6\u83A7\u83A8\u83A9\u83AA\u83AB"+
+            "\u83AC\u83AD\u83AE\u83AF\u83B0\u83B1\u83B2\uB6F9"+
+            "\uD8A3\uD4CA\u83B3\uD4AA\uD0D6\uB3E4\uD5D7\u83B4"+
+            "\uCFC8\uB9E2\u83B5\uBFCB\u83B6\uC3E2\u83B7\u83B8"+
+            "\u83B9\uB6D2\u83BA\u83BB\uCDC3\uD9EE\uD9F0\u83BC"+
+            "\u83BD\u83BE\uB5B3\u83BF\uB6B5\u83C0\u83C1\u83C2"+
+            "\u83C3\u83C4\uBEA4\u83C5\u83C6\uC8EB\u83C7\u83C8"+
+            "\uC8AB\u83C9\u83CA\uB0CB\uB9AB\uC1F9\uD9E2\u83CB"+
+            "\uC0BC\uB9B2\u83CC\uB9D8\uD0CB\uB1F8\uC6E4\uBEDF"+
+            "\uB5E4\uD7C8\u83CD\uD1F8\uBCE6\uCADE\u83CE\u83CF"+
+            "\uBCBD\uD9E6\uD8E7\u83D0\u83D1\uC4DA\u83D2\u83D3"+
+            "\uB8D4\uC8BD\u83D4\u83D5\uB2E1\uD4D9\u83D6\u83D7"+
+            "\u83D8\u83D9\uC3B0\u83DA\u83DB\uC3E1\uDAA2\uC8DF"+
+            "\u83DC\uD0B4\u83DD\uBEFC\uC5A9\u83DE\u83DF\u83E0"+
+            "\uB9DA\u83E1\uDAA3\u83E2\uD4A9\uDAA4\u83E3\u83E4"+
+            "\u83E5\u83E6\u83E7\uD9FB\uB6AC\u83E8\u83E9\uB7EB"+
+            "\uB1F9\uD9FC\uB3E5\uBEF6\u83EA\uBFF6\uD2B1\uC0E4"+
+            "\u83EB\u83EC\u83ED\uB6B3\uD9FE\uD9FD\u83EE\u83EF"+
+            "\uBEBB\u83F0\u83F1\u83F2\uC6E0\u83F3\uD7BC\uDAA1"+
+            "\u83F4\uC1B9\u83F5\uB5F2\uC1E8\u83F6\u83F7\uBCF5"+
+            "\u83F8\uB4D5\u83F9\u83FA\u83FB\u83FC\u83FD\u83FE"+
+            "\u8440\u8441\u8442\uC1DD\u8443\uC4FD\u8444\u8445"+
+            "\uBCB8\uB7B2\u8446\u8447\uB7EF\u8448\u8449\u844A"+
+            "\u844B\u844C\u844D\uD9EC\u844E\uC6BE\u844F\uBFAD"+
+            "\uBBCB\u8450\u8451\uB5CA\u8452\uDBC9\uD0D7\u8453"+
+            "\uCDB9\uB0BC\uB3F6\uBBF7\uDBCA\uBAAF\u8454\uD4E4"+
+            "\uB5B6\uB5F3\uD8D6\uC8D0\u8455\u8456\uB7D6\uC7D0"+
+            "\uD8D7\u8457\uBFAF\u8458\u8459\uDBBB\uD8D8\u845A"+
+            "\u845B\uD0CC\uBBAE\u845C\u845D\u845E\uEBBE\uC1D0"+
+            "\uC1F5\uD4F2\uB8D5\uB4B4\u845F\uB3F5\u8460\u8461"+
+            "\uC9BE\u8462\u8463\u8464\uC5D0\u8465\u8466\u8467"+
+            "\uC5D9\uC0FB\u8468\uB1F0\u8469\uD8D9\uB9CE\u846A"+
+            "\uB5BD\u846B\u846C\uD8DA\u846D\u846E\uD6C6\uCBA2"+
+            "\uC8AF\uC9B2\uB4CC\uBFCC\u846F\uB9F4\u8470\uD8DB"+
+            "\uD8DC\uB6E7\uBCC1\uCCEA\u8471\u8472\u8473\u8474"+
+            "\u8475\u8476\uCFF7\u8477\uD8DD\uC7B0\u8478\u8479"+
+            "\uB9D0\uBDA3\u847A\u847B\uCCDE\u847C\uC6CA\u847D"+
+            "\u847E\u8480\u8481\u8482\uD8E0\u8483\uD8DE\u8484"+
+            "\u8485\uD8DF\u8486\u8487\u8488\uB0FE\u8489\uBEE7"+
+            "\u848A\uCAA3\uBCF4\u848B\u848C\u848D\u848E\uB8B1"+
+            "\u848F\u8490\uB8EE\u8491\u8492\u8493\u8494\u8495"+
+            "\u8496\u8497\u8498\u8499\u849A\uD8E2\u849B\uBDCB"+
+            "\u849C\uD8E4\uD8E3\u849D\u849E\u849F\u84A0\u84A1"+
+            "\uC5FC\u84A2\u84A3\u84A4\u84A5\u84A6\u84A7\u84A8"+
+            "\uD8E5\u84A9\u84AA\uD8E6\u84AB\u84AC\u84AD\u84AE"+
+            "\u84AF\u84B0\u84B1\uC1A6\u84B2\uC8B0\uB0EC\uB9A6"+
+            "\uBCD3\uCEF1\uDBBD\uC1D3\u84B3\u84B4\u84B5\u84B6"+
+            "\uB6AF\uD6FA\uC5AC\uBDD9\uDBBE\uDBBF\u84B7\u84B8"+
+            "\u84B9\uC0F8\uBEA2\uC0CD\u84BA\u84BB\u84BC\u84BD"+
+            "\u84BE\u84BF\u84C0\u84C1\u84C2\u84C3\uDBC0\uCAC6"+
+            "\u84C4\u84C5\u84C6\uB2AA\u84C7\u84C8\u84C9\uD3C2"+
+            "\u84CA\uC3E3\u84CB\uD1AB\u84CC\u84CD\u84CE\u84CF"+
+            "\uDBC2\u84D0\uC0D5\u84D1\u84D2\u84D3\uDBC3\u84D4"+
+            "\uBFB1\u84D5\u84D6\u84D7\u84D8\u84D9\u84DA\uC4BC"+
+            "\u84DB\u84DC\u84DD\u84DE\uC7DA\u84DF\u84E0\u84E1"+
+            "\u84E2\u84E3\u84E4\u84E5\u84E6\u84E7\u84E8\u84E9"+
+            "\uDBC4\u84EA\u84EB\u84EC\u84ED\u84EE\u84EF\u84F0"+
+            "\u84F1\uD9E8\uC9D7\u84F2\u84F3\u84F4\uB9B4\uCEF0"+
+            "\uD4C8\u84F5\u84F6\u84F7\u84F8\uB0FC\uB4D2\u84F9"+
+            "\uD0D9\u84FA\u84FB\u84FC\u84FD\uD9E9\u84FE\uDECB"+
+            "\uD9EB\u8540\u8541\u8542\u8543\uD8B0\uBBAF\uB1B1"+
+            "\u8544\uB3D7\uD8CE\u8545\u8546\uD4D1\u8547\u8548"+
+            "\uBDB3\uBFEF\u8549\uCFBB\u854A\u854B\uD8D0\u854C"+
+            "\u854D\u854E\uB7CB\u854F\u8550\u8551\uD8D1\u8552"+
+            "\u8553\u8554\u8555\u8556\u8557\u8558\u8559\u855A"+
+            "\u855B\uC6A5\uC7F8\uD2BD\u855C\u855D\uD8D2\uC4E4"+
+            "\u855E\uCAAE\u855F\uC7A7\u8560\uD8A6\u8561\uC9FD"+
+            "\uCEE7\uBBDC\uB0EB\u8562\u8563\u8564\uBBAA\uD0AD"+
+            "\u8565\uB1B0\uD7E4\uD7BF\u8566\uB5A5\uC2F4\uC4CF"+
+            "\u8567\u8568\uB2A9\u8569\uB2B7\u856A\uB1E5\uDFB2"+
+            "\uD5BC\uBFA8\uC2AC\uD8D5\uC2B1\u856B\uD8D4\uCED4"+
+            "\u856C\uDAE0\u856D\uCEC0\u856E\u856F\uD8B4\uC3AE"+
+            "\uD3A1\uCEA3\u8570\uBCB4\uC8B4\uC2D1\u8571\uBEED"+
+            "\uD0B6\u8572\uDAE1\u8573\u8574\u8575\u8576\uC7E4"+
+            "\u8577\u8578\uB3A7\u8579\uB6F2\uCCFC\uC0FA\u857A"+
+            "\u857B\uC0F7\u857C\uD1B9\uD1E1\uD8C7\u857D\u857E"+
+            "\u8580\u8581\u8582\u8583\u8584\uB2DE\u8585\u8586"+
+            "\uC0E5\u8587\uBAF1\u8588\u8589\uD8C8\u858A\uD4AD"+
+            "\u858B\u858C\uCFE1\uD8C9\u858D\uD8CA\uCFC3\u858E"+
+            "\uB3F8\uBEC7\u858F\u8590\u8591\u8592\uD8CB\u8593"+
+            "\u8594\u8595\u8596\u8597\u8598\u8599\uDBCC\u859A"+
+            "\u859B\u859C\u859D\uC8A5\u859E\u859F\u85A0\uCFD8"+
+            "\u85A1\uC8FE\uB2CE\u85A2\u85A3\u85A4\u85A5\u85A6"+
+            "\uD3D6\uB2E6\uBCB0\uD3D1\uCBAB\uB7B4\u85A7\u85A8"+
+            "\u85A9\uB7A2\u85AA\u85AB\uCAE5\u85AC\uC8A1\uCADC"+
+            "\uB1E4\uD0F0\u85AD\uC5D1\u85AE\u85AF\u85B0\uDBC5"+
+            "\uB5FE\u85B1\u85B2\uBFDA\uB9C5\uBEE4\uC1ED\u85B3"+
+            "\uDFB6\uDFB5\uD6BB\uBDD0\uD5D9\uB0C8\uB6A3\uBFC9"+
+            "\uCCA8\uDFB3\uCAB7\uD3D2\u85B4\uD8CF\uD2B6\uBAC5"+
+            "\uCBBE\uCCBE\u85B5\uDFB7\uB5F0\uDFB4\u85B6\u85B7"+
+            "\u85B8\uD3F5\u85B9\uB3D4\uB8F7\u85BA\uDFBA\u85BB"+
+            "\uBACF\uBCAA\uB5F5\u85BC\uCDAC\uC3FB\uBAF3\uC0F4"+
+            "\uCDC2\uCFF2\uDFB8\uCFC5\u85BD\uC2C0\uDFB9\uC2F0"+
+            "\u85BE\u85BF\u85C0\uBEFD\u85C1\uC1DF\uCDCC\uD2F7"+
+            "\uB7CD\uDFC1\u85C2\uDFC4\u85C3\u85C4\uB7F1\uB0C9"+
+            "\uB6D6\uB7D4\u85C5\uBAAC\uCCFD\uBFD4\uCBB1\uC6F4"+
+            "\u85C6\uD6A8\uDFC5\u85C7\uCEE2\uB3B3\u85C8\u85C9"+
+            "\uCEFC\uB4B5\u85CA\uCEC7\uBAF0\u85CB\uCEE1\u85CC"+
+            "\uD1BD\u85CD\u85CE\uDFC0\u85CF\u85D0\uB4F4\u85D1"+
+            "\uB3CA\u85D2\uB8E6\uDFBB\u85D3\u85D4\u85D5\u85D6"+
+            "\uC4C5\u85D7\uDFBC\uDFBD\uDFBE\uC5BB\uDFBF\uDFC2"+
+            "\uD4B1\uDFC3\u85D8\uC7BA\uCED8\u85D9\u85DA\u85DB"+
+            "\u85DC\u85DD\uC4D8\u85DE\uDFCA\u85DF\uDFCF\u85E0"+
+            "\uD6DC\u85E1\u85E2\u85E3\u85E4\u85E5\u85E6\u85E7"+
+            "\u85E8\uDFC9\uDFDA\uCEB6\u85E9\uBAC7\uDFCE\uDFC8"+
+            "\uC5DE\u85EA\u85EB\uC9EB\uBAF4\uC3FC\u85EC\u85ED"+
+            "\uBED7\u85EE\uDFC6\u85EF\uDFCD\u85F0\uC5D8\u85F1"+
+            "\u85F2\u85F3\u85F4\uD5A6\uBACD\u85F5\uBECC\uD3BD"+
+            "\uB8C0\u85F6\uD6E4\u85F7\uDFC7\uB9BE\uBFA7\u85F8"+
+            "\u85F9\uC1FC\uDFCB\uDFCC\u85FA\uDFD0\u85FB\u85FC"+
+            "\u85FD\u85FE\u8640\uDFDB\uDFE5\u8641\uDFD7\uDFD6"+
+            "\uD7C9\uDFE3\uDFE4\uE5EB\uD2A7\uDFD2\u8642\uBFA9"+
+            "\u8643\uD4DB\u8644\uBFC8\uDFD4\u8645\u8646\u8647"+
+            "\uCFCC\u8648\u8649\uDFDD\u864A\uD1CA\u864B\uDFDE"+
+            "\uB0A7\uC6B7\uDFD3\u864C\uBAE5\u864D\uB6DF\uCDDB"+
+            "\uB9FE\uD4D5\u864E\u864F\uDFDF\uCFEC\uB0A5\uDFE7"+
+            "\uDFD1\uD1C6\uDFD5\uDFD8\uDFD9\uDFDC\u8650\uBBA9"+
+            "\u8651\uDFE0\uDFE1\u8652\uDFE2\uDFE6\uDFE8\uD3B4"+
+            "\u8653\u8654\u8655\u8656\u8657\uB8E7\uC5B6\uDFEA"+
+            "\uC9DA\uC1A8\uC4C4\u8658\u8659\uBFDE\uCFF8\u865A"+
+            "\u865B\u865C\uD5DC\uDFEE\u865D\u865E\u865F\u8660"+
+            "\u8661\u8662\uB2B8\u8663\uBADF\uDFEC\u8664\uDBC1"+
+            "\u8665\uD1E4\u8666\u8667\u8668\u8669\uCBF4\uB4BD"+
+            "\u866A\uB0A6\u866B\u866C\u866D\u866E\u866F\uDFF1"+
+            "\uCCC6\uDFF2\u8670\u8671\uDFED\u8672\u8673\u8674"+
+            "\u8675\u8676\u8677\uDFE9\u8678\u8679\u867A\u867B"+
+            "\uDFEB\u867C\uDFEF\uDFF0\uBBBD\u867D\u867E\uDFF3"+
+            "\u8680\u8681\uDFF4\u8682\uBBA3\u8683\uCADB\uCEA8"+
+            "\uE0A7\uB3AA\u8684\uE0A6\u8685\u8686\u8687\uE0A1"+
+            "\u8688\u8689\u868A\u868B\uDFFE\u868C\uCDD9\uDFFC"+
+            "\u868D\uDFFA\u868E\uBFD0\uD7C4\u868F\uC9CC\u8690"+
+            "\u8691\uDFF8\uB0A1\u8692\u8693\u8694\u8695\u8696"+
+            "\uDFFD\u8697\u8698\u8699\u869A\uDFFB\uE0A2\u869B"+
+            "\u869C\u869D\u869E\u869F\uE0A8\u86A0\u86A1\u86A2"+
+            "\u86A3\uB7C8\u86A4\u86A5\uC6A1\uC9B6\uC0B2\uDFF5"+
+            "\u86A6\u86A7\uC5BE\u86A8\uD8C4\uDFF9\uC4F6\u86A9"+
+            "\u86AA\u86AB\u86AC\u86AD\u86AE\uE0A3\uE0A4\uE0A5"+
+            "\uD0A5\u86AF\u86B0\uE0B4\uCCE4\u86B1\uE0B1\u86B2"+
+            "\uBFA6\uE0AF\uCEB9\uE0AB\uC9C6\u86B3\u86B4\uC0AE"+
+            "\uE0AE\uBAED\uBAB0\uE0A9\u86B5\u86B6\u86B7\uDFF6"+
+            "\u86B8\uE0B3\u86B9\u86BA\uE0B8\u86BB\u86BC\u86BD"+
+            "\uB4AD\uE0B9\u86BE\u86BF\uCFB2\uBAC8\u86C0\uE0B0"+
+            "\u86C1\u86C2\u86C3\u86C4\u86C5\u86C6\u86C7\uD0FA"+
+            "\u86C8\u86C9\u86CA\u86CB\u86CC\u86CD\u86CE\u86CF"+
+            "\u86D0\uE0AC\u86D1\uD4FB\u86D2\uDFF7\u86D3\uC5E7"+
+            "\u86D4\uE0AD\u86D5\uD3F7\u86D6\uE0B6\uE0B7\u86D7"+
+            "\u86D8\u86D9\u86DA\u86DB\uE0C4\uD0E1\u86DC\u86DD"+
+            "\u86DE\uE0BC\u86DF\u86E0\uE0C9\uE0CA\u86E1\u86E2"+
+            "\u86E3\uE0BE\uE0AA\uC9A4\uE0C1\u86E4\uE0B2\u86E5"+
+            "\u86E6\u86E7\u86E8\u86E9\uCAC8\uE0C3\u86EA\uE0B5"+
+            "\u86EB\uCECB\u86EC\uCBC3\uE0CD\uE0C6\uE0C2\u86ED"+
+            "\uE0CB\u86EE\uE0BA\uE0BF\uE0C0\u86EF\u86F0\uE0C5"+
+            "\u86F1\u86F2\uE0C7\uE0C8\u86F3\uE0CC\u86F4\uE0BB"+
+            "\u86F5\u86F6\u86F7\u86F8\u86F9\uCBD4\uE0D5\u86FA"+
+            "\uE0D6\uE0D2\u86FB\u86FC\u86FD\u86FE\u8740\u8741"+
+            "\uE0D0\uBCCE\u8742\u8743\uE0D1\u8744\uB8C2\uD8C5"+
+            "\u8745\u8746\u8747\u8748\u8749\u874A\u874B\u874C"+
+            "\uD0EA\u874D\u874E\uC2EF\u874F\u8750\uE0CF\uE0BD"+
+            "\u8751\u8752\u8753\uE0D4\uE0D3\u8754\u8755\uE0D7"+
+            "\u8756\u8757\u8758\u8759\uE0DC\uE0D8\u875A\u875B"+
+            "\u875C\uD6F6\uB3B0\u875D\uD7EC\u875E\uCBBB\u875F"+
+            "\u8760\uE0DA\u8761\uCEFB\u8762\u8763\u8764\uBAD9"+
+            "\u8765\u8766\u8767\u8768\u8769\u876A\u876B\u876C"+
+            "\u876D\u876E\u876F\u8770\uE0E1\uE0DD\uD2AD\u8771"+
+            "\u8772\u8773\u8774\u8775\uE0E2\u8776\u8777\uE0DB"+
+            "\uE0D9\uE0DF\u8778\u8779\uE0E0\u877A\u877B\u877C"+
+            "\u877D\u877E\uE0DE\u8780\uE0E4\u8781\u8782\u8783"+
+            "\uC6F7\uD8AC\uD4EB\uE0E6\uCAC9\u8784\u8785\u8786"+
+            "\u8787\uE0E5\u8788\u8789\u878A\u878B\uB8C1\u878C"+
+            "\u878D\u878E\u878F\uE0E7\uE0E8\u8790\u8791\u8792"+
+            "\u8793\u8794\u8795\u8796\u8797\uE0E9\uE0E3\u8798"+
+            "\u8799\u879A\u879B\u879C\u879D\u879E\uBABF\uCCE7"+
+            "\u879F\u87A0\u87A1\uE0EA\u87A2\u87A3\u87A4\u87A5"+
+            "\u87A6\u87A7\u87A8\u87A9\u87AA\u87AB\u87AC\u87AD"+
+            "\u87AE\u87AF\u87B0\uCFF9\u87B1\u87B2\u87B3\u87B4"+
+            "\u87B5\u87B6\u87B7\u87B8\u87B9\u87BA\u87BB\uE0EB"+
+            "\u87BC\u87BD\u87BE\u87BF\u87C0\u87C1\u87C2\uC8C2"+
+            "\u87C3\u87C4\u87C5\u87C6\uBDC0\u87C7\u87C8\u87C9"+
+            "\u87CA\u87CB\u87CC\u87CD\u87CE\u87CF\u87D0\u87D1"+
+            "\u87D2\u87D3\uC4D2\u87D4\u87D5\u87D6\u87D7\u87D8"+
+            "\u87D9\u87DA\u87DB\u87DC\uE0EC\u87DD\u87DE\uE0ED"+
+            "\u87DF\u87E0\uC7F4\uCBC4\u87E1\uE0EE\uBBD8\uD8B6"+
+            "\uD2F2\uE0EF\uCDC5\u87E2\uB6DA\u87E3\u87E4\u87E5"+
+            "\u87E6\u87E7\u87E8\uE0F1\u87E9\uD4B0\u87EA\u87EB"+
+            "\uC0A7\uB4D1\u87EC\u87ED\uCEA7\uE0F0\u87EE\u87EF"+
+            "\u87F0\uE0F2\uB9CC\u87F1\u87F2\uB9FA\uCDBC\uE0F3"+
+            "\u87F3\u87F4\u87F5\uC6D4\uE0F4\u87F6\uD4B2\u87F7"+
+            "\uC8A6\uE0F6\uE0F5\u87F8\u87F9\u87FA\u87FB\u87FC"+
+            "\u87FD\u87FE\u8840\u8841\u8842\u8843\u8844\u8845"+
+            "\u8846\u8847\u8848\u8849\uE0F7\u884A\u884B\uCDC1"+
+            "\u884C\u884D\u884E\uCAA5\u884F\u8850\u8851\u8852"+
+            "\uD4DA\uDBD7\uDBD9\u8853\uDBD8\uB9E7\uDBDC\uDBDD"+
+            "\uB5D8\u8854\u8855\uDBDA\u8856\u8857\u8858\u8859"+
+            "\u885A\uDBDB\uB3A1\uDBDF\u885B\u885C\uBBF8\u885D"+
+            "\uD6B7\u885E\uDBE0\u885F\u8860\u8861\u8862\uBEF9"+
+            "\u8863\u8864\uB7BB\u8865\uDBD0\uCCAE\uBFB2\uBBB5"+
+            "\uD7F8\uBFD3\u8866\u8867\u8868\u8869\u886A\uBFE9"+
+            "\u886B\u886C\uBCE1\uCCB3\uDBDE\uB0D3\uCEEB\uB7D8"+
+            "\uD7B9\uC6C2\u886D\u886E\uC0A4\u886F\uCCB9\u8870"+
+            "\uDBE7\uDBE1\uC6BA\uDBE3\u8871\uDBE8\u8872\uC5F7"+
+            "\u8873\u8874\u8875\uDBEA\u8876\u8877\uDBE9\uBFC0"+
+            "\u8878\u8879\u887A\uDBE6\uDBE5\u887B\u887C\u887D"+
+            "\u887E\u8880\uB4B9\uC0AC\uC2A2\uDBE2\uDBE4\u8881"+
+            "\u8882\u8883\u8884\uD0CD\uDBED\u8885\u8886\u8887"+
+            "\u8888\u8889\uC0DD\uDBF2\u888A\u888B\u888C\u888D"+
+            "\u888E\u888F\u8890\uB6E2\u8891\u8892\u8893\u8894"+
+            "\uDBF3\uDBD2\uB9B8\uD4AB\uDBEC\u8895\uBFD1\uDBF0"+
+            "\u8896\uDBD1\u8897\uB5E6\u8898\uDBEB\uBFE5\u8899"+
+            "\u889A\u889B\uDBEE\u889C\uDBF1\u889D\u889E\u889F"+
+            "\uDBF9\u88A0\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6"+
+            "\u88A7\u88A8\uB9A1\uB0A3\u88A9\u88AA\u88AB\u88AC"+
+            "\u88AD\u88AE\u88AF\uC2F1\u88B0\u88B1\uB3C7\uDBEF"+
+            "\u88B2\u88B3\uDBF8\u88B4\uC6D2\uDBF4\u88B5\u88B6"+
+            "\uDBF5\uDBF7\uDBF6\u88B7\u88B8\uDBFE\u88B9\uD3F2"+
+            "\uB2BA\u88BA\u88BB\u88BC\uDBFD\u88BD\u88BE\u88BF"+
+            "\u88C0\u88C1\u88C2\u88C3\u88C4\uDCA4\u88C5\uDBFB"+
+            "\u88C6\u88C7\u88C8\u88C9\uDBFA\u88CA\u88CB\u88CC"+
+            "\uDBFC\uC5E0\uBBF9\u88CD\u88CE\uDCA3\u88CF\u88D0"+
+            "\uDCA5\u88D1\uCCC3\u88D2\u88D3\u88D4\uB6D1\uDDC0"+
+            "\u88D5\u88D6\u88D7\uDCA1\u88D8\uDCA2\u88D9\u88DA"+
+            "\u88DB\uC7B5\u88DC\u88DD\u88DE\uB6E9\u88DF\u88E0"+
+            "\u88E1\uDCA7\u88E2\u88E3\u88E4\u88E5\uDCA6\u88E6"+
+            "\uDCA9\uB1A4\u88E7\u88E8\uB5CC\u88E9\u88EA\u88EB"+
+            "\u88EC\u88ED\uBFB0\u88EE\u88EF\u88F0\u88F1\u88F2"+
+            "\uD1DF\u88F3\u88F4\u88F5\u88F6\uB6C2\u88F7\u88F8"+
+            "\u88F9\u88FA\u88FB\u88FC\u88FD\u88FE\u8940\u8941"+
+            "\u8942\u8943\u8944\u8945\uDCA8\u8946\u8947\u8948"+
+            "\u8949\u894A\u894B\u894C\uCBFA\uEBF3\u894D\u894E"+
+            "\u894F\uCBDC\u8950\u8951\uCBFE\u8952\u8953\u8954"+
+            "\uCCC1\u8955\u8956\u8957\u8958\u8959\uC8FB\u895A"+
+            "\u895B\u895C\u895D\u895E\u895F\uDCAA\u8960\u8961"+
+            "\u8962\u8963\u8964\uCCEE\uDCAB\u8965\u8966\u8967"+
+            "\u8968\u8969\u896A\u896B\u896C\u896D\u896E\u896F"+
+            "\u8970\u8971\u8972\u8973\u8974\u8975\uDBD3\u8976"+
+            "\uDCAF\uDCAC\u8977\uBEB3\u8978\uCAFB\u8979\u897A"+
+            "\u897B\uDCAD\u897C\u897D\u897E\u8980\u8981\u8982"+
+            "\u8983\u8984\uC9CA\uC4B9\u8985\u8986\u8987\u8988"+
+            "\u8989\uC7BD\uDCAE\u898A\u898B\u898C\uD4F6\uD0E6"+
+            "\u898D\u898E\u898F\u8990\u8991\u8992\u8993\u8994"+
+            "\uC4AB\uB6D5\u8995\u8996\u8997\u8998\u8999\u899A"+
+            "\u899B\u899C\u899D\u899E\u899F\u89A0\u89A1\u89A2"+
+            "\u89A3\u89A4\u89A5\u89A6\uDBD4\u89A7\u89A8\u89A9"+
+            "\u89AA\uB1DA\u89AB\u89AC\u89AD\uDBD5\u89AE\u89AF"+
+            "\u89B0\u89B1\u89B2\u89B3\u89B4\u89B5\u89B6\u89B7"+
+            "\u89B8\uDBD6\u89B9\u89BA\u89BB\uBABE\u89BC\u89BD"+
+            "\u89BE\u89BF\u89C0\u89C1\u89C2\u89C3\u89C4\u89C5"+
+            "\u89C6\u89C7\u89C8\u89C9\uC8C0\u89CA\u89CB\u89CC"+
+            "\u89CD\u89CE\u89CF\uCABF\uC8C9\u89D0\uD7B3\u89D1"+
+            "\uC9F9\u89D2\u89D3\uBFC7\u89D4\u89D5\uBAF8\u89D6"+
+            "\u89D7\uD2BC\u89D8\u89D9\u89DA\u89DB\u89DC\u89DD"+
+            "\u89DE\u89DF\uE2BA\u89E0\uB4A6\u89E1\u89E2\uB1B8"+
+            "\u89E3\u89E4\u89E5\u89E6\u89E7\uB8B4\u89E8\uCFC4"+
+            "\u89E9\u89EA\u89EB\u89EC\uD9E7\uCFA6\uCDE2\u89ED"+
+            "\u89EE\uD9ED\uB6E0\u89EF\uD2B9\u89F0\u89F1\uB9BB"+
+            "\u89F2\u89F3\u89F4\u89F5\uE2B9\uE2B7\u89F6\uB4F3"+
+            "\u89F7\uCCEC\uCCAB\uB7F2\u89F8\uD8B2\uD1EB\uBABB"+
+            "\u89F9\uCAA7\u89FA\u89FB\uCDB7\u89FC\u89FD\uD2C4"+
+            "\uBFE4\uBCD0\uB6E1\u89FE\uDEC5\u8A40\u8A41\u8A42"+
+            "\u8A43\uDEC6\uDBBC\u8A44\uD1D9\u8A45\u8A46\uC6E6"+
+            "\uC4CE\uB7EE\u8A47\uB7DC\u8A48\u8A49\uBFFC\uD7E0"+
+            "\u8A4A\uC6F5\u8A4B\u8A4C\uB1BC\uDEC8\uBDB1\uCCD7"+
+            "\uDECA\u8A4D\uDEC9\u8A4E\u8A4F\u8A50\u8A51\u8A52"+
+            "\uB5EC\u8A53\uC9DD\u8A54\u8A55\uB0C2\u8A56\u8A57"+
+            "\u8A58\u8A59\u8A5A\u8A5B\u8A5C\u8A5D\u8A5E\u8A5F"+
+            "\u8A60\u8A61\u8A62\uC5AE\uC5AB\u8A63\uC4CC\u8A64"+
+            "\uBCE9\uCBFD\u8A65\u8A66\u8A67\uBAC3\u8A68\u8A69"+
+            "\u8A6A\uE5F9\uC8E7\uE5FA\uCDFD\u8A6B\uD7B1\uB8BE"+
+            "\uC2E8\u8A6C\uC8D1\u8A6D\u8A6E\uE5FB\u8A6F\u8A70"+
+            "\u8A71\u8A72\uB6CA\uBCCB\u8A73\u8A74\uD1FD\uE6A1"+
+            "\u8A75\uC3EE\u8A76\u8A77\u8A78\u8A79\uE6A4\u8A7A"+
+            "\u8A7B\u8A7C\u8A7D\uE5FE\uE6A5\uCDD7\u8A7E\u8A80"+
+            "\uB7C1\uE5FC\uE5FD\uE6A3\u8A81\u8A82\uC4DD\uE6A8"+
+            "\u8A83\u8A84\uE6A7\u8A85\u8A86\u8A87\u8A88\u8A89"+
+            "\u8A8A\uC3C3\u8A8B\uC6DE\u8A8C\u8A8D\uE6AA\u8A8E"+
+            "\u8A8F\u8A90\u8A91\u8A92\u8A93\u8A94\uC4B7\u8A95"+
+            "\u8A96\u8A97\uE6A2\uCABC\u8A98\u8A99\u8A9A\u8A9B"+
+            "\uBDE3\uB9C3\uE6A6\uD0D5\uCEAF\u8A9C\u8A9D\uE6A9"+
+            "\uE6B0\u8A9E\uD2A6\u8A9F\uBDAA\uE6AD\u8AA0\u8AA1"+
+            "\u8AA2\u8AA3\u8AA4\uE6AF\u8AA5\uC0D1\u8AA6\u8AA7"+
+            "\uD2CC\u8AA8\u8AA9\u8AAA\uBCA7\u8AAB\u8AAC\u8AAD"+
+            "\u8AAE\u8AAF\u8AB0\u8AB1\u8AB2\u8AB3\u8AB4\u8AB5"+
+            "\u8AB6\uE6B1\u8AB7\uD2F6\u8AB8\u8AB9\u8ABA\uD7CB"+
+            "\u8ABB\uCDFE\u8ABC\uCDDE\uC2A6\uE6AB\uE6AC\uBDBF"+
+            "\uE6AE\uE6B3\u8ABD\u8ABE\uE6B2\u8ABF\u8AC0\u8AC1"+
+            "\u8AC2\uE6B6\u8AC3\uE6B8\u8AC4\u8AC5\u8AC6\u8AC7"+
+            "\uC4EF\u8AC8\u8AC9\u8ACA\uC4C8\u8ACB\u8ACC\uBEEA"+
+            "\uC9EF\u8ACD\u8ACE\uE6B7\u8ACF\uB6F0\u8AD0\u8AD1"+
+            "\u8AD2\uC3E4\u8AD3\u8AD4\u8AD5\u8AD6\u8AD7\u8AD8"+
+            "\u8AD9\uD3E9\uE6B4\u8ADA\uE6B5\u8ADB\uC8A2\u8ADC"+
+            "\u8ADD\u8ADE\u8ADF\u8AE0\uE6BD\u8AE1\u8AE2\u8AE3"+
+            "\uE6B9\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8\uC6C5\u8AE9"+
+            "\u8AEA\uCDF1\uE6BB\u8AEB\u8AEC\u8AED\u8AEE\u8AEF"+
+            "\u8AF0\u8AF1\u8AF2\u8AF3\u8AF4\uE6BC\u8AF5\u8AF6"+
+            "\u8AF7\u8AF8\uBBE9\u8AF9\u8AFA\u8AFB\u8AFC\u8AFD"+
+            "\u8AFE\u8B40\uE6BE\u8B41\u8B42\u8B43\u8B44\uE6BA"+
+            "\u8B45\u8B46\uC0B7\u8B47\u8B48\u8B49\u8B4A\u8B4B"+
+            "\u8B4C\u8B4D\u8B4E\u8B4F\uD3A4\uE6BF\uC9F4\uE6C3"+
+            "\u8B50\u8B51\uE6C4\u8B52\u8B53\u8B54\u8B55\uD0F6"+
+            "\u8B56\u8B57\u8B58\u8B59\u8B5A\u8B5B\u8B5C\u8B5D"+
+            "\u8B5E\u8B5F\u8B60\u8B61\u8B62\u8B63\u8B64\u8B65"+
+            "\u8B66\u8B67\uC3BD\u8B68\u8B69\u8B6A\u8B6B\u8B6C"+
+            "\u8B6D\u8B6E\uC3C4\uE6C2\u8B6F\u8B70\u8B71\u8B72"+
+            "\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78\u8B79\u8B7A"+
+            "\u8B7B\u8B7C\uE6C1\u8B7D\u8B7E\u8B80\u8B81\u8B82"+
+            "\u8B83\u8B84\uE6C7\uCFB1\u8B85\uEBF4\u8B86\u8B87"+
+            "\uE6CA\u8B88\u8B89\u8B8A\u8B8B\u8B8C\uE6C5\u8B8D"+
+            "\u8B8E\uBCDE\uC9A9\u8B8F\u8B90\u8B91\u8B92\u8B93"+
+            "\u8B94\uBCB5\u8B95\u8B96\uCFD3\u8B97\u8B98\u8B99"+
+            "\u8B9A\u8B9B\uE6C8\u8B9C\uE6C9\u8B9D\uE6CE\u8B9E"+
+            "\uE6D0\u8B9F\u8BA0\u8BA1\uE6D1\u8BA2\u8BA3\u8BA4"+
+            "\uE6CB\uB5D5\u8BA5\uE6CC\u8BA6\u8BA7\uE6CF\u8BA8"+
+            "\u8BA9\uC4DB\u8BAA\uE6C6\u8BAB\u8BAC\u8BAD\u8BAE"+
+            "\u8BAF\uE6CD\u8BB0\u8BB1\u8BB2\u8BB3\u8BB4\u8BB5"+
+            "\u8BB6\u8BB7\u8BB8\u8BB9\u8BBA\u8BBB\u8BBC\u8BBD";
+
+        private final static String innerIndex3=
+            "\u8BBE\u8BBF\u8BC0\u8BC1\u8BC2\u8BC3\u8BC4\u8BC5"+
+            "\u8BC6\uE6D2\u8BC7\u8BC8\u8BC9\u8BCA\u8BCB\u8BCC"+
+            "\u8BCD\u8BCE\u8BCF\u8BD0\u8BD1\u8BD2\uE6D4\uE6D3"+
+            "\u8BD3\u8BD4\u8BD5\u8BD6\u8BD7\u8BD8\u8BD9\u8BDA"+
+            "\u8BDB\u8BDC\u8BDD\u8BDE\u8BDF\u8BE0\u8BE1\u8BE2"+
+            "\u8BE3\u8BE4\u8BE5\u8BE6\u8BE7\u8BE8\u8BE9\u8BEA"+
+            "\u8BEB\u8BEC\uE6D5\u8BED\uD9F8\u8BEE\u8BEF\uE6D6"+
+            "\u8BF0\u8BF1\u8BF2\u8BF3\u8BF4\u8BF5\u8BF6\u8BF7"+
+            "\uE6D7\u8BF8\u8BF9\u8BFA\u8BFB\u8BFC\u8BFD\u8BFE"+
+            "\u8C40\u8C41\u8C42\u8C43\u8C44\u8C45\u8C46\u8C47"+
+            "\uD7D3\uE6DD\u8C48\uE6DE\uBFD7\uD4D0\u8C49\uD7D6"+
+            "\uB4E6\uCBEF\uE6DA\uD8C3\uD7CE\uD0A2\u8C4A\uC3CF"+
+            "\u8C4B\u8C4C\uE6DF\uBCBE\uB9C2\uE6DB\uD1A7\u8C4D"+
+            "\u8C4E\uBAA2\uC2CF\u8C4F\uD8AB\u8C50\u8C51\u8C52"+
+            "\uCAEB\uE5EE\u8C53\uE6DC\u8C54\uB7F5\u8C55\u8C56"+
+            "\u8C57\u8C58\uC8E6\u8C59\u8C5A\uC4F5\u8C5B\u8C5C"+
+            "\uE5B2\uC4FE\u8C5D\uCBFC\uE5B3\uD5AC\u8C5E\uD3EE"+
+            "\uCAD8\uB0B2\u8C5F\uCBCE\uCDEA\u8C60\u8C61\uBAEA"+
+            "\u8C62\u8C63\u8C64\uE5B5\u8C65\uE5B4\u8C66\uD7DA"+
+            "\uB9D9\uD6E6\uB6A8\uCDF0\uD2CB\uB1A6\uCAB5\u8C67"+
+            "\uB3E8\uC9F3\uBFCD\uD0FB\uCAD2\uE5B6\uBBC2\u8C68"+
+            "\u8C69\u8C6A\uCFDC\uB9AC\u8C6B\u8C6C\u8C6D\u8C6E"+
+            "\uD4D7\u8C6F\u8C70\uBAA6\uD1E7\uCFFC\uBCD2\u8C71"+
+            "\uE5B7\uC8DD\u8C72\u8C73\u8C74\uBFED\uB1F6\uCBDE"+
+            "\u8C75\u8C76\uBCC5\u8C77\uBCC4\uD2FA\uC3DC\uBFDC"+
+            "\u8C78\u8C79\u8C7A\u8C7B\uB8BB\u8C7C\u8C7D\u8C7E"+
+            "\uC3C2\u8C80\uBAAE\uD4A2\u8C81\u8C82\u8C83\u8C84"+
+            "\u8C85\u8C86\u8C87\u8C88\u8C89\uC7DE\uC4AF\uB2EC"+
+            "\u8C8A\uB9D1\u8C8B\u8C8C\uE5BB\uC1C8\u8C8D\u8C8E"+
+            "\uD5AF\u8C8F\u8C90\u8C91\u8C92\u8C93\uE5BC\u8C94"+
+            "\uE5BE\u8C95\u8C96\u8C97\u8C98\u8C99\u8C9A\u8C9B"+
+            "\uB4E7\uB6D4\uCBC2\uD1B0\uB5BC\u8C9C\u8C9D\uCAD9"+
+            "\u8C9E\uB7E2\u8C9F\u8CA0\uC9E4\u8CA1\uBDAB\u8CA2"+
+            "\u8CA3\uCEBE\uD7F0\u8CA4\u8CA5\u8CA6\u8CA7\uD0A1"+
+            "\u8CA8\uC9D9\u8CA9\u8CAA\uB6FB\uE6D8\uBCE2\u8CAB"+
+            "\uB3BE\u8CAC\uC9D0\u8CAD\uE6D9\uB3A2\u8CAE\u8CAF"+
+            "\u8CB0\u8CB1\uDECC\u8CB2\uD3C8\uDECD\u8CB3\uD2A2"+
+            "\u8CB4\u8CB5\u8CB6\u8CB7\uDECE\u8CB8\u8CB9\u8CBA"+
+            "\u8CBB\uBECD\u8CBC\u8CBD\uDECF\u8CBE\u8CBF\u8CC0"+
+            "\uCAAC\uD2FC\uB3DF\uE5EA\uC4E1\uBEA1\uCEB2\uC4F2"+
+            "\uBED6\uC6A8\uB2E3\u8CC1\u8CC2\uBED3\u8CC3\u8CC4"+
+            "\uC7FC\uCCEB\uBDEC\uCEDD\u8CC5\u8CC6\uCABA\uC6C1"+
+            "\uE5EC\uD0BC\u8CC7\u8CC8\u8CC9\uD5B9\u8CCA\u8CCB"+
+            "\u8CCC\uE5ED\u8CCD\u8CCE\u8CCF\u8CD0\uCAF4\u8CD1"+
+            "\uCDC0\uC2C5\u8CD2\uE5EF\u8CD3\uC2C4\uE5F0\u8CD4"+
+            "\u8CD5\u8CD6\u8CD7\u8CD8\u8CD9\u8CDA\uE5F8\uCDCD"+
+            "\u8CDB\uC9BD\u8CDC\u8CDD\u8CDE\u8CDF\u8CE0\u8CE1"+
+            "\u8CE2\uD2D9\uE1A8\u8CE3\u8CE4\u8CE5\u8CE6\uD3EC"+
+            "\u8CE7\uCBEA\uC6F1\u8CE8\u8CE9\u8CEA\u8CEB\u8CEC"+
+            "\uE1AC\u8CED\u8CEE\u8CEF\uE1A7\uE1A9\u8CF0\u8CF1"+
+            "\uE1AA\uE1AF\u8CF2\u8CF3\uB2ED\u8CF4\uE1AB\uB8DA"+
+            "\uE1AD\uE1AE\uE1B0\uB5BA\uE1B1\u8CF5\u8CF6\u8CF7"+
+            "\u8CF8\u8CF9\uE1B3\uE1B8\u8CFA\u8CFB\u8CFC\u8CFD"+
+            "\u8CFE\uD1D2\u8D40\uE1B6\uE1B5\uC1EB\u8D41\u8D42"+
+            "\u8D43\uE1B7\u8D44\uD4C0\u8D45\uE1B2\u8D46\uE1BA"+
+            "\uB0B6\u8D47\u8D48\u8D49\u8D4A\uE1B4\u8D4B\uBFF9"+
+            "\u8D4C\uE1B9\u8D4D\u8D4E\uE1BB\u8D4F\u8D50\u8D51"+
+            "\u8D52\u8D53\u8D54\uE1BE\u8D55\u8D56\u8D57\u8D58"+
+            "\u8D59\u8D5A\uE1BC\u8D5B\u8D5C\u8D5D\u8D5E\u8D5F"+
+            "\u8D60\uD6C5\u8D61\u8D62\u8D63\u8D64\u8D65\u8D66"+
+            "\u8D67\uCFBF\u8D68\u8D69\uE1BD\uE1BF\uC2CD\u8D6A"+
+            "\uB6EB\u8D6B\uD3F8\u8D6C\u8D6D\uC7CD\u8D6E\u8D6F"+
+            "\uB7E5\u8D70\u8D71\u8D72\u8D73\u8D74\u8D75\u8D76"+
+            "\u8D77\u8D78\u8D79\uBEFE\u8D7A\u8D7B\u8D7C\u8D7D"+
+            "\u8D7E\u8D80\uE1C0\uE1C1\u8D81\u8D82\uE1C7\uB3E7"+
+            "\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88\uC6E9\u8D89"+
+            "\u8D8A\u8D8B\u8D8C\u8D8D\uB4DE\u8D8E\uD1C2\u8D8F"+
+            "\u8D90\u8D91\u8D92\uE1C8\u8D93\u8D94\uE1C6\u8D95"+
+            "\u8D96\u8D97\u8D98\u8D99\uE1C5\u8D9A\uE1C3\uE1C2"+
+            "\u8D9B\uB1C0\u8D9C\u8D9D\u8D9E\uD5B8\uE1C4\u8D9F"+
+            "\u8DA0\u8DA1\u8DA2\u8DA3\uE1CB\u8DA4\u8DA5\u8DA6"+
+            "\u8DA7\u8DA8\u8DA9\u8DAA\u8DAB\uE1CC\uE1CA\u8DAC"+
+            "\u8DAD\u8DAE\u8DAF\u8DB0\u8DB1\u8DB2\u8DB3\uEFFA"+
+            "\u8DB4\u8DB5\uE1D3\uE1D2\uC7B6\u8DB6\u8DB7\u8DB8"+
+            "\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD\u8DBE\u8DBF\u8DC0"+
+            "\uE1C9\u8DC1\u8DC2\uE1CE\u8DC3\uE1D0\u8DC4\u8DC5"+
+            "\u8DC6\u8DC7\u8DC8\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD"+
+            "\u8DCE\uE1D4\u8DCF\uE1D1\uE1CD\u8DD0\u8DD1\uE1CF"+
+            "\u8DD2\u8DD3\u8DD4\u8DD5\uE1D5\u8DD6\u8DD7\u8DD8"+
+            "\u8DD9\u8DDA\u8DDB\u8DDC\u8DDD\u8DDE\u8DDF\u8DE0"+
+            "\u8DE1\u8DE2\uE1D6\u8DE3\u8DE4\u8DE5\u8DE6\u8DE7"+
+            "\u8DE8\u8DE9\u8DEA\u8DEB\u8DEC\u8DED\u8DEE\u8DEF"+
+            "\u8DF0\u8DF1\u8DF2\u8DF3\u8DF4\u8DF5\u8DF6\u8DF7"+
+            "\u8DF8\uE1D7\u8DF9\u8DFA\u8DFB\uE1D8\u8DFC\u8DFD"+
+            "\u8DFE\u8E40\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46"+
+            "\u8E47\u8E48\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E"+
+            "\u8E4F\u8E50\u8E51\u8E52\u8E53\u8E54\u8E55\uE1DA"+
+            "\u8E56\u8E57\u8E58\u8E59\u8E5A\u8E5B\u8E5C\u8E5D"+
+            "\u8E5E\u8E5F\u8E60\u8E61\u8E62\uE1DB\u8E63\u8E64"+
+            "\u8E65\u8E66\u8E67\u8E68\u8E69\uCEA1\u8E6A\u8E6B"+
+            "\u8E6C\u8E6D\u8E6E\u8E6F\u8E70\u8E71\u8E72\u8E73"+
+            "\u8E74\u8E75\u8E76\uE7DD\u8E77\uB4A8\uD6DD\u8E78"+
+            "\u8E79\uD1B2\uB3B2\u8E7A\u8E7B\uB9A4\uD7F3\uC7C9"+
+            "\uBEDE\uB9AE\u8E7C\uCED7\u8E7D\u8E7E\uB2EE\uDBCF"+
+            "\u8E80\uBCBA\uD2D1\uCBC8\uB0CD\u8E81\u8E82\uCFEF"+
+            "\u8E83\u8E84\u8E85\u8E86\u8E87\uD9E3\uBDED\u8E88"+
+            "\u8E89\uB1D2\uCAD0\uB2BC\u8E8A\uCBA7\uB7AB\u8E8B"+
+            "\uCAA6\u8E8C\u8E8D\u8E8E\uCFA3\u8E8F\u8E90\uE0F8"+
+            "\uD5CA\uE0FB\u8E91\u8E92\uE0FA\uC5C1\uCCFB\u8E93"+
+            "\uC1B1\uE0F9\uD6E3\uB2AF\uD6C4\uB5DB\u8E94\u8E95"+
+            "\u8E96\u8E97\u8E98\u8E99\u8E9A\u8E9B\uB4F8\uD6A1"+
+            "\u8E9C\u8E9D\u8E9E\u8E9F\u8EA0\uCFAF\uB0EF\u8EA1"+
+            "\u8EA2\uE0FC\u8EA3\u8EA4\u8EA5\u8EA6\u8EA7\uE1A1"+
+            "\uB3A3\u8EA8\u8EA9\uE0FD\uE0FE\uC3B1\u8EAA\u8EAB"+
+            "\u8EAC\u8EAD\uC3DD\u8EAE\uE1A2\uB7F9\u8EAF\u8EB0"+
+            "\u8EB1\u8EB2\u8EB3\u8EB4\uBBCF\u8EB5\u8EB6\u8EB7"+
+            "\u8EB8\u8EB9\u8EBA\u8EBB\uE1A3\uC4BB\u8EBC\u8EBD"+
+            "\u8EBE\u8EBF\u8EC0\uE1A4\u8EC1\u8EC2\uE1A5\u8EC3"+
+            "\u8EC4\uE1A6\uB4B1\u8EC5\u8EC6\u8EC7\u8EC8\u8EC9"+
+            "\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0\u8ED1"+
+            "\u8ED2\u8ED3\uB8C9\uC6BD\uC4EA\u8ED4\uB2A2\u8ED5"+
+            "\uD0D2\u8ED6\uE7DB\uBBC3\uD3D7\uD3C4\u8ED7\uB9E3"+
+            "\uE2CF\u8ED8\u8ED9\u8EDA\uD7AF\u8EDB\uC7EC\uB1D3"+
+            "\u8EDC\u8EDD\uB4B2\uE2D1\u8EDE\u8EDF\u8EE0\uD0F2"+
+            "\uC2AE\uE2D0\u8EE1\uBFE2\uD3A6\uB5D7\uE2D2\uB5EA"+
+            "\u8EE2\uC3ED\uB8FD\u8EE3\uB8AE\u8EE4\uC5D3\uB7CF"+
+            "\uE2D4\u8EE5\u8EE6\u8EE7\u8EE8\uE2D3\uB6C8\uD7F9"+
+            "\u8EE9\u8EEA\u8EEB\u8EEC\u8EED\uCDA5\u8EEE\u8EEF"+
+            "\u8EF0\u8EF1\u8EF2\uE2D8\u8EF3\uE2D6\uCAFC\uBFB5"+
+            "\uD3B9\uE2D5\u8EF4\u8EF5\u8EF6\u8EF7\uE2D7\u8EF8"+
+            "\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD\u8EFE\u8F40\u8F41"+
+            "\u8F42\uC1AE\uC0C8\u8F43\u8F44\u8F45\u8F46\u8F47"+
+            "\u8F48\uE2DB\uE2DA\uC0AA\u8F49\u8F4A\uC1CE\u8F4B"+
+            "\u8F4C\u8F4D\u8F4E\uE2DC\u8F4F\u8F50\u8F51\u8F52"+
+            "\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58\u8F59\u8F5A"+
+            "\uE2DD\u8F5B\uE2DE\u8F5C\u8F5D\u8F5E\u8F5F\u8F60"+
+            "\u8F61\u8F62\u8F63\u8F64\uDBC8\u8F65\uD1D3\uCDA2"+
+            "\u8F66\u8F67\uBDA8\u8F68\u8F69\u8F6A\uDEC3\uD8A5"+
+            "\uBFAA\uDBCD\uD2EC\uC6FA\uC5AA\u8F6B\u8F6C\u8F6D"+
+            "\uDEC4\u8F6E\uB1D7\uDFAE\u8F6F\u8F70\u8F71\uCABD"+
+            "\u8F72\uDFB1\u8F73\uB9AD\u8F74\uD2FD\u8F75\uB8A5"+
+            "\uBAEB\u8F76\u8F77\uB3DA\u8F78\u8F79\u8F7A\uB5DC"+
+            "\uD5C5\u8F7B\u8F7C\u8F7D\u8F7E\uC3D6\uCFD2\uBBA1"+
+            "\u8F80\uE5F3\uE5F2\u8F81\u8F82\uE5F4\u8F83\uCDE4"+
+            "\u8F84\uC8F5\u8F85\u8F86\u8F87\u8F88\u8F89\u8F8A"+
+            "\u8F8B\uB5AF\uC7BF\u8F8C\uE5F6\u8F8D\u8F8E\u8F8F"+
+            "\uECB0\u8F90\u8F91\u8F92\u8F93\u8F94\u8F95\u8F96"+
+            "\u8F97\u8F98\u8F99\u8F9A\u8F9B\u8F9C\u8F9D\u8F9E"+
+            "\uE5E6\u8F9F\uB9E9\uB5B1\u8FA0\uC2BC\uE5E8\uE5E7"+
+            "\uE5E9\u8FA1\u8FA2\u8FA3\u8FA4\uD2CD\u8FA5\u8FA6"+
+            "\u8FA7\uE1EA\uD0CE\u8FA8\uCDAE\u8FA9\uD1E5\u8FAA"+
+            "\u8FAB\uB2CA\uB1EB\u8FAC\uB1F2\uC5ED\u8FAD\u8FAE"+
+            "\uD5C3\uD3B0\u8FAF\uE1DC\u8FB0\u8FB1\u8FB2\uE1DD"+
+            "\u8FB3\uD2DB\u8FB4\uB3B9\uB1CB\u8FB5\u8FB6\u8FB7"+
+            "\uCDF9\uD5F7\uE1DE\u8FB8\uBEB6\uB4FD\u8FB9\uE1DF"+
+            "\uBADC\uE1E0\uBBB2\uC2C9\uE1E1\u8FBA\u8FBB\u8FBC"+
+            "\uD0EC\u8FBD\uCDBD\u8FBE\u8FBF\uE1E2\u8FC0\uB5C3"+
+            "\uC5C7\uE1E3\u8FC1\u8FC2\uE1E4\u8FC3\u8FC4\u8FC5"+
+            "\u8FC6\uD3F9\u8FC7\u8FC8\u8FC9\u8FCA\u8FCB\u8FCC"+
+            "\uE1E5\u8FCD\uD1AD\u8FCE\u8FCF\uE1E6\uCEA2\u8FD0"+
+            "\u8FD1\u8FD2\u8FD3\u8FD4\u8FD5\uE1E7\u8FD6\uB5C2"+
+            "\u8FD7\u8FD8\u8FD9\u8FDA\uE1E8\uBBD5\u8FDB\u8FDC"+
+            "\u8FDD\u8FDE\u8FDF\uD0C4\uE2E0\uB1D8\uD2E4\u8FE0"+
+            "\u8FE1\uE2E1\u8FE2\u8FE3\uBCC9\uC8CC\u8FE4\uE2E3"+
+            "\uECFE\uECFD\uDFAF\u8FE5\u8FE6\u8FE7\uE2E2\uD6BE"+
+            "\uCDFC\uC3A6\u8FE8\u8FE9\u8FEA\uE3C3\u8FEB\u8FEC"+
+            "\uD6D2\uE2E7\u8FED\u8FEE\uE2E8\u8FEF\u8FF0\uD3C7"+
+            "\u8FF1\u8FF2\uE2EC\uBFEC\u8FF3\uE2ED\uE2E5\u8FF4"+
+            "\u8FF5\uB3C0\u8FF6\u8FF7\u8FF8\uC4EE\u8FF9\u8FFA"+
+            "\uE2EE\u8FFB\u8FFC\uD0C3\u8FFD\uBAF6\uE2E9\uB7DE"+
+            "\uBBB3\uCCAC\uCBCB\uE2E4\uE2E6\uE2EA\uE2EB\u8FFE"+
+            "\u9040\u9041\uE2F7\u9042\u9043\uE2F4\uD4F5\uE2F3"+
+            "\u9044\u9045\uC5AD\u9046\uD5FA\uC5C2\uB2C0\u9047"+
+            "\u9048\uE2EF\u9049\uE2F2\uC1AF\uCBBC\u904A\u904B"+
+            "\uB5A1\uE2F9\u904C\u904D\u904E\uBCB1\uE2F1\uD0D4"+
+            "\uD4B9\uE2F5\uB9D6\uE2F6\u904F\u9050\u9051\uC7D3"+
+            "\u9052\u9053\u9054\u9055\u9056\uE2F0\u9057\u9058"+
+            "\u9059\u905A\u905B\uD7DC\uEDA1\u905C\u905D\uE2F8"+
+            "\u905E\uEDA5\uE2FE\uCAD1\u905F\u9060\u9061\u9062"+
+            "\u9063\u9064\u9065\uC1B5\u9066\uBBD0\u9067\u9068"+
+            "\uBFD6\u9069\uBAE3\u906A\u906B\uCBA1\u906C\u906D"+
+            "\u906E\uEDA6\uEDA3\u906F\u9070\uEDA2\u9071\u9072"+
+            "\u9073\u9074\uBBD6\uEDA7\uD0F4\u9075\u9076\uEDA4"+
+            "\uBADE\uB6F7\uE3A1\uB6B2\uCCF1\uB9A7\u9077\uCFA2"+
+            "\uC7A1\u9078\u9079\uBFD2\u907A\u907B\uB6F1\u907C"+
+            "\uE2FA\uE2FB\uE2FD\uE2FC\uC4D5\uE3A2\u907D\uD3C1"+
+            "\u907E\u9080\u9081\uE3A7\uC7C4\u9082\u9083\u9084"+
+            "\u9085\uCFA4\u9086\u9087\uE3A9\uBAB7\u9088\u9089"+
+            "\u908A\u908B\uE3A8\u908C\uBBDA\u908D\uE3A3\u908E"+
+            "\u908F\u9090\uE3A4\uE3AA\u9091\uE3A6\u9092\uCEF2"+
+            "\uD3C6\u9093\u9094\uBBBC\u9095\u9096\uD4C3\u9097"+
+            "\uC4FA\u9098\u9099\uEDA8\uD0FC\uE3A5\u909A\uC3F5"+
+            "\u909B\uE3AD\uB1AF\u909C\uE3B2\u909D\u909E\u909F"+
+            "\uBCC2\u90A0\u90A1\uE3AC\uB5BF\u90A2\u90A3\u90A4"+
+            "\u90A5\u90A6\u90A7\u90A8\u90A9\uC7E9\uE3B0\u90AA"+
+            "\u90AB\u90AC\uBEAA\uCDEF\u90AD\u90AE\u90AF\u90B0"+
+            "\u90B1\uBBF3\u90B2\u90B3\u90B4\uCCE8\u90B5\u90B6"+
+            "\uE3AF\u90B7\uE3B1\u90B8\uCFA7\uE3AE\u90B9\uCEA9"+
+            "\uBBDD\u90BA\u90BB\u90BC\u90BD\u90BE\uB5EB\uBEE5"+
+            "\uB2D2\uB3CD\u90BF\uB1B9\uE3AB\uB2D1\uB5AC\uB9DF"+
+            "\uB6E8\u90C0\u90C1\uCFEB\uE3B7\u90C2\uBBCC\u90C3"+
+            "\u90C4\uC8C7\uD0CA\u90C5\u90C6\u90C7\u90C8\u90C9"+
+            "\uE3B8\uB3EE\u90CA\u90CB\u90CC\u90CD\uEDA9\u90CE"+
+            "\uD3FA\uD3E4\u90CF\u90D0\u90D1\uEDAA\uE3B9\uD2E2"+
+            "\u90D2\u90D3\u90D4\u90D5\u90D6\uE3B5\u90D7\u90D8"+
+            "\u90D9\u90DA\uD3DE\u90DB\u90DC\u90DD\u90DE\uB8D0"+
+            "\uE3B3\u90DF\u90E0\uE3B6\uB7DF\u90E1\uE3B4\uC0A2"+
+            "\u90E2\u90E3\u90E4\uE3BA\u90E5\u90E6\u90E7\u90E8"+
+            "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
+            "\u90F1\u90F2\u90F3\u90F4\u90F5\u90F6\u90F7\uD4B8"+
+            "\u90F8\u90F9\u90FA\u90FB\u90FC\u90FD\u90FE\u9140"+
+            "\uB4C8\u9141\uE3BB\u9142\uBBC5\u9143\uC9F7\u9144"+
+            "\u9145\uC9E5\u9146\u9147\u9148\uC4BD\u9149\u914A"+
+            "\u914B\u914C\u914D\u914E\u914F\uEDAB\u9150\u9151"+
+            "\u9152\u9153\uC2FD\u9154\u9155\u9156\u9157\uBBDB"+
+            "\uBFAE\u9158\u9159\u915A\u915B\u915C\u915D\u915E"+
+            "\uCEBF\u915F\u9160\u9161\u9162\uE3BC\u9163\uBFB6"+
+            "\u9164\u9165\u9166\u9167\u9168\u9169\u916A\u916B"+
+            "\u916C\u916D\u916E\u916F\u9170\u9171\u9172\u9173"+
+            "\u9174\u9175\u9176\uB1EF\u9177\u9178\uD4F7\u9179"+
+            "\u917A\u917B\u917C\u917D\uE3BE\u917E\u9180\u9181"+
+            "\u9182\u9183\u9184\u9185\u9186\uEDAD\u9187\u9188"+
+            "\u9189\u918A\u918B\u918C\u918D\u918E\u918F\uE3BF"+
+            "\uBAA9\uEDAC\u9190\u9191\uE3BD\u9192\u9193\u9194"+
+            "\u9195\u9196\u9197\u9198\u9199\u919A\u919B\uE3C0"+
+            "\u919C\u919D\u919E\u919F\u91A0\u91A1\uBAB6\u91A2"+
+            "\u91A3\u91A4\uB6AE\u91A5\u91A6\u91A7\u91A8\u91A9"+
+            "\uD0B8\u91AA\uB0C3\uEDAE\u91AB\u91AC\u91AD\u91AE"+
+            "\u91AF\uEDAF\uC0C1\u91B0\uE3C1\u91B1\u91B2\u91B3"+
+            "\u91B4\u91B5\u91B6\u91B7\u91B8\u91B9\u91BA\u91BB"+
+            "\u91BC\u91BD\u91BE\u91BF\u91C0\u91C1\uC5B3\u91C2"+
+            "\u91C3\u91C4\u91C5\u91C6\u91C7\u91C8\u91C9\u91CA"+
+            "\u91CB\u91CC\u91CD\u91CE\u91CF\uE3C2\u91D0\u91D1"+
+            "\u91D2\u91D3\u91D4\u91D5\u91D6\u91D7\u91D8\uDCB2"+
+            "\u91D9\u91DA\u91DB\u91DC\u91DD\u91DE\uEDB0\u91DF"+
+            "\uB8EA\u91E0\uCEEC\uEAA7\uD0E7\uCAF9\uC8D6\uCFB7"+
+            "\uB3C9\uCED2\uBDE4\u91E1\u91E2\uE3DE\uBBF2\uEAA8"+
+            "\uD5BD\u91E3\uC6DD\uEAA9\u91E4\u91E5\u91E6\uEAAA"+
+            "\u91E7\uEAAC\uEAAB\u91E8\uEAAE\uEAAD\u91E9\u91EA"+
+            "\u91EB\u91EC\uBDD8\u91ED\uEAAF\u91EE\uC2BE\u91EF"+
+            "\u91F0\u91F1\u91F2\uB4C1\uB4F7\u91F3\u91F4\uBBA7"+
+            "\u91F5\u91F6\u91F7\u91F8\u91F9\uECE6\uECE5\uB7BF"+
+            "\uCBF9\uB1E2\u91FA\uECE7\u91FB\u91FC\u91FD\uC9C8"+
+            "\uECE8\uECE9\u91FE\uCAD6\uDED0\uB2C5\uD4FA\u9240"+
+            "\u9241\uC6CB\uB0C7\uB4F2\uC8D3\u9242\u9243\u9244"+
+            "\uCDD0\u9245\u9246\uBFB8\u9247\u9248\u9249\u924A"+
+            "\u924B\u924C\u924D\uBFDB\u924E\u924F\uC7A4\uD6B4"+
+            "\u9250\uC0A9\uDED1\uC9A8\uD1EF\uC5A4\uB0E7\uB3B6"+
+            "\uC8C5\u9251\u9252\uB0E2\u9253\u9254\uB7F6\u9255"+
+            "\u9256\uC5FA\u9257\u9258\uB6F3\u9259\uD5D2\uB3D0"+
+            "\uBCBC\u925A\u925B\u925C\uB3AD\u925D\u925E\u925F"+
+            "\u9260\uBEF1\uB0D1\u9261\u9262\u9263\u9264\u9265"+
+            "\u9266\uD2D6\uCAE3\uD7A5\u9267\uCDB6\uB6B6\uBFB9"+
+            "\uD5DB\u9268\uB8A7\uC5D7\u9269\u926A\u926B\uDED2"+
+            "\uBFD9\uC2D5\uC7C0\u926C\uBBA4\uB1A8\u926D\u926E"+
+            "\uC5EA\u926F\u9270\uC5FB\uCCA7\u9271\u9272\u9273"+
+            "\u9274\uB1A7\u9275\u9276\u9277\uB5D6\u9278\u9279"+
+            "\u927A\uC4A8\u927B\uDED3\uD1BA\uB3E9\u927C\uC3F2"+
+            "\u927D\u927E\uB7F7\u9280\uD6F4\uB5A3\uB2F0\uC4B4"+
+            "\uC4E9\uC0AD\uDED4\u9281\uB0E8\uC5C4\uC1E0\u9282"+
+            "\uB9D5\u9283\uBEDC\uCDD8\uB0CE\u9284\uCDCF\uDED6"+
+            "\uBED0\uD7BE\uDED5\uD5D0\uB0DD\u9285\u9286\uC4E2"+
+            "\u9287\u9288\uC2A3\uBCF0\u9289\uD3B5\uC0B9\uC5A1"+
+            "\uB2A6\uD4F1\u928A\u928B\uC0A8\uCAC3\uDED7\uD5FC"+
+            "\u928C\uB9B0\u928D\uC8AD\uCBA9\u928E\uDED9\uBFBD"+
+            "\u928F\u9290\u9291\u9292\uC6B4\uD7A7\uCAB0\uC4C3"+
+            "\u9293\uB3D6\uB9D2\u9294\u9295\u9296\u9297\uD6B8"+
+            "\uEAFC\uB0B4\u9298\u9299\u929A\u929B\uBFE6\u929C"+
+            "\u929D\uCCF4\u929E\u929F\u92A0\u92A1\uCDDA\u92A2"+
+            "\u92A3\u92A4\uD6BF\uC2CE\u92A5\uCECE\uCCA2\uD0AE"+
+            "\uC4D3\uB5B2\uDED8\uD5F5\uBCB7\uBBD3\u92A6\u92A7"+
+            "\uB0A4\u92A8\uC5B2\uB4EC\u92A9\u92AA\u92AB\uD5F1"+
+            "\u92AC\u92AD\uEAFD\u92AE\u92AF\u92B0\u92B1\u92B2"+
+            "\u92B3\uDEDA\uCDA6\u92B4\u92B5\uCDEC\u92B6\u92B7"+
+            "\u92B8\u92B9\uCEE6\uDEDC\u92BA\uCDB1\uC0A6\u92BB"+
+            "\u92BC\uD7BD\u92BD\uDEDB\uB0C6\uBAB4\uC9D3\uC4F3"+
+            "\uBEE8\u92BE\u92BF\u92C0\u92C1\uB2B6\u92C2\u92C3"+
+            "\u92C4\u92C5\u92C6\u92C7\u92C8\u92C9\uC0CC\uCBF0"+
+            "\u92CA\uBCF1\uBBBB\uB5B7\u92CB\u92CC\u92CD\uC5F5"+
+            "\u92CE\uDEE6\u92CF\u92D0\u92D1\uDEE3\uBEDD\u92D2"+
+            "\u92D3\uDEDF\u92D4\u92D5\u92D6\u92D7\uB4B7\uBDDD"+
+            "\u92D8\u92D9\uDEE0\uC4ED\u92DA\u92DB\u92DC\u92DD"+
+            "\uCFC6\u92DE\uB5E0\u92DF\u92E0\u92E1\u92E2\uB6DE"+
+            "\uCADA\uB5F4\uDEE5\u92E3\uD5C6\u92E4\uDEE1\uCCCD"+
+            "\uC6FE\u92E5\uC5C5\u92E6\u92E7\u92E8\uD2B4\u92E9"+
+            "\uBEF2\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
+            "\uC2D3\u92F1\uCCBD\uB3B8\u92F2\uBDD3\u92F3\uBFD8"+
+            "\uCDC6\uD1DA\uB4EB\u92F4\uDEE4\uDEDD\uDEE7\u92F5"+
+            "\uEAFE\u92F6\u92F7\uC2B0\uDEE2\u92F8\u92F9\uD6C0"+
+            "\uB5A7\u92FA\uB2F4\u92FB\uDEE8\u92FC\uDEF2\u92FD"+
+            "\u92FE\u9340\u9341\u9342\uDEED\u9343\uDEF1\u9344"+
+            "\u9345\uC8E0\u9346\u9347\u9348\uD7E1\uDEEF\uC3E8"+
+            "\uCCE1\u9349\uB2E5\u934A\u934B\u934C\uD2BE\u934D"+
+            "\u934E\u934F\u9350\u9351\u9352\u9353\uDEEE\u9354"+
+            "\uDEEB\uCED5\u9355\uB4A7\u9356\u9357\u9358\u9359"+
+            "\u935A\uBFAB\uBEBE\u935B\u935C\uBDD2\u935D\u935E"+
+            "\u935F\u9360\uDEE9\u9361\uD4AE\u9362\uDEDE\u9363"+
+            "\uDEEA\u9364\u9365\u9366\u9367\uC0BF\u9368\uDEEC"+
+            "\uB2F3\uB8E9\uC2A7\u9369\u936A\uBDC1\u936B\u936C"+
+            "\u936D\u936E\u936F\uDEF5\uDEF8\u9370\u9371\uB2AB"+
+            "\uB4A4\u9372\u9373\uB4EA\uC9A6\u9374\u9375\u9376"+
+            "\u9377\u9378\u9379\uDEF6\uCBD1\u937A\uB8E3\u937B"+
+            "\uDEF7\uDEFA\u937C\u937D\u937E\u9380\uDEF9\u9381"+
+            "\u9382\u9383\uCCC2\u9384\uB0E1\uB4EE\u9385\u9386"+
+            "\u9387\u9388\u9389\u938A\uE5BA\u938B\u938C\u938D"+
+            "\u938E\u938F\uD0AF\u9390\u9391\uB2EB\u9392\uEBA1"+
+            "\u9393\uDEF4\u9394\u9395\uC9E3\uDEF3\uB0DA\uD2A1"+
+            "\uB1F7\u9396\uCCAF\u9397\u9398\u9399\u939A\u939B"+
+            "\u939C\u939D\uDEF0\u939E\uCBA4\u939F\u93A0\u93A1"+
+            "\uD5AA\u93A2\u93A3\u93A4\u93A5\u93A6\uDEFB\u93A7"+
+            "\u93A8\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\uB4DD"+
+            "\u93AF\uC4A6\u93B0\u93B1\u93B2\uDEFD\u93B3\u93B4"+
+            "\u93B5\u93B6\u93B7\u93B8\u93B9\u93BA\u93BB\u93BC"+
+            "\uC3FE\uC4A1\uDFA1\u93BD\u93BE\u93BF\u93C0\u93C1"+
+            "\u93C2\u93C3\uC1CC\u93C4\uDEFC\uBEEF\u93C5\uC6B2"+
+            "\u93C6\u93C7\u93C8\u93C9\u93CA\u93CB\u93CC\u93CD"+
+            "\u93CE\uB3C5\uC8F6\u93CF\u93D0\uCBBA\uDEFE\u93D1"+
+            "\u93D2\uDFA4\u93D3\u93D4\u93D5\u93D6\uD7B2\u93D7"+
+            "\u93D8\u93D9\u93DA\u93DB\uB3B7\u93DC\u93DD\u93DE"+
+            "\u93DF\uC1C3\u93E0\u93E1\uC7CB\uB2A5\uB4E9\u93E2"+
+            "\uD7AB\u93E3\u93E4\u93E5\u93E6\uC4EC\u93E7\uDFA2"+
+            "\uDFA3\u93E8\uDFA5\u93E9\uBAB3\u93EA\u93EB\u93EC"+
+            "\uDFA6\u93ED\uC0DE\u93EE\u93EF\uC9C3\u93F0\u93F1"+
+            "\u93F2\u93F3\u93F4\u93F5\u93F6\uB2D9\uC7E6\u93F7"+
+            "\uDFA7\u93F8\uC7DC\u93F9\u93FA\u93FB\u93FC\uDFA8"+
+            "\uEBA2\u93FD\u93FE\u9440\u9441\u9442\uCBD3\u9443"+
+            "\u9444\u9445\uDFAA\u9446\uDFA9\u9447\uB2C1\u9448"+
+            "\u9449\u944A\u944B\u944C\u944D\u944E\u944F\u9450"+
+            "\u9451\u9452\u9453\u9454\u9455\u9456\u9457\u9458"+
+            "\u9459\u945A\u945B\u945C\u945D\u945E\u945F\u9460"+
+            "\uC5CA\u9461\u9462\u9463\u9464\u9465\u9466\u9467"+
+            "\u9468\uDFAB\u9469\u946A\u946B\u946C\u946D\u946E"+
+            "\u946F\u9470\uD4DC\u9471\u9472\u9473\u9474\u9475"+
+            "\uC8C1\u9476\u9477\u9478\u9479\u947A\u947B\u947C"+
+            "\u947D\u947E\u9480\u9481\u9482\uDFAC\u9483\u9484"+
+            "\u9485\u9486\u9487\uBEF0\u9488\u9489\uDFAD\uD6A7"+
+            "\u948A\u948B\u948C\u948D\uEAB7\uEBB6\uCAD5\u948E"+
+            "\uD8FC\uB8C4\u948F\uB9A5\u9490\u9491\uB7C5\uD5FE"+
+            "\u9492\u9493\u9494\u9495\u9496\uB9CA\u9497\u9498"+
+            "\uD0A7\uF4CD\u9499\u949A\uB5D0\u949B\u949C\uC3F4"+
+            "\u949D\uBEC8\u949E\u949F\u94A0\uEBB7\uB0BD\u94A1"+
+            "\u94A2\uBDCC\u94A3\uC1B2\u94A4\uB1D6\uB3A8\u94A5"+
+            "\u94A6\u94A7\uB8D2\uC9A2\u94A8\u94A9\uB6D8\u94AA"+
+            "\u94AB\u94AC\u94AD\uEBB8\uBEB4\u94AE\u94AF\u94B0"+
+            "\uCAFD\u94B1\uC7C3\u94B2\uD5FB\u94B3\u94B4\uB7F3"+
+            "\u94B5\u94B6\u94B7\u94B8\u94B9\u94BA\u94BB\u94BC"+
+            "\u94BD\u94BE\u94BF\u94C0\u94C1\u94C2\u94C3\uCEC4"+
+            "\u94C4\u94C5\u94C6\uD5AB\uB1F3\u94C7\u94C8\u94C9"+
+            "\uECB3\uB0DF\u94CA\uECB5\u94CB\u94CC\u94CD\uB6B7"+
+            "\u94CE\uC1CF\u94CF\uF5FA\uD0B1\u94D0\u94D1\uD5E5"+
+            "\u94D2\uCED3\u94D3\u94D4\uBDEF\uB3E2\u94D5\uB8AB"+
+            "\u94D6\uD5B6\u94D7\uEDBD\u94D8\uB6CF\u94D9\uCBB9"+
+            "\uD0C2\u94DA\u94DB\u94DC\u94DD\u94DE\u94DF\u94E0"+
+            "\u94E1\uB7BD\u94E2\u94E3\uECB6\uCAA9\u94E4\u94E5"+
+            "\u94E6\uC5D4\u94E7\uECB9\uECB8\uC2C3\uECB7\u94E8"+
+            "\u94E9\u94EA\u94EB\uD0FD\uECBA\u94EC\uECBB\uD7E5"+
+            "\u94ED\u94EE\uECBC\u94EF\u94F0\u94F1\uECBD\uC6EC"+
+            "\u94F2\u94F3\u94F4\u94F5\u94F6\u94F7\u94F8\u94F9"+
+            "\uCEDE\u94FA\uBCC8\u94FB\u94FC\uC8D5\uB5A9\uBEC9"+
+            "\uD6BC\uD4E7\u94FD\u94FE\uD1AE\uD0F1\uEAB8\uEAB9"+
+            "\uEABA\uBAB5\u9540\u9541\u9542\u9543\uCAB1\uBFF5"+
+            "\u9544\u9545\uCDFA\u9546\u9547\u9548\u9549\u954A"+
+            "\uEAC0\u954B\uB0BA\uEABE\u954C\u954D\uC0A5\u954E"+
+            "\u954F\u9550\uEABB\u9551\uB2FD\u9552\uC3F7\uBBE8"+
+            "\u9553\u9554\u9555\uD2D7\uCEF4\uEABF\u9556\u9557"+
+            "\u9558\uEABC\u9559\u955A\u955B\uEAC3\u955C\uD0C7"+
+            "\uD3B3\u955D\u955E\u955F\u9560\uB4BA\u9561\uC3C1"+
+            "\uD7F2\u9562\u9563\u9564\u9565\uD5D1\u9566\uCAC7"+
+            "\u9567\uEAC5\u9568\u9569\uEAC4\uEAC7\uEAC6\u956A"+
+            "\u956B\u956C\u956D\u956E\uD6E7\u956F\uCFD4\u9570"+
+            "\u9571\uEACB\u9572\uBBCE\u9573\u9574\u9575\u9576"+
+            "\u9577\u9578\u9579\uBDFA\uC9CE\u957A\u957B\uEACC"+
+            "\u957C\u957D\uC9B9\uCFFE\uEACA\uD4CE\uEACD\uEACF"+
+            "\u957E\u9580\uCDED\u9581\u9582\u9583\u9584\uEAC9"+
+            "\u9585\uEACE\u9586\u9587\uCEEE\u9588\uBBDE\u9589"+
+            "\uB3BF\u958A\u958B\u958C\u958D\u958E\uC6D5\uBEB0"+
+            "\uCEFA\u958F\u9590\u9591\uC7E7\u9592\uBEA7\uEAD0"+
+            "\u9593\u9594\uD6C7\u9595\u9596\u9597\uC1C0\u9598"+
+            "\u9599\u959A\uD4DD\u959B\uEAD1\u959C\u959D\uCFBE"+
+            "\u959E\u959F\u95A0\u95A1\uEAD2\u95A2\u95A3\u95A4"+
+            "\u95A5\uCAEE\u95A6\u95A7\u95A8\u95A9\uC5AF\uB0B5"+
+            "\u95AA\u95AB\u95AC\u95AD\u95AE\uEAD4\u95AF\u95B0"+
+            "\u95B1\u95B2\u95B3\u95B4\u95B5\u95B6\u95B7\uEAD3"+
+            "\uF4DF\u95B8\u95B9\u95BA\u95BB\u95BC\uC4BA\u95BD"+
+            "\u95BE\u95BF\u95C0\u95C1\uB1A9\u95C2\u95C3\u95C4"+
+            "\u95C5\uE5DF\u95C6\u95C7\u95C8\u95C9\uEAD5\u95CA"+
+            "\u95CB\u95CC\u95CD\u95CE\u95CF\u95D0\u95D1\u95D2"+
+            "\u95D3\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9\u95DA"+
+            "\u95DB\u95DC\u95DD\u95DE\u95DF\u95E0\u95E1\u95E2"+
+            "\u95E3\uCAEF\u95E4\uEAD6\uEAD7\uC6D8\u95E5\u95E6"+
+            "\u95E7\u95E8\u95E9\u95EA\u95EB\u95EC\uEAD8\u95ED"+
+            "\u95EE\uEAD9\u95EF\u95F0\u95F1\u95F2\u95F3\u95F4"+
+            "\uD4BB\u95F5\uC7FA\uD2B7\uB8FC\u95F6\u95F7\uEAC2"+
+            "\u95F8\uB2DC\u95F9\u95FA\uC2FC\u95FB\uD4F8\uCCE6"+
+            "\uD7EE\u95FC\u95FD\u95FE\u9640\u9641\u9642\u9643"+
+            "\uD4C2\uD3D0\uEBC3\uC5F3\u9644\uB7FE\u9645\u9646"+
+            "\uEBD4\u9647\u9648\u9649\uCBB7\uEBDE\u964A\uC0CA"+
+            "\u964B\u964C\u964D\uCDFB\u964E\uB3AF\u964F\uC6DA"+
+            "\u9650\u9651\u9652\u9653\u9654\u9655\uEBFC\u9656"+
+            "\uC4BE\u9657\uCEB4\uC4A9\uB1BE\uD4FD\u9658\uCAF5"+
+            "\u9659\uD6EC\u965A\u965B\uC6D3\uB6E4\u965C\u965D"+
+            "\u965E\u965F\uBBFA\u9660\u9661\uD0E0\u9662\u9663"+
+            "\uC9B1\u9664\uD4D3\uC8A8\u9665\u9666\uB8CB\u9667"+
+            "\uE8BE\uC9BC\u9668\u9669\uE8BB\u966A\uC0EE\uD0D3"+
+            "\uB2C4\uB4E5\u966B\uE8BC\u966C\u966D\uD5C8\u966E"+
+            "\u966F\u9670\u9671\u9672\uB6C5\u9673\uE8BD\uCAF8"+
+            "\uB8DC\uCCF5\u9674\u9675\u9676\uC0B4\u9677\u9678"+
+            "\uD1EE\uE8BF\uE8C2\u9679\u967A\uBABC\u967B\uB1AD"+
+            "\uBDDC\u967C\uEABD\uE8C3\u967D\uE8C6\u967E\uE8CB"+
+            "\u9680\u9681\u9682\u9683\uE8CC\u9684\uCBC9\uB0E5"+
+            "\u9685\uBCAB\u9686\u9687\uB9B9\u9688\u9689\uE8C1"+
+            "\u968A\uCDF7\u968B\uE8CA\u968C\u968D\u968E\u968F"+
+            "\uCEF6\u9690\u9691\u9692\u9693\uD5ED\u9694\uC1D6"+
+            "\uE8C4\u9695\uC3B6\u9696\uB9FB\uD6A6\uE8C8\u9697"+
+            "\u9698\u9699\uCAE0\uD4E6\u969A\uE8C0\u969B\uE8C5"+
+            "\uE8C7\u969C\uC7B9\uB7E3\u969D\uE8C9\u969E\uBFDD"+
+            "\uE8D2\u969F\u96A0\uE8D7\u96A1\uE8D5\uBCDC\uBCCF"+
+            "\uE8DB\u96A2\u96A3\u96A4\u96A5\u96A6\u96A7\u96A8"+
+            "\u96A9\uE8DE\u96AA\uE8DA\uB1FA\u96AB\u96AC\u96AD"+
+            "\u96AE\u96AF\u96B0\u96B1\u96B2\u96B3\u96B4\uB0D8"+
+            "\uC4B3\uB8CC\uC6E2\uC8BE\uC8E1\u96B5\u96B6\u96B7"+
+            "\uE8CF\uE8D4\uE8D6\u96B8\uB9F1\uE8D8\uD7F5\u96B9"+
+            "\uC4FB\u96BA\uE8DC\u96BB\u96BC\uB2E9\u96BD\u96BE"+
+            "\u96BF\uE8D1\u96C0\u96C1\uBCED\u96C2\u96C3\uBFC2"+
+            "\uE8CD\uD6F9\u96C4\uC1F8\uB2F1\u96C5\u96C6\u96C7"+
+            "\u96C8\u96C9\u96CA\u96CB\u96CC\uE8DF\u96CD\uCAC1"+
+            "\uE8D9\u96CE\u96CF\u96D0\u96D1\uD5A4\u96D2\uB1EA"+
+            "\uD5BB\uE8CE\uE8D0\uB6B0\uE8D3\u96D3\uE8DD\uC0B8"+
+            "\u96D4\uCAF7\u96D5\uCBA8\u96D6\u96D7\uC6DC\uC0F5"+
+            "\u96D8\u96D9\u96DA\u96DB\u96DC\uE8E9\u96DD\u96DE"+
+            "\u96DF\uD0A3\u96E0\u96E1\u96E2\u96E3\u96E4\u96E5"+
+            "\u96E6\uE8F2\uD6EA\u96E7\u96E8\u96E9\u96EA\u96EB"+
+            "\u96EC\u96ED\uE8E0\uE8E1\u96EE\u96EF\u96F0\uD1F9"+
+            "\uBACB\uB8F9\u96F1\u96F2\uB8F1\uD4D4\uE8EF\u96F3"+
+            "\uE8EE\uE8EC\uB9F0\uCCD2\uE8E6\uCEA6\uBFF2\u96F4"+
+            "\uB0B8\uE8F1\uE8F0\u96F5\uD7C0\u96F6\uE8E4\u96F7"+
+            "\uCDA9\uC9A3\u96F8\uBBB8\uBDDB\uE8EA\u96F9\u96FA"+
+            "\u96FB\u96FC\u96FD\u96FE\u9740\u9741\u9742\u9743"+
+            "\uE8E2\uE8E3\uE8E5\uB5B5\uE8E7\uC7C5\uE8EB\uE8ED"+
+            "\uBDB0\uD7AE\u9744\uE8F8\u9745\u9746\u9747\u9748"+
+            "\u9749\u974A\u974B\u974C\uE8F5\u974D\uCDB0\uE8F6"+
+            "\u974E\u974F\u9750\u9751\u9752\u9753\u9754\u9755"+
+            "\u9756\uC1BA\u9757\uE8E8\u9758\uC3B7\uB0F0\u9759"+
+            "\u975A\u975B\u975C\u975D\u975E\u975F\u9760\uE8F4"+
+            "\u9761\u9762\u9763\uE8F7\u9764\u9765\u9766\uB9A3"+
+            "\u9767\u9768\u9769\u976A\u976B\u976C\u976D\u976E"+
+            "\u976F\u9770\uC9D2\u9771\u9772\u9773\uC3CE\uCEE0"+
+            "\uC0E6\u9774\u9775\u9776\u9777\uCBF3\u9778\uCCDD"+
+            "\uD0B5\u9779\u977A\uCAE1\u977B\uE8F3\u977C\u977D"+
+            "\u977E\u9780\u9781\u9782\u9783\u9784\u9785\u9786"+
+            "\uBCEC\u9787\uE8F9\u9788\u9789\u978A\u978B\u978C"+
+            "\u978D\uC3DE\u978E\uC6E5\u978F\uB9F7\u9790\u9791"+
+            "\u9792\u9793\uB0F4\u9794\u9795\uD7D8\u9796\u9797"+
+            "\uBCAC\u9798\uC5EF\u9799\u979A\u979B\u979C\u979D"+
+            "\uCCC4\u979E\u979F\uE9A6\u97A0\u97A1\u97A2\u97A3"+
+            "\u97A4\u97A5\u97A6\u97A7\u97A8\u97A9\uC9AD\u97AA"+
+            "\uE9A2\uC0E2\u97AB\u97AC\u97AD\uBFC3\u97AE\u97AF"+
+            "\u97B0\uE8FE\uB9D7\u97B1\uE8FB\u97B2\u97B3\u97B4"+
+            "\u97B5\uE9A4\u97B6\u97B7\u97B8\uD2CE\u97B9\u97BA"+
+            "\u97BB\u97BC\u97BD\uE9A3\u97BE\uD6B2\uD7B5\u97BF"+
+            "\uE9A7\u97C0\uBDB7\u97C1\u97C2\u97C3\u97C4\u97C5"+
+            "\u97C6\u97C7\u97C8\u97C9\u97CA\u97CB\u97CC\uE8FC"+
+            "\uE8FD\u97CD\u97CE\u97CF\uE9A1\u97D0\u97D1\u97D2"+
+            "\u97D3\u97D4\u97D5\u97D6\u97D7\uCDD6\u97D8\u97D9"+
+            "\uD2AC\u97DA\u97DB\u97DC\uE9B2\u97DD\u97DE\u97DF"+
+            "\u97E0\uE9A9\u97E1\u97E2\u97E3\uB4AA\u97E4\uB4BB"+
+            "\u97E5\u97E6\uE9AB\u97E7\u97E8\u97E9\u97EA\u97EB"+
+            "\u97EC\u97ED\u97EE\u97EF\u97F0\u97F1\u97F2\u97F3"+
+            "\u97F4\u97F5\u97F6\u97F7\uD0A8\u97F8\u97F9\uE9A5"+
+            "\u97FA\u97FB\uB3FE\u97FC\u97FD\uE9AC\uC0E3\u97FE"+
+            "\uE9AA\u9840\u9841\uE9B9\u9842\u9843\uE9B8\u9844"+
+            "\u9845\u9846\u9847\uE9AE\u9848\u9849\uE8FA\u984A"+
+            "\u984B\uE9A8\u984C\u984D\u984E\u984F\u9850\uBFAC"+
+            "\uE9B1\uE9BA\u9851\u9852\uC2A5\u9853\u9854\u9855"+
+            "\uE9AF\u9856\uB8C5\u9857\uE9AD\u9858\uD3DC\uE9B4"+
+            "\uE9B5\uE9B7\u9859\u985A\u985B\uE9C7\u985C\u985D"+
+            "\u985E\u985F\u9860\u9861\uC0C6\uE9C5\u9862\u9863"+
+            "\uE9B0\u9864\u9865\uE9BB\uB0F1\u9866\u9867\u9868"+
+            "\u9869\u986A\u986B\u986C\u986D\u986E\u986F\uE9BC"+
+            "\uD5A5\u9870\u9871\uE9BE\u9872\uE9BF\u9873\u9874"+
+            "\u9875\uE9C1\u9876\u9877\uC1F1\u9878\u9879\uC8B6"+
+            "\u987A\u987B\u987C\uE9BD\u987D\u987E\u9880\u9881"+
+            "\u9882\uE9C2\u9883\u9884\u9885\u9886\u9887\u9888"+
+            "\u9889\u988A\uE9C3\u988B\uE9B3\u988C\uE9B6\u988D"+
+            "\uBBB1\u988E\u988F\u9890\uE9C0\u9891\u9892\u9893"+
+            "\u9894\u9895\u9896\uBCF7\u9897\u9898\u9899\uE9C4"+
+            "\uE9C6\u989A\u989B\u989C\u989D\u989E\u989F\u98A0"+
+            "\u98A1\u98A2\u98A3\u98A4\u98A5\uE9CA\u98A6\u98A7"+
+            "\u98A8\u98A9\uE9CE\u98AA\u98AB\u98AC\u98AD\u98AE"+
+            "\u98AF\u98B0\u98B1\u98B2\u98B3\uB2DB\u98B4\uE9C8"+
+            "\u98B5\u98B6\u98B7\u98B8\u98B9\u98BA\u98BB\u98BC"+
+            "\u98BD\u98BE\uB7AE\u98BF\u98C0\u98C1\u98C2\u98C3"+
+            "\u98C4\u98C5\u98C6\u98C7\u98C8\u98C9\u98CA\uE9CB"+
+            "\uE9CC\u98CB\u98CC\u98CD\u98CE\u98CF\u98D0\uD5C1"+
+            "\u98D1\uC4A3\u98D2\u98D3\u98D4\u98D5\u98D6\u98D7"+
+            "\uE9D8\u98D8\uBAE1\u98D9\u98DA\u98DB\u98DC\uE9C9"+
+            "\u98DD\uD3A3\u98DE\u98DF\u98E0\uE9D4\u98E1\u98E2"+
+            "\u98E3\u98E4\u98E5\u98E6\u98E7\uE9D7\uE9D0\u98E8"+
+            "\u98E9\u98EA\u98EB\u98EC\uE9CF\u98ED\u98EE\uC7C1"+
+            "\u98EF\u98F0\u98F1\u98F2\u98F3\u98F4\u98F5\u98F6"+
+            "\uE9D2\u98F7\u98F8\u98F9\u98FA\u98FB\u98FC\u98FD"+
+            "\uE9D9\uB3C8\u98FE\uE9D3\u9940\u9941\u9942\u9943"+
+            "\u9944\uCFF0\u9945\u9946\u9947\uE9CD\u9948\u9949"+
+            "\u994A\u994B\u994C\u994D\u994E\u994F\u9950\u9951"+
+            "\u9952\uB3F7\u9953\u9954\u9955\u9956\u9957\u9958"+
+            "\u9959\uE9D6\u995A\u995B\uE9DA\u995C\u995D\u995E"+
+            "\uCCB4\u995F\u9960\u9961\uCFAD\u9962\u9963\u9964"+
+            "\u9965\u9966\u9967\u9968\u9969\u996A\uE9D5\u996B"+
+            "\uE9DC\uE9DB\u996C\u996D\u996E\u996F\u9970\uE9DE"+
+            "\u9971\u9972\u9973\u9974\u9975\u9976\u9977\u9978"+
+            "\uE9D1\u9979\u997A\u997B\u997C\u997D\u997E\u9980"+
+            "\u9981\uE9DD\u9982\uE9DF\uC3CA\u9983\u9984\u9985"+
+            "\u9986\u9987\u9988\u9989\u998A\u998B\u998C\u998D"+
+            "\u998E\u998F\u9990\u9991\u9992\u9993\u9994\u9995"+
+            "\u9996\u9997\u9998\u9999\u999A\u999B\u999C\u999D"+
+            "\u999E\u999F\u99A0\u99A1\u99A2\u99A3\u99A4\u99A5"+
+            "\u99A6\u99A7\u99A8\u99A9\u99AA\u99AB\u99AC\u99AD"+
+            "\u99AE\u99AF\u99B0\u99B1\u99B2\u99B3\u99B4\u99B5"+
+            "\u99B6\u99B7\u99B8\u99B9\u99BA\u99BB\u99BC\u99BD"+
+            "\u99BE\u99BF\u99C0\u99C1\u99C2\u99C3\u99C4\u99C5"+
+            "\u99C6\u99C7\u99C8\u99C9\u99CA\u99CB\u99CC\u99CD"+
+            "\u99CE\u99CF\u99D0\u99D1\u99D2\u99D3\u99D4\u99D5";
+
+        private final static String innerIndex4=
+            "\u99D6\u99D7\u99D8\u99D9\u99DA\u99DB\u99DC\u99DD"+
+            "\u99DE\u99DF\u99E0\u99E1\u99E2\u99E3\u99E4\u99E5"+
+            "\u99E6\u99E7\u99E8\u99E9\u99EA\u99EB\u99EC\u99ED"+
+            "\u99EE\u99EF\u99F0\u99F1\u99F2\u99F3\u99F4\u99F5"+
+            "\uC7B7\uB4CE\uBBB6\uD0C0\uECA3\u99F6\u99F7\uC5B7"+
+            "\u99F8\u99F9\u99FA\u99FB\u99FC\u99FD\u99FE\u9A40"+
+            "\u9A41\u9A42\uD3FB\u9A43\u9A44\u9A45\u9A46\uECA4"+
+            "\u9A47\uECA5\uC6DB\u9A48\u9A49\u9A4A\uBFEE\u9A4B"+
+            "\u9A4C\u9A4D\u9A4E\uECA6\u9A4F\u9A50\uECA7\uD0AA"+
+            "\u9A51\uC7B8\u9A52\u9A53\uB8E8\u9A54\u9A55\u9A56"+
+            "\u9A57\u9A58\u9A59\u9A5A\u9A5B\u9A5C\u9A5D\u9A5E"+
+            "\u9A5F\uECA8\u9A60\u9A61\u9A62\u9A63\u9A64\u9A65"+
+            "\u9A66\u9A67\uD6B9\uD5FD\uB4CB\uB2BD\uCEE4\uC6E7"+
+            "\u9A68\u9A69\uCDE1\u9A6A\u9A6B\u9A6C\u9A6D\u9A6E"+
+            "\u9A6F\u9A70\u9A71\u9A72\u9A73\u9A74\u9A75\u9A76"+
+            "\u9A77\uB4F5\u9A78\uCBC0\uBCDF\u9A79\u9A7A\u9A7B"+
+            "\u9A7C\uE9E2\uE9E3\uD1EA\uE9E5\u9A7D\uB4F9\uE9E4"+
+            "\u9A7E\uD1B3\uCAE2\uB2D0\u9A80\uE9E8\u9A81\u9A82"+
+            "\u9A83\u9A84\uE9E6\uE9E7\u9A85\u9A86\uD6B3\u9A87"+
+            "\u9A88\u9A89\uE9E9\uE9EA\u9A8A\u9A8B\u9A8C\u9A8D"+
+            "\u9A8E\uE9EB\u9A8F\u9A90\u9A91\u9A92\u9A93\u9A94"+
+            "\u9A95\u9A96\uE9EC\u9A97\u9A98\u9A99\u9A9A\u9A9B"+
+            "\u9A9C\u9A9D\u9A9E\uECAF\uC5B9\uB6CE\u9A9F\uD2F3"+
+            "\u9AA0\u9AA1\u9AA2\u9AA3\u9AA4\u9AA5\u9AA6\uB5EE"+
+            "\u9AA7\uBBD9\uECB1\u9AA8\u9AA9\uD2E3\u9AAA\u9AAB"+
+            "\u9AAC\u9AAD\u9AAE\uCEE3\u9AAF\uC4B8\u9AB0\uC3BF"+
+            "\u9AB1\u9AB2\uB6BE\uD8B9\uB1C8\uB1CF\uB1D1\uC5FE"+
+            "\u9AB3\uB1D0\u9AB4\uC3AB\u9AB5\u9AB6\u9AB7\u9AB8"+
+            "\u9AB9\uD5B1\u9ABA\u9ABB\u9ABC\u9ABD\u9ABE\u9ABF"+
+            "\u9AC0\u9AC1\uEBA4\uBAC1\u9AC2\u9AC3\u9AC4\uCCBA"+
+            "\u9AC5\u9AC6\u9AC7\uEBA5\u9AC8\uEBA7\u9AC9\u9ACA"+
+            "\u9ACB\uEBA8\u9ACC\u9ACD\u9ACE\uEBA6\u9ACF\u9AD0"+
+            "\u9AD1\u9AD2\u9AD3\u9AD4\u9AD5\uEBA9\uEBAB\uEBAA"+
+            "\u9AD6\u9AD7\u9AD8\u9AD9\u9ADA\uEBAC\u9ADB\uCACF"+
+            "\uD8B5\uC3F1\u9ADC\uC3A5\uC6F8\uEBAD\uC4CA\u9ADD"+
+            "\uEBAE\uEBAF\uEBB0\uB7D5\u9ADE\u9ADF\u9AE0\uB7FA"+
+            "\u9AE1\uEBB1\uC7E2\u9AE2\uEBB3\u9AE3\uBAA4\uD1F5"+
+            "\uB0B1\uEBB2\uEBB4\u9AE4\u9AE5\u9AE6\uB5AA\uC2C8"+
+            "\uC7E8\u9AE7\uEBB5\u9AE8\uCBAE\uE3DF\u9AE9\u9AEA"+
+            "\uD3C0\u9AEB\u9AEC\u9AED\u9AEE\uD9DB\u9AEF\u9AF0"+
+            "\uCDA1\uD6AD\uC7F3\u9AF1\u9AF2\u9AF3\uD9E0\uBBE3"+
+            "\u9AF4\uBABA\uE3E2\u9AF5\u9AF6\u9AF7\u9AF8\u9AF9"+
+            "\uCFAB\u9AFA\u9AFB\u9AFC\uE3E0\uC9C7\u9AFD\uBAB9"+
+            "\u9AFE\u9B40\u9B41\uD1B4\uE3E1\uC8EA\uB9AF\uBDAD"+
+            "\uB3D8\uCEDB\u9B42\u9B43\uCCC0\u9B44\u9B45\u9B46"+
+            "\uE3E8\uE3E9\uCDF4\u9B47\u9B48\u9B49\u9B4A\u9B4B"+
+            "\uCCAD\u9B4C\uBCB3\u9B4D\uE3EA\u9B4E\uE3EB\u9B4F"+
+            "\u9B50\uD0DA\u9B51\u9B52\u9B53\uC6FB\uB7DA\u9B54"+
+            "\u9B55\uC7DF\uD2CA\uCED6\u9B56\uE3E4\uE3EC\u9B57"+
+            "\uC9F2\uB3C1\u9B58\u9B59\uE3E7\u9B5A\u9B5B\uC6E3"+
+            "\uE3E5\u9B5C\u9B5D\uEDB3\uE3E6\u9B5E\u9B5F\u9B60"+
+            "\u9B61\uC9B3\u9B62\uC5E6\u9B63\u9B64\u9B65\uB9B5"+
+            "\u9B66\uC3BB\u9B67\uE3E3\uC5BD\uC1A4\uC2D9\uB2D7"+
+            "\u9B68\uE3ED\uBBA6\uC4AD\u9B69\uE3F0\uBEDA\u9B6A"+
+            "\u9B6B\uE3FB\uE3F5\uBAD3\u9B6C\u9B6D\u9B6E\u9B6F"+
+            "\uB7D0\uD3CD\u9B70\uD6CE\uD5D3\uB9C1\uD5B4\uD1D8"+
+            "\u9B71\u9B72\u9B73\u9B74\uD0B9\uC7F6\u9B75\u9B76"+
+            "\u9B77\uC8AA\uB2B4\u9B78\uC3DA\u9B79\u9B7A\u9B7B"+
+            "\uE3EE\u9B7C\u9B7D\uE3FC\uE3EF\uB7A8\uE3F7\uE3F4"+
+            "\u9B7E\u9B80\u9B81\uB7BA\u9B82\u9B83\uC5A2\u9B84"+
+            "\uE3F6\uC5DD\uB2A8\uC6FC\u9B85\uC4E0\u9B86\u9B87"+
+            "\uD7A2\u9B88\uC0E1\uE3F9\u9B89\u9B8A\uE3FA\uE3FD"+
+            "\uCCA9\uE3F3\u9B8B\uD3BE\u9B8C\uB1C3\uEDB4\uE3F1"+
+            "\uE3F2\u9B8D\uE3F8\uD0BA\uC6C3\uD4F3\uE3FE\u9B8E"+
+            "\u9B8F\uBDE0\u9B90\u9B91\uE4A7\u9B92\u9B93\uE4A6"+
+            "\u9B94\u9B95\u9B96\uD1F3\uE4A3\u9B97\uE4A9\u9B98"+
+            "\u9B99\u9B9A\uC8F7\u9B9B\u9B9C\u9B9D\u9B9E\uCFB4"+
+            "\u9B9F\uE4A8\uE4AE\uC2E5\u9BA0\u9BA1\uB6B4\u9BA2"+
+            "\u9BA3\u9BA4\u9BA5\u9BA6\u9BA7\uBDF2\u9BA8\uE4A2"+
+            "\u9BA9\u9BAA\uBAE9\uE4AA\u9BAB\u9BAC\uE4AC\u9BAD"+
+            "\u9BAE\uB6FD\uD6DE\uE4B2\u9BAF\uE4AD\u9BB0\u9BB1"+
+            "\u9BB2\uE4A1\u9BB3\uBBEE\uCDDD\uC7A2\uC5C9\u9BB4"+
+            "\u9BB5\uC1F7\u9BB6\uE4A4\u9BB7\uC7B3\uBDAC\uBDBD"+
+            "\uE4A5\u9BB8\uD7C7\uB2E2\u9BB9\uE4AB\uBCC3\uE4AF"+
+            "\u9BBA\uBBEB\uE4B0\uC5A8\uE4B1\u9BBB\u9BBC\u9BBD"+
+            "\u9BBE\uD5E3\uBFA3\u9BBF\uE4BA\u9BC0\uE4B7\u9BC1"+
+            "\uE4BB\u9BC2\u9BC3\uE4BD\u9BC4\u9BC5\uC6D6\u9BC6"+
+            "\u9BC7\uBAC6\uC0CB\u9BC8\u9BC9\u9BCA\uB8A1\uE4B4"+
+            "\u9BCB\u9BCC\u9BCD\u9BCE\uD4A1\u9BCF\u9BD0\uBAA3"+
+            "\uBDFE\u9BD1\u9BD2\u9BD3\uE4BC\u9BD4\u9BD5\u9BD6"+
+            "\u9BD7\u9BD8\uCDBF\u9BD9\u9BDA\uC4F9\u9BDB\u9BDC"+
+            "\uCFFB\uC9E6\u9BDD\u9BDE\uD3BF\u9BDF\uCFD1\u9BE0"+
+            "\u9BE1\uE4B3\u9BE2\uE4B8\uE4B9\uCCE9\u9BE3\u9BE4"+
+            "\u9BE5\u9BE6\u9BE7\uCCCE\u9BE8\uC0D4\uE4B5\uC1B0"+
+            "\uE4B6\uCED0\u9BE9\uBBC1\uB5D3\u9BEA\uC8F3\uBDA7"+
+            "\uD5C7\uC9AC\uB8A2\uE4CA\u9BEB\u9BEC\uE4CC\uD1C4"+
+            "\u9BED\u9BEE\uD2BA\u9BEF\u9BF0\uBAAD\u9BF1\u9BF2"+
+            "\uBAD4\u9BF3\u9BF4\u9BF5\u9BF6\u9BF7\u9BF8\uE4C3"+
+            "\uB5ED\u9BF9\u9BFA\u9BFB\uD7CD\uE4C0\uCFFD\uE4BF"+
+            "\u9BFC\u9BFD\u9BFE\uC1DC\uCCCA\u9C40\u9C41\u9C42"+
+            "\u9C43\uCAE7\u9C44\u9C45\u9C46\u9C47\uC4D7\u9C48"+
+            "\uCCD4\uE4C8\u9C49\u9C4A\u9C4B\uE4C7\uE4C1\u9C4C"+
+            "\uE4C4\uB5AD\u9C4D\u9C4E\uD3D9\u9C4F\uE4C6\u9C50"+
+            "\u9C51\u9C52\u9C53\uD2F9\uB4E3\u9C54\uBBB4\u9C55"+
+            "\u9C56\uC9EE\u9C57\uB4BE\u9C58\u9C59\u9C5A\uBBEC"+
+            "\u9C5B\uD1CD\u9C5C\uCCED\uEDB5\u9C5D\u9C5E\u9C5F"+
+            "\u9C60\u9C61\u9C62\u9C63\u9C64\uC7E5\u9C65\u9C66"+
+            "\u9C67\u9C68\uD4A8\u9C69\uE4CB\uD7D5\uE4C2\u9C6A"+
+            "\uBDA5\uE4C5\u9C6B\u9C6C\uD3E6\u9C6D\uE4C9\uC9F8"+
+            "\u9C6E\u9C6F\uE4BE\u9C70\u9C71\uD3E5\u9C72\u9C73"+
+            "\uC7FE\uB6C9\u9C74\uD4FC\uB2B3\uE4D7\u9C75\u9C76"+
+            "\u9C77\uCEC2\u9C78\uE4CD\u9C79\uCEBC\u9C7A\uB8DB"+
+            "\u9C7B\u9C7C\uE4D6\u9C7D\uBFCA\u9C7E\u9C80\u9C81"+
+            "\uD3CE\u9C82\uC3EC\u9C83\u9C84\u9C85\u9C86\u9C87"+
+            "\u9C88\u9C89\u9C8A\uC5C8\uE4D8\u9C8B\u9C8C\u9C8D"+
+            "\u9C8E\u9C8F\u9C90\u9C91\u9C92\uCDC4\uE4CF\u9C93"+
+            "\u9C94\u9C95\u9C96\uE4D4\uE4D5\u9C97\uBAFE\u9C98"+
+            "\uCFE6\u9C99\u9C9A\uD5BF\u9C9B\u9C9C\u9C9D\uE4D2"+
+            "\u9C9E\u9C9F\u9CA0\u9CA1\u9CA2\u9CA3\u9CA4\u9CA5"+
+            "\u9CA6\u9CA7\u9CA8\uE4D0\u9CA9\u9CAA\uE4CE\u9CAB"+
+            "\u9CAC\u9CAD\u9CAE\u9CAF\u9CB0\u9CB1\u9CB2\u9CB3"+
+            "\u9CB4\u9CB5\u9CB6\u9CB7\u9CB8\u9CB9\uCDE5\uCAAA"+
+            "\u9CBA\u9CBB\u9CBC\uC0A3\u9CBD\uBDA6\uE4D3\u9CBE"+
+            "\u9CBF\uB8C8\u9CC0\u9CC1\u9CC2\u9CC3\u9CC4\uE4E7"+
+            "\uD4B4\u9CC5\u9CC6\u9CC7\u9CC8\u9CC9\u9CCA\u9CCB"+
+            "\uE4DB\u9CCC\u9CCD\u9CCE\uC1EF\u9CCF\u9CD0\uE4E9"+
+            "\u9CD1\u9CD2\uD2E7\u9CD3\u9CD4\uE4DF\u9CD5\uE4E0"+
+            "\u9CD6\u9CD7\uCFAA\u9CD8\u9CD9\u9CDA\u9CDB\uCBDD"+
+            "\u9CDC\uE4DA\uE4D1\u9CDD\uE4E5\u9CDE\uC8DC\uE4E3"+
+            "\u9CDF\u9CE0\uC4E7\uE4E2\u9CE1\uE4E1\u9CE2\u9CE3"+
+            "\u9CE4\uB3FC\uE4E8\u9CE5\u9CE6\u9CE7\u9CE8\uB5E1"+
+            "\u9CE9\u9CEA\u9CEB\uD7CC\u9CEC\u9CED\u9CEE\uE4E6"+
+            "\u9CEF\uBBAC\u9CF0\uD7D2\uCCCF\uEBF8\u9CF1\uE4E4"+
+            "\u9CF2\u9CF3\uB9F6\u9CF4\u9CF5\u9CF6\uD6CD\uE4D9"+
+            "\uE4DC\uC2FA\uE4DE\u9CF7\uC2CB\uC0C4\uC2D0\u9CF8"+
+            "\uB1F5\uCCB2\u9CF9\u9CFA\u9CFB\u9CFC\u9CFD\u9CFE"+
+            "\u9D40\u9D41\u9D42\u9D43\uB5CE\u9D44\u9D45\u9D46"+
+            "\u9D47\uE4EF\u9D48\u9D49\u9D4A\u9D4B\u9D4C\u9D4D"+
+            "\u9D4E\u9D4F\uC6AF\u9D50\u9D51\u9D52\uC6E1\u9D53"+
+            "\u9D54\uE4F5\u9D55\u9D56\u9D57\u9D58\u9D59\uC2A9"+
+            "\u9D5A\u9D5B\u9D5C\uC0EC\uD1DD\uE4EE\u9D5D\u9D5E"+
+            "\u9D5F\u9D60\u9D61\u9D62\u9D63\u9D64\u9D65\u9D66"+
+            "\uC4AE\u9D67\u9D68\u9D69\uE4ED\u9D6A\u9D6B\u9D6C"+
+            "\u9D6D\uE4F6\uE4F4\uC2FE\u9D6E\uE4DD\u9D6F\uE4F0"+
+            "\u9D70\uCAFE\u9D71\uD5C4\u9D72\u9D73\uE4F1\u9D74"+
+            "\u9D75\u9D76\u9D77\u9D78\u9D79\u9D7A\uD1FA\u9D7B"+
+            "\u9D7C\u9D7D\u9D7E\u9D80\u9D81\u9D82\uE4EB\uE4EC"+
+            "\u9D83\u9D84\u9D85\uE4F2\u9D86\uCEAB\u9D87\u9D88"+
+            "\u9D89\u9D8A\u9D8B\u9D8C\u9D8D\u9D8E\u9D8F\u9D90"+
+            "\uC5CB\u9D91\u9D92\u9D93\uC7B1\u9D94\uC2BA\u9D95"+
+            "\u9D96\u9D97\uE4EA\u9D98\u9D99\u9D9A\uC1CA\u9D9B"+
+            "\u9D9C\u9D9D\u9D9E\u9D9F\u9DA0\uCCB6\uB3B1\u9DA1"+
+            "\u9DA2\u9DA3\uE4FB\u9DA4\uE4F3\u9DA5\u9DA6\u9DA7"+
+            "\uE4FA\u9DA8\uE4FD\u9DA9\uE4FC\u9DAA\u9DAB\u9DAC"+
+            "\u9DAD\u9DAE\u9DAF\u9DB0\uB3CE\u9DB1\u9DB2\u9DB3"+
+            "\uB3BA\uE4F7\u9DB4\u9DB5\uE4F9\uE4F8\uC5EC\u9DB6"+
+            "\u9DB7\u9DB8\u9DB9\u9DBA\u9DBB\u9DBC\u9DBD\u9DBE"+
+            "\u9DBF\u9DC0\u9DC1\u9DC2\uC0BD\u9DC3\u9DC4\u9DC5"+
+            "\u9DC6\uD4E8\u9DC7\u9DC8\u9DC9\u9DCA\u9DCB\uE5A2"+
+            "\u9DCC\u9DCD\u9DCE\u9DCF\u9DD0\u9DD1\u9DD2\u9DD3"+
+            "\u9DD4\u9DD5\u9DD6\uB0C4\u9DD7\u9DD8\uE5A4\u9DD9"+
+            "\u9DDA\uE5A3\u9DDB\u9DDC\u9DDD\u9DDE\u9DDF\u9DE0"+
+            "\uBCA4\u9DE1\uE5A5\u9DE2\u9DE3\u9DE4\u9DE5\u9DE6"+
+            "\u9DE7\uE5A1\u9DE8\u9DE9\u9DEA\u9DEB\u9DEC\u9DED"+
+            "\u9DEE\uE4FE\uB1F4\u9DEF\u9DF0\u9DF1\u9DF2\u9DF3"+
+            "\u9DF4\u9DF5\u9DF6\u9DF7\u9DF8\u9DF9\uE5A8\u9DFA"+
+            "\uE5A9\uE5A6\u9DFB\u9DFC\u9DFD\u9DFE\u9E40\u9E41"+
+            "\u9E42\u9E43\u9E44\u9E45\u9E46\u9E47\uE5A7\uE5AA"+
+            "\u9E48\u9E49\u9E4A\u9E4B\u9E4C\u9E4D\u9E4E\u9E4F"+
+            "\u9E50\u9E51\u9E52\u9E53\u9E54\u9E55\u9E56\u9E57"+
+            "\u9E58\u9E59\u9E5A\u9E5B\u9E5C\u9E5D\u9E5E\u9E5F"+
+            "\u9E60\u9E61\u9E62\u9E63\u9E64\u9E65\u9E66\u9E67"+
+            "\u9E68\uC6D9\u9E69\u9E6A\u9E6B\u9E6C\u9E6D\u9E6E"+
+            "\u9E6F\u9E70\uE5AB\uE5AD\u9E71\u9E72\u9E73\u9E74"+
+            "\u9E75\u9E76\u9E77\uE5AC\u9E78\u9E79\u9E7A\u9E7B"+
+            "\u9E7C\u9E7D\u9E7E\u9E80\u9E81\u9E82\u9E83\u9E84"+
+            "\u9E85\u9E86\u9E87\u9E88\u9E89\uE5AF\u9E8A\u9E8B"+
+            "\u9E8C\uE5AE\u9E8D\u9E8E\u9E8F\u9E90\u9E91\u9E92"+
+            "\u9E93\u9E94\u9E95\u9E96\u9E97\u9E98\u9E99\u9E9A"+
+            "\u9E9B\u9E9C\u9E9D\u9E9E\uB9E0\u9E9F\u9EA0\uE5B0"+
+            "\u9EA1\u9EA2\u9EA3\u9EA4\u9EA5\u9EA6\u9EA7\u9EA8"+
+            "\u9EA9\u9EAA\u9EAB\u9EAC\u9EAD\u9EAE\uE5B1\u9EAF"+
+            "\u9EB0\u9EB1\u9EB2\u9EB3\u9EB4\u9EB5\u9EB6\u9EB7"+
+            "\u9EB8\u9EB9\u9EBA\uBBF0\uECE1\uC3F0\u9EBB\uB5C6"+
+            "\uBBD2\u9EBC\u9EBD\u9EBE\u9EBF\uC1E9\uD4EE\u9EC0"+
+            "\uBEC4\u9EC1\u9EC2\u9EC3\uD7C6\u9EC4\uD4D6\uB2D3"+
+            "\uECBE\u9EC5\u9EC6\u9EC7\u9EC8\uEAC1\u9EC9\u9ECA"+
+            "\u9ECB\uC2AF\uB4B6\u9ECC\u9ECD\u9ECE\uD1D7\u9ECF"+
+            "\u9ED0\u9ED1\uB3B4\u9ED2\uC8B2\uBFBB\uECC0\u9ED3"+
+            "\u9ED4\uD6CB\u9ED5\u9ED6\uECBF\uECC1\u9ED7\u9ED8"+
+            "\u9ED9\u9EDA\u9EDB\u9EDC\u9EDD\u9EDE\u9EDF\u9EE0"+
+            "\u9EE1\u9EE2\u9EE3\uECC5\uBEE6\uCCBF\uC5DA\uBEBC"+
+            "\u9EE4\uECC6\u9EE5\uB1FE\u9EE6\u9EE7\u9EE8\uECC4"+
+            "\uD5A8\uB5E3\u9EE9\uECC2\uC1B6\uB3E3\u9EEA\u9EEB"+
+            "\uECC3\uCBB8\uC0C3\uCCFE\u9EEC\u9EED\u9EEE\u9EEF"+
+            "\uC1D2\u9EF0\uECC8\u9EF1\u9EF2\u9EF3\u9EF4\u9EF5"+
+            "\u9EF6\u9EF7\u9EF8\u9EF9\u9EFA\u9EFB\u9EFC\u9EFD"+
+            "\uBAE6\uC0D3\u9EFE\uD6F2\u9F40\u9F41\u9F42\uD1CC"+
+            "\u9F43\u9F44\u9F45\u9F46\uBFBE\u9F47\uB7B3\uC9D5"+
+            "\uECC7\uBBE2\u9F48\uCCCC\uBDFD\uC8C8\u9F49\uCFA9"+
+            "\u9F4A\u9F4B\u9F4C\u9F4D\u9F4E\u9F4F\u9F50\uCDE9"+
+            "\u9F51\uC5EB\u9F52\u9F53\u9F54\uB7E9\u9F55\u9F56"+
+            "\u9F57\u9F58\u9F59\u9F5A\u9F5B\u9F5C\u9F5D\u9F5E"+
+            "\u9F5F\uD1C9\uBAB8\u9F60\u9F61\u9F62\u9F63\u9F64"+
+            "\uECC9\u9F65\u9F66\uECCA\u9F67\uBBC0\uECCB\u9F68"+
+            "\uECE2\uB1BA\uB7D9\u9F69\u9F6A\u9F6B\u9F6C\u9F6D"+
+            "\u9F6E\u9F6F\u9F70\u9F71\u9F72\u9F73\uBDB9\u9F74"+
+            "\u9F75\u9F76\u9F77\u9F78\u9F79\u9F7A\u9F7B\uECCC"+
+            "\uD1E6\uECCD\u9F7C\u9F7D\u9F7E\u9F80\uC8BB\u9F81"+
+            "\u9F82\u9F83\u9F84\u9F85\u9F86\u9F87\u9F88\u9F89"+
+            "\u9F8A\u9F8B\u9F8C\u9F8D\u9F8E\uECD1\u9F8F\u9F90"+
+            "\u9F91\u9F92\uECD3\u9F93\uBBCD\u9F94\uBCE5\u9F95"+
+            "\u9F96\u9F97\u9F98\u9F99\u9F9A\u9F9B\u9F9C\u9F9D"+
+            "\u9F9E\u9F9F\u9FA0\u9FA1\uECCF\u9FA2\uC9B7\u9FA3"+
+            "\u9FA4\u9FA5\u9FA6\u9FA7\uC3BA\u9FA8\uECE3\uD5D5"+
+            "\uECD0\u9FA9\u9FAA\u9FAB\u9FAC\u9FAD\uD6F3\u9FAE"+
+            "\u9FAF\u9FB0\uECD2\uECCE\u9FB1\u9FB2\u9FB3\u9FB4"+
+            "\uECD4\u9FB5\uECD5\u9FB6\u9FB7\uC9BF\u9FB8\u9FB9"+
+            "\u9FBA\u9FBB\u9FBC\u9FBD\uCFA8\u9FBE\u9FBF\u9FC0"+
+            "\u9FC1\u9FC2\uD0DC\u9FC3\u9FC4\u9FC5\u9FC6\uD1AC"+
+            "\u9FC7\u9FC8\u9FC9\u9FCA\uC8DB\u9FCB\u9FCC\u9FCD"+
+            "\uECD6\uCEF5\u9FCE\u9FCF\u9FD0\u9FD1\u9FD2\uCAEC"+
+            "\uECDA\u9FD3\u9FD4\u9FD5\u9FD6\u9FD7\u9FD8\u9FD9"+
+            "\uECD9\u9FDA\u9FDB\u9FDC\uB0BE\u9FDD\u9FDE\u9FDF"+
+            "\u9FE0\u9FE1\u9FE2\uECD7\u9FE3\uECD8\u9FE4\u9FE5"+
+            "\u9FE6\uECE4\u9FE7\u9FE8\u9FE9\u9FEA\u9FEB\u9FEC"+
+            "\u9FED\u9FEE\u9FEF\uC8BC\u9FF0\u9FF1\u9FF2\u9FF3"+
+            "\u9FF4\u9FF5\u9FF6\u9FF7\u9FF8\u9FF9\uC1C7\u9FFA"+
+            "\u9FFB\u9FFC\u9FFD\u9FFE\uECDC\uD1E0\uA040\uA041"+
+            "\uA042\uA043\uA044\uA045\uA046\uA047\uA048\uA049"+
+            "\uECDB\uA04A\uA04B\uA04C\uA04D\uD4EF\uA04E\uECDD"+
+            "\uA04F\uA050\uA051\uA052\uA053\uA054\uDBC6\uA055"+
+            "\uA056\uA057\uA058\uA059\uA05A\uA05B\uA05C\uA05D"+
+            "\uA05E\uECDE\uA05F\uA060\uA061\uA062\uA063\uA064"+
+            "\uA065\uA066\uA067\uA068\uA069\uA06A\uB1AC\uA06B"+
+            "\uA06C\uA06D\uA06E\uA06F\uA070\uA071\uA072\uA073"+
+            "\uA074\uA075\uA076\uA077\uA078\uA079\uA07A\uA07B"+
+            "\uA07C\uA07D\uA07E\uA080\uA081\uECDF\uA082\uA083"+
+            "\uA084\uA085\uA086\uA087\uA088\uA089\uA08A\uA08B"+
+            "\uECE0\uA08C\uD7A6\uA08D\uC5C0\uA08E\uA08F\uA090"+
+            "\uEBBC\uB0AE\uA091\uA092\uA093\uBEF4\uB8B8\uD2AF"+
+            "\uB0D6\uB5F9\uA094\uD8B3\uA095\uCBAC\uA096\uE3DD"+
+            "\uA097\uA098\uA099\uA09A\uA09B\uA09C\uA09D\uC6AC"+
+            "\uB0E6\uA09E\uA09F\uA0A0\uC5C6\uEBB9\uA0A1\uA0A2"+
+            "\uA0A3\uA0A4\uEBBA\uA0A5\uA0A6\uA0A7\uEBBB\uA0A8"+
+            "\uA0A9\uD1C0\uA0AA\uC5A3\uA0AB\uEAF2\uA0AC\uC4B2"+
+            "\uA0AD\uC4B5\uC0CE\uA0AE\uA0AF\uA0B0\uEAF3\uC4C1"+
+            "\uA0B1\uCEEF\uA0B2\uA0B3\uA0B4\uA0B5\uEAF0\uEAF4"+
+            "\uA0B6\uA0B7\uC9FC\uA0B8\uA0B9\uC7A3\uA0BA\uA0BB"+
+            "\uA0BC\uCCD8\uCEFE\uA0BD\uA0BE\uA0BF\uEAF5\uEAF6"+
+            "\uCFAC\uC0E7\uA0C0\uA0C1\uEAF7\uA0C2\uA0C3\uA0C4"+
+            "\uA0C5\uA0C6\uB6BF\uEAF8\uA0C7\uEAF9\uA0C8\uEAFA"+
+            "\uA0C9\uA0CA\uEAFB\uA0CB\uA0CC\uA0CD\uA0CE\uA0CF"+
+            "\uA0D0\uA0D1\uA0D2\uA0D3\uA0D4\uA0D5\uA0D6\uEAF1"+
+            "\uA0D7\uA0D8\uA0D9\uA0DA\uA0DB\uA0DC\uA0DD\uA0DE"+
+            "\uA0DF\uA0E0\uA0E1\uA0E2\uC8AE\uE1EB\uA0E3\uB7B8"+
+            "\uE1EC\uA0E4\uA0E5\uA0E6\uE1ED\uA0E7\uD7B4\uE1EE"+
+            "\uE1EF\uD3CC\uA0E8\uA0E9\uA0EA\uA0EB\uA0EC\uA0ED"+
+            "\uA0EE\uE1F1\uBFF1\uE1F0\uB5D2\uA0EF\uA0F0\uA0F1"+
+            "\uB1B7\uA0F2\uA0F3\uA0F4\uA0F5\uE1F3\uE1F2\uA0F6"+
+            "\uBAFC\uA0F7\uE1F4\uA0F8\uA0F9\uA0FA\uA0FB\uB9B7"+
+            "\uA0FC\uBED1\uA0FD\uA0FE\uAA40\uAA41\uC4FC\uAA42"+
+            "\uBADD\uBDC6\uAA43\uAA44\uAA45\uAA46\uAA47\uAA48"+
+            "\uE1F5\uE1F7\uAA49\uAA4A\uB6C0\uCFC1\uCAA8\uE1F6"+
+            "\uD5F8\uD3FC\uE1F8\uE1FC\uE1F9\uAA4B\uAA4C\uE1FA"+
+            "\uC0EA\uAA4D\uE1FE\uE2A1\uC0C7\uAA4E\uAA4F\uAA50"+
+            "\uAA51\uE1FB\uAA52\uE1FD\uAA53\uAA54\uAA55\uAA56"+
+            "\uAA57\uAA58\uE2A5\uAA59\uAA5A\uAA5B\uC1D4\uAA5C"+
+            "\uAA5D\uAA5E\uAA5F\uE2A3\uAA60\uE2A8\uB2FE\uE2A2"+
+            "\uAA61\uAA62\uAA63\uC3CD\uB2C2\uE2A7\uE2A6\uAA64"+
+            "\uAA65\uE2A4\uE2A9\uAA66\uAA67\uE2AB\uAA68\uAA69"+
+            "\uAA6A\uD0C9\uD6ED\uC3A8\uE2AC\uAA6B\uCFD7\uAA6C"+
+            "\uAA6D\uE2AE\uAA6E\uAA6F\uBAEF\uAA70\uAA71\uE9E0"+
+            "\uE2AD\uE2AA\uAA72\uAA73\uAA74\uAA75\uBBAB\uD4B3"+
+            "\uAA76\uAA77\uAA78\uAA79\uAA7A\uAA7B\uAA7C\uAA7D"+
+            "\uAA7E\uAA80\uAA81\uAA82\uAA83\uE2B0\uAA84\uAA85"+
+            "\uE2AF\uAA86\uE9E1\uAA87\uAA88\uAA89\uAA8A\uE2B1"+
+            "\uAA8B\uAA8C\uAA8D\uAA8E\uAA8F\uAA90\uAA91\uAA92"+
+            "\uE2B2\uAA93\uAA94\uAA95\uAA96\uAA97\uAA98\uAA99"+
+            "\uAA9A\uAA9B\uAA9C\uAA9D\uE2B3\uCCA1\uAA9E\uE2B4"+
+            "\uAA9F\uAAA0\uAB40\uAB41\uAB42\uAB43\uAB44\uAB45"+
+            "\uAB46\uAB47\uAB48\uAB49\uAB4A\uAB4B\uE2B5\uAB4C"+
+            "\uAB4D\uAB4E\uAB4F\uAB50\uD0FE\uAB51\uAB52\uC2CA"+
+            "\uAB53\uD3F1\uAB54\uCDF5\uAB55\uAB56\uE7E0\uAB57"+
+            "\uAB58\uE7E1\uAB59\uAB5A\uAB5B\uAB5C\uBEC1\uAB5D"+
+            "\uAB5E\uAB5F\uAB60\uC2EA\uAB61\uAB62\uAB63\uE7E4"+
+            "\uAB64\uAB65\uE7E3\uAB66\uAB67\uAB68\uAB69\uAB6A"+
+            "\uAB6B\uCDE6\uAB6C\uC3B5\uAB6D\uAB6E\uE7E2\uBBB7"+
+            "\uCFD6\uAB6F\uC1E1\uE7E9\uAB70\uAB71\uAB72\uE7E8"+
+            "\uAB73\uAB74\uE7F4\uB2A3\uAB75\uAB76\uAB77\uAB78"+
+            "\uE7EA\uAB79\uE7E6\uAB7A\uAB7B\uAB7C\uAB7D\uAB7E"+
+            "\uE7EC\uE7EB\uC9BA\uAB80\uAB81\uD5E4\uAB82\uE7E5"+
+            "\uB7A9\uE7E7\uAB83\uAB84\uAB85\uAB86\uAB87\uAB88"+
+            "\uAB89\uE7EE\uAB8A\uAB8B\uAB8C\uAB8D\uE7F3\uAB8E"+
+            "\uD6E9\uAB8F\uAB90\uAB91\uAB92\uE7ED\uAB93\uE7F2"+
+            "\uAB94\uE7F1\uAB95\uAB96\uAB97\uB0E0\uAB98\uAB99"+
+            "\uAB9A\uAB9B\uE7F5\uAB9C\uAB9D\uAB9E\uAB9F\uABA0"+
+            "\uAC40\uAC41\uAC42\uAC43\uAC44\uAC45\uAC46\uAC47"+
+            "\uAC48\uAC49\uAC4A\uC7F2\uAC4B\uC0C5\uC0ED\uAC4C"+
+            "\uAC4D\uC1F0\uE7F0\uAC4E\uAC4F\uAC50\uAC51\uE7F6"+
+            "\uCBF6\uAC52\uAC53\uAC54\uAC55\uAC56\uAC57\uAC58"+
+            "\uAC59\uAC5A\uE8A2\uE8A1\uAC5B\uAC5C\uAC5D\uAC5E"+
+            "\uAC5F\uAC60\uD7C1\uAC61\uAC62\uE7FA\uE7F9\uAC63"+
+            "\uE7FB\uAC64\uE7F7\uAC65\uE7FE\uAC66\uE7FD\uAC67"+
+            "\uE7FC\uAC68\uAC69\uC1D5\uC7D9\uC5FD\uC5C3\uAC6A"+
+            "\uAC6B\uAC6C\uAC6D\uAC6E\uC7ED\uAC6F\uAC70\uAC71"+
+            "\uAC72\uE8A3\uAC73\uAC74\uAC75\uAC76\uAC77\uAC78"+
+            "\uAC79\uAC7A\uAC7B\uAC7C\uAC7D\uAC7E\uAC80\uAC81"+
+            "\uAC82\uAC83\uAC84\uAC85\uAC86\uE8A6\uAC87\uE8A5"+
+            "\uAC88\uE8A7\uBAF7\uE7F8\uE8A4\uAC89\uC8F0\uC9AA"+
+            "\uAC8A\uAC8B\uAC8C\uAC8D\uAC8E\uAC8F\uAC90\uAC91"+
+            "\uAC92\uAC93\uAC94\uAC95\uAC96\uE8A9\uAC97\uAC98"+
+            "\uB9E5\uAC99\uAC9A\uAC9B\uAC9C\uAC9D\uD1FE\uE8A8"+
+            "\uAC9E\uAC9F\uACA0\uAD40\uAD41\uAD42\uE8AA\uAD43"+
+            "\uE8AD\uE8AE\uAD44\uC1A7\uAD45\uAD46\uAD47\uE8AF"+
+            "\uAD48\uAD49\uAD4A\uE8B0\uAD4B\uAD4C\uE8AC\uAD4D"+
+            "\uE8B4\uAD4E\uAD4F\uAD50\uAD51\uAD52\uAD53\uAD54"+
+            "\uAD55\uAD56\uAD57\uAD58\uE8AB\uAD59\uE8B1\uAD5A"+
+            "\uAD5B\uAD5C\uAD5D\uAD5E\uAD5F\uAD60\uAD61\uE8B5"+
+            "\uE8B2\uE8B3\uAD62\uAD63\uAD64\uAD65\uAD66\uAD67"+
+            "\uAD68\uAD69\uAD6A\uAD6B\uAD6C\uAD6D\uAD6E\uAD6F"+
+            "\uAD70\uAD71\uE8B7\uAD72\uAD73\uAD74\uAD75\uAD76"+
+            "\uAD77\uAD78\uAD79\uAD7A\uAD7B\uAD7C\uAD7D\uAD7E"+
+            "\uAD80\uAD81\uAD82\uAD83\uAD84\uAD85\uAD86\uAD87"+
+            "\uAD88\uAD89\uE8B6\uAD8A\uAD8B\uAD8C\uAD8D\uAD8E"+
+            "\uAD8F\uAD90\uAD91\uAD92\uB9CF\uAD93\uF0AC\uAD94"+
+            "\uF0AD\uAD95\uC6B0\uB0EA\uC8BF\uAD96\uCDDF\uAD97"+
+            "\uAD98\uAD99\uAD9A\uAD9B\uAD9C\uAD9D\uCECD\uEAB1"+
+            "\uAD9E\uAD9F\uADA0\uAE40\uEAB2\uAE41\uC6BF\uB4C9"+
+            "\uAE42\uAE43\uAE44\uAE45\uAE46\uAE47\uAE48\uEAB3"+
+            "\uAE49\uAE4A\uAE4B\uAE4C\uD5E7\uAE4D\uAE4E\uAE4F"+
+            "\uAE50\uAE51\uAE52\uAE53\uAE54\uDDF9\uAE55\uEAB4"+
+            "\uAE56\uEAB5\uAE57\uEAB6\uAE58\uAE59\uAE5A\uAE5B"+
+            "\uB8CA\uDFB0\uC9F5\uAE5C\uCCF0\uAE5D\uAE5E\uC9FA"+
+            "\uAE5F\uAE60\uAE61\uAE62\uAE63\uC9FB\uAE64\uAE65"+
+            "\uD3C3\uCBA6\uAE66\uB8A6\uF0AE\uB1C2\uAE67\uE5B8"+
+            "\uCCEF\uD3C9\uBCD7\uC9EA\uAE68\uB5E7\uAE69\uC4D0"+
+            "\uB5E9\uAE6A\uEEAE\uBBAD\uAE6B\uAE6C\uE7DE\uAE6D"+
+            "\uEEAF\uAE6E\uAE6F\uAE70\uAE71\uB3A9\uAE72\uAE73"+
+            "\uEEB2\uAE74\uAE75\uEEB1\uBDE7\uAE76\uEEB0\uCEB7"+
+            "\uAE77\uAE78\uAE79\uAE7A\uC5CF\uAE7B\uAE7C\uAE7D"+
+            "\uAE7E\uC1F4\uDBCE\uEEB3\uD0F3\uAE80\uAE81\uAE82"+
+            "\uAE83\uAE84\uAE85\uAE86\uAE87\uC2D4\uC6E8\uAE88"+
+            "\uAE89\uAE8A\uB7AC\uAE8B\uAE8C\uAE8D\uAE8E\uAE8F"+
+            "\uAE90\uAE91\uEEB4\uAE92\uB3EB\uAE93\uAE94\uAE95"+
+            "\uBBFB\uEEB5\uAE96\uAE97\uAE98\uAE99\uAE9A\uE7DC"+
+            "\uAE9B\uAE9C\uAE9D\uEEB6\uAE9E\uAE9F\uBDAE\uAEA0"+
+            "\uAF40\uAF41\uAF42\uF1E2\uAF43\uAF44\uAF45\uCAE8"+
+            "\uAF46\uD2C9\uF0DA\uAF47\uF0DB\uAF48\uF0DC\uC1C6"+
+            "\uAF49\uB8ED\uBECE\uAF4A\uAF4B\uF0DE\uAF4C\uC5B1"+
+            "\uF0DD\uD1F1\uAF4D\uF0E0\uB0CC\uBDEA\uAF4E\uAF4F"+
+            "\uAF50\uAF51\uAF52\uD2DF\uF0DF\uAF53\uB4AF\uB7E8"+
+            "\uF0E6\uF0E5\uC6A3\uF0E1\uF0E2\uB4C3\uAF54\uAF55"+
+            "\uF0E3\uD5EE\uAF56\uAF57\uCCDB\uBED2\uBCB2\uAF58"+
+            "\uAF59\uAF5A\uF0E8\uF0E7\uF0E4\uB2A1\uAF5B\uD6A2"+
+            "\uD3B8\uBEB7\uC8AC\uAF5C\uAF5D\uF0EA\uAF5E\uAF5F"+
+            "\uAF60\uAF61\uD1F7\uAF62\uD6CC\uBADB\uF0E9\uAF63"+
+            "\uB6BB\uAF64\uAF65\uCDB4\uAF66\uAF67\uC6A6\uAF68"+
+            "\uAF69\uAF6A\uC1A1\uF0EB\uF0EE\uAF6B\uF0ED\uF0F0"+
+            "\uF0EC\uAF6C\uBBBE\uF0EF\uAF6D\uAF6E\uAF6F\uAF70"+
+            "\uCCB5\uF0F2\uAF71\uAF72\uB3D5\uAF73\uAF74\uAF75"+
+            "\uAF76\uB1D4\uAF77\uAF78\uF0F3\uAF79\uAF7A\uF0F4"+
+            "\uF0F6\uB4E1\uAF7B\uF0F1\uAF7C\uF0F7\uAF7D\uAF7E"+
+            "\uAF80\uAF81\uF0FA\uAF82\uF0F8\uAF83\uAF84\uAF85"+
+            "\uF0F5\uAF86\uAF87\uAF88\uAF89\uF0FD\uAF8A\uF0F9"+
+            "\uF0FC\uF0FE\uAF8B\uF1A1\uAF8C\uAF8D\uAF8E\uCEC1"+
+            "\uF1A4\uAF8F\uF1A3\uAF90\uC1F6\uF0FB\uCADD\uAF91"+
+            "\uAF92\uB4F1\uB1F1\uCCB1\uAF93\uF1A6\uAF94\uAF95"+
+            "\uF1A7\uAF96\uAF97\uF1AC\uD5CE\uF1A9\uAF98\uAF99"+
+            "\uC8B3\uAF9A\uAF9B\uAF9C\uF1A2\uAF9D\uF1AB\uF1A8"+
+            "\uF1A5\uAF9E\uAF9F\uF1AA\uAFA0\uB040\uB041\uB042"+
+            "\uB043\uB044\uB045\uB046\uB0A9\uF1AD\uB047\uB048"+
+            "\uB049\uB04A\uB04B\uB04C\uF1AF\uB04D\uF1B1\uB04E"+
+            "\uB04F\uB050\uB051\uB052\uF1B0\uB053\uF1AE\uB054"+
+            "\uB055\uB056\uB057\uD1A2\uB058\uB059\uB05A\uB05B"+
+            "\uB05C\uB05D\uB05E\uF1B2\uB05F\uB060\uB061\uF1B3"+
+            "\uB062\uB063\uB064\uB065\uB066\uB067\uB068\uB069"+
+            "\uB9EF\uB06A\uB06B\uB5C7\uB06C\uB0D7\uB0D9\uB06D"+
+            "\uB06E\uB06F\uD4ED\uB070\uB5C4\uB071\uBDD4\uBBCA"+
+            "\uF0A7\uB072\uB073\uB8DE\uB074\uB075\uF0A8\uB076"+
+            "\uB077\uB0A8\uB078\uF0A9\uB079\uB07A\uCDEE\uB07B"+
+            "\uB07C\uF0AA\uB07D\uB07E\uB080\uB081\uB082\uB083"+
+            "\uB084\uB085\uB086\uB087\uF0AB\uB088\uB089\uB08A"+
+            "\uB08B\uB08C\uB08D\uB08E\uB08F\uB090\uC6A4\uB091"+
+            "\uB092\uD6E5\uF1E4\uB093\uF1E5\uB094\uB095\uB096"+
+            "\uB097\uB098\uB099\uB09A\uB09B\uB09C\uB09D\uC3F3"+
+            "\uB09E\uB09F\uD3DB\uB0A0\uB140\uD6D1\uC5E8\uB141"+
+            "\uD3AF\uB142\uD2E6\uB143\uB144\uEEC1\uB0BB\uD5B5"+
+            "\uD1CE\uBCE0\uBAD0\uB145\uBFF8\uB146\uB8C7\uB5C1"+
+            "\uC5CC\uB147\uB148\uCAA2\uB149\uB14A\uB14B\uC3CB"+
+            "\uB14C\uB14D\uB14E\uB14F\uB150\uEEC2\uB151\uB152"+
+            "\uB153\uB154\uB155\uB156\uB157\uB158\uC4BF\uB6A2"+
+            "\uB159\uEDEC\uC3A4\uB15A\uD6B1\uB15B\uB15C\uB15D"+
+            "\uCFE0\uEDEF\uB15E\uB15F\uC5CE\uB160\uB6DC\uB161"+
+            "\uB162\uCAA1\uB163\uB164\uEDED\uB165\uB166\uEDF0"+
+            "\uEDF1\uC3BC\uB167\uBFB4\uB168\uEDEE\uB169\uB16A"+
+            "\uB16B\uB16C\uB16D\uB16E\uB16F\uB170\uB171\uB172"+
+            "\uB173\uEDF4\uEDF2\uB174\uB175\uB176\uB177\uD5E6"+
+            "\uC3DF\uB178\uEDF3\uB179\uB17A\uB17B\uEDF6\uB17C"+
+            "\uD5A3\uD1A3\uB17D\uB17E\uB180\uEDF5\uB181\uC3D0"+
+            "\uB182\uB183\uB184\uB185\uB186\uEDF7\uBFF4\uBEEC"+
+            "\uEDF8\uB187\uCCF7\uB188\uD1DB\uB189\uB18A\uB18B"+
+            "\uD7C5\uD5F6\uB18C\uEDFC\uB18D\uB18E\uB18F\uEDFB"+
+            "\uB190\uB191\uB192\uB193\uB194\uB195\uB196\uB197"+
+            "\uEDF9\uEDFA\uB198\uB199\uB19A\uB19B\uB19C\uB19D"+
+            "\uB19E\uB19F\uEDFD\uBEA6\uB1A0\uB240\uB241\uB242"+
+            "\uB243\uCBAF\uEEA1\uB6BD\uB244\uEEA2\uC4C0\uB245"+
+            "\uEDFE\uB246\uB247\uBDDE\uB2C7\uB248\uB249\uB24A"+
+            "\uB24B\uB24C\uB24D\uB24E\uB24F\uB250\uB251\uB252"+
+            "\uB253\uB6C3\uB254\uB255\uB256\uEEA5\uD8BA\uEEA3"+
+            "\uEEA6\uB257\uB258\uB259\uC3E9\uB3F2\uB25A\uB25B"+
+            "\uB25C\uB25D\uB25E\uB25F\uEEA7\uEEA4\uCFB9\uB260"+
+            "\uB261\uEEA8\uC2F7\uB262\uB263\uB264\uB265\uB266"+
+            "\uB267\uB268\uB269\uB26A\uB26B\uB26C\uB26D\uEEA9"+
+            "\uEEAA\uB26E\uDEAB\uB26F\uB270\uC6B3\uB271\uC7C6"+
+            "\uB272\uD6F5\uB5C9\uB273\uCBB2\uB274\uB275\uB276"+
+            "\uEEAB\uB277\uB278\uCDAB\uB279\uEEAC\uB27A\uB27B"+
+            "\uB27C\uB27D\uB27E\uD5B0\uB280\uEEAD\uB281\uF6C4"+
+            "\uB282\uB283\uB284\uB285\uB286\uB287\uB288\uB289"+
+            "\uB28A\uB28B\uB28C\uB28D\uB28E\uDBC7\uB28F\uB290"+
+            "\uB291\uB292\uB293\uB294\uB295\uB296\uB297\uB4A3"+
+            "\uB298\uB299\uB29A\uC3AC\uF1E6\uB29B\uB29C\uB29D"+
+            "\uB29E\uB29F\uCAB8\uD2D3\uB2A0\uD6AA\uB340\uEFF2"+
+            "\uB341\uBED8\uB342\uBDC3\uEFF3\uB6CC\uB0AB\uB343"+
+            "\uB344\uB345\uB346\uCAAF\uB347\uB348\uEDB6\uB349"+
+            "\uEDB7\uB34A\uB34B\uB34C\uB34D\uCEF9\uB7AF\uBFF3"+
+            "\uEDB8\uC2EB\uC9B0\uB34E\uB34F\uB350\uB351\uB352"+
+            "\uB353\uEDB9\uB354\uB355\uC6F6\uBFB3\uB356\uB357"+
+            "\uB358\uEDBC\uC5F8\uB359\uD1D0\uB35A\uD7A9\uEDBA"+
+            "\uEDBB\uB35B\uD1E2\uB35C\uEDBF\uEDC0\uB35D\uEDC4"+
+            "\uB35E\uB35F\uB360\uEDC8\uB361\uEDC6\uEDCE\uD5E8"+
+            "\uB362\uEDC9\uB363\uB364\uEDC7\uEDBE\uB365\uB366"+
+            "\uC5E9\uB367\uB368\uB369\uC6C6\uB36A\uB36B\uC9E9"+
+            "\uD4D2\uEDC1\uEDC2\uEDC3\uEDC5\uB36C\uC0F9\uB36D"+
+            "\uB4A1\uB36E\uB36F\uB370\uB371\uB9E8\uB372\uEDD0"+
+            "\uB373\uB374\uB375\uB376\uEDD1\uB377\uEDCA\uB378"+
+            "\uEDCF\uB379\uCEF8\uB37A\uB37B\uCBB6\uEDCC\uEDCD"+
+            "\uB37C\uB37D\uB37E\uB380\uB381\uCFF5\uB382\uB383"+
+            "\uB384\uB385\uB386\uB387\uB388\uB389\uB38A\uB38B"+
+            "\uB38C\uB38D\uEDD2\uC1F2\uD3B2\uEDCB\uC8B7\uB38E"+
+            "\uB38F\uB390\uB391\uB392\uB393\uB394\uB395\uBCEF"+
+            "\uB396\uB397\uB398\uB399\uC5F0\uB39A\uB39B\uB39C"+
+            "\uB39D\uB39E\uB39F\uB3A0\uB440\uB441\uB442\uEDD6"+
+            "\uB443\uB5EF\uB444\uB445\uC2B5\uB0AD\uCBE9\uB446"+
+            "\uB447\uB1AE\uB448\uEDD4\uB449\uB44A\uB44B\uCDEB"+
+            "\uB5E2\uB44C\uEDD5\uEDD3\uEDD7\uB44D\uB44E\uB5FA"+
+            "\uB44F\uEDD8\uB450\uEDD9\uB451\uEDDC\uB452\uB1CC"+
+            "\uB453\uB454\uB455\uB456\uB457\uB458\uB459\uB45A"+
+            "\uC5F6\uBCEE\uEDDA\uCCBC\uB2EA\uB45B\uB45C\uB45D"+
+            "\uB45E\uEDDB\uB45F\uB460\uB461\uB462\uC4EB\uB463"+
+            "\uB464\uB4C5\uB465\uB466\uB467\uB0F5\uB468\uB469"+
+            "\uB46A\uEDDF\uC0DA\uB4E8\uB46B\uB46C\uB46D\uB46E"+
+            "\uC5CD\uB46F\uB470\uB471\uEDDD\uBFC4\uB472\uB473"+
+            "\uB474\uEDDE\uB475\uB476\uB477\uB478\uB479\uB47A"+
+            "\uB47B\uB47C\uB47D\uB47E\uB480\uB481\uB482\uB483"+
+            "\uC4A5\uB484\uB485\uB486\uEDE0\uB487\uB488\uB489"+
+            "\uB48A\uB48B\uEDE1\uB48C\uEDE3\uB48D\uB48E\uC1D7"+
+            "\uB48F\uB490\uBBC7\uB491\uB492\uB493\uB494\uB495"+
+            "\uB496\uBDB8\uB497\uB498\uB499\uEDE2\uB49A\uB49B"+
+            "\uB49C\uB49D\uB49E\uB49F\uB4A0\uB540\uB541\uB542"+
+            "\uB543\uB544\uB545\uEDE4\uB546\uB547\uB548\uB549"+
+            "\uB54A\uB54B\uB54C\uB54D\uB54E\uB54F\uEDE6\uB550"+
+            "\uB551\uB552\uB553\uB554\uEDE5\uB555\uB556\uB557"+
+            "\uB558\uB559\uB55A\uB55B\uB55C\uB55D\uB55E\uB55F"+
+            "\uB560\uB561\uB562\uB563\uEDE7\uB564\uB565\uB566"+
+            "\uB567\uB568\uCABE\uECEA\uC0F1\uB569\uC9E7\uB56A"+
+            "\uECEB\uC6EE\uB56B\uB56C\uB56D\uB56E\uECEC\uB56F"+
+            "\uC6ED\uECED\uB570\uB571\uB572\uB573\uB574\uB575"+
+            "\uB576\uB577\uB578\uECF0\uB579\uB57A\uD7E6\uECF3"+
+            "\uB57B\uB57C\uECF1\uECEE\uECEF\uD7A3\uC9F1\uCBEE"+
+            "\uECF4\uB57D\uECF2\uB57E\uB580\uCFE9\uB581\uECF6"+
+            "\uC6B1\uB582\uB583\uB584\uB585\uBCC0\uB586\uECF5"+
+            "\uB587\uB588\uB589\uB58A\uB58B\uB58C\uB58D\uB5BB"+
+            "\uBBF6\uB58E\uECF7\uB58F\uB590\uB591\uB592\uB593"+
+            "\uD9F7\uBDFB\uB594\uB595\uC2BB\uECF8\uB596\uB597"+
+            "\uB598\uB599\uECF9\uB59A\uB59B\uB59C\uB59D\uB8A3"+
+            "\uB59E\uB59F\uB5A0\uB640\uB641\uB642\uB643\uB644"+
+            "\uB645\uB646\uECFA\uB647\uB648\uB649\uB64A\uB64B"+
+            "\uB64C\uB64D\uB64E\uB64F\uB650\uB651\uB652\uECFB"+
+            "\uB653\uB654\uB655\uB656\uB657\uB658\uB659\uB65A"+
+            "\uB65B\uB65C\uB65D\uECFC\uB65E\uB65F\uB660\uB661"+
+            "\uB662\uD3ED\uD8AE\uC0EB\uB663\uC7DD\uBACC\uB664"+
+            "\uD0E3\uCBBD\uB665\uCDBA\uB666\uB667\uB8D1\uB668"+
+            "\uB669\uB1FC\uB66A\uC7EF\uB66B\uD6D6\uB66C\uB66D"+
+            "\uB66E\uBFC6\uC3EB\uB66F\uB670\uEFF5\uB671\uB672"+
+            "\uC3D8\uB673\uB674\uB675\uB676\uB677\uB678\uD7E2"+
+            "\uB679\uB67A\uB67B\uEFF7\uB3D3\uB67C\uC7D8\uD1ED"+
+            "\uB67D\uD6C8\uB67E\uEFF8\uB680\uEFF6\uB681\uBBFD"+
+            "\uB3C6\uB682\uB683\uB684\uB685\uB686\uB687\uB688"+
+            "\uBDD5\uB689\uB68A\uD2C6\uB68B\uBBE0\uB68C\uB68D"+
+            "\uCFA1\uB68E\uEFFC\uEFFB\uB68F\uB690\uEFF9\uB691"+
+            "\uB692\uB693\uB694\uB3CC\uB695\uC9D4\uCBB0\uB696"+
+            "\uB697\uB698\uB699\uB69A\uEFFE\uB69B\uB69C\uB0DE"+
+            "\uB69D\uB69E\uD6C9\uB69F\uB6A0\uB740\uEFFD\uB741"+
+            "\uB3ED\uB742\uB743\uF6D5\uB744\uB745\uB746\uB747"+
+            "\uB748\uB749\uB74A\uB74B\uB74C\uB74D\uB74E\uB74F"+
+            "\uB750\uB751\uB752\uCEC8\uB753\uB754\uB755\uF0A2"+
+            "\uB756\uF0A1\uB757\uB5BE\uBCDA\uBBFC\uB758\uB8E5"+
+            "\uB759\uB75A\uB75B\uB75C\uB75D\uB75E\uC4C2\uB75F"+
+            "\uB760\uB761\uB762\uB763\uB764\uB765\uB766\uB767"+
+            "\uB768\uF0A3\uB769\uB76A\uB76B\uB76C\uB76D\uCBEB"+
+            "\uB76E\uB76F\uB770\uB771\uB772\uB773\uB774\uB775"+
+            "\uB776\uB777\uB778\uB779\uB77A\uB77B\uB77C\uB77D"+
+            "\uB77E\uB780\uB781\uB782\uB783\uB784\uB785\uB786"+
+            "\uF0A6\uB787\uB788\uB789\uD1A8\uB78A\uBEBF\uC7EE"+
+            "\uF1B6\uF1B7\uBFD5\uB78B\uB78C\uB78D\uB78E\uB4A9"+
+            "\uF1B8\uCDBB\uB78F\uC7D4\uD5AD\uB790\uF1B9\uB791"+
+            "\uF1BA\uB792\uB793\uB794\uB795\uC7CF\uB796\uB797"+
+            "\uB798\uD2A4\uD6CF\uB799\uB79A\uF1BB\uBDD1\uB4B0"+
+            "\uBEBD\uB79B\uB79C\uB79D\uB4DC\uCED1\uB79E\uBFDF"+
+            "\uF1BD\uB79F\uB7A0\uB840\uB841\uBFFA\uF1BC\uB842"+
+            "\uF1BF\uB843\uB844\uB845\uF1BE\uF1C0\uB846\uB847"+
+            "\uB848\uB849\uB84A\uF1C1\uB84B\uB84C\uB84D\uB84E"+
+            "\uB84F\uB850\uB851\uB852\uB853\uB854\uB855\uC1FE"+
+            "\uB856\uB857\uB858\uB859\uB85A\uB85B\uB85C\uB85D"+
+            "\uB85E\uB85F\uB860\uC1A2\uB861\uB862\uB863\uB864"+
+            "\uB865\uB866\uB867\uB868\uB869\uB86A\uCAFA\uB86B"+
+            "\uB86C\uD5BE\uB86D\uB86E\uB86F\uB870\uBEBA\uBEB9"+
+            "\uD5C2\uB871\uB872\uBFA2\uB873\uCDAF\uF1B5\uB874"+
+            "\uB875\uB876\uB877\uB878\uB879\uBDDF\uB87A\uB6CB"+
+            "\uB87B\uB87C\uB87D\uB87E\uB880\uB881\uB882\uB883"+
+            "\uB884\uD6F1\uF3C3\uB885\uB886\uF3C4\uB887\uB8CD";
+
+        private final static String innerIndex5=
+            "\uB888\uB889\uB88A\uF3C6\uF3C7\uB88B\uB0CA\uB88C"+
+            "\uF3C5\uB88D\uF3C9\uCBF1\uB88E\uB88F\uB890\uF3CB"+
+            "\uB891\uD0A6\uB892\uB893\uB1CA\uF3C8\uB894\uB895"+
+            "\uB896\uF3CF\uB897\uB5D1\uB898\uB899\uF3D7\uB89A"+
+            "\uF3D2\uB89B\uB89C\uB89D\uF3D4\uF3D3\uB7FB\uB89E"+
+            "\uB1BF\uB89F\uF3CE\uF3CA\uB5DA\uB8A0\uF3D0\uB940"+
+            "\uB941\uF3D1\uB942\uF3D5\uB943\uB944\uB945\uB946"+
+            "\uF3CD\uB947\uBCE3\uB948\uC1FD\uB949\uF3D6\uB94A"+
+            "\uB94B\uB94C\uB94D\uB94E\uB94F\uF3DA\uB950\uF3CC"+
+            "\uB951\uB5C8\uB952\uBDEE\uF3DC\uB953\uB954\uB7A4"+
+            "\uBFF0\uD6FE\uCDB2\uB955\uB4F0\uB956\uB2DF\uB957"+
+            "\uF3D8\uB958\uF3D9\uC9B8\uB959\uF3DD\uB95A\uB95B"+
+            "\uF3DE\uB95C\uF3E1\uB95D\uB95E\uB95F\uB960\uB961"+
+            "\uB962\uB963\uB964\uB965\uB966\uB967\uF3DF\uB968"+
+            "\uB969\uF3E3\uF3E2\uB96A\uB96B\uF3DB\uB96C\uBFEA"+
+            "\uB96D\uB3EF\uB96E\uF3E0\uB96F\uB970\uC7A9\uB971"+
+            "\uBCF2\uB972\uB973\uB974\uB975\uF3EB\uB976\uB977"+
+            "\uB978\uB979\uB97A\uB97B\uB97C\uB9BF\uB97D\uB97E"+
+            "\uF3E4\uB980\uB981\uB982\uB2AD\uBBFE\uB983\uCBE3"+
+            "\uB984\uB985\uB986\uB987\uF3ED\uF3E9\uB988\uB989"+
+            "\uB98A\uB9DC\uF3EE\uB98B\uB98C\uB98D\uF3E5\uF3E6"+
+            "\uF3EA\uC2E1\uF3EC\uF3EF\uF3E8\uBCFD\uB98E\uB98F"+
+            "\uB990\uCFE4\uB991\uB992\uF3F0\uB993\uB994\uB995"+
+            "\uF3E7\uB996\uB997\uB998\uB999\uB99A\uB99B\uB99C"+
+            "\uB99D\uF3F2\uB99E\uB99F\uB9A0\uBA40\uD7AD\uC6AA"+
+            "\uBA41\uBA42\uBA43\uBA44\uF3F3\uBA45\uBA46\uBA47"+
+            "\uBA48\uF3F1\uBA49\uC2A8\uBA4A\uBA4B\uBA4C\uBA4D"+
+            "\uBA4E\uB8DD\uF3F5\uBA4F\uBA50\uF3F4\uBA51\uBA52"+
+            "\uBA53\uB4DB\uBA54\uBA55\uBA56\uF3F6\uF3F7\uBA57"+
+            "\uBA58\uBA59\uF3F8\uBA5A\uBA5B\uBA5C\uC0BA\uBA5D"+
+            "\uBA5E\uC0E9\uBA5F\uBA60\uBA61\uBA62\uBA63\uC5F1"+
+            "\uBA64\uBA65\uBA66\uBA67\uF3FB\uBA68\uF3FA\uBA69"+
+            "\uBA6A\uBA6B\uBA6C\uBA6D\uBA6E\uBA6F\uBA70\uB4D8"+
+            "\uBA71\uBA72\uBA73\uF3FE\uF3F9\uBA74\uBA75\uF3FC"+
+            "\uBA76\uBA77\uBA78\uBA79\uBA7A\uBA7B\uF3FD\uBA7C"+
+            "\uBA7D\uBA7E\uBA80\uBA81\uBA82\uBA83\uBA84\uF4A1"+
+            "\uBA85\uBA86\uBA87\uBA88\uBA89\uBA8A\uF4A3\uBBC9"+
+            "\uBA8B\uBA8C\uF4A2\uBA8D\uBA8E\uBA8F\uBA90\uBA91"+
+            "\uBA92\uBA93\uBA94\uBA95\uBA96\uBA97\uBA98\uBA99"+
+            "\uF4A4\uBA9A\uBA9B\uBA9C\uBA9D\uBA9E\uBA9F\uB2BE"+
+            "\uF4A6\uF4A5\uBAA0\uBB40\uBB41\uBB42\uBB43\uBB44"+
+            "\uBB45\uBB46\uBB47\uBB48\uBB49\uBCAE\uBB4A\uBB4B"+
+            "\uBB4C\uBB4D\uBB4E\uBB4F\uBB50\uBB51\uBB52\uBB53"+
+            "\uBB54\uBB55\uBB56\uBB57\uBB58\uBB59\uBB5A\uBB5B"+
+            "\uBB5C\uBB5D\uBB5E\uBB5F\uBB60\uBB61\uBB62\uBB63"+
+            "\uBB64\uBB65\uBB66\uBB67\uBB68\uBB69\uBB6A\uBB6B"+
+            "\uBB6C\uBB6D\uBB6E\uC3D7\uD9E1\uBB6F\uBB70\uBB71"+
+            "\uBB72\uBB73\uBB74\uC0E0\uF4CC\uD7D1\uBB75\uBB76"+
+            "\uBB77\uBB78\uBB79\uBB7A\uBB7B\uBB7C\uBB7D\uBB7E"+
+            "\uBB80\uB7DB\uBB81\uBB82\uBB83\uBB84\uBB85\uBB86"+
+            "\uBB87\uF4CE\uC1A3\uBB88\uBB89\uC6C9\uBB8A\uB4D6"+
+            "\uD5B3\uBB8B\uBB8C\uBB8D\uF4D0\uF4CF\uF4D1\uCBDA"+
+            "\uBB8E\uBB8F\uF4D2\uBB90\uD4C1\uD6E0\uBB91\uBB92"+
+            "\uBB93\uBB94\uB7E0\uBB95\uBB96\uBB97\uC1B8\uBB98"+
+            "\uBB99\uC1BB\uF4D3\uBEAC\uBB9A\uBB9B\uBB9C\uBB9D"+
+            "\uBB9E\uB4E2\uBB9F\uBBA0\uF4D4\uF4D5\uBEAB\uBC40"+
+            "\uBC41\uF4D6\uBC42\uBC43\uBC44\uF4DB\uBC45\uF4D7"+
+            "\uF4DA\uBC46\uBAFD\uBC47\uF4D8\uF4D9\uBC48\uBC49"+
+            "\uBC4A\uBC4B\uBC4C\uBC4D\uBC4E\uB8E2\uCCC7\uF4DC"+
+            "\uBC4F\uB2DA\uBC50\uBC51\uC3D3\uBC52\uBC53\uD4E3"+
+            "\uBFB7\uBC54\uBC55\uBC56\uBC57\uBC58\uBC59\uBC5A"+
+            "\uF4DD\uBC5B\uBC5C\uBC5D\uBC5E\uBC5F\uBC60\uC5B4"+
+            "\uBC61\uBC62\uBC63\uBC64\uBC65\uBC66\uBC67\uBC68"+
+            "\uF4E9\uBC69\uBC6A\uCFB5\uBC6B\uBC6C\uBC6D\uBC6E"+
+            "\uBC6F\uBC70\uBC71\uBC72\uBC73\uBC74\uBC75\uBC76"+
+            "\uBC77\uBC78\uCEC9\uBC79\uBC7A\uBC7B\uBC7C\uBC7D"+
+            "\uBC7E\uBC80\uBC81\uBC82\uBC83\uBC84\uBC85\uBC86"+
+            "\uBC87\uBC88\uBC89\uBC8A\uBC8B\uBC8C\uBC8D\uBC8E"+
+            "\uCBD8\uBC8F\uCBF7\uBC90\uBC91\uBC92\uBC93\uBDF4"+
+            "\uBC94\uBC95\uBC96\uD7CF\uBC97\uBC98\uBC99\uC0DB"+
+            "\uBC9A\uBC9B\uBC9C\uBC9D\uBC9E\uBC9F\uBCA0\uBD40"+
+            "\uBD41\uBD42\uBD43\uBD44\uBD45\uBD46\uBD47\uBD48"+
+            "\uBD49\uBD4A\uBD4B\uBD4C\uBD4D\uBD4E\uBD4F\uBD50"+
+            "\uBD51\uBD52\uBD53\uBD54\uBD55\uBD56\uBD57\uBD58"+
+            "\uBD59\uBD5A\uBD5B\uBD5C\uBD5D\uBD5E\uBD5F\uBD60"+
+            "\uBD61\uBD62\uBD63\uBD64\uBD65\uBD66\uBD67\uBD68"+
+            "\uBD69\uBD6A\uBD6B\uBD6C\uBD6D\uBD6E\uBD6F\uBD70"+
+            "\uBD71\uBD72\uBD73\uBD74\uBD75\uBD76\uD0F5\uBD77"+
+            "\uBD78\uBD79\uBD7A\uBD7B\uBD7C\uBD7D\uBD7E\uF4EA"+
+            "\uBD80\uBD81\uBD82\uBD83\uBD84\uBD85\uBD86\uBD87"+
+            "\uBD88\uBD89\uBD8A\uBD8B\uBD8C\uBD8D\uBD8E\uBD8F"+
+            "\uBD90\uBD91\uBD92\uBD93\uBD94\uBD95\uBD96\uBD97"+
+            "\uBD98\uBD99\uBD9A\uBD9B\uBD9C\uBD9D\uBD9E\uBD9F"+
+            "\uBDA0\uBE40\uBE41\uBE42\uBE43\uBE44\uBE45\uBE46"+
+            "\uBE47\uBE48\uBE49\uBE4A\uBE4B\uBE4C\uF4EB\uBE4D"+
+            "\uBE4E\uBE4F\uBE50\uBE51\uBE52\uBE53\uF4EC\uBE54"+
+            "\uBE55\uBE56\uBE57\uBE58\uBE59\uBE5A\uBE5B\uBE5C"+
+            "\uBE5D\uBE5E\uBE5F\uBE60\uBE61\uBE62\uBE63\uBE64"+
+            "\uBE65\uBE66\uBE67\uBE68\uBE69\uBE6A\uBE6B\uBE6C"+
+            "\uBE6D\uBE6E\uBE6F\uBE70\uBE71\uBE72\uBE73\uBE74"+
+            "\uBE75\uBE76\uBE77\uBE78\uBE79\uBE7A\uBE7B\uBE7C"+
+            "\uBE7D\uBE7E\uBE80\uBE81\uBE82\uBE83\uBE84\uBE85"+
+            "\uBE86\uBE87\uBE88\uBE89\uBE8A\uBE8B\uBE8C\uBE8D"+
+            "\uBE8E\uBE8F\uBE90\uBE91\uBE92\uBE93\uBE94\uBE95"+
+            "\uBE96\uBE97\uBE98\uBE99\uBE9A\uBE9B\uBE9C\uBE9D"+
+            "\uBE9E\uBE9F\uBEA0\uBF40\uBF41\uBF42\uBF43\uBF44"+
+            "\uBF45\uBF46\uBF47\uBF48\uBF49\uBF4A\uBF4B\uBF4C"+
+            "\uBF4D\uBF4E\uBF4F\uBF50\uBF51\uBF52\uBF53\uBF54"+
+            "\uBF55\uBF56\uBF57\uBF58\uBF59\uBF5A\uBF5B\uBF5C"+
+            "\uBF5D\uBF5E\uBF5F\uBF60\uBF61\uBF62\uBF63\uBF64"+
+            "\uBF65\uBF66\uBF67\uBF68\uBF69\uBF6A\uBF6B\uBF6C"+
+            "\uBF6D\uBF6E\uBF6F\uBF70\uBF71\uBF72\uBF73\uBF74"+
+            "\uBF75\uBF76\uBF77\uBF78\uBF79\uBF7A\uBF7B\uBF7C"+
+            "\uBF7D\uBF7E\uBF80\uF7E3\uBF81\uBF82\uBF83\uBF84"+
+            "\uBF85\uB7B1\uBF86\uBF87\uBF88\uBF89\uBF8A\uF4ED"+
+            "\uBF8B\uBF8C\uBF8D\uBF8E\uBF8F\uBF90\uBF91\uBF92"+
+            "\uBF93\uBF94\uBF95\uBF96\uBF97\uBF98\uBF99\uBF9A"+
+            "\uBF9B\uBF9C\uBF9D\uBF9E\uBF9F\uBFA0\uC040\uC041"+
+            "\uC042\uC043\uC044\uC045\uC046\uC047\uC048\uC049"+
+            "\uC04A\uC04B\uC04C\uC04D\uC04E\uC04F\uC050\uC051"+
+            "\uC052\uC053\uC054\uC055\uC056\uC057\uC058\uC059"+
+            "\uC05A\uC05B\uC05C\uC05D\uC05E\uC05F\uC060\uC061"+
+            "\uC062\uC063\uD7EB\uC064\uC065\uC066\uC067\uC068"+
+            "\uC069\uC06A\uC06B\uC06C\uC06D\uC06E\uC06F\uC070"+
+            "\uC071\uC072\uC073\uC074\uC075\uC076\uC077\uC078"+
+            "\uC079\uC07A\uC07B\uF4EE\uC07C\uC07D\uC07E\uE6F9"+
+            "\uBEC0\uE6FA\uBAEC\uE6FB\uCFCB\uE6FC\uD4BC\uBCB6"+
+            "\uE6FD\uE6FE\uBCCD\uC8D2\uCEB3\uE7A1\uC080\uB4BF"+
+            "\uE7A2\uC9B4\uB8D9\uC4C9\uC081\uD7DD\uC2DA\uB7D7"+
+            "\uD6BD\uCEC6\uB7C4\uC082\uC083\uC5A6\uE7A3\uCFDF"+
+            "\uE7A4\uE7A5\uE7A6\uC1B7\uD7E9\uC9F0\uCFB8\uD6AF"+
+            "\uD6D5\uE7A7\uB0ED\uE7A8\uE7A9\uC9DC\uD2EF\uBEAD"+
+            "\uE7AA\uB0F3\uC8DE\uBDE1\uE7AB\uC8C6\uC084\uE7AC"+
+            "\uBBE6\uB8F8\uD1A4\uE7AD\uC2E7\uBEF8\uBDCA\uCDB3"+
+            "\uE7AE\uE7AF\uBEEE\uD0E5\uC085\uCBE7\uCCD0\uBCCC"+
+            "\uE7B0\uBCA8\uD0F7\uE7B1\uC086\uD0F8\uE7B2\uE7B3"+
+            "\uB4C2\uE7B4\uE7B5\uC9FE\uCEAC\uC3E0\uE7B7\uB1C1"+
+            "\uB3F1\uC087\uE7B8\uE7B9\uD7DB\uD5C0\uE7BA\uC2CC"+
+            "\uD7BA\uE7BB\uE7BC\uE7BD\uBCEA\uC3E5\uC0C2\uE7BE"+
+            "\uE7BF\uBCA9\uC088\uE7C0\uE7C1\uE7B6\uB6D0\uE7C2"+
+            "\uC089\uE7C3\uE7C4\uBBBA\uB5DE\uC2C6\uB1E0\uE7C5"+
+            "\uD4B5\uE7C6\uB8BF\uE7C8\uE7C7\uB7EC\uC08A\uE7C9"+
+            "\uB2F8\uE7CA\uE7CB\uE7CC\uE7CD\uE7CE\uE7CF\uE7D0"+
+            "\uD3A7\uCBF5\uE7D1\uE7D2\uE7D3\uE7D4\uC9C9\uE7D5"+
+            "\uE7D6\uE7D7\uE7D8\uE7D9\uBDC9\uE7DA\uF3BE\uC08B"+
+            "\uB8D7\uC08C\uC8B1\uC08D\uC08E\uC08F\uC090\uC091"+
+            "\uC092\uC093\uF3BF\uC094\uF3C0\uF3C1\uC095\uC096"+
+            "\uC097\uC098\uC099\uC09A\uC09B\uC09C\uC09D\uC09E"+
+            "\uB9DE\uCDF8\uC09F\uC0A0\uD8E8\uBAB1\uC140\uC2DE"+
+            "\uEEB7\uC141\uB7A3\uC142\uC143\uC144\uC145\uEEB9"+
+            "\uC146\uEEB8\uB0D5\uC147\uC148\uC149\uC14A\uC14B"+
+            "\uEEBB\uD5D6\uD7EF\uC14C\uC14D\uC14E\uD6C3\uC14F"+
+            "\uC150\uEEBD\uCAF0\uC151\uEEBC\uC152\uC153\uC154"+
+            "\uC155\uEEBE\uC156\uC157\uC158\uC159\uEEC0\uC15A"+
+            "\uC15B\uEEBF\uC15C\uC15D\uC15E\uC15F\uC160\uC161"+
+            "\uC162\uC163\uD1F2\uC164\uC7BC\uC165\uC3C0\uC166"+
+            "\uC167\uC168\uC169\uC16A\uB8E1\uC16B\uC16C\uC16D"+
+            "\uC16E\uC16F\uC1E7\uC170\uC171\uF4C6\uD0DF\uF4C7"+
+            "\uC172\uCFDB\uC173\uC174\uC8BA\uC175\uC176\uF4C8"+
+            "\uC177\uC178\uC179\uC17A\uC17B\uC17C\uC17D\uF4C9"+
+            "\uF4CA\uC17E\uF4CB\uC180\uC181\uC182\uC183\uC184"+
+            "\uD9FA\uB8FE\uC185\uC186\uE5F1\uD3F0\uC187\uF4E0"+
+            "\uC188\uCECC\uC189\uC18A\uC18B\uB3E1\uC18C\uC18D"+
+            "\uC18E\uC18F\uF1B4\uC190\uD2EE\uC191\uF4E1\uC192"+
+            "\uC193\uC194\uC195\uC196\uCFE8\uF4E2\uC197\uC198"+
+            "\uC7CC\uC199\uC19A\uC19B\uC19C\uC19D\uC19E\uB5D4"+
+            "\uB4E4\uF4E4\uC19F\uC1A0\uC240\uF4E3\uF4E5\uC241"+
+            "\uC242\uF4E6\uC243\uC244\uC245\uC246\uF4E7\uC247"+
+            "\uBAB2\uB0BF\uC248\uF4E8\uC249\uC24A\uC24B\uC24C"+
+            "\uC24D\uC24E\uC24F\uB7AD\uD2ED\uC250\uC251\uC252"+
+            "\uD2AB\uC0CF\uC253\uBFBC\uEBA3\uD5DF\uEAC8\uC254"+
+            "\uC255\uC256\uC257\uF1F3\uB6F8\uCBA3\uC258\uC259"+
+            "\uC4CD\uC25A\uF1E7\uC25B\uF1E8\uB8FB\uF1E9\uBAC4"+
+            "\uD4C5\uB0D2\uC25C\uC25D\uF1EA\uC25E\uC25F\uC260"+
+            "\uF1EB\uC261\uF1EC\uC262\uC263\uF1ED\uF1EE\uF1EF"+
+            "\uF1F1\uF1F0\uC5D5\uC264\uC265\uC266\uC267\uC268"+
+            "\uC269\uF1F2\uC26A\uB6FA\uC26B\uF1F4\uD2AE\uDEC7"+
+            "\uCBCA\uC26C\uC26D\uB3DC\uC26E\uB5A2\uC26F\uB9A2"+
+            "\uC270\uC271\uC4F4\uF1F5\uC272\uC273\uF1F6\uC274"+
+            "\uC275\uC276\uC1C4\uC1FB\uD6B0\uF1F7\uC277\uC278"+
+            "\uC279\uC27A\uF1F8\uC27B\uC1AA\uC27C\uC27D\uC27E"+
+            "\uC6B8\uC280\uBEDB\uC281\uC282\uC283\uC284\uC285"+
+            "\uC286\uC287\uC288\uC289\uC28A\uC28B\uC28C\uC28D"+
+            "\uC28E\uF1F9\uB4CF\uC28F\uC290\uC291\uC292\uC293"+
+            "\uC294\uF1FA\uC295\uC296\uC297\uC298\uC299\uC29A"+
+            "\uC29B\uC29C\uC29D\uC29E\uC29F\uC2A0\uC340\uEDB2"+
+            "\uEDB1\uC341\uC342\uCBE0\uD2DE\uC343\uCBC1\uD5D8"+
+            "\uC344\uC8E2\uC345\uC0DF\uBCA1\uC346\uC347\uC348"+
+            "\uC349\uC34A\uC34B\uEBC1\uC34C\uC34D\uD0A4\uC34E"+
+            "\uD6E2\uC34F\uB6C7\uB8D8\uEBC0\uB8CE\uC350\uEBBF"+
+            "\uB3A6\uB9C9\uD6AB\uC351\uB7F4\uB7CA\uC352\uC353"+
+            "\uC354\uBCE7\uB7BE\uEBC6\uC355\uEBC7\uB0B9\uBFCF"+
+            "\uC356\uEBC5\uD3FD\uC357\uEBC8\uC358\uC359\uEBC9"+
+            "\uC35A\uC35B\uB7CE\uC35C\uEBC2\uEBC4\uC9F6\uD6D7"+
+            "\uD5CD\uD0B2\uEBCF\uCEB8\uEBD0\uC35D\uB5A8\uC35E"+
+            "\uC35F\uC360\uC361\uC362\uB1B3\uEBD2\uCCA5\uC363"+
+            "\uC364\uC365\uC366\uC367\uC368\uC369\uC5D6\uEBD3"+
+            "\uC36A\uEBD1\uC5DF\uEBCE\uCAA4\uEBD5\uB0FB\uC36B"+
+            "\uC36C\uBAFA\uC36D\uC36E\uD8B7\uF1E3\uC36F\uEBCA"+
+            "\uEBCB\uEBCC\uEBCD\uEBD6\uE6C0\uEBD9\uC370\uBFE8"+
+            "\uD2C8\uEBD7\uEBDC\uB8EC\uEBD8\uC371\uBDBA\uC372"+
+            "\uD0D8\uC373\uB0B7\uC374\uEBDD\uC4DC\uC375\uC376"+
+            "\uC377\uC378\uD6AC\uC379\uC37A\uC37B\uB4E0\uC37C"+
+            "\uC37D\uC2F6\uBCB9\uC37E\uC380\uEBDA\uEBDB\uD4E0"+
+            "\uC6EA\uC4D4\uEBDF\uC5A7\uD9F5\uC381\uB2B1\uC382"+
+            "\uEBE4\uC383\uBDC5\uC384\uC385\uC386\uEBE2\uC387"+
+            "\uC388\uC389\uC38A\uC38B\uC38C\uC38D\uC38E\uC38F"+
+            "\uC390\uC391\uC392\uC393\uEBE3\uC394\uC395\uB8AC"+
+            "\uC396\uCDD1\uEBE5\uC397\uC398\uC399\uEBE1\uC39A"+
+            "\uC1B3\uC39B\uC39C\uC39D\uC39E\uC39F\uC6A2\uC3A0"+
+            "\uC440\uC441\uC442\uC443\uC444\uC445\uCCF3\uC446"+
+            "\uEBE6\uC447\uC0B0\uD2B8\uEBE7\uC448\uC449\uC44A"+
+            "\uB8AF\uB8AD\uC44B\uEBE8\uC7BB\uCDF3\uC44C\uC44D"+
+            "\uC44E\uEBEA\uEBEB\uC44F\uC450\uC451\uC452\uC453"+
+            "\uEBED\uC454\uC455\uC456\uC457\uD0C8\uC458\uEBF2"+
+            "\uC459\uEBEE\uC45A\uC45B\uC45C\uEBF1\uC8F9\uC45D"+
+            "\uD1FC\uEBEC\uC45E\uC45F\uEBE9\uC460\uC461\uC462"+
+            "\uC463\uB8B9\uCFD9\uC4E5\uEBEF\uEBF0\uCCDA\uCDC8"+
+            "\uB0F2\uC464\uEBF6\uC465\uC466\uC467\uC468\uC469"+
+            "\uEBF5\uC46A\uB2B2\uC46B\uC46C\uC46D\uC46E\uB8E0"+
+            "\uC46F\uEBF7\uC470\uC471\uC472\uC473\uC474\uC475"+
+            "\uB1EC\uC476\uC477\uCCC5\uC4A4\uCFA5\uC478\uC479"+
+            "\uC47A\uC47B\uC47C\uEBF9\uC47D\uC47E\uECA2\uC480"+
+            "\uC5F2\uC481\uEBFA\uC482\uC483\uC484\uC485\uC486"+
+            "\uC487\uC488\uC489\uC9C5\uC48A\uC48B\uC48C\uC48D"+
+            "\uC48E\uC48F\uE2DF\uEBFE\uC490\uC491\uC492\uC493"+
+            "\uCDCE\uECA1\uB1DB\uD3B7\uC494\uC495\uD2DC\uC496"+
+            "\uC497\uC498\uEBFD\uC499\uEBFB\uC49A\uC49B\uC49C"+
+            "\uC49D\uC49E\uC49F\uC4A0\uC540\uC541\uC542\uC543"+
+            "\uC544\uC545\uC546\uC547\uC548\uC549\uC54A\uC54B"+
+            "\uC54C\uC54D\uC54E\uB3BC\uC54F\uC550\uC551\uEAB0"+
+            "\uC552\uC553\uD7D4\uC554\uF4AB\uB3F4\uC555\uC556"+
+            "\uC557\uC558\uC559\uD6C1\uD6C2\uC55A\uC55B\uC55C"+
+            "\uC55D\uC55E\uC55F\uD5E9\uBECA\uC560\uF4A7\uC561"+
+            "\uD2A8\uF4A8\uF4A9\uC562\uF4AA\uBECB\uD3DF\uC563"+
+            "\uC564\uC565\uC566\uC567\uC9E0\uC9E1\uC568\uC569"+
+            "\uF3C2\uC56A\uCAE6\uC56B\uCCF2\uC56C\uC56D\uC56E"+
+            "\uC56F\uC570\uC571\uE2B6\uCBB4\uC572\uCEE8\uD6DB"+
+            "\uC573\uF4AD\uF4AE\uF4AF\uC574\uC575\uC576\uC577"+
+            "\uF4B2\uC578\uBABD\uF4B3\uB0E3\uF4B0\uC579\uF4B1"+
+            "\uBDA2\uB2D5\uC57A\uF4B6\uF4B7\uB6E6\uB2B0\uCFCF"+
+            "\uF4B4\uB4AC\uC57B\uF4B5\uC57C\uC57D\uF4B8\uC57E"+
+            "\uC580\uC581\uC582\uC583\uF4B9\uC584\uC585\uCDA7"+
+            "\uC586\uF4BA\uC587\uF4BB\uC588\uC589\uC58A\uF4BC"+
+            "\uC58B\uC58C\uC58D\uC58E\uC58F\uC590\uC591\uC592"+
+            "\uCBD2\uC593\uF4BD\uC594\uC595\uC596\uC597\uF4BE"+
+            "\uC598\uC599\uC59A\uC59B\uC59C\uC59D\uC59E\uC59F"+
+            "\uF4BF\uC5A0\uC640\uC641\uC642\uC643\uF4DE\uC1BC"+
+            "\uBCE8\uC644\uC9AB\uD1DE\uE5F5\uC645\uC646\uC647"+
+            "\uC648\uDCB3\uD2D5\uC649\uC64A\uDCB4\uB0AC\uDCB5"+
+            "\uC64B\uC64C\uBDDA\uC64D\uDCB9\uC64E\uC64F\uC650"+
+            "\uD8C2\uC651\uDCB7\uD3F3\uC652\uC9D6\uDCBA\uDCB6"+
+            "\uC653\uDCBB\uC3A2\uC654\uC655\uC656\uC657\uDCBC"+
+            "\uDCC5\uDCBD\uC658\uC659\uCEDF\uD6A5\uC65A\uDCCF"+
+            "\uC65B\uDCCD\uC65C\uC65D\uDCD2\uBDE6\uC2AB\uC65E"+
+            "\uDCB8\uDCCB\uDCCE\uDCBE\uB7D2\uB0C5\uDCC7\uD0BE"+
+            "\uDCC1\uBBA8\uC65F\uB7BC\uDCCC\uC660\uC661\uDCC6"+
+            "\uDCBF\uC7DB\uC662\uC663\uC664\uD1BF\uDCC0\uC665"+
+            "\uC666\uDCCA\uC667\uC668\uDCD0\uC669\uC66A\uCEAD"+
+            "\uDCC2\uC66B\uDCC3\uDCC8\uDCC9\uB2D4\uDCD1\uCBD5"+
+            "\uC66C\uD4B7\uDCDB\uDCDF\uCCA6\uDCE6\uC66D\uC3E7"+
+            "\uDCDC\uC66E\uC66F\uBFC1\uDCD9\uC670\uB0FA\uB9B6"+
+            "\uDCE5\uDCD3\uC671\uDCC4\uDCD6\uC8F4\uBFE0\uC672"+
+            "\uC673\uC674\uC675\uC9BB\uC676\uC677\uC678\uB1BD"+
+            "\uC679\uD3A2\uC67A\uC67B\uDCDA\uC67C\uC67D\uDCD5"+
+            "\uC67E\uC6BB\uC680\uDCDE\uC681\uC682\uC683\uC684"+
+            "\uC685\uD7C2\uC3AF\uB7B6\uC7D1\uC3A9\uDCE2\uDCD8"+
+            "\uDCEB\uDCD4\uC686\uC687\uDCDD\uC688\uBEA5\uDCD7"+
+            "\uC689\uDCE0\uC68A\uC68B\uDCE3\uDCE4\uC68C\uDCF8"+
+            "\uC68D\uC68E\uDCE1\uDDA2\uDCE7\uC68F\uC690\uC691"+
+            "\uC692\uC693\uC694\uC695\uC696\uC697\uC698\uBCEB"+
+            "\uB4C4\uC699\uC69A\uC3A3\uB2E7\uDCFA\uC69B\uDCF2"+
+            "\uC69C\uDCEF\uC69D\uDCFC\uDCEE\uD2F0\uB2E8\uC69E"+
+            "\uC8D7\uC8E3\uDCFB\uC69F\uDCED\uC6A0\uC740\uC741"+
+            "\uDCF7\uC742\uC743\uDCF5\uC744\uC745\uBEA3\uDCF4"+
+            "\uC746\uB2DD\uC747\uC748\uC749\uC74A\uC74B\uDCF3"+
+            "\uBCF6\uDCE8\uBBC4\uC74C\uC0F3\uC74D\uC74E\uC74F"+
+            "\uC750\uC751\uBCD4\uDCE9\uDCEA\uC752\uDCF1\uDCF6"+
+            "\uDCF9\uB5B4\uC753\uC8D9\uBBE7\uDCFE\uDCFD\uD3AB"+
+            "\uDDA1\uDDA3\uDDA5\uD2F1\uDDA4\uDDA6\uDDA7\uD2A9"+
+            "\uC754\uC755\uC756\uC757\uC758\uC759\uC75A\uBAC9"+
+            "\uDDA9\uC75B\uC75C\uDDB6\uDDB1\uDDB4\uC75D\uC75E"+
+            "\uC75F\uC760\uC761\uC762\uC763\uDDB0\uC6CE\uC764"+
+            "\uC765\uC0F2\uC766\uC767\uC768\uC769\uC9AF\uC76A"+
+            "\uC76B\uC76C\uDCEC\uDDAE\uC76D\uC76E\uC76F\uC770"+
+            "\uDDB7\uC771\uC772\uDCF0\uDDAF\uC773\uDDB8\uC774"+
+            "\uDDAC\uC775\uC776\uC777\uC778\uC779\uC77A\uC77B"+
+            "\uDDB9\uDDB3\uDDAD\uC4AA\uC77C\uC77D\uC77E\uC780"+
+            "\uDDA8\uC0B3\uC1AB\uDDAA\uDDAB\uC781\uDDB2\uBBF1"+
+            "\uDDB5\uD3A8\uDDBA\uC782\uDDBB\uC3A7\uC783\uC784"+
+            "\uDDD2\uDDBC\uC785\uC786\uC787\uDDD1\uC788\uB9BD"+
+            "\uC789\uC78A\uBED5\uC78B\uBEFA\uC78C\uC78D\uBACA"+
+            "\uC78E\uC78F\uC790\uC791\uDDCA\uC792\uDDC5\uC793"+
+            "\uDDBF\uC794\uC795\uC796\uB2CB\uDDC3\uC797\uDDCB"+
+            "\uB2A4\uDDD5\uC798\uC799\uC79A\uDDBE\uC79B\uC79C"+
+            "\uC79D\uC6D0\uDDD0\uC79E\uC79F\uC7A0\uC840\uC841"+
+            "\uDDD4\uC1E2\uB7C6\uC842\uC843\uC844\uC845\uC846"+
+            "\uDDCE\uDDCF\uC847\uC848\uC849\uDDC4\uC84A\uC84B"+
+            "\uC84C\uDDBD\uC84D\uDDCD\uCCD1\uC84E\uDDC9\uC84F"+
+            "\uC850\uC851\uC852\uDDC2\uC3C8\uC6BC\uCEAE\uDDCC"+
+            "\uC853\uDDC8\uC854\uC855\uC856\uC857\uC858\uC859"+
+            "\uDDC1\uC85A\uC85B\uC85C\uDDC6\uC2DC\uC85D\uC85E"+
+            "\uC85F\uC860\uC861\uC862\uD3A9\uD3AA\uDDD3\uCFF4"+
+            "\uC8F8\uC863\uC864\uC865\uC866\uC867\uC868\uC869"+
+            "\uC86A\uDDE6\uC86B\uC86C\uC86D\uC86E\uC86F\uC870"+
+            "\uDDC7\uC871\uC872\uC873\uDDE0\uC2E4\uC874\uC875"+
+            "\uC876\uC877\uC878\uC879\uC87A\uC87B\uDDE1\uC87C"+
+            "\uC87D\uC87E\uC880\uC881\uC882\uC883\uC884\uC885"+
+            "\uC886\uDDD7\uC887\uC888\uC889\uC88A\uC88B\uD6F8"+
+            "\uC88C\uDDD9\uDDD8\uB8F0\uDDD6\uC88D\uC88E\uC88F"+
+            "\uC890\uC6CF\uC891\uB6AD\uC892\uC893\uC894\uC895"+
+            "\uC896\uDDE2\uC897\uBAF9\uD4E1\uDDE7\uC898\uC899"+
+            "\uC89A\uB4D0\uC89B\uDDDA\uC89C\uBFFB\uDDE3\uC89D"+
+            "\uDDDF\uC89E\uDDDD\uC89F\uC8A0\uC940\uC941\uC942"+
+            "\uC943\uC944\uB5D9\uC945\uC946\uC947\uC948\uDDDB"+
+            "\uDDDC\uDDDE\uC949\uBDAF\uDDE4\uC94A\uDDE5\uC94B"+
+            "\uC94C\uC94D\uC94E\uC94F\uC950\uC951\uC952\uDDF5"+
+            "\uC953\uC3C9\uC954\uC955\uCBE2\uC956\uC957\uC958"+
+            "\uC959\uDDF2\uC95A\uC95B\uC95C\uC95D\uC95E\uC95F"+
+            "\uC960\uC961\uC962\uC963\uC964\uC965\uC966\uD8E1"+
+            "\uC967\uC968\uC6D1\uC969\uDDF4\uC96A\uC96B\uC96C"+
+            "\uD5F4\uDDF3\uDDF0\uC96D\uC96E\uDDEC\uC96F\uDDEF"+
+            "\uC970\uDDE8\uC971\uC972\uD0EE\uC973\uC974\uC975"+
+            "\uC976\uC8D8\uDDEE\uC977\uC978\uDDE9\uC979\uC97A"+
+            "\uDDEA\uCBF2\uC97B\uDDED\uC97C\uC97D\uB1CD\uC97E"+
+            "\uC980\uC981\uC982\uC983\uC984\uC0B6\uC985\uBCBB"+
+            "\uDDF1\uC986\uC987\uDDF7\uC988\uDDF6\uDDEB\uC989"+
+            "\uC98A\uC98B\uC98C\uC98D\uC5EE\uC98E\uC98F\uC990"+
+            "\uDDFB\uC991\uC992\uC993\uC994\uC995\uC996\uC997"+
+            "\uC998\uC999\uC99A\uC99B\uDEA4\uC99C\uC99D\uDEA3"+
+            "\uC99E\uC99F\uC9A0\uCA40\uCA41\uCA42\uCA43\uCA44"+
+            "\uCA45\uCA46\uCA47\uCA48\uDDF8\uCA49\uCA4A\uCA4B"+
+            "\uCA4C\uC3EF\uCA4D\uC2FB\uCA4E\uCA4F\uCA50\uD5E1"+
+            "\uCA51\uCA52\uCEB5\uCA53\uCA54\uCA55\uCA56\uDDFD"+
+            "\uCA57\uB2CC\uCA58\uCA59\uCA5A\uCA5B\uCA5C\uCA5D"+
+            "\uCA5E\uCA5F\uCA60\uC4E8\uCADF\uCA61\uCA62\uCA63"+
+            "\uCA64\uCA65\uCA66\uCA67\uCA68\uCA69\uCA6A\uC7BE"+
+            "\uDDFA\uDDFC\uDDFE\uDEA2\uB0AA\uB1CE\uCA6B\uCA6C"+
+            "\uCA6D\uCA6E\uCA6F\uDEAC\uCA70\uCA71\uCA72\uCA73"+
+            "\uDEA6\uBDB6\uC8EF\uCA74\uCA75\uCA76\uCA77\uCA78"+
+            "\uCA79\uCA7A\uCA7B\uCA7C\uCA7D\uCA7E\uDEA1\uCA80"+
+            "\uCA81\uDEA5\uCA82\uCA83\uCA84\uCA85\uDEA9\uCA86"+
+            "\uCA87\uCA88\uCA89\uCA8A\uDEA8\uCA8B\uCA8C\uCA8D"+
+            "\uDEA7\uCA8E\uCA8F\uCA90\uCA91\uCA92\uCA93\uCA94"+
+            "\uCA95\uCA96\uDEAD\uCA97\uD4CC\uCA98\uCA99\uCA9A"+
+            "\uCA9B\uDEB3\uDEAA\uDEAE\uCA9C\uCA9D\uC0D9\uCA9E"+
+            "\uCA9F\uCAA0\uCB40\uCB41\uB1A1\uDEB6\uCB42\uDEB1"+
+            "\uCB43\uCB44\uCB45\uCB46\uCB47\uCB48\uCB49\uDEB2"+
+            "\uCB4A\uCB4B\uCB4C\uCB4D\uCB4E\uCB4F\uCB50\uCB51"+
+            "\uCB52\uCB53\uCB54\uD1A6\uDEB5\uCB55\uCB56\uCB57"+
+            "\uCB58\uCB59\uCB5A\uCB5B\uDEAF\uCB5C\uCB5D\uCB5E"+
+            "\uDEB0\uCB5F\uD0BD\uCB60\uCB61\uCB62\uDEB4\uCAED"+
+            "\uDEB9\uCB63\uCB64\uCB65\uCB66\uCB67\uCB68\uDEB8"+
+            "\uCB69\uDEB7\uCB6A\uCB6B\uCB6C\uCB6D\uCB6E\uCB6F"+
+            "\uCB70\uDEBB\uCB71\uCB72\uCB73\uCB74\uCB75\uCB76"+
+            "\uCB77\uBDE5\uCB78\uCB79\uCB7A\uCB7B\uCB7C\uB2D8"+
+            "\uC3EA\uCB7D\uCB7E\uDEBA\uCB80\uC5BA\uCB81\uCB82"+
+            "\uCB83\uCB84\uCB85\uCB86\uDEBC\uCB87\uCB88\uCB89"+
+            "\uCB8A\uCB8B\uCB8C\uCB8D\uCCD9\uCB8E\uCB8F\uCB90"+
+            "\uCB91\uB7AA\uCB92\uCB93\uCB94\uCB95\uCB96\uCB97"+
+            "\uCB98\uCB99\uCB9A\uCB9B\uCB9C\uCB9D\uCB9E\uCB9F"+
+            "\uCBA0\uCC40\uCC41\uD4E5\uCC42\uCC43\uCC44\uDEBD"+
+            "\uCC45\uCC46\uCC47\uCC48\uCC49\uDEBF\uCC4A\uCC4B"+
+            "\uCC4C\uCC4D\uCC4E\uCC4F\uCC50\uCC51\uCC52\uCC53"+
+            "\uCC54\uC4A2\uCC55\uCC56\uCC57\uCC58\uDEC1\uCC59"+
+            "\uCC5A\uCC5B\uCC5C\uCC5D\uCC5E\uCC5F\uCC60\uCC61"+
+            "\uCC62\uCC63\uCC64\uCC65\uCC66\uCC67\uCC68\uDEBE"+
+            "\uCC69\uDEC0\uCC6A\uCC6B\uCC6C\uCC6D\uCC6E\uCC6F"+
+            "\uCC70\uCC71\uCC72\uCC73\uCC74\uCC75\uCC76\uCC77"+
+            "\uD5BA\uCC78\uCC79\uCC7A\uDEC2\uCC7B\uCC7C\uCC7D"+
+            "\uCC7E\uCC80\uCC81\uCC82\uCC83\uCC84\uCC85\uCC86"+
+            "\uCC87\uCC88\uCC89\uCC8A\uCC8B\uF2AE\uBBA2\uC2B2"+
+            "\uC5B0\uC2C7\uCC8C\uCC8D\uF2AF\uCC8E\uCC8F\uCC90"+
+            "\uCC91\uCC92\uD0E9\uCC93\uCC94\uCC95\uD3DD\uCC96"+
+            "\uCC97\uCC98\uEBBD\uCC99\uCC9A\uCC9B\uCC9C\uCC9D"+
+            "\uCC9E\uCC9F\uCCA0\uB3E6\uF2B0\uCD40\uF2B1\uCD41"+
+            "\uCD42\uCAAD\uCD43\uCD44\uCD45\uCD46\uCD47\uCD48"+
+            "\uCD49\uBAE7\uF2B3\uF2B5\uF2B4\uCBE4\uCFBA\uF2B2"+
+            "\uCAB4\uD2CF\uC2EC\uCD4A\uCD4B\uCD4C\uCD4D\uCD4E"+
+            "\uCD4F\uCD50\uCEC3\uF2B8\uB0F6\uF2B7\uCD51\uCD52"+
+            "\uCD53\uCD54\uCD55\uF2BE\uCD56\uB2CF\uCD57\uCD58"+
+            "\uCD59\uCD5A\uCD5B\uCD5C\uD1C1\uF2BA\uCD5D\uCD5E"+
+            "\uCD5F\uCD60\uCD61\uF2BC\uD4E9\uCD62\uCD63\uF2BB"+
+            "\uF2B6\uF2BF\uF2BD\uCD64\uF2B9\uCD65\uCD66\uF2C7"+
+            "\uF2C4\uF2C6\uCD67\uCD68\uF2CA\uF2C2\uF2C0\uCD69"+
+            "\uCD6A\uCD6B\uF2C5\uCD6C\uCD6D\uCD6E\uCD6F\uCD70"+
+            "\uD6FB\uCD71\uCD72\uCD73\uF2C1\uCD74\uC7F9\uC9DF"+
+            "\uCD75\uF2C8\uB9C6\uB5B0\uCD76\uCD77\uF2C3\uF2C9"+
+            "\uF2D0\uF2D6\uCD78\uCD79\uBBD7\uCD7A\uCD7B\uCD7C"+
+            "\uF2D5\uCDDC\uCD7D\uD6EB\uCD7E\uCD80\uF2D2\uF2D4"+
+            "\uCD81\uCD82\uCD83\uCD84\uB8F2\uCD85\uCD86\uCD87"+
+            "\uCD88\uF2CB\uCD89\uCD8A\uCD8B\uF2CE\uC2F9\uCD8C"+
+            "\uD5DD\uF2CC\uF2CD\uF2CF\uF2D3\uCD8D\uCD8E\uCD8F"+
+            "\uF2D9\uD3BC\uCD90\uCD91\uCD92\uCD93\uB6EA\uCD94"+
+            "\uCAF1\uCD95\uB7E4\uF2D7\uCD96\uCD97\uCD98\uF2D8"+
+            "\uF2DA\uF2DD\uF2DB\uCD99\uCD9A\uF2DC\uCD9B\uCD9C"+
+            "\uCD9D\uCD9E\uD1D1\uF2D1\uCD9F\uCDC9\uCDA0\uCECF"+
+            "\uD6A9\uCE40\uF2E3\uCE41\uC3DB\uCE42\uF2E0\uCE43"+
+            "\uCE44\uC0AF\uF2EC\uF2DE\uCE45\uF2E1\uCE46\uCE47"+
+            "\uCE48\uF2E8\uCE49\uCE4A\uCE4B\uCE4C\uF2E2\uCE4D"+
+            "\uCE4E\uF2E7\uCE4F\uCE50\uF2E6\uCE51\uCE52\uF2E9"+
+            "\uCE53\uCE54\uCE55\uF2DF\uCE56\uCE57\uF2E4\uF2EA"+
+            "\uCE58\uCE59\uCE5A\uCE5B\uCE5C\uCE5D\uCE5E\uD3AC"+
+            "\uF2E5\uB2F5\uCE5F\uCE60\uF2F2\uCE61\uD0AB\uCE62"+
+            "\uCE63\uCE64\uCE65\uF2F5\uCE66\uCE67\uCE68\uBBC8"+
+            "\uCE69\uF2F9\uCE6A\uCE6B\uCE6C\uCE6D\uCE6E\uCE6F"+
+            "\uF2F0\uCE70\uCE71\uF2F6\uF2F8\uF2FA\uCE72\uCE73"+
+            "\uCE74\uCE75\uCE76\uCE77\uCE78\uCE79\uF2F3\uCE7A"+
+            "\uF2F1\uCE7B\uCE7C\uCE7D\uBAFB\uCE7E\uB5FB\uCE80"+
+            "\uCE81\uCE82\uCE83\uF2EF\uF2F7\uF2ED\uF2EE\uCE84"+
+            "\uCE85\uCE86\uF2EB\uF3A6\uCE87\uF3A3\uCE88\uCE89"+
+            "\uF3A2\uCE8A\uCE8B\uF2F4\uCE8C\uC8DA\uCE8D\uCE8E"+
+            "\uCE8F\uCE90\uCE91\uF2FB\uCE92\uCE93\uCE94\uF3A5"+
+            "\uCE95\uCE96\uCE97\uCE98\uCE99\uCE9A\uCE9B\uC3F8"+
+            "\uCE9C\uCE9D\uCE9E\uCE9F\uCEA0\uCF40\uCF41\uCF42"+
+            "\uF2FD\uCF43\uCF44\uF3A7\uF3A9\uF3A4\uCF45\uF2FC"+
+            "\uCF46\uCF47\uCF48\uF3AB\uCF49\uF3AA\uCF4A\uCF4B"+
+            "\uCF4C\uCF4D\uC2DD\uCF4E\uCF4F\uF3AE\uCF50\uCF51"+
+            "\uF3B0\uCF52\uCF53\uCF54\uCF55\uCF56\uF3A1\uCF57"+
+            "\uCF58\uCF59\uF3B1\uF3AC\uCF5A\uCF5B\uCF5C\uCF5D"+
+            "\uCF5E\uF3AF\uF2FE\uF3AD\uCF5F\uCF60\uCF61\uCF62"+
+            "\uCF63\uCF64\uCF65\uF3B2\uCF66\uCF67\uCF68\uCF69"+
+            "\uF3B4\uCF6A\uCF6B\uCF6C\uCF6D\uF3A8\uCF6E\uCF6F"+
+            "\uCF70\uCF71\uF3B3\uCF72\uCF73\uCF74\uF3B5\uCF75"+
+            "\uCF76\uCF77\uCF78\uCF79\uCF7A\uCF7B\uCF7C\uCF7D"+
+            "\uCF7E\uD0B7\uCF80\uCF81\uCF82\uCF83\uF3B8\uCF84"+
+            "\uCF85\uCF86\uCF87\uD9F9\uCF88\uCF89\uCF8A\uCF8B"+
+            "\uCF8C\uCF8D\uF3B9\uCF8E\uCF8F\uCF90\uCF91\uCF92"+
+            "\uCF93\uCF94\uCF95\uF3B7\uCF96\uC8E4\uF3B6\uCF97"+
+            "\uCF98\uCF99\uCF9A\uF3BA\uCF9B\uCF9C\uCF9D\uCF9E"+
+            "\uCF9F\uF3BB\uB4C0\uCFA0\uD040\uD041\uD042\uD043"+
+            "\uD044\uD045\uD046\uD047\uD048\uD049\uD04A\uD04B"+
+            "\uD04C\uD04D\uEEC3\uD04E\uD04F\uD050\uD051\uD052"+
+            "\uD053\uF3BC\uD054\uD055\uF3BD\uD056\uD057\uD058"+
+            "\uD1AA\uD059\uD05A\uD05B\uF4AC\uD0C6\uD05C\uD05D"+
+            "\uD05E\uD05F\uD060\uD061\uD0D0\uD1DC\uD062\uD063"+
+            "\uD064\uD065\uD066\uD067\uCFCE\uD068\uD069\uBDD6"+
+            "\uD06A\uD1C3\uD06B\uD06C\uD06D\uD06E\uD06F\uD070"+
+            "\uD071\uBAE2\uE1E9\uD2C2\uF1C2\uB2B9\uD072\uD073"+
+            "\uB1ED\uF1C3\uD074\uC9C0\uB3C4\uD075\uD9F2\uD076"+
+            "\uCBA5\uD077\uF1C4\uD078\uD079\uD07A\uD07B\uD6D4"+
+            "\uD07C\uD07D\uD07E\uD080\uD081\uF1C5\uF4C0\uF1C6"+
+            "\uD082\uD4AC\uF1C7\uD083\uB0C0\uF4C1\uD084\uD085"+
+            "\uF4C2\uD086\uD087\uB4FC\uD088\uC5DB\uD089\uD08A"+
+            "\uD08B\uD08C\uCCBB\uD08D\uD08E\uD08F\uD0E4\uD090"+
+            "\uD091\uD092\uD093\uD094\uCDE0\uD095\uD096\uD097"+
+            "\uD098\uD099\uF1C8\uD09A\uD9F3\uD09B\uD09C\uD09D"+
+            "\uD09E\uD09F\uD0A0\uB1BB\uD140\uCFAE\uD141\uD142"+
+            "\uD143\uB8A4\uD144\uD145\uD146\uD147\uD148\uF1CA"+
+            "\uD149\uD14A\uD14B\uD14C\uF1CB\uD14D\uD14E\uD14F"+
+            "\uD150\uB2C3\uC1D1\uD151\uD152\uD7B0\uF1C9\uD153"+
+            "\uD154\uF1CC\uD155\uD156\uD157\uD158\uF1CE\uD159"+
+            "\uD15A\uD15B\uD9F6\uD15C\uD2E1\uD4A3\uD15D\uD15E"+
+            "\uF4C3\uC8B9\uD15F\uD160\uD161\uD162\uD163\uF4C4"+
+            "\uD164\uD165\uF1CD\uF1CF\uBFE3\uF1D0\uD166\uD167"+
+            "\uF1D4\uD168\uD169\uD16A\uD16B\uD16C\uD16D\uD16E"+
+            "\uF1D6\uF1D1\uD16F\uC9D1\uC5E1\uD170\uD171\uD172"+
+            "\uC2E3\uB9FC\uD173\uD174\uF1D3\uD175\uF1D5\uD176"+
+            "\uD177\uD178\uB9D3\uD179\uD17A\uD17B\uD17C\uD17D"+
+            "\uD17E\uD180\uF1DB\uD181\uD182\uD183\uD184\uD185"+
+            "\uBAD6\uD186\uB0FD\uF1D9\uD187\uD188\uD189\uD18A"+
+            "\uD18B\uF1D8\uF1D2\uF1DA\uD18C\uD18D\uD18E\uD18F"+
+            "\uD190\uF1D7\uD191\uD192\uD193\uC8EC\uD194\uD195"+
+            "\uD196\uD197\uCDCA\uF1DD\uD198\uD199\uD19A\uD19B"+
+            "\uE5BD\uD19C\uD19D\uD19E\uF1DC\uD19F\uF1DE\uD1A0"+
+            "\uD240\uD241\uD242\uD243\uD244\uD245\uD246\uD247"+
+            "\uD248\uF1DF\uD249\uD24A\uCFE5\uD24B\uD24C\uD24D"+
+            "\uD24E\uD24F\uD250\uD251\uD252\uD253\uD254\uD255"+
+            "\uD256\uD257\uD258\uD259\uD25A\uD25B\uD25C\uD25D"+
+            "\uD25E\uD25F\uD260\uD261\uD262\uD263\uF4C5\uBDF3"+
+            "\uD264\uD265\uD266\uD267\uD268\uD269\uF1E0\uD26A"+
+            "\uD26B\uD26C\uD26D\uD26E\uD26F\uD270\uD271\uD272"+
+            "\uD273\uD274\uD275\uD276\uD277\uD278\uD279\uD27A"+
+            "\uD27B\uD27C\uD27D\uF1E1\uD27E\uD280\uD281\uCEF7"+
+            "\uD282\uD2AA\uD283\uF1FB\uD284\uD285\uB8B2\uD286"+
+            "\uD287\uD288\uD289\uD28A\uD28B\uD28C\uD28D\uD28E"+
+            "\uD28F\uD290\uD291\uD292\uD293\uD294\uD295\uD296"+
+            "\uD297\uD298\uD299\uD29A\uD29B\uD29C\uD29D\uD29E"+
+            "\uD29F\uD2A0\uD340\uD341\uD342\uD343\uD344\uD345"+
+            "\uD346\uD347\uD348\uD349\uD34A\uD34B\uD34C\uD34D"+
+            "\uD34E\uD34F\uD350\uD351\uD352\uD353\uD354\uD355"+
+            "\uD356\uD357\uD358\uD359\uD35A\uD35B\uD35C\uD35D"+
+            "\uD35E\uBCFB\uB9DB\uD35F\uB9E6\uC3D9\uCAD3\uEAE8"+
+            "\uC0C0\uBEF5\uEAE9\uEAEA\uEAEB\uD360\uEAEC\uEAED"+
+            "\uEAEE\uEAEF\uBDC7\uD361\uD362\uD363\uF5FB\uD364"+
+            "\uD365\uD366\uF5FD\uD367\uF5FE\uD368\uF5FC\uD369"+
+            "\uD36A\uD36B\uD36C\uBDE2\uD36D\uF6A1\uB4A5\uD36E"+
+            "\uD36F\uD370\uD371\uF6A2\uD372\uD373\uD374\uF6A3"+
+            "\uD375\uD376\uD377\uECB2\uD378\uD379\uD37A\uD37B"+
+            "\uD37C\uD37D\uD37E\uD380\uD381\uD382\uD383\uD384"+
+            "\uD1D4\uD385\uD386\uD387\uD388\uD389\uD38A\uD9EA"+
+            "\uD38B\uD38C\uD38D\uD38E\uD38F\uD390\uD391\uD392"+
+            "\uD393\uD394\uD395\uD396\uD397\uD398\uD399\uD39A"+
+            "\uD39B\uD39C\uD39D\uD39E\uD39F\uD3A0\uD440\uD441"+
+            "\uD442\uD443\uD444\uD445\uD446\uD447\uD448\uD449"+
+            "\uD44A\uD44B\uD44C\uD44D\uD44E\uD44F\uD450\uD451"+
+            "\uD452\uD453\uD454\uD455\uD456\uD457\uD458\uD459"+
+            "\uD45A\uD45B\uD45C\uD45D\uD45E\uD45F\uF6A4\uD460"+
+            "\uD461\uD462\uD463\uD464\uD465\uD466\uD467\uD468"+
+            "\uEEBA\uD469\uD46A\uD46B\uD46C\uD46D\uD46E\uD46F"+
+            "\uD470\uD471\uD472\uD473\uD474\uD475\uD476\uD477"+
+            "\uD478\uD479\uD47A\uD47B\uD47C\uD47D\uD47E\uD480"+
+            "\uD481\uD482\uD483\uD484\uD485\uD486\uD487\uD488"+
+            "\uD489\uD48A\uD48B\uD48C\uD48D\uD48E\uD48F\uD490"+
+            "\uD491\uD492\uD493\uD494\uD495\uD496\uD497\uD498"+
+            "\uD499\uD5B2\uD49A\uD49B\uD49C\uD49D\uD49E\uD49F"+
+            "\uD4A0\uD540\uD541\uD542\uD543\uD544\uD545\uD546"+
+            "\uD547\uD3FE\uCCDC\uD548\uD549\uD54A\uD54B\uD54C"+
+            "\uD54D\uD54E\uD54F\uCAC4\uD550\uD551\uD552\uD553"+
+            "\uD554\uD555\uD556\uD557\uD558\uD559\uD55A\uD55B"+
+            "\uD55C\uD55D\uD55E\uD55F\uD560\uD561\uD562\uD563"+
+            "\uD564\uD565\uD566\uD567\uD568\uD569\uD56A\uD56B"+
+            "\uD56C\uD56D\uD56E\uD56F\uD570\uD571\uD572\uD573"+
+            "\uD574\uD575\uD576\uD577\uD578\uD579\uD57A\uD57B"+
+            "\uD57C\uD57D\uD57E\uD580\uD581\uD582\uD583\uD584"+
+            "\uD585\uD586\uD587\uD588\uD589\uD58A\uD58B\uD58C"+
+            "\uD58D\uD58E\uD58F\uD590\uD591\uD592\uD593\uD594"+
+            "\uD595\uD596\uD597\uD598\uD599\uD59A\uD59B\uD59C"+
+            "\uD59D\uD59E\uD59F\uD5A0\uD640\uD641\uD642\uD643"+
+            "\uD644\uD645\uD646\uD647\uD648\uD649\uD64A\uD64B"+
+            "\uD64C\uD64D\uD64E\uD64F\uD650\uD651\uD652\uD653"+
+            "\uD654\uD655\uD656\uD657\uD658\uD659\uD65A\uD65B";
+
+        private final static String innerIndex6=
+            "\uD65C\uD65D\uD65E\uD65F\uD660\uD661\uD662\uE5C0"+
+            "\uD663\uD664\uD665\uD666\uD667\uD668\uD669\uD66A"+
+            "\uD66B\uD66C\uD66D\uD66E\uD66F\uD670\uD671\uD672"+
+            "\uD673\uD674\uD675\uD676\uD677\uD678\uD679\uD67A"+
+            "\uD67B\uD67C\uD67D\uD67E\uD680\uD681\uF6A5\uD682"+
+            "\uD683\uD684\uD685\uD686\uD687\uD688\uD689\uD68A"+
+            "\uD68B\uD68C\uD68D\uD68E\uD68F\uD690\uD691\uD692"+
+            "\uD693\uD694\uD695\uD696\uD697\uD698\uD699\uD69A"+
+            "\uD69B\uD69C\uD69D\uD69E\uD69F\uD6A0\uD740\uD741"+
+            "\uD742\uD743\uD744\uD745\uD746\uD747\uD748\uD749"+
+            "\uD74A\uD74B\uD74C\uD74D\uD74E\uD74F\uD750\uD751"+
+            "\uD752\uD753\uD754\uD755\uD756\uD757\uD758\uD759"+
+            "\uD75A\uD75B\uD75C\uD75D\uD75E\uD75F\uBEAF\uD760"+
+            "\uD761\uD762\uD763\uD764\uC6A9\uD765\uD766\uD767"+
+            "\uD768\uD769\uD76A\uD76B\uD76C\uD76D\uD76E\uD76F"+
+            "\uD770\uD771\uD772\uD773\uD774\uD775\uD776\uD777"+
+            "\uD778\uD779\uD77A\uD77B\uD77C\uD77D\uD77E\uD780"+
+            "\uD781\uD782\uD783\uD784\uD785\uD786\uD787\uD788"+
+            "\uD789\uD78A\uD78B\uD78C\uD78D\uD78E\uD78F\uD790"+
+            "\uD791\uD792\uD793\uD794\uD795\uD796\uD797\uD798"+
+            "\uDAA5\uBCC6\uB6A9\uB8BC\uC8CF\uBCA5\uDAA6\uDAA7"+
+            "\uCCD6\uC8C3\uDAA8\uC6FD\uD799\uD1B5\uD2E9\uD1B6"+
+            "\uBCC7\uD79A\uBDB2\uBBE4\uDAA9\uDAAA\uD1C8\uDAAB"+
+            "\uD0ED\uB6EF\uC2DB\uD79B\uCBCF\uB7ED\uC9E8\uB7C3"+
+            "\uBEF7\uD6A4\uDAAC\uDAAD\uC6C0\uD7E7\uCAB6\uD79C"+
+            "\uD5A9\uCBDF\uD5EF\uDAAE\uD6DF\uB4CA\uDAB0\uDAAF"+
+            "\uD79D\uD2EB\uDAB1\uDAB2\uDAB3\uCAD4\uDAB4\uCAAB"+
+            "\uDAB5\uDAB6\uB3CF\uD6EF\uDAB7\uBBB0\uB5AE\uDAB8"+
+            "\uDAB9\uB9EE\uD1AF\uD2E8\uDABA\uB8C3\uCFEA\uB2EF"+
+            "\uDABB\uDABC\uD79E\uBDEB\uCEDC\uD3EF\uDABD\uCEF3"+
+            "\uDABE\uD3D5\uBBE5\uDABF\uCBB5\uCBD0\uDAC0\uC7EB"+
+            "\uD6EE\uDAC1\uC5B5\uB6C1\uDAC2\uB7CC\uBFCE\uDAC3"+
+            "\uDAC4\uCBAD\uDAC5\uB5F7\uDAC6\uC1C2\uD7BB\uDAC7"+
+            "\uCCB8\uD79F\uD2EA\uC4B1\uDAC8\uB5FD\uBBD1\uDAC9"+
+            "\uD0B3\uDACA\uDACB\uCEBD\uDACC\uDACD\uDACE\uB2F7"+
+            "\uDAD1\uDACF\uD1E8\uDAD0\uC3D5\uDAD2\uD7A0\uDAD3"+
+            "\uDAD4\uDAD5\uD0BB\uD2A5\uB0F9\uDAD6\uC7AB\uDAD7"+
+            "\uBDF7\uC3A1\uDAD8\uDAD9\uC3FD\uCCB7\uDADA\uDADB"+
+            "\uC0BE\uC6D7\uDADC\uDADD\uC7B4\uDADE\uDADF\uB9C8"+
+            "\uD840\uD841\uD842\uD843\uD844\uD845\uD846\uD847"+
+            "\uD848\uBBED\uD849\uD84A\uD84B\uD84C\uB6B9\uF4F8"+
+            "\uD84D\uF4F9\uD84E\uD84F\uCDE3\uD850\uD851\uD852"+
+            "\uD853\uD854\uD855\uD856\uD857\uF5B9\uD858\uD859"+
+            "\uD85A\uD85B\uEBE0\uD85C\uD85D\uD85E\uD85F\uD860"+
+            "\uD861\uCFF3\uBBBF\uD862\uD863\uD864\uD865\uD866"+
+            "\uD867\uD868\uBAC0\uD4A5\uD869\uD86A\uD86B\uD86C"+
+            "\uD86D\uD86E\uD86F\uE1D9\uD870\uD871\uD872\uD873"+
+            "\uF5F4\uB1AA\uB2F2\uD874\uD875\uD876\uD877\uD878"+
+            "\uD879\uD87A\uF5F5\uD87B\uD87C\uF5F7\uD87D\uD87E"+
+            "\uD880\uBAD1\uF5F6\uD881\uC3B2\uD882\uD883\uD884"+
+            "\uD885\uD886\uD887\uD888\uF5F9\uD889\uD88A\uD88B"+
+            "\uF5F8\uD88C\uD88D\uD88E\uD88F\uD890\uD891\uD892"+
+            "\uD893\uD894\uD895\uD896\uD897\uD898\uD899\uD89A"+
+            "\uD89B\uD89C\uD89D\uD89E\uD89F\uD8A0\uD940\uD941"+
+            "\uD942\uD943\uD944\uD945\uD946\uD947\uD948\uD949"+
+            "\uD94A\uD94B\uD94C\uD94D\uD94E\uD94F\uD950\uD951"+
+            "\uD952\uD953\uD954\uD955\uD956\uD957\uD958\uD959"+
+            "\uD95A\uD95B\uD95C\uD95D\uD95E\uD95F\uD960\uD961"+
+            "\uD962\uD963\uD964\uD965\uD966\uD967\uD968\uD969"+
+            "\uD96A\uD96B\uD96C\uD96D\uD96E\uD96F\uD970\uD971"+
+            "\uD972\uD973\uD974\uD975\uD976\uD977\uD978\uD979"+
+            "\uD97A\uD97B\uD97C\uD97D\uD97E\uD980\uD981\uD982"+
+            "\uD983\uD984\uD985\uD986\uD987\uD988\uD989\uD98A"+
+            "\uD98B\uD98C\uD98D\uD98E\uD98F\uD990\uD991\uD992"+
+            "\uD993\uD994\uD995\uD996\uD997\uD998\uD999\uD99A"+
+            "\uD99B\uD99C\uD99D\uD99E\uD99F\uD9A0\uDA40\uDA41"+
+            "\uDA42\uDA43\uDA44\uDA45\uDA46\uDA47\uDA48\uDA49"+
+            "\uDA4A\uDA4B\uDA4C\uDA4D\uDA4E\uB1B4\uD5EA\uB8BA"+
+            "\uDA4F\uB9B1\uB2C6\uD4F0\uCFCD\uB0DC\uD5CB\uBBF5"+
+            "\uD6CA\uB7B7\uCCB0\uC6B6\uB1E1\uB9BA\uD6FC\uB9E1"+
+            "\uB7A1\uBCFA\uEADA\uEADB\uCCF9\uB9F3\uEADC\uB4FB"+
+            "\uC3B3\uB7D1\uBAD8\uEADD\uD4F4\uEADE\uBCD6\uBBDF"+
+            "\uEADF\uC1DE\uC2B8\uD4DF\uD7CA\uEAE0\uEAE1\uEAE4"+
+            "\uEAE2\uEAE3\uC9DE\uB8B3\uB6C4\uEAE5\uCAEA\uC9CD"+
+            "\uB4CD\uDA50\uDA51\uE2D9\uC5E2\uEAE6\uC0B5\uDA52"+
+            "\uD7B8\uEAE7\uD7AC\uC8FC\uD8D3\uD8CD\uD4DE\uDA53"+
+            "\uD4F9\uC9C4\uD3AE\uB8D3\uB3E0\uDA54\uC9E2\uF4F6"+
+            "\uDA55\uDA56\uDA57\uBAD5\uDA58\uF4F7\uDA59\uDA5A"+
+            "\uD7DF\uDA5B\uDA5C\uF4F1\uB8B0\uD5D4\uB8CF\uC6F0"+
+            "\uDA5D\uDA5E\uDA5F\uDA60\uDA61\uDA62\uDA63\uDA64"+
+            "\uDA65\uB3C3\uDA66\uDA67\uF4F2\uB3AC\uDA68\uDA69"+
+            "\uDA6A\uDA6B\uD4BD\uC7F7\uDA6C\uDA6D\uDA6E\uDA6F"+
+            "\uDA70\uF4F4\uDA71\uDA72\uF4F3\uDA73\uDA74\uDA75"+
+            "\uDA76\uDA77\uDA78\uDA79\uDA7A\uDA7B\uDA7C\uCCCB"+
+            "\uDA7D\uDA7E\uDA80\uC8A4\uDA81\uDA82\uDA83\uDA84"+
+            "\uDA85\uDA86\uDA87\uDA88\uDA89\uDA8A\uDA8B\uDA8C"+
+            "\uDA8D\uF4F5\uDA8E\uD7E3\uC5BF\uF5C0\uDA8F\uDA90"+
+            "\uF5BB\uDA91\uF5C3\uDA92\uF5C2\uDA93\uD6BA\uF5C1"+
+            "\uDA94\uDA95\uDA96\uD4BE\uF5C4\uDA97\uF5CC\uDA98"+
+            "\uDA99\uDA9A\uDA9B\uB0CF\uB5F8\uDA9C\uF5C9\uF5CA"+
+            "\uDA9D\uC5DC\uDA9E\uDA9F\uDAA0\uDB40\uF5C5\uF5C6"+
+            "\uDB41\uDB42\uF5C7\uF5CB\uDB43\uBEE0\uF5C8\uB8FA"+
+            "\uDB44\uDB45\uDB46\uF5D0\uF5D3\uDB47\uDB48\uDB49"+
+            "\uBFE7\uDB4A\uB9F2\uF5BC\uF5CD\uDB4B\uDB4C\uC2B7"+
+            "\uDB4D\uDB4E\uDB4F\uCCF8\uDB50\uBCF9\uDB51\uF5CE"+
+            "\uF5CF\uF5D1\uB6E5\uF5D2\uDB52\uF5D5\uDB53\uDB54"+
+            "\uDB55\uDB56\uDB57\uDB58\uDB59\uF5BD\uDB5A\uDB5B"+
+            "\uDB5C\uF5D4\uD3BB\uDB5D\uB3EC\uDB5E\uDB5F\uCCA4"+
+            "\uDB60\uDB61\uDB62\uDB63\uF5D6\uDB64\uDB65\uDB66"+
+            "\uDB67\uDB68\uDB69\uDB6A\uDB6B\uF5D7\uBEE1\uF5D8"+
+            "\uDB6C\uDB6D\uCCDF\uF5DB\uDB6E\uDB6F\uDB70\uDB71"+
+            "\uDB72\uB2C8\uD7D9\uDB73\uF5D9\uDB74\uF5DA\uF5DC"+
+            "\uDB75\uF5E2\uDB76\uDB77\uDB78\uF5E0\uDB79\uDB7A"+
+            "\uDB7B\uF5DF\uF5DD\uDB7C\uDB7D\uF5E1\uDB7E\uDB80"+
+            "\uF5DE\uF5E4\uF5E5\uDB81\uCCE3\uDB82\uDB83\uE5BF"+
+            "\uB5B8\uF5E3\uF5E8\uCCA3\uDB84\uDB85\uDB86\uDB87"+
+            "\uDB88\uF5E6\uF5E7\uDB89\uDB8A\uDB8B\uDB8C\uDB8D"+
+            "\uDB8E\uF5BE\uDB8F\uDB90\uDB91\uDB92\uDB93\uDB94"+
+            "\uDB95\uDB96\uDB97\uDB98\uDB99\uDB9A\uB1C4\uDB9B"+
+            "\uDB9C\uF5BF\uDB9D\uDB9E\uB5C5\uB2E4\uDB9F\uF5EC"+
+            "\uF5E9\uDBA0\uB6D7\uDC40\uF5ED\uDC41\uF5EA\uDC42"+
+            "\uDC43\uDC44\uDC45\uDC46\uF5EB\uDC47\uDC48\uB4DA"+
+            "\uDC49\uD4EA\uDC4A\uDC4B\uDC4C\uF5EE\uDC4D\uB3F9"+
+            "\uDC4E\uDC4F\uDC50\uDC51\uDC52\uDC53\uDC54\uF5EF"+
+            "\uF5F1\uDC55\uDC56\uDC57\uF5F0\uDC58\uDC59\uDC5A"+
+            "\uDC5B\uDC5C\uDC5D\uDC5E\uF5F2\uDC5F\uF5F3\uDC60"+
+            "\uDC61\uDC62\uDC63\uDC64\uDC65\uDC66\uDC67\uDC68"+
+            "\uDC69\uDC6A\uDC6B\uC9ED\uB9AA\uDC6C\uDC6D\uC7FB"+
+            "\uDC6E\uDC6F\uB6E3\uDC70\uDC71\uDC72\uDC73\uDC74"+
+            "\uDC75\uDC76\uCCC9\uDC77\uDC78\uDC79\uDC7A\uDC7B"+
+            "\uDC7C\uDC7D\uDC7E\uDC80\uDC81\uDC82\uDC83\uDC84"+
+            "\uDC85\uDC86\uDC87\uDC88\uDC89\uDC8A\uEAA6\uDC8B"+
+            "\uDC8C\uDC8D\uDC8E\uDC8F\uDC90\uDC91\uDC92\uDC93"+
+            "\uDC94\uDC95\uDC96\uDC97\uDC98\uDC99\uDC9A\uDC9B"+
+            "\uDC9C\uDC9D\uDC9E\uDC9F\uDCA0\uDD40\uDD41\uDD42"+
+            "\uDD43\uDD44\uDD45\uDD46\uDD47\uDD48\uDD49\uDD4A"+
+            "\uDD4B\uDD4C\uDD4D\uDD4E\uDD4F\uDD50\uDD51\uDD52"+
+            "\uDD53\uDD54\uDD55\uDD56\uDD57\uDD58\uDD59\uDD5A"+
+            "\uDD5B\uDD5C\uDD5D\uDD5E\uDD5F\uDD60\uDD61\uDD62"+
+            "\uDD63\uDD64\uDD65\uDD66\uDD67\uDD68\uDD69\uDD6A"+
+            "\uDD6B\uDD6C\uDD6D\uDD6E\uDD6F\uDD70\uDD71\uDD72"+
+            "\uDD73\uDD74\uDD75\uDD76\uDD77\uDD78\uDD79\uDD7A"+
+            "\uDD7B\uDD7C\uDD7D\uDD7E\uDD80\uDD81\uDD82\uDD83"+
+            "\uDD84\uDD85\uDD86\uDD87\uDD88\uDD89\uDD8A\uDD8B"+
+            "\uDD8C\uDD8D\uDD8E\uDD8F\uDD90\uDD91\uDD92\uDD93"+
+            "\uDD94\uDD95\uDD96\uDD97\uDD98\uDD99\uDD9A\uDD9B"+
+            "\uDD9C\uDD9D\uDD9E\uDD9F\uDDA0\uDE40\uDE41\uDE42"+
+            "\uDE43\uDE44\uDE45\uDE46\uDE47\uDE48\uDE49\uDE4A"+
+            "\uDE4B\uDE4C\uDE4D\uDE4E\uDE4F\uDE50\uDE51\uDE52"+
+            "\uDE53\uDE54\uDE55\uDE56\uDE57\uDE58\uDE59\uDE5A"+
+            "\uDE5B\uDE5C\uDE5D\uDE5E\uDE5F\uDE60\uB3B5\uD4FE"+
+            "\uB9EC\uD0F9\uDE61\uE9ED\uD7AA\uE9EE\uC2D6\uC8ED"+
+            "\uBAE4\uE9EF\uE9F0\uE9F1\uD6E1\uE9F2\uE9F3\uE9F5"+
+            "\uE9F4\uE9F6\uE9F7\uC7E1\uE9F8\uD4D8\uE9F9\uBDCE"+
+            "\uDE62\uE9FA\uE9FB\uBDCF\uE9FC\uB8A8\uC1BE\uE9FD"+
+            "\uB1B2\uBBD4\uB9F5\uE9FE\uDE63\uEAA1\uEAA2\uEAA3"+
+            "\uB7F8\uBCAD\uDE64\uCAE4\uE0CE\uD4AF\uCFBD\uD5B7"+
+            "\uEAA4\uD5DE\uEAA5\uD0C1\uB9BC\uDE65\uB4C7\uB1D9"+
+            "\uDE66\uDE67\uDE68\uC0B1\uDE69\uDE6A\uDE6B\uDE6C"+
+            "\uB1E6\uB1E7\uDE6D\uB1E8\uDE6E\uDE6F\uDE70\uDE71"+
+            "\uB3BD\uC8E8\uDE72\uDE73\uDE74\uDE75\uE5C1\uDE76"+
+            "\uDE77\uB1DF\uDE78\uDE79\uDE7A\uC1C9\uB4EF\uDE7B"+
+            "\uDE7C\uC7A8\uD3D8\uDE7D\uC6F9\uD1B8\uDE7E\uB9FD"+
+            "\uC2F5\uDE80\uDE81\uDE82\uDE83\uDE84\uD3AD\uDE85"+
+            "\uD4CB\uBDFC\uDE86\uE5C2\uB7B5\uE5C3\uDE87\uDE88"+
+            "\uBBB9\uD5E2\uDE89\uBDF8\uD4B6\uCEA5\uC1AC\uB3D9"+
+            "\uDE8A\uDE8B\uCCF6\uDE8C\uE5C6\uE5C4\uE5C8\uDE8D"+
+            "\uE5CA\uE5C7\uB5CF\uC6C8\uDE8E\uB5FC\uE5C5\uDE8F"+
+            "\uCAF6\uDE90\uDE91\uE5C9\uDE92\uDE93\uDE94\uC3D4"+
+            "\uB1C5\uBCA3\uDE95\uDE96\uDE97\uD7B7\uDE98\uDE99"+
+            "\uCDCB\uCBCD\uCACA\uCCD3\uE5CC\uE5CB\uC4E6\uDE9A"+
+            "\uDE9B\uD1A1\uD1B7\uE5CD\uDE9C\uE5D0\uDE9D\uCDB8"+
+            "\uD6F0\uE5CF\uB5DD\uDE9E\uCDBE\uDE9F\uE5D1\uB6BA"+
+            "\uDEA0\uDF40\uCDA8\uB9E4\uDF41\uCAC5\uB3D1\uCBD9"+
+            "\uD4EC\uE5D2\uB7EA\uDF42\uDF43\uDF44\uE5CE\uDF45"+
+            "\uDF46\uDF47\uDF48\uDF49\uDF4A\uE5D5\uB4FE\uE5D6"+
+            "\uDF4B\uDF4C\uDF4D\uDF4E\uDF4F\uE5D3\uE5D4\uDF50"+
+            "\uD2DD\uDF51\uDF52\uC2DF\uB1C6\uDF53\uD3E2\uDF54"+
+            "\uDF55\uB6DD\uCBEC\uDF56\uE5D7\uDF57\uDF58\uD3F6"+
+            "\uDF59\uDF5A\uDF5B\uDF5C\uDF5D\uB1E9\uDF5E\uB6F4"+
+            "\uE5DA\uE5D8\uE5D9\uB5C0\uDF5F\uDF60\uDF61\uD2C5"+
+            "\uE5DC\uDF62\uDF63\uE5DE\uDF64\uDF65\uDF66\uDF67"+
+            "\uDF68\uDF69\uE5DD\uC7B2\uDF6A\uD2A3\uDF6B\uDF6C"+
+            "\uE5DB\uDF6D\uDF6E\uDF6F\uDF70\uD4E2\uD5DA\uDF71"+
+            "\uDF72\uDF73\uDF74\uDF75\uE5E0\uD7F1\uDF76\uDF77"+
+            "\uDF78\uDF79\uDF7A\uDF7B\uDF7C\uE5E1\uDF7D\uB1DC"+
+            "\uD1FB\uDF7E\uE5E2\uE5E4\uDF80\uDF81\uDF82\uDF83"+
+            "\uE5E3\uDF84\uDF85\uE5E5\uDF86\uDF87\uDF88\uDF89"+
+            "\uDF8A\uD2D8\uDF8B\uB5CB\uDF8C\uE7DF\uDF8D\uDAF5"+
+            "\uDF8E\uDAF8\uDF8F\uDAF6\uDF90\uDAF7\uDF91\uDF92"+
+            "\uDF93\uDAFA\uD0CF\uC4C7\uDF94\uDF95\uB0EE\uDF96"+
+            "\uDF97\uDF98\uD0B0\uDF99\uDAF9\uDF9A\uD3CA\uBAAA"+
+            "\uDBA2\uC7F1\uDF9B\uDAFC\uDAFB\uC9DB\uDAFD\uDF9C"+
+            "\uDBA1\uD7DE\uDAFE\uC1DA\uDF9D\uDF9E\uDBA5\uDF9F"+
+            "\uDFA0\uD3F4\uE040\uE041\uDBA7\uDBA4\uE042\uDBA8"+
+            "\uE043\uE044\uBDBC\uE045\uE046\uE047\uC0C9\uDBA3"+
+            "\uDBA6\uD6A3\uE048\uDBA9\uE049\uE04A\uE04B\uDBAD"+
+            "\uE04C\uE04D\uE04E\uDBAE\uDBAC\uBAC2\uE04F\uE050"+
+            "\uE051\uBFA4\uDBAB\uE052\uE053\uE054\uDBAA\uD4C7"+
+            "\uB2BF\uE055\uE056\uDBAF\uE057\uB9F9\uE058\uDBB0"+
+            "\uE059\uE05A\uE05B\uE05C\uB3BB\uE05D\uE05E\uE05F"+
+            "\uB5A6\uE060\uE061\uE062\uE063\uB6BC\uDBB1\uE064"+
+            "\uE065\uE066\uB6F5\uE067\uDBB2\uE068\uE069\uE06A"+
+            "\uE06B\uE06C\uE06D\uE06E\uE06F\uE070\uE071\uE072"+
+            "\uE073\uE074\uE075\uE076\uE077\uE078\uE079\uE07A"+
+            "\uE07B\uB1C9\uE07C\uE07D\uE07E\uE080\uDBB4\uE081"+
+            "\uE082\uE083\uDBB3\uDBB5\uE084\uE085\uE086\uE087"+
+            "\uE088\uE089\uE08A\uE08B\uE08C\uE08D\uE08E\uDBB7"+
+            "\uE08F\uDBB6\uE090\uE091\uE092\uE093\uE094\uE095"+
+            "\uE096\uDBB8\uE097\uE098\uE099\uE09A\uE09B\uE09C"+
+            "\uE09D\uE09E\uE09F\uDBB9\uE0A0\uE140\uDBBA\uE141"+
+            "\uE142\uD3CF\uF4FA\uC7F5\uD7C3\uC5E4\uF4FC\uF4FD"+
+            "\uF4FB\uE143\uBEC6\uE144\uE145\uE146\uE147\uD0EF"+
+            "\uE148\uE149\uB7D3\uE14A\uE14B\uD4CD\uCCAA\uE14C"+
+            "\uE14D\uF5A2\uF5A1\uBAA8\uF4FE\uCBD6\uE14E\uE14F"+
+            "\uE150\uF5A4\uC0D2\uE151\uB3EA\uE152\uCDAA\uF5A5"+
+            "\uF5A3\uBDB4\uF5A8\uE153\uF5A9\uBDCD\uC3B8\uBFE1"+
+            "\uCBE1\uF5AA\uE154\uE155\uE156\uF5A6\uF5A7\uC4F0"+
+            "\uE157\uE158\uE159\uE15A\uE15B\uF5AC\uE15C\uB4BC"+
+            "\uE15D\uD7ED\uE15E\uB4D7\uF5AB\uF5AE\uE15F\uE160"+
+            "\uF5AD\uF5AF\uD0D1\uE161\uE162\uE163\uE164\uE165"+
+            "\uE166\uE167\uC3D1\uC8A9\uE168\uE169\uE16A\uE16B"+
+            "\uE16C\uE16D\uF5B0\uF5B1\uE16E\uE16F\uE170\uE171"+
+            "\uE172\uE173\uF5B2\uE174\uE175\uF5B3\uF5B4\uF5B5"+
+            "\uE176\uE177\uE178\uE179\uF5B7\uF5B6\uE17A\uE17B"+
+            "\uE17C\uE17D\uF5B8\uE17E\uE180\uE181\uE182\uE183"+
+            "\uE184\uE185\uE186\uE187\uE188\uE189\uE18A\uB2C9"+
+            "\uE18B\uD3D4\uCACD\uE18C\uC0EF\uD6D8\uD2B0\uC1BF"+
+            "\uE18D\uBDF0\uE18E\uE18F\uE190\uE191\uE192\uE193"+
+            "\uE194\uE195\uE196\uE197\uB8AA\uE198\uE199\uE19A"+
+            "\uE19B\uE19C\uE19D\uE19E\uE19F\uE1A0\uE240\uE241"+
+            "\uE242\uE243\uE244\uE245\uE246\uE247\uE248\uE249"+
+            "\uE24A\uE24B\uE24C\uE24D\uE24E\uE24F\uE250\uE251"+
+            "\uE252\uE253\uE254\uE255\uE256\uE257\uE258\uE259"+
+            "\uE25A\uE25B\uE25C\uE25D\uE25E\uE25F\uE260\uE261"+
+            "\uE262\uE263\uE264\uE265\uE266\uE267\uE268\uE269"+
+            "\uE26A\uE26B\uE26C\uE26D\uE26E\uE26F\uE270\uE271"+
+            "\uE272\uE273\uE274\uE275\uE276\uE277\uE278\uE279"+
+            "\uE27A\uE27B\uE27C\uE27D\uE27E\uE280\uE281\uE282"+
+            "\uE283\uE284\uE285\uE286\uE287\uE288\uE289\uE28A"+
+            "\uE28B\uE28C\uE28D\uE28E\uE28F\uE290\uE291\uE292"+
+            "\uE293\uE294\uE295\uE296\uE297\uE298\uE299\uE29A"+
+            "\uE29B\uE29C\uE29D\uE29E\uE29F\uE2A0\uE340\uE341"+
+            "\uE342\uE343\uE344\uE345\uE346\uE347\uE348\uE349"+
+            "\uE34A\uE34B\uE34C\uE34D\uE34E\uE34F\uE350\uE351"+
+            "\uE352\uE353\uE354\uE355\uE356\uE357\uE358\uE359"+
+            "\uE35A\uE35B\uE35C\uE35D\uE35E\uE35F\uE360\uE361"+
+            "\uE362\uE363\uE364\uE365\uE366\uE367\uE368\uE369"+
+            "\uE36A\uE36B\uE36C\uE36D\uBCF8\uE36E\uE36F\uE370"+
+            "\uE371\uE372\uE373\uE374\uE375\uE376\uE377\uE378"+
+            "\uE379\uE37A\uE37B\uE37C\uE37D\uE37E\uE380\uE381"+
+            "\uE382\uE383\uE384\uE385\uE386\uE387\uF6C6\uE388"+
+            "\uE389\uE38A\uE38B\uE38C\uE38D\uE38E\uE38F\uE390"+
+            "\uE391\uE392\uE393\uE394\uE395\uE396\uE397\uE398"+
+            "\uE399\uE39A\uE39B\uE39C\uE39D\uE39E\uE39F\uE3A0"+
+            "\uE440\uE441\uE442\uE443\uE444\uE445\uF6C7\uE446"+
+            "\uE447\uE448\uE449\uE44A\uE44B\uE44C\uE44D\uE44E"+
+            "\uE44F\uE450\uE451\uE452\uE453\uE454\uE455\uE456"+
+            "\uE457\uE458\uE459\uE45A\uE45B\uE45C\uE45D\uE45E"+
+            "\uF6C8\uE45F\uE460\uE461\uE462\uE463\uE464\uE465"+
+            "\uE466\uE467\uE468\uE469\uE46A\uE46B\uE46C\uE46D"+
+            "\uE46E\uE46F\uE470\uE471\uE472\uE473\uE474\uE475"+
+            "\uE476\uE477\uE478\uE479\uE47A\uE47B\uE47C\uE47D"+
+            "\uE47E\uE480\uE481\uE482\uE483\uE484\uE485\uE486"+
+            "\uE487\uE488\uE489\uE48A\uE48B\uE48C\uE48D\uE48E"+
+            "\uE48F\uE490\uE491\uE492\uE493\uE494\uE495\uE496"+
+            "\uE497\uE498\uE499\uE49A\uE49B\uE49C\uE49D\uE49E"+
+            "\uE49F\uE4A0\uE540\uE541\uE542\uE543\uE544\uE545"+
+            "\uE546\uE547\uE548\uE549\uE54A\uE54B\uE54C\uE54D"+
+            "\uE54E\uE54F\uE550\uE551\uE552\uE553\uE554\uE555"+
+            "\uE556\uE557\uE558\uE559\uE55A\uE55B\uE55C\uE55D"+
+            "\uE55E\uE55F\uE560\uE561\uE562\uE563\uE564\uE565"+
+            "\uE566\uE567\uE568\uE569\uE56A\uE56B\uE56C\uE56D"+
+            "\uE56E\uE56F\uE570\uE571\uE572\uE573\uF6C9\uE574"+
+            "\uE575\uE576\uE577\uE578\uE579\uE57A\uE57B\uE57C"+
+            "\uE57D\uE57E\uE580\uE581\uE582\uE583\uE584\uE585"+
+            "\uE586\uE587\uE588\uE589\uE58A\uE58B\uE58C\uE58D"+
+            "\uE58E\uE58F\uE590\uE591\uE592\uE593\uE594\uE595"+
+            "\uE596\uE597\uE598\uE599\uE59A\uE59B\uE59C\uE59D"+
+            "\uE59E\uE59F\uF6CA\uE5A0\uE640\uE641\uE642\uE643"+
+            "\uE644\uE645\uE646\uE647\uE648\uE649\uE64A\uE64B"+
+            "\uE64C\uE64D\uE64E\uE64F\uE650\uE651\uE652\uE653"+
+            "\uE654\uE655\uE656\uE657\uE658\uE659\uE65A\uE65B"+
+            "\uE65C\uE65D\uE65E\uE65F\uE660\uE661\uE662\uF6CC"+
+            "\uE663\uE664\uE665\uE666\uE667\uE668\uE669\uE66A"+
+            "\uE66B\uE66C\uE66D\uE66E\uE66F\uE670\uE671\uE672"+
+            "\uE673\uE674\uE675\uE676\uE677\uE678\uE679\uE67A"+
+            "\uE67B\uE67C\uE67D\uE67E\uE680\uE681\uE682\uE683"+
+            "\uE684\uE685\uE686\uE687\uE688\uE689\uE68A\uE68B"+
+            "\uE68C\uE68D\uE68E\uE68F\uE690\uE691\uE692\uE693"+
+            "\uE694\uE695\uE696\uE697\uE698\uE699\uE69A\uE69B"+
+            "\uE69C\uE69D\uF6CB\uE69E\uE69F\uE6A0\uE740\uE741"+
+            "\uE742\uE743\uE744\uE745\uE746\uE747\uF7E9\uE748"+
+            "\uE749\uE74A\uE74B\uE74C\uE74D\uE74E\uE74F\uE750"+
+            "\uE751\uE752\uE753\uE754\uE755\uE756\uE757\uE758"+
+            "\uE759\uE75A\uE75B\uE75C\uE75D\uE75E\uE75F\uE760"+
+            "\uE761\uE762\uE763\uE764\uE765\uE766\uE767\uE768"+
+            "\uE769\uE76A\uE76B\uE76C\uE76D\uE76E\uE76F\uE770"+
+            "\uE771\uE772\uE773\uE774\uE775\uE776\uE777\uE778"+
+            "\uE779\uE77A\uE77B\uE77C\uE77D\uE77E\uE780\uE781"+
+            "\uE782\uE783\uE784\uE785\uE786\uE787\uE788\uE789"+
+            "\uE78A\uE78B\uE78C\uE78D\uE78E\uE78F\uE790\uE791"+
+            "\uE792\uE793\uE794\uE795\uE796\uE797\uE798\uE799"+
+            "\uE79A\uE79B\uE79C\uE79D\uE79E\uE79F\uE7A0\uE840"+
+            "\uE841\uE842\uE843\uE844\uE845\uE846\uE847\uE848"+
+            "\uE849\uE84A\uE84B\uE84C\uE84D\uE84E\uF6CD\uE84F"+
+            "\uE850\uE851\uE852\uE853\uE854\uE855\uE856\uE857"+
+            "\uE858\uE859\uE85A\uE85B\uE85C\uE85D\uE85E\uE85F"+
+            "\uE860\uE861\uE862\uE863\uE864\uE865\uE866\uE867"+
+            "\uE868\uE869\uE86A\uE86B\uE86C\uE86D\uE86E\uE86F"+
+            "\uE870\uE871\uE872\uE873\uE874\uE875\uE876\uE877"+
+            "\uE878\uE879\uE87A\uF6CE\uE87B\uE87C\uE87D\uE87E"+
+            "\uE880\uE881\uE882\uE883\uE884\uE885\uE886\uE887"+
+            "\uE888\uE889\uE88A\uE88B\uE88C\uE88D\uE88E\uE88F"+
+            "\uE890\uE891\uE892\uE893\uE894\uEEC4\uEEC5\uEEC6"+
+            "\uD5EB\uB6A4\uEEC8\uEEC7\uEEC9\uEECA\uC7A5\uEECB"+
+            "\uEECC\uE895\uB7B0\uB5F6\uEECD\uEECF\uE896\uEECE"+
+            "\uE897\uB8C6\uEED0\uEED1\uEED2\uB6DB\uB3AE\uD6D3"+
+            "\uC4C6\uB1B5\uB8D6\uEED3\uEED4\uD4BF\uC7D5\uBEFB"+
+            "\uCED9\uB9B3\uEED6\uEED5\uEED8\uEED7\uC5A5\uEED9"+
+            "\uEEDA\uC7AE\uEEDB\uC7AF\uEEDC\uB2A7\uEEDD\uEEDE"+
+            "\uEEDF\uEEE0\uEEE1\uD7EA\uEEE2\uEEE3\uBCD8\uEEE4"+
+            "\uD3CB\uCCFA\uB2AC\uC1E5\uEEE5\uC7A6\uC3AD\uE898"+
+            "\uEEE6\uEEE7\uEEE8\uEEE9\uEEEA\uEEEB\uEEEC\uE899"+
+            "\uEEED\uEEEE\uEEEF\uE89A\uE89B\uEEF0\uEEF1\uEEF2"+
+            "\uEEF4\uEEF3\uE89C\uEEF5\uCDAD\uC2C1\uEEF6\uEEF7"+
+            "\uEEF8\uD5A1\uEEF9\uCFB3\uEEFA\uEEFB\uE89D\uEEFC"+
+            "\uEEFD\uEFA1\uEEFE\uEFA2\uB8F5\uC3FA\uEFA3\uEFA4"+
+            "\uBDC2\uD2BF\uB2F9\uEFA5\uEFA6\uEFA7\uD2F8\uEFA8"+
+            "\uD6FD\uEFA9\uC6CC\uE89E\uEFAA\uEFAB\uC1B4\uEFAC"+
+            "\uCFFA\uCBF8\uEFAE\uEFAD\uB3FA\uB9F8\uEFAF\uEFB0"+
+            "\uD0E2\uEFB1\uEFB2\uB7E6\uD0BF\uEFB3\uEFB4\uEFB5"+
+            "\uC8F1\uCCE0\uEFB6\uEFB7\uEFB8\uEFB9\uEFBA\uD5E0"+
+            "\uEFBB\uB4ED\uC3AA\uEFBC\uE89F\uEFBD\uEFBE\uEFBF"+
+            "\uE8A0\uCEFD\uEFC0\uC2E0\uB4B8\uD7B6\uBDF5\uE940"+
+            "\uCFC7\uEFC3\uEFC1\uEFC2\uEFC4\uB6A7\uBCFC\uBEE2"+
+            "\uC3CC\uEFC5\uEFC6\uE941\uEFC7\uEFCF\uEFC8\uEFC9"+
+            "\uEFCA\uC7C2\uEFF1\uB6CD\uEFCB\uE942\uEFCC\uEFCD"+
+            "\uB6C6\uC3BE\uEFCE\uE943\uEFD0\uEFD1\uEFD2\uD5F2"+
+            "\uE944\uEFD3\uC4F7\uE945\uEFD4\uC4F8\uEFD5\uEFD6"+
+            "\uB8E4\uB0F7\uEFD7\uEFD8\uEFD9\uE946\uEFDA\uEFDB"+
+            "\uEFDC\uEFDD\uE947\uEFDE\uBEB5\uEFE1\uEFDF\uEFE0"+
+            "\uE948\uEFE2\uEFE3\uC1CD\uEFE4\uEFE5\uEFE6\uEFE7"+
+            "\uEFE8\uEFE9\uEFEA\uEFEB\uEFEC\uC0D8\uE949\uEFED"+
+            "\uC1AD\uEFEE\uEFEF\uEFF0\uE94A\uE94B\uCFE2\uE94C"+
+            "\uE94D\uE94E\uE94F\uE950\uE951\uE952\uE953\uB3A4"+
+            "\uE954\uE955\uE956\uE957\uE958\uE959\uE95A\uE95B"+
+            "\uE95C\uE95D\uE95E\uE95F\uE960\uE961\uE962\uE963"+
+            "\uE964\uE965\uE966\uE967\uE968\uE969\uE96A\uE96B"+
+            "\uE96C\uE96D\uE96E\uE96F\uE970\uE971\uE972\uE973"+
+            "\uE974\uE975\uE976\uE977\uE978\uE979\uE97A\uE97B"+
+            "\uE97C\uE97D\uE97E\uE980\uE981\uE982\uE983\uE984"+
+            "\uE985\uE986\uE987\uE988\uE989\uE98A\uE98B\uE98C"+
+            "\uE98D\uE98E\uE98F\uE990\uE991\uE992\uE993\uE994"+
+            "\uE995\uE996\uE997\uE998\uE999\uE99A\uE99B\uE99C"+
+            "\uE99D\uE99E\uE99F\uE9A0\uEA40\uEA41\uEA42\uEA43"+
+            "\uEA44\uEA45\uEA46\uEA47\uEA48\uEA49\uEA4A\uEA4B"+
+            "\uEA4C\uEA4D\uEA4E\uEA4F\uEA50\uEA51\uEA52\uEA53"+
+            "\uEA54\uEA55\uEA56\uEA57\uEA58\uEA59\uEA5A\uEA5B"+
+            "\uC3C5\uE3C5\uC9C1\uE3C6\uEA5C\uB1D5\uCECA\uB4B3"+
+            "\uC8F2\uE3C7\uCFD0\uE3C8\uBCE4\uE3C9\uE3CA\uC3C6"+
+            "\uD5A2\uC4D6\uB9EB\uCEC5\uE3CB\uC3F6\uE3CC\uEA5D"+
+            "\uB7A7\uB8F3\uBAD2\uE3CD\uE3CE\uD4C4\uE3CF\uEA5E"+
+            "\uE3D0\uD1CB\uE3D1\uE3D2\uE3D3\uE3D4\uD1D6\uE3D5"+
+            "\uB2FB\uC0BB\uE3D6\uEA5F\uC0AB\uE3D7\uE3D8\uE3D9"+
+            "\uEA60\uE3DA\uE3DB\uEA61\uB8B7\uDAE2\uEA62\uB6D3"+
+            "\uEA63\uDAE4\uDAE3\uEA64\uEA65\uEA66\uEA67\uEA68"+
+            "\uEA69\uEA6A\uDAE6\uEA6B\uEA6C\uEA6D\uC8EE\uEA6E"+
+            "\uEA6F\uDAE5\uB7C0\uD1F4\uD2F5\uD5F3\uBDD7\uEA70"+
+            "\uEA71\uEA72\uEA73\uD7E8\uDAE8\uDAE7\uEA74\uB0A2"+
+            "\uCDD3\uEA75\uDAE9\uEA76\uB8BD\uBCCA\uC2BD\uC2A4"+
+            "\uB3C2\uDAEA\uEA77\uC2AA\uC4B0\uBDB5\uEA78\uEA79"+
+            "\uCFDE\uEA7A\uEA7B\uEA7C\uDAEB\uC9C2\uEA7D\uEA7E"+
+            "\uEA80\uEA81\uEA82\uB1DD\uEA83\uEA84\uEA85\uDAEC"+
+            "\uEA86\uB6B8\uD4BA\uEA87\uB3FD\uEA88\uEA89\uDAED"+
+            "\uD4C9\uCFD5\uC5E3\uEA8A\uDAEE\uEA8B\uEA8C\uEA8D"+
+            "\uEA8E\uEA8F\uDAEF\uEA90\uDAF0\uC1EA\uCCD5\uCFDD"+
+            "\uEA91\uEA92\uEA93\uEA94\uEA95\uEA96\uEA97\uEA98"+
+            "\uEA99\uEA9A\uEA9B\uEA9C\uEA9D\uD3E7\uC2A1\uEA9E"+
+            "\uDAF1\uEA9F\uEAA0\uCBE5\uEB40\uDAF2\uEB41\uCBE6"+
+            "\uD2FE\uEB42\uEB43\uEB44\uB8F4\uEB45\uEB46\uDAF3"+
+            "\uB0AF\uCFB6\uEB47\uEB48\uD5CF\uEB49\uEB4A\uEB4B"+
+            "\uEB4C\uEB4D\uEB4E\uEB4F\uEB50\uEB51\uEB52\uCBED"+
+            "\uEB53\uEB54\uEB55\uEB56\uEB57\uEB58\uEB59\uEB5A"+
+            "\uDAF4\uEB5B\uEB5C\uE3C4\uEB5D\uEB5E\uC1A5\uEB5F"+
+            "\uEB60\uF6BF\uEB61\uEB62\uF6C0\uF6C1\uC4D1\uEB63"+
+            "\uC8B8\uD1E3\uEB64\uEB65\uD0DB\uD1C5\uBCAF\uB9CD"+
+            "\uEB66\uEFF4\uEB67\uEB68\uB4C6\uD3BA\uF6C2\uB3FB"+
+            "\uEB69\uEB6A\uF6C3\uEB6B\uEB6C\uB5F1\uEB6D\uEB6E"+
+            "\uEB6F\uEB70\uEB71\uEB72\uEB73\uEB74\uEB75\uEB76"+
+            "\uF6C5\uEB77\uEB78\uEB79\uEB7A\uEB7B\uEB7C\uEB7D"+
+            "\uD3EA\uF6A7\uD1A9\uEB7E\uEB80\uEB81\uEB82\uF6A9"+
+            "\uEB83\uEB84\uEB85\uF6A8\uEB86\uEB87\uC1E3\uC0D7"+
+            "\uEB88\uB1A2\uEB89\uEB8A\uEB8B\uEB8C\uCEED\uEB8D"+
+            "\uD0E8\uF6AB\uEB8E\uEB8F\uCFF6\uEB90\uF6AA\uD5F0"+
+            "\uF6AC\uC3B9\uEB91\uEB92\uEB93\uBBF4\uF6AE\uF6AD"+
+            "\uEB94\uEB95\uEB96\uC4DE\uEB97\uEB98\uC1D8\uEB99"+
+            "\uEB9A\uEB9B\uEB9C\uEB9D\uCBAA\uEB9E\uCFBC\uEB9F"+
+            "\uEBA0\uEC40\uEC41\uEC42\uEC43\uEC44\uEC45\uEC46"+
+            "\uEC47\uEC48\uF6AF\uEC49\uEC4A\uF6B0\uEC4B\uEC4C"+
+            "\uF6B1\uEC4D\uC2B6\uEC4E\uEC4F\uEC50\uEC51\uEC52"+
+            "\uB0D4\uC5F9\uEC53\uEC54\uEC55\uEC56\uF6B2\uEC57"+
+            "\uEC58\uEC59\uEC5A\uEC5B\uEC5C\uEC5D\uEC5E\uEC5F"+
+            "\uEC60\uEC61\uEC62\uEC63\uEC64\uEC65\uEC66\uEC67"+
+            "\uEC68\uEC69\uC7E0\uF6A6\uEC6A\uEC6B\uBEB8\uEC6C"+
+            "\uEC6D\uBEB2\uEC6E\uB5E5\uEC6F\uEC70\uB7C7\uEC71"+
+            "\uBFBF\uC3D2\uC3E6\uEC72\uEC73\uD8CC\uEC74\uEC75"+
+            "\uEC76\uB8EF\uEC77\uEC78\uEC79\uEC7A\uEC7B\uEC7C"+
+            "\uEC7D\uEC7E\uEC80\uBDF9\uD1A5\uEC81\uB0D0\uEC82"+
+            "\uEC83\uEC84\uEC85\uEC86\uF7B0\uEC87\uEC88\uEC89"+
+            "\uEC8A\uEC8B\uEC8C\uEC8D\uEC8E\uF7B1\uEC8F\uEC90"+
+            "\uEC91\uEC92\uEC93\uD0AC\uEC94\uB0B0\uEC95\uEC96"+
+            "\uEC97\uF7B2\uF7B3\uEC98\uF7B4\uEC99\uEC9A\uEC9B"+
+            "\uC7CA\uEC9C\uEC9D\uEC9E\uEC9F\uECA0\uED40\uED41"+
+            "\uBECF\uED42\uED43\uF7B7\uED44\uED45\uED46\uED47"+
+            "\uED48\uED49\uED4A\uF7B6\uED4B\uB1DE\uED4C\uF7B5"+
+            "\uED4D\uED4E\uF7B8\uED4F\uF7B9\uED50\uED51\uED52"+
+            "\uED53\uED54\uED55\uED56\uED57\uED58\uED59\uED5A"+
+            "\uED5B\uED5C\uED5D\uED5E\uED5F\uED60\uED61\uED62"+
+            "\uED63\uED64\uED65\uED66\uED67\uED68\uED69\uED6A"+
+            "\uED6B\uED6C\uED6D\uED6E\uED6F\uED70\uED71\uED72"+
+            "\uED73\uED74\uED75\uED76\uED77\uED78\uED79\uED7A"+
+            "\uED7B\uED7C\uED7D\uED7E\uED80\uED81\uCEA4\uC8CD"+
+            "\uED82\uBAAB\uE8B8\uE8B9\uE8BA\uBEC2\uED83\uED84"+
+            "\uED85\uED86\uED87\uD2F4\uED88\uD4CF\uC9D8\uED89"+
+            "\uED8A\uED8B\uED8C\uED8D\uED8E\uED8F\uED90\uED91"+
+            "\uED92\uED93\uED94\uED95\uED96\uED97\uED98\uED99"+
+            "\uED9A\uED9B\uED9C\uED9D\uED9E\uED9F\uEDA0\uEE40"+
+            "\uEE41\uEE42\uEE43\uEE44\uEE45\uEE46\uEE47\uEE48"+
+            "\uEE49\uEE4A\uEE4B\uEE4C\uEE4D\uEE4E\uEE4F\uEE50"+
+            "\uEE51\uEE52\uEE53\uEE54\uEE55\uEE56\uEE57\uEE58"+
+            "\uEE59\uEE5A\uEE5B\uEE5C\uEE5D\uEE5E\uEE5F\uEE60"+
+            "\uEE61\uEE62\uEE63\uEE64\uEE65\uEE66\uEE67\uEE68"+
+            "\uEE69\uEE6A\uEE6B\uEE6C\uEE6D\uEE6E\uEE6F\uEE70"+
+            "\uEE71\uEE72\uEE73\uEE74\uEE75\uEE76\uEE77\uEE78"+
+            "\uEE79\uEE7A\uEE7B\uEE7C\uEE7D\uEE7E\uEE80\uEE81"+
+            "\uEE82\uEE83\uEE84\uEE85\uEE86\uEE87\uEE88\uEE89"+
+            "\uEE8A\uEE8B\uEE8C\uEE8D\uEE8E\uEE8F\uEE90\uEE91"+
+            "\uEE92\uEE93\uEE94\uEE95\uEE96\uEE97\uEE98\uEE99"+
+            "\uEE9A\uEE9B\uEE9C\uEE9D\uEE9E\uEE9F\uEEA0\uEF40"+
+            "\uEF41\uEF42\uEF43\uEF44\uEF45\uD2B3\uB6A5\uC7EA"+
+            "\uF1FC\uCFEE\uCBB3\uD0EB\uE7EF\uCDE7\uB9CB\uB6D9"+
+            "\uF1FD\uB0E4\uCBCC\uF1FE\uD4A4\uC2AD\uC1EC\uC6C4"+
+            "\uBEB1\uF2A1\uBCD5\uEF46\uF2A2\uF2A3\uEF47\uF2A4"+
+            "\uD2C3\uC6B5\uEF48\uCDC7\uF2A5\uEF49\uD3B1\uBFC5"+
+            "\uCCE2\uEF4A\uF2A6\uF2A7\uD1D5\uB6EE\uF2A8\uF2A9"+
+            "\uB5DF\uF2AA\uF2AB\uEF4B\uB2FC\uF2AC\uF2AD\uC8A7"+
+            "\uEF4C\uEF4D\uEF4E\uEF4F\uEF50\uEF51\uEF52\uEF53"+
+            "\uEF54\uEF55\uEF56\uEF57\uEF58\uEF59\uEF5A\uEF5B"+
+            "\uEF5C\uEF5D\uEF5E\uEF5F\uEF60\uEF61\uEF62\uEF63"+
+            "\uEF64\uEF65\uEF66\uEF67\uEF68\uEF69\uEF6A\uEF6B"+
+            "\uEF6C\uEF6D\uEF6E\uEF6F\uEF70\uEF71\uB7E7\uEF72"+
+            "\uEF73\uECA9\uECAA\uECAB\uEF74\uECAC\uEF75\uEF76"+
+            "\uC6AE\uECAD\uECAE\uEF77\uEF78\uEF79\uB7C9\uCAB3"+
+            "\uEF7A\uEF7B\uEF7C\uEF7D\uEF7E\uEF80\uEF81\uE2B8"+
+            "\uF7CF\uEF82\uEF83\uEF84\uEF85\uEF86\uEF87\uEF88"+
+            "\uEF89\uEF8A\uEF8B\uEF8C\uEF8D\uEF8E\uEF8F\uEF90"+
+            "\uEF91\uEF92\uEF93\uEF94\uEF95\uEF96\uEF97\uEF98"+
+            "\uEF99\uEF9A\uEF9B\uEF9C\uEF9D\uEF9E\uEF9F\uEFA0"+
+            "\uF040\uF041\uF042\uF043\uF044\uF7D0\uF045\uF046"+
+            "\uB2CD\uF047\uF048\uF049\uF04A\uF04B\uF04C\uF04D"+
+            "\uF04E\uF04F\uF050\uF051\uF052\uF053\uF054\uF055"+
+            "\uF056\uF057\uF058\uF059\uF05A\uF05B\uF05C\uF05D"+
+            "\uF05E\uF05F\uF060\uF061\uF062\uF063\uF7D1\uF064"+
+            "\uF065\uF066\uF067\uF068\uF069\uF06A\uF06B\uF06C"+
+            "\uF06D\uF06E\uF06F\uF070\uF071\uF072\uF073\uF074"+
+            "\uF075\uF076\uF077\uF078\uF079\uF07A\uF07B\uF07C"+
+            "\uF07D\uF07E\uF080\uF081\uF082\uF083\uF084\uF085"+
+            "\uF086\uF087\uF088\uF089\uF7D3\uF7D2\uF08A\uF08B"+
+            "\uF08C\uF08D\uF08E\uF08F\uF090\uF091\uF092\uF093"+
+            "\uF094\uF095\uF096\uE2BB\uF097\uBCA2\uF098\uE2BC"+
+            "\uE2BD\uE2BE\uE2BF\uE2C0\uE2C1\uB7B9\uD2FB\uBDA4"+
+            "\uCACE\uB1A5\uCBC7\uF099\uE2C2\uB6FC\uC8C4\uE2C3"+
+            "\uF09A\uF09B\uBDC8\uF09C\uB1FD\uE2C4\uF09D\uB6F6"+
+            "\uE2C5\uC4D9\uF09E\uF09F\uE2C6\uCFDA\uB9DD\uE2C7"+
+            "\uC0A1\uF0A0\uE2C8\uB2F6\uF140\uE2C9\uF141\uC1F3"+
+            "\uE2CA\uE2CB\uC2F8\uE2CC\uE2CD\uE2CE\uCAD7\uD8B8"+
+            "\uD9E5\uCFE3\uF142\uF143\uF144\uF145\uF146\uF147"+
+            "\uF148\uF149\uF14A\uF14B\uF14C\uF0A5\uF14D\uF14E"+
+            "\uDCB0\uF14F\uF150\uF151\uF152\uF153\uF154\uF155"+
+            "\uF156\uF157\uF158\uF159\uF15A\uF15B\uF15C\uF15D"+
+            "\uF15E\uF15F\uF160\uF161\uF162\uF163\uF164\uF165"+
+            "\uF166\uF167\uF168\uF169\uF16A\uF16B\uF16C\uF16D"+
+            "\uF16E\uF16F\uF170\uF171\uF172\uF173\uF174\uF175"+
+            "\uF176\uF177\uF178\uF179\uF17A\uF17B\uF17C\uF17D"+
+            "\uF17E\uF180\uF181\uF182\uF183\uF184\uF185\uF186"+
+            "\uF187\uF188\uF189\uF18A\uF18B\uF18C\uF18D\uF18E"+
+            "\uF18F\uF190\uF191\uF192\uF193\uF194\uF195\uF196"+
+            "\uF197\uF198\uF199\uF19A\uF19B\uF19C\uF19D\uF19E"+
+            "\uF19F\uF1A0\uF240\uF241\uF242\uF243\uF244\uF245"+
+            "\uF246\uF247\uF248\uF249\uF24A\uF24B\uF24C\uF24D"+
+            "\uF24E\uF24F\uF250\uF251\uF252\uF253\uF254\uF255"+
+            "\uF256\uF257\uF258\uF259\uF25A\uF25B\uF25C\uF25D"+
+            "\uF25E\uF25F\uF260\uF261\uF262\uF263\uF264\uF265"+
+            "\uF266\uF267\uF268\uF269\uF26A\uF26B\uF26C\uF26D"+
+            "\uF26E\uF26F\uF270\uF271\uF272\uF273\uF274\uF275"+
+            "\uF276\uF277\uF278\uF279\uF27A\uF27B\uF27C\uF27D"+
+            "\uF27E\uF280\uF281\uF282\uF283\uF284\uF285\uF286"+
+            "\uF287\uF288\uF289\uF28A\uF28B\uF28C\uF28D\uF28E"+
+            "\uF28F\uF290\uF291\uF292\uF293\uF294\uF295\uF296"+
+            "\uF297\uF298\uF299\uF29A\uF29B\uF29C\uF29D\uF29E"+
+            "\uF29F\uF2A0\uF340\uF341\uF342\uF343\uF344\uF345"+
+            "\uF346\uF347\uF348\uF349\uF34A\uF34B\uF34C\uF34D"+
+            "\uF34E\uF34F\uF350\uF351\uC2ED\uD4A6\uCDD4\uD1B1"+
+            "\uB3DB\uC7FD\uF352\uB2B5\uC2BF\uE6E0\uCABB\uE6E1"+
+            "\uE6E2\uBED4\uE6E3\uD7A4\uCDD5\uE6E5\uBCDD\uE6E4"+
+            "\uE6E6\uE6E7\uC2EE\uF353\uBDBE\uE6E8\uC2E6\uBAA7"+
+            "\uE6E9\uF354\uE6EA\uB3D2\uD1E9\uF355\uF356\uBFA5"+
+            "\uE6EB\uC6EF\uE6EC\uE6ED\uF357\uF358\uE6EE\uC6AD"+
+            "\uE6EF\uF359\uC9A7\uE6F0\uE6F1\uE6F2\uE5B9\uE6F3"+
+            "\uE6F4\uC2E2\uE6F5\uE6F6\uD6E8\uE6F7\uF35A\uE6F8"+
+            "\uB9C7\uF35B\uF35C\uF35D\uF35E\uF35F\uF360\uF361"+
+            "\uF7BB\uF7BA\uF362\uF363\uF364\uF365\uF7BE\uF7BC"+
+            "\uBAA1\uF366\uF7BF\uF367\uF7C0\uF368\uF369\uF36A"+
+            "\uF7C2\uF7C1\uF7C4\uF36B\uF36C\uF7C3\uF36D\uF36E"+
+            "\uF36F\uF370\uF371\uF7C5\uF7C6\uF372\uF373\uF374"+
+            "\uF375\uF7C7\uF376\uCBE8\uF377\uF378\uF379\uF37A"+
+            "\uB8DF\uF37B\uF37C\uF37D\uF37E\uF380\uF381\uF7D4"+
+            "\uF382\uF7D5\uF383\uF384\uF385\uF386\uF7D6\uF387"+
+            "\uF388\uF389\uF38A\uF7D8\uF38B\uF7DA\uF38C\uF7D7"+
+            "\uF38D\uF38E\uF38F\uF390\uF391\uF392\uF393\uF394"+
+            "\uF395\uF7DB\uF396\uF7D9\uF397\uF398\uF399\uF39A";
+
+        private final static String innerIndex7=
+            "\uF39B\uF39C\uF39D\uD7D7\uF39E\uF39F\uF3A0\uF440"+
+            "\uF7DC\uF441\uF442\uF443\uF444\uF445\uF446\uF7DD"+
+            "\uF447\uF448\uF449\uF7DE\uF44A\uF44B\uF44C\uF44D"+
+            "\uF44E\uF44F\uF450\uF451\uF452\uF453\uF454\uF7DF"+
+            "\uF455\uF456\uF457\uF7E0\uF458\uF459\uF45A\uF45B"+
+            "\uF45C\uF45D\uF45E\uF45F\uF460\uF461\uF462\uDBCB"+
+            "\uF463\uF464\uD8AA\uF465\uF466\uF467\uF468\uF469"+
+            "\uF46A\uF46B\uF46C\uE5F7\uB9ED\uF46D\uF46E\uF46F"+
+            "\uF470\uBFFD\uBBEA\uF7C9\uC6C7\uF7C8\uF471\uF7CA"+
+            "\uF7CC\uF7CB\uF472\uF473\uF474\uF7CD\uF475\uCEBA"+
+            "\uF476\uF7CE\uF477\uF478\uC4A7\uF479\uF47A\uF47B"+
+            "\uF47C\uF47D\uF47E\uF480\uF481\uF482\uF483\uF484"+
+            "\uF485\uF486\uF487\uF488\uF489\uF48A\uF48B\uF48C"+
+            "\uF48D\uF48E\uF48F\uF490\uF491\uF492\uF493\uF494"+
+            "\uF495\uF496\uF497\uF498\uF499\uF49A\uF49B\uF49C"+
+            "\uF49D\uF49E\uF49F\uF4A0\uF540\uF541\uF542\uF543"+
+            "\uF544\uF545\uF546\uF547\uF548\uF549\uF54A\uF54B"+
+            "\uF54C\uF54D\uF54E\uF54F\uF550\uF551\uF552\uF553"+
+            "\uF554\uF555\uF556\uF557\uF558\uF559\uF55A\uF55B"+
+            "\uF55C\uF55D\uF55E\uF55F\uF560\uF561\uF562\uF563"+
+            "\uF564\uF565\uF566\uF567\uF568\uF569\uF56A\uF56B"+
+            "\uF56C\uF56D\uF56E\uF56F\uF570\uF571\uF572\uF573"+
+            "\uF574\uF575\uF576\uF577\uF578\uF579\uF57A\uF57B"+
+            "\uF57C\uF57D\uF57E\uF580\uF581\uF582\uF583\uF584"+
+            "\uF585\uF586\uF587\uF588\uF589\uF58A\uF58B\uF58C"+
+            "\uF58D\uF58E\uF58F\uF590\uF591\uF592\uF593\uF594"+
+            "\uF595\uF596\uF597\uF598\uF599\uF59A\uF59B\uF59C"+
+            "\uF59D\uF59E\uF59F\uF5A0\uF640\uF641\uF642\uF643"+
+            "\uF644\uF645\uF646\uF647\uF648\uF649\uF64A\uF64B"+
+            "\uF64C\uF64D\uF64E\uF64F\uF650\uF651\uF652\uF653"+
+            "\uF654\uF655\uF656\uF657\uF658\uF659\uF65A\uF65B"+
+            "\uF65C\uF65D\uF65E\uF65F\uF660\uF661\uF662\uF663"+
+            "\uF664\uF665\uF666\uF667\uF668\uF669\uF66A\uF66B"+
+            "\uF66C\uF66D\uF66E\uF66F\uF670\uF671\uF672\uF673"+
+            "\uF674\uF675\uF676\uF677\uF678\uF679\uF67A\uF67B"+
+            "\uF67C\uF67D\uF67E\uF680\uF681\uF682\uF683\uF684"+
+            "\uF685\uF686\uF687\uF688\uF689\uF68A\uF68B\uF68C"+
+            "\uF68D\uF68E\uF68F\uF690\uF691\uF692\uF693\uF694"+
+            "\uF695\uF696\uF697\uF698\uF699\uF69A\uF69B\uF69C"+
+            "\uF69D\uF69E\uF69F\uF6A0\uF740\uF741\uF742\uF743"+
+            "\uF744\uF745\uF746\uF747\uF748\uF749\uF74A\uF74B"+
+            "\uF74C\uF74D\uF74E\uF74F\uF750\uF751\uF752\uF753"+
+            "\uF754\uF755\uF756\uF757\uF758\uF759\uF75A\uF75B"+
+            "\uF75C\uF75D\uF75E\uF75F\uF760\uF761\uF762\uF763"+
+            "\uF764\uF765\uF766\uF767\uF768\uF769\uF76A\uF76B"+
+            "\uF76C\uF76D\uF76E\uF76F\uF770\uF771\uF772\uF773"+
+            "\uF774\uF775\uF776\uF777\uF778\uF779\uF77A\uF77B"+
+            "\uF77C\uF77D\uF77E\uF780\uD3E3\uF781\uF782\uF6CF"+
+            "\uF783\uC2B3\uF6D0\uF784\uF785\uF6D1\uF6D2\uF6D3"+
+            "\uF6D4\uF786\uF787\uF6D6\uF788\uB1AB\uF6D7\uF789"+
+            "\uF6D8\uF6D9\uF6DA\uF78A\uF6DB\uF6DC\uF78B\uF78C"+
+            "\uF78D\uF78E\uF6DD\uF6DE\uCFCA\uF78F\uF6DF\uF6E0"+
+            "\uF6E1\uF6E2\uF6E3\uF6E4\uC0F0\uF6E5\uF6E6\uF6E7"+
+            "\uF6E8\uF6E9\uF790\uF6EA\uF791\uF6EB\uF6EC\uF792"+
+            "\uF6ED\uF6EE\uF6EF\uF6F0\uF6F1\uF6F2\uF6F3\uF6F4"+
+            "\uBEA8\uF793\uF6F5\uF6F6\uF6F7\uF6F8\uF794\uF795"+
+            "\uF796\uF797\uF798\uC8FA\uF6F9\uF6FA\uF6FB\uF6FC"+
+            "\uF799\uF79A\uF6FD\uF6FE\uF7A1\uF7A2\uF7A3\uF7A4"+
+            "\uF7A5\uF79B\uF79C\uF7A6\uF7A7\uF7A8\uB1EE\uF7A9"+
+            "\uF7AA\uF7AB\uF79D\uF79E\uF7AC\uF7AD\uC1DB\uF7AE"+
+            "\uF79F\uF7A0\uF7AF\uF840\uF841\uF842\uF843\uF844"+
+            "\uF845\uF846\uF847\uF848\uF849\uF84A\uF84B\uF84C"+
+            "\uF84D\uF84E\uF84F\uF850\uF851\uF852\uF853\uF854"+
+            "\uF855\uF856\uF857\uF858\uF859\uF85A\uF85B\uF85C"+
+            "\uF85D\uF85E\uF85F\uF860\uF861\uF862\uF863\uF864"+
+            "\uF865\uF866\uF867\uF868\uF869\uF86A\uF86B\uF86C"+
+            "\uF86D\uF86E\uF86F\uF870\uF871\uF872\uF873\uF874"+
+            "\uF875\uF876\uF877\uF878\uF879\uF87A\uF87B\uF87C"+
+            "\uF87D\uF87E\uF880\uF881\uF882\uF883\uF884\uF885"+
+            "\uF886\uF887\uF888\uF889\uF88A\uF88B\uF88C\uF88D"+
+            "\uF88E\uF88F\uF890\uF891\uF892\uF893\uF894\uF895"+
+            "\uF896\uF897\uF898\uF899\uF89A\uF89B\uF89C\uF89D"+
+            "\uF89E\uF89F\uF8A0\uF940\uF941\uF942\uF943\uF944"+
+            "\uF945\uF946\uF947\uF948\uF949\uF94A\uF94B\uF94C"+
+            "\uF94D\uF94E\uF94F\uF950\uF951\uF952\uF953\uF954"+
+            "\uF955\uF956\uF957\uF958\uF959\uF95A\uF95B\uF95C"+
+            "\uF95D\uF95E\uF95F\uF960\uF961\uF962\uF963\uF964"+
+            "\uF965\uF966\uF967\uF968\uF969\uF96A\uF96B\uF96C"+
+            "\uF96D\uF96E\uF96F\uF970\uF971\uF972\uF973\uF974"+
+            "\uF975\uF976\uF977\uF978\uF979\uF97A\uF97B\uF97C"+
+            "\uF97D\uF97E\uF980\uF981\uF982\uF983\uF984\uF985"+
+            "\uF986\uF987\uF988\uF989\uF98A\uF98B\uF98C\uF98D"+
+            "\uF98E\uF98F\uF990\uF991\uF992\uF993\uF994\uF995"+
+            "\uF996\uF997\uF998\uF999\uF99A\uF99B\uF99C\uF99D"+
+            "\uF99E\uF99F\uF9A0\uFA40\uFA41\uFA42\uFA43\uFA44"+
+            "\uFA45\uFA46\uFA47\uFA48\uFA49\uFA4A\uFA4B\uFA4C"+
+            "\uFA4D\uFA4E\uFA4F\uFA50\uFA51\uFA52\uFA53\uFA54"+
+            "\uFA55\uFA56\uFA57\uFA58\uFA59\uFA5A\uFA5B\uFA5C"+
+            "\uFA5D\uFA5E\uFA5F\uFA60\uFA61\uFA62\uFA63\uFA64"+
+            "\uFA65\uFA66\uFA67\uFA68\uFA69\uFA6A\uFA6B\uFA6C"+
+            "\uFA6D\uFA6E\uFA6F\uFA70\uFA71\uFA72\uFA73\uFA74"+
+            "\uFA75\uFA76\uFA77\uFA78\uFA79\uFA7A\uFA7B\uFA7C"+
+            "\uFA7D\uFA7E\uFA80\uFA81\uFA82\uFA83\uFA84\uFA85"+
+            "\uFA86\uFA87\uFA88\uFA89\uFA8A\uFA8B\uFA8C\uFA8D"+
+            "\uFA8E\uFA8F\uFA90\uFA91\uFA92\uFA93\uFA94\uFA95"+
+            "\uFA96\uFA97\uFA98\uFA99\uFA9A\uFA9B\uFA9C\uFA9D"+
+            "\uFA9E\uFA9F\uFAA0\uFB40\uFB41\uFB42\uFB43\uFB44"+
+            "\uFB45\uFB46\uFB47\uFB48\uFB49\uFB4A\uFB4B\uFB4C"+
+            "\uFB4D\uFB4E\uFB4F\uFB50\uFB51\uFB52\uFB53\uFB54"+
+            "\uFB55\uFB56\uFB57\uFB58\uFB59\uFB5A\uFB5B\uC4F1"+
+            "\uF0AF\uBCA6\uF0B0\uC3F9\uFB5C\uC5B8\uD1BB\uFB5D"+
+            "\uF0B1\uF0B2\uF0B3\uF0B4\uF0B5\uD1BC\uFB5E\uD1EC"+
+            "\uFB5F\uF0B7\uF0B6\uD4A7\uFB60\uCDD2\uF0B8\uF0BA"+
+            "\uF0B9\uF0BB\uF0BC\uFB61\uFB62\uB8EB\uF0BD\uBAE8"+
+            "\uFB63\uF0BE\uF0BF\uBEE9\uF0C0\uB6EC\uF0C1\uF0C2"+
+            "\uF0C3\uF0C4\uC8B5\uF0C5\uF0C6\uFB64\uF0C7\uC5F4"+
+            "\uFB65\uF0C8\uFB66\uFB67\uFB68\uF0C9\uFB69\uF0CA"+
+            "\uF7BD\uFB6A\uF0CB\uF0CC\uF0CD\uFB6B\uF0CE\uFB6C"+
+            "\uFB6D\uFB6E\uFB6F\uF0CF\uBAD7\uFB70\uF0D0\uF0D1"+
+            "\uF0D2\uF0D3\uF0D4\uF0D5\uF0D6\uF0D8\uFB71\uFB72"+
+            "\uD3A5\uF0D7\uFB73\uF0D9\uFB74\uFB75\uFB76\uFB77"+
+            "\uFB78\uFB79\uFB7A\uFB7B\uFB7C\uFB7D\uF5BA\uC2B9"+
+            "\uFB7E\uFB80\uF7E4\uFB81\uFB82\uFB83\uFB84\uF7E5"+
+            "\uF7E6\uFB85\uFB86\uF7E7\uFB87\uFB88\uFB89\uFB8A"+
+            "\uFB8B\uFB8C\uF7E8\uC2B4\uFB8D\uFB8E\uFB8F\uFB90"+
+            "\uFB91\uFB92\uFB93\uFB94\uFB95\uF7EA\uFB96\uF7EB"+
+            "\uFB97\uFB98\uFB99\uFB9A\uFB9B\uFB9C\uC2F3\uFB9D"+
+            "\uFB9E\uFB9F\uFBA0\uFC40\uFC41\uFC42\uFC43\uFC44"+
+            "\uFC45\uFC46\uFC47\uFC48\uF4F0\uFC49\uFC4A\uFC4B"+
+            "\uF4EF\uFC4C\uFC4D\uC2E9\uFC4E\uF7E1\uF7E2\uFC4F"+
+            "\uFC50\uFC51\uFC52\uFC53\uBBC6\uFC54\uFC55\uFC56"+
+            "\uFC57\uD9E4\uFC58\uFC59\uFC5A\uCAF2\uC0E8\uF0A4"+
+            "\uFC5B\uBADA\uFC5C\uFC5D\uC7AD\uFC5E\uFC5F\uFC60"+
+            "\uC4AC\uFC61\uFC62\uF7EC\uF7ED\uF7EE\uFC63\uF7F0"+
+            "\uF7EF\uFC64\uF7F1\uFC65\uFC66\uF7F4\uFC67\uF7F3"+
+            "\uFC68\uF7F2\uF7F5\uFC69\uFC6A\uFC6B\uFC6C\uF7F6"+
+            "\uFC6D\uFC6E\uFC6F\uFC70\uFC71\uFC72\uFC73\uFC74"+
+            "\uFC75\uEDE9\uFC76\uEDEA\uEDEB\uFC77\uF6BC\uFC78"+
+            "\uFC79\uFC7A\uFC7B\uFC7C\uFC7D\uFC7E\uFC80\uFC81"+
+            "\uFC82\uFC83\uFC84\uF6BD\uFC85\uF6BE\uB6A6\uFC86"+
+            "\uD8BE\uFC87\uFC88\uB9C4\uFC89\uFC8A\uFC8B\uD8BB"+
+            "\uFC8C\uDCB1\uFC8D\uFC8E\uFC8F\uFC90\uFC91\uFC92"+
+            "\uCAF3\uFC93\uF7F7\uFC94\uFC95\uFC96\uFC97\uFC98"+
+            "\uFC99\uFC9A\uFC9B\uFC9C\uF7F8\uFC9D\uFC9E\uF7F9"+
+            "\uFC9F\uFCA0\uFD40\uFD41\uFD42\uFD43\uFD44\uF7FB"+
+            "\uFD45\uF7FA\uFD46\uB1C7\uFD47\uF7FC\uF7FD\uFD48"+
+            "\uFD49\uFD4A\uFD4B\uFD4C\uF7FE\uFD4D\uFD4E\uFD4F"+
+            "\uFD50\uFD51\uFD52\uFD53\uFD54\uFD55\uFD56\uFD57"+
+            "\uC6EB\uECB4\uFD58\uFD59\uFD5A\uFD5B\uFD5C\uFD5D"+
+            "\uFD5E\uFD5F\uFD60\uFD61\uFD62\uFD63\uFD64\uFD65"+
+            "\uFD66\uFD67\uFD68\uFD69\uFD6A\uFD6B\uFD6C\uFD6D"+
+            "\uFD6E\uFD6F\uFD70\uFD71\uFD72\uFD73\uFD74\uFD75"+
+            "\uFD76\uFD77\uFD78\uFD79\uFD7A\uFD7B\uFD7C\uFD7D"+
+            "\uFD7E\uFD80\uFD81\uFD82\uFD83\uFD84\uFD85\uB3DD"+
+            "\uF6B3\uFD86\uFD87\uF6B4\uC1E4\uF6B5\uF6B6\uF6B7"+
+            "\uF6B8\uF6B9\uF6BA\uC8A3\uF6BB\uFD88\uFD89\uFD8A"+
+            "\uFD8B\uFD8C\uFD8D\uFD8E\uFD8F\uFD90\uFD91\uFD92"+
+            "\uFD93\uC1FA\uB9A8\uEDE8\uFD94\uFD95\uFD96\uB9EA"+
+            "\uD9DF\uFD97\uFD98\uFD99\uFD9A\uFD9B\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uAAA1\uAAA2\uAAA3\uAAA4\uAAA5\uAAA6\uAAA7\uAAA8"+
+            "\uAAA9\uAAAA\uAAAB\uAAAC\uAAAD\uAAAE\uAAAF\uAAB0"+
+            "\uAAB1\uAAB2\uAAB3\uAAB4\uAAB5\uAAB6\uAAB7\uAAB8"+
+            "\uAAB9\uAABA\uAABB\uAABC\uAABD\uAABE\uAABF\uAAC0"+
+            "\uAAC1\uAAC2\uAAC3\uAAC4\uAAC5\uAAC6\uAAC7\uAAC8"+
+            "\uAAC9\uAACA\uAACB\uAACC\uAACD\uAACE\uAACF\uAAD0"+
+            "\uAAD1\uAAD2\uAAD3\uAAD4\uAAD5\uAAD6\uAAD7\uAAD8"+
+            "\uAAD9\uAADA\uAADB\uAADC\uAADD\uAADE\uAADF\uAAE0"+
+            "\uAAE1\uAAE2\uAAE3\uAAE4\uAAE5\uAAE6\uAAE7\uAAE8"+
+            "\uAAE9\uAAEA\uAAEB\uAAEC\uAAED\uAAEE\uAAEF\uAAF0"+
+            "\uAAF1\uAAF2\uAAF3\uAAF4\uAAF5\uAAF6\uAAF7\uAAF8"+
+            "\uAAF9\uAAFA\uAAFB\uAAFC\uAAFD\uAAFE\uABA1\uABA2"+
+            "\uABA3\uABA4\uABA5\uABA6\uABA7\uABA8\uABA9\uABAA"+
+            "\uABAB\uABAC\uABAD\uABAE\uABAF\uABB0\uABB1\uABB2"+
+            "\uABB3\uABB4\uABB5\uABB6\uABB7\uABB8\uABB9\uABBA"+
+            "\uABBB\uABBC\uABBD\uABBE\uABBF\uABC0\uABC1\uABC2"+
+            "\uABC3\uABC4\uABC5\uABC6\uABC7\uABC8\uABC9\uABCA"+
+            "\uABCB\uABCC\uABCD\uABCE\uABCF\uABD0\uABD1\uABD2"+
+            "\uABD3\uABD4\uABD5\uABD6\uABD7\uABD8\uABD9\uABDA"+
+            "\uABDB\uABDC\uABDD\uABDE\uABDF\uABE0\uABE1\uABE2"+
+            "\uABE3\uABE4\uABE5\uABE6\uABE7\uABE8\uABE9\uABEA"+
+            "\uABEB\uABEC\uABED\uABEE\uABEF\uABF0\uABF1\uABF2"+
+            "\uABF3\uABF4\uABF5\uABF6\uABF7\uABF8\uABF9\uABFA"+
+            "\uABFB\uABFC\uABFD\uABFE\uACA1\uACA2\uACA3\uACA4"+
+            "\uACA5\uACA6\uACA7\uACA8\uACA9\uACAA\uACAB\uACAC"+
+            "\uACAD\uACAE\uACAF\uACB0\uACB1\uACB2\uACB3\uACB4"+
+            "\uACB5\uACB6\uACB7\uACB8\uACB9\uACBA\uACBB\uACBC"+
+            "\uACBD\uACBE\uACBF\uACC0\uACC1\uACC2\uACC3\uACC4"+
+            "\uACC5\uACC6\uACC7\uACC8\uACC9\uACCA\uACCB\uACCC"+
+            "\uACCD\uACCE\uACCF\uACD0\uACD1\uACD2\uACD3\uACD4"+
+            "\uACD5\uACD6\uACD7\uACD8\uACD9\uACDA\uACDB\uACDC"+
+            "\uACDD\uACDE\uACDF\uACE0\uACE1\uACE2\uACE3\uACE4"+
+            "\uACE5\uACE6\uACE7\uACE8\uACE9\uACEA\uACEB\uACEC"+
+            "\uACED\uACEE\uACEF\uACF0\uACF1\uACF2\uACF3\uACF4"+
+            "\uACF5\uACF6\uACF7\uACF8\uACF9\uACFA\uACFB\uACFC"+
+            "\uACFD\uACFE\uADA1\uADA2\uADA3\uADA4\uADA5\uADA6"+
+            "\uADA7\uADA8\uADA9\uADAA\uADAB\uADAC\uADAD\uADAE"+
+            "\uADAF\uADB0\uADB1\uADB2\uADB3\uADB4\uADB5\uADB6"+
+            "\uADB7\uADB8\uADB9\uADBA\uADBB\uADBC\uADBD\uADBE"+
+            "\uADBF\uADC0\uADC1\uADC2\uADC3\uADC4\uADC5\uADC6"+
+            "\uADC7\uADC8\uADC9\uADCA\uADCB\uADCC\uADCD\uADCE"+
+            "\uADCF\uADD0\uADD1\uADD2\uADD3\uADD4\uADD5\uADD6"+
+            "\uADD7\uADD8\uADD9\uADDA\uADDB\uADDC\uADDD\uADDE"+
+            "\uADDF\uADE0\uADE1\uADE2\uADE3\uADE4\uADE5\uADE6"+
+            "\uADE7\uADE8\uADE9\uADEA\uADEB\uADEC\uADED\uADEE"+
+            "\uADEF\uADF0\uADF1\uADF2\uADF3\uADF4\uADF5\uADF6"+
+            "\uADF7\uADF8\uADF9\uADFA\uADFB\uADFC\uADFD\uADFE"+
+            "\uAEA1\uAEA2\uAEA3\uAEA4\uAEA5\uAEA6\uAEA7\uAEA8"+
+            "\uAEA9\uAEAA\uAEAB\uAEAC\uAEAD\uAEAE\uAEAF\uAEB0"+
+            "\uAEB1\uAEB2\uAEB3\uAEB4\uAEB5\uAEB6\uAEB7\uAEB8"+
+            "\uAEB9\uAEBA\uAEBB\uAEBC\uAEBD\uAEBE\uAEBF\uAEC0"+
+            "\uAEC1\uAEC2\uAEC3\uAEC4\uAEC5\uAEC6\uAEC7\uAEC8"+
+            "\uAEC9\uAECA\uAECB\uAECC\uAECD\uAECE\uAECF\uAED0"+
+            "\uAED1\uAED2\uAED3\uAED4\uAED5\uAED6\uAED7\uAED8"+
+            "\uAED9\uAEDA\uAEDB\uAEDC\uAEDD\uAEDE\uAEDF\uAEE0"+
+            "\uAEE1\uAEE2\uAEE3\uAEE4\uAEE5\uAEE6\uAEE7\uAEE8"+
+            "\uAEE9\uAEEA\uAEEB\uAEEC\uAEED\uAEEE\uAEEF\uAEF0"+
+            "\uAEF1\uAEF2\uAEF3\uAEF4\uAEF5\uAEF6\uAEF7\uAEF8"+
+            "\uAEF9\uAEFA\uAEFB\uAEFC\uAEFD\uAEFE\uAFA1\uAFA2"+
+            "\uAFA3\uAFA4\uAFA5\uAFA6\uAFA7\uAFA8\uAFA9\uAFAA"+
+            "\uAFAB\uAFAC\uAFAD\uAFAE\uAFAF\uAFB0\uAFB1\uAFB2"+
+            "\uAFB3\uAFB4\uAFB5\uAFB6\uAFB7\uAFB8\uAFB9\uAFBA"+
+            "\uAFBB\uAFBC\uAFBD\uAFBE\uAFBF\uAFC0\uAFC1\uAFC2"+
+            "\uAFC3\uAFC4\uAFC5\uAFC6\uAFC7\uAFC8\uAFC9\uAFCA"+
+            "\uAFCB\uAFCC\uAFCD\uAFCE\uAFCF\uAFD0\uAFD1\uAFD2"+
+            "\uAFD3\uAFD4\uAFD5\uAFD6\uAFD7\uAFD8\uAFD9\uAFDA"+
+            "\uAFDB\uAFDC\uAFDD\uAFDE\uAFDF\uAFE0\uAFE1\uAFE2"+
+            "\uAFE3\uAFE4\uAFE5\uAFE6\uAFE7\uAFE8\uAFE9\uAFEA"+
+            "\uAFEB\uAFEC\uAFED\uAFEE\uAFEF\uAFF0\uAFF1\uAFF2"+
+            "\uAFF3\uAFF4\uAFF5\uAFF6\uAFF7\uAFF8\uAFF9\uAFFA"+
+            "\uAFFB\uAFFC\uAFFD\uAFFE\uF8A1\uF8A2\uF8A3\uF8A4"+
+            "\uF8A5\uF8A6\uF8A7\uF8A8\uF8A9\uF8AA\uF8AB\uF8AC"+
+            "\uF8AD\uF8AE\uF8AF\uF8B0\uF8B1\uF8B2\uF8B3\uF8B4"+
+            "\uF8B5\uF8B6\uF8B7\uF8B8\uF8B9\uF8BA\uF8BB\uF8BC"+
+            "\uF8BD\uF8BE\uF8BF\uF8C0\uF8C1\uF8C2\uF8C3\uF8C4"+
+            "\uF8C5\uF8C6\uF8C7\uF8C8\uF8C9\uF8CA\uF8CB\uF8CC"+
+            "\uF8CD\uF8CE\uF8CF\uF8D0\uF8D1\uF8D2\uF8D3\uF8D4"+
+            "\uF8D5\uF8D6\uF8D7\uF8D8\uF8D9\uF8DA\uF8DB\uF8DC"+
+            "\uF8DD\uF8DE\uF8DF\uF8E0\uF8E1\uF8E2\uF8E3\uF8E4"+
+            "\uF8E5\uF8E6\uF8E7\uF8E8\uF8E9\uF8EA\uF8EB\uF8EC"+
+            "\uF8ED\uF8EE\uF8EF\uF8F0\uF8F1\uF8F2\uF8F3\uF8F4"+
+            "\uF8F5\uF8F6\uF8F7\uF8F8\uF8F9\uF8FA\uF8FB\uF8FC"+
+            "\uF8FD\uF8FE\uF9A1\uF9A2\uF9A3\uF9A4\uF9A5\uF9A6"+
+            "\uF9A7\uF9A8\uF9A9\uF9AA\uF9AB\uF9AC\uF9AD\uF9AE"+
+            "\uF9AF\uF9B0\uF9B1\uF9B2\uF9B3\uF9B4\uF9B5\uF9B6"+
+            "\uF9B7\uF9B8\uF9B9\uF9BA\uF9BB\uF9BC\uF9BD\uF9BE"+
+            "\uF9BF\uF9C0\uF9C1\uF9C2\uF9C3\uF9C4\uF9C5\uF9C6"+
+            "\uF9C7\uF9C8\uF9C9\uF9CA\uF9CB\uF9CC\uF9CD\uF9CE"+
+            "\uF9CF\uF9D0\uF9D1\uF9D2\uF9D3\uF9D4\uF9D5\uF9D6"+
+            "\uF9D7\uF9D8\uF9D9\uF9DA\uF9DB\uF9DC\uF9DD\uF9DE"+
+            "\uF9DF\uF9E0\uF9E1\uF9E2\uF9E3\uF9E4\uF9E5\uF9E6"+
+            "\uF9E7\uF9E8\uF9E9\uF9EA\uF9EB\uF9EC\uF9ED\uF9EE"+
+            "\uF9EF\uF9F0\uF9F1\uF9F2\uF9F3\uF9F4\uF9F5\uF9F6"+
+            "\uF9F7\uF9F8\uF9F9\uF9FA\uF9FB\uF9FC\uF9FD\uF9FE"+
+            "\uFAA1\uFAA2\uFAA3\uFAA4\uFAA5\uFAA6\uFAA7\uFAA8"+
+            "\uFAA9\uFAAA\uFAAB\uFAAC\uFAAD\uFAAE\uFAAF\uFAB0"+
+            "\uFAB1\uFAB2\uFAB3\uFAB4\uFAB5\uFAB6\uFAB7\uFAB8"+
+            "\uFAB9\uFABA\uFABB\uFABC\uFABD\uFABE\uFABF\uFAC0"+
+            "\uFAC1\uFAC2\uFAC3\uFAC4\uFAC5\uFAC6\uFAC7\uFAC8"+
+            "\uFAC9\uFACA\uFACB\uFACC\uFACD\uFACE\uFACF\uFAD0"+
+            "\uFAD1\uFAD2\uFAD3\uFAD4\uFAD5\uFAD6\uFAD7\uFAD8"+
+            "\uFAD9\uFADA\uFADB\uFADC\uFADD\uFADE\uFADF\uFAE0"+
+            "\uFAE1\uFAE2\uFAE3\uFAE4\uFAE5\uFAE6\uFAE7\uFAE8"+
+            "\uFAE9\uFAEA\uFAEB\uFAEC\uFAED\uFAEE\uFAEF\uFAF0"+
+            "\uFAF1\uFAF2\uFAF3\uFAF4\uFAF5\uFAF6\uFAF7\uFAF8"+
+            "\uFAF9\uFAFA\uFAFB\uFAFC\uFAFD\uFAFE\uFBA1\uFBA2"+
+            "\uFBA3\uFBA4\uFBA5\uFBA6\uFBA7\uFBA8\uFBA9\uFBAA"+
+            "\uFBAB\uFBAC\uFBAD\uFBAE\uFBAF\uFBB0\uFBB1\uFBB2"+
+            "\uFBB3\uFBB4\uFBB5\uFBB6\uFBB7\uFBB8\uFBB9\uFBBA"+
+            "\uFBBB\uFBBC\uFBBD\uFBBE\uFBBF\uFBC0\uFBC1\uFBC2"+
+            "\uFBC3\uFBC4\uFBC5\uFBC6\uFBC7\uFBC8\uFBC9\uFBCA"+
+            "\uFBCB\uFBCC\uFBCD\uFBCE\uFBCF\uFBD0\uFBD1\uFBD2"+
+            "\uFBD3\uFBD4\uFBD5\uFBD6\uFBD7\uFBD8\uFBD9\uFBDA"+
+            "\uFBDB\uFBDC\uFBDD\uFBDE\uFBDF\uFBE0\uFBE1\uFBE2"+
+            "\uFBE3\uFBE4\uFBE5\uFBE6\uFBE7\uFBE8\uFBE9\uFBEA"+
+            "\uFBEB\uFBEC\uFBED\uFBEE\uFBEF\uFBF0\uFBF1\uFBF2"+
+            "\uFBF3\uFBF4\uFBF5\uFBF6\uFBF7\uFBF8\uFBF9\uFBFA"+
+            "\uFBFB\uFBFC\uFBFD\uFBFE\uFCA1\uFCA2\uFCA3\uFCA4"+
+            "\uFCA5\uFCA6\uFCA7\uFCA8\uFCA9\uFCAA\uFCAB\uFCAC"+
+            "\uFCAD\uFCAE\uFCAF\uFCB0\uFCB1\uFCB2\uFCB3\uFCB4"+
+            "\uFCB5\uFCB6\uFCB7\uFCB8\uFCB9\uFCBA\uFCBB\uFCBC"+
+            "\uFCBD\uFCBE\uFCBF\uFCC0\uFCC1\uFCC2\uFCC3\uFCC4"+
+            "\uFCC5\uFCC6\uFCC7\uFCC8\uFCC9\uFCCA\uFCCB\uFCCC"+
+            "\uFCCD\uFCCE\uFCCF\uFCD0\uFCD1\uFCD2\uFCD3\uFCD4"+
+            "\uFCD5\uFCD6\uFCD7\uFCD8\uFCD9\uFCDA\uFCDB\uFCDC"+
+            "\uFCDD\uFCDE\uFCDF\uFCE0\uFCE1\uFCE2\uFCE3\uFCE4"+
+            "\uFCE5\uFCE6\uFCE7\uFCE8\uFCE9\uFCEA\uFCEB\uFCEC"+
+            "\uFCED\uFCEE\uFCEF\uFCF0\uFCF1\uFCF2\uFCF3\uFCF4"+
+            "\uFCF5\uFCF6\uFCF7\uFCF8\uFCF9\uFCFA\uFCFB\uFCFC"+
+            "\uFCFD\uFCFE\uFDA1\uFDA2\uFDA3\uFDA4\uFDA5\uFDA6"+
+            "\uFDA7\uFDA8\uFDA9\uFDAA\uFDAB\uFDAC\uFDAD\uFDAE"+
+            "\uFDAF\uFDB0\uFDB1\uFDB2\uFDB3\uFDB4\uFDB5\uFDB6"+
+            "\uFDB7\uFDB8\uFDB9\uFDBA\uFDBB\uFDBC\uFDBD\uFDBE"+
+            "\uFDBF\uFDC0\uFDC1\uFDC2\uFDC3\uFDC4\uFDC5\uFDC6"+
+            "\uFDC7\uFDC8\uFDC9\uFDCA\uFDCB\uFDCC\uFDCD\uFDCE"+
+            "\uFDCF\uFDD0\uFDD1\uFDD2\uFDD3\uFDD4\uFDD5\uFDD6"+
+            "\uFDD7\uFDD8\uFDD9\uFDDA\uFDDB\uFDDC\uFDDD\uFDDE"+
+            "\uFDDF\uFDE0\uFDE1\uFDE2\uFDE3\uFDE4\uFDE5\uFDE6"+
+            "\uFDE7\uFDE8\uFDE9\uFDEA\uFDEB\uFDEC\uFDED\uFDEE"+
+            "\uFDEF\uFDF0\uFDF1\uFDF2\uFDF3\uFDF4\uFDF5\uFDF6"+
+            "\uFDF7\uFDF8\uFDF9\uFDFA\uFDFB\uFDFC\uFDFD\uFDFE"+
+            "\uFEA1\uFEA2\uFEA3\uFEA4\uFEA5\uFEA6\uFEA7\uFEA8"+
+            "\uFEA9\uFEAA\uFEAB\uFEAC\uFEAD\uFEAE\uFEAF\uFEB0"+
+            "\uFEB1\uFEB2\uFEB3\uFEB4\uFEB5\uFEB6\uFEB7\uFEB8"+
+            "\uFEB9\uFEBA\uFEBB\uFEBC\uFEBD\uFEBE\uFEBF\uFEC0"+
+            "\uFEC1\uFEC2\uFEC3\uFEC4\uFEC5\uFEC6\uFEC7\uFEC8"+
+            "\uFEC9\uFECA\uFECB\uFECC\uFECD\uFECE\uFECF\uFED0"+
+            "\uFED1\uFED2\uFED3\uFED4\uFED5\uFED6\uFED7\uFED8"+
+            "\uFED9\uFEDA\uFEDB\uFEDC\uFEDD\uFEDE\uFEDF\uFEE0"+
+            "\uFEE1\uFEE2\uFEE3\uFEE4\uFEE5\uFEE6\uFEE7\uFEE8"+
+            "\uFEE9\uFEEA\uFEEB\uFEEC\uFEED\uFEEE\uFEEF\uFEF0"+
+            "\uFEF1\uFEF2\uFEF3\uFEF4\uFEF5\uFEF6\uFEF7\uFEF8"+
+            "\uFEF9\uFEFA\uFEFB\uFEFC\uFEFD\uFEFE\uA140\uA141"+
+            "\uA142\uA143\uA144\uA145\uA146\uA147\uA148\uA149"+
+            "\uA14A\uA14B\uA14C\uA14D\uA14E\uA14F\uA150\uA151"+
+            "\uA152\uA153\uA154\uA155\uA156\uA157\uA158\uA159"+
+            "\uA15A\uA15B\uA15C\uA15D\uA15E\uA15F\uA160\uA161"+
+            "\uA162\uA163\uA164\uA165\uA166\uA167\uA168\uA169"+
+            "\uA16A\uA16B\uA16C\uA16D\uA16E\uA16F\uA170\uA171"+
+            "\uA172\uA173\uA174\uA175\uA176\uA177\uA178\uA179"+
+            "\uA17A\uA17B\uA17C\uA17D\uA17E\uA180\uA181\uA182"+
+            "\uA183\uA184\uA185\uA186\uA187\uA188\uA189\uA18A"+
+            "\uA18B\uA18C\uA18D\uA18E\uA18F\uA190\uA191\uA192"+
+            "\uA193\uA194\uA195\uA196\uA197\uA198\uA199\uA19A"+
+            "\uA19B\uA19C\uA19D\uA19E\uA19F\uA1A0\uA240\uA241"+
+            "\uA242\uA243\uA244\uA245\uA246\uA247\uA248\uA249"+
+            "\uA24A\uA24B\uA24C\uA24D\uA24E\uA24F\uA250\uA251"+
+            "\uA252\uA253\uA254\uA255\uA256\uA257\uA258\uA259"+
+            "\uA25A\uA25B\uA25C\uA25D\uA25E\uA25F\uA260\uA261"+
+            "\uA262\uA263\uA264\uA265\uA266\uA267\uA268\uA269"+
+            "\uA26A\uA26B\uA26C\uA26D\uA26E\uA26F\uA270\uA271"+
+            "\uA272\uA273\uA274\uA275\uA276\uA277\uA278\uA279"+
+            "\uA27A\uA27B\uA27C\uA27D\uA27E\uA280\uA281\uA282"+
+            "\uA283\uA284\uA285\uA286\uA287\uA288\uA289\uA28A"+
+            "\uA28B\uA28C\uA28D\uA28E\uA28F\uA290\uA291\uA292"+
+            "\uA293\uA294\uA295\uA296\uA297\uA298\uA299\uA29A"+
+            "\uA29B\uA29C\uA29D\uA29E\uA29F\uA2A0\uA340\uA341"+
+            "\uA342\uA343\uA344\uA345\uA346\uA347\uA348\uA349"+
+            "\uA34A\uA34B\uA34C\uA34D\uA34E\uA34F\uA350\uA351"+
+            "\uA352\uA353\uA354\uA355\uA356\uA357\uA358\uA359"+
+            "\uA35A\uA35B\uA35C\uA35D\uA35E\uA35F\uA360\uA361"+
+            "\uA362\uA363\uA364\uA365\uA366\uA367\uA368\uA369"+
+            "\uA36A\uA36B\uA36C\uA36D\uA36E\uA36F\uA370\uA371"+
+            "\uA372\uA373\uA374\uA375\uA376\uA377\uA378\uA379"+
+            "\uA37A\uA37B\uA37C\uA37D\uA37E\uA380\uA381\uA382"+
+            "\uA383\uA384\uA385\uA386\uA387\uA388\uA389\uA38A"+
+            "\uA38B\uA38C\uA38D\uA38E\uA38F\uA390\uA391\uA392"+
+            "\uA393\uA394\uA395\uA396\uA397\uA398\uA399\uA39A"+
+            "\uA39B\uA39C\uA39D\uA39E\uA39F\uA3A0\uA440\uA441"+
+            "\uA442\uA443\uA444\uA445\uA446\uA447\uA448\uA449"+
+            "\uA44A\uA44B\uA44C\uA44D\uA44E\uA44F\uA450\uA451"+
+            "\uA452\uA453\uA454\uA455\uA456\uA457\uA458\uA459"+
+            "\uA45A\uA45B\uA45C\uA45D\uA45E\uA45F\uA460\uA461"+
+            "\uA462\uA463\uA464\uA465\uA466\uA467\uA468\uA469"+
+            "\uA46A\uA46B\uA46C\uA46D\uA46E\uA46F\uA470\uA471"+
+            "\uA472\uA473\uA474\uA475\uA476\uA477\uA478\uA479"+
+            "\uA47A\uA47B\uA47C\uA47D\uA47E\uA480\uA481\uA482"+
+            "\uA483\uA484\uA485\uA486\uA487\uA488\uA489\uA48A"+
+            "\uA48B\uA48C\uA48D\uA48E\uA48F\uA490\uA491\uA492"+
+            "\uA493\uA494\uA495\uA496\uA497\uA498\uA499\uA49A"+
+            "\uA49B\uA49C\uA49D\uA49E\uA49F\uA4A0\uA540\uA541"+
+            "\uA542\uA543\uA544\uA545\uA546\uA547\uA548\uA549"+
+            "\uA54A\uA54B\uA54C\uA54D\uA54E\uA54F\uA550\uA551"+
+            "\uA552\uA553\uA554\uA555\uA556\uA557\uA558\uA559"+
+            "\uA55A\uA55B\uA55C\uA55D\uA55E\uA55F\uA560\uA561"+
+            "\uA562\uA563\uA564\uA565\uA566\uA567\uA568\uA569"+
+            "\uA56A\uA56B\uA56C\uA56D\uA56E\uA56F\uA570\uA571"+
+            "\uA572\uA573\uA574\uA575\uA576\uA577\uA578\uA579"+
+            "\uA57A\uA57B\uA57C\uA57D\uA57E\uA580\uA581\uA582"+
+            "\uA583\uA584\uA585\uA586\uA587\uA588\uA589\uA58A"+
+            "\uA58B\uA58C\uA58D\uA58E\uA58F\uA590\uA591\uA592"+
+            "\uA593\uA594\uA595\uA596\uA597\uA598\uA599\uA59A"+
+            "\uA59B\uA59C\uA59D\uA59E\uA59F\uA5A0\uA640\uA641"+
+            "\uA642\uA643\uA644\uA645\uA646\uA647\uA648\uA649"+
+            "\uA64A\uA64B\uA64C\uA64D\uA64E\uA64F\uA650\uA651"+
+            "\uA652\uA653\uA654\uA655\uA656\uA657\uA658\uA659"+
+            "\uA65A\uA65B\uA65C\uA65D\uA65E\uA65F\uA660\uA661"+
+            "\uA662\uA663\uA664\uA665\uA666\uA667\uA668\uA669"+
+            "\uA66A\uA66B\uA66C\uA66D\uA66E\uA66F\uA670\uA671"+
+            "\uA672\uA673\uA674\uA675\uA676\uA677\uA678\uA679"+
+            "\uA67A\uA67B\uA67C\uA67D\uA67E\uA680\uA681\uA682"+
+            "\uA683\uA684\uA685\uA686\uA687\uA688\uA689\uA68A"+
+            "\uA68B\uA68C\uA68D\uA68E\uA68F\uA690\uA691\uA692"+
+            "\uA693\uA694\uA695\uA696\uA697\uA698\uA699\uA69A"+
+            "\uA69B\uA69C\uA69D\uA69E\uA69F\uA6A0\uA740\uA741"+
+            "\uA742\uA743\uA744\uA745\uA746\uA747\uA748\uA749"+
+            "\uA74A\uA74B\uA74C\uA74D\uA74E\uA74F\uA750\uA751"+
+            "\uA752\uA753\uA754\uA755\uA756\uA757\uA758\uA759"+
+            "\uA75A\uA75B\uA75C\uA75D\uA75E\uA75F\uA760\uA761"+
+            "\uA762\uA763\uA764\uA765\uA766\uA767\uA768\uA769"+
+            "\uA76A\uA76B\uA76C\uA76D\uA76E\uA76F\uA770\uA771"+
+            "\uA772\uA773\uA774\uA775\uA776\uA777\uA778\uA779"+
+            "\uA77A\uA77B\uA77C\uA77D\uA77E\uA780\uA781\uA782"+
+            "\uA783\uA784\uA785\uA786\uA787\uA788\uA789\uA78A"+
+            "\uA78B\uA78C\uA78D\uA78E\uA78F\uA790\uA791\uA792"+
+            "\uA793\uA794\uA795\uA796\uA797\uA798\uA799\uA79A"+
+            "\uA79B\uA79C\uA79D\uA79E\uA79F\uA7A0\uA2AB\uA2AC"+
+            "\uA2AD\uA2AE\uA2AF\uA2B0\u0000\uA2E4\uA2EF\uA2F0"+
+            "\uA2FD\uA2FE\uA4F4\uA4F5\uA4F6\uA4F7\uA4F8\uA4F9"+
+            "\uA4FA\uA4FB\uA4FC\uA4FD\uA4FE\uA5F7\uA5F8\uA5F9"+
+            "\uA5FA\uA5FB\uA5FC\uA5FD\uA5FE\uA6B9\uA6BA\uA6BB"+
+            "\uA6BC\uA6BD\uA6BE\uA6BF\uA6C0\uA6D9\uA6DA\uA6DB"+
+            "\uA6DC\uA6DD\uA6DE\uA6DF\uA6EC\uA6ED\uA6F3\uA6F6"+
+            "\uA6F7\uA6F8\uA6F9\uA6FA\uA6FB\uA6FC\uA6FD\uA6FE"+
+            "\uA7C2\uA7C3\uA7C4\uA7C5\uA7C6\uA7C7\uA7C8\uA7C9"+
+            "\uA7CA\uA7CB\uA7CC\uA7CD\uA7CE\uA7CF\uA7D0\uA7F2"+
+            "\uA7F3\uA7F4\uA7F5\uA7F6\uA7F7\uA7F8\uA7F9\uA7FA"+
+            "\uA7FB\uA7FC\uA7FD\uA7FE\uA896\uA897\uA898\uA899"+
+            "\uA89A\uA89B\uA89C\uA89D\uA89E\uA89F\uA8A0\uA8BC"+
+            "\u0000\uA8C1\uA8C2\uA8C3\uA8C4\uA8EA\uA8EB\uA8EC"+
+            "\uA8ED\uA8EE\uA8EF\uA8F0\uA8F1\uA8F2\uA8F3\uA8F4"+
+            "\uA8F5\uA8F6\uA8F7\uA8F8\uA8F9\uA8FA\uA8FB\uA8FC"+
+            "\uA8FD\uA8FE\uA958\uA95B\uA95D\uA95E\uA95F\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uA997\uA998\uA999\uA99A"+
+            "\uA99B\uA99C\uA99D\uA99E\uA99F\uA9A0\uA9A1\uA9A2"+
+            "\uA9A3\uA9F0\uA9F1\uA9F2\uA9F3\uA9F4\uA9F5\uA9F6"+
+            "\uA9F7\uA9F8\uA9F9\uA9FA\uA9FB\uA9FC\uA9FD\uA9FE"+
+            "\uD7FA\uD7FB\uD7FC\uD7FD\uD7FE\u0000\uFE51\uFE52"+
+            "\uFE53\u0000\u0000\u0000\u0000\u0000\uFE59\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE61\u0000"+
+            "\u0000\u0000\u0000\uFE66\uFE67\u0000\u0000\u0000"+
+            "\u0000\uFE6C\uFE6D\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uFE76\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uFE7E\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uFE90\uFE91\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uFEA0\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uFD9C\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uFD9D\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uFD9E\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFD9F"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uFDA0\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uFE40\uFE41\uFE42\uFE43"+
+            "\u0000\uFE44\u0000\uFE45\uFE46\u0000\u0000\u0000"+
+            "\uFE47\u0000\u0000\u0000\u0000\u0000\u0000\uFE48"+
+            "\uFE49\uFE4A\u0000\uFE4B\uFE4C\u0000\u0000\uFE4D"+
+            "\uFE4E\uFE4F\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+        private final static String innerIndex8=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA955\uA6F2\u0000\uA6F4\uA6F5\uA6E0\uA6E1\uA6F0"+
+            "\uA6F1\uA6E2\uA6E3\uA6EE\uA6EF\uA6E6\uA6E7\uA6E4"+
+            "\uA6E5\uA6E8\uA6E9\uA6EA\uA6EB\u0000\u0000\u0000"+
+            "\u0000\uA968\uA969\uA96A\uA96B\uA96C\uA96D\uA96E"+
+            "\uA96F\uA970\uA971\u0000\uA972\uA973\uA974\uA975"+
+            "\u0000\uA976\uA977\uA978\uA979\uA97A\uA97B\uA97C"+
+            "\uA97D\uA97E\uA980\uA981\uA982\uA983\uA984\u0000"+
+            "\uA985\uA986\uA987\uA988\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA3A1\uA3A2\uA3A3\uA1E7\uA3A5\uA3A6\uA3A7"+
+            "\uA3A8\uA3A9\uA3AA\uA3AB\uA3AC\uA3AD\uA3AE\uA3AF"+
+            "\uA3B0\uA3B1\uA3B2\uA3B3\uA3B4\uA3B5\uA3B6\uA3B7"+
+            "\uA3B8\uA3B9\uA3BA\uA3BB\uA3BC\uA3BD\uA3BE\uA3BF"+
+            "\uA3C0\uA3C1\uA3C2\uA3C3\uA3C4\uA3C5\uA3C6\uA3C7"+
+            "\uA3C8\uA3C9\uA3CA\uA3CB\uA3CC\uA3CD\uA3CE\uA3CF"+
+            "\uA3D0\uA3D1\uA3D2\uA3D3\uA3D4\uA3D5\uA3D6\uA3D7"+
+            "\uA3D8\uA3D9\uA3DA\uA3DB\uA3DC\uA3DD\uA3DE\uA3DF"+
+            "\uA3E0\uA3E1\uA3E2\uA3E3\uA3E4\uA3E5\uA3E6\uA3E7"+
+            "\uA3E8\uA3E9\uA3EA\uA3EB\uA3EC\uA3ED\uA3EE\uA3EF"+
+            "\uA3F0\uA3F1\uA3F2\uA3F3\uA3F4\uA3F5\uA3F6\uA3F7"+
+            "\uA3F8\uA3F9\uA3FA\uA3FB\uA3FC\uA3FD\uA1AB\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA1E9\uA1EA\uA956\uA3FE\uA957\uA3A4\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+        private final static short index1[] = {
+            1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 13, 14,
+            15, 16, 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, 0, 0, 0,
+            26, 27, 0, 28, 29, 0, 30, 31, 0, 32, 0, 0, 33, 34, 35, 36,
+            37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+            53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
+            69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
+            85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
+            101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 0, 0, 0, 128, 129
+        };
+
+        private final static String index2[] = {
+            innerIndex0,
+            innerIndex1,
+            innerIndex2,
+            innerIndex3,
+            innerIndex4,
+            innerIndex5,
+            innerIndex6,
+            innerIndex7,
+            innerIndex8
+        };
+
+        /* The default implementation creates a decoder and we don't have one */
+        public boolean isLegalReplacement(byte[] repl) {
+            return true;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11GB18030_1.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,5270 @@
+/*
+ * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CharsetDecoder;
+
+public class X11GB18030_1 extends Charset {
+    public X11GB18030_1 () {
+        super("X11GB18030_1", null);
+    }
+
+    public CharsetEncoder newEncoder() {
+        return new Encoder(this);
+    }
+
+    /* Seems like supporting a decoder is required, but we aren't going
+     * to be publically exposing this class, so no need to waste work
+     */
+    public CharsetDecoder newDecoder() {
+        throw new Error("Decoder is not implemented for X11GB18030_1 Charset");
+    }
+
+    public boolean contains(Charset cs) {
+        return cs instanceof X11GB18030_1;
+    }
+    private static class Encoder extends DoubleByteEncoder {
+        public Encoder(Charset cs) {
+            super(cs, index1, index2);
+        }
+        protected int encodeSingle(char inputChar) {
+            return -1;
+        }
+        private final static String innerIndex0=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007"+
+            "\b\t\n\u000B\f\r\u000E\u000F"+
+            "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017"+
+            "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F"+
+            "\u0020\u0021\"\u0023\u0000\u0024\u0025\u0000"+
+            "\u0000\u0026\'\u0028\u0029\u002A\u002B\u002C"+
+            "\u0000\u0000\u002D\u002E\u002F\u0030\u0031\u0000"+
+            "\u0032\u0033\u0034\u0035\u0036\u0037\u0038\u0039"+
+            "\u003A\u003B\u003C\u003D\u003E\u003F\u0040\u0041"+
+            "\u0042\u0043\u0044\u0045\u0046\u0047\u0048\u0049"+
+            "\u004A\u004B\u004C\u004D\u004E\u004F\u0050\u0000"+
+            "\u0051\u0052\u0053\u0054\u0055\u0056\u0057\u0058"+
+            "\u0000\u0000\u0059\u005A\u005B\\\u005D\u005E"+
+            "\u0000\u0000\u0000\u005F\u0000\u0000\u0060\u0061"+
+            "\u0062\u0063\u0000\u0000\u0064\u0065\u0066\u0000"+
+            "\u0067\u0000\u0000\u0068\u0000\u0069\u006A\u006B"+
+            "\u006C\u0000\u006D\u006E\u006F\u0070\u0071\u0072"+
+            "\u0073\u0074\u0075\u0076\u0077\u0078\u0079\u007A"+
+            "\u007B\u007C\u007D\u0000\u007E\u007F\u0080\u0081"+
+            "\u0082\u0083\u0084\u0000\u0085\u0086\u0087\u0088"+
+            "\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090"+
+            "\u0091\u0092\u0093\u0000\u0094\u0095\u0096\u0097"+
+            "\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F"+
+            "\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7"+
+            "\u00A8\u00A9\u00AA\u00AB\u0000\u00AC\u00AD\u00AE"+
+            "\u0000\u00AF\u00B0\u00B1\u00B2\u0000\u00B3\u00B4"+
+            "\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC"+
+            "\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4"+
+            "\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC"+
+            "\u00CD\u00CE\u00CF\u0000\u00D0\u00D1\u00D2\u00D3"+
+            "\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB"+
+            "\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3"+
+            "\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB"+
+            "\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3"+
+            "\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB"+
+            "\u00FC\u00FD\u00FE\u00FF\u0100\u0101\u0102\u0103"+
+            "\u0104\u0105\u0106\u0107\u0108\u0109\u010A\u010B"+
+            "\u010C\u010D\u010E\u010F\u0110\u0111\u0112\u0113"+
+            "\u0114\u0115\u0116\u0117\u0118\u0119\u011A\u011B"+
+            "\u011C\u011D\u011E\u011F\u0120\u0121\u0122\u0123"+
+            "\u0124\u0125\u0126\u0127\u0128\u0129\u012A\u012B"+
+            "\u012C\u012D\u012E\u012F\u0130\u0131\u0000\u0132"+
+            "\u0000\u0133\u0000\u0134\u0000\u0135\u0000\u0136"+
+            "\u0000\u0137\u0000\u0138\u0000\u0139\u013A\u013B"+
+            "\u013C\u013D\u013E\u013F\u0140\u0141\u0142\u0143"+
+            "\u0144\u0145\u0146\u0147\u0148\u0149\u014A\u014B"+
+            "\u014C\u014D\u014E\u014F\u0150\u0151\u0152\u0153"+
+            "\u0154\u0000\u0155\u0156\u0157\u0158\u0159\u015A"+
+            "\u015B\u015C\u015D\u015E\u015F\u0160\u0161\u0162"+
+            "\u0163\u0164\u0165\u0166\u0167\u0168\u0169\u016A"+
+            "\u016B\u016C\u016D\u016E\u016F\u0170\u0171\u0172"+
+            "\u0173\u0174\u0175\u0176\u0177\u0178\u0179\u017A"+
+            "\u017B\u017C\u017D\u017E\u017F\u0180\u0181\u0182"+
+            "\u0183\u0184\u0185\u0186\u0187\u0188\u0189\u018A"+
+            "\u018B\u018C\u018D\u018E\u018F\u0190\u0191\u0192"+
+            "\u0193\u0194\u0195\u0196\u0197\u0198\u0199\u019A"+
+            "\u019B\u019C\u019D\u019E\u019F\u01A0\u01A1\u01A2"+
+            "\u01A3\u01A4\u01A5\u01A6\u01A7\u01A8\u01A9\u01AA"+
+            "\u01AB\u0000\u01AC\u01AD\u01AE\u01AF\u01B0\u01B1"+
+            "\u01B2\u01B3\u01B4\u01B5\u01B6\u01B7\u01B8\u01B9"+
+            "\u01BA\u0000\u01BB\u01BC\u01BD\u01BE\u01BF\u01C0"+
+            "\u01C1\u01C2\u01C3\u01C4\u01C5\u01C6\u01C7\u01C8"+
+            "\u01C9\u01CA\u01CB\u01CC\u01CD\u01CE\u01CF\u01D0"+
+            "\u01D1\u01D2\u01D3\u01D4\u01D5\u01D6\u01D7\u01D8"+
+            "\u01D9\u01DA\u01DB\u01DC\u01DD\u01DE\u01DF\u01E0"+
+            "\u01E1\u01E2\u01E3\u01E4\u01E5\u01E6\u01E7\u01E8"+
+            "\u01E9\u01EA\u01EB\u01EC\u01ED\u01EE\u01EF\u01F0"+
+            "\u01F1\u01F2\u01F3\u01F4\u01F5\u01F6\u01F7\u01F8"+
+            "\u01F9\u01FA\u01FB\u01FC\u01FD\u01FE\u01FF\u0200"+
+            "\u0201\u0202\u0203\u0204\u0205\u0206\u0207\u0208"+
+            "\u0209\u020A\u020B\u020C\u020D\u020E\u020F\u0210"+
+            "\u0211\u0212\u0213\u0214\u0215\u0216\u0217\u0218"+
+            "\u0219\u021A\u021B\u021C\u021D\u021E\u021F\u0000"+
+            "\u0220\u0000\u0000\u0000\u0221\u0222\u0223\u0224"+
+            "\u0225\u0226\u0227\u0228\u0229\u022A\u022B\u022C"+
+            "\u022D\u0000\u022E\u022F\u0230\u0231\u0232\u0233"+
+            "\u0234\u0235\u0236\u0237\u0238\u0239\u023A\u023B"+
+            "\u023C\u023D\u023E\u023F\u0240\u0241\u0242\u0243"+
+            "\u0244\u0245\u0246\u0247\u0248\u0249\u024A\u024B"+
+            "\u024C\u024D\u024E\u024F\u0250\u0251\u0252\u0253"+
+            "\u0254\u0255\u0256\u0257\u0258\u0259\u025A\u025B"+
+            "\u025C\u025D\u025E\u025F\u0260\u0261\u0262\u0263"+
+            "\u0264\u0265\u0266\u0267\u0268\u0269\u026A\u026B"+
+            "\u026C\u026D\u026E\u026F\u0270\u0271\u0272\u0273"+
+            "\u0274\u0275\u0276\u0277\u0278\u0279\u027A\u027B"+
+            "\u027C\u027D\u027E\u027F\u0280\u0281\u0282\u0283"+
+            "\u0284\u0285\u0286\u0287\u0288\u0289\u028A\u028B"+
+            "\u028C\u028D\u028E\u028F\u0290\u0291\u0292\u0293"+
+            "\u0294\u0295\u0296\u0297\u0298\u0299\u029A\u029B"+
+            "\u029C\u029D\u029E\u029F\u02A0\u02A1\u02A2\u02A3"+
+            "\u02A4\u02A5\u02A6\u02A7\u02A8\u02A9\u02AA\u02AB"+
+            "\u02AC\u02AD\u02AE\u02AF\u02B0\u02B1\u02B2\u02B3"+
+            "\u02B4\u02B5\u02B6\u02B7\u02B8\u02B9\u02BA\u02BB"+
+            "\u02BC\u02BD\u02BE\u02BF\u02C0\u02C1\u02C2\u02C3"+
+            "\u02C4\u02C5\u02C6\u02C7\u02C8\u02C9\u02CA\u02CB"+
+            "\u02CC\u02CD\u02CE\u02CF\u02D0\u02D1\u02D2\u02D3"+
+            "\u02D4\u02D5\u02D6\u02D7\u02D8\u02D9\u02DA\u02DB"+
+            "\u02DC\u02DD\u02DE\u02DF\u02E0\u02E1\u02E2\u02E3"+
+            "\u02E4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u02E5\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u02E6\u02E7\u02E8\u02E9\u02EA\u02EB"+
+            "\u02EC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u02ED\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u02EE\u02EF\u02F0\u02F1\u02F2\u02F3"+
+            "\u02F4\u02F5\u02F6\u02F7\u02F8\u02F9\u02FA\u02FB"+
+            "\u02FC\u02FD\u02FE\u02FF\u0300\u0301\u0302\u0303"+
+            "\u0304\u0305\u0306\u0307\u0308\u0309\u030A\u030B"+
+            "\u030C\u030D\u030E\u030F\u0310\u0311\u0312\u0313"+
+            "\u0314\u0315\u0316\u0317\u0318\u0319\u031A\u031B"+
+            "\u031C\u031D\u031E\u031F\u0320\u0321\u0322\u0323"+
+            "\u0324\u0000\u0325\u0326\u0327\u0328\u0329\u032A"+
+            "\u032B\u032C\u032D\u032E\u032F\u0330\u0331\u0332"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0333\u0000\u0334\u0335\u0336\u0337\u0338\u0339"+
+            "\u033A\u033B\u033C\u033D\u033E\u033F\u0340\u0341"+
+            "\u0342\u0343\u0344\u0345\u0346\u0347\u0348\u0349"+
+            "\u034A\u034B\u034C\u034D\u034E\u034F\u0350\u0351"+
+            "\u0352\u0353\u0354\u0355\u0356\u0357\u0358\u0359"+
+            "\u035A\u035B\u035C\u035D\u035E\u035F\u0360\u0361"+
+            "\u0362\u0363\u0364\u0365\u0366\u0367\u0368\u0369"+
+            "\u036A\u036B\u036C\u036D\u036E\u036F\u0370\u0371"+
+            "\u0372\u0373\u0374\u0375\u0376\u0377\u0378\u0379"+
+            "\u037A\u037B\u037C\u037D\u037E\u037F\u0380\u0381"+
+            "\u0382\u0383\u0384\u0385\u0386\u0387\u0388\u0389"+
+            "\u038A\u038B\u038C\u038D\u038E\u038F\u0390\u0391"+
+            "\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399"+
+            "\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1"+
+            "\u03A2\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9"+
+            "\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1"+
+            "\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9"+
+            "\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1"+
+            "\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9"+
+            "\u03CA\u03CB\u03CC\u03CD\u03CE\u03CF\u03D0\u03D1"+
+            "\u03D2\u03D3\u03D4\u03D5\u03D6\u03D7\u03D8\u03D9"+
+            "\u03DA\u03DB\u03DC\u03DD\u03DE\u03DF\u03E0\u03E1"+
+            "\u03E2\u03E3\u03E4\u03E5\u03E6\u03E7\u03E8\u03E9"+
+            "\u03EA\u03EB\u03EC\u03ED\u03EE\u03EF\u03F0\u03F1"+
+            "\u03F2\u03F3\u03F4\u03F5\u03F6\u03F7\u03F8\u03F9"+
+            "\u03FA\u03FB\u03FC\u03FD\u03FE\u03FF\u0400\u0401"+
+            "\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409"+
+            "\u040A\u040B\u040C\u040D\u040E\u040F\u0410\u0411"+
+            "\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419"+
+            "\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421"+
+            "\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429"+
+            "\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431"+
+            "\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439"+
+            "\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441"+
+            "\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449"+
+            "\u044A\u044B\u044C\u044D\u044E\u044F\u0450\u0451"+
+            "\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459"+
+            "\u045A\u045B\u045C\u045D\u045E\u045F\u0460\u0461"+
+            "\u0462\u0463\u0464\u0465\u0466\u0467\u0468\u0469"+
+            "\u046A\u046B\u046C\u046D\u046E\u046F\u0470\u0471"+
+            "\u0472\u0473\u0474\u0475\u0476\u0477\u0478\u0479"+
+            "\u047A\u047B\u047C\u047D\u047E\u047F\u0480\u0481"+
+            "\u0482\u0483\u0484\u0485\u0486\u0487\u0488\u0489"+
+            "\u048A\u048B\u048C\u048D\u048E\u048F\u0490\u0491"+
+            "\u0492\u0493\u0494\u0495\u0496\u0497\u0498\u0499"+
+            "\u049A\u049B\u049C\u049D\u049E\u049F\u04A0\u04A1"+
+            "\u04A2\u04A3\u04A4\u04A5\u04A6\u04A7\u04A8\u04A9"+
+            "\u04AA\u04AB\u04AC\u04AD\u04AE\u04AF\u04B0\u04B1"+
+            "\u04B2\u04B3\u04B4\u04B5\u04B6\u04B7\u04B8\u04B9"+
+            "\u04BA\u04BB\u04BC\u04BD\u04BE\u04BF\u04C0\u04C1"+
+            "\u04C2\u04C3\u04C4\u04C5\u04C6\u04C7\u04C8\u04C9"+
+            "\u04CA\u04CB\u04CC\u04CD\u04CE\u04CF\u04D0\u04D1"+
+            "\u04D2\u04D3\u04D4\u04D5\u04D6\u04D7\u04D8\u04D9"+
+            "\u04DA\u04DB\u04DC\u04DD\u04DE\u04DF\u04E0\u04E1"+
+            "\u04E2\u04E3\u04E4\u04E5\u04E6\u04E7\u04E8\u04E9"+
+            "\u04EA\u04EB\u04EC\u04ED\u04EE\u04EF\u04F0\u04F1"+
+            "\u04F2\u04F3\u04F4\u04F5\u04F6\u04F7\u04F8\u04F9"+
+            "\u04FA\u04FB\u04FC\u04FD\u04FE\u04FF\u0500\u0501"+
+            "\u0502\u0503\u0504\u0505\u0506\u0507\u0508\u0509"+
+            "\u050A\u050B\u050C\u050D\u050E\u050F\u0510\u0511"+
+            "\u0512\u0513\u0514\u0515\u0516\u0517\u0518\u0519"+
+            "\u051A\u051B\u051C\u051D\u051E\u051F\u0520\u0521"+
+            "\u0522\u0523\u0524\u0525\u0526\u0527\u0528\u0529"+
+            "\u052A\u052B\u052C\u052D\u052E\u052F\u0530\u0531"+
+            "\u0532\u0533\u0534\u0535\u0536\u0537\u0538\u0539"+
+            "\u053A\u053B\u053C\u053D\u053E\u053F\u0540\u0541"+
+            "\u0542\u0543\u0544\u0545\u0546\u0547\u0548\u0549"+
+            "\u054A\u054B\u054C\u054D\u054E\u054F\u0550\u0551"+
+            "\u0552\u0553\u0554\u0555\u0556\u0557\u0558\u0559"+
+            "\u055A\u055B\u055C\u055D\u055E\u055F\u0560\u0561"+
+            "\u0562\u0563\u0564\u0565\u0566\u0567\u0568\u0569"+
+            "\u056A\u056B\u056C\u056D\u056E\u056F\u0570\u0571"+
+            "\u0572\u0573\u0574\u0575\u0576\u0577\u0578\u0579"+
+            "\u057A\u057B\u057C\u057D\u057E\u057F\u0580\u0581"+
+            "\u0582\u0583\u0584\u0585\u0586\u0587\u0588\u0589"+
+            "\u058A\u058B\u058C\u058D\u058E\u058F\u0590\u0591"+
+            "\u0592\u0593\u0594\u0595\u0596\u0597\u0598\u0599"+
+            "\u059A\u059B\u059C\u059D\u059E\u059F\u05A0\u05A1"+
+            "\u05A2\u05A3\u05A4\u05A5\u05A6\u05A7\u05A8\u05A9"+
+            "\u05AA\u05AB\u05AC\u05AD\u05AE\u05AF\u05B0\u05B1"+
+            "\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9"+
+            "\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1"+
+            "\u05C2\u05C3\u05C4\u05C5\u05C6\u05C7\u05C8\u05C9"+
+            "\u05CA\u05CB\u05CC\u05CD\u05CE\u05CF\u05D0\u05D1"+
+            "\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9"+
+            "\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1"+
+            "\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9"+
+            "\u05EA\u05EB\u05EC\u05ED\u05EE\u05EF\u05F0\u05F1"+
+            "\u05F2\u05F3\u05F4\u05F5\u05F6\u05F7\u05F8\u05F9"+
+            "\u05FA\u05FB\u05FC\u05FD\u05FE\u05FF\u0600\u0601"+
+            "\u0602\u0603\u0604\u0605\u0606\u0607\u0608\u0609"+
+            "\u060A\u060B\u060C\u060D\u060E\u060F\u0610\u0611"+
+            "\u0612\u0613\u0614\u0615\u0616\u0617\u0618\u0619"+
+            "\u061A\u061B\u061C\u061D\u061E\u061F\u0620\u0621"+
+            "\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629"+
+            "\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631"+
+            "\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639"+
+            "\u063A\u063B\u063C\u063D\u063E\u063F\u0640\u0641"+
+            "\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649"+
+            "\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651"+
+            "\u0652\u0653\u0654\u0655\u0656\u0657\u0658\u0659"+
+            "\u065A\u065B\u065C\u065D\u065E\u065F\u0660\u0661"+
+            "\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669"+
+            "\u066A\u066B\u066C\u066D\u066E\u066F\u0670\u0671"+
+            "\u0672\u0673\u0674\u0675\u0676\u0677\u0678\u0679"+
+            "\u067A\u067B\u067C\u067D\u067E\u067F\u0680\u0681"+
+            "\u0682\u0683\u0684\u0685\u0686\u0687\u0688\u0689"+
+            "\u068A\u068B\u068C\u068D\u068E\u068F\u0690\u0691"+
+            "\u0692\u0693\u0694\u0695\u0696\u0697\u0698\u0699"+
+            "\u069A\u069B\u069C\u069D\u069E\u069F\u06A0\u06A1"+
+            "\u06A2\u06A3\u06A4\u06A5\u06A6\u06A7\u06A8\u06A9"+
+            "\u06AA\u06AB\u06AC\u06AD\u06AE\u06AF\u06B0\u06B1"+
+            "\u06B2\u06B3\u06B4\u06B5\u06B6\u06B7\u06B8\u06B9"+
+            "\u06BA\u06BB\u06BC\u06BD\u06BE\u06BF\u06C0\u06C1"+
+            "\u06C2\u06C3\u06C4\u06C5\u06C6\u06C7\u06C8\u06C9"+
+            "\u06CA\u06CB\u06CC\u06CD\u06CE\u06CF\u06D0\u06D1"+
+            "\u06D2\u06D3\u06D4\u06D5\u06D6\u06D7\u06D8\u06D9"+
+            "\u06DA\u06DB\u06DC\u06DD\u06DE\u06DF\u06E0\u06E1"+
+            "\u06E2\u06E3\u06E4\u06E5\u06E6\u06E7\u06E8\u06E9"+
+            "\u06EA\u06EB\u06EC\u06ED\u06EE\u06EF\u06F0\u06F1"+
+            "\u06F2\u06F3\u06F4\u06F5\u06F6\u06F7\u06F8\u06F9"+
+            "\u06FA\u06FB\u06FC\u06FD\u06FE\u06FF\u0700\u0701"+
+            "\u0702\u0703\u0704\u0705\u0706\u0707\u0708\u0709"+
+            "\u070A\u070B\u070C\u070D\u070E\u070F\u0710\u0711"+
+            "\u0712\u0713\u0714\u0715\u0716\u0717\u0718\u0719"+
+            "\u071A\u071B\u071C\u071D\u071E\u071F\u0720\u0721"+
+            "\u0722\u0723\u0724\u0725\u0726\u0727\u0728\u0729"+
+            "\u072A\u072B\u072C\u072D\u072E\u072F\u0730\u0731"+
+            "\u0732\u0733\u0734\u0735\u0736\u0737\u0738\u0739"+
+            "\u073A\u073B\u073C\u073D\u073E\u073F\u0740\u0741"+
+            "\u0742\u0743\u0744\u0745\u0746\u0747\u0748\u0749"+
+            "\u074A\u074B\u074C\u074D\u074E\u074F\u0750\u0751"+
+            "\u0752\u0753\u0754\u0755\u0756\u0757\u0758\u0759"+
+            "\u075A\u075B\u075C\u075D\u075E\u075F\u0760\u0761"+
+            "\u0762\u0763\u0764\u0765\u0766\u0767\u0768\u0769"+
+            "\u076A\u076B\u076C\u076D\u076E\u076F\u0770\u0771"+
+            "\u0772\u0773\u0774\u0775\u0776\u0777\u0778\u0779"+
+            "\u077A\u077B\u077C\u077D\u077E\u077F\u0780\u0781"+
+            "\u0782\u0783\u0784\u0785\u0786\u0787\u0788\u0789"+
+            "\u078A\u078B\u078C\u078D\u078E\u078F\u0790\u0791"+
+            "\u0792\u0793\u0794\u0795\u0796\u0797\u0798\u0799"+
+            "\u079A\u079B\u079C\u079D\u079E\u079F\u07A0\u07A1"+
+            "\u07A2\u07A3\u07A4\u07A5\u07A6\u07A7\u07A8\u07A9"+
+            "\u07AA\u07AB\u07AC\u07AD\u07AE\u07AF\u07B0\u07B1"+
+            "\u07B2\u07B3\u07B4\u07B5\u07B6\u07B7\u07B8\u07B9"+
+            "\u07BA\u07BB\u07BC\u07BD\u07BE\u07BF\u07C0\u07C1"+
+            "\u07C2\u07C3\u07C4\u07C5\u07C6\u07C7\u07C8\u07C9"+
+            "\u07CA\u07CB\u07CC\u07CD\u07CE\u07CF\u07D0\u07D1"+
+            "\u07D2\u07D3\u07D4\u07D5\u07D6\u07D7\u07D8\u07D9"+
+            "\u07DA\u07DB\u07DC\u07DD\u07DE\u07DF\u07E0\u07E1"+
+            "\u07E2\u07E3\u07E4\u07E5\u07E6\u07E7\u07E8\u07E9"+
+            "\u07EA\u07EB\u07EC\u07ED\u07EE\u07EF\u07F0\u07F1"+
+            "\u07F2\u07F3\u07F4\u07F5\u07F6\u07F7\u07F8\u07F9"+
+            "\u07FA\u07FB\u07FC\u07FD\u07FE\u07FF\u0800\u0801"+
+            "\u0802\u0803\u0804\u0805\u0806\u0807\u0808\u0809"+
+            "\u080A\u080B\u080C\u080D\u080E\u080F\u0810\u0811"+
+            "\u0812\u0813\u0814\u0815\u0816\u0817\u0818\u0819"+
+            "\u081A\u081B\u081C\u081D\u081E\u081F\u0820\u0821"+
+            "\u0822\u0823\u0824\u0825\u0826\u0827\u0828\u0829"+
+            "\u082A\u082B\u082C\u082D\u082E\u082F\u0830\u0831"+
+            "\u0832\u0833\u0834\u0835\u0836\u0837\u0838\u0839"+
+            "\u083A\u083B\u083C\u083D\u083E\u083F\u0840\u0841"+
+            "\u0842\u0843\u0844\u0845\u0846\u0847\u0848\u0849"+
+            "\u084A\u084B\u084C\u084D\u084E\u084F\u0850\u0851"+
+            "\u0852\u0853\u0854\u0855\u0856\u0857\u0858\u0859"+
+            "\u085A\u085B\u085C\u085D\u085E\u085F\u0860\u0861"+
+            "\u0862\u0863\u0864\u0865\u0866\u0867\u0868\u0869"+
+            "\u086A\u086B\u086C\u086D\u086E\u086F\u0870\u0871"+
+            "\u0872\u0873\u0874\u0875\u0876\u0877\u0878\u0879"+
+            "\u087A\u087B\u087C\u087D\u087E\u087F\u0880\u0881"+
+            "\u0882\u0883\u0884\u0885\u0886\u0887\u0888\u0889"+
+            "\u088A\u088B\u088C\u088D\u088E\u088F\u0890\u0891"+
+            "\u0892\u0893\u0894\u0895\u0896\u0897\u0898\u0899"+
+            "\u089A\u089B\u089C\u089D\u089E\u089F\u08A0\u08A1"+
+            "\u08A2\u08A3\u08A4\u08A5\u08A6\u08A7\u08A8\u08A9"+
+            "\u08AA\u08AB\u08AC\u08AD\u08AE\u08AF\u08B0\u08B1"+
+            "\u08B2\u08B3\u08B4\u08B5\u08B6\u08B7\u08B8\u08B9"+
+            "\u08BA\u08BB\u08BC\u08BD\u08BE\u08BF\u08C0\u08C1"+
+            "\u08C2\u08C3\u08C4\u08C5\u08C6\u08C7\u08C8\u08C9"+
+            "\u08CA\u08CB\u08CC\u08CD\u08CE\u08CF\u08D0\u08D1"+
+            "\u08D2\u08D3\u08D4\u08D5\u08D6\u08D7\u08D8\u08D9"+
+            "\u08DA\u08DB\u08DC\u08DD\u08DE\u08DF\u08E0\u08E1"+
+            "\u08E2\u08E3\u08E4\u08E5\u08E6\u08E7\u08E8\u08E9"+
+            "\u08EA\u08EB\u08EC\u08ED\u08EE\u08EF\u08F0\u08F1"+
+            "\u08F2\u08F3\u08F4\u08F5\u08F6\u08F7\u08F8\u08F9"+
+            "\u08FA\u08FB\u08FC\u08FD\u08FE\u08FF\u0900\u0901"+
+            "\u0902\u0903\u0904\u0905\u0906\u0907\u0908\u0909"+
+            "\u090A\u090B\u090C\u090D\u090E\u090F\u0910\u0911"+
+            "\u0912\u0913\u0914\u0915\u0916\u0917\u0918\u0919"+
+            "\u091A\u091B\u091C\u091D\u091E\u091F\u0920\u0921"+
+            "\u0922\u0923\u0924\u0925\u0926\u0927\u0928\u0929"+
+            "\u092A\u092B\u092C\u092D\u092E\u092F\u0930\u0931"+
+            "\u0932\u0933\u0934\u0935\u0936\u0937\u0938\u0939"+
+            "\u093A\u093B\u093C\u093D\u093E\u093F\u0940\u0941"+
+            "\u0942\u0943\u0944\u0945\u0946\u0947\u0948\u0949"+
+            "\u094A\u094B\u094C\u094D\u094E\u094F\u0950\u0951"+
+            "\u0952\u0953\u0954\u0955\u0956\u0957\u0958\u0959"+
+            "\u095A\u095B\u095C\u095D\u095E\u095F\u0960\u0961"+
+            "\u0962\u0963\u0964\u0965\u0966\u0967\u0968\u0969"+
+            "\u096A\u096B\u096C\u096D\u096E\u096F\u0970\u0971"+
+            "\u0972\u0973\u0974\u0975\u0976\u0977\u0978\u0979"+
+            "\u097A\u097B\u097C\u097D\u097E\u097F\u0980\u0981"+
+            "\u0982\u0983\u0984\u0985\u0986\u0987\u0988\u0989"+
+            "\u098A\u098B\u098C\u098D\u098E\u098F\u0990\u0991"+
+            "\u0992\u0993\u0994\u0995\u0996\u0997\u0998\u0999"+
+            "\u099A\u099B\u099C\u099D\u099E\u099F\u09A0\u09A1"+
+            "\u09A2\u09A3\u09A4\u09A5\u09A6\u09A7\u09A8\u09A9"+
+            "\u09AA\u09AB\u09AC\u09AD\u09AE\u09AF\u09B0\u09B1"+
+            "\u09B2\u09B3\u09B4\u09B5\u09B6\u09B7\u09B8\u09B9"+
+            "\u09BA\u09BB\u09BC\u09BD\u09BE\u09BF\u09C0\u09C1"+
+            "\u09C2\u09C3\u09C4\u09C5\u09C6\u09C7\u09C8\u09C9"+
+            "\u09CA\u09CB\u09CC\u09CD\u09CE\u09CF\u09D0\u09D1"+
+            "\u09D2\u09D3\u09D4\u09D5\u09D6\u09D7\u09D8\u09D9"+
+            "\u09DA\u09DB\u09DC\u09DD\u09DE\u09DF\u09E0\u09E1"+
+            "\u09E2\u09E3\u09E4\u09E5\u09E6\u09E7\u09E8\u09E9"+
+            "\u09EA\u09EB\u09EC\u09ED\u09EE\u09EF\u09F0\u09F1"+
+            "\u09F2\u09F3\u09F4\u09F5\u09F6\u09F7\u09F8\u09F9"+
+            "\u09FA\u09FB\u09FC\u09FD\u09FE\u09FF\u0A00\u0A01"+
+            "\u0A02\u0A03\u0A04\u0A05\u0A06\u0A07\u0A08\u0A09"+
+            "\u0A0A\u0A0B\u0A0C\u0A0D\u0A0E\u0A0F\u0A10\u0A11"+
+            "\u0A12\u0A13\u0A14\u0A15\u0A16\u0A17\u0A18\u0A19"+
+            "\u0A1A\u0A1B\u0A1C\u0A1D\u0A1E\u0A1F\u0A20\u0A21"+
+            "\u0A22\u0A23\u0A24\u0A25\u0A26\u0A27\u0A28\u0A29"+
+            "\u0A2A\u0A2B\u0A2C\u0A2D\u0A2E\u0A2F\u0A30\u0A31"+
+            "\u0A32\u0A33\u0A34\u0A35\u0A36\u0A37\u0A38\u0A39"+
+            "\u0A3A\u0A3B\u0A3C\u0A3D\u0A3E\u0A3F\u0A40\u0A41"+
+            "\u0A42\u0A43\u0A44\u0A45\u0A46\u0A47\u0A48\u0A49"+
+            "\u0A4A\u0A4B\u0A4C\u0A4D\u0A4E\u0A4F\u0A50\u0A51"+
+            "\u0A52\u0A53\u0A54\u0A55\u0A56\u0A57\u0A58\u0A59"+
+            "\u0A5A\u0A5B\u0A5C\u0A5D\u0A5E\u0A5F\u0A60\u0A61"+
+            "\u0A62\u0A63\u0A64\u0A65\u0A66\u0A67\u0A68\u0A69"+
+            "\u0A6A\u0A6B\u0A6C\u0A6D\u0A6E\u0A6F\u0A70\u0A71"+
+            "\u0A72\u0A73\u0A74\u0A75\u0A76\u0A77\u0A78\u0A79"+
+            "\u0A7A\u0A7B\u0A7C\u0A7D\u0A7E\u0A7F\u0A80\u0A81"+
+            "\u0A82\u0A83\u0A84\u0A85\u0A86\u0A87\u0A88\u0A89"+
+            "\u0A8A\u0A8B\u0A8C\u0A8D\u0A8E\u0A8F\u0A90\u0A91"+
+            "\u0A92\u0A93\u0A94\u0A95\u0A96\u0A97\u0A98\u0A99"+
+            "\u0A9A\u0A9B\u0A9C\u0A9D\u0A9E\u0A9F\u0AA0\u0AA1"+
+            "\u0AA2\u0AA3\u0AA4\u0AA5\u0AA6\u0AA7\u0AA8\u0AA9"+
+            "\u0AAA\u0AAB\u0AAC\u0AAD\u0AAE\u0AAF\u0AB0\u0AB1"+
+            "\u0AB2\u0AB3\u0AB4\u0AB5\u0AB6\u0AB7\u0AB8\u0AB9"+
+            "\u0ABA\u0ABB\u0ABC\u0ABD\u0ABE\u0ABF\u0AC0\u0AC1"+
+            "\u0AC2\u0AC3\u0AC4\u0AC5\u0AC6\u0AC7\u0AC8\u0AC9"+
+            "\u0ACA\u0ACB\u0ACC\u0ACD\u0ACE\u0ACF\u0AD0\u0AD1"+
+            "\u0AD2\u0AD3\u0AD4\u0AD5\u0AD6\u0AD7\u0AD8\u0AD9"+
+            "\u0ADA\u0ADB\u0ADC\u0ADD\u0ADE\u0ADF\u0AE0\u0AE1"+
+            "\u0AE2\u0AE3\u0AE4\u0AE5\u0AE6\u0AE7\u0AE8\u0AE9"+
+            "\u0AEA\u0AEB\u0AEC\u0AED\u0AEE\u0AEF\u0AF0\u0AF1"+
+            "\u0AF2\u0AF3\u0AF4\u0AF5\u0AF6\u0AF7\u0AF8\u0AF9"+
+            "\u0AFA\u0AFB\u0AFC\u0AFD\u0AFE\u0AFF\u0B00\u0B01"+
+            "\u0B02\u0B03\u0B04\u0B05\u0B06\u0B07\u0B08\u0B09"+
+            "\u0B0A\u0B0B\u0B0C\u0B0D\u0B0E\u0B0F\u0B10\u0B11"+
+            "\u0B12\u0B13\u0B14\u0B15\u0B16\u0B17\u0B18\u0B19"+
+            "\u0B1A\u0B1B\u0B1C\u0B1D\u0B1E\u0B1F\u0B20\u0B21"+
+            "\u0B22\u0B23\u0B24\u0B25\u0B26\u0B27\u0B28\u0B29"+
+            "\u0B2A\u0B2B\u0B2C\u0B2D\u0B2E\u0B2F\u0B30\u0B31"+
+            "\u0B32\u0B33\u0B34\u0B35\u0B36\u0B37\u0B38\u0B39"+
+            "\u0B3A\u0B3B\u0B3C\u0B3D\u0B3E\u0B3F\u0B40\u0B41"+
+            "\u0B42\u0B43\u0B44\u0B45\u0B46\u0B47\u0B48\u0B49"+
+            "\u0B4A\u0B4B\u0B4C\u0B4D\u0B4E\u0B4F\u0B50\u0B51"+
+            "\u0B52\u0B53\u0B54\u0B55\u0B56\u0B57\u0B58\u0B59"+
+            "\u0B5A\u0B5B\u0B5C\u0B5D\u0B5E\u0B5F\u0B60\u0B61"+
+            "\u0B62\u0B63\u0B64\u0B65\u0B66\u0B67\u0B68\u0B69"+
+            "\u0B6A\u0B6B\u0B6C\u0B6D\u0B6E\u0B6F\u0B70\u0B71"+
+            "\u0B72\u0B73\u0B74\u0B75\u0B76\u0B77\u0B78\u0B79"+
+            "\u0B7A\u0B7B\u0B7C\u0B7D\u0B7E\u0B7F\u0B80\u0B81"+
+            "\u0B82\u0B83\u0B84\u0B85\u0B86\u0B87\u0B88\u0B89"+
+            "\u0B8A\u0B8B\u0B8C\u0B8D\u0B8E\u0B8F\u0B90\u0B91"+
+            "\u0B92\u0B93\u0B94\u0B95\u0B96\u0B97\u0B98\u0B99"+
+            "\u0B9A\u0B9B\u0B9C\u0B9D\u0B9E\u0B9F\u0BA0\u0BA1"+
+            "\u0BA2\u0BA3\u0BA4\u0BA5\u0BA6\u0BA7\u0BA8\u0BA9"+
+            "\u0BAA\u0BAB\u0BAC\u0BAD\u0BAE\u0BAF\u0BB0\u0BB1"+
+            "\u0BB2\u0BB3\u0BB4\u0BB5\u0BB6\u0BB7\u0BB8\u0BB9"+
+            "\u0BBA\u0BBB\u0BBC\u0BBD\u0BBE\u0BBF\u0BC0\u0BC1"+
+            "\u0BC2\u0BC3\u0BC4\u0BC5\u0BC6\u0BC7\u0BC8\u0BC9"+
+            "\u0BCA\u0BCB\u0BCC\u0BCD\u0BCE\u0BCF\u0BD0\u0BD1"+
+            "\u0BD2\u0BD3\u0BD4\u0BD5\u0BD6\u0BD7\u0BD8\u0BD9"+
+            "\u0BDA\u0BDB\u0BDC\u0BDD\u0BDE\u0BDF\u0BE0\u0BE1"+
+            "\u0BE2\u0BE3\u0BE4\u0BE5\u0BE6\u0BE7\u0BE8\u0BE9"+
+            "\u0BEA\u0BEB\u0BEC\u0BED\u0BEE\u0BEF\u0BF0\u0BF1"+
+            "\u0BF2\u0BF3\u0BF4\u0BF5\u0BF6\u0BF7\u0BF8\u0BF9"+
+            "\u0BFA\u0BFB\u0BFC\u0BFD\u0BFE\u0BFF\u0C00\u0C01"+
+            "\u0C02\u0C03\u0C04\u0C05\u0C06\u0C07\u0C08\u0C09"+
+            "\u0C0A\u0C0B\u0C0C\u0C0D\u0C0E\u0C0F\u0C10\u0C11"+
+            "\u0C12\u0C13\u0C14\u0C15\u0C16\u0C17\u0C18\u0C19"+
+            "\u0C1A\u0C1B\u0C1C\u0C1D\u0C1E\u0C1F\u0C20\u0C21"+
+            "\u0C22\u0C23\u0C24\u0C25\u0C26\u0C27\u0C28\u0C29"+
+            "\u0C2A\u0C2B\u0C2C\u0C2D\u0C2E\u0C2F\u0C30\u0C31"+
+            "\u0C32\u0C33\u0C34\u0C35\u0C36\u0C37\u0C38\u0C39"+
+            "\u0C3A\u0C3B\u0C3C\u0C3D\u0C3E\u0C3F\u0C40\u0C41"+
+            "\u0C42\u0C43\u0C44\u0C45\u0C46\u0C47\u0C48\u0C49"+
+            "\u0C4A\u0C4B\u0C4C\u0C4D\u0C4E\u0C4F\u0C50\u0C51"+
+            "\u0C52\u0C53\u0C54\u0C55\u0C56\u0C57\u0C58\u0C59"+
+            "\u0C5A\u0C5B\u0C5C\u0C5D\u0C5E\u0C5F\u0C60\u0C61"+
+            "\u0C62\u0C63\u0C64\u0C65\u0C66\u0C67\u0C68\u0C69"+
+            "\u0C6A\u0C6B\u0C6C\u0C6D\u0C6E\u0C6F\u0C70\u0C71"+
+            "\u0C72\u0C73\u0C74\u0C75\u0C76\u0C77\u0C78\u0C79"+
+            "\u0C7A\u0C7B\u0C7C\u0C7D\u0C7E\u0C7F\u0C80\u0C81"+
+            "\u0C82\u0C83\u0C84\u0C85\u0C86\u0C87\u0C88\u0C89"+
+            "\u0C8A\u0C8B\u0C8C\u0C8D\u0C8E\u0C8F\u0C90\u0C91"+
+            "\u0C92\u0C93\u0C94\u0C95\u0C96\u0C97\u0C98\u0C99"+
+            "\u0C9A\u0C9B\u0C9C\u0C9D\u0C9E\u0C9F\u0CA0\u0CA1"+
+            "\u0CA2\u0CA3\u0CA4\u0CA5\u0CA6\u0CA7\u0CA8\u0CA9"+
+            "\u0CAA\u0CAB\u0CAC\u0CAD\u0CAE\u0CAF\u0CB0\u0CB1"+
+            "\u0CB2\u0CB3\u0CB4\u0CB5\u0CB6\u0CB7\u0CB8\u0CB9"+
+            "\u0CBA\u0CBB\u0CBC\u0CBD\u0CBE\u0CBF\u0CC0\u0CC1"+
+            "\u0CC2\u0CC3\u0CC4\u0CC5\u0CC6\u0CC7\u0CC8\u0CC9"+
+            "\u0CCA\u0CCB\u0CCC\u0CCD\u0CCE\u0CCF\u0CD0\u0CD1"+
+            "\u0CD2\u0CD3\u0CD4\u0CD5\u0CD6\u0CD7\u0CD8\u0CD9"+
+            "\u0CDA\u0CDB\u0CDC\u0CDD\u0CDE\u0CDF\u0CE0\u0CE1"+
+            "\u0CE2\u0CE3\u0CE4\u0CE5\u0CE6\u0CE7\u0CE8\u0CE9"+
+            "\u0CEA\u0CEB\u0CEC\u0CED\u0CEE\u0CEF\u0CF0\u0CF1"+
+            "\u0CF2\u0CF3\u0CF4\u0CF5\u0CF6\u0CF7\u0CF8\u0CF9"+
+            "\u0CFA\u0CFB\u0CFC\u0CFD\u0CFE\u0CFF\u0D00\u0D01"+
+            "\u0D02\u0D03\u0D04\u0D05\u0D06\u0D07\u0D08\u0D09"+
+            "\u0D0A\u0D0B\u0D0C\u0D0D\u0D0E\u0D0F\u0D10\u0D11"+
+            "\u0D12\u0D13\u0D14\u0D15\u0D16\u0D17\u0D18\u0D19"+
+            "\u0D1A\u0D1B\u0D1C\u0D1D\u0D1E\u0D1F\u0D20\u0D21"+
+            "\u0D22\u0D23\u0D24\u0D25\u0D26\u0D27\u0D28\u0D29"+
+            "\u0D2A\u0D2B\u0D2C\u0D2D\u0D2E\u0D2F\u0D30\u0D31"+
+            "\u0D32\u0D33\u0D34\u0D35\u0D36\u0D37\u0D38\u0D39"+
+            "\u0D3A\u0D3B\u0D3C\u0D3D\u0D3E\u0D3F\u0D40\u0D41"+
+            "\u0D42\u0D43\u0D44\u0D45\u0D46\u0D47\u0D48\u0D49"+
+            "\u0D4A\u0D4B\u0D4C\u0D4D\u0D4E\u0D4F\u0D50\u0D51"+
+            "\u0D52\u0D53\u0D54\u0D55\u0D56\u0D57\u0D58\u0D59"+
+            "\u0D5A\u0D5B\u0D5C\u0D5D\u0D5E\u0D5F\u0D60\u0D61"+
+            "\u0D62\u0D63\u0D64\u0D65\u0D66\u0D67\u0D68\u0D69"+
+            "\u0D6A\u0D6B\u0D6C\u0D6D\u0D6E\u0D6F\u0D70\u0D71"+
+            "\u0D72\u0D73\u0D74\u0D75\u0D76\u0D77\u0D78\u0D79"+
+            "\u0D7A\u0D7B\u0D7C\u0D7D\u0D7E\u0D7F\u0D80\u0D81"+
+            "\u0D82\u0D83\u0D84\u0D85\u0D86\u0D87\u0D88\u0D89"+
+            "\u0D8A\u0D8B\u0D8C\u0D8D\u0D8E\u0D8F\u0D90\u0D91"+
+            "\u0D92\u0D93\u0D94\u0D95\u0D96\u0D97\u0D98\u0D99"+
+            "\u0D9A\u0D9B\u0D9C\u0D9D\u0D9E\u0D9F\u0DA0\u0DA1"+
+            "\u0DA2\u0DA3\u0DA4\u0DA5\u0DA6\u0DA7\u0DA8\u0DA9"+
+            "\u0DAA\u0DAB\u0DAC\u0DAD\u0DAE\u0DAF\u0DB0\u0DB1"+
+            "\u0DB2\u0DB3\u0DB4\u0DB5\u0DB6\u0DB7\u0DB8\u0DB9"+
+            "\u0DBA\u0DBB\u0DBC\u0DBD\u0DBE\u0DBF\u0DC0\u0DC1"+
+            "\u0DC2\u0DC3\u0DC4\u0DC5\u0DC6\u0DC7\u0DC8\u0DC9"+
+            "\u0DCA\u0DCB\u0DCC\u0DCD\u0DCE\u0DCF\u0DD0\u0DD1"+
+            "\u0DD2\u0DD3\u0DD4\u0DD5\u0DD6\u0DD7\u0DD8\u0DD9"+
+            "\u0DDA\u0DDB\u0DDC\u0DDD\u0DDE\u0DDF\u0DE0\u0DE1";
+
+        private final static String innerIndex1=
+            "\u0DE2\u0DE3\u0DE4\u0DE5\u0DE6\u0DE7\u0DE8\u0DE9"+
+            "\u0DEA\u0DEB\u0DEC\u0DED\u0DEE\u0DEF\u0DF0\u0DF1"+
+            "\u0DF2\u0DF3\u0DF4\u0DF5\u0DF6\u0DF7\u0DF8\u0DF9"+
+            "\u0DFA\u0DFB\u0DFC\u0DFD\u0DFE\u0DFF\u0E00\u0E01"+
+            "\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09"+
+            "\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11"+
+            "\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19"+
+            "\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21"+
+            "\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29"+
+            "\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31"+
+            "\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39"+
+            "\u0E3A\u0E3B\u0E3C\u0E3D\u0E3E\u0E3F\u0E40\u0E41"+
+            "\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49"+
+            "\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51"+
+            "\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59"+
+            "\u0E5A\u0E5B\u0E5C\u0E5D\u0E5E\u0E5F\u0E60\u0E61"+
+            "\u0E62\u0E63\u0E64\u0E65\u0E66\u0E67\u0E68\u0E69"+
+            "\u0E6A\u0E6B\u0E6C\u0E6D\u0E6E\u0E6F\u0E70\u0E71"+
+            "\u0E72\u0E73\u0E74\u0E75\u0E76\u0E77\u0E78\u0E79"+
+            "\u0E7A\u0E7B\u0E7C\u0E7D\u0E7E\u0E7F\u0E80\u0E81"+
+            "\u0E82\u0E83\u0E84\u0E85\u0E86\u0E87\u0E88\u0E89"+
+            "\u0E8A\u0E8B\u0E8C\u0E8D\u0E8E\u0E8F\u0E90\u0E91"+
+            "\u0E92\u0E93\u0E94\u0E95\u0E96\u0E97\u0E98\u0E99"+
+            "\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA0\u0EA1"+
+            "\u0EA2\u0EA3\u0EA4\u0EA5\u0EA6\u0EA7\u0EA8\u0EA9"+
+            "\u0EAA\u0EAB\u0EAC\u0EAD\u0EAE\u0EAF\u0EB0\u0EB1"+
+            "\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9"+
+            "\u0EBA\u0EBB\u0EBC\u0EBD\u0EBE\u0EBF\u0EC0\u0EC1"+
+            "\u0EC2\u0EC3\u0EC4\u0EC5\u0EC6\u0EC7\u0EC8\u0EC9"+
+            "\u0ECA\u0ECB\u0ECC\u0ECD\u0ECE\u0ECF\u0ED0\u0ED1"+
+            "\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9"+
+            "\u0EDA\u0EDB\u0EDC\u0EDD\u0EDE\u0EDF\u0EE0\u0EE1"+
+            "\u0EE2\u0EE3\u0EE4\u0EE5\u0EE6\u0EE7\u0EE8\u0EE9"+
+            "\u0EEA\u0EEB\u0EEC\u0EED\u0EEE\u0EEF\u0EF0\u0EF1"+
+            "\u0EF2\u0EF3\u0EF4\u0EF5\u0EF6\u0EF7\u0EF8\u0EF9"+
+            "\u0EFA\u0EFB\u0EFC\u0EFD\u0EFE\u0EFF\u0F00\u0F01"+
+            "\u0F02\u0F03\u0F04\u0F05\u0F06\u0F07\u0F08\u0F09"+
+            "\u0F0A\u0F0B\u0F0C\u0F0D\u0F0E\u0F0F\u0F10\u0F11"+
+            "\u0F12\u0F13\u0F14\u0F15\u0F16\u0F17\u0F18\u0F19"+
+            "\u0F1A\u0F1B\u0F1C\u0F1D\u0F1E\u0F1F\u0F20\u0F21"+
+            "\u0F22\u0F23\u0F24\u0F25\u0F26\u0F27\u0F28\u0F29"+
+            "\u0F2A\u0F2B\u0F2C\u0F2D\u0F2E\u0F2F\u0F30\u0F31"+
+            "\u0F32\u0F33\u0F34\u0F35\u0F36\u0F37\u0F38\u0F39"+
+            "\u0F3A\u0F3B\u0F3C\u0F3D\u0F3E\u0F3F\u0F40\u0F41"+
+            "\u0F42\u0F43\u0F44\u0F45\u0F46\u0F47\u0F48\u0F49"+
+            "\u0F4A\u0F4B\u0F4C\u0F4D\u0F4E\u0F4F\u0F50\u0F51"+
+            "\u0F52\u0F53\u0F54\u0F55\u0F56\u0F57\u0F58\u0F59"+
+            "\u0F5A\u0F5B\u0F5C\u0F5D\u0F5E\u0F5F\u0F60\u0F61"+
+            "\u0F62\u0F63\u0F64\u0F65\u0F66\u0F67\u0F68\u0F69"+
+            "\u0F6A\u0F6B\u0F6C\u0F6D\u0F6E\u0F6F\u0F70\u0F71"+
+            "\u0F72\u0F73\u0F74\u0F75\u0F76\u0F77\u0F78\u0F79"+
+            "\u0F7A\u0F7B\u0F7C\u0F7D\u0F7E\u0F7F\u0F80\u0F81"+
+            "\u0F82\u0F83\u0F84\u0F85\u0F86\u0F87\u0F88\u0F89"+
+            "\u0F8A\u0F8B\u0F8C\u0F8D\u0F8E\u0F8F\u0F90\u0F91"+
+            "\u0F92\u0F93\u0F94\u0F95\u0F96\u0F97\u0F98\u0F99"+
+            "\u0F9A\u0F9B\u0F9C\u0F9D\u0F9E\u0F9F\u0FA0\u0FA1"+
+            "\u0FA2\u0FA3\u0FA4\u0FA5\u0FA6\u0FA7\u0FA8\u0FA9"+
+            "\u0FAA\u0FAB\u0FAC\u0FAD\u0FAE\u0FAF\u0FB0\u0FB1"+
+            "\u0FB2\u0FB3\u0FB4\u0FB5\u0FB6\u0FB7\u0FB8\u0FB9"+
+            "\u0FBA\u0FBB\u0FBC\u0FBD\u0FBE\u0FBF\u0FC0\u0FC1"+
+            "\u0FC2\u0FC3\u0FC4\u0FC5\u0FC6\u0FC7\u0FC8\u0FC9"+
+            "\u0FCA\u0FCB\u0FCC\u0FCD\u0FCE\u0FCF\u0FD0\u0FD1"+
+            "\u0FD2\u0FD3\u0FD4\u0FD5\u0FD6\u0FD7\u0FD8\u0FD9"+
+            "\u0FDA\u0FDB\u0FDC\u0FDD\u0FDE\u0FDF\u0FE0\u0FE1"+
+            "\u0FE2\u0FE3\u0FE4\u0FE5\u0FE6\u0FE7\u0FE8\u0FE9"+
+            "\u0FEA\u0FEB\u0FEC\u0FED\u0FEE\u0FEF\u0FF0\u0FF1"+
+            "\u0FF2\u0FF3\u0FF4\u0FF5\u0FF6\u0FF7\u0FF8\u0FF9"+
+            "\u0FFA\u0FFB\u0FFC\u0FFD\u0FFE\u0FFF\u1000\u1001"+
+            "\u1002\u1003\u1004\u1005\u1006\u1007\u1008\u1009"+
+            "\u100A\u100B\u100C\u100D\u100E\u100F\u1010\u1011"+
+            "\u1012\u1013\u1014\u1015\u1016\u1017\u1018\u1019"+
+            "\u101A\u101B\u101C\u101D\u101E\u101F\u1020\u1021"+
+            "\u1022\u1023\u1024\u1025\u1026\u1027\u1028\u1029"+
+            "\u102A\u102B\u102C\u102D\u102E\u102F\u1030\u1031"+
+            "\u1032\u1033\u1034\u1035\u1036\u1037\u1038\u1039"+
+            "\u103A\u103B\u103C\u103D\u103E\u103F\u1040\u1041"+
+            "\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049"+
+            "\u104A\u104B\u104C\u104D\u104E\u104F\u1050\u1051"+
+            "\u1052\u1053\u1054\u1055\u1056\u1057\u1058\u1059"+
+            "\u105A\u105B\u105C\u105D\u105E\u105F\u1060\u1061"+
+            "\u1062\u1063\u1064\u1065\u1066\u1067\u1068\u1069"+
+            "\u106A\u106B\u106C\u106D\u106E\u106F\u1070\u1071"+
+            "\u1072\u1073\u1074\u1075\u1076\u1077\u1078\u1079"+
+            "\u107A\u107B\u107C\u107D\u107E\u107F\u1080\u1081"+
+            "\u1082\u1083\u1084\u1085\u1086\u1087\u1088\u1089"+
+            "\u108A\u108B\u108C\u108D\u108E\u108F\u1090\u1091"+
+            "\u1092\u1093\u1094\u1095\u1096\u1097\u1098\u1099"+
+            "\u109A\u109B\u109C\u109D\u109E\u109F\u10A0\u10A1"+
+            "\u10A2\u10A3\u10A4\u10A5\u10A6\u10A7\u10A8\u10A9"+
+            "\u10AA\u10AB\u10AC\u10AD\u10AE\u10AF\u10B0\u10B1"+
+            "\u10B2\u10B3\u10B4\u10B5\u10B6\u10B7\u10B8\u10B9"+
+            "\u10BA\u10BB\u10BC\u10BD\u10BE\u10BF\u10C0\u10C1"+
+            "\u10C2\u10C3\u10C4\u10C5\u10C6\u10C7\u10C8\u10C9"+
+            "\u10CA\u10CB\u10CC\u10CD\u10CE\u10CF\u10D0\u10D1"+
+            "\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9"+
+            "\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1"+
+            "\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9"+
+            "\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1"+
+            "\u10F2\u10F3\u10F4\u10F5\u10F6\u10F7\u10F8\u10F9"+
+            "\u10FA\u10FB\u10FC\u10FD\u10FE\u10FF\u1100\u1101"+
+            "\u1102\u1103\u1104\u1105\u1106\u1107\u1108\u1109"+
+            "\u110A\u110B\u110C\u110D\u110E\u110F\u1110\u1111"+
+            "\u1112\u1113\u1114\u1115\u1116\u1117\u1118\u1119"+
+            "\u111A\u111B\u111C\u111D\u111E\u111F\u1120\u1121"+
+            "\u1122\u1123\u1124\u1125\u1126\u1127\u1128\u1129"+
+            "\u112A\u112B\u112C\u112D\u112E\u112F\u1130\u1131"+
+            "\u1132\u1133\u1134\u1135\u1136\u1137\u1138\u1139"+
+            "\u113A\u113B\u113C\u113D\u113E\u113F\u1140\u1141"+
+            "\u1142\u1143\u1144\u1145\u1146\u1147\u1148\u1149"+
+            "\u114A\u114B\u114C\u114D\u114E\u114F\u1150\u1151"+
+            "\u1152\u1153\u1154\u1155\u1156\u1157\u1158\u1159"+
+            "\u115A\u115B\u115C\u115D\u115E\u115F\u1160\u1161"+
+            "\u1162\u1163\u1164\u1165\u1166\u1167\u1168\u1169"+
+            "\u116A\u116B\u116C\u116D\u116E\u116F\u1170\u1171"+
+            "\u1172\u1173\u1174\u1175\u1176\u1177\u1178\u1179"+
+            "\u117A\u117B\u117C\u117D\u117E\u117F\u1180\u1181"+
+            "\u1182\u1183\u1184\u1185\u1186\u1187\u1188\u1189"+
+            "\u118A\u118B\u118C\u118D\u118E\u118F\u1190\u1191"+
+            "\u1192\u1193\u1194\u1195\u1196\u1197\u1198\u1199"+
+            "\u119A\u119B\u119C\u119D\u119E\u119F\u11A0\u11A1"+
+            "\u11A2\u11A3\u11A4\u11A5\u11A6\u11A7\u11A8\u11A9"+
+            "\u11AA\u11AB\u11AC\u11AD\u11AE\u11AF\u11B0\u11B1"+
+            "\u11B2\u11B3\u11B4\u11B5\u11B6\u11B7\u11B8\u11B9"+
+            "\u11BA\u11BB\u11BC\u11BD\u11BE\u11BF\u11C0\u11C1"+
+            "\u11C2\u11C3\u11C4\u11C5\u11C6\u11C7\u11C8\u11C9"+
+            "\u11CA\u11CB\u11CC\u11CD\u11CE\u11CF\u11D0\u11D1"+
+            "\u11D2\u11D3\u11D4\u11D5\u11D6\u11D7\u11D8\u11D9"+
+            "\u11DA\u11DB\u11DC\u11DD\u11DE\u11DF\u11E0\u11E1"+
+            "\u11E2\u11E3\u11E4\u11E5\u11E6\u11E7\u11E8\u11E9"+
+            "\u11EA\u11EB\u11EC\u11ED\u11EE\u11EF\u11F0\u11F1"+
+            "\u11F2\u11F3\u11F4\u11F5\u11F6\u11F7\u11F8\u11F9"+
+            "\u11FA\u11FB\u11FC\u11FD\u11FE\u11FF\u1200\u1201"+
+            "\u1202\u1203\u1204\u1205\u1206\u1207\u1208\u1209"+
+            "\u120A\u120B\u120C\u120D\u120E\u120F\u1210\u1211"+
+            "\u1212\u1213\u1214\u1215\u1216\u1217\u1218\u1219"+
+            "\u121A\u121B\u121C\u121D\u121E\u121F\u1220\u1221"+
+            "\u1222\u1223\u1224\u1225\u1226\u1227\u1228\u1229"+
+            "\u122A\u122B\u122C\u122D\u122E\u122F\u1230\u1231"+
+            "\u1232\u1233\u1234\u1235\u1236\u1237\u1238\u1239"+
+            "\u123A\u123B\u123C\u123D\u123E\u123F\u1240\u1241"+
+            "\u1242\u1243\u1244\u1245\u1246\u1247\u1248\u1249"+
+            "\u124A\u124B\u124C\u124D\u124E\u124F\u1250\u1251"+
+            "\u1252\u1253\u1254\u1255\u1256\u1257\u1258\u1259"+
+            "\u125A\u125B\u125C\u125D\u125E\u125F\u1260\u1261"+
+            "\u1262\u1263\u1264\u1265\u1266\u1267\u1268\u1269"+
+            "\u126A\u126B\u126C\u126D\u126E\u126F\u1270\u1271"+
+            "\u1272\u1273\u1274\u1275\u1276\u1277\u1278\u1279"+
+            "\u127A\u127B\u127C\u127D\u127E\u127F\u1280\u1281"+
+            "\u1282\u1283\u1284\u1285\u1286\u1287\u1288\u1289"+
+            "\u128A\u128B\u128C\u128D\u128E\u128F\u1290\u1291"+
+            "\u1292\u1293\u1294\u1295\u1296\u1297\u1298\u1299"+
+            "\u129A\u129B\u129C\u129D\u129E\u129F\u12A0\u12A1"+
+            "\u12A2\u12A3\u12A4\u12A5\u12A6\u12A7\u12A8\u12A9"+
+            "\u12AA\u12AB\u12AC\u12AD\u12AE\u12AF\u12B0\u12B1"+
+            "\u12B2\u12B3\u12B4\u12B5\u12B6\u12B7\u12B8\u12B9"+
+            "\u12BA\u12BB\u12BC\u12BD\u12BE\u12BF\u12C0\u12C1"+
+            "\u12C2\u12C3\u12C4\u12C5\u12C6\u12C7\u12C8\u12C9"+
+            "\u12CA\u12CB\u12CC\u12CD\u12CE\u12CF\u12D0\u12D1"+
+            "\u12D2\u12D3\u12D4\u12D5\u12D6\u12D7\u12D8\u12D9"+
+            "\u12DA\u12DB\u12DC\u12DD\u12DE\u12DF\u12E0\u12E1"+
+            "\u12E2\u12E3\u12E4\u12E5\u12E6\u12E7\u12E8\u12E9"+
+            "\u12EA\u12EB\u12EC\u12ED\u12EE\u12EF\u12F0\u12F1"+
+            "\u12F2\u12F3\u12F4\u12F5\u12F6\u12F7\u12F8\u12F9"+
+            "\u12FA\u12FB\u12FC\u12FD\u12FE\u12FF\u1300\u1301"+
+            "\u1302\u1303\u1304\u1305\u1306\u1307\u1308\u1309"+
+            "\u130A\u130B\u130C\u130D\u130E\u130F\u1310\u1311"+
+            "\u1312\u1313\u1314\u1315\u1316\u1317\u1318\u1319"+
+            "\u131A\u131B\u131C\u131D\u131E\u131F\u1320\u1321"+
+            "\u1322\u1323\u1324\u1325\u1326\u1327\u1328\u1329"+
+            "\u132A\u132B\u132C\u132D\u132E\u132F\u1330\u1331"+
+            "\u1332\u1333\u1334\u1335\u1336\u1337\u1338\u1339"+
+            "\u133A\u133B\u133C\u133D\u133E\u133F\u1340\u1341"+
+            "\u1342\u1343\u1344\u1345\u1346\u1347\u1348\u1349"+
+            "\u134A\u134B\u134C\u134D\u134E\u134F\u1350\u1351"+
+            "\u1352\u1353\u1354\u1355\u1356\u1357\u1358\u1359"+
+            "\u135A\u135B\u135C\u135D\u135E\u135F\u1360\u1361"+
+            "\u1362\u1363\u1364\u1365\u1366\u1367\u1368\u1369"+
+            "\u136A\u136B\u136C\u136D\u136E\u136F\u1370\u1371"+
+            "\u1372\u1373\u1374\u1375\u1376\u1377\u1378\u1379"+
+            "\u137A\u137B\u137C\u137D\u137E\u137F\u1380\u1381"+
+            "\u1382\u1383\u1384\u1385\u1386\u1387\u1388\u1389"+
+            "\u138A\u138B\u138C\u138D\u138E\u138F\u1390\u1391"+
+            "\u1392\u1393\u1394\u1395\u1396\u1397\u1398\u1399"+
+            "\u139A\u139B\u139C\u139D\u139E\u139F\u13A0\u13A1"+
+            "\u13A2\u13A3\u13A4\u13A5\u13A6\u13A7\u13A8\u13A9"+
+            "\u13AA\u13AB\u13AC\u13AD\u13AE\u13AF\u13B0\u13B1"+
+            "\u13B2\u13B3\u13B4\u13B5\u13B6\u13B7\u13B8\u13B9"+
+            "\u13BA\u13BB\u13BC\u13BD\u13BE\u13BF\u13C0\u13C1"+
+            "\u13C2\u13C3\u13C4\u13C5\u13C6\u13C7\u13C8\u13C9"+
+            "\u13CA\u13CB\u13CC\u13CD\u13CE\u13CF\u13D0\u13D1"+
+            "\u13D2\u13D3\u13D4\u13D5\u13D6\u13D7\u13D8\u13D9"+
+            "\u13DA\u13DB\u13DC\u13DD\u13DE\u13DF\u13E0\u13E1"+
+            "\u13E2\u13E3\u13E4\u13E5\u13E6\u13E7\u13E8\u13E9"+
+            "\u13EA\u13EB\u13EC\u13ED\u13EE\u13EF\u13F0\u13F1"+
+            "\u13F2\u13F3\u13F4\u13F5\u13F6\u13F7\u13F8\u13F9"+
+            "\u13FA\u13FB\u13FC\u13FD\u13FE\u13FF\u1400\u1401"+
+            "\u1402\u1403\u1404\u1405\u1406\u1407\u1408\u1409"+
+            "\u140A\u140B\u140C\u140D\u140E\u140F\u1410\u1411"+
+            "\u1412\u1413\u1414\u1415\u1416\u1417\u1418\u1419"+
+            "\u141A\u141B\u141C\u141D\u141E\u141F\u1420\u1421"+
+            "\u1422\u1423\u1424\u1425\u1426\u1427\u1428\u1429"+
+            "\u142A\u142B\u142C\u142D\u142E\u142F\u1430\u1431"+
+            "\u1432\u1433\u1434\u1435\u1436\u1437\u1438\u1439"+
+            "\u143A\u143B\u143C\u143D\u143E\u143F\u1440\u1441"+
+            "\u1442\u1443\u1444\u1445\u1446\u1447\u1448\u1449"+
+            "\u144A\u144B\u144C\u144D\u144E\u144F\u1450\u1451"+
+            "\u1452\u1453\u1454\u1455\u1456\u1457\u1458\u1459"+
+            "\u145A\u145B\u145C\u145D\u145E\u145F\u1460\u1461"+
+            "\u1462\u1463\u1464\u1465\u1466\u1467\u1468\u1469"+
+            "\u146A\u146B\u146C\u146D\u146E\u146F\u1470\u1471"+
+            "\u1472\u1473\u1474\u1475\u1476\u1477\u1478\u1479"+
+            "\u147A\u147B\u147C\u147D\u147E\u147F\u1480\u1481"+
+            "\u1482\u1483\u1484\u1485\u1486\u1487\u1488\u1489"+
+            "\u148A\u148B\u148C\u148D\u148E\u148F\u1490\u1491"+
+            "\u1492\u1493\u1494\u1495\u1496\u1497\u1498\u1499"+
+            "\u149A\u149B\u149C\u149D\u149E\u149F\u14A0\u14A1"+
+            "\u14A2\u14A3\u14A4\u14A5\u14A6\u14A7\u14A8\u14A9"+
+            "\u14AA\u14AB\u14AC\u14AD\u14AE\u14AF\u14B0\u14B1"+
+            "\u14B2\u14B3\u14B4\u14B5\u14B6\u14B7\u14B8\u14B9"+
+            "\u14BA\u14BB\u14BC\u14BD\u14BE\u14BF\u14C0\u14C1"+
+            "\u14C2\u14C3\u14C4\u14C5\u14C6\u14C7\u14C8\u14C9"+
+            "\u14CA\u14CB\u14CC\u14CD\u14CE\u14CF\u14D0\u14D1"+
+            "\u14D2\u14D3\u14D4\u14D5\u14D6\u14D7\u14D8\u14D9"+
+            "\u14DA\u14DB\u14DC\u14DD\u14DE\u14DF\u14E0\u14E1"+
+            "\u14E2\u14E3\u14E4\u14E5\u14E6\u14E7\u14E8\u14E9"+
+            "\u14EA\u14EB\u14EC\u14ED\u14EE\u14EF\u14F0\u14F1"+
+            "\u14F2\u14F3\u14F4\u14F5\u14F6\u14F7\u14F8\u14F9"+
+            "\u14FA\u14FB\u14FC\u14FD\u14FE\u14FF\u1500\u1501"+
+            "\u1502\u1503\u1504\u1505\u1506\u1507\u1508\u1509"+
+            "\u150A\u150B\u150C\u150D\u150E\u150F\u1510\u1511"+
+            "\u1512\u1513\u1514\u1515\u1516\u1517\u1518\u1519"+
+            "\u151A\u151B\u151C\u151D\u151E\u151F\u1520\u1521"+
+            "\u1522\u1523\u1524\u1525\u1526\u1527\u1528\u1529"+
+            "\u152A\u152B\u152C\u152D\u152E\u152F\u1530\u1531"+
+            "\u1532\u1533\u1534\u1535\u1536\u1537\u1538\u1539"+
+            "\u153A\u153B\u153C\u153D\u153E\u153F\u1540\u1541"+
+            "\u1542\u1543\u1544\u1545\u1546\u1547\u1548\u1549"+
+            "\u154A\u154B\u154C\u154D\u154E\u154F\u1550\u1551"+
+            "\u1552\u1553\u1554\u1555\u1556\u1557\u1558\u1559"+
+            "\u155A\u155B\u155C\u155D\u155E\u155F\u1560\u1561"+
+            "\u1562\u1563\u1564\u1565\u1566\u1567\u1568\u1569"+
+            "\u156A\u156B\u156C\u156D\u156E\u156F\u1570\u1571"+
+            "\u1572\u1573\u1574\u1575\u1576\u1577\u1578\u1579"+
+            "\u157A\u157B\u157C\u157D\u157E\u157F\u1580\u1581"+
+            "\u1582\u1583\u1584\u1585\u1586\u1587\u1588\u1589"+
+            "\u158A\u158B\u158C\u158D\u158E\u158F\u1590\u1591"+
+            "\u1592\u1593\u1594\u1595\u1596\u1597\u1598\u1599"+
+            "\u159A\u159B\u159C\u159D\u159E\u159F\u15A0\u15A1"+
+            "\u15A2\u15A3\u15A4\u15A5\u15A6\u15A7\u15A8\u15A9"+
+            "\u15AA\u15AB\u15AC\u15AD\u15AE\u15AF\u15B0\u15B1"+
+            "\u15B2\u15B3\u15B4\u15B5\u15B6\u15B7\u15B8\u15B9"+
+            "\u15BA\u15BB\u15BC\u15BD\u15BE\u15BF\u15C0\u15C1"+
+            "\u15C2\u15C3\u15C4\u15C5\u15C6\u15C7\u15C8\u15C9"+
+            "\u15CA\u15CB\u15CC\u15CD\u15CE\u15CF\u15D0\u15D1"+
+            "\u15D2\u15D3\u15D4\u15D5\u15D6\u15D7\u15D8\u15D9"+
+            "\u15DA\u15DB\u15DC\u15DD\u15DE\u15DF\u15E0\u15E1"+
+            "\u15E2\u15E3\u15E4\u15E5\u15E6\u15E7\u15E8\u15E9"+
+            "\u15EA\u15EB\u15EC\u15ED\u15EE\u15EF\u15F0\u15F1"+
+            "\u15F2\u15F3\u15F4\u15F5\u15F6\u15F7\u15F8\u15F9"+
+            "\u15FA\u15FB\u15FC\u15FD\u15FE\u15FF\u1600\u1601"+
+            "\u1602\u1603\u1604\u1605\u1606\u1607\u1608\u1609"+
+            "\u160A\u160B\u160C\u160D\u160E\u160F\u1610\u1611"+
+            "\u1612\u1613\u1614\u1615\u1616\u1617\u1618\u1619"+
+            "\u161A\u161B\u161C\u161D\u161E\u161F\u1620\u1621"+
+            "\u1622\u1623\u1624\u1625\u1626\u1627\u1628\u1629"+
+            "\u162A\u162B\u162C\u162D\u162E\u162F\u1630\u1631"+
+            "\u1632\u1633\u1634\u1635\u1636\u1637\u1638\u1639"+
+            "\u163A\u163B\u163C\u163D\u163E\u163F\u1640\u1641"+
+            "\u1642\u1643\u1644\u1645\u1646\u1647\u1648\u1649"+
+            "\u164A\u164B\u164C\u164D\u164E\u164F\u1650\u1651"+
+            "\u1652\u1653\u1654\u1655\u1656\u1657\u1658\u1659"+
+            "\u165A\u165B\u165C\u165D\u165E\u165F\u1660\u1661"+
+            "\u1662\u1663\u1664\u1665\u1666\u1667\u1668\u1669"+
+            "\u166A\u166B\u166C\u166D\u166E\u166F\u1670\u1671"+
+            "\u1672\u1673\u1674\u1675\u1676\u1677\u1678\u1679"+
+            "\u167A\u167B\u167C\u167D\u167E\u167F\u1680\u1681"+
+            "\u1682\u1683\u1684\u1685\u1686\u1687\u1688\u1689"+
+            "\u168A\u168B\u168C\u168D\u168E\u168F\u1690\u1691"+
+            "\u1692\u1693\u1694\u1695\u1696\u1697\u1698\u1699"+
+            "\u169A\u169B\u169C\u169D\u169E\u169F\u16A0\u16A1"+
+            "\u16A2\u16A3\u16A4\u16A5\u16A6\u16A7\u16A8\u16A9"+
+            "\u16AA\u16AB\u16AC\u16AD\u16AE\u16AF\u16B0\u16B1"+
+            "\u16B2\u16B3\u16B4\u16B5\u16B6\u16B7\u16B8\u16B9"+
+            "\u16BA\u16BB\u16BC\u16BD\u16BE\u16BF\u16C0\u16C1"+
+            "\u16C2\u16C3\u16C4\u16C5\u16C6\u16C7\u16C8\u16C9"+
+            "\u16CA\u16CB\u16CC\u16CD\u16CE\u16CF\u16D0\u16D1"+
+            "\u16D2\u16D3\u16D4\u16D5\u16D6\u16D7\u16D8\u16D9"+
+            "\u16DA\u16DB\u16DC\u16DD\u16DE\u16DF\u16E0\u16E1"+
+            "\u16E2\u16E3\u16E4\u16E5\u16E6\u16E7\u16E8\u16E9"+
+            "\u16EA\u16EB\u16EC\u16ED\u16EE\u16EF\u16F0\u16F1"+
+            "\u16F2\u16F3\u16F4\u16F5\u16F6\u16F7\u16F8\u16F9"+
+            "\u16FA\u16FB\u16FC\u16FD\u16FE\u16FF\u1700\u1701"+
+            "\u1702\u1703\u1704\u1705\u1706\u1707\u1708\u1709"+
+            "\u170A\u170B\u170C\u170D\u170E\u170F\u1710\u1711"+
+            "\u1712\u1713\u1714\u1715\u1716\u1717\u1718\u1719"+
+            "\u171A\u171B\u171C\u171D\u171E\u171F\u1720\u1721"+
+            "\u1722\u1723\u1724\u1725\u1726\u1727\u1728\u1729"+
+            "\u172A\u172B\u172C\u172D\u172E\u172F\u1730\u1731"+
+            "\u1732\u1733\u1734\u1735\u1736\u1737\u1738\u1739"+
+            "\u173A\u173B\u173C\u173D\u173E\u173F\u1740\u1741"+
+            "\u1742\u1743\u1744\u1745\u1746\u1747\u1748\u1749"+
+            "\u174A\u174B\u174C\u174D\u174E\u174F\u1750\u1751"+
+            "\u1752\u1753\u1754\u1755\u1756\u1757\u1758\u1759"+
+            "\u175A\u175B\u175C\u175D\u175E\u175F\u1760\u1761"+
+            "\u1762\u1763\u1764\u1765\u1766\u1767\u1768\u1769"+
+            "\u176A\u176B\u176C\u176D\u176E\u176F\u1770\u1771"+
+            "\u1772\u1773\u1774\u1775\u1776\u1777\u1778\u1779"+
+            "\u177A\u177B\u177C\u177D\u177E\u177F\u1780\u1781"+
+            "\u1782\u1783\u1784\u1785\u1786\u1787\u1788\u1789"+
+            "\u178A\u178B\u178C\u178D\u178E\u178F\u1790\u1791"+
+            "\u1792\u1793\u1794\u1795\u1796\u1797\u1798\u1799"+
+            "\u179A\u179B\u179C\u179D\u179E\u179F\u17A0\u17A1"+
+            "\u17A2\u17A3\u17A4\u17A5\u17A6\u17A7\u17A8\u17A9"+
+            "\u17AA\u17AB\u17AC\u17AD\u17AE\u17AF\u17B0\u17B1"+
+            "\u17B2\u17B3\u17B4\u17B5\u17B6\u17B7\u17B8\u17B9"+
+            "\u17BA\u17BB\u17BC\u17BD\u17BE\u17BF\u17C0\u17C1"+
+            "\u17C2\u17C3\u17C4\u17C5\u17C6\u17C7\u17C8\u17C9"+
+            "\u17CA\u17CB\u17CC\u17CD\u17CE\u17CF\u17D0\u17D1"+
+            "\u17D2\u17D3\u17D4\u17D5\u17D6\u17D7\u17D8\u17D9"+
+            "\u17DA\u17DB\u17DC\u17DD\u17DE\u17DF\u17E0\u17E1"+
+            "\u17E2\u17E3\u17E4\u17E5\u17E6\u17E7\u17E8\u17E9"+
+            "\u17EA\u17EB\u17EC\u17ED\u17EE\u17EF\u17F0\u17F1"+
+            "\u17F2\u17F3\u17F4\u17F5\u17F6\u17F7\u17F8\u17F9"+
+            "\u17FA\u17FB\u17FC\u17FD\u17FE\u17FF\u1800\u1801"+
+            "\u1802\u1803\u1804\u1805\u1806\u1807\u1808\u1809"+
+            "\u180A\u180B\u180C\u180D\u180E\u180F\u1810\u1811"+
+            "\u1812\u1813\u1814\u1815\u1816\u1817\u1818\u1819"+
+            "\u181A\u181B\u181C\u181D\u181E\u181F\u1820\u1821"+
+            "\u1822\u1823\u1824\u1825\u1826\u1827\u1828\u1829"+
+            "\u182A\u182B\u182C\u182D\u182E\u182F\u1830\u1831"+
+            "\u1832\u1833\u1834\u1835\u1836\u1837\u1838\u1839"+
+            "\u183A\u183B\u183C\u183D\u183E\u183F\u1840\u1841"+
+            "\u1842\u1843\u1844\u1845\u1846\u1847\u1848\u1849"+
+            "\u184A\u184B\u184C\u184D\u184E\u184F\u1850\u1851"+
+            "\u1852\u1853\u1854\u1855\u1856\u1857\u1858\u1859"+
+            "\u185A\u185B\u185C\u185D\u185E\u185F\u1860\u1861"+
+            "\u1862\u1863\u1864\u1865\u1866\u1867\u1868\u1869"+
+            "\u186A\u186B\u186C\u186D\u186E\u186F\u1870\u1871"+
+            "\u1872\u1873\u1874\u1875\u1876\u1877\u1878\u1879"+
+            "\u187A\u187B\u187C\u187D\u187E\u187F\u1880\u1881"+
+            "\u1882\u1883\u1884\u1885\u1886\u1887\u1888\u1889"+
+            "\u188A\u188B\u188C\u188D\u188E\u188F\u1890\u1891"+
+            "\u1892\u1893\u1894\u1895\u1896\u1897\u1898\u1899"+
+            "\u189A\u189B\u189C\u189D\u189E\u189F\u18A0\u18A1"+
+            "\u18A2\u18A3\u18A4\u18A5\u18A6\u18A7\u18A8\u18A9"+
+            "\u18AA\u18AB\u18AC\u18AD\u18AE\u18AF\u18B0\u18B1"+
+            "\u18B2\u18B3\u18B4\u18B5\u18B6\u18B7\u18B8\u18B9"+
+            "\u18BA\u18BB\u18BC\u18BD\u18BE\u18BF\u18C0\u18C1"+
+            "\u18C2\u18C3\u18C4\u18C5\u18C6\u18C7\u18C8\u18C9"+
+            "\u18CA\u18CB\u18CC\u18CD\u18CE\u18CF\u18D0\u18D1"+
+            "\u18D2\u18D3\u18D4\u18D5\u18D6\u18D7\u18D8\u18D9"+
+            "\u18DA\u18DB\u18DC\u18DD\u18DE\u18DF\u18E0\u18E1"+
+            "\u18E2\u18E3\u18E4\u18E5\u18E6\u18E7\u18E8\u18E9"+
+            "\u18EA\u18EB\u18EC\u18ED\u18EE\u18EF\u18F0\u18F1"+
+            "\u18F2\u18F3\u18F4\u18F5\u18F6\u18F7\u18F8\u18F9"+
+            "\u18FA\u18FB\u18FC\u18FD\u18FE\u18FF\u1900\u1901"+
+            "\u1902\u1903\u1904\u1905\u1906\u1907\u1908\u1909"+
+            "\u190A\u190B\u190C\u190D\u190E\u190F\u1910\u1911"+
+            "\u1912\u1913\u1914\u1915\u1916\u1917\u1918\u1919"+
+            "\u191A\u191B\u191C\u191D\u191E\u191F\u1920\u1921"+
+            "\u1922\u1923\u1924\u1925\u1926\u1927\u1928\u1929"+
+            "\u192A\u192B\u192C\u192D\u192E\u192F\u1930\u1931"+
+            "\u1932\u1933\u1934\u1935\u1936\u1937\u1938\u1939"+
+            "\u193A\u193B\u193C\u193D\u193E\u193F\u1940\u1941"+
+            "\u1942\u1943\u1944\u1945\u1946\u1947\u1948\u1949"+
+            "\u194A\u194B\u194C\u194D\u194E\u194F\u1950\u1951"+
+            "\u1952\u1953\u1954\u1955\u1956\u1957\u1958\u1959"+
+            "\u195A\u195B\u195C\u195D\u195E\u195F\u1960\u1961"+
+            "\u1962\u1963\u1964\u1965\u1966\u1967\u1968\u1969"+
+            "\u196A\u196B\u196C\u196D\u196E\u196F\u1970\u1971"+
+            "\u1972\u1973\u1974\u1975\u1976\u1977\u1978\u1979"+
+            "\u197A\u197B\u197C\u197D\u197E\u197F\u1980\u1981"+
+            "\u1982\u1983\u1984\u1985\u1986\u1987\u1988\u1989"+
+            "\u198A\u198B\u198C\u198D\u198E\u198F\u1990\u1991"+
+            "\u1992\u1993\u1994\u1995\u1996\u1997\u1998\u1999"+
+            "\u199A\u199B\u199C\u199D\u199E\u199F\u19A0\u19A1"+
+            "\u19A2\u19A3\u19A4\u19A5\u19A6\u19A7\u19A8\u19A9"+
+            "\u19AA\u19AB\u19AC\u19AD\u19AE\u19AF\u19B0\u19B1"+
+            "\u19B2\u19B3\u19B4\u19B5\u19B6\u19B7\u19B8\u19B9"+
+            "\u19BA\u19BB\u19BC\u19BD\u19BE\u19BF\u19C0\u19C1"+
+            "\u19C2\u19C3\u19C4\u19C5\u19C6\u19C7\u19C8\u19C9"+
+            "\u19CA\u19CB\u19CC\u19CD\u19CE\u19CF\u19D0\u19D1"+
+            "\u19D2\u19D3\u19D4\u19D5\u19D6\u19D7\u19D8\u19D9"+
+            "\u19DA\u19DB\u19DC\u19DD\u19DE\u19DF\u19E0\u19E1"+
+            "\u19E2\u19E3\u19E4\u19E5\u19E6\u19E7\u19E8\u19E9"+
+            "\u19EA\u19EB\u19EC\u19ED\u19EE\u19EF\u19F0\u19F1"+
+            "\u19F2\u19F3\u19F4\u19F5\u19F6\u19F7\u19F8\u19F9"+
+            "\u19FA\u19FB\u19FC\u19FD\u19FE\u19FF\u1A00\u1A01"+
+            "\u1A02\u1A03\u1A04\u1A05\u1A06\u1A07\u1A08\u1A09"+
+            "\u1A0A\u1A0B\u1A0C\u1A0D\u1A0E\u1A0F\u1A10\u1A11"+
+            "\u1A12\u1A13\u1A14\u1A15\u1A16\u1A17\u1A18\u1A19"+
+            "\u1A1A\u1A1B\u1A1C\u1A1D\u1A1E\u1A1F\u1A20\u1A21"+
+            "\u1A22\u1A23\u1A24\u1A25\u1A26\u1A27\u1A28\u1A29"+
+            "\u1A2A\u1A2B\u1A2C\u1A2D\u1A2E\u1A2F\u1A30\u1A31"+
+            "\u1A32\u1A33\u1A34\u1A35\u1A36\u1A37\u1A38\u1A39"+
+            "\u1A3A\u1A3B\u1A3C\u1A3D\u1A3E\u1A3F\u1A40\u1A41"+
+            "\u1A42\u1A43\u1A44\u1A45\u1A46\u1A47\u1A48\u1A49"+
+            "\u1A4A\u1A4B\u1A4C\u1A4D\u1A4E\u1A4F\u1A50\u1A51"+
+            "\u1A52\u1A53\u1A54\u1A55\u1A56\u1A57\u1A58\u1A59"+
+            "\u1A5A\u1A5B\u1A5C\u1A5D\u1A5E\u1A5F\u1A60\u1A61"+
+            "\u1A62\u1A63\u1A64\u1A65\u1A66\u1A67\u1A68\u1A69"+
+            "\u1A6A\u1A6B\u1A6C\u1A6D\u1A6E\u1A6F\u1A70\u1A71"+
+            "\u1A72\u1A73\u1A74\u1A75\u1A76\u1A77\u1A78\u1A79"+
+            "\u1A7A\u1A7B\u1A7C\u1A7D\u1A7E\u1A7F\u1A80\u1A81"+
+            "\u1A82\u1A83\u1A84\u1A85\u1A86\u1A87\u1A88\u1A89"+
+            "\u1A8A\u1A8B\u1A8C\u1A8D\u1A8E\u1A8F\u1A90\u1A91"+
+            "\u1A92\u1A93\u1A94\u1A95\u1A96\u1A97\u1A98\u1A99"+
+            "\u1A9A\u1A9B\u1A9C\u1A9D\u1A9E\u1A9F\u1AA0\u1AA1"+
+            "\u1AA2\u1AA3\u1AA4\u1AA5\u1AA6\u1AA7\u1AA8\u1AA9"+
+            "\u1AAA\u1AAB\u1AAC\u1AAD\u1AAE\u1AAF\u1AB0\u1AB1"+
+            "\u1AB2\u1AB3\u1AB4\u1AB5\u1AB6\u1AB7\u1AB8\u1AB9"+
+            "\u1ABA\u1ABB\u1ABC\u1ABD\u1ABE\u1ABF\u1AC0\u1AC1"+
+            "\u1AC2\u1AC3\u1AC4\u1AC5\u1AC6\u1AC7\u1AC8\u1AC9"+
+            "\u1ACA\u1ACB\u1ACC\u1ACD\u1ACE\u1ACF\u1AD0\u1AD1"+
+            "\u1AD2\u1AD3\u1AD4\u1AD5\u1AD6\u1AD7\u1AD8\u1AD9"+
+            "\u1ADA\u1ADB\u1ADC\u1ADD\u1ADE\u1ADF\u1AE0\u1AE1"+
+            "\u1AE2\u1AE3\u1AE4\u1AE5\u1AE6\u1AE7\u1AE8\u1AE9"+
+            "\u1AEA\u1AEB\u1AEC\u1AED\u1AEE\u1AEF\u1AF0\u1AF1"+
+            "\u1AF2\u1AF3\u1AF4\u1AF5\u1AF6\u1AF7\u1AF8\u1AF9"+
+            "\u1AFA\u1AFB\u1AFC\u1AFD\u1AFE\u1AFF\u1B00\u1B01"+
+            "\u1B02\u1B03\u1B04\u1B05\u1B06\u1B07\u1B08\u1B09"+
+            "\u1B0A\u1B0B\u1B0C\u1B0D\u1B0E\u1B0F\u1B10\u1B11"+
+            "\u1B12\u1B13\u1B14\u1B15\u1B16\u1B17\u1B18\u1B19"+
+            "\u1B1A\u1B1B\u1B1C\u1B1D\u1B1E\u1B1F\u1B20\u1B21"+
+            "\u1B22\u1B23\u1B24\u1B25\u1B26\u1B27\u1B28\u1B29"+
+            "\u1B2A\u1B2B\u1B2C\u1B2D\u1B2E\u1B2F\u1B30\u1B31"+
+            "\u1B32\u1B33\u1B34\u1B35\u1B36\u1B37\u1B38\u1B39"+
+            "\u1B3A\u1B3B\u1B3C\u1B3D\u1B3E\u1B3F\u1B40\u1B41"+
+            "\u1B42\u1B43\u1B44\u1B45\u1B46\u1B47\u1B48\u1B49"+
+            "\u1B4A\u1B4B\u1B4C\u1B4D\u1B4E\u1B4F\u1B50\u1B51"+
+            "\u1B52\u1B53\u1B54\u1B55\u1B56\u1B57\u1B58\u1B59"+
+            "\u1B5A\u1B5B\u1B5C\u1B5D\u1B5E\u1B5F\u1B60\u1B61"+
+            "\u1B62\u1B63\u1B64\u1B65\u1B66\u1B67\u1B68\u1B69"+
+            "\u1B6A\u1B6B\u1B6C\u1B6D\u1B6E\u1B6F\u1B70\u1B71"+
+            "\u1B72\u1B73\u1B74\u1B75\u1B76\u1B77\u1B78\u1B79"+
+            "\u1B7A\u1B7B\u1B7C\u1B7D\u1B7E\u1B7F\u1B80\u1B81"+
+            "\u1B82\u1B83\u1B84\u1B85\u1B86\u1B87\u1B88\u1B89"+
+            "\u1B8A\u1B8B\u1B8C\u1B8D\u1B8E\u1B8F\u1B90\u1B91"+
+            "\u1B92\u1B93\u1B94\u1B95\u1B96\u1B97\u1B98\u1B99"+
+            "\u1B9A\u1B9B\u1B9C\u1B9D\u1B9E\u1B9F\u1BA0\u1BA1"+
+            "\u1BA2\u1BA3\u1BA4\u1BA5\u1BA6\u1BA7\u1BA8\u1BA9"+
+            "\u1BAA\u1BAB\u1BAC\u1BAD\u1BAE\u1BAF\u1BB0\u1BB1"+
+            "\u1BB2\u1BB3\u1BB4\u1BB5\u1BB6\u1BB7\u1BB8\u1BB9"+
+            "\u1BBA\u1BBB\u1BBC\u1BBD\u1BBE\u1BBF\u1BC0\u1BC1"+
+            "\u1BC2\u1BC3\u1BC4\u1BC5\u1BC6\u1BC7\u1BC8\u1BC9"+
+            "\u1BCA\u1BCB\u1BCC\u1BCD\u1BCE\u1BCF\u1BD0\u1BD1"+
+            "\u1BD2\u1BD3\u1BD4\u1BD5\u1BD6\u1BD7\u1BD8\u1BD9"+
+            "\u1BDA\u1BDB\u1BDC\u1BDD\u1BDE\u1BDF\u1BE0\u1BE1"+
+            "\u1BE2\u1BE3\u1BE4\u1BE5\u1BE6\u1BE7\u1BE8\u1BE9"+
+            "\u1BEA\u1BEB\u1BEC\u1BED\u1BEE\u1BEF\u1BF0\u1BF1"+
+            "\u1BF2\u1BF3\u1BF4\u1BF5\u1BF6\u1BF7\u1BF8\u1BF9"+
+            "\u1BFA\u1BFB\u1BFC\u1BFD\u1BFE\u1BFF\u1C00\u1C01"+
+            "\u1C02\u1C03\u1C04\u1C05\u1C06\u1C07\u1C08\u1C09"+
+            "\u1C0A\u1C0B\u1C0C\u1C0D\u1C0E\u1C0F\u1C10\u1C11"+
+            "\u1C12\u1C13\u1C14\u1C15\u1C16\u1C17\u1C18\u1C19"+
+            "\u1C1A\u1C1B\u1C1C\u1C1D\u1C1E\u1C1F\u1C20\u1C21"+
+            "\u1C22\u1C23\u1C24\u1C25\u1C26\u1C27\u1C28\u1C29"+
+            "\u1C2A\u1C2B\u1C2C\u1C2D\u1C2E\u1C2F\u1C30\u1C31"+
+            "\u1C32\u1C33\u1C34\u1C35\u1C36\u1C37\u1C38\u1C39"+
+            "\u1C3A\u1C3B\u1C3C\u1C3D\u1C3E\u1C3F\u1C40\u1C41"+
+            "\u1C42\u1C43\u1C44\u1C45\u1C46\u1C47\u1C48\u1C49"+
+            "\u1C4A\u1C4B\u1C4C\u1C4D\u1C4E\u1C4F\u1C50\u1C51"+
+            "\u1C52\u1C53\u1C54\u1C55\u1C56\u1C57\u1C58\u1C59"+
+            "\u1C5A\u1C5B\u1C5C\u1C5D\u1C5E\u1C5F\u1C60\u1C61"+
+            "\u1C62\u1C63\u1C64\u1C65\u1C66\u1C67\u1C68\u1C69"+
+            "\u1C6A\u1C6B\u1C6C\u1C6D\u1C6E\u1C6F\u1C70\u1C71"+
+            "\u1C72\u1C73\u1C74\u1C75\u1C76\u1C77\u1C78\u1C79"+
+            "\u1C7A\u1C7B\u1C7C\u1C7D\u1C7E\u1C7F\u1C80\u1C81"+
+            "\u1C82\u1C83\u1C84\u1C85\u1C86\u1C87\u1C88\u1C89"+
+            "\u1C8A\u1C8B\u1C8C\u1C8D\u1C8E\u1C8F\u1C90\u1C91"+
+            "\u1C92\u1C93\u1C94\u1C95\u1C96\u1C97\u1C98\u1C99"+
+            "\u1C9A\u1C9B\u1C9C\u1C9D\u1C9E\u1C9F\u1CA0\u1CA1"+
+            "\u1CA2\u1CA3\u1CA4\u1CA5\u1CA6\u1CA7\u1CA8\u1CA9"+
+            "\u1CAA\u1CAB\u1CAC\u1CAD\u1CAE\u1CAF\u1CB0\u1CB1"+
+            "\u1CB2\u1CB3\u1CB4\u1CB5\u1CB6\u1CB7\u1CB8\u1CB9"+
+            "\u1CBA\u1CBB\u1CBC\u1CBD\u1CBE\u1CBF\u1CC0\u1CC1"+
+            "\u1CC2\u1CC3\u1CC4\u1CC5\u1CC6\u1CC7\u1CC8\u1CC9"+
+            "\u1CCA\u1CCB\u1CCC\u1CCD\u1CCE\u1CCF\u1CD0\u1CD1"+
+            "\u1CD2\u1CD3\u1CD4\u1CD5\u1CD6\u1CD7\u1CD8\u1CD9"+
+            "\u1CDA\u1CDB\u1CDC\u1CDD\u1CDE\u1CDF\u1CE0\u1CE1"+
+            "\u1CE2\u1CE3\u1CE4\u1CE5\u1CE6\u1CE7\u1CE8\u1CE9"+
+            "\u1CEA\u1CEB\u1CEC\u1CED\u1CEE\u1CEF\u1CF0\u1CF1"+
+            "\u1CF2\u1CF3\u1CF4\u1CF5\u1CF6\u1CF7\u1CF8\u1CF9"+
+            "\u1CFA\u1CFB\u1CFC\u1CFD\u1CFE\u1CFF\u1D00\u1D01"+
+            "\u1D02\u1D03\u1D04\u1D05\u1D06\u1D07\u1D08\u1D09"+
+            "\u1D0A\u1D0B\u1D0C\u1D0D\u1D0E\u1D0F\u1D10\u1D11"+
+            "\u1D12\u1D13\u1D14\u1D15\u1D16\u1D17\u1D18\u1D19"+
+            "\u1D1A\u1D1B\u1D1C\u1D1D\u1D1E\u1D1F\u1D20\u1D21"+
+            "\u1D22\u1D23\u1D24\u1D25\u1D26\u1D27\u1D28\u1D29"+
+            "\u1D2A\u1D2B\u1D2C\u1D2D\u1D2E\u1D2F\u1D30\u1D31"+
+            "\u1D32\u1D33\u1D34\u1D35\u1D36\u1D37\u1D38\u1D39"+
+            "\u1D3A\u1D3B\u1D3C\u1D3D\u1D3E\u1D3F\u1D40\u1D41"+
+            "\u1D42\u1D43\u1D44\u1D45\u1D46\u1D47\u1D48\u1D49"+
+            "\u1D4A\u1D4B\u1D4C\u1D4D\u1D4E\u1D4F\u1D50\u1D51"+
+            "\u1D52\u1D53\u1D54\u1D55\u1D56\u1D57\u1D58\u1D59"+
+            "\u1D5A\u1D5B\u1D5C\u1D5D\u1D5E\u1D5F\u1D60\u1D61"+
+            "\u1D62\u1D63\u1D64\u1D65\u1D66\u1D67\u1D68\u1D69"+
+            "\u1D6A\u1D6B\u1D6C\u1D6D\u1D6E\u1D6F\u1D70\u1D71"+
+            "\u1D72\u1D73\u1D74\u1D75\u1D76\u1D77\u1D78\u1D79"+
+            "\u1D7A\u1D7B\u1D7C\u1D7D\u1D7E\u1D7F\u1D80\u1D81"+
+            "\u1D82\u1D83\u1D84\u1D85\u1D86\u1D87\u1D88\u1D89"+
+            "\u1D8A\u1D8B\u1D8C\u1D8D\u1D8E\u1D8F\u1D90\u1D91"+
+            "\u1D92\u1D93\u1D94\u1D95\u1D96\u1D97\u1D98\u1D99"+
+            "\u1D9A\u1D9B\u1D9C\u1D9D\u1D9E\u1D9F\u1DA0\u1DA1"+
+            "\u1DA2\u1DA3\u1DA4\u1DA5\u1DA6\u1DA7\u1DA8\u1DA9"+
+            "\u1DAA\u1DAB\u1DAC\u1DAD\u1DAE\u1DAF\u1DB0\u1DB1"+
+            "\u1DB2\u1DB3\u1DB4\u1DB5\u1DB6\u1DB7\u1DB8\u1DB9"+
+            "\u1DBA\u1DBB\u1DBC\u1DBD\u1DBE\u1DBF\u1DC0\u1DC1"+
+            "\u1DC2\u1DC3\u1DC4\u1DC5\u1DC6\u1DC7\u1DC8\u1DC9"+
+            "\u1DCA\u1DCB\u1DCC\u1DCD\u1DCE\u1DCF\u1DD0\u1DD1"+
+            "\u1DD2\u1DD3\u1DD4\u1DD5\u1DD6\u1DD7\u1DD8\u1DD9"+
+            "\u1DDA\u1DDB\u1DDC\u1DDD\u1DDE\u1DDF\u1DE0\u1DE1";
+
+        private final static String innerIndex2=
+            "\u1DE2\u1DE3\u1DE4\u1DE5\u1DE6\u1DE7\u1DE8\u1DE9"+
+            "\u1DEA\u1DEB\u1DEC\u1DED\u1DEE\u1DEF\u1DF0\u1DF1"+
+            "\u1DF2\u1DF3\u1DF4\u1DF5\u1DF6\u1DF7\u1DF8\u1DF9"+
+            "\u1DFA\u1DFB\u1DFC\u1DFD\u1DFE\u1DFF\u1E00\u1E01"+
+            "\u1E02\u1E03\u1E04\u1E05\u1E06\u1E07\u1E08\u1E09"+
+            "\u1E0A\u1E0B\u1E0C\u1E0D\u1E0E\u1E0F\u1E10\u1E11"+
+            "\u1E12\u1E13\u1E14\u1E15\u1E16\u1E17\u1E18\u1E19"+
+            "\u1E1A\u1E1B\u1E1C\u1E1D\u1E1E\u1E1F\u1E20\u1E21"+
+            "\u1E22\u1E23\u1E24\u1E25\u1E26\u1E27\u1E28\u1E29"+
+            "\u1E2A\u1E2B\u1E2C\u1E2D\u1E2E\u1E2F\u1E30\u1E31"+
+            "\u1E32\u1E33\u1E34\u1E35\u1E36\u1E37\u1E38\u1E39"+
+            "\u1E3A\u1E3B\u1E3C\u1E3D\u1E3E\u1E3F\u1E40\u1E41"+
+            "\u1E42\u1E43\u1E44\u1E45\u1E46\u1E47\u1E48\u1E49"+
+            "\u1E4A\u1E4B\u1E4C\u1E4D\u1E4E\u1E4F\u1E50\u1E51"+
+            "\u1E52\u1E53\u1E54\u1E55\u1E56\u1E57\u1E58\u1E59"+
+            "\u1E5A\u1E5B\u1E5C\u1E5D\u1E5E\u1E5F\u1E60\u1E61"+
+            "\u1E62\u1E63\u1E64\u1E65\u1E66\u1E67\u1E68\u1E69"+
+            "\u1E6A\u1E6B\u1E6C\u1E6D\u1E6E\u1E6F\u1E70\u1E71"+
+            "\u1E72\u1E73\u1E74\u1E75\u1E76\u1E77\u1E78\u1E79"+
+            "\u1E7A\u1E7B\u1E7C\u1E7D\u1E7E\u1E7F\u1E80\u1E81"+
+            "\u1E82\u1E83\u1E84\u1E85\u1E86\u1E87\u1E88\u1E89"+
+            "\u1E8A\u1E8B\u1E8C\u1E8D\u1E8E\u1E8F\u1E90\u1E91"+
+            "\u1E92\u1E93\u1E94\u1E95\u1E96\u1E97\u1E98\u1E99"+
+            "\u1E9A\u1E9B\u1E9C\u1E9D\u1E9E\u1E9F\u1EA0\u1EA1"+
+            "\u1EA2\u1EA3\u1EA4\u1EA5\u1EA6\u1EA7\u1EA8\u1EA9"+
+            "\u1EAA\u1EAB\u1EAC\u1EAD\u1EAE\u1EAF\u1EB0\u1EB1"+
+            "\u1EB2\u1EB3\u1EB4\u1EB5\u1EB6\u1EB7\u1EB8\u1EB9"+
+            "\u1EBA\u1EBB\u1EBC\u1EBD\u1EBE\u1EBF\u1EC0\u1EC1"+
+            "\u1EC2\u1EC3\u1EC4\u1EC5\u1EC6\u1EC7\u1EC8\u1EC9"+
+            "\u1ECA\u1ECB\u1ECC\u1ECD\u1ECE\u1ECF\u1ED0\u1ED1"+
+            "\u1ED2\u1ED3\u1ED4\u1ED5\u1ED6\u1ED7\u1ED8\u1ED9"+
+            "\u1EDA\u1EDB\u1EDC\u1EDD\u1EDE\u1EDF\u1EE0\u1EE1"+
+            "\u1EE2\u1EE3\u1EE4\u1EE5\u1EE6\u1EE7\u1EE8\u1EE9"+
+            "\u1EEA\u1EEB\u1EEC\u1EED\u1EEE\u1EEF\u1EF0\u1EF1"+
+            "\u0000\u1EF2\u1EF3\u0000\u0000\u0000\u0000\u1EF4"+
+            "\u0000\u0000\u1EF5\u1EF6\u0000\u0000\u1EF7\u1EF8"+
+            "\u1EF9\u1EFA\u1EFB\u1EFC\u1EFD\u0000\u0000\u1EFE"+
+            "\u1EFF\u1F00\u1F01\u1F02\u1F03\u1F04\u1F05\u1F06"+
+            "\u0000\u1F07\u0000\u0000\u1F08\u0000\u1F09\u1F0A"+
+            "\u1F0B\u1F0C\u1F0D\u0000\u1F0E\u1F0F\u1F10\u1F11"+
+            "\u1F12\u1F13\u1F14\u1F15\u1F16\u1F17\u1F18\u1F19"+
+            "\u1F1A\u1F1B\u1F1C\u1F1D\u1F1E\u1F1F\u1F20\u1F21"+
+            "\u1F22\u1F23\u1F24\u1F25\u1F26\u1F27\u1F28\u1F29"+
+            "\u1F2A\u1F2B\u1F2C\u1F2D\u1F2E\u1F2F\u1F30\u1F31"+
+            "\u1F32\u1F33\u1F34\u1F35\u1F36\u1F37\u1F38\u1F39"+
+            "\u1F3A\u1F3B\u1F3C\u1F3D\u1F3E\u1F3F\u1F40\u1F41"+
+            "\u1F42\u1F43\u1F44\u1F45\u1F46\u1F47\u1F48\u1F49"+
+            "\u1F4A\u1F4B\u1F4C\u1F4D\u1F4E\u1F4F\u1F50\u1F51"+
+            "\u1F52\u1F53\u1F54\u1F55\u1F56\u1F57\u1F58\u1F59"+
+            "\u1F5A\u1F5B\u1F5C\u1F5D\u1F5E\u1F5F\u1F60\u1F61"+
+            "\u1F62\u1F63\u1F64\u1F65\u1F66\u1F67\u1F68\u1F69"+
+            "\u1F6A\u1F6B\u1F6C\u1F6D\u1F6E\u1F6F\u1F70\u1F71"+
+            "\u1F72\u1F73\u1F74\u1F75\u1F76\u1F77\u1F78\u1F79"+
+            "\u1F7A\u1F7B\u1F7C\u1F7D\u0000\u1F7E\u1F7F\u1F80"+
+            "\u1F81\u1F82\u1F83\u1F84\u1F85\u1F86\u1F87\u1F88"+
+            "\u1F89\u1F8A\u1F8B\u1F8C\u1F8D\u1F8E\u1F8F\u1F90"+
+            "\u1F91\u1F92\u1F93\u1F94\u1F95\u1F96\u1F97\u1F98"+
+            "\u1F99\u1F9A\u1F9B\u1F9C\u1F9D\u1F9E\u1F9F\u1FA0"+
+            "\u1FA1\u1FA2\u1FA3\u1FA4\u1FA5\u1FA6\u1FA7\u1FA8"+
+            "\u1FA9\u1FAA\u1FAB\u1FAC\u1FAD\u1FAE\u1FAF\u1FB0"+
+            "\u1FB1\u1FB2\u1FB3\u1FB4\u1FB5\u1FB6\u1FB7\u1FB8"+
+            "\u1FB9\u1FBA\u1FBB\u1FBC\u1FBD\u1FBE\u1FBF\u1FC0"+
+            "\u1FC1\u1FC2\u1FC3\u1FC4\u1FC5\u1FC6\u1FC7\u1FC8"+
+            "\u1FC9\u1FCA\u1FCB\u1FCC\u1FCD\u1FCE\u1FCF\u1FD0"+
+            "\u1FD1\u1FD2\u1FD3\u0000\u1FD4\u0000\u1FD5\u1FD6"+
+            "\u1FD7\u0000\u1FD8\u1FD9\u1FDA\u1FDB\u1FDC\u1FDD"+
+            "\u1FDE\u1FDF\u1FE0\u1FE1\u1FE2\u1FE3\u0000\u1FE4"+
+            "\u1FE5\u1FE6\u1FE7\u1FE8\u1FE9\u1FEA\u1FEB\u1FEC"+
+            "\u1FED\u0000\u1FEE\u1FEF\u1FF0\u1FF1\u1FF2\u1FF3"+
+            "\u1FF4\u1FF5\u1FF6\u1FF7\u1FF8\u1FF9\u1FFA\u1FFB"+
+            "\u1FFC\u1FFD\u1FFE\u1FFF\u2000\u2001\u2002\u2003"+
+            "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u200B"+
+            "\u200C\u200D\u200E\u200F\u2010\u2011\u2012\u2013"+
+            "\u2014\u2015\u2016\u2017\u2018\u2019\u201A\u201B"+
+            "\u201C\u201D\u201E\u201F\u2020\u2021\u2022\u2023"+
+            "\u2024\u2025\u2026\u2027\u2028\u2029\u202A\u202B"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u202C\u202D\u202E\u202F"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u2030\u2031\u2032\u2033\u2034\u2035"+
+            "\u2036\u2037\u2038\u2039\u203A\u203B\u203C\u203D"+
+            "\u203E\u203F\u2040\u2041\u2042\u2043\u2044\u2045"+
+            "\u0000\u0000\u0000\u0000\u2046\u2047\u0000\u0000"+
+            "\u0000\u0000\u2048\u2049\u204A\u204B\u204C\u204D"+
+            "\u204E\u204F\u2050\u2051\u2052\u2053\u2054\u2055"+
+            "\u2056\u2057\u2058\u2059\u205A\u205B\u205C\u205D"+
+            "\u205E\u205F\u2060\u2061\u2062\u2063\u2064\u2065"+
+            "\u2066\u2067\u2068\u2069\u206A\u206B\u206C\u206D"+
+            "\u206E\u206F\u2070\u2071\u2072\u2073\u2074\u2075"+
+            "\u2076\u2077\u2078\u2079\u207A\u207B\u207C\u207D"+
+            "\u207E\u207F\u2080\u2081\u2082\u2083\u2084\u2085"+
+            "\u2086\u2087\u2088\u2089\u208A\u208B\u208C\u208D"+
+            "\u208E\u208F\u2090\u2091\u2092\u2093\u2094\u2095"+
+            "\u2096\u2097\u2098\u2099\u209A\u209B\u209C\u209D"+
+            "\u209E\u209F\u20A0\u20A1\u20A2\u20A3\u20A4\u20A5"+
+            "\u20A6\u20A7\u20A8\u20A9\u20AA\u20AB\u20AC\u20AD"+
+            "\u20AE\u20AF\u20B0\u20B1\u20B2\u20B3\u20B4\u20B5"+
+            "\u0000\u20B6\u20B7\u20B8\u20B9\u20BA\u20BB\u0000"+
+            "\u20BC\u0000\u20BD\u20BE\u20BF\u0000\u20C0\u20C1"+
+            "\u20C2\u20C3\u0000\u20C4\u20C5\u0000\u0000\u0000"+
+            "\u0000\u20C6\u20C7\u0000\u20C8\u0000\u20C9\u0000"+
+            "\u0000\u0000\u0000\u0000\u20CA\u20CB\u0000\u20CC"+
+            "\u20CD\u20CE\u20CF\u20D0\u0000\u0000\u0000\u0000"+
+            "\u20D1\u20D2\u20D3\u20D4\u20D5\u0000\u20D6\u20D7"+
+            "\u20D8\u20D9\u20DA\u20DB\u20DC\u20DD\u20DE\u20DF"+
+            "\u0000\u20E0\u20E1\u20E2\u0000\u20E3\u20E4\u20E5"+
+            "\u20E6\u20E7\u0000\u20E8\u20E9\u20EA\u20EB\u20EC"+
+            "\u20ED\u20EE\u20EF\u20F0\u20F1\u20F2\u20F3\u20F4"+
+            "\u0000\u0000\u20F5\u20F6\u0000\u0000\u0000\u0000"+
+            "\u20F7\u20F8\u20F9\u20FA\u20FB\u20FC\u0000\u0000"+
+            "\u20FD\u20FE\u20FF\u2100\u2101\u2102\u2103\u2104"+
+            "\u2105\u2106\u2107\u2108\u2109\u210A\u210B\u210C"+
+            "\u210D\u210E\u210F\u2110\u2111\u2112\u2113\u2114"+
+            "\u2115\u2116\u2117\u2118\u2119\u211A\u211B\u211C"+
+            "\u211D\u211E\u211F\u2120\u2121\u0000\u2122\u2123"+
+            "\u2124\u0000\u2125\u2126\u2127\u2128\u2129\u212A"+
+            "\u212B\u212C\u212D\u212E\u212F\u0000\u2130\u2131"+
+            "\u2132\u2133\u2134\u2135\u2136\u2137\u2138\u2139"+
+            "\u213A\u213B\u213C\u213D\u213E\u213F\u2140\u2141"+
+            "\u2142\u2143\u2144\u2145\u2146\u2147\u2148\u0000"+
+            "\u2149\u214A\u214B\u214C\u214D\u214E\u214F\u2150"+
+            "\u2151\u2152\u2153\u2154\u2155\u2156\u2157\u2158"+
+            "\u2159\u215A\u215B\u215C\u215D\u215E\u215F\u2160"+
+            "\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168"+
+            "\u2169\u216A\u216B\u216C\u216D\u216E\u216F\u2170"+
+            "\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178"+
+            "\u2179\u217A\u217B\u217C\u217D\u217E\u217F\u2180"+
+            "\u2181\u2182\u2183\u2184\u2185\u2186\u2187\u2188"+
+            "\u2189\u218A\u218B\u218C\u218D\u218E\u218F\u2190"+
+            "\u2191\u2192\u2193\u2194\u2195\u2196\u2197\u2198"+
+            "\u2199\u219A\u0000\u219B\u219C\u219D\u219E\u219F"+
+            "\u21A0\u21A1\u21A2\u21A3\u21A4\u21A5\u21A6\u21A7"+
+            "\u21A8\u21A9\u21AA\u21AB\u21AC\u21AD\u21AE\u21AF"+
+            "\u21B0\u21B1\u21B2\u21B3\u21B4\u21B5\u21B6\u21B7"+
+            "\u21B8\u21B9\u21BA\u21BB\u21BC\u21BD\u21BE\u21BF"+
+            "\u21C0\u21C1\u21C2\u21C3\u21C4\u21C5\u21C6\u21C7"+
+            "\u21C8\u21C9\u21CA\u21CB\u21CC\u21CD\u21CE\u21CF"+
+            "\u21D0\u21D1\u21D2\u21D3\u21D4\u21D5\u21D6\u21D7"+
+            "\u21D8\u21D9\u21DA\u21DB\u21DC\u21DD\u21DE\u21DF"+
+            "\u21E0\u21E1\u21E2\u21E3\u21E4\u21E5\u21E6\u21E7"+
+            "\u21E8\u21E9\u21EA\u21EB\u21EC\u21ED\u21EE\u21EF"+
+            "\u21F0\u21F1\u21F2\u21F3\u21F4\u21F5\u21F6\u21F7"+
+            "\u21F8\u21F9\u21FA\u21FB\u21FC\u21FD\u21FE\u21FF"+
+            "\u2200\u2201\u2202\u2203\u2204\u2205\u2206\u2207"+
+            "\u2208\u2209\u220A\u220B\u220C\u220D\u220E\u220F"+
+            "\u2210\u2211\u2212\u2213\u2214\u2215\u2216\u2217"+
+            "\u2218\u2219\u221A\u221B\u221C\u221D\u221E\u221F"+
+            "\u2220\u2221\u2222\u2223\u2224\u2225\u2226\u2227"+
+            "\u2228\u2229\u222A\u222B\u222C\u222D\u222E\u222F"+
+            "\u2230\u2231\u2232\u2233\u2234\u2235\u2236\u2237"+
+            "\u2238\u2239\u223A\u223B\u223C\u223D\u223E\u223F"+
+            "\u2240\u2241\u2242\u2243\u2244\u2245\u2246\u2247"+
+            "\u2248\u2249\u224A\u224B\u224C\u224D\u224E\u224F"+
+            "\u2250\u2251\u2252\u2253\u2254\u2255\u2256\u2257"+
+            "\u2258\u2259\u225A\u225B\u225C\u225D\u225E\u225F"+
+            "\u2260\u2261\u2262\u2263\u2264\u2265\u2266\u2267"+
+            "\u2268\u2269\u226A\u226B\u226C\u226D\u226E\u226F"+
+            "\u2270\u2271\u2272\u2273\u2274\u2275\u2276\u2277"+
+            "\u2278\u2279\u227A\u227B\u227C\u227D\u227E\u227F"+
+            "\u2280\u2281\u2282\u2283\u2284\u2285\u2286\u2287"+
+            "\u2288\u2289\u228A\u228B\u228C\u228D\u228E\u228F"+
+            "\u2290\u2291\u2292\u2293\u2294\u2295\u2296\u2297"+
+            "\u2298\u2299\u229A\u229B\u229C\u229D\u229E\u229F"+
+            "\u22A0\u22A1\u22A2\u22A3\u22A4\u22A5\u22A6\u22A7"+
+            "\u22A8\u22A9\u22AA\u22AB\u22AC\u22AD\u22AE\u22AF"+
+            "\u22B0\u22B1\u22B2\u22B3\u22B4\u22B5\u22B6\u22B7"+
+            "\u22B8\u22B9\u22BA\u22BB\u22BC\u22BD\u22BE\u22BF"+
+            "\u22C0\u22C1\u22C2\u22C3\u22C4\u22C5\u22C6\u22C7"+
+            "\u22C8\u22C9\u22CA\u22CB\u22CC\u22CD\u22CE\u22CF"+
+            "\u22D0\u22D1\u22D2\u22D3\u22D4\u22D5\u22D6\u22D7"+
+            "\u22D8\u22D9\u22DA\u22DB\u22DC\u22DD\u22DE\u22DF"+
+            "\u22E0\u22E1\u22E2\u22E3\u22E4\u22E5\u22E6\u22E7"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u22E8\u22E9\u22EA\u22EB\u22EC\u22ED"+
+            "\u22EE\u22EF\u22F0\u22F1\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u22F2\u22F3\u22F4\u22F5"+
+            "\u22F6\u22F7\u22F8\u22F9\u22FA\u22FB\u22FC\u22FD"+
+            "\u22FE\u22FF\u2300\u2301\u2302\u2303\u2304\u2305"+
+            "\u2306\u2307\u2308\u2309\u230A\u230B\u230C\u230D"+
+            "\u230E\u230F\u2310\u2311\u2312\u2313\u2314\u2315"+
+            "\u2316\u2317\u2318\u2319\u231A\u231B\u231C\u231D"+
+            "\u231E\u231F\u2320\u2321\u2322\u2323\u2324\u2325"+
+            "\u2326\u2327\u2328\u2329\u232A\u232B\u232C\u232D"+
+            "\u232E\u232F\u2330\u2331\u2332\u2333\u2334\u2335"+
+            "\u2336\u2337\u2338\u2339\u233A\u233B\u233C\u233D"+
+            "\u233E\u233F\u2340\u2341\u2342\u2343\u2344\u2345"+
+            "\u2346\u2347\u2348\u2349\u234A\u234B\u234C\u234D"+
+            "\u234E\u234F\u2350\u2351\u2352\u2353\u2354\u2355"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u2356\u2357\u2358\u2359"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u235A\u235B\u235C\u235D"+
+            "\u235E\u235F\u2360\u2361\u2362\u2363\u2364\u2365"+
+            "\u2366\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u2367\u2368\u2369\u0000\u0000\u0000\u236A\u236B"+
+            "\u236C\u236D\u236E\u236F\u2370\u2371\u2372\u2373"+
+            "\u0000\u0000\u2374\u2375\u2376\u2377\u2378\u2379"+
+            "\u237A\u237B\u237C\u237D\u237E\u237F\u2380\u2381"+
+            "\u2382\u2383\u0000\u0000\u2384\u2385\u2386\u2387"+
+            "\u2388\u2389\u238A\u238B\u0000\u0000\u238C\u238D"+
+            "\u238E\u238F\u2390\u2391\u2392\u2393\u0000\u0000"+
+            "\u2394\u2395\u2396\u0000\u2397\u2398\u0000\u0000"+
+            "\u2399\u239A\u239B\u239C\u239D\u239E\u239F\u23A0"+
+            "\u23A1\u23A2\u23A3\u23A4\u23A5\u23A6\u23A7\u23A8"+
+            "\u23A9\u23AA\u0000\u0000\u0000\u0000\u23AB\u23AC"+
+            "\u23AD\u23AE\u23AF\u23B0\u23B1\u23B2\u23B3\u23B4"+
+            "\u23B5\u23B6\u23B7\u23B8\u23B9\u23BA\u23BB\u23BC"+
+            "\u23BD\u23BE\u23BF\u23C0\u23C1\u23C2\u23C3\u23C4"+
+            "\u23C5\u23C6\u23C7\u23C8\u23C9\u0000\u0000\u23CA"+
+            "\u23CB\u0000\u23CC\u23CD\u23CE\u23CF\u23D0\u23D1"+
+            "\u23D2\u23D3\u23D4\u23D5\u23D6\u23D7\u23D8\u23D9"+
+            "\u23DA\u23DB\u23DC\u23DD\u23DE\u23DF\u23E0\u23E1"+
+            "\u23E2\u23E3\u23E4\u23E5\u23E6\u23E7\u23E8\u23E9"+
+            "\u23EA\u23EB\u23EC\u23ED\u23EE\u23EF\u23F0\u23F1"+
+            "\u23F2\u23F3\u23F4\u23F5\u23F6\u23F7\u23F8\u23F9"+
+            "\u23FA\u23FB\u23FC\u23FD\u23FE\u23FF\u2400\u2401"+
+            "\u0000\u2402\u0000\u2403\u2404\u2405\u2406\u2407"+
+            "\u2408\u2409\u240A\u240B\u240C\u240D\u240E\u240F"+
+            "\u2410\u2411\u2412\u2413\u2414\u2415\u2416\u2417"+
+            "\u2418\u2419\u241A\u241B\u241C\u241D\u241E\u241F"+
+            "\u2420\u2421\u2422\u2423\u2424\u2425\u2426\u2427"+
+            "\u2428\u2429\u242A\u242B\u242C\u242D\u242E\u242F"+
+            "\u2430\u2431\u2432\u2433\u2434\u2435\u2436\u2437"+
+            "\u2438\u2439\u243A\u243B\u243C\u243D\u243E\u243F"+
+            "\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447"+
+            "\u2448\u2449\u244A\u244B\u244C\u244D\u244E\u244F"+
+            "\u2450\u2451\u2452\u2453\u2454\u2455\u2456\u2457"+
+            "\u2458\u2459\u245A\u245B\u245C\u245D\u245E\u245F"+
+            "\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467"+
+            "\u2468\u2469\u246A\u246B\u246C\u246D\u246E\u246F"+
+            "\u2470\u2471\u2472\u2473\u2474\u2475\u2476\u2477"+
+            "\u2478\u2479\u247A\u247B\u247C\u247D\u247E\u247F"+
+            "\u2480\u2481\u2482\u2483\u2484\u2485\u2486\u2487"+
+            "\u2488\u2489\u248A\u248B\u248C\u248D\u248E\u248F"+
+            "\u2490\u2491\u2492\u2493\u2494\u2495\u2496\u2497"+
+            "\u2498\u2499\u249A\u249B\u249C\u249D\u249E\u249F"+
+            "\u24A0\u24A1\u24A2\u24A3\u24A4\u24A5\u24A6\u24A7"+
+            "\u24A8\u24A9\u24AA\u24AB\u24AC\u24AD\u24AE\u24AF"+
+            "\u24B0\u24B1\u24B2\u24B3\u24B4\u24B5\u24B6\u24B7"+
+            "\u24B8\u24B9\u24BA\u24BB\u24BC\u24BD\u24BE\u24BF"+
+            "\u24C0\u24C1\u24C2\u24C3\u24C4\u24C5\u24C6\u24C7"+
+            "\u24C8\u24C9\u24CA\u24CB\u24CC\u24CD\u24CE\u24CF"+
+            "\u24D0\u24D1\u24D2\u24D3\u24D4\u24D5\u24D6\u24D7"+
+            "\u24D8\u24D9\u24DA\u24DB\u24DC\u24DD\u24DE\u24DF"+
+            "\u24E0\u24E1\u24E2\u24E3\u24E4\u24E5\u24E6\u24E7"+
+            "\u24E8\u24E9\u24EA\u24EB\u24EC\u24ED\u24EE\u24EF"+
+            "\u24F0\u24F1\u24F2\u24F3\u24F4\u24F5\u24F6\u24F7"+
+            "\u24F8\u24F9\u24FA\u24FB\u24FC\u24FD\u24FE\u24FF"+
+            "\u2500\u2501\u2502\u2503\u2504\u2505\u2506\u2507"+
+            "\u2508\u2509\u250A\u250B\u250C\u250D\u250E\u250F"+
+            "\u2510\u2511\u2512\u2513\u2514\u2515\u2516\u2517"+
+            "\u2518\u2519\u251A\u251B\u251C\u251D\u251E\u251F"+
+            "\u2520\u2521\u2522\u2523\u2524\u2525\u2526\u2527"+
+            "\u2528\u2529\u252A\u252B\u252C\u252D\u252E\u252F"+
+            "\u2530\u2531\u2532\u2533\u2534\u2535\u2536\u2537"+
+            "\u2538\u2539\u253A\u253B\u253C\u253D\u253E\u253F"+
+            "\u2540\u2541\u2542\u2543\u2544\u2545\u2546\u2547"+
+            "\u2548\u2549\u254A\u254B\u254C\u254D\u254E\u254F"+
+            "\u2550\u2551\u2552\u2553\u2554\u2555\u2556\u2557"+
+            "\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F"+
+            "\u2560\u2561\u2562\u2563\u2564\u2565\u2566\u2567"+
+            "\u2568\u2569\u256A\u256B\u256C\u256D\u256E\u256F"+
+            "\u2570\u2571\u2572\u2573\u2574\u2575\u2576\u2577"+
+            "\u2578\u2579\u257A\u257B\u257C\u257D\u257E\u257F"+
+            "\u2580\u2581\u2582\u2583\u2584\u2585\u2586\u2587"+
+            "\u2588\u2589\u258A\u258B\u258C\u258D\u258E\u258F"+
+            "\u2590\u2591\u2592\u2593\u2594\u2595\u2596\u2597"+
+            "\u2598\u2599\u259A\u259B\u259C\u259D\u259E\u259F"+
+            "\u25A0\u25A1\u25A2\u25A3\u25A4\u25A5\u25A6\u25A7"+
+            "\u25A8\u25A9\u25AA\u25AB\u25AC\u25AD\u25AE\u25AF"+
+            "\u25B0\u25B1\u25B2\u25B3\u25B4\u25B5\u25B6\u25B7"+
+            "\u25B8\u25B9\u25BA\u25BB\u25BC\u25BD\u25BE\u25BF"+
+            "\u25C0\u25C1\u25C2\u25C3\u25C4\u25C5\u25C6\u25C7"+
+            "\u25C8\u25C9\u25CA\u25CB\u25CC\u25CD\u25CE\u25CF"+
+            "\u25D0\u25D1\u25D2\u25D3\u25D4\u25D5\u25D6\u25D7"+
+            "\u25D8\u25D9\u25DA\u25DB\u25DC\u25DD\u25DE\u25DF"+
+            "\u25E0\u25E1\u25E2\u25E3\u25E4\u25E5\u25E6\u25E7"+
+            "\u25E8\u25E9\u25EA\u25EB\u25EC\u25ED\u25EE\u25EF"+
+            "\u25F0\u25F1\u25F2\u25F3\u25F4\u25F5\u25F6\u25F7"+
+            "\u25F8\u25F9\u25FA\u25FB\u25FC\u25FD\u25FE\u25FF"+
+            "\u2600\u2601\u2602\u2603\u2604\u2605\u2606\u2607"+
+            "\u2608\u2609\u260A\u260B\u260C\u260D\u260E\u260F"+
+            "\u2610\u2611\u2612\u2613\u2614\u2615\u2616\u2617"+
+            "\u2618\u2619\u261A\u261B\u261C\u261D\u261E\u261F"+
+            "\u2620\u2621\u2622\u2623\u2624\u2625\u2626\u2627"+
+            "\u2628\u2629\u262A\u262B\u262C\u262D\u262E\u262F"+
+            "\u2630\u2631\u2632\u2633\u2634\u2635\u2636\u2637"+
+            "\u2638\u2639\u263A\u263B\u263C\u263D\u263E\u263F"+
+            "\u2640\u2641\u2642\u2643\u2644\u2645\u2646\u2647"+
+            "\u2648\u2649\u264A\u264B\u264C\u264D\u264E\u264F"+
+            "\u2650\u2651\u2652\u2653\u2654\u2655\u2656\u2657"+
+            "\u2658\u2659\u265A\u265B\u265C\u265D\u265E\u265F"+
+            "\u2660\u2661\u2662\u2663\u2664\u2665\u2666\u2667"+
+            "\u2668\u2669\u266A\u266B\u266C\u266D\u266E\u266F"+
+            "\u2670\u2671\u2672\u2673\u2674\u2675\u2676\u2677"+
+            "\u2678\u2679\u267A\u267B\u267C\u267D\u267E\u267F"+
+            "\u2680\u2681\u2682\u2683\u2684\u2685\u2686\u2687"+
+            "\u2688\u2689\u268A\u268B\u268C\u268D\u268E\u268F"+
+            "\u2690\u2691\u2692\u2693\u2694\u2695\u2696\u2697"+
+            "\u2698\u2699\u269A\u269B\u269C\u269D\u269E\u269F"+
+            "\u26A0\u26A1\u26A2\u26A3\u26A4\u26A5\u26A6\u26A7"+
+            "\u26A8\u26A9\u26AA\u26AB\u26AC\u26AD\u26AE\u26AF"+
+            "\u26B0\u26B1\u26B2\u26B3\u26B4\u26B5\u26B6\u26B7"+
+            "\u26B8\u26B9\u26BA\u26BB\u26BC\u26BD\u26BE\u26BF"+
+            "\u26C0\u26C1\u26C2\u26C3\u26C4\u26C5\u26C6\u26C7"+
+            "\u26C8\u26C9\u26CA\u26CB\u26CC\u26CD\u26CE\u26CF"+
+            "\u26D0\u26D1\u26D2\u26D3\u26D4\u26D5\u26D6\u26D7"+
+            "\u26D8\u26D9\u26DA\u26DB\u26DC\u26DD\u26DE\u26DF"+
+            "\u26E0\u26E1\u26E2\u26E3\u26E4\u26E5\u26E6\u26E7"+
+            "\u26E8\u26E9\u26EA\u26EB\u26EC\u26ED\u26EE\u26EF"+
+            "\u26F0\u26F1\u26F2\u26F3\u26F4\u26F5\u26F6\u26F7"+
+            "\u26F8\u26F9\u26FA\u26FB\u26FC\u26FD\u26FE\u26FF"+
+            "\u2700\u2701\u2702\u2703\u2704\u2705\u2706\u2707"+
+            "\u2708\u2709\u270A\u270B\u270C\u270D\u270E\u270F"+
+            "\u2710\u2711\u2712\u2713\u2714\u2715\u2716\u2717"+
+            "\u2718\u2719\u271A\u271B\u271C\u271D\u271E\u271F"+
+            "\u2720\u2721\u2722\u2723\u2724\u2725\u2726\u2727"+
+            "\u2728\u2729\u272A\u272B\u272C\u272D\u272E\u272F"+
+            "\u2730\u2731\u2732\u2733\u2734\u2735\u2736\u2737"+
+            "\u2738\u2739\u273A\u273B\u273C\u273D\u273E\u273F"+
+            "\u2740\u2741\u2742\u2743\u2744\u2745\u2746\u2747"+
+            "\u2748\u2749\u274A\u274B\u274C\u274D\u274E\u274F"+
+            "\u2750\u2751\u2752\u2753\u2754\u2755\u2756\u2757"+
+            "\u2758\u2759\u275A\u275B\u275C\u275D\u275E\u275F"+
+            "\u2760\u2761\u2762\u2763\u2764\u2765\u2766\u2767"+
+            "\u2768\u2769\u276A\u276B\u276C\u276D\u276E\u276F"+
+            "\u2770\u2771\u2772\u2773\u2774\u2775\u2776\u2777"+
+            "\u2778\u2779\u277A\u277B\u277C\u277D\u277E\u277F"+
+            "\u2780\u2781\u2782\u2783\u2784\u2785\u2786\u2787"+
+            "\u2788\u2789\u278A\u278B\u278C\u278D\u278E\u278F"+
+            "\u2790\u2791\u2792\u2793\u2794\u2795\u2796\u2797"+
+            "\u2798\u2799\u279A\u279B\u279C\u279D\u279E\u279F"+
+            "\u27A0\u27A1\u27A2\u27A3\u27A4\u27A5\u27A6\u27A7"+
+            "\u27A8\u27A9\u27AA\u27AB\u27AC\u27AD\u27AE\u27AF"+
+            "\u27B0\u27B1\u27B2\u27B3\u27B4\u27B5\u27B6\u27B7"+
+            "\u27B8\u27B9\u27BA\u27BB\u27BC\u27BD\u27BE\u27BF"+
+            "\u27C0\u27C1\u27C2\u27C3\u27C4\u27C5\u27C6\u27C7"+
+            "\u27C8\u27C9\u27CA\u27CB\u27CC\u27CD\u27CE\u27CF"+
+            "\u27D0\u27D1\u27D2\u27D3\u27D4\u27D5\u27D6\u27D7"+
+            "\u27D8\u27D9\u27DA\u27DB\u27DC\u27DD\u27DE\u27DF"+
+            "\u27E0\u27E1\u27E2\u27E3\u27E4\u27E5\u27E6\u27E7"+
+            "\u27E8\u27E9\u27EA\u27EB\u27EC\u27ED\u27EE\u27EF"+
+            "\u27F0\u27F1\u27F2\u27F3\u27F4\u27F5\u27F6\u27F7"+
+            "\u27F8\u27F9\u27FA\u27FB\u27FC\u27FD\u27FE\u27FF"+
+            "\u2800\u2801\u2802\u2803\u2804\u2805\u2806\u2807"+
+            "\u2808\u2809\u280A\u280B\u280C\u280D\u280E\u280F"+
+            "\u2810\u2811\u2812\u2813\u2814\u2815\u2816\u2817"+
+            "\u2818\u2819\u281A\u281B\u281C\u281D\u281E\u281F"+
+            "\u2820\u2821\u2822\u2823\u2824\u2825\u2826\u2827"+
+            "\u2828\u2829\u282A\u282B\u282C\u282D\u282E\u282F"+
+            "\u2830\u2831\u2832\u2833\u2834\u2835\u2836\u2837"+
+            "\u2838\u2839\u283A\u283B\u283C\u283D\u283E\u283F"+
+            "\u2840\u2841\u2842\u2843\u2844\u2845\u2846\u2847"+
+            "\u2848\u2849\u284A\u284B\u284C\u284D\u284E\u284F"+
+            "\u2850\u2851\u2852\u2853\u2854\u2855\u2856\u2857"+
+            "\u2858\u2859\u285A\u285B\u285C\u285D\u285E\u285F"+
+            "\u2860\u2861\u2862\u2863\u2864\u2865\u2866\u2867"+
+            "\u2868\u2869\u286A\u286B\u286C\u286D\u286E\u286F"+
+            "\u2870\u2871\u2872\u2873\u2874\u2875\u2876\u2877"+
+            "\u2878\u2879\u287A\u287B\u287C\u287D\u287E\u287F"+
+            "\u2880\u2881\u2882\u2883\u2884\u2885\u2886\u2887"+
+            "\u2888\u2889\u288A\u288B\u288C\u288D\u288E\u288F"+
+            "\u2890\u2891\u2892\u2893\u2894\u2895\u2896\u2897"+
+            "\u2898\u2899\u289A\u289B\u289C\u289D\u289E\u289F"+
+            "\u28A0\u28A1\u28A2\u28A3\u28A4\u28A5\u28A6\u28A7"+
+            "\u28A8\u28A9\u28AA\u28AB\u28AC\u28AD\u28AE\u28AF"+
+            "\u28B0\u28B1\u28B2\u28B3\u28B4\u28B5\u28B6\u28B7"+
+            "\u28B8\u28B9\u28BA\u28BB\u28BC\u28BD\u28BE\u28BF"+
+            "\u28C0\u28C1\u28C2\u28C3\u28C4\u28C5\u28C6\u28C7"+
+            "\u28C8\u28C9\u28CA\u28CB\u28CC\u28CD\u28CE\u28CF"+
+            "\u28D0\u28D1\u28D2\u28D3\u28D4\u28D5\u28D6\u28D7"+
+            "\u28D8\u28D9\u28DA\u28DB\u28DC\u28DD\u28DE\u28DF"+
+            "\u28E0\u28E1\u28E2\u28E3\u28E4\u28E5\u28E6\u28E7"+
+            "\u28E8\u28E9\u28EA\u28EB\u28EC\u28ED\u28EE\u28EF"+
+            "\u28F0\u28F1\u28F2\u28F3\u28F4\u28F5\u28F6\u28F7"+
+            "\u28F8\u28F9\u28FA\u28FB\u28FC\u28FD\u28FE\u28FF"+
+            "\u2900\u2901\u2902\u2903\u2904\u2905\u2906\u2907"+
+            "\u2908\u2909\u290A\u290B\u290C\u290D\u290E\u290F"+
+            "\u2910\u2911\u2912\u2913\u2914\u2915\u2916\u2917"+
+            "\u2918\u2919\u291A\u291B\u291C\u291D\u291E\u291F"+
+            "\u2920\u2921\u2922\u2923\u2924\u2925\u2926\u2927"+
+            "\u2928\u2929\u292A\u292B\u292C\u292D\u292E\u292F"+
+            "\u2930\u2931\u2932\u2933\u2934\u2935\u2936\u2937"+
+            "\u2938\u2939\u293A\u293B\u293C\u293D\u293E\u293F"+
+            "\u2940\u2941\u2942\u2943\u2944\u2945\u2946\u2947"+
+            "\u2948\u2949\u294A\u294B\u294C\u294D\u294E\u294F"+
+            "\u2950\u2951\u2952\u2953\u2954\u2955\u2956\u2957"+
+            "\u2958\u2959\u295A\u295B\u295C\u295D\u295E\u295F"+
+            "\u2960\u2961\u2962\u2963\u2964\u2965\u2966\u2967"+
+            "\u2968\u2969\u296A\u296B\u296C\u296D\u296E\u296F"+
+            "\u2970\u2971\u2972\u2973\u2974\u2975\u2976\u2977"+
+            "\u2978\u2979\u297A\u297B\u297C\u297D\u297E\u297F"+
+            "\u2980\u2981\u2982\u2983\u2984\u2985\u2986\u2987"+
+            "\u2988\u2989\u298A\u298B\u298C\u298D\u298E\u298F"+
+            "\u2990\u2991\u2992\u2993\u2994\u2995\u2996\u2997"+
+            "\u2998\u2999\u299A\u299B\u299C\u299D\u299E\u299F"+
+            "\u29A0\u29A1\u29A2\u29A3\u29A4\u29A5\u29A6\u29A7"+
+            "\u29A8\u29A9\u29AA\u29AB\u29AC\u29AD\u29AE\u29AF"+
+            "\u29B0\u29B1\u29B2\u29B3\u29B4\u29B5\u29B6\u29B7"+
+            "\u29B8\u29B9\u29BA\u29BB\u29BC\u29BD\u29BE\u29BF"+
+            "\u29C0\u29C1\u29C2\u29C3\u29C4\u29C5\u29C6\u29C7"+
+            "\u29C8\u29C9\u29CA\u29CB\u29CC\u29CD\u29CE\u29CF"+
+            "\u29D0\u29D1\u29D2\u29D3\u29D4\u29D5\u29D6\u29D7"+
+            "\u29D8\u29D9\u29DA\u29DB\u29DC\u29DD\u29DE\u29DF"+
+            "\u29E0\u29E1\u29E2\u29E3\u29E4\u29E5\u29E6\u29E7"+
+            "\u29E8\u29E9\u29EA\u29EB\u29EC\u29ED\u29EE\u29EF"+
+            "\u29F0\u29F1\u29F2\u29F3\u29F4\u29F5\u29F6\u29F7"+
+            "\u29F8\u29F9\u29FA\u29FB\u29FC\u29FD\u29FE\u29FF"+
+            "\u2A00\u2A01\u2A02\u2A03\u2A04\u2A05\u2A06\u2A07"+
+            "\u2A08\u2A09\u2A0A\u2A0B\u2A0C\u2A0D\u2A0E\u2A0F"+
+            "\u2A10\u2A11\u2A12\u2A13\u2A14\u2A15\u2A16\u2A17"+
+            "\u2A18\u2A19\u2A1A\u2A1B\u2A1C\u2A1D\u2A1E\u2A1F"+
+            "\u2A20\u2A21\u2A22\u2A23\u2A24\u2A25\u2A26\u2A27"+
+            "\u2A28\u2A29\u2A2A\u2A2B\u2A2C\u2A2D\u2A2E\u2A2F"+
+            "\u2A30\u2A31\u2A32\u2A33\u2A34\u2A35\u2A36\u2A37"+
+            "\u2A38\u2A39\u2A3A\u2A3B\u2A3C\u2A3D\u2A3E\u2A3F"+
+            "\u2A40\u2A41\u2A42\u2A43\u2A44\u2A45\u2A46\u2A47"+
+            "\u2A48\u2A49\u2A4A\u2A4B\u2A4C\u2A4D\u2A4E\u2A4F"+
+            "\u2A50\u2A51\u2A52\u2A53\u2A54\u2A55\u2A56\u2A57"+
+            "\u2A58\u2A59\u2A5A\u2A5B\u2A5C\u2A5D\u2A5E\u2A5F"+
+            "\u2A60\u2A61\u2A62\u2A63\u2A64\u2A65\u2A66\u2A67"+
+            "\u2A68\u2A69\u2A6A\u2A6B\u2A6C\u2A6D\u2A6E\u2A6F"+
+            "\u2A70\u2A71\u2A72\u2A73\u2A74\u2A75\u2A76\u2A77"+
+            "\u2A78\u2A79\u2A7A\u2A7B\u2A7C\u2A7D\u2A7E\u2A7F"+
+            "\u2A80\u2A81\u2A82\u2A83\u2A84\u2A85\u2A86\u2A87"+
+            "\u2A88\u2A89\u2A8A\u2A8B\u2A8C\u2A8D\u2A8E\u2A8F"+
+            "\u2A90\u2A91\u2A92\u2A93\u2A94\u2A95\u2A96\u2A97"+
+            "\u2A98\u2A99\u2A9A\u2A9B\u2A9C\u2A9D\u2A9E\u2A9F"+
+            "\u2AA0\u2AA1\u2AA2\u2AA3\u2AA4\u2AA5\u2AA6\u2AA7"+
+            "\u2AA8\u2AA9\u2AAA\u2AAB\u2AAC\u2AAD\u2AAE\u2AAF"+
+            "\u2AB0\u2AB1\u2AB2\u2AB3\u2AB4\u2AB5\u2AB6\u2AB7"+
+            "\u2AB8\u2AB9\u2ABA\u2ABB\u2ABC\u2ABD\u2ABE\u2ABF"+
+            "\u2AC0\u2AC1\u2AC2\u2AC3\u2AC4\u2AC5\u2AC6\u2AC7"+
+            "\u2AC8\u2AC9\u2ACA\u2ACB\u2ACC\u2ACD\u2ACE\u2ACF"+
+            "\u2AD0\u2AD1\u2AD2\u2AD3\u2AD4\u2AD5\u2AD6\u2AD7"+
+            "\u2AD8\u2AD9\u2ADA\u2ADB\u2ADC\u2ADD\u2ADE\u2ADF"+
+            "\u2AE0\u2AE1\u2AE2\u2AE3\u2AE4\u2AE5\u2AE6\u2AE7"+
+            "\u2AE8\u2AE9\u2AEA\u2AEB\u2AEC\u2AED\u2AEE\u2AEF"+
+            "\u2AF0\u2AF1\u2AF2\u2AF3\u2AF4\u2AF5\u2AF6\u2AF7"+
+            "\u2AF8\u2AF9\u2AFA\u2AFB\u2AFC\u2AFD\u2AFE\u2AFF"+
+            "\u2B00\u2B01\u2B02\u2B03\u2B04\u2B05\u2B06\u2B07"+
+            "\u2B08\u2B09\u2B0A\u2B0B\u2B0C\u2B0D\u2B0E\u2B0F"+
+            "\u2B10\u2B11\u2B12\u2B13\u2B14\u2B15\u2B16\u2B17"+
+            "\u2B18\u2B19\u2B1A\u2B1B\u2B1C\u2B1D\u2B1E\u2B1F"+
+            "\u2B20\u2B21\u2B22\u2B23\u2B24\u2B25\u2B26\u2B27"+
+            "\u2B28\u2B29\u2B2A\u2B2B\u2B2C\u2B2D\u2B2E\u2B2F"+
+            "\u2B30\u2B31\u2B32\u2B33\u2B34\u2B35\u2B36\u2B37"+
+            "\u2B38\u2B39\u2B3A\u2B3B\u2B3C\u2B3D\u2B3E\u2B3F"+
+            "\u2B40\u2B41\u2B42\u2B43\u2B44\u2B45\u2B46\u2B47"+
+            "\u2B48\u2B49\u2B4A\u2B4B\u2B4C\u2B4D\u2B4E\u2B4F"+
+            "\u2B50\u2B51\u2B52\u2B53\u2B54\u2B55\u2B56\u2B57"+
+            "\u2B58\u2B59\u2B5A\u2B5B\u2B5C\u2B5D\u2B5E\u2B5F"+
+            "\u2B60\u2B61\u2B62\u2B63\u2B64\u2B65\u2B66\u2B67"+
+            "\u2B68\u2B69\u2B6A\u2B6B\u2B6C\u2B6D\u2B6E\u2B6F"+
+            "\u2B70\u2B71\u2B72\u2B73\u2B74\u2B75\u2B76\u2B77"+
+            "\u2B78\u2B79\u2B7A\u2B7B\u2B7C\u2B7D\u2B7E\u2B7F"+
+            "\u2B80\u2B81\u2B82\u2B83\u2B84\u2B85\u2B86\u2B87"+
+            "\u2B88\u2B89\u2B8A\u2B8B\u2B8C\u2B8D\u2B8E\u2B8F"+
+            "\u2B90\u2B91\u2B92\u2B93\u2B94\u2B95\u2B96\u2B97"+
+            "\u2B98\u2B99\u2B9A\u2B9B\u2B9C\u2B9D\u2B9E\u2B9F"+
+            "\u2BA0\u2BA1\u2BA2\u2BA3\u2BA4\u2BA5\u2BA6\u2BA7"+
+            "\u2BA8\u2BA9\u2BAA\u2BAB\u2BAC\u2BAD\u2BAE\u2BAF"+
+            "\u2BB0\u2BB1\u2BB2\u2BB3\u2BB4\u2BB5\u2BB6\u2BB7"+
+            "\u2BB8\u2BB9\u2BBA\u2BBB\u2BBC\u2BBD\u2BBE\u2BBF"+
+            "\u2BC0\u2BC1\u2BC2\u2BC3\u2BC4\u2BC5\u2BC6\u2BC7"+
+            "\u2BC8\u2BC9\u2BCA\u2BCB\u2BCC\u2BCD\u2BCE\u2BCF"+
+            "\u2BD0\u2BD1\u2BD2\u2BD3\u2BD4\u2BD5\u2BD6\u2BD7"+
+            "\u2BD8\u2BD9\u2BDA\u2BDB\u2BDC\u2BDD\u2BDE\u2BDF"+
+            "\u2BE0\u2BE1\u2BE2\u2BE3\u2BE4\u2BE5\u2BE6\u2BE7"+
+            "\u2BE8\u2BE9\u2BEA\u2BEB\u2BEC\u2BED\u2BEE\u2BEF"+
+            "\u2BF0\u2BF1\u2BF2\u2BF3\u2BF4\u2BF5\u2BF6\u2BF7"+
+            "\u2BF8\u2BF9\u2BFA\u2BFB\u2BFC\u2BFD\u2BFE\u2BFF"+
+            "\u2C00\u2C01\u2C02\u2C03\u2C04\u2C05\u2C06\u2C07"+
+            "\u2C08\u2C09\u2C0A\u2C0B\u2C0C\u2C0D\u2C0E\u2C0F"+
+            "\u2C10\u2C11\u2C12\u2C13\u2C14\u2C15\u2C16\u2C17"+
+            "\u2C18\u2C19\u2C1A\u2C1B\u2C1C\u2C1D\u2C1E\u2C1F"+
+            "\u2C20\u2C21\u2C22\u2C23\u2C24\u2C25\u2C26\u2C27"+
+            "\u2C28\u2C29\u2C2A\u2C2B\u2C2C\u2C2D\u2C2E\u2C2F"+
+            "\u2C30\u2C31\u2C32\u2C33\u2C34\u2C35\u2C36\u2C37"+
+            "\u2C38\u2C39\u2C3A\u2C3B\u2C3C\u2C3D\u2C3E\u2C3F"+
+            "\u2C40\u0000\u2C41\u2C42\u0000\u2C43\u2C44\u2C45"+
+            "\u0000\u2C46\u2C47\u0000\u0000\u2C48\u2C49\u2C4A"+
+            "\u2C4B\u2C4C\u2C4D\u2C4E\u2C4F\u2C50\u2C51\u0000"+
+            "\u2C52\u2C53\u2C54\u2C55\u2C56\u2C57\u2C58\u2C59"+
+            "\u2C5A\u2C5B\u2C5C\u2C5D\u2C5E\u2C5F\u2C60\u0000"+
+            "\u2C61\u2C62\u0000\u2C63\u2C64\u2C65\u0000\u2C66"+
+            "\u2C67\u2C68\u2C69\u0000\u2C6A\u2C6B\u0000\u0000"+
+            "\u2C6C\u2C6D\u2C6E\u0000\u2C6F\u2C70\u2C71\u2C72"+
+            "\u2C73\u2C74\u2C75\u2C76\u2C77\u2C78\u2C79\u2C7A"+
+            "\u2C7B\u2C7C\u0000\u2C7D\u2C7E\u2C7F\u2C80\u2C81"+
+            "\u2C82\u2C83\u2C84\u2C85\u2C86\u2C87\u2C88\u2C89"+
+            "\u2C8A\u2C8B\u2C8C\u2C8D\u2C8E\u2C8F\u2C90\u2C91"+
+            "\u2C92\u2C93\u2C94\u2C95\u2C96\u2C97\u2C98\u2C99"+
+            "\u2C9A\u2C9B\u2C9C\u2C9D\u2C9E\u2C9F\u2CA0\u2CA1"+
+            "\u2CA2\u2CA3\u2CA4\u2CA5\u2CA6\u2CA7\u2CA8\u2CA9"+
+            "\u2CAA\u2CAB\u2CAC\u2CAD\u2CAE\u2CAF\u2CB0\u2CB1";
+
+        private final static String innerIndex3=
+            "\u2CB2\u2CB3\u2CB4\u2CB5\u2CB6\u2CB7\u2CB8\u2CB9"+
+            "\u2CBA\u2CBB\u2CBC\u2CBD\u2CBE\u2CBF\u2CC0\u2CC1"+
+            "\u2CC2\u2CC3\u2CC4\u2CC5\u2CC6\u2CC7\u2CC8\u2CC9"+
+            "\u2CCA\u2CCB\u2CCC\u2CCD\u2CCE\u2CCF\u2CD0\u2CD1"+
+            "\u2CD2\u2CD3\u2CD4\u2CD5\u2CD6\u2CD7\u2CD8\u2CD9"+
+            "\u2CDA\u2CDB\u2CDC\u2CDD\u2CDE\u2CDF\u2CE0\u2CE1"+
+            "\u2CE2\u2CE3\u2CE4\u2CE5\u2CE6\u2CE7\u2CE8\u2CE9"+
+            "\u2CEA\u2CEB\u2CEC\u2CED\u2CEE\u2CEF\u2CF0\u2CF1"+
+            "\u2CF2\u2CF3\u2CF4\u2CF5\u2CF6\u2CF7\u2CF8\u2CF9"+
+            "\u2CFA\u2CFB\u2CFC\u2CFD\u2CFE\u2CFF\u2D00\u2D01"+
+            "\u2D02\u2D03\u2D04\u2D05\u2D06\u2D07\u2D08\u2D09"+
+            "\u2D0A\u2D0B\u2D0C\u2D0D\u2D0E\u2D0F\u2D10\u2D11"+
+            "\u2D12\u2D13\u2D14\u2D15\u2D16\u2D17\u2D18\u2D19"+
+            "\u2D1A\u2D1B\u2D1C\u2D1D\u2D1E\u2D1F\u2D20\u2D21"+
+            "\u2D22\u2D23\u2D24\u2D25\u2D26\u2D27\u2D28\u2D29"+
+            "\u2D2A\u2D2B\u2D2C\u2D2D\u2D2E\u2D2F\u2D30\u2D31"+
+            "\u2D32\u2D33\u2D34\u2D35\u2D36\u2D37\u2D38\u2D39"+
+            "\u2D3A\u2D3B\u2D3C\u2D3D\u2D3E\u2D3F\u2D40\u2D41"+
+            "\u2D42\u2D43\u2D44\u2D45\u2D46\u2D47\u2D48\u2D49"+
+            "\u2D4A\u2D4B\u2D4C\u2D4D\u2D4E\u2D4F\u2D50\u2D51"+
+            "\u2D52\u2D53\u2D54\u2D55\u2D56\u2D57\u2D58\u2D59"+
+            "\u2D5A\u2D5B\u2D5C\u2D5D\u2D5E\u2D5F\u2D60\u2D61"+
+            "\u2D62\u2D63\u2D64\u2D65\u2D66\u2D67\u2D68\u2D69"+
+            "\u2D6A\u2D6B\u2D6C\u2D6D\u2D6E\u2D6F\u2D70\u2D71"+
+            "\u2D72\u2D73\u2D74\u2D75\u2D76\u2D77\u2D78\u2D79"+
+            "\u2D7A\u2D7B\u2D7C\u2D7D\u2D7E\u2D7F\u2D80\u2D81"+
+            "\u2D82\u2D83\u2D84\u2D85\u2D86\u2D87\u2D88\u2D89"+
+            "\u2D8A\u2D8B\u2D8C\u2D8D\u2D8E\u2D8F\u2D90\u2D91"+
+            "\u2D92\u2D93\u2D94\u2D95\u2D96\u2D97\u2D98\u2D99"+
+            "\u2D9A\u2D9B\u2D9C\u2D9D\u2D9E\u2D9F\u2DA0\u2DA1"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u2DA2\u2DA3\u2DA4\u2DA5"+
+            "\u0000\u0000\u0000\u0000\u2DA6\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u2DA7\u2DA8\u2DA9\u2DAA\u2DAB\u0000\u0000\u2DAC"+
+            "\u2DAD\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u2DAE\u2DAF\u2DB0\u2DB1\u2DB2\u2DB3"+
+            "\u2DB4\u2DB5\u2DB6\u2DB7\u2DB8\u2DB9\u2DBA\u2DBB"+
+            "\u2DBC\u2DBD\u2DBE\u2DBF\u2DC0\u2DC1\u0000\u2DC2"+
+            "\u2DC3\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u2DC4\u2DC5\u2DC6\u2DC7"+
+            "\u2DC8\u2DC9\u2DCA\u0000\u0000\u0000\u0000\u2DCB"+
+            "\u2DCC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2DCD"+
+            "\u2DCE\u2DCF\u2DD0\u2DD1\u0000\u0000\u0000\u2DD2"+
+            "\u2DD3\u2DD4\u2DD5\u2DD6\u2DD7\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u2DD8\u2DD9\u2DDA\u2DDB\u2DDC\u2DDD"+
+            "\u2DDE\u2DDF\u2DE0\u2DE1\u2DE2\u2DE3\u2DE4\u2DE5"+
+            "\u2DE6\u2DE7\u2DE8\u2DE9\u2DEA\u2DEB\u2DEC\u2DED"+
+            "\u2DEE\u2DEF\u2DF0\u2DF1\u2DF2\u2DF3\u2DF4\u2DF5"+
+            "\u2DF6\u2DF7\u2DF8\u2DF9\u2DFA\u2DFB\u2DFC\u2DFD"+
+            "\u2DFE\u2DFF\u2E00\u2E01\u2E02\u2E03\u2E04\u2E05"+
+            "\u2E06\u2E07\u2E08\u2E09\u2E0A\u2E0B\u2E0C\u2E0D"+
+            "\u2E0E\u2E0F\u2E10\u2E11\u2E12\u2E13\u2E14\u2E15"+
+            "\u2E16\u2E17\u2E18\u2E19\u2E1A\u2E1B\u2E1C\u2E1D"+
+            "\u2E1E\u2E1F\u2E20\u2E21\u2E22\u2E23\u2E24\u2E25"+
+            "\u2E26\u2E27\u2E28\u2E29\u2E2A\u2E2B\u2E2C\u2E2D"+
+            "\u2E2E\u2E2F\u2E30\u2E31\u2E32\u2E33\u2E34\u2E35"+
+            "\u2E36\u2E37\u2E38\u2E39\u2E3A\u2E3B\u2E3C\u2E3D"+
+            "\u2E3E\u2E3F\u2E40\u2E41\u2E42\u2E43\u2E44\u2E45"+
+            "\u2E46\u2E47\u2E48\u2E49\u2E4A\u2E4B\u2E4C\u2E4D"+
+            "\u2E4E\u2E4F\u2E50\u2E51\u2E52\u2E53\u2E54\u2E55"+
+            "\u2E56\u2E57\u2E58\u2E59\u2E5A\u2E5B\u2E5C\u2E5D"+
+            "\u2E5E\u2E5F\u2E60\u2E61\u2E62\u2E63\u2E64\u2E65"+
+            "\u2E66\u2E67\u2E68\u2E69\u2E6A\u2E6B\u2E6C\u2E6D"+
+            "\u2E6E\u2E6F\u2E70\u2E71\u2E72\u2E73\u2E74\u2E75"+
+            "\u2E76\u2E77\u2E78\u2E79\u2E7A\u2E7B\u2E7C\u2E7D"+
+            "\u2E7E\u2E7F\u2E80\u2E81\u2E82\u2E83\u2E84\u2E85"+
+            "\u2E86\u2E87\u2E88\u2E89\u2E8A\u2E8B\u2E8C\u2E8D"+
+            "\u2E8E\u2E8F\u2E90\u2E91\u2E92\u2E93\u2E94\u2E95"+
+            "\u2E96\u2E97\u2E98\u2E99\u2E9A\u2E9B\u2E9C\u2E9D"+
+            "\u2E9E\u2E9F\u2EA0\u2EA1\u2EA2\u2EA3\u2EA4\u2EA5"+
+            "\u2EA6\u2EA7\u2EA8\u2EA9\u2EAA\u2EAB\u2EAC\u2EAD"+
+            "\u2EAE\u2EAF\u2EB0\u2EB1\u2EB2\u2EB3\u2EB4\u2EB5"+
+            "\u2EB6\u2EB7\u2EB8\u2EB9\u2EBA\u2EBB\u2EBC\u2EBD"+
+            "\u2EBE\u2EBF\u2EC0\u2EC1\u2EC2\u2EC3\u2EC4\u2EC5"+
+            "\u2EC6\u2EC7\u2EC8\u2EC9\u2ECA\u2ECB\u2ECC\u2ECD"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u2ECE\u2ECF\u2ED0\u2ED1\u2ED2\u2ED3"+
+            "\u2ED4\u0000\u2ED5\u2ED6\u2ED7\u2ED8\u2ED9\u2EDA"+
+            "\u2EDB\u2EDC\u2EDD\u2EDE\u2EDF\u2EE0\u2EE1\u2EE2"+
+            "\u2EE3\u2EE4\u2EE5\u2EE6\u2EE7\u2EE8\u2EE9\u2EEA"+
+            "\u2EEB\u2EEC\u2EED\u2EEE\u2EEF\u2EF0\u2EF1\u2EF2"+
+            "\u2EF3\u2EF4\u2EF5\u2EF6\u2EF7\u2EF8\u2EF9\u2EFA"+
+            "\u2EFB\u2EFC\u2EFD\u2EFE\u2EFF\u2F00\u2F01\u2F02"+
+            "\u2F03\u2F04\u2F05\u2F06\u2F07\u2F08\u2F09\u2F0A"+
+            "\u2F0B\u2F0C\u2F0D\u2F0E\u2F0F\u2F10\u2F11\u2F12"+
+            "\u2F13\u2F14\u2F15\u2F16\u2F17\u2F18\u2F19\u2F1A"+
+            "\u2F1B\u2F1C\u2F1D\u2F1E\u2F1F\u2F20\u2F21\u2F22"+
+            "\u2F23\u2F24\u2F25\u2F26\u2F27\u2F28\u2F29\u2F2A"+
+            "\u2F2B\u2F2C\u2F2D\u2F2E\u2F2F\u2F30\u2F31\u2F32"+
+            "\u2F33\u2F34\u2F35\u2F36\u2F37\u2F38\u2F39\u2F3A"+
+            "\u2F3B\u2F3C\u2F3D\u2F3E\u2F3F\u2F40\u2F41\u2F42"+
+            "\u2F43\u2F44\u2F45\u0000\u2F46\u2F47\u2F48\u2F49"+
+            "\u2F4A\u2F4B\u2F4C\u2F4D\u2F4E\u2F4F\u2F50\u2F51"+
+            "\u2F52\u2F53\u2F54\u2F55\u2F56\u2F57\u2F58\u2F59"+
+            "\u2F5A\u2F5B\u2F5C\u2F5D\u2F5E\u2F5F\u2F60\u2F61"+
+            "\u2F62\u2F63\u2F64\u2F65\u2F66\u2F67\u2F68\u2F69"+
+            "\u2F6A\u2F6B\u2F6C\u2F6D\u2F6E\u2F6F\u2F70\u2F71"+
+            "\u2F72\u2F73\u2F74\u2F75\u2F76\u2F77\u2F78\u2F79"+
+            "\u2F7A\u2F7B\u2F7C\u2F7D\u2F7E\u2F7F\u2F80\u2F81"+
+            "\u2F82\u2F83\u2F84\u2F85\u2F86\u2F87\u2F88\u2F89"+
+            "\u2F8A\u2F8B\u2F8C\u2F8D\u2F8E\u2F8F\u2F90\u2F91"+
+            "\u2F92\u2F93\u2F94\u2F95\u2F96\u2F97\u2F98\u2F99"+
+            "\u2F9A\u2F9B\u2F9C\u2F9D\u2F9E\u2F9F\u2FA0\u2FA1"+
+            "\u2FA2\u2FA3\u2FA4\u2FA5\u2FA6\u2FA7\u2FA8\u2FA9"+
+            "\u2FAA\u2FAB\u2FAC\u2FAD\u2FAE\u2FAF\u2FB0\u2FB1"+
+            "\u2FB2\u2FB3\u2FB4\u2FB5\u2FB6\u2FB7\u2FB8\u2FB9"+
+            "\u2FBA\u2FBB\u2FBC\u2FBD\u2FBE\u2FBF\u2FC0\u2FC1"+
+            "\u2FC2\u2FC3\u2FC4\u2FC5\u2FC6\u2FC7\u2FC8\u2FC9"+
+            "\u2FCA\u2FCB\u2FCC\u2FCD\u2FCE\u2FCF\u2FD0\u2FD1"+
+            "\u2FD2\u2FD3\u2FD4\u2FD5\u2FD6\u2FD7\u2FD8\u2FD9"+
+            "\u2FDA\u2FDB\u2FDC\u2FDD\u2FDE\u2FDF\u2FE0\u2FE1"+
+            "\u2FE2\u2FE3\u2FE4\u2FE5\u2FE6\u2FE7\u2FE8\u2FE9"+
+            "\u2FEA\u2FEB\u2FEC\u2FED\u2FEE\u2FEF\u2FF0\u2FF1"+
+            "\u2FF2\u2FF3\u2FF4\u2FF5\u2FF6\u2FF7\u2FF8\u2FF9"+
+            "\u2FFA\u2FFB\u2FFC\u2FFD\u2FFE\u2FFF\u3000\u3001"+
+            "\u3002\u3003\u3004\u3005\u3006\u3007\u3008\u3009"+
+            "\u300A\u300B\u300C\u300D\u300E\u300F\u3010\u3011"+
+            "\u3012\u3013\u3014\u3015\u3016\u3017\u3018\u3019"+
+            "\u301A\u301B\u301C\u301D\u301E\u301F\u3020\u3021"+
+            "\u3022\u3023\u3024\u3025\u3026\u3027\u3028\u3029"+
+            "\u302A\u302B\u302C\u302D\u302E\u302F\u0000\u0000"+
+            "\u3030\u3031\u3032\u3033\u3034\u3035\u3036\u3037"+
+            "\u3038\u3039\u303A\u303B\u0000\u0000\u0000\u303C"+
+            "\u303D\u0000\u303E\u303F\u3040\u3041\u3042\u3043"+
+            "\u3044\u3045\u3046\u3047\u3048\u3049\u304A\u304B"+
+            "\u304C\u304D\u304E\u304F\u3050\u3051\u3052\u3053"+
+            "\u3054\u3055\u3056\u3057\u3058\u3059\u305A\u305B"+
+            "\u305C\u305D\u305E\u305F\u0000\u3060\u3061\u3062"+
+            "\u3063\u3064\u3065\u3066\u3067\u3068\u0000\u3069"+
+            "\u306A\u0000\u0000\u306B\u306C\u0000\u306D\u306E"+
+            "\u306F\u3070\u3071\u3072\u3073\u3074\u3075\u3076"+
+            "\u3077\u3078\u3079\u307A\u307B\u307C\u307D\u307E"+
+            "\u307F\u3080\u3081\u3082\u3083\u3084\u3085\u3086"+
+            "\u3087\u3088\u3089\u308A\u308B\u308C\u308D\u308E"+
+            "\u308F\u3090\u3091\u3092\u3093\u3094\u3095\u3096"+
+            "\u3097\u3098\u3099\u309A\u309B\u309C\u309D\u309E"+
+            "\u309F\u30A0\u30A1\u30A2\u30A3\u30A4\u30A5\u30A6"+
+            "\u30A7\u30A8\u30A9\u30AA\u30AB\u30AC\u30AD\u30AE"+
+            "\u30AF\u30B0\u30B1\u30B2\u30B3\u30B4\u30B5\u30B6"+
+            "\u30B7\u30B8\u30B9\u30BA\u30BB\u30BC\u30BD\u30BE"+
+            "\u30BF\u30C0\u30C1\u30C2\u30C3\u30C4\u30C5\u30C6"+
+            "\u30C7\u30C8\u30C9\u30CA\u30CB\u30CC\u30CD\u30CE"+
+            "\u30CF\u30D0\u30D1\u30D2\u30D3\u30D4\u30D5\u30D6"+
+            "\u30D7\u30D8\u30D9\u30DA\u30DB\u30DC\u30DD\u0000"+
+            "\u30DE\u30DF\u30E0\u30E1\u30E2\u30E3\u30E4\u30E5"+
+            "\u30E6\u30E7\u30E8\u30E9\u30EA\u30EB\u30EC\u30ED"+
+            "\u30EE\u30EF\u30F0\u30F1\u30F2\u30F3\u30F4\u30F5"+
+            "\u30F6\u30F7\u30F8\u30F9\u30FA\u30FB\u30FC\u30FD"+
+            "\u30FE\u30FF\u3100\u3101\u3102\u3103\u3104\u3105"+
+            "\u3106\u3107\u3108\u0000\u3109\u310A\u310B\u310C"+
+            "\u310D\u310E\u310F\u3110\u3111\u3112\u3113\u3114"+
+            "\u3115\u3116\u3117\u3118\u3119\u311A\u311B\u311C"+
+            "\u311D\u311E\u311F\u3120\u3121\u3122\u3123\u3124"+
+            "\u3125\u3126\u3127\u3128\u3129\u312A\u312B\u312C"+
+            "\u312D\u312E\u312F\u3130\u3131\u3132\u3133\u3134"+
+            "\u3135\u3136\u3137\u3138\u3139\u313A\u313B\u313C"+
+            "\u313D\u313E\u313F\u3140\u3141\u3142\u3143\u3144"+
+            "\u3145\u3146\u3147\u3148\u3149\u314A\u314B\u314C"+
+            "\u314D\u314E\u314F\u3150\u3151\u3152\u3153\u3154"+
+            "\u3155\u3156\u3157\u3158\u3159\u315A\u315B\u315C"+
+            "\u315D\u315E\u315F\u3160\u3161\u3162\u3163\u3164"+
+            "\u3165\u3166\u3167\u3168\u3169\u316A\u316B\u316C"+
+            "\u316D\u316E\u316F\u3170\u3171\u3172\u3173\u3174"+
+            "\u3175\u3176\u3177\u3178\u3179\u317A\u317B\u317C"+
+            "\u317D\u317E\u317F\u3180\u3181\u3182\u3183\u3184"+
+            "\u3185\u3186\u3187\u3188\u3189\u318A\u318B\u318C"+
+            "\u318D\u318E\u318F\u3190\u3191\u3192\u3193\u3194"+
+            "\u3195\u3196\u3197\u3198\u3199\u319A\u319B\u319C"+
+            "\u319D\u319E\u319F\u31A0\u31A1\u31A2\u31A3\u31A4"+
+            "\u31A5\u31A6\u31A7\u31A8\u31A9\u31AA\u31AB\u31AC"+
+            "\u31AD\u31AE\u31AF\u31B0\u31B1\u31B2\u31B3\u31B4"+
+            "\u31B5\u31B6\u31B7\u31B8\u31B9\u31BA\u31BB\u31BC"+
+            "\u31BD\u31BE\u31BF\u31C0\u31C1\u31C2\u31C3\u31C4"+
+            "\u31C5\u31C6\u31C7\u31C8\u31C9\u31CA\u31CB\u31CC"+
+            "\u31CD\u31CE\u31CF\u31D0\u31D1\u31D2\u31D3\u31D4"+
+            "\u31D5\u31D6\u31D7\u31D8\u31D9\u31DA\u31DB\u31DC"+
+            "\u31DD\u31DE\u31DF\u31E0\u31E1\u31E2\u31E3\u31E4"+
+            "\u31E5\u31E6\u31E7\u31E8\u31E9\u31EA\u31EB\u31EC"+
+            "\u31ED\u31EE\u31EF\u31F0\u31F1\u31F2\u31F3\u31F4"+
+            "\u31F5\u31F6\u31F7\u31F8\u31F9\u31FA\u31FB\u31FC"+
+            "\u31FD\u31FE\u31FF\u3200\u3201\u3202\u3203\u3204"+
+            "\u3205\u3206\u3207\u3208\u3209\u320A\u320B\u320C"+
+            "\u320D\u320E\u320F\u3210\u3211\u3212\u3213\u3214"+
+            "\u3215\u3216\u3217\u3218\u3219\u321A\u321B\u321C"+
+            "\u321D\u321E\u321F\u3220\u3221\u3222\u3223\u3224"+
+            "\u3225\u3226\u3227\u3228\u3229\u322A\u322B\u322C"+
+            "\u322D\u322E\u322F\u3230\u3231\u3232\u0000\u3233"+
+            "\u3234\u3235\u3236\u3237\u3238\u3239\u323A\u323B"+
+            "\u323C\u323D\u323E\u323F\u3240\u3241\u3242\u3243"+
+            "\u3244\u3245\u3246\u3247\u3248\u3249\u324A\u324B"+
+            "\u324C\u324D\u324E\u324F\u3250\u3251\u3252\u3253"+
+            "\u3254\u3255\u3256\u3257\u3258\u3259\u325A\u325B"+
+            "\u325C\u325D\u325E\u325F\u3260\u3261\u3262\u3263"+
+            "\u3264\u3265\u3266\u3267\u3268\u3269\u326A\u326B"+
+            "\u326C\u326D\u326E\u326F\u3270\u3271\u3272\u3273"+
+            "\u3274\u3275\u3276\u3277\u3278\u3279\u327A\u327B"+
+            "\u327C\u327D\u327E\u327F\u3280\u3281\u3282\u3283"+
+            "\u3284\u3285\u3286\u3287\u3288\u3289\u328A\u328B"+
+            "\u328C\u328D\u328E\u328F\u3290\u3291\u3292\u3293"+
+            "\u3294\u3295\u3296\u3297\u3298\u3299\u329A\u329B"+
+            "\u329C\u329D\u329E\u329F\u32A0\u32A1\u0000\u32A2"+
+            "\u32A3\u32A4\u32A5\u32A6\u32A7\u32A8\u32A9\u32AA"+
+            "\u32AB\u32AC\u0000\u32AD\u32AE\u32AF\u32B0\u32B1"+
+            "\u32B2\u32B3\u32B4\u32B5\u32B6\u32B7\u32B8\u32B9"+
+            "\u32BA\u32BB\u32BC\u32BD\u32BE\u32BF\u32C0\u32C1"+
+            "\u32C2\u32C3\u32C4\u32C5\u32C6\u32C7\u32C8\u32C9"+
+            "\u32CA\u32CB\u32CC\u32CD\u32CE\u32CF\u32D0\u32D1"+
+            "\u32D2\u32D3\u32D4\u32D5\u32D6\u32D7\u32D8\u32D9"+
+            "\u32DA\u32DB\u32DC\u32DD\u32DE\u32DF\u32E0\u32E1"+
+            "\u32E2\u32E3\u32E4\u32E5\u32E6\u32E7\u32E8\u32E9"+
+            "\u32EA\u32EB\u32EC\u32ED\u32EE\u32EF\u32F0\u32F1"+
+            "\u32F2\u32F3\u32F4\u32F5\u32F6\u32F7\u32F8\u32F9"+
+            "\u32FA\u32FB\u32FC\u32FD\u32FE\u32FF\u3300\u3301"+
+            "\u3302\u3303\u3304\u3305\u3306\u3307\u3308\u3309"+
+            "\u330A\u330B\u330C\u330D\u330E\u330F\u3310\u3311"+
+            "\u3312\u3313\u3314\u3315\u3316\u3317\u3318\u3319"+
+            "\u331A\u331B\u331C\u331D\u331E\u331F\u3320\u3321"+
+            "\u3322\u3323\u3324\u3325\u3326\u3327\u3328\u3329"+
+            "\u332A\u332B\u332C\u332D\u332E\u332F\u3330\u3331"+
+            "\u3332\u3333\u3334\u3335\u3336\u3337\u3338\u3339"+
+            "\u333A\u333B\u333C\u333D\u333E\u333F\u3340\u3341"+
+            "\u3342\u3343\u3344\u3345\u3346\u3347\u3348\u3349"+
+            "\u334A\u334B\u334C\u334D\u334E\u334F\u3350\u3351"+
+            "\u3352\u3353\u3354\u3355\u3356\u3357\u3358\u3359"+
+            "\u335A\u335B\u335C\u335D\u335E\u335F\u3360\u3361"+
+            "\u3362\u3363\u3364\u3365\u3366\u3367\u3368\u3369"+
+            "\u336A\u336B\u336C\u336D\u336E\u336F\u3370\u3371"+
+            "\u3372\u3373\u3374\u3375\u3376\u3377\u3378\u3379"+
+            "\u337A\u337B\u337C\u337D\u337E\u337F\u3380\u3381"+
+            "\u3382\u3383\u3384\u3385\u3386\u3387\u3388\u3389"+
+            "\u338A\u338B\u338C\u338D\u338E\u338F\u3390\u3391"+
+            "\u3392\u3393\u3394\u3395\u3396\u3397\u3398\u3399"+
+            "\u339A\u339B\u339C\u339D\u339E\u339F\u33A0\u33A1"+
+            "\u33A2\u33A3\u33A4\u33A5\u33A6\u33A7\u33A8\u33A9"+
+            "\u33AA\u33AB\u33AC\u33AD\u33AE\u33AF\u33B0\u33B1"+
+            "\u33B2\u33B3\u33B4\u33B5\u33B6\u33B7\u33B8\u33B9"+
+            "\u33BA\u33BB\u33BC\u33BD\u33BE\u33BF\u33C0\u33C1"+
+            "\u33C2\u33C3\u33C4\u33C5\u33C6\u33C7\u33C8\u33C9"+
+            "\u33CA\u33CB\u33CC\u33CD\u33CE\u33CF\u33D0\u33D1"+
+            "\u33D2\u33D3\u33D4\u33D5\u33D6\u33D7\u33D8\u33D9"+
+            "\u33DA\u33DB\u33DC\u33DD\u33DE\u33DF\u33E0\u33E1"+
+            "\u33E2\u33E3\u33E4\u33E5\u33E6\u33E7\u33E8\u33E9"+
+            "\u33EA\u33EB\u33EC\u33ED\u33EE\u33EF\u33F0\u33F1"+
+            "\u33F2\u33F3\u33F4\u33F5\u33F6\u33F7\u33F8\u33F9"+
+            "\u33FA\u33FB\u33FC\u33FD\u33FE\u33FF\u3400\u3401"+
+            "\u3402\u3403\u3404\u3405\u3406\u3407\u3408\u3409"+
+            "\u340A\u340B\u340C\u340D\u340E\u340F\u3410\u3411"+
+            "\u3412\u3413\u3414\u3415\u3416\u3417\u3418\u3419"+
+            "\u341A\u341B\u341C\u341D\u341E\u341F\u3420\u3421"+
+            "\u3422\u3423\u3424\u3425\u3426\u3427\u3428\u3429"+
+            "\u342A\u342B\u342C\u342D\u342E\u342F\u3430\u3431"+
+            "\u3432\u3433\u3434\u3435\u3436\u3437\u3438\u3439"+
+            "\u343A\u343B\u343C\u343D\u343E\u343F\u3440\u3441"+
+            "\u3442\u3443\u3444\u3445\u3446\u3447\u3448\u3449"+
+            "\u344A\u344B\u344C\u344D\u344E\u344F\u3450\u3451"+
+            "\u3452\u3453\u3454\u3455\u3456\u3457\u3458\u3459"+
+            "\u345A\u345B\u345C\u345D\u345E\u345F\u3460\u3461"+
+            "\u3462\u3463\u3464\u3465\u3466\u3467\u3468\u3469"+
+            "\u346A\u346B\u346C\u346D\u346E\u346F\u3470\u3471"+
+            "\u3472\u3473\u3474\u3475\u3476\u3477\u3478\u3479"+
+            "\u347A\u347B\u347C\u347D\u347E\u347F\u3480\u3481"+
+            "\u3482\u3483\u3484\u3485\u3486\u3487\u3488\u3489"+
+            "\u348A\u348B\u348C\u348D\u348E\u348F\u3490\u3491"+
+            "\u3492\u3493\u3494\u3495\u3496\u3497\u3498\u3499"+
+            "\u349A\u349B\u349C\u349D\u349E\u349F\u34A0\u34A1"+
+            "\u34A2\u34A3\u34A4\u34A5\u34A6\u34A7\u34A8\u34A9"+
+            "\u34AA\u34AB\u34AC\u34AD\u34AE\u34AF\u34B0\u34B1"+
+            "\u34B2\u34B3\u34B4\u34B5\u34B6\u34B7\u34B8\u34B9"+
+            "\u34BA\u34BB\u34BC\u34BD\u34BE\u34BF\u34C0\u34C1"+
+            "\u34C2\u34C3\u34C4\u34C5\u34C6\u34C7\u34C8\u34C9"+
+            "\u34CA\u34CB\u34CC\u34CD\u34CE\u34CF\u34D0\u34D1"+
+            "\u34D2\u34D3\u34D4\u34D5\u34D6\u34D7\u34D8\u34D9"+
+            "\u34DA\u34DB\u34DC\u34DD\u34DE\u34DF\u34E0\u34E1"+
+            "\u34E2\u34E3\u34E4\u34E5\u34E6\u34E7\u34E8\u34E9"+
+            "\u34EA\u34EB\u34EC\u34ED\u34EE\u34EF\u34F0\u34F1"+
+            "\u34F2\u34F3\u34F4\u34F5\u34F6\u34F7\u34F8\u34F9"+
+            "\u34FA\u34FB\u34FC\u34FD\u34FE\u34FF\u3500\u3501"+
+            "\u3502\u3503\u3504\u3505\u3506\u3507\u3508\u3509"+
+            "\u350A\u350B\u350C\u350D\u350E\u350F\u3510\u3511"+
+            "\u3512\u3513\u3514\u3515\u3516\u3517\u3518\u3519"+
+            "\u351A\u351B\u351C\u351D\u351E\u351F\u3520\u3521"+
+            "\u3522\u3523\u3524\u3525\u3526\u3527\u3528\u3529"+
+            "\u352A\u352B\u352C\u352D\u352E\u352F\u3530\u3531"+
+            "\u3532\u3533\u3534\u3535\u3536\u3537\u3538\u3539"+
+            "\u353A\u353B\u353C\u353D\u353E\u353F\u3540\u3541"+
+            "\u3542\u3543\u3544\u3545\u3546\u3547\u3548\u3549"+
+            "\u354A\u354B\u354C\u354D\u354E\u354F\u3550\u3551"+
+            "\u3552\u3553\u3554\u3555\u3556\u3557\u3558\u3559"+
+            "\u355A\u355B\u355C\u355D\u355E\u355F\u3560\u3561"+
+            "\u3562\u3563\u3564\u3565\u3566\u3567\u3568\u3569"+
+            "\u356A\u356B\u356C\u356D\u356E\u356F\u3570\u3571"+
+            "\u3572\u3573\u3574\u3575\u3576\u3577\u3578\u3579"+
+            "\u357A\u357B\u357C\u357D\u357E\u357F\u3580\u3581"+
+            "\u3582\u3583\u3584\u3585\u3586\u3587\u3588\u3589"+
+            "\u358A\u358B\u358C\u358D\u358E\u358F\u3590\u3591"+
+            "\u3592\u3593\u3594\u3595\u3596\u3597\u3598\u3599"+
+            "\u359A\u359B\u359C\u359D\u359E\u359F\u35A0\u35A1"+
+            "\u35A2\u35A3\u35A4\u35A5\u35A6\u35A7\u35A8\u35A9"+
+            "\u0000\u35AA\u35AB\u35AC\u35AD\u35AE\u35AF\u35B0"+
+            "\u35B1\u35B2\u35B3\u35B4\u35B5\u35B6\u35B7\u35B8"+
+            "\u35B9\u35BA\u35BB\u35BC\u35BD\u35BE\u35BF\u35C0"+
+            "\u35C1\u35C2\u35C3\u35C4\u35C5\u35C6\u35C7\u35C8"+
+            "\u35C9\u35CA\u35CB\u35CC\u35CD\u35CE\u35CF\u35D0"+
+            "\u35D1\u35D2\u35D3\u35D4\u35D5\u35D6\u35D7\u35D8"+
+            "\u35D9\u35DA\u35DB\u35DC\u35DD\u35DE\u35DF\u35E0"+
+            "\u35E1\u35E2\u35E3\u35E4\u35E5\u35E6\u35E7\u35E8"+
+            "\u35E9\u35EA\u35EB\u35EC\u35ED\u35EE\u35EF\u35F0"+
+            "\u35F1\u35F2\u35F3\u35F4\u35F5\u35F6\u35F7\u35F8"+
+            "\u35F9\u35FA\u35FB\u35FC\u35FD\u35FE\u0000\u35FF"+
+            "\u3600\u3601\u3602\u3603\u3604\u3605\u3606\u3607"+
+            "\u3608\u3609\u360A\u360B\u360C\u360D\u360E\u360F"+
+            "\u3610\u3611\u3612\u3613\u3614\u3615\u3616\u3617"+
+            "\u3618\u3619\u361A\u361B\u361C\u361D\u361E\u361F"+
+            "\u3620\u3621\u3622\u3623\u3624\u3625\u3626\u3627"+
+            "\u3628\u3629\u362A\u362B\u362C\u362D\u362E\u362F"+
+            "\u3630\u3631\u3632\u3633\u3634\u3635\u3636\u3637"+
+            "\u3638\u3639\u363A\u363B\u363C\u363D\u363E\u363F"+
+            "\u3640\u3641\u3642\u3643\u3644\u3645\u3646\u3647"+
+            "\u3648\u3649\u364A\u364B\u364C\u364D\u364E\u364F"+
+            "\u3650\u3651\u3652\u3653\u3654\u3655\u3656\u3657"+
+            "\u3658\u3659\u365A\u365B\u365C\u365D\u365E\u0000"+
+            "\u0000\u365F\u3660\u3661\u3662\u3663\u3664\u3665"+
+            "\u3666\u3667\u3668\u3669\u366A\u366B\u366C\u0000"+
+            "\u366D\u366E\u366F\u3670\u3671\u3672\u3673\u3674"+
+            "\u3675\u3676\u3677\u3678\u3679\u367A\u367B\u367C"+
+            "\u367D\u367E\u367F\u3680\u3681\u3682\u3683\u3684"+
+            "\u3685\u3686\u3687\u3688\u3689\u368A\u368B\u368C"+
+            "\u368D\u368E\u368F\u3690\u3691\u3692\u3693\u3694"+
+            "\u3695\u3696\u3697\u3698\u3699\u369A\u369B\u369C"+
+            "\u369D\u369E\u369F\u36A0\u36A1\u36A2\u36A3\u36A4"+
+            "\u36A5\u36A6\u36A7\u36A8\u36A9\u36AA\u36AB\u36AC"+
+            "\u36AD\u36AE\u36AF\u36B0\u36B1\u36B2\u36B3\u36B4"+
+            "\u36B5\u36B6\u36B7\u36B8\u36B9\u36BA\u36BB\u36BC"+
+            "\u36BD\u36BE\u36BF\u36C0\u36C1\u36C2\u36C3\u36C4"+
+            "\u36C5\u36C6\u36C7\u36C8\u36C9\u36CA\u36CB\u36CC"+
+            "\u36CD\u36CE\u36CF\u36D0\u36D1\u36D2\u36D3\u36D4"+
+            "\u36D5\u36D6\u36D7\u36D8\u36D9\u36DA\u36DB\u36DC"+
+            "\u36DD\u36DE\u36DF\u36E0\u36E1\u36E2\u36E3\u36E4"+
+            "\u36E5\u36E6\u36E7\u36E8\u36E9\u36EA\u36EB\u36EC"+
+            "\u36ED\u36EE\u36EF\u36F0\u36F1\u36F2\u36F3\u36F4"+
+            "\u36F5\u36F6\u36F7\u36F8\u36F9\u36FA\u36FB\u36FC"+
+            "\u36FD\u36FE\u36FF\u0000\u3700\u3701\u3702\u3703"+
+            "\u3704\u3705\u3706\u3707\u3708\u3709\u370A\u370B"+
+            "\u370C\u370D\u370E\u370F\u3710\u3711\u3712\u3713"+
+            "\u3714\u3715\u3716\u3717\u3718\u3719\u371A\u371B"+
+            "\u371C\u371D\u371E\u371F\u3720\u3721\u3722\u3723"+
+            "\u3724\u3725\u3726\u3727\u3728\u3729\u372A\u372B"+
+            "\u372C\u372D\u372E\u372F\u3730\u3731\u3732\u3733"+
+            "\u3734\u3735\u3736\u3737\u3738\u3739\u373A\u373B"+
+            "\u373C\u373D\u373E\u373F\u3740\u3741\u3742\u3743"+
+            "\u3744\u3745\u3746\u3747\u3748\u3749\u374A\u374B"+
+            "\u374C\u374D\u374E\u374F\u3750\u3751\u3752\u3753"+
+            "\u3754\u3755\u3756\u3757\u3758\u3759\u375A\u375B"+
+            "\u375C\u375D\u375E\u375F\u3760\u3761\u3762\u3763"+
+            "\u3764\u3765\u3766\u3767\u3768\u3769\u376A\u376B"+
+            "\u376C\u376D\u376E\u376F\u3770\u3771\u3772\u3773"+
+            "\u3774\u3775\u3776\u3777\u3778\u3779\u377A\u377B"+
+            "\u377C\u377D\u377E\u377F\u3780\u3781\u3782\u3783"+
+            "\u3784\u3785\u3786\u3787\u3788\u3789\u378A\u378B"+
+            "\u378C\u378D\u378E\u378F\u3790\u3791\u3792\u3793"+
+            "\u3794\u3795\u3796\u3797\u3798\u3799\u379A\u379B"+
+            "\u379C\u379D\u379E\u379F\u37A0\u37A1\u37A2\u37A3"+
+            "\u37A4\u37A5\u37A6\u37A7\u37A8\u37A9\u37AA\u37AB"+
+            "\u37AC\u37AD\u37AE\u37AF\u37B0\u37B1\u37B2\u37B3"+
+            "\u37B4\u37B5\u37B6\u37B7\u37B8\u37B9\u37BA\u37BB"+
+            "\u37BC\u37BD\u37BE\u37BF\u37C0\u37C1\u37C2\u37C3"+
+            "\u37C4\u37C5\u37C6\u37C7\u37C8\u37C9\u37CA\u37CB"+
+            "\u37CC\u37CD\u37CE\u37CF\u37D0\u37D1\u37D2\u37D3"+
+            "\u37D4\u37D5\u37D6\u37D7\u37D8\u37D9\u0000\u37DA"+
+            "\u37DB\u37DC\u37DD\u37DE\u37DF\u37E0\u37E1\u37E2"+
+            "\u37E3\u37E4\u37E5\u37E6\u37E7\u37E8\u37E9\u37EA"+
+            "\u37EB\u37EC\u37ED\u37EE\u37EF\u37F0\u37F1\u37F2"+
+            "\u37F3\u37F4\u37F5\u37F6\u37F7\u37F8\u37F9\u37FA"+
+            "\u37FB\u37FC\u37FD\u37FE\u37FF\u3800\u3801\u3802"+
+            "\u3803\u3804\u3805\u3806\u3807\u3808\u3809\u380A"+
+            "\u380B\u380C\u380D\u380E\u380F\u3810\u3811\u3812"+
+            "\u3813\u3814\u3815\u3816\u3817\u3818\u3819\u381A"+
+            "\u381B\u381C\u381D\u381E\u381F\u3820\u3821\u3822"+
+            "\u3823\u3824\u3825\u3826\u3827\u3828\u3829\u382A"+
+            "\u382B\u382C\u382D\u382E\u382F\u3830\u3831\u3832"+
+            "\u3833\u3834\u3835\u3836\u3837\u3838\u3839\u383A"+
+            "\u383B\u383C\u383D\u383E\u383F\u3840\u3841\u3842"+
+            "\u3843\u3844\u3845\u3846\u3847\u3848\u3849\u384A"+
+            "\u384B\u384C\u384D\u384E\u384F\u3850\u3851\u3852"+
+            "\u3853\u3854\u3855\u3856\u3857\u3858\u3859\u385A"+
+            "\u385B\u385C\u385D\u385E\u385F\u3860\u3861\u3862"+
+            "\u3863\u3864\u3865\u3866\u3867\u3868\u3869\u386A"+
+            "\u386B\u386C\u386D\u386E\u386F\u3870\u3871\u3872"+
+            "\u3873\u3874\u3875\u3876\u3877\u3878\u3879\u387A"+
+            "\u387B\u387C\u387D\u387E\u387F\u3880\u3881\u3882"+
+            "\u3883\u3884\u3885\u3886\u3887\u3888\u3889\u388A"+
+            "\u388B\u388C\u388D\u388E\u388F\u3890\u3891\u3892"+
+            "\u3893\u3894\u3895\u3896\u3897\u3898\u3899\u389A"+
+            "\u389B\u389C\u389D\u389E\u389F\u38A0\u38A1\u38A2"+
+            "\u38A3\u38A4\u38A5\u38A6\u38A7\u38A8\u38A9\u38AA"+
+            "\u38AB\u38AC\u38AD\u38AE\u38AF\u38B0\u38B1\u38B2"+
+            "\u38B3\u38B4\u38B5\u38B6\u38B7\u38B8\u38B9\u38BA"+
+            "\u38BB\u38BC\u38BD\u38BE\u38BF\u38C0\u38C1\u38C2"+
+            "\u38C3\u38C4\u38C5\u38C6\u38C7\u38C8\u38C9\u38CA"+
+            "\u38CB\u38CC\u38CD\u38CE\u38CF\u38D0\u38D1\u38D2"+
+            "\u38D3\u38D4\u38D5\u38D6\u38D7\u38D8\u38D9\u38DA"+
+            "\u38DB\u38DC\u38DD\u38DE\u38DF\u38E0\u38E1\u38E2"+
+            "\u38E3\u38E4\u38E5\u38E6\u38E7\u38E8\u38E9\u38EA"+
+            "\u38EB\u38EC\u38ED\u38EE\u38EF\u38F0\u38F1\u38F2"+
+            "\u38F3\u38F4\u38F5\u38F6\u38F7\u38F8\u0000\u38F9"+
+            "\u38FA\u38FB\u38FC\u38FD\u38FE\u38FF\u3900\u3901"+
+            "\u3902\u3903\u3904\u3905\u3906\u3907\u3908\u3909"+
+            "\u390A\u390B\u390C\u390D\u390E\u390F\u3910\u3911"+
+            "\u3912\u3913\u3914\u3915\u3916\u3917\u3918\u3919"+
+            "\u391A\u391B\u391C\u391D\u391E\u391F\u3920\u3921"+
+            "\u3922\u3923\u3924\u3925\u3926\u3927\u3928\u3929"+
+            "\u392A\u392B\u392C\u392D\u392E\u392F\u3930\u3931"+
+            "\u3932\u3933\u3934\u3935\u3936\u3937\u3938\u3939"+
+            "\u393A\u393B\u393C\u393D\u393E\u393F\u3940\u3941"+
+            "\u3942\u3943\u3944\u3945\u3946\u3947\u3948\u3949"+
+            "\u394A\u394B\u394C\u394D\u394E\u394F\u3950\u3951"+
+            "\u3952\u3953\u3954\u3955\u3956\u3957\u3958\u3959"+
+            "\u395A\u395B\u395C\u395D\u395E\u395F\u3960\u3961"+
+            "\u3962\u3963\u3964\u3965\u3966\u3967\u3968\u3969"+
+            "\u0000\u396A\u396B\u396C\u396D\u396E\u396F\u3970"+
+            "\u3971\u3972\u3973\u3974\u3975\u3976\u3977\u3978"+
+            "\u3979\u397A\u397B\u397C\u397D\u397E\u397F\u3980"+
+            "\u3981\u3982\u3983\u3984\u3985\u3986\u3987\u3988"+
+            "\u3989\u398A\u398B\u398C\u398D\u398E\u398F\u3990"+
+            "\u3991\u3992\u3993\u3994\u3995\u3996\u3997\u3998"+
+            "\u3999\u399A\u399B\u399C\u399D\u399E\u399F\u39A0"+
+            "\u39A1\u39A2\u39A3\u39A4\u39A5\u39A6\u39A7\u39A8"+
+            "\u39A9\u39AA\u39AB\u39AC\u39AD\u39AE\u39AF\u39B0"+
+            "\u39B1\u39B2\u39B3\u39B4\u39B5\u39B6\u39B7\u39B8"+
+            "\u39B9\u39BA\u39BB\u39BC\u39BD\u39BE\u39BF\u39C0"+
+            "\u39C1\u39C2\u39C3\u39C4\u39C5\u39C6\u39C7\u39C8"+
+            "\u39C9\u39CA\u39CB\u39CC\u39CD\u39CE\u39CF\u39D0"+
+            "\u39D1\u39D2\u39D3\u39D4\u39D5\u39D6\u39D7\u39D8"+
+            "\u39D9\u39DA\u39DB\u39DC\u39DD\u39DE\u39DF\u39E0"+
+            "\u39E1\u39E2\u39E3\u39E4\u39E5\u39E6\u39E7\u39E8"+
+            "\u39E9\u39EA\u39EB\u39EC\u39ED\u39EE\u39EF\u39F0"+
+            "\u39F1\u39F2\u39F3\u39F4\u39F5\u39F6\u39F7\u39F8"+
+            "\u39F9\u39FA\u39FB\u39FC\u39FD\u39FE\u39FF\u3A00"+
+            "\u3A01\u3A02\u3A03\u3A04\u3A05\u3A06\u3A07\u3A08"+
+            "\u3A09\u3A0A\u3A0B\u3A0C\u3A0D\u3A0E\u3A0F\u3A10"+
+            "\u3A11\u3A12\u3A13\u3A14\u3A15\u3A16\u3A17\u3A18"+
+            "\u3A19\u3A1A\u3A1B\u3A1C\u3A1D\u3A1E\u3A1F\u3A20"+
+            "\u3A21\u3A22\u3A23\u3A24\u3A25\u3A26\u3A27\u3A28"+
+            "\u3A29\u3A2A\u3A2B\u3A2C\u3A2D\u3A2E\u3A2F\u3A30"+
+            "\u3A31\u3A32\u3A33\u3A34\u3A35\u3A36\u3A37\u3A38"+
+            "\u3A39\u3A3A\u3A3B\u3A3C\u3A3D\u3A3E\u3A3F\u3A40"+
+            "\u3A41\u3A42\u3A43\u3A44\u3A45\u3A46\u3A47\u3A48"+
+            "\u3A49\u3A4A\u3A4B\u3A4C\u3A4D\u3A4E\u3A4F\u3A50"+
+            "\u3A51\u3A52\u3A53\u3A54\u3A55\u3A56\u3A57\u3A58"+
+            "\u3A59\u3A5A\u3A5B\u3A5C\u3A5D\u3A5E\u3A5F\u3A60"+
+            "\u3A61\u3A62\u3A63\u3A64\u3A65\u3A66\u3A67\u3A68"+
+            "\u3A69\u3A6A\u3A6B\u3A6C\u3A6D\u3A6E\u3A6F\u3A70"+
+            "\u3A71\u3A72\u3A73\u3A74\u3A75\u3A76\u3A77\u3A78"+
+            "\u3A79\u3A7A\u3A7B\u3A7C\u3A7D\u3A7E\u3A7F\u3A80"+
+            "\u3A81\u3A82\u3A83\u3A84\u3A85\u3A86\u3A87\u3A88"+
+            "\u3A89\u3A8A\u3A8B\u3A8C\u3A8D\u3A8E\u3A8F\u3A90"+
+            "\u3A91\u3A92\u3A93\u3A94\u3A95\u3A96\u3A97\u3A98"+
+            "\u3A99\u3A9A\u3A9B\u3A9C\u3A9D\u3A9E\u3A9F\u3AA0"+
+            "\u3AA1\u3AA2\u3AA3\u3AA4\u3AA5\u3AA6\u3AA7\u3AA8"+
+            "\u3AA9\u3AAA\u3AAB\u3AAC\u3AAD\u3AAE\u3AAF\u3AB0"+
+            "\u3AB1\u3AB2\u3AB3\u3AB4\u3AB5\u3AB6\u3AB7\u3AB8"+
+            "\u3AB9\u3ABA\u3ABB\u3ABC\u3ABD\u3ABE\u3ABF\u3AC0"+
+            "\u3AC1\u3AC2\u3AC3\u3AC4\u3AC5\u3AC6\u3AC7\u3AC8"+
+            "\u3AC9\u3ACA\u3ACB\u3ACC\u3ACD\u3ACE\u3ACF\u3AD0"+
+            "\u3AD1\u3AD2\u3AD3\u3AD4\u3AD5\u3AD6\u3AD7\u3AD8"+
+            "\u3AD9\u3ADA\u3ADB\u3ADC\u3ADD\u3ADE\u3ADF\u3AE0"+
+            "\u3AE1\u3AE2\u3AE3\u3AE4\u3AE5\u3AE6\u3AE7\u3AE8"+
+            "\u3AE9\u3AEA\u3AEB\u3AEC\u3AED\u3AEE\u3AEF\u3AF0"+
+            "\u3AF1\u3AF2\u3AF3\u3AF4\u3AF5\u3AF6\u3AF7\u3AF8"+
+            "\u3AF9\u3AFA\u3AFB\u3AFC\u3AFD\u3AFE\u3AFF\u3B00"+
+            "\u3B01\u3B02\u3B03\u3B04\u3B05\u3B06\u3B07\u3B08"+
+            "\u3B09\u3B0A\u3B0B\u3B0C\u3B0D\u3B0E\u3B0F\u3B10"+
+            "\u3B11\u3B12\u3B13\u3B14\u3B15\u3B16\u3B17\u3B18"+
+            "\u3B19\u3B1A\u3B1B\u3B1C\u3B1D\u3B1E\u3B1F\u3B20"+
+            "\u3B21\u3B22\u3B23\u3B24\u3B25\u3B26\u3B27\u3B28"+
+            "\u3B29\u3B2A\u3B2B\u3B2C\u3B2D\u3B2E\u3B2F\u3B30"+
+            "\u3B31\u3B32\u3B33\u3B34\u3B35\u3B36\u3B37\u3B38"+
+            "\u3B39\u3B3A\u3B3B\u3B3C\u3B3D\u3B3E\u3B3F\u3B40"+
+            "\u3B41\u3B42\u3B43\u3B44\u3B45\u3B46\u3B47\u3B48"+
+            "\u3B49\u3B4A\u3B4B\u3B4C\u3B4D\u3B4E\u3B4F\u3B50"+
+            "\u3B51\u3B52\u3B53\u3B54\u3B55\u3B56\u3B57\u3B58"+
+            "\u3B59\u3B5A\u3B5B\u3B5C\u3B5D\u3B5E\u3B5F\u3B60"+
+            "\u3B61\u3B62\u3B63\u3B64\u3B65\u3B66\u3B67\u3B68"+
+            "\u3B69\u3B6A\u3B6B\u3B6C\u3B6D\u3B6E\u3B6F\u3B70"+
+            "\u3B71\u3B72\u3B73\u3B74\u3B75\u3B76\u3B77\u3B78"+
+            "\u3B79\u3B7A\u3B7B\u3B7C\u3B7D\u3B7E\u3B7F\u3B80"+
+            "\u3B81\u3B82\u3B83\u3B84\u3B85\u3B86\u3B87\u3B88";
+
+        private final static String innerIndex4=
+            "\u3B89\u3B8A\u3B8B\u3B8C\u3B8D\u3B8E\u3B8F\u3B90"+
+            "\u3B91\u3B92\u3B93\u3B94\u3B95\u3B96\u3B97\u3B98"+
+            "\u3B99\u3B9A\u3B9B\u3B9C\u3B9D\u3B9E\u3B9F\u3BA0"+
+            "\u3BA1\u3BA2\u3BA3\u3BA4\u3BA5\u3BA6\u3BA7\u3BA8"+
+            "\u3BA9\u3BAA\u3BAB\u3BAC\u3BAD\u3BAE\u3BAF\u3BB0"+
+            "\u3BB1\u3BB2\u3BB3\u3BB4\u3BB5\u3BB6\u3BB7\u3BB8"+
+            "\u3BB9\u3BBA\u3BBB\u3BBC\u3BBD\u3BBE\u3BBF\u3BC0"+
+            "\u3BC1\u3BC2\u3BC3\u3BC4\u3BC5\u3BC6\u3BC7\u3BC8"+
+            "\u3BC9\u3BCA\u3BCB\u3BCC\u3BCD\u3BCE\u3BCF\u3BD0"+
+            "\u3BD1\u3BD2\u3BD3\u3BD4\u3BD5\u3BD6\u3BD7\u3BD8"+
+            "\u3BD9\u3BDA\u3BDB\u3BDC\u3BDD\u3BDE\u3BDF\u3BE0"+
+            "\u3BE1\u3BE2\u3BE3\u3BE4\u3BE5\u3BE6\u3BE7\u3BE8"+
+            "\u3BE9\u3BEA\u3BEB\u3BEC\u3BED\u3BEE\u3BEF\u3BF0"+
+            "\u3BF1\u3BF2\u3BF3\u3BF4\u3BF5\u3BF6\u3BF7\u3BF8"+
+            "\u3BF9\u3BFA\u3BFB\u3BFC\u3BFD\u3BFE\u3BFF\u3C00"+
+            "\u3C01\u3C02\u3C03\u3C04\u3C05\u3C06\u3C07\u3C08"+
+            "\u3C09\u3C0A\u3C0B\u3C0C\u3C0D\u3C0E\u3C0F\u3C10"+
+            "\u3C11\u3C12\u3C13\u3C14\u3C15\u3C16\u3C17\u3C18"+
+            "\u3C19\u3C1A\u3C1B\u3C1C\u3C1D\u3C1E\u3C1F\u3C20"+
+            "\u3C21\u3C22\u3C23\u3C24\u3C25\u3C26\u3C27\u3C28"+
+            "\u3C29\u3C2A\u3C2B\u3C2C\u3C2D\u3C2E\u3C2F\u3C30"+
+            "\u3C31\u3C32\u3C33\u3C34\u3C35\u3C36\u3C37\u3C38"+
+            "\u3C39\u3C3A\u3C3B\u3C3C\u3C3D\u3C3E\u3C3F\u3C40"+
+            "\u3C41\u3C42\u3C43\u3C44\u3C45\u3C46\u3C47\u3C48"+
+            "\u3C49\u3C4A\u3C4B\u3C4C\u3C4D\u3C4E\u3C4F\u3C50"+
+            "\u3C51\u3C52\u3C53\u3C54\u3C55\u3C56\u3C57\u3C58"+
+            "\u3C59\u3C5A\u3C5B\u3C5C\u3C5D\u3C5E\u3C5F\u3C60"+
+            "\u3C61\u3C62\u3C63\u3C64\u3C65\u3C66\u3C67\u3C68"+
+            "\u3C69\u3C6A\u3C6B\u3C6C\u3C6D\u3C6E\u3C6F\u3C70"+
+            "\u3C71\u3C72\u3C73\u3C74\u3C75\u3C76\u3C77\u3C78"+
+            "\u3C79\u3C7A\u3C7B\u3C7C\u3C7D\u3C7E\u3C7F\u3C80"+
+            "\u3C81\u3C82\u3C83\u3C84\u3C85\u3C86\u3C87\u3C88"+
+            "\u3C89\u3C8A\u3C8B\u3C8C\u3C8D\u3C8E\u3C8F\u3C90"+
+            "\u3C91\u3C92\u3C93\u3C94\u3C95\u3C96\u3C97\u3C98"+
+            "\u3C99\u3C9A\u3C9B\u3C9C\u3C9D\u3C9E\u3C9F\u3CA0"+
+            "\u3CA1\u3CA2\u3CA3\u3CA4\u3CA5\u3CA6\u3CA7\u3CA8"+
+            "\u3CA9\u3CAA\u3CAB\u3CAC\u3CAD\u3CAE\u3CAF\u3CB0"+
+            "\u3CB1\u3CB2\u3CB3\u3CB4\u3CB5\u3CB6\u3CB7\u3CB8"+
+            "\u3CB9\u3CBA\u3CBB\u3CBC\u3CBD\u3CBE\u3CBF\u3CC0"+
+            "\u3CC1\u3CC2\u3CC3\u3CC4\u3CC5\u3CC6\u3CC7\u3CC8"+
+            "\u3CC9\u3CCA\u3CCB\u3CCC\u3CCD\u3CCE\u3CCF\u3CD0"+
+            "\u3CD1\u3CD2\u3CD3\u3CD4\u3CD5\u3CD6\u3CD7\u3CD8"+
+            "\u3CD9\u3CDA\u3CDB\u3CDC\u3CDD\u3CDE\u0000\u3CDF"+
+            "\u3CE0\u3CE1\u3CE2\u3CE3\u3CE4\u3CE5\u3CE6\u3CE7"+
+            "\u3CE8\u3CE9\u3CEA\u3CEB\u3CEC\u3CED\u3CEE\u3CEF"+
+            "\u3CF0\u3CF1\u3CF2\u3CF3\u3CF4\u3CF5\u3CF6\u3CF7"+
+            "\u3CF8\u3CF9\u3CFA\u3CFB\u3CFC\u3CFD\u3CFE\u3CFF"+
+            "\u3D00\u3D01\u3D02\u3D03\u3D04\u3D05\u3D06\u3D07"+
+            "\u3D08\u3D09\u3D0A\u3D0B\u3D0C\u3D0D\u3D0E\u3D0F"+
+            "\u3D10\u3D11\u3D12\u3D13\u3D14\u3D15\u3D16\u3D17"+
+            "\u3D18\u3D19\u3D1A\u3D1B\u3D1C\u3D1D\u3D1E\u3D1F"+
+            "\u3D20\u3D21\u3D22\u3D23\u3D24\u3D25\u3D26\u3D27"+
+            "\u3D28\u3D29\u3D2A\u3D2B\u3D2C\u3D2D\u3D2E\u3D2F"+
+            "\u3D30\u3D31\u3D32\u3D33\u3D34\u3D35\u3D36\u3D37"+
+            "\u3D38\u3D39\u3D3A\u3D3B\u3D3C\u3D3D\u3D3E\u3D3F"+
+            "\u3D40\u3D41\u3D42\u3D43\u3D44\u3D45\u3D46\u3D47"+
+            "\u3D48\u3D49\u3D4A\u3D4B\u3D4C\u3D4D\u3D4E\u3D4F"+
+            "\u3D50\u3D51\u3D52\u3D53\u3D54\u3D55\u3D56\u3D57"+
+            "\u3D58\u3D59\u3D5A\u3D5B\u3D5C\u3D5D\u3D5E\u3D5F"+
+            "\u3D60\u3D61\u3D62\u3D63\u3D64\u3D65\u3D66\u3D67"+
+            "\u3D68\u3D69\u3D6A\u3D6B\u3D6C\u3D6D\u3D6E\u3D6F"+
+            "\u3D70\u3D71\u3D72\u3D73\u3D74\u3D75\u3D76\u3D77"+
+            "\u3D78\u3D79\u3D7A\u3D7B\u3D7C\u3D7D\u3D7E\u3D7F"+
+            "\u3D80\u3D81\u3D82\u3D83\u3D84\u3D85\u3D86\u3D87"+
+            "\u3D88\u3D89\u3D8A\u3D8B\u3D8C\u3D8D\u3D8E\u3D8F"+
+            "\u3D90\u3D91\u3D92\u3D93\u3D94\u3D95\u3D96\u3D97"+
+            "\u3D98\u3D99\u3D9A\u3D9B\u3D9C\u3D9D\u3D9E\u3D9F"+
+            "\u3DA0\u3DA1\u3DA2\u3DA3\u3DA4\u3DA5\u3DA6\u3DA7"+
+            "\u3DA8\u3DA9\u3DAA\u3DAB\u3DAC\u3DAD\u3DAE\u3DAF"+
+            "\u3DB0\u3DB1\u3DB2\u3DB3\u3DB4\u3DB5\u3DB6\u3DB7"+
+            "\u3DB8\u3DB9\u3DBA\u3DBB\u3DBC\u3DBD\u3DBE\u3DBF"+
+            "\u3DC0\u3DC1\u3DC2\u3DC3\u3DC4\u3DC5\u3DC6\u3DC7"+
+            "\u3DC8\u3DC9\u3DCA\u3DCB\u3DCC\u3DCD\u3DCE\u3DCF"+
+            "\u3DD0\u3DD1\u3DD2\u3DD3\u3DD4\u3DD5\u3DD6\u3DD7"+
+            "\u3DD8\u3DD9\u3DDA\u3DDB\u3DDC\u3DDD\u3DDE\u3DDF"+
+            "\u3DE0\u3DE1\u3DE2\u3DE3\u3DE4\u3DE5\u3DE6\u0000"+
+            "\u3DE7\u3DE8\u3DE9\u3DEA\u3DEB\u3DEC\u3DED\u3DEE"+
+            "\u3DEF\u3DF0\u3DF1\u3DF2\u3DF3\u3DF4\u3DF5\u3DF6"+
+            "\u3DF7\u3DF8\u3DF9\u3DFA\u3DFB\u3DFC\u3DFD\u3DFE"+
+            "\u3DFF\u3E00\u3E01\u3E02\u3E03\u3E04\u3E05\u3E06"+
+            "\u3E07\u3E08\u3E09\u3E0A\u3E0B\u3E0C\u3E0D\u3E0E"+
+            "\u3E0F\u3E10\u3E11\u3E12\u3E13\u3E14\u3E15\u3E16"+
+            "\u3E17\u3E18\u3E19\u3E1A\u3E1B\u3E1C\u3E1D\u3E1E"+
+            "\u3E1F\u3E20\u3E21\u3E22\u3E23\u3E24\u3E25\u3E26"+
+            "\u3E27\u3E28\u3E29\u3E2A\u3E2B\u3E2C\u3E2D\u3E2E"+
+            "\u3E2F\u3E30\u3E31\u3E32\u3E33\u3E34\u3E35\u3E36"+
+            "\u3E37\u3E38\u3E39\u3E3A\u3E3B\u3E3C\u3E3D\u3E3E"+
+            "\u3E3F\u3E40\u3E41\u3E42\u3E43\u3E44\u3E45\u3E46"+
+            "\u3E47\u3E48\u3E49\u3E4A\u3E4B\u3E4C\u3E4D\u3E4E"+
+            "\u3E4F\u3E50\u3E51\u3E52\u3E53\u3E54\u3E55\u3E56"+
+            "\u3E57\u3E58\u3E59\u3E5A\u3E5B\u3E5C\u3E5D\u3E5E"+
+            "\u3E5F\u3E60\u3E61\u3E62\u3E63\u3E64\u3E65\u3E66"+
+            "\u3E67\u3E68\u3E69\u3E6A\u3E6B\u3E6C\u3E6D\u3E6E"+
+            "\u3E6F\u3E70\u3E71\u3E72\u3E73\u3E74\u3E75\u3E76"+
+            "\u3E77\u3E78\u3E79\u3E7A\u3E7B\u3E7C\u3E7D\u3E7E"+
+            "\u3E7F\u3E80\u3E81\u3E82\u3E83\u3E84\u3E85\u3E86"+
+            "\u3E87\u3E88\u3E89\u3E8A\u3E8B\u3E8C\u3E8D\u3E8E"+
+            "\u3E8F\u3E90\u3E91\u3E92\u3E93\u3E94\u3E95\u3E96"+
+            "\u3E97\u3E98\u3E99\u3E9A\u3E9B\u3E9C\u3E9D\u3E9E"+
+            "\u3E9F\u3EA0\u3EA1\u3EA2\u3EA3\u3EA4\u3EA5\u3EA6"+
+            "\u3EA7\u3EA8\u3EA9\u3EAA\u3EAB\u3EAC\u3EAD\u3EAE"+
+            "\u3EAF\u3EB0\u3EB1\u3EB2\u3EB3\u3EB4\u3EB5\u3EB6"+
+            "\u3EB7\u3EB8\u3EB9\u3EBA\u3EBB\u3EBC\u3EBD\u3EBE"+
+            "\u3EBF\u3EC0\u3EC1\u3EC2\u3EC3\u3EC4\u3EC5\u3EC6"+
+            "\u3EC7\u3EC8\u3EC9\u3ECA\u3ECB\u3ECC\u3ECD\u3ECE"+
+            "\u3ECF\u3ED0\u3ED1\u3ED2\u3ED3\u3ED4\u3ED5\u3ED6"+
+            "\u3ED7\u3ED8\u3ED9\u3EDA\u3EDB\u3EDC\u3EDD\u3EDE"+
+            "\u3EDF\u3EE0\u3EE1\u3EE2\u3EE3\u3EE4\u3EE5\u3EE6"+
+            "\u3EE7\u3EE8\u3EE9\u3EEA\u3EEB\u3EEC\u3EED\u3EEE"+
+            "\u3EEF\u3EF0\u3EF1\u3EF2\u3EF3\u3EF4\u3EF5\u3EF6"+
+            "\u3EF7\u3EF8\u3EF9\u3EFA\u3EFB\u3EFC\u3EFD\u3EFE"+
+            "\u3EFF\u3F00\u3F01\u3F02\u3F03\u3F04\u3F05\u3F06"+
+            "\u3F07\u3F08\u3F09\u3F0A\u3F0B\u3F0C\u3F0D\u3F0E"+
+            "\u3F0F\u3F10\u3F11\u3F12\u3F13\u3F14\u3F15\u3F16"+
+            "\u3F17\u3F18\u3F19\u3F1A\u3F1B\u3F1C\u3F1D\u3F1E"+
+            "\u3F1F\u3F20\u3F21\u3F22\u3F23\u3F24\u3F25\u3F26"+
+            "\u3F27\u3F28\u3F29\u3F2A\u3F2B\u3F2C\u3F2D\u3F2E"+
+            "\u3F2F\u3F30\u3F31\u3F32\u3F33\u3F34\u3F35\u3F36"+
+            "\u3F37\u3F38\u3F39\u3F3A\u3F3B\u3F3C\u3F3D\u3F3E"+
+            "\u3F3F\u3F40\u3F41\u3F42\u3F43\u3F44\u3F45\u3F46"+
+            "\u3F47\u3F48\u3F49\u3F4A\u3F4B\u3F4C\u3F4D\u3F4E"+
+            "\u3F4F\u3F50\u3F51\u3F52\u3F53\u3F54\u3F55\u3F56"+
+            "\u3F57\u3F58\u3F59\u3F5A\u3F5B\u3F5C\u3F5D\u3F5E"+
+            "\u3F5F\u3F60\u3F61\u3F62\u3F63\u3F64\u3F65\u3F66"+
+            "\u3F67\u3F68\u3F69\u3F6A\u3F6B\u3F6C\u3F6D\u3F6E"+
+            "\u3F6F\u3F70\u3F71\u3F72\u3F73\u3F74\u3F75\u3F76"+
+            "\u3F77\u3F78\u3F79\u3F7A\u3F7B\u3F7C\u3F7D\u3F7E"+
+            "\u3F7F\u3F80\u3F81\u3F82\u3F83\u3F84\u3F85\u3F86"+
+            "\u3F87\u3F88\u3F89\u3F8A\u3F8B\u3F8C\u3F8D\u3F8E"+
+            "\u3F8F\u3F90\u3F91\u3F92\u3F93\u3F94\u3F95\u3F96"+
+            "\u3F97\u3F98\u3F99\u3F9A\u3F9B\u3F9C\u3F9D\u3F9E"+
+            "\u3F9F\u3FA0\u3FA1\u3FA2\u3FA3\u3FA4\u3FA5\u3FA6"+
+            "\u3FA7\u3FA8\u3FA9\u3FAA\u3FAB\u3FAC\u3FAD\u3FAE"+
+            "\u3FAF\u3FB0\u3FB1\u3FB2\u3FB3\u3FB4\u3FB5\u3FB6"+
+            "\u3FB7\u3FB8\u3FB9\u3FBA\u3FBB\u3FBC\u3FBD\u0000"+
+            "\u3FBE\u3FBF\u3FC0\u3FC1\u3FC2\u3FC3\u3FC4\u3FC5"+
+            "\u3FC6\u3FC7\u3FC8\u3FC9\u3FCA\u3FCB\u3FCC\u3FCD"+
+            "\u3FCE\u3FCF\u3FD0\u3FD1\u3FD2\u3FD3\u3FD4\u3FD5"+
+            "\u3FD6\u3FD7\u3FD8\u3FD9\u3FDA\u3FDB\u3FDC\u3FDD"+
+            "\u3FDE\u3FDF\u3FE0\u3FE1\u3FE2\u3FE3\u3FE4\u3FE5"+
+            "\u3FE6\u3FE7\u3FE8\u3FE9\u3FEA\u3FEB\u3FEC\u3FED"+
+            "\u3FEE\u3FEF\u3FF0\u3FF1\u3FF2\u3FF3\u3FF4\u3FF5"+
+            "\u3FF6\u3FF7\u3FF8\u3FF9\u3FFA\u3FFB\u3FFC\u3FFD"+
+            "\u3FFE\u3FFF\u4000\u4001\u4002\u4003\u4004\u4005"+
+            "\u4006\u4007\u4008\u4009\u400A\u400B\u400C\u400D"+
+            "\u400E\u400F\u4010\u4011\u4012\u4013\u4014\u4015"+
+            "\u4016\u4017\u4018\u4019\u401A\u401B\u401C\u401D"+
+            "\u401E\u401F\u4020\u4021\u4022\u4023\u4024\u4025"+
+            "\u4026\u4027\u4028\u4029\u402A\u402B\u402C\u402D"+
+            "\u402E\u402F\u4030\u4031\u0000\u4032\u4033\u4034"+
+            "\u4035\u0000\u4036\u4037\u4038\u4039\u403A\u403B"+
+            "\u403C\u403D\u403E\u403F\u4040\u4041\u4042\u4043"+
+            "\u4044\u4045\u4046\u4047\u4048\u4049\u404A\u404B"+
+            "\u404C\u404D\u404E\u404F\u4050\u4051\u4052\u4053"+
+            "\u4054\u4055\u4056\u4057\u4058\u4059\u405A\u405B"+
+            "\u405C\u405D\u405E\u405F\u4060\u0000\u4061\u4062"+
+            "\u4063\u4064\u4065\u4066\u4067\u4068\u4069\u406A"+
+            "\u406B\u406C\u406D\u406E\u406F\u4070\u4071\u4072"+
+            "\u4073\u4074\u4075\u4076\u4077\u4078\u4079\u407A"+
+            "\u407B\u407C\u407D\u407E\u407F\u4080\u4081\u4082"+
+            "\u4083\u4084\u4085\u4086\u4087\u4088\u4089\u408A"+
+            "\u408B\u408C\u408D\u408E\u408F\u4090\u4091\u4092"+
+            "\u4093\u4094\u4095\u4096\u4097\u4098\u4099\u409A"+
+            "\u409B\u409C\u409D\u409E\u409F\u40A0\u40A1\u40A2"+
+            "\u40A3\u40A4\u40A5\u40A6\u40A7\u40A8\u40A9\u40AA"+
+            "\u40AB\u40AC\u40AD\u40AE\u40AF\u40B0\u40B1\u40B2"+
+            "\u40B3\u40B4\u40B5\u40B6\u40B7\u40B8\u40B9\u40BA"+
+            "\u40BB\u40BC\u40BD\u40BE\u40BF\u40C0\u40C1\u40C2"+
+            "\u40C3\u40C4\u40C5\u40C6\u40C7\u40C8\u40C9\u40CA"+
+            "\u40CB\u40CC\u40CD\u40CE\u40CF\u40D0\u40D1\u40D2"+
+            "\u40D3\u40D4\u40D5\u40D6\u40D7\u40D8\u40D9\u40DA"+
+            "\u40DB\u40DC\u40DD\u40DE\u40DF\u40E0\u40E1\u40E2"+
+            "\u40E3\u40E4\u40E5\u40E6\u40E7\u40E8\u40E9\u40EA"+
+            "\u40EB\u40EC\u40ED\u40EE\u40EF\u40F0\u40F1\u40F2"+
+            "\u40F3\u40F4\u40F5\u40F6\u40F7\u40F8\u40F9\u40FA"+
+            "\u40FB\u40FC\u40FD\u40FE\u40FF\u4100\u4101\u4102"+
+            "\u4103\u4104\u4105\u4106\u4107\u4108\u4109\u410A"+
+            "\u410B\u410C\u410D\u410E\u410F\u4110\u4111\u4112"+
+            "\u4113\u4114\u4115\u4116\u4117\u4118\u4119\u411A"+
+            "\u411B\u411C\u411D\u411E\u411F\u4120\u4121\u4122"+
+            "\u4123\u4124\u4125\u4126\u4127\u4128\u4129\u412A"+
+            "\u412B\u412C\u412D\u412E\u412F\u4130\u4131\u4132"+
+            "\u4133\u4134\u4135\u4136\u4137\u4138\u4139\u413A"+
+            "\u413B\u413C\u413D\u413E\u413F\u4140\u4141\u4142"+
+            "\u4143\u4144\u4145\u4146\u4147\u4148\u4149\u414A"+
+            "\u414B\u414C\u414D\u414E\u414F\u4150\u4151\u4152"+
+            "\u4153\u4154\u4155\u4156\u4157\u4158\u0000\u4159"+
+            "\u415A\u415B\u415C\u415D\u415E\u415F\u4160\u4161"+
+            "\u4162\u4163\u4164\u4165\u4166\u4167\u4168\u4169"+
+            "\u416A\u416B\u416C\u416D\u416E\u416F\u4170\u4171"+
+            "\u4172\u4173\u4174\u4175\u4176\u4177\u4178\u4179"+
+            "\u417A\u417B\u417C\u417D\u417E\u417F\u4180\u4181"+
+            "\u4182\u4183\u4184\u4185\u4186\u4187\u4188\u4189"+
+            "\u418A\u418B\u418C\u418D\u418E\u418F\u4190\u4191"+
+            "\u4192\u4193\u4194\u4195\u4196\u4197\u4198\u4199"+
+            "\u419A\u419B\u419C\u419D\u419E\u419F\u41A0\u41A1"+
+            "\u41A2\u41A3\u41A4\u41A5\u41A6\u41A7\u41A8\u41A9"+
+            "\u41AA\u41AB\u41AC\u41AD\u41AE\u41AF\u41B0\u41B1"+
+            "\u41B2\u41B3\u41B4\u41B5\u41B6\u41B7\u41B8\u41B9"+
+            "\u41BA\u41BB\u41BC\u41BD\u41BE\u41BF\u41C0\u41C1"+
+            "\u41C2\u41C3\u41C4\u41C5\u41C6\u41C7\u41C8\u41C9"+
+            "\u41CA\u41CB\u41CC\u41CD\u41CE\u41CF\u41D0\u41D1"+
+            "\u41D2\u41D3\u41D4\u41D5\u41D6\u41D7\u41D8\u41D9"+
+            "\u41DA\u41DB\u41DC\u41DD\u41DE\u41DF\u41E0\u41E1"+
+            "\u41E2\u41E3\u41E4\u41E5\u41E6\u41E7\u41E8\u41E9"+
+            "\u41EA\u41EB\u41EC\u41ED\u41EE\u41EF\u41F0\u41F1"+
+            "\u41F2\u41F3\u41F4\u41F5\u41F6\u41F7\u41F8\u41F9"+
+            "\u41FA\u41FB\u41FC\u41FD\u41FE\u41FF\u4200\u4201"+
+            "\u4202\u4203\u4204\u4205\u4206\u4207\u4208\u4209"+
+            "\u420A\u420B\u420C\u420D\u420E\u420F\u4210\u4211"+
+            "\u4212\u4213\u4214\u4215\u4216\u4217\u4218\u4219"+
+            "\u421A\u421B\u421C\u421D\u421E\u421F\u4220\u4221"+
+            "\u4222\u4223\u4224\u4225\u4226\u4227\u4228\u4229"+
+            "\u422A\u422B\u422C\u422D\u422E\u422F\u4230\u4231"+
+            "\u4232\u4233\u4234\u4235\u4236\u4237\u4238\u4239"+
+            "\u423A\u423B\u423C\u423D\u423E\u423F\u4240\u4241"+
+            "\u4242\u4243\u4244\u4245\u4246\u4247\u4248\u4249"+
+            "\u424A\u424B\u424C\u424D\u424E\u424F\u4250\u4251"+
+            "\u4252\u4253\u4254\u4255\u4256\u4257\u4258\u4259"+
+            "\u425A\u425B\u425C\u425D\u425E\u425F\u4260\u4261"+
+            "\u4262\u4263\u4264\u4265\u4266\u4267\u4268\u4269"+
+            "\u426A\u426B\u426C\u426D\u426E\u426F\u4270\u4271"+
+            "\u4272\u4273\u4274\u4275\u4276\u4277\u4278\u4279"+
+            "\u427A\u427B\u427C\u427D\u427E\u427F\u4280\u4281"+
+            "\u4282\u4283\u4284\u4285\u4286\u4287\u4288\u4289"+
+            "\u428A\u428B\u428C\u428D\u428E\u428F\u4290\u4291"+
+            "\u4292\u4293\u4294\u4295\u4296\u4297\u4298\u4299"+
+            "\u429A\u429B\u429C\u429D\u429E\u429F\u42A0\u42A1"+
+            "\u42A2\u42A3\u42A4\u42A5\u42A6\u42A7\u42A8\u42A9"+
+            "\u42AA\u42AB\u42AC\u42AD\u42AE\u42AF\u42B0\u42B1"+
+            "\u42B2\u42B3\u42B4\u42B5\u42B6\u42B7\u42B8\u42B9"+
+            "\u42BA\u42BB\u42BC\u42BD\u42BE\u42BF\u42C0\u42C1"+
+            "\u42C2\u42C3\u42C4\u42C5\u42C6\u42C7\u42C8\u42C9"+
+            "\u42CA\u42CB\u42CC\u42CD\u0000\u42CE\u42CF\u42D0"+
+            "\u42D1\u42D2\u42D3\u42D4\u42D5\u42D6\u42D7\u42D8"+
+            "\u42D9\u42DA\u42DB\u42DC\u42DD\u42DE\u42DF\u42E0"+
+            "\u42E1\u0000\u42E2\u42E3\u42E4\u42E5\u42E6\u42E7"+
+            "\u42E8\u42E9\u42EA\u42EB\u42EC\u42ED\u42EE\u42EF"+
+            "\u42F0\u42F1\u42F2\u42F3\u42F4\u42F5\u42F6\u42F7"+
+            "\u42F8\u42F9\u42FA\u42FB\u42FC\u42FD\u42FE\u42FF"+
+            "\u4300\u4301\u4302\u4303\u4304\u4305\u4306\u4307"+
+            "\u4308\u4309\u430A\u430B\u430C\u430D\u430E\u430F"+
+            "\u4310\u4311\u4312\u4313\u4314\u4315\u4316\u4317"+
+            "\u4318\u4319\u431A\u431B\u431C\u431D\u431E\u431F"+
+            "\u4320\u4321\u4322\u4323\u4324\u4325\u4326\u4327"+
+            "\u4328\u4329\u432A\u432B\u432C\u432D\u432E\u432F"+
+            "\u4330\u4331\u4332\u4333\u4334\u4335\u4336\u4337"+
+            "\u4338\u4339\u433A\u433B\u433C\u433D\u433E\u433F"+
+            "\u4340\u4341\u4342\u4343\u4344\u4345\u4346\u4347"+
+            "\u4348\u4349\u434A\u434B\u434C\u434D\u434E\u434F"+
+            "\u4350\u4351\u4352\u4353\u4354\u4355\u4356\u4357"+
+            "\u4358\u4359\u435A\u435B\u435C\u435D\u435E\u435F"+
+            "\u4360\u4361\u4362\u4363\u4364\u4365\u4366\u4367"+
+            "\u4368\u4369\u436A\u436B\u436C\u436D\u436E\u436F"+
+            "\u4370\u4371\u4372\u4373\u4374\u4375\u4376\u4377"+
+            "\u4378\u4379\u437A\u437B\u437C\u437D\u437E\u437F"+
+            "\u4380\u4381\u4382\u4383\u4384\u4385\u4386\u4387"+
+            "\u4388\u4389\u438A\u438B\u438C\u438D\u438E\u438F"+
+            "\u4390\u4391\u4392\u4393\u4394\u4395\u4396\u4397"+
+            "\u4398\u4399\u439A\u439B\u439C\u439D\u439E\u439F"+
+            "\u43A0\u43A1\u43A2\u0000\u43A3\u43A4\u43A5\u43A6"+
+            "\u43A7\u0000\u43A8\u43A9\u43AA\u43AB\u43AC\u43AD"+
+            "\u43AE\u43AF\u43B0\u43B1\u43B2\u43B3\u43B4\u43B5"+
+            "\u43B6\u43B7\u43B8\u43B9\u43BA\u43BB\u43BC\u43BD"+
+            "\u43BE\u43BF\u43C0\u43C1\u43C2\u43C3\u43C4\u43C5"+
+            "\u43C6\u43C7\u43C8\u43C9\u43CA\u43CB\u43CC\u43CD"+
+            "\u43CE\u43CF\u43D0\u43D1\u43D2\u43D3\u43D4\u43D5"+
+            "\u43D6\u43D7\u43D8\u43D9\u43DA\u43DB\u43DC\u43DD"+
+            "\u43DE\u43DF\u43E0\u43E1\u43E2\u43E3\u43E4\u43E5"+
+            "\u43E6\u43E7\u43E8\u43E9\u43EA\u43EB\u43EC\u43ED"+
+            "\u43EE\u43EF\u43F0\u43F1\u43F2\u43F3\u43F4\u43F5"+
+            "\u43F6\u43F7\u43F8\u43F9\u0000\u43FA\u43FB\u43FC"+
+            "\u43FD\u43FE\u43FF\u4400\u4401\u4402\u4403\u4404"+
+            "\u4405\u4406\u4407\u4408\u4409\u0000\u440A\u440B"+
+            "\u440C\u440D\u440E\u440F\u4410\u4411\u4412\u4413"+
+            "\u4414\u4415\u4416\u4417\u4418\u4419\u441A\u441B"+
+            "\u441C\u441D\u441E\u441F\u4420\u4421\u4422\u4423"+
+            "\u4424\u4425\u4426\u4427\u4428\u4429\u442A\u442B"+
+            "\u442C\u442D\u442E\u442F\u4430\u4431\u4432\u4433"+
+            "\u4434\u4435\u4436\u4437\u4438\u4439\u443A\u443B"+
+            "\u443C\u443D\u443E\u443F\u4440\u4441\u4442\u4443"+
+            "\u4444\u4445\u4446\u4447\u4448\u4449\u444A\u444B"+
+            "\u444C\u444D\u444E\u444F\u4450\u4451\u4452\u4453"+
+            "\u4454\u4455\u4456\u4457\u4458\u4459\u445A\u445B"+
+            "\u445C\u445D\u445E\u445F\u4460\u4461\u4462\u4463"+
+            "\u4464\u4465\u4466\u4467\u4468\u4469\u446A\u446B"+
+            "\u446C\u446D\u446E\u446F\u4470\u4471\u4472\u4473"+
+            "\u4474\u4475\u4476\u4477\u4478\u4479\u447A\u447B"+
+            "\u447C\u447D\u447E\u447F\u4480\u4481\u4482\u4483"+
+            "\u4484\u4485\u4486\u4487\u4488\u4489\u448A\u448B"+
+            "\u448C\u448D\u448E\u448F\u4490\u4491\u4492\u4493"+
+            "\u4494\u4495\u4496\u4497\u4498\u4499\u449A\u449B"+
+            "\u449C\u449D\u449E\u449F\u44A0\u44A1\u44A2\u44A3"+
+            "\u44A4\u44A5\u44A6\u44A7\u44A8\u44A9\u44AA\u44AB"+
+            "\u44AC\u44AD\u44AE\u44AF\u44B0\u44B1\u44B2\u44B3"+
+            "\u44B4\u44B5\u44B6\u44B7\u44B8\u44B9\u44BA\u44BB"+
+            "\u44BC\u44BD\u44BE\u44BF\u44C0\u44C1\u44C2\u44C3"+
+            "\u44C4\u44C5\u44C6\u44C7\u44C8\u44C9\u44CA\u44CB"+
+            "\u44CC\u44CD\u44CE\u44CF\u44D0\u44D1\u44D2\u44D3"+
+            "\u44D4\u44D5\u44D6\u44D7\u44D8\u44D9\u44DA\u44DB"+
+            "\u44DC\u44DD\u44DE\u44DF\u44E0\u44E1\u44E2\u44E3"+
+            "\u44E4\u44E5\u44E6\u44E7\u44E8\u44E9\u44EA\u44EB"+
+            "\u44EC\u44ED\u44EE\u44EF\u44F0\u44F1\u44F2\u44F3"+
+            "\u44F4\u44F5\u44F6\u44F7\u44F8\u44F9\u44FA\u44FB"+
+            "\u44FC\u44FD\u44FE\u44FF\u4500\u4501\u4502\u4503"+
+            "\u4504\u4505\u4506\u4507\u4508\u4509\u450A\u450B"+
+            "\u450C\u450D\u450E\u450F\u4510\u4511\u4512\u4513"+
+            "\u4514\u4515\u4516\u4517\u4518\u4519\u451A\u451B"+
+            "\u451C\u451D\u451E\u451F\u4520\u4521\u4522\u4523"+
+            "\u4524\u4525\u4526\u4527\u4528\u4529\u452A\u452B"+
+            "\u452C\u452D\u452E\u452F\u4530\u4531\u4532\u4533"+
+            "\u4534\u4535\u4536\u4537\u4538\u4539\u453A\u453B"+
+            "\u453C\u453D\u453E\u453F\u4540\u4541\u4542\u4543"+
+            "\u4544\u4545\u4546\u4547\u4548\u4549\u454A\u454B"+
+            "\u454C\u454D\u454E\u454F\u4550\u4551\u4552\u4553"+
+            "\u4554\u4555\u4556\u4557\u4558\u4559\u455A\u455B"+
+            "\u455C\u455D\u455E\u455F\u4560\u4561\u4562\u4563"+
+            "\u4564\u4565\u4566\u4567\u4568\u4569\u456A\u456B"+
+            "\u456C\u456D\u456E\u456F\u4570\u4571\u4572\u4573"+
+            "\u4574\u4575\u4576\u4577\u4578\u4579\u457A\u457B"+
+            "\u457C\u457D\u457E\u457F\u4580\u4581\u4582\u4583"+
+            "\u4584\u4585\u4586\u4587\u4588\u4589\u458A\u458B"+
+            "\u458C\u458D\u458E\u458F\u4590\u4591\u4592\u4593"+
+            "\u4594\u4595\u4596\u4597\u4598\u4599\u459A\u459B"+
+            "\u459C\u459D\u459E\u459F\u45A0\u45A1\u45A2\u45A3"+
+            "\u45A4\u45A5\u45A6\u45A7\u45A8\u45A9\u45AA\u45AB"+
+            "\u45AC\u45AD\u45AE\u45AF\u45B0\u45B1\u45B2\u45B3"+
+            "\u45B4\u45B5\u45B6\u45B7\u45B8\u45B9\u45BA\u45BB"+
+            "\u45BC\u45BD\u45BE\u45BF\u45C0\u45C1\u45C2\u0000"+
+            "\u45C3\u45C4\u45C5\u45C6\u45C7\u45C8\u45C9\u45CA"+
+            "\u45CB\u45CC\u45CD\u45CE\u45CF\u45D0\u45D1\u45D2"+
+            "\u45D3\u45D4\u45D5\u45D6\u45D7\u45D8\u45D9\u45DA"+
+            "\u45DB\u45DC\u45DD\u45DE\u45DF\u45E0\u45E1\u45E2"+
+            "\u45E3\u45E4\u45E5\u45E6\u45E7\u45E8\u45E9\u45EA"+
+            "\u45EB\u45EC\u45ED\u45EE\u45EF\u45F0\u45F1\u45F2"+
+            "\u45F3\u45F4\u0000\u45F5\u45F6\u0000\u45F7\u45F8"+
+            "\u45F9\u45FA\u0000\u0000\u45FB\u0000\u0000\u45FC"+
+            "\u45FD\u45FE\u45FF\u4600\u4601\u4602\u4603\u4604"+
+            "\u4605\u4606\u4607\u4608\u4609\u460A\u460B\u460C"+
+            "\u460D\u460E\u460F\u0000\u4610\u4611\u4612\u0000"+
+            "\u4613\u4614\u4615\u4616\u4617\u4618\u4619\u461A"+
+            "\u461B\u461C\u461D\u461E\u461F\u4620\u4621\u4622"+
+            "\u4623\u4624\u4625\u4626\u4627\u4628\u0000\u0000"+
+            "\u4629\u462A\u462B\u462C\u462D\u462E\u462F\u4630"+
+            "\u4631\u4632\u4633\u4634\u4635\u4636\u4637\u4638"+
+            "\u4639\u463A\u463B\u463C\u463D\u463E\u463F\u4640"+
+            "\u4641\u4642\u4643\u4644\u4645\u4646\u4647\u4648"+
+            "\u4649\u464A\u464B\u464C\u464D\u464E\u464F\u4650"+
+            "\u4651\u4652\u4653\u4654\u4655\u4656\u4657\u4658"+
+            "\u4659\u465A\u465B\u465C\u465D\u465E\u465F\u4660"+
+            "\u4661\u4662\u4663\u4664\u4665\u4666\u4667\u4668"+
+            "\u4669\u466A\u466B\u466C\u466D\u466E\u466F\u4670"+
+            "\u4671\u4672\u4673\u4674\u4675\u4676\u4677\u4678"+
+            "\u4679\u467A\u467B\u467C\u467D\u467E\u467F\u4680"+
+            "\u4681\u4682\u4683\u4684\u4685\u4686\u4687\u4688"+
+            "\u4689\u468A\u468B\u468C\u468D\u468E\u468F\u4690"+
+            "\u4691\u4692\u4693\u4694\u4695\u4696\u4697\u4698"+
+            "\u4699\u469A\u469B\u469C\u469D\u469E\u469F\u46A0"+
+            "\u46A1\u46A2\u46A3\u46A4\u46A5\u46A6\u46A7\u46A8"+
+            "\u46A9\u46AA\u46AB\u46AC\u46AD\u46AE\u46AF\u46B0"+
+            "\u46B1\u46B2\u46B3\u46B4\u46B5\u46B6\u46B7\u46B8"+
+            "\u46B9\u46BA\u46BB\u46BC\u46BD\u46BE\u46BF\u46C0"+
+            "\u46C1\u46C2\u46C3\u46C4\u46C5\u46C6\u46C7\u46C8"+
+            "\u46C9\u46CA\u46CB\u46CC\u46CD\u46CE\u46CF\u46D0"+
+            "\u46D1\u46D2\u46D3\u46D4\u46D5\u46D6\u46D7\u46D8"+
+            "\u46D9\u46DA\u46DB\u46DC\u46DD\u46DE\u46DF\u46E0"+
+            "\u46E1\u46E2\u46E3\u46E4\u46E5\u46E6\u46E7\u46E8"+
+            "\u46E9\u46EA\u46EB\u46EC\u46ED\u46EE\u46EF\u46F0"+
+            "\u46F1\u46F2\u46F3\u46F4\u46F5\u46F6\u46F7\u46F8"+
+            "\u46F9\u46FA\u46FB\u46FC\u46FD\u46FE\u46FF\u4700"+
+            "\u4701\u4702\u4703\u4704\u4705\u4706\u4707\u4708"+
+            "\u4709\u470A\u470B\u470C\u470D\u470E\u470F\u4710"+
+            "\u4711\u4712\u4713\u4714\u4715\u4716\u4717\u4718"+
+            "\u4719\u471A\u471B\u471C\u471D\u471E\u471F\u4720"+
+            "\u4721\u4722\u4723\u4724\u4725\u4726\u4727\u4728"+
+            "\u4729\u472A\u472B\u472C\u472D\u472E\u472F\u4730"+
+            "\u4731\u4732\u4733\u4734\u4735\u4736\u4737\u4738"+
+            "\u4739\u473A\u473B\u473C\u473D\u473E\u473F\u4740"+
+            "\u4741\u4742\u4743\u4744\u4745\u4746\u4747\u4748"+
+            "\u4749\u474A\u474B\u474C\u474D\u474E\u474F\u4750"+
+            "\u4751\u4752\u4753\u4754\u4755\u4756\u4757\u4758"+
+            "\u4759\u475A\u475B\u475C\u475D\u475E\u475F\u4760"+
+            "\u4761\u4762\u4763\u4764\u4765\u4766\u4767\u4768"+
+            "\u4769\u476A\u476B\u476C\u476D\u476E\u476F\u4770"+
+            "\u4771\u4772\u4773\u4774\u4775\u4776\u4777\u4778"+
+            "\u4779\u477A\u477B\u477C\u477D\u477E\u477F\u4780"+
+            "\u4781\u4782\u4783\u4784\u4785\u4786\u4787\u4788"+
+            "\u4789\u478A\u478B\u478C\u478D\u478E\u478F\u4790"+
+            "\u4791\u4792\u4793\u4794\u4795\u4796\u4797\u4798"+
+            "\u4799\u479A\u479B\u479C\u479D\u479E\u479F\u47A0"+
+            "\u47A1\u47A2\u47A3\u47A4\u47A5\u47A6\u47A7\u47A8"+
+            "\u47A9\u47AA\u47AB\u47AC\u47AD\u47AE\u47AF\u47B0"+
+            "\u47B1\u47B2\u47B3\u47B4\u47B5\u47B6\u47B7\u47B8"+
+            "\u47B9\u47BA\u47BB\u47BC\u47BD\u47BE\u47BF\u47C0"+
+            "\u47C1\u47C2\u47C3\u47C4\u47C5\u47C6\u47C7\u47C8"+
+            "\u47C9\u47CA\u47CB\u47CC\u47CD\u47CE\u47CF\u47D0"+
+            "\u47D1\u47D2\u47D3\u47D4\u47D5\u47D6\u47D7\u47D8"+
+            "\u47D9\u47DA\u47DB\u47DC\u47DD\u47DE\u47DF\u47E0"+
+            "\u47E1\u47E2\u47E3\u47E4\u47E5\u47E6\u47E7\u47E8"+
+            "\u47E9\u47EA\u47EB\u47EC\u47ED\u47EE\u47EF\u47F0"+
+            "\u47F1\u47F2\u47F3\u47F4\u47F5\u47F6\u47F7\u47F8"+
+            "\u47F9\u47FA\u47FB\u47FC\u47FD\u47FE\u47FF\u4800"+
+            "\u4801\u4802\u4803\u4804\u4805\u4806\u4807\u4808"+
+            "\u4809\u480A\u480B\u480C\u480D\u480E\u480F\u4810"+
+            "\u4811\u4812\u4813\u4814\u4815\u4816\u4817\u4818"+
+            "\u4819\u481A\u481B\u481C\u481D\u481E\u481F\u4820"+
+            "\u4821\u4822\u4823\u4824\u4825\u4826\u4827\u4828"+
+            "\u4829\u482A\u482B\u482C\u482D\u482E\u482F\u4830"+
+            "\u4831\u4832\u4833\u4834\u4835\u4836\u4837\u4838"+
+            "\u4839\u483A\u483B\u483C\u483D\u483E\u483F\u4840"+
+            "\u4841\u4842\u4843\u4844\u4845\u4846\u4847\u4848"+
+            "\u4849\u484A\u484B\u484C\u484D\u484E\u484F\u4850"+
+            "\u4851\u4852\u4853\u4854\u4855\u4856\u4857\u4858"+
+            "\u4859\u485A\u485B\u485C\u485D\u485E\u485F\u4860"+
+            "\u4861\u4862\u4863\u4864\u4865\u4866\u4867\u4868"+
+            "\u4869\u486A\u486B\u486C\u486D\u486E\u486F\u4870"+
+            "\u4871\u4872\u4873\u4874\u4875\u4876\u4877\u4878"+
+            "\u4879\u487A\u487B\u487C\u487D\u487E\u487F\u4880"+
+            "\u4881\u4882\u4883\u4884\u4885\u4886\u4887\u4888"+
+            "\u4889\u488A\u488B\u488C\u488D\u488E\u488F\u4890"+
+            "\u4891\u4892\u4893\u4894\u4895\u4896\u4897\u4898"+
+            "\u4899\u489A\u489B\u489C\u489D\u489E\u489F\u48A0"+
+            "\u48A1\u48A2\u48A3\u48A4\u48A5\u48A6\u48A7\u48A8"+
+            "\u48A9\u48AA\u48AB\u48AC\u48AD\u48AE\u48AF\u48B0"+
+            "\u48B1\u48B2\u48B3\u48B4\u48B5\u48B6\u48B7\u48B8"+
+            "\u48B9\u48BA\u48BB\u48BC\u48BD\u48BE\u48BF\u48C0"+
+            "\u48C1\u48C2\u48C3\u48C4\u48C5\u48C6\u48C7\u48C8"+
+            "\u48C9\u48CA\u48CB\u48CC\u48CD\u48CE\u48CF\u48D0"+
+            "\u48D1\u48D2\u48D3\u48D4\u48D5\u48D6\u48D7\u48D8"+
+            "\u48D9\u48DA\u48DB\u48DC\u48DD\u48DE\u48DF\u48E0"+
+            "\u48E1\u48E2\u48E3\u48E4\u48E5\u48E6\u48E7\u0000"+
+            "\u48E8\u48E9\u48EA\u48EB\u48EC\u48ED\u48EE\u48EF"+
+            "\u48F0\u48F1\u48F2\u48F3\u48F4\u48F5\u48F6\u48F7"+
+            "\u48F8\u48F9\u48FA\u48FB\u48FC\u48FD\u48FE\u48FF"+
+            "\u4900\u4901\u4902\u4903\u4904\u4905\u4906\u4907"+
+            "\u4908\u4909\u490A\u490B\u490C\u490D\u490E\u0000"+
+            "\u0000\u0000\u0000\u0000\u490F\u4910\u4911\u4912"+
+            "\u4913\u4914\u4915\u4916\u4917\u4918\u4919\u491A"+
+            "\u491B\u491C\u491D\u491E\u491F\u4920\u4921\u4922"+
+            "\u4923\u4924\u4925\u4926\u4927\u4928\u4929\u492A"+
+            "\u492B\u492C\u492D\u492E\u492F\u4930\u4931\u4932"+
+            "\u4933\u4934\u4935\u4936\u4937\u4938\u4939\u493A"+
+            "\u493B\u493C\u493D\u493E\u493F\u4940\u4941\u4942"+
+            "\u4943\u4944\u4945\u4946\u4947\u4948\u4949\u494A"+
+            "\u494B\u494C\u494D\u494E\u494F\u4950\u4951\u4952"+
+            "\u4953\u4954\u4955\u4956\u4957\u4958\u4959\u495A"+
+            "\u495B\u495C\u495D\u495E\u495F\u4960\u4961\u4962"+
+            "\u4963\u4964\u4965\u4966\u4967\u4968\u4969\u496A"+
+            "\u496B\u496C\u496D\u496E\u496F\u4970\u4971\u4972"+
+            "\u4973\u4974\u4975\u4976\u4977\u4978\u4979\u497A"+
+            "\u497B\u497C\u497D\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u497E\u497F\u4980\u4981\u4982\u4983"+
+            "\u4984\u4985\u4986\u4987\u4988\u4989\u498A\u498B"+
+            "\u498C\u498D\u498E\u498F\u4990\u4991\u4992\u4993"+
+            "\u4994\u4995\u4996\u4997\u4998\u4999\u499A\u499B"+
+            "\u499C\u499D\u499E\u499F\u49A0\u49A1\u49A2\u49A3"+
+            "\u49A4\u49A5\u49A6\u49A7\u49A8\u49A9\u49AA\u49AB"+
+            "\u49AC\u49AD\u49AE\u49AF\u49B0\u49B1\u49B2\u49B3"+
+            "\u49B4\u49B5\u49B6\u49B7\u49B8\u49B9\u49BA\u49BB"+
+            "\u49BC\u49BD\u49BE\u49BF\u49C0\u49C1\u49C2\u49C3"+
+            "\u49C4\u49C5\u49C6\u49C7\u49C8\u49C9\u49CA\u49CB"+
+            "\u49CC\u49CD\u49CE\u49CF\u49D0\u49D1\u49D2\u49D3"+
+            "\u49D4\u49D5\u49D6\u49D7\u49D8\u49D9\u49DA\u49DB"+
+            "\u49DC\u49DD\u49DE\u49DF\u49E0\u49E1\u49E2\u49E3"+
+            "\u49E4\u49E5\u49E6\u49E7\u49E8\u49E9\u49EA\u49EB"+
+            "\u49EC\u49ED\u49EE\u49EF\u49F0\u49F1\u49F2\u49F3"+
+            "\u49F4\u49F5\u49F6\u49F7\u49F8\u49F9\u49FA\u49FB"+
+            "\u49FC\u49FD\u49FE\u49FF\u4A00\u4A01\u4A02\u4A03"+
+            "\u4A04\u4A05\u4A06\u4A07\u4A08\u4A09\u4A0A\u4A0B"+
+            "\u4A0C\u4A0D\u4A0E\u4A0F\u4A10\u4A11\u0000\u4A12"+
+            "\u4A13\u4A14\u4A15\u4A16\u4A17\u4A18\u4A19\u4A1A"+
+            "\u4A1B\u4A1C\u4A1D\u4A1E\u4A1F\u4A20\u4A21\u4A22"+
+            "\u4A23\u4A24\u4A25\u4A26\u4A27\u4A28\u4A29\u4A2A"+
+            "\u4A2B\u4A2C\u4A2D\u4A2E\u4A2F\u4A30\u4A31\u4A32"+
+            "\u4A33\u4A34\u4A35\u4A36\u4A37\u4A38\u4A39\u4A3A"+
+            "\u4A3B\u4A3C\u4A3D\u4A3E\u4A3F\u4A40\u4A41\u4A42"+
+            "\u4A43\u4A44\u4A45\u4A46\u4A47\u4A48\u4A49\u4A4A"+
+            "\u4A4B\u4A4C\u4A4D\u4A4E\u4A4F\u4A50\u4A51\u4A52"+
+            "\u4A53\u4A54\u4A55\u4A56\u4A57\u4A58\u4A59\u4A5A"+
+            "\u4A5B\u4A5C\u4A5D\u4A5E\u4A5F\u4A60\u4A61\u4A62"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u4A63\u4A64"+
+            "\u4A65\u4A66\u4A67\u4A68\u4A69\u4A6A\u4A6B\u4A6C"+
+            "\u4A6D\u4A6E\u4A6F\u4A70\u4A71\u4A72\u4A73\u4A74"+
+            "\u4A75\u4A76\u4A77\u4A78\u4A79\u4A7A\u4A7B\u4A7C"+
+            "\u4A7D\u4A7E\u4A7F\u4A80\u4A81\u4A82\u4A83\u4A84"+
+            "\u4A85\u4A86\u4A87\u4A88\u4A89\u4A8A\u4A8B\u4A8C"+
+            "\u4A8D\u4A8E\u4A8F\u4A90\u4A91\u4A92\u4A93\u4A94"+
+            "\u4A95\u4A96\u4A97\u4A98\u4A99\u4A9A\u4A9B\u4A9C"+
+            "\u4A9D\u4A9E\u4A9F\u4AA0\u4AA1\u4AA2\u4AA3\u4AA4"+
+            "\u4AA5\u4AA6\u4AA7\u4AA8\u4AA9\u4AAA\u4AAB\u4AAC"+
+            "\u4AAD\u4AAE\u4AAF\u4AB0\u4AB1\u4AB2\u4AB3\u4AB4"+
+            "\u4AB5\u4AB6\u4AB7\u4AB8\u4AB9\u4ABA\u4ABB\u4ABC";
+
+        private final static String innerIndex5=
+            "\u4ABD\u4ABE\u4ABF\u4AC0\u4AC1\u4AC2\u4AC3\u4AC4"+
+            "\u4AC5\u4AC6\u4AC7\u4AC8\u4AC9\u4ACA\u4ACB\u4ACC"+
+            "\u4ACD\u4ACE\u4ACF\u4AD0\u4AD1\u4AD2\u4AD3\u4AD4"+
+            "\u4AD5\u4AD6\u4AD7\u4AD8\u4AD9\u4ADA\u4ADB\u4ADC"+
+            "\u4ADD\u4ADE\u4ADF\u4AE0\u4AE1\u4AE2\u4AE3\u4AE4"+
+            "\u4AE5\u4AE6\u4AE7\u4AE8\u4AE9\u4AEA\u4AEB\u4AEC"+
+            "\u4AED\u4AEE\u4AEF\u4AF0\u4AF1\u4AF2\u4AF3\u4AF4"+
+            "\u4AF5\u4AF6\u4AF7\u4AF8\u4AF9\u4AFA\u4AFB\u4AFC"+
+            "\u4AFD\u4AFE\u4AFF\u4B00\u4B01\u4B02\u4B03\u4B04"+
+            "\u4B05\u4B06\u4B07\u4B08\u4B09\u4B0A\u4B0B\u4B0C"+
+            "\u4B0D\u4B0E\u4B0F\u4B10\u4B11\u4B12\u4B13\u4B14"+
+            "\u4B15\u4B16\u4B17\u4B18\u4B19\u4B1A\u4B1B\u4B1C"+
+            "\u4B1D\u4B1E\u4B1F\u4B20\u4B21\u4B22\u4B23\u4B24"+
+            "\u4B25\u4B26\u4B27\u4B28\u4B29\u4B2A\u4B2B\u4B2C"+
+            "\u4B2D\u4B2E\u4B2F\u4B30\u4B31\u4B32\u4B33\u4B34"+
+            "\u4B35\u4B36\u4B37\u4B38\u4B39\u4B3A\u4B3B\u4B3C"+
+            "\u4B3D\u4B3E\u4B3F\u4B40\u4B41\u4B42\u4B43\u4B44"+
+            "\u4B45\u4B46\u4B47\u4B48\u4B49\u4B4A\u4B4B\u4B4C"+
+            "\u4B4D\u4B4E\u4B4F\u4B50\u4B51\u4B52\u4B53\u4B54"+
+            "\u4B55\u4B56\u4B57\u4B58\u4B59\u4B5A\u4B5B\u4B5C"+
+            "\u4B5D\u4B5E\u4B5F\u4B60\u4B61\u4B62\u4B63\u4B64"+
+            "\u4B65\u4B66\u4B67\u4B68\u4B69\u4B6A\u4B6B\u4B6C"+
+            "\u4B6D\u4B6E\u4B6F\u4B70\u4B71\u4B72\u4B73\u4B74"+
+            "\u4B75\u4B76\u4B77\u4B78\u4B79\u4B7A\u4B7B\u4B7C"+
+            "\u4B7D\u4B7E\u4B7F\u4B80\u4B81\u4B82\u4B83\u4B84"+
+            "\u4B85\u4B86\u4B87\u4B88\u4B89\u4B8A\u4B8B\u4B8C"+
+            "\u4B8D\u4B8E\u4B8F\u4B90\u4B91\u4B92\u4B93\u4B94"+
+            "\u4B95\u4B96\u4B97\u4B98\u4B99\u4B9A\u4B9B\u4B9C"+
+            "\u4B9D\u4B9E\u4B9F\u4BA0\u4BA1\u4BA2\u4BA3\u4BA4"+
+            "\u4BA5\u4BA6\u4BA7\u4BA8\u4BA9\u4BAA\u4BAB\u4BAC"+
+            "\u4BAD\u4BAE\u4BAF\u4BB0\u4BB1\u4BB2\u4BB3\u4BB4"+
+            "\u4BB5\u4BB6\u4BB7\u4BB8\u4BB9\u4BBA\u4BBB\u4BBC"+
+            "\u4BBD\u4BBE\u4BBF\u4BC0\u4BC1\u4BC2\u4BC3\u4BC4"+
+            "\u4BC5\u4BC6\u4BC7\u4BC8\u4BC9\u4BCA\u4BCB\u4BCC"+
+            "\u4BCD\u4BCE\u4BCF\u4BD0\u4BD1\u4BD2\u4BD3\u4BD4"+
+            "\u4BD5\u4BD6\u4BD7\u4BD8\u4BD9\u4BDA\u4BDB\u4BDC"+
+            "\u4BDD\u4BDE\u4BDF\u4BE0\u4BE1\u4BE2\u4BE3\u4BE4"+
+            "\u4BE5\u4BE6\u4BE7\u4BE8\u4BE9\u4BEA\u4BEB\u4BEC"+
+            "\u4BED\u4BEE\u4BEF\u4BF0\u4BF1\u4BF2\u4BF3\u4BF4"+
+            "\u4BF5\u4BF6\u4BF7\u4BF8\u4BF9\u4BFA\u4BFB\u4BFC"+
+            "\u4BFD\u4BFE\u4BFF\u4C00\u4C01\u4C02\u4C03\u4C04"+
+            "\u4C05\u4C06\u4C07\u4C08\u4C09\u4C0A\u4C0B\u4C0C"+
+            "\u4C0D\u4C0E\u4C0F\u4C10\u4C11\u4C12\u4C13\u4C14"+
+            "\u4C15\u4C16\u4C17\u4C18\u4C19\u4C1A\u4C1B\u4C1C"+
+            "\u4C1D\u4C1E\u4C1F\u4C20\u4C21\u4C22\u4C23\u4C24"+
+            "\u4C25\u4C26\u4C27\u4C28\u4C29\u4C2A\u4C2B\u4C2C"+
+            "\u4C2D\u4C2E\u4C2F\u4C30\u4C31\u4C32\u4C33\u4C34"+
+            "\u4C35\u4C36\u4C37\u4C38\u4C39\u4C3A\u4C3B\u4C3C"+
+            "\u4C3D\u4C3E\u4C3F\u4C40\u4C41\u4C42\u4C43\u4C44"+
+            "\u4C45\u4C46\u4C47\u4C48\u4C49\u4C4A\u4C4B\u4C4C"+
+            "\u4C4D\u4C4E\u4C4F\u4C50\u4C51\u4C52\u4C53\u4C54"+
+            "\u4C55\u4C56\u4C57\u4C58\u4C59\u4C5A\u4C5B\u4C5C"+
+            "\u4C5D\u4C5E\u4C5F\u4C60\u4C61\u4C62\u4C63\u4C64"+
+            "\u4C65\u4C66\u4C67\u4C68\u4C69\u4C6A\u4C6B\u4C6C"+
+            "\u4C6D\u4C6E\u4C6F\u4C70\u4C71\u4C72\u4C73\u4C74"+
+            "\u4C75\u4C76\u4C77\u4C78\u4C79\u4C7A\u4C7B\u4C7C"+
+            "\u4C7D\u4C7E\u4C7F\u4C80\u4C81\u4C82\u4C83\u4C84"+
+            "\u4C85\u4C86\u4C87\u4C88\u4C89\u4C8A\u4C8B\u4C8C"+
+            "\u4C8D\u4C8E\u4C8F\u4C90\u4C91\u4C92\u4C93\u4C94"+
+            "\u4C95\u4C96\u4C97\u4C98\u4C99\u4C9A\u4C9B\u4C9C"+
+            "\u4C9D\u4C9E\u4C9F\u4CA0\u4CA1\u4CA2\u4CA3\u4CA4"+
+            "\u4CA5\u4CA6\u4CA7\u4CA8\u4CA9\u4CAA\u4CAB\u4CAC"+
+            "\u4CAD\u4CAE\u4CAF\u4CB0\u4CB1\u4CB2\u4CB3\u4CB4"+
+            "\u4CB5\u4CB6\u4CB7\u4CB8\u4CB9\u4CBA\u4CBB\u4CBC"+
+            "\u4CBD\u4CBE\u4CBF\u4CC0\u4CC1\u4CC2\u4CC3\u4CC4"+
+            "\u4CC5\u4CC6\u4CC7\u4CC8\u4CC9\u4CCA\u4CCB\u4CCC"+
+            "\u4CCD\u4CCE\u4CCF\u4CD0\u4CD1\u4CD2\u4CD3\u4CD4"+
+            "\u4CD5\u4CD6\u4CD7\u4CD8\u4CD9\u4CDA\u4CDB\u4CDC"+
+            "\u4CDD\u4CDE\u4CDF\u4CE0\u4CE1\u4CE2\u4CE3\u4CE4"+
+            "\u4CE5\u4CE6\u4CE7\u4CE8\u4CE9\u4CEA\u4CEB\u4CEC"+
+            "\u4CED\u4CEE\u4CEF\u4CF0\u4CF1\u4CF2\u4CF3\u4CF4"+
+            "\u4CF5\u4CF6\u4CF7\u4CF8\u4CF9\u4CFA\u4CFB\u4CFC"+
+            "\u4CFD\u4CFE\u4CFF\u4D00\u4D01\u4D02\u4D03\u4D04"+
+            "\u4D05\u4D06\u4D07\u4D08\u4D09\u4D0A\u4D0B\u4D0C"+
+            "\u4D0D\u4D0E\u4D0F\u4D10\u4D11\u4D12\u4D13\u4D14"+
+            "\u4D15\u4D16\u4D17\u4D18\u4D19\u4D1A\u4D1B\u4D1C"+
+            "\u4D1D\u4D1E\u4D1F\u4D20\u4D21\u4D22\u4D23\u4D24"+
+            "\u4D25\u4D26\u4D27\u4D28\u4D29\u4D2A\u4D2B\u4D2C"+
+            "\u4D2D\u4D2E\u4D2F\u4D30\u4D31\u4D32\u4D33\u4D34"+
+            "\u4D35\u4D36\u4D37\u4D38\u4D39\u4D3A\u4D3B\u4D3C"+
+            "\u4D3D\u4D3E\u4D3F\u4D40\u4D41\u4D42\u4D43\u4D44"+
+            "\u4D45\u4D46\u4D47\u4D48\u4D49\u4D4A\u4D4B\u4D4C"+
+            "\u4D4D\u4D4E\u4D4F\u4D50\u4D51\u4D52\u4D53\u4D54"+
+            "\u4D55\u4D56\u4D57\u4D58\u4D59\u4D5A\u4D5B\u4D5C"+
+            "\u4D5D\u4D5E\u4D5F\u4D60\u4D61\u4D62\u4D63\u4D64"+
+            "\u4D65\u4D66\u4D67\u4D68\u4D69\u4D6A\u4D6B\u4D6C"+
+            "\u4D6D\u4D6E\u4D6F\u4D70\u4D71\u4D72\u4D73\u4D74"+
+            "\u4D75\u4D76\u4D77\u4D78\u4D79\u4D7A\u4D7B\u4D7C"+
+            "\u4D7D\u4D7E\u4D7F\u4D80\u4D81\u4D82\u4D83\u4D84"+
+            "\u4D85\u4D86\u4D87\u4D88\u4D89\u4D8A\u4D8B\u4D8C"+
+            "\u4D8D\u4D8E\u4D8F\u4D90\u4D91\u4D92\u4D93\u4D94"+
+            "\u4D95\u4D96\u4D97\u4D98\u4D99\u4D9A\u4D9B\u4D9C"+
+            "\u4D9D\u4D9E\u4D9F\u4DA0\u4DA1\u4DA2\u4DA3\u4DA4"+
+            "\u4DA5\u4DA6\u4DA7\u4DA8\u4DA9\u4DAA\u4DAB\u4DAC"+
+            "\u4DAD\u4DAE\u4DAF\u4DB0\u4DB1\u4DB2\u4DB3\u4DB4"+
+            "\u4DB5\u4DB6\u4DB7\u4DB8\u4DB9\u4DBA\u4DBB\u4DBC"+
+            "\u4DBD\u4DBE\u4DBF\u4DC0\u4DC1\u4DC2\u4DC3\u4DC4"+
+            "\u4DC5\u4DC6\u4DC7\u4DC8\u4DC9\u4DCA\u4DCB\u4DCC"+
+            "\u4DCD\u4DCE\u4DCF\u4DD0\u4DD1\u4DD2\u4DD3\u4DD4"+
+            "\u4DD5\u4DD6\u4DD7\u4DD8\u4DD9\u4DDA\u4DDB\u4DDC"+
+            "\u4DDD\u4DDE\u4DDF\u4DE0\u4DE1\u4DE2\u4DE3\u4DE4"+
+            "\u4DE5\u4DE6\u4DE7\u4DE8\u4DE9\u4DEA\u4DEB\u4DEC"+
+            "\u4DED\u4DEE\u4DEF\u4DF0\u4DF1\u4DF2\u4DF3\u4DF4"+
+            "\u4DF5\u4DF6\u4DF7\u4DF8\u4DF9\u4DFA\u4DFB\u4DFC"+
+            "\u4DFD\u4DFE\u4DFF\u4E00\u4E01\u4E02\u4E03\u4E04"+
+            "\u4E05\u4E06\u4E07\u4E08\u4E09\u4E0A\u4E0B\u4E0C"+
+            "\u4E0D\u4E0E\u4E0F\u4E10\u4E11\u4E12\u4E13\u4E14"+
+            "\u4E15\u4E16\u4E17\u4E18\u4E19\u4E1A\u4E1B\u4E1C"+
+            "\u4E1D\u4E1E\u4E1F\u4E20\u4E21\u4E22\u4E23\u4E24"+
+            "\u4E25\u4E26\u4E27\u4E28\u4E29\u4E2A\u4E2B\u4E2C"+
+            "\u4E2D\u4E2E\u4E2F\u4E30\u4E31\u4E32\u4E33\u4E34"+
+            "\u4E35\u4E36\u4E37\u4E38\u4E39\u4E3A\u4E3B\u4E3C"+
+            "\u4E3D\u4E3E\u4E3F\u4E40\u4E41\u4E42\u4E43\u4E44"+
+            "\u4E45\u4E46\u4E47\u4E48\u4E49\u4E4A\u4E4B\u4E4C"+
+            "\u4E4D\u4E4E\u4E4F\u4E50\u4E51\u4E52\u4E53\u4E54"+
+            "\u4E55\u4E56\u4E57\u4E58\u4E59\u4E5A\u4E5B\u4E5C"+
+            "\u4E5D\u4E5E\u4E5F\u4E60\u4E61\u4E62\u4E63\u4E64"+
+            "\u4E65\u4E66\u4E67\u4E68\u4E69\u4E6A\u4E6B\u4E6C"+
+            "\u4E6D\u4E6E\u4E6F\u4E70\u4E71\u4E72\u4E73\u4E74"+
+            "\u4E75\u4E76\u4E77\u4E78\u4E79\u4E7A\u4E7B\u4E7C"+
+            "\u4E7D\u4E7E\u4E7F\u4E80\u4E81\u4E82\u4E83\u4E84"+
+            "\u4E85\u4E86\u4E87\u4E88\u4E89\u4E8A\u4E8B\u4E8C"+
+            "\u4E8D\u4E8E\u4E8F\u4E90\u4E91\u4E92\u4E93\u4E94"+
+            "\u4E95\u4E96\u4E97\u4E98\u4E99\u4E9A\u4E9B\u4E9C"+
+            "\u4E9D\u4E9E\u4E9F\u4EA0\u4EA1\u4EA2\u4EA3\u4EA4"+
+            "\u4EA5\u4EA6\u4EA7\u4EA8\u4EA9\u4EAA\u4EAB\u4EAC"+
+            "\u4EAD\u4EAE\u4EAF\u4EB0\u4EB1\u4EB2\u4EB3\u4EB4"+
+            "\u4EB5\u4EB6\u4EB7\u4EB8\u4EB9\u4EBA\u4EBB\u4EBC"+
+            "\u4EBD\u4EBE\u4EBF\u4EC0\u4EC1\u4EC2\u4EC3\u4EC4"+
+            "\u4EC5\u4EC6\u4EC7\u4EC8\u4EC9\u4ECA\u4ECB\u4ECC"+
+            "\u4ECD\u4ECE\u4ECF\u4ED0\u4ED1\u4ED2\u4ED3\u4ED4"+
+            "\u4ED5\u4ED6\u4ED7\u4ED8\u4ED9\u4EDA\u4EDB\u4EDC"+
+            "\u4EDD\u4EDE\u4EDF\u4EE0\u4EE1\u4EE2\u4EE3\u4EE4"+
+            "\u4EE5\u4EE6\u4EE7\u4EE8\u4EE9\u4EEA\u4EEB\u4EEC"+
+            "\u4EED\u4EEE\u4EEF\u4EF0\u4EF1\u4EF2\u4EF3\u4EF4"+
+            "\u4EF5\u4EF6\u4EF7\u4EF8\u4EF9\u4EFA\u4EFB\u4EFC"+
+            "\u4EFD\u4EFE\u4EFF\u4F00\u4F01\u4F02\u4F03\u4F04"+
+            "\u4F05\u4F06\u4F07\u4F08\u4F09\u4F0A\u4F0B\u4F0C"+
+            "\u4F0D\u4F0E\u4F0F\u4F10\u4F11\u4F12\u4F13\u4F14"+
+            "\u4F15\u4F16\u4F17\u4F18\u4F19\u4F1A\u4F1B\u4F1C"+
+            "\u4F1D\u4F1E\u4F1F\u4F20\u4F21\u4F22\u4F23\u4F24"+
+            "\u4F25\u4F26\u4F27\u4F28\u4F29\u4F2A\u4F2B\u4F2C"+
+            "\u4F2D\u4F2E\u4F2F\u4F30\u4F31\u4F32\u4F33\u4F34"+
+            "\u4F35\u4F36\u4F37\u4F38\u4F39\u4F3A\u4F3B\u4F3C"+
+            "\u4F3D\u4F3E\u4F3F\u4F40\u4F41\u4F42\u4F43\u4F44"+
+            "\u4F45\u4F46\u4F47\u4F48\u4F49\u4F4A\u4F4B\u4F4C"+
+            "\u4F4D\u4F4E\u4F4F\u4F50\u4F51\u4F52\u4F53\u4F54"+
+            "\u4F55\u4F56\u4F57\u4F58\u4F59\u4F5A\u4F5B\u4F5C"+
+            "\u4F5D\u4F5E\u4F5F\u4F60\u4F61\u4F62\u4F63\u4F64"+
+            "\u4F65\u4F66\u4F67\u4F68\u4F69\u4F6A\u4F6B\u4F6C"+
+            "\u4F6D\u4F6E\u4F6F\u4F70\u4F71\u4F72\u4F73\u4F74"+
+            "\u4F75\u4F76\u4F77\u4F78\u4F79\u4F7A\u4F7B\u4F7C"+
+            "\u4F7D\u4F7E\u4F7F\u4F80\u4F81\u4F82\u4F83\u4F84"+
+            "\u4F85\u4F86\u4F87\u4F88\u4F89\u4F8A\u4F8B\u4F8C"+
+            "\u4F8D\u4F8E\u4F8F\u4F90\u4F91\u4F92\u4F93\u4F94"+
+            "\u4F95\u4F96\u4F97\u4F98\u4F99\u4F9A\u4F9B\u4F9C"+
+            "\u4F9D\u4F9E\u4F9F\u4FA0\u4FA1\u4FA2\u4FA3\u4FA4"+
+            "\u4FA5\u4FA6\u4FA7\u4FA8\u4FA9\u4FAA\u4FAB\u4FAC"+
+            "\u4FAD\u4FAE\u4FAF\u4FB0\u4FB1\u4FB2\u4FB3\u4FB4"+
+            "\u4FB5\u4FB6\u4FB7\u4FB8\u4FB9\u4FBA\u4FBB\u4FBC"+
+            "\u4FBD\u4FBE\u4FBF\u4FC0\u4FC1\u4FC2\u4FC3\u4FC4"+
+            "\u4FC5\u4FC6\u4FC7\u4FC8\u4FC9\u4FCA\u4FCB\u4FCC"+
+            "\u4FCD\u4FCE\u4FCF\u4FD0\u4FD1\u4FD2\u4FD3\u4FD4"+
+            "\u4FD5\u4FD6\u4FD7\u4FD8\u4FD9\u4FDA\u4FDB\u4FDC"+
+            "\u4FDD\u4FDE\u4FDF\u4FE0\u4FE1\u4FE2\u4FE3\u4FE4"+
+            "\u4FE5\u4FE6\u4FE7\u4FE8\u4FE9\u4FEA\u4FEB\u4FEC"+
+            "\u4FED\u4FEE\u4FEF\u4FF0\u4FF1\u4FF2\u4FF3\u4FF4"+
+            "\u4FF5\u4FF6\u4FF7\u4FF8\u4FF9\u4FFA\u4FFB\u4FFC"+
+            "\u4FFD\u4FFE\u4FFF\u5000\u5001\u5002\u5003\u5004"+
+            "\u5005\u5006\u5007\u5008\u5009\u500A\u500B\u500C"+
+            "\u500D\u500E\u500F\u5010\u5011\u5012\u5013\u5014"+
+            "\u5015\u5016\u5017\u5018\u5019\u501A\u501B\u501C"+
+            "\u501D\u501E\u501F\u5020\u5021\u5022\u5023\u5024"+
+            "\u5025\u5026\u5027\u5028\u5029\u502A\u502B\u502C"+
+            "\u502D\u502E\u502F\u5030\u5031\u5032\u5033\u5034"+
+            "\u5035\u5036\u5037\u5038\u5039\u503A\u503B\u503C"+
+            "\u503D\u503E\u503F\u5040\u5041\u5042\u5043\u5044"+
+            "\u5045\u5046\u5047\u5048\u5049\u504A\u504B\u504C"+
+            "\u504D\u504E\u504F\u5050\u5051\u5052\u5053\u5054"+
+            "\u5055\u5056\u5057\u5058\u5059\u505A\u505B\u505C"+
+            "\u505D\u505E\u505F\u5060\u5061\u5062\u5063\u5064"+
+            "\u5065\u5066\u5067\u5068\u5069\u506A\u506B\u506C"+
+            "\u506D\u506E\u506F\u5070\u5071\u5072\u5073\u5074"+
+            "\u5075\u5076\u5077\u5078\u5079\u507A\u507B\u507C"+
+            "\u507D\u507E\u507F\u5080\u5081\u5082\u5083\u5084"+
+            "\u5085\u5086\u5087\u5088\u5089\u508A\u508B\u508C"+
+            "\u508D\u508E\u508F\u5090\u5091\u5092\u5093\u5094"+
+            "\u5095\u5096\u5097\u5098\u5099\u509A\u509B\u509C"+
+            "\u509D\u509E\u509F\u50A0\u50A1\u50A2\u50A3\u50A4"+
+            "\u50A5\u50A6\u50A7\u50A8\u50A9\u50AA\u50AB\u50AC"+
+            "\u50AD\u50AE\u50AF\u50B0\u50B1\u50B2\u50B3\u50B4"+
+            "\u50B5\u50B6\u50B7\u50B8\u50B9\u50BA\u50BB\u50BC"+
+            "\u50BD\u50BE\u50BF\u50C0\u50C1\u50C2\u50C3\u50C4"+
+            "\u50C5\u50C6\u50C7\u50C8\u50C9\u50CA\u50CB\u50CC"+
+            "\u50CD\u50CE\u50CF\u50D0\u50D1\u50D2\u50D3\u50D4"+
+            "\u50D5\u50D6\u50D7\u50D8\u50D9\u50DA\u50DB\u50DC"+
+            "\u50DD\u50DE\u50DF\u50E0\u50E1\u50E2\u50E3\u50E4"+
+            "\u50E5\u50E6\u50E7\u50E8\u50E9\u50EA\u50EB\u50EC"+
+            "\u50ED\u50EE\u50EF\u50F0\u50F1\u50F2\u50F3\u50F4"+
+            "\u50F5\u50F6\u50F7\u50F8\u50F9\u50FA\u50FB\u50FC"+
+            "\u50FD\u50FE\u50FF\u5100\u5101\u5102\u5103\u5104"+
+            "\u5105\u5106\u5107\u5108\u5109\u510A\u510B\u510C"+
+            "\u510D\u510E\u510F\u5110\u5111\u5112\u5113\u5114"+
+            "\u5115\u5116\u5117\u5118\u5119\u511A\u511B\u511C"+
+            "\u511D\u511E\u511F\u5120\u5121\u5122\u5123\u5124"+
+            "\u5125\u5126\u5127\u5128\u5129\u512A\u512B\u512C"+
+            "\u512D\u512E\u512F\u5130\u5131\u5132\u5133\u5134"+
+            "\u5135\u5136\u5137\u5138\u5139\u513A\u513B\u513C"+
+            "\u513D\u513E\u513F\u5140\u5141\u5142\u5143\u5144"+
+            "\u5145\u5146\u5147\u5148\u5149\u514A\u514B\u514C"+
+            "\u514D\u514E\u514F\u5150\u5151\u5152\u5153\u5154"+
+            "\u5155\u5156\u5157\u5158\u5159\u515A\u515B\u515C"+
+            "\u515D\u515E\u515F\u5160\u5161\u5162\u5163\u5164"+
+            "\u5165\u5166\u5167\u5168\u5169\u516A\u516B\u516C"+
+            "\u516D\u516E\u516F\u5170\u5171\u5172\u5173\u5174"+
+            "\u5175\u5176\u5177\u5178\u5179\u517A\u517B\u517C"+
+            "\u517D\u517E\u517F\u5180\u5181\u5182\u5183\u5184"+
+            "\u5185\u5186\u5187\u5188\u5189\u518A\u518B\u518C"+
+            "\u518D\u518E\u518F\u5190\u5191\u5192\u5193\u5194"+
+            "\u5195\u5196\u5197\u5198\u5199\u519A\u519B\u519C"+
+            "\u519D\u519E\u519F\u51A0\u51A1\u51A2\u51A3\u51A4"+
+            "\u51A5\u51A6\u51A7\u51A8\u51A9\u51AA\u51AB\u51AC"+
+            "\u51AD\u51AE\u51AF\u51B0\u51B1\u51B2\u51B3\u51B4"+
+            "\u51B5\u51B6\u51B7\u51B8\u51B9\u51BA\u51BB\u51BC"+
+            "\u51BD\u51BE\u51BF\u51C0\u51C1\u51C2\u51C3\u51C4"+
+            "\u51C5\u51C6\u51C7\u51C8\u51C9\u51CA\u51CB\u51CC"+
+            "\u51CD\u51CE\u51CF\u51D0\u51D1\u51D2\u51D3\u51D4"+
+            "\u51D5\u51D6\u51D7\u51D8\u51D9\u51DA\u51DB\u51DC"+
+            "\u51DD\u51DE\u51DF\u51E0\u51E1\u51E2\u51E3\u51E4"+
+            "\u51E5\u51E6\u51E7\u51E8\u51E9\u51EA\u51EB\u51EC"+
+            "\u51ED\u51EE\u51EF\u51F0\u51F1\u51F2\u51F3\u51F4"+
+            "\u51F5\u51F6\u51F7\u51F8\u51F9\u51FA\u51FB\u51FC"+
+            "\u51FD\u51FE\u51FF\u5200\u5201\u5202\u5203\u5204"+
+            "\u5205\u5206\u5207\u5208\u5209\u520A\u520B\u520C"+
+            "\u520D\u520E\u520F\u5210\u5211\u5212\u5213\u5214"+
+            "\u5215\u5216\u5217\u5218\u5219\u521A\u521B\u521C"+
+            "\u521D\u521E\u521F\u5220\u5221\u5222\u5223\u5224"+
+            "\u5225\u5226\u5227\u5228\u5229\u522A\u522B\u522C"+
+            "\u522D\u522E\u522F\u5230\u5231\u5232\u5233\u5234"+
+            "\u5235\u5236\u5237\u5238\u5239\u523A\u523B\u523C"+
+            "\u523D\u523E\u523F\u5240\u5241\u5242\u5243\u5244"+
+            "\u5245\u5246\u5247\u5248\u5249\u524A\u524B\u524C"+
+            "\u524D\u524E\u524F\u5250\u5251\u5252\u5253\u5254"+
+            "\u5255\u5256\u5257\u5258\u5259\u525A\u525B\u525C"+
+            "\u525D\u525E\u525F\u5260\u5261\u5262\u5263\u5264"+
+            "\u5265\u5266\u5267\u5268\u5269\u526A\u526B\u526C"+
+            "\u526D\u526E\u526F\u5270\u5271\u5272\u5273\u5274"+
+            "\u5275\u5276\u5277\u5278\u5279\u527A\u527B\u527C"+
+            "\u527D\u527E\u527F\u5280\u5281\u5282\u5283\u5284"+
+            "\u5285\u5286\u5287\u5288\u5289\u528A\u528B\u528C"+
+            "\u528D\u528E\u528F\u5290\u5291\u5292\u5293\u5294"+
+            "\u5295\u5296\u5297\u5298\u5299\u529A\u529B\u529C"+
+            "\u529D\u529E\u529F\u52A0\u52A1\u52A2\u52A3\u52A4"+
+            "\u52A5\u52A6\u52A7\u52A8\u52A9\u52AA\u52AB\u52AC"+
+            "\u52AD\u52AE\u52AF\u52B0\u52B1\u52B2\u52B3\u52B4"+
+            "\u52B5\u52B6\u52B7\u52B8\u52B9\u52BA\u52BB\u52BC"+
+            "\u52BD\u52BE\u52BF\u52C0\u52C1\u52C2\u52C3\u52C4"+
+            "\u52C5\u52C6\u52C7\u52C8\u52C9\u52CA\u52CB\u52CC"+
+            "\u52CD\u52CE\u52CF\u52D0\u52D1\u52D2\u52D3\u52D4"+
+            "\u52D5\u52D6\u52D7\u52D8\u52D9\u52DA\u52DB\u52DC"+
+            "\u52DD\u52DE\u52DF\u52E0\u52E1\u52E2\u52E3\u52E4"+
+            "\u52E5\u52E6\u52E7\u52E8\u52E9\u52EA\u52EB\u52EC"+
+            "\u52ED\u52EE\u52EF\u52F0\u52F1\u52F2\u52F3\u52F4"+
+            "\u52F5\u52F6\u52F7\u52F8\u52F9\u52FA\u52FB\u52FC"+
+            "\u52FD\u52FE\u52FF\u5300\u5301\u5302\u5303\u5304"+
+            "\u5305\u5306\u5307\u5308\u5309\u530A\u530B\u530C"+
+            "\u530D\u530E\u530F\u5310\u5311\u5312\u5313\u5314"+
+            "\u5315\u5316\u5317\u5318\u5319\u531A\u531B\u531C"+
+            "\u531D\u531E\u531F\u5320\u5321\u5322\u5323\u5324"+
+            "\u5325\u5326\u5327\u5328\u5329\u532A\u532B\u532C"+
+            "\u532D\u532E\u532F\u5330\u5331\u5332\u5333\u5334"+
+            "\u5335\u5336\u5337\u5338\u5339\u533A\u533B\u533C"+
+            "\u533D\u533E\u533F\u5340\u5341\u5342\u5343\u5344"+
+            "\u5345\u5346\u5347\u5348\u5349\u534A\u534B\u534C"+
+            "\u534D\u534E\u534F\u5350\u5351\u5352\u5353\u5354"+
+            "\u5355\u5356\u5357\u5358\u5359\u535A\u535B\u535C"+
+            "\u535D\u535E\u535F\u5360\u5361\u5362\u5363\u5364"+
+            "\u5365\u5366\u5367\u5368\u5369\u536A\u536B\u536C"+
+            "\u536D\u536E\u536F\u5370\u5371\u5372\u5373\u5374"+
+            "\u5375\u5376\u5377\u5378\u5379\u537A\u537B\u537C"+
+            "\u537D\u537E\u537F\u5380\u5381\u5382\u5383\u5384"+
+            "\u5385\u5386\u5387\u5388\u5389\u538A\u538B\u538C"+
+            "\u538D\u538E\u538F\u5390\u5391\u5392\u5393\u5394"+
+            "\u5395\u5396\u5397\u5398\u5399\u539A\u539B\u539C"+
+            "\u539D\u539E\u539F\u53A0\u53A1\u53A2\u53A3\u53A4"+
+            "\u53A5\u53A6\u53A7\u53A8\u53A9\u53AA\u53AB\u53AC"+
+            "\u53AD\u53AE\u53AF\u53B0\u53B1\u53B2\u53B3\u53B4"+
+            "\u53B5\u53B6\u53B7\u53B8\u53B9\u53BA\u53BB\u53BC"+
+            "\u53BD\u53BE\u53BF\u53C0\u53C1\u53C2\u53C3\u53C4"+
+            "\u53C5\u53C6\u53C7\u53C8\u53C9\u53CA\u53CB\u53CC"+
+            "\u53CD\u53CE\u53CF\u53D0\u53D1\u53D2\u53D3\u53D4"+
+            "\u53D5\u53D6\u53D7\u53D8\u53D9\u53DA\u53DB\u53DC"+
+            "\u53DD\u53DE\u53DF\u53E0\u53E1\u53E2\u53E3\u53E4"+
+            "\u53E5\u53E6\u53E7\u53E8\u53E9\u53EA\u53EB\u53EC"+
+            "\u53ED\u53EE\u53EF\u53F0\u53F1\u53F2\u53F3\u53F4"+
+            "\u53F5\u53F6\u53F7\u53F8\u53F9\u53FA\u53FB\u53FC"+
+            "\u53FD\u53FE\u53FF\u5400\u5401\u5402\u5403\u5404"+
+            "\u5405\u5406\u5407\u5408\u5409\u540A\u540B\u540C"+
+            "\u540D\u540E\u540F\u5410\u5411\u5412\u5413\u5414"+
+            "\u5415\u5416\u5417\u5418\u5419\u541A\u541B\u541C"+
+            "\u541D\u541E\u541F\u5420\u5421\u5422\u5423\u5424"+
+            "\u5425\u5426\u5427\u5428\u5429\u542A\u542B\u542C"+
+            "\u542D\u542E\u542F\u5430\u5431\u5432\u5433\u5434"+
+            "\u5435\u5436\u5437\u5438\u5439\u543A\u543B\u543C"+
+            "\u543D\u543E\u543F\u5440\u5441\u5442\u5443\u5444"+
+            "\u5445\u5446\u5447\u5448\u5449\u544A\u544B\u544C"+
+            "\u544D\u544E\u544F\u5450\u5451\u5452\u5453\u5454"+
+            "\u5455\u5456\u5457\u5458\u5459\u545A\u545B\u545C"+
+            "\u545D\u545E\u545F\u5460\u5461\u5462\u5463\u5464"+
+            "\u5465\u5466\u5467\u5468\u5469\u546A\u546B\u546C"+
+            "\u546D\u546E\u546F\u5470\u5471\u5472\u5473\u5474"+
+            "\u5475\u5476\u5477\u5478\u5479\u547A\u547B\u547C"+
+            "\u547D\u547E\u547F\u5480\u5481\u5482\u5483\u5484"+
+            "\u5485\u5486\u5487\u5488\u5489\u548A\u548B\u548C"+
+            "\u548D\u548E\u548F\u5490\u5491\u5492\u5493\u5494"+
+            "\u5495\u5496\u5497\u5498\u5499\u549A\u549B\u549C"+
+            "\u549D\u549E\u549F\u54A0\u54A1\u54A2\u54A3\u54A4"+
+            "\u54A5\u54A6\u54A7\u54A8\u54A9\u54AA\u54AB\u54AC"+
+            "\u54AD\u54AE\u54AF\u54B0\u54B1\u54B2\u54B3\u54B4"+
+            "\u54B5\u54B6\u54B7\u54B8\u54B9\u54BA\u54BB\u54BC"+
+            "\u54BD\u54BE\u54BF\u54C0\u54C1\u54C2\u54C3\u54C4"+
+            "\u54C5\u54C6\u54C7\u54C8\u54C9\u54CA\u54CB\u54CC"+
+            "\u54CD\u54CE\u54CF\u54D0\u54D1\u54D2\u54D3\u54D4"+
+            "\u54D5\u54D6\u54D7\u54D8\u54D9\u54DA\u54DB\u54DC"+
+            "\u54DD\u54DE\u54DF\u54E0\u54E1\u54E2\u54E3\u54E4"+
+            "\u54E5\u54E6\u54E7\u54E8\u54E9\u54EA\u54EB\u54EC"+
+            "\u54ED\u54EE\u54EF\u54F0\u54F1\u54F2\u54F3\u54F4"+
+            "\u54F5\u54F6\u54F7\u54F8\u54F9\u54FA\u54FB\u54FC"+
+            "\u54FD\u54FE\u54FF\u5500\u5501\u5502\u5503\u5504"+
+            "\u5505\u5506\u5507\u5508\u5509\u550A\u550B\u550C"+
+            "\u550D\u550E\u550F\u5510\u5511\u5512\u5513\u5514"+
+            "\u5515\u5516\u5517\u5518\u5519\u551A\u551B\u551C"+
+            "\u551D\u551E\u551F\u5520\u5521\u5522\u5523\u5524"+
+            "\u5525\u5526\u5527\u5528\u5529\u552A\u552B\u552C"+
+            "\u552D\u552E\u552F\u5530\u5531\u5532\u5533\u5534"+
+            "\u5535\u5536\u5537\u5538\u5539\u553A\u553B\u553C"+
+            "\u553D\u553E\u553F\u5540\u5541\u5542\u5543\u5544"+
+            "\u5545\u5546\u5547\u5548\u5549\u554A\u554B\u554C"+
+            "\u554D\u554E\u554F\u5550\u5551\u5552\u5553\u5554"+
+            "\u5555\u5556\u5557\u5558\u5559\u555A\u555B\u555C"+
+            "\u555D\u555E\u555F\u5560\u5561\u5562\u5563\u5564"+
+            "\u5565\u5566\u5567\u5568\u5569\u556A\u556B\u556C"+
+            "\u556D\u556E\u556F\u5570\u5571\u5572\u5573\u5574"+
+            "\u5575\u5576\u5577\u5578\u5579\u557A\u557B\u557C"+
+            "\u557D\u557E\u557F\u5580\u5581\u5582\u5583\u5584"+
+            "\u5585\u5586\u5587\u5588\u5589\u558A\u558B\u558C"+
+            "\u558D\u558E\u558F\u5590\u5591\u5592\u5593\u5594"+
+            "\u5595\u5596\u5597\u5598\u5599\u559A\u559B\u559C"+
+            "\u559D\u559E\u559F\u55A0\u55A1\u55A2\u55A3\u55A4"+
+            "\u55A5\u55A6\u55A7\u55A8\u55A9\u55AA\u55AB\u55AC"+
+            "\u55AD\u55AE\u55AF\u55B0\u55B1\u55B2\u55B3\u55B4"+
+            "\u55B5\u55B6\u55B7\u55B8\u55B9\u55BA\u55BB\u55BC"+
+            "\u55BD\u55BE\u55BF\u55C0\u55C1\u55C2\u55C3\u55C4"+
+            "\u55C5\u55C6\u55C7\u55C8\u55C9\u55CA\u55CB\u55CC"+
+            "\u55CD\u55CE\u55CF\u55D0\u55D1\u55D2\u55D3\u55D4"+
+            "\u55D5\u55D6\u55D7\u55D8\u55D9\u55DA\u55DB\u55DC"+
+            "\u55DD\u55DE\u55DF\u55E0\u55E1\u55E2\u55E3\u55E4"+
+            "\u55E5\u55E6\u55E7\u55E8\u55E9\u55EA\u55EB\u55EC"+
+            "\u55ED\u55EE\u55EF\u55F0\u55F1\u55F2\u55F3\u55F4"+
+            "\u55F5\u55F6\u55F7\u55F8\u55F9\u55FA\u55FB\u55FC"+
+            "\u55FD\u55FE\u55FF\u5600\u5601\u5602\u5603\u5604"+
+            "\u5605\u5606\u5607\u5608\u5609\u560A\u560B\u560C"+
+            "\u560D\u560E\u560F\u5610\u5611\u5612\u5613\u5614"+
+            "\u5615\u5616\u5617\u5618\u5619\u561A\u561B\u561C"+
+            "\u561D\u561E\u561F\u5620\u5621\u5622\u5623\u5624"+
+            "\u5625\u5626\u5627\u5628\u5629\u562A\u562B\u562C"+
+            "\u562D\u562E\u562F\u5630\u5631\u5632\u5633\u5634"+
+            "\u5635\u5636\u5637\u5638\u5639\u563A\u563B\u563C"+
+            "\u563D\u563E\u563F\u5640\u5641\u5642\u5643\u5644"+
+            "\u5645\u5646\u5647\u5648\u5649\u564A\u564B\u564C"+
+            "\u564D\u564E\u564F\u5650\u5651\u5652\u5653\u5654"+
+            "\u5655\u5656\u5657\u5658\u5659\u565A\u565B\u565C"+
+            "\u565D\u565E\u565F\u5660\u5661\u5662\u5663\u5664"+
+            "\u5665\u5666\u5667\u5668\u5669\u566A\u566B\u566C"+
+            "\u566D\u566E\u566F\u5670\u5671\u5672\u5673\u5674"+
+            "\u5675\u5676\u5677\u5678\u5679\u567A\u567B\u567C"+
+            "\u567D\u567E\u567F\u5680\u5681\u5682\u5683\u5684"+
+            "\u5685\u5686\u5687\u5688\u5689\u568A\u568B\u568C"+
+            "\u568D\u568E\u568F\u5690\u5691\u5692\u5693\u5694"+
+            "\u5695\u5696\u5697\u5698\u5699\u569A\u569B\u569C"+
+            "\u569D\u569E\u569F\u56A0\u56A1\u56A2\u56A3\u56A4"+
+            "\u56A5\u56A6\u56A7\u56A8\u56A9\u56AA\u56AB\u56AC"+
+            "\u56AD\u56AE\u56AF\u56B0\u56B1\u56B2\u56B3\u56B4"+
+            "\u56B5\u56B6\u56B7\u56B8\u56B9\u56BA\u56BB\u56BC"+
+            "\u56BD\u56BE\u56BF\u56C0\u56C1\u56C2\u56C3\u56C4"+
+            "\u56C5\u56C6\u56C7\u56C8\u56C9\u56CA\u56CB\u56CC"+
+            "\u56CD\u56CE\u56CF\u56D0\u56D1\u56D2\u56D3\u56D4"+
+            "\u56D5\u56D6\u56D7\u56D8\u56D9\u56DA\u56DB\u56DC"+
+            "\u56DD\u56DE\u56DF\u56E0\u56E1\u56E2\u56E3\u56E4"+
+            "\u56E5\u56E6\u56E7\u56E8\u56E9\u56EA\u56EB\u56EC"+
+            "\u56ED\u56EE\u56EF\u56F0\u56F1\u56F2\u56F3\u56F4"+
+            "\u56F5\u56F6\u56F7\u56F8\u56F9\u56FA\u56FB\u56FC"+
+            "\u56FD\u56FE\u56FF\u5700\u5701\u5702\u5703\u5704"+
+            "\u5705\u5706\u5707\u5708\u5709\u570A\u570B\u570C"+
+            "\u570D\u570E\u570F\u5710\u5711\u5712\u5713\u5714"+
+            "\u5715\u5716\u5717\u5718\u5719\u571A\u571B\u571C"+
+            "\u571D\u571E\u571F\u5720\u5721\u5722\u5723\u5724"+
+            "\u5725\u5726\u5727\u5728\u5729\u572A\u572B\u572C"+
+            "\u572D\u572E\u572F\u5730\u5731\u5732\u5733\u5734"+
+            "\u5735\u5736\u5737\u5738\u5739\u573A\u573B\u573C"+
+            "\u573D\u573E\u573F\u5740\u5741\u5742\u5743\u5744"+
+            "\u5745\u5746\u5747\u5748\u5749\u574A\u574B\u574C"+
+            "\u574D\u574E\u574F\u5750\u5751\u5752\u5753\u5754"+
+            "\u5755\u5756\u5757\u5758\u5759\u575A\u575B\u575C"+
+            "\u575D\u575E\u575F\u5760\u5761\u5762\u5763\u5764"+
+            "\u5765\u5766\u5767\u5768\u5769\u576A\u576B\u576C"+
+            "\u576D\u576E\u576F\u5770\u5771\u5772\u5773\u5774"+
+            "\u5775\u5776\u5777\u5778\u5779\u577A\u577B\u577C"+
+            "\u577D\u577E\u577F\u5780\u5781\u5782\u5783\u5784"+
+            "\u5785\u5786\u5787\u5788\u5789\u578A\u578B\u578C"+
+            "\u578D\u578E\u578F\u5790\u5791\u5792\u5793\u5794"+
+            "\u5795\u5796\u5797\u5798\u5799\u579A\u579B\u579C"+
+            "\u579D\u579E\u579F\u57A0\u57A1\u57A2\u57A3\u57A4"+
+            "\u57A5\u57A6\u57A7\u57A8\u57A9\u57AA\u57AB\u57AC"+
+            "\u57AD\u57AE\u57AF\u57B0\u57B1\u57B2\u57B3\u57B4"+
+            "\u57B5\u57B6\u57B7\u57B8\u57B9\u57BA\u57BB\u57BC"+
+            "\u57BD\u57BE\u57BF\u57C0\u57C1\u57C2\u57C3\u57C4"+
+            "\u57C5\u57C6\u57C7\u57C8\u57C9\u57CA\u57CB\u57CC"+
+            "\u57CD\u57CE\u57CF\u57D0\u57D1\u57D2\u57D3\u57D4"+
+            "\u57D5\u57D6\u57D7\u57D8\u57D9\u57DA\u57DB\u57DC"+
+            "\u57DD\u57DE\u57DF\u57E0\u57E1\u57E2\u57E3\u57E4"+
+            "\u57E5\u57E6\u57E7\u57E8\u57E9\u57EA\u57EB\u57EC"+
+            "\u57ED\u57EE\u57EF\u57F0\u57F1\u57F2\u57F3\u57F4"+
+            "\u57F5\u57F6\u57F7\u57F8\u57F9\u57FA\u57FB\u57FC"+
+            "\u57FD\u57FE\u57FF\u5800\u5801\u5802\u5803\u5804"+
+            "\u5805\u5806\u5807\u5808\u5809\u580A\u580B\u580C"+
+            "\u580D\u580E\u580F\u5810\u5811\u5812\u5813\u5814"+
+            "\u5815\u5816\u5817\u5818\u5819\u581A\u581B\u581C"+
+            "\u581D\u581E\u581F\u5820\u5821\u5822\u5823\u5824"+
+            "\u5825\u5826\u5827\u5828\u5829\u582A\u582B\u582C"+
+            "\u582D\u582E\u582F\u5830\u5831\u5832\u5833\u5834"+
+            "\u5835\u5836\u5837\u5838\u5839\u583A\u583B\u583C"+
+            "\u583D\u583E\u583F\u5840\u5841\u5842\u5843\u5844"+
+            "\u5845\u5846\u5847\u5848\u5849\u584A\u584B\u584C"+
+            "\u584D\u584E\u584F\u5850\u5851\u5852\u5853\u5854"+
+            "\u5855\u5856\u5857\u5858\u5859\u585A\u585B\u585C"+
+            "\u585D\u585E\u585F\u5860\u5861\u5862\u5863\u5864"+
+            "\u5865\u5866\u5867\u5868\u5869\u586A\u586B\u586C"+
+            "\u586D\u586E\u586F\u5870\u5871\u5872\u5873\u5874"+
+            "\u5875\u5876\u5877\u5878\u5879\u587A\u587B\u587C"+
+            "\u587D\u587E\u587F\u5880\u5881\u5882\u5883\u5884"+
+            "\u5885\u5886\u5887\u5888\u5889\u588A\u588B\u588C"+
+            "\u588D\u588E\u588F\u5890\u5891\u5892\u5893\u5894"+
+            "\u5895\u5896\u5897\u5898\u5899\u589A\u589B\u589C"+
+            "\u589D\u589E\u589F\u58A0\u58A1\u58A2\u58A3\u58A4"+
+            "\u58A5\u58A6\u58A7\u58A8\u58A9\u58AA\u58AB\u58AC"+
+            "\u58AD\u58AE\u58AF\u58B0\u58B1\u58B2\u58B3\u58B4"+
+            "\u58B5\u58B6\u58B7\u58B8\u58B9\u58BA\u58BB\u58BC"+
+            "\u58BD\u58BE\u58BF\u58C0\u58C1\u58C2\u58C3\u58C4"+
+            "\u58C5\u58C6\u58C7\u58C8\u58C9\u58CA\u58CB\u58CC"+
+            "\u58CD\u58CE\u58CF\u58D0\u58D1\u58D2\u58D3\u58D4"+
+            "\u58D5\u58D6\u58D7\u58D8\u58D9\u58DA\u58DB\u58DC"+
+            "\u58DD\u58DE\u58DF\u58E0\u58E1\u58E2\u58E3\u58E4"+
+            "\u58E5\u58E6\u58E7\u58E8\u58E9\u58EA\u58EB\u58EC"+
+            "\u58ED\u58EE\u58EF\u58F0\u58F1\u58F2\u58F3\u58F4"+
+            "\u58F5\u58F6\u58F7\u58F8\u58F9\u58FA\u58FB\u58FC"+
+            "\u58FD\u58FE\u58FF\u5900\u5901\u5902\u5903\u5904"+
+            "\u5905\u5906\u5907\u5908\u5909\u590A\u590B\u590C"+
+            "\u590D\u590E\u590F\u5910\u5911\u5912\u5913\u5914"+
+            "\u5915\u5916\u5917\u5918\u5919\u591A\u591B\u591C"+
+            "\u591D\u591E\u591F\u5920\u5921\u5922\u5923\u5924"+
+            "\u5925\u5926\u5927\u5928\u5929\u592A\u592B\u592C"+
+            "\u592D\u592E\u592F\u5930\u5931\u5932\u5933\u5934"+
+            "\u5935\u5936\u5937\u5938\u5939\u593A\u593B\u593C"+
+            "\u593D\u593E\u593F\u5940\u5941\u5942\u5943\u5944"+
+            "\u5945\u5946\u5947\u5948\u5949\u594A\u594B\u594C"+
+            "\u594D\u594E\u594F\u5950\u5951\u5952\u5953\u5954"+
+            "\u5955\u5956\u5957\u5958\u5959\u595A\u595B\u595C"+
+            "\u595D\u595E\u595F\u5960\u5961\u5962\u5963\u5964"+
+            "\u5965\u5966\u5967\u5968\u5969\u596A\u596B\u596C"+
+            "\u596D\u596E\u596F\u5970\u5971\u5972\u5973\u5974"+
+            "\u5975\u5976\u5977\u5978\u5979\u597A\u597B\u597C"+
+            "\u597D\u597E\u597F\u5980\u5981\u5982\u5983\u5984"+
+            "\u5985\u5986\u5987\u5988\u5989\u598A\u598B\u598C"+
+            "\u598D\u598E\u598F\u5990\u5991\u5992\u5993\u5994"+
+            "\u5995\u5996\u5997\u5998\u5999\u599A\u599B\u599C"+
+            "\u599D\u599E\u599F\u59A0\u59A1\u59A2\u59A3\u59A4"+
+            "\u59A5\u59A6\u59A7\u59A8\u59A9\u59AA\u59AB\u59AC"+
+            "\u59AD\u59AE\u59AF\u59B0\u59B1\u59B2\u59B3\u59B4"+
+            "\u59B5\u59B6\u59B7\u59B8\u59B9\u59BA\u59BB\u59BC"+
+            "\u59BD\u59BE\u59BF\u59C0\u59C1\u59C2\u59C3\u59C4"+
+            "\u59C5\u59C6\u59C7\u59C8\u59C9\u59CA\u59CB\u59CC"+
+            "\u59CD\u59CE\u59CF\u59D0\u59D1\u59D2\u59D3\u59D4"+
+            "\u59D5\u59D6\u59D7\u59D8\u59D9\u59DA\u59DB\u59DC"+
+            "\u59DD\u59DE\u59DF\u59E0\u59E1\u59E2\u59E3\u59E4"+
+            "\u59E5\u59E6\u59E7\u59E8\u59E9\u59EA\u59EB\u59EC"+
+            "\u59ED\u59EE\u59EF\u59F0\u59F1\u59F2\u59F3\u59F4"+
+            "\u59F5\u59F6\u59F7\u59F8\u59F9\u59FA\u59FB\u59FC"+
+            "\u59FD\u59FE\u59FF\u5A00\u5A01\u5A02\u5A03\u5A04"+
+            "\u5A05\u5A06\u5A07\u5A08\u5A09\u5A0A\u5A0B\u5A0C"+
+            "\u5A0D\u5A0E\u5A0F\u5A10\u5A11\u5A12\u5A13\u5A14"+
+            "\u5A15\u5A16\u5A17\u5A18\u5A19\u5A1A\u5A1B\u5A1C"+
+            "\u5A1D\u5A1E\u5A1F\u5A20\u5A21\u5A22\u5A23\u5A24"+
+            "\u5A25\u5A26\u5A27\u5A28\u5A29\u5A2A\u5A2B\u5A2C"+
+            "\u5A2D\u5A2E\u5A2F\u5A30\u5A31\u5A32\u5A33\u5A34"+
+            "\u5A35\u5A36\u5A37\u5A38\u5A39\u5A3A\u5A3B\u5A3C"+
+            "\u5A3D\u5A3E\u5A3F\u5A40\u5A41\u5A42\u5A43\u5A44"+
+            "\u5A45\u5A46\u5A47\u5A48\u5A49\u5A4A\u5A4B\u5A4C"+
+            "\u5A4D\u5A4E\u5A4F\u5A50\u5A51\u5A52\u5A53\u5A54"+
+            "\u5A55\u5A56\u5A57\u5A58\u5A59\u5A5A\u5A5B\u5A5C"+
+            "\u5A5D\u5A5E\u5A5F\u5A60\u5A61\u5A62\u5A63\u5A64"+
+            "\u5A65\u5A66\u5A67\u5A68\u5A69\u5A6A\u5A6B\u5A6C"+
+            "\u5A6D\u5A6E\u5A6F\u5A70\u5A71\u5A72\u5A73\u5A74"+
+            "\u5A75\u5A76\u5A77\u5A78\u5A79\u5A7A\u5A7B\u5A7C"+
+            "\u5A7D\u5A7E\u5A7F\u5A80\u5A81\u5A82\u5A83\u5A84"+
+            "\u5A85\u5A86\u5A87\u5A88\u5A89\u5A8A\u5A8B\u5A8C"+
+            "\u5A8D\u5A8E\u5A8F\u5A90\u5A91\u5A92\u5A93\u5A94"+
+            "\u5A95\u5A96\u5A97\u5A98\u5A99\u5A9A\u5A9B\u5A9C"+
+            "\u5A9D\u5A9E\u5A9F\u5AA0\u5AA1\u5AA2\u5AA3\u5AA4"+
+            "\u5AA5\u5AA6\u5AA7\u5AA8\u5AA9\u5AAA\u5AAB\u5AAC"+
+            "\u5AAD\u5AAE\u5AAF\u5AB0\u5AB1\u5AB2\u5AB3\u5AB4"+
+            "\u5AB5\u5AB6\u5AB7\u5AB8\u5AB9\u5ABA\u5ABB\u5ABC";
+
+        private final static String innerIndex6=
+            "\u5ABD\u5ABE\u5ABF\u5AC0\u5AC1\u5AC2\u5AC3\u5AC4"+
+            "\u5AC5\u5AC6\u5AC7\u5AC8\u5AC9\u5ACA\u5ACB\u5ACC"+
+            "\u5ACD\u5ACE\u5ACF\u5AD0\u5AD1\u5AD2\u5AD3\u5AD4"+
+            "\u5AD5\u5AD6\u5AD7\u5AD8\u5AD9\u5ADA\u5ADB\u5ADC"+
+            "\u5ADD\u5ADE\u5ADF\u5AE0\u5AE1\u5AE2\u5AE3\u5AE4"+
+            "\u5AE5\u5AE6\u5AE7\u5AE8\u5AE9\u5AEA\u5AEB\u5AEC"+
+            "\u5AED\u5AEE\u5AEF\u5AF0\u5AF1\u5AF2\u5AF3\u5AF4"+
+            "\u5AF5\u5AF6\u5AF7\u5AF8\u5AF9\u5AFA\u5AFB\u5AFC"+
+            "\u5AFD\u5AFE\u5AFF\u5B00\u5B01\u5B02\u5B03\u5B04"+
+            "\u5B05\u5B06\u5B07\u5B08\u5B09\u5B0A\u5B0B\u5B0C"+
+            "\u5B0D\u5B0E\u5B0F\u5B10\u5B11\u5B12\u5B13\u5B14"+
+            "\u5B15\u5B16\u5B17\u5B18\u5B19\u5B1A\u5B1B\u5B1C"+
+            "\u5B1D\u5B1E\u5B1F\u5B20\u5B21\u5B22\u5B23\u5B24"+
+            "\u5B25\u5B26\u5B27\u5B28\u5B29\u5B2A\u5B2B\u5B2C"+
+            "\u5B2D\u5B2E\u5B2F\u5B30\u5B31\u5B32\u5B33\u5B34"+
+            "\u5B35\u5B36\u5B37\u5B38\u5B39\u5B3A\u5B3B\u5B3C"+
+            "\u5B3D\u5B3E\u5B3F\u5B40\u5B41\u5B42\u5B43\u5B44"+
+            "\u5B45\u5B46\u5B47\u5B48\u5B49\u5B4A\u5B4B\u5B4C"+
+            "\u5B4D\u5B4E\u5B4F\u5B50\u5B51\u5B52\u5B53\u5B54"+
+            "\u5B55\u5B56\u5B57\u5B58\u5B59\u5B5A\u5B5B\u5B5C"+
+            "\u5B5D\u5B5E\u5B5F\u5B60\u5B61\u5B62\u5B63\u5B64"+
+            "\u5B65\u5B66\u5B67\u5B68\u5B69\u5B6A\u5B6B\u5B6C"+
+            "\u5B6D\u5B6E\u5B6F\u5B70\u5B71\u5B72\u5B73\u5B74"+
+            "\u5B75\u5B76\u5B77\u5B78\u5B79\u5B7A\u5B7B\u5B7C"+
+            "\u5B7D\u5B7E\u5B7F\u5B80\u5B81\u5B82\u5B83\u5B84"+
+            "\u5B85\u5B86\u5B87\u5B88\u5B89\u5B8A\u5B8B\u5B8C"+
+            "\u5B8D\u5B8E\u5B8F\u5B90\u5B91\u5B92\u5B93\u5B94"+
+            "\u5B95\u5B96\u5B97\u5B98\u5B99\u5B9A\u5B9B\u5B9C"+
+            "\u5B9D\u5B9E\u5B9F\u5BA0\u5BA1\u5BA2\u5BA3\u5BA4"+
+            "\u5BA5\u5BA6\u5BA7\u5BA8\u5BA9\u5BAA\u5BAB\u5BAC"+
+            "\u5BAD\u5BAE\u5BAF\u5BB0\u5BB1\u5BB2\u5BB3\u5BB4"+
+            "\u5BB5\u5BB6\u5BB7\u5BB8\u5BB9\u5BBA\u5BBB\u5BBC"+
+            "\u5BBD\u5BBE\u5BBF\u5BC0\u5BC1\u5BC2\u5BC3\u5BC4"+
+            "\u5BC5\u5BC6\u5BC7\u5BC8\u5BC9\u5BCA\u5BCB\u5BCC"+
+            "\u5BCD\u5BCE\u5BCF\u5BD0\u5BD1\u5BD2\u5BD3\u5BD4"+
+            "\u5BD5\u5BD6\u5BD7\u5BD8\u5BD9\u5BDA\u5BDB\u5BDC"+
+            "\u5BDD\u5BDE\u5BDF\u5BE0\u5BE1\u5BE2\u5BE3\u5BE4"+
+            "\u5BE5\u5BE6\u5BE7\u5BE8\u5BE9\u5BEA\u5BEB\u5BEC"+
+            "\u5BED\u5BEE\u5BEF\u5BF0\u5BF1\u5BF2\u5BF3\u5BF4"+
+            "\u5BF5\u5BF6\u5BF7\u5BF8\u5BF9\u5BFA\u5BFB\u5BFC"+
+            "\u5BFD\u5BFE\u5BFF\u5C00\u5C01\u5C02\u5C03\u5C04"+
+            "\u5C05\u5C06\u5C07\u5C08\u5C09\u5C0A\u5C0B\u5C0C"+
+            "\u5C0D\u5C0E\u5C0F\u5C10\u5C11\u5C12\u5C13\u5C14"+
+            "\u5C15\u5C16\u5C17\u5C18\u5C19\u5C1A\u5C1B\u5C1C"+
+            "\u5C1D\u5C1E\u5C1F\u5C20\u5C21\u5C22\u5C23\u5C24"+
+            "\u5C25\u5C26\u5C27\u5C28\u5C29\u5C2A\u5C2B\u5C2C"+
+            "\u5C2D\u5C2E\u5C2F\u5C30\u5C31\u5C32\u5C33\u5C34"+
+            "\u5C35\u5C36\u5C37\u5C38\u5C39\u5C3A\u5C3B\u5C3C"+
+            "\u5C3D\u5C3E\u5C3F\u5C40\u5C41\u5C42\u5C43\u5C44"+
+            "\u5C45\u5C46\u5C47\u5C48\u5C49\u5C4A\u5C4B\u5C4C"+
+            "\u5C4D\u5C4E\u5C4F\u5C50\u5C51\u5C52\u5C53\u5C54"+
+            "\u5C55\u5C56\u5C57\u5C58\u5C59\u5C5A\u5C5B\u5C5C"+
+            "\u5C5D\u5C5E\u5C5F\u5C60\u5C61\u5C62\u5C63\u5C64"+
+            "\u5C65\u5C66\u5C67\u5C68\u5C69\u5C6A\u5C6B\u5C6C"+
+            "\u5C6D\u5C6E\u5C6F\u5C70\u5C71\u5C72\u5C73\u5C74"+
+            "\u5C75\u5C76\u5C77\u5C78\u5C79\u5C7A\u5C7B\u5C7C"+
+            "\u5C7D\u5C7E\u5C7F\u5C80\u5C81\u5C82\u5C83\u5C84"+
+            "\u5C85\u5C86\u5C87\u5C88\u5C89\u5C8A\u5C8B\u5C8C"+
+            "\u5C8D\u5C8E\u5C8F\u5C90\u5C91\u5C92\u5C93\u5C94"+
+            "\u5C95\u5C96\u5C97\u5C98\u5C99\u5C9A\u5C9B\u5C9C"+
+            "\u5C9D\u5C9E\u5C9F\u5CA0\u5CA1\u5CA2\u5CA3\u5CA4"+
+            "\u5CA5\u5CA6\u5CA7\u5CA8\u5CA9\u5CAA\u5CAB\u5CAC"+
+            "\u5CAD\u5CAE\u5CAF\u5CB0\u5CB1\u5CB2\u5CB3\u5CB4"+
+            "\u5CB5\u5CB6\u5CB7\u5CB8\u5CB9\u5CBA\u5CBB\u5CBC"+
+            "\u5CBD\u5CBE\u5CBF\u5CC0\u5CC1\u5CC2\u5CC3\u5CC4"+
+            "\u5CC5\u5CC6\u5CC7\u5CC8\u5CC9\u5CCA\u5CCB\u5CCC"+
+            "\u5CCD\u5CCE\u5CCF\u5CD0\u5CD1\u5CD2\u5CD3\u5CD4"+
+            "\u5CD5\u5CD6\u5CD7\u5CD8\u5CD9\u5CDA\u5CDB\u5CDC"+
+            "\u5CDD\u5CDE\u5CDF\u5CE0\u5CE1\u5CE2\u5CE3\u5CE4"+
+            "\u5CE5\u5CE6\u5CE7\u5CE8\u5CE9\u5CEA\u5CEB\u5CEC"+
+            "\u5CED\u5CEE\u5CEF\u5CF0\u5CF1\u5CF2\u5CF3\u5CF4"+
+            "\u5CF5\u5CF6\u5CF7\u5CF8\u5CF9\u5CFA\u5CFB\u5CFC"+
+            "\u5CFD\u5CFE\u5CFF\u5D00\u5D01\u5D02\u5D03\u5D04"+
+            "\u5D05\u5D06\u5D07\u5D08\u5D09\u5D0A\u5D0B\u5D0C"+
+            "\u5D0D\u5D0E\u5D0F\u5D10\u5D11\u5D12\u5D13\u5D14"+
+            "\u5D15\u5D16\u5D17\u5D18\u5D19\u5D1A\u5D1B\u5D1C"+
+            "\u5D1D\u5D1E\u5D1F\u5D20\u5D21\u5D22\u5D23\u5D24"+
+            "\u5D25\u5D26\u5D27\u5D28\u5D29\u5D2A\u5D2B\u5D2C"+
+            "\u5D2D\u5D2E\u5D2F\u5D30\u5D31\u5D32\u5D33\u5D34"+
+            "\u5D35\u5D36\u5D37\u5D38\u5D39\u5D3A\u5D3B\u5D3C"+
+            "\u5D3D\u5D3E\u5D3F\u5D40\u5D41\u5D42\u5D43\u5D44"+
+            "\u5D45\u5D46\u5D47\u5D48\u5D49\u5D4A\u5D4B\u5D4C"+
+            "\u5D4D\u5D4E\u5D4F\u5D50\u5D51\u5D52\u5D53\u5D54"+
+            "\u5D55\u5D56\u5D57\u5D58\u5D59\u5D5A\u5D5B\u5D5C"+
+            "\u5D5D\u5D5E\u5D5F\u5D60\u5D61\u5D62\u5D63\u5D64"+
+            "\u5D65\u5D66\u5D67\u5D68\u5D69\u5D6A\u5D6B\u5D6C"+
+            "\u5D6D\u5D6E\u5D6F\u5D70\u5D71\u5D72\u5D73\u5D74"+
+            "\u5D75\u5D76\u5D77\u5D78\u5D79\u5D7A\u5D7B\u5D7C"+
+            "\u5D7D\u5D7E\u5D7F\u5D80\u5D81\u5D82\u5D83\u5D84"+
+            "\u5D85\u5D86\u5D87\u5D88\u5D89\u5D8A\u5D8B\u5D8C"+
+            "\u5D8D\u5D8E\u5D8F\u5D90\u5D91\u5D92\u5D93\u5D94"+
+            "\u5D95\u5D96\u5D97\u5D98\u5D99\u5D9A\u5D9B\u5D9C"+
+            "\u5D9D\u5D9E\u5D9F\u5DA0\u5DA1\u5DA2\u5DA3\u5DA4"+
+            "\u5DA5\u5DA6\u5DA7\u5DA8\u5DA9\u5DAA\u5DAB\u5DAC"+
+            "\u5DAD\u5DAE\u5DAF\u5DB0\u5DB1\u5DB2\u5DB3\u5DB4"+
+            "\u5DB5\u5DB6\u5DB7\u5DB8\u5DB9\u5DBA\u5DBB\u5DBC"+
+            "\u5DBD\u5DBE\u5DBF\u5DC0\u5DC1\u5DC2\u5DC3\u5DC4"+
+            "\u5DC5\u5DC6\u5DC7\u5DC8\u5DC9\u5DCA\u5DCB\u5DCC"+
+            "\u5DCD\u5DCE\u5DCF\u5DD0\u5DD1\u5DD2\u5DD3\u5DD4"+
+            "\u5DD5\u5DD6\u5DD7\u5DD8\u5DD9\u5DDA\u5DDB\u5DDC"+
+            "\u5DDD\u5DDE\u5DDF\u5DE0\u5DE1\u5DE2\u5DE3\u5DE4"+
+            "\u5DE5\u5DE6\u5DE7\u5DE8\u5DE9\u5DEA\u5DEB\u5DEC"+
+            "\u5DED\u5DEE\u5DEF\u5DF0\u5DF1\u5DF2\u5DF3\u5DF4"+
+            "\u5DF5\u5DF6\u5DF7\u5DF8\u5DF9\u5DFA\u5DFB\u5DFC"+
+            "\u5DFD\u5DFE\u5DFF\u5E00\u5E01\u5E02\u5E03\u5E04"+
+            "\u5E05\u5E06\u5E07\u5E08\u5E09\u5E0A\u5E0B\u5E0C"+
+            "\u5E0D\u5E0E\u5E0F\u5E10\u5E11\u5E12\u5E13\u5E14"+
+            "\u5E15\u5E16\u5E17\u5E18\u5E19\u5E1A\u5E1B\u5E1C"+
+            "\u5E1D\u5E1E\u5E1F\u5E20\u5E21\u5E22\u5E23\u5E24"+
+            "\u5E25\u5E26\u5E27\u5E28\u5E29\u5E2A\u5E2B\u5E2C"+
+            "\u5E2D\u5E2E\u5E2F\u5E30\u5E31\u5E32\u5E33\u5E34"+
+            "\u5E35\u5E36\u5E37\u5E38\u5E39\u5E3A\u5E3B\u5E3C"+
+            "\u5E3D\u5E3E\u5E3F\u5E40\u5E41\u5E42\u5E43\u5E44"+
+            "\u5E45\u5E46\u5E47\u5E48\u5E49\u5E4A\u5E4B\u5E4C"+
+            "\u5E4D\u5E4E\u5E4F\u5E50\u5E51\u5E52\u5E53\u5E54"+
+            "\u5E55\u5E56\u5E57\u5E58\u5E59\u5E5A\u5E5B\u5E5C"+
+            "\u5E5D\u5E5E\u5E5F\u5E60\u5E61\u5E62\u5E63\u5E64"+
+            "\u5E65\u5E66\u5E67\u5E68\u5E69\u5E6A\u5E6B\u5E6C"+
+            "\u5E6D\u5E6E\u5E6F\u5E70\u5E71\u5E72\u5E73\u5E74"+
+            "\u5E75\u5E76\u5E77\u5E78\u5E79\u5E7A\u5E7B\u5E7C"+
+            "\u5E7D\u5E7E\u5E7F\u5E80\u5E81\u5E82\u5E83\u5E84"+
+            "\u5E85\u5E86\u5E87\u5E88\u5E89\u5E8A\u5E8B\u5E8C"+
+            "\u5E8D\u5E8E\u5E8F\u5E90\u5E91\u5E92\u5E93\u5E94"+
+            "\u5E95\u5E96\u5E97\u5E98\u5E99\u5E9A\u5E9B\u5E9C"+
+            "\u5E9D\u5E9E\u5E9F\u5EA0\u5EA1\u5EA2\u5EA3\u5EA4"+
+            "\u5EA5\u5EA6\u5EA7\u5EA8\u5EA9\u5EAA\u5EAB\u5EAC"+
+            "\u5EAD\u5EAE\u5EAF\u5EB0\u5EB1\u5EB2\u5EB3\u5EB4"+
+            "\u5EB5\u5EB6\u5EB7\u5EB8\u5EB9\u5EBA\u5EBB\u5EBC"+
+            "\u5EBD\u5EBE\u5EBF\u5EC0\u5EC1\u5EC2\u5EC3\u5EC4"+
+            "\u5EC5\u5EC6\u5EC7\u5EC8\u5EC9\u5ECA\u5ECB\u5ECC"+
+            "\u5ECD\u5ECE\u5ECF\u5ED0\u5ED1\u5ED2\u5ED3\u5ED4"+
+            "\u5ED5\u5ED6\u5ED7\u5ED8\u5ED9\u5EDA\u5EDB\u5EDC"+
+            "\u5EDD\u5EDE\u5EDF\u5EE0\u5EE1\u5EE2\u5EE3\u5EE4"+
+            "\u5EE5\u5EE6\u5EE7\u5EE8\u5EE9\u5EEA\u5EEB\u5EEC"+
+            "\u5EED\u5EEE\u5EEF\u5EF0\u5EF1\u5EF2\u5EF3\u5EF4"+
+            "\u5EF5\u5EF6\u5EF7\u5EF8\u5EF9\u5EFA\u5EFB\u5EFC"+
+            "\u5EFD\u5EFE\u5EFF\u5F00\u5F01\u5F02\u5F03\u5F04"+
+            "\u5F05\u5F06\u5F07\u5F08\u5F09\u5F0A\u5F0B\u5F0C"+
+            "\u5F0D\u5F0E\u5F0F\u5F10\u5F11\u5F12\u5F13\u5F14"+
+            "\u5F15\u5F16\u5F17\u5F18\u5F19\u5F1A\u5F1B\u5F1C"+
+            "\u5F1D\u5F1E\u5F1F\u5F20\u5F21\u5F22\u5F23\u5F24"+
+            "\u5F25\u5F26\u5F27\u5F28\u5F29\u5F2A\u5F2B\u5F2C"+
+            "\u5F2D\u5F2E\u5F2F\u5F30\u5F31\u5F32\u5F33\u5F34"+
+            "\u5F35\u5F36\u5F37\u5F38\u5F39\u5F3A\u5F3B\u5F3C"+
+            "\u5F3D\u5F3E\u5F3F\u5F40\u5F41\u5F42\u5F43\u5F44"+
+            "\u5F45\u5F46\u5F47\u5F48\u5F49\u5F4A\u5F4B\u5F4C"+
+            "\u5F4D\u5F4E\u5F4F\u5F50\u5F51\u5F52\u5F53\u5F54"+
+            "\u5F55\u5F56\u5F57\u5F58\u5F59\u5F5A\u5F5B\u5F5C"+
+            "\u5F5D\u5F5E\u5F5F\u5F60\u5F61\u5F62\u5F63\u5F64"+
+            "\u5F65\u5F66\u5F67\u5F68\u5F69\u5F6A\u5F6B\u5F6C"+
+            "\u5F6D\u5F6E\u5F6F\u5F70\u5F71\u5F72\u5F73\u5F74"+
+            "\u5F75\u5F76\u5F77\u5F78\u5F79\u5F7A\u5F7B\u5F7C"+
+            "\u5F7D\u5F7E\u5F7F\u5F80\u5F81\u5F82\u5F83\u5F84"+
+            "\u5F85\u5F86\u5F87\u5F88\u5F89\u5F8A\u5F8B\u5F8C"+
+            "\u5F8D\u5F8E\u5F8F\u5F90\u5F91\u5F92\u5F93\u5F94"+
+            "\u5F95\u5F96\u5F97\u5F98\u5F99\u5F9A\u5F9B\u5F9C"+
+            "\u5F9D\u5F9E\u5F9F\u5FA0\u5FA1\u5FA2\u5FA3\u5FA4"+
+            "\u5FA5\u5FA6\u5FA7\u5FA8\u5FA9\u5FAA\u5FAB\u5FAC"+
+            "\u5FAD\u5FAE\u5FAF\u5FB0\u5FB1\u5FB2\u5FB3\u5FB4"+
+            "\u5FB5\u5FB6\u5FB7\u5FB8\u5FB9\u5FBA\u5FBB\u5FBC"+
+            "\u5FBD\u5FBE\u5FBF\u5FC0\u5FC1\u5FC2\u5FC3\u5FC4"+
+            "\u5FC5\u5FC6\u5FC7\u5FC8\u5FC9\u5FCA\u5FCB\u5FCC"+
+            "\u5FCD\u5FCE\u5FCF\u5FD0\u5FD1\u5FD2\u5FD3\u5FD4"+
+            "\u5FD5\u5FD6\u5FD7\u5FD8\u5FD9\u5FDA\u5FDB\u5FDC"+
+            "\u5FDD\u5FDE\u5FDF\u5FE0\u5FE1\u5FE2\u5FE3\u5FE4"+
+            "\u5FE5\u5FE6\u5FE7\u5FE8\u5FE9\u5FEA\u5FEB\u5FEC"+
+            "\u5FED\u5FEE\u5FEF\u5FF0\u5FF1\u5FF2\u5FF3\u5FF4"+
+            "\u5FF5\u5FF6\u5FF7\u5FF8\u5FF9\u5FFA\u5FFB\u5FFC"+
+            "\u5FFD\u5FFE\u5FFF\u6000\u6001\u6002\u6003\u6004"+
+            "\u6005\u6006\u6007\u6008\u6009\u600A\u600B\u600C"+
+            "\u600D\u600E\u600F\u6010\u6011\u6012\u6013\u6014"+
+            "\u6015\u6016\u6017\u6018\u6019\u601A\u601B\u601C"+
+            "\u601D\u601E\u601F\u6020\u6021\u6022\u6023\u6024"+
+            "\u6025\u6026\u6027\u6028\u6029\u602A\u602B\u602C"+
+            "\u602D\u602E\u602F\u6030\u6031\u6032\u6033\u6034"+
+            "\u6035\u6036\u6037\u6038\u6039\u603A\u603B\u603C"+
+            "\u603D\u603E\u603F\u6040\u6041\u6042\u6043\u6044"+
+            "\u6045\u6046\u6047\u6048\u6049\u604A\u604B\u604C"+
+            "\u604D\u604E\u604F\u6050\u6051\u6052\u6053\u6054"+
+            "\u6055\u6056\u6057\u6058\u6059\u605A\u605B\u605C"+
+            "\u605D\u605E\u605F\u6060\u6061\u6062\u6063\u6064"+
+            "\u6065\u6066\u6067\u6068\u6069\u606A\u606B\u606C"+
+            "\u606D\u606E\u606F\u6070\u6071\u6072\u6073\u6074"+
+            "\u6075\u6076\u6077\u6078\u6079\u607A\u607B\u607C"+
+            "\u607D\u607E\u607F\u6080\u6081\u6082\u6083\u6084"+
+            "\u6085\u6086\u6087\u6088\u6089\u608A\u608B\u608C"+
+            "\u608D\u608E\u608F\u6090\u6091\u6092\u6093\u6094"+
+            "\u6095\u6096\u6097\u6098\u6099\u609A\u609B\u609C"+
+            "\u609D\u609E\u609F\u60A0\u60A1\u60A2\u60A3\u60A4"+
+            "\u60A5\u60A6\u60A7\u60A8\u60A9\u60AA\u60AB\u60AC"+
+            "\u60AD\u60AE\u60AF\u60B0\u60B1\u60B2\u60B3\u60B4"+
+            "\u60B5\u60B6\u60B7\u60B8\u60B9\u60BA\u60BB\u60BC"+
+            "\u60BD\u60BE\u60BF\u60C0\u60C1\u60C2\u60C3\u60C4"+
+            "\u60C5\u60C6\u60C7\u60C8\u60C9\u60CA\u60CB\u60CC"+
+            "\u60CD\u60CE\u60CF\u60D0\u60D1\u60D2\u60D3\u60D4"+
+            "\u60D5\u60D6\u60D7\u60D8\u60D9\u60DA\u60DB\u60DC"+
+            "\u60DD\u60DE\u60DF\u60E0\u60E1\u60E2\u60E3\u60E4"+
+            "\u60E5\u60E6\u60E7\u60E8\u60E9\u60EA\u60EB\u60EC"+
+            "\u60ED\u60EE\u60EF\u60F0\u60F1\u60F2\u60F3\u60F4"+
+            "\u60F5\u60F6\u60F7\u60F8\u60F9\u60FA\u60FB\u60FC"+
+            "\u60FD\u60FE\u60FF\u6100\u6101\u6102\u6103\u6104"+
+            "\u6105\u6106\u6107\u6108\u6109\u610A\u610B\u610C"+
+            "\u610D\u610E\u610F\u6110\u6111\u6112\u6113\u6114"+
+            "\u6115\u6116\u6117\u6118\u6119\u611A\u611B\u611C"+
+            "\u611D\u611E\u611F\u6120\u6121\u6122\u6123\u6124"+
+            "\u6125\u6126\u6127\u6128\u6129\u612A\u612B\u612C"+
+            "\u612D\u612E\u612F\u6130\u6131\u6132\u6133\u6134"+
+            "\u6135\u6136\u6137\u6138\u6139\u613A\u613B\u613C"+
+            "\u613D\u613E\u613F\u6140\u6141\u6142\u6143\u6144"+
+            "\u6145\u6146\u6147\u6148\u6149\u614A\u614B\u614C"+
+            "\u614D\u614E\u614F\u6150\u6151\u6152\u6153\u6154"+
+            "\u6155\u6156\u6157\u6158\u6159\u615A\u615B\u615C"+
+            "\u615D\u615E\u615F\u6160\u6161\u6162\u6163\u6164"+
+            "\u6165\u6166\u6167\u6168\u6169\u616A\u616B\u616C"+
+            "\u616D\u616E\u616F\u6170\u6171\u6172\u6173\u6174"+
+            "\u6175\u6176\u6177\u6178\u6179\u617A\u617B\u617C"+
+            "\u617D\u617E\u617F\u6180\u6181\u6182\u6183\u6184"+
+            "\u6185\u6186\u6187\u6188\u6189\u618A\u618B\u618C"+
+            "\u618D\u618E\u618F\u6190\u6191\u6192\u6193\u6194"+
+            "\u6195\u6196\u6197\u6198\u6199\u619A\u619B\u619C"+
+            "\u619D\u619E\u619F\u61A0\u61A1\u61A2\u61A3\u61A4"+
+            "\u61A5\u61A6\u61A7\u61A8\u61A9\u61AA\u61AB\u61AC"+
+            "\u61AD\u61AE\u61AF\u61B0\u61B1\u61B2\u61B3\u61B4"+
+            "\u61B5\u61B6\u61B7\u61B8\u61B9\u61BA\u61BB\u61BC"+
+            "\u61BD\u61BE\u61BF\u61C0\u61C1\u61C2\u61C3\u61C4"+
+            "\u61C5\u61C6\u61C7\u61C8\u61C9\u61CA\u61CB\u61CC"+
+            "\u61CD\u61CE\u61CF\u61D0\u61D1\u61D2\u61D3\u61D4"+
+            "\u61D5\u61D6\u61D7\u61D8\u61D9\u61DA\u61DB\u61DC"+
+            "\u61DD\u61DE\u61DF\u61E0\u61E1\u61E2\u61E3\u61E4"+
+            "\u61E5\u61E6\u61E7\u61E8\u61E9\u61EA\u61EB\u61EC"+
+            "\u61ED\u61EE\u61EF\u61F0\u61F1\u61F2\u61F3\u61F4"+
+            "\u61F5\u61F6\u61F7\u61F8\u61F9\u61FA\u61FB\u61FC"+
+            "\u61FD\u61FE\u61FF\u6200\u6201\u6202\u6203\u6204"+
+            "\u6205\u6206\u6207\u6208\u6209\u620A\u620B\u620C"+
+            "\u620D\u620E\u620F\u6210\u6211\u6212\u6213\u6214"+
+            "\u6215\u6216\u6217\u6218\u6219\u621A\u621B\u621C"+
+            "\u621D\u621E\u621F\u6220\u6221\u6222\u6223\u6224"+
+            "\u6225\u6226\u6227\u6228\u6229\u622A\u622B\u622C"+
+            "\u622D\u622E\u622F\u6230\u6231\u6232\u6233\u6234"+
+            "\u6235\u6236\u6237\u6238\u6239\u623A\u623B\u623C"+
+            "\u623D\u623E\u623F\u6240\u6241\u6242\u6243\u6244"+
+            "\u6245\u6246\u6247\u6248\u6249\u624A\u624B\u624C"+
+            "\u624D\u624E\u624F\u6250\u6251\u6252\u6253\u6254"+
+            "\u6255\u6256\u6257\u6258\u6259\u625A\u625B\u625C"+
+            "\u625D\u625E\u625F\u6260\u6261\u6262\u6263\u6264"+
+            "\u6265\u6266\u6267\u6268\u6269\u626A\u626B\u626C"+
+            "\u626D\u626E\u626F\u6270\u6271\u6272\u6273\u6274"+
+            "\u6275\u6276\u6277\u6278\u6279\u627A\u627B\u627C"+
+            "\u627D\u627E\u627F\u6280\u6281\u6282\u6283\u6284"+
+            "\u6285\u6286\u6287\u6288\u6289\u628A\u628B\u628C"+
+            "\u628D\u628E\u628F\u6290\u6291\u6292\u6293\u6294"+
+            "\u6295\u6296\u6297\u6298\u6299\u629A\u629B\u629C"+
+            "\u629D\u629E\u629F\u62A0\u62A1\u62A2\u62A3\u62A4"+
+            "\u62A5\u62A6\u62A7\u62A8\u62A9\u62AA\u62AB\u62AC"+
+            "\u62AD\u62AE\u62AF\u62B0\u62B1\u62B2\u62B3\u62B4"+
+            "\u62B5\u62B6\u62B7\u62B8\u62B9\u62BA\u62BB\u62BC"+
+            "\u62BD\u62BE\u62BF\u62C0\u62C1\u62C2\u62C3\u62C4"+
+            "\u62C5\u62C6\u62C7\u62C8\u62C9\u62CA\u62CB\u62CC"+
+            "\u62CD\u62CE\u62CF\u62D0\u62D1\u62D2\u62D3\u62D4"+
+            "\u62D5\u62D6\u62D7\u62D8\u62D9\u62DA\u62DB\u62DC"+
+            "\u62DD\u62DE\u62DF\u62E0\u62E1\u62E2\u62E3\u62E4"+
+            "\u62E5\u62E6\u62E7\u62E8\u62E9\u62EA\u62EB\u62EC"+
+            "\u62ED\u62EE\u62EF\u62F0\u62F1\u62F2\u62F3\u62F4"+
+            "\u62F5\u62F6\u62F7\u62F8\u62F9\u62FA\u62FB\u62FC"+
+            "\u62FD\u62FE\u62FF\u6300\u6301\u6302\u6303\u6304"+
+            "\u6305\u6306\u6307\u6308\u6309\u630A\u630B\u630C"+
+            "\u630D\u630E\u630F\u6310\u6311\u6312\u6313\u6314"+
+            "\u6315\u6316\u6317\u6318\u6319\u631A\u631B\u631C"+
+            "\u631D\u631E\u631F\u6320\u6321\u6322\u6323\u6324"+
+            "\u6325\u6326\u6327\u6328\u6329\u632A\u632B\u632C"+
+            "\u632D\u632E\u632F\u6330\u6331\u6332\u6333\u6334"+
+            "\u6335\u6336\u6337\u6338\u6339\u633A\u633B\u633C"+
+            "\u633D\u633E\u633F\u6340\u6341\u6342\u6343\u6344"+
+            "\u6345\u6346\u6347\u6348\u6349\u634A\u634B\u634C"+
+            "\u634D\u634E\u634F\u6350\u6351\u6352\u6353\u6354"+
+            "\u6355\u6356\u6357\u6358\u6359\u635A\u635B\u635C"+
+            "\u635D\u635E\u635F\u6360\u6361\u6362\u6363\u6364"+
+            "\u6365\u6366\u6367\u6368\u6369\u636A\u636B\u636C"+
+            "\u636D\u636E\u636F\u6370\u6371\u6372\u6373\u6374"+
+            "\u6375\u6376\u6377\u6378\u6379\u637A\u637B\u637C"+
+            "\u637D\u637E\u637F\u6380\u6381\u6382\u6383\u6384"+
+            "\u6385\u6386\u6387\u6388\u6389\u638A\u638B\u638C"+
+            "\u638D\u638E\u638F\u6390\u6391\u6392\u6393\u6394"+
+            "\u6395\u6396\u6397\u6398\u6399\u639A\u639B\u639C"+
+            "\u639D\u639E\u639F\u63A0\u63A1\u63A2\u63A3\u63A4"+
+            "\u63A5\u63A6\u63A7\u63A8\u63A9\u63AA\u63AB\u63AC"+
+            "\u63AD\u63AE\u63AF\u63B0\u63B1\u63B2\u63B3\u63B4"+
+            "\u63B5\u63B6\u63B7\u63B8\u63B9\u63BA\u63BB\u63BC"+
+            "\u63BD\u63BE\u63BF\u63C0\u63C1\u63C2\u63C3\u63C4"+
+            "\u63C5\u63C6\u63C7\u63C8\u63C9\u63CA\u63CB\u63CC"+
+            "\u63CD\u63CE\u63CF\u63D0\u63D1\u63D2\u63D3\u63D4"+
+            "\u63D5\u63D6\u63D7\u63D8\u63D9\u63DA\u63DB\u63DC"+
+            "\u63DD\u63DE\u63DF\u63E0\u63E1\u63E2\u63E3\u63E4"+
+            "\u63E5\u63E6\u63E7\u63E8\u63E9\u63EA\u63EB\u63EC"+
+            "\u63ED\u63EE\u63EF\u63F0\u63F1\u63F2\u63F3\u63F4"+
+            "\u63F5\u63F6\u63F7\u63F8\u63F9\u63FA\u63FB\u63FC"+
+            "\u63FD\u63FE\u63FF\u6400\u6401\u6402\u6403\u6404"+
+            "\u6405\u6406\u6407\u6408\u6409\u640A\u640B\u640C"+
+            "\u640D\u640E\u640F\u6410\u6411\u6412\u6413\u6414"+
+            "\u6415\u6416\u6417\u6418\u6419\u641A\u641B\u641C"+
+            "\u641D\u641E\u641F\u6420\u6421\u6422\u6423\u6424"+
+            "\u6425\u6426\u6427\u6428\u6429\u642A\u642B\u642C"+
+            "\u642D\u642E\u642F\u6430\u6431\u6432\u6433\u6434"+
+            "\u6435\u6436\u6437\u6438\u6439\u643A\u643B\u643C"+
+            "\u643D\u643E\u643F\u6440\u6441\u6442\u6443\u6444"+
+            "\u6445\u6446\u6447\u6448\u6449\u644A\u644B\u644C"+
+            "\u644D\u644E\u644F\u6450\u6451\u6452\u6453\u6454"+
+            "\u6455\u6456\u6457\u6458\u6459\u645A\u645B\u645C"+
+            "\u645D\u645E\u645F\u6460\u6461\u6462\u6463\u6464"+
+            "\u6465\u6466\u6467\u6468\u6469\u646A\u646B\u646C"+
+            "\u646D\u646E\u646F\u6470\u6471\u6472\u6473\u6474"+
+            "\u6475\u6476\u6477\u6478\u6479\u647A\u647B\u647C"+
+            "\u647D\u647E\u647F\u6480\u6481\u6482\u6483\u6484"+
+            "\u6485\u6486\u6487\u6488\u6489\u648A\u648B\u648C"+
+            "\u648D\u648E\u648F\u6490\u6491\u6492\u6493\u6494"+
+            "\u6495\u6496\u6497\u6498\u6499\u649A\u649B\u649C"+
+            "\u649D\u649E\u649F\u64A0\u64A1\u64A2\u64A3\u64A4"+
+            "\u64A5\u64A6\u64A7\u64A8\u64A9\u64AA\u64AB\u64AC"+
+            "\u64AD\u64AE\u64AF\u64B0\u64B1\u64B2\u64B3\u64B4"+
+            "\u64B5\u64B6\u64B7\u64B8\u64B9\u64BA\u64BB\u64BC"+
+            "\u64BD\u64BE\u64BF\u64C0\u64C1\u64C2\u64C3\u64C4"+
+            "\u64C5\u64C6\u64C7\u64C8\u64C9\u64CA\u64CB\u64CC"+
+            "\u64CD\u64CE\u64CF\u64D0\u64D1\u64D2\u64D3\u64D4"+
+            "\u64D5\u64D6\u64D7\u64D8\u64D9\u64DA\u64DB\u64DC"+
+            "\u64DD\u64DE\u64DF\u64E0\u64E1\u64E2\u64E3\u64E4"+
+            "\u64E5\u64E6\u64E7\u64E8\u64E9\u64EA\u64EB\u64EC"+
+            "\u64ED\u64EE\u64EF\u64F0\u64F1\u64F2\u64F3\u64F4"+
+            "\u64F5\u64F6\u64F7\u64F8\u64F9\u64FA\u64FB\u64FC"+
+            "\u64FD\u64FE\u64FF\u6500\u6501\u6502\u6503\u6504"+
+            "\u6505\u6506\u6507\u6508\u6509\u650A\u650B\u650C"+
+            "\u650D\u650E\u650F\u6510\u6511\u6512\u6513\u6514"+
+            "\u6515\u6516\u6517\u6518\u6519\u651A\u651B\u651C"+
+            "\u651D\u651E\u651F\u6520\u6521\u6522\u6523\u6524"+
+            "\u6525\u6526\u6527\u6528\u6529\u652A\u652B\u652C"+
+            "\u652D\u652E\u652F\u6530\u6531\u6532\u6533\u6534"+
+            "\u6535\u6536\u6537\u6538\u6539\u653A\u653B\u653C"+
+            "\u653D\u653E\u653F\u6540\u6541\u6542\u6543\u6544"+
+            "\u6545\u6546\u6547\u6548\u6549\u654A\u654B\u654C"+
+            "\u654D\u654E\u654F\u6550\u6551\u6552\u6553\u6554"+
+            "\u6555\u6556\u6557\u6558\u6559\u655A\u655B\u655C"+
+            "\u655D\u655E\u655F\u6560\u6561\u6562\u6563\u6564"+
+            "\u6565\u6566\u6567\u6568\u6569\u656A\u656B\u656C"+
+            "\u656D\u656E\u656F\u6570\u6571\u6572\u6573\u6574"+
+            "\u6575\u6576\u6577\u6578\u6579\u657A\u657B\u657C"+
+            "\u657D\u657E\u657F\u6580\u6581\u6582\u6583\u6584"+
+            "\u6585\u6586\u6587\u6588\u6589\u658A\u658B\u658C"+
+            "\u658D\u658E\u658F\u6590\u6591\u6592\u6593\u6594"+
+            "\u6595\u6596\u6597\u6598\u6599\u659A\u659B\u659C"+
+            "\u659D\u659E\u659F\u65A0\u65A1\u65A2\u65A3\u65A4"+
+            "\u65A5\u65A6\u65A7\u65A8\u65A9\u65AA\u65AB\u65AC"+
+            "\u65AD\u65AE\u65AF\u65B0\u65B1\u65B2\u65B3\u65B4"+
+            "\u65B5\u65B6\u65B7\u65B8\u65B9\u65BA\u65BB\u65BC"+
+            "\u65BD\u65BE\u65BF\u65C0\u65C1\u65C2\u65C3\u65C4"+
+            "\u65C5\u65C6\u65C7\u65C8\u65C9\u65CA\u65CB\u65CC"+
+            "\u65CD\u65CE\u65CF\u65D0\u65D1\u65D2\u65D3\u65D4"+
+            "\u65D5\u65D6\u65D7\u65D8\u65D9\u65DA\u65DB\u65DC"+
+            "\u65DD\u65DE\u65DF\u65E0\u65E1\u65E2\u65E3\u65E4"+
+            "\u65E5\u65E6\u65E7\u65E8\u65E9\u65EA\u65EB\u65EC"+
+            "\u65ED\u65EE\u65EF\u65F0\u65F1\u65F2\u65F3\u65F4"+
+            "\u65F5\u65F6\u65F7\u65F8\u65F9\u65FA\u65FB\u65FC"+
+            "\u65FD\u65FE\u65FF\u6600\u6601\u6602\u6603\u6604"+
+            "\u6605\u6606\u6607\u6608\u6609\u660A\u660B\u660C"+
+            "\u660D\u660E\u660F\u6610\u6611\u6612\u6613\u6614"+
+            "\u6615\u6616\u6617\u6618\u6619\u661A\u661B\u661C"+
+            "\u661D\u661E\u661F\u6620\u6621\u6622\u6623\u6624"+
+            "\u6625\u6626\u6627\u6628\u6629\u662A\u662B\u662C"+
+            "\u662D\u662E\u662F\u6630\u6631\u6632\u6633\u6634"+
+            "\u6635\u6636\u6637\u6638\u6639\u663A\u663B\u663C"+
+            "\u663D\u663E\u663F\u6640\u6641\u6642\u6643\u6644"+
+            "\u6645\u6646\u6647\u6648\u6649\u664A\u664B\u664C"+
+            "\u664D\u664E\u664F\u6650\u6651\u6652\u6653\u6654"+
+            "\u6655\u6656\u6657\u6658\u6659\u665A\u665B\u665C"+
+            "\u665D\u665E\u665F\u6660\u6661\u6662\u6663\u6664"+
+            "\u6665\u6666\u6667\u6668\u6669\u666A\u666B\u666C"+
+            "\u666D\u666E\u666F\u6670\u6671\u6672\u6673\u6674"+
+            "\u6675\u6676\u6677\u6678\u6679\u667A\u667B\u667C"+
+            "\u667D\u667E\u667F\u6680\u6681\u6682\u6683\u6684"+
+            "\u6685\u6686\u6687\u6688\u6689\u668A\u668B\u668C"+
+            "\u668D\u668E\u668F\u6690\u6691\u6692\u6693\u6694"+
+            "\u6695\u6696\u6697\u6698\u6699\u669A\u669B\u669C"+
+            "\u669D\u669E\u669F\u66A0\u66A1\u66A2\u66A3\u66A4"+
+            "\u66A5\u66A6\u66A7\u66A8\u66A9\u66AA\u66AB\u66AC"+
+            "\u66AD\u66AE\u66AF\u66B0\u66B1\u66B2\u66B3\u66B4"+
+            "\u66B5\u66B6\u66B7\u66B8\u66B9\u66BA\u66BB\u66BC"+
+            "\u66BD\u66BE\u66BF\u66C0\u66C1\u66C2\u66C3\u66C4"+
+            "\u66C5\u66C6\u66C7\u66C8\u66C9\u66CA\u66CB\u66CC"+
+            "\u66CD\u66CE\u66CF\u66D0\u66D1\u66D2\u66D3\u66D4"+
+            "\u66D5\u66D6\u66D7\u66D8\u66D9\u66DA\u66DB\u66DC"+
+            "\u66DD\u66DE\u66DF\u66E0\u66E1\u66E2\u66E3\u66E4"+
+            "\u66E5\u66E6\u66E7\u66E8\u66E9\u66EA\u66EB\u66EC"+
+            "\u66ED\u66EE\u66EF\u66F0\u66F1\u66F2\u66F3\u66F4"+
+            "\u66F5\u66F6\u66F7\u66F8\u66F9\u66FA\u66FB\u66FC"+
+            "\u66FD\u66FE\u66FF\u6700\u6701\u6702\u6703\u6704"+
+            "\u6705\u6706\u6707\u6708\u6709\u670A\u670B\u670C"+
+            "\u670D\u670E\u670F\u6710\u6711\u6712\u6713\u6714"+
+            "\u6715\u6716\u6717\u6718\u6719\u671A\u671B\u671C"+
+            "\u671D\u671E\u671F\u6720\u6721\u6722\u6723\u6724"+
+            "\u6725\u6726\u6727\u6728\u6729\u672A\u672B\u672C"+
+            "\u672D\u672E\u672F\u6730\u6731\u6732\u6733\u6734"+
+            "\u6735\u6736\u6737\u6738\u6739\u673A\u673B\u673C"+
+            "\u673D\u673E\u673F\u6740\u6741\u6742\u6743\u6744"+
+            "\u6745\u6746\u6747\u6748\u6749\u674A\u674B\u674C"+
+            "\u674D\u674E\u674F\u6750\u6751\u6752\u6753\u6754"+
+            "\u6755\u6756\u6757\u6758\u6759\u675A\u675B\u675C"+
+            "\u675D\u675E\u675F\u6760\u6761\u6762\u6763\u6764"+
+            "\u6765\u6766\u6767\u6768\u6769\u676A\u676B\u676C"+
+            "\u676D\u676E\u676F\u6770\u6771\u6772\u6773\u6774"+
+            "\u6775\u6776\u6777\u6778\u6779\u677A\u677B\u677C"+
+            "\u677D\u677E\u677F\u6780\u6781\u6782\u6783\u6784"+
+            "\u6785\u6786\u6787\u6788\u6789\u678A\u678B\u678C"+
+            "\u678D\u678E\u678F\u6790\u6791\u6792\u6793\u6794"+
+            "\u6795\u6796\u6797\u6798\u6799\u679A\u679B\u679C"+
+            "\u679D\u679E\u679F\u67A0\u67A1\u67A2\u67A3\u67A4"+
+            "\u67A5\u67A6\u67A7\u67A8\u67A9\u67AA\u67AB\u67AC"+
+            "\u67AD\u67AE\u67AF\u67B0\u67B1\u67B2\u67B3\u67B4"+
+            "\u67B5\u67B6\u67B7\u67B8\u67B9\u67BA\u67BB\u67BC"+
+            "\u67BD\u67BE\u67BF\u67C0\u67C1\u67C2\u67C3\u67C4"+
+            "\u67C5\u67C6\u67C7\u67C8\u67C9\u67CA\u67CB\u67CC"+
+            "\u67CD\u67CE\u67CF\u67D0\u67D1\u67D2\u67D3\u67D4"+
+            "\u67D5\u67D6\u67D7\u67D8\u67D9\u67DA\u67DB\u67DC"+
+            "\u67DD\u67DE\u67DF\u67E0\u67E1\u67E2\u67E3\u67E4"+
+            "\u67E5\u67E6\u67E7\u67E8\u67E9\u67EA\u67EB\u67EC"+
+            "\u67ED\u67EE\u67EF\u67F0\u67F1\u67F2\u67F3\u67F4"+
+            "\u67F5\u67F6\u67F7\u67F8\u67F9\u67FA\u67FB\u67FC"+
+            "\u67FD\u67FE\u67FF\u6800\u6801\u6802\u6803\u6804"+
+            "\u6805\u6806\u6807\u6808\u6809\u680A\u680B\u680C"+
+            "\u680D\u680E\u680F\u6810\u6811\u6812\u6813\u6814"+
+            "\u6815\u6816\u6817\u6818\u6819\u681A\u681B\u681C"+
+            "\u681D\u681E\u681F\u6820\u6821\u6822\u6823\u6824"+
+            "\u6825\u6826\u6827\u6828\u6829\u682A\u682B\u682C"+
+            "\u682D\u682E\u682F\u6830\u6831\u6832\u6833\u6834"+
+            "\u6835\u6836\u6837\u6838\u6839\u683A\u683B\u683C"+
+            "\u683D\u683E\u683F\u6840\u6841\u6842\u6843\u6844"+
+            "\u6845\u6846\u6847\u6848\u6849\u684A\u684B\u684C"+
+            "\u684D\u684E\u684F\u6850\u6851\u6852\u6853\u6854"+
+            "\u6855\u6856\u6857\u6858\u6859\u685A\u685B\u685C"+
+            "\u685D\u685E\u685F\u6860\u6861\u6862\u6863\u6864"+
+            "\u6865\u6866\u6867\u6868\u6869\u686A\u686B\u686C"+
+            "\u686D\u686E\u686F\u6870\u6871\u6872\u6873\u6874"+
+            "\u6875\u6876\u6877\u6878\u6879\u687A\u687B\u687C"+
+            "\u687D\u687E\u687F\u6880\u6881\u6882\u6883\u6884"+
+            "\u6885\u6886\u6887\u6888\u6889\u688A\u688B\u688C"+
+            "\u688D\u688E\u688F\u6890\u6891\u6892\u6893\u6894"+
+            "\u6895\u6896\u6897\u6898\u6899\u689A\u689B\u689C"+
+            "\u689D\u689E\u689F\u68A0\u68A1\u68A2\u68A3\u68A4"+
+            "\u68A5\u68A6\u68A7\u68A8\u68A9\u68AA\u68AB\u68AC"+
+            "\u68AD\u68AE\u68AF\u68B0\u68B1\u68B2\u68B3\u68B4"+
+            "\u68B5\u68B6\u68B7\u68B8\u68B9\u68BA\u68BB\u68BC"+
+            "\u68BD\u68BE\u68BF\u68C0\u68C1\u68C2\u68C3\u68C4"+
+            "\u68C5\u68C6\u68C7\u68C8\u68C9\u68CA\u68CB\u68CC"+
+            "\u68CD\u68CE\u68CF\u68D0\u68D1\u68D2\u68D3\u68D4"+
+            "\u68D5\u68D6\u68D7\u68D8\u68D9\u68DA\u68DB\u68DC"+
+            "\u68DD\u68DE\u68DF\u68E0\u68E1\u68E2\u68E3\u68E4"+
+            "\u68E5\u68E6\u68E7\u68E8\u68E9\u68EA\u68EB\u68EC"+
+            "\u68ED\u68EE\u68EF\u68F0\u68F1\u68F2\u68F3\u68F4"+
+            "\u68F5\u68F6\u68F7\u68F8\u68F9\u68FA\u68FB\u68FC"+
+            "\u68FD\u68FE\u68FF\u6900\u6901\u6902\u6903\u6904"+
+            "\u6905\u6906\u6907\u6908\u6909\u690A\u690B\u690C"+
+            "\u690D\u690E\u690F\u6910\u6911\u6912\u6913\u6914"+
+            "\u6915\u6916\u6917\u6918\u6919\u691A\u691B\u691C"+
+            "\u691D\u691E\u691F\u6920\u6921\u6922\u6923\u6924"+
+            "\u6925\u6926\u6927\u6928\u6929\u692A\u692B\u692C"+
+            "\u692D\u692E\u692F\u6930\u6931\u6932\u6933\u6934"+
+            "\u6935\u6936\u6937\u6938\u6939\u693A\u693B\u693C"+
+            "\u693D\u693E\u693F\u6940\u6941\u6942\u6943\u6944"+
+            "\u6945\u6946\u6947\u6948\u6949\u694A\u694B\u694C"+
+            "\u694D\u694E\u694F\u6950\u6951\u6952\u6953\u6954"+
+            "\u6955\u6956\u6957\u6958\u6959\u695A\u695B\u695C"+
+            "\u695D\u695E\u695F\u6960\u6961\u6962\u6963\u6964"+
+            "\u6965\u6966\u6967\u6968\u6969\u696A\u696B\u696C"+
+            "\u696D\u696E\u696F\u6970\u6971\u6972\u6973\u6974"+
+            "\u6975\u6976\u6977\u6978\u6979\u697A\u697B\u697C"+
+            "\u697D\u697E\u697F\u6980\u6981\u6982\u6983\u6984"+
+            "\u6985\u6986\u6987\u6988\u6989\u698A\u698B\u698C"+
+            "\u698D\u698E\u698F\u6990\u6991\u6992\u6993\u6994"+
+            "\u6995\u6996\u6997\u6998\u6999\u699A\u699B\u699C"+
+            "\u699D\u699E\u699F\u69A0\u69A1\u69A2\u69A3\u69A4"+
+            "\u69A5\u69A6\u69A7\u69A8\u69A9\u69AA\u69AB\u69AC"+
+            "\u69AD\u69AE\u69AF\u69B0\u69B1\u69B2\u69B3\u69B4"+
+            "\u69B5\u69B6\u69B7\u69B8\u69B9\u69BA\u69BB\u69BC"+
+            "\u69BD\u69BE\u69BF\u69C0\u69C1\u69C2\u69C3\u69C4"+
+            "\u69C5\u69C6\u69C7\u69C8\u69C9\u69CA\u69CB\u69CC"+
+            "\u69CD\u69CE\u69CF\u69D0\u69D1\u69D2\u69D3\u69D4"+
+            "\u69D5\u69D6\u69D7\u69D8\u69D9\u69DA\u69DB\u69DC"+
+            "\u69DD\u69DE\u69DF\u69E0\u69E1\u69E2\u69E3\u69E4"+
+            "\u69E5\u69E6\u69E7\u69E8\u69E9\u69EA\u69EB\u69EC"+
+            "\u69ED\u69EE\u69EF\u69F0\u69F1\u69F2\u69F3\u69F4"+
+            "\u69F5\u69F6\u69F7\u69F8\u69F9\u69FA\u69FB\u69FC"+
+            "\u69FD\u69FE\u69FF\u6A00\u6A01\u6A02\u6A03\u6A04"+
+            "\u6A05\u6A06\u6A07\u6A08\u6A09\u6A0A\u6A0B\u6A0C"+
+            "\u6A0D\u6A0E\u6A0F\u6A10\u6A11\u6A12\u6A13\u6A14"+
+            "\u6A15\u6A16\u6A17\u6A18\u6A19\u6A1A\u6A1B\u6A1C"+
+            "\u6A1D\u6A1E\u6A1F\u6A20\u6A21\u6A22\u6A23\u6A24"+
+            "\u6A25\u6A26\u6A27\u6A28\u6A29\u6A2A\u6A2B\u6A2C"+
+            "\u6A2D\u6A2E\u6A2F\u6A30\u6A31\u6A32\u6A33\u6A34"+
+            "\u6A35\u6A36\u6A37\u6A38\u6A39\u6A3A\u6A3B\u6A3C"+
+            "\u6A3D\u6A3E\u6A3F\u6A40\u6A41\u6A42\u6A43\u6A44"+
+            "\u6A45\u6A46\u6A47\u6A48\u6A49\u6A4A\u6A4B\u6A4C"+
+            "\u6A4D\u6A4E\u6A4F\u6A50\u6A51\u6A52\u6A53\u6A54"+
+            "\u6A55\u6A56\u6A57\u6A58\u6A59\u6A5A\u6A5B\u6A5C"+
+            "\u6A5D\u6A5E\u6A5F\u6A60\u6A61\u6A62\u6A63\u6A64"+
+            "\u6A65\u6A66\u6A67\u6A68\u6A69\u6A6A\u6A6B\u6A6C"+
+            "\u6A6D\u6A6E\u6A6F\u6A70\u6A71\u6A72\u6A73\u6A74"+
+            "\u6A75\u6A76\u6A77\u6A78\u6A79\u6A7A\u6A7B\u6A7C"+
+            "\u6A7D\u6A7E\u6A7F\u6A80\u6A81\u6A82\u6A83\u6A84"+
+            "\u6A85\u6A86\u6A87\u6A88\u6A89\u6A8A\u6A8B\u6A8C"+
+            "\u6A8D\u6A8E\u6A8F\u6A90\u6A91\u6A92\u6A93\u6A94"+
+            "\u6A95\u6A96\u6A97\u6A98\u6A99\u6A9A\u6A9B\u6A9C"+
+            "\u6A9D\u6A9E\u6A9F\u6AA0\u6AA1\u6AA2\u6AA3\u6AA4"+
+            "\u6AA5\u6AA6\u6AA7\u6AA8\u6AA9\u6AAA\u6AAB\u6AAC"+
+            "\u6AAD\u6AAE\u6AAF\u6AB0\u6AB1\u6AB2\u6AB3\u6AB4"+
+            "\u6AB5\u6AB6\u6AB7\u6AB8\u6AB9\u6ABA\u6ABB\u6ABC";
+
+        private final static String innerIndex7=
+            "\u6ABD\u6ABE\u6ABF\u6AC0\u6AC1\u6AC2\u6AC3\u6AC4"+
+            "\u6AC5\u6AC6\u6AC7\u6AC8\u6AC9\u6ACA\u6ACB\u6ACC"+
+            "\u6ACD\u6ACE\u6ACF\u6AD0\u6AD1\u6AD2\u6AD3\u6AD4"+
+            "\u6AD5\u6AD6\u6AD7\u6AD8\u6AD9\u6ADA\u6ADB\u6ADC"+
+            "\u6ADD\u6ADE\u6ADF\u6AE0\u6AE1\u6AE2\u6AE3\u6AE4"+
+            "\u6AE5\u6AE6\u6AE7\u6AE8\u6AE9\u6AEA\u6AEB\u6AEC"+
+            "\u6AED\u6AEE\u6AEF\u6AF0\u6AF1\u6AF2\u6AF3\u6AF4"+
+            "\u6AF5\u6AF6\u6AF7\u6AF8\u6AF9\u6AFA\u6AFB\u6AFC"+
+            "\u6AFD\u6AFE\u6AFF\u6B00\u6B01\u6B02\u6B03\u6B04"+
+            "\u6B05\u6B06\u6B07\u6B08\u6B09\u6B0A\u6B0B\u6B0C"+
+            "\u6B0D\u6B0E\u6B0F\u6B10\u6B11\u6B12\u6B13\u6B14"+
+            "\u6B15\u6B16\u6B17\u6B18\u6B19\u6B1A\u6B1B\u6B1C"+
+            "\u6B1D\u6B1E\u6B1F\u6B20\u6B21\u6B22\u6B23\u6B24"+
+            "\u6B25\u6B26\u6B27\u6B28\u6B29\u6B2A\u6B2B\u6B2C"+
+            "\u6B2D\u6B2E\u6B2F\u6B30\u6B31\u6B32\u6B33\u6B34"+
+            "\u6B35\u6B36\u6B37\u6B38\u6B39\u6B3A\u6B3B\u6B3C"+
+            "\u6B3D\u6B3E\u6B3F\u6B40\u6B41\u6B42\u6B43\u6B44"+
+            "\u6B45\u6B46\u6B47\u6B48\u6B49\u6B4A\u6B4B\u6B4C"+
+            "\u6B4D\u6B4E\u6B4F\u6B50\u6B51\u6B52\u6B53\u6B54"+
+            "\u6B55\u6B56\u6B57\u6B58\u6B59\u6B5A\u6B5B\u6B5C"+
+            "\u6B5D\u6B5E\u6B5F\u6B60\u6B61\u6B62\u6B63\u6B64"+
+            "\u6B65\u6B66\u6B67\u6B68\u6B69\u6B6A\u6B6B\u6B6C"+
+            "\u6B6D\u6B6E\u6B6F\u6B70\u6B71\u6B72\u6B73\u6B74"+
+            "\u6B75\u6B76\u6B77\u6B78\u6B79\u6B7A\u6B7B\u6B7C"+
+            "\u6B7D\u6B7E\u6B7F\u6B80\u6B81\u6B82\u6B83\u6B84"+
+            "\u6B85\u6B86\u6B87\u6B88\u6B89\u6B8A\u6B8B\u6B8C"+
+            "\u6B8D\u6B8E\u6B8F\u6B90\u6B91\u6B92\u6B93\u6B94"+
+            "\u6B95\u6B96\u6B97\u6B98\u6B99\u6B9A\u6B9B\u6B9C"+
+            "\u6B9D\u6B9E\u6B9F\u6BA0\u6BA1\u6BA2\u6BA3\u6BA4"+
+            "\u6BA5\u6BA6\u6BA7\u6BA8\u6BA9\u6BAA\u6BAB\u6BAC"+
+            "\u6BAD\u6BAE\u6BAF\u6BB0\u6BB1\u6BB2\u6BB3\u6BB4"+
+            "\u6BB5\u6BB6\u6BB7\u6BB8\u6BB9\u6BBA\u6BBB\u6BBC"+
+            "\u6BBD\u6BBE\u6BBF\u6BC0\u6BC1\u6BC2\u6BC3\u6BC4"+
+            "\u6BC5\u6BC6\u6BC7\u6BC8\u6BC9\u6BCA\u6BCB\u6BCC"+
+            "\u6BCD\u6BCE\u6BCF\u6BD0\u6BD1\u6BD2\u6BD3\u6BD4"+
+            "\u6BD5\u6BD6\u6BD7\u6BD8\u6BD9\u6BDA\u6BDB\u6BDC"+
+            "\u6BDD\u6BDE\u6BDF\u6BE0\u6BE1\u6BE2\u6BE3\u6BE4"+
+            "\u6BE5\u6BE6\u6BE7\u6BE8\u6BE9\u6BEA\u6BEB\u6BEC"+
+            "\u6BED\u6BEE\u6BEF\u6BF0\u6BF1\u6BF2\u6BF3\u6BF4"+
+            "\u6BF5\u6BF6\u6BF7\u6BF8\u6BF9\u6BFA\u6BFB\u6BFC"+
+            "\u6BFD\u6BFE\u6BFF\u6C00\u6C01\u6C02\u6C03\u6C04"+
+            "\u6C05\u6C06\u6C07\u6C08\u6C09\u6C0A\u6C0B\u6C0C"+
+            "\u6C0D\u6C0E\u6C0F\u6C10\u6C11\u6C12\u6C13\u6C14"+
+            "\u6C15\u6C16\u6C17\u6C18\u6C19\u6C1A\u6C1B\u6C1C"+
+            "\u6C1D\u6C1E\u6C1F\u6C20\u6C21\u6C22\u6C23\u6C24"+
+            "\u6C25\u6C26\u6C27\u6C28\u6C29\u6C2A\u6C2B\u6C2C"+
+            "\u6C2D\u6C2E\u6C2F\u6C30\u6C31\u6C32\u6C33\u6C34"+
+            "\u6C35\u6C36\u6C37\u6C38\u6C39\u6C3A\u6C3B\u6C3C"+
+            "\u6C3D\u6C3E\u6C3F\u6C40\u6C41\u6C42\u6C43\u6C44"+
+            "\u6C45\u6C46\u6C47\u6C48\u6C49\u6C4A\u6C4B\u6C4C"+
+            "\u6C4D\u6C4E\u6C4F\u6C50\u6C51\u6C52\u6C53\u6C54"+
+            "\u6C55\u6C56\u6C57\u6C58\u6C59\u6C5A\u6C5B\u6C5C"+
+            "\u6C5D\u6C5E\u6C5F\u6C60\u6C61\u6C62\u6C63\u6C64"+
+            "\u6C65\u6C66\u6C67\u6C68\u6C69\u6C6A\u6C6B\u6C6C"+
+            "\u6C6D\u6C6E\u6C6F\u6C70\u6C71\u6C72\u6C73\u6C74"+
+            "\u6C75\u6C76\u6C77\u6C78\u6C79\u6C7A\u6C7B\u6C7C"+
+            "\u6C7D\u6C7E\u6C7F\u6C80\u6C81\u6C82\u6C83\u6C84"+
+            "\u6C85\u6C86\u6C87\u6C88\u6C89\u6C8A\u6C8B\u6C8C"+
+            "\u6C8D\u6C8E\u6C8F\u6C90\u6C91\u6C92\u6C93\u6C94"+
+            "\u6C95\u6C96\u6C97\u6C98\u6C99\u6C9A\u6C9B\u6C9C"+
+            "\u6C9D\u6C9E\u6C9F\u6CA0\u6CA1\u6CA2\u6CA3\u6CA4"+
+            "\u6CA5\u6CA6\u6CA7\u6CA8\u6CA9\u6CAA\u6CAB\u6CAC"+
+            "\u6CAD\u6CAE\u6CAF\u6CB0\u6CB1\u6CB2\u6CB3\u6CB4"+
+            "\u6CB5\u6CB6\u6CB7\u6CB8\u6CB9\u6CBA\u6CBB\u6CBC"+
+            "\u6CBD\u6CBE\u6CBF\u6CC0\u6CC1\u6CC2\u6CC3\u6CC4"+
+            "\u6CC5\u6CC6\u6CC7\u6CC8\u6CC9\u6CCA\u6CCB\u6CCC"+
+            "\u6CCD\u6CCE\u6CCF\u6CD0\u6CD1\u6CD2\u6CD3\u6CD4"+
+            "\u6CD5\u6CD6\u6CD7\u6CD8\u6CD9\u6CDA\u6CDB\u6CDC"+
+            "\u6CDD\u6CDE\u6CDF\u6CE0\u6CE1\u6CE2\u6CE3\u6CE4"+
+            "\u6CE5\u6CE6\u6CE7\u6CE8\u6CE9\u6CEA\u6CEB\u6CEC"+
+            "\u6CED\u6CEE\u6CEF\u6CF0\u6CF1\u6CF2\u6CF3\u6CF4"+
+            "\u6CF5\u6CF6\u6CF7\u6CF8\u6CF9\u6CFA\u6CFB\u6CFC"+
+            "\u6CFD\u6CFE\u6CFF\u6D00\u6D01\u6D02\u6D03\u6D04"+
+            "\u6D05\u6D06\u6D07\u6D08\u6D09\u6D0A\u6D0B\u6D0C"+
+            "\u6D0D\u6D0E\u6D0F\u6D10\u6D11\u6D12\u6D13\u6D14"+
+            "\u6D15\u6D16\u6D17\u6D18\u6D19\u6D1A\u6D1B\u6D1C"+
+            "\u6D1D\u6D1E\u6D1F\u6D20\u6D21\u6D22\u6D23\u6D24"+
+            "\u6D25\u6D26\u6D27\u6D28\u6D29\u6D2A\u6D2B\u6D2C"+
+            "\u6D2D\u6D2E\u6D2F\u6D30\u6D31\u6D32\u6D33\u6D34"+
+            "\u6D35\u6D36\u6D37\u6D38\u6D39\u6D3A\u6D3B\u6D3C"+
+            "\u6D3D\u6D3E\u6D3F\u6D40\u6D41\u6D42\u6D43\u6D44"+
+            "\u6D45\u6D46\u6D47\u6D48\u6D49\u6D4A\u6D4B\u6D4C"+
+            "\u6D4D\u6D4E\u6D4F\u6D50\u6D51\u6D52\u6D53\u6D54"+
+            "\u6D55\u6D56\u6D57\u6D58\u6D59\u6D5A\u6D5B\u6D5C"+
+            "\u6D5D\u6D5E\u6D5F\u6D60\u6D61\u6D62\u6D63\u6D64"+
+            "\u6D65\u6D66\u6D67\u6D68\u6D69\u6D6A\u6D6B\u6D6C"+
+            "\u6D6D\u6D6E\u6D6F\u6D70\u6D71\u6D72\u6D73\u6D74"+
+            "\u6D75\u6D76\u6D77\u6D78\u6D79\u6D7A\u6D7B\u6D7C"+
+            "\u6D7D\u6D7E\u6D7F\u6D80\u6D81\u6D82\u6D83\u6D84"+
+            "\u6D85\u6D86\u6D87\u6D88\u6D89\u6D8A\u6D8B\u6D8C"+
+            "\u6D8D\u6D8E\u6D8F\u6D90\u6D91\u6D92\u6D93\u6D94"+
+            "\u6D95\u6D96\u6D97\u6D98\u6D99\u6D9A\u6D9B\u6D9C"+
+            "\u6D9D\u6D9E\u6D9F\u6DA0\u6DA1\u6DA2\u6DA3\u6DA4"+
+            "\u6DA5\u6DA6\u6DA7\u6DA8\u6DA9\u6DAA\u6DAB\u6DAC"+
+            "\u6DAD\u6DAE\u6DAF\u6DB0\u6DB1\u6DB2\u6DB3\u6DB4"+
+            "\u6DB5\u6DB6\u6DB7\u6DB8\u6DB9\u6DBA\u6DBB\u6DBC"+
+            "\u6DBD\u6DBE\u6DBF\u6DC0\u6DC1\u6DC2\u6DC3\u6DC4"+
+            "\u6DC5\u6DC6\u6DC7\u6DC8\u6DC9\u6DCA\u6DCB\u6DCC"+
+            "\u6DCD\u6DCE\u6DCF\u6DD0\u6DD1\u6DD2\u6DD3\u6DD4"+
+            "\u6DD5\u6DD6\u6DD7\u6DD8\u6DD9\u6DDA\u6DDB\u6DDC"+
+            "\u6DDD\u6DDE\u6DDF\u6DE0\u6DE1\u6DE2\u6DE3\u6DE4"+
+            "\u6DE5\u6DE6\u6DE7\u6DE8\u6DE9\u6DEA\u6DEB\u6DEC"+
+            "\u6DED\u6DEE\u6DEF\u6DF0\u6DF1\u6DF2\u6DF3\u6DF4"+
+            "\u6DF5\u6DF6\u6DF7\u6DF8\u6DF9\u6DFA\u6DFB\u6DFC"+
+            "\u6DFD\u6DFE\u6DFF\u6E00\u6E01\u6E02\u6E03\u6E04"+
+            "\u6E05\u6E06\u6E07\u6E08\u6E09\u6E0A\u6E0B\u6E0C"+
+            "\u6E0D\u6E0E\u6E0F\u6E10\u6E11\u6E12\u6E13\u6E14"+
+            "\u6E15\u6E16\u6E17\u6E18\u6E19\u6E1A\u6E1B\u6E1C"+
+            "\u6E1D\u6E1E\u6E1F\u6E20\u6E21\u6E22\u6E23\u6E24"+
+            "\u6E25\u6E26\u6E27\u6E28\u6E29\u6E2A\u6E2B\u6E2C"+
+            "\u6E2D\u6E2E\u6E2F\u6E30\u6E31\u6E32\u6E33\u6E34"+
+            "\u6E35\u6E36\u6E37\u6E38\u6E39\u6E3A\u6E3B\u6E3C"+
+            "\u6E3D\u6E3E\u6E3F\u6E40\u6E41\u6E42\u6E43\u6E44"+
+            "\u6E45\u6E46\u6E47\u6E48\u6E49\u6E4A\u6E4B\u6E4C"+
+            "\u6E4D\u6E4E\u6E4F\u6E50\u6E51\u6E52\u6E53\u6E54"+
+            "\u6E55\u6E56\u6E57\u6E58\u6E59\u6E5A\u6E5B\u6E5C"+
+            "\u6E5D\u6E5E\u6E5F\u6E60\u6E61\u6E62\u6E63\u6E64"+
+            "\u6E65\u6E66\u6E67\u6E68\u6E69\u6E6A\u6E6B\u6E6C"+
+            "\u6E6D\u6E6E\u6E6F\u6E70\u6E71\u6E72\u6E73\u6E74"+
+            "\u6E75\u6E76\u6E77\u6E78\u6E79\u6E7A\u6E7B\u6E7C"+
+            "\u6E7D\u6E7E\u6E7F\u6E80\u6E81\u6E82\u6E83\u6E84"+
+            "\u6E85\u6E86\u6E87\u6E88\u6E89\u6E8A\u6E8B\u6E8C"+
+            "\u6E8D\u6E8E\u6E8F\u6E90\u6E91\u6E92\u6E93\u6E94"+
+            "\u6E95\u6E96\u6E97\u6E98\u6E99\u6E9A\u6E9B\u6E9C"+
+            "\u6E9D\u6E9E\u6E9F\u6EA0\u6EA1\u6EA2\u6EA3\u6EA4"+
+            "\u6EA5\u6EA6\u6EA7\u6EA8\u6EA9\u6EAA\u6EAB\u6EAC"+
+            "\u6EAD\u6EAE\u6EAF\u6EB0\u6EB1\u6EB2\u6EB3\u6EB4"+
+            "\u6EB5\u6EB6\u6EB7\u6EB8\u6EB9\u6EBA\u6EBB\u6EBC"+
+            "\u6EBD\u6EBE\u6EBF\u6EC0\u6EC1\u6EC2\u6EC3\u6EC4"+
+            "\u6EC5\u6EC6\u6EC7\u6EC8\u6EC9\u6ECA\u6ECB\u6ECC"+
+            "\u6ECD\u6ECE\u6ECF\u6ED0\u6ED1\u6ED2\u6ED3\u6ED4"+
+            "\u6ED5\u6ED6\u6ED7\u6ED8\u6ED9\u6EDA\u6EDB\u6EDC"+
+            "\u6EDD\u6EDE\u6EDF\u6EE0\u6EE1\u6EE2\u6EE3\u6EE4"+
+            "\u6EE5\u6EE6\u6EE7\u6EE8\u6EE9\u6EEA\u6EEB\u6EEC"+
+            "\u6EED\u6EEE\u6EEF\u6EF0\u6EF1\u6EF2\u6EF3\u6EF4"+
+            "\u6EF5\u6EF6\u6EF7\u6EF8\u6EF9\u6EFA\u6EFB\u6EFC"+
+            "\u6EFD\u6EFE\u6EFF\u6F00\u6F01\u6F02\u6F03\u6F04"+
+            "\u6F05\u6F06\u6F07\u6F08\u6F09\u6F0A\u6F0B\u6F0C"+
+            "\u6F0D\u6F0E\u6F0F\u6F10\u6F11\u6F12\u6F13\u6F14"+
+            "\u6F15\u6F16\u6F17\u6F18\u6F19\u6F1A\u6F1B\u6F1C"+
+            "\u6F1D\u6F1E\u6F1F\u6F20\u6F21\u6F22\u6F23\u6F24"+
+            "\u6F25\u6F26\u6F27\u6F28\u6F29\u6F2A\u6F2B\u6F2C"+
+            "\u6F2D\u6F2E\u6F2F\u6F30\u6F31\u6F32\u6F33\u6F34"+
+            "\u6F35\u6F36\u6F37\u6F38\u6F39\u6F3A\u6F3B\u6F3C"+
+            "\u6F3D\u6F3E\u6F3F\u6F40\u6F41\u6F42\u6F43\u6F44"+
+            "\u6F45\u6F46\u6F47\u6F48\u6F49\u6F4A\u6F4B\u6F4C"+
+            "\u6F4D\u6F4E\u6F4F\u6F50\u6F51\u6F52\u6F53\u6F54"+
+            "\u6F55\u6F56\u6F57\u6F58\u6F59\u6F5A\u6F5B\u6F5C"+
+            "\u6F5D\u6F5E\u6F5F\u6F60\u6F61\u6F62\u6F63\u6F64"+
+            "\u6F65\u6F66\u6F67\u6F68\u6F69\u6F6A\u6F6B\u6F6C"+
+            "\u6F6D\u6F6E\u6F6F\u6F70\u6F71\u6F72\u6F73\u6F74"+
+            "\u6F75\u6F76\u6F77\u6F78\u6F79\u6F7A\u6F7B\u6F7C"+
+            "\u6F7D\u6F7E\u6F7F\u6F80\u6F81\u6F82\u6F83\u6F84"+
+            "\u6F85\u6F86\u6F87\u6F88\u6F89\u6F8A\u6F8B\u6F8C"+
+            "\u6F8D\u6F8E\u6F8F\u6F90\u6F91\u6F92\u6F93\u6F94"+
+            "\u6F95\u6F96\u6F97\u6F98\u6F99\u6F9A\u6F9B\u6F9C"+
+            "\u6F9D\u6F9E\u6F9F\u6FA0\u6FA1\u6FA2\u6FA3\u6FA4"+
+            "\u6FA5\u6FA6\u6FA7\u6FA8\u6FA9\u6FAA\u6FAB\u6FAC"+
+            "\u6FAD\u6FAE\u6FAF\u6FB0\u6FB1\u6FB2\u6FB3\u6FB4"+
+            "\u6FB5\u6FB6\u6FB7\u6FB8\u6FB9\u6FBA\u6FBB\u6FBC"+
+            "\u6FBD\u6FBE\u6FBF\u6FC0\u6FC1\u6FC2\u6FC3\u6FC4"+
+            "\u6FC5\u6FC6\u6FC7\u6FC8\u6FC9\u6FCA\u6FCB\u6FCC"+
+            "\u6FCD\u6FCE\u6FCF\u6FD0\u6FD1\u6FD2\u6FD3\u6FD4"+
+            "\u6FD5\u6FD6\u6FD7\u6FD8\u6FD9\u6FDA\u6FDB\u6FDC"+
+            "\u6FDD\u6FDE\u6FDF\u6FE0\u6FE1\u6FE2\u6FE3\u6FE4"+
+            "\u6FE5\u6FE6\u6FE7\u6FE8\u6FE9\u6FEA\u6FEB\u6FEC"+
+            "\u6FED\u6FEE\u6FEF\u6FF0\u6FF1\u6FF2\u6FF3\u6FF4"+
+            "\u6FF5\u6FF6\u6FF7\u6FF8\u6FF9\u6FFA\u6FFB\u6FFC"+
+            "\u6FFD\u6FFE\u6FFF\u7000\u7001\u7002\u7003\u7004"+
+            "\u7005\u7006\u7007\u7008\u7009\u700A\u700B\u700C"+
+            "\u700D\u700E\u700F\u7010\u7011\u7012\u7013\u7014"+
+            "\u7015\u7016\u7017\u7018\u7019\u701A\u701B\u701C"+
+            "\u701D\u701E\u701F\u7020\u7021\u7022\u7023\u7024"+
+            "\u7025\u7026\u7027\u7028\u7029\u702A\u702B\u702C"+
+            "\u702D\u702E\u702F\u7030\u7031\u7032\u7033\u7034"+
+            "\u7035\u7036\u7037\u7038\u7039\u703A\u703B\u703C"+
+            "\u703D\u703E\u703F\u7040\u7041\u7042\u7043\u7044"+
+            "\u7045\u7046\u7047\u7048\u7049\u704A\u704B\u704C"+
+            "\u704D\u704E\u704F\u7050\u7051\u7052\u7053\u7054"+
+            "\u7055\u7056\u7057\u7058\u7059\u705A\u705B\u705C"+
+            "\u705D\u705E\u705F\u7060\u7061\u7062\u7063\u7064"+
+            "\u7065\u7066\u7067\u7068\u7069\u706A\u706B\u706C"+
+            "\u706D\u706E\u706F\u7070\u7071\u7072\u7073\u7074"+
+            "\u7075\u7076\u7077\u7078\u7079\u707A\u707B\u707C"+
+            "\u707D\u707E\u707F\u7080\u7081\u7082\u7083\u7084"+
+            "\u7085\u7086\u7087\u7088\u7089\u708A\u708B\u708C"+
+            "\u708D\u708E\u708F\u7090\u7091\u7092\u7093\u7094"+
+            "\u7095\u7096\u7097\u7098\u7099\u709A\u709B\u709C"+
+            "\u709D\u709E\u709F\u70A0\u70A1\u70A2\u70A3\u70A4"+
+            "\u70A5\u70A6\u70A7\u70A8\u70A9\u70AA\u70AB\u70AC"+
+            "\u70AD\u70AE\u70AF\u70B0\u70B1\u70B2\u70B3\u70B4"+
+            "\u70B5\u70B6\u70B7\u70B8\u70B9\u70BA\u70BB\u70BC"+
+            "\u70BD\u70BE\u70BF\u70C0\u70C1\u70C2\u70C3\u70C4"+
+            "\u70C5\u70C6\u70C7\u70C8\u70C9\u70CA\u70CB\u70CC"+
+            "\u70CD\u70CE\u70CF\u70D0\u70D1\u70D2\u70D3\u70D4"+
+            "\u70D5\u70D6\u70D7\u70D8\u70D9\u70DA\u70DB\u70DC"+
+            "\u70DD\u70DE\u70DF\u70E0\u70E1\u70E2\u70E3\u70E4"+
+            "\u70E5\u70E6\u70E7\u70E8\u70E9\u70EA\u70EB\u70EC"+
+            "\u70ED\u70EE\u70EF\u70F0\u70F1\u70F2\u70F3\u70F4"+
+            "\u70F5\u70F6\u70F7\u70F8\u70F9\u70FA\u70FB\u70FC"+
+            "\u70FD\u70FE\u70FF\u7100\u7101\u7102\u7103\u7104"+
+            "\u7105\u7106\u7107\u7108\u7109\u710A\u710B\u710C"+
+            "\u710D\u710E\u710F\u7110\u7111\u7112\u7113\u7114"+
+            "\u7115\u7116\u7117\u7118\u7119\u711A\u711B\u711C"+
+            "\u711D\u711E\u711F\u7120\u7121\u7122\u7123\u7124"+
+            "\u7125\u7126\u7127\u7128\u7129\u712A\u712B\u712C"+
+            "\u712D\u712E\u712F\u7130\u7131\u7132\u7133\u7134"+
+            "\u7135\u7136\u7137\u7138\u7139\u713A\u713B\u713C"+
+            "\u713D\u713E\u713F\u7140\u7141\u7142\u7143\u7144"+
+            "\u7145\u7146\u7147\u7148\u7149\u714A\u714B\u714C"+
+            "\u714D\u714E\u714F\u7150\u7151\u7152\u7153\u7154"+
+            "\u7155\u7156\u7157\u7158\u7159\u715A\u715B\u715C"+
+            "\u715D\u715E\u715F\u7160\u7161\u7162\u7163\u7164"+
+            "\u7165\u7166\u7167\u7168\u7169\u716A\u716B\u716C"+
+            "\u716D\u716E\u716F\u7170\u7171\u7172\u7173\u7174"+
+            "\u7175\u7176\u7177\u7178\u7179\u717A\u717B\u717C"+
+            "\u717D\u717E\u717F\u7180\u7181\u7182\u7183\u7184"+
+            "\u7185\u7186\u7187\u7188\u7189\u718A\u718B\u718C"+
+            "\u718D\u718E\u718F\u7190\u7191\u7192\u7193\u7194"+
+            "\u7195\u7196\u7197\u7198\u7199\u719A\u719B\u719C"+
+            "\u719D\u719E\u719F\u71A0\u71A1\u71A2\u71A3\u71A4"+
+            "\u71A5\u71A6\u71A7\u71A8\u71A9\u71AA\u71AB\u71AC"+
+            "\u71AD\u71AE\u71AF\u71B0\u71B1\u71B2\u71B3\u71B4"+
+            "\u71B5\u71B6\u71B7\u71B8\u71B9\u71BA\u71BB\u71BC"+
+            "\u71BD\u71BE\u71BF\u71C0\u71C1\u71C2\u71C3\u71C4"+
+            "\u71C5\u71C6\u71C7\u71C8\u71C9\u71CA\u71CB\u71CC"+
+            "\u71CD\u71CE\u71CF\u71D0\u71D1\u71D2\u71D3\u71D4"+
+            "\u71D5\u71D6\u71D7\u71D8\u71D9\u71DA\u71DB\u71DC"+
+            "\u71DD\u71DE\u71DF\u71E0\u71E1\u71E2\u71E3\u71E4"+
+            "\u71E5\u71E6\u71E7\u71E8\u71E9\u71EA\u71EB\u71EC"+
+            "\u71ED\u71EE\u71EF\u71F0\u71F1\u71F2\u71F3\u71F4"+
+            "\u71F5\u71F6\u71F7\u71F8\u71F9\u71FA\u71FB\u71FC"+
+            "\u71FD\u71FE\u71FF\u7200\u7201\u7202\u7203\u7204"+
+            "\u7205\u7206\u7207\u7208\u7209\u720A\u720B\u720C"+
+            "\u720D\u720E\u720F\u7210\u7211\u7212\u7213\u7214"+
+            "\u7215\u7216\u7217\u7218\u7219\u721A\u721B\u721C"+
+            "\u721D\u721E\u721F\u7220\u7221\u7222\u7223\u7224"+
+            "\u7225\u7226\u7227\u7228\u7229\u722A\u722B\u722C"+
+            "\u722D\u722E\u722F\u7230\u7231\u7232\u7233\u7234"+
+            "\u7235\u7236\u7237\u7238\u7239\u723A\u723B\u723C"+
+            "\u723D\u723E\u723F\u7240\u7241\u7242\u7243\u7244"+
+            "\u7245\u7246\u7247\u7248\u7249\u724A\u724B\u724C"+
+            "\u724D\u724E\u724F\u7250\u7251\u7252\u7253\u7254"+
+            "\u7255\u7256\u7257\u7258\u7259\u725A\u725B\u725C"+
+            "\u725D\u725E\u725F\u7260\u7261\u7262\u7263\u7264"+
+            "\u7265\u7266\u7267\u7268\u7269\u726A\u726B\u726C"+
+            "\u726D\u726E\u726F\u7270\u7271\u7272\u7273\u7274"+
+            "\u7275\u7276\u7277\u7278\u7279\u727A\u727B\u727C"+
+            "\u727D\u727E\u727F\u7280\u7281\u7282\u7283\u7284"+
+            "\u7285\u7286\u7287\u7288\u7289\u728A\u728B\u728C"+
+            "\u728D\u728E\u728F\u7290\u7291\u7292\u7293\u7294"+
+            "\u7295\u7296\u7297\u7298\u7299\u729A\u729B\u729C"+
+            "\u729D\u729E\u729F\u72A0\u72A1\u72A2\u72A3\u72A4"+
+            "\u72A5\u72A6\u72A7\u72A8\u72A9\u72AA\u72AB\u72AC"+
+            "\u72AD\u72AE\u72AF\u72B0\u72B1\u72B2\u72B3\u72B4"+
+            "\u72B5\u72B6\u72B7\u72B8\u72B9\u72BA\u72BB\u72BC"+
+            "\u72BD\u72BE\u72BF\u72C0\u72C1\u72C2\u72C3\u72C4"+
+            "\u72C5\u72C6\u72C7\u72C8\u72C9\u72CA\u72CB\u72CC"+
+            "\u72CD\u72CE\u72CF\u72D0\u72D1\u72D2\u72D3\u72D4"+
+            "\u72D5\u72D6\u72D7\u72D8\u72D9\u72DA\u72DB\u72DC"+
+            "\u72DD\u72DE\u72DF\u72E0\u72E1\u72E2\u72E3\u72E4"+
+            "\u72E5\u72E6\u72E7\u72E8\u72E9\u72EA\u72EB\u72EC"+
+            "\u72ED\u72EE\u72EF\u72F0\u72F1\u72F2\u72F3\u72F4"+
+            "\u72F5\u72F6\u72F7\u72F8\u72F9\u72FA\u72FB\u72FC"+
+            "\u72FD\u72FE\u72FF\u7300\u7301\u7302\u7303\u7304"+
+            "\u7305\u7306\u7307\u7308\u7309\u730A\u730B\u730C"+
+            "\u730D\u730E\u730F\u7310\u7311\u7312\u7313\u7314"+
+            "\u7315\u7316\u7317\u7318\u7319\u731A\u731B\u731C"+
+            "\u731D\u731E\u731F\u7320\u7321\u7322\u7323\u7324"+
+            "\u7325\u7326\u7327\u7328\u7329\u732A\u732B\u732C"+
+            "\u732D\u732E\u732F\u7330\u7331\u7332\u7333\u7334"+
+            "\u7335\u7336\u7337\u7338\u7339\u733A\u733B\u733C"+
+            "\u733D\u733E\u733F\u7340\u7341\u7342\u7343\u7344"+
+            "\u7345\u7346\u7347\u7348\u7349\u734A\u734B\u734C"+
+            "\u734D\u734E\u734F\u7350\u7351\u7352\u7353\u7354"+
+            "\u7355\u7356\u7357\u7358\u7359\u735A\u735B\u735C"+
+            "\u735D\u735E\u735F\u7360\u7361\u7362\u7363\u7364"+
+            "\u7365\u7366\u7367\u7368\u7369\u736A\u736B\u736C"+
+            "\u736D\u736E\u736F\u7370\u7371\u7372\u7373\u7374"+
+            "\u7375\u7376\u7377\u7378\u7379\u737A\u737B\u737C"+
+            "\u737D\u737E\u737F\u7380\u7381\u7382\u7383\u7384"+
+            "\u7385\u7386\u7387\u7388\u7389\u738A\u738B\u738C"+
+            "\u738D\u738E\u738F\u7390\u7391\u7392\u7393\u7394"+
+            "\u7395\u7396\u7397\u7398\u7399\u739A\u739B\u739C"+
+            "\u739D\u739E\u739F\u73A0\u73A1\u73A2\u73A3\u73A4"+
+            "\u73A5\u73A6\u73A7\u73A8\u73A9\u73AA\u73AB\u73AC"+
+            "\u73AD\u73AE\u73AF\u73B0\u73B1\u73B2\u73B3\u73B4"+
+            "\u73B5\u73B6\u73B7\u73B8\u73B9\u73BA\u73BB\u73BC"+
+            "\u73BD\u73BE\u73BF\u73C0\u73C1\u73C2\u73C3\u73C4"+
+            "\u73C5\u73C6\u73C7\u73C8\u73C9\u73CA\u73CB\u73CC"+
+            "\u73CD\u73CE\u73CF\u73D0\u73D1\u73D2\u73D3\u73D4"+
+            "\u73D5\u73D6\u73D7\u73D8\u73D9\u73DA\u73DB\u73DC"+
+            "\u73DD\u73DE\u73DF\u73E0\u73E1\u73E2\u73E3\u73E4"+
+            "\u73E5\u73E6\u73E7\u73E8\u73E9\u73EA\u73EB\u73EC"+
+            "\u73ED\u73EE\u73EF\u73F0\u73F1\u73F2\u73F3\u73F4"+
+            "\u73F5\u73F6\u73F7\u73F8\u73F9\u73FA\u73FB\u73FC"+
+            "\u73FD\u73FE\u73FF\u7400\u7401\u7402\u7403\u7404"+
+            "\u7405\u7406\u7407\u7408\u7409\u740A\u740B\u740C"+
+            "\u740D\u740E\u740F\u7410\u7411\u7412\u7413\u7414"+
+            "\u7415\u7416\u7417\u7418\u7419\u741A\u741B\u741C"+
+            "\u741D\u741E\u741F\u7420\u7421\u7422\u7423\u7424"+
+            "\u7425\u7426\u7427\u7428\u7429\u742A\u742B\u742C"+
+            "\u742D\u742E\u742F\u7430\u7431\u7432\u7433\u7434"+
+            "\u7435\u7436\u7437\u7438\u7439\u743A\u743B\u743C"+
+            "\u743D\u743E\u743F\u7440\u7441\u7442\u7443\u7444"+
+            "\u7445\u7446\u7447\u7448\u7449\u744A\u744B\u744C"+
+            "\u744D\u744E\u744F\u7450\u7451\u7452\u7453\u7454"+
+            "\u7455\u7456\u7457\u7458\u7459\u745A\u745B\u745C"+
+            "\u745D\u745E\u745F\u7460\u7461\u7462\u7463\u7464"+
+            "\u7465\u7466\u7467\u7468\u7469\u746A\u746B\u746C"+
+            "\u746D\u746E\u746F\u7470\u7471\u7472\u7473\u7474"+
+            "\u7475\u7476\u7477\u7478\u7479\u747A\u747B\u747C"+
+            "\u747D\u747E\u747F\u7480\u7481\u7482\u7483\u7484"+
+            "\u7485\u7486\u7487\u7488\u7489\u748A\u748B\u748C"+
+            "\u748D\u748E\u748F\u7490\u7491\u7492\u7493\u7494"+
+            "\u7495\u7496\u7497\u7498\u7499\u749A\u749B\u749C"+
+            "\u749D\u749E\u749F\u74A0\u74A1\u74A2\u74A3\u74A4"+
+            "\u74A5\u74A6\u74A7\u74A8\u74A9\u74AA\u74AB\u74AC"+
+            "\u74AD\u74AE\u74AF\u74B0\u74B1\u74B2\u74B3\u74B4"+
+            "\u74B5\u74B6\u74B7\u74B8\u74B9\u74BA\u74BB\u74BC"+
+            "\u74BD\u74BE\u74BF\u74C0\u74C1\u74C2\u74C3\u74C4"+
+            "\u74C5\u74C6\u74C7\u74C8\u74C9\u74CA\u74CB\u74CC"+
+            "\u74CD\u74CE\u74CF\u74D0\u74D1\u74D2\u74D3\u74D4"+
+            "\u74D5\u74D6\u74D7\u74D8\u74D9\u74DA\u74DB\u74DC"+
+            "\u74DD\u74DE\u74DF\u74E0\u74E1\u74E2\u74E3\u74E4"+
+            "\u74E5\u74E6\u74E7\u74E8\u74E9\u74EA\u74EB\u74EC"+
+            "\u74ED\u74EE\u74EF\u74F0\u74F1\u74F2\u74F3\u74F4"+
+            "\u74F5\u74F6\u74F7\u74F8\u74F9\u74FA\u74FB\u74FC"+
+            "\u74FD\u74FE\u74FF\u7500\u7501\u7502\u7503\u7504"+
+            "\u7505\u7506\u7507\u7508\u7509\u750A\u750B\u750C"+
+            "\u750D\u750E\u750F\u7510\u7511\u7512\u7513\u7514"+
+            "\u7515\u7516\u7517\u7518\u7519\u751A\u751B\u751C"+
+            "\u751D\u751E\u751F\u7520\u7521\u7522\u7523\u7524"+
+            "\u7525\u7526\u7527\u7528\u7529\u752A\u752B\u752C"+
+            "\u752D\u752E\u752F\u7530\u7531\u7532\u7533\u7534"+
+            "\u7535\u7536\u7537\u7538\u7539\u753A\u753B\u753C"+
+            "\u753D\u753E\u753F\u7540\u7541\u7542\u7543\u7544"+
+            "\u7545\u7546\u7547\u7548\u7549\u754A\u754B\u754C"+
+            "\u754D\u754E\u754F\u7550\u7551\u7552\u7553\u7554"+
+            "\u7555\u7556\u7557\u7558\u7559\u755A\u755B\u755C"+
+            "\u755D\u755E\u755F\u7560\u7561\u7562\u7563\u7564"+
+            "\u7565\u7566\u7567\u7568\u7569\u756A\u756B\u756C"+
+            "\u756D\u756E\u756F\u7570\u7571\u7572\u7573\u7574"+
+            "\u7575\u7576\u7577\u7578\u7579\u757A\u757B\u757C"+
+            "\u757D\u757E\u757F\u7580\u7581\u7582\u7583\u7584"+
+            "\u7585\u7586\u7587\u7588\u7589\u758A\u758B\u758C"+
+            "\u758D\u758E\u758F\u7590\u7591\u7592\u7593\u7594"+
+            "\u7595\u7596\u7597\u7598\u7599\u759A\u759B\u759C"+
+            "\u759D\u759E\u759F\u75A0\u75A1\u75A2\u75A3\u75A4"+
+            "\u75A5\u75A6\u75A7\u75A8\u75A9\u75AA\u75AB\u75AC"+
+            "\u75AD\u75AE\u75AF\u75B0\u75B1\u75B2\u75B3\u75B4"+
+            "\u75B5\u75B6\u75B7\u75B8\u75B9\u75BA\u75BB\u75BC"+
+            "\u75BD\u75BE\u75BF\u75C0\u75C1\u75C2\u75C3\u75C4"+
+            "\u75C5\u75C6\u75C7\u75C8\u75C9\u75CA\u75CB\u75CC"+
+            "\u75CD\u75CE\u75CF\u75D0\u75D1\u75D2\u75D3\u75D4"+
+            "\u75D5\u75D6\u75D7\u75D8\u75D9\u75DA\u75DB\u75DC"+
+            "\u75DD\u75DE\u75DF\u75E0\u75E1\u75E2\u75E3\u75E4"+
+            "\u75E5\u75E6\u75E7\u75E8\u75E9\u75EA\u75EB\u75EC"+
+            "\u75ED\u75EE\u75EF\u75F0\u75F1\u75F2\u75F3\u75F4"+
+            "\u75F5\u75F6\u75F7\u75F8\u75F9\u75FA\u75FB\u75FC"+
+            "\u75FD\u75FE\u75FF\u7600\u7601\u7602\u7603\u7604"+
+            "\u7605\u7606\u7607\u7608\u7609\u760A\u760B\u760C"+
+            "\u760D\u760E\u760F\u7610\u7611\u7612\u7613\u7614"+
+            "\u7615\u7616\u7617\u7618\u7619\u761A\u761B\u761C"+
+            "\u761D\u761E\u761F\u7620\u7621\u7622\u7623\u7624"+
+            "\u7625\u7626\u7627\u7628\u7629\u762A\u762B\u762C"+
+            "\u762D\u762E\u762F\u7630\u7631\u7632\u7633\u7634"+
+            "\u7635\u7636\u7637\u7638\u7639\u763A\u763B\u763C"+
+            "\u763D\u763E\u763F\u7640\u7641\u7642\u7643\u7644"+
+            "\u7645\u7646\u7647\u7648\u7649\u764A\u764B\u764C"+
+            "\u764D\u764E\u764F\u7650\u7651\u7652\u7653\u7654"+
+            "\u7655\u7656\u7657\u7658\u7659\u765A\u765B\u765C"+
+            "\u765D\u765E\u765F\u7660\u7661\u7662\u7663\u7664"+
+            "\u7665\u7666\u7667\u7668\u7669\u766A\u766B\u766C"+
+            "\u766D\u766E\u766F\u7670\u7671\u7672\u7673\u7674"+
+            "\u7675\u7676\u7677\u7678\u7679\u767A\u767B\u767C"+
+            "\u767D\u767E\u767F\u7680\u7681\u7682\u7683\u7684"+
+            "\u7685\u7686\u7687\u7688\u7689\u768A\u768B\u768C"+
+            "\u768D\u768E\u768F\u7690\u7691\u7692\u7693\u7694"+
+            "\u7695\u7696\u7697\u7698\u7699\u769A\u769B\u769C"+
+            "\u769D\u769E\u769F\u76A0\u76A1\u76A2\u76A3\u76A4"+
+            "\u76A5\u76A6\u76A7\u76A8\u76A9\u76AA\u76AB\u76AC"+
+            "\u76AD\u76AE\u76AF\u76B0\u76B1\u76B2\u76B3\u76B4"+
+            "\u76B5\u76B6\u76B7\u76B8\u76B9\u76BA\u76BB\u76BC"+
+            "\u76BD\u76BE\u76BF\u76C0\u76C1\u76C2\u76C3\u76C4"+
+            "\u76C5\u76C6\u76C7\u76C8\u76C9\u76CA\u76CB\u76CC"+
+            "\u76CD\u76CE\u76CF\u76D0\u76D1\u76D2\u76D3\u76D4"+
+            "\u76D5\u76D6\u76D7\u76D8\u76D9\u76DA\u76DB\u76DC"+
+            "\u76DD\u76DE\u76DF\u76E0\u76E1\u76E2\u76E3\u76E4"+
+            "\u76E5\u76E6\u76E7\u76E8\u76E9\u76EA\u76EB\u76EC"+
+            "\u76ED\u76EE\u76EF\u76F0\u76F1\u76F2\u76F3\u76F4"+
+            "\u76F5\u76F6\u76F7\u76F8\u76F9\u76FA\u76FB\u76FC"+
+            "\u76FD\u76FE\u76FF\u7700\u7701\u7702\u7703\u7704"+
+            "\u7705\u7706\u7707\u7708\u7709\u770A\u770B\u770C"+
+            "\u770D\u770E\u770F\u7710\u7711\u7712\u7713\u7714"+
+            "\u7715\u7716\u7717\u7718\u7719\u771A\u771B\u771C"+
+            "\u771D\u771E\u771F\u7720\u7721\u7722\u7723\u7724"+
+            "\u7725\u7726\u7727\u7728\u7729\u772A\u772B\u772C"+
+            "\u772D\u772E\u772F\u7730\u7731\u7732\u7733\u7734"+
+            "\u7735\u7736\u7737\u7738\u7739\u773A\u773B\u773C"+
+            "\u773D\u773E\u773F\u7740\u7741\u7742\u7743\u7744"+
+            "\u7745\u7746\u7747\u7748\u7749\u774A\u774B\u774C"+
+            "\u774D\u774E\u774F\u7750\u7751\u7752\u7753\u7754"+
+            "\u7755\u7756\u7757\u7758\u7759\u775A\u775B\u775C"+
+            "\u775D\u775E\u775F\u7760\u7761\u7762\u7763\u7764"+
+            "\u7765\u7766\u7767\u7768\u7769\u776A\u776B\u776C"+
+            "\u776D\u776E\u776F\u7770\u7771\u7772\u7773\u7774"+
+            "\u7775\u7776\u7777\u7778\u7779\u777A\u777B\u777C"+
+            "\u777D\u777E\u777F\u7780\u7781\u7782\u7783\u7784"+
+            "\u7785\u7786\u7787\u7788\u7789\u778A\u778B\u778C"+
+            "\u778D\u778E\u778F\u7790\u7791\u7792\u7793\u7794"+
+            "\u7795\u7796\u7797\u7798\u7799\u779A\u779B\u779C"+
+            "\u779D\u779E\u779F\u77A0\u77A1\u77A2\u77A3\u77A4"+
+            "\u77A5\u77A6\u77A7\u77A8\u77A9\u77AA\u77AB\u77AC"+
+            "\u77AD\u77AE\u77AF\u77B0\u77B1\u77B2\u77B3\u77B4"+
+            "\u77B5\u77B6\u77B7\u77B8\u77B9\u77BA\u77BB\u77BC"+
+            "\u77BD\u77BE\u77BF\u77C0\u77C1\u77C2\u77C3\u77C4"+
+            "\u77C5\u77C6\u77C7\u77C8\u77C9\u77CA\u77CB\u77CC"+
+            "\u77CD\u77CE\u77CF\u77D0\u77D1\u77D2\u77D3\u77D4"+
+            "\u77D5\u77D6\u77D7\u77D8\u77D9\u77DA\u77DB\u77DC"+
+            "\u77DD\u77DE\u77DF\u77E0\u77E1\u77E2\u77E3\u77E4"+
+            "\u77E5\u77E6\u77E7\u77E8\u77E9\u77EA\u77EB\u77EC"+
+            "\u77ED\u77EE\u77EF\u77F0\u77F1\u77F2\u77F3\u77F4"+
+            "\u77F5\u77F6\u77F7\u77F8\u77F9\u77FA\u77FB\u77FC"+
+            "\u77FD\u77FE\u77FF\u7800\u7801\u7802\u7803\u7804"+
+            "\u7805\u7806\u7807\u7808\u7809\u780A\u780B\u780C"+
+            "\u780D\u780E\u780F\u7810\u7811\u7812\u7813\u7814"+
+            "\u7815\u7816\u7817\u7818\u7819\u781A\u781B\u781C"+
+            "\u781D\u781E\u781F\u7820\u7821\u7822\u7823\u7824"+
+            "\u7825\u7826\u7827\u7828\u7829\u782A\u782B\u782C"+
+            "\u782D\u782E\u782F\u7830\u7831\u7832\u7833\u7834"+
+            "\u7835\u7836\u7837\u7838\u7839\u783A\u783B\u783C"+
+            "\u783D\u783E\u783F\u7840\u7841\u7842\u7843\u7844"+
+            "\u7845\u7846\u7847\u7848\u7849\u784A\u784B\u784C"+
+            "\u784D\u784E\u784F\u7850\u7851\u7852\u7853\u7854"+
+            "\u7855\u7856\u7857\u7858\u7859\u785A\u785B\u785C"+
+            "\u785D\u785E\u785F\u7860\u7861\u7862\u7863\u7864"+
+            "\u7865\u7866\u7867\u7868\u7869\u786A\u786B\u786C"+
+            "\u786D\u786E\u786F\u7870\u7871\u7872\u7873\u7874"+
+            "\u7875\u7876\u7877\u7878\u7879\u787A\u787B\u787C"+
+            "\u787D\u787E\u787F\u7880\u7881\u7882\u7883\u7884"+
+            "\u7885\u7886\u7887\u7888\u7889\u788A\u788B\u788C"+
+            "\u788D\u788E\u788F\u7890\u7891\u7892\u7893\u7894"+
+            "\u7895\u7896\u7897\u7898\u7899\u789A\u789B\u789C"+
+            "\u789D\u789E\u789F\u78A0\u78A1\u78A2\u78A3\u78A4"+
+            "\u78A5\u78A6\u78A7\u78A8\u78A9\u78AA\u78AB\u78AC"+
+            "\u78AD\u78AE\u78AF\u78B0\u78B1\u78B2\u78B3\u78B4"+
+            "\u78B5\u78B6\u78B7\u78B8\u78B9\u78BA\u78BB\u78BC"+
+            "\u78BD\u78BE\u78BF\u78C0\u78C1\u78C2\u78C3\u78C4"+
+            "\u78C5\u78C6\u78C7\u78C8\u78C9\u78CA\u78CB\u78CC"+
+            "\u78CD\u78CE\u78CF\u78D0\u78D1\u78D2\u78D3\u78D4"+
+            "\u78D5\u78D6\u78D7\u78D8\u78D9\u78DA\u78DB\u78DC"+
+            "\u78DD\u78DE\u78DF\u78E0\u78E1\u78E2\u78E3\u78E4"+
+            "\u78E5\u78E6\u78E7\u78E8\u78E9\u78EA\u78EB\u78EC"+
+            "\u78ED\u78EE\u78EF\u78F0\u78F1\u78F2\u78F3\u78F4"+
+            "\u78F5\u78F6\u78F7\u78F8\u78F9\u78FA\u78FB\u78FC"+
+            "\u78FD\u78FE\u78FF\u7900\u7901\u7902\u7903\u7904"+
+            "\u7905\u7906\u7907\u7908\u7909\u790A\u790B\u790C"+
+            "\u790D\u790E\u790F\u7910\u7911\u7912\u7913\u7914"+
+            "\u7915\u7916\u7917\u7918\u7919\u791A\u791B\u791C"+
+            "\u791D\u791E\u791F\u7920\u7921\u7922\u7923\u7924"+
+            "\u7925\u7926\u7927\u7928\u7929\u792A\u792B\u792C"+
+            "\u792D\u792E\u792F\u7930\u7931\u7932\u7933\u7934"+
+            "\u7935\u7936\u7937\u7938\u7939\u793A\u793B\u793C"+
+            "\u793D\u793E\u793F\u7940\u7941\u7942\u7943\u7944"+
+            "\u7945\u7946\u7947\u7948\u7949\u794A\u794B\u794C"+
+            "\u794D\u794E\u794F\u7950\u7951\u7952\u7953\u7954"+
+            "\u7955\u7956\u7957\u7958\u7959\u795A\u795B\u795C"+
+            "\u795D\u795E\u795F\u7960\u7961\u7962\u7963\u7964"+
+            "\u7965\u7966\u7967\u7968\u7969\u796A\u796B\u796C"+
+            "\u796D\u796E\u796F\u7970\u7971\u7972\u7973\u7974"+
+            "\u7975\u7976\u7977\u7978\u7979\u797A\u797B\u797C"+
+            "\u797D\u797E\u797F\u7980\u7981\u7982\u7983\u7984"+
+            "\u7985\u7986\u7987\u7988\u7989\u798A\u798B\u798C"+
+            "\u798D\u798E\u798F\u7990\u7991\u7992\u7993\u7994"+
+            "\u7995\u7996\u7997\u7998\u7999\u799A\u799B\u799C"+
+            "\u799D\u799E\u799F\u79A0\u79A1\u79A2\u79A3\u79A4"+
+            "\u79A5\u79A6\u79A7\u79A8\u79A9\u79AA\u79AB\u79AC"+
+            "\u79AD\u79AE\u79AF\u79B0\u79B1\u79B2\u79B3\u79B4"+
+            "\u79B5\u79B6\u79B7\u79B8\u79B9\u79BA\u79BB\u79BC"+
+            "\u79BD\u79BE\u79BF\u79C0\u79C1\u79C2\u79C3\u79C4"+
+            "\u79C5\u79C6\u79C7\u79C8\u79C9\u79CA\u79CB\u79CC"+
+            "\u79CD\u79CE\u79CF\u79D0\u79D1\u79D2\u79D3\u79D4"+
+            "\u79D5\u79D6\u79D7\u79D8\u79D9\u79DA\u79DB\u79DC"+
+            "\u79DD\u79DE\u79DF\u79E0\u79E1\u79E2\u79E3\u79E4"+
+            "\u79E5\u79E6\u79E7\u79E8\u79E9\u79EA\u79EB\u79EC"+
+            "\u79ED\u79EE\u79EF\u79F0\u79F1\u79F2\u79F3\u79F4"+
+            "\u79F5\u79F6\u79F7\u79F8\u79F9\u79FA\u79FB\u79FC"+
+            "\u79FD\u79FE\u79FF\u7A00\u7A01\u7A02\u7A03\u7A04"+
+            "\u7A05\u7A06\u7A07\u7A08\u7A09\u7A0A\u7A0B\u7A0C"+
+            "\u7A0D\u7A0E\u7A0F\u7A10\u7A11\u7A12\u7A13\u7A14"+
+            "\u7A15\u7A16\u7A17\u7A18\u7A19\u7A1A\u7A1B\u7A1C"+
+            "\u7A1D\u7A1E\u7A1F\u7A20\u7A21\u7A22\u7A23\u7A24"+
+            "\u7A25\u7A26\u7A27\u7A28\u7A29\u7A2A\u7A2B\u7A2C"+
+            "\u7A2D\u7A2E\u7A2F\u7A30\u7A31\u7A32\u7A33\u7A34"+
+            "\u7A35\u7A36\u7A37\u7A38\u7A39\u7A3A\u7A3B\u7A3C"+
+            "\u7A3D\u7A3E\u7A3F\u7A40\u7A41\u7A42\u7A43\u7A44"+
+            "\u7A45\u7A46\u7A47\u7A48\u7A49\u7A4A\u7A4B\u7A4C"+
+            "\u7A4D\u7A4E\u7A4F\u7A50\u7A51\u7A52\u7A53\u7A54"+
+            "\u7A55\u7A56\u7A57\u7A58\u7A59\u7A5A\u7A5B\u7A5C"+
+            "\u7A5D\u7A5E\u7A5F\u7A60\u7A61\u7A62\u7A63\u7A64"+
+            "\u7A65\u7A66\u7A67\u7A68\u7A69\u7A6A\u7A6B\u7A6C"+
+            "\u7A6D\u7A6E\u7A6F\u7A70\u7A71\u7A72\u7A73\u7A74"+
+            "\u7A75\u7A76\u7A77\u7A78\u7A79\u7A7A\u7A7B\u7A7C"+
+            "\u7A7D\u7A7E\u7A7F\u7A80\u7A81\u7A82\u7A83\u7A84"+
+            "\u7A85\u7A86\u7A87\u7A88\u7A89\u7A8A\u7A8B\u7A8C"+
+            "\u7A8D\u7A8E\u7A8F\u7A90\u7A91\u7A92\u7A93\u7A94"+
+            "\u7A95\u7A96\u7A97\u7A98\u7A99\u7A9A\u7A9B\u7A9C"+
+            "\u7A9D\u7A9E\u7A9F\u7AA0\u7AA1\u7AA2\u7AA3\u7AA4"+
+            "\u7AA5\u7AA6\u7AA7\u7AA8\u7AA9\u7AAA\u7AAB\u7AAC"+
+            "\u7AAD\u7AAE\u7AAF\u7AB0\u7AB1\u7AB2\u7AB3\u7AB4"+
+            "\u7AB5\u7AB6\u7AB7\u7AB8\u7AB9\u7ABA\u7ABB\u7ABC";
+
+        private final static String innerIndex8=
+            "\u7ABD\u7ABE\u7ABF\u7AC0\u7AC1\u7AC2\u7AC3\u7AC4"+
+            "\u7AC5\u7AC6\u7AC7\u7AC8\u7AC9\u7ACA\u7ACB\u7ACC"+
+            "\u7ACD\u7ACE\u7ACF\u7AD0\u7AD1\u7AD2\u7AD3\u7AD4"+
+            "\u7AD5\u7AD6\u7AD7\u7AD8\u7AD9\u7ADA\u7ADB\u7ADC"+
+            "\u7ADD\u7ADE\u7ADF\u7AE0\u7AE1\u7AE2\u7AE3\u7AE4"+
+            "\u7AE5\u7AE6\u7AE7\u7AE8\u7AE9\u7AEA\u7AEB\u7AEC"+
+            "\u7AED\u7AEE\u7AEF\u7AF0\u7AF1\u7AF2\u7AF3\u7AF4"+
+            "\u7AF5\u7AF6\u7AF7\u7AF8\u7AF9\u7AFA\u7AFB\u7AFC"+
+            "\u7AFD\u7AFE\u7AFF\u7B00\u7B01\u7B02\u7B03\u7B04"+
+            "\u7B05\u7B06\u7B07\u7B08\u7B09\u7B0A\u7B0B\u7B0C"+
+            "\u7B0D\u7B0E\u7B0F\u7B10\u7B11\u7B12\u7B13\u7B14"+
+            "\u7B15\u7B16\u7B17\u7B18\u7B19\u7B1A\u7B1B\u7B1C"+
+            "\u7B1D\u7B1E\u7B1F\u7B20\u7B21\u7B22\u7B23\u7B24"+
+            "\u7B25\u7B26\u7B27\u7B28\u7B29\u7B2A\u7B2B\u7B2C"+
+            "\u7B2D\u7B2E\u7B2F\u7B30\u7B31\u7B32\u7B33\u7B34"+
+            "\u7B35\u7B36\u7B37\u7B38\u7B39\u7B3A\u7B3B\u7B3C"+
+            "\u7B3D\u7B3E\u7B3F\u7B40\u7B41\u7B42\u7B43\u7B44"+
+            "\u7B45\u7B46\u7B47\u7B48\u7B49\u7B4A\u7B4B\u7B4C"+
+            "\u7B4D\u7B4E\u7B4F\u7B50\u7B51\u7B52\u7B53\u7B54"+
+            "\u7B55\u7B56\u7B57\u7B58\u7B59\u7B5A\u7B5B\u7B5C"+
+            "\u7B5D\u7B5E\u7B5F\u7B60\u7B61\u7B62\u7B63\u7B64"+
+            "\u7B65\u7B66\u7B67\u7B68\u7B69\u7B6A\u7B6B\u7B6C"+
+            "\u7B6D\u7B6E\u7B6F\u7B70\u7B71\u7B72\u7B73\u7B74"+
+            "\u7B75\u7B76\u7B77\u7B78\u7B79\u7B7A\u7B7B\u7B7C"+
+            "\u7B7D\u7B7E\u7B7F\u7B80\u7B81\u7B82\u7B83\u7B84"+
+            "\u7B85\u7B86\u7B87\u7B88\u7B89\u7B8A\u7B8B\u7B8C"+
+            "\u7B8D\u7B8E\u7B8F\u7B90\u7B91\u7B92\u7B93\u7B94"+
+            "\u7B95\u7B96\u7B97\u7B98\u7B99\u7B9A\u7B9B\u7B9C"+
+            "\u7B9D\u7B9E\u7B9F\u7BA0\u7BA1\u7BA2\u7BA3\u7BA4"+
+            "\u7BA5\u7BA6\u7BA7\u7BA8\u7BA9\u7BAA\u7BAB\u7BAC"+
+            "\u7BAD\u7BAE\u7BAF\u7BB0\u7BB1\u7BB2\u7BB3\u7BB4"+
+            "\u7BB5\u7BB6\u7BB7\u7BB8\u7BB9\u7BBA\u7BBB\u7BBC"+
+            "\u7BBD\u7BBE\u7BBF\u7BC0\u7BC1\u7BC2\u7BC3\u7BC4"+
+            "\u7BC5\u7BC6\u7BC7\u7BC8\u7BC9\u7BCA\u7BCB\u7BCC"+
+            "\u7BCD\u7BCE\u7BCF\u7BD0\u7BD1\u7BD2\u7BD3\u7BD4"+
+            "\u7BD5\u7BD6\u7BD7\u7BD8\u7BD9\u7BDA\u7BDB\u7BDC"+
+            "\u7BDD\u7BDE\u7BDF\u7BE0\u7BE1\u7BE2\u7BE3\u7BE4"+
+            "\u7BE5\u7BE6\u7BE7\u7BE8\u7BE9\u7BEA\u7BEB\u7BEC"+
+            "\u7BED\u7BEE\u7BEF\u7BF0\u7BF1\u7BF2\u7BF3\u7BF4"+
+            "\u7BF5\u7BF6\u7BF7\u7BF8\u7BF9\u7BFA\u7BFB\u7BFC"+
+            "\u7BFD\u7BFE\u7BFF\u7C00\u7C01\u7C02\u7C03\u7C04"+
+            "\u7C05\u7C06\u7C07\u7C08\u7C09\u7C0A\u7C0B\u7C0C"+
+            "\u7C0D\u7C0E\u7C0F\u7C10\u7C11\u7C12\u7C13\u7C14"+
+            "\u7C15\u7C16\u7C17\u7C18\u7C19\u7C1A\u7C1B\u7C1C"+
+            "\u7C1D\u7C1E\u7C1F\u7C20\u7C21\u7C22\u7C23\u7C24"+
+            "\u7C25\u7C26\u7C27\u7C28\u7C29\u7C2A\u7C2B\u7C2C"+
+            "\u7C2D\u7C2E\u7C2F\u7C30\u7C31\u7C32\u7C33\u7C34"+
+            "\u7C35\u7C36\u7C37\u7C38\u7C39\u7C3A\u7C3B\u7C3C"+
+            "\u7C3D\u7C3E\u7C3F\u7C40\u7C41\u7C42\u7C43\u7C44"+
+            "\u7C45\u7C46\u7C47\u7C48\u7C49\u7C4A\u7C4B\u7C4C"+
+            "\u7C4D\u7C4E\u7C4F\u7C50\u7C51\u7C52\u7C53\u7C54"+
+            "\u7C55\u7C56\u7C57\u7C58\u7C59\u7C5A\u7C5B\u7C5C"+
+            "\u7C5D\u7C5E\u7C5F\u7C60\u7C61\u7C62\u7C63\u7C64"+
+            "\u7C65\u7C66\u7C67\u7C68\u7C69\u7C6A\u7C6B\u7C6C"+
+            "\u7C6D\u7C6E\u7C6F\u7C70\u7C71\u7C72\u7C73\u7C74"+
+            "\u7C75\u7C76\u7C77\u7C78\u7C79\u7C7A\u7C7B\u7C7C"+
+            "\u7C7D\u7C7E\u7C7F\u7C80\u7C81\u7C82\u7C83\u7C84"+
+            "\u7C85\u7C86\u7C87\u7C88\u7C89\u7C8A\u7C8B\u7C8C"+
+            "\u7C8D\u7C8E\u7C8F\u7C90\u7C91\u7C92\u7C93\u7C94"+
+            "\u7C95\u7C96\u7C97\u7C98\u7C99\u7C9A\u7C9B\u7C9C"+
+            "\u7C9D\u7C9E\u7C9F\u7CA0\u7CA1\u7CA2\u7CA3\u7CA4"+
+            "\u7CA5\u7CA6\u7CA7\u7CA8\u7CA9\u7CAA\u7CAB\u7CAC"+
+            "\u7CAD\u7CAE\u7CAF\u7CB0\u7CB1\u7CB2\u7CB3\u7CB4"+
+            "\u7CB5\u7CB6\u7CB7\u7CB8\u7CB9\u7CBA\u7CBB\u7CBC"+
+            "\u7CBD\u7CBE\u7CBF\u7CC0\u7CC1\u7CC2\u7CC3\u7CC4"+
+            "\u7CC5\u7CC6\u7CC7\u7CC8\u7CC9\u7CCA\u7CCB\u7CCC"+
+            "\u7CCD\u7CCE\u7CCF\u7CD0\u7CD1\u7CD2\u7CD3\u7CD4"+
+            "\u7CD5\u7CD6\u7CD7\u7CD8\u7CD9\u7CDA\u7CDB\u7CDC"+
+            "\u7CDD\u7CDE\u7CDF\u7CE0\u7CE1\u7CE2\u7CE3\u7CE4"+
+            "\u7CE5\u7CE6\u7CE7\u7CE8\u7CE9\u7CEA\u7CEB\u7CEC"+
+            "\u7CED\u7CEE\u7CEF\u7CF0\u7CF1\u7CF2\u7CF3\u7CF4"+
+            "\u7CF5\u7CF6\u7CF7\u7CF8\u7CF9\u7CFA\u7CFB\u7CFC"+
+            "\u7CFD\u7CFE\u7CFF\u7D00\u7D01\u7D02\u7D03\u7D04"+
+            "\u7D05\u7D06\u7D07\u7D08\u7D09\u7D0A\u7D0B\u7D0C"+
+            "\u7D0D\u7D0E\u7D0F\u7D10\u7D11\u7D12\u7D13\u7D14"+
+            "\u7D15\u7D16\u7D17\u7D18\u7D19\u7D1A\u7D1B\u7D1C"+
+            "\u7D1D\u7D1E\u7D1F\u7D20\u7D21\u7D22\u7D23\u7D24"+
+            "\u7D25\u7D26\u7D27\u7D28\u7D29\u7D2A\u7D2B\u7D2C"+
+            "\u7D2D\u7D2E\u7D2F\u7D30\u7D31\u7D32\u7D33\u7D34"+
+            "\u7D35\u7D36\u7D37\u7D38\u7D39\u7D3A\u7D3B\u7D3C"+
+            "\u7D3D\u7D3E\u7D3F\u7D40\u7D41\u7D42\u7D43\u7D44"+
+            "\u7D45\u7D46\u7D47\u7D48\u7D49\u7D4A\u7D4B\u7D4C"+
+            "\u7D4D\u7D4E\u7D4F\u7D50\u7D51\u7D52\u7D53\u7D54"+
+            "\u7D55\u7D56\u7D57\u7D58\u7D59\u7D5A\u7D5B\u7D5C"+
+            "\u7D5D\u7D5E\u7D5F\u7D60\u7D61\u7D62\u7D63\u7D64"+
+            "\u7D65\u7D66\u7D67\u7D68\u7D69\u7D6A\u7D6B\u7D6C"+
+            "\u7D6D\u7D6E\u7D6F\u7D70\u7D71\u7D72\u7D73\u7D74"+
+            "\u7D75\u7D76\u7D77\u7D78\u7D79\u7D7A\u7D7B\u7D7C"+
+            "\u7D7D\u7D7E\u7D7F\u7D80\u7D81\u7D82\u7D83\u7D84"+
+            "\u7D85\u7D86\u7D87\u7D88\u7D89\u7D8A\u7D8B\u7D8C"+
+            "\u7D8D\u7D8E\u7D8F\u7D90\u7D91\u7D92\u7D93\u7D94"+
+            "\u7D95\u7D96\u7D97\u7D98\u7D99\u7D9A\u7D9B\u7D9C"+
+            "\u7D9D\u7D9E\u7D9F\u7DA0\u7DA1\u7DA2\u7DA3\u7DA4"+
+            "\u7DA5\u7DA6\u7DA7\u7DA8\u7DA9\u7DAA\u7DAB\u7DAC"+
+            "\u7DAD\u7DAE\u7DAF\u7DB0\u7DB1\u7DB2\u7DB3\u7DB4"+
+            "\u7DB5\u7DB6\u7DB7\u7DB8\u7DB9\u7DBA\u7DBB\u7DBC"+
+            "\u7DBD\u7DBE\u7DBF\u7DC0\u7DC1\u7DC2\u7DC3\u7DC4"+
+            "\u7DC5\u7DC6\u7DC7\u7DC8\u7DC9\u7DCA\u7DCB\u7DCC"+
+            "\u7DCD\u7DCE\u7DCF\u7DD0\u7DD1\u7DD2\u7DD3\u7DD4"+
+            "\u7DD5\u7DD6\u7DD7\u7DD8\u7DD9\u7DDA\u7DDB\u7DDC"+
+            "\u7DDD\u7DDE\u7DDF\u7DE0\u7DE1\u7DE2\u7DE3\u7DE4"+
+            "\u7DE5\u7DE6\u7DE7\u7DE8\u7DE9\u7DEA\u7DEB\u7DEC"+
+            "\u7DED\u7DEE\u7DEF\u7DF0\u7DF1\u7DF2\u7DF3\u7DF4"+
+            "\u7DF5\u7DF6\u7DF7\u7DF8\u7DF9\u7DFA\u7DFB\u7DFC"+
+            "\u7DFD\u7DFE\u7DFF\u7E00\u7E01\u7E02\u7E03\u7E04"+
+            "\u7E05\u7E06\u7E07\u7E08\u7E09\u7E0A\u7E0B\u7E0C"+
+            "\u7E0D\u7E0E\u7E0F\u7E10\u7E11\u7E12\u7E13\u7E14"+
+            "\u7E15\u7E16\u7E17\u7E18\u7E19\u7E1A\u7E1B\u7E1C"+
+            "\u7E1D\u7E1E\u7E1F\u7E20\u7E21\u7E22\u7E23\u7E24"+
+            "\u7E25\u7E26\u7E27\u7E28\u7E29\u7E2A\u7E2B\u7E2C"+
+            "\u7E2D\u7E2E\u7E2F\u7E30\u7E31\u7E32\u7E33\u7E34"+
+            "\u7E35\u7E36\u7E37\u7E38\u7E39\u7E3A\u7E3B\u7E3C"+
+            "\u7E3D\u7E3E\u7E3F\u7E40\u7E41\u7E42\u7E43\u7E44"+
+            "\u7E45\u7E46\u7E47\u7E48\u7E49\u7E4A\u7E4B\u7E4C"+
+            "\u7E4D\u7E4E\u7E4F\u7E50\u7E51\u7E52\u7E53\u7E54"+
+            "\u7E55\u7E56\u7E57\u7E58\u7E59\u7E5A\u7E5B\u7E5C"+
+            "\u7E5D\u7E5E\u7E5F\u7E60\u7E61\u7E62\u7E63\u7E64"+
+            "\u7E65\u7E66\u7E67\u7E68\u7E69\u7E6A\u7E6B\u7E6C"+
+            "\u7E6D\u7E6E\u7E6F\u7E70\u7E71\u7E72\u7E73\u7E74"+
+            "\u7E75\u7E76\u7E77\u7E78\u7E79\u7E7A\u7E7B\u7E7C"+
+            "\u7E7D\u7E7E\u7E7F\u7E80\u7E81\u7E82\u7E83\u7E84"+
+            "\u7E85\u7E86\u7E87\u7E88\u7E89\u7E8A\u7E8B\u7E8C"+
+            "\u7E8D\u7E8E\u7E8F\u7E90\u7E91\u7E92\u7E93\u7E94"+
+            "\u7E95\u7E96\u7E97\u7E98\u7E99\u7E9A\u7E9B\u7E9C"+
+            "\u7E9D\u7E9E\u7E9F\u7EA0\u7EA1\u7EA2\u7EA3\u7EA4"+
+            "\u7EA5\u7EA6\u7EA7\u7EA8\u7EA9\u7EAA\u7EAB\u7EAC"+
+            "\u7EAD\u7EAE\u7EAF\u7EB0\u7EB1\u7EB2\u7EB3\u7EB4"+
+            "\u7EB5\u7EB6\u7EB7\u7EB8\u7EB9\u7EBA\u7EBB\u7EBC"+
+            "\u7EBD\u7EBE\u7EBF\u7EC0\u7EC1\u7EC2\u7EC3\u7EC4"+
+            "\u7EC5\u7EC6\u7EC7\u7EC8\u7EC9\u7ECA\u7ECB\u7ECC"+
+            "\u7ECD\u7ECE\u7ECF\u7ED0\u7ED1\u7ED2\u7ED3\u7ED4"+
+            "\u7ED5\u7ED6\u7ED7\u7ED8\u7ED9\u7EDA\u7EDB\u7EDC"+
+            "\u7EDD\u7EDE\u7EDF\u7EE0\u7EE1\u7EE2\u7EE3\u7EE4"+
+            "\u7EE5\u7EE6\u7EE7\u7EE8\u7EE9\u7EEA\u7EEB\u7EEC"+
+            "\u7EED\u7EEE\u7EEF\u7EF0\u7EF1\u7EF2\u7EF3\u7EF4"+
+            "\u7EF5\u7EF6\u7EF7\u7EF8\u7EF9\u7EFA\u7EFB\u7EFC"+
+            "\u7EFD\u7EFE\u7EFF\u7F00\u7F01\u7F02\u7F03\u7F04"+
+            "\u7F05\u7F06\u7F07\u7F08\u7F09\u7F0A\u7F0B\u7F0C"+
+            "\u7F0D\u7F0E\u7F0F\u7F10\u7F11\u7F12\u7F13\u7F14"+
+            "\u7F15\u7F16\u7F17\u7F18\u7F19\u7F1A\u7F1B\u7F1C"+
+            "\u7F1D\u7F1E\u7F1F\u7F20\u7F21\u7F22\u7F23\u7F24"+
+            "\u7F25\u7F26\u7F27\u7F28\u7F29\u7F2A\u7F2B\u7F2C"+
+            "\u7F2D\u7F2E\u7F2F\u7F30\u7F31\u7F32\u7F33\u7F34"+
+            "\u7F35\u7F36\u7F37\u7F38\u7F39\u7F3A\u7F3B\u7F3C"+
+            "\u7F3D\u7F3E\u7F3F\u7F40\u7F41\u7F42\u7F43\u7F44"+
+            "\u7F45\u7F46\u7F47\u7F48\u7F49\u7F4A\u7F4B\u7F4C"+
+            "\u7F4D\u7F4E\u7F4F\u7F50\u7F51\u7F52\u7F53\u7F54"+
+            "\u7F55\u7F56\u7F57\u7F58\u7F59\u7F5A\u7F5B\u7F5C"+
+            "\u7F5D\u7F5E\u7F5F\u7F60\u7F61\u7F62\u7F63\u7F64"+
+            "\u7F65\u7F66\u7F67\u7F68\u7F69\u7F6A\u7F6B\u7F6C"+
+            "\u7F6D\u7F6E\u7F6F\u7F70\u7F71\u7F72\u7F73\u7F74"+
+            "\u7F75\u7F76\u7F77\u7F78\u7F79\u7F7A\u7F7B\u7F7C"+
+            "\u7F7D\u7F7E\u7F7F\u7F80\u7F81\u7F82\u7F83\u7F84"+
+            "\u7F85\u7F86\u7F87\u7F88\u7F89\u7F8A\u7F8B\u7F8C"+
+            "\u7F8D\u7F8E\u7F8F\u7F90\u7F91\u7F92\u7F93\u7F94"+
+            "\u7F95\u7F96\u7F97\u7F98\u7F99\u7F9A\u7F9B\u7F9C"+
+            "\u7F9D\u7F9E\u7F9F\u7FA0\u7FA1\u7FA2\u7FA3\u7FA4"+
+            "\u7FA5\u7FA6\u7FA7\u7FA8\u7FA9\u7FAA\u7FAB\u7FAC"+
+            "\u7FAD\u7FAE\u7FAF\u7FB0\u7FB1\u7FB2\u7FB3\u7FB4"+
+            "\u7FB5\u7FB6\u7FB7\u7FB8\u7FB9\u7FBA\u7FBB\u7FBC"+
+            "\u7FBD\u7FBE\u7FBF\u7FC0\u7FC1\u7FC2\u7FC3\u7FC4"+
+            "\u7FC5\u7FC6\u7FC7\u7FC8\u7FC9\u7FCA\u7FCB\u7FCC"+
+            "\u7FCD\u7FCE\u7FCF\u7FD0\u7FD1\u7FD2\u7FD3\u7FD4"+
+            "\u7FD5\u7FD6\u7FD7\u7FD8\u7FD9\u7FDA\u7FDB\u7FDC"+
+            "\u7FDD\u7FDE\u7FDF\u7FE0\u7FE1\u7FE2\u7FE3\u7FE4"+
+            "\u7FE5\u7FE6\u7FE7\u7FE8\u7FE9\u7FEA\u7FEB\u7FEC"+
+            "\u7FED\u7FEE\u7FEF\u7FF0\u7FF1\u7FF2\u7FF3\u7FF4"+
+            "\u7FF5\u7FF6\u7FF7\u7FF8\u7FF9\u7FFA\u7FFB\u7FFC"+
+            "\u7FFD\u7FFE\u7FFF\u8000\u8001\u8002\u8003\u8004"+
+            "\u8005\u8006\u8007\u8008\u8009\u800A\u800B\u800C"+
+            "\u800D\u800E\u800F\u8010\u8011\u8012\u8013\u8014"+
+            "\u8015\u8016\u8017\u8018\u8019\u801A\u801B\u801C"+
+            "\u801D\u801E\u801F\u8020\u8021\u8022\u8023\u8024"+
+            "\u8025\u8026\u8027\u8028\u8029\u802A\u802B\u802C"+
+            "\u802D\u802E\u802F\u8030\u8031\u8032\u8033\u8034"+
+            "\u8035\u8036\u8037\u8038\u8039\u803A\u803B\u803C"+
+            "\u803D\u803E\u803F\u8040\u8041\u8042\u8043\u8044"+
+            "\u8045\u8046\u8047\u8048\u8049\u804A\u804B\u804C"+
+            "\u804D\u804E\u804F\u8050\u8051\u8052\u8053\u8054"+
+            "\u8055\u8056\u8057\u8058\u8059\u805A\u805B\u805C"+
+            "\u805D\u805E\u805F\u8060\u8061\u8062\u8063\u8064"+
+            "\u8065\u8066\u8067\u8068\u8069\u806A\u806B\u806C"+
+            "\u806D\u806E\u806F\u8070\u8071\u8072\u8073\u8074"+
+            "\u8075\u8076\u8077\u8078\u8079\u807A\u807B\u807C"+
+            "\u807D\u807E\u807F\u8080\u8081\u8082\u8083\u8084"+
+            "\u8085\u8086\u8087\u8088\u8089\u808A\u808B\u808C"+
+            "\u808D\u808E\u808F\u8090\u8091\u8092\u8093\u8094"+
+            "\u8095\u8096\u8097\u8098\u8099\u809A\u809B\u809C"+
+            "\u809D\u809E\u809F\u80A0\u80A1\u80A2\u80A3\u80A4"+
+            "\u80A5\u80A6\u80A7\u80A8\u80A9\u80AA\u80AB\u80AC"+
+            "\u80AD\u80AE\u80AF\u80B0\u80B1\u80B2\u80B3\u80B4"+
+            "\u80B5\u80B6\u80B7\u80B8\u80B9\u80BA\u80BB\u80BC"+
+            "\u80BD\u80BE\u80BF\u80C0\u80C1\u80C2\u80C3\u80C4"+
+            "\u80C5\u80C6\u80C7\u80C8\u80C9\u80CA\u80CB\u80CC"+
+            "\u80CD\u80CE\u80CF\u80D0\u80D1\u80D2\u80D3\u80D4"+
+            "\u80D5\u80D6\u80D7\u80D8\u80D9\u80DA\u80DB\u80DC"+
+            "\u80DD\u80DE\u80DF\u80E0\u80E1\u80E2\u80E3\u80E4"+
+            "\u80E5\u80E6\u80E7\u80E8\u80E9\u80EA\u80EB\u80EC"+
+            "\u80ED\u80EE\u80EF\u80F0\u80F1\u80F2\u80F3\u80F4"+
+            "\u80F5\u80F6\u80F7\u80F8\u80F9\u80FA\u80FB\u80FC"+
+            "\u80FD\u80FE\u80FF\u8100\u8101\u8102\u8103\u8104"+
+            "\u8105\u8106\u8107\u8108\u8109\u810A\u810B\u810C"+
+            "\u810D\u810E\u810F\u8110\u8111\u8112\u8113\u8114"+
+            "\u8115\u8116\u8117\u8118\u8119\u811A\u811B\u811C"+
+            "\u811D\u811E\u811F\u8120\u8121\u8122\u8123\u8124"+
+            "\u8125\u8126\u8127\u8128\u8129\u812A\u812B\u812C"+
+            "\u812D\u812E\u812F\u8130\u8131\u8132\u8133\u8134"+
+            "\u8135\u8136\u8137\u8138\u8139\u813A\u813B\u813C"+
+            "\u813D\u813E\u813F\u8140\u8141\u8142\u8143\u8144"+
+            "\u8145\u8146\u8147\u8148\u8149\u814A\u814B\u814C"+
+            "\u814D\u814E\u814F\u8150\u8151\u8152\u8153\u8154"+
+            "\u8155\u8156\u8157\u8158\u8159\u815A\u815B\u815C"+
+            "\u815D\u815E\u815F\u8160\u8161\u8162\u8163\u8164"+
+            "\u8165\u8166\u8167\u8168\u8169\u816A\u816B\u816C"+
+            "\u816D\u816E\u816F\u8170\u8171\u8172\u8173\u8174"+
+            "\u8175\u8176\u8177\u8178\u8179\u817A\u817B\u817C"+
+            "\u817D\u817E\u817F\u8180\u8181\u8182\u8183\u8184"+
+            "\u8185\u8186\u8187\u8188\u8189\u818A\u818B\u818C"+
+            "\u818D\u818E\u818F\u8190\u8191\u8192\u8193\u8194"+
+            "\u8195\u8196\u8197\u8198\u8199\u819A\u819B\u819C"+
+            "\u819D\u819E\u819F\u81A0\u81A1\u81A2\u81A3\u81A4"+
+            "\u81A5\u81A6\u81A7\u81A8\u81A9\u81AA\u81AB\u81AC"+
+            "\u81AD\u81AE\u81AF\u81B0\u81B1\u81B2\u81B3\u81B4"+
+            "\u81B5\u81B6\u81B7\u81B8\u81B9\u81BA\u81BB\u81BC"+
+            "\u81BD\u81BE\u81BF\u81C0\u81C1\u81C2\u81C3\u81C4"+
+            "\u81C5\u81C6\u81C7\u81C8\u81C9\u81CA\u81CB\u81CC"+
+            "\u81CD\u81CE\u81CF\u81D0\u81D1\u81D2\u81D3\u81D4"+
+            "\u81D5\u81D6\u81D7\u81D8\u81D9\u81DA\u81DB\u81DC"+
+            "\u81DD\u81DE\u81DF\u81E0\u81E1\u81E2\u81E3\u81E4"+
+            "\u81E5\u81E6\u81E7\u81E8\u81E9\u81EA\u81EB\u81EC"+
+            "\u81ED\u81EE\u81EF\u81F0\u81F1\u81F2\u81F3\u81F4"+
+            "\u81F5\u81F6\u81F7\u81F8\u81F9\u81FA\u81FB\u81FC"+
+            "\u81FD\u81FE\u81FF\u8200\u8201\u8202\u8203\u8204"+
+            "\u8205\u8206\u8207\u8208\u8209\u820A\u820B\u820C"+
+            "\u820D\u820E\u820F\u8210\u8211\u8212\u8213\u8214"+
+            "\u8215\u8216\u8217\u8218\u8219\u821A\u821B\u821C"+
+            "\u821D\u821E\u821F\u8220\u8221\u8222\u8223\u8224"+
+            "\u8225\u8226\u8227\u8228\u8229\u822A\u822B\u822C"+
+            "\u822D\u822E\u822F\u8230\u8231\u8232\u8233\u8234"+
+            "\u8235\u8236\u8237\u8238\u8239\u823A\u823B\u823C"+
+            "\u823D\u823E\u823F\u8240\u8241\u8242\u8243\u8244"+
+            "\u8245\u8246\u8247\u8248\u8249\u824A\u824B\u824C"+
+            "\u824D\u824E\u824F\u8250\u8251\u8252\u8253\u8254"+
+            "\u8255\u8256\u8257\u8258\u8259\u825A\u825B\u825C"+
+            "\u825D\u825E\u825F\u8260\u8261\u8262\u8263\u8264"+
+            "\u8265\u8266\u8267\u8268\u8269\u826A\u826B\u826C"+
+            "\u826D\u826E\u826F\u8270\u8271\u8272\u8273\u8274"+
+            "\u8275\u8276\u8277\u8278\u8279\u827A\u827B\u827C"+
+            "\u827D\u827E\u827F\u8280\u8281\u8282\u8283\u8284"+
+            "\u8285\u8286\u8287\u8288\u8289\u828A\u828B\u828C"+
+            "\u828D\u828E\u828F\u8290\u8291\u8292\u8293\u8294"+
+            "\u8295\u8296\u8297\u8298\u8299\u829A\u829B\u829C"+
+            "\u829D\u829E\u829F\u82A0\u82A1\u82A2\u82A3\u82A4"+
+            "\u82A5\u82A6\u82A7\u82A8\u82A9\u82AA\u82AB\u82AC"+
+            "\u82AD\u82AE\u82AF\u82B0\u82B1\u82B2\u82B3\u82B4"+
+            "\u82B5\u82B6\u82B7\u82B8\u82B9\u82BA\u82BB\u82BC"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u82BD\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u82BE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u82BF"+
+            "\u82C0\u82C1\u82C2\u82C3\u82C4\u82C5\u82C6\u82C7"+
+            "\u82C8\u82C9\u82CA\u82CB\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u82CC\u0000\u0000"+
+            "\u0000\u82CD\u82CE\u82CF\u82D0\u82D1\u0000\u82D2"+
+            "\u82D3\u82D4\u82D5\u82D6\u82D7\u82D8\u0000\u82D9"+
+            "\u82DA\u82DB\u82DC\u0000\u0000\u82DD\u82DE\u82DF"+
+            "\u82E0\u0000\u0000\u82E1\u82E2\u82E3\u82E4\u82E5"+
+            "\u82E6\u82E7\u82E8\u0000\u82E9\u82EA\u82EB\u82EC"+
+            "\u82ED\u82EE\u82EF\u0000\u82F0\u82F1\u82F2\u82F3"+
+            "\u82F4\u82F5\u82F6\u82F7\u82F8\u82F9\u82FA\u82FB"+
+            "\u82FC\u82FD\u82FE\u82FF\u0000\u0000\u8300\u8301"+
+            "\u8302\u8303\u8304\u8305\u8306\u8307\u8308\u8309"+
+            "\u830A\u830B\u830C\u830D\u0000\u830E\u830F\u8310"+
+            "\u8311\u8312\u8313\u8314\u8315\u8316\u8317\u8318"+
+            "\u8319\u831A\u831B\u831C\u831D\u831E\u831F\u8320"+
+            "\u8321\u8322\u8323\u8324\u8325\u8326\u8327\u8328"+
+            "\u8329\u832A\u832B\u832C\u832D\u832E\u832F\u8330"+
+            "\u8331\u8332\u8333\u8334\u8335\u8336\u8337\u8338"+
+            "\u8339\u833A\u833B\u833C\u833D\u833E\u833F\u8340"+
+            "\u8341\u8342\u8343\u8344\u8345\u8346\u8347\u8348"+
+            "\u8349\u834A\u834B\u834C\u834D\u834E\u834F\u8350"+
+            "\u8351\u8352\u8353\u8354\u8355\u8356\u8357\u8358"+
+            "\u8359\u835A\u835B\u835C\u835D\u835E\u835F\u8360"+
+            "\u8361\u8362\u8363\u8364\u8365\u8366\u8367\u8368"+
+            "\u8369\u836A\u836B\u836C\u836D\u836E\u836F\u8370"+
+            "\u8371\u8372\u8373\u8374\u8375\u8376\u8377\u8378"+
+            "\u8379\u837A\u837B\u837C\u837D\u837E\u837F\u8380"+
+            "\u8381\u8382\u8383\u8384\u8385\u8386\u8387\u8388"+
+            "\u8389\u838A\u838B\u838C\u838D\u838E\u838F\u8390"+
+            "\u8391\u8392\u8393\u8394\u8395\u8396\u8397\u8398"+
+            "\u8399\u839A\u839B\u839C\u839D\u839E\u839F\u83A0"+
+            "\u83A1\u83A2\u83A3\u83A4\u83A5\u83A6\u83A7\u83A8"+
+            "\u83A9\u83AA\u83AB\u83AC\u83AD\u83AE\u83AF\u83B0"+
+            "\u83B1\u83B2\u83B3\u83B4\u83B5\u83B6\u83B7\u83B8"+
+            "\u83B9\u83BA\u83BB\u83BC\u83BD\u83BE\u83BF\u83C0"+
+            "\u83C1\u83C2\u83C3\u83C4\u83C5\u83C6\u83C7\u83C8"+
+            "\u83C9\u83CA\u83CB\u83CC\u83CD\u83CE\u83CF\u83D0"+
+            "\u83D1\u83D2\u83D3\u83D4\u83D5\u83D6\u83D7\u83D8"+
+            "\u83D9\u83DA\u83DB\u83DC\u83DD\u83DE\u83DF\u83E0"+
+            "\u83E1\u83E2\u83E3\u83E4\u83E5\u83E6\u83E7\u83E8"+
+            "\u83E9\u83EA\u83EB\u83EC\u83ED\u83EE\u83EF\u83F0"+
+            "\u83F1\u83F2\u83F3\u83F4\u83F5\u83F6\u83F7\u83F8"+
+            "\u83F9\u83FA\u83FB\u83FC\u83FD\u83FE\u83FF\u8400"+
+            "\u8401\u8402\u8403\u8404\u8405\u8406\u8407\u8408"+
+            "\u8409\u840A\u840B\u840C\u840D\u840E\u840F\u8410"+
+            "\u8411\u8412\u8413\u8414\u8415\u8416\u8417\u8418"+
+            "\u8419\u841A\u841B\u841C\u841D\u841E\u841F\u8420"+
+            "\u8421\u8422\u8423\u8424\u8425\u8426\u8427\u8428"+
+            "\u8429\u842A\u842B\u842C\u842D\u842E\u842F\u8430"+
+            "\u8431\u8432\u8433\u8434\u8435\u8436\u8437\u8438"+
+            "\u8439\u843A\u843B\u843C\u843D\u843E\u843F\u8440"+
+            "\u8441\u8442\u8443\u8444\u8445\u8446\u8447\u8448"+
+            "\u8449\u844A\u844B\u844C\u844D\u844E\u844F\u8450"+
+            "\u8451\u8452\u8453\u8454\u8455\u8456\u8457\u8458"+
+            "\u8459\u845A\u845B\u845C\u845D\u845E\u845F\u8460"+
+            "\u8461\u8462\u8463\u8464\u8465\u8466\u8467\u8468"+
+            "\u8469\u846A\u846B\u846C\u846D\u846E\u846F\u8470"+
+            "\u8471\u8472\u8473\u8474\u8475\u8476\u8477\u8478"+
+            "\u8479\u847A\u847B\u847C\u847D\u847E\u847F\u8480"+
+            "\u8481\u8482\u8483\u8484\u8485\u8486\u8487\u8488"+
+            "\u8489\u848A\u848B\u848C\u848D\u848E\u848F\u8490"+
+            "\u8491\u8492\u8493\u8494\u8495\u8496\u8497\u8498"+
+            "\u8499\u849A\u849B\u849C\u849D\u849E\u849F\u84A0"+
+            "\u84A1\u84A2\u84A3\u84A4\u84A5\u84A6\u84A7\u84A8"+
+            "\u84A9\u84AA\u84AB\u84AC\u84AD\u84AE\u84AF\u84B0"+
+            "\u84B1\u84B2\u84B3\u84B4\u84B5\u84B6\u84B7\u84B8"+
+            "\u84B9\u84BA\u84BB\u84BC\u84BD\u84BE\u84BF\u84C0"+
+            "\u84C1\u84C2\u84C3\u84C4\u84C5\u84C6\u84C7\u84C8"+
+            "\u84C9\u84CA\u84CB\u84CC\u84CD\u84CE\u84CF\u84D0"+
+            "\u84D1\u84D2\u84D3\u84D4\u84D5\u84D6\u84D7\u84D8"+
+            "\u84D9\u84DA\u84DB\u84DC\u84DD\u84DE\u84DF\u84E0"+
+            "\u84E1\u84E2\u84E3\u84E4\u84E5\u84E6\u84E7\u84E8"+
+            "\u84E9\u84EA\u84EB\u84EC\u84ED\u84EE\u84EF\u84F0"+
+            "\u84F1\u84F2\u84F3\u84F4\u84F5\u84F6\u84F7\u84F8"+
+            "\u84F9\u84FA\u84FB\u84FC\u84FD\u84FE\u84FF\u8500"+
+            "\u8501\u8502\u8503\u8504\u8505\u8506\u8507\u8508"+
+            "\u8509\u850A\u850B\u850C\u850D\u850E\u850F\u8510"+
+            "\u8511\u8512\u8513\u8514\u8515\u8516\u8517\u8518"+
+            "\u8519\u851A\u851B\u851C\u851D\u851E\u851F\u8520"+
+            "\u8521\u8522\u8523\u8524\u8525\u8526\u8527\u8528"+
+            "\u8529\u852A\u852B\u852C\u852D\u852E\u852F\u8530"+
+            "\u8531\u8532\u8533\u8534\u8535\u8536\u8537\u8538"+
+            "\u8539\u853A\u853B\u853C\u853D\u853E\u853F\u8540"+
+            "\u8541\u8542\u8543\u8544\u8545\u8546\u8547\u8548"+
+            "\u8549\u854A\u854B\u854C\u854D\u854E\u854F\u8550"+
+            "\u8551\u8552\u8553\u8554\u8555\u8556\u8557\u8558"+
+            "\u8559\u855A\u855B\u855C\u855D\u855E\u855F\u8560"+
+            "\u8561\u8562\u8563\u8564\u8565\u8566\u8567\u8568"+
+            "\u8569\u856A\u856B\u856C\u856D\u856E\u856F\u8570"+
+            "\u8571\u8572\u8573\u8574\u8575\u8576\u8577\u8578"+
+            "\u8579\u857A\u857B\u857C\u857D\u857E\u857F\u8580"+
+            "\u8581\u8582\u8583\u8584\u8585\u8586\u8587\u8588"+
+            "\u8589\u858A\u858B\u858C\u858D\u858E\u858F\u8590"+
+            "\u8591\u8592\u8593\u8594\u8595\u8596\u8597\u8598"+
+            "\u8599\u859A\u859B\u859C\u859D\u859E\u859F\u85A0"+
+            "\u85A1\u85A2\u85A3\u85A4\u85A5\u85A6\u85A7\u85A8"+
+            "\u85A9\u85AA\u85AB\u85AC\u85AD\u85AE\u85AF\u85B0"+
+            "\u85B1\u85B2\u85B3\u85B4\u85B5\u85B6\u85B7\u85B8"+
+            "\u85B9\u85BA\u85BB\u85BC\u85BD\u85BE\u85BF\u85C0"+
+            "\u85C1\u85C2\u85C3\u85C4\u85C5\u85C6\u85C7\u85C8"+
+            "\u85C9\u85CA\u85CB\u85CC\u85CD\u85CE\u85CF\u85D0"+
+            "\u85D1\u85D2\u85D3\u85D4\u85D5\u85D6\u85D7\u85D8"+
+            "\u85D9\u85DA\u85DB\u85DC\u85DD\u85DE\u85DF\u85E0"+
+            "\u85E1\u85E2\u85E3\u85E4\u85E5\u85E6\u85E7\u85E8"+
+            "\u85E9\u85EA\u85EB\u85EC\u85ED\u85EE\u85EF\u85F0"+
+            "\u85F1\u85F2\u85F3\u85F4\u85F5\u85F6\u85F7\u85F8"+
+            "\u85F9\u85FA\u85FB\u85FC\u85FD\u85FE\u85FF\u8600"+
+            "\u8601\u8602\u8603\u8604\u8605\u8606\u8607\u8608"+
+            "\u8609\u860A\u860B\u860C\u860D\u860E\u860F\u8610"+
+            "\u8611\u8612\u8613\u8614\u8615\u8616\u8617\u8618"+
+            "\u8619\u861A\u861B\u861C\u861D\u861E\u861F\u8620"+
+            "\u8621\u8622\u8623\u8624\u8625\u8626\u8627\u8628"+
+            "\u8629\u862A\u862B\u862C\u862D\u862E\u862F\u8630"+
+            "\u8631\u8632\u8633\u8634\u8635\u8636\u8637\u8638"+
+            "\u8639\u863A\u863B\u863C\u863D\u863E\u863F\u8640"+
+            "\u8641\u8642\u8643\u8644\u8645\u8646\u8647\u8648"+
+            "\u8649\u864A\u864B\u864C\u864D\u864E\u864F\u8650"+
+            "\u8651\u8652\u8653\u8654\u8655\u8656\u8657\u8658"+
+            "\u8659\u865A\u865B\u865C\u865D\u865E\u865F\u8660"+
+            "\u8661\u8662\u8663\u8664\u8665\u8666\u8667\u8668"+
+            "\u8669\u866A\u866B\u866C\u866D\u866E\u866F\u8670"+
+            "\u8671\u8672\u8673\u8674\u8675\u8676\u8677\u8678"+
+            "\u8679\u867A\u867B\u867C\u867D\u867E\u867F\u8680"+
+            "\u8681\u8682\u8683\u8684\u8685\u8686\u8687\u8688"+
+            "\u8689\u868A\u868B\u868C\u868D\u868E\u868F\u8690"+
+            "\u8691\u8692\u8693\u8694\u8695\u8696\u8697\u8698"+
+            "\u8699\u869A\u869B\u869C\u869D\u869E\u869F\u86A0"+
+            "\u86A1\u86A2\u86A3\u86A4\u86A5\u86A6\u86A7\u86A8"+
+            "\u86A9\u86AA\u86AB\u86AC\u86AD\u86AE\u86AF\u86B0"+
+            "\u86B1\u86B2\u86B3\u86B4\u86B5\u86B6\u86B7\u86B8"+
+            "\u86B9\u86BA\u86BB\u86BC\u86BD\u86BE\u86BF\u86C0"+
+            "\u86C1\u86C2\u86C3\u86C4\u86C5\u86C6\u86C7\u86C8"+
+            "\u86C9\u86CA\u86CB\u86CC\u86CD\u86CE\u86CF\u86D0"+
+            "\u86D1\u86D2\u86D3\u86D4\u86D5\u86D6\u86D7\u86D8"+
+            "\u86D9\u86DA\u86DB\u86DC\u86DD\u86DE\u86DF\u86E0"+
+            "\u86E1\u86E2\u86E3\u86E4\u86E5\u86E6\u86E7\u86E8"+
+            "\u86E9\u86EA\u86EB\u86EC\u86ED\u86EE\u86EF\u86F0"+
+            "\u86F1\u86F2\u86F3\u86F4\u86F5\u86F6\u86F7\u86F8"+
+            "\u86F9\u86FA\u86FB\u86FC\u86FD\u86FE\u86FF\u8700"+
+            "\u8701\u8702\u8703\u8704\u8705\u8706\u8707\u8708"+
+            "\u8709\u870A\u870B\u870C\u870D\u870E\u870F\u8710"+
+            "\u8711\u8712\u8713\u8714\u8715\u8716\u8717\u8718"+
+            "\u8719\u871A\u871B\u871C\u871D\u871E\u871F\u8720"+
+            "\u8721\u8722\u8723\u8724\u8725\u8726\u8727\u8728"+
+            "\u8729\u872A\u872B\u872C\u872D\u872E\u872F\u8730"+
+            "\u8731\u8732\u8733\u8734\u8735\u8736\u8737\u8738"+
+            "\u8739\u873A\u873B\u873C\u873D\u873E\u873F\u8740"+
+            "\u8741\u8742\u8743\u8744\u8745\u8746\u8747\u8748"+
+            "\u8749\u874A\u874B\u874C\u874D\u874E\u874F\u8750"+
+            "\u8751\u8752\u8753\u8754\u8755\u8756\u8757\u8758"+
+            "\u8759\u875A\u875B\u875C\u875D\u875E\u875F\u8760"+
+            "\u8761\u8762\u8763\u8764\u8765\u8766\u8767\u8768"+
+            "\u8769\u876A\u876B\u876C\u876D\u876E\u876F\u8770"+
+            "\u8771\u8772\u8773\u8774\u8775\u8776\u8777\u8778"+
+            "\u8779\u877A\u877B\u877C\u877D\u877E\u877F\u8780"+
+            "\u8781\u8782\u8783\u8784\u8785\u8786\u8787\u8788"+
+            "\u8789\u878A\u878B\u878C\u878D\u878E\u878F\u8790"+
+            "\u8791\u8792\u8793\u8794\u8795\u8796\u8797\u8798"+
+            "\u8799\u879A\u879B\u879C\u879D\u879E\u879F\u87A0"+
+            "\u87A1\u87A2\u87A3\u87A4\u87A5\u87A6\u87A7\u87A8"+
+            "\u87A9\u87AA\u87AB\u87AC\u87AD\u87AE\u87AF\u87B0"+
+            "\u87B1\u87B2\u87B3\u87B4\u87B5\u87B6\u87B7\u87B8"+
+            "\u87B9\u87BA\u87BB\u87BC\u87BD\u87BE\u87BF\u87C0"+
+            "\u87C1\u87C2\u87C3\u87C4\u87C5\u87C6\u87C7\u87C8"+
+            "\u87C9\u87CA\u87CB\u87CC\u87CD\u87CE\u87CF\u87D0"+
+            "\u87D1\u87D2\u87D3\u87D4\u87D5\u87D6\u87D7\u87D8"+
+            "\u87D9\u87DA\u87DB\u87DC\u87DD\u87DE\u87DF\u87E0"+
+            "\u87E1\u87E2\u87E3\u87E4\u87E5\u87E6\u87E7\u87E8"+
+            "\u87E9\u87EA\u87EB\u87EC\u87ED\u87EE\u87EF\u87F0"+
+            "\u87F1\u87F2\u87F3\u87F4\u87F5\u87F6\u87F7\u87F8"+
+            "\u87F9\u87FA\u87FB\u87FC\u87FD\u87FE\u87FF\u8800"+
+            "\u8801\u8802\u8803\u8804\u8805\u8806\u8807\u8808"+
+            "\u8809\u880A\u880B\u880C\u880D\u880E\u880F\u8810"+
+            "\u8811\u8812\u8813\u8814\u8815\u8816\u8817\u8818"+
+            "\u8819\u881A\u881B\u881C\u881D\u881E\u881F\u8820"+
+            "\u8821\u8822\u8823\u8824\u8825\u8826\u8827\u8828"+
+            "\u8829\u882A\u882B\u882C\u882D\u882E\u882F\u8830"+
+            "\u8831\u8832\u8833\u8834\u8835\u8836\u8837\u8838"+
+            "\u8839\u883A\u883B\u883C\u883D\u883E\u883F\u8840"+
+            "\u8841\u8842\u8843\u8844\u8845\u8846\u8847\u8848"+
+            "\u8849\u884A\u884B\u884C\u884D\u884E\u884F\u8850"+
+            "\u8851\u8852\u8853\u8854\u8855\u8856\u8857\u8858"+
+            "\u8859\u885A\u885B\u885C\u885D\u885E\u885F\u8860"+
+            "\u8861\u8862\u8863\u8864\u8865\u8866\u8867\u8868"+
+            "\u8869\u886A\u886B\u886C\u886D\u886E\u886F\u8870"+
+            "\u8871\u8872\u8873\u8874\u8875\u8876\u8877\u8878"+
+            "\u8879\u887A\u887B\u887C\u887D\u887E\u887F\u8880"+
+            "\u8881\u8882\u8883\u8884\u8885\u8886\u8887\u8888"+
+            "\u8889\u888A\u888B\u888C\u888D\u888E\u888F\u8890"+
+            "\u8891\u8892\u8893\u8894\u8895\u8896\u8897\u8898"+
+            "\u8899\u889A\u889B\u889C\u889D\u889E\u889F\u88A0"+
+            "\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6\u88A7\u88A8"+
+            "\u88A9\u88AA\u88AB\u88AC\u88AD\u88AE\u88AF\u88B0"+
+            "\u88B1\u88B2\u88B3\u88B4\u88B5\u88B6\u88B7\u88B8"+
+            "\u88B9\u88BA\u88BB\u88BC\u88BD\u88BE\u88BF\u88C0"+
+            "\u88C1\u88C2\u88C3\u88C4\u88C5\u88C6\u88C7\u88C8"+
+            "\u88C9\u88CA\u88CB\u88CC\u88CD\u88CE\u88CF\u88D0"+
+            "\u88D1\u88D2\u88D3\u88D4\u88D5\u88D6\u88D7\u88D8"+
+            "\u88D9\u88DA\u88DB\u88DC\u88DD\u88DE\u88DF\u88E0"+
+            "\u88E1\u88E2\u88E3\u88E4\u88E5\u88E6\u88E7\u88E8"+
+            "\u88E9\u88EA\u88EB\u88EC\u88ED\u88EE\u88EF\u88F0"+
+            "\u88F1\u88F2\u88F3\u88F4\u88F5\u88F6\u88F7\u88F8"+
+            "\u88F9\u88FA\u88FB\u88FC\u88FD\u88FE\u88FF\u8900"+
+            "\u8901\u8902\u8903\u8904\u8905\u8906\u8907\u8908"+
+            "\u8909\u890A\u890B\u890C\u890D\u890E\u890F\u8910"+
+            "\u8911\u8912\u8913\u8914\u8915\u8916\u8917\u8918"+
+            "\u8919\u891A\u891B\u891C\u891D\u891E\u891F\u8920"+
+            "\u8921\u8922\u8923\u8924\u8925\u8926\u8927\u8928"+
+            "\u8929\u892A\u892B\u892C\u892D\u892E\u892F\u8930"+
+            "\u8931\u8932\u8933\u8934\u8935\u8936\u8937\u8938"+
+            "\u8939\u893A\u893B\u893C\u893D\u893E\u893F\u8940"+
+            "\u8941\u8942\u8943\u8944\u8945\u8946\u8947\u8948"+
+            "\u8949\u894A\u894B\u894C\u894D\u894E\u894F\u8950"+
+            "\u8951\u8952\u8953\u8954\u8955\u8956\u8957\u8958"+
+            "\u8959\u895A\u895B\u895C\u895D\u895E\u895F\u8960"+
+            "\u8961\u8962\u8963\u8964\u8965\u8966\u8967\u8968"+
+            "\u8969\u896A\u896B\u896C\u896D\u896E\u896F\u8970"+
+            "\u8971\u8972\u8973\u8974\u8975\u8976\u8977\u8978"+
+            "\u8979\u897A\u897B\u897C\u897D\u897E\u897F\u8980"+
+            "\u8981\u8982\u8983\u8984\u8985\u8986\u8987\u8988"+
+            "\u8989\u898A\u898B\u898C\u898D\u898E\u898F\u8990"+
+            "\u8991\u8992\u8993\u8994\u8995\u8996\u8997\u8998"+
+            "\u8999\u899A\u899B\u899C\u899D\u899E\u899F\u89A0"+
+            "\u89A1\u89A2\u89A3\u89A4\u89A5\u89A6\u89A7\u89A8";
+
+        private final static String innerIndex9=
+            "\u89A9\u89AA\u89AB\u89AC\u89AD\u89AE\u89AF\u89B0"+
+            "\u89B1\u89B2\u89B3\u89B4\u89B5\u89B6\u89B7\u89B8"+
+            "\u89B9\u89BA\u89BB\u89BC\u89BD\u89BE\u89BF\u89C0"+
+            "\u89C1\u89C2\u89C3\u89C4\u89C5\u89C6\u89C7\u89C8"+
+            "\u89C9\u89CA\u89CB\u89CC\u89CD\u89CE\u89CF\u89D0"+
+            "\u89D1\u89D2\u89D3\u89D4\u89D5\u89D6\u89D7\u89D8"+
+            "\u89D9\u89DA\u89DB\u89DC\u89DD\u89DE\u89DF\u89E0"+
+            "\u89E1\u89E2\u89E3\u89E4\u89E5\u89E6\u89E7\u89E8"+
+            "\u89E9\u89EA\u89EB\u89EC\u89ED\u89EE\u89EF\u89F0"+
+            "\u89F1\u89F2\u89F3\u89F4\u89F5\u89F6\u89F7\u89F8"+
+            "\u89F9\u89FA\u89FB\u89FC\u89FD\u89FE\u89FF\u8A00"+
+            "\u8A01\u8A02\u8A03\u8A04\u8A05\u8A06\u8A07\u8A08"+
+            "\u8A09\u8A0A\u8A0B\u8A0C\u8A0D\u8A0E\u8A0F\u8A10"+
+            "\u8A11\u8A12\u8A13\u8A14\u8A15\u8A16\u8A17\u8A18"+
+            "\u8A19\u8A1A\u8A1B\u8A1C\u8A1D\u8A1E\u8A1F\u8A20"+
+            "\u8A21\u8A22\u8A23\u8A24\u8A25\u8A26\u8A27\u8A28"+
+            "\u8A29\u8A2A\u8A2B\u8A2C\u8A2D\u8A2E\u8A2F\u8A30"+
+            "\u8A31\u8A32\u8A33\u8A34\u8A35\u8A36\u8A37\u8A38"+
+            "\u8A39\u8A3A\u8A3B\u8A3C\u8A3D\u8A3E\u8A3F\u8A40"+
+            "\u8A41\u8A42\u8A43\u8A44\u8A45\u8A46\u8A47\u8A48"+
+            "\u8A49\u8A4A\u8A4B\u8A4C\u8A4D\u8A4E\u8A4F\u8A50"+
+            "\u8A51\u8A52\u8A53\u8A54\u8A55\u8A56\u8A57\u8A58"+
+            "\u8A59\u8A5A\u8A5B\u8A5C\u8A5D\u8A5E\u8A5F\u8A60"+
+            "\u8A61\u8A62\u8A63\u8A64\u8A65\u8A66\u8A67\u8A68"+
+            "\u8A69\u8A6A\u8A6B\u8A6C\u8A6D\u8A6E\u8A6F\u8A70"+
+            "\u8A71\u8A72\u8A73\u8A74\u8A75\u8A76\u8A77\u8A78"+
+            "\u8A79\u8A7A\u8A7B\u8A7C\u8A7D\u8A7E\u8A7F\u8A80"+
+            "\u8A81\u8A82\u8A83\u8A84\u8A85\u8A86\u8A87\u8A88"+
+            "\u8A89\u8A8A\u8A8B\u8A8C\u8A8D\u8A8E\u8A8F\u8A90"+
+            "\u8A91\u8A92\u8A93\u8A94\u8A95\u8A96\u8A97\u8A98"+
+            "\u8A99\u8A9A\u8A9B\u8A9C\u8A9D\u8A9E\u8A9F\u8AA0"+
+            "\u8AA1\u8AA2\u8AA3\u8AA4\u8AA5\u8AA6\u8AA7\u8AA8"+
+            "\u8AA9\u8AAA\u8AAB\u8AAC\u8AAD\u8AAE\u8AAF\u8AB0"+
+            "\u8AB1\u8AB2\u8AB3\u8AB4\u8AB5\u8AB6\u8AB7\u8AB8"+
+            "\u8AB9\u8ABA\u8ABB\u8ABC\u8ABD\u8ABE\u8ABF\u8AC0"+
+            "\u8AC1\u8AC2\u8AC3\u8AC4\u8AC5\u8AC6\u8AC7\u8AC8"+
+            "\u8AC9\u8ACA\u8ACB\u8ACC\u8ACD\u8ACE\u8ACF\u8AD0"+
+            "\u8AD1\u8AD2\u8AD3\u8AD4\u8AD5\u8AD6\u8AD7\u8AD8"+
+            "\u8AD9\u8ADA\u8ADB\u8ADC\u8ADD\u8ADE\u8ADF\u8AE0"+
+            "\u8AE1\u8AE2\u8AE3\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8"+
+            "\u8AE9\u8AEA\u8AEB\u8AEC\u8AED\u8AEE\u8AEF\u8AF0"+
+            "\u8AF1\u8AF2\u8AF3\u8AF4\u8AF5\u8AF6\u8AF7\u8AF8"+
+            "\u8AF9\u8AFA\u8AFB\u8AFC\u8AFD\u8AFE\u8AFF\u8B00"+
+            "\u8B01\u8B02\u8B03\u8B04\u8B05\u8B06\u8B07\u8B08"+
+            "\u8B09\u8B0A\u8B0B\u8B0C\u8B0D\u8B0E\u8B0F\u8B10"+
+            "\u8B11\u8B12\u8B13\u8B14\u8B15\u8B16\u8B17\u8B18"+
+            "\u8B19\u8B1A\u8B1B\u8B1C\u8B1D\u8B1E\u8B1F\u8B20"+
+            "\u8B21\u8B22\u8B23\u8B24\u8B25\u8B26\u8B27\u8B28"+
+            "\u8B29\u8B2A\u8B2B\u8B2C\u8B2D\u8B2E\u8B2F\u8B30"+
+            "\u8B31\u8B32\u8B33\u8B34\u8B35\u8B36\u8B37\u8B38"+
+            "\u8B39\u8B3A\u8B3B\u8B3C\u8B3D\u8B3E\u8B3F\u8B40"+
+            "\u8B41\u8B42\u8B43\u8B44\u8B45\u8B46\u8B47\u8B48"+
+            "\u8B49\u8B4A\u8B4B\u8B4C\u8B4D\u8B4E\u8B4F\u8B50"+
+            "\u8B51\u8B52\u8B53\u8B54\u8B55\u8B56\u8B57\u8B58"+
+            "\u8B59\u8B5A\u8B5B\u8B5C\u8B5D\u8B5E\u8B5F\u8B60"+
+            "\u8B61\u8B62\u8B63\u8B64\u8B65\u8B66\u8B67\u8B68"+
+            "\u8B69\u8B6A\u8B6B\u8B6C\u8B6D\u8B6E\u8B6F\u8B70"+
+            "\u8B71\u8B72\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78"+
+            "\u8B79\u8B7A\u8B7B\u8B7C\u8B7D\u8B7E\u8B7F\u8B80"+
+            "\u8B81\u8B82\u8B83\u8B84\u8B85\u8B86\u8B87\u8B88"+
+            "\u8B89\u8B8A\u8B8B\u8B8C\u8B8D\u8B8E\u8B8F\u8B90"+
+            "\u8B91\u8B92\u8B93\u8B94\u8B95\u8B96\u8B97\u8B98"+
+            "\u8B99\u8B9A\u8B9B\u8B9C\u8B9D\u8B9E\u8B9F\u8BA0"+
+            "\u8BA1\u8BA2\u8BA3\u8BA4\u8BA5\u8BA6\u8BA7\u8BA8"+
+            "\u8BA9\u8BAA\u8BAB\u8BAC\u8BAD\u8BAE\u8BAF\u8BB0"+
+            "\u8BB1\u8BB2\u8BB3\u8BB4\u8BB5\u8BB6\u8BB7\u8BB8"+
+            "\u8BB9\u8BBA\u8BBB\u8BBC\u8BBD\u8BBE\u8BBF\u8BC0"+
+            "\u8BC1\u8BC2\u8BC3\u8BC4\u8BC5\u8BC6\u8BC7\u8BC8"+
+            "\u8BC9\u8BCA\u8BCB\u8BCC\u8BCD\u8BCE\u8BCF\u8BD0"+
+            "\u8BD1\u8BD2\u8BD3\u8BD4\u8BD5\u8BD6\u8BD7\u8BD8"+
+            "\u8BD9\u8BDA\u8BDB\u8BDC\u8BDD\u8BDE\u8BDF\u8BE0"+
+            "\u8BE1\u8BE2\u8BE3\u8BE4\u8BE5\u8BE6\u8BE7\u8BE8"+
+            "\u8BE9\u8BEA\u8BEB\u8BEC\u8BED\u8BEE\u8BEF\u8BF0"+
+            "\u8BF1\u8BF2\u8BF3\u8BF4\u8BF5\u8BF6\u8BF7\u8BF8"+
+            "\u8BF9\u8BFA\u8BFB\u8BFC\u8BFD\u8BFE\u8BFF\u8C00"+
+            "\u8C01\u8C02\u8C03\u8C04\u8C05\u8C06\u8C07\u8C08"+
+            "\u8C09\u8C0A\u8C0B\u8C0C\u8C0D\u8C0E\u8C0F\u8C10"+
+            "\u8C11\u8C12\u8C13\u8C14\u8C15\u8C16\u8C17\u8C18"+
+            "\u8C19\u8C1A\u8C1B\u8C1C\u8C1D\u8C1E\u8C1F\u8C20"+
+            "\u8C21\u8C22\u8C23\u8C24\u8C25\u8C26\u8C27\u8C28"+
+            "\u8C29\u8C2A\u8C2B\u8C2C\u8C2D\u8C2E\u8C2F\u8C30"+
+            "\u8C31\u8C32\u8C33\u8C34\u8C35\u8C36\u8C37\u8C38"+
+            "\u8C39\u8C3A\u8C3B\u8C3C\u8C3D\u8C3E\u8C3F\u8C40"+
+            "\u8C41\u8C42\u8C43\u8C44\u8C45\u8C46\u8C47\u8C48"+
+            "\u8C49\u8C4A\u8C4B\u8C4C\u8C4D\u8C4E\u8C4F\u8C50"+
+            "\u8C51\u8C52\u8C53\u8C54\u8C55\u8C56\u8C57\u8C58"+
+            "\u8C59\u8C5A\u8C5B\u8C5C\u8C5D\u8C5E\u8C5F\u8C60"+
+            "\u8C61\u8C62\u8C63\u8C64\u8C65\u8C66\u8C67\u8C68"+
+            "\u8C69\u8C6A\u8C6B\u8C6C\u8C6D\u8C6E\u8C6F\u8C70"+
+            "\u8C71\u8C72\u8C73\u8C74\u8C75\u8C76\u8C77\u8C78"+
+            "\u8C79\u8C7A\u8C7B\u8C7C\u8C7D\u8C7E\u8C7F\u8C80"+
+            "\u8C81\u8C82\u8C83\u8C84\u8C85\u8C86\u8C87\u8C88"+
+            "\u8C89\u8C8A\u8C8B\u8C8C\u8C8D\u8C8E\u8C8F\u8C90"+
+            "\u8C91\u8C92\u8C93\u8C94\u8C95\u8C96\u8C97\u8C98"+
+            "\u8C99\u8C9A\u8C9B\u8C9C\u8C9D\u8C9E\u8C9F\u8CA0"+
+            "\u8CA1\u8CA2\u8CA3\u8CA4\u8CA5\u8CA6\u8CA7\u8CA8"+
+            "\u8CA9\u8CAA\u8CAB\u8CAC\u8CAD\u8CAE\u8CAF\u8CB0"+
+            "\u8CB1\u8CB2\u8CB3\u8CB4\u8CB5\u8CB6\u8CB7\u8CB8"+
+            "\u8CB9\u8CBA\u8CBB\u8CBC\u8CBD\u8CBE\u8CBF\u8CC0"+
+            "\u8CC1\u8CC2\u8CC3\u8CC4\u8CC5\u8CC6\u8CC7\u8CC8"+
+            "\u8CC9\u8CCA\u8CCB\u8CCC\u8CCD\u8CCE\u8CCF\u8CD0"+
+            "\u8CD1\u8CD2\u8CD3\u8CD4\u8CD5\u8CD6\u8CD7\u8CD8"+
+            "\u8CD9\u8CDA\u8CDB\u8CDC\u8CDD\u8CDE\u8CDF\u8CE0"+
+            "\u8CE1\u8CE2\u8CE3\u8CE4\u8CE5\u8CE6\u8CE7\u8CE8"+
+            "\u8CE9\u8CEA\u8CEB\u8CEC\u8CED\u8CEE\u8CEF\u8CF0"+
+            "\u8CF1\u8CF2\u8CF3\u8CF4\u8CF5\u8CF6\u8CF7\u8CF8"+
+            "\u8CF9\u8CFA\u8CFB\u8CFC\u8CFD\u8CFE\u8CFF\u8D00"+
+            "\u8D01\u8D02\u8D03\u8D04\u8D05\u8D06\u8D07\u8D08"+
+            "\u8D09\u8D0A\u8D0B\u8D0C\u8D0D\u8D0E\u8D0F\u8D10"+
+            "\u8D11\u8D12\u8D13\u8D14\u8D15\u8D16\u8D17\u8D18"+
+            "\u8D19\u8D1A\u8D1B\u8D1C\u8D1D\u8D1E\u8D1F\u8D20"+
+            "\u8D21\u8D22\u8D23\u8D24\u8D25\u8D26\u8D27\u8D28"+
+            "\u8D29\u8D2A\u8D2B\u8D2C\u8D2D\u8D2E\u8D2F\u8D30"+
+            "\u8D31\u8D32\u8D33\u8D34\u8D35\u8D36\u8D37\u8D38"+
+            "\u8D39\u8D3A\u8D3B\u8D3C\u8D3D\u8D3E\u8D3F\u8D40"+
+            "\u8D41\u8D42\u8D43\u8D44\u8D45\u8D46\u8D47\u8D48"+
+            "\u8D49\u8D4A\u8D4B\u8D4C\u8D4D\u8D4E\u8D4F\u8D50"+
+            "\u8D51\u8D52\u8D53\u8D54\u8D55\u8D56\u8D57\u8D58"+
+            "\u8D59\u8D5A\u8D5B\u8D5C\u8D5D\u8D5E\u8D5F\u8D60"+
+            "\u8D61\u8D62\u8D63\u8D64\u8D65\u8D66\u8D67\u8D68"+
+            "\u8D69\u8D6A\u8D6B\u8D6C\u8D6D\u8D6E\u8D6F\u8D70"+
+            "\u8D71\u8D72\u8D73\u8D74\u8D75\u8D76\u8D77\u8D78"+
+            "\u8D79\u8D7A\u8D7B\u8D7C\u8D7D\u8D7E\u8D7F\u8D80"+
+            "\u8D81\u8D82\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88"+
+            "\u8D89\u8D8A\u8D8B\u8D8C\u8D8D\u8D8E\u8D8F\u8D90"+
+            "\u8D91\u8D92\u8D93\u8D94\u8D95\u8D96\u8D97\u8D98"+
+            "\u8D99\u8D9A\u8D9B\u8D9C\u8D9D\u8D9E\u8D9F\u8DA0"+
+            "\u8DA1\u8DA2\u8DA3\u8DA4\u8DA5\u8DA6\u8DA7\u8DA8"+
+            "\u8DA9\u8DAA\u8DAB\u8DAC\u8DAD\u8DAE\u8DAF\u8DB0"+
+            "\u8DB1\u8DB2\u8DB3\u8DB4\u8DB5\u8DB6\u8DB7\u8DB8"+
+            "\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD\u8DBE\u8DBF\u8DC0"+
+            "\u8DC1\u8DC2\u8DC3\u8DC4\u8DC5\u8DC6\u8DC7\u8DC8"+
+            "\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD\u8DCE\u8DCF\u8DD0"+
+            "\u8DD1\u8DD2\u8DD3\u8DD4\u8DD5\u8DD6\u8DD7\u8DD8"+
+            "\u8DD9\u8DDA\u8DDB\u8DDC\u8DDD\u8DDE\u8DDF\u8DE0"+
+            "\u8DE1\u8DE2\u8DE3\u8DE4\u8DE5\u8DE6\u8DE7\u8DE8"+
+            "\u8DE9\u8DEA\u8DEB\u8DEC\u8DED\u8DEE\u8DEF\u8DF0"+
+            "\u8DF1\u8DF2\u8DF3\u8DF4\u8DF5\u8DF6\u8DF7\u8DF8"+
+            "\u8DF9\u8DFA\u8DFB\u8DFC\u8DFD\u8DFE\u8DFF\u8E00"+
+            "\u8E01\u8E02\u8E03\u8E04\u8E05\u8E06\u8E07\u8E08"+
+            "\u8E09\u8E0A\u8E0B\u8E0C\u8E0D\u8E0E\u8E0F\u8E10"+
+            "\u8E11\u8E12\u8E13\u8E14\u8E15\u8E16\u8E17\u8E18"+
+            "\u8E19\u8E1A\u8E1B\u8E1C\u8E1D\u8E1E\u8E1F\u8E20"+
+            "\u8E21\u8E22\u8E23\u8E24\u8E25\u8E26\u8E27\u8E28"+
+            "\u8E29\u8E2A\u8E2B\u8E2C\u8E2D\u8E2E\u8E2F\u8E30"+
+            "\u8E31\u8E32\u8E33\u8E34\u8E35\u8E36\u8E37\u8E38"+
+            "\u8E39\u8E3A\u8E3B\u8E3C\u8E3D\u8E3E\u8E3F\u8E40"+
+            "\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46\u8E47\u8E48"+
+            "\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E\u8E4F\u8E50"+
+            "\u8E51\u8E52\u8E53\u8E54\u8E55\u8E56\u8E57\u8E58"+
+            "\u8E59\u8E5A\u8E5B\u8E5C\u8E5D\u8E5E\u8E5F\u8E60"+
+            "\u8E61\u8E62\u8E63\u8E64\u8E65\u8E66\u8E67\u8E68"+
+            "\u8E69\u8E6A\u8E6B\u8E6C\u8E6D\u8E6E\u8E6F\u8E70"+
+            "\u8E71\u8E72\u8E73\u8E74\u8E75\u8E76\u8E77\u8E78"+
+            "\u8E79\u8E7A\u8E7B\u8E7C\u8E7D\u8E7E\u8E7F\u8E80"+
+            "\u8E81\u8E82\u8E83\u8E84\u8E85\u8E86\u8E87\u8E88"+
+            "\u8E89\u8E8A\u8E8B\u8E8C\u8E8D\u8E8E\u8E8F\u8E90"+
+            "\u8E91\u8E92\u8E93\u8E94\u8E95\u8E96\u8E97\u8E98"+
+            "\u8E99\u8E9A\u8E9B\u8E9C\u8E9D\u8E9E\u8E9F\u8EA0"+
+            "\u8EA1\u8EA2\u8EA3\u8EA4\u8EA5\u8EA6\u8EA7\u8EA8"+
+            "\u8EA9\u8EAA\u8EAB\u8EAC\u8EAD\u8EAE\u8EAF\u8EB0"+
+            "\u8EB1\u8EB2\u8EB3\u8EB4\u8EB5\u8EB6\u8EB7\u8EB8"+
+            "\u8EB9\u8EBA\u8EBB\u8EBC\u8EBD\u8EBE\u8EBF\u8EC0"+
+            "\u8EC1\u8EC2\u8EC3\u8EC4\u8EC5\u8EC6\u8EC7\u8EC8"+
+            "\u8EC9\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0"+
+            "\u8ED1\u8ED2\u8ED3\u8ED4\u8ED5\u8ED6\u8ED7\u8ED8"+
+            "\u8ED9\u8EDA\u8EDB\u8EDC\u8EDD\u8EDE\u8EDF\u8EE0"+
+            "\u8EE1\u8EE2\u8EE3\u8EE4\u8EE5\u8EE6\u8EE7\u8EE8"+
+            "\u8EE9\u8EEA\u8EEB\u8EEC\u8EED\u8EEE\u8EEF\u8EF0"+
+            "\u8EF1\u8EF2\u8EF3\u8EF4\u8EF5\u8EF6\u8EF7\u8EF8"+
+            "\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD\u8EFE\u8EFF\u8F00"+
+            "\u8F01\u8F02\u8F03\u8F04\u8F05\u8F06\u8F07\u8F08"+
+            "\u8F09\u8F0A\u8F0B\u8F0C\u8F0D\u8F0E\u8F0F\u8F10"+
+            "\u8F11\u8F12\u8F13\u8F14\u8F15\u8F16\u8F17\u8F18"+
+            "\u8F19\u8F1A\u8F1B\u8F1C\u8F1D\u8F1E\u8F1F\u8F20"+
+            "\u8F21\u8F22\u8F23\u8F24\u8F25\u8F26\u8F27\u8F28"+
+            "\u8F29\u8F2A\u8F2B\u8F2C\u8F2D\u8F2E\u8F2F\u8F30"+
+            "\u8F31\u8F32\u8F33\u8F34\u8F35\u8F36\u8F37\u8F38"+
+            "\u8F39\u8F3A\u8F3B\u8F3C\u8F3D\u8F3E\u8F3F\u8F40"+
+            "\u8F41\u8F42\u8F43\u8F44\u8F45\u8F46\u8F47\u8F48"+
+            "\u8F49\u8F4A\u8F4B\u8F4C\u8F4D\u8F4E\u8F4F\u8F50"+
+            "\u8F51\u8F52\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58"+
+            "\u8F59\u8F5A\u8F5B\u8F5C\u8F5D\u8F5E\u8F5F\u8F60"+
+            "\u8F61\u8F62\u8F63\u8F64\u8F65\u8F66\u8F67\u8F68"+
+            "\u8F69\u8F6A\u8F6B\u8F6C\u8F6D\u8F6E\u8F6F\u8F70"+
+            "\u8F71\u8F72\u8F73\u8F74\u8F75\u8F76\u8F77\u8F78"+
+            "\u8F79\u8F7A\u8F7B\u8F7C\u8F7D\u8F7E\u8F7F\u8F80"+
+            "\u8F81\u8F82\u8F83\u8F84\u8F85\u8F86\u8F87\u8F88"+
+            "\u8F89\u8F8A\u8F8B\u8F8C\u8F8D\u8F8E\u8F8F\u8F90"+
+            "\u8F91\u8F92\u8F93\u8F94\u8F95\u8F96\u8F97\u8F98"+
+            "\u8F99\u8F9A\u8F9B\u8F9C\u8F9D\u8F9E\u8F9F\u8FA0"+
+            "\u8FA1\u8FA2\u8FA3\u8FA4\u8FA5\u8FA6\u8FA7\u8FA8"+
+            "\u8FA9\u8FAA\u8FAB\u8FAC\u8FAD\u8FAE\u8FAF\u8FB0"+
+            "\u8FB1\u8FB2\u8FB3\u8FB4\u8FB5\u8FB6\u8FB7\u8FB8"+
+            "\u8FB9\u8FBA\u8FBB\u8FBC\u8FBD\u8FBE\u8FBF\u8FC0"+
+            "\u8FC1\u8FC2\u8FC3\u8FC4\u8FC5\u8FC6\u8FC7\u8FC8"+
+            "\u8FC9\u8FCA\u8FCB\u8FCC\u8FCD\u8FCE\u8FCF\u8FD0"+
+            "\u8FD1\u8FD2\u8FD3\u8FD4\u8FD5\u8FD6\u8FD7\u8FD8"+
+            "\u8FD9\u8FDA\u8FDB\u8FDC\u8FDD\u8FDE\u8FDF\u8FE0"+
+            "\u8FE1\u8FE2\u8FE3\u8FE4\u8FE5\u8FE6\u8FE7\u8FE8"+
+            "\u8FE9\u8FEA\u8FEB\u8FEC\u8FED\u8FEE\u8FEF\u8FF0"+
+            "\u8FF1\u8FF2\u8FF3\u8FF4\u8FF5\u8FF6\u8FF7\u8FF8"+
+            "\u8FF9\u8FFA\u8FFB\u8FFC\u8FFD\u8FFE\u8FFF\u9000"+
+            "\u9001\u9002\u9003\u9004\u9005\u9006\u9007\u9008"+
+            "\u9009\u900A\u900B\u900C\u900D\u900E\u900F\u9010"+
+            "\u9011\u9012\u9013\u9014\u9015\u9016\u9017\u9018"+
+            "\u9019\u901A\u901B\u901C\u901D\u901E\u901F\u9020"+
+            "\u9021\u9022\u9023\u9024\u9025\u9026\u9027\u9028"+
+            "\u9029\u902A\u902B\u902C\u902D\u902E\u902F\u9030"+
+            "\u9031\u9032\u9033\u9034\u9035\u9036\u9037\u9038"+
+            "\u9039\u903A\u903B\u903C\u903D\u903E\u903F\u9040"+
+            "\u9041\u9042\u9043\u9044\u9045\u9046\u9047\u9048"+
+            "\u9049\u904A\u904B\u904C\u904D\u904E\u904F\u9050"+
+            "\u9051\u9052\u9053\u9054\u9055\u9056\u9057\u9058"+
+            "\u9059\u905A\u905B\u905C\u905D\u905E\u905F\u9060"+
+            "\u9061\u9062\u9063\u9064\u9065\u9066\u9067\u9068"+
+            "\u9069\u906A\u906B\u906C\u906D\u906E\u906F\u9070"+
+            "\u9071\u9072\u9073\u9074\u9075\u9076\u9077\u9078"+
+            "\u9079\u907A\u907B\u907C\u907D\u907E\u907F\u9080"+
+            "\u9081\u9082\u9083\u9084\u9085\u9086\u9087\u9088"+
+            "\u9089\u908A\u908B\u908C\u908D\u908E\u908F\u9090"+
+            "\u9091\u9092\u9093\u9094\u9095\u9096\u9097\u9098"+
+            "\u9099\u909A\u909B\u909C\u909D\u909E\u909F\u90A0"+
+            "\u90A1\u90A2\u90A3\u90A4\u90A5\u90A6\u90A7\u90A8"+
+            "\u90A9\u90AA\u90AB\u90AC\u90AD\u90AE\u90AF\u90B0"+
+            "\u90B1\u90B2\u90B3\u90B4\u90B5\u90B6\u90B7\u90B8"+
+            "\u90B9\u90BA\u90BB\u90BC\u90BD\u90BE\u90BF\u90C0"+
+            "\u90C1\u90C2\u90C3\u90C4\u90C5\u90C6\u90C7\u90C8"+
+            "\u90C9\u90CA\u90CB\u90CC\u90CD\u90CE\u90CF\u90D0"+
+            "\u90D1\u90D2\u90D3\u90D4\u90D5\u90D6\u90D7\u90D8"+
+            "\u90D9\u90DA\u90DB\u90DC\u90DD\u90DE\u90DF\u90E0"+
+            "\u90E1\u90E2\u90E3\u90E4\u90E5\u90E6\u90E7\u90E8"+
+            "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
+            "\u90F1\u90F2\u90F3\u90F4\u90F5\u90F6\u90F7\u90F8"+
+            "\u90F9\u90FA\u90FB\u90FC\u90FD\u90FE\u90FF\u9100"+
+            "\u9101\u9102\u9103\u9104\u9105\u9106\u9107\u9108"+
+            "\u9109\u910A\u910B\u910C\u910D\u910E\u910F\u9110"+
+            "\u9111\u9112\u9113\u9114\u9115\u9116\u9117\u9118"+
+            "\u9119\u911A\u911B\u911C\u911D\u911E\u911F\u9120"+
+            "\u9121\u9122\u9123\u9124\u9125\u9126\u9127\u9128"+
+            "\u9129\u912A\u912B\u912C\u912D\u912E\u912F\u9130"+
+            "\u9131\u9132\u9133\u9134\u9135\u9136\u9137\u9138"+
+            "\u9139\u913A\u913B\u913C\u913D\u913E\u913F\u9140"+
+            "\u9141\u9142\u9143\u9144\u9145\u9146\u9147\u9148"+
+            "\u9149\u914A\u914B\u914C\u914D\u914E\u914F\u9150"+
+            "\u9151\u9152\u9153\u9154\u9155\u9156\u9157\u9158"+
+            "\u9159\u915A\u915B\u915C\u915D\u915E\u915F\u9160"+
+            "\u9161\u9162\u9163\u9164\u9165\u9166\u9167\u9168"+
+            "\u9169\u916A\u916B\u916C\u916D\u916E\u916F\u9170"+
+            "\u9171\u9172\u9173\u9174\u9175\u9176\u9177\u9178"+
+            "\u9179\u917A\u917B\u917C\u917D\u917E\u917F\u9180"+
+            "\u9181\u9182\u9183\u9184\u9185\u9186\u9187\u9188"+
+            "\u9189\u918A\u918B\u918C\u918D\u918E\u918F\u9190"+
+            "\u9191\u9192\u9193\u9194\u9195\u9196\u9197\u9198"+
+            "\u9199\u919A\u919B\u919C\u919D\u919E\u919F\u91A0"+
+            "\u91A1\u91A2\u91A3\u91A4\u91A5\u91A6\u91A7\u91A8"+
+            "\u91A9\u91AA\u91AB\u91AC\u91AD\u91AE\u91AF\u91B0"+
+            "\u91B1\u91B2\u91B3\u91B4\u91B5\u91B6\u91B7\u91B8"+
+            "\u91B9\u91BA\u91BB\u91BC\u91BD\u91BE\u91BF\u91C0"+
+            "\u91C1\u91C2\u91C3\u91C4\u91C5\u91C6\u91C7\u91C8"+
+            "\u91C9\u91CA\u91CB\u91CC\u91CD\u91CE\u91CF\u91D0"+
+            "\u91D1\u91D2\u91D3\u91D4\u91D5\u91D6\u91D7\u91D8"+
+            "\u91D9\u91DA\u91DB\u91DC\u91DD\u91DE\u91DF\u91E0"+
+            "\u91E1\u91E2\u91E3\u91E4\u91E5\u91E6\u91E7\u91E8"+
+            "\u91E9\u91EA\u91EB\u91EC\u91ED\u91EE\u91EF\u91F0"+
+            "\u91F1\u91F2\u91F3\u91F4\u91F5\u91F6\u91F7\u91F8"+
+            "\u91F9\u91FA\u91FB\u91FC\u91FD\u91FE\u91FF\u9200"+
+            "\u9201\u9202\u9203\u9204\u9205\u9206\u9207\u9208"+
+            "\u9209\u920A\u920B\u920C\u920D\u920E\u920F\u9210"+
+            "\u9211\u9212\u9213\u9214\u9215\u9216\u9217\u9218"+
+            "\u9219\u921A\u921B\u921C\u921D\u921E\u921F\u9220"+
+            "\u9221\u9222\u9223\u9224\u9225\u9226\u9227\u9228"+
+            "\u9229\u922A\u922B\u922C\u922D\u922E\u922F\u9230"+
+            "\u9231\u9232\u9233\u9234\u9235\u9236\u9237\u9238"+
+            "\u9239\u923A\u923B\u923C\u923D\u923E\u923F\u9240"+
+            "\u9241\u9242\u9243\u9244\u9245\u9246\u9247\u9248"+
+            "\u9249\u924A\u924B\u924C\u924D\u924E\u924F\u9250"+
+            "\u9251\u9252\u9253\u9254\u9255\u9256\u9257\u9258"+
+            "\u9259\u925A\u925B\u925C\u925D\u925E\u925F\u9260"+
+            "\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268"+
+            "\u9269\u926A\u926B\u926C\u926D\u926E\u926F\u9270"+
+            "\u9271\u9272\u9273\u9274\u9275\u9276\u9277\u9278"+
+            "\u9279\u927A\u927B\u927C\u927D\u927E\u927F\u9280"+
+            "\u9281\u9282\u9283\u9284\u9285\u9286\u9287\u9288"+
+            "\u9289\u928A\u928B\u928C\u928D\u928E\u928F\u9290"+
+            "\u9291\u9292\u9293\u9294\u9295\u9296\u9297\u9298"+
+            "\u9299\u929A\u929B\u929C\u929D\u929E\u929F\u92A0"+
+            "\u92A1\u92A2\u92A3\u92A4\u92A5\u92A6\u92A7\u92A8"+
+            "\u92A9\u92AA\u92AB\u92AC\u92AD\u92AE\u92AF\u92B0"+
+            "\u92B1\u92B2\u92B3\u92B4\u92B5\u92B6\u92B7\u92B8"+
+            "\u92B9\u92BA\u92BB\u92BC\u92BD\u92BE\u92BF\u92C0"+
+            "\u92C1\u92C2\u92C3\u92C4\u92C5\u92C6\u92C7\u92C8"+
+            "\u92C9\u92CA\u92CB\u92CC\u92CD\u92CE\u92CF\u92D0"+
+            "\u92D1\u92D2\u92D3\u92D4\u92D5\u92D6\u92D7\u92D8"+
+            "\u92D9\u92DA\u92DB\u92DC\u92DD\u92DE\u92DF\u92E0"+
+            "\u92E1\u92E2\u92E3\u92E4\u92E5\u92E6\u92E7\u92E8"+
+            "\u92E9\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
+            "\u92F1\u92F2\u92F3\u92F4\u92F5\u92F6\u92F7\u92F8"+
+            "\u92F9\u92FA\u92FB\u92FC\u92FD\u92FE\u92FF\u9300"+
+            "\u9301\u9302\u9303\u9304\u9305\u9306\u9307\u9308"+
+            "\u9309\u930A\u930B\u930C\u930D\u930E\u930F\u9310"+
+            "\u9311\u9312\u9313\u9314\u9315\u9316\u9317\u9318"+
+            "\u9319\u931A\u931B\u931C\u931D\u931E\u931F\u9320"+
+            "\u9321\u9322\u9323\u9324\u9325\u9326\u9327\u9328"+
+            "\u9329\u932A\u932B\u932C\u932D\u932E\u932F\u9330"+
+            "\u9331\u9332\u9333\u9334\u9335\u9336\u9337\u9338"+
+            "\u9339\u933A\u933B\u933C\u933D\u933E\u933F\u9340"+
+            "\u9341\u9342\u9343\u9344\u9345\u9346\u9347\u9348"+
+            "\u9349\u934A\u934B\u934C\u934D\u934E\u934F\u9350"+
+            "\u9351\u9352\u9353\u9354\u9355\u9356\u9357\u9358"+
+            "\u9359\u935A\u935B\u935C\u935D\u935E\u935F\u9360"+
+            "\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368"+
+            "\u9369\u936A\u936B\u936C\u936D\u936E\u936F\u9370"+
+            "\u9371\u9372\u9373\u9374\u9375\u9376\u9377\u9378"+
+            "\u9379\u937A\u937B\u937C\u937D\u937E\u937F\u9380"+
+            "\u9381\u9382\u9383\u9384\u9385\u9386\u9387\u9388"+
+            "\u9389\u938A\u938B\u938C\u938D\u938E\u938F\u9390"+
+            "\u9391\u9392\u9393\u9394\u9395\u9396\u9397\u9398"+
+            "\u9399\u939A\u939B\u939C\u939D\u939E\u939F\u93A0"+
+            "\u93A1\u93A2\u93A3\u93A4\u93A5\u93A6\u93A7\u93A8"+
+            "\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\u93AF\u93B0"+
+            "\u93B1\u93B2\u93B3\u93B4\u93B5\u93B6\u93B7\u93B8"+
+            "\u93B9\u93BA\u93BB\u93BC\u93BD\u93BE\u93BF\u93C0"+
+            "\u93C1\u93C2\u93C3\u93C4\u93C5\u93C6\u93C7\u93C8"+
+            "\u93C9\u93CA\u93CB\u93CC\u93CD\u93CE\u93CF\u93D0"+
+            "\u93D1\u93D2\u93D3\u93D4\u0000\u93D5\u93D6\u93D7"+
+            "\u93D8\u93D9\u93DA\u93DB\u93DC\u93DD\u93DE\u93DF"+
+            "\u93E0\u93E1\u93E2\u93E3\u93E4\u93E5\u93E6\u93E7"+
+            "\u93E8\u93E9\u93EA\u93EB\u93EC\u93ED\u93EE\u93EF"+
+            "\u93F0\u93F1\u93F2\u93F3\u93F4\u93F5\u93F6\u93F7"+
+            "\u93F8\u93F9\u93FA\u93FB\u93FC\u93FD\u93FE\u93FF"+
+            "\u9400\u9401\u9402\u9403\u9404\u9405\u9406\u9407"+
+            "\u9408\u9409\u940A\u940B\u940C\u940D\u940E\u940F"+
+            "\u9410\u9411\u9412\u9413\u9414\u9415\u9416\u9417"+
+            "\u9418\u9419\u941A\u941B\u941C\u941D\u941E\u941F"+
+            "\u9420\u0000\u9421\u9422\u9423\u9424\u9425\u9426"+
+            "\u9427\u9428\u9429\u942A\u942B\u942C\u942D\u942E"+
+            "\u942F\u9430\u9431\u9432\u9433\u9434\u9435\u9436"+
+            "\u9437\u9438\u9439\u943A\u943B\u0000\u943C\u943D"+
+            "\u943E\u943F\u9440\u9441\u9442\u9443\u9444\u9445"+
+            "\u9446\u9447\u9448\u9449\u944A\u944B\u944C\u944D"+
+            "\u944E\u944F\u9450\u9451\u9452\u9453\u9454\u9455"+
+            "\u9456\u9457\u9458\u9459\u945A\u945B\u945C\u945D"+
+            "\u945E\u945F\u9460\u9461\u9462\u9463\u9464\u9465"+
+            "\u9466\u9467\u9468\u9469\u946A\u946B\u946C\u946D"+
+            "\u946E\u946F\u9470\u9471\u9472\u9473\u9474\u9475"+
+            "\u9476\u9477\u9478\u9479\u947A\u947B\u947C\u947D"+
+            "\u947E\u947F\u9480\u9481\u9482\u9483\u9484\u9485"+
+            "\u9486\u9487\u9488\u9489\u948A\u948B\u948C\u0000"+
+            "\u948D\u948E\u948F\u9490\u9491\u9492\u9493\u9494"+
+            "\u9495\u0000\u9496\u9497\u9498\u9499\u949A\u949B"+
+            "\u949C\u949D\u949E\u949F\u94A0\u94A1\u94A2\u94A3"+
+            "\u94A4\u94A5\u94A6\u94A7\u94A8\u94A9\u94AA\u94AB"+
+            "\u94AC\u94AD\u94AE\u94AF\u0000\u0000\u0000\u0000"+
+            "\u94B0\u0000\u94B1\u0000\u0000\u94B2\u94B3\u94B4"+
+            "\u0000\u94B5\u94B6\u94B7\u94B8\u94B9\u94BA\u0000"+
+            "\u0000\u0000\u94BB\u0000\u0000\u94BC\u94BD\u0000"+
+            "\u0000\u0000\u94BE\u94BF\u94C0\u94C1\u94C2\u94C3"+
+            "\u94C4\u94C5\u94C6\u94C7\u94C8\u94C9\u94CA\u94CB"+
+            "\u94CC\u94CD\u94CE\u94CF\u94D0\u94D1\u94D2\u94D3"+
+            "\u94D4\u94D5\u94D6\u94D7\u94D8\u94D9\u94DA\u94DB"+
+            "\u94DC\u94DD\u94DE\u94DF\u94E0\u94E1\u94E2\u94E3"+
+            "\u94E4\u94E5\u94E6\u94E7\u94E8\u94E9\u94EA\u94EB"+
+            "\u94EC\u94ED\u94EE\u94EF\u94F0\u94F1\u94F2\u94F3"+
+            "\u94F4\u94F5\u94F6\u94F7\u94F8\u94F9\u94FA\u94FB"+
+            "\u94FC\u94FD\u94FE\u94FF\u9500\u9501\u9502\u9503"+
+            "\u9504\u9505\u9506\u9507\u9508\u9509\u950A\u950B"+
+            "\u950C\u950D\u950E\u950F\u9510\u9511\u9512\u9513"+
+            "\u9514\u9515\u9516\u9517\u9518\u9519\u951A\u951B"+
+            "\u951C\u951D\u951E\u951F\u9520\u9521\u9522\u9523"+
+            "\u9524\u9525\u9526\u9527\u9528\u9529\u952A\u952B"+
+            "\u952C\u952D\u952E\u952F\u9530\u9531\u9532\u9533"+
+            "\u9534\u9535\u9536\u9537\u9538\u9539\u953A\u953B"+
+            "\u953C\u953D\u953E\u953F\u9540\u9541\u9542\u9543"+
+            "\u9544\u9545\u9546\u9547\u9548\u9549\u954A\u954B"+
+            "\u954C\u954D\u954E\u954F\u9550\u9551\u9552\u9553"+
+            "\u9554\u9555\u9556\u9557\u9558\u9559\u955A\u955B"+
+            "\u955C\u955D\u955E\u955F\u9560\u9561\u9562\u9563"+
+            "\u9564\u9565\u9566\u9567\u9568\u9569\u956A\u956B"+
+            "\u956C\u956D\u956E\u956F\u9570\u9571\u9572\u9573"+
+            "\u9574\u9575\u9576\u9577\u9578\u9579\u957A\u957B"+
+            "\u957C\u957D\u957E\u957F\u9580\u9581\u9582\u9583"+
+            "\u9584\u9585\u9586\u9587\u9588\u9589\u958A\u958B"+
+            "\u958C\u958D\u958E\u958F\u9590\u9591\u9592\u9593"+
+            "\u9594\u9595\u9596\u9597\u9598\u9599\u959A\u959B"+
+            "\u959C\u959D\u959E\u959F\u95A0\u95A1\u95A2\u95A3"+
+            "\u95A4\u95A5\u95A6\u95A7\u95A8\u95A9\u95AA\u95AB"+
+            "\u95AC\u95AD\u95AE\u95AF\u95B0\u95B1\u95B2\u95B3"+
+            "\u95B4\u95B5\u95B6\u95B7\u95B8\u95B9\u95BA\u95BB"+
+            "\u95BC\u95BD\u95BE\u95BF\u95C0\u95C1\u95C2\u95C3"+
+            "\u95C4\u95C5\u95C6\u95C7\u95C8\u95C9\u95CA\u95CB"+
+            "\u95CC\u95CD\u95CE\u95CF\u95D0\u95D1\u95D2\u95D3"+
+            "\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9\u95DA\u95DB"+
+            "\u95DC\u95DD\u95DE\u95DF\u95E0\u95E1\u95E2\u95E3"+
+            "\u95E4\u95E5\u95E6\u95E7\u95E8\u95E9\u95EA\u95EB"+
+            "\u95EC\u95ED\u95EE\u95EF\u95F0\u95F1\u95F2\u95F3"+
+            "\u95F4\u95F5\u95F6\u95F7\u95F8\u95F9\u95FA\u95FB"+
+            "\u95FC\u95FD\u95FE\u95FF\u9600\u9601\u9602\u9603"+
+            "\u9604\u9605\u9606\u9607\u9608\u9609\u960A\u960B"+
+            "\u960C\u960D\u960E\u960F\u9610\u9611\u9612\u9613"+
+            "\u9614\u9615\u9616\u9617\u9618\u9619\u961A\u961B"+
+            "\u961C\u961D\u961E\u961F\u9620\u9621\u9622\u9623"+
+            "\u9624\u9625\u9626\u9627\u9628\u9629\u962A\u962B"+
+            "\u962C\u962D\u962E\u962F\u9630\u9631\u9632\u9633"+
+            "\u9634\u9635\u9636\u9637\u9638\u9639\u963A\u963B"+
+            "\u963C\u963D\u963E\u963F\u9640\u9641\u9642\u9643"+
+            "\u9644\u9645\u9646\u9647\u9648\u9649\u964A\u964B"+
+            "\u964C\u964D\u964E\u964F\u9650\u9651\u9652\u9653"+
+            "\u9654\u9655\u9656\u9657\u9658\u9659\u965A\u965B"+
+            "\u965C\u965D\u965E\u965F\u9660\u9661\u9662\u9663"+
+            "\u9664\u9665\u9666\u9667\u9668\u9669\u966A\u966B"+
+            "\u966C\u966D\u966E\u966F\u9670\u9671\u9672\u9673"+
+            "\u9674\u9675\u9676\u9677\u9678\u9679\u967A\u967B"+
+            "\u967C\u967D\u967E\u967F\u9680\u9681\u9682\u9683"+
+            "\u9684\u9685\u9686\u9687\u9688\u9689\u968A\u968B"+
+            "\u968C\u968D\u968E\u968F\u9690\u9691\u9692\u9693"+
+            "\u9694\u9695\u9696\u9697\u9698\u9699\u969A\u969B"+
+            "\u969C\u969D\u969E\u969F\u96A0\u96A1\u96A2\u96A3"+
+            "\u96A4\u96A5\u96A6\u96A7\u96A8\u96A9\u96AA\u96AB"+
+            "\u96AC\u96AD\u96AE\u96AF\u96B0\u96B1\u96B2\u96B3"+
+            "\u96B4\u96B5\u96B6\u96B7\u96B8\u96B9\u96BA\u96BB"+
+            "\u96BC\u96BD\u96BE\u96BF\u96C0\u96C1\u96C2\u96C3"+
+            "\u96C4\u96C5\u96C6\u96C7\u96C8\u96C9\u96CA\u96CB"+
+            "\u96CC\u96CD\u96CE\u96CF\u96D0\u96D1\u96D2\u96D3"+
+            "\u96D4\u96D5\u96D6\u96D7\u96D8\u96D9\u96DA\u96DB"+
+            "\u96DC\u96DD\u96DE\u96DF\u96E0\u96E1\u96E2\u96E3"+
+            "\u96E4\u96E5\u96E6\u96E7\u96E8\u96E9\u96EA\u96EB"+
+            "\u96EC\u96ED\u96EE\u96EF\u96F0\u96F1\u96F2\u96F3"+
+            "\u96F4\u96F5\u96F6\u96F7\u96F8\u96F9\u96FA\u96FB"+
+            "\u96FC\u96FD\u96FE\u96FF\u9700\u9701\u9702\u9703"+
+            "\u9704\u9705\u9706\u9707\u9708\u9709\u970A\u970B"+
+            "\u970C\u970D\u970E\u970F\u9710\u9711\u9712\u9713"+
+            "\u9714\u9715\u9716\u9717\u9718\u9719\u971A\u971B"+
+            "\u971C\u971D\u971E\u971F\u9720\u9721\u9722\u9723"+
+            "\u9724\u9725\u9726\u9727\u9728\u9729\u972A\u972B"+
+            "\u972C\u972D\u972E\u972F\u9730\u9731\u9732\u9733"+
+            "\u9734\u9735\u9736\u9737\u9738\u9739\u973A\u973B"+
+            "\u973C\u973D\u973E\u973F\u9740\u9741\u9742\u9743"+
+            "\u9744\u9745\u9746\u9747\u9748\u9749\u974A\u974B"+
+            "\u974C\u974D\u974E\u974F\u9750\u9751\u9752\u9753"+
+            "\u9754\u9755\u9756\u9757\u9758\u9759\u975A\u975B"+
+            "\u975C\u975D\u975E\u975F\u9760\u9761\u9762\u9763"+
+            "\u9764\u9765\u9766\u9767\u9768\u9769\u976A\u976B"+
+            "\u976C\u976D\u976E\u976F\u9770\u9771\u9772\u9773"+
+            "\u9774\u9775\u9776\u9777\u9778\u9779\u977A\u977B"+
+            "\u977C\u977D\u977E\u977F\u9780\u9781\u9782\u9783"+
+            "\u9784\u9785\u9786\u9787\u9788\u9789\u978A\u978B"+
+            "\u978C\u978D\u978E\u978F\u9790\u9791\u9792\u9793"+
+            "\u9794\u9795\u9796\u9797\u9798\u9799\u979A\u979B"+
+            "\u979C\u979D\u979E\u979F\u97A0\u97A1\u97A2\u97A3"+
+            "\u97A4\u97A5\u97A6\u97A7\u97A8\u97A9\u97AA\u97AB"+
+            "\u97AC\u97AD\u97AE\u97AF\u97B0\u97B1\u97B2\u97B3"+
+            "\u97B4\u97B5\u97B6\u97B7\u97B8\u97B9\u97BA\u97BB"+
+            "\u97BC\u97BD\u97BE\u97BF\u97C0\u97C1\u97C2\u97C3"+
+            "\u97C4\u97C5\u97C6\u97C7\u97C8\u97C9\u97CA\u97CB"+
+            "\u97CC\u97CD\u97CE\u97CF\u97D0\u97D1\u97D2\u97D3"+
+            "\u97D4\u97D5\u97D6\u97D7\u97D8\u97D9\u97DA\u97DB"+
+            "\u97DC\u97DD\u97DE\u97DF\u97E0\u97E1\u97E2\u97E3"+
+            "\u97E4\u97E5\u97E6\u97E7\u97E8\u97E9\u97EA\u97EB"+
+            "\u97EC\u97ED\u97EE\u97EF\u97F0\u97F1\u97F2\u97F3"+
+            "\u97F4\u97F5\u97F6\u97F7\u97F8\u97F9\u97FA\u97FB"+
+            "\u97FC\u97FD\u97FE\u97FF\u9800\u9801\u9802\u9803"+
+            "\u9804\u9805\u9806\u9807\u9808\u9809\u980A\u980B"+
+            "\u980C\u980D\u980E\u980F\u9810\u9811\u9812\u9813"+
+            "\u9814\u9815\u9816\u9817\u9818\u9819\u981A\u981B"+
+            "\u981C\u981D\u981E\u981F\u9820\u9821\u9822\u9823"+
+            "\u9824\u9825\u9826\u9827\u9828\u9829\u982A\u982B"+
+            "\u982C\u982D\u982E\u982F\u9830\u9831\u9832\u9833"+
+            "\u9834\u9835\u9836\u9837\u9838\u9839\u983A\u983B"+
+            "\u983C\u983D\u983E\u983F\u9840\u9841\u9842\u9843"+
+            "\u9844\u9845\u9846\u9847\u9848\u9849\u984A\u984B"+
+            "\u984C\u984D\u984E\u984F\u9850\u9851\u9852\u9853"+
+            "\u9854\u9855\u9856\u9857\u9858\u9859\u985A\u985B"+
+            "\u985C\u985D\u985E\u985F\u9860\u9861\u9862\u9863"+
+            "\u9864\u9865\u9866\u9867\u9868\u9869\u986A\u986B"+
+            "\u986C\u986D\u986E\u986F\u9870\u9871\u9872\u9873"+
+            "\u9874\u9875\u9876\u9877\u9878\u9879\u987A\u987B"+
+            "\u987C\u987D\u987E\u987F\u9880\u9881\u9882\u9883"+
+            "\u9884\u9885\u9886\u9887\u9888\u9889\u988A\u988B"+
+            "\u988C\u988D\u988E\u988F\u9890\u9891\u9892\u9893"+
+            "\u9894\u9895\u9896\u9897\u9898\u9899\u989A\u989B"+
+            "\u989C\u989D\u989E\u989F\u98A0\u98A1\u98A2\u98A3"+
+            "\u98A4\u98A5\u98A6\u98A7\u98A8\u98A9\u98AA\u98AB"+
+            "\u98AC\u98AD\u98AE\u98AF\u98B0\u98B1\u98B2\u98B3"+
+            "\u98B4\u98B5\u98B6\u98B7\u98B8\u98B9\u98BA\u98BB"+
+            "\u98BC\u98BD\u98BE\u98BF\u98C0\u98C1\u98C2\u98C3"+
+            "\u0000\u0000\u98C4\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u98C5\u98C6\u98C7"+
+            "\u98C8\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u98C9\u0000\u0000\u0000\u0000"+
+            "\u98CA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u98CB"+
+            "\u0000\u0000\u0000\u0000\u98CC\u98CD\u98CE\u98CF"+
+            "\u98D0\u98D1\u98D2\u98D3\u98D4\u98D5\u98D6\u98D7"+
+            "\u98D8\u98D9\u98DA\u98DB\u98DC\u98DD\u98DE\u98DF"+
+            "\u98E0\u98E1\u98E2\u98E3\u98E4\u98E5\u98E6\u98E7"+
+            "\u98E8\u98E9\u98EA\u98EB\u98EC\u98ED\u98EE\u98EF"+
+            "\u98F0\u98F1\u98F2\u98F3\u98F4\u98F5\u98F6\u98F7"+
+            "\u98F8\u98F9\u98FA\u98FB\u98FC\u98FD\u98FE\u98FF"+
+            "\u9900\u9901\u9902\u9903\u9904\u9905\u9906\u9907"+
+            "\u9908\u9909\u990A\u990B\u990C\u990D\u990E\u990F"+
+            "\u9910\u9911\u9912\u9913\u9914\u9915\u9916\u9917"+
+            "\u9918\u9919\u991A\u991B\u991C\u991D\u991E\u991F"+
+            "\u9920\u9921\u9922\u9923\u9924\u9925\u9926\u9927"+
+            "\u9928\u9929\u992A\u992B\u992C\u992D\u992E\u992F"+
+            "\u9930\u9931\u9932\u9933\u9934\u9935\u9936\u9937"+
+            "\u9938\u9939\u993A\u993B\u993C\u993D\u993E\u993F"+
+            "\u9940\u9941\u9942\u9943\u9944\u9945\u9946\u9947"+
+            "\u9948\u9949\u994A\u994B\u994C\u994D\u994E\u994F"+
+            "\u9950\u9951\u9952\u9953\u9954\u9955\u9956\u9957"+
+            "\u9958\u9959\u995A\u995B\u995C\u995D\u995E\u995F";
+
+        private final static String innerIndex10=
+            "\u9960\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9961"+
+            "\u9962\u9963\u9964\u9965\u9966\u9967\u9968\u9969"+
+            "\u996A\u996B\u996C\u996D\u996E\u996F\u9970\u9971"+
+            "\u9972\u9973\u9974\u9975\u9976\u9977\u9978\u9979"+
+            "\u997A\u997B\u997C\u997D\u997E\u997F\u9980\u9981"+
+            "\u9982\u9983\u9984\u9985\u9986\u9987\u9988\u9989"+
+            "\u998A\u998B\u998C\u998D\u998E\u998F\u9990\u9991"+
+            "\u9992\u9993\u9994\u9995\u9996\u9997\u9998\u9999"+
+            "\u999A\u999B\u999C\u999D\u999E\u999F\u99A0\u99A1"+
+            "\u99A2\u99A3\u99A4\u99A5\u99A6\u99A7\u99A8\u99A9"+
+            "\u99AA\u99AB\u99AC\u99AD\u99AE\u99AF\u99B0\u99B1"+
+            "\u99B2\u99B3\u99B4\u99B5\u99B6\u99B7\u99B8\u99B9"+
+            "\u99BA\u99BB\u99BC\u99BD\u99BE\u99BF\u99C0\u99C1"+
+            "\u99C2\u99C3\u99C4\u99C5\u99C6\u99C7\u99C8\u99C9"+
+            "\u99CA\u99CB\u99CC\u99CD\u99CE\u99CF\u99D0\u99D1"+
+            "\u99D2\u99D3\u99D4\u99D5\u99D6\u99D7\u99D8\u99D9"+
+            "\u99DA\u99DB\u99DC\u99DD\u99DE\u99DF\u99E0\u99E1"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u99E2\u99E3"+
+            "\u99E4\u99E5\u99E6\u99E7\u99E8\u99E9\u99EA\u99EB"+
+            "\u99EC\u99ED\u99EE\u99EF\u99F0\u99F1\u99F2\u99F3"+
+            "\u99F4\u99F5\u99F6\u99F7\u99F8\u0000\u99FA\u99FB";
+
+        private final static short index1[] = {
+            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+            17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+            33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+            49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+            65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,
+            80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+            96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
+            112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+            128, 129, 130, 131, 132, 133, 134, 135, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 136, 137, 138, 139, 140, 141, 142, 143, 144,
+            145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160
+        };
+
+        private final static String index2[] = {
+            innerIndex0,
+            innerIndex1,
+            innerIndex2,
+            innerIndex3,
+            innerIndex4,
+            innerIndex5,
+            innerIndex6,
+            innerIndex7,
+            innerIndex8,
+            innerIndex9,
+            innerIndex10
+        };
+
+        /* The default implementation creates a decoder and we don't have one */
+        public boolean isLegalReplacement(byte[] repl) {
+            return true;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11GB2312.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,149 @@
+/*
+ * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.CharBuffer;
+import java.nio.ByteBuffer;
+import java.nio.charset.*;
+import sun.nio.cs.*;
+import static sun.nio.cs.CharsetMapping.*;
+
+public class X11GB2312 extends Charset {
+    public X11GB2312 () {
+        super("X11GB2312", null);
+    }
+    public CharsetEncoder newEncoder() {
+        return new Encoder(this);
+    }
+    public CharsetDecoder newDecoder() {
+        return new Decoder(this);
+    }
+
+    public boolean contains(Charset cs) {
+        return cs instanceof X11GB2312;
+    }
+
+    private class Encoder extends CharsetEncoder {
+        private DoubleByte.Encoder enc = (DoubleByte.Encoder)new EUC_CN().newEncoder();
+
+        public Encoder(Charset cs) {
+            super(cs, 2.0f, 2.0f);
+        }
+
+        public boolean canEncode(char c) {
+            if (c <= 0x7F) {
+                return false;
+            }
+            return enc.canEncode(c);
+        }
+
+        protected int encodeDouble(char c) {
+            return enc.encodeChar(c);
+        }
+
+        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
+            char[] sa = src.array();
+            int sp = src.arrayOffset() + src.position();
+            int sl = src.arrayOffset() + src.limit();
+
+            byte[] da = dst.array();
+            int dp = dst.arrayOffset() + dst.position();
+            int dl = dst.arrayOffset() + dst.limit();
+
+            try {
+                while (sp < sl) {
+                    char c = sa[sp];
+                    if (c <= '\u007f')
+                        return CoderResult.unmappableForLength(1);
+                    int ncode = encodeDouble(c);
+                    if (ncode != 0 && c != '\u0000' ) {
+                        da[dp++] = (byte) ((ncode  >> 8) & 0x7f);
+                        da[dp++] = (byte) (ncode & 0x7f);
+                        sp++;
+                        continue;
+                    }
+                    return CoderResult.unmappableForLength(1);
+                }
+                return CoderResult.UNDERFLOW;
+            } finally {
+                src.position(sp - src.arrayOffset());
+                dst.position(dp - dst.arrayOffset());
+            }
+        }
+        public boolean isLegalReplacement(byte[] repl) {
+            return true;
+        }
+    }
+
+    private class Decoder extends  CharsetDecoder {
+        private DoubleByte.Decoder dec = (DoubleByte.Decoder)new EUC_CN().newDecoder();
+
+        public Decoder(Charset cs) {
+            super(cs, 0.5f, 1.0f);
+        }
+
+        protected char decodeDouble(int b1, int b2) {
+            return dec.decodeDouble(b1, b2);
+        }
+
+        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
+            byte[] sa = src.array();
+            int sp = src.arrayOffset() + src.position();
+            int sl = src.arrayOffset() + src.limit();
+            assert (sp <= sl);
+            sp = (sp <= sl ? sp : sl);
+            char[] da = dst.array();
+            int dp = dst.arrayOffset() + dst.position();
+            int dl = dst.arrayOffset() + dst.limit();
+            assert (dp <= dl);
+            dp = (dp <= dl ? dp : dl);
+
+            try {
+                while (sp < sl) {
+                    if ( sl - sp < 2) {
+                        return CoderResult.UNDERFLOW;
+                    }
+                    int b1 = sa[sp] & 0xFF | 0x80;
+                    int b2 = sa[sp + 1] & 0xFF | 0x80;
+                    char c = decodeDouble(b1, b2);
+                    if (c == UNMAPPABLE_DECODING) {
+                        return CoderResult.unmappableForLength(2);
+                    }
+                    if (dl - dp < 1)
+                        return CoderResult.OVERFLOW;
+                    da[dp++] = c;
+                    sp +=2;
+                }
+                return CoderResult.UNDERFLOW;
+            } finally {
+                src.position(sp - src.arrayOffset());
+                dst.position(dp - dst.arrayOffset());
+            }
+
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11GBK.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.charset.*;
+import sun.nio.cs.*;
+import static sun.nio.cs.CharsetMapping.*;
+
+public class X11GBK extends Charset {
+    public X11GBK () {
+        super("X11GBK", null);
+    }
+    public CharsetEncoder newEncoder() {
+        return new Encoder(this);
+    }
+    public CharsetDecoder newDecoder() {
+        return new GBK().newDecoder();
+    }
+
+    public boolean contains(Charset cs) {
+        return cs instanceof X11GBK;
+    }
+
+    private class Encoder extends DoubleByte.Encoder {
+
+        private DoubleByte.Encoder enc = (DoubleByte.Encoder)new GBK().newEncoder();
+
+        Encoder(Charset cs) {
+            super(cs, (char[])null, (char[])null);
+        }
+
+        public boolean canEncode(char ch){
+            if (ch < 0x80) return false;
+            return enc.canEncode(ch);
+        }
+
+        public int encodeChar(char ch) {
+            if (ch < 0x80)
+                return UNMAPPABLE_ENCODING;
+            return enc.encodeChar(ch);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11Johab.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,4782 @@
+/*
+ * Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CharsetDecoder;
+
+public class X11Johab extends Charset {
+    public X11Johab () {
+        super("X11Johab", null);
+    }
+
+    public CharsetEncoder newEncoder() {
+        return new Encoder(this);
+    }
+
+    public CharsetDecoder newDecoder() {
+        throw new Error("Decoder is not supported by X11Johab Charset");
+    }
+
+    public boolean contains(Charset cs) {
+        return cs instanceof X11GB18030_1;
+    }
+
+    private static class Encoder extends DoubleByteEncoder {
+        public Encoder(Charset cs) {
+            super(cs, index1, index2);
+        }
+
+        public boolean isLegalReplacement(byte[] repl) {
+            return true;
+        }
+
+        private final static String innerIndex0=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uD9AE\u0000\u0000\uD9B4\u0000\u0000\uD967"+
+            "\uD937\u0000\uDCA3\uD97C\u0000\u0000\u0000\u0000"+
+            "\uD956\uD94E\uDD99\uDD9A\uD9A5\u0000\uD9D2\u0000"+
+            "\uD9AC\uDD98\uDCAC\uD97D\uDCF9\uDCF6\uDCFA\uD9AF"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uDCA1\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDCA2\u0000\u0000\u0000\u0000\u0000\u0000\uD94F"+
+            "\uDCAA\u0000\u0000\u0000\u0000\u0000\uDCAD\uDD3C"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uDD31\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDD33\u0000\u0000\u0000\u0000\u0000\u0000\uD950"+
+            "\uDD3A\u0000\u0000\u0000\u0000\u0000\uDD3D\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDD32\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uDCA4\uDD34"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDD35\uDCA6\uDD36\u0000\u0000\u0000\u0000"+
+            "\uDD37\u0000\u0000\u0000\u0000\u0000\u0000\uDCA8"+
+            "\uDD38\uDCA9\uDD39\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDD40\uDCAF\uDD3F\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uDCAB\uDD3B\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uDCAE\uDD3E"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9A7"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD9A8\uD9AB\uD9AA\uD9AD\uD9A6\uD9A9\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDB51\uDB52\uDB53\uDB54\uDB55\uDB56\uDB57"+
+            "\uDB58\uDB59\uDB5A\uDB5B\uDB5C\uDB5D\uDB5E\uDB5F"+
+            "\uDB60\uDB61\u0000\uDB62\uDB63\uDB64\uDB65\uDB66"+
+            "\uDB67\uDB68\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDB71\uDB72\uDB73\uDB74\uDB75\uDB76\uDB77"+
+            "\uDB78\uDB79\uDB7A\uDB7B\uDB7C\uDB7D\uDB7E\uDB91"+
+            "\uDB92\uDB93\u0000\uDB94\uDB95\uDB96\uDB97\uDB98"+
+            "\uDB99\uDB9A\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDEA7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDEA1\uDEA2\uDEA3\uDEA4\uDEA5\uDEA6\uDEA8\uDEA9"+
+            "\uDEAA\uDEAB\uDEAC\uDEAD\uDEAE\uDEAF\uDEB0\uDEB1"+
+            "\uDEB2\uDEB3\uDEB4\uDEB5\uDEB6\uDEB7\uDEB8\uDEB9"+
+            "\uDEBA\uDEBB\uDEBC\uDEBD\uDEBE\uDEBF\uDEC0\uDEC1"+
+            "\uDED1\uDED2\uDED3\uDED4\uDED5\uDED6\uDED8\uDED9"+
+            "\uDEDA\uDEDB\uDEDC\uDEDD\uDEDE\uDEDF\uDEE0\uDEE1"+
+            "\uDEE2\uDEE3\uDEE4\uDEE5\uDEE6\uDEE7\uDEE8\uDEE9"+
+            "\uDEEA\uDEEB\uDEEC\uDEED\uDEEE\uDEEF\uDEF0\uDEF1"+
+            "\u0000\uDED7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uD939\uD93A\u0000\uD93B\u0000"+
+            "\uD93E\uD93F\u0000\u0000\uD940\uD941\u0000\u0000"+
+            "\uD9D3\uD9D4\u0000\u0000\u0000\uD935\uD936\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD9B6\u0000\uD957\uD958\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uD968\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uDD9B\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDD9C"+
+            "\u0000\uDD9D\uDD9E\uDD9F\uDDA0\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uD959\u0000\u0000\u0000\u0000"+
+            "\u0000\uD9B5\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uDC34\u0000\u0000\uD9E0\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uD9E5\uD9E2\u0000\u0000\u0000\uDC69\u0000"+
+            "\u0000\u0000\u0000\uD95A\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uDCF7\uDCF8\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uDCFB\uDCFC\uDCFD\uDCFE\u0000"+
+            "\uDB40\uDB41\uDB42\uDB43\uDB44\uDB45\uDB46\uDB47"+
+            "\uDB48\uDB49\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDB31\uDB32\uDB33\uDB34\uDB35\uDB36\uDB37\uDB38"+
+            "\uDB39\uDB3A\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD977\uD978\uD976\uD979\uD97A\uD9D5\uD9D8\uD9D6"+
+            "\uD9D9\uD9D7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uD9A1\u0000\uD9A2\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD9A3\u0000\uD963\uD9A4\u0000\u0000\u0000\uD964"+
+            "\uD996\u0000\u0000\uD997\u0000\u0000\u0000\uD9B3"+
+            "\u0000\uD9B2\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uD97E\u0000\u0000\uD992\uD954\u0000"+
+            "\uD960\u0000\u0000\u0000\u0000\u0000\u0000\uD99E"+
+            "\uD99F\uD99D\uD99C\uD994\uD995\u0000\uD9B1\u0000"+
+            "\u0000\u0000\u0000\u0000\uD955\uD993\uD9B0\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uD991\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uD966\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD951\uD965\u0000\u0000\uD952\uD953\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uD99A\uD99B\u0000\u0000\uD998\uD999"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uD961\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uD962\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDCE7\uDCE8\uDCE9\uDCEA\uDCEB\uDCEC\uDCED\uDCEE"+
+            "\uDCEF\uDCF0\uDCF1\uDCF2\uDCF3\uDCF4\uDCF5\u0000"+
+            "\u0000\u0000\u0000\u0000\uDD77\uDD78\uDD79\uDD7A"+
+            "\uDD7B\uDD7C\uDD7D\uDD7E\uDD91\uDD92\uDD93\uDD94"+
+            "\uDD95\uDD96\uDD97\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uDD5D\uDD5E\uDD5F\uDD60"+
+            "\uDD61\uDD62\uDD63\uDD64\uDD65\uDD66\uDD67\uDD68"+
+            "\uDD69\uDD6A\uDD6B\uDD6C\uDD6D\uDD6E\uDD6F\uDD70"+
+            "\uDD71\uDD72\uDD73\uDD74\uDD75\uDD76\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDCCD\uDCCE\uDCCF\uDCD0\uDCD1\uDCD2\uDCD3\uDCD4"+
+            "\uDCD5\uDCD6\uDCD7\uDCD8\uDCD9\uDCDA\uDCDB\uDCDC"+
+            "\uDCDD\uDCDE\uDCDF\uDCE0\uDCE1\uDCE2\uDCE3\uDCE4"+
+            "\uDCE5\uDCE6\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDBA1\uDBAC\uDBA2\uDBAD\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uDBA3\uDBC8\uDBC7\uDBAE"+
+            "\uDBA4\uDBC2\uDBC1\uDBAF\uDBA6\uDBC6\uDBC5\uDBB1"+
+            "\uDBA5\uDBC4\uDBC3\uDBB0\uDBA7\uDBBC\uDBC9\uDBCA"+
+            "\uDBB7\uDBCB\uDBCC\uDBB2\uDBA9\uDBBE\uDBCD\uDBCE"+
+            "\uDBB9\uDBCF\uDBD0\uDBB4\uDBA8\uDBD1\uDBD2\uDBB8"+
+            "\uDBBD\uDBD3\uDBD4\uDBB3\uDBAA\uDBD5\uDBD6\uDBBA"+
+            "\uDBBF\uDBD7\uDBD8\uDBB5\uDBAB\uDBD9\uDBDA\uDBBB"+
+            "\uDBDB\uDBDC\uDBC0\uDBDD\uDBDE\uDBDF\uDBE0\uDBE1"+
+            "\uDBE2\uDBE3\uDBE4\uDBB6\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uD9C6\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD971\uD970\u0000\uD9C3\uD9C7\uD9C8\uD9CB\uD9CA"+
+            "\uD9C9\uD9CC\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uD973\uD972\u0000\u0000\uD9BA\uD9B9"+
+            "\u0000\u0000\u0000\u0000\uD975\uD974\u0000\u0000"+
+            "\uD9B8\uD9B7\u0000\u0000\u0000\u0000\uD96F\uD96E"+
+            "\uD9C2\uD9C1\u0000\uD96B\u0000\u0000\uD96D\uD96C"+
+            "\uD9C4\uD9C5\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uD96A\uD969\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uD9CF\uD9CE"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uD9D0\u0000\uD9D1\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD95F\u0000\uD95E\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD9BC\uD9BD\u0000\uD9C0\uD9BB\uD9BE\u0000\uD9BF"+
+            "\uD9CD\uD9DB\uD9DC\u0000\uD9DD\uD9DA\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD931\uD932\uD933\uD938\u0000\u0000\u0000\u0000"+
+            "\uD944\uD945\uD946\uD947\uD948\uD949\uD94A\uD94B"+
+            "\uD94C\uD94D\u0000\uD97B\uD942\uD943\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDDA1\uDDA2\uDDA3\uDDA4\uDDA5\uDDA6\uDDA7"+
+            "\uDDA8\uDDA9\uDDAA\uDDAB\uDDAC\uDDAD\uDDAE\uDDAF"+
+            "\uDDB0\uDDB1\uDDB2\uDDB3\uDDB4\uDDB5\uDDB6\uDDB7"+
+            "\uDDB8\uDDB9\uDDBA\uDDBB\uDDBC\uDDBD\uDDBE\uDDBF"+
+            "\uDDC0\uDDC1\uDDC2\uDDC3\uDDC4\uDDC5\uDDC6\uDDC7"+
+            "\uDDC8\uDDC9\uDDCA\uDDCB\uDDCC\uDDCD\uDDCE\uDDCF"+
+            "\uDDD0\uDDD1\uDDD2\uDDD3\uDDD4\uDDD5\uDDD6\uDDD7"+
+            "\uDDD8\uDDD9\uDDDA\uDDDB\uDDDC\uDDDD\uDDDE\uDDDF"+
+            "\uDDE0\uDDE1\uDDE2\uDDE3\uDDE4\uDDE5\uDDE6\uDDE7"+
+            "\uDDE8\uDDE9\uDDEA\uDDEB\uDDEC\uDDED\uDDEE\uDDEF"+
+            "\uDDF0\uDDF1\uDDF2\uDDF3\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDE31\uDE32\uDE33\uDE34\uDE35\uDE36\uDE37"+
+            "\uDE38\uDE39\uDE3A\uDE3B\uDE3C\uDE3D\uDE3E\uDE3F"+
+            "\uDE40\uDE41\uDE42\uDE43\uDE44\uDE45\uDE46\uDE47"+
+            "\uDE48\uDE49\uDE4A\uDE4B\uDE4C\uDE4D\uDE4E\uDE4F"+
+            "\uDE50\uDE51\uDE52\uDE53\uDE54\uDE55\uDE56\uDE57"+
+            "\uDE58\uDE59\uDE5A\uDE5B\uDE5C\uDE5D\uDE5E\uDE5F"+
+            "\uDE60\uDE61\uDE62\uDE63\uDE64\uDE65\uDE66\uDE67"+
+            "\uDE68\uDE69\uDE6A\uDE6B\uDE6C\uDE6D\uDE6E\uDE6F"+
+            "\uDE70\uDE71\uDE72\uDE73\uDE74\uDE75\uDE76\uDE77"+
+            "\uDE78\uDE79\uDE7A\uDE7B\uDE7C\uDE7D\uDE7E\uDE91"+
+            "\uDE92\uDE93\uDE94\uDE95\uDE96\uDE97\uDE98\u0000"+
+            "\u0000\u0000\u0000\uD934\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDAA1\uDAA2\uDAA3\uDAA4\uDAA5\uDAA6\uDAA7"+
+            "\uDAA8\uDAA9\uDAAA\uDAAB\uDAAC\uDAAD\uDAAE\uDAAF"+
+            "\uDAB0\uDAB1\uDAB2\uDAB3\uDAB4\uDAB5\uDAB6\uDAB7"+
+            "\uDAB8\uDAB9\uDABA\uDABB\uDABC\uDABD\uDABE\uDABF"+
+            "\uDAC0\uDAC1\uDAC2\uDAC3\uDAC4\uDAC5\uDAC6\uDAC7"+
+            "\uDAC8\uDAC9\uDACA\uDACB\uDACC\uDACD\uDACE\uDACF"+
+            "\uDAD0\uDAD1\uDAD2\uDAD3\uDAD4\uDAD5\uDAD6\uDAD7"+
+            "\uDAD8\uDAD9\uDADA\uDADB\uDADC\uDADD\uDADE\uDADF"+
+            "\uDAE0\uDAE1\uDAE2\uDAE3\uDAE4\uDAE5\uDAE6\uDAE7"+
+            "\uDAE8\uDAE9\uDAEA\uDAEB\uDAEC\uDAED\uDAEE\uDAEF"+
+            "\uDAF0\uDAF1\uDAF2\uDAF3\uDAF4\uDAF5\uDAF6\uDAF7"+
+            "\uDAF8\uDAF9\uDAFA\uDAFB\uDAFC\uDAFD\uDAFE\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDD41\uDD42\uDD43\uDD44\uDD45\uDD46\uDD47\uDD48"+
+            "\uDD49\uDD4A\uDD4B\uDD4C\uDD4D\uDD4E\uDD4F\uDD50"+
+            "\uDD51\uDD52\uDD53\uDD54\uDD55\uDD56\uDD57\uDD58"+
+            "\uDD59\uDD5A\uDD5B\uDD5C\uD9DF\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDCB1\uDCB2\uDCB3\uDCB4\uDCB5\uDCB6\uDCB7\uDCB8"+
+            "\uDCB9\uDCBA\uDCBB\uDCBC\uDCBD\uDCBE\uDCBF\uDCC0"+
+            "\uDCC1\uDCC2\uDCC3\uDCC4\uDCC5\uDCC6\uDCC7\uDCC8"+
+            "\uDCC9\uDCCA\uDCCB\uDCCC\u0000\u0000\u0000\uD9DE"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+        private final static String innerIndex1=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDC59\uDC5A\uDC5B\uDC5C\uDC5D\u0000\u0000\u0000"+
+            "\uDC4A\uDC4B\uDC6C\uDC6D\uDC6E\uDC46\uDC47\uDC48"+
+            "\uDC64\uDC65\uDC66\uDC67\uDC68\uDC31\uDC32\uDC33"+
+            "\uDC35\uDC3B\uDC3C\uDC3D\uDC3E\uDC3F\uDC40\uDC41"+
+            "\uDC42\uDC43\uDC44\uDC37\uDC38\uDC39\uDC3A\uDC4D"+
+            "\uDC4E\uDC75\uDC76\uDC77\uDC78\uDC71\uDC72\uDC73"+
+            "\uDC4F\uDC50\uDC51\uDC52\uDC53\uDC54\uDC55\uDC56"+
+            "\uDC57\uDC58\uDC5E\uDC5F\uDC60\uDC61\uDC62\uDC63"+
+            "\uDC6A\uDC6B\uD9E3\uDC7C\uDC36\uDC70\uDC91\uD9E1"+
+            "\uDC4C\uDC7D\uDC45\u0000\u0000\u0000\u0000\uDC49"+
+            "\uDC7A\u0000\u0000\uDC7B\u0000\u0000\uDC6F\u0000"+
+            "\uD9E4\u0000\u0000\uDC74\uDC7E\uDC79\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF179\uF2CB\u0000\uF662\u0000\u0000\u0000\uE742"+
+            "\uF1DB\uEAB2\uEABE\uF7BB\u0000\uE996\u0000\u0000"+
+            "\u0000\uF5E4\u0000\u0000\uF4A6\uE9E0\uEBA6\u0000"+
+            "\uE29A\uE940\u0000\u0000\u0000\u0000\uECAA\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF3E9\u0000\u0000"+
+            "\u0000\u0000\uE1FA\u0000\u0000\u0000\u0000\u0000"+
+            "\uF93F\uE4A1\u0000\uF3AB\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEED1\uE43C\u0000\uE29B\u0000\u0000"+
+            "\u0000\u0000\u0000\uF3FD\u0000\uEA4F\uF8BA\uF7B9"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE262\u0000"+
+            "\uECAB\uF0E0\u0000\u0000\u0000\uE29C\uE0F7\uEDA5"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE071\u0000\uE55C\u0000\u0000"+
+            "\u0000\u0000\u0000\uF071\u0000\u0000\uE973\uEAAD"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE0EB\u0000"+
+            "\u0000\u0000\uE5AF\u0000\u0000\u0000\uE697\u0000"+
+            "\uEDF8\u0000\u0000\uEA50\uF133\u0000\uEFCD\u0000"+
+            "\uF037\uEFF6\uF8BB\u0000\uEEE9\uF2CC\u0000\u0000"+
+            "\uE376\u0000\u0000\uEA51\u0000\u0000\uED3C\u0000"+
+            "\u0000\uE75C\uF7F1\u0000\uE26F\uF834\uEE42\u0000"+
+            "\uF89D\u0000\u0000\uF84D\uE158\uF2CD\uE5D5\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE4A2\u0000"+
+            "\u0000\u0000\uF161\u0000\u0000\u0000\u0000\u0000"+
+            "\uED37\uF162\u0000\u0000\uF641\u0000\u0000\uE29D"+
+            "\u0000\u0000\uE361\uE0BF\u0000\uF1A4\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF1A8\uEA52\uF672\uF1DC"+
+            "\uE997\uEB49\u0000\u0000\u0000\uE55E\u0000\uF545"+
+            "\u0000\u0000\u0000\uE4DB\uE645\uF134\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uED76\u0000\uF3EA\u0000\u0000\u0000\uE0EC\uE0C0"+
+            "\u0000\u0000\u0000\uF194\u0000\u0000\u0000\u0000"+
+            "\u0000\uE37A\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF7F2\uF135\uE36F\u0000\uEEEA\uE37B\uE961"+
+            "\uE8E9\uF9CC\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8D7"+
+            "\u0000\u0000\u0000\u0000\uE871\u0000\uE646\u0000"+
+            "\uECDF\u0000\uEA53\u0000\uEA54\uE031\u0000\u0000"+
+            "\u0000\u0000\u0000\uF27C\u0000\u0000\uE4A3\uF247"+
+            "\uF75F\u0000\u0000\u0000\u0000\uF058\uF248\uF3AC"+
+            "\uF3A5\uEFCE\u0000\u0000\u0000\uF7BC\u0000\u0000"+
+            "\u0000\uEDF9\uF17A\uE9D6\uF1C2\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF735\u0000\u0000\u0000\u0000\u0000\uEDBA"+
+            "\uE8D8\u0000\u0000\uE032\u0000\u0000\uE3CD\u0000"+
+            "\u0000\u0000\uF27D\u0000\u0000\u0000\uF17B\uEA55"+
+            "\u0000\uECE0\u0000\uE059\uF479\u0000\uE5CE\u0000"+
+            "\uF646\u0000\uE252\uE657\u0000\uECB4\u0000\uF3AD"+
+            "\u0000\uF072\u0000\u0000\u0000\u0000\uE6C2\u0000"+
+            "\uF4A7\u0000\u0000\uE1EA\u0000\uF0EE\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE7B2\uF9A5"+
+            "\u0000\u0000\u0000\u0000\u0000\uF665\uE5E2\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF745"+
+            "\u0000\u0000\uE197\uF5B5\uED3D\u0000\u0000\u0000"+
+            "\u0000\uEEEB\uF3D5\u0000\u0000\u0000\uF34B\u0000"+
+            "\u0000\uEFB5\u0000\uE159\uF865\u0000\u0000\uEBD4"+
+            "\u0000\u0000\uE6D6\u0000\u0000\uE951\u0000\uEA56"+
+            "\uF891\uECE1\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEBF3\uE998"+
+            "\u0000\uE29E\u0000\uE8C4\u0000\uF793\u0000\u0000"+
+            "\uE974\u0000\uEDEF\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE941\u0000\u0000\u0000\uE5D6\u0000"+
+            "\u0000\uF4DA\u0000\uE0C1\u0000\uE8C3\u0000\u0000"+
+            "\u0000\uE7FA\uE4EE\u0000\u0000\u0000\uF848\u0000"+
+            "\u0000\uF9A6\uF0EF\u0000\uF536\u0000\uE15A\uF4A8"+
+            "\u0000\uF4DB\u0000\uE8A7\uF647\u0000\uE2E6\uF394"+
+            "\uE0DA\u0000\uEED2\uE6C3\uF692\uEF6E\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEDA6\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEDE7\u0000\u0000\u0000\uE033"+
+            "\uE137\uF059\u0000\u0000\u0000\u0000\u0000\uF746"+
+            "\u0000\u0000\u0000\u0000\u0000\uF835\u0000\u0000"+
+            "\u0000\u0000\uF3AE\u0000\uF2CE\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE0ED\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF640\uF2CF\uEFCF\u0000"+
+            "\uF6DE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE263\u0000\u0000\u0000\u0000\uE999\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE8A8\u0000\u0000"+
+            "\u0000\uE0F8\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEAA1\uE9E1\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF5CA\uEFB6\u0000\u0000"+
+            "\u0000\u0000\uEEEC\uF27E\u0000\uF4F0\u0000\uEABF"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE15B\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE351\u0000\u0000"+
+            "\u0000\uF562\uEB4A\u0000\u0000\u0000\u0000\uEAC0"+
+            "\u0000\uE270\u0000\u0000\u0000\uE962\uF9EA\u0000"+
+            "\u0000\u0000\uE698\u0000\u0000\u0000\uF05A\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEF79\u0000\uECAC"+
+            "\u0000\u0000\u0000\u0000\u0000\uF4D0\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE034\u0000\uE8F8\u0000\u0000\u0000\uEA57"+
+            "\uF0F0\uF3D6\u0000\u0000\uEDE2\u0000\uE15C\u0000"+
+            "\u0000\uE0FB\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF073\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAC1"+
+            "\u0000\uE67D\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEFD0\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF249\u0000\u0000\u0000\u0000\uE5E3"+
+            "\u0000\u0000\uE3D3\u0000\uEDF0\u0000\u0000\u0000"+
+            "\uEF44\uF0C3\u0000\uF03A\uF89E\uF5F6\uF34C\uF9D4"+
+            "\uEB4B\uE253\u0000\uE34A\uF6BA\uE795\uF6CD\u0000"+
+            "\u0000\u0000\uED3E\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE56F\u0000\u0000\u0000"+
+            "\u0000\u0000\uE377\u0000\u0000\uF19F\u0000\uE43E"+
+            "\uF291\uE5D7\uF074\uF732\uE1EB\uE6BF\uF8B1\u0000"+
+            "\u0000\uE1EC\u0000\u0000\u0000\uE942\uE37C\uE29F"+
+            "\uF292\u0000\u0000\u0000\uE152\u0000\u0000\u0000"+
+            "\uE37D\u0000\u0000\u0000\u0000\u0000\uEDF7\u0000"+
+            "\u0000\u0000\uF4FC\u0000\u0000\uF232\u0000\u0000"+
+            "\u0000\u0000\uE7B3\u0000\u0000\uE796\u0000\uEFB7"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE23E\u0000\u0000\u0000\u0000\uE7A2\u0000\u0000"+
+            "\u0000\u0000\uE793\u0000\uE55F\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEDA7\uE5D2"+
+            "\u0000\u0000\u0000\u0000\u0000\uE639\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF532\u0000\uF3D7\u0000"+
+            "\u0000\uE5D8\u0000\uF34D\uE6D0\uE560\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE6CF\uF0EA\uF9EB\u0000"+
+            "\u0000\uE8ED\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF955\uE0C2\u0000\u0000\u0000\u0000\uF9D5\u0000"+
+            "\uF558\uEF7A\uF5F3\u0000\u0000\uF7DE\u0000\u0000"+
+            "\uE4EF\u0000\u0000\uF163\u0000\u0000\uE9C2\uF2B7"+
+            "\uEED4\u0000\uE05A\u0000\u0000\u0000\uE7FB\u0000"+
+            "\u0000\uF89F\u0000\u0000\u0000\u0000\u0000\uE63A"+
+            "\u0000\u0000\u0000\u0000\u0000\uF59A\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF6F7\uE93C\u0000\u0000"+
+            "\u0000\uE6D7\uEAA2\u0000\u0000\u0000\uE24E\u0000"+
+            "\uE4F0\u0000\u0000\u0000\u0000\u0000\uF334\uEBEC"+
+            "\uE2E7\uF4CB\uF1A9\uE04E\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF591\u0000\u0000\u0000\uF65E"+
+            "\u0000\u0000\uEA9D\uE34B\uE5B7\uF293\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF538\u0000\uE99A\u0000"+
+            "\u0000\u0000\u0000\uE0A7\u0000\uE85E\u0000\u0000"+
+            "\u0000\uEB76\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF1A5\uF294\u0000\u0000\u0000\u0000\uE99B"+
+            "\u0000\u0000\uF7DC\u0000\u0000\uF4DC\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF794\u0000\uF59B"+
+            "\u0000\u0000\u0000\uF993\u0000\u0000\u0000\uE34C"+
+            "\uE8F9\uE6B1\u0000\u0000\u0000\uE0FC\u0000\u0000"+
+            "\u0000\uF335\uE0FD\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE5F4\u0000\u0000\u0000\uE1ED"+
+            "\uE035\u0000\u0000\uE63B\uE352\u0000\u0000\u0000"+
+            "\u0000\uF34E\uE44D\uE134\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF846\u0000"+
+            "\u0000\uE15D\u0000\uE89C\u0000\uF65F\u0000\uEFB8"+
+            "\u0000\uE797\u0000\u0000\u0000\uE15E\u0000\u0000"+
+            "\u0000\u0000\uE6CD\u0000\u0000\uE561\uEFED\u0000"+
+            "\uE07B\uE7E2\u0000\uF9B2\u0000\uECAD\uE65C\uE7B4"+
+            "\u0000\u0000\uEBA7\uF263\uE353\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF9B3\u0000\uE5E4\u0000\u0000"+
+            "\uE2E8\u0000\uF1C3\uE342\u0000\u0000\uE2A0\uE838"+
+            "\u0000\u0000\u0000\u0000\u0000\uF760\u0000\u0000"+
+            "\uF9D6\u0000\u0000\u0000\u0000\uF761\u0000\uF762"+
+            "\uE963\u0000\u0000\u0000\u0000\uE9E2\uF8F9\uE9C1"+
+            "\u0000\uECB5\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF1DD\uE254\u0000\uE0A1\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE9E3\u0000\u0000\u0000\u0000\uF96D"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF7AF\u0000\u0000\u0000\u0000\u0000\uE49D"+
+            "\uE2A1\uED38\u0000\uF546\uF1A0\u0000\u0000\uECAE"+
+            "\uEEED\uF9C1\uE872\u0000\u0000\uE743\u0000\u0000"+
+            "\u0000\uE9E4\uF391\uF693\uF892\u0000\u0000\uE3F5"+
+            "\u0000\u0000\uE85F\u0000\uE964\u0000\uE936\u0000"+
+            "\uF2BF\u0000\u0000\u0000\u0000\u0000\uE25F\u0000"+
+            "\uEB69\u0000\u0000\u0000\u0000\u0000\u0000\uE7D6"+
+            "\uF164\uF05B\u0000\u0000\uE04F\uE5B0\u0000\uE2E9"+
+            "\u0000\u0000\u0000\u0000\u0000\uF3ED\u0000\uE15F"+
+            "\u0000\u0000\u0000\u0000\uED9A\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uED7D\u0000\u0000\u0000\u0000"+
+            "\uE6D8\u0000\uF9A7\u0000\u0000\u0000\u0000\uF03B"+
+            "\uF642\u0000\u0000\u0000\u0000\uE2F0\uF7BD\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEE96\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE0DB\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF4D1\u0000\u0000\u0000\u0000"+
+            "\uEFD1\uF4A9\uE370\uEFD2\u0000\uE873\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEC62\u0000\uF632\uEBF4"+
+            "\u0000\u0000\u0000\uE874\u0000\u0000\u0000\u0000"+
+            "\u0000\uEED5\uF5BF\uE2A2\uE1AF\uE2A3\u0000\u0000"+
+            "\u0000\uE1B0\uF3FE\uE333\uEBAF\uF733\u0000\uE036"+
+            "\uF6BB\uF47A\uEA58\uEFD3\u0000\u0000\u0000\u0000"+
+            "\uEA59\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF9DE\uE050\u0000\u0000\u0000"+
+            "\uF7EA\uE3CE\uF264\u0000\uE562\uE7A3\uF9A8\uE6D9"+
+            "\uF6CE\uF84E\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE2D6\u0000\uE6F0\u0000\uF0E1"+
+            "\uF755\u0000\u0000\u0000\u0000\u0000\uE99C\u0000"+
+            "\u0000\uE9C3\u0000\uF7DF\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEEEF\u0000\u0000\u0000\u0000"+
+            "\uF9E5\uF633\u0000\uE7FC\uF9A9\u0000\uEEEE\u0000"+
+            "\u0000\u0000\uE5E5\u0000\u0000\u0000\u0000\u0000"+
+            "\uF2D0\u0000\uE1B1\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF6A2\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF3B2\u0000\uF3B1\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE1B2\u0000\uE83B\u0000\uE037\u0000\u0000"+
+            "\u0000\u0000\u0000\uECE2\uF8BC\uE7A4\u0000\u0000"+
+            "\uF24A\u0000\u0000\u0000\u0000\u0000\uF763\u0000"+
+            "\u0000\u0000\u0000\u0000\uF8FA\u0000\uE2A4\u0000"+
+            "\uE99D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF673\u0000\u0000\u0000"+
+            "\uF1AA\u0000\u0000\uF431\uE271\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF836\u0000\u0000\u0000\u0000"+
+            "\uF7E0\u0000\u0000\u0000\u0000\uF166\u0000\u0000"+
+            "\uED7E\uF7A1\u0000\u0000\uF8EF\u0000\u0000\u0000"+
+            "\uF7EB\uF233\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF03C\u0000\u0000\u0000\uE038\u0000\u0000"+
+            "\uF59C\u0000\u0000\u0000\u0000\uE1D6\uF998\u0000"+
+            "\u0000\u0000\uF559\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF764\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF736\u0000\uEA5A\uF456"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE6DA\u0000"+
+            "\uE4D0\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE755\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF076"+
+            "\u0000\uF4DD\u0000\u0000\u0000\uED6A\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF674\u0000"+
+            "\u0000\u0000\u0000\u0000\uF694\u0000\uEAC2\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7FD"+
+            "\u0000\u0000\u0000\uE198\u0000\u0000\uE4BA\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uED3F\u0000"+
+            "\u0000\u0000\u0000\uF7E1\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF336\u0000\u0000\u0000"+
+            "\uE0D3\u0000\u0000\u0000\uEB4C\u0000\uF55A\uE59C"+
+            "\u0000\uF9AA\uF7E2\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF547\uF9C2\uF940\u0000\uF9EC\uE072\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9BD"+
+            "\u0000\uF077\uEAC3\uE3D2\uE272\u0000\uE4A4\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF9AB\u0000\uEAE0"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF457\u0000\u0000\u0000"+
+            "\u0000\u0000\uEEF0\u0000\uE37E\u0000\u0000\uF4AA"+
+            "\u0000\u0000\u0000\uEA5B\uF648\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEBF5\uF3B3\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF6A3\u0000"+
+            "\u0000\uE039\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE2A5\u0000\u0000\uEAC4"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBB0"+
+            "\u0000\u0000\uF34F\u0000\uF634\u0000\uECB6\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF856\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE391\u0000\u0000\uF9ED\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE9C4\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF999\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEE4F\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEA3D\u0000\uF84F\u0000"+
+            "\u0000\u0000\u0000\u0000\uEDF1\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF1C4\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE435\u0000\u0000\uF9EE\u0000\u0000"+
+            "\u0000\uF5B6\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEBF6\uEA5C\u0000\u0000\uF96E\u0000"+
+            "\uF167\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE1DD\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE647\uE1B3\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF765\uEDD8\u0000\u0000\u0000"+
+            "\uE2EA\u0000\u0000\uE2D0\u0000\uF05C\u0000\u0000"+
+            "\u0000\u0000\uF03E\uF03D\u0000\u0000\uE4F1\u0000"+
+            "\uE4A5\u0000\u0000\u0000\u0000\u0000\u0000\uF6CF"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF234\u0000\u0000\u0000\u0000\uE334\u0000\u0000"+
+            "\uF432\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE392\u0000\u0000\u0000\u0000"+
+            "\uF433\u0000\uF6F8\u0000\u0000\u0000\u0000\uE343"+
+            "\u0000\u0000\uE8A9\u0000\u0000\uE4BB\uE07C\u0000"+
+            "\uF3A6\uE0D5\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF6E7\u0000\u0000\uE1DE\u0000\uF6A4\u0000"+
+            "\u0000\u0000\uF750\u0000\u0000\u0000\uE4DD\u0000"+
+            "\uE160\u0000\u0000\u0000\u0000\uE2A6\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF695\u0000\u0000\u0000"+
+            "\u0000\u0000\uEBF7\u0000\u0000\u0000\u0000\u0000"+
+            "\uE4DC\u0000\u0000\uF8A0\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF837\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF0D9\u0000\uE2A7\uF03F\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uED91\u0000\u0000\u0000\uEFB9"+
+            "\uF3D8\u0000\u0000\uE768\u0000\u0000\uEB94\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE44"+
+            "\uE99E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF4F1\u0000\u0000\u0000\uECD0\u0000\u0000\uF49D"+
+            "\u0000\uE8C6\uE393\u0000\uE394\u0000\u0000\u0000"+
+            "\uE2DC\u0000\uE4D1\u0000\u0000\uE141\uF6D8\u0000"+
+            "\uE0A8\uF0BC\uED4E\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF56C\u0000"+
+            "\u0000\uE952\u0000\u0000\uF337\u0000\u0000\uEE50"+
+            "\u0000\u0000\uE07D\u0000\u0000\u0000\u0000\uEF7B"+
+            "\uEDE8\uE953\u0000\u0000\uF1DE\uE4F2\u0000\u0000"+
+            "\u0000\u0000\uE199\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE264\uEEAB\u0000\u0000\u0000\uE0C3"+
+            "\u0000\uEBB1\u0000\u0000\uF6B2\u0000\u0000\uE4F3"+
+            "\uE4D2\u0000\uF5C0\u0000\u0000\u0000\uEADD\u0000"+
+            "\u0000\uF295\uEEF1\u0000\uF9B4\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF458\u0000\u0000"+
+            "\u0000\uF4D2\u0000\u0000\uF296\u0000\uEC63\u0000"+
+            "\u0000\u0000\u0000\uE161\u0000\uEAEA\u0000\u0000"+
+            "\u0000\uEFBA\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE7D7\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF5CD\u0000\uF3F2\uF857"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE7F8\uE552\u0000\u0000\u0000\u0000\uF675\u0000"+
+            "\u0000\u0000\u0000\uE9C5\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEEF2\uF1DF\u0000\u0000\uE05B\u0000"+
+            "\u0000\uE8FA\u0000\u0000\u0000\uEF45\u0000\uE4A6"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF9B5\u0000"+
+            "\u0000\uF7C9\u0000\uED72\u0000\uF8BD\u0000\u0000"+
+            "\uE6A4\uE255\u0000\u0000\u0000\u0000\uE265\uE676"+
+            "\u0000\u0000\u0000\u0000\uEDBD\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEA5D\uF195\u0000\u0000\uF1E0"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF17C\uF8BE\uEAEB\u0000\uEBF8\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF7BE"+
+            "\u0000\u0000\u0000\u0000\uE395\uEB3A\uEF72\u0000"+
+            "\u0000\uEC64\uE49F\u0000\uEDA8\u0000\u0000\u0000"+
+            "\u0000\u0000\uE7D3\u0000\u0000\u0000\u0000\uE4DE"+
+            "\u0000\uF548\uF6BC\uE99F\u0000\uEF7C\uED77\u0000"+
+            "\u0000\uECF7\u0000\u0000\u0000\u0000\u0000\uF138"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF893\u0000"+
+            "\u0000\u0000\u0000\u0000\uEDF2\u0000\u0000\uE396"+
+            "\uE43F\uE975\u0000\u0000\u0000\u0000\uE335\uF3B4"+
+            "\uF941\uE19A\u0000\u0000\uE9C6\uF861\u0000\uF6DF"+
+            "\u0000\u0000\uF838\u0000\u0000\u0000\u0000\u0000"+
+            "\uF297\u0000\uEA5E\u0000\u0000\u0000\u0000\uEEF3"+
+            "\u0000\u0000\uF6AC\uF0C4\uF1E1\uEB3B\uE9C7\u0000"+
+            "\u0000\u0000\u0000\uE443\uE44F\u0000\u0000\u0000"+
+            "\uE05C\u0000\u0000\u0000\u0000\uF8BF\u0000\u0000"+
+            "\u0000\u0000\uEDFD\uE9E5\uE75D\u0000\u0000\u0000"+
+            "\u0000\u0000\uF196\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE397\u0000\u0000\uEF7D\uE362"+
+            "\u0000\uE7D8\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF676\u0000\u0000"+
+            "\uE8AA\u0000\u0000\u0000\uF6E0\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE769\u0000\uF533\u0000\u0000\uF56D\u0000"+
+            "\u0000\u0000\u0000\uF2D1\u0000\u0000\uE7B5\u0000"+
+            "\u0000\uF1AB\u0000\uECB7\u0000\u0000\u0000\u0000"+
+            "\uF24B\uE1B4\u0000\uEB95\uF05D\u0000\u0000\u0000"+
+            "\u0000\uF197\uEF7E\u0000\uE0A9\uF3AF\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE05D\u0000"+
+            "\uF139\u0000\uF47B\u0000\uF9EF\u0000\uF7F3\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEE51\u0000\u0000\uF168\u0000\u0000\u0000\uF1AC"+
+            "\u0000\uF05E\u0000\uEF6F\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEA5F\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE436\u0000\u0000\uEEF4\uE3D6\u0000\u0000\uEE52"+
+            "\uECE3\u0000\u0000\u0000\u0000\uED40\u0000\u0000"+
+            "\u0000\uE744\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF635\u0000"+
+            "\u0000\u0000\u0000\u0000\uF4DE\u0000\u0000\u0000"+
+            "\u0000\uE6A5\u0000\u0000\u0000\u0000\uF6E8\u0000"+
+            "\u0000\uEF56\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF8E6\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE9E6\u0000\u0000\u0000\uE9A0\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE76A\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE83C\uF040\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uECB8\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE03A\uEBF9\u0000\uF041\u0000\u0000\u0000"+
+            "\u0000\uF47C\u0000\u0000\uF87E\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF265\u0000\u0000\u0000\u0000\uF7F4\u0000"+
+            "\u0000\uE47C\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF8FB\u0000\u0000"+
+            "\u0000\uF9F0\u0000\uEB4D\uE273\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF756\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEA3E\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEAC5\u0000\u0000\uEDBE\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF1AD\uF87A\u0000\u0000\uE1EE\uF1A6\u0000\uF1AE"+
+            "\uF37D\u0000\uE9A1\u0000\uF1AF\uF99A\u0000\uE77B"+
+            "\u0000\u0000\u0000\uE19B\uE1B5\u0000\u0000\u0000"+
+            "\u0000\uF839\u0000\uEBDD\u0000\u0000\u0000\u0000"+
+            "\uEC65\uF1CF\u0000\u0000\u0000\uE9A2\u0000\u0000"+
+            "\uF7CA\u0000\uF078\u0000\uEDED\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE4EB\u0000\uEFD4"+
+            "\uEBFA\uED5C\u0000\uEBE4\uEF57\u0000\u0000\uE26B"+
+            "\u0000\u0000\u0000\uE965\u0000\uF6B5\uF995\uF395"+
+            "\uE23F\uF3B5\uF2D2\uEF58\uF0F1\u0000\u0000\u0000"+
+            "\u0000\u0000\uE0D4\uEB4E\uECF8\uF079\uF942\u0000"+
+            "\u0000\u0000\u0000\u0000\uEB96\u0000\uE2E0\u0000"+
+            "\uF235\u0000\u0000\uF83A\uEE53\uEBB2\uE03B\u0000"+
+            "\uECE4\uEFBB\u0000\u0000\u0000\u0000\u0000\uEC66"+
+            "\uF4F2\u0000\uF266\uF042\uE398\uF169\uE85B\uE2A8"+
+            "\u0000\u0000\u0000\u0000\uE9A3\u0000\u0000\u0000"+
+            "\uE76B\u0000\uF7CE\uEFD5\uECD1\u0000\u0000\uE44C"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE73C\uF4CC"+
+            "\u0000\uE1FB\uF666\u0000\uEEF5\uEF91\uECF9\uE44B"+
+            "\uF4F3\uECFB\u0000\uEA60\uE240\u0000\uE699\uF3D9"+
+            "\u0000\u0000\u0000\u0000\u0000\uF5C1\uE954\u0000"+
+            "\uF5BB\u0000\uEA61\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE976\u0000\u0000\uEA62\u0000\u0000\uF1E2"+
+            "\uF298\uF05F\uF37E\uECFC\u0000\uE4DF\uE4F4\uEBB3"+
+            "\u0000\uEBB4\u0000\u0000\u0000\u0000\uF563\u0000"+
+            "\u0000\uEAC6\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEFD6\u0000\u0000\u0000"+
+            "\uE8AB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF636\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uECB9\uF0C5\uF539\uE1B6\uE49B\u0000\uE83D\uE473"+
+            "\uE2D1\u0000\u0000\u0000\u0000\uE0DC\uE19C\u0000"+
+            "\uE2DD\u0000\u0000\uEF39\u0000\uECBB\uECBA\u0000"+
+            "\u0000\uEB6A\u0000\u0000\u0000\uF299\u0000\u0000"+
+            "\u0000\u0000\u0000\uE943\u0000\u0000\u0000\u0000"+
+            "\uE4F5\u0000\uE6A6\u0000\uF645\uE6DB\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEBD5\u0000\u0000\uE57A"+
+            "\u0000\uEAA3\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF9DF\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE399\uF1D4\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE0AA\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uED6B\u0000\uEBFB\uE0A2\u0000\u0000\u0000"+
+            "\u0000\uE4E0\u0000\uED4F\u0000\uF8C0\u0000\uE84E"+
+            "\uED5D\u0000\uE649\u0000\u0000\u0000\uF2C0\u0000"+
+            "\uEBFC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF649\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEAC7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uED41\u0000\u0000\u0000\u0000\u0000\u0000\uE977"+
+            "\uE978\u0000\u0000\u0000\uF866\u0000\uE4F6\u0000"+
+            "\u0000\u0000\u0000\uF3DA\u0000\uF894\u0000\u0000";
+
+        private final static String innerIndex2=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC9F"+
+            "\u0000\u0000\u0000\u0000\u0000\uE5CF\uE39A\u0000"+
+            "\u0000\uE1DF\u0000\u0000\uF5CB\u0000\uED92\uE0AB"+
+            "\u0000\uE6C4\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECA0"+
+            "\u0000\uE9DA\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE83E\uE07E\u0000\u0000\u0000"+
+            "\uE5B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uECA1\u0000\u0000\uEF73\u0000\u0000\uF4AB"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2A9"+
+            "\u0000\u0000\u0000\uE4F7\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE593\u0000\u0000"+
+            "\uE274\u0000\uEF94\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEDF5\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEEAE\u0000\uE64A\u0000\uEAEC\uED50\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEF74\u0000\u0000"+
+            "\u0000\u0000\uE745\u0000\u0000\u0000\uED6C\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF549\uF3B6\u0000"+
+            "\u0000\uEC6E\uEBB5\u0000\u0000\uE1EF\uF3A7\uE275"+
+            "\uE0DD\u0000\u0000\uE7E3\u0000\u0000\uF4AC\u0000"+
+            "\u0000\uE39B\uF13B\uEA63\uF6E9\u0000\u0000\uF7F5"+
+            "\u0000\u0000\u0000\u0000\u0000\uEBDE\uE0EE\u0000"+
+            "\u0000\u0000\uECBC\uF766\u0000\u0000\uE8EE\u0000"+
+            "\u0000\u0000\u0000\u0000\uF9F1\u0000\u0000\u0000"+
+            "\u0000\uF6B6\u0000\u0000\u0000\u0000\uF56E\u0000"+
+            "\u0000\uF47D\u0000\uE8D9\u0000\uF338\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEBFD\u0000\u0000"+
+            "\u0000\u0000\u0000\uEA64\u0000\uEB3C\u0000\u0000"+
+            "\u0000\u0000\u0000\uF1E3\u0000\u0000\uE4E1\u0000"+
+            "\uEAC8\u0000\u0000\u0000\u0000\uE7B6\u0000\uF9AC"+
+            "\uF2D3\u0000\u0000\u0000\uED51\uF77B\u0000\uE8AC"+
+            "\u0000\u0000\u0000\u0000\uF956\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE73D\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF64A"+
+            "\u0000\uE8DF\uE4D3\uF757\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE05E\uF751\uE444\u0000\u0000\uE944"+
+            "\uF849\uE05F\u0000\uF943\uF07A\uF07B\uE39C\u0000"+
+            "\u0000\u0000\u0000\u0000\uF1E4\u0000\u0000\uE9E7"+
+            "\u0000\u0000\uEAC9\u0000\u0000\u0000\u0000\uEAED"+
+            "\u0000\u0000\u0000\u0000\u0000\uF24C\u0000\uF2C1"+
+            "\u0000\u0000\uE162\u0000\uE9A4\u0000\u0000\u0000"+
+            "\uEACA\u0000\u0000\u0000\u0000\u0000\uE4F8\uF3A8"+
+            "\u0000\u0000\u0000\uE1B7\u0000\uF2D4\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uED6D\uEAEE\uE0AC"+
+            "\uEFBC\u0000\u0000\u0000\u0000\u0000\uF07C\u0000"+
+            "\u0000\u0000\uEACB\u0000\u0000\u0000\u0000\u0000"+
+            "\uF7BF\uE63F\uE5C6\u0000\u0000\u0000\u0000\u0000"+
+            "\uE2AA\u0000\u0000\uE239\u0000\u0000\uE69A\u0000"+
+            "\u0000\u0000\uF3B7\uF29A\u0000\u0000\u0000\uE7D9"+
+            "\uF4DF\u0000\uF758\uE256\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE5E6\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF576\u0000\u0000\uEE55\uF2D5"+
+            "\u0000\u0000\uE0EF\uF96F\u0000\u0000\u0000\u0000"+
+            "\u0000\uE937\u0000\u0000\uE677\u0000\u0000\u0000"+
+            "\u0000\u0000\uF759\u0000\u0000\u0000\u0000\uECD2"+
+            "\u0000\uECBD\u0000\uE2E1\uF350\uF16A\u0000\uE9D7"+
+            "\uF8F0\u0000\u0000\uF13C\u0000\u0000\u0000\uF339"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF867\uF8C1"+
+            "\u0000\uE450\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEDB0\u0000\u0000\u0000\uF1E5\u0000\u0000"+
+            "\u0000\u0000\uE0AD\u0000\uF7B0\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF6A5\u0000\uE0AE\u0000\uE83F\u0000\uE746\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE4A7\uF8B2"+
+            "\u0000\uF9C4\u0000\uF13D\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF8A1\u0000\u0000\u0000\uEDE9\uEFEE"+
+            "\u0000\uF4F4\uF795\uF351\uEA3F\uF740\u0000\u0000"+
+            "\uF4E0\uEEAF\u0000\u0000\u0000\u0000\u0000\uE8AD"+
+            "\u0000\uEE45\u0000\u0000\uF7A8\u0000\u0000\uE9D8"+
+            "\uEF69\uF2D6\u0000\u0000\u0000\uE4E2\u0000\uEC6F"+
+            "\u0000\u0000\uF970\uE6C8\uF9AD\u0000\u0000\u0000"+
+            "\uEAEF\uE163\uE4F9\u0000\u0000\u0000\u0000\uE592"+
+            "\uE8C7\uEA65\u0000\u0000\u0000\u0000\uF396\u0000"+
+            "\uE5D0\uEDD9\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF957\uE966\uEC70\u0000\u0000\u0000\uE840\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF4A3\u0000\uE4EC"+
+            "\u0000\uF55B\u0000\u0000\u0000\uF9C5\u0000\u0000"+
+            "\u0000\u0000\u0000\uECFD\u0000\uF7B1\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE39D\uF16B\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF5BC\uF434"+
+            "\uE75E\uE75F\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF5F7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF671\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE447\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF8EC\u0000\uE9C8"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED78"+
+            "\u0000\u0000\uE451\u0000\u0000\u0000\uF767\u0000"+
+            "\u0000\u0000\u0000\u0000\uE64B\uEA66\u0000\u0000"+
+            "\uF6BD\uF13E\u0000\u0000\u0000\uE371\u0000\uEB97"+
+            "\uF043\u0000\uE266\u0000\u0000\u0000\u0000\uE135"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF198\uEC71\uECBE\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF958\u0000\u0000"+
+            "\uE1F0\u0000\uF7F6\u0000\u0000\uEAF0\u0000\u0000"+
+            "\u0000\uEDBF\u0000\u0000\u0000\uE24F\u0000\u0000"+
+            "\u0000\u0000\uF971\uF1B0\uF9D1\uF64B\u0000\u0000"+
+            "\uF7CF\uF0DA\uE051\u0000\uE448\uE1F1\u0000\uECD3"+
+            "\uF9E6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEE7D\u0000\u0000"+
+            "\u0000\uECFA\u0000\u0000\uF33A\uF7D0\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF972\u0000\uF737\u0000"+
+            "\u0000\u0000\uEBE5\uF29B\u0000\u0000\u0000\uEEF6"+
+            "\uF07D\u0000\u0000\uF944\uF5C2\u0000\u0000\uE6DC"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF397\u0000\uE9E8\uE4ED\uF5FC\u0000\uE84F\u0000"+
+            "\uE19D\u0000\u0000\u0000\uE4FA\uF534\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF2D7\u0000\uE553"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF8E3\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF8ED\u0000\uEB3D\u0000\u0000\uF07E"+
+            "\uF8B3\uED52\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF677\uE46D\u0000\uEACC\u0000\u0000\uF959\u0000"+
+            "\u0000\uEDA9\uEB98\uF643\u0000\u0000\u0000\u0000"+
+            "\u0000\uEBFE\u0000\u0000\u0000\u0000\uE0F0\u0000"+
+            "\uF091\uF092\u0000\u0000\u0000\uE850\uF744\uF0F2"+
+            "\u0000\u0000\u0000\u0000\u0000\uED53\u0000\u0000"+
+            "\u0000\u0000\uEFD7\uED93\u0000\u0000\u0000\uE091"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE267"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF95A\u0000\u0000\u0000\uF4E1\u0000\u0000\uE0C4"+
+            "\u0000\u0000\u0000\u0000\uECE5\u0000\uE0C5\uF044"+
+            "\u0000\u0000\uEFBD\u0000\uE6C9\u0000\u0000\uF0DB"+
+            "\uF1B1\u0000\uE153\uF6BE\uF95B\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF796\u0000\uE7B7\u0000\u0000"+
+            "\uF4D3\uF4D4\u0000\u0000\u0000\uF6E4\u0000\uF6D1"+
+            "\u0000\u0000\uE747\uE241\uE052\u0000\u0000\uF8B4"+
+            "\uE0C6\u0000\u0000\uF398\u0000\u0000\uE5E7\u0000"+
+            "\uF060\u0000\u0000\u0000\u0000\u0000\uE164\uE0AF"+
+            "\u0000\u0000\u0000\u0000\u0000\uF53A\uEFAF\u0000"+
+            "\u0000\uF5C3\uEFD8\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE9E9\u0000\u0000\u0000\uF3F3\u0000"+
+            "\uE5FB\uEA4B\u0000\u0000\uF59D\u0000\u0000\u0000"+
+            "\uF9F3\uF9F2\uF6A6\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE9C9\u0000\u0000\uE563"+
+            "\u0000\uE138\u0000\uE851\uE165\u0000\uE7E4\u0000"+
+            "\u0000\u0000\uF85A\u0000\u0000\u0000\uEDE3\u0000"+
+            "\u0000\u0000\uE4BC\u0000\u0000\u0000\uE092\u0000"+
+            "\u0000\u0000\u0000\uE354\u0000\u0000\u0000\uE060"+
+            "\uF83B\uF0EB\uEEF8\uE7E5\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE3D7\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF4A4\u0000\u0000\u0000\uE59D\uF973"+
+            "\uF868\u0000\uF4D5\u0000\uE2AB\u0000\u0000\uF0F3"+
+            "\uE5FC\u0000\u0000\u0000\u0000\u0000\u0000\uE4D4"+
+            "\uE1FC\u0000\uE7E6\u0000\uEC9B\uEC31\uF0D4\u0000"+
+            "\uEB99\uED42\uE19E\u0000\u0000\u0000\uF8E4\u0000"+
+            "\u0000\u0000\uF53B\u0000\u0000\u0000\u0000\uE34D"+
+            "\u0000\uE093\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF2B8\u0000\u0000\u0000\uE6C0\u0000"+
+            "\uF29C\uF9F4\u0000\u0000\uE4E3\u0000\uF8C2\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5E8\uE8AE"+
+            "\uEBB6\uF747\u0000\u0000\u0000\u0000\u0000\uEB4F"+
+            "\uF8C3\uE9EA\u0000\uEC32\u0000\uF236\u0000\u0000"+
+            "\u0000\u0000\u0000\uF678\u0000\u0000\u0000\u0000"+
+            "\uF697\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE9CA\u0000"+
+            "\u0000\uE372\u0000\u0000\u0000\u0000\uE9A6\u0000"+
+            "\u0000\uE9EB\u0000\u0000\uED9B\u0000\u0000\uECAF"+
+            "\uE39E\u0000\u0000\u0000\uF59E\u0000\u0000\u0000"+
+            "\u0000\uE14C\uF6EA\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEDE4\uEAF1\u0000\u0000\uF6E1\u0000\uF7F7"+
+            "\uF2B9\u0000\u0000\uF768\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF7A9\u0000\u0000\u0000\u0000"+
+            "\u0000\uF769\u0000\u0000\u0000\uF24D\u0000\u0000"+
+            "\u0000\uE756\u0000\u0000\uED73\uF5CE\u0000\u0000"+
+            "\u0000\u0000\uE9D9\u0000\u0000\u0000\u0000\uE7E7"+
+            "\uE449\uE5C3\u0000\u0000\uE875\uE860\u0000\uE3D9"+
+            "\uE268\u0000\uE0DE\uF53C\uE89D\u0000\uF679\uEF95"+
+            "\uE2AC\uF392\u0000\uF59F\uE8C8\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE250\uECD4\uE3CF\uF3F5"+
+            "\u0000\uE1F2\u0000\uE2EB\u0000\u0000\u0000\uE1B8"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uECA6\uE3DA"+
+            "\u0000\uF435\u0000\u0000\u0000\u0000\u0000\uF436"+
+            "\u0000\uED5E\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE4FB\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF3A9\u0000\u0000\u0000\uF459"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF2D8\uEE59\u0000\uE748\uF895\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF4B5\u0000\u0000\uF734\u0000\u0000\uE3F3"+
+            "\uEE58\u0000\u0000\u0000\u0000\uF76A\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE979"+
+            "\uEA67\u0000\u0000\u0000\u0000\u0000\uE0DF\u0000"+
+            "\u0000\u0000\uE2EC\u0000\u0000\u0000\u0000\uF56F"+
+            "\u0000\u0000\uE3F4\uE44A\u0000\u0000\u0000\uEAF2"+
+            "\u0000\u0000\u0000\uEBB7\u0000\u0000\u0000\u0000"+
+            "\uEC33\uE4FC\u0000\u0000\uF1E6\u0000\u0000\u0000"+
+            "\u0000\u0000\uE8C9\u0000\u0000\u0000\uED9C\u0000"+
+            "\uE2DE\u0000\u0000\uE260\u0000\u0000\u0000\u0000"+
+            "\uE5D3\uF4F5\uF6AE\u0000\u0000\uF2C8\u0000\uE1F3"+
+            "\uF5CF\uEDF3\uF352\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE061\u0000\u0000\u0000\uF093\u0000\uE336\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7DA"+
+            "\uF33B\u0000\u0000\u0000\u0000\u0000\uF0E7\u0000"+
+            "\u0000\u0000\uEDC0\uF945\u0000\u0000\u0000\u0000"+
+            "\u0000\uED54\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE139\uF9C6\u0000"+
+            "\u0000\u0000\u0000\u0000\uF045\u0000\uEDAA\uEABA"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEBDF\u0000\uE861"+
+            "\u0000\u0000\u0000\u0000\uEBB8\u0000\uEF96\uE4FD"+
+            "\u0000\u0000\u0000\u0000\uEC34\u0000\u0000\u0000"+
+            "\u0000\u0000\uF45A\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE876\uF6B3\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF9CD\u0000\u0000\u0000\uF4B6\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF267\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF5C4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE734\u0000\u0000\u0000\u0000\u0000\uF437"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE7B8\uE7B9\uF2C9\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE65E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF6CB\uEAAE\uEF97\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE445\u0000\u0000\u0000\uE4D5\u0000"+
+            "\u0000\u0000\u0000\u0000\uF55C\uE89E\u0000\u0000"+
+            "\u0000\u0000\u0000\uE7E8\u0000\uF6EB\uF5C9\u0000"+
+            "\uF4BC\u0000\uE862\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE4B5\u0000\u0000\u0000\u0000"+
+            "\u0000\uEF46\u0000\u0000\uE65F\uF54A\u0000\uF6C9"+
+            "\u0000\u0000\uE13A\u0000\u0000\uF353\uE166\u0000"+
+            "\u0000\u0000\uE363\u0000\uE4BD\u0000\u0000\u0000"+
+            "\uE8FB\u0000\uE0E0\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE4E4\uF699\u0000\u0000\uE5BA\uF4CD\uE0E1"+
+            "\u0000\u0000\u0000\u0000\uF0F4\u0000\u0000\u0000"+
+            "\u0000\u0000\uF53D\u0000\uF93A\u0000\u0000\u0000"+
+            "\u0000\u0000\uF6EC\u0000\u0000\u0000\uEF98\u0000"+
+            "\uE877\u0000\u0000\u0000\uF6CC\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEDC1\u0000\u0000\u0000\u0000\uEB7E\u0000\u0000"+
+            "\u0000\u0000\u0000\uE5FD\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE276\uF93B\uE5BB\u0000\u0000\uF438"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEC35\uE1B9"+
+            "\uF094\uE0C7\u0000\uE1F4\u0000\u0000\uE8AF\uF2D9"+
+            "\u0000\u0000\u0000\u0000\u0000\uE1BA\u0000\u0000"+
+            "\uF99B\u0000\u0000\u0000\u0000\uEAF3\uE277\uE852"+
+            "\u0000\uE2AD\u0000\u0000\u0000\u0000\uEEF9\uF738"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF4E2\u0000"+
+            "\u0000\u0000\uE094\uEAA4\u0000\u0000\uE554\u0000"+
+            "\u0000\u0000\u0000\u0000\uE167\uEDC2\u0000\u0000"+
+            "\u0000\u0000\uE1BB\u0000\uF2DA\uF268\u0000\uE9A7"+
+            "\uEC36\u0000\u0000\u0000\u0000\u0000\uEB50\u0000"+
+            "\u0000\u0000\uE640\uF75A\u0000\uF99C\u0000\uE7FE"+
+            "\u0000\u0000\u0000\u0000\uEA40\u0000\u0000\u0000"+
+            "\uE9EC\uE878\u0000\u0000\u0000\u0000\u0000\uE570"+
+            "\u0000\uE69B\u0000\uE1D7\uEA68\u0000\u0000\uF49A"+
+            "\u0000\uED66\u0000\u0000\uE355\uF53E\u0000\uE9A8"+
+            "\u0000\u0000\u0000\uF1C5\uF4D6\u0000\u0000\uEA69"+
+            "\uECE6\u0000\u0000\u0000\u0000\u0000\u0000\uE4A8"+
+            "\u0000\uE8B0\u0000\u0000\uEDDA\uECBF\u0000\u0000"+
+            "\u0000\uE8B1\u0000\u0000\u0000\uE5E9\u0000\u0000"+
+            "\u0000\u0000\u0000\uEB51\uF2DB\u0000\u0000\uF379"+
+            "\u0000\u0000\uE6B2\u0000\u0000\u0000\u0000\uE39F"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE7E9\u0000\u0000\uE3A0\u0000\uF17D\uE4A9\u0000"+
+            "\uF439\uF354\u0000\u0000\uEC72\uEFEF\u0000\u0000"+
+            "\u0000\uF7D1\u0000\u0000\uEFD9\u0000\u0000\u0000"+
+            "\u0000\u0000\uEF6A\uE853\uE854\uE555\u0000\uEEFA"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE1E0\uECB0"+
+            "\u0000\uE8B2\uF8C4\u0000\uF4E3\u0000\uE7A5\uF8E7"+
+            "\uE9CB\uE364\u0000\uEE46\uEB3E\uF9DA\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE945\uEB9A"+
+            "\uEEB1\u0000\u0000\u0000\u0000\uF5F0\u0000\uE76C"+
+            "\uF1C6\u0000\u0000\u0000\u0000\uEBB9\u0000\uECC0"+
+            "\uF7C0\uEFF0\u0000\u0000\uE7DB\u0000\uF4E4\u0000"+
+            "\u0000\u0000\uE946\uED79\u0000\u0000\u0000\u0000"+
+            "\u0000\uF355\uECC1\uF95C\uF95D\u0000\u0000\u0000"+
+            "\u0000\uF45B\u0000\uF45C\u0000\u0000\u0000\uED5F"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF3DB\u0000\uF869\u0000\uF3B8\uF9F5\uEB9B"+
+            "\u0000\u0000\u0000\u0000\uEEFB\uF947\uF974\uF8C5"+
+            "\uECE7\uE749\u0000\uF69A\u0000\u0000\uE955\uE168"+
+            "\u0000\u0000\u0000\uEB3F\uF577\u0000\uF2DC\uE2FC"+
+            "\uF2DD\u0000\uF43A\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF9BE\u0000\u0000\uE03C"+
+            "\uF9BB\uF9C7\u0000\u0000\u0000\u0000\uEEB2\u0000"+
+            "\uF061\uEAF4\u0000\u0000\u0000\u0000\uE3EC\uED6E"+
+            "\uEDC3\u0000\u0000\u0000\u0000\uE7A6\u0000\u0000"+
+            "\uE1BC\u0000\uF4E5\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF1D5\u0000\u0000\uE7BA\u0000"+
+            "\u0000\u0000\uF1E7\uF8B5\uF77C\u0000\u0000\u0000"+
+            "\u0000\uEB77\u0000\uE169\u0000\u0000\uE556\u0000"+
+            "\u0000\u0000\u0000\u0000\uEEA5\u0000\uE5F5\uE4BE"+
+            "\u0000\uF99D\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uED94\u0000"+
+            "\u0000\uEAF5\u0000\u0000\uEF9A\uF77D\u0000\u0000"+
+            "\uE257\u0000\u0000\u0000\u0000\u0000\uF9F6\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEF68\u0000\uE1D8\uEED6\uE16A\u0000\u0000\uE073"+
+            "\uEAF6\uF357\uF356\u0000\uE74A\u0000\uF3F4\uF592"+
+            "\uF5CC\u0000\u0000\uF975\u0000\u0000\u0000\u0000"+
+            "\uF055\uF095\u0000\uE9DB\u0000\uE967\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEA9F\uF49B\u0000\uE5C7"+
+            "\u0000\u0000\u0000\uE760\u0000\uF358\uE3A1\uE3A2"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE7D4\uE678"+
+            "\uE7CA\u0000\uE841\uE757\uE972\uF4CE\uF5F4\u0000"+
+            "\u0000\uF3B9\u0000\u0000\uE863\u0000\uF67A\u0000"+
+            "\u0000\u0000\uE2F5\u0000\u0000\uF9AE\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE062\u0000"+
+            "\u0000\uEAB4\u0000\u0000\u0000\u0000\uE6DD\uF84A"+
+            "\uF237\uF5BD\u0000\uF797\u0000\u0000\uF1E8\u0000"+
+            "\u0000\u0000\u0000\u0000\uE571\u0000\uE3A3\uEBD6"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF7F8\u0000\uE8CA"+
+            "\uE0F9\uE564\u0000\uE7DC\u0000\uF24E\u0000\uF6ED"+
+            "\u0000\u0000\u0000\uE47E\u0000\u0000\uEBE6\uF6F9"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9ED"+
+            "\u0000\uEF6B\u0000\uE8B3\u0000\u0000\u0000\uE3F7"+
+            "\uEB40\u0000\u0000\uE572\u0000\uF667\u0000\uE6F9"+
+            "\u0000\u0000\uE76D\u0000\uE1FD\uF43B\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1BD"+
+            "\uF752\u0000\u0000\uF43C\u0000\u0000\uE03D\uE03E"+
+            "\uE2AE\u0000\u0000\u0000\u0000\u0000\uECC2\u0000"+
+            "\u0000\u0000\u0000\u0000\uE947\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8DA"+
+            "\uE7BB\uE095\uF663\uEE9A\uF097\u0000\u0000\u0000"+
+            "\u0000\u0000\uF098\u0000\u0000\uF69B\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE2AF\u0000\u0000\uE063\u0000\u0000\uE03F"+
+            "\uE440\uF3BA\u0000\uE6B3\uECC3\uF4FD\uEA6A\u0000"+
+            "\u0000\u0000\u0000\uEA6B\u0000\u0000\uF2DE\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEC73\uF29D\u0000\u0000\uEAF7\uE6CA"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE278\uE8DB\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF3BB\u0000\u0000\u0000\u0000\uEFF1"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF847\uE356\u0000\u0000\uE13B\uF238\u0000\u0000"+
+            "\uE0FA\uF7F9\uE19F\uE4FE\u0000\u0000\u0000\u0000"+
+            "\uED60\u0000\u0000\u0000\u0000\u0000\uF47E\u0000"+
+            "\uE565\uEACD\u0000\uF948\uE3D0\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF45D\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF6D2\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE064"+
+            "\u0000\uE5D9\u0000\u0000\u0000\uE76E\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1D9"+
+            "\u0000\u0000\u0000\uF239\uF64C\u0000\u0000\uE16B"+
+            "\u0000\u0000\u0000\u0000\u0000\uF359\u0000\uF99E"+
+            "\u0000\uEF59\uF5A0\u0000\u0000\u0000\u0000\uEEFC"+
+            "\uE6DE\u0000\u0000\u0000\u0000\uEA6C\u0000\uF33C"+
+            "\uE1A0\uE1E1\u0000\uEBBA\u0000\uE8EF\uE842\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE3A5\uE948\u0000\u0000"+
+            "\u0000\uE798\u0000\uE3A4\u0000\uE1E2\u0000\u0000"+
+            "\u0000\u0000\uE97A\u0000\u0000\uF399\u0000\uF35A"+
+            "\uE34E\u0000\uE9DC\u0000\u0000\u0000\u0000\uE566"+
+            "\uE4D6\u0000\u0000\u0000\u0000\u0000\u0000\uF1D0"+
+            "\uE1A1\u0000\u0000\u0000\u0000\u0000\uEAB5\u0000"+
+            "\u0000\u0000\uEAF8\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE531\uE242\u0000\u0000\u0000\u0000\u0000"+
+            "\uEF5A\u0000\u0000\u0000\u0000\uF0F5\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uECD5\uF5D0\u0000"+
+            "\u0000\u0000\uF5A1\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7A7"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEDAB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEE5B\u0000\uF5F1"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEDC5\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF7A3\uEB6B\uF67B\u0000\uE0F1"+
+            "\u0000\uE7EA\uF5A2\u0000\u0000\u0000\uE6D1\u0000"+
+            "\uE3F8\uF09A\uF09B\uE843\u0000\u0000\u0000\u0000"+
+            "\uF2DF\u0000\u0000\uF3EF\u0000\uEDF6\uF24F\uEC74"+
+            "\u0000\u0000\u0000\u0000\u0000\uE34F\u0000\uF83C"+
+            "\uF5D1\uEEB3\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEFBE\u0000\u0000"+
+            "\u0000\u0000\u0000\uF45E\uE8B4\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF95E\u0000\uE9EE"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEEB4\u0000"+
+            "\u0000\u0000\u0000\u0000\uE6B4\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF6B4\u0000\u0000\u0000\u0000"+
+            "\u0000\uE1BE\u0000\uE879\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE2B0\uF6D9\uF4E6\u0000\u0000"+
+            "\uE269\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE23A\u0000\uE0C8\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE337\u0000\uF35B\u0000\uE357"+
+            "\u0000\u0000\uED55\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE8E0\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE5DA\u0000\uE6A7\u0000\u0000\u0000\uF250"+
+            "\u0000\uF798\u0000\u0000\u0000\u0000\uF5D2\uF1E9"+
+            "\u0000\uE7BC\u0000\uEDC6\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF5A3\u0000\u0000"+
+            "\uE864\uEC37\uF8FC\u0000\u0000\uF3DC\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE096\u0000\u0000\u0000"+
+            "\uEF9C\u0000\u0000\uE279\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEFF8\uEC75\u0000\u0000\u0000\u0000"+
+            "\uE349\uE594\u0000\u0000\u0000\u0000\u0000\uE3A6"+
+            "\u0000\uEACE\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF996\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE4AA\u0000\u0000\u0000\uE13C\u0000\u0000\u0000"+
+            "\u0000\uF2E0\u0000\u0000\u0000\uEDE5\uE365\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8FC"+
+            "\u0000\u0000\u0000\u0000\uF976\u0000\u0000\u0000"+
+            "\u0000\u0000\uE0FE\uF1EA\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEA41\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF7E3\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE532\uE2F6\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE660\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE5EA\uF3EE\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF85B\u0000"+
+            "\u0000\u0000\u0000\uEDA1\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE5B1\u0000\u0000\u0000"+
+            "\u0000\u0000\uE2ED\u0000\uF1EB\u0000\u0000\u0000"+
+            "\u0000\u0000\uE5B2\u0000\u0000\u0000\uE5BC\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF9E2\uF4AD\u0000\uF9DB\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEFB0\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE3A7\u0000\u0000\uF9E3\uE243\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF9E4\uF85E"+
+            "\u0000\u0000\u0000\u0000\uE040\u0000\uF6A7\u0000"+
+            "\uE2B1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE32"+
+            "\u0000\uF946\uF43D\uF2E1\uF4AE\uE956\uE7EB\u0000"+
+            "\u0000\u0000\uEF70\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEBA8\u0000\u0000\u0000\u0000\uE5F6"+
+            "\uE2FD\u0000\u0000\uEA6D\u0000\u0000\u0000\uE7D1"+
+            "\u0000\u0000\u0000\uED7A\uF45F\u0000\uF6BF\u0000"+
+            "\u0000\uEC76\uEC38\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uECD6\u0000"+
+            "\uF1D1\u0000\u0000\u0000\u0000\u0000\uEFF9\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE641\uEA42"+
+            "\u0000\u0000\uEB78\u0000\u0000\uE4AB\u0000\uF0DC"+
+            "\u0000\u0000\uEAAF\u0000\uE053\u0000\u0000\uF29E"+
+            "\u0000\uF9C3\u0000\u0000\u0000\uF0F6\uE2B2\u0000"+
+            "\u0000\u0000\u0000\uE7EC\u0000\uE7BD\u0000\uE76F"+
+            "\u0000\u0000\uE548\uF0BE\uE9EF\u0000\uE9F0\uE9F1"+
+            "\uE9F2\u0000\u0000\uE7BE\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF8C6\uE2B3\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF29F\u0000\u0000\u0000\u0000\u0000\u0000\uED3B"+
+            "\u0000\uE855\u0000\uE77C\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE3A8\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEC39\u0000\u0000\uEA4C"+
+            "\uEEB5\u0000\u0000\u0000\u0000\u0000\uE8F0\u0000"+
+            "\uF2E2\uF3F0\uE2B4\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE8F1\u0000"+
+            "\uEB41\u0000\u0000\u0000\u0000\uEAA5\u0000\uF7D2"+
+            "\u0000\u0000\uEEFD\u0000\u0000\uEE33\uF8F1\uE0B0"+
+            "\uF43E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE1E7\u0000\uEF6C\u0000\u0000\uEED7\u0000\u0000"+
+            "\uF6C0\u0000\uE373\u0000\u0000\u0000\uE831\u0000"+
+            "\u0000\u0000\uE14D\u0000\u0000\uE3A9\uE9CC\u0000"+
+            "\u0000\uECFE\uE3AA\uEF3A\u0000\uF046\uF7FA\uEE5C"+
+            "\uF668\u0000\u0000\u0000\uE557\u0000\u0000\u0000"+
+            "\uE7CB\u0000\uE7D2\uE4CB\uE799\uE839\uF5F8\u0000"+
+            "\u0000\uEA6E\uF43F\uF739\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE758\u0000\u0000\uF251\u0000"+
+            "\u0000\u0000\u0000\uF7C1\u0000\u0000\u0000\u0000"+
+            "\uE9F3\uF09C\u0000\uF64D\uEBBB\uE1BF\uF564\uEE5D"+
+            "\u0000\uF95F\uF8A2\u0000\uEB6C\u0000\u0000\u0000"+
+            "\u0000\uF54B\uE865\u0000\uF7B2\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF8F2\u0000\uE8F6\u0000\uEA6F"+
+            "\u0000\u0000\u0000\uE8F2\u0000\u0000\u0000\u0000"+
+            "\u0000\uF76C\uF6EE\uF0E8\u0000\uE49C\u0000\u0000"+
+            "\uF3BC\u0000\u0000\uF86A\u0000\u0000\uE87A\uE856"+
+            "\uF6C1\u0000\u0000\uEEB6\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+        private final static String innerIndex3=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEDC7\uE63C\u0000\u0000\u0000"+
+            "\u0000\uE957\u0000\u0000\u0000\u0000\u0000\uEBA9"+
+            "\u0000\uEC3A\u0000\uE5A6\u0000\u0000\uE567\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF460\u0000\uF09D"+
+            "\u0000\uEB6D\uF8F3\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF3BD\u0000\u0000\uEC77\uF9D7\u0000"+
+            "\uE258\uF047\u0000\uF950\u0000\uF9E7\uF6EF\u0000"+
+            "\u0000\uE6B5\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF2BA\uF3DD\u0000\uEA43\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEF5B\u0000\u0000\uF76D\u0000"+
+            "\u0000\uF8C7\uE5C8\u0000\uE6DF\u0000\uE9A9\u0000"+
+            "\u0000\u0000\u0000\u0000\uEFB1\u0000\u0000\uF83D"+
+            "\uF669\uF896\u0000\u0000\u0000\u0000\u0000\uF73A"+
+            "\u0000\u0000\u0000\u0000\u0000\uEE7E\u0000\uE16C"+
+            "\uEBBC\uEB91\u0000\u0000\uEFBF\uF99F\uEE5E\u0000"+
+            "\u0000\uEBD7\u0000\uEE5F\u0000\uF593\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED95"+
+            "\u0000\u0000\uED9D\u0000\u0000\uF7E4\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF2E3\u0000\u0000\uE2EE\uF64E\uEB42\uF9A0\uE3AB"+
+            "\u0000\u0000\u0000\uE6FA\u0000\u0000\u0000\uF8C8"+
+            "\u0000\uEC67\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE533\uF39A\uE6A8\u0000\u0000\u0000\uEBE7\u0000"+
+            "\u0000\uE4BF\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF2E4\u0000\uE6C5\uF0E2\u0000\u0000\uF977\u0000"+
+            "\u0000\uED32\u0000\uEC78\u0000\uEE60\u0000\uF8E8"+
+            "\uF578\uEDF4\uF54C\uF565\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAB6"+
+            "\u0000\uF949\uF252\uE097\u0000\u0000\u0000\uF2E5"+
+            "\uE0E2\uE534\u0000\uEA70\uE89F\uED56\uEF4E\u0000"+
+            "\u0000\u0000\u0000\uEB6E\uF644\uF062\u0000\uF7FB"+
+            "\u0000\u0000\uEB52\u0000\uE074\u0000\uEEB7\u0000"+
+            "\uF09F\u0000\uE7DD\u0000\uE844\uF23A\uF8E9\u0000"+
+            "\u0000\u0000\u0000\uE8CB\uE845\u0000\u0000\u0000"+
+            "\u0000\u0000\uF3BE\u0000\u0000\uE4AC\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF8C9\u0000"+
+            "\uEACF\u0000\u0000\uE4C0\uECD7\u0000\uF2E6\uF960"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEFC0"+
+            "\u0000\u0000\u0000\uF5D3\u0000\u0000\uF16C\uF6B7"+
+            "\u0000\u0000\uF048\uE3F9\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE958\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF049\u0000\u0000\u0000\u0000\u0000\uF3DE\u0000"+
+            "\u0000\u0000\u0000\u0000\uE6B6\uE2B5\u0000\uE7A8"+
+            "\u0000\u0000\uF17E\u0000\u0000\uE9AA\u0000\u0000"+
+            "\u0000\u0000\uE1A2\uEF3E\u0000\u0000\u0000\uEBBD"+
+            "\u0000\uF461\u0000\u0000\u0000\u0000\uEFC1\u0000"+
+            "\u0000\u0000\uE49E\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE8B5\u0000\uF4E7\uE7A0\u0000\u0000"+
+            "\u0000\uF961\u0000\uF1B2\uF53F\u0000\uF8A3\u0000"+
+            "\u0000\uF951\u0000\uF23B\uE535\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF594"+
+            "\u0000\u0000\u0000\u0000\uF269\u0000\u0000\u0000"+
+            "\uF8CA\u0000\u0000\u0000\u0000\u0000\uE1E3\uE74B"+
+            "\u0000\uEDDB\uF799\u0000\u0000\u0000\uF664\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6A9"+
+            "\u0000\uE0C9\u0000\u0000\uEE61\uF35C\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE73E\u0000\uF7D3\uE5FE\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE74C\uF440\u0000\u0000\u0000"+
+            "\u0000\uEC3B\uF4E8\u0000\u0000\u0000\u0000\u0000"+
+            "\uF2C2\u0000\u0000\u0000\u0000\u0000\u0000\uF1EC"+
+            "\u0000\uEEB8\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE8A0\u0000\u0000\uE14E\u0000\u0000\uF49E"+
+            "\uE87B\u0000\uEC68\uF1D6\u0000\u0000\uE661\uEB43"+
+            "\u0000\u0000\uF962\u0000\uF0C8\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE4C1\uF35D\u0000"+
+            "\uE2F7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF1D2\u0000\uE568\uE959\uE6F1\u0000"+
+            "\u0000\uEABB\u0000\u0000\uF4A5\u0000\u0000\u0000"+
+            "\uF55D\u0000\u0000\u0000\u0000\uF3BF\uF741\u0000"+
+            "\uEFFA\u0000\u0000\u0000\uF8CB\u0000\u0000\uE065"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF7D4\uF6CA\u0000\u0000\uE658"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF978\uF4BD"+
+            "\u0000\uF2A0\u0000\uEEFE\u0000\u0000\u0000\u0000"+
+            "\u0000\uE4C2\u0000\u0000\u0000\u0000\uE4B6\u0000"+
+            "\uE13D\uF69C\uE642\uE468\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEED8\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uECA5\u0000\u0000"+
+            "\u0000\u0000\uEEB9\u0000\u0000\u0000\u0000\uF33D"+
+            "\uF8CC\uF0A1\u0000\u0000\uE536\u0000\u0000\u0000"+
+            "\u0000\uF8CD\u0000\uE5BD\uF3DF\u0000\u0000\uF69D"+
+            "\u0000\uEA44\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5EB\u0000"+
+            "\u0000\uEDC8\u0000\u0000\u0000\uF8A4\uE549\u0000"+
+            "\u0000\uEA71\u0000\uED33\u0000\u0000\u0000\uE6B7"+
+            "\u0000\uF77E\u0000\u0000\u0000\uEA45\u0000\u0000"+
+            "\uE662\u0000\uF7D5\uEEBA\uF0D5\uE5F7\uF2E7\uEBBE"+
+            "\u0000\u0000\u0000\uF83E\u0000\u0000\u0000\uE679"+
+            "\uE67E\u0000\u0000\u0000\u0000\u0000\u0000\uEEBB"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF15B"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5B3\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE244\u0000\u0000\u0000"+
+            "\uF8A5\uEBEE\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF6A8\u0000\u0000\u0000\u0000\uF8CE\u0000\u0000"+
+            "\u0000\u0000\u0000\uE74D\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF8FD\u0000\u0000\u0000\u0000"+
+            "\uF979\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE2B6\u0000\u0000\u0000\uF1C7\uF23C\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE16D\u0000\u0000"+
+            "\u0000\u0000\uF637\u0000\u0000\u0000\uEE9C\u0000"+
+            "\u0000\u0000\uF5A4\u0000\u0000\u0000\u0000\u0000"+
+            "\uF9DC\uF1B3\uE259\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF2E8\u0000\u0000\uEBBF\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF86B\uE0E3\uF6A9\u0000\uF8A6"+
+            "\u0000\u0000\u0000\uE949\u0000\u0000\u0000\uF3C0"+
+            "\uF1C8\uF2C3\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE63D\u0000\u0000\uF9CE\u0000\u0000\u0000\uEF31"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF8F4\uE5A7\u0000\u0000\u0000\uF3F6\u0000\uEE63"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE16E\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF742\u0000\u0000\u0000\uE97B\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF9B6\u0000\u0000\u0000"+
+            "\u0000\uEDEA\u0000\u0000\uF3E0\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE8CC\uE9CD\u0000\u0000\u0000\uE558\u0000"+
+            "\u0000\uE7ED\u0000\u0000\u0000\u0000\uF5A5\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEE9D\u0000\u0000\u0000\u0000\u0000\uEE64\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9C8"+
+            "\u0000\uE631\uF9BF\u0000\uF963\u0000\uF2A1\u0000"+
+            "\uEEBC\u0000\u0000\u0000\u0000\u0000\uE3EE\u0000"+
+            "\u0000\uEE65\u0000\u0000\uEFF2\u0000\uEAB0\u0000"+
+            "\u0000\u0000\u0000\u0000\uE770\uF94A\uF9AF\uF35E"+
+            "\u0000\uE8E1\u0000\u0000\uEDC9\u0000\uF1B4\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEB53\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uECD8\u0000\u0000\u0000"+
+            "\u0000\uEFFB\uF038\u0000\u0000\u0000\u0000\uF9B7"+
+            "\u0000\u0000\uF8A7\u0000\uEFC2\u0000\u0000\u0000"+
+            "\u0000\uF9F7\u0000\u0000\u0000\u0000\u0000\uEC69"+
+            "\u0000\u0000\uE97C\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEF32\u0000\u0000\u0000"+
+            "\u0000\uEE92\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF9F8\uF9F9\u0000\u0000\u0000\uF64F\u0000"+
+            "\u0000\uEEA7\u0000\uEE67\u0000\u0000\u0000\u0000"+
+            "\uE595\uE559\u0000\u0000\u0000\u0000\uE69C\u0000"+
+            "\uE6F2\u0000\uEBC0\u0000\uE8E2\uEE68\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEEBD"+
+            "\u0000\u0000\u0000\u0000\u0000\uF35F\uF4BE\uEC3C"+
+            "\u0000\u0000\u0000\u0000\u0000\uF5B7\uEB92\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF9B8\uECE8\u0000\uE537\uEF9E"+
+            "\uF862\u0000\u0000\u0000\u0000\u0000\uF791\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE663\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE5B4\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF360\u0000\uF6F0\uF243\u0000\u0000"+
+            "\uF04A\u0000\uF063\u0000\u0000\uF1C9\uE9AB\u0000"+
+            "\u0000\u0000\uEDAC\uF9A1\u0000\uEAD0\uF143\u0000"+
+            "\uEAD1\u0000\u0000\u0000\u0000\u0000\uF1ED\uF748"+
+            "\uF6FA\u0000\u0000\u0000\uF73B\u0000\u0000\u0000"+
+            "\u0000\u0000\uF570\u0000\u0000\u0000\u0000\u0000"+
+            "\uE54A\uED43\u0000\uEFDA\u0000\uEA46\u0000\uE7BF"+
+            "\u0000\uE7C0\uE691\u0000\u0000\u0000\u0000\uE7CC"+
+            "\u0000\uE83A\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEAE5\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF6E5\u0000\u0000\u0000\uE142\u0000\u0000"+
+            "\uEAF9\uE6E0\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE54B\u0000\u0000\u0000\u0000\uF9FA"+
+            "\u0000\u0000\u0000\u0000\uE143\u0000\u0000\uE8F3"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEAD2\u0000\uE25A\u0000\uF26A\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uED74\u0000"+
+            "\uF8CF\u0000\u0000\u0000\u0000\u0000\u0000\uE2B7"+
+            "\u0000\uF253\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE27A\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEC3D\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE6E1\uF897\u0000\u0000\uE5C9\uF73C\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEED9\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF4E9\u0000"+
+            "\u0000\u0000\u0000\uE77D\uECC4\uF393\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEF75\u0000\u0000"+
+            "\u0000\uEB9C\uF254\uE7DE\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF0A2\uF0A3"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF952\uF04B"+
+            "\u0000\u0000\u0000\u0000\uEF3B\uEA72\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF1EF\u0000\uEF33\u0000\u0000\u0000\u0000\uE2F1"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE54C\u0000\uF97A\u0000\u0000\u0000\u0000\u0000"+
+            "\uEEBE\u0000\uF994\u0000\u0000\uE644\u0000\u0000"+
+            "\uEC3E\u0000\uE4B7\uF85C\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF86C\u0000\uF1B5\uEBE3"+
+            "\u0000\uEF3C\u0000\uEF6D\u0000\u0000\uF2E9\u0000"+
+            "\u0000\u0000\u0000\u0000\uF54D\u0000\uE2B8\uEFDB"+
+            "\uE3AC\u0000\u0000\u0000\u0000\u0000\u0000\uE857"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0C9"+
+            "\u0000\uEF5C\u0000\u0000\u0000\uEA47\u0000\u0000"+
+            "\u0000\u0000\uE64C\uE4E5\u0000\u0000\u0000\u0000"+
+            "\u0000\uF86D\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE866\u0000\uE041\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE858\uEAA6\u0000\uF7B3\uF462\u0000\uE054"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE25B\u0000"+
+            "\u0000\uE1F5\u0000\u0000\u0000\uF9B0\uE5A8\u0000"+
+            "\uF3C1\u0000\u0000\uEC79\uE95A\uF144\uF850\u0000"+
+            "\u0000\uF8A8\uE338\u0000\u0000\uE87C\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7EE"+
+            "\u0000\uEB9D\u0000\u0000\u0000\uF2EA\uF86E\u0000"+
+            "\u0000\uEB54\u0000\uE2B9\u0000\uE5CA\uE6E2\uEC3F"+
+            "\u0000\uE6B8\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEF5D\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF66A\u0000\u0000\u0000\u0000"+
+            "\uF2A2\uEC6A\uF69E\u0000\u0000\uF8D0\uE3AD\u0000"+
+            "\uE1E4\u0000\uE3AE\uE97D\uEF5E\u0000\uF39B\uE245"+
+            "\uEE9E\u0000\u0000\uE6FB\uE366\uE9F5\uF6F1\u0000"+
+            "\uF69F\u0000\uE8F7\u0000\u0000\u0000\u0000\uF8EA"+
+            "\uEFDC\uE7C1\u0000\uF5F2\uEB55\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF064\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF7C2\u0000\uF04C"+
+            "\u0000\uE455\uF8D1\uEEC0\uF0A5\u0000\uEAFA\uECA2"+
+            "\uE6B9\u0000\uEFC3\u0000\uEF9F\uEF3F\u0000\u0000"+
+            "\uF463\uF8A9\uE735\u0000\u0000\u0000\u0000\uE5CB"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE358\u0000"+
+            "\u0000\u0000\uE3AF\uE6E3\u0000\u0000\u0000\uEB56"+
+            "\u0000\uE632\u0000\uF1F0\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE6F3\u0000\u0000\u0000\uF964\u0000\uE867\uE16F"+
+            "\u0000\uF464\u0000\uE3B0\u0000\uE170\u0000\uE8FD"+
+            "\uF4BF\u0000\uF361\u0000\u0000\u0000\u0000\u0000"+
+            "\uF94B\u0000\uEC40\u0000\u0000\uEE35\u0000\u0000"+
+            "\u0000\uEC6B\u0000\u0000\u0000\uEADE\u0000\uEB57"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF491\u0000"+
+            "\u0000\u0000\uE171\u0000\u0000\u0000\u0000\uE67A"+
+            "\u0000\u0000\u0000\u0000\uEEC2\u0000\u0000\u0000"+
+            "\uE246\u0000\uF4C0\u0000\uE1FE\u0000\u0000\u0000"+
+            "\uF8D2\u0000\uF79A\uF6FB\u0000\u0000\uEF4F\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEF47\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1B6"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE94A\u0000\u0000\uE144\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF3F7\u0000\u0000\u0000\uEF48\u0000\u0000"+
+            "\uE098\u0000\uED34\uF566\u0000\u0000\u0000\uEAE6"+
+            "\u0000\u0000\u0000\uEAA7\u0000\uEAE7\uEBC1\u0000"+
+            "\uEFC4\u0000\u0000\uE95B\uEFC5\u0000\u0000\u0000"+
+            "\uF2A3\uF0A6\uE0A3\uECE9\u0000\u0000\u0000\uE3FB"+
+            "\uF2A4\u0000\uF2EB\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE344"+
+            "\u0000\u0000\u0000\u0000\uE1A3\u0000\u0000\uEF76"+
+            "\u0000\uF2A5\u0000\uE4CC\uE87D\u0000\u0000\u0000"+
+            "\u0000\uE6BA\u0000\uF465\uF5E5\uE7EF\u0000\u0000"+
+            "\u0000\u0000\uF7B4\u0000\u0000\uE5D4\uF9CF\u0000"+
+            "\u0000\u0000\uE8E3\u0000\u0000\u0000\u0000\uF3E1"+
+            "\uF146\u0000\u0000\u0000\u0000\uF8FE\uE4D7\u0000"+
+            "\uE3B1\u0000\uE0B1\u0000\u0000\u0000\u0000\uE3B2"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE0B2\uF3C2"+
+            "\u0000\u0000\uF571\uF7B5\u0000\u0000\uEBC3\uEBC2"+
+            "\u0000\uF0F7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEAA8\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE0CA\u0000\u0000"+
+            "\u0000\u0000\u0000\uEE49\u0000\u0000\u0000\u0000"+
+            "\u0000\uF76E\uF7AA\uE099\u0000\uF1B7\u0000\u0000"+
+            "\uE4B8\uF466\u0000\u0000\uE569\uF255\uF492\u0000"+
+            "\u0000\u0000\uE042\u0000\u0000\uE94B\u0000\uF3F8"+
+            "\u0000\u0000\u0000\u0000\u0000\uF147\u0000\u0000"+
+            "\u0000\u0000\uEDCA\u0000\uF650\uF9DD\u0000\u0000"+
+            "\uE573\uE172\u0000\uF6D4\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE6E5\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE4C3\u0000\uE736\u0000\uF651\u0000\u0000\u0000"+
+            "\u0000\u0000\uE9F6\u0000\uE1C0\u0000\u0000\u0000"+
+            "\uEDDC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEDCB\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEBC4\u0000\u0000\u0000\u0000\u0000\uEF40"+
+            "\uF540\uF4EA\uE87E\u0000\uE6BB\u0000\uEC41\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE6AA\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE69D\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uED6F\u0000\uE066\u0000"+
+            "\u0000\u0000\uF0A8\u0000\u0000\u0000\uE8FE\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF652\u0000\u0000\uF2BB\u0000\u0000\u0000"+
+            "\u0000\uE59F\u0000\u0000\uEB58\u0000\u0000\u0000"+
+            "\uEF49\u0000\uF2A6\u0000\u0000\u0000\u0000\u0000"+
+            "\uE1A4\u0000\u0000\uE596\uE8A1\uE8DC\uE8DD\u0000"+
+            "\u0000\u0000\u0000\u0000\uF26C\u0000\uE0CB\uF965"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE27B\u0000"+
+            "\uE1C1\u0000\u0000\uF8D3\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF7AB\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF5D4\u0000\u0000\u0000\u0000\uE7A9"+
+            "\u0000\u0000\uEFDD\uE8CD\u0000\u0000\uE9CE\u0000"+
+            "\uEEC3\u0000\uF15C\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF7EC\u0000\u0000\u0000\uE0CC\u0000"+
+            "\u0000\u0000\u0000\uEB9E\uE538\u0000\uF1D3\uE791"+
+            "\u0000\uF467\u0000\uE09A\uE891\u0000\u0000\uE664"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE7CD\u0000"+
+            "\u0000\u0000\uE77E\u0000\uF451\u0000\u0000\u0000"+
+            "\uEAD3\u0000\u0000\u0000\uE892\u0000\uEC7A\u0000"+
+            "\u0000\uEB9F\u0000\u0000\uE79A\u0000\u0000\u0000"+
+            "\uF6AF\uE846\u0000\uE067\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF468\u0000"+
+            "\uE79B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF86F\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2EF"+
+            "\uE7C2\u0000\uF362\u0000\uED61\u0000\u0000\u0000"+
+            "\uF4B7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF870\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF2EC\u0000\u0000\u0000\u0000"+
+            "\u0000\uEC42\u0000\uE54D\u0000\u0000\uE7CE\u0000"+
+            "\u0000\u0000\u0000\uF572\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE539\u0000\u0000\u0000\u0000\uE1C2\uEEDA"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF469\u0000\u0000\u0000\u0000"+
+            "\u0000\uE7AA\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE74E\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE93D\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEC7B\uE69E\u0000\u0000"+
+            "\uE09B\u0000\u0000\uE56A\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF567\uE131\u0000\u0000\uE2BA"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF5B8"+
+            "\u0000\u0000\u0000\uE7C3\uE378\u0000\u0000\u0000"+
+            "\u0000\u0000\uECC5\uF0F8\u0000\uF441\u0000\u0000"+
+            "\u0000\uE2BB\u0000\u0000\u0000\uE4AD\uEF71\uE27C"+
+            "\u0000\u0000\u0000\uEB44\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEA73\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE9F7\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF442\uF4F6\uF66B"+
+            "\u0000\u0000\u0000\u0000\uE6FE\u0000\u0000\u0000"+
+            "\u0000\u0000\uF76F\u0000\uF6F2\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE339\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE6A"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF5A6\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE6BC\uE173\u0000\u0000\uEE6B"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE9DD\u0000\u0000\u0000"+
+            "\u0000\uE3B3\u0000\u0000\u0000\u0000\u0000\uF2ED"+
+            "\u0000\u0000\u0000\u0000\uE66E\uED96\uEBEF\u0000"+
+            "\u0000\uE9F8\u0000\u0000\u0000\u0000\u0000\uEF5F"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE075\u0000\u0000\u0000\uE931"+
+            "\u0000\uEB45\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF93C\uF93D\uE737\u0000\u0000\u0000"+
+            "\u0000\uF1B8\u0000\u0000\u0000\uE8B6\u0000\u0000"+
+            "\u0000\u0000\uE692\uF4AF\u0000\u0000\uE1A5\u0000"+
+            "\uE893\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE738\u0000\u0000\u0000\uE174\u0000\u0000\uE3B4"+
+            "\u0000\u0000\u0000\u0000\u0000\uE068\u0000\u0000"+
+            "\u0000\u0000\u0000\uE894\u0000\u0000\u0000\u0000"+
+            "\u0000\uF5A7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF5A8\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEE36\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE5EC\uE5F8\uE895\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uECC6\u0000\u0000\u0000\uEA74\u0000"+
+            "\uEA75\uE3B5\u0000\u0000\u0000\u0000\u0000\uE3B6"+
+            "\uE3B7\uF443\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEFDE\u0000\u0000\u0000\u0000\u0000\uF363\uF444"+
+            "\u0000\u0000\uF364\uE0E4\uF8D4\uF5E6\uECEA\u0000"+
+            "\uEA76\u0000\u0000\u0000\u0000\uEAD4\u0000\u0000"+
+            "\uF79B\u0000\u0000\u0000\u0000\uF33E\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE3B8\u0000\u0000\u0000\u0000\uE66F"+
+            "\u0000\uE367\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF931\uF2EE\uE968"+
+            "\u0000\uEFDF\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEDDD\uF9FB"+
+            "\u0000\u0000\uEB59\u0000\u0000\u0000\uE659\u0000"+
+            "\u0000\uE53A\u0000\uEDCC\u0000\u0000\u0000\u0000"+
+            "\u0000\uEFE0\u0000\u0000\u0000\uE368\uF932\uE54E"+
+            "\uEC43\uEA77\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE94C\uE446\uF5D5\u0000\u0000\u0000\u0000"+
+            "\u0000\uE231\uF5A9\u0000\u0000\uE9F9\u0000\u0000"+
+            "\uE9FA\u0000\u0000\u0000\u0000\u0000\u0000\uF365"+
+            "\u0000\u0000\u0000\u0000\uF66F\u0000\uF46A\uED7B"+
+            "\u0000\uF493\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF149\u0000\u0000\u0000\u0000"+
+            "\uF9FC\u0000\u0000\u0000\u0000\uEBAA\u0000\u0000"+
+            "\uE069\u0000\u0000\uF2EF\u0000\uF5AA\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF19B\u0000\u0000\uF73D"+
+            "\u0000\uF452\uF653\u0000\uE6D2\u0000\u0000\uF7A2"+
+            "\uF366\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF39C\u0000"+
+            "\u0000\uF670\u0000\u0000\u0000\u0000\uEFF3\uF453"+
+            "\u0000\u0000\u0000\uE53B\uE043\uE1A6\u0000\uE1C3"+
+            "\uE1DA\u0000\u0000\u0000\u0000\u0000\uE7CF\u0000"+
+            "\u0000\uF654\u0000\u0000\u0000\uF26D\uEEC4\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC44"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEAE2\uEEDB\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEF41\u0000\uF93E\u0000\u0000\u0000\u0000"+
+            "\uEDCD\u0000\u0000\u0000\uF87B\u0000\uE2BC\u0000"+
+            "\u0000\uE2E2\uE1F6\u0000\u0000\uF2F0\u0000\uF54E"+
+            "\u0000\uE55D\u0000\u0000\uF4B8\u0000\u0000\u0000"+
+            "\uEFA1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF494\uF4EB\u0000\uF367\u0000\u0000"+
+            "\uE2D7\u0000\u0000\u0000\u0000\u0000\u0000\uE2DF"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEF50\uEF51\u0000\u0000\u0000\uE2E3\uEFA2"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE33A\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF4C1\uE33B\u0000\uE574"+
+            "\u0000\u0000\uF2BC\uE731\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7DF"+
+            "\u0000\uF4D7\u0000\u0000\u0000\uE94D\u0000\uE175"+
+            "\uF1F1\u0000\u0000\uF3E2\u0000\uE56B\u0000\u0000"+
+            "\u0000\u0000\uEC45\u0000\u0000\uE076\u0000\uE4AE"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE176\u0000"+
+            "\u0000\uF3D3\uF5E7\u0000\u0000\u0000\u0000\uE06A"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF8EE"+
+            "\u0000\uEBC5\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEAE9\u0000\uF26E\u0000\u0000\uF6C2\u0000"+
+            "\uE732\u0000\u0000\u0000\u0000\u0000\uE9AC\u0000"+
+            "\u0000\u0000\u0000\u0000\uF33F\uE64D\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEBAB\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF7B6\u0000"+
+            "\u0000\uE597\u0000\uE359\uF2A7\uEC7C\u0000\uE8EA"+
+            "\uE25C\uF5E8\uF6D5\u0000\uE4CD\u0000\uF4FE\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE345\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEBA0\u0000\uEAFB\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEE6D\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEF34\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0CD"+
+            "\u0000\u0000\u0000\uF2A8\u0000\u0000\u0000\uF244"+
+            "\u0000\u0000\u0000\u0000\uE868\uE3B9\u0000\uEAA9"+
+            "\u0000\u0000\uF4B0\u0000\u0000\uE154\u0000\u0000"+
+            "\u0000\uE247\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF2A9\u0000\u0000"+
+            "\u0000\uEAD5\u0000\u0000\uF1D7\u0000\u0000\u0000"+
+            "\uF256\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF2BD\uF966\u0000\u0000\uE8F4\u0000\uF2AA\uF749"+
+            "\u0000\uF5E9\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uECD9\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEBC6\u0000\u0000\u0000\uE54F\u0000\u0000\u0000"+
+            "\u0000\uEA78\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF37A"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF4C2\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE4AF\u0000"+
+            "\u0000\uE06B\u0000\u0000\u0000\u0000\u0000\uF967"+
+            "\u0000\u0000\uF1D8\uEBC7\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF568\uE643\uE9AD"+
+            "\u0000\u0000\u0000\uE5BE\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF3C3\uF26F\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE67B\u0000\u0000\u0000\uF569\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE6E6\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE847\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE9FB\u0000\u0000\u0000\u0000"+
+            "\u0000\uE9CF\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE733\u0000\u0000\uE869\u0000\uF368"+
+            "\uF2C4\u0000\u0000\u0000\u0000\u0000\u0000\uEBD8"+
+            "\u0000\u0000\u0000\u0000\u0000\uF3D4\u0000\uF1F2"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5DB\u0000"+
+            "\u0000\uE5DC\uF4C4\uE0D7\u0000\u0000\u0000\u0000"+
+            "\u0000\uEC46\u0000\u0000\u0000\u0000\uF2F1\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF8D5\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE4D8\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE9D0\uF369"+
+            "\uE0B3\u0000\u0000\u0000\u0000\u0000\u0000\uE5DD"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE1A7\u0000\u0000\uE33C\u0000";
+
+        private final static String innerIndex4=
+            "\uE3BA\u0000\uF3C4\u0000\uEDB3\uF8F5\uEFE1\uF9E0"+
+            "\uF94C\u0000\uE832\uE833\u0000\uE431\u0000\u0000"+
+            "\uE491\u0000\u0000\u0000\uEC7D\u0000\u0000\uEA79"+
+            "\uE26C\uF445\uE374\uE9D1\u0000\u0000\u0000\u0000"+
+            "\uEBC8\uE8B7\uEAE3\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF1B9\uF3C5\u0000\uF4CF\uE6AB"+
+            "\uEBAC\u0000\u0000\uECEB\u0000\uF257\u0000\u0000"+
+            "\u0000\uEBC9\uE09C\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF39D\uF871\uF36A\uE177\uE896\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE14F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE27D\u0000"+
+            "\u0000\uE5A9\uF872\u0000\u0000\u0000\uE375\u0000"+
+            "\uF0D6\u0000\uF16F\u0000\u0000\u0000\uEAFC\u0000"+
+            "\u0000\uF6D6\uEA7A\uE0B4\u0000\u0000\uF2BE\u0000"+
+            "\u0000\uE145\u0000\u0000\u0000\u0000\u0000\uE2BD"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF2F2\uEC47"+
+            "\u0000\u0000\u0000\uE178\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF39E\u0000\u0000\u0000"+
+            "\uE670\u0000\uF3C6\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEC48\uF0AB\u0000\u0000"+
+            "\u0000\uE0B5\uE761\u0000\uF55E\uF4F7\u0000\u0000"+
+            "\uE6C6\u0000\uE3BB\uF6AA\u0000\uF1CA\uE6D3\uE79C"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF655"+
+            "\u0000\u0000\uE3CC\uE9FC\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEAFD\u0000"+
+            "\uF7E5\u0000\uEB5A\u0000\u0000\uF49F\uE4B0\u0000"+
+            "\uF595\uE859\u0000\uEE6E\u0000\u0000\u0000\u0000"+
+            "\uF74A\uEF60\u0000\u0000\uE79D\u0000\u0000\uF065"+
+            "\u0000\u0000\u0000\u0000\uE633\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF656\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF46B\uED9E\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEF42\u0000\u0000"+
+            "\u0000\u0000\u0000\uE86A\u0000\uF46C\uF8D6\uEFB2"+
+            "\u0000\uF23D\u0000\uF873\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE97E\u0000\u0000\uF5EA\uEE70"+
+            "\u0000\uF39F\u0000\u0000\u0000\u0000\u0000\uE6AC"+
+            "\u0000\u0000\u0000\u0000\u0000\uF5C5\uF270\u0000"+
+            "\u0000\uE8E5\u0000\uE9DE\u0000\u0000\uE7F0\uEFA3"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF3F9\u0000\uF454\uEB5B\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEFA4\u0000"+
+            "\u0000\uEC49\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uECB1\uF97B\uE1A8\u0000\uE146\u0000\u0000"+
+            "\uF36B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEE4A\u0000\u0000\uE1A9\u0000\u0000\u0000"+
+            "\u0000\u0000\uF4C3\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEBD9\u0000\u0000\uF2AB"+
+            "\u0000\u0000\u0000\uEEC5\u0000\u0000\uEB79\u0000"+
+            "\uF4C5\u0000\u0000\uE550\uE5BF\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE9AE\u0000"+
+            "\uF7FC\u0000\uE150\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEDA2\u0000\u0000\u0000"+
+            "\uE248\u0000\u0000\u0000\uE762\uF7D6\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF3AA\uE261\u0000\u0000\uF657\u0000"+
+            "\uE8EB\u0000\uEAFE\u0000\u0000\uE771\u0000\uF6F3"+
+            "\u0000\uE6E7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE5A0\u0000\u0000"+
+            "\uE3BC\u0000\uEDCF\u0000\uE0B6\u0000\uE848\u0000"+
+            "\u0000\u0000\u0000\u0000\uE1C4\u0000\u0000\u0000"+
+            "\u0000\u0000\uE64E\u0000\u0000\u0000\uEC4A\u0000"+
+            "\u0000\u0000\u0000\u0000\uE2D8\u0000\u0000\u0000"+
+            "\uEB5C\uF0F9\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF9FD\u0000\u0000\u0000\u0000\u0000"+
+            "\uE6E8\uE0D8\u0000\u0000\u0000\uEFE2\u0000\u0000"+
+            "\u0000\uEF4A\u0000\u0000\u0000\uECC7\u0000\u0000"+
+            "\u0000\u0000\uF15D\u0000\uF15E\u0000\uE64F\u0000"+
+            "\u0000\u0000\uECA7\u0000\uEAD6\uF9E8\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF271"+
+            "\uF638\uE9FD\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF74B\u0000\uEF61\u0000\u0000\u0000\u0000"+
+            "\uF7D7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE27E\u0000\u0000\uF15F\u0000\u0000\u0000"+
+            "\uEFA5\uE665\u0000\uE1C5\u0000\uF1BA\uE3BD\u0000"+
+            "\u0000\uE2BE\u0000\u0000\uF14B\u0000\u0000\u0000"+
+            "\uE441\u0000\u0000\u0000\u0000\uE179\u0000\uE7C4"+
+            "\uEFFC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE3BE\u0000\u0000"+
+            "\u0000\u0000\u0000\uF14C\u0000\u0000\uEDAD\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF6B0\u0000\uE17A"+
+            "\u0000\u0000\u0000\uE4C4\u0000\u0000\uE650\u0000"+
+            "\u0000\u0000\uE69F\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEBA1\u0000"+
+            "\uEA4D\u0000\uF639\u0000\u0000\u0000\uE834\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE634"+
+            "\uF5C6\u0000\uEBA2\uEFC6\u0000\u0000\u0000\uF455"+
+            "\u0000\u0000\u0000\u0000\u0000\uF579\uE67C\uF0D3"+
+            "\u0000\u0000\u0000\u0000\uF14D\uEC6C\uEA7B\uF36C"+
+            "\u0000\uF0BF\u0000\uE6CE\uE3BF\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF5AB\u0000"+
+            "\u0000\u0000\u0000\uF7FD\u0000\uE06C\u0000\u0000"+
+            "\u0000\uE1C6\uF446\u0000\u0000\uE9FE\u0000\u0000"+
+            "\u0000\uE147\uE8B8\u0000\u0000\u0000\u0000\uE379"+
+            "\u0000\uE26D\uF0C0\u0000\uF9A2\u0000\u0000\u0000"+
+            "\u0000\u0000\uF75B\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF066\uF3B0\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE8CE\u0000\uF6C3\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE8CF\uE0A4\u0000\u0000\uF770\u0000"+
+            "\u0000\uF8D7\u0000\u0000\uF0CA\uEB31\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE25D\u0000\u0000\uE56C\u0000\u0000\u0000"+
+            "\uF9D8\u0000\u0000\u0000\u0000\uE498\u0000\u0000"+
+            "\u0000\u0000\uF447\u0000\u0000\uF898\uF63A\uF899"+
+            "\uE776\u0000\uF541\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEF62\u0000\uE055\uE17B\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEC7E\u0000\u0000\u0000\u0000"+
+            "\u0000\uEC4B\u0000\uF6AD\u0000\u0000\u0000\uF771"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF4EC\u0000\u0000\u0000\u0000\uEA31\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uED9F\u0000\u0000\uECEC\u0000"+
+            "\uE9AF\uE9B0\u0000\u0000\uE0B7\uEF63\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEBA3\uE470\u0000"+
+            "\u0000\u0000\u0000\uF3A0\u0000\u0000\u0000\u0000"+
+            "\uEFA6\uE0F2\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF1F3\uE969\uEB5D\u0000\u0000\u0000\u0000\uF6DA"+
+            "\uE8B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE13E\u0000\uE86B\u0000\u0000\u0000\u0000\uE1C7"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE9B1\u0000\uE73F\uECA3\u0000\u0000"+
+            "\uE291\u0000\u0000\uF495\u0000\u0000\u0000\u0000"+
+            "\uF743\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEB5E\u0000\uF5FD\u0000\u0000"+
+            "\u0000\u0000\uF0EC\u0000\u0000\uE4C5\uF97C\uE46B"+
+            "\uE57B\u0000\uEA32\u0000\u0000\u0000\uEDE6\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF340\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE5C4\u0000\u0000\u0000\u0000\u0000\u0000\uF1F4"+
+            "\u0000\u0000\u0000\uECED\u0000\uEF52\u0000\uF1F5"+
+            "\uE6FC\u0000\uF1BB\u0000\u0000\uF63B\u0000\u0000"+
+            "\u0000\u0000\u0000\uF448\uF658\u0000\u0000\u0000"+
+            "\u0000\u0000\uE4E6\uF46D\uE2BF\u0000\uF0AC\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE2C0\u0000\uEE38"+
+            "\uF9E9\u0000\uE2C1\u0000\uEB6F\uEA7C\u0000\u0000"+
+            "\u0000\u0000\uEB32\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF54F\uEC91\u0000\uE7F1\uF3C7"+
+            "\u0000\uE0B8\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF7FE\uE8BA\uE897\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF67C\uE86C\uF874"+
+            "\u0000\uEB5F\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE9B2\u0000\u0000\u0000\u0000\uEE39\u0000\uF2F3"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF4ED\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF0FA\u0000\uF7E6\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE06D\uE5DE"+
+            "\u0000\uE06E\uEAE4\u0000\u0000\u0000\uEE9F\u0000"+
+            "\uF5AC\u0000\u0000\u0000\u0000\u0000\uED97\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEFE3\u0000\uF1CB\uE2E4\u0000"+
+            "\u0000\u0000\uE763\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE9B3\uE57C\u0000\u0000\uF449\u0000\uEAB7"+
+            "\u0000\u0000\u0000\u0000\u0000\uE0CE\uF8D8\u0000"+
+            "\u0000\uE369\u0000\u0000\uE9D2\uF6F4\uEEDC\uED35"+
+            "\u0000\uF933\u0000\uE8BB\u0000\u0000\u0000\uF44A"+
+            "\uEFFD\uE35A\u0000\uF5D6\uE7C5\uED44\u0000\uF1A7"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF04D\uEEA0\u0000\uF6C4\uF5AD\u0000\uE7E0"+
+            "\u0000\u0000\u0000\uE044\u0000\u0000\uF772\uE2C2"+
+            "\u0000\uF14E\u0000\u0000\u0000\uEDB4\uE1C8\uF258"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEEC8\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE1C9\uF7B7\u0000"+
+            "\u0000\uF3E8\uE7F2\uE8F5\uE045\uE7C6\u0000\u0000"+
+            "\u0000\uE759\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7AB"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF1BC\u0000\u0000\uE764\u0000\u0000\u0000\uE96A"+
+            "\u0000\uEC4C\u0000\u0000\uF97D\uF170\uE4A0\u0000"+
+            "\uEFC7\uEE3A\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEC92\u0000\u0000\u0000\u0000\u0000\u0000\uF84B"+
+            "\u0000\uF5AE\uF8AA\u0000\u0000\u0000\u0000\uF19D"+
+            "\u0000\uF14F\uF968\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE575\u0000\u0000\u0000\uF7C3"+
+            "\u0000\u0000\u0000\uF272\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE6E9\uF1F6\u0000\u0000\u0000\uEA7D\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE17C\u0000"+
+            "\uECEE\u0000\u0000\u0000\u0000\u0000\uEF64\u0000"+
+            "\u0000\u0000\uF89A\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE9B4\uED45\uE740\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE765\u0000\u0000"+
+            "\u0000\uF57A\u0000\u0000\u0000\uE249\u0000\u0000"+
+            "\u0000\uE671\uE2D2\u0000\uE346\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE232\u0000\u0000\uF4EE\u0000"+
+            "\u0000\u0000\u0000\u0000\uF4F8\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE95C\u0000\uE35B\u0000\u0000\u0000\uF934"+
+            "\uE1CA\uE6D4\uEA33\u0000\uED70\u0000\u0000\u0000"+
+            "\u0000\uF259\u0000\u0000\u0000\uEC6D\u0000\u0000"+
+            "\u0000\u0000\u0000\uF5FE\uE53C\u0000\u0000\u0000"+
+            "\u0000\u0000\uE5D1\u0000\uE792\uF753\uF067\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF5D7\u0000\u0000\uE74F\u0000\u0000\u0000"+
+            "\u0000\uF9C0\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF0AD\u0000\u0000\u0000\u0000\uE5AA\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEEA8\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF25A"+
+            "\u0000\u0000\u0000\uE077\u0000\u0000\u0000\u0000"+
+            "\u0000\uF773\u0000\uE56D\u0000\u0000\uF068\u0000"+
+            "\u0000\u0000\u0000\uF8D9\uF1F7\u0000\u0000\uEDB5"+
+            "\u0000\u0000\u0000\u0000\u0000\uE33D\u0000\u0000"+
+            "\u0000\u0000\uF3F1\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEC4D\u0000\u0000\u0000\uECC8\u0000\u0000\u0000"+
+            "\u0000\uE7D5\u0000\u0000\uEAAA\u0000\u0000\u0000"+
+            "\u0000\uE8BC\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF774\u0000\u0000\u0000\u0000\u0000"+
+            "\uF3FA\u0000\u0000\uEDB6\uF4EF\u0000\u0000\uF8DA"+
+            "\uEBE0\u0000\uE7AC\u0000\uF5EB\u0000\uEB46\u0000"+
+            "\u0000\uEFC8\u0000\uE0CF\u0000\uECC9\u0000\u0000"+
+            "\u0000\uEA7E\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEC4E\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE991\u0000\uE635\u0000"+
+            "\u0000\u0000\u0000\u0000\uEC93\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE6A0\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE7A1\u0000\uE750\uE96B\u0000\u0000\uF1BD"+
+            "\uEAB8\u0000\uF035\u0000\u0000\u0000\uE6AD\u0000"+
+            "\u0000\uF4F9\u0000\uF1F8\u0000\uF5C7\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEBCA\uF0E3\u0000\uF46E"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF75C\u0000\uF069"+
+            "\u0000\uE4C6\u0000\uE8E6\u0000\u0000\u0000\u0000"+
+            "\u0000\uF5AF\u0000\u0000\u0000\u0000\uE292\u0000"+
+            "\u0000\u0000\u0000\uEFFE\u0000\u0000\u0000\u0000"+
+            "\u0000\uF8B6\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEC94\u0000\u0000\u0000\u0000"+
+            "\uE2F2\uF6B9\uE7F3\u0000\u0000\uEBCB\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE86D\u0000\u0000\uE849"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0FB"+
+            "\u0000\uE0B9\u0000\u0000\uF1F9\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEB70\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF550\u0000"+
+            "\uF9BC\uEAB1\uECEF\u0000\u0000\u0000\u0000\uEB33"+
+            "\uF9B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF341\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE1CB\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF1BE\u0000\u0000\u0000\uE5C0\uECF0\uF1FA"+
+            "\u0000\u0000\u0000\u0000\u0000\uEFE4\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE5ED\uEEDD\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE598\uEDB7\u0000\u0000"+
+            "\u0000\uE8E7\uEC4F\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF25B"+
+            "\u0000\u0000\uE6F4\uF36D\u0000\u0000\u0000\uE23B"+
+            "\u0000\u0000\uEEDE\u0000\u0000\u0000\uE666\uEBCC"+
+            "\u0000\u0000\uEF43\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEDEE\uE932"+
+            "\u0000\u0000\uEB60\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE5B5\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5A1"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF8DB\u0000"+
+            "\uF7CB\u0000\u0000\u0000\uE0F3\uF535\u0000\u0000"+
+            "\u0000\u0000\u0000\uF858\uE667\u0000\uEFE5\uF8DC"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9D0"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF8F6\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE835\u0000\uE8BD\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF172\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE1F7\uF36E\u0000\u0000\u0000"+
+            "\u0000\uF659\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEA91"+
+            "\u0000\u0000\u0000\uE4B1\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF97E\u0000\u0000\u0000"+
+            "\u0000\uEF53\u0000\uF3C8\u0000\u0000\u0000\uE293"+
+            "\u0000\u0000\u0000\u0000\uF7ED\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF496\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uED46\u0000"+
+            "\uF5B9\u0000\uE992\uECF1\u0000\u0000\u0000\u0000"+
+            "\uEF35\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF44B\u0000\uEA34\u0000\uE85C\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE079\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uECDA\u0000\uF969"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF06A"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF7C4\u0000"+
+            "\uECA4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF8DD\u0000\uF2CA\u0000"+
+            "\uEF54\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE5CC\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF0D7\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7AD"+
+            "\u0000\u0000\uF8AB\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE4D9\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE5A2\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF66E\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE898\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEB61\u0000\u0000\uEFA8"+
+            "\u0000\u0000\uF5F9\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF83F\u0000\uF0FC\u0000\u0000\uEB7A\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uECB2\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5C5"+
+            "\u0000\u0000\uF3E3\uE5EE\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE1CC\u0000\u0000\u0000\u0000\uF1D9\u0000"+
+            "\u0000\u0000\u0000\uE751\u0000\u0000\u0000\u0000"+
+            "\uF87C\u0000\u0000\u0000\u0000\u0000\uF3EB\u0000"+
+            "\u0000\u0000\u0000\u0000\uF84C\uEE72\u0000\u0000"+
+            "\u0000\u0000\uF875\uEC9C\u0000\u0000\u0000\uE046"+
+            "\u0000\uED47\u0000\uF06B\u0000\uF5FA\u0000\u0000"+
+            "\u0000\uF8AC\uE2C3\uF0FD\u0000\u0000\u0000\u0000"+
+            "\uF79C\u0000\u0000\uEAB9\u0000\u0000\u0000\u0000"+
+            "\uEBF1\u0000\uE434\u0000\u0000\u0000\u0000\uF5FB"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE36A\uE36B"+
+            "\u0000\uF04E\uE7B1\u0000\u0000\u0000\u0000\u0000"+
+            "\uE047\u0000\u0000\uE4E7\u0000\uF775\u0000\u0000"+
+            "\u0000\u0000\uE4B2\u0000\u0000\u0000\uEC50\uF46F"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE1E5\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF7AC\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE1CD\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF23E\uE63E\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6EA"+
+            "\u0000\u0000\u0000\u0000\uEEE0\uF0AE\u0000\u0000"+
+            "\u0000\uE2D9\u0000\u0000\uE95D\uF1FB\u0000\uEA92"+
+            "\u0000\uE6EB\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEA35\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEAD7\uE8D0\uE8D1\u0000\u0000"+
+            "\uE5A3\u0000\u0000\u0000\u0000\uF342\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE96C"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE078\u0000\uF776\uE95E\u0000\u0000\u0000\u0000"+
+            "\uF06C\uE8D2\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEFB3\u0000\u0000"+
+            "\u0000\u0000\uF6DB\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uECA8\u0000"+
+            "\uE6AE\u0000\u0000\uEB71\u0000\u0000\u0000\u0000"+
+            "\u0000\uE0BA\u0000\u0000\uEDD1\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE36C"+
+            "\u0000\u0000\u0000\u0000\uE5C1\u0000\u0000\u0000"+
+            "\u0000\u0000\uE75A\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uECA9\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEB34"+
+            "\u0000\uEFA9\u0000\uE4C7\u0000\u0000\uE96D\uF73E"+
+            "\u0000\u0000\u0000\uE148\u0000\u0000\u0000\uE33E"+
+            "\u0000\u0000\u0000\uE794\u0000\u0000\uECCA\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE13F\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE53D\uF661\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE35C\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE056\u0000\u0000\uE5C2\u0000\u0000"+
+            "\uE24A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE057\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF840\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEAD8\u0000\u0000\u0000"+
+            "\uF5BA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEDEB\u0000\uF2F4\uE9B5\u0000\u0000\u0000\u0000"+
+            "\uE1AA\u0000\uECF2\u0000\uF8F7\u0000\uF6D0\u0000"+
+            "\u0000\u0000\u0000\uF9BA\u0000\u0000\uF9E1\uF6A0"+
+            "\uE3C0\u0000\u0000\uEF55\u0000\uED48\u0000\uEBE8"+
+            "\u0000\u0000\u0000\uE151\u0000\uE47D\u0000\u0000"+
+            "\u0000\u0000\uE8BE\u0000\u0000\uEB72\u0000\u0000"+
+            "\u0000\uF859\u0000\u0000\uEBCD\u0000\uE048\u0000"+
+            "\u0000\u0000\uF470\uF3C9\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEA93\u0000\u0000\u0000\uF36F\uF754\u0000\u0000"+
+            "\u0000\u0000\u0000\uF25C\u0000\u0000\uEA94\u0000"+
+            "\uEEC9\u0000\uEC95\uEEE1\u0000\u0000\uECCB\u0000"+
+            "\u0000\uECCC\u0000\u0000\u0000\uE2F8\uF2AC\u0000"+
+            "\uF9FE\uF935\uF841\uEAD9\u0000\uEB62\u0000\u0000"+
+            "\u0000\uF56A\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF3CA\u0000\uE233"+
+            "\u0000\u0000\u0000\u0000\uF44C\uF173\u0000\u0000"+
+            "\u0000\u0000\u0000\uEB35\u0000\uF6AB\u0000\u0000"+
+            "\uF0AF\u0000\u0000\u0000\u0000\u0000\uEDDE\u0000"+
+            "\uEBA4\uE1AB\u0000\uE7F4\uEF36\uE1CE\uEBE9\u0000"+
+            "\uF991\u0000\uEB73\u0000\u0000\u0000\u0000\u0000"+
+            "\uEC51\u0000\uE234\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEA36\u0000\u0000\uF0FE\u0000\uF0DD\uF370"+
+            "\u0000\u0000\uF56B\u0000\uEC96\u0000\u0000\uE4C8"+
+            "\u0000\u0000\u0000\uF57B\u0000\uF245\u0000\uF5D8"+
+            "\u0000\u0000\uE5DF\u0000\u0000\u0000\uE675\u0000"+
+            "\u0000\u0000\u0000\uF0B0\uF573\u0000\u0000\u0000"+
+            "\u0000\uECCD\u0000\u0000\u0000\u0000\uF596\uF842"+
+            "\u0000\u0000\uF2F5\uE06F\u0000\uF0B1\uF1BF\u0000"+
+            "\u0000\uF9C9\u0000\u0000\u0000\u0000\uED36\uF7A4"+
+            "\uF343\u0000\uEDEC\u0000\u0000\u0000\uE3E7\u0000"+
+            "\uE7C7\uED67\uF06D\u0000\uE599\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE84A\u0000"+
+            "\uE85D\u0000\u0000\u0000\uF7CC\u0000\uEBDA\uE8BF"+
+            "\u0000\uE155\uF160\uE0BB\u0000\uEA95\u0000\u0000"+
+            "\uEFAA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE7C8\u0000\u0000\uF273\uE6BD\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE2C4\u0000\u0000\u0000\u0000"+
+            "\u0000\uE35D\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF936\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF3FB\u0000\u0000\u0000\u0000\uF9D2\uE3C1"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uECDB\u0000\uE4C9\u0000\uE95F\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE17D\u0000"+
+            "\u0000\u0000\u0000\u0000\uEA37\u0000\u0000\uEE4B"+
+            "\uF131\u0000\u0000\u0000\uE149\u0000\u0000\uF8DE"+
+            "\u0000\u0000\u0000\u0000\u0000\uEEE2\u0000\u0000"+
+            "\uE551\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE938\u0000\u0000\u0000\u0000\u0000"+
+            "\uEC52\u0000\uF4D8\uEDD3\u0000\u0000\uF4D9\u0000"+
+            "\u0000\u0000\uF4C6\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1DB"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1AC"+
+            "\u0000\uF953\u0000\u0000\u0000\u0000\uE577\u0000"+
+            "\uE3C2\u0000\uF7A5\u0000\uEF65\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uECCE\u0000\u0000"+
+            "\u0000\u0000\uE55A\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEADA\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF8DF\uEEE3\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF79D\uECCF\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF5B0\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE777\u0000\uE7C9\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF73F\uF2F6\u0000"+
+            "\uE9B6\uF23F\uE1F8\u0000\u0000\u0000\u0000\uEA48"+
+            "\uF937\uF6FC\uF6B1\uE24B\uF531\u0000\u0000\uF25D"+
+            "\uEBAE\u0000\u0000\uF153\uE2FE\u0000\uF74F\uE772"+
+            "\uE4E8\u0000\u0000\uEA38\uF574\uF152\u0000\uE7F5"+
+            "\uF7C5\uE9D3\uE693\uF19E\uF992\u0000\u0000\uF1C0"+
+            "\uE049\u0000\uF274\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF471\u0000\uEA49\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE694\u0000\uEA96\u0000\uEADB\u0000"+
+            "\uE8D3\u0000\uF877\uE773\uF551\u0000\uE9B7\u0000"+
+            "\u0000\u0000\uF497\u0000\u0000\uE53E\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE695\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE9B8\uE2C5\uEADF\u0000\u0000";
+
+        private final static String innerIndex5=
+            "\u0000\u0000\u0000\u0000\uF44E\uF631\u0000\uF0CB"+
+            "\uF3FC\u0000\uF4C7\u0000\u0000\uEB7B\u0000\u0000"+
+            "\u0000\u0000\u0000\uF1FC\u0000\u0000\uEBDB\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF275\u0000\uEA97\u0000"+
+            "\u0000\u0000\u0000\uF863\u0000\u0000\u0000\u0000"+
+            "\uF3CB\u0000\u0000\uE33F\uE9B9\u0000\u0000\uE3C3"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF5B1\u0000\u0000"+
+            "\u0000\u0000\uF056\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF371\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF63C\u0000\u0000\u0000\u0000"+
+            "\uF5D9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF37B\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE9BA\u0000\u0000\u0000\uF44F\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF6C5\u0000"+
+            "\u0000\u0000\u0000\uE8A2\uF498\u0000\u0000\uE04A"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF6F5\u0000\uE0E5\u0000\u0000"+
+            "\u0000\uF276\u0000\uEB63\u0000\u0000\u0000\u0000"+
+            "\uE235\u0000\u0000\u0000\u0000\u0000\u0000\uE668"+
+            "\u0000\u0000\u0000\uE53F\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEFC9\u0000\u0000\u0000\u0000\uE4CE"+
+            "\uF552\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE0E6\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF3A1\u0000\u0000\u0000\u0000\u0000"+
+            "\uF0B2\u0000\u0000\u0000\u0000\uF3A2\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF0B3\u0000\uF344\u0000\u0000\uE0F4"+
+            "\uE540\uF4B2\uF8B7\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF5EC\u0000\u0000\u0000\u0000\u0000\uF277"+
+            "\uF542\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF5ED\u0000\uE2F3\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF372\u0000\u0000\u0000\u0000\u0000\uF25E"+
+            "\u0000\u0000\uF3CC\u0000\u0000\uEDB8\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE6F5\uECF3\uE2E5\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE2C6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF4B3\uED68\uE2F9\uE2DA\u0000\u0000"+
+            "\u0000\u0000\uF85D\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE73"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF472\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF5EE\u0000\u0000\uE04B\u0000\u0000\uECDC\u0000"+
+            "\u0000\u0000\u0000\uE294\u0000\uE669\u0000\u0000"+
+            "\u0000\uF240\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF575\uE752\uE960\uE17E\u0000\u0000"+
+            "\u0000\u0000\u0000\uE5E0\uF65A\uF9CA\uE766\uF55F"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE636\uE94E"+
+            "\u0000\uE8D4\uE6C7\u0000\u0000\u0000\u0000\uF4A0"+
+            "\u0000\u0000\u0000\uF3CD\u0000\u0000\u0000\u0000"+
+            "\uEC53\uE96E\u0000\uE96F\u0000\u0000\uF2AD\uEE3B"+
+            "\u0000\u0000\u0000\u0000\uF7DD\uF04F\u0000\u0000"+
+            "\u0000\uF2AE\u0000\u0000\u0000\uF560\uE295\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEE3C\u0000\uE26E"+
+            "\u0000\u0000\uE5F9\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uECF4\uE1D0\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE5B8\u0000\u0000\uF6FD\u0000"+
+            "\uE939\u0000\u0000\u0000\u0000\uEA98\u0000\uE93A"+
+            "\uF473\uEFB4\uE46C\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEFE6\u0000\u0000\uECF6\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEECA\u0000"+
+            "\u0000\uE35E\u0000\u0000\uE899\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE04C\u0000"+
+            "\u0000\u0000\uF278\uE86E\u0000\uF499\u0000\u0000"+
+            "\uEC9D\u0000\uE136\u0000\u0000\u0000\u0000\uE84B"+
+            "\u0000\uF279\u0000\u0000\u0000\uF5DA\u0000\u0000"+
+            "\uF6DC\uEBEA\uE251\uE541\u0000\uF9B1\uEE4D\u0000"+
+            "\uF8AD\u0000\u0000\uF777\u0000\uEBCE\u0000\uF6E2"+
+            "\uF5EF\uE2C7\u0000\u0000\uE542\uE191\u0000\uE578"+
+            "\u0000\uF25F\uF6D7\u0000\u0000\uEB36\uE651\uEBDC"+
+            "\uF373\uF3E4\uE993\uE637\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF597\u0000"+
+            "\u0000\uF3CE\uF474\u0000\u0000\uE340\u0000\u0000"+
+            "\uF191\u0000\u0000\u0000\uF7BA\u0000\uF0B5\u0000"+
+            "\u0000\uE57D\uEC54\u0000\u0000\u0000\u0000\uEFE7"+
+            "\u0000\u0000\uF0B4\uF031\u0000\uF74C\uE236\u0000"+
+            "\uF7C6\uF96A\u0000\uE543\uE4B9\uF06E\u0000\u0000"+
+            "\u0000\uEFAB\u0000\u0000\uEBE1\uE4CF\uF598\u0000"+
+            "\uF050\uEBCF\u0000\uE14A\u0000\u0000\u0000\u0000"+
+            "\u0000\uF27A\u0000\u0000\u0000\uF374\uF4B4\uE57E"+
+            "\u0000\u0000\uF450\u0000\u0000\uF3E5\u0000\uF553"+
+            "\uEB64\u0000\uF0B6\u0000\uE6A1\uE0E8\u0000\uF7AD"+
+            "\uEFAD\uE774\uF843\uEC55\uF94D\u0000\u0000\uF154"+
+            "\uE741\u0000\uE93B\u0000\u0000\u0000\u0000\uE5A4"+
+            "\u0000\uF0E9\u0000\u0000\u0000\uEF4B\u0000\u0000"+
+            "\u0000\uE767\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF8AE\uE3E1\u0000\u0000\uE8C0\u0000"+
+            "\uF5BE\u0000\uEA99\u0000\u0000\u0000\u0000\uE09D"+
+            "\uF6C6\uE2C8\u0000\u0000\u0000\uEBD0\u0000\u0000"+
+            "\uF260\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEFF4\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE296\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5CD\u0000"+
+            "\u0000\uE2DB\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE9BB\u0000\u0000\u0000\u0000\uE23C\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEFE8\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE544\u0000\u0000"+
+            "\u0000\u0000\uED57\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF5DB\u0000\u0000\uF851\u0000\u0000"+
+            "\u0000\uEA39\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE59A"+
+            "\u0000\u0000\u0000\u0000\u0000\uF2F7\u0000\u0000"+
+            "\u0000\u0000\uE4B3\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF0B7\uF2F8\uF5DC\uF1CC\uE8D5\uF3CF\u0000"+
+            "\u0000\u0000\uF3D0\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF5B2\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE7AE\uE5AC\u0000\uEC56\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF9A3\u0000\uF8E5"+
+            "\uEAAB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC97"+
+            "\u0000\uF63D\u0000\uF5B3\u0000\uF345\u0000\u0000"+
+            "\u0000\u0000\uEBA5\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF5DD\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF132\uF1FD\u0000\uF5B4\uF8B8"+
+            "\u0000\uE8A3\u0000\u0000\uE65A\uE0D9\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEDD4\u0000\u0000\u0000\u0000\u0000\u0000\uF4FA"+
+            "\u0000\uF0B8\u0000\uEB47\uE6EC\uF3EC\uEDAF\uE5E1"+
+            "\uE6ED\uE3D1\u0000\u0000\u0000\u0000\u0000\uEBF2"+
+            "\uF2F9\u0000\u0000\u0000\uE9BC\uF66C\u0000\u0000"+
+            "\u0000\u0000\u0000\uF375\u0000\u0000\u0000\uF554"+
+            "\u0000\u0000\uEFE9\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF4FB\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE591\u0000\u0000"+
+            "\uE132\uF6FE\uEABC\u0000\u0000\u0000\u0000\uF0CD"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE347\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE652\u0000\u0000\u0000"+
+            "\u0000\u0000\uEF3D\u0000\u0000\u0000\u0000\uF2AF"+
+            "\uE0A5\u0000\u0000\u0000\u0000\uE0E9\u0000\u0000"+
+            "\u0000\uF878\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE156"+
+            "\u0000\u0000\u0000\uEE77\u0000\u0000\uF057\u0000"+
+            "\u0000\u0000\uE8A4\u0000\uE2C9\uEC9E\uF2FA\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF0DE\u0000\u0000\uF5C8\u0000\uE56E\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEB65\u0000\uF2B0\u0000\u0000\uEC57\u0000"+
+            "\uE7AF\u0000\u0000\u0000\uF7E7\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEEE5\u0000\u0000\uE2CA\uEBD1"+
+            "\u0000\uEC58\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF2FB\u0000\u0000\uF89B"+
+            "\u0000\u0000\uE994\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEB37\u0000\u0000\u0000"+
+            "\u0000\u0000\uF778\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE0EA\u0000\u0000\u0000\uE0BC\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE672\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF5DE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF5DF\u0000\uF246\u0000\u0000\u0000\uEC98\uE4CA"+
+            "\uF2FC\uE3C4\uF2B1\u0000\uE3C5\u0000\uE36E\u0000"+
+            "\uE7E1\u0000\u0000\uEB48\u0000\u0000\uE1D1\uF4B9"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEECC\u0000\uE638\uE237\u0000\uE545\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uED58\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE4B4\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF0B9\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE0F5\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF66D\u0000\uF3A3\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE157\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEFCA\u0000\uEBF0\u0000"+
+            "\u0000\u0000\uF5E0\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF8AF\u0000\u0000\u0000\uE0D1"+
+            "\u0000\u0000\u0000\u0000\uF8E0\uF475\u0000\u0000"+
+            "\uF192\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF37C\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF27B\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEFCB\u0000"+
+            "\u0000\uE192\u0000\u0000\uE6AF\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF4A1\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF997\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF3A4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEB66\u0000\u0000"+
+            "\u0000\u0000\u0000\uF2B2\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF561\u0000\u0000"+
+            "\uF6A1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF3D1\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE09E\uE09F\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE25E\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF4C8\u0000\uF4BA"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1FE"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE836\u0000\u0000\uEB7C\u0000\u0000\u0000\u0000"+
+            "\u0000\uF75D\u0000\uE0D2\u0000\u0000\u0000\uF0CE"+
+            "\u0000\uF7D8\uF7D9\uE070\uE85A\u0000\u0000\u0000"+
+            "\uE0A6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE058\uF7EE\uE8EC\u0000\u0000"+
+            "\uE341\u0000\u0000\u0000\u0000\uE5EF\u0000\u0000"+
+            "\u0000\uEE95\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEEA2\uED69\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED71"+
+            "\u0000\u0000\uF954\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF7EF\uE2F4\uF6E6\u0000"+
+            "\u0000\u0000\u0000\u0000\uE24C\u0000\u0000\u0000"+
+            "\u0000\uF555\uE933\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE9BD\u0000\u0000\u0000"+
+            "\u0000\uF556\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF731\u0000\u0000\u0000\uEF66\u0000"+
+            "\u0000\u0000\uE8C1\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF376\u0000\u0000\u0000\uED49"+
+            "\uF67D\u0000\uF7AE\u0000\uE9BE\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE6B0\uE778\uE0BD\u0000\u0000"+
+            "\uF7DA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF75E\uF7F0\uEB7D\uECB3\uF543"+
+            "\u0000\u0000\uF052\uF476\uF346\u0000\u0000\u0000"+
+            "\u0000\u0000\uE8D6\u0000\u0000\u0000\u0000\u0000"+
+            "\uF0E4\u0000\u0000\uF477\u0000\uE6D5\uE546\uF7E8"+
+            "\uE6C1\u0000\u0000\u0000\u0000\uEDD5\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEFEA\uE6CC\u0000"+
+            "\u0000\u0000\uE4E9\uEC59\u0000\uF96B\uE1AD\u0000"+
+            "\u0000\u0000\u0000\u0000\uE140\uF032\u0000\u0000"+
+            "\uED98\uE350\u0000\uF347\uF231\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE6F6\u0000\u0000\u0000\uEC5A"+
+            "\uEC5B\u0000\uF85F\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF0DF\u0000\u0000\u0000\u0000\u0000\uE65B"+
+            "\u0000\u0000\u0000\uF544\u0000\u0000\u0000\u0000"+
+            "\uF1CD\uED62\u0000\u0000\uF039\uED4A\uF4A2\uE1D2"+
+            "\u0000\uF65B\u0000\uF3E6\uF1C1\uEF4C\uF261\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF377\uEC5C\u0000"+
+            "\u0000\uED3A\u0000\uF5E1\uF1DA\u0000\u0000\u0000"+
+            "\u0000\u0000\uE6EE\uE3F1\u0000\u0000\u0000\u0000"+
+            "\uEFEB\uEFEC\uEB74\u0000\u0000\u0000\u0000\uE837"+
+            "\uE9D4\u0000\uF033\u0000\u0000\u0000\uE653\uE696"+
+            "\u0000\uE86F\u0000\uF2B3\u0000\u0000\u0000\u0000"+
+            "\uEC5D\u0000\u0000\u0000\u0000\u0000\uF2FD\uF478"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF2C5\u0000\uEEE7\u0000\u0000\uE6FD\u0000"+
+            "\u0000\uEECE\u0000\u0000\uEADC\u0000\uF7C7\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7F6"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEAAC\u0000\uE66A\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE934\u0000\u0000\u0000\uF348\u0000\u0000"+
+            "\u0000\u0000\uE5FA\u0000\uED99\u0000\u0000\u0000"+
+            "\uE654\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF57C\u0000\u0000\u0000\u0000\uF2FE\u0000"+
+            "\u0000\u0000\u0000\u0000\uF331\u0000\uEA3A\u0000"+
+            "\u0000\uE84C\uE79E\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF864\u0000\u0000\u0000\uF175\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF938\u0000\u0000\uF176"+
+            "\u0000\u0000\uE75B\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF8B9\u0000\uED63\u0000\uE1F9"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE2D3\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE07A\u0000\u0000\uE2D4\u0000\uF74D\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF557\u0000"+
+            "\u0000\u0000\u0000\uF06F\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF7DB\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE547\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF0E5\u0000\u0000\uEBD2\u0000"+
+            "\u0000\u0000\u0000\uF034\u0000\u0000\u0000\uF852"+
+            "\uF8E1\uF87D\uF332\uE193\u0000\uF833\uEC99\u0000"+
+            "\uEC5E\u0000\uEFF5\u0000\uEBEB\u0000\u0000\u0000"+
+            "\uEEE8\uEF67\uE89A\uE55B\u0000\u0000\u0000\uF6F6"+
+            "\uE655\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE579\u0000\u0000"+
+            "\uF89C\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE194\uF6DD\u0000\uEA4A\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE238\u0000"+
+            "\u0000\u0000\u0000\u0000\uF349\uEDA0\uED59\u0000"+
+            "\u0000\u0000\u0000\u0000\uED64\u0000\u0000\u0000"+
+            "\uF053\u0000\uF2B4\u0000\u0000\u0000\uE6BE\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF8E2\u0000\uE1D3"+
+            "\u0000\u0000\u0000\uF2B5\u0000\u0000\u0000\uF879"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF7A6\u0000\u0000\u0000\u0000\u0000\u0000\uEABD"+
+            "\u0000\uF6C7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF79F\u0000\u0000\uF79E"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEA3B\uE8E8\u0000\u0000\uECDD"+
+            "\u0000\uEBE2\uE3C6\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF660\uF0E6\uE89B"+
+            "\u0000\u0000\u0000\u0000\uF157\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEA9A\uF779\uECDE\u0000"+
+            "\u0000\u0000\u0000\uE297\u0000\u0000\u0000\u0000"+
+            "\u0000\uF853\uEDD7\u0000\uF158\u0000\u0000\u0000"+
+            "\uF4C9\u0000\u0000\uED4B\u0000\u0000\u0000\u0000"+
+            "\uEE3E\u0000\u0000\u0000\u0000\u0000\uF2B6\u0000"+
+            "\uE94F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE24D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE753\u0000\u0000"+
+            "\u0000\uE35F\u0000\uE2FA\uF4CA\uEB67\u0000\u0000"+
+            "\u0000\uE3C7\uEFAE\u0000\uEF4D\u0000\u0000\uF854"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEC5F\u0000"+
+            "\u0000\uF855\u0000\u0000\u0000\uF7B8\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE970\u0000\u0000"+
+            "\uF8B0\u0000\u0000\u0000\uE739\uEDDF\uF7A7\u0000"+
+            "\u0000\uF67E\u0000\uF65C\uEC9A\u0000\u0000\u0000"+
+            "\u0000\uF193\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE870\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF3D2\uE45C\uE2CB\u0000\u0000\uE04D\u0000\u0000"+
+            "\u0000\uE9BF\u0000\u0000\u0000\uF691\u0000\uEA9B"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF844\u0000\u0000"+
+            "\u0000\uE5AD\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3E7"+
+            "\u0000\uEA4E\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE950\u0000\u0000\u0000\u0000\u0000\uE3C8\uE3C9"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF74E\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE0F6\u0000\u0000\u0000\u0000"+
+            "\uE59B\u0000\u0000\u0000\u0000\u0000\uF5E2\uEBD3"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE779\u0000\u0000\uF7A0\u0000\uE2CC\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF9A4\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE298\u0000\uF860"+
+            "\u0000\u0000\uE195\uEE4E\u0000\u0000\u0000\uF63E"+
+            "\u0000\u0000\uE5F0\u0000\u0000\uE3CA\u0000\u0000"+
+            "\u0000\uF94E\uE5F1\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE1E9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF845\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEC60\uF599\u0000\u0000\u0000"+
+            "\uE1D4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEEA3\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE8A5\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEC61\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6A2"+
+            "\u0000\u0000\uF6E3\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF036\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE331\u0000\u0000\u0000"+
+            "\u0000\uE26A\uF8EB\uE8A6\uE8DE\uE775\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF070"+
+            "\u0000\u0000\u0000\u0000\uE73A\u0000\u0000\u0000"+
+            "\u0000\u0000\uEDE0\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE66B"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF2C6\u0000"+
+            "\u0000\uF77A\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED65"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE299\u0000\u0000\uEB68\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE6EF\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF57D\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE1E6\u0000\u0000\u0000"+
+            "\uE196\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF5E3\u0000\u0000"+
+            "\uED5A\u0000\uE971\u0000\u0000\uF7C8\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF94F\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEF37\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE754\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0BE"+
+            "\u0000\uE93E\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6F7"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF378\u0000\uE9C0"+
+            "\u0000\uE2CD\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE995\uE7B0\u0000\uEE79\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+        private final static String innerIndex6=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uED4C\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF054\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uED7C\u0000"+
+            "\uED75\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF8F8\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE14B\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uED4D\u0000\u0000"+
+            "\uE1DC\uE7F7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE9DF\u0000\u0000\u0000"+
+            "\u0000\u0000\uF1CE\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE7D0\u0000\u0000\u0000\u0000\u0000\uEDA3"+
+            "\u0000\u0000\u0000\u0000\uF7CD\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE1AE\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2CE"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF63F\u0000\u0000\u0000\u0000\u0000"+
+            "\uF9D3\uF0ED\uE66C\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEDA4\u0000\u0000\u0000\uE5B6\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE66D\u0000\u0000"+
+            "\u0000\uF7E9\u0000\u0000\u0000\uEEA4\u0000\uE673"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE3CB\uE674\u0000\u0000\u0000\uE5F2"+
+            "\u0000\u0000\u0000\u0000\u0000\uEA9C\u0000\uE6F8"+
+            "\u0000\u0000\u0000\u0000\u0000\uE77A\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE2D5\uE79F\u0000\u0000"+
+            "\u0000\u0000\u0000\uE73B\u0000\u0000\uF9CB\u0000"+
+            "\u0000\u0000\u0000\uF96C\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEB38\uE5F3\u0000"+
+            "\u0000\uF9D9\u0000\u0000\uE133\u0000\u0000\u0000"+
+            "\uE7F9\u0000\u0000\uE4EA\uF5F5\u0000\uF2C7\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE4DA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE84D\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEF38"+
+            "\uE93F\u0000\u0000\u0000\u0000\u0000\uF333\u0000"+
+            "\u0000\u0000\u0000\uE1D5\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEB39\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEA3C\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF34A\uF241\u0000\u0000\uF242\u0000"+
+            "\u0000\u0000\uF65D\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF262"+
+            "\u0000\uE656\u0000\u0000\u0000\u0000\u0000\uEB75"+
+            "\u0000\u0000\uF4BB\u0000\uEDE1\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED5B"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE6A3\u0000\u0000"+
+            "\uE8C2\u0000\u0000\u0000\u0000\uE0A0\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE2CF\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u8861\u8862\u8863\u8864\u8865\u8866\u8867\u8868"+
+            "\u8869\u886A\u886B\u886C\u886D\u886E\u886F\u8870"+
+            "\u8871\u8873\u8874\u8875\u8876\u8877\u8878\u8879"+
+            "\u887A\u887B\u887C\u887D\u8881\u8882\u8883\u8884"+
+            "\u8885\u8886\u8887\u8888\u8889\u888A\u888B\u888C"+
+            "\u888D\u888E\u888F\u8890\u8891\u8893\u8894\u8895"+
+            "\u8896\u8897\u8898\u8899\u889A\u889B\u889C\u889D"+
+            "\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6\u88A7\u88A8"+
+            "\u88A9\u88AA\u88AB\u88AC\u88AD\u88AE\u88AF\u88B0"+
+            "\u88B1\u88B3\u88B4\u88B5\u88B6\u88B7\u88B8\u88B9"+
+            "\u88BA\u88BB\u88BC\u88BD\u88C1\u88C2\u88C3\u88C4"+
+            "\u88C5\u88C6\u88C7\u88C8\u88C9\u88CA\u88CB\u88CC"+
+            "\u88CD\u88CE\u88CF\u88D0\u88D1\u88D3\u88D4\u88D5"+
+            "\u88D6\u88D7\u88D8\u88D9\u88DA\u88DB\u88DC\u88DD"+
+            "\u88E1\u88E2\u88E3\u88E4\u88E5\u88E6\u88E7\u88E8"+
+            "\u88E9\u88EA\u88EB\u88EC\u88ED\u88EE\u88EF\u88F0"+
+            "\u88F1\u88F3\u88F4\u88F5\u88F6\u88F7\u88F8\u88F9"+
+            "\u88FA\u88FB\u88FC\u88FD\u8941\u8942\u8943\u8944"+
+            "\u8945\u8946\u8947\u8948\u8949\u894A\u894B\u894C"+
+            "\u894D\u894E\u894F\u8950\u8951\u8953\u8954\u8955"+
+            "\u8956\u8957\u8958\u8959\u895A\u895B\u895C\u895D"+
+            "\u8961\u8962\u8963\u8964\u8965\u8966\u8967\u8968"+
+            "\u8969\u896A\u896B\u896C\u896D\u896E\u896F\u8970"+
+            "\u8971\u8973\u8974\u8975\u8976\u8977\u8978\u8979"+
+            "\u897A\u897B\u897C\u897D\u8981\u8982\u8983\u8984"+
+            "\u8985\u8986\u8987\u8988\u8989\u898A\u898B\u898C"+
+            "\u898D\u898E\u898F\u8990\u8991\u8993\u8994\u8995"+
+            "\u8996\u8997\u8998\u8999\u899A\u899B\u899C\u899D"+
+            "\u89A1\u89A2\u89A3\u89A4\u89A5\u89A6\u89A7\u89A8"+
+            "\u89A9\u89AA\u89AB\u89AC\u89AD\u89AE\u89AF\u89B0"+
+            "\u89B1\u89B3\u89B4\u89B5\u89B6\u89B7\u89B8\u89B9"+
+            "\u89BA\u89BB\u89BC\u89BD\u89C1\u89C2\u89C3\u89C4"+
+            "\u89C5\u89C6\u89C7\u89C8\u89C9\u89CA\u89CB\u89CC"+
+            "\u89CD\u89CE\u89CF\u89D0\u89D1\u89D3\u89D4\u89D5"+
+            "\u89D6\u89D7\u89D8\u89D9\u89DA\u89DB\u89DC\u89DD"+
+            "\u89E1\u89E2\u89E3\u89E4\u89E5\u89E6\u89E7\u89E8"+
+            "\u89E9\u89EA\u89EB\u89EC\u89ED\u89EE\u89EF\u89F0"+
+            "\u89F1\u89F3\u89F4\u89F5\u89F6\u89F7\u89F8\u89F9"+
+            "\u89FA\u89FB\u89FC\u89FD\u8A41\u8A42\u8A43\u8A44"+
+            "\u8A45\u8A46\u8A47\u8A48\u8A49\u8A4A\u8A4B\u8A4C"+
+            "\u8A4D\u8A4E\u8A4F\u8A50\u8A51\u8A53\u8A54\u8A55"+
+            "\u8A56\u8A57\u8A58\u8A59\u8A5A\u8A5B\u8A5C\u8A5D"+
+            "\u8A61\u8A62\u8A63\u8A64\u8A65\u8A66\u8A67\u8A68"+
+            "\u8A69\u8A6A\u8A6B\u8A6C\u8A6D\u8A6E\u8A6F\u8A70"+
+            "\u8A71\u8A73\u8A74\u8A75\u8A76\u8A77\u8A78\u8A79"+
+            "\u8A7A\u8A7B\u8A7C\u8A7D\u8A81\u8A82\u8A83\u8A84"+
+            "\u8A85\u8A86\u8A87\u8A88\u8A89\u8A8A\u8A8B\u8A8C"+
+            "\u8A8D\u8A8E\u8A8F\u8A90\u8A91\u8A93\u8A94\u8A95"+
+            "\u8A96\u8A97\u8A98\u8A99\u8A9A\u8A9B\u8A9C\u8A9D"+
+            "\u8AA1\u8AA2\u8AA3\u8AA4\u8AA5\u8AA6\u8AA7\u8AA8"+
+            "\u8AA9\u8AAA\u8AAB\u8AAC\u8AAD\u8AAE\u8AAF\u8AB0"+
+            "\u8AB1\u8AB3\u8AB4\u8AB5\u8AB6\u8AB7\u8AB8\u8AB9"+
+            "\u8ABA\u8ABB\u8ABC\u8ABD\u8AC1\u8AC2\u8AC3\u8AC4"+
+            "\u8AC5\u8AC6\u8AC7\u8AC8\u8AC9\u8ACA\u8ACB\u8ACC"+
+            "\u8ACD\u8ACE\u8ACF\u8AD0\u8AD1\u8AD3\u8AD4\u8AD5"+
+            "\u8AD6\u8AD7\u8AD8\u8AD9\u8ADA\u8ADB\u8ADC\u8ADD"+
+            "\u8AE1\u8AE2\u8AE3\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8"+
+            "\u8AE9\u8AEA\u8AEB\u8AEC\u8AED\u8AEE\u8AEF\u8AF0"+
+            "\u8AF1\u8AF3\u8AF4\u8AF5\u8AF6\u8AF7\u8AF8\u8AF9"+
+            "\u8AFA\u8AFB\u8AFC\u8AFD\u8B41\u8B42\u8B43\u8B44"+
+            "\u8B45\u8B46\u8B47\u8B48\u8B49\u8B4A\u8B4B\u8B4C"+
+            "\u8B4D\u8B4E\u8B4F\u8B50\u8B51\u8B53\u8B54\u8B55"+
+            "\u8B56\u8B57\u8B58\u8B59\u8B5A\u8B5B\u8B5C\u8B5D"+
+            "\u8B61\u8B62\u8B63\u8B64\u8B65\u8B66\u8B67\u8B68"+
+            "\u8B69\u8B6A\u8B6B\u8B6C\u8B6D\u8B6E\u8B6F\u8B70"+
+            "\u8B71\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78\u8B79"+
+            "\u8B7A\u8B7B\u8B7C\u8B7D\u8B81\u8B82\u8B83\u8B84"+
+            "\u8B85\u8B86\u8B87\u8B88\u8B89\u8B8A\u8B8B\u8B8C"+
+            "\u8B8D\u8B8E\u8B8F\u8B90\u8B91\u8B93\u8B94\u8B95"+
+            "\u8B96\u8B97\u8B98\u8B99\u8B9A\u8B9B\u8B9C\u8B9D"+
+            "\u8BA1\u8BA2\u8BA3\u8BA4\u8BA5\u8BA6\u8BA7\u8BA8"+
+            "\u8BA9\u8BAA\u8BAB\u8BAC\u8BAD\u8BAE\u8BAF\u8BB0"+
+            "\u8BB1\u8BB3\u8BB4\u8BB5\u8BB6\u8BB7\u8BB8\u8BB9"+
+            "\u8BBA\u8BBB\u8BBC\u8BBD\u8C61\u8C62\u8C63\u8C64"+
+            "\u8C65\u8C66\u8C67\u8C68\u8C69\u8C6A\u8C6B\u8C6C"+
+            "\u8C6D\u8C6E\u8C6F\u8C70\u8C71\u8C73\u8C74\u8C75"+
+            "\u8C76\u8C77\u8C78\u8C79\u8C7A\u8C7B\u8C7C\u8C7D"+
+            "\u8C81\u8C82\u8C83\u8C84\u8C85\u8C86\u8C87\u8C88"+
+            "\u8C89\u8C8A\u8C8B\u8C8C\u8C8D\u8C8E\u8C8F\u8C90"+
+            "\u8C91\u8C93\u8C94\u8C95\u8C96\u8C97\u8C98\u8C99"+
+            "\u8C9A\u8C9B\u8C9C\u8C9D\u8CA1\u8CA2\u8CA3\u8CA4"+
+            "\u8CA5\u8CA6\u8CA7\u8CA8\u8CA9\u8CAA\u8CAB\u8CAC"+
+            "\u8CAD\u8CAE\u8CAF\u8CB0\u8CB1\u8CB3\u8CB4\u8CB5"+
+            "\u8CB6\u8CB7\u8CB8\u8CB9\u8CBA\u8CBB\u8CBC\u8CBD"+
+            "\u8CC1\u8CC2\u8CC3\u8CC4\u8CC5\u8CC6\u8CC7\u8CC8"+
+            "\u8CC9\u8CCA\u8CCB\u8CCC\u8CCD\u8CCE\u8CCF\u8CD0"+
+            "\u8CD1\u8CD3\u8CD4\u8CD5\u8CD6\u8CD7\u8CD8\u8CD9"+
+            "\u8CDA\u8CDB\u8CDC\u8CDD\u8CE1\u8CE2\u8CE3\u8CE4"+
+            "\u8CE5\u8CE6\u8CE7\u8CE8\u8CE9\u8CEA\u8CEB\u8CEC"+
+            "\u8CED\u8CEE\u8CEF\u8CF0\u8CF1\u8CF3\u8CF4\u8CF5"+
+            "\u8CF6\u8CF7\u8CF8\u8CF9\u8CFA\u8CFB\u8CFC\u8CFD"+
+            "\u8D41\u8D42\u8D43\u8D44\u8D45\u8D46\u8D47\u8D48"+
+            "\u8D49\u8D4A\u8D4B\u8D4C\u8D4D\u8D4E\u8D4F\u8D50"+
+            "\u8D51\u8D53\u8D54\u8D55\u8D56\u8D57\u8D58\u8D59"+
+            "\u8D5A\u8D5B\u8D5C\u8D5D\u8D61\u8D62\u8D63\u8D64"+
+            "\u8D65\u8D66\u8D67\u8D68\u8D69\u8D6A\u8D6B\u8D6C"+
+            "\u8D6D\u8D6E\u8D6F\u8D70\u8D71\u8D73\u8D74\u8D75"+
+            "\u8D76\u8D77\u8D78\u8D79\u8D7A\u8D7B\u8D7C\u8D7D"+
+            "\u8D81\u8D82\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88"+
+            "\u8D89\u8D8A\u8D8B\u8D8C\u8D8D\u8D8E\u8D8F\u8D90"+
+            "\u8D91\u8D93\u8D94\u8D95\u8D96\u8D97\u8D98\u8D99"+
+            "\u8D9A\u8D9B\u8D9C\u8D9D\u8DA1\u8DA2\u8DA3\u8DA4"+
+            "\u8DA5\u8DA6\u8DA7\u8DA8\u8DA9\u8DAA\u8DAB\u8DAC"+
+            "\u8DAD\u8DAE\u8DAF\u8DB0\u8DB1\u8DB3\u8DB4\u8DB5"+
+            "\u8DB6\u8DB7\u8DB8\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD"+
+            "\u8DC1\u8DC2\u8DC3\u8DC4\u8DC5\u8DC6\u8DC7\u8DC8"+
+            "\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD\u8DCE\u8DCF\u8DD0"+
+            "\u8DD1\u8DD3\u8DD4\u8DD5\u8DD6\u8DD7\u8DD8\u8DD9"+
+            "\u8DDA\u8DDB\u8DDC\u8DDD\u8DE1\u8DE2\u8DE3\u8DE4"+
+            "\u8DE5\u8DE6\u8DE7\u8DE8\u8DE9\u8DEA\u8DEB\u8DEC"+
+            "\u8DED\u8DEE\u8DEF\u8DF0\u8DF1\u8DF3\u8DF4\u8DF5"+
+            "\u8DF6\u8DF7\u8DF8\u8DF9\u8DFA\u8DFB\u8DFC\u8DFD"+
+            "\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46\u8E47\u8E48"+
+            "\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E\u8E4F\u8E50"+
+            "\u8E51\u8E53\u8E54\u8E55\u8E56\u8E57\u8E58\u8E59"+
+            "\u8E5A\u8E5B\u8E5C\u8E5D\u8E61\u8E62\u8E63\u8E64"+
+            "\u8E65\u8E66\u8E67\u8E68\u8E69\u8E6A\u8E6B\u8E6C"+
+            "\u8E6D\u8E6E\u8E6F\u8E70\u8E71\u8E73\u8E74\u8E75"+
+            "\u8E76\u8E77\u8E78\u8E79\u8E7A\u8E7B\u8E7C\u8E7D"+
+            "\u8E81\u8E82\u8E83\u8E84\u8E85\u8E86\u8E87\u8E88"+
+            "\u8E89\u8E8A\u8E8B\u8E8C\u8E8D\u8E8E\u8E8F\u8E90"+
+            "\u8E91\u8E93\u8E94\u8E95\u8E96\u8E97\u8E98\u8E99"+
+            "\u8E9A\u8E9B\u8E9C\u8E9D\u8EA1\u8EA2\u8EA3\u8EA4"+
+            "\u8EA5\u8EA6\u8EA7\u8EA8\u8EA9\u8EAA\u8EAB\u8EAC"+
+            "\u8EAD\u8EAE\u8EAF\u8EB0\u8EB1\u8EB3\u8EB4\u8EB5"+
+            "\u8EB6\u8EB7\u8EB8\u8EB9\u8EBA\u8EBB\u8EBC\u8EBD"+
+            "\u8EC1\u8EC2\u8EC3\u8EC4\u8EC5\u8EC6\u8EC7\u8EC8"+
+            "\u8EC9\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0"+
+            "\u8ED1\u8ED3\u8ED4\u8ED5\u8ED6\u8ED7\u8ED8\u8ED9"+
+            "\u8EDA\u8EDB\u8EDC\u8EDD\u8EE1\u8EE2\u8EE3\u8EE4"+
+            "\u8EE5\u8EE6\u8EE7\u8EE8\u8EE9\u8EEA\u8EEB\u8EEC"+
+            "\u8EED\u8EEE\u8EEF\u8EF0\u8EF1\u8EF3\u8EF4\u8EF5"+
+            "\u8EF6\u8EF7\u8EF8\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD"+
+            "\u8F41\u8F42\u8F43\u8F44\u8F45\u8F46\u8F47\u8F48"+
+            "\u8F49\u8F4A\u8F4B\u8F4C\u8F4D\u8F4E\u8F4F\u8F50"+
+            "\u8F51\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58\u8F59"+
+            "\u8F5A\u8F5B\u8F5C\u8F5D\u8F61\u8F62\u8F63\u8F64"+
+            "\u8F65\u8F66\u8F67\u8F68\u8F69\u8F6A\u8F6B\u8F6C"+
+            "\u8F6D\u8F6E\u8F6F\u8F70\u8F71\u8F73\u8F74\u8F75"+
+            "\u8F76\u8F77\u8F78\u8F79\u8F7A\u8F7B\u8F7C\u8F7D"+
+            "\u8F81\u8F82\u8F83\u8F84\u8F85\u8F86\u8F87\u8F88"+
+            "\u8F89\u8F8A\u8F8B\u8F8C\u8F8D\u8F8E\u8F8F\u8F90"+
+            "\u8F91\u8F93\u8F94\u8F95\u8F96\u8F97\u8F98\u8F99"+
+            "\u8F9A\u8F9B\u8F9C\u8F9D\u8FA1\u8FA2\u8FA3\u8FA4"+
+            "\u8FA5\u8FA6\u8FA7\u8FA8\u8FA9\u8FAA\u8FAB\u8FAC"+
+            "\u8FAD\u8FAE\u8FAF\u8FB0\u8FB1\u8FB3\u8FB4\u8FB5"+
+            "\u8FB6\u8FB7\u8FB8\u8FB9\u8FBA\u8FBB\u8FBC\u8FBD"+
+            "\u9061\u9062\u9063\u9064\u9065\u9066\u9067\u9068"+
+            "\u9069\u906A\u906B\u906C\u906D\u906E\u906F\u9070"+
+            "\u9071\u9073\u9074\u9075\u9076\u9077\u9078\u9079"+
+            "\u907A\u907B\u907C\u907D\u9081\u9082\u9083\u9084"+
+            "\u9085\u9086\u9087\u9088\u9089\u908A\u908B\u908C"+
+            "\u908D\u908E\u908F\u9090\u9091\u9093\u9094\u9095"+
+            "\u9096\u9097\u9098\u9099\u909A\u909B\u909C\u909D"+
+            "\u90A1\u90A2\u90A3\u90A4\u90A5\u90A6\u90A7\u90A8"+
+            "\u90A9\u90AA\u90AB\u90AC\u90AD\u90AE\u90AF\u90B0"+
+            "\u90B1\u90B3\u90B4\u90B5\u90B6\u90B7\u90B8\u90B9"+
+            "\u90BA\u90BB\u90BC\u90BD\u90C1\u90C2\u90C3\u90C4"+
+            "\u90C5\u90C6\u90C7\u90C8\u90C9\u90CA\u90CB\u90CC"+
+            "\u90CD\u90CE\u90CF\u90D0\u90D1\u90D3\u90D4\u90D5"+
+            "\u90D6\u90D7\u90D8\u90D9\u90DA\u90DB\u90DC\u90DD"+
+            "\u90E1\u90E2\u90E3\u90E4\u90E5\u90E6\u90E7\u90E8"+
+            "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
+            "\u90F1\u90F3\u90F4\u90F5\u90F6\u90F7\u90F8\u90F9"+
+            "\u90FA\u90FB\u90FC\u90FD\u9141\u9142\u9143\u9144"+
+            "\u9145\u9146\u9147\u9148\u9149\u914A\u914B\u914C"+
+            "\u914D\u914E\u914F\u9150\u9151\u9153\u9154\u9155"+
+            "\u9156\u9157\u9158\u9159\u915A\u915B\u915C\u915D"+
+            "\u9161\u9162\u9163\u9164\u9165\u9166\u9167\u9168"+
+            "\u9169\u916A\u916B\u916C\u916D\u916E\u916F\u9170"+
+            "\u9171\u9173\u9174\u9175\u9176\u9177\u9178\u9179"+
+            "\u917A\u917B\u917C\u917D\u9181\u9182\u9183\u9184"+
+            "\u9185\u9186\u9187\u9188\u9189\u918A\u918B\u918C"+
+            "\u918D\u918E\u918F\u9190\u9191\u9193\u9194\u9195"+
+            "\u9196\u9197\u9198\u9199\u919A\u919B\u919C\u919D"+
+            "\u91A1\u91A2\u91A3\u91A4\u91A5\u91A6\u91A7\u91A8"+
+            "\u91A9\u91AA\u91AB\u91AC\u91AD\u91AE\u91AF\u91B0"+
+            "\u91B1\u91B3\u91B4\u91B5\u91B6\u91B7\u91B8\u91B9"+
+            "\u91BA\u91BB\u91BC\u91BD\u91C1\u91C2\u91C3\u91C4"+
+            "\u91C5\u91C6\u91C7\u91C8\u91C9\u91CA\u91CB\u91CC"+
+            "\u91CD\u91CE\u91CF\u91D0\u91D1\u91D3\u91D4\u91D5"+
+            "\u91D6\u91D7\u91D8\u91D9\u91DA\u91DB\u91DC\u91DD"+
+            "\u91E1\u91E2\u91E3\u91E4\u91E5\u91E6\u91E7\u91E8"+
+            "\u91E9\u91EA\u91EB\u91EC\u91ED\u91EE\u91EF\u91F0"+
+            "\u91F1\u91F3\u91F4\u91F5\u91F6\u91F7\u91F8\u91F9"+
+            "\u91FA\u91FB\u91FC\u91FD\u9241\u9242\u9243\u9244"+
+            "\u9245\u9246\u9247\u9248\u9249\u924A\u924B\u924C"+
+            "\u924D\u924E\u924F\u9250\u9251\u9253\u9254\u9255"+
+            "\u9256\u9257\u9258\u9259\u925A\u925B\u925C\u925D"+
+            "\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268"+
+            "\u9269\u926A\u926B\u926C\u926D\u926E\u926F\u9270"+
+            "\u9271\u9273\u9274\u9275\u9276\u9277\u9278\u9279"+
+            "\u927A\u927B\u927C\u927D\u9281\u9282\u9283\u9284"+
+            "\u9285\u9286\u9287\u9288\u9289\u928A\u928B\u928C"+
+            "\u928D\u928E\u928F\u9290\u9291\u9293\u9294\u9295"+
+            "\u9296\u9297\u9298\u9299\u929A\u929B\u929C\u929D"+
+            "\u92A1\u92A2\u92A3\u92A4\u92A5\u92A6\u92A7\u92A8"+
+            "\u92A9\u92AA\u92AB\u92AC\u92AD\u92AE\u92AF\u92B0"+
+            "\u92B1\u92B3\u92B4\u92B5\u92B6\u92B7\u92B8\u92B9"+
+            "\u92BA\u92BB\u92BC\u92BD\u92C1\u92C2\u92C3\u92C4"+
+            "\u92C5\u92C6\u92C7\u92C8\u92C9\u92CA\u92CB\u92CC"+
+            "\u92CD\u92CE\u92CF\u92D0\u92D1\u92D3\u92D4\u92D5"+
+            "\u92D6\u92D7\u92D8\u92D9\u92DA\u92DB\u92DC\u92DD"+
+            "\u92E1\u92E2\u92E3\u92E4\u92E5\u92E6\u92E7\u92E8"+
+            "\u92E9\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
+            "\u92F1\u92F3\u92F4\u92F5\u92F6\u92F7\u92F8\u92F9"+
+            "\u92FA\u92FB\u92FC\u92FD\u9341\u9342\u9343\u9344"+
+            "\u9345\u9346\u9347\u9348\u9349\u934A\u934B\u934C"+
+            "\u934D\u934E\u934F\u9350\u9351\u9353\u9354\u9355"+
+            "\u9356\u9357\u9358\u9359\u935A\u935B\u935C\u935D"+
+            "\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368"+
+            "\u9369\u936A\u936B\u936C\u936D\u936E\u936F\u9370"+
+            "\u9371\u9373\u9374\u9375\u9376\u9377\u9378\u9379"+
+            "\u937A\u937B\u937C\u937D\u9381\u9382\u9383\u9384"+
+            "\u9385\u9386\u9387\u9388\u9389\u938A\u938B\u938C"+
+            "\u938D\u938E\u938F\u9390\u9391\u9393\u9394\u9395"+
+            "\u9396\u9397\u9398\u9399\u939A\u939B\u939C\u939D"+
+            "\u93A1\u93A2\u93A3\u93A4\u93A5\u93A6\u93A7\u93A8"+
+            "\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\u93AF\u93B0"+
+            "\u93B1\u93B3\u93B4\u93B5\u93B6\u93B7\u93B8\u93B9"+
+            "\u93BA\u93BB\u93BC\u93BD\u9461\u9462\u9463\u9464"+
+            "\u9465\u9466\u9467\u9468\u9469\u946A\u946B\u946C"+
+            "\u946D\u946E\u946F\u9470\u9471\u9473\u9474\u9475"+
+            "\u9476\u9477\u9478\u9479\u947A\u947B\u947C\u947D"+
+            "\u9481\u9482\u9483\u9484\u9485\u9486\u9487\u9488"+
+            "\u9489\u948A\u948B\u948C\u948D\u948E\u948F\u9490"+
+            "\u9491\u9493\u9494\u9495\u9496\u9497\u9498\u9499"+
+            "\u949A\u949B\u949C\u949D\u94A1\u94A2\u94A3\u94A4"+
+            "\u94A5\u94A6\u94A7\u94A8\u94A9\u94AA\u94AB\u94AC"+
+            "\u94AD\u94AE\u94AF\u94B0\u94B1\u94B3\u94B4\u94B5"+
+            "\u94B6\u94B7\u94B8\u94B9\u94BA\u94BB\u94BC\u94BD"+
+            "\u94C1\u94C2\u94C3\u94C4\u94C5\u94C6\u94C7\u94C8"+
+            "\u94C9\u94CA\u94CB\u94CC\u94CD\u94CE\u94CF\u94D0"+
+            "\u94D1\u94D3\u94D4\u94D5\u94D6\u94D7\u94D8\u94D9"+
+            "\u94DA\u94DB\u94DC\u94DD\u94E1\u94E2\u94E3\u94E4"+
+            "\u94E5\u94E6\u94E7\u94E8\u94E9\u94EA\u94EB\u94EC"+
+            "\u94ED\u94EE\u94EF\u94F0\u94F1\u94F3\u94F4\u94F5"+
+            "\u94F6\u94F7\u94F8\u94F9\u94FA\u94FB\u94FC\u94FD"+
+            "\u9541\u9542\u9543\u9544\u9545\u9546\u9547\u9548"+
+            "\u9549\u954A\u954B\u954C\u954D\u954E\u954F\u9550"+
+            "\u9551\u9553\u9554\u9555\u9556\u9557\u9558\u9559"+
+            "\u955A\u955B\u955C\u955D\u9561\u9562\u9563\u9564"+
+            "\u9565\u9566\u9567\u9568\u9569\u956A\u956B\u956C"+
+            "\u956D\u956E\u956F\u9570\u9571\u9573\u9574\u9575"+
+            "\u9576\u9577\u9578\u9579\u957A\u957B\u957C\u957D"+
+            "\u9581\u9582\u9583\u9584\u9585\u9586\u9587\u9588"+
+            "\u9589\u958A\u958B\u958C\u958D\u958E\u958F\u9590"+
+            "\u9591\u9593\u9594\u9595\u9596\u9597\u9598\u9599"+
+            "\u959A\u959B\u959C\u959D\u95A1\u95A2\u95A3\u95A4"+
+            "\u95A5\u95A6\u95A7\u95A8\u95A9\u95AA\u95AB\u95AC"+
+            "\u95AD\u95AE\u95AF\u95B0\u95B1\u95B3\u95B4\u95B5"+
+            "\u95B6\u95B7\u95B8\u95B9\u95BA\u95BB\u95BC\u95BD"+
+            "\u95C1\u95C2\u95C3\u95C4\u95C5\u95C6\u95C7\u95C8"+
+            "\u95C9\u95CA\u95CB\u95CC\u95CD\u95CE\u95CF\u95D0"+
+            "\u95D1\u95D3\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9"+
+            "\u95DA\u95DB\u95DC\u95DD\u95E1\u95E2\u95E3\u95E4"+
+            "\u95E5\u95E6\u95E7\u95E8\u95E9\u95EA\u95EB\u95EC"+
+            "\u95ED\u95EE\u95EF\u95F0\u95F1\u95F3\u95F4\u95F5"+
+            "\u95F6\u95F7\u95F8\u95F9\u95FA\u95FB\u95FC\u95FD"+
+            "\u9641\u9642\u9643\u9644\u9645\u9646\u9647\u9648"+
+            "\u9649\u964A\u964B\u964C\u964D\u964E\u964F\u9650"+
+            "\u9651\u9653\u9654\u9655\u9656\u9657\u9658\u9659"+
+            "\u965A\u965B\u965C\u965D\u9661\u9662\u9663\u9664"+
+            "\u9665\u9666\u9667\u9668\u9669\u966A\u966B\u966C"+
+            "\u966D\u966E\u966F\u9670\u9671\u9673\u9674\u9675"+
+            "\u9676\u9677\u9678\u9679\u967A\u967B\u967C\u967D"+
+            "\u9681\u9682\u9683\u9684\u9685\u9686\u9687\u9688"+
+            "\u9689\u968A\u968B\u968C\u968D\u968E\u968F\u9690"+
+            "\u9691\u9693\u9694\u9695\u9696\u9697\u9698\u9699"+
+            "\u969A\u969B\u969C\u969D\u96A1\u96A2\u96A3\u96A4"+
+            "\u96A5\u96A6\u96A7\u96A8\u96A9\u96AA\u96AB\u96AC"+
+            "\u96AD\u96AE\u96AF\u96B0\u96B1\u96B3\u96B4\u96B5"+
+            "\u96B6\u96B7\u96B8\u96B9\u96BA\u96BB\u96BC\u96BD"+
+            "\u96C1\u96C2\u96C3\u96C4\u96C5\u96C6\u96C7\u96C8"+
+            "\u96C9\u96CA\u96CB\u96CC\u96CD\u96CE\u96CF\u96D0"+
+            "\u96D1\u96D3\u96D4\u96D5\u96D6\u96D7\u96D8\u96D9"+
+            "\u96DA\u96DB\u96DC\u96DD\u96E1\u96E2\u96E3\u96E4"+
+            "\u96E5\u96E6\u96E7\u96E8\u96E9\u96EA\u96EB\u96EC"+
+            "\u96ED\u96EE\u96EF\u96F0\u96F1\u96F3\u96F4\u96F5"+
+            "\u96F6\u96F7\u96F8\u96F9\u96FA\u96FB\u96FC\u96FD"+
+            "\u9741\u9742\u9743\u9744\u9745\u9746\u9747\u9748"+
+            "\u9749\u974A\u974B\u974C\u974D\u974E\u974F\u9750"+
+            "\u9751\u9753\u9754\u9755\u9756\u9757\u9758\u9759"+
+            "\u975A\u975B\u975C\u975D\u9761\u9762\u9763\u9764"+
+            "\u9765\u9766\u9767\u9768\u9769\u976A\u976B\u976C"+
+            "\u976D\u976E\u976F\u9770\u9771\u9773\u9774\u9775"+
+            "\u9776\u9777\u9778\u9779\u977A\u977B\u977C\u977D"+
+            "\u9781\u9782\u9783\u9784\u9785\u9786\u9787\u9788"+
+            "\u9789\u978A\u978B\u978C\u978D\u978E\u978F\u9790"+
+            "\u9791\u9793\u9794\u9795\u9796\u9797\u9798\u9799"+
+            "\u979A\u979B\u979C\u979D\u97A1\u97A2\u97A3\u97A4"+
+            "\u97A5\u97A6\u97A7\u97A8\u97A9\u97AA\u97AB\u97AC"+
+            "\u97AD\u97AE\u97AF\u97B0\u97B1\u97B3\u97B4\u97B5"+
+            "\u97B6\u97B7\u97B8\u97B9\u97BA\u97BB\u97BC\u97BD"+
+            "\u9861\u9862\u9863\u9864\u9865\u9866\u9867\u9868"+
+            "\u9869\u986A\u986B\u986C\u986D\u986E\u986F\u9870"+
+            "\u9871\u9873\u9874\u9875\u9876\u9877\u9878\u9879"+
+            "\u987A\u987B\u987C\u987D\u9881\u9882\u9883\u9884"+
+            "\u9885\u9886\u9887\u9888\u9889\u988A\u988B\u988C"+
+            "\u988D\u988E\u988F\u9890\u9891\u9893\u9894\u9895"+
+            "\u9896\u9897\u9898\u9899\u989A\u989B\u989C\u989D"+
+            "\u98A1\u98A2\u98A3\u98A4\u98A5\u98A6\u98A7\u98A8"+
+            "\u98A9\u98AA\u98AB\u98AC\u98AD\u98AE\u98AF\u98B0"+
+            "\u98B1\u98B3\u98B4\u98B5\u98B6\u98B7\u98B8\u98B9"+
+            "\u98BA\u98BB\u98BC\u98BD\u98C1\u98C2\u98C3\u98C4"+
+            "\u98C5\u98C6\u98C7\u98C8\u98C9\u98CA\u98CB\u98CC"+
+            "\u98CD\u98CE\u98CF\u98D0\u98D1\u98D3\u98D4\u98D5"+
+            "\u98D6\u98D7\u98D8\u98D9\u98DA\u98DB\u98DC\u98DD"+
+            "\u98E1\u98E2\u98E3\u98E4\u98E5\u98E6\u98E7\u98E8"+
+            "\u98E9\u98EA\u98EB\u98EC\u98ED\u98EE\u98EF\u98F0"+
+            "\u98F1\u98F3\u98F4\u98F5\u98F6\u98F7\u98F8\u98F9"+
+            "\u98FA\u98FB\u98FC\u98FD\u9941\u9942\u9943\u9944"+
+            "\u9945\u9946\u9947\u9948\u9949\u994A\u994B\u994C"+
+            "\u994D\u994E\u994F\u9950\u9951\u9953\u9954\u9955"+
+            "\u9956\u9957\u9958\u9959\u995A\u995B\u995C\u995D"+
+            "\u9961\u9962\u9963\u9964\u9965\u9966\u9967\u9968"+
+            "\u9969\u996A\u996B\u996C\u996D\u996E\u996F\u9970"+
+            "\u9971\u9973\u9974\u9975\u9976\u9977\u9978\u9979"+
+            "\u997A\u997B\u997C\u997D\u9981\u9982\u9983\u9984"+
+            "\u9985\u9986\u9987\u9988\u9989\u998A\u998B\u998C"+
+            "\u998D\u998E\u998F\u9990\u9991\u9993\u9994\u9995"+
+            "\u9996\u9997\u9998\u9999\u999A\u999B\u999C\u999D"+
+            "\u99A1\u99A2\u99A3\u99A4\u99A5\u99A6\u99A7\u99A8"+
+            "\u99A9\u99AA\u99AB\u99AC\u99AD\u99AE\u99AF\u99B0"+
+            "\u99B1\u99B3\u99B4\u99B5\u99B6\u99B7\u99B8\u99B9"+
+            "\u99BA\u99BB\u99BC\u99BD\u99C1\u99C2\u99C3\u99C4"+
+            "\u99C5\u99C6\u99C7\u99C8\u99C9\u99CA\u99CB\u99CC"+
+            "\u99CD\u99CE\u99CF\u99D0\u99D1\u99D3\u99D4\u99D5"+
+            "\u99D6\u99D7\u99D8\u99D9\u99DA\u99DB\u99DC\u99DD"+
+            "\u99E1\u99E2\u99E3\u99E4\u99E5\u99E6\u99E7\u99E8"+
+            "\u99E9\u99EA\u99EB\u99EC\u99ED\u99EE\u99EF\u99F0"+
+            "\u99F1\u99F3\u99F4\u99F5\u99F6\u99F7\u99F8\u99F9"+
+            "\u99FA\u99FB\u99FC\u99FD\u9A41\u9A42\u9A43\u9A44"+
+            "\u9A45\u9A46\u9A47\u9A48\u9A49\u9A4A\u9A4B\u9A4C"+
+            "\u9A4D\u9A4E\u9A4F\u9A50\u9A51\u9A53\u9A54\u9A55"+
+            "\u9A56\u9A57\u9A58\u9A59\u9A5A\u9A5B\u9A5C\u9A5D"+
+            "\u9A61\u9A62\u9A63\u9A64\u9A65\u9A66\u9A67\u9A68"+
+            "\u9A69\u9A6A\u9A6B\u9A6C\u9A6D\u9A6E\u9A6F\u9A70"+
+            "\u9A71\u9A73\u9A74\u9A75\u9A76\u9A77\u9A78\u9A79"+
+            "\u9A7A\u9A7B\u9A7C\u9A7D\u9A81\u9A82\u9A83\u9A84"+
+            "\u9A85\u9A86\u9A87\u9A88\u9A89\u9A8A\u9A8B\u9A8C"+
+            "\u9A8D\u9A8E\u9A8F\u9A90\u9A91\u9A93\u9A94\u9A95"+
+            "\u9A96\u9A97\u9A98\u9A99\u9A9A\u9A9B\u9A9C\u9A9D"+
+            "\u9AA1\u9AA2\u9AA3\u9AA4\u9AA5\u9AA6\u9AA7\u9AA8"+
+            "\u9AA9\u9AAA\u9AAB\u9AAC\u9AAD\u9AAE\u9AAF\u9AB0"+
+            "\u9AB1\u9AB3\u9AB4\u9AB5\u9AB6\u9AB7\u9AB8\u9AB9"+
+            "\u9ABA\u9ABB\u9ABC\u9ABD\u9AC1\u9AC2\u9AC3\u9AC4"+
+            "\u9AC5\u9AC6\u9AC7\u9AC8\u9AC9\u9ACA\u9ACB\u9ACC"+
+            "\u9ACD\u9ACE\u9ACF\u9AD0\u9AD1\u9AD3\u9AD4\u9AD5"+
+            "\u9AD6\u9AD7\u9AD8\u9AD9\u9ADA\u9ADB\u9ADC\u9ADD"+
+            "\u9AE1\u9AE2\u9AE3\u9AE4\u9AE5\u9AE6\u9AE7\u9AE8"+
+            "\u9AE9\u9AEA\u9AEB\u9AEC\u9AED\u9AEE\u9AEF\u9AF0"+
+            "\u9AF1\u9AF3\u9AF4\u9AF5\u9AF6\u9AF7\u9AF8\u9AF9"+
+            "\u9AFA\u9AFB\u9AFC\u9AFD\u9B41\u9B42\u9B43\u9B44"+
+            "\u9B45\u9B46\u9B47\u9B48\u9B49\u9B4A\u9B4B\u9B4C"+
+            "\u9B4D\u9B4E\u9B4F\u9B50\u9B51\u9B53\u9B54\u9B55"+
+            "\u9B56\u9B57\u9B58\u9B59\u9B5A\u9B5B\u9B5C\u9B5D"+
+            "\u9B61\u9B62\u9B63\u9B64\u9B65\u9B66\u9B67\u9B68"+
+            "\u9B69\u9B6A\u9B6B\u9B6C\u9B6D\u9B6E\u9B6F\u9B70"+
+            "\u9B71\u9B73\u9B74\u9B75\u9B76\u9B77\u9B78\u9B79"+
+            "\u9B7A\u9B7B\u9B7C\u9B7D\u9B81\u9B82\u9B83\u9B84"+
+            "\u9B85\u9B86\u9B87\u9B88\u9B89\u9B8A\u9B8B\u9B8C"+
+            "\u9B8D\u9B8E\u9B8F\u9B90\u9B91\u9B93\u9B94\u9B95"+
+            "\u9B96\u9B97\u9B98\u9B99\u9B9A\u9B9B\u9B9C\u9B9D"+
+            "\u9BA1\u9BA2\u9BA3\u9BA4\u9BA5\u9BA6\u9BA7\u9BA8"+
+            "\u9BA9\u9BAA\u9BAB\u9BAC\u9BAD\u9BAE\u9BAF\u9BB0"+
+            "\u9BB1\u9BB3\u9BB4\u9BB5\u9BB6\u9BB7\u9BB8\u9BB9"+
+            "\u9BBA\u9BBB\u9BBC\u9BBD\u9C61\u9C62\u9C63\u9C64"+
+            "\u9C65\u9C66\u9C67\u9C68\u9C69\u9C6A\u9C6B\u9C6C"+
+            "\u9C6D\u9C6E\u9C6F\u9C70\u9C71\u9C73\u9C74\u9C75"+
+            "\u9C76\u9C77\u9C78\u9C79\u9C7A\u9C7B\u9C7C\u9C7D"+
+            "\u9C81\u9C82\u9C83\u9C84\u9C85\u9C86\u9C87\u9C88"+
+            "\u9C89\u9C8A\u9C8B\u9C8C\u9C8D\u9C8E\u9C8F\u9C90"+
+            "\u9C91\u9C93\u9C94\u9C95\u9C96\u9C97\u9C98\u9C99"+
+            "\u9C9A\u9C9B\u9C9C\u9C9D\u9CA1\u9CA2\u9CA3\u9CA4"+
+            "\u9CA5\u9CA6\u9CA7\u9CA8\u9CA9\u9CAA\u9CAB\u9CAC"+
+            "\u9CAD\u9CAE\u9CAF\u9CB0\u9CB1\u9CB3\u9CB4\u9CB5"+
+            "\u9CB6\u9CB7\u9CB8\u9CB9\u9CBA\u9CBB\u9CBC\u9CBD"+
+            "\u9CC1\u9CC2\u9CC3\u9CC4\u9CC5\u9CC6\u9CC7\u9CC8"+
+            "\u9CC9\u9CCA\u9CCB\u9CCC\u9CCD\u9CCE\u9CCF\u9CD0"+
+            "\u9CD1\u9CD3\u9CD4\u9CD5\u9CD6\u9CD7\u9CD8\u9CD9"+
+            "\u9CDA\u9CDB\u9CDC\u9CDD\u9CE1\u9CE2\u9CE3\u9CE4"+
+            "\u9CE5\u9CE6\u9CE7\u9CE8\u9CE9\u9CEA\u9CEB\u9CEC"+
+            "\u9CED\u9CEE\u9CEF\u9CF0\u9CF1\u9CF3\u9CF4\u9CF5"+
+            "\u9CF6\u9CF7\u9CF8\u9CF9\u9CFA\u9CFB\u9CFC\u9CFD"+
+            "\u9D41\u9D42\u9D43\u9D44\u9D45\u9D46\u9D47\u9D48"+
+            "\u9D49\u9D4A\u9D4B\u9D4C\u9D4D\u9D4E\u9D4F\u9D50"+
+            "\u9D51\u9D53\u9D54\u9D55\u9D56\u9D57\u9D58\u9D59"+
+            "\u9D5A\u9D5B\u9D5C\u9D5D\u9D61\u9D62\u9D63\u9D64"+
+            "\u9D65\u9D66\u9D67\u9D68\u9D69\u9D6A\u9D6B\u9D6C"+
+            "\u9D6D\u9D6E\u9D6F\u9D70\u9D71\u9D73\u9D74\u9D75"+
+            "\u9D76\u9D77\u9D78\u9D79\u9D7A\u9D7B\u9D7C\u9D7D"+
+            "\u9D81\u9D82\u9D83\u9D84\u9D85\u9D86\u9D87\u9D88"+
+            "\u9D89\u9D8A\u9D8B\u9D8C\u9D8D\u9D8E\u9D8F\u9D90"+
+            "\u9D91\u9D93\u9D94\u9D95\u9D96\u9D97\u9D98\u9D99"+
+            "\u9D9A\u9D9B\u9D9C\u9D9D\u9DA1\u9DA2\u9DA3\u9DA4"+
+            "\u9DA5\u9DA6\u9DA7\u9DA8\u9DA9\u9DAA\u9DAB\u9DAC"+
+            "\u9DAD\u9DAE\u9DAF\u9DB0\u9DB1\u9DB3\u9DB4\u9DB5"+
+            "\u9DB6\u9DB7\u9DB8\u9DB9\u9DBA\u9DBB\u9DBC\u9DBD"+
+            "\u9DC1\u9DC2\u9DC3\u9DC4\u9DC5\u9DC6\u9DC7\u9DC8"+
+            "\u9DC9\u9DCA\u9DCB\u9DCC\u9DCD\u9DCE\u9DCF\u9DD0"+
+            "\u9DD1\u9DD3\u9DD4\u9DD5\u9DD6\u9DD7\u9DD8\u9DD9"+
+            "\u9DDA\u9DDB\u9DDC\u9DDD\u9DE1\u9DE2\u9DE3\u9DE4"+
+            "\u9DE5\u9DE6\u9DE7\u9DE8\u9DE9\u9DEA\u9DEB\u9DEC"+
+            "\u9DED\u9DEE\u9DEF\u9DF0\u9DF1\u9DF3\u9DF4\u9DF5"+
+            "\u9DF6\u9DF7\u9DF8\u9DF9\u9DFA\u9DFB\u9DFC\u9DFD"+
+            "\u9E41\u9E42\u9E43\u9E44\u9E45\u9E46\u9E47\u9E48"+
+            "\u9E49\u9E4A\u9E4B\u9E4C\u9E4D\u9E4E\u9E4F\u9E50"+
+            "\u9E51\u9E53\u9E54\u9E55\u9E56\u9E57\u9E58\u9E59"+
+            "\u9E5A\u9E5B\u9E5C\u9E5D\u9E61\u9E62\u9E63\u9E64"+
+            "\u9E65\u9E66\u9E67\u9E68\u9E69\u9E6A\u9E6B\u9E6C"+
+            "\u9E6D\u9E6E\u9E6F\u9E70\u9E71\u9E73\u9E74\u9E75"+
+            "\u9E76\u9E77\u9E78\u9E79\u9E7A\u9E7B\u9E7C\u9E7D"+
+            "\u9E81\u9E82\u9E83\u9E84\u9E85\u9E86\u9E87\u9E88"+
+            "\u9E89\u9E8A\u9E8B\u9E8C\u9E8D\u9E8E\u9E8F\u9E90"+
+            "\u9E91\u9E93\u9E94\u9E95\u9E96\u9E97\u9E98\u9E99";
+
+        private final static String innerIndex7=
+            "\u9E9A\u9E9B\u9E9C\u9E9D\u9EA1\u9EA2\u9EA3\u9EA4"+
+            "\u9EA5\u9EA6\u9EA7\u9EA8\u9EA9\u9EAA\u9EAB\u9EAC"+
+            "\u9EAD\u9EAE\u9EAF\u9EB0\u9EB1\u9EB3\u9EB4\u9EB5"+
+            "\u9EB6\u9EB7\u9EB8\u9EB9\u9EBA\u9EBB\u9EBC\u9EBD"+
+            "\u9EC1\u9EC2\u9EC3\u9EC4\u9EC5\u9EC6\u9EC7\u9EC8"+
+            "\u9EC9\u9ECA\u9ECB\u9ECC\u9ECD\u9ECE\u9ECF\u9ED0"+
+            "\u9ED1\u9ED3\u9ED4\u9ED5\u9ED6\u9ED7\u9ED8\u9ED9"+
+            "\u9EDA\u9EDB\u9EDC\u9EDD\u9EE1\u9EE2\u9EE3\u9EE4"+
+            "\u9EE5\u9EE6\u9EE7\u9EE8\u9EE9\u9EEA\u9EEB\u9EEC"+
+            "\u9EED\u9EEE\u9EEF\u9EF0\u9EF1\u9EF3\u9EF4\u9EF5"+
+            "\u9EF6\u9EF7\u9EF8\u9EF9\u9EFA\u9EFB\u9EFC\u9EFD"+
+            "\u9F41\u9F42\u9F43\u9F44\u9F45\u9F46\u9F47\u9F48"+
+            "\u9F49\u9F4A\u9F4B\u9F4C\u9F4D\u9F4E\u9F4F\u9F50"+
+            "\u9F51\u9F53\u9F54\u9F55\u9F56\u9F57\u9F58\u9F59"+
+            "\u9F5A\u9F5B\u9F5C\u9F5D\u9F61\u9F62\u9F63\u9F64"+
+            "\u9F65\u9F66\u9F67\u9F68\u9F69\u9F6A\u9F6B\u9F6C"+
+            "\u9F6D\u9F6E\u9F6F\u9F70\u9F71\u9F73\u9F74\u9F75"+
+            "\u9F76\u9F77\u9F78\u9F79\u9F7A\u9F7B\u9F7C\u9F7D"+
+            "\u9F81\u9F82\u9F83\u9F84\u9F85\u9F86\u9F87\u9F88"+
+            "\u9F89\u9F8A\u9F8B\u9F8C\u9F8D\u9F8E\u9F8F\u9F90"+
+            "\u9F91\u9F93\u9F94\u9F95\u9F96\u9F97\u9F98\u9F99"+
+            "\u9F9A\u9F9B\u9F9C\u9F9D\u9FA1\u9FA2\u9FA3\u9FA4"+
+            "\u9FA5\u9FA6\u9FA7\u9FA8\u9FA9\u9FAA\u9FAB\u9FAC"+
+            "\u9FAD\u9FAE\u9FAF\u9FB0\u9FB1\u9FB3\u9FB4\u9FB5"+
+            "\u9FB6\u9FB7\u9FB8\u9FB9\u9FBA\u9FBB\u9FBC\u9FBD"+
+            "\uA061\uA062\uA063\uA064\uA065\uA066\uA067\uA068"+
+            "\uA069\uA06A\uA06B\uA06C\uA06D\uA06E\uA06F\uA070"+
+            "\uA071\uA073\uA074\uA075\uA076\uA077\uA078\uA079"+
+            "\uA07A\uA07B\uA07C\uA07D\uA081\uA082\uA083\uA084"+
+            "\uA085\uA086\uA087\uA088\uA089\uA08A\uA08B\uA08C"+
+            "\uA08D\uA08E\uA08F\uA090\uA091\uA093\uA094\uA095"+
+            "\uA096\uA097\uA098\uA099\uA09A\uA09B\uA09C\uA09D"+
+            "\uA0A1\uA0A2\uA0A3\uA0A4\uA0A5\uA0A6\uA0A7\uA0A8"+
+            "\uA0A9\uA0AA\uA0AB\uA0AC\uA0AD\uA0AE\uA0AF\uA0B0"+
+            "\uA0B1\uA0B3\uA0B4\uA0B5\uA0B6\uA0B7\uA0B8\uA0B9"+
+            "\uA0BA\uA0BB\uA0BC\uA0BD\uA0C1\uA0C2\uA0C3\uA0C4"+
+            "\uA0C5\uA0C6\uA0C7\uA0C8\uA0C9\uA0CA\uA0CB\uA0CC"+
+            "\uA0CD\uA0CE\uA0CF\uA0D0\uA0D1\uA0D3\uA0D4\uA0D5"+
+            "\uA0D6\uA0D7\uA0D8\uA0D9\uA0DA\uA0DB\uA0DC\uA0DD"+
+            "\uA0E1\uA0E2\uA0E3\uA0E4\uA0E5\uA0E6\uA0E7\uA0E8"+
+            "\uA0E9\uA0EA\uA0EB\uA0EC\uA0ED\uA0EE\uA0EF\uA0F0"+
+            "\uA0F1\uA0F3\uA0F4\uA0F5\uA0F6\uA0F7\uA0F8\uA0F9"+
+            "\uA0FA\uA0FB\uA0FC\uA0FD\uA141\uA142\uA143\uA144"+
+            "\uA145\uA146\uA147\uA148\uA149\uA14A\uA14B\uA14C"+
+            "\uA14D\uA14E\uA14F\uA150\uA151\uA153\uA154\uA155"+
+            "\uA156\uA157\uA158\uA159\uA15A\uA15B\uA15C\uA15D"+
+            "\uA161\uA162\uA163\uA164\uA165\uA166\uA167\uA168"+
+            "\uA169\uA16A\uA16B\uA16C\uA16D\uA16E\uA16F\uA170"+
+            "\uA171\uA173\uA174\uA175\uA176\uA177\uA178\uA179"+
+            "\uA17A\uA17B\uA17C\uA17D\uA181\uA182\uA183\uA184"+
+            "\uA185\uA186\uA187\uA188\uA189\uA18A\uA18B\uA18C"+
+            "\uA18D\uA18E\uA18F\uA190\uA191\uA193\uA194\uA195"+
+            "\uA196\uA197\uA198\uA199\uA19A\uA19B\uA19C\uA19D"+
+            "\uA1A1\uA1A2\uA1A3\uA1A4\uA1A5\uA1A6\uA1A7\uA1A8"+
+            "\uA1A9\uA1AA\uA1AB\uA1AC\uA1AD\uA1AE\uA1AF\uA1B0"+
+            "\uA1B1\uA1B3\uA1B4\uA1B5\uA1B6\uA1B7\uA1B8\uA1B9"+
+            "\uA1BA\uA1BB\uA1BC\uA1BD\uA1C1\uA1C2\uA1C3\uA1C4"+
+            "\uA1C5\uA1C6\uA1C7\uA1C8\uA1C9\uA1CA\uA1CB\uA1CC"+
+            "\uA1CD\uA1CE\uA1CF\uA1D0\uA1D1\uA1D3\uA1D4\uA1D5"+
+            "\uA1D6\uA1D7\uA1D8\uA1D9\uA1DA\uA1DB\uA1DC\uA1DD"+
+            "\uA1E1\uA1E2\uA1E3\uA1E4\uA1E5\uA1E6\uA1E7\uA1E8"+
+            "\uA1E9\uA1EA\uA1EB\uA1EC\uA1ED\uA1EE\uA1EF\uA1F0"+
+            "\uA1F1\uA1F3\uA1F4\uA1F5\uA1F6\uA1F7\uA1F8\uA1F9"+
+            "\uA1FA\uA1FB\uA1FC\uA1FD\uA241\uA242\uA243\uA244"+
+            "\uA245\uA246\uA247\uA248\uA249\uA24A\uA24B\uA24C"+
+            "\uA24D\uA24E\uA24F\uA250\uA251\uA253\uA254\uA255"+
+            "\uA256\uA257\uA258\uA259\uA25A\uA25B\uA25C\uA25D"+
+            "\uA261\uA262\uA263\uA264\uA265\uA266\uA267\uA268"+
+            "\uA269\uA26A\uA26B\uA26C\uA26D\uA26E\uA26F\uA270"+
+            "\uA271\uA273\uA274\uA275\uA276\uA277\uA278\uA279"+
+            "\uA27A\uA27B\uA27C\uA27D\uA281\uA282\uA283\uA284"+
+            "\uA285\uA286\uA287\uA288\uA289\uA28A\uA28B\uA28C"+
+            "\uA28D\uA28E\uA28F\uA290\uA291\uA293\uA294\uA295"+
+            "\uA296\uA297\uA298\uA299\uA29A\uA29B\uA29C\uA29D"+
+            "\uA2A1\uA2A2\uA2A3\uA2A4\uA2A5\uA2A6\uA2A7\uA2A8"+
+            "\uA2A9\uA2AA\uA2AB\uA2AC\uA2AD\uA2AE\uA2AF\uA2B0"+
+            "\uA2B1\uA2B3\uA2B4\uA2B5\uA2B6\uA2B7\uA2B8\uA2B9"+
+            "\uA2BA\uA2BB\uA2BC\uA2BD\uA2C1\uA2C2\uA2C3\uA2C4"+
+            "\uA2C5\uA2C6\uA2C7\uA2C8\uA2C9\uA2CA\uA2CB\uA2CC"+
+            "\uA2CD\uA2CE\uA2CF\uA2D0\uA2D1\uA2D3\uA2D4\uA2D5"+
+            "\uA2D6\uA2D7\uA2D8\uA2D9\uA2DA\uA2DB\uA2DC\uA2DD"+
+            "\uA2E1\uA2E2\uA2E3\uA2E4\uA2E5\uA2E6\uA2E7\uA2E8"+
+            "\uA2E9\uA2EA\uA2EB\uA2EC\uA2ED\uA2EE\uA2EF\uA2F0"+
+            "\uA2F1\uA2F3\uA2F4\uA2F5\uA2F6\uA2F7\uA2F8\uA2F9"+
+            "\uA2FA\uA2FB\uA2FC\uA2FD\uA341\uA342\uA343\uA344"+
+            "\uA345\uA346\uA347\uA348\uA349\uA34A\uA34B\uA34C"+
+            "\uA34D\uA34E\uA34F\uA350\uA351\uA353\uA354\uA355"+
+            "\uA356\uA357\uA358\uA359\uA35A\uA35B\uA35C\uA35D"+
+            "\uA361\uA362\uA363\uA364\uA365\uA366\uA367\uA368"+
+            "\uA369\uA36A\uA36B\uA36C\uA36D\uA36E\uA36F\uA370"+
+            "\uA371\uA373\uA374\uA375\uA376\uA377\uA378\uA379"+
+            "\uA37A\uA37B\uA37C\uA37D\uA381\uA382\uA383\uA384"+
+            "\uA385\uA386\uA387\uA388\uA389\uA38A\uA38B\uA38C"+
+            "\uA38D\uA38E\uA38F\uA390\uA391\uA393\uA394\uA395"+
+            "\uA396\uA397\uA398\uA399\uA39A\uA39B\uA39C\uA39D"+
+            "\uA3A1\uA3A2\uA3A3\uA3A4\uA3A5\uA3A6\uA3A7\uA3A8"+
+            "\uA3A9\uA3AA\uA3AB\uA3AC\uA3AD\uA3AE\uA3AF\uA3B0"+
+            "\uA3B1\uA3B3\uA3B4\uA3B5\uA3B6\uA3B7\uA3B8\uA3B9"+
+            "\uA3BA\uA3BB\uA3BC\uA3BD\uA461\uA462\uA463\uA464"+
+            "\uA465\uA466\uA467\uA468\uA469\uA46A\uA46B\uA46C"+
+            "\uA46D\uA46E\uA46F\uA470\uA471\uA473\uA474\uA475"+
+            "\uA476\uA477\uA478\uA479\uA47A\uA47B\uA47C\uA47D"+
+            "\uA481\uA482\uA483\uA484\uA485\uA486\uA487\uA488"+
+            "\uA489\uA48A\uA48B\uA48C\uA48D\uA48E\uA48F\uA490"+
+            "\uA491\uA493\uA494\uA495\uA496\uA497\uA498\uA499"+
+            "\uA49A\uA49B\uA49C\uA49D\uA4A1\uA4A2\uA4A3\uA4A4"+
+            "\uA4A5\uA4A6\uA4A7\uA4A8\uA4A9\uA4AA\uA4AB\uA4AC"+
+            "\uA4AD\uA4AE\uA4AF\uA4B0\uA4B1\uA4B3\uA4B4\uA4B5"+
+            "\uA4B6\uA4B7\uA4B8\uA4B9\uA4BA\uA4BB\uA4BC\uA4BD"+
+            "\uA4C1\uA4C2\uA4C3\uA4C4\uA4C5\uA4C6\uA4C7\uA4C8"+
+            "\uA4C9\uA4CA\uA4CB\uA4CC\uA4CD\uA4CE\uA4CF\uA4D0"+
+            "\uA4D1\uA4D3\uA4D4\uA4D5\uA4D6\uA4D7\uA4D8\uA4D9"+
+            "\uA4DA\uA4DB\uA4DC\uA4DD\uA4E1\uA4E2\uA4E3\uA4E4"+
+            "\uA4E5\uA4E6\uA4E7\uA4E8\uA4E9\uA4EA\uA4EB\uA4EC"+
+            "\uA4ED\uA4EE\uA4EF\uA4F0\uA4F1\uA4F3\uA4F4\uA4F5"+
+            "\uA4F6\uA4F7\uA4F8\uA4F9\uA4FA\uA4FB\uA4FC\uA4FD"+
+            "\uA541\uA542\uA543\uA544\uA545\uA546\uA547\uA548"+
+            "\uA549\uA54A\uA54B\uA54C\uA54D\uA54E\uA54F\uA550"+
+            "\uA551\uA553\uA554\uA555\uA556\uA557\uA558\uA559"+
+            "\uA55A\uA55B\uA55C\uA55D\uA561\uA562\uA563\uA564"+
+            "\uA565\uA566\uA567\uA568\uA569\uA56A\uA56B\uA56C"+
+            "\uA56D\uA56E\uA56F\uA570\uA571\uA573\uA574\uA575"+
+            "\uA576\uA577\uA578\uA579\uA57A\uA57B\uA57C\uA57D"+
+            "\uA581\uA582\uA583\uA584\uA585\uA586\uA587\uA588"+
+            "\uA589\uA58A\uA58B\uA58C\uA58D\uA58E\uA58F\uA590"+
+            "\uA591\uA593\uA594\uA595\uA596\uA597\uA598\uA599"+
+            "\uA59A\uA59B\uA59C\uA59D\uA5A1\uA5A2\uA5A3\uA5A4"+
+            "\uA5A5\uA5A6\uA5A7\uA5A8\uA5A9\uA5AA\uA5AB\uA5AC"+
+            "\uA5AD\uA5AE\uA5AF\uA5B0\uA5B1\uA5B3\uA5B4\uA5B5"+
+            "\uA5B6\uA5B7\uA5B8\uA5B9\uA5BA\uA5BB\uA5BC\uA5BD"+
+            "\uA5C1\uA5C2\uA5C3\uA5C4\uA5C5\uA5C6\uA5C7\uA5C8"+
+            "\uA5C9\uA5CA\uA5CB\uA5CC\uA5CD\uA5CE\uA5CF\uA5D0"+
+            "\uA5D1\uA5D3\uA5D4\uA5D5\uA5D6\uA5D7\uA5D8\uA5D9"+
+            "\uA5DA\uA5DB\uA5DC\uA5DD\uA5E1\uA5E2\uA5E3\uA5E4"+
+            "\uA5E5\uA5E6\uA5E7\uA5E8\uA5E9\uA5EA\uA5EB\uA5EC"+
+            "\uA5ED\uA5EE\uA5EF\uA5F0\uA5F1\uA5F3\uA5F4\uA5F5"+
+            "\uA5F6\uA5F7\uA5F8\uA5F9\uA5FA\uA5FB\uA5FC\uA5FD"+
+            "\uA641\uA642\uA643\uA644\uA645\uA646\uA647\uA648"+
+            "\uA649\uA64A\uA64B\uA64C\uA64D\uA64E\uA64F\uA650"+
+            "\uA651\uA653\uA654\uA655\uA656\uA657\uA658\uA659"+
+            "\uA65A\uA65B\uA65C\uA65D\uA661\uA662\uA663\uA664"+
+            "\uA665\uA666\uA667\uA668\uA669\uA66A\uA66B\uA66C"+
+            "\uA66D\uA66E\uA66F\uA670\uA671\uA673\uA674\uA675"+
+            "\uA676\uA677\uA678\uA679\uA67A\uA67B\uA67C\uA67D"+
+            "\uA681\uA682\uA683\uA684\uA685\uA686\uA687\uA688"+
+            "\uA689\uA68A\uA68B\uA68C\uA68D\uA68E\uA68F\uA690"+
+            "\uA691\uA693\uA694\uA695\uA696\uA697\uA698\uA699"+
+            "\uA69A\uA69B\uA69C\uA69D\uA6A1\uA6A2\uA6A3\uA6A4"+
+            "\uA6A5\uA6A6\uA6A7\uA6A8\uA6A9\uA6AA\uA6AB\uA6AC"+
+            "\uA6AD\uA6AE\uA6AF\uA6B0\uA6B1\uA6B3\uA6B4\uA6B5"+
+            "\uA6B6\uA6B7\uA6B8\uA6B9\uA6BA\uA6BB\uA6BC\uA6BD"+
+            "\uA6C1\uA6C2\uA6C3\uA6C4\uA6C5\uA6C6\uA6C7\uA6C8"+
+            "\uA6C9\uA6CA\uA6CB\uA6CC\uA6CD\uA6CE\uA6CF\uA6D0"+
+            "\uA6D1\uA6D3\uA6D4\uA6D5\uA6D6\uA6D7\uA6D8\uA6D9"+
+            "\uA6DA\uA6DB\uA6DC\uA6DD\uA6E1\uA6E2\uA6E3\uA6E4"+
+            "\uA6E5\uA6E6\uA6E7\uA6E8\uA6E9\uA6EA\uA6EB\uA6EC"+
+            "\uA6ED\uA6EE\uA6EF\uA6F0\uA6F1\uA6F3\uA6F4\uA6F5"+
+            "\uA6F6\uA6F7\uA6F8\uA6F9\uA6FA\uA6FB\uA6FC\uA6FD"+
+            "\uA741\uA742\uA743\uA744\uA745\uA746\uA747\uA748"+
+            "\uA749\uA74A\uA74B\uA74C\uA74D\uA74E\uA74F\uA750"+
+            "\uA751\uA753\uA754\uA755\uA756\uA757\uA758\uA759"+
+            "\uA75A\uA75B\uA75C\uA75D\uA761\uA762\uA763\uA764"+
+            "\uA765\uA766\uA767\uA768\uA769\uA76A\uA76B\uA76C"+
+            "\uA76D\uA76E\uA76F\uA770\uA771\uA773\uA774\uA775"+
+            "\uA776\uA777\uA778\uA779\uA77A\uA77B\uA77C\uA77D"+
+            "\uA781\uA782\uA783\uA784\uA785\uA786\uA787\uA788"+
+            "\uA789\uA78A\uA78B\uA78C\uA78D\uA78E\uA78F\uA790"+
+            "\uA791\uA793\uA794\uA795\uA796\uA797\uA798\uA799"+
+            "\uA79A\uA79B\uA79C\uA79D\uA7A1\uA7A2\uA7A3\uA7A4"+
+            "\uA7A5\uA7A6\uA7A7\uA7A8\uA7A9\uA7AA\uA7AB\uA7AC"+
+            "\uA7AD\uA7AE\uA7AF\uA7B0\uA7B1\uA7B3\uA7B4\uA7B5"+
+            "\uA7B6\uA7B7\uA7B8\uA7B9\uA7BA\uA7BB\uA7BC\uA7BD"+
+            "\uA861\uA862\uA863\uA864\uA865\uA866\uA867\uA868"+
+            "\uA869\uA86A\uA86B\uA86C\uA86D\uA86E\uA86F\uA870"+
+            "\uA871\uA873\uA874\uA875\uA876\uA877\uA878\uA879"+
+            "\uA87A\uA87B\uA87C\uA87D\uA881\uA882\uA883\uA884"+
+            "\uA885\uA886\uA887\uA888\uA889\uA88A\uA88B\uA88C"+
+            "\uA88D\uA88E\uA88F\uA890\uA891\uA893\uA894\uA895"+
+            "\uA896\uA897\uA898\uA899\uA89A\uA89B\uA89C\uA89D"+
+            "\uA8A1\uA8A2\uA8A3\uA8A4\uA8A5\uA8A6\uA8A7\uA8A8"+
+            "\uA8A9\uA8AA\uA8AB\uA8AC\uA8AD\uA8AE\uA8AF\uA8B0"+
+            "\uA8B1\uA8B3\uA8B4\uA8B5\uA8B6\uA8B7\uA8B8\uA8B9"+
+            "\uA8BA\uA8BB\uA8BC\uA8BD\uA8C1\uA8C2\uA8C3\uA8C4"+
+            "\uA8C5\uA8C6\uA8C7\uA8C8\uA8C9\uA8CA\uA8CB\uA8CC"+
+            "\uA8CD\uA8CE\uA8CF\uA8D0\uA8D1\uA8D3\uA8D4\uA8D5"+
+            "\uA8D6\uA8D7\uA8D8\uA8D9\uA8DA\uA8DB\uA8DC\uA8DD"+
+            "\uA8E1\uA8E2\uA8E3\uA8E4\uA8E5\uA8E6\uA8E7\uA8E8"+
+            "\uA8E9\uA8EA\uA8EB\uA8EC\uA8ED\uA8EE\uA8EF\uA8F0"+
+            "\uA8F1\uA8F3\uA8F4\uA8F5\uA8F6\uA8F7\uA8F8\uA8F9"+
+            "\uA8FA\uA8FB\uA8FC\uA8FD\uA941\uA942\uA943\uA944"+
+            "\uA945\uA946\uA947\uA948\uA949\uA94A\uA94B\uA94C"+
+            "\uA94D\uA94E\uA94F\uA950\uA951\uA953\uA954\uA955"+
+            "\uA956\uA957\uA958\uA959\uA95A\uA95B\uA95C\uA95D"+
+            "\uA961\uA962\uA963\uA964\uA965\uA966\uA967\uA968"+
+            "\uA969\uA96A\uA96B\uA96C\uA96D\uA96E\uA96F\uA970"+
+            "\uA971\uA973\uA974\uA975\uA976\uA977\uA978\uA979"+
+            "\uA97A\uA97B\uA97C\uA97D\uA981\uA982\uA983\uA984"+
+            "\uA985\uA986\uA987\uA988\uA989\uA98A\uA98B\uA98C"+
+            "\uA98D\uA98E\uA98F\uA990\uA991\uA993\uA994\uA995"+
+            "\uA996\uA997\uA998\uA999\uA99A\uA99B\uA99C\uA99D"+
+            "\uA9A1\uA9A2\uA9A3\uA9A4\uA9A5\uA9A6\uA9A7\uA9A8"+
+            "\uA9A9\uA9AA\uA9AB\uA9AC\uA9AD\uA9AE\uA9AF\uA9B0"+
+            "\uA9B1\uA9B3\uA9B4\uA9B5\uA9B6\uA9B7\uA9B8\uA9B9"+
+            "\uA9BA\uA9BB\uA9BC\uA9BD\uA9C1\uA9C2\uA9C3\uA9C4"+
+            "\uA9C5\uA9C6\uA9C7\uA9C8\uA9C9\uA9CA\uA9CB\uA9CC"+
+            "\uA9CD\uA9CE\uA9CF\uA9D0\uA9D1\uA9D3\uA9D4\uA9D5"+
+            "\uA9D6\uA9D7\uA9D8\uA9D9\uA9DA\uA9DB\uA9DC\uA9DD"+
+            "\uA9E1\uA9E2\uA9E3\uA9E4\uA9E5\uA9E6\uA9E7\uA9E8"+
+            "\uA9E9\uA9EA\uA9EB\uA9EC\uA9ED\uA9EE\uA9EF\uA9F0"+
+            "\uA9F1\uA9F3\uA9F4\uA9F5\uA9F6\uA9F7\uA9F8\uA9F9"+
+            "\uA9FA\uA9FB\uA9FC\uA9FD\uAA41\uAA42\uAA43\uAA44"+
+            "\uAA45\uAA46\uAA47\uAA48\uAA49\uAA4A\uAA4B\uAA4C"+
+            "\uAA4D\uAA4E\uAA4F\uAA50\uAA51\uAA53\uAA54\uAA55"+
+            "\uAA56\uAA57\uAA58\uAA59\uAA5A\uAA5B\uAA5C\uAA5D"+
+            "\uAA61\uAA62\uAA63\uAA64\uAA65\uAA66\uAA67\uAA68"+
+            "\uAA69\uAA6A\uAA6B\uAA6C\uAA6D\uAA6E\uAA6F\uAA70"+
+            "\uAA71\uAA73\uAA74\uAA75\uAA76\uAA77\uAA78\uAA79"+
+            "\uAA7A\uAA7B\uAA7C\uAA7D\uAA81\uAA82\uAA83\uAA84"+
+            "\uAA85\uAA86\uAA87\uAA88\uAA89\uAA8A\uAA8B\uAA8C"+
+            "\uAA8D\uAA8E\uAA8F\uAA90\uAA91\uAA93\uAA94\uAA95"+
+            "\uAA96\uAA97\uAA98\uAA99\uAA9A\uAA9B\uAA9C\uAA9D"+
+            "\uAAA1\uAAA2\uAAA3\uAAA4\uAAA5\uAAA6\uAAA7\uAAA8"+
+            "\uAAA9\uAAAA\uAAAB\uAAAC\uAAAD\uAAAE\uAAAF\uAAB0"+
+            "\uAAB1\uAAB3\uAAB4\uAAB5\uAAB6\uAAB7\uAAB8\uAAB9"+
+            "\uAABA\uAABB\uAABC\uAABD\uAAC1\uAAC2\uAAC3\uAAC4"+
+            "\uAAC5\uAAC6\uAAC7\uAAC8\uAAC9\uAACA\uAACB\uAACC"+
+            "\uAACD\uAACE\uAACF\uAAD0\uAAD1\uAAD3\uAAD4\uAAD5"+
+            "\uAAD6\uAAD7\uAAD8\uAAD9\uAADA\uAADB\uAADC\uAADD"+
+            "\uAAE1\uAAE2\uAAE3\uAAE4\uAAE5\uAAE6\uAAE7\uAAE8"+
+            "\uAAE9\uAAEA\uAAEB\uAAEC\uAAED\uAAEE\uAAEF\uAAF0"+
+            "\uAAF1\uAAF3\uAAF4\uAAF5\uAAF6\uAAF7\uAAF8\uAAF9"+
+            "\uAAFA\uAAFB\uAAFC\uAAFD\uAB41\uAB42\uAB43\uAB44"+
+            "\uAB45\uAB46\uAB47\uAB48\uAB49\uAB4A\uAB4B\uAB4C"+
+            "\uAB4D\uAB4E\uAB4F\uAB50\uAB51\uAB53\uAB54\uAB55"+
+            "\uAB56\uAB57\uAB58\uAB59\uAB5A\uAB5B\uAB5C\uAB5D"+
+            "\uAB61\uAB62\uAB63\uAB64\uAB65\uAB66\uAB67\uAB68"+
+            "\uAB69\uAB6A\uAB6B\uAB6C\uAB6D\uAB6E\uAB6F\uAB70"+
+            "\uAB71\uAB73\uAB74\uAB75\uAB76\uAB77\uAB78\uAB79"+
+            "\uAB7A\uAB7B\uAB7C\uAB7D\uAB81\uAB82\uAB83\uAB84"+
+            "\uAB85\uAB86\uAB87\uAB88\uAB89\uAB8A\uAB8B\uAB8C"+
+            "\uAB8D\uAB8E\uAB8F\uAB90\uAB91\uAB93\uAB94\uAB95"+
+            "\uAB96\uAB97\uAB98\uAB99\uAB9A\uAB9B\uAB9C\uAB9D"+
+            "\uABA1\uABA2\uABA3\uABA4\uABA5\uABA6\uABA7\uABA8"+
+            "\uABA9\uABAA\uABAB\uABAC\uABAD\uABAE\uABAF\uABB0"+
+            "\uABB1\uABB3\uABB4\uABB5\uABB6\uABB7\uABB8\uABB9"+
+            "\uABBA\uABBB\uABBC\uABBD\uAC61\uAC62\uAC63\uAC64"+
+            "\uAC65\uAC66\uAC67\uAC68\uAC69\uAC6A\uAC6B\uAC6C"+
+            "\uAC6D\uAC6E\uAC6F\uAC70\uAC71\uAC73\uAC74\uAC75"+
+            "\uAC76\uAC77\uAC78\uAC79\uAC7A\uAC7B\uAC7C\uAC7D"+
+            "\uAC81\uAC82\uAC83\uAC84\uAC85\uAC86\uAC87\uAC88"+
+            "\uAC89\uAC8A\uAC8B\uAC8C\uAC8D\uAC8E\uAC8F\uAC90"+
+            "\uAC91\uAC93\uAC94\uAC95\uAC96\uAC97\uAC98\uAC99"+
+            "\uAC9A\uAC9B\uAC9C\uAC9D\uACA1\uACA2\uACA3\uACA4"+
+            "\uACA5\uACA6\uACA7\uACA8\uACA9\uACAA\uACAB\uACAC"+
+            "\uACAD\uACAE\uACAF\uACB0\uACB1\uACB3\uACB4\uACB5"+
+            "\uACB6\uACB7\uACB8\uACB9\uACBA\uACBB\uACBC\uACBD"+
+            "\uACC1\uACC2\uACC3\uACC4\uACC5\uACC6\uACC7\uACC8"+
+            "\uACC9\uACCA\uACCB\uACCC\uACCD\uACCE\uACCF\uACD0"+
+            "\uACD1\uACD3\uACD4\uACD5\uACD6\uACD7\uACD8\uACD9"+
+            "\uACDA\uACDB\uACDC\uACDD\uACE1\uACE2\uACE3\uACE4"+
+            "\uACE5\uACE6\uACE7\uACE8\uACE9\uACEA\uACEB\uACEC"+
+            "\uACED\uACEE\uACEF\uACF0\uACF1\uACF3\uACF4\uACF5"+
+            "\uACF6\uACF7\uACF8\uACF9\uACFA\uACFB\uACFC\uACFD"+
+            "\uAD41\uAD42\uAD43\uAD44\uAD45\uAD46\uAD47\uAD48"+
+            "\uAD49\uAD4A\uAD4B\uAD4C\uAD4D\uAD4E\uAD4F\uAD50"+
+            "\uAD51\uAD53\uAD54\uAD55\uAD56\uAD57\uAD58\uAD59"+
+            "\uAD5A\uAD5B\uAD5C\uAD5D\uAD61\uAD62\uAD63\uAD64"+
+            "\uAD65\uAD66\uAD67\uAD68\uAD69\uAD6A\uAD6B\uAD6C"+
+            "\uAD6D\uAD6E\uAD6F\uAD70\uAD71\uAD73\uAD74\uAD75"+
+            "\uAD76\uAD77\uAD78\uAD79\uAD7A\uAD7B\uAD7C\uAD7D"+
+            "\uAD81\uAD82\uAD83\uAD84\uAD85\uAD86\uAD87\uAD88"+
+            "\uAD89\uAD8A\uAD8B\uAD8C\uAD8D\uAD8E\uAD8F\uAD90"+
+            "\uAD91\uAD93\uAD94\uAD95\uAD96\uAD97\uAD98\uAD99"+
+            "\uAD9A\uAD9B\uAD9C\uAD9D\uADA1\uADA2\uADA3\uADA4"+
+            "\uADA5\uADA6\uADA7\uADA8\uADA9\uADAA\uADAB\uADAC"+
+            "\uADAD\uADAE\uADAF\uADB0\uADB1\uADB3\uADB4\uADB5"+
+            "\uADB6\uADB7\uADB8\uADB9\uADBA\uADBB\uADBC\uADBD"+
+            "\uADC1\uADC2\uADC3\uADC4\uADC5\uADC6\uADC7\uADC8"+
+            "\uADC9\uADCA\uADCB\uADCC\uADCD\uADCE\uADCF\uADD0"+
+            "\uADD1\uADD3\uADD4\uADD5\uADD6\uADD7\uADD8\uADD9"+
+            "\uADDA\uADDB\uADDC\uADDD\uADE1\uADE2\uADE3\uADE4"+
+            "\uADE5\uADE6\uADE7\uADE8\uADE9\uADEA\uADEB\uADEC"+
+            "\uADED\uADEE\uADEF\uADF0\uADF1\uADF3\uADF4\uADF5"+
+            "\uADF6\uADF7\uADF8\uADF9\uADFA\uADFB\uADFC\uADFD"+
+            "\uAE41\uAE42\uAE43\uAE44\uAE45\uAE46\uAE47\uAE48"+
+            "\uAE49\uAE4A\uAE4B\uAE4C\uAE4D\uAE4E\uAE4F\uAE50"+
+            "\uAE51\uAE53\uAE54\uAE55\uAE56\uAE57\uAE58\uAE59"+
+            "\uAE5A\uAE5B\uAE5C\uAE5D\uAE61\uAE62\uAE63\uAE64"+
+            "\uAE65\uAE66\uAE67\uAE68\uAE69\uAE6A\uAE6B\uAE6C"+
+            "\uAE6D\uAE6E\uAE6F\uAE70\uAE71\uAE73\uAE74\uAE75"+
+            "\uAE76\uAE77\uAE78\uAE79\uAE7A\uAE7B\uAE7C\uAE7D"+
+            "\uAE81\uAE82\uAE83\uAE84\uAE85\uAE86\uAE87\uAE88"+
+            "\uAE89\uAE8A\uAE8B\uAE8C\uAE8D\uAE8E\uAE8F\uAE90"+
+            "\uAE91\uAE93\uAE94\uAE95\uAE96\uAE97\uAE98\uAE99"+
+            "\uAE9A\uAE9B\uAE9C\uAE9D\uAEA1\uAEA2\uAEA3\uAEA4"+
+            "\uAEA5\uAEA6\uAEA7\uAEA8\uAEA9\uAEAA\uAEAB\uAEAC"+
+            "\uAEAD\uAEAE\uAEAF\uAEB0\uAEB1\uAEB3\uAEB4\uAEB5"+
+            "\uAEB6\uAEB7\uAEB8\uAEB9\uAEBA\uAEBB\uAEBC\uAEBD"+
+            "\uAEC1\uAEC2\uAEC3\uAEC4\uAEC5\uAEC6\uAEC7\uAEC8"+
+            "\uAEC9\uAECA\uAECB\uAECC\uAECD\uAECE\uAECF\uAED0"+
+            "\uAED1\uAED3\uAED4\uAED5\uAED6\uAED7\uAED8\uAED9"+
+            "\uAEDA\uAEDB\uAEDC\uAEDD\uAEE1\uAEE2\uAEE3\uAEE4"+
+            "\uAEE5\uAEE6\uAEE7\uAEE8\uAEE9\uAEEA\uAEEB\uAEEC"+
+            "\uAEED\uAEEE\uAEEF\uAEF0\uAEF1\uAEF3\uAEF4\uAEF5"+
+            "\uAEF6\uAEF7\uAEF8\uAEF9\uAEFA\uAEFB\uAEFC\uAEFD"+
+            "\uAF41\uAF42\uAF43\uAF44\uAF45\uAF46\uAF47\uAF48"+
+            "\uAF49\uAF4A\uAF4B\uAF4C\uAF4D\uAF4E\uAF4F\uAF50"+
+            "\uAF51\uAF53\uAF54\uAF55\uAF56\uAF57\uAF58\uAF59"+
+            "\uAF5A\uAF5B\uAF5C\uAF5D\uAF61\uAF62\uAF63\uAF64"+
+            "\uAF65\uAF66\uAF67\uAF68\uAF69\uAF6A\uAF6B\uAF6C"+
+            "\uAF6D\uAF6E\uAF6F\uAF70\uAF71\uAF73\uAF74\uAF75"+
+            "\uAF76\uAF77\uAF78\uAF79\uAF7A\uAF7B\uAF7C\uAF7D"+
+            "\uAF81\uAF82\uAF83\uAF84\uAF85\uAF86\uAF87\uAF88"+
+            "\uAF89\uAF8A\uAF8B\uAF8C\uAF8D\uAF8E\uAF8F\uAF90"+
+            "\uAF91\uAF93\uAF94\uAF95\uAF96\uAF97\uAF98\uAF99"+
+            "\uAF9A\uAF9B\uAF9C\uAF9D\uAFA1\uAFA2\uAFA3\uAFA4"+
+            "\uAFA5\uAFA6\uAFA7\uAFA8\uAFA9\uAFAA\uAFAB\uAFAC"+
+            "\uAFAD\uAFAE\uAFAF\uAFB0\uAFB1\uAFB3\uAFB4\uAFB5"+
+            "\uAFB6\uAFB7\uAFB8\uAFB9\uAFBA\uAFBB\uAFBC\uAFBD"+
+            "\uB061\uB062\uB063\uB064\uB065\uB066\uB067\uB068"+
+            "\uB069\uB06A\uB06B\uB06C\uB06D\uB06E\uB06F\uB070"+
+            "\uB071\uB073\uB074\uB075\uB076\uB077\uB078\uB079"+
+            "\uB07A\uB07B\uB07C\uB07D\uB081\uB082\uB083\uB084"+
+            "\uB085\uB086\uB087\uB088\uB089\uB08A\uB08B\uB08C"+
+            "\uB08D\uB08E\uB08F\uB090\uB091\uB093\uB094\uB095"+
+            "\uB096\uB097\uB098\uB099\uB09A\uB09B\uB09C\uB09D"+
+            "\uB0A1\uB0A2\uB0A3\uB0A4\uB0A5\uB0A6\uB0A7\uB0A8"+
+            "\uB0A9\uB0AA\uB0AB\uB0AC\uB0AD\uB0AE\uB0AF\uB0B0"+
+            "\uB0B1\uB0B3\uB0B4\uB0B5\uB0B6\uB0B7\uB0B8\uB0B9"+
+            "\uB0BA\uB0BB\uB0BC\uB0BD\uB0C1\uB0C2\uB0C3\uB0C4"+
+            "\uB0C5\uB0C6\uB0C7\uB0C8\uB0C9\uB0CA\uB0CB\uB0CC"+
+            "\uB0CD\uB0CE\uB0CF\uB0D0\uB0D1\uB0D3\uB0D4\uB0D5"+
+            "\uB0D6\uB0D7\uB0D8\uB0D9\uB0DA\uB0DB\uB0DC\uB0DD"+
+            "\uB0E1\uB0E2\uB0E3\uB0E4\uB0E5\uB0E6\uB0E7\uB0E8"+
+            "\uB0E9\uB0EA\uB0EB\uB0EC\uB0ED\uB0EE\uB0EF\uB0F0"+
+            "\uB0F1\uB0F3\uB0F4\uB0F5\uB0F6\uB0F7\uB0F8\uB0F9"+
+            "\uB0FA\uB0FB\uB0FC\uB0FD\uB141\uB142\uB143\uB144"+
+            "\uB145\uB146\uB147\uB148\uB149\uB14A\uB14B\uB14C"+
+            "\uB14D\uB14E\uB14F\uB150\uB151\uB153\uB154\uB155"+
+            "\uB156\uB157\uB158\uB159\uB15A\uB15B\uB15C\uB15D"+
+            "\uB161\uB162\uB163\uB164\uB165\uB166\uB167\uB168"+
+            "\uB169\uB16A\uB16B\uB16C\uB16D\uB16E\uB16F\uB170"+
+            "\uB171\uB173\uB174\uB175\uB176\uB177\uB178\uB179"+
+            "\uB17A\uB17B\uB17C\uB17D\uB181\uB182\uB183\uB184"+
+            "\uB185\uB186\uB187\uB188\uB189\uB18A\uB18B\uB18C"+
+            "\uB18D\uB18E\uB18F\uB190\uB191\uB193\uB194\uB195"+
+            "\uB196\uB197\uB198\uB199\uB19A\uB19B\uB19C\uB19D"+
+            "\uB1A1\uB1A2\uB1A3\uB1A4\uB1A5\uB1A6\uB1A7\uB1A8"+
+            "\uB1A9\uB1AA\uB1AB\uB1AC\uB1AD\uB1AE\uB1AF\uB1B0"+
+            "\uB1B1\uB1B3\uB1B4\uB1B5\uB1B6\uB1B7\uB1B8\uB1B9"+
+            "\uB1BA\uB1BB\uB1BC\uB1BD\uB1C1\uB1C2\uB1C3\uB1C4"+
+            "\uB1C5\uB1C6\uB1C7\uB1C8\uB1C9\uB1CA\uB1CB\uB1CC"+
+            "\uB1CD\uB1CE\uB1CF\uB1D0\uB1D1\uB1D3\uB1D4\uB1D5"+
+            "\uB1D6\uB1D7\uB1D8\uB1D9\uB1DA\uB1DB\uB1DC\uB1DD"+
+            "\uB1E1\uB1E2\uB1E3\uB1E4\uB1E5\uB1E6\uB1E7\uB1E8"+
+            "\uB1E9\uB1EA\uB1EB\uB1EC\uB1ED\uB1EE\uB1EF\uB1F0"+
+            "\uB1F1\uB1F3\uB1F4\uB1F5\uB1F6\uB1F7\uB1F8\uB1F9"+
+            "\uB1FA\uB1FB\uB1FC\uB1FD\uB241\uB242\uB243\uB244"+
+            "\uB245\uB246\uB247\uB248\uB249\uB24A\uB24B\uB24C"+
+            "\uB24D\uB24E\uB24F\uB250\uB251\uB253\uB254\uB255"+
+            "\uB256\uB257\uB258\uB259\uB25A\uB25B\uB25C\uB25D"+
+            "\uB261\uB262\uB263\uB264\uB265\uB266\uB267\uB268"+
+            "\uB269\uB26A\uB26B\uB26C\uB26D\uB26E\uB26F\uB270"+
+            "\uB271\uB273\uB274\uB275\uB276\uB277\uB278\uB279"+
+            "\uB27A\uB27B\uB27C\uB27D\uB281\uB282\uB283\uB284"+
+            "\uB285\uB286\uB287\uB288\uB289\uB28A\uB28B\uB28C"+
+            "\uB28D\uB28E\uB28F\uB290\uB291\uB293\uB294\uB295"+
+            "\uB296\uB297\uB298\uB299\uB29A\uB29B\uB29C\uB29D"+
+            "\uB2A1\uB2A2\uB2A3\uB2A4\uB2A5\uB2A6\uB2A7\uB2A8"+
+            "\uB2A9\uB2AA\uB2AB\uB2AC\uB2AD\uB2AE\uB2AF\uB2B0"+
+            "\uB2B1\uB2B3\uB2B4\uB2B5\uB2B6\uB2B7\uB2B8\uB2B9"+
+            "\uB2BA\uB2BB\uB2BC\uB2BD\uB2C1\uB2C2\uB2C3\uB2C4"+
+            "\uB2C5\uB2C6\uB2C7\uB2C8\uB2C9\uB2CA\uB2CB\uB2CC"+
+            "\uB2CD\uB2CE\uB2CF\uB2D0\uB2D1\uB2D3\uB2D4\uB2D5"+
+            "\uB2D6\uB2D7\uB2D8\uB2D9\uB2DA\uB2DB\uB2DC\uB2DD"+
+            "\uB2E1\uB2E2\uB2E3\uB2E4\uB2E5\uB2E6\uB2E7\uB2E8"+
+            "\uB2E9\uB2EA\uB2EB\uB2EC\uB2ED\uB2EE\uB2EF\uB2F0"+
+            "\uB2F1\uB2F3\uB2F4\uB2F5\uB2F6\uB2F7\uB2F8\uB2F9"+
+            "\uB2FA\uB2FB\uB2FC\uB2FD\uB341\uB342\uB343\uB344"+
+            "\uB345\uB346\uB347\uB348\uB349\uB34A\uB34B\uB34C"+
+            "\uB34D\uB34E\uB34F\uB350\uB351\uB353\uB354\uB355"+
+            "\uB356\uB357\uB358\uB359\uB35A\uB35B\uB35C\uB35D"+
+            "\uB361\uB362\uB363\uB364\uB365\uB366\uB367\uB368"+
+            "\uB369\uB36A\uB36B\uB36C\uB36D\uB36E\uB36F\uB370"+
+            "\uB371\uB373\uB374\uB375\uB376\uB377\uB378\uB379"+
+            "\uB37A\uB37B\uB37C\uB37D\uB381\uB382\uB383\uB384"+
+            "\uB385\uB386\uB387\uB388\uB389\uB38A\uB38B\uB38C"+
+            "\uB38D\uB38E\uB38F\uB390\uB391\uB393\uB394\uB395"+
+            "\uB396\uB397\uB398\uB399\uB39A\uB39B\uB39C\uB39D"+
+            "\uB3A1\uB3A2\uB3A3\uB3A4\uB3A5\uB3A6\uB3A7\uB3A8"+
+            "\uB3A9\uB3AA\uB3AB\uB3AC\uB3AD\uB3AE\uB3AF\uB3B0"+
+            "\uB3B1\uB3B3\uB3B4\uB3B5\uB3B6\uB3B7\uB3B8\uB3B9"+
+            "\uB3BA\uB3BB\uB3BC\uB3BD\uB461\uB462\uB463\uB464"+
+            "\uB465\uB466\uB467\uB468\uB469\uB46A\uB46B\uB46C"+
+            "\uB46D\uB46E\uB46F\uB470\uB471\uB473\uB474\uB475"+
+            "\uB476\uB477\uB478\uB479\uB47A\uB47B\uB47C\uB47D"+
+            "\uB481\uB482\uB483\uB484\uB485\uB486\uB487\uB488"+
+            "\uB489\uB48A\uB48B\uB48C\uB48D\uB48E\uB48F\uB490"+
+            "\uB491\uB493\uB494\uB495\uB496\uB497\uB498\uB499"+
+            "\uB49A\uB49B\uB49C\uB49D\uB4A1\uB4A2\uB4A3\uB4A4"+
+            "\uB4A5\uB4A6\uB4A7\uB4A8\uB4A9\uB4AA\uB4AB\uB4AC"+
+            "\uB4AD\uB4AE\uB4AF\uB4B0\uB4B1\uB4B3\uB4B4\uB4B5"+
+            "\uB4B6\uB4B7\uB4B8\uB4B9\uB4BA\uB4BB\uB4BC\uB4BD"+
+            "\uB4C1\uB4C2\uB4C3\uB4C4\uB4C5\uB4C6\uB4C7\uB4C8"+
+            "\uB4C9\uB4CA\uB4CB\uB4CC\uB4CD\uB4CE\uB4CF\uB4D0"+
+            "\uB4D1\uB4D3\uB4D4\uB4D5\uB4D6\uB4D7\uB4D8\uB4D9"+
+            "\uB4DA\uB4DB\uB4DC\uB4DD\uB4E1\uB4E2\uB4E3\uB4E4"+
+            "\uB4E5\uB4E6\uB4E7\uB4E8\uB4E9\uB4EA\uB4EB\uB4EC"+
+            "\uB4ED\uB4EE\uB4EF\uB4F0\uB4F1\uB4F3\uB4F4\uB4F5"+
+            "\uB4F6\uB4F7\uB4F8\uB4F9\uB4FA\uB4FB\uB4FC\uB4FD"+
+            "\uB541\uB542\uB543\uB544\uB545\uB546\uB547\uB548"+
+            "\uB549\uB54A\uB54B\uB54C\uB54D\uB54E\uB54F\uB550"+
+            "\uB551\uB553\uB554\uB555\uB556\uB557\uB558\uB559"+
+            "\uB55A\uB55B\uB55C\uB55D\uB561\uB562\uB563\uB564"+
+            "\uB565\uB566\uB567\uB568\uB569\uB56A\uB56B\uB56C"+
+            "\uB56D\uB56E\uB56F\uB570\uB571\uB573\uB574\uB575"+
+            "\uB576\uB577\uB578\uB579\uB57A\uB57B\uB57C\uB57D"+
+            "\uB581\uB582\uB583\uB584\uB585\uB586\uB587\uB588"+
+            "\uB589\uB58A\uB58B\uB58C\uB58D\uB58E\uB58F\uB590"+
+            "\uB591\uB593\uB594\uB595\uB596\uB597\uB598\uB599"+
+            "\uB59A\uB59B\uB59C\uB59D\uB5A1\uB5A2\uB5A3\uB5A4"+
+            "\uB5A5\uB5A6\uB5A7\uB5A8\uB5A9\uB5AA\uB5AB\uB5AC"+
+            "\uB5AD\uB5AE\uB5AF\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5"+
+            "\uB5B6\uB5B7\uB5B8\uB5B9\uB5BA\uB5BB\uB5BC\uB5BD"+
+            "\uB5C1\uB5C2\uB5C3\uB5C4\uB5C5\uB5C6\uB5C7\uB5C8"+
+            "\uB5C9\uB5CA\uB5CB\uB5CC\uB5CD\uB5CE\uB5CF\uB5D0"+
+            "\uB5D1\uB5D3\uB5D4\uB5D5\uB5D6\uB5D7\uB5D8\uB5D9"+
+            "\uB5DA\uB5DB\uB5DC\uB5DD\uB5E1\uB5E2\uB5E3\uB5E4"+
+            "\uB5E5\uB5E6\uB5E7\uB5E8\uB5E9\uB5EA\uB5EB\uB5EC"+
+            "\uB5ED\uB5EE\uB5EF\uB5F0\uB5F1\uB5F3\uB5F4\uB5F5"+
+            "\uB5F6\uB5F7\uB5F8\uB5F9\uB5FA\uB5FB\uB5FC\uB5FD"+
+            "\uB641\uB642\uB643\uB644\uB645\uB646\uB647\uB648"+
+            "\uB649\uB64A\uB64B\uB64C\uB64D\uB64E\uB64F\uB650"+
+            "\uB651\uB653\uB654\uB655\uB656\uB657\uB658\uB659"+
+            "\uB65A\uB65B\uB65C\uB65D\uB661\uB662\uB663\uB664"+
+            "\uB665\uB666\uB667\uB668\uB669\uB66A\uB66B\uB66C"+
+            "\uB66D\uB66E\uB66F\uB670\uB671\uB673\uB674\uB675"+
+            "\uB676\uB677\uB678\uB679\uB67A\uB67B\uB67C\uB67D"+
+            "\uB681\uB682\uB683\uB684\uB685\uB686\uB687\uB688"+
+            "\uB689\uB68A\uB68B\uB68C\uB68D\uB68E\uB68F\uB690"+
+            "\uB691\uB693\uB694\uB695\uB696\uB697\uB698\uB699"+
+            "\uB69A\uB69B\uB69C\uB69D\uB6A1\uB6A2\uB6A3\uB6A4"+
+            "\uB6A5\uB6A6\uB6A7\uB6A8\uB6A9\uB6AA\uB6AB\uB6AC"+
+            "\uB6AD\uB6AE\uB6AF\uB6B0\uB6B1\uB6B3\uB6B4\uB6B5"+
+            "\uB6B6\uB6B7\uB6B8\uB6B9\uB6BA\uB6BB\uB6BC\uB6BD"+
+            "\uB6C1\uB6C2\uB6C3\uB6C4\uB6C5\uB6C6\uB6C7\uB6C8"+
+            "\uB6C9\uB6CA\uB6CB\uB6CC\uB6CD\uB6CE\uB6CF\uB6D0"+
+            "\uB6D1\uB6D3\uB6D4\uB6D5\uB6D6\uB6D7\uB6D8\uB6D9"+
+            "\uB6DA\uB6DB\uB6DC\uB6DD\uB6E1\uB6E2\uB6E3\uB6E4"+
+            "\uB6E5\uB6E6\uB6E7\uB6E8\uB6E9\uB6EA\uB6EB\uB6EC"+
+            "\uB6ED\uB6EE\uB6EF\uB6F0\uB6F1\uB6F3\uB6F4\uB6F5"+
+            "\uB6F6\uB6F7\uB6F8\uB6F9\uB6FA\uB6FB\uB6FC\uB6FD"+
+            "\uB741\uB742\uB743\uB744\uB745\uB746\uB747\uB748"+
+            "\uB749\uB74A\uB74B\uB74C\uB74D\uB74E\uB74F\uB750"+
+            "\uB751\uB753\uB754\uB755\uB756\uB757\uB758\uB759"+
+            "\uB75A\uB75B\uB75C\uB75D\uB761\uB762\uB763\uB764"+
+            "\uB765\uB766\uB767\uB768\uB769\uB76A\uB76B\uB76C"+
+            "\uB76D\uB76E\uB76F\uB770\uB771\uB773\uB774\uB775"+
+            "\uB776\uB777\uB778\uB779\uB77A\uB77B\uB77C\uB77D"+
+            "\uB781\uB782\uB783\uB784\uB785\uB786\uB787\uB788"+
+            "\uB789\uB78A\uB78B\uB78C\uB78D\uB78E\uB78F\uB790"+
+            "\uB791\uB793\uB794\uB795\uB796\uB797\uB798\uB799"+
+            "\uB79A\uB79B\uB79C\uB79D\uB7A1\uB7A2\uB7A3\uB7A4"+
+            "\uB7A5\uB7A6\uB7A7\uB7A8\uB7A9\uB7AA\uB7AB\uB7AC"+
+            "\uB7AD\uB7AE\uB7AF\uB7B0\uB7B1\uB7B3\uB7B4\uB7B5"+
+            "\uB7B6\uB7B7\uB7B8\uB7B9\uB7BA\uB7BB\uB7BC\uB7BD"+
+            "\uB861\uB862\uB863\uB864\uB865\uB866\uB867\uB868"+
+            "\uB869\uB86A\uB86B\uB86C\uB86D\uB86E\uB86F\uB870"+
+            "\uB871\uB873\uB874\uB875\uB876\uB877\uB878\uB879"+
+            "\uB87A\uB87B\uB87C\uB87D\uB881\uB882\uB883\uB884"+
+            "\uB885\uB886\uB887\uB888\uB889\uB88A\uB88B\uB88C"+
+            "\uB88D\uB88E\uB88F\uB890\uB891\uB893\uB894\uB895"+
+            "\uB896\uB897\uB898\uB899\uB89A\uB89B\uB89C\uB89D"+
+            "\uB8A1\uB8A2\uB8A3\uB8A4\uB8A5\uB8A6\uB8A7\uB8A8"+
+            "\uB8A9\uB8AA\uB8AB\uB8AC\uB8AD\uB8AE\uB8AF\uB8B0"+
+            "\uB8B1\uB8B3\uB8B4\uB8B5\uB8B6\uB8B7\uB8B8\uB8B9"+
+            "\uB8BA\uB8BB\uB8BC\uB8BD\uB8C1\uB8C2\uB8C3\uB8C4"+
+            "\uB8C5\uB8C6\uB8C7\uB8C8\uB8C9\uB8CA\uB8CB\uB8CC"+
+            "\uB8CD\uB8CE\uB8CF\uB8D0\uB8D1\uB8D3\uB8D4\uB8D5"+
+            "\uB8D6\uB8D7\uB8D8\uB8D9\uB8DA\uB8DB\uB8DC\uB8DD"+
+            "\uB8E1\uB8E2\uB8E3\uB8E4\uB8E5\uB8E6\uB8E7\uB8E8"+
+            "\uB8E9\uB8EA\uB8EB\uB8EC\uB8ED\uB8EE\uB8EF\uB8F0"+
+            "\uB8F1\uB8F3\uB8F4\uB8F5\uB8F6\uB8F7\uB8F8\uB8F9"+
+            "\uB8FA\uB8FB\uB8FC\uB8FD\uB941\uB942\uB943\uB944"+
+            "\uB945\uB946\uB947\uB948\uB949\uB94A\uB94B\uB94C"+
+            "\uB94D\uB94E\uB94F\uB950\uB951\uB953\uB954\uB955"+
+            "\uB956\uB957\uB958\uB959\uB95A\uB95B\uB95C\uB95D"+
+            "\uB961\uB962\uB963\uB964\uB965\uB966\uB967\uB968"+
+            "\uB969\uB96A\uB96B\uB96C\uB96D\uB96E\uB96F\uB970"+
+            "\uB971\uB973\uB974\uB975\uB976\uB977\uB978\uB979"+
+            "\uB97A\uB97B\uB97C\uB97D\uB981\uB982\uB983\uB984"+
+            "\uB985\uB986\uB987\uB988\uB989\uB98A\uB98B\uB98C"+
+            "\uB98D\uB98E\uB98F\uB990\uB991\uB993\uB994\uB995"+
+            "\uB996\uB997\uB998\uB999\uB99A\uB99B\uB99C\uB99D"+
+            "\uB9A1\uB9A2\uB9A3\uB9A4\uB9A5\uB9A6\uB9A7\uB9A8"+
+            "\uB9A9\uB9AA\uB9AB\uB9AC\uB9AD\uB9AE\uB9AF\uB9B0"+
+            "\uB9B1\uB9B3\uB9B4\uB9B5\uB9B6\uB9B7\uB9B8\uB9B9"+
+            "\uB9BA\uB9BB\uB9BC\uB9BD\uB9C1\uB9C2\uB9C3\uB9C4"+
+            "\uB9C5\uB9C6\uB9C7\uB9C8\uB9C9\uB9CA\uB9CB\uB9CC"+
+            "\uB9CD\uB9CE\uB9CF\uB9D0\uB9D1\uB9D3\uB9D4\uB9D5"+
+            "\uB9D6\uB9D7\uB9D8\uB9D9\uB9DA\uB9DB\uB9DC\uB9DD"+
+            "\uB9E1\uB9E2\uB9E3\uB9E4\uB9E5\uB9E6\uB9E7\uB9E8"+
+            "\uB9E9\uB9EA\uB9EB\uB9EC\uB9ED\uB9EE\uB9EF\uB9F0"+
+            "\uB9F1\uB9F3\uB9F4\uB9F5\uB9F6\uB9F7\uB9F8\uB9F9"+
+            "\uB9FA\uB9FB\uB9FC\uB9FD\uBA41\uBA42\uBA43\uBA44"+
+            "\uBA45\uBA46\uBA47\uBA48\uBA49\uBA4A\uBA4B\uBA4C"+
+            "\uBA4D\uBA4E\uBA4F\uBA50\uBA51\uBA53\uBA54\uBA55"+
+            "\uBA56\uBA57\uBA58\uBA59\uBA5A\uBA5B\uBA5C\uBA5D"+
+            "\uBA61\uBA62\uBA63\uBA64\uBA65\uBA66\uBA67\uBA68"+
+            "\uBA69\uBA6A\uBA6B\uBA6C\uBA6D\uBA6E\uBA6F\uBA70"+
+            "\uBA71\uBA73\uBA74\uBA75\uBA76\uBA77\uBA78\uBA79"+
+            "\uBA7A\uBA7B\uBA7C\uBA7D\uBA81\uBA82\uBA83\uBA84";
+
+        private final static String innerIndex8=
+            "\uBA85\uBA86\uBA87\uBA88\uBA89\uBA8A\uBA8B\uBA8C"+
+            "\uBA8D\uBA8E\uBA8F\uBA90\uBA91\uBA93\uBA94\uBA95"+
+            "\uBA96\uBA97\uBA98\uBA99\uBA9A\uBA9B\uBA9C\uBA9D"+
+            "\uBAA1\uBAA2\uBAA3\uBAA4\uBAA5\uBAA6\uBAA7\uBAA8"+
+            "\uBAA9\uBAAA\uBAAB\uBAAC\uBAAD\uBAAE\uBAAF\uBAB0"+
+            "\uBAB1\uBAB3\uBAB4\uBAB5\uBAB6\uBAB7\uBAB8\uBAB9"+
+            "\uBABA\uBABB\uBABC\uBABD\uBAC1\uBAC2\uBAC3\uBAC4"+
+            "\uBAC5\uBAC6\uBAC7\uBAC8\uBAC9\uBACA\uBACB\uBACC"+
+            "\uBACD\uBACE\uBACF\uBAD0\uBAD1\uBAD3\uBAD4\uBAD5"+
+            "\uBAD6\uBAD7\uBAD8\uBAD9\uBADA\uBADB\uBADC\uBADD"+
+            "\uBAE1\uBAE2\uBAE3\uBAE4\uBAE5\uBAE6\uBAE7\uBAE8"+
+            "\uBAE9\uBAEA\uBAEB\uBAEC\uBAED\uBAEE\uBAEF\uBAF0"+
+            "\uBAF1\uBAF3\uBAF4\uBAF5\uBAF6\uBAF7\uBAF8\uBAF9"+
+            "\uBAFA\uBAFB\uBAFC\uBAFD\uBB41\uBB42\uBB43\uBB44"+
+            "\uBB45\uBB46\uBB47\uBB48\uBB49\uBB4A\uBB4B\uBB4C"+
+            "\uBB4D\uBB4E\uBB4F\uBB50\uBB51\uBB53\uBB54\uBB55"+
+            "\uBB56\uBB57\uBB58\uBB59\uBB5A\uBB5B\uBB5C\uBB5D"+
+            "\uBB61\uBB62\uBB63\uBB64\uBB65\uBB66\uBB67\uBB68"+
+            "\uBB69\uBB6A\uBB6B\uBB6C\uBB6D\uBB6E\uBB6F\uBB70"+
+            "\uBB71\uBB73\uBB74\uBB75\uBB76\uBB77\uBB78\uBB79"+
+            "\uBB7A\uBB7B\uBB7C\uBB7D\uBB81\uBB82\uBB83\uBB84"+
+            "\uBB85\uBB86\uBB87\uBB88\uBB89\uBB8A\uBB8B\uBB8C"+
+            "\uBB8D\uBB8E\uBB8F\uBB90\uBB91\uBB93\uBB94\uBB95"+
+            "\uBB96\uBB97\uBB98\uBB99\uBB9A\uBB9B\uBB9C\uBB9D"+
+            "\uBBA1\uBBA2\uBBA3\uBBA4\uBBA5\uBBA6\uBBA7\uBBA8"+
+            "\uBBA9\uBBAA\uBBAB\uBBAC\uBBAD\uBBAE\uBBAF\uBBB0"+
+            "\uBBB1\uBBB3\uBBB4\uBBB5\uBBB6\uBBB7\uBBB8\uBBB9"+
+            "\uBBBA\uBBBB\uBBBC\uBBBD\uBC61\uBC62\uBC63\uBC64"+
+            "\uBC65\uBC66\uBC67\uBC68\uBC69\uBC6A\uBC6B\uBC6C"+
+            "\uBC6D\uBC6E\uBC6F\uBC70\uBC71\uBC73\uBC74\uBC75"+
+            "\uBC76\uBC77\uBC78\uBC79\uBC7A\uBC7B\uBC7C\uBC7D"+
+            "\uBC81\uBC82\uBC83\uBC84\uBC85\uBC86\uBC87\uBC88"+
+            "\uBC89\uBC8A\uBC8B\uBC8C\uBC8D\uBC8E\uBC8F\uBC90"+
+            "\uBC91\uBC93\uBC94\uBC95\uBC96\uBC97\uBC98\uBC99"+
+            "\uBC9A\uBC9B\uBC9C\uBC9D\uBCA1\uBCA2\uBCA3\uBCA4"+
+            "\uBCA5\uBCA6\uBCA7\uBCA8\uBCA9\uBCAA\uBCAB\uBCAC"+
+            "\uBCAD\uBCAE\uBCAF\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5"+
+            "\uBCB6\uBCB7\uBCB8\uBCB9\uBCBA\uBCBB\uBCBC\uBCBD"+
+            "\uBCC1\uBCC2\uBCC3\uBCC4\uBCC5\uBCC6\uBCC7\uBCC8"+
+            "\uBCC9\uBCCA\uBCCB\uBCCC\uBCCD\uBCCE\uBCCF\uBCD0"+
+            "\uBCD1\uBCD3\uBCD4\uBCD5\uBCD6\uBCD7\uBCD8\uBCD9"+
+            "\uBCDA\uBCDB\uBCDC\uBCDD\uBCE1\uBCE2\uBCE3\uBCE4"+
+            "\uBCE5\uBCE6\uBCE7\uBCE8\uBCE9\uBCEA\uBCEB\uBCEC"+
+            "\uBCED\uBCEE\uBCEF\uBCF0\uBCF1\uBCF3\uBCF4\uBCF5"+
+            "\uBCF6\uBCF7\uBCF8\uBCF9\uBCFA\uBCFB\uBCFC\uBCFD"+
+            "\uBD41\uBD42\uBD43\uBD44\uBD45\uBD46\uBD47\uBD48"+
+            "\uBD49\uBD4A\uBD4B\uBD4C\uBD4D\uBD4E\uBD4F\uBD50"+
+            "\uBD51\uBD53\uBD54\uBD55\uBD56\uBD57\uBD58\uBD59"+
+            "\uBD5A\uBD5B\uBD5C\uBD5D\uBD61\uBD62\uBD63\uBD64"+
+            "\uBD65\uBD66\uBD67\uBD68\uBD69\uBD6A\uBD6B\uBD6C"+
+            "\uBD6D\uBD6E\uBD6F\uBD70\uBD71\uBD73\uBD74\uBD75"+
+            "\uBD76\uBD77\uBD78\uBD79\uBD7A\uBD7B\uBD7C\uBD7D"+
+            "\uBD81\uBD82\uBD83\uBD84\uBD85\uBD86\uBD87\uBD88"+
+            "\uBD89\uBD8A\uBD8B\uBD8C\uBD8D\uBD8E\uBD8F\uBD90"+
+            "\uBD91\uBD93\uBD94\uBD95\uBD96\uBD97\uBD98\uBD99"+
+            "\uBD9A\uBD9B\uBD9C\uBD9D\uBDA1\uBDA2\uBDA3\uBDA4"+
+            "\uBDA5\uBDA6\uBDA7\uBDA8\uBDA9\uBDAA\uBDAB\uBDAC"+
+            "\uBDAD\uBDAE\uBDAF\uBDB0\uBDB1\uBDB3\uBDB4\uBDB5"+
+            "\uBDB6\uBDB7\uBDB8\uBDB9\uBDBA\uBDBB\uBDBC\uBDBD"+
+            "\uBDC1\uBDC2\uBDC3\uBDC4\uBDC5\uBDC6\uBDC7\uBDC8"+
+            "\uBDC9\uBDCA\uBDCB\uBDCC\uBDCD\uBDCE\uBDCF\uBDD0"+
+            "\uBDD1\uBDD3\uBDD4\uBDD5\uBDD6\uBDD7\uBDD8\uBDD9"+
+            "\uBDDA\uBDDB\uBDDC\uBDDD\uBDE1\uBDE2\uBDE3\uBDE4"+
+            "\uBDE5\uBDE6\uBDE7\uBDE8\uBDE9\uBDEA\uBDEB\uBDEC"+
+            "\uBDED\uBDEE\uBDEF\uBDF0\uBDF1\uBDF3\uBDF4\uBDF5"+
+            "\uBDF6\uBDF7\uBDF8\uBDF9\uBDFA\uBDFB\uBDFC\uBDFD"+
+            "\uBE41\uBE42\uBE43\uBE44\uBE45\uBE46\uBE47\uBE48"+
+            "\uBE49\uBE4A\uBE4B\uBE4C\uBE4D\uBE4E\uBE4F\uBE50"+
+            "\uBE51\uBE53\uBE54\uBE55\uBE56\uBE57\uBE58\uBE59"+
+            "\uBE5A\uBE5B\uBE5C\uBE5D\uBE61\uBE62\uBE63\uBE64"+
+            "\uBE65\uBE66\uBE67\uBE68\uBE69\uBE6A\uBE6B\uBE6C"+
+            "\uBE6D\uBE6E\uBE6F\uBE70\uBE71\uBE73\uBE74\uBE75"+
+            "\uBE76\uBE77\uBE78\uBE79\uBE7A\uBE7B\uBE7C\uBE7D"+
+            "\uBE81\uBE82\uBE83\uBE84\uBE85\uBE86\uBE87\uBE88"+
+            "\uBE89\uBE8A\uBE8B\uBE8C\uBE8D\uBE8E\uBE8F\uBE90"+
+            "\uBE91\uBE93\uBE94\uBE95\uBE96\uBE97\uBE98\uBE99"+
+            "\uBE9A\uBE9B\uBE9C\uBE9D\uBEA1\uBEA2\uBEA3\uBEA4"+
+            "\uBEA5\uBEA6\uBEA7\uBEA8\uBEA9\uBEAA\uBEAB\uBEAC"+
+            "\uBEAD\uBEAE\uBEAF\uBEB0\uBEB1\uBEB3\uBEB4\uBEB5"+
+            "\uBEB6\uBEB7\uBEB8\uBEB9\uBEBA\uBEBB\uBEBC\uBEBD"+
+            "\uBEC1\uBEC2\uBEC3\uBEC4\uBEC5\uBEC6\uBEC7\uBEC8"+
+            "\uBEC9\uBECA\uBECB\uBECC\uBECD\uBECE\uBECF\uBED0"+
+            "\uBED1\uBED3\uBED4\uBED5\uBED6\uBED7\uBED8\uBED9"+
+            "\uBEDA\uBEDB\uBEDC\uBEDD\uBEE1\uBEE2\uBEE3\uBEE4"+
+            "\uBEE5\uBEE6\uBEE7\uBEE8\uBEE9\uBEEA\uBEEB\uBEEC"+
+            "\uBEED\uBEEE\uBEEF\uBEF0\uBEF1\uBEF3\uBEF4\uBEF5"+
+            "\uBEF6\uBEF7\uBEF8\uBEF9\uBEFA\uBEFB\uBEFC\uBEFD"+
+            "\uBF41\uBF42\uBF43\uBF44\uBF45\uBF46\uBF47\uBF48"+
+            "\uBF49\uBF4A\uBF4B\uBF4C\uBF4D\uBF4E\uBF4F\uBF50"+
+            "\uBF51\uBF53\uBF54\uBF55\uBF56\uBF57\uBF58\uBF59"+
+            "\uBF5A\uBF5B\uBF5C\uBF5D\uBF61\uBF62\uBF63\uBF64"+
+            "\uBF65\uBF66\uBF67\uBF68\uBF69\uBF6A\uBF6B\uBF6C"+
+            "\uBF6D\uBF6E\uBF6F\uBF70\uBF71\uBF73\uBF74\uBF75"+
+            "\uBF76\uBF77\uBF78\uBF79\uBF7A\uBF7B\uBF7C\uBF7D"+
+            "\uBF81\uBF82\uBF83\uBF84\uBF85\uBF86\uBF87\uBF88"+
+            "\uBF89\uBF8A\uBF8B\uBF8C\uBF8D\uBF8E\uBF8F\uBF90"+
+            "\uBF91\uBF93\uBF94\uBF95\uBF96\uBF97\uBF98\uBF99"+
+            "\uBF9A\uBF9B\uBF9C\uBF9D\uBFA1\uBFA2\uBFA3\uBFA4"+
+            "\uBFA5\uBFA6\uBFA7\uBFA8\uBFA9\uBFAA\uBFAB\uBFAC"+
+            "\uBFAD\uBFAE\uBFAF\uBFB0\uBFB1\uBFB3\uBFB4\uBFB5"+
+            "\uBFB6\uBFB7\uBFB8\uBFB9\uBFBA\uBFBB\uBFBC\uBFBD"+
+            "\uC061\uC062\uC063\uC064\uC065\uC066\uC067\uC068"+
+            "\uC069\uC06A\uC06B\uC06C\uC06D\uC06E\uC06F\uC070"+
+            "\uC071\uC073\uC074\uC075\uC076\uC077\uC078\uC079"+
+            "\uC07A\uC07B\uC07C\uC07D\uC081\uC082\uC083\uC084"+
+            "\uC085\uC086\uC087\uC088\uC089\uC08A\uC08B\uC08C"+
+            "\uC08D\uC08E\uC08F\uC090\uC091\uC093\uC094\uC095"+
+            "\uC096\uC097\uC098\uC099\uC09A\uC09B\uC09C\uC09D"+
+            "\uC0A1\uC0A2\uC0A3\uC0A4\uC0A5\uC0A6\uC0A7\uC0A8"+
+            "\uC0A9\uC0AA\uC0AB\uC0AC\uC0AD\uC0AE\uC0AF\uC0B0"+
+            "\uC0B1\uC0B3\uC0B4\uC0B5\uC0B6\uC0B7\uC0B8\uC0B9"+
+            "\uC0BA\uC0BB\uC0BC\uC0BD\uC0C1\uC0C2\uC0C3\uC0C4"+
+            "\uC0C5\uC0C6\uC0C7\uC0C8\uC0C9\uC0CA\uC0CB\uC0CC"+
+            "\uC0CD\uC0CE\uC0CF\uC0D0\uC0D1\uC0D3\uC0D4\uC0D5"+
+            "\uC0D6\uC0D7\uC0D8\uC0D9\uC0DA\uC0DB\uC0DC\uC0DD"+
+            "\uC0E1\uC0E2\uC0E3\uC0E4\uC0E5\uC0E6\uC0E7\uC0E8"+
+            "\uC0E9\uC0EA\uC0EB\uC0EC\uC0ED\uC0EE\uC0EF\uC0F0"+
+            "\uC0F1\uC0F3\uC0F4\uC0F5\uC0F6\uC0F7\uC0F8\uC0F9"+
+            "\uC0FA\uC0FB\uC0FC\uC0FD\uC141\uC142\uC143\uC144"+
+            "\uC145\uC146\uC147\uC148\uC149\uC14A\uC14B\uC14C"+
+            "\uC14D\uC14E\uC14F\uC150\uC151\uC153\uC154\uC155"+
+            "\uC156\uC157\uC158\uC159\uC15A\uC15B\uC15C\uC15D"+
+            "\uC161\uC162\uC163\uC164\uC165\uC166\uC167\uC168"+
+            "\uC169\uC16A\uC16B\uC16C\uC16D\uC16E\uC16F\uC170"+
+            "\uC171\uC173\uC174\uC175\uC176\uC177\uC178\uC179"+
+            "\uC17A\uC17B\uC17C\uC17D\uC181\uC182\uC183\uC184"+
+            "\uC185\uC186\uC187\uC188\uC189\uC18A\uC18B\uC18C"+
+            "\uC18D\uC18E\uC18F\uC190\uC191\uC193\uC194\uC195"+
+            "\uC196\uC197\uC198\uC199\uC19A\uC19B\uC19C\uC19D"+
+            "\uC1A1\uC1A2\uC1A3\uC1A4\uC1A5\uC1A6\uC1A7\uC1A8"+
+            "\uC1A9\uC1AA\uC1AB\uC1AC\uC1AD\uC1AE\uC1AF\uC1B0"+
+            "\uC1B1\uC1B3\uC1B4\uC1B5\uC1B6\uC1B7\uC1B8\uC1B9"+
+            "\uC1BA\uC1BB\uC1BC\uC1BD\uC1C1\uC1C2\uC1C3\uC1C4"+
+            "\uC1C5\uC1C6\uC1C7\uC1C8\uC1C9\uC1CA\uC1CB\uC1CC"+
+            "\uC1CD\uC1CE\uC1CF\uC1D0\uC1D1\uC1D3\uC1D4\uC1D5"+
+            "\uC1D6\uC1D7\uC1D8\uC1D9\uC1DA\uC1DB\uC1DC\uC1DD"+
+            "\uC1E1\uC1E2\uC1E3\uC1E4\uC1E5\uC1E6\uC1E7\uC1E8"+
+            "\uC1E9\uC1EA\uC1EB\uC1EC\uC1ED\uC1EE\uC1EF\uC1F0"+
+            "\uC1F1\uC1F3\uC1F4\uC1F5\uC1F6\uC1F7\uC1F8\uC1F9"+
+            "\uC1FA\uC1FB\uC1FC\uC1FD\uC241\uC242\uC243\uC244"+
+            "\uC245\uC246\uC247\uC248\uC249\uC24A\uC24B\uC24C"+
+            "\uC24D\uC24E\uC24F\uC250\uC251\uC253\uC254\uC255"+
+            "\uC256\uC257\uC258\uC259\uC25A\uC25B\uC25C\uC25D"+
+            "\uC261\uC262\uC263\uC264\uC265\uC266\uC267\uC268"+
+            "\uC269\uC26A\uC26B\uC26C\uC26D\uC26E\uC26F\uC270"+
+            "\uC271\uC273\uC274\uC275\uC276\uC277\uC278\uC279"+
+            "\uC27A\uC27B\uC27C\uC27D\uC281\uC282\uC283\uC284"+
+            "\uC285\uC286\uC287\uC288\uC289\uC28A\uC28B\uC28C"+
+            "\uC28D\uC28E\uC28F\uC290\uC291\uC293\uC294\uC295"+
+            "\uC296\uC297\uC298\uC299\uC29A\uC29B\uC29C\uC29D"+
+            "\uC2A1\uC2A2\uC2A3\uC2A4\uC2A5\uC2A6\uC2A7\uC2A8"+
+            "\uC2A9\uC2AA\uC2AB\uC2AC\uC2AD\uC2AE\uC2AF\uC2B0"+
+            "\uC2B1\uC2B3\uC2B4\uC2B5\uC2B6\uC2B7\uC2B8\uC2B9"+
+            "\uC2BA\uC2BB\uC2BC\uC2BD\uC2C1\uC2C2\uC2C3\uC2C4"+
+            "\uC2C5\uC2C6\uC2C7\uC2C8\uC2C9\uC2CA\uC2CB\uC2CC"+
+            "\uC2CD\uC2CE\uC2CF\uC2D0\uC2D1\uC2D3\uC2D4\uC2D5"+
+            "\uC2D6\uC2D7\uC2D8\uC2D9\uC2DA\uC2DB\uC2DC\uC2DD"+
+            "\uC2E1\uC2E2\uC2E3\uC2E4\uC2E5\uC2E6\uC2E7\uC2E8"+
+            "\uC2E9\uC2EA\uC2EB\uC2EC\uC2ED\uC2EE\uC2EF\uC2F0"+
+            "\uC2F1\uC2F3\uC2F4\uC2F5\uC2F6\uC2F7\uC2F8\uC2F9"+
+            "\uC2FA\uC2FB\uC2FC\uC2FD\uC341\uC342\uC343\uC344"+
+            "\uC345\uC346\uC347\uC348\uC349\uC34A\uC34B\uC34C"+
+            "\uC34D\uC34E\uC34F\uC350\uC351\uC353\uC354\uC355"+
+            "\uC356\uC357\uC358\uC359\uC35A\uC35B\uC35C\uC35D"+
+            "\uC361\uC362\uC363\uC364\uC365\uC366\uC367\uC368"+
+            "\uC369\uC36A\uC36B\uC36C\uC36D\uC36E\uC36F\uC370"+
+            "\uC371\uC373\uC374\uC375\uC376\uC377\uC378\uC379"+
+            "\uC37A\uC37B\uC37C\uC37D\uC381\uC382\uC383\uC384"+
+            "\uC385\uC386\uC387\uC388\uC389\uC38A\uC38B\uC38C"+
+            "\uC38D\uC38E\uC38F\uC390\uC391\uC393\uC394\uC395"+
+            "\uC396\uC397\uC398\uC399\uC39A\uC39B\uC39C\uC39D"+
+            "\uC3A1\uC3A2\uC3A3\uC3A4\uC3A5\uC3A6\uC3A7\uC3A8"+
+            "\uC3A9\uC3AA\uC3AB\uC3AC\uC3AD\uC3AE\uC3AF\uC3B0"+
+            "\uC3B1\uC3B3\uC3B4\uC3B5\uC3B6\uC3B7\uC3B8\uC3B9"+
+            "\uC3BA\uC3BB\uC3BC\uC3BD\uC461\uC462\uC463\uC464"+
+            "\uC465\uC466\uC467\uC468\uC469\uC46A\uC46B\uC46C"+
+            "\uC46D\uC46E\uC46F\uC470\uC471\uC473\uC474\uC475"+
+            "\uC476\uC477\uC478\uC479\uC47A\uC47B\uC47C\uC47D"+
+            "\uC481\uC482\uC483\uC484\uC485\uC486\uC487\uC488"+
+            "\uC489\uC48A\uC48B\uC48C\uC48D\uC48E\uC48F\uC490"+
+            "\uC491\uC493\uC494\uC495\uC496\uC497\uC498\uC499"+
+            "\uC49A\uC49B\uC49C\uC49D\uC4A1\uC4A2\uC4A3\uC4A4"+
+            "\uC4A5\uC4A6\uC4A7\uC4A8\uC4A9\uC4AA\uC4AB\uC4AC"+
+            "\uC4AD\uC4AE\uC4AF\uC4B0\uC4B1\uC4B3\uC4B4\uC4B5"+
+            "\uC4B6\uC4B7\uC4B8\uC4B9\uC4BA\uC4BB\uC4BC\uC4BD"+
+            "\uC4C1\uC4C2\uC4C3\uC4C4\uC4C5\uC4C6\uC4C7\uC4C8"+
+            "\uC4C9\uC4CA\uC4CB\uC4CC\uC4CD\uC4CE\uC4CF\uC4D0"+
+            "\uC4D1\uC4D3\uC4D4\uC4D5\uC4D6\uC4D7\uC4D8\uC4D9"+
+            "\uC4DA\uC4DB\uC4DC\uC4DD\uC4E1\uC4E2\uC4E3\uC4E4"+
+            "\uC4E5\uC4E6\uC4E7\uC4E8\uC4E9\uC4EA\uC4EB\uC4EC"+
+            "\uC4ED\uC4EE\uC4EF\uC4F0\uC4F1\uC4F3\uC4F4\uC4F5"+
+            "\uC4F6\uC4F7\uC4F8\uC4F9\uC4FA\uC4FB\uC4FC\uC4FD"+
+            "\uC541\uC542\uC543\uC544\uC545\uC546\uC547\uC548"+
+            "\uC549\uC54A\uC54B\uC54C\uC54D\uC54E\uC54F\uC550"+
+            "\uC551\uC553\uC554\uC555\uC556\uC557\uC558\uC559"+
+            "\uC55A\uC55B\uC55C\uC55D\uC561\uC562\uC563\uC564"+
+            "\uC565\uC566\uC567\uC568\uC569\uC56A\uC56B\uC56C"+
+            "\uC56D\uC56E\uC56F\uC570\uC571\uC573\uC574\uC575"+
+            "\uC576\uC577\uC578\uC579\uC57A\uC57B\uC57C\uC57D"+
+            "\uC581\uC582\uC583\uC584\uC585\uC586\uC587\uC588"+
+            "\uC589\uC58A\uC58B\uC58C\uC58D\uC58E\uC58F\uC590"+
+            "\uC591\uC593\uC594\uC595\uC596\uC597\uC598\uC599"+
+            "\uC59A\uC59B\uC59C\uC59D\uC5A1\uC5A2\uC5A3\uC5A4"+
+            "\uC5A5\uC5A6\uC5A7\uC5A8\uC5A9\uC5AA\uC5AB\uC5AC"+
+            "\uC5AD\uC5AE\uC5AF\uC5B0\uC5B1\uC5B3\uC5B4\uC5B5"+
+            "\uC5B6\uC5B7\uC5B8\uC5B9\uC5BA\uC5BB\uC5BC\uC5BD"+
+            "\uC5C1\uC5C2\uC5C3\uC5C4\uC5C5\uC5C6\uC5C7\uC5C8"+
+            "\uC5C9\uC5CA\uC5CB\uC5CC\uC5CD\uC5CE\uC5CF\uC5D0"+
+            "\uC5D1\uC5D3\uC5D4\uC5D5\uC5D6\uC5D7\uC5D8\uC5D9"+
+            "\uC5DA\uC5DB\uC5DC\uC5DD\uC5E1\uC5E2\uC5E3\uC5E4"+
+            "\uC5E5\uC5E6\uC5E7\uC5E8\uC5E9\uC5EA\uC5EB\uC5EC"+
+            "\uC5ED\uC5EE\uC5EF\uC5F0\uC5F1\uC5F3\uC5F4\uC5F5"+
+            "\uC5F6\uC5F7\uC5F8\uC5F9\uC5FA\uC5FB\uC5FC\uC5FD"+
+            "\uC641\uC642\uC643\uC644\uC645\uC646\uC647\uC648"+
+            "\uC649\uC64A\uC64B\uC64C\uC64D\uC64E\uC64F\uC650"+
+            "\uC651\uC653\uC654\uC655\uC656\uC657\uC658\uC659"+
+            "\uC65A\uC65B\uC65C\uC65D\uC661\uC662\uC663\uC664"+
+            "\uC665\uC666\uC667\uC668\uC669\uC66A\uC66B\uC66C"+
+            "\uC66D\uC66E\uC66F\uC670\uC671\uC673\uC674\uC675"+
+            "\uC676\uC677\uC678\uC679\uC67A\uC67B\uC67C\uC67D"+
+            "\uC681\uC682\uC683\uC684\uC685\uC686\uC687\uC688"+
+            "\uC689\uC68A\uC68B\uC68C\uC68D\uC68E\uC68F\uC690"+
+            "\uC691\uC693\uC694\uC695\uC696\uC697\uC698\uC699"+
+            "\uC69A\uC69B\uC69C\uC69D\uC6A1\uC6A2\uC6A3\uC6A4"+
+            "\uC6A5\uC6A6\uC6A7\uC6A8\uC6A9\uC6AA\uC6AB\uC6AC"+
+            "\uC6AD\uC6AE\uC6AF\uC6B0\uC6B1\uC6B3\uC6B4\uC6B5"+
+            "\uC6B6\uC6B7\uC6B8\uC6B9\uC6BA\uC6BB\uC6BC\uC6BD"+
+            "\uC6C1\uC6C2\uC6C3\uC6C4\uC6C5\uC6C6\uC6C7\uC6C8"+
+            "\uC6C9\uC6CA\uC6CB\uC6CC\uC6CD\uC6CE\uC6CF\uC6D0"+
+            "\uC6D1\uC6D3\uC6D4\uC6D5\uC6D6\uC6D7\uC6D8\uC6D9"+
+            "\uC6DA\uC6DB\uC6DC\uC6DD\uC6E1\uC6E2\uC6E3\uC6E4"+
+            "\uC6E5\uC6E6\uC6E7\uC6E8\uC6E9\uC6EA\uC6EB\uC6EC"+
+            "\uC6ED\uC6EE\uC6EF\uC6F0\uC6F1\uC6F3\uC6F4\uC6F5"+
+            "\uC6F6\uC6F7\uC6F8\uC6F9\uC6FA\uC6FB\uC6FC\uC6FD"+
+            "\uC741\uC742\uC743\uC744\uC745\uC746\uC747\uC748"+
+            "\uC749\uC74A\uC74B\uC74C\uC74D\uC74E\uC74F\uC750"+
+            "\uC751\uC753\uC754\uC755\uC756\uC757\uC758\uC759"+
+            "\uC75A\uC75B\uC75C\uC75D\uC761\uC762\uC763\uC764"+
+            "\uC765\uC766\uC767\uC768\uC769\uC76A\uC76B\uC76C"+
+            "\uC76D\uC76E\uC76F\uC770\uC771\uC773\uC774\uC775"+
+            "\uC776\uC777\uC778\uC779\uC77A\uC77B\uC77C\uC77D"+
+            "\uC781\uC782\uC783\uC784\uC785\uC786\uC787\uC788"+
+            "\uC789\uC78A\uC78B\uC78C\uC78D\uC78E\uC78F\uC790"+
+            "\uC791\uC793\uC794\uC795\uC796\uC797\uC798\uC799"+
+            "\uC79A\uC79B\uC79C\uC79D\uC7A1\uC7A2\uC7A3\uC7A4"+
+            "\uC7A5\uC7A6\uC7A7\uC7A8\uC7A9\uC7AA\uC7AB\uC7AC"+
+            "\uC7AD\uC7AE\uC7AF\uC7B0\uC7B1\uC7B3\uC7B4\uC7B5"+
+            "\uC7B6\uC7B7\uC7B8\uC7B9\uC7BA\uC7BB\uC7BC\uC7BD"+
+            "\uC861\uC862\uC863\uC864\uC865\uC866\uC867\uC868"+
+            "\uC869\uC86A\uC86B\uC86C\uC86D\uC86E\uC86F\uC870"+
+            "\uC871\uC873\uC874\uC875\uC876\uC877\uC878\uC879"+
+            "\uC87A\uC87B\uC87C\uC87D\uC881\uC882\uC883\uC884"+
+            "\uC885\uC886\uC887\uC888\uC889\uC88A\uC88B\uC88C"+
+            "\uC88D\uC88E\uC88F\uC890\uC891\uC893\uC894\uC895"+
+            "\uC896\uC897\uC898\uC899\uC89A\uC89B\uC89C\uC89D"+
+            "\uC8A1\uC8A2\uC8A3\uC8A4\uC8A5\uC8A6\uC8A7\uC8A8"+
+            "\uC8A9\uC8AA\uC8AB\uC8AC\uC8AD\uC8AE\uC8AF\uC8B0"+
+            "\uC8B1\uC8B3\uC8B4\uC8B5\uC8B6\uC8B7\uC8B8\uC8B9"+
+            "\uC8BA\uC8BB\uC8BC\uC8BD\uC8C1\uC8C2\uC8C3\uC8C4"+
+            "\uC8C5\uC8C6\uC8C7\uC8C8\uC8C9\uC8CA\uC8CB\uC8CC"+
+            "\uC8CD\uC8CE\uC8CF\uC8D0\uC8D1\uC8D3\uC8D4\uC8D5"+
+            "\uC8D6\uC8D7\uC8D8\uC8D9\uC8DA\uC8DB\uC8DC\uC8DD"+
+            "\uC8E1\uC8E2\uC8E3\uC8E4\uC8E5\uC8E6\uC8E7\uC8E8"+
+            "\uC8E9\uC8EA\uC8EB\uC8EC\uC8ED\uC8EE\uC8EF\uC8F0"+
+            "\uC8F1\uC8F3\uC8F4\uC8F5\uC8F6\uC8F7\uC8F8\uC8F9"+
+            "\uC8FA\uC8FB\uC8FC\uC8FD\uC941\uC942\uC943\uC944"+
+            "\uC945\uC946\uC947\uC948\uC949\uC94A\uC94B\uC94C"+
+            "\uC94D\uC94E\uC94F\uC950\uC951\uC953\uC954\uC955"+
+            "\uC956\uC957\uC958\uC959\uC95A\uC95B\uC95C\uC95D"+
+            "\uC961\uC962\uC963\uC964\uC965\uC966\uC967\uC968"+
+            "\uC969\uC96A\uC96B\uC96C\uC96D\uC96E\uC96F\uC970"+
+            "\uC971\uC973\uC974\uC975\uC976\uC977\uC978\uC979"+
+            "\uC97A\uC97B\uC97C\uC97D\uC981\uC982\uC983\uC984"+
+            "\uC985\uC986\uC987\uC988\uC989\uC98A\uC98B\uC98C"+
+            "\uC98D\uC98E\uC98F\uC990\uC991\uC993\uC994\uC995"+
+            "\uC996\uC997\uC998\uC999\uC99A\uC99B\uC99C\uC99D"+
+            "\uC9A1\uC9A2\uC9A3\uC9A4\uC9A5\uC9A6\uC9A7\uC9A8"+
+            "\uC9A9\uC9AA\uC9AB\uC9AC\uC9AD\uC9AE\uC9AF\uC9B0"+
+            "\uC9B1\uC9B3\uC9B4\uC9B5\uC9B6\uC9B7\uC9B8\uC9B9"+
+            "\uC9BA\uC9BB\uC9BC\uC9BD\uC9C1\uC9C2\uC9C3\uC9C4"+
+            "\uC9C5\uC9C6\uC9C7\uC9C8\uC9C9\uC9CA\uC9CB\uC9CC"+
+            "\uC9CD\uC9CE\uC9CF\uC9D0\uC9D1\uC9D3\uC9D4\uC9D5"+
+            "\uC9D6\uC9D7\uC9D8\uC9D9\uC9DA\uC9DB\uC9DC\uC9DD"+
+            "\uC9E1\uC9E2\uC9E3\uC9E4\uC9E5\uC9E6\uC9E7\uC9E8"+
+            "\uC9E9\uC9EA\uC9EB\uC9EC\uC9ED\uC9EE\uC9EF\uC9F0"+
+            "\uC9F1\uC9F3\uC9F4\uC9F5\uC9F6\uC9F7\uC9F8\uC9F9"+
+            "\uC9FA\uC9FB\uC9FC\uC9FD\uCA41\uCA42\uCA43\uCA44"+
+            "\uCA45\uCA46\uCA47\uCA48\uCA49\uCA4A\uCA4B\uCA4C"+
+            "\uCA4D\uCA4E\uCA4F\uCA50\uCA51\uCA53\uCA54\uCA55"+
+            "\uCA56\uCA57\uCA58\uCA59\uCA5A\uCA5B\uCA5C\uCA5D"+
+            "\uCA61\uCA62\uCA63\uCA64\uCA65\uCA66\uCA67\uCA68"+
+            "\uCA69\uCA6A\uCA6B\uCA6C\uCA6D\uCA6E\uCA6F\uCA70"+
+            "\uCA71\uCA73\uCA74\uCA75\uCA76\uCA77\uCA78\uCA79"+
+            "\uCA7A\uCA7B\uCA7C\uCA7D\uCA81\uCA82\uCA83\uCA84"+
+            "\uCA85\uCA86\uCA87\uCA88\uCA89\uCA8A\uCA8B\uCA8C"+
+            "\uCA8D\uCA8E\uCA8F\uCA90\uCA91\uCA93\uCA94\uCA95"+
+            "\uCA96\uCA97\uCA98\uCA99\uCA9A\uCA9B\uCA9C\uCA9D"+
+            "\uCAA1\uCAA2\uCAA3\uCAA4\uCAA5\uCAA6\uCAA7\uCAA8"+
+            "\uCAA9\uCAAA\uCAAB\uCAAC\uCAAD\uCAAE\uCAAF\uCAB0"+
+            "\uCAB1\uCAB3\uCAB4\uCAB5\uCAB6\uCAB7\uCAB8\uCAB9"+
+            "\uCABA\uCABB\uCABC\uCABD\uCAC1\uCAC2\uCAC3\uCAC4"+
+            "\uCAC5\uCAC6\uCAC7\uCAC8\uCAC9\uCACA\uCACB\uCACC"+
+            "\uCACD\uCACE\uCACF\uCAD0\uCAD1\uCAD3\uCAD4\uCAD5"+
+            "\uCAD6\uCAD7\uCAD8\uCAD9\uCADA\uCADB\uCADC\uCADD"+
+            "\uCAE1\uCAE2\uCAE3\uCAE4\uCAE5\uCAE6\uCAE7\uCAE8"+
+            "\uCAE9\uCAEA\uCAEB\uCAEC\uCAED\uCAEE\uCAEF\uCAF0"+
+            "\uCAF1\uCAF3\uCAF4\uCAF5\uCAF6\uCAF7\uCAF8\uCAF9"+
+            "\uCAFA\uCAFB\uCAFC\uCAFD\uCB41\uCB42\uCB43\uCB44"+
+            "\uCB45\uCB46\uCB47\uCB48\uCB49\uCB4A\uCB4B\uCB4C"+
+            "\uCB4D\uCB4E\uCB4F\uCB50\uCB51\uCB53\uCB54\uCB55"+
+            "\uCB56\uCB57\uCB58\uCB59\uCB5A\uCB5B\uCB5C\uCB5D"+
+            "\uCB61\uCB62\uCB63\uCB64\uCB65\uCB66\uCB67\uCB68"+
+            "\uCB69\uCB6A\uCB6B\uCB6C\uCB6D\uCB6E\uCB6F\uCB70"+
+            "\uCB71\uCB73\uCB74\uCB75\uCB76\uCB77\uCB78\uCB79"+
+            "\uCB7A\uCB7B\uCB7C\uCB7D\uCB81\uCB82\uCB83\uCB84"+
+            "\uCB85\uCB86\uCB87\uCB88\uCB89\uCB8A\uCB8B\uCB8C"+
+            "\uCB8D\uCB8E\uCB8F\uCB90\uCB91\uCB93\uCB94\uCB95"+
+            "\uCB96\uCB97\uCB98\uCB99\uCB9A\uCB9B\uCB9C\uCB9D"+
+            "\uCBA1\uCBA2\uCBA3\uCBA4\uCBA5\uCBA6\uCBA7\uCBA8"+
+            "\uCBA9\uCBAA\uCBAB\uCBAC\uCBAD\uCBAE\uCBAF\uCBB0"+
+            "\uCBB1\uCBB3\uCBB4\uCBB5\uCBB6\uCBB7\uCBB8\uCBB9"+
+            "\uCBBA\uCBBB\uCBBC\uCBBD\uCC61\uCC62\uCC63\uCC64"+
+            "\uCC65\uCC66\uCC67\uCC68\uCC69\uCC6A\uCC6B\uCC6C"+
+            "\uCC6D\uCC6E\uCC6F\uCC70\uCC71\uCC73\uCC74\uCC75"+
+            "\uCC76\uCC77\uCC78\uCC79\uCC7A\uCC7B\uCC7C\uCC7D"+
+            "\uCC81\uCC82\uCC83\uCC84\uCC85\uCC86\uCC87\uCC88"+
+            "\uCC89\uCC8A\uCC8B\uCC8C\uCC8D\uCC8E\uCC8F\uCC90"+
+            "\uCC91\uCC93\uCC94\uCC95\uCC96\uCC97\uCC98\uCC99"+
+            "\uCC9A\uCC9B\uCC9C\uCC9D\uCCA1\uCCA2\uCCA3\uCCA4"+
+            "\uCCA5\uCCA6\uCCA7\uCCA8\uCCA9\uCCAA\uCCAB\uCCAC"+
+            "\uCCAD\uCCAE\uCCAF\uCCB0\uCCB1\uCCB3\uCCB4\uCCB5"+
+            "\uCCB6\uCCB7\uCCB8\uCCB9\uCCBA\uCCBB\uCCBC\uCCBD"+
+            "\uCCC1\uCCC2\uCCC3\uCCC4\uCCC5\uCCC6\uCCC7\uCCC8"+
+            "\uCCC9\uCCCA\uCCCB\uCCCC\uCCCD\uCCCE\uCCCF\uCCD0"+
+            "\uCCD1\uCCD3\uCCD4\uCCD5\uCCD6\uCCD7\uCCD8\uCCD9"+
+            "\uCCDA\uCCDB\uCCDC\uCCDD\uCCE1\uCCE2\uCCE3\uCCE4"+
+            "\uCCE5\uCCE6\uCCE7\uCCE8\uCCE9\uCCEA\uCCEB\uCCEC"+
+            "\uCCED\uCCEE\uCCEF\uCCF0\uCCF1\uCCF3\uCCF4\uCCF5"+
+            "\uCCF6\uCCF7\uCCF8\uCCF9\uCCFA\uCCFB\uCCFC\uCCFD"+
+            "\uCD41\uCD42\uCD43\uCD44\uCD45\uCD46\uCD47\uCD48"+
+            "\uCD49\uCD4A\uCD4B\uCD4C\uCD4D\uCD4E\uCD4F\uCD50"+
+            "\uCD51\uCD53\uCD54\uCD55\uCD56\uCD57\uCD58\uCD59"+
+            "\uCD5A\uCD5B\uCD5C\uCD5D\uCD61\uCD62\uCD63\uCD64"+
+            "\uCD65\uCD66\uCD67\uCD68\uCD69\uCD6A\uCD6B\uCD6C"+
+            "\uCD6D\uCD6E\uCD6F\uCD70\uCD71\uCD73\uCD74\uCD75"+
+            "\uCD76\uCD77\uCD78\uCD79\uCD7A\uCD7B\uCD7C\uCD7D"+
+            "\uCD81\uCD82\uCD83\uCD84\uCD85\uCD86\uCD87\uCD88"+
+            "\uCD89\uCD8A\uCD8B\uCD8C\uCD8D\uCD8E\uCD8F\uCD90"+
+            "\uCD91\uCD93\uCD94\uCD95\uCD96\uCD97\uCD98\uCD99"+
+            "\uCD9A\uCD9B\uCD9C\uCD9D\uCDA1\uCDA2\uCDA3\uCDA4"+
+            "\uCDA5\uCDA6\uCDA7\uCDA8\uCDA9\uCDAA\uCDAB\uCDAC"+
+            "\uCDAD\uCDAE\uCDAF\uCDB0\uCDB1\uCDB3\uCDB4\uCDB5"+
+            "\uCDB6\uCDB7\uCDB8\uCDB9\uCDBA\uCDBB\uCDBC\uCDBD"+
+            "\uCDC1\uCDC2\uCDC3\uCDC4\uCDC5\uCDC6\uCDC7\uCDC8"+
+            "\uCDC9\uCDCA\uCDCB\uCDCC\uCDCD\uCDCE\uCDCF\uCDD0"+
+            "\uCDD1\uCDD3\uCDD4\uCDD5\uCDD6\uCDD7\uCDD8\uCDD9"+
+            "\uCDDA\uCDDB\uCDDC\uCDDD\uCDE1\uCDE2\uCDE3\uCDE4"+
+            "\uCDE5\uCDE6\uCDE7\uCDE8\uCDE9\uCDEA\uCDEB\uCDEC"+
+            "\uCDED\uCDEE\uCDEF\uCDF0\uCDF1\uCDF3\uCDF4\uCDF5"+
+            "\uCDF6\uCDF7\uCDF8\uCDF9\uCDFA\uCDFB\uCDFC\uCDFD"+
+            "\uCE41\uCE42\uCE43\uCE44\uCE45\uCE46\uCE47\uCE48"+
+            "\uCE49\uCE4A\uCE4B\uCE4C\uCE4D\uCE4E\uCE4F\uCE50"+
+            "\uCE51\uCE53\uCE54\uCE55\uCE56\uCE57\uCE58\uCE59"+
+            "\uCE5A\uCE5B\uCE5C\uCE5D\uCE61\uCE62\uCE63\uCE64"+
+            "\uCE65\uCE66\uCE67\uCE68\uCE69\uCE6A\uCE6B\uCE6C"+
+            "\uCE6D\uCE6E\uCE6F\uCE70\uCE71\uCE73\uCE74\uCE75"+
+            "\uCE76\uCE77\uCE78\uCE79\uCE7A\uCE7B\uCE7C\uCE7D"+
+            "\uCE81\uCE82\uCE83\uCE84\uCE85\uCE86\uCE87\uCE88"+
+            "\uCE89\uCE8A\uCE8B\uCE8C\uCE8D\uCE8E\uCE8F\uCE90"+
+            "\uCE91\uCE93\uCE94\uCE95\uCE96\uCE97\uCE98\uCE99"+
+            "\uCE9A\uCE9B\uCE9C\uCE9D\uCEA1\uCEA2\uCEA3\uCEA4"+
+            "\uCEA5\uCEA6\uCEA7\uCEA8\uCEA9\uCEAA\uCEAB\uCEAC"+
+            "\uCEAD\uCEAE\uCEAF\uCEB0\uCEB1\uCEB3\uCEB4\uCEB5"+
+            "\uCEB6\uCEB7\uCEB8\uCEB9\uCEBA\uCEBB\uCEBC\uCEBD"+
+            "\uCEC1\uCEC2\uCEC3\uCEC4\uCEC5\uCEC6\uCEC7\uCEC8"+
+            "\uCEC9\uCECA\uCECB\uCECC\uCECD\uCECE\uCECF\uCED0"+
+            "\uCED1\uCED3\uCED4\uCED5\uCED6\uCED7\uCED8\uCED9"+
+            "\uCEDA\uCEDB\uCEDC\uCEDD\uCEE1\uCEE2\uCEE3\uCEE4"+
+            "\uCEE5\uCEE6\uCEE7\uCEE8\uCEE9\uCEEA\uCEEB\uCEEC"+
+            "\uCEED\uCEEE\uCEEF\uCEF0\uCEF1\uCEF3\uCEF4\uCEF5"+
+            "\uCEF6\uCEF7\uCEF8\uCEF9\uCEFA\uCEFB\uCEFC\uCEFD"+
+            "\uCF41\uCF42\uCF43\uCF44\uCF45\uCF46\uCF47\uCF48"+
+            "\uCF49\uCF4A\uCF4B\uCF4C\uCF4D\uCF4E\uCF4F\uCF50"+
+            "\uCF51\uCF53\uCF54\uCF55\uCF56\uCF57\uCF58\uCF59"+
+            "\uCF5A\uCF5B\uCF5C\uCF5D\uCF61\uCF62\uCF63\uCF64"+
+            "\uCF65\uCF66\uCF67\uCF68\uCF69\uCF6A\uCF6B\uCF6C"+
+            "\uCF6D\uCF6E\uCF6F\uCF70\uCF71\uCF73\uCF74\uCF75"+
+            "\uCF76\uCF77\uCF78\uCF79\uCF7A\uCF7B\uCF7C\uCF7D"+
+            "\uCF81\uCF82\uCF83\uCF84\uCF85\uCF86\uCF87\uCF88"+
+            "\uCF89\uCF8A\uCF8B\uCF8C\uCF8D\uCF8E\uCF8F\uCF90"+
+            "\uCF91\uCF93\uCF94\uCF95\uCF96\uCF97\uCF98\uCF99"+
+            "\uCF9A\uCF9B\uCF9C\uCF9D\uCFA1\uCFA2\uCFA3\uCFA4"+
+            "\uCFA5\uCFA6\uCFA7\uCFA8\uCFA9\uCFAA\uCFAB\uCFAC"+
+            "\uCFAD\uCFAE\uCFAF\uCFB0\uCFB1\uCFB3\uCFB4\uCFB5"+
+            "\uCFB6\uCFB7\uCFB8\uCFB9\uCFBA\uCFBB\uCFBC\uCFBD"+
+            "\uD061\uD062\uD063\uD064\uD065\uD066\uD067\uD068"+
+            "\uD069\uD06A\uD06B\uD06C\uD06D\uD06E\uD06F\uD070"+
+            "\uD071\uD073\uD074\uD075\uD076\uD077\uD078\uD079"+
+            "\uD07A\uD07B\uD07C\uD07D\uD081\uD082\uD083\uD084"+
+            "\uD085\uD086\uD087\uD088\uD089\uD08A\uD08B\uD08C"+
+            "\uD08D\uD08E\uD08F\uD090\uD091\uD093\uD094\uD095"+
+            "\uD096\uD097\uD098\uD099\uD09A\uD09B\uD09C\uD09D"+
+            "\uD0A1\uD0A2\uD0A3\uD0A4\uD0A5\uD0A6\uD0A7\uD0A8"+
+            "\uD0A9\uD0AA\uD0AB\uD0AC\uD0AD\uD0AE\uD0AF\uD0B0"+
+            "\uD0B1\uD0B3\uD0B4\uD0B5\uD0B6\uD0B7\uD0B8\uD0B9"+
+            "\uD0BA\uD0BB\uD0BC\uD0BD\uD0C1\uD0C2\uD0C3\uD0C4"+
+            "\uD0C5\uD0C6\uD0C7\uD0C8\uD0C9\uD0CA\uD0CB\uD0CC"+
+            "\uD0CD\uD0CE\uD0CF\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5"+
+            "\uD0D6\uD0D7\uD0D8\uD0D9\uD0DA\uD0DB\uD0DC\uD0DD"+
+            "\uD0E1\uD0E2\uD0E3\uD0E4\uD0E5\uD0E6\uD0E7\uD0E8"+
+            "\uD0E9\uD0EA\uD0EB\uD0EC\uD0ED\uD0EE\uD0EF\uD0F0"+
+            "\uD0F1\uD0F3\uD0F4\uD0F5\uD0F6\uD0F7\uD0F8\uD0F9"+
+            "\uD0FA\uD0FB\uD0FC\uD0FD\uD141\uD142\uD143\uD144"+
+            "\uD145\uD146\uD147\uD148\uD149\uD14A\uD14B\uD14C"+
+            "\uD14D\uD14E\uD14F\uD150\uD151\uD153\uD154\uD155"+
+            "\uD156\uD157\uD158\uD159\uD15A\uD15B\uD15C\uD15D"+
+            "\uD161\uD162\uD163\uD164\uD165\uD166\uD167\uD168"+
+            "\uD169\uD16A\uD16B\uD16C\uD16D\uD16E\uD16F\uD170"+
+            "\uD171\uD173\uD174\uD175\uD176\uD177\uD178\uD179"+
+            "\uD17A\uD17B\uD17C\uD17D\uD181\uD182\uD183\uD184"+
+            "\uD185\uD186\uD187\uD188\uD189\uD18A\uD18B\uD18C"+
+            "\uD18D\uD18E\uD18F\uD190\uD191\uD193\uD194\uD195"+
+            "\uD196\uD197\uD198\uD199\uD19A\uD19B\uD19C\uD19D"+
+            "\uD1A1\uD1A2\uD1A3\uD1A4\uD1A5\uD1A6\uD1A7\uD1A8"+
+            "\uD1A9\uD1AA\uD1AB\uD1AC\uD1AD\uD1AE\uD1AF\uD1B0"+
+            "\uD1B1\uD1B3\uD1B4\uD1B5\uD1B6\uD1B7\uD1B8\uD1B9"+
+            "\uD1BA\uD1BB\uD1BC\uD1BD\uD1C1\uD1C2\uD1C3\uD1C4"+
+            "\uD1C5\uD1C6\uD1C7\uD1C8\uD1C9\uD1CA\uD1CB\uD1CC"+
+            "\uD1CD\uD1CE\uD1CF\uD1D0\uD1D1\uD1D3\uD1D4\uD1D5"+
+            "\uD1D6\uD1D7\uD1D8\uD1D9\uD1DA\uD1DB\uD1DC\uD1DD"+
+            "\uD1E1\uD1E2\uD1E3\uD1E4\uD1E5\uD1E6\uD1E7\uD1E8"+
+            "\uD1E9\uD1EA\uD1EB\uD1EC\uD1ED\uD1EE\uD1EF\uD1F0"+
+            "\uD1F1\uD1F3\uD1F4\uD1F5\uD1F6\uD1F7\uD1F8\uD1F9"+
+            "\uD1FA\uD1FB\uD1FC\uD1FD\uD241\uD242\uD243\uD244"+
+            "\uD245\uD246\uD247\uD248\uD249\uD24A\uD24B\uD24C"+
+            "\uD24D\uD24E\uD24F\uD250\uD251\uD253\uD254\uD255"+
+            "\uD256\uD257\uD258\uD259\uD25A\uD25B\uD25C\uD25D"+
+            "\uD261\uD262\uD263\uD264\uD265\uD266\uD267\uD268"+
+            "\uD269\uD26A\uD26B\uD26C\uD26D\uD26E\uD26F\uD270"+
+            "\uD271\uD273\uD274\uD275\uD276\uD277\uD278\uD279"+
+            "\uD27A\uD27B\uD27C\uD27D\uD281\uD282\uD283\uD284"+
+            "\uD285\uD286\uD287\uD288\uD289\uD28A\uD28B\uD28C"+
+            "\uD28D\uD28E\uD28F\uD290\uD291\uD293\uD294\uD295"+
+            "\uD296\uD297\uD298\uD299\uD29A\uD29B\uD29C\uD29D"+
+            "\uD2A1\uD2A2\uD2A3\uD2A4\uD2A5\uD2A6\uD2A7\uD2A8"+
+            "\uD2A9\uD2AA\uD2AB\uD2AC\uD2AD\uD2AE\uD2AF\uD2B0"+
+            "\uD2B1\uD2B3\uD2B4\uD2B5\uD2B6\uD2B7\uD2B8\uD2B9"+
+            "\uD2BA\uD2BB\uD2BC\uD2BD\uD2C1\uD2C2\uD2C3\uD2C4"+
+            "\uD2C5\uD2C6\uD2C7\uD2C8\uD2C9\uD2CA\uD2CB\uD2CC"+
+            "\uD2CD\uD2CE\uD2CF\uD2D0\uD2D1\uD2D3\uD2D4\uD2D5"+
+            "\uD2D6\uD2D7\uD2D8\uD2D9\uD2DA\uD2DB\uD2DC\uD2DD"+
+            "\uD2E1\uD2E2\uD2E3\uD2E4\uD2E5\uD2E6\uD2E7\uD2E8"+
+            "\uD2E9\uD2EA\uD2EB\uD2EC\uD2ED\uD2EE\uD2EF\uD2F0"+
+            "\uD2F1\uD2F3\uD2F4\uD2F5\uD2F6\uD2F7\uD2F8\uD2F9"+
+            "\uD2FA\uD2FB\uD2FC\uD2FD\uD341\uD342\uD343\uD344"+
+            "\uD345\uD346\uD347\uD348\uD349\uD34A\uD34B\uD34C"+
+            "\uD34D\uD34E\uD34F\uD350\uD351\uD353\uD354\uD355"+
+            "\uD356\uD357\uD358\uD359\uD35A\uD35B\uD35C\uD35D"+
+            "\uD361\uD362\uD363\uD364\uD365\uD366\uD367\uD368"+
+            "\uD369\uD36A\uD36B\uD36C\uD36D\uD36E\uD36F\uD370"+
+            "\uD371\uD373\uD374\uD375\uD376\uD377\uD378\uD379"+
+            "\uD37A\uD37B\uD37C\uD37D\uD381\uD382\uD383\uD384"+
+            "\uD385\uD386\uD387\uD388\uD389\uD38A\uD38B\uD38C"+
+            "\uD38D\uD38E\uD38F\uD390\uD391\uD393\uD394\uD395"+
+            "\uD396\uD397\uD398\uD399\uD39A\uD39B\uD39C\uD39D"+
+            "\uD3A1\uD3A2\uD3A3\uD3A4\uD3A5\uD3A6\uD3A7\uD3A8"+
+            "\uD3A9\uD3AA\uD3AB\uD3AC\uD3AD\uD3AE\uD3AF\uD3B0"+
+            "\uD3B1\uD3B3\uD3B4\uD3B5\uD3B6\uD3B7\uD3B8\uD3B9"+
+            "\uD3BA\uD3BB\uD3BC\uD3BD\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE0D0\uE0D6\uE0E7\uE1CF\uE1E8\uE23D\uE2FB\uE332"+
+            "\uE348\uE360\uE36D\uE3D4\uE3D5\uE3D8\uE3DB\uE3DC"+
+            "\uE3DD\uE3DE\uE3DF\uE3E0\uE3E2\uE3E3\uE3E4\uE3E5"+
+            "\uE3E6\uE3E8\uE3E9\uE3EA\uE3EB\uE3ED\uE3EF\uE3F0"+
+            "\uE3F2\uE3F6\uE3FA\uE3FC\uE3FD\uE3FE\uE432\uE433"+
+            "\uE437\uE438\uE439\uE43A\uE43B\uE43D\uE442\uE44E"+
+            "\uE452\uE453\uE454\uE456\uE457\uE458\uE459\uE45A"+
+            "\uE45B\uE45D\uE45E\uE45F\uE460\uE461\uE462\uE463"+
+            "\uE464\uE465\uE466\uE467\uE469\uE46A\uE46E\uE46F"+
+            "\uE471\uE472\uE474\uE475\uE476\uE477\uE478\uE479"+
+            "\uE47A\uE47B\uE492\uE493\uE494\uE495\uE496\uE497"+
+            "\uE499\uE49A\uE576\uE59E\uE5A5\uE5AB\uE5AE\uE648"+
+            "\uE65D\uE6CB\uE6E4\uE8C5\uE8E4\uE935\uE9A5\uE9D5"+
+            "\uE9F4\uEA9E\uEAA0\uEAB3\uEAE1\uEAE8\uEB93\uEBAD"+
+            "\uEBED\uECF5\uED31\uED39\uEDAE\uEDB1\uEDB2\uEDB9"+
+            "\uEDBB\uEDBC\uEDC4\uEDCE\uEDD0\uEDD2\uEDD6\uEDFA"+
+            "\uEDFB\uEDFC\uEDFE\uEE31\uEE34\uEE37\uEE3D\uEE3F"+
+            "\uEE40\uEE41\uEE43\uEE47\uEE48\uEE4C\uEE54\uEE56"+
+            "\uEE57\uEE5A\uEE62\uEE66\uEE69\uEE6C\uEE6F\uEE71"+
+            "\uEE74\uEE75\uEE76\uEE78\uEE7A\uEE7B\uEE7C\uEE91"+
+            "\uEE93\uEE94\uEE97\uEE98\uEE99\uEE9B\uEEA1\uEEA6"+
+            "\uEEA9\uEEAA\uEEAC\uEEAD\uEEB0\uEEBF\uEEC1\uEEC6"+
+            "\uEEC7\uEECB\uEECD\uEECF\uEED0\uEED3\uEEDF\uEEE4"+
+            "\uEEE6\uEEF7\uEF77\uEF78\uEF92\uEF93\uEF99\uEF9B"+
+            "\uEF9D\uEFA0\uEFA7\uEFAC\uEFCC\uEFF7\uF051\uF075"+
+            "\uF096\uF099\uF09E\uF0A0\uF0A4\uF0A7\uF0A9\uF0AA"+
+            "\uF0BA\uF0BB\uF0BD\uF0C1\uF0C2\uF0C6\uF0C7\uF0CC"+
+            "\uF0CF\uF0D0\uF0D1\uF0D2\uF0D8\uF136\uF137\uF13A"+
+            "\uF13F\uF140\uF141\uF142\uF145\uF148\uF14A\uF150"+
+            "\uF151\uF155\uF156\uF159\uF15A\uF165\uF16D\uF16E"+
+            "\uF171\uF174\uF177\uF178\uF199\uF19A\uF19C\uF1A1"+
+            "\uF1A2\uF1A3\uF1EE\uF26B\uF44D\uF49C\uF4B1\uF537";
+
+        private final static String innerIndex9=
+            "\uF57E\uF696\uF698\uF6B8\uF6C8\uF6D3\uF76B\uF792"+
+            "\uF831\uF832\uF876\uF939\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDA31\uDA32\uDA33\uDA34\uDA35\uDA36\uDA37"+
+            "\uDA38\uDA39\uDA3A\uDA3B\uDA3C\uDA3D\uDA3E\uDA3F"+
+            "\uDA40\uDA41\uDA42\uDA43\uDA44\uDA45\uDA46\uDA47"+
+            "\uDA48\uDA49\uDA4A\uDA4B\uDA4C\uDA4D\uDA4E\uDA4F"+
+            "\uDA50\uDA51\uDA52\uDA53\uDA54\uDA55\uDA56\uDA57"+
+            "\uDA58\uDA59\uDA5A\uDA5B\uDA5C\uDA5D\uDA5E\uDA5F"+
+            "\uDA60\uDA61\uDA62\uDA63\uDA64\uDA65\uDA66\uDA67"+
+            "\uDA68\uDA69\uDA6A\uDA6B\uD93C\uDA6D\uDA6E\uDA6F"+
+            "\uDA70\uDA71\uDA72\uDA73\uDA74\uDA75\uDA76\uDA77"+
+            "\uDA78\uDA79\uDA7A\uDA7B\uDA7C\uDA7D\uDA7E\uDA91"+
+            "\uDA92\uDA93\uDA94\uDA95\uDA96\uDA97\uDA98\uDA99"+
+            "\uDA9A\uDA9B\uDA9C\uDA9D\uDA9E\uDA9F\uD93D\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD95B\uD95C\uD9A0\uDAA0\u0000\uD95D\uDA6C\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+        private final static short index1[] = {
+            1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18,
+            19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+            35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+            51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+            67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+            83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 100, 101, 102,
+            103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
+            119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
+            135, 136, 137, 138, 139, 140, 141, 142, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 144, 0, 0, 0, 0, 145
+        };
+
+        private static String index2[] = {
+            innerIndex0,
+            innerIndex1,
+            innerIndex2,
+            innerIndex3,
+            innerIndex4,
+            innerIndex5,
+            innerIndex6,
+            innerIndex7,
+            innerIndex8,
+            innerIndex9
+        };
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11KSC5601.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.CharBuffer;
+import java.nio.ByteBuffer;
+import java.nio.charset.*;
+import sun.nio.cs.*;
+import static sun.nio.cs.CharsetMapping.*;
+
+public class X11KSC5601 extends Charset {
+    public X11KSC5601 () {
+        super("X11KSC5601", null);
+    }
+    public CharsetEncoder newEncoder() {
+        return new Encoder(this);
+    }
+    public CharsetDecoder newDecoder() {
+        return new Decoder(this);
+    }
+
+    public boolean contains(Charset cs) {
+        return cs instanceof X11KSC5601;
+    }
+
+    private class Encoder extends CharsetEncoder {
+        private DoubleByte.Encoder enc = (DoubleByte.Encoder)new EUC_KR().newEncoder();
+
+        public Encoder(Charset cs) {
+            super(cs, 2.0f, 2.0f);
+        }
+
+        public boolean canEncode(char c) {
+            if (c <= 0x7F) {
+                return false;
+            }
+            return enc.canEncode(c);
+        }
+
+        protected int encodeDouble(char c) {
+            return enc.encodeChar(c);
+        }
+
+        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
+            char[] sa = src.array();
+            int sp = src.arrayOffset() + src.position();
+            int sl = src.arrayOffset() + src.limit();
+            byte[] da = dst.array();
+            int dp = dst.arrayOffset() + dst.position();
+            int dl = dst.arrayOffset() + dst.limit();
+
+            try {
+                while (sp < sl) {
+                    char c = sa[sp];
+                    if (c <= '\u007f')
+                        return CoderResult.unmappableForLength(1);
+                    int ncode = encodeDouble(c);
+                    if (ncode != 0 && c != '\u0000' ) {
+                        da[dp++] = (byte) ((ncode  >> 8) & 0x7f);
+                        da[dp++] = (byte) (ncode & 0x7f);
+                        sp++;
+                        continue;
+                    }
+                    return CoderResult.unmappableForLength(1);
+                }
+                return CoderResult.UNDERFLOW;
+            } finally {
+                src.position(sp - src.arrayOffset());
+                dst.position(dp - dst.arrayOffset());
+            }
+        }
+        public boolean isLegalReplacement(byte[] repl) {
+            return true;
+        }
+    }
+
+    private class Decoder extends  CharsetDecoder {
+        private DoubleByte.Decoder dec = (DoubleByte.Decoder)new EUC_KR().newDecoder();
+
+        public Decoder(Charset cs) {
+            super(cs, 0.5f, 1.0f);
+        }
+
+        protected char decodeDouble(int b1, int b2) {
+            return dec.decodeDouble(b1, b2);
+        }
+
+        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
+            byte[] sa = src.array();
+            int sp = src.arrayOffset() + src.position();
+            int sl = src.arrayOffset() + src.limit();
+            assert (sp <= sl);
+            sp = (sp <= sl ? sp : sl);
+            char[] da = dst.array();
+            int dp = dst.arrayOffset() + dst.position();
+            int dl = dst.arrayOffset() + dst.limit();
+            assert (dp <= dl);
+            dp = (dp <= dl ? dp : dl);
+
+
+            try {
+                while (sp < sl) {
+                    if ( sl - sp < 2) {
+                        return CoderResult.UNDERFLOW;
+                    }
+                    int b1 = sa[sp] & 0xFF | 0x80;
+                    int b2 = sa[sp + 1] & 0xFF | 0x80;
+                    char c = decodeDouble(b1, b2);
+                    if (c == UNMAPPABLE_DECODING) {
+                        return CoderResult.unmappableForLength(2);
+                    }
+                    if (dl - dp < 1)
+                        return CoderResult.OVERFLOW;
+                    da[dp++] = c;
+                    sp +=2;
+                }
+                return CoderResult.UNDERFLOW;
+            } finally {
+                src.position(sp - src.arrayOffset());
+                dst.position(dp - dst.arrayOffset());
+            }
+
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11SunUnicode_0.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+package sun.font;
+
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CharsetDecoder;
+
+public class X11SunUnicode_0 extends Charset {
+    public X11SunUnicode_0 () {
+        super("X11SunUnicode_0", null);
+    }
+
+    public CharsetEncoder newEncoder() {
+        return new Encoder(this);
+    }
+
+    /* Seems like supporting a decoder is required, but we aren't going
+     * to be publically exposing this class, so no need to waste work
+     */
+    public CharsetDecoder newDecoder() {
+        throw new Error("Decoder is not implemented for X11SunUnicode_0 Charset");
+    }
+
+    public boolean contains(Charset cs) {
+        return cs instanceof X11SunUnicode_0;
+    }
+
+    private static class Encoder extends DoubleByteEncoder {
+        public Encoder(Charset cs) {
+            super(cs, index1, index2);
+        }
+
+        private final static String innerIndex0=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0120\u0121\u0122\u0000\u0123\u0124\u0125"+
+            "\u0126\u0127\u0128\u0129\u012A\u012B\u012C\u012D"+
+            "\u012E\u012F\u0130\u0131\u0132\u0133\u0134\u0135"+
+            "\u0136\u0137\u0138\u0139\u013A\u013B\u013C\u013D"+
+            "\u013E\u013F\u0140\u0141\u0142\u0143\u0144\u0145"+
+            "\u0146\u0147\u0148\u0149\u014A\u014B\u014C\u014D"+
+            "\u014E\u014F\u0150\u0151\u0152\u0153\u0154\u0155"+
+            "\u0156\u0157\u0000\u0000\u0158\u0159\u015A\u015B"+
+            "\u015C\u015D\u015E\u015F\u0160\u0161\u0162\u0163"+
+            "\u0164\u0165\u0166\u0167\u0168\u0169\u0000\u0000"+
+            "\u016A\u016B\u016C\u016D\u016E\u0000\u0000\u0000"+
+            "\u016F\u0170\u0171\u0172\u0173\u0174\u0175\u0176"+
+            "\u0177\u0178\u0179\u017A\u017B\u017C\u017D\u017E"+
+            "\u017F\u0180\u0181\u0182\u0183\u0184\u0185\u0186"+
+            "\u0187\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+        private final static short index1[] = {
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+        };
+
+        private final static String index2[] = {
+            innerIndex0
+        };
+
+        /* The default implementation creates a decoder and we don't have one */
+        public boolean isLegalReplacement(byte[] repl) {
+            return true;
+        }
+    }
+}
--- a/jdk/src/java.desktop/unix/classes/sun/font/XMap.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/font/XMap.java	Wed Jul 05 20:33:55 2017 +0200
@@ -69,7 +69,7 @@
         boolean addAscii = false;
         boolean lowPartOnly = false;
         if (encoding.equals("dingbats")) {
-            jclass = "sun.awt.motif.X11Dingbats";
+            jclass = "sun.font.X11Dingbats";
             minU = 0x2701;
             maxU = 0x27be;
         } else if (encoding.equals("symbol")){
@@ -81,10 +81,10 @@
         } else if (encoding.equals("iso8859-2")) {
             jclass = "ISO8859_2";
         } else if (encoding.equals("jisx0208.1983-0")) {
-            jclass = "sun.awt.motif.X11JIS0208";
+            jclass = "JIS0208";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.equals("jisx0201.1976-0")) {
-            jclass = "sun.awt.motif.X11JIS0201";
+            jclass = "JIS0201";
             // this is mapping the latin supplement range 128->255 which
             // doesn't exist in JIS0201. This needs examination.
             // it was also overwriting a couple of the mappings of
@@ -94,7 +94,7 @@
             addAscii = true;
             lowPartOnly = true;
         } else if (encoding.equals("jisx0212.1990-0")) {
-            jclass = "sun.awt.motif.X11JIS0212";
+            jclass = "JIS0212";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.equals("iso8859-4")) {
             jclass = "ISO8859_4";
@@ -117,25 +117,25 @@
         } else if (encoding.equals("iso8859-15")) {
             jclass = "ISO8859_15";
         } else if (encoding.equals("ksc5601.1987-0")) {
-            jclass ="sun.awt.motif.X11KSC5601";
+            jclass ="sun.font.X11KSC5601";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.equals( "ksc5601.1992-3")) {
-            jclass ="sun.awt.motif.X11Johab";
+            jclass ="sun.font.X11Johab";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.equals( "ksc5601.1987-1")) {
             jclass ="EUC_KR";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.equals( "cns11643-1")) {
-            jclass = "sun.awt.motif.X11CNS11643P1";
+            jclass = "sun.font.X11CNS11643P1";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.equals("cns11643-2")) {
-            jclass = "sun.awt.motif.X11CNS11643P2";
+            jclass = "sun.font.X11CNS11643P2";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.equals("cns11643-3")) {
-            jclass = "sun.awt.motif.X11CNS11643P3";
+            jclass = "sun.font.X11CNS11643P3";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.equals("gb2312.1980-0")) {
-            jclass = "sun.awt.motif.X11GB2312";
+            jclass = "sun.font.X11GB2312";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.indexOf("big5") >= 0) {
             jclass = "Big5";
@@ -144,19 +144,19 @@
         } else if (encoding.equals("tis620.2533-0")) {
             jclass = "TIS620";
         } else if (encoding.equals("gbk-0")) {
-            jclass = "sun.awt.motif.X11GBK";
+            jclass = "sun.font.X11GBK";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.indexOf("sun.unicode-0") >= 0) {
-            jclass = "sun.awt.motif.X11SunUnicode_0";
+            jclass = "sun.font.X11SunUnicode_0";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.indexOf("gb18030.2000-1") >= 0) {
-            jclass = "sun.awt.motif.X11GB18030_1";
+            jclass = "sun.font.X11GB18030_1";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.indexOf( "gb18030.2000-0") >= 0) {
-            jclass = "sun.awt.motif.X11GB18030_0";
+            jclass = "sun.font.X11GB18030_0";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.indexOf("hkscs") >= 0) {
-            jclass = "sun.awt.HKSCS";
+            jclass = "MS950_HKSCS_XP";
             nBytes = DOUBLE_BYTE;
         }
         return new XMap(jclass, minU, maxU, nBytes, addAscii, lowPartOnly);
--- a/jdk/src/java.desktop/unix/classes/sun/java2d/opengl/GLXVolatileSurfaceManager.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/java2d/opengl/GLXVolatileSurfaceManager.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,6 +31,9 @@
 import java.awt.GraphicsConfiguration;
 import java.awt.Transparency;
 import java.awt.image.ColorModel;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.X11ComponentPeer;
 import sun.awt.image.SunVolatileImage;
 import sun.awt.image.VolatileSurfaceManager;
@@ -73,12 +76,11 @@
      * Create a pbuffer-based SurfaceData object (or init the backbuffer
      * of an existing window if this is a double buffered GraphicsConfig)
      */
-    @SuppressWarnings("deprecation")
     protected SurfaceData initAcceleratedSurface() {
         SurfaceData sData;
         Component comp = vImg.getComponent();
-        X11ComponentPeer peer =
-            (comp != null) ? (X11ComponentPeer)comp.getPeer() : null;
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        X11ComponentPeer peer = (comp != null) ? acc.getPeer(comp) : null;
 
         try {
             boolean createVSynced = false;
--- a/jdk/src/java.desktop/unix/classes/sun/java2d/xr/XRSolidSrcPict.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/java2d/xr/XRSolidSrcPict.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * Copyright (c) 2013, 2014 Oracle and/or its affiliates. All rights reserved.
-
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
--- a/jdk/src/java.desktop/unix/native/common/awt/awt_Font.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/native/common/awt/awt_Font.c	Wed Jul 05 20:33:55 2017 +0200
@@ -84,12 +84,10 @@
   (JNIEnv *env, jclass cls)
 {
 #ifndef HEADLESS
-    /** We call "NoClientCode" methods because they won't invoke client
-        code on the privileged toolkit thread **/
     CHECK_NULL(fontIDs.pData = (*env)->GetFieldID(env, cls, "pData", "J"));
     CHECK_NULL(fontIDs.style = (*env)->GetFieldID(env, cls, "style", "I"));
     CHECK_NULL(fontIDs.size = (*env)->GetFieldID(env, cls, "size", "I"));
-    CHECK_NULL(fontIDs.getPeer = (*env)->GetMethodID(env, cls, "getPeer_NoClientCode",
+    CHECK_NULL(fontIDs.getPeer = (*env)->GetMethodID(env, cls, "getFontPeer",
                                                      "()Ljava/awt/peer/FontPeer;"));
     CHECK_NULL(fontIDs.getFamily = (*env)->GetMethodID(env, cls, "getFamily_NoClientCode",
                                                        "()Ljava/lang/String;"));
--- a/jdk/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c	Wed Jul 05 20:33:55 2017 +0200
@@ -1716,9 +1716,9 @@
 
         /*
          * REMIND: Fullscreen mode doesn't work quite right with multi-monitor
-         * setups and RANDR 1.2. So for now we also require a single screen.
+         * setups and RANDR 1.2.
          */
-        if (awt_numScreens > 1 ) {
+        if ((rr_maj_ver == 1 && rr_min_ver <= 2) && awt_numScreens > 1) {
             J2dRlsTraceLn(J2D_TRACE_INFO, "X11GD_InitXrandrFuncs: Can't use Xrandr. "
                           "Multiple screens in use");
             dlclose(pLibRandR);
@@ -1806,40 +1806,14 @@
     Atom wmState = XInternAtom(awt_display, "_NET_WM_STATE", False);
     Atom wmStateFs = XInternAtom(awt_display,
                                  "_NET_WM_STATE_FULLSCREEN", False);
-    Window root, parent, *children = NULL;
-    unsigned int numchildren;
+    XWindowAttributes attr;
     XEvent event;
-    Status status;
 
-    if (wmState == None || wmStateFs == None) {
+    if (wmState == None || wmStateFs == None
+            || !XGetWindowAttributes(awt_display, win, &attr)) {
         return;
     }
 
-    /*
-     * Note: the Window passed to this method is typically the "content
-     * window" of the top-level, but we need the actual shell window for
-     * the purposes of constructing the XEvent.  Therefore, we walk up the
-     * window hierarchy here to find the true top-level.
-     */
-    do {
-        if (!XQueryTree(awt_display, win,
-                        &root, &parent,
-                        &children, &numchildren))
-        {
-            return;
-        }
-
-        if (children != NULL) {
-            XFree(children);
-        }
-
-        if (parent == root) {
-            break;
-        }
-
-        win = parent;
-    } while (root != parent);
-
     memset(&event, 0, sizeof(event));
     event.xclient.type = ClientMessage;
     event.xclient.message_type = wmState;
@@ -1849,7 +1823,7 @@
     event.xclient.data.l[0] = enabled ? 1 : 0; // 1==add, 0==remove
     event.xclient.data.l[1] = wmStateFs;
 
-    XSendEvent(awt_display, root, False,
+    XSendEvent(awt_display, attr.root, False,
                SubstructureRedirectMask | SubstructureNotifyMask,
                &event);
     XSync(awt_display, False);
--- a/jdk/src/java.desktop/unix/native/libfontmanager/X11FontScaler.c	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/native/libfontmanager/X11FontScaler.c	Wed Jul 05 20:33:55 2017 +0200
@@ -234,7 +234,7 @@
 
     NativeScalerContext *context = (NativeScalerContext*)pScalerContext;
     AWTFont xFont = (AWTFont)context->xFont;
-    AWTChar xcs;
+    AWTChar xcs = NULL;
     jfloat advance = 0.0f;
 
     if (xFont == NULL || context->ptSize == NO_POINTSIZE) {
--- a/jdk/src/java.desktop/windows/classes/sun/awt/Win32GraphicsDevice.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/Win32GraphicsDevice.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -329,7 +329,6 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public synchronized void setFullScreenWindow(Window w) {
         Window old = getFullScreenWindow();
         if (w == old) {
@@ -353,7 +352,7 @@
                 // entering the fullscreen mode.
                 defaultDisplayMode = null;
             }
-            WWindowPeer peer = (WWindowPeer)old.getPeer();
+            WWindowPeer peer = AWTAccessor.getComponentAccessor().getPeer(old);
             if (peer != null) {
                 peer.setFullScreenExclusiveModeState(false);
                 // we used to destroy the buffers on exiting fs mode, this
@@ -372,7 +371,7 @@
             defaultDisplayMode = getDisplayMode();
             addFSWindowListener(w);
             // Enter full screen exclusive mode.
-            WWindowPeer peer = (WWindowPeer)w.getPeer();
+            WWindowPeer peer = AWTAccessor.getComponentAccessor().getPeer(w);
             if (peer != null) {
                 synchronized(peer) {
                     enterFullScreenExclusive(screen, peer);
@@ -405,7 +404,6 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public synchronized void setDisplayMode(DisplayMode dm) {
         if (!isDisplayChangeSupported()) {
             super.setDisplayMode(dm);
@@ -419,7 +417,7 @@
         }
         Window w = getFullScreenWindow();
         if (w != null) {
-            WWindowPeer peer = (WWindowPeer)w.getPeer();
+            WWindowPeer peer = AWTAccessor.getComponentAccessor().getPeer(w);
             configDisplayMode(screen, peer, dm.getWidth(), dm.getHeight(),
                 dm.getBitDepth(), dm.getRefreshRate());
             // resize the fullscreen window to the dimensions of the new
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WChoicePeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WChoicePeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,6 +30,8 @@
 import java.awt.event.WindowEvent;
 import java.awt.event.WindowListener;
 import java.awt.event.WindowAdapter;
+
+import sun.awt.AWTAccessor;
 import sun.awt.SunToolkit;
 
 final class WChoicePeer extends WComponentPeer implements ChoicePeer {
@@ -94,7 +96,6 @@
     native void create(WComponentPeer parent);
 
     @Override
-    @SuppressWarnings("deprecation")
     void initialize() {
         Choice opt = (Choice)target;
         int itemCount = opt.getItemCount();
@@ -111,7 +112,8 @@
 
         Window parentWindow = SunToolkit.getContainingWindow((Component)target);
         if (parentWindow != null) {
-            WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer();
+            final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                                 .getPeer(parentWindow);
             if (wpeer != null) {
                 windowListener = new WindowAdapter() {
                         @Override
@@ -130,13 +132,13 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     protected void disposeImpl() {
         // TODO: we should somehow reset the listener when the choice
         // is moved to another toplevel without destroying its peer.
         Window parentWindow = SunToolkit.getContainingWindow((Component)target);
         if (parentWindow != null) {
-            WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer();
+            final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                                .getPeer(parentWindow);
             if (wpeer != null) {
                 wpeer.removeWindowListener(windowListener);
             }
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WComponentPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WComponentPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -569,7 +569,6 @@
     final static Font defaultFont = new Font(Font.DIALOG, Font.PLAIN, 12);
 
     @Override
-    @SuppressWarnings("deprecation")
     public Graphics getGraphics() {
         if (isDisposed()) {
             return null;
@@ -578,8 +577,9 @@
         Component target = (Component)getTarget();
         Window window = SunToolkit.getContainingWindow(target);
         if (window != null) {
-            Graphics g =
-                ((WWindowPeer)window.getPeer()).getTranslucentGraphics();
+            final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                                 .getPeer(window);
+            Graphics g = wpeer.getTranslucentGraphics();
             // getTranslucentGraphics() returns non-null value for non-opaque windows only
             if (g != null) {
                 // Non-opaque windows do not support heavyweight children.
@@ -685,7 +685,6 @@
 
     // TODO: consider moving it to KeyboardFocusManagerPeerImpl
     @Override
-    @SuppressWarnings("deprecation")
     public boolean requestFocus(Component lightweightChild, boolean temporary,
                                 boolean focusedWindowChangeAllowed, long time,
                                 CausedFocusEvent.Cause cause)
@@ -713,7 +712,8 @@
               if (parentWindow == null) {
                   return rejectFocusRequestHelper("WARNING: Parent window is null");
               }
-              WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer();
+              final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                                   .getPeer(parentWindow);
               if (wpeer == null) {
                   return rejectFocusRequestHelper("WARNING: Parent window's peer is null");
               }
@@ -1104,7 +1104,6 @@
     // in the browser on Vista when DWM is enabled.
     // @return true if the toplevel container is not an EmbeddedFrame or
     // if this EmbeddedFrame is acceleration capable, false otherwise
-    @SuppressWarnings("deprecation")
     private static final boolean isContainingTopLevelAccelCapable(Component c) {
         while (c != null && !(c instanceof WEmbeddedFrame)) {
             c = c.getParent();
@@ -1112,7 +1111,9 @@
         if (c == null) {
             return true;
         }
-        return ((WEmbeddedFramePeer)c.getPeer()).isAccelCapable();
+        final WEmbeddedFramePeer peer = AWTAccessor.getComponentAccessor()
+                                                   .getPeer(c);
+        return peer.isAccelCapable();
     }
 
     /**
@@ -1120,7 +1121,6 @@
      * @since 1.7
      */
     @Override
-    @SuppressWarnings("deprecation")
     public void applyShape(Region shape) {
         if (shapeLog.isLoggable(PlatformLogger.Level.FINER)) {
             shapeLog.finer("*** INFO: Setting shape: PEER: " + this
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WDialogPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WDialogPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -103,7 +103,7 @@
     @Override
     public void blockWindows(java.util.List<Window> toBlock) {
         for (Window w : toBlock) {
-            WWindowPeer wp = (WWindowPeer)AWTAccessor.getComponentAccessor().getPeer(w);
+            WWindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
             if (wp != null) {
                 wp.setModalBlocked((Dialog)target, true);
             }
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WEmbeddedFrame.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WEmbeddedFrame.java	Wed Jul 05 20:33:55 2017 +0200
@@ -30,8 +30,11 @@
 import java.awt.event.InvocationEvent;
 import java.awt.peer.ComponentPeer;
 import java.awt.image.*;
+
 import sun.awt.image.ByteInterleavedRaster;
 import sun.security.action.GetPropertyAction;
+
+import java.awt.peer.FramePeer;
 import java.security.PrivilegedAction;
 import  java.security.AccessController;
 
@@ -80,9 +83,8 @@
         }
     }
 
-    @SuppressWarnings("deprecation")
     public void addNotify() {
-        if (getPeer() == null) {
+        if (!isDisplayable()) {
             WToolkit toolkit = (WToolkit)Toolkit.getDefaultToolkit();
             setPeer(toolkit.createEmbeddedFrame(this));
         }
@@ -232,16 +234,16 @@
     public void activateEmbeddingTopLevel() {
     }
 
-    @SuppressWarnings("deprecation")
     public void synthesizeWindowActivation(final boolean activate) {
+        final FramePeer peer = AWTAccessor.getComponentAccessor().getPeer(this);
         if (!activate || EventQueue.isDispatchThread()) {
-            ((WFramePeer)getPeer()).emulateActivation(activate);
+            peer.emulateActivation(activate);
         } else {
             // To avoid focus concurrence b/w IE and EmbeddedFrame
             // activation is postponed by means of posting it to EDT.
             Runnable r = new Runnable() {
                 public void run() {
-                    ((WFramePeer)getPeer()).emulateActivation(true);
+                    peer.emulateActivation(true);
                 }
             };
             WToolkit.postEvent(WToolkit.targetToAppContext(this),
@@ -249,10 +251,11 @@
         }
     }
 
-    @SuppressWarnings("deprecation")
     public boolean requestFocusToEmbedder() {
         if (isEmbeddedInIE) {
-            return ((WEmbeddedFramePeer) getPeer()).requestFocusToEmbedder();
+            final WEmbeddedFramePeer peer = AWTAccessor.getComponentAccessor()
+                                                       .getPeer(this);
+            return peer.requestFocusToEmbedder();
         }
         return false;
     }
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WFileDialogPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WFileDialogPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -237,7 +237,7 @@
     @Override
     public void blockWindows(java.util.List<Window> toBlock) {
         for (Window w : toBlock) {
-            WWindowPeer wp = (WWindowPeer)AWTAccessor.getComponentAccessor().getPeer(w);
+            WWindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
             if (wp != null) {
                 blockWindow(wp);
             }
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WInputMethod.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WInputMethod.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -40,6 +40,9 @@
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.im.InputMethodAdapter;
 
 final class WInputMethod extends InputMethodAdapter
@@ -606,18 +609,17 @@
 
     // java.awt.Toolkit#getNativeContainer() is not available
     //  from this package
-    @SuppressWarnings("deprecation")
     private WComponentPeer getNearestNativePeer(Component comp)
     {
         if (comp==null)     return null;
-
-        ComponentPeer peer = comp.getPeer();
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        ComponentPeer peer = acc.getPeer(comp);
         if (peer==null)     return null;
 
         while (peer instanceof java.awt.peer.LightweightPeer) {
             comp = comp.getParent();
             if (comp==null) return null;
-            peer = comp.getPeer();
+            peer = acc.getPeer(comp);
             if (peer==null) return null;
         }
 
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WKeyboardFocusManagerPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WKeyboardFocusManagerPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,6 +28,9 @@
 import java.awt.Window;
 import java.awt.Component;
 import java.awt.peer.ComponentPeer;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.KeyboardFocusManagerPeerImpl;
 import sun.awt.CausedFocusEvent;
 
@@ -46,9 +49,9 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void setCurrentFocusOwner(Component comp) {
-        setNativeFocusOwner(comp != null ? comp.getPeer() : null);
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        setNativeFocusOwner(comp != null ? acc.getPeer(comp) : null);
     }
 
     @Override
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPageDialog.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPageDialog.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -57,15 +57,13 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void addNotify() {
         synchronized(getTreeLock()) {
             Container parent = getParent();
-            if (parent != null && parent.getPeer() == null) {
+            if (parent != null && !parent.isDisplayable()) {
                 parent.addNotify();
             }
-
-            if (getPeer() == null) {
+            if (!isDisplayable()) {
                 ComponentPeer peer = ((WToolkit)Toolkit.getDefaultToolkit()).
                     createWPageDialog(this);
                 setPeer(peer);
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialog.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialog.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -58,15 +58,14 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void addNotify() {
         synchronized(getTreeLock()) {
             Container parent = getParent();
-            if (parent != null && parent.getPeer() == null) {
+            if (parent != null && !parent.isDisplayable()) {
                 parent.addNotify();
             }
 
-            if (getPeer() == null) {
+            if (!isDisplayable()) {
                 ComponentPeer peer = ((WToolkit)Toolkit.getDefaultToolkit()).
                     createWPrintDialog(this);
                 setPeer(peer);
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialogPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialogPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -112,7 +112,7 @@
     @Override
     public void blockWindows(java.util.List<Window> toBlock) {
         for (Window w : toBlock) {
-            WWindowPeer wp = (WWindowPeer)AWTAccessor.getComponentAccessor().getPeer(w);
+            WWindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
             if (wp != null) {
                 blockWindow(wp);
             }
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrinterJob.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrinterJob.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,13 +30,11 @@
 import java.awt.Graphics2D;
 import java.awt.GraphicsEnvironment;
 import java.awt.HeadlessException;
-import java.awt.KeyboardFocusManager;
 import java.awt.Toolkit;
 import java.awt.BasicStroke;
 import java.awt.Button;
 import java.awt.Component;
 import java.awt.Dimension;
-import java.awt.Event;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.FileDialog;
@@ -62,6 +60,8 @@
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.print.PeekGraphics;
 import sun.print.PeekMetrics;
 
@@ -2117,7 +2117,6 @@
                                              short xres_quality,
                                              short yres);
 
-    @SuppressWarnings("deprecation")
     public PrintRequestAttributeSet
         showDocumentProperties(Window owner,
                                PrintService service,
@@ -2127,7 +2126,8 @@
             setNativePrintServiceIfNeeded(service.getName());
         } catch (PrinterException e) {
         }
-        long hWnd = ((WWindowPeer)(owner.getPeer())).getHWnd();
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        long hWnd = acc.<WComponentPeer>getPeer(owner).getHWnd();
         DevModeValues info = new DevModeValues();
         getDevModeValues(aset, info);
         boolean ok =
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WScrollPanePeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WScrollPanePeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,6 +29,7 @@
 import java.awt.peer.ScrollPanePeer;
 
 import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.PeerEvent;
 
 import sun.util.logging.PlatformLogger;
@@ -199,7 +200,6 @@
         }
 
         @Override
-        @SuppressWarnings("deprecation")
         public void run() {
             if (getScrollChild() == null) {
                 return;
@@ -267,8 +267,9 @@
             // Paint the exposed area right away.  To do this - find
             // the heavyweight ancestor of the scroll child.
             Component hwAncestor = getScrollChild();
+            final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
             while (hwAncestor != null
-                   && !(hwAncestor.getPeer() instanceof WComponentPeer))
+                   && !(acc.getPeer(hwAncestor) instanceof WComponentPeer))
             {
                 hwAncestor = hwAncestor.getParent();
             }
@@ -278,7 +279,7 @@
                              "couldn't find heavyweight ancestor of scroll pane child");
                 }
             }
-            WComponentPeer hwPeer = (WComponentPeer)hwAncestor.getPeer();
+            WComponentPeer hwPeer = acc.getPeer(hwAncestor);
             hwPeer.paintDamagedAreaImmediately();
         }
     }
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WToolkit.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WToolkit.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,6 +36,8 @@
 import java.beans.PropertyChangeListener;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+
+import sun.awt.AWTAccessor;
 import sun.awt.AppContext;
 import sun.awt.AWTAutoShutdown;
 import sun.awt.AWTPermissions;
@@ -301,9 +303,10 @@
     public void run() {
         AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
             Thread.currentThread().setContextClassLoader(null);
+            Thread.currentThread().setPriority(Thread.NORM_PRIORITY + 1);
             return null;
         });
-        Thread.currentThread().setPriority(Thread.NORM_PRIORITY + 1);
+
         boolean startPump = init();
 
         if (startPump) {
@@ -438,9 +441,8 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void disableBackgroundErase(Canvas canvas) {
-        WCanvasPeer peer = (WCanvasPeer)canvas.getPeer();
+        WCanvasPeer peer = AWTAccessor.getComponentAccessor().getPeer(canvas);
         if (peer == null) {
             throw new IllegalStateException("Canvas must have a valid peer");
         }
@@ -1100,18 +1102,18 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void grab(Window w) {
-        if (w.getPeer() != null) {
-            ((WWindowPeer)w.getPeer()).grab();
+        final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
+        if (peer != null) {
+            ((WWindowPeer) peer).grab();
         }
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void ungrab(Window w) {
-        if (w.getPeer() != null) {
-           ((WWindowPeer)w.getPeer()).ungrab();
+        final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
+        if (peer != null) {
+            ((WWindowPeer) peer).ungrab();
         }
     }
 
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WTrayIconPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WTrayIconPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,6 +34,8 @@
 import java.awt.Image;
 import java.awt.peer.TrayIconPeer;
 import java.awt.image.*;
+
+import sun.awt.AWTAccessor;
 import sun.awt.SunToolkit;
 import sun.awt.image.IntegerComponentRaster;
 
@@ -80,25 +82,23 @@
         if (isDisposed())
             return;
 
-        SunToolkit.executeOnEventHandlerThread(target, new Runnable() {
-                @Override
-                @SuppressWarnings("deprecation")
-                public void run() {
-                    PopupMenu newPopup = ((TrayIcon)target).getPopupMenu();
-                    if (popup != newPopup) {
-                        if (popup != null) {
-                            popupParent.remove(popup);
-                        }
-                        if (newPopup != null) {
-                            popupParent.add(newPopup);
-                        }
-                        popup = newPopup;
-                    }
-                    if (popup != null) {
-                        ((WPopupMenuPeer)popup.getPeer()).show(popupParent, new Point(x, y));
-                    }
+        SunToolkit.executeOnEventHandlerThread(target, () -> {
+            PopupMenu newPopup = ((TrayIcon)target).getPopupMenu();
+            if (popup != newPopup) {
+                if (popup != null) {
+                    popupParent.remove(popup);
+                }
+                if (newPopup != null) {
+                    popupParent.add(newPopup);
                 }
-            });
+                popup = newPopup;
+            }
+            if (popup != null) {
+                WPopupMenuPeer peer = AWTAccessor.getMenuComponentAccessor()
+                                                 .getPeer(popup);
+                peer.show(popupParent, new Point(x, y));
+            }
+        });
     }
 
     @Override
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WWindowPeer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WWindowPeer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -409,12 +409,12 @@
     }
 
      @Override
-     @SuppressWarnings("deprecation")
     public void setModalBlocked(Dialog dialog, boolean blocked) {
         synchronized (((Component)getTarget()).getTreeLock()) // State lock should always be after awtLock
         {
             // use WWindowPeer instead of WDialogPeer because of FileDialogs and PrintDialogs
-            WWindowPeer blockerPeer = (WWindowPeer)dialog.getPeer();
+            WWindowPeer blockerPeer = AWTAccessor.getComponentAccessor()
+                                                 .getPeer(dialog);
             if (blocked)
             {
                 modalBlocker = blockerPeer;
@@ -609,14 +609,13 @@
         super.print(g);
     }
 
-    @SuppressWarnings("deprecation")
     private void replaceSurfaceDataRecursively(Component c) {
         if (c instanceof Container) {
             for (Component child : ((Container)c).getComponents()) {
                 replaceSurfaceDataRecursively(child);
             }
         }
-        ComponentPeer cp = c.getPeer();
+        final Object cp = AWTAccessor.getComponentAccessor().getPeer(c);
         if (cp instanceof WComponentPeer) {
             ((WComponentPeer)cp).replaceSurfaceDataLater();
         }
@@ -818,7 +817,7 @@
      * updates the list of active windows per AppContext, so the latest active
      * window is always at the end of the list. The list is stored in AppContext.
      */
-    @SuppressWarnings( value = {"deprecation", "unchecked"})
+    @SuppressWarnings("unchecked")
     private static class ActiveWindowListener implements PropertyChangeListener {
         @Override
         public void propertyChange(PropertyChangeEvent e) {
@@ -828,7 +827,7 @@
             }
             AppContext appContext = SunToolkit.targetToAppContext(w);
             synchronized (appContext) {
-                WWindowPeer wp = (WWindowPeer)w.getPeer();
+                WWindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
                 // add/move wp to the end of the list
                 List<WWindowPeer> l = (List<WWindowPeer>)appContext.get(ACTIVE_WINDOWS_KEY);
                 if (l != null) {
--- a/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,6 +37,9 @@
 import java.awt.event.WindowListener;
 import java.awt.peer.WindowPeer;
 import java.util.ArrayList;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.Win32GraphicsDevice;
 import sun.awt.windows.WWindowPeer;
 import sun.java2d.pipe.hw.ContextCapabilities;
@@ -176,11 +179,10 @@
                                                                  long hwnd);
 
     @Override
-    @SuppressWarnings("deprecation")
     protected void enterFullScreenExclusive(final int screen, WindowPeer wp)
     {
-        final WWindowPeer wpeer = (WWindowPeer)realFSWindow.getPeer();
-
+        final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                             .getPeer(realFSWindow);
         D3DRenderQueue rq = D3DRenderQueue.getInstance();
         rq.lock();
         try {
@@ -247,16 +249,15 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     protected void addFSWindowListener(Window w) {
         // if the window is not a toplevel (has an owner) we have to use the
         // real toplevel to enter the full-screen mode with (4933099).
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
         if (!(w instanceof Frame) && !(w instanceof Dialog) &&
             (realFSWindow = getToplevelOwner(w)) != null)
         {
             ownerOrigBounds = realFSWindow.getBounds();
-            WWindowPeer fp = (WWindowPeer)realFSWindow.getPeer();
-
+            WWindowPeer fp = acc.getPeer(realFSWindow);
             ownerWasVisible = realFSWindow.isVisible();
             Rectangle r = w.getBounds();
             // we use operations on peer instead of component because calling
@@ -268,14 +269,13 @@
         }
 
         fsWindowWasAlwaysOnTop = realFSWindow.isAlwaysOnTop();
-        ((WWindowPeer)realFSWindow.getPeer()).setAlwaysOnTop(true);
+        ((WWindowPeer) acc.getPeer(realFSWindow)).setAlwaysOnTop(true);
 
         fsWindowListener = new D3DFSWindowAdapter();
         realFSWindow.addWindowListener(fsWindowListener);
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     protected void removeFSWindowListener(Window w) {
         realFSWindow.removeWindowListener(fsWindowListener);
         fsWindowListener = null;
@@ -290,7 +290,8 @@
          * its original size (just like the Window is being resized
          * to its original size in GraphicsDevice).
          */
-        WWindowPeer wpeer = (WWindowPeer)realFSWindow.getPeer();
+        final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                             .getPeer(realFSWindow);
         if (wpeer != null) {
             if (ownerOrigBounds != null) {
                 // if the window went into fs mode before it was realized it
@@ -340,7 +341,6 @@
                                                        int bitDepth,
                                                        int refreshRate);
     @Override
-    @SuppressWarnings("deprecation")
     protected void configDisplayMode(final int screen, final WindowPeer w,
                                      final int width, final int height,
                                      final int bitDepth, final int refreshRate)
@@ -351,8 +351,8 @@
                                     refreshRate);
             return;
         }
-
-        final WWindowPeer wpeer = (WWindowPeer)realFSWindow.getPeer();
+        final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                             .getPeer(realFSWindow);
 
         // REMIND: we do this before we switch the display mode, so
         // the dimensions may be exceeding the dimensions of the screen,
--- a/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,6 +38,7 @@
 import java.util.HashMap;
 
 import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.util.ThreadGroupUtils;
 import sun.awt.Win32GraphicsConfig;
 import sun.awt.windows.WComponentPeer;
@@ -531,11 +532,11 @@
      * @param comp component to check for hw children
      * @return true if Component has heavyweight children
      */
-    @SuppressWarnings("deprecation")
     private static boolean hasHWChildren(Component comp) {
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
         if (comp instanceof Container) {
             for (Component c : ((Container)comp).getComponents()) {
-                if (c.getPeer() instanceof WComponentPeer || hasHWChildren(c)) {
+                if (acc.getPeer(c) instanceof WComponentPeer || hasHWChildren(c)) {
                     return true;
                 }
             }
--- a/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DVolatileSurfaceManager.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DVolatileSurfaceManager.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,6 +30,9 @@
 import java.awt.Image;
 import java.awt.Transparency;
 import java.awt.image.ColorModel;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.Win32GraphicsConfig;
 import sun.awt.image.SunVolatileImage;
 import sun.awt.image.SurfaceManager;
@@ -79,12 +82,11 @@
      * Create a pbuffer-based SurfaceData object (or init the backbuffer
      * of an existing window if this is a double buffered GraphicsConfig).
      */
-    @SuppressWarnings("deprecation")
     protected SurfaceData initAcceleratedSurface() {
         SurfaceData sData;
         Component comp = vImg.getComponent();
-        WComponentPeer peer =
-            (comp != null) ? (WComponentPeer)comp.getPeer() : null;
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        WComponentPeer peer = (comp != null) ? acc.getPeer(comp) : null;
 
         try {
             boolean forceback = false;
--- a/jdk/src/java.desktop/windows/classes/sun/java2d/opengl/WGLVolatileSurfaceManager.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/java2d/opengl/WGLVolatileSurfaceManager.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,6 +31,9 @@
 import java.awt.GraphicsConfiguration;
 import java.awt.Transparency;
 import java.awt.image.ColorModel;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.image.SunVolatileImage;
 import sun.awt.image.VolatileSurfaceManager;
 import sun.awt.windows.WComponentPeer;
@@ -73,12 +76,11 @@
      * Create a pbuffer-based SurfaceData object (or init the backbuffer
      * of an existing window if this is a double buffered GraphicsConfig).
      */
-    @SuppressWarnings("deprecation")
     protected SurfaceData initAcceleratedSurface() {
         SurfaceData sData;
         Component comp = vImg.getComponent();
-        WComponentPeer peer =
-            (comp != null) ? (WComponentPeer)comp.getPeer() : null;
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        WComponentPeer peer = (comp != null) ? acc.getPeer(comp) : null;
 
         try {
             boolean createVSynced = false;
--- a/jdk/src/java.desktop/windows/classes/sun/java2d/windows/WindowsFlags.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/java2d/windows/WindowsFlags.java	Wed Jul 05 20:33:55 2017 +0200
@@ -126,7 +126,6 @@
     private static boolean disableRegistry;
     private static boolean magPresent;
     private static boolean setHighDPIAware;
-    private static String javaVersion;
     // TODO: other flags, including nopixfmt
 
     static {
@@ -240,17 +239,6 @@
                     getBooleanProp("sun.java2d.checkRegistry", false);
                 disableRegistry =
                     getBooleanProp("sun.java2d.disableRegistry", false);
-                javaVersion = System.getProperty("java.version");
-                if (javaVersion == null) {
-                    // Cannot be true, nonetheless...
-                    javaVersion = "default";
-                } else {
-                    int dashIndex = javaVersion.indexOf('-');
-                    if (dashIndex >= 0) {
-                        // an interim release; use only the part preceding the -
-                        javaVersion = javaVersion.substring(0, dashIndex);
-                    }
-                }
                 String dpiOverride = System.getProperty("sun.java2d.dpiaware");
                 if (dpiOverride != null) {
                     setHighDPIAware = dpiOverride.equalsIgnoreCase("true");
--- a/jdk/src/java.desktop/windows/native/libawt/windows/awt_Button.cpp	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/native/libawt/windows/awt_Button.cpp	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -242,7 +242,8 @@
         RECT focusRect;
         VERIFY(::CopyRect(&focusRect, &rect));
         VERIFY(::InflateRect(&focusRect,-inf,-inf));
-        VERIFY(::DrawFocusRect(hDC, &focusRect));
+        if(::DrawFocusRect(hDC, &focusRect) == 0)
+            VERIFY(::GetLastError() == 0);
     }
 
     /* Notify any subclasses */
--- a/jdk/src/java.desktop/windows/native/libawt/windows/awt_Checkbox.cpp	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/native/libawt/windows/awt_Checkbox.cpp	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -290,12 +290,14 @@
     if ((drawInfo.itemState & ODS_FOCUS) &&
         ((drawInfo.itemAction & ODA_FOCUS)||
          (drawInfo.itemAction &ODA_DRAWENTIRE))) {
-        VERIFY(::DrawFocusRect(hDC, &focusRect));
+        if(::DrawFocusRect(hDC, &focusRect) == 0)
+            VERIFY(::GetLastError() == 0);
     }
     /*  erase focus rect */
     else if (!(drawInfo.itemState & ODS_FOCUS) &&
              (drawInfo.itemAction & ODA_FOCUS)) {
-        VERIFY(::DrawFocusRect(hDC, &focusRect));
+        if(::DrawFocusRect(hDC, &focusRect) == 0)
+            VERIFY(::GetLastError() == 0);
     }
 
     /*  Notify any subclasses */
--- a/jdk/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -3742,12 +3742,14 @@
 void AwtComponent::OpenCandidateWindow(int x, int y)
 {
     UINT bits = 1;
-    RECT rc;
-    GetWindowRect(GetHWnd(), &rc);
+    POINT p = {0, 0}; // upper left corner of the client area
+    HWND hWnd = GetHWnd();
+    HWND hTop = GetTopLevelParentForWindow(hWnd);
+    ::ClientToScreen(hTop, &p);
 
     for (int iCandType=0; iCandType<32; iCandType++, bits<<=1) {
         if ( m_bitsCandType & bits )
-            SetCandidateWindow(iCandType, x-rc.left, y-rc.top);
+            SetCandidateWindow(iCandType, x - p.x, y - p.y);
     }
     if (m_bitsCandType != 0) {
         // REMIND: is there any chance GetProxyFocusOwner() returns NULL here?
@@ -4322,7 +4324,8 @@
     if ((drawInfo.itemState & ODS_FOCUS)  &&
         (drawInfo.itemAction & (ODA_FOCUS | ODA_DRAWENTIRE))) {
       if (!unfocusableChoice){
-          VERIFY(::DrawFocusRect(hDC, &rect));
+          if(::DrawFocusRect(hDC, &rect) == 0)
+              VERIFY(::GetLastError() == 0);
       }
     }
     env->DeleteLocalRef(target);
--- a/jdk/src/java.desktop/windows/native/libawt/windows/awt_Font.cpp	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/native/libawt/windows/awt_Font.cpp	Wed Jul 05 20:33:55 2017 +0200
@@ -985,7 +985,7 @@
 JNIEXPORT void JNICALL
 Java_java_awt_Font_initIDs(JNIEnv *env, jclass cls)
 {
-    CHECK_NULL(AwtFont::peerMID = env->GetMethodID(cls, "getPeer",
+    CHECK_NULL(AwtFont::peerMID = env->GetMethodID(cls, "getFontPeer",
          "()Ljava/awt/peer/FontPeer;"));
     CHECK_NULL(AwtFont::pDataID = env->GetFieldID(cls, "pData", "J"));
     CHECK_NULL(AwtFont::nameID =
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.naming/share/classes/sun/security/provider/certpath/ldap/JdkLDAP.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.provider.certpath.ldap;
+
+import java.util.HashMap;
+import java.util.List;
+import java.security.Provider;
+import java.security.NoSuchAlgorithmException;
+import java.security.InvalidParameterException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.ProviderException;
+import java.security.cert.CertStoreParameters;
+
+/**
+ * Provider class for the JdkLDAP provider.
+ * Supports LDAP cert store.
+ *
+ * @since   1.9
+ */
+public final class JdkLDAP extends Provider {
+
+    private static final long serialVersionUID = -2279741232933606418L;
+
+    private static final class ProviderService extends Provider.Service {
+        ProviderService(Provider p, String type, String algo, String cn,
+            List<String> aliases, HashMap<String, String> attrs) {
+            super(p, type, algo, cn, aliases, attrs);
+        }
+
+        @Override
+        public Object newInstance(Object ctrParamObj)
+            throws NoSuchAlgorithmException {
+            String type = getType();
+            String algo = getAlgorithm();
+            if (type.equals("CertStore") && algo.equals("LDAP")) {
+                if (ctrParamObj != null &&
+                    !(ctrParamObj instanceof CertStoreParameters)) {
+                    throw new InvalidParameterException
+                    ("constructorParameter must be instanceof CertStoreParameters");
+                }
+                try {
+                    return new LDAPCertStore((CertStoreParameters) ctrParamObj);
+                } catch (Exception ex) {
+                    throw new NoSuchAlgorithmException("Error constructing " +
+                        type + " for " + algo + " using JdkLDAP", ex);
+                }
+            }
+            throw new ProviderException("No impl for " + algo + " " + type);
+        }
+    }
+
+    public JdkLDAP() {
+        super("JdkLDAP", 1.9d, "JdkLDAP Provider (implements LDAP CertStore)");
+
+        HashMap<String, String> attrs = new HashMap<>(2);
+        attrs.put("LDAPSchema", "RFC2587");
+        attrs.put("ImplementedIn", "Software");
+
+        /*
+         * CertStore
+         * attrs: LDAPSchema, ImplementedIn
+         */
+        putService(new ProviderService(this, "CertStore",
+            "LDAP", "sun.security.provider.certpath.ldap.LDAPCertStore",
+            null, attrs));
+    }
+}
--- a/jdk/src/java.naming/share/classes/sun/security/provider/certpath/ldap/LDAPCertStore.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.naming/share/classes/sun/security/provider/certpath/ldap/LDAPCertStore.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,29 +25,15 @@
 
 package sun.security.provider.certpath.ldap;
 
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
 import java.math.BigInteger;
 import java.net.URI;
 import java.util.*;
-import javax.naming.Context;
-import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
-import javax.naming.NameNotFoundException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.BasicAttributes;
 
 import java.security.*;
 import java.security.cert.Certificate;
 import java.security.cert.*;
-import javax.naming.CommunicationException;
-import javax.naming.ldap.InitialLdapContext;
-import javax.naming.ldap.LdapContext;
 import javax.security.auth.x500.X500Principal;
 
-import sun.misc.HexDumpEncoder;
-import sun.security.provider.certpath.X509CertificatePair;
 import sun.security.util.Cache;
 import sun.security.util.Debug;
 import sun.security.x509.X500Name;
@@ -109,480 +95,124 @@
 
     private final static boolean DEBUG = false;
 
-    /**
-     * LDAP attribute identifiers.
-     */
-    private static final String USER_CERT = "userCertificate;binary";
-    private static final String CA_CERT = "cACertificate;binary";
-    private static final String CROSS_CERT = "crossCertificatePair;binary";
-    private static final String CRL = "certificateRevocationList;binary";
-    private static final String ARL = "authorityRevocationList;binary";
-    private static final String DELTA_CRL = "deltaRevocationList;binary";
+    private String ldapDN;
+
+    private LDAPCertStoreImpl impl;
+
+    public LDAPCertStore(CertStoreParameters params)
+        throws InvalidAlgorithmParameterException {
+        super(params);
 
-    // Constants for various empty values
-    private final static String[] STRING0 = new String[0];
-
-    private final static byte[][] BB0 = new byte[0][];
-
-    private final static Attributes EMPTY_ATTRIBUTES = new BasicAttributes();
-
-    // cache related constants
-    private final static int DEFAULT_CACHE_SIZE = 750;
-    private final static int DEFAULT_CACHE_LIFETIME = 30;
+        String serverName;
+        int port;
+        String dn = null;
+        if (params == null) {
+            throw new InvalidAlgorithmParameterException(
+                "parameters required for LDAP Certore");
+        }
+        if (params instanceof LDAPCertStoreParameters) {
+            LDAPCertStoreParameters p = (LDAPCertStoreParameters) params;
+            serverName = p.getServerName();
+            port = p.getPort();
+        } else if (params instanceof URICertStoreParameters) {
+            URICertStoreParameters p = (URICertStoreParameters) params;
+            URI u = p.getURI();
+            if (!u.getScheme().equalsIgnoreCase("ldap")) {
+                throw new InvalidAlgorithmParameterException(
+                "Only LDAP URIs are supported for LDAP Certore");
+            }
+            // Use the same default values as in LDAPCertStoreParameters
+            // if unspecified in URI
+            serverName = u.getHost();
+            if (serverName == null) {
+                serverName = "localhost";
+            }
+            port = u.getPort();
+            if (port == -1) {
+                port = 389;
+            }
+            dn = u.getPath();
+            if (dn != null && dn.charAt(0) == '/') {
+                dn = dn.substring(1);
+            }
+        } else {
+            throw new InvalidAlgorithmParameterException(
+                "parameters must be either LDAPCertStoreParameters or " +
+                "URICertStoreParameters");
+        }
 
-    private final static int LIFETIME;
+        Key k = new Key(serverName, port);
+        LDAPCertStoreImpl lci = certStoreCache.get(k);
+        if (lci == null) {
+            this.impl = new LDAPCertStoreImpl(serverName, port);
+            certStoreCache.put(k, impl);
+        } else {
+            this.impl = lci;
+            if (debug != null) {
+                debug.println("LDAPCertStore.getInstance: cache hit");
+            }
+        }
+        this.ldapDN = dn;
+    }
 
-    private final static String PROP_LIFETIME =
-                            "sun.security.certpath.ldap.cache.lifetime";
+    private static class Key {
+        volatile int hashCode;
+
+        String serverName;
+        int port;
 
-    /*
-     * Internal system property, that when set to "true", disables the
-     * JNDI application resource files lookup to prevent recursion issues
-     * when validating signed JARs with LDAP URLs in certificates.
-     */
-    private final static String PROP_DISABLE_APP_RESOURCE_FILES =
-        "sun.security.certpath.ldap.disable.app.resource.files";
+        Key(String serverName, int port) {
+            this.serverName = serverName;
+            this.port = port;
+        }
 
-    static {
-        String s = AccessController.doPrivileged(
-            (PrivilegedAction<String>) () -> System.getProperty(PROP_LIFETIME));
-        if (s != null) {
-            LIFETIME = Integer.parseInt(s); // throws NumberFormatException
-        } else {
-            LIFETIME = DEFAULT_CACHE_LIFETIME;
+        @Override
+        public boolean equals(Object obj) {
+            if (!(obj instanceof Key)) {
+                return false;
+            }
+            Key key = (Key) obj;
+            return (port == key.port &&
+                serverName.equalsIgnoreCase(key.serverName));
+        }
+
+        @Override
+        public int hashCode() {
+            if (hashCode == 0) {
+                int result = 17;
+                result = 37*result + port;
+                result = 37*result +
+                    serverName.toLowerCase(Locale.ENGLISH).hashCode();
+                hashCode = result;
+            }
+            return hashCode;
         }
     }
 
     /**
-     * The CertificateFactory used to decode certificates from
-     * their binary stored form.
-     */
-    private CertificateFactory cf;
-    /**
-     * The JNDI directory context.
-     */
-    private LdapContext ctx;
-
-    /**
-     * Flag indicating that communication error occurred.
-     */
-    private boolean communicationError = false;
-
-    /**
-     * Flag indicating whether we should prefetch CRLs.
-     */
-    private boolean prefetchCRLs = false;
-
-    private final Cache<String, byte[][]> valueCache;
-
-    private int cacheHits = 0;
-    private int cacheMisses = 0;
-    private int requests = 0;
-
-    /**
-     * Creates a <code>CertStore</code> with the specified parameters.
-     * For this class, the parameters object must be an instance of
-     * <code>LDAPCertStoreParameters</code>.
-     *
-     * @param params the algorithm parameters
-     * @exception InvalidAlgorithmParameterException if params is not an
-     *   instance of <code>LDAPCertStoreParameters</code>
+     * Returns an LDAPCertStoreImpl object. This method consults a cache of
+     * LDAPCertStoreImpl objects (shared per JVM) using the corresponding
+     * LDAP server name and port info as a key.
      */
-    public LDAPCertStore(CertStoreParameters params)
-            throws InvalidAlgorithmParameterException {
-        super(params);
-        if (!(params instanceof LDAPCertStoreParameters))
-          throw new InvalidAlgorithmParameterException(
-            "parameters must be LDAPCertStoreParameters");
-
-        LDAPCertStoreParameters lparams = (LDAPCertStoreParameters) params;
-
-        // Create InitialDirContext needed to communicate with the server
-        createInitialDirContext(lparams.getServerName(), lparams.getPort());
+    private static final Cache<Key, LDAPCertStoreImpl>
+        certStoreCache = Cache.newSoftMemoryCache(185);
 
-        // Create CertificateFactory for use later on
-        try {
-            cf = CertificateFactory.getInstance("X.509");
-        } catch (CertificateException e) {
-            throw new InvalidAlgorithmParameterException(
-                "unable to create CertificateFactory for X.509");
-        }
-        if (LIFETIME == 0) {
-            valueCache = Cache.newNullCache();
-        } else if (LIFETIME < 0) {
-            valueCache = Cache.newSoftMemoryCache(DEFAULT_CACHE_SIZE);
-        } else {
-            valueCache = Cache.newSoftMemoryCache(DEFAULT_CACHE_SIZE, LIFETIME);
-        }
-    }
-
-    /**
-     * Returns an LDAP CertStore. This method consults a cache of
-     * CertStores (shared per JVM) using the LDAP server/port as a key.
-     */
-    private static final Cache<LDAPCertStoreParameters, CertStore>
-        certStoreCache = Cache.newSoftMemoryCache(185);
-    static synchronized CertStore getInstance(LDAPCertStoreParameters params)
+    // Exist solely for regression test for ensuring that caching is done
+    static synchronized LDAPCertStoreImpl getInstance(LDAPCertStoreParameters params)
         throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
-        // if necessary, convert params to SunLDAPCertStoreParameters because
-        // LDAPCertStoreParameters does not override equals() and hashCode()
-        if (! (params instanceof SunLDAPCertStoreParameters)) {
-            params = new SunLDAPCertStoreParameters(params.getServerName(), params.getPort());
-        }
-        CertStore lcs = certStoreCache.get(params);
-        if (lcs == null) {
-            lcs = CertStore.getInstance("LDAP", params);
-            certStoreCache.put(params, lcs);
+        String serverName = params.getServerName();
+        int port = params.getPort();
+        Key k = new Key(serverName, port);
+        LDAPCertStoreImpl lci = certStoreCache.get(k);
+        if (lci == null) {
+            lci = new LDAPCertStoreImpl(serverName, port);
+            certStoreCache.put(k, lci);
         } else {
             if (debug != null) {
                 debug.println("LDAPCertStore.getInstance: cache hit");
             }
         }
-        return lcs;
-    }
-
-    /**
-     * Create InitialDirContext.
-     *
-     * @param server Server DNS name hosting LDAP service
-     * @param port   Port at which server listens for requests
-     * @throws InvalidAlgorithmParameterException if creation fails
-     */
-    private void createInitialDirContext(String server, int port)
-            throws InvalidAlgorithmParameterException {
-        String url = "ldap://" + server + ":" + port;
-        Hashtable<String,Object> env = new Hashtable<>();
-        env.put(Context.INITIAL_CONTEXT_FACTORY,
-                "com.sun.jndi.ldap.LdapCtxFactory");
-        env.put(Context.PROVIDER_URL, url);
-
-        // If property is set to true, disable application resource file lookup.
-        boolean disableAppResourceFiles = AccessController.doPrivileged(
-            (PrivilegedAction<Boolean>) () -> Boolean.getBoolean(PROP_DISABLE_APP_RESOURCE_FILES));
-        if (disableAppResourceFiles) {
-            if (debug != null) {
-                debug.println("LDAPCertStore disabling app resource files");
-            }
-            env.put("com.sun.naming.disable.app.resource.files", "true");
-        }
-
-        try {
-            ctx = new InitialLdapContext(env, null);
-            /*
-             * By default, follow referrals unless application has
-             * overridden property in an application resource file.
-             */
-            Hashtable<?,?> currentEnv = ctx.getEnvironment();
-            if (currentEnv.get(Context.REFERRAL) == null) {
-                ctx.addToEnvironment(Context.REFERRAL, "follow");
-            }
-        } catch (NamingException e) {
-            if (debug != null) {
-                debug.println("LDAPCertStore.engineInit about to throw "
-                    + "InvalidAlgorithmParameterException");
-                e.printStackTrace();
-            }
-            Exception ee = new InvalidAlgorithmParameterException
-                ("unable to create InitialDirContext using supplied parameters");
-            ee.initCause(e);
-            throw (InvalidAlgorithmParameterException)ee;
-        }
-    }
-
-    /**
-     * Private class encapsulating the actual LDAP operations and cache
-     * handling. Use:
-     *
-     *   LDAPRequest request = new LDAPRequest(dn);
-     *   request.addRequestedAttribute(CROSS_CERT);
-     *   request.addRequestedAttribute(CA_CERT);
-     *   byte[][] crossValues = request.getValues(CROSS_CERT);
-     *   byte[][] caValues = request.getValues(CA_CERT);
-     *
-     * At most one LDAP request is sent for each instance created. If all
-     * getValues() calls can be satisfied from the cache, no request
-     * is sent at all. If a request is sent, all requested attributes
-     * are always added to the cache irrespective of whether the getValues()
-     * method is called.
-     */
-    private class LDAPRequest {
-
-        private final String name;
-        private Map<String, byte[][]> valueMap;
-        private final List<String> requestedAttributes;
-
-        LDAPRequest(String name) {
-            this.name = name;
-            requestedAttributes = new ArrayList<>(5);
-        }
-
-        String getName() {
-            return name;
-        }
-
-        void addRequestedAttribute(String attrId) {
-            if (valueMap != null) {
-                throw new IllegalStateException("Request already sent");
-            }
-            requestedAttributes.add(attrId);
-        }
-
-        /**
-         * Gets one or more binary values from an attribute.
-         *
-         * @param name          the location holding the attribute
-         * @param attrId                the attribute identifier
-         * @return                      an array of binary values (byte arrays)
-         * @throws NamingException      if a naming exception occurs
-         */
-        byte[][] getValues(String attrId) throws NamingException {
-            if (DEBUG && ((cacheHits + cacheMisses) % 50 == 0)) {
-                System.out.println("Cache hits: " + cacheHits + "; misses: "
-                        + cacheMisses);
-            }
-            String cacheKey = name + "|" + attrId;
-            byte[][] values = valueCache.get(cacheKey);
-            if (values != null) {
-                cacheHits++;
-                return values;
-            }
-            cacheMisses++;
-            Map<String, byte[][]> attrs = getValueMap();
-            values = attrs.get(attrId);
-            return values;
-        }
-
-        /**
-         * Get a map containing the values for this request. The first time
-         * this method is called on an object, the LDAP request is sent,
-         * the results parsed and added to a private map and also to the
-         * cache of this LDAPCertStore. Subsequent calls return the private
-         * map immediately.
-         *
-         * The map contains an entry for each requested attribute. The
-         * attribute name is the key, values are byte[][]. If there are no
-         * values for that attribute, values are byte[0][].
-         *
-         * @return                      the value Map
-         * @throws NamingException      if a naming exception occurs
-         */
-        private Map<String, byte[][]> getValueMap() throws NamingException {
-            if (valueMap != null) {
-                return valueMap;
-            }
-            if (DEBUG) {
-                System.out.println("Request: " + name + ":" + requestedAttributes);
-                requests++;
-                if (requests % 5 == 0) {
-                    System.out.println("LDAP requests: " + requests);
-                }
-            }
-            valueMap = new HashMap<>(8);
-            String[] attrIds = requestedAttributes.toArray(STRING0);
-            Attributes attrs;
-
-            if (communicationError) {
-                ctx.reconnect(null);
-                communicationError = false;
-            }
-
-            try {
-                attrs = ctx.getAttributes(name, attrIds);
-            } catch (CommunicationException ce) {
-                communicationError = true;
-                throw ce;
-            } catch (NameNotFoundException e) {
-                // name does not exist on this LDAP server
-                // treat same as not attributes found
-                attrs = EMPTY_ATTRIBUTES;
-            }
-            for (String attrId : requestedAttributes) {
-                Attribute attr = attrs.get(attrId);
-                byte[][] values = getAttributeValues(attr);
-                cacheAttribute(attrId, values);
-                valueMap.put(attrId, values);
-            }
-            return valueMap;
-        }
-
-        /**
-         * Add the values to the cache.
-         */
-        private void cacheAttribute(String attrId, byte[][] values) {
-            String cacheKey = name + "|" + attrId;
-            valueCache.put(cacheKey, values);
-        }
-
-        /**
-         * Get the values for the given attribute. If the attribute is null
-         * or does not contain any values, a zero length byte array is
-         * returned. NOTE that it is assumed that all values are byte arrays.
-         */
-        private byte[][] getAttributeValues(Attribute attr)
-                throws NamingException {
-            byte[][] values;
-            if (attr == null) {
-                values = BB0;
-            } else {
-                values = new byte[attr.size()][];
-                int i = 0;
-                NamingEnumeration<?> enum_ = attr.getAll();
-                while (enum_.hasMore()) {
-                    Object obj = enum_.next();
-                    if (debug != null) {
-                        if (obj instanceof String) {
-                            debug.println("LDAPCertStore.getAttrValues() "
-                                + "enum.next is a string!: " + obj);
-                        }
-                    }
-                    byte[] value = (byte[])obj;
-                    values[i++] = value;
-                }
-            }
-            return values;
-        }
-
-    }
-
-    /*
-     * Gets certificates from an attribute id and location in the LDAP
-     * directory. Returns a Collection containing only the Certificates that
-     * match the specified CertSelector.
-     *
-     * @param name the location holding the attribute
-     * @param id the attribute identifier
-     * @param sel a CertSelector that the Certificates must match
-     * @return a Collection of Certificates found
-     * @throws CertStoreException       if an exception occurs
-     */
-    private Collection<X509Certificate> getCertificates(LDAPRequest request,
-        String id, X509CertSelector sel) throws CertStoreException {
-
-        /* fetch encoded certs from storage */
-        byte[][] encodedCert;
-        try {
-            encodedCert = request.getValues(id);
-        } catch (NamingException namingEx) {
-            throw new CertStoreException(namingEx);
-        }
-
-        int n = encodedCert.length;
-        if (n == 0) {
-            return Collections.emptySet();
-        }
-
-        List<X509Certificate> certs = new ArrayList<>(n);
-        /* decode certs and check if they satisfy selector */
-        for (int i = 0; i < n; i++) {
-            ByteArrayInputStream bais = new ByteArrayInputStream(encodedCert[i]);
-            try {
-                Certificate cert = cf.generateCertificate(bais);
-                if (sel.match(cert)) {
-                  certs.add((X509Certificate)cert);
-                }
-            } catch (CertificateException e) {
-                if (debug != null) {
-                    debug.println("LDAPCertStore.getCertificates() encountered "
-                        + "exception while parsing cert, skipping the bad data: ");
-                    HexDumpEncoder encoder = new HexDumpEncoder();
-                    debug.println(
-                        "[ " + encoder.encodeBuffer(encodedCert[i]) + " ]");
-                }
-            }
-        }
-
-        return certs;
-    }
-
-    /*
-     * Gets certificate pairs from an attribute id and location in the LDAP
-     * directory.
-     *
-     * @param name the location holding the attribute
-     * @param id the attribute identifier
-     * @return a Collection of X509CertificatePairs found
-     * @throws CertStoreException       if an exception occurs
-     */
-    private Collection<X509CertificatePair> getCertPairs(
-        LDAPRequest request, String id) throws CertStoreException {
-
-        /* fetch the encoded cert pairs from storage */
-        byte[][] encodedCertPair;
-        try {
-            encodedCertPair = request.getValues(id);
-        } catch (NamingException namingEx) {
-            throw new CertStoreException(namingEx);
-        }
-
-        int n = encodedCertPair.length;
-        if (n == 0) {
-            return Collections.emptySet();
-        }
-
-        List<X509CertificatePair> certPairs = new ArrayList<>(n);
-        /* decode each cert pair and add it to the Collection */
-        for (int i = 0; i < n; i++) {
-            try {
-                X509CertificatePair certPair =
-                    X509CertificatePair.generateCertificatePair(encodedCertPair[i]);
-                certPairs.add(certPair);
-            } catch (CertificateException e) {
-                if (debug != null) {
-                    debug.println(
-                        "LDAPCertStore.getCertPairs() encountered exception "
-                        + "while parsing cert, skipping the bad data: ");
-                    HexDumpEncoder encoder = new HexDumpEncoder();
-                    debug.println(
-                        "[ " + encoder.encodeBuffer(encodedCertPair[i]) + " ]");
-                }
-            }
-        }
-
-        return certPairs;
-    }
-
-    /*
-     * Looks at certificate pairs stored in the crossCertificatePair attribute
-     * at the specified location in the LDAP directory. Returns a Collection
-     * containing all Certificates stored in the forward component that match
-     * the forward CertSelector and all Certificates stored in the reverse
-     * component that match the reverse CertSelector.
-     * <p>
-     * If either forward or reverse is null, all certificates from the
-     * corresponding component will be rejected.
-     *
-     * @param name the location to look in
-     * @param forward the forward CertSelector (or null)
-     * @param reverse the reverse CertSelector (or null)
-     * @return a Collection of Certificates found
-     * @throws CertStoreException       if an exception occurs
-     */
-    private Collection<X509Certificate> getMatchingCrossCerts(
-            LDAPRequest request, X509CertSelector forward,
-            X509CertSelector reverse)
-            throws CertStoreException {
-        // Get the cert pairs
-        Collection<X509CertificatePair> certPairs =
-                                getCertPairs(request, CROSS_CERT);
-
-        // Find Certificates that match and put them in a list
-        ArrayList<X509Certificate> matchingCerts = new ArrayList<>();
-        for (X509CertificatePair certPair : certPairs) {
-            X509Certificate cert;
-            if (forward != null) {
-                cert = certPair.getForward();
-                if ((cert != null) && forward.match(cert)) {
-                    matchingCerts.add(cert);
-                }
-            }
-            if (reverse != null) {
-                cert = certPair.getReverse();
-                if ((cert != null) && reverse.match(cert)) {
-                    matchingCerts.add(cert);
-                }
-            }
-        }
-        return matchingCerts;
+        return lci;
     }
 
     /**
@@ -612,159 +242,12 @@
             debug.println("LDAPCertStore.engineGetCertificates() selector: "
                 + String.valueOf(selector));
         }
-
         if (selector == null) {
             selector = new X509CertSelector();
-        }
-        if (!(selector instanceof X509CertSelector)) {
-            throw new CertStoreException("LDAPCertStore needs an X509CertSelector " +
-                                         "to find certs");
-        }
-        X509CertSelector xsel = (X509CertSelector) selector;
-        int basicConstraints = xsel.getBasicConstraints();
-        String subject = xsel.getSubjectAsString();
-        String issuer = xsel.getIssuerAsString();
-        HashSet<X509Certificate> certs = new HashSet<>();
-        if (debug != null) {
-            debug.println("LDAPCertStore.engineGetCertificates() basicConstraints: "
-                + basicConstraints);
-        }
-
-        // basicConstraints:
-        // -2: only EE certs accepted
-        // -1: no check is done
-        //  0: any CA certificate accepted
-        // >1: certificate's basicConstraints extension pathlen must match
-        if (subject != null) {
-            if (debug != null) {
-                debug.println("LDAPCertStore.engineGetCertificates() "
-                    + "subject is not null");
-            }
-            LDAPRequest request = new LDAPRequest(subject);
-            if (basicConstraints > -2) {
-                request.addRequestedAttribute(CROSS_CERT);
-                request.addRequestedAttribute(CA_CERT);
-                request.addRequestedAttribute(ARL);
-                if (prefetchCRLs) {
-                    request.addRequestedAttribute(CRL);
-                }
-            }
-            if (basicConstraints < 0) {
-                request.addRequestedAttribute(USER_CERT);
-            }
-
-            if (basicConstraints > -2) {
-                certs.addAll(getMatchingCrossCerts(request, xsel, null));
-                if (debug != null) {
-                    debug.println("LDAPCertStore.engineGetCertificates() after "
-                        + "getMatchingCrossCerts(subject,xsel,null),certs.size(): "
-                        + certs.size());
-                }
-                certs.addAll(getCertificates(request, CA_CERT, xsel));
-                if (debug != null) {
-                    debug.println("LDAPCertStore.engineGetCertificates() after "
-                        + "getCertificates(subject,CA_CERT,xsel),certs.size(): "
-                        + certs.size());
-                }
-            }
-            if (basicConstraints < 0) {
-                certs.addAll(getCertificates(request, USER_CERT, xsel));
-                if (debug != null) {
-                    debug.println("LDAPCertStore.engineGetCertificates() after "
-                        + "getCertificates(subject,USER_CERT, xsel),certs.size(): "
-                        + certs.size());
-                }
-            }
-        } else {
-            if (debug != null) {
-                debug.println
-                    ("LDAPCertStore.engineGetCertificates() subject is null");
-            }
-            if (basicConstraints == -2) {
-                throw new CertStoreException("need subject to find EE certs");
-            }
-            if (issuer == null) {
-                throw new CertStoreException("need subject or issuer to find certs");
-            }
+        } else if (!(selector instanceof X509CertSelector)) {
+            throw new CertStoreException("need X509CertSelector to find certs");
         }
-        if (debug != null) {
-            debug.println("LDAPCertStore.engineGetCertificates() about to "
-                + "getMatchingCrossCerts...");
-        }
-        if ((issuer != null) && (basicConstraints > -2)) {
-            LDAPRequest request = new LDAPRequest(issuer);
-            request.addRequestedAttribute(CROSS_CERT);
-            request.addRequestedAttribute(CA_CERT);
-            request.addRequestedAttribute(ARL);
-            if (prefetchCRLs) {
-                request.addRequestedAttribute(CRL);
-            }
-
-            certs.addAll(getMatchingCrossCerts(request, null, xsel));
-            if (debug != null) {
-                debug.println("LDAPCertStore.engineGetCertificates() after "
-                    + "getMatchingCrossCerts(issuer,null,xsel),certs.size(): "
-                    + certs.size());
-            }
-            certs.addAll(getCertificates(request, CA_CERT, xsel));
-            if (debug != null) {
-                debug.println("LDAPCertStore.engineGetCertificates() after "
-                    + "getCertificates(issuer,CA_CERT,xsel),certs.size(): "
-                    + certs.size());
-            }
-        }
-        if (debug != null) {
-            debug.println("LDAPCertStore.engineGetCertificates() returning certs");
-        }
-        return certs;
-    }
-
-    /*
-     * Gets CRLs from an attribute id and location in the LDAP directory.
-     * Returns a Collection containing only the CRLs that match the
-     * specified CRLSelector.
-     *
-     * @param name the location holding the attribute
-     * @param id the attribute identifier
-     * @param sel a CRLSelector that the CRLs must match
-     * @return a Collection of CRLs found
-     * @throws CertStoreException       if an exception occurs
-     */
-    private Collection<X509CRL> getCRLs(LDAPRequest request, String id,
-            X509CRLSelector sel) throws CertStoreException {
-
-        /* fetch the encoded crls from storage */
-        byte[][] encodedCRL;
-        try {
-            encodedCRL = request.getValues(id);
-        } catch (NamingException namingEx) {
-            throw new CertStoreException(namingEx);
-        }
-
-        int n = encodedCRL.length;
-        if (n == 0) {
-            return Collections.emptySet();
-        }
-
-        List<X509CRL> crls = new ArrayList<>(n);
-        /* decode each crl and check if it matches selector */
-        for (int i = 0; i < n; i++) {
-            try {
-                CRL crl = cf.generateCRL(new ByteArrayInputStream(encodedCRL[i]));
-                if (sel.match(crl)) {
-                    crls.add((X509CRL)crl);
-                }
-            } catch (CRLException e) {
-                if (debug != null) {
-                    debug.println("LDAPCertStore.getCRLs() encountered exception"
-                        + " while parsing CRL, skipping the bad data: ");
-                    HexDumpEncoder encoder = new HexDumpEncoder();
-                    debug.println("[ " + encoder.encodeBuffer(encodedCRL[i]) + " ]");
-                }
-            }
-        }
-
-        return crls;
+        return impl.getCertificates((X509CertSelector) selector, ldapDN);
     }
 
     /**
@@ -797,314 +280,9 @@
         // Set up selector and collection to hold CRLs
         if (selector == null) {
             selector = new X509CRLSelector();
-        }
-        if (!(selector instanceof X509CRLSelector)) {
+        } else if (!(selector instanceof X509CRLSelector)) {
             throw new CertStoreException("need X509CRLSelector to find CRLs");
         }
-        X509CRLSelector xsel = (X509CRLSelector) selector;
-        HashSet<X509CRL> crls = new HashSet<>();
-
-        // Look in directory entry for issuer of cert we're checking.
-        Collection<Object> issuerNames;
-        X509Certificate certChecking = xsel.getCertificateChecking();
-        if (certChecking != null) {
-            issuerNames = new HashSet<>();
-            X500Principal issuer = certChecking.getIssuerX500Principal();
-            issuerNames.add(issuer.getName(X500Principal.RFC2253));
-        } else {
-            // But if we don't know which cert we're checking, try the directory
-            // entries of all acceptable CRL issuers
-            issuerNames = xsel.getIssuerNames();
-            if (issuerNames == null) {
-                throw new CertStoreException("need issuerNames or certChecking to "
-                    + "find CRLs");
-            }
-        }
-        for (Object nameObject : issuerNames) {
-            String issuerName;
-            if (nameObject instanceof byte[]) {
-                try {
-                    X500Principal issuer = new X500Principal((byte[])nameObject);
-                    issuerName = issuer.getName(X500Principal.RFC2253);
-                } catch (IllegalArgumentException e) {
-                    continue;
-                }
-            } else {
-                issuerName = (String)nameObject;
-            }
-            // If all we want is CA certs, try to get the (probably shorter) ARL
-            Collection<X509CRL> entryCRLs = Collections.emptySet();
-            if (certChecking == null || certChecking.getBasicConstraints() != -1) {
-                LDAPRequest request = new LDAPRequest(issuerName);
-                request.addRequestedAttribute(CROSS_CERT);
-                request.addRequestedAttribute(CA_CERT);
-                request.addRequestedAttribute(ARL);
-                if (prefetchCRLs) {
-                    request.addRequestedAttribute(CRL);
-                }
-                try {
-                    entryCRLs = getCRLs(request, ARL, xsel);
-                    if (entryCRLs.isEmpty()) {
-                        // no ARLs found. We assume that means that there are
-                        // no ARLs on this server at all and prefetch the CRLs.
-                        prefetchCRLs = true;
-                    } else {
-                        crls.addAll(entryCRLs);
-                    }
-                } catch (CertStoreException e) {
-                    if (debug != null) {
-                        debug.println("LDAPCertStore.engineGetCRLs non-fatal error "
-                            + "retrieving ARLs:" + e);
-                        e.printStackTrace();
-                    }
-                }
-            }
-            // Otherwise, get the CRL
-            // if certChecking is null, we don't know if we should look in ARL or CRL
-            // attribute, so check both for matching CRLs.
-            if (entryCRLs.isEmpty() || certChecking == null) {
-                LDAPRequest request = new LDAPRequest(issuerName);
-                request.addRequestedAttribute(CRL);
-                entryCRLs = getCRLs(request, CRL, xsel);
-                crls.addAll(entryCRLs);
-            }
-        }
-        return crls;
-    }
-
-    // converts an LDAP URI into LDAPCertStoreParameters
-    static LDAPCertStoreParameters getParameters(URI uri) {
-        String host = uri.getHost();
-        if (host == null) {
-            return new SunLDAPCertStoreParameters();
-        } else {
-            int port = uri.getPort();
-            return (port == -1
-                    ? new SunLDAPCertStoreParameters(host)
-                    : new SunLDAPCertStoreParameters(host, port));
-        }
-    }
-
-    /*
-     * Subclass of LDAPCertStoreParameters with overridden equals/hashCode
-     * methods. This is necessary because the parameters are used as
-     * keys in the LDAPCertStore cache.
-     */
-    private static class SunLDAPCertStoreParameters
-        extends LDAPCertStoreParameters {
-
-        private volatile int hashCode = 0;
-
-        SunLDAPCertStoreParameters(String serverName, int port) {
-            super(serverName, port);
-        }
-        SunLDAPCertStoreParameters(String serverName) {
-            super(serverName);
-        }
-        SunLDAPCertStoreParameters() {
-            super();
-        }
-        @Override
-        public boolean equals(Object obj) {
-            if (obj == null) {
-                return false;
-            }
-
-            if (!(obj instanceof LDAPCertStoreParameters)) {
-                return false;
-            }
-            LDAPCertStoreParameters params = (LDAPCertStoreParameters) obj;
-            return (getPort() == params.getPort() &&
-                    getServerName().equalsIgnoreCase(params.getServerName()));
-        }
-        @Override
-        public int hashCode() {
-            if (hashCode == 0) {
-                int result = 17;
-                result = 37*result + getPort();
-                result = 37*result +
-                    getServerName().toLowerCase(Locale.ENGLISH).hashCode();
-                hashCode = result;
-            }
-            return hashCode;
-        }
-    }
-
-    /*
-     * This inner class wraps an existing X509CertSelector and adds
-     * additional criteria to match on when the certificate's subject is
-     * different than the LDAP Distinguished Name entry. The LDAPCertStore
-     * implementation uses the subject DN as the directory entry for
-     * looking up certificates. This can be problematic if the certificates
-     * that you want to fetch have a different subject DN than the entry
-     * where they are stored. You could set the selector's subject to the
-     * LDAP DN entry, but then the resulting match would fail to find the
-     * desired certificates because the subject DNs would not match. This
-     * class avoids that problem by introducing a certSubject which should
-     * be set to the certificate's subject DN when it is different than
-     * the LDAP DN.
-     */
-    static class LDAPCertSelector extends X509CertSelector {
-
-        private X500Principal certSubject;
-        private X509CertSelector selector;
-        private X500Principal subject;
-
-        /**
-         * Creates an LDAPCertSelector.
-         *
-         * @param selector the X509CertSelector to wrap
-         * @param certSubject the subject DN of the certificate that you want
-         *      to retrieve via LDAP
-         * @param ldapDN the LDAP DN where the certificate is stored
-         */
-        LDAPCertSelector(X509CertSelector selector, X500Principal certSubject,
-            String ldapDN) throws IOException {
-            this.selector = selector == null ? new X509CertSelector() : selector;
-            this.certSubject = certSubject;
-            this.subject = new X500Name(ldapDN).asX500Principal();
-        }
-
-        // we only override the get (accessor methods) since the set methods
-        // will not be invoked by the code that uses this LDAPCertSelector.
-        public X509Certificate getCertificate() {
-            return selector.getCertificate();
-        }
-        public BigInteger getSerialNumber() {
-            return selector.getSerialNumber();
-        }
-        public X500Principal getIssuer() {
-            return selector.getIssuer();
-        }
-        public String getIssuerAsString() {
-            return selector.getIssuerAsString();
-        }
-        public byte[] getIssuerAsBytes() throws IOException {
-            return selector.getIssuerAsBytes();
-        }
-        public X500Principal getSubject() {
-            // return the ldap DN
-            return subject;
-        }
-        public String getSubjectAsString() {
-            // return the ldap DN
-            return subject.getName();
-        }
-        public byte[] getSubjectAsBytes() throws IOException {
-            // return the encoded ldap DN
-            return subject.getEncoded();
-        }
-        public byte[] getSubjectKeyIdentifier() {
-            return selector.getSubjectKeyIdentifier();
-        }
-        public byte[] getAuthorityKeyIdentifier() {
-            return selector.getAuthorityKeyIdentifier();
-        }
-        public Date getCertificateValid() {
-            return selector.getCertificateValid();
-        }
-        public Date getPrivateKeyValid() {
-            return selector.getPrivateKeyValid();
-        }
-        public String getSubjectPublicKeyAlgID() {
-            return selector.getSubjectPublicKeyAlgID();
-        }
-        public PublicKey getSubjectPublicKey() {
-            return selector.getSubjectPublicKey();
-        }
-        public boolean[] getKeyUsage() {
-            return selector.getKeyUsage();
-        }
-        public Set<String> getExtendedKeyUsage() {
-            return selector.getExtendedKeyUsage();
-        }
-        public boolean getMatchAllSubjectAltNames() {
-            return selector.getMatchAllSubjectAltNames();
-        }
-        public Collection<List<?>> getSubjectAlternativeNames() {
-            return selector.getSubjectAlternativeNames();
-        }
-        public byte[] getNameConstraints() {
-            return selector.getNameConstraints();
-        }
-        public int getBasicConstraints() {
-            return selector.getBasicConstraints();
-        }
-        public Set<String> getPolicy() {
-            return selector.getPolicy();
-        }
-        public Collection<List<?>> getPathToNames() {
-            return selector.getPathToNames();
-        }
-
-        public boolean match(Certificate cert) {
-            // temporarily set the subject criterion to the certSubject
-            // so that match will not reject the desired certificates
-            selector.setSubject(certSubject);
-            boolean match = selector.match(cert);
-            selector.setSubject(subject);
-            return match;
-        }
-    }
-
-    /**
-     * This class has the same purpose as LDAPCertSelector except it is for
-     * X.509 CRLs.
-     */
-    static class LDAPCRLSelector extends X509CRLSelector {
-
-        private X509CRLSelector selector;
-        private Collection<X500Principal> certIssuers;
-        private Collection<X500Principal> issuers;
-        private HashSet<Object> issuerNames;
-
-        /**
-         * Creates an LDAPCRLSelector.
-         *
-         * @param selector the X509CRLSelector to wrap
-         * @param certIssuers the issuer DNs of the CRLs that you want
-         *      to retrieve via LDAP
-         * @param ldapDN the LDAP DN where the CRL is stored
-         */
-        LDAPCRLSelector(X509CRLSelector selector,
-            Collection<X500Principal> certIssuers, String ldapDN)
-            throws IOException {
-            this.selector = selector == null ? new X509CRLSelector() : selector;
-            this.certIssuers = certIssuers;
-            issuerNames = new HashSet<>();
-            issuerNames.add(ldapDN);
-            issuers = new HashSet<>();
-            issuers.add(new X500Name(ldapDN).asX500Principal());
-        }
-        // we only override the get (accessor methods) since the set methods
-        // will not be invoked by the code that uses this LDAPCRLSelector.
-        public Collection<X500Principal> getIssuers() {
-            // return the ldap DN
-            return Collections.unmodifiableCollection(issuers);
-        }
-        public Collection<Object> getIssuerNames() {
-            // return the ldap DN
-            return Collections.unmodifiableCollection(issuerNames);
-        }
-        public BigInteger getMinCRL() {
-            return selector.getMinCRL();
-        }
-        public BigInteger getMaxCRL() {
-            return selector.getMaxCRL();
-        }
-        public Date getDateAndTime() {
-            return selector.getDateAndTime();
-        }
-        public X509Certificate getCertificateChecking() {
-            return selector.getCertificateChecking();
-        }
-        public boolean match(CRL crl) {
-            // temporarily set the issuer criterion to the certIssuers
-            // so that match will not reject the desired CRL
-            selector.setIssuers(certIssuers);
-            boolean match = selector.match(crl);
-            selector.setIssuers(issuers);
-            return match;
-        }
+        return impl.getCRLs((X509CRLSelector) selector, ldapDN);
     }
 }
--- a/jdk/src/java.naming/share/classes/sun/security/provider/certpath/ldap/LDAPCertStoreHelper.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.security.provider.certpath.ldap;
-
-import java.io.IOException;
-import java.net.URI;
-import java.util.Collection;
-import java.security.NoSuchAlgorithmException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.cert.CertStore;
-import java.security.cert.CertStoreException;
-import java.security.cert.X509CertSelector;
-import java.security.cert.X509CRLSelector;
-import javax.naming.CommunicationException;
-import javax.naming.ServiceUnavailableException;
-import javax.security.auth.x500.X500Principal;
-
-import sun.security.provider.certpath.CertStoreHelper;
-
-/**
- * LDAP implementation of CertStoreHelper.
- */
-
-public final class LDAPCertStoreHelper
-    extends CertStoreHelper
-{
-    @Override
-    public CertStore getCertStore(URI uri)
-        throws NoSuchAlgorithmException, InvalidAlgorithmParameterException
-    {
-        return LDAPCertStore.getInstance(LDAPCertStore.getParameters(uri));
-    }
-
-    @Override
-    public X509CertSelector wrap(X509CertSelector selector,
-                                 X500Principal certSubject,
-                                 String ldapDN)
-        throws IOException
-    {
-        return new LDAPCertStore.LDAPCertSelector(selector, certSubject, ldapDN);
-    }
-
-    @Override
-    public X509CRLSelector wrap(X509CRLSelector selector,
-                                Collection<X500Principal> certIssuers,
-                                String ldapDN)
-        throws IOException
-    {
-        return new LDAPCertStore.LDAPCRLSelector(selector, certIssuers, ldapDN);
-    }
-
-    @Override
-    public boolean isCausedByNetworkIssue(CertStoreException e) {
-        Throwable t = e.getCause();
-        return (t != null && (t instanceof ServiceUnavailableException ||
-                              t instanceof CommunicationException));
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.naming/share/classes/sun/security/provider/certpath/ldap/LDAPCertStoreImpl.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,772 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.provider.certpath.ldap;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.*;
+import javax.naming.Context;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.NameNotFoundException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.BasicAttributes;
+
+import java.security.*;
+import java.security.cert.Certificate;
+import java.security.cert.*;
+import javax.naming.CommunicationException;
+import javax.naming.ldap.InitialLdapContext;
+import javax.naming.ldap.LdapContext;
+import javax.security.auth.x500.X500Principal;
+
+import sun.misc.HexDumpEncoder;
+import sun.security.provider.certpath.X509CertificatePair;
+import sun.security.util.Cache;
+import sun.security.util.Debug;
+import sun.security.x509.X500Name;
+
+/**
+ * Core implementation of a LDAP Cert Store.
+ * @see java.security.cert.CertStore
+ *
+ * @since       1.9
+ */
+final class LDAPCertStoreImpl {
+
+    private static final Debug debug = Debug.getInstance("certpath");
+
+    private final static boolean DEBUG = false;
+
+    /**
+     * LDAP attribute identifiers.
+     */
+    private static final String USER_CERT = "userCertificate;binary";
+    private static final String CA_CERT = "cACertificate;binary";
+    private static final String CROSS_CERT = "crossCertificatePair;binary";
+    private static final String CRL = "certificateRevocationList;binary";
+    private static final String ARL = "authorityRevocationList;binary";
+    private static final String DELTA_CRL = "deltaRevocationList;binary";
+
+    // Constants for various empty values
+    private final static String[] STRING0 = new String[0];
+
+    private final static byte[][] BB0 = new byte[0][];
+
+    private final static Attributes EMPTY_ATTRIBUTES = new BasicAttributes();
+
+    // cache related constants
+    private final static int DEFAULT_CACHE_SIZE = 750;
+    private final static int DEFAULT_CACHE_LIFETIME = 30;
+
+    private final static int LIFETIME;
+
+    private final static String PROP_LIFETIME =
+                            "sun.security.certpath.ldap.cache.lifetime";
+
+    /*
+     * Internal system property, that when set to "true", disables the
+     * JNDI application resource files lookup to prevent recursion issues
+     * when validating signed JARs with LDAP URLs in certificates.
+     */
+    private final static String PROP_DISABLE_APP_RESOURCE_FILES =
+        "sun.security.certpath.ldap.disable.app.resource.files";
+
+    static {
+        String s = AccessController.doPrivileged(
+            (PrivilegedAction<String>) () -> System.getProperty(PROP_LIFETIME));
+        if (s != null) {
+            LIFETIME = Integer.parseInt(s); // throws NumberFormatException
+        } else {
+            LIFETIME = DEFAULT_CACHE_LIFETIME;
+        }
+    }
+
+    /**
+     * The CertificateFactory used to decode certificates from
+     * their binary stored form.
+     */
+    private CertificateFactory cf;
+    /**
+     * The JNDI directory context.
+     */
+    private LdapContext ctx;
+
+    /**
+     * Flag indicating that communication error occurred.
+     */
+    private boolean communicationError = false;
+
+    /**
+     * Flag indicating whether we should prefetch CRLs.
+     */
+    private boolean prefetchCRLs = false;
+
+    private final Cache<String, byte[][]> valueCache;
+
+    private int cacheHits = 0;
+    private int cacheMisses = 0;
+    private int requests = 0;
+
+    /**
+     * Creates a <code>CertStore</code> with the specified parameters.
+     */
+    LDAPCertStoreImpl(String serverName, int port)
+        throws InvalidAlgorithmParameterException {
+        createInitialDirContext(serverName, port);
+        // Create CertificateFactory for use later on
+        try {
+            cf = CertificateFactory.getInstance("X.509");
+        } catch (CertificateException e) {
+            throw new InvalidAlgorithmParameterException(
+                "unable to create CertificateFactory for X.509");
+        }
+        if (LIFETIME == 0) {
+            valueCache = Cache.newNullCache();
+        } else if (LIFETIME < 0) {
+            valueCache = Cache.newSoftMemoryCache(DEFAULT_CACHE_SIZE);
+        } else {
+            valueCache = Cache.newSoftMemoryCache(DEFAULT_CACHE_SIZE, LIFETIME);
+        }
+    }
+
+    /**
+     * Create InitialDirContext.
+     *
+     * @param server Server DNS name hosting LDAP service
+     * @param port   Port at which server listens for requests
+     * @throws InvalidAlgorithmParameterException if creation fails
+     */
+    private void createInitialDirContext(String server, int port)
+            throws InvalidAlgorithmParameterException {
+        String url = "ldap://" + server + ":" + port;
+        Hashtable<String,Object> env = new Hashtable<>();
+        env.put(Context.INITIAL_CONTEXT_FACTORY,
+                "com.sun.jndi.ldap.LdapCtxFactory");
+        env.put(Context.PROVIDER_URL, url);
+
+        // If property is set to true, disable application resource file lookup.
+        boolean disableAppResourceFiles = AccessController.doPrivileged(
+            (PrivilegedAction<Boolean>) () -> Boolean.getBoolean(PROP_DISABLE_APP_RESOURCE_FILES));
+        if (disableAppResourceFiles) {
+            if (debug != null) {
+                debug.println("LDAPCertStore disabling app resource files");
+            }
+            env.put("com.sun.naming.disable.app.resource.files", "true");
+        }
+
+        try {
+            ctx = new InitialLdapContext(env, null);
+            /*
+             * By default, follow referrals unless application has
+             * overridden property in an application resource file.
+             */
+            Hashtable<?,?> currentEnv = ctx.getEnvironment();
+            if (currentEnv.get(Context.REFERRAL) == null) {
+                ctx.addToEnvironment(Context.REFERRAL, "follow");
+            }
+        } catch (NamingException e) {
+            if (debug != null) {
+                debug.println("LDAPCertStore.engineInit about to throw "
+                    + "InvalidAlgorithmParameterException");
+                e.printStackTrace();
+            }
+            Exception ee = new InvalidAlgorithmParameterException
+                ("unable to create InitialDirContext using supplied parameters");
+            ee.initCause(e);
+            throw (InvalidAlgorithmParameterException)ee;
+        }
+    }
+
+    /**
+     * Private class encapsulating the actual LDAP operations and cache
+     * handling. Use:
+     *
+     *   LDAPRequest request = new LDAPRequest(dn);
+     *   request.addRequestedAttribute(CROSS_CERT);
+     *   request.addRequestedAttribute(CA_CERT);
+     *   byte[][] crossValues = request.getValues(CROSS_CERT);
+     *   byte[][] caValues = request.getValues(CA_CERT);
+     *
+     * At most one LDAP request is sent for each instance created. If all
+     * getValues() calls can be satisfied from the cache, no request
+     * is sent at all. If a request is sent, all requested attributes
+     * are always added to the cache irrespective of whether the getValues()
+     * method is called.
+     */
+    private class LDAPRequest {
+
+        private final String name;
+        private Map<String, byte[][]> valueMap;
+        private final List<String> requestedAttributes;
+
+        LDAPRequest(String name) {
+            this.name = name;
+            requestedAttributes = new ArrayList<>(5);
+        }
+
+        String getName() {
+            return name;
+        }
+
+        void addRequestedAttribute(String attrId) {
+            if (valueMap != null) {
+                throw new IllegalStateException("Request already sent");
+            }
+            requestedAttributes.add(attrId);
+        }
+
+        /**
+         * Gets one or more binary values from an attribute.
+         *
+         * @param name          the location holding the attribute
+         * @param attrId                the attribute identifier
+         * @return                      an array of binary values (byte arrays)
+         * @throws NamingException      if a naming exception occurs
+         */
+        byte[][] getValues(String attrId) throws NamingException {
+            if (DEBUG && ((cacheHits + cacheMisses) % 50 == 0)) {
+                System.out.println("Cache hits: " + cacheHits + "; misses: "
+                        + cacheMisses);
+            }
+            String cacheKey = name + "|" + attrId;
+            byte[][] values = valueCache.get(cacheKey);
+            if (values != null) {
+                cacheHits++;
+                return values;
+            }
+            cacheMisses++;
+            Map<String, byte[][]> attrs = getValueMap();
+            values = attrs.get(attrId);
+            return values;
+        }
+
+        /**
+         * Get a map containing the values for this request. The first time
+         * this method is called on an object, the LDAP request is sent,
+         * the results parsed and added to a private map and also to the
+         * cache of this LDAPCertStore. Subsequent calls return the private
+         * map immediately.
+         *
+         * The map contains an entry for each requested attribute. The
+         * attribute name is the key, values are byte[][]. If there are no
+         * values for that attribute, values are byte[0][].
+         *
+         * @return                      the value Map
+         * @throws NamingException      if a naming exception occurs
+         */
+        private Map<String, byte[][]> getValueMap() throws NamingException {
+            if (valueMap != null) {
+                return valueMap;
+            }
+            if (DEBUG) {
+                System.out.println("Request: " + name + ":" + requestedAttributes);
+                requests++;
+                if (requests % 5 == 0) {
+                    System.out.println("LDAP requests: " + requests);
+                }
+            }
+            valueMap = new HashMap<>(8);
+            String[] attrIds = requestedAttributes.toArray(STRING0);
+            Attributes attrs;
+
+            if (communicationError) {
+                ctx.reconnect(null);
+                communicationError = false;
+            }
+
+            try {
+                attrs = ctx.getAttributes(name, attrIds);
+            } catch (CommunicationException ce) {
+                communicationError = true;
+                throw ce;
+            } catch (NameNotFoundException e) {
+                // name does not exist on this LDAP server
+                // treat same as not attributes found
+                attrs = EMPTY_ATTRIBUTES;
+            }
+            for (String attrId : requestedAttributes) {
+                Attribute attr = attrs.get(attrId);
+                byte[][] values = getAttributeValues(attr);
+                cacheAttribute(attrId, values);
+                valueMap.put(attrId, values);
+            }
+            return valueMap;
+        }
+
+        /**
+         * Add the values to the cache.
+         */
+        private void cacheAttribute(String attrId, byte[][] values) {
+            String cacheKey = name + "|" + attrId;
+            valueCache.put(cacheKey, values);
+        }
+
+        /**
+         * Get the values for the given attribute. If the attribute is null
+         * or does not contain any values, a zero length byte array is
+         * returned. NOTE that it is assumed that all values are byte arrays.
+         */
+        private byte[][] getAttributeValues(Attribute attr)
+                throws NamingException {
+            byte[][] values;
+            if (attr == null) {
+                values = BB0;
+            } else {
+                values = new byte[attr.size()][];
+                int i = 0;
+                NamingEnumeration<?> enum_ = attr.getAll();
+                while (enum_.hasMore()) {
+                    Object obj = enum_.next();
+                    if (debug != null) {
+                        if (obj instanceof String) {
+                            debug.println("LDAPCertStore.getAttrValues() "
+                                + "enum.next is a string!: " + obj);
+                        }
+                    }
+                    byte[] value = (byte[])obj;
+                    values[i++] = value;
+                }
+            }
+            return values;
+        }
+
+    }
+
+    /*
+     * Gets certificates from an attribute id and location in the LDAP
+     * directory. Returns a Collection containing only the Certificates that
+     * match the specified CertSelector.
+     *
+     * @param name the location holding the attribute
+     * @param id the attribute identifier
+     * @param sel a CertSelector that the Certificates must match
+     * @return a Collection of Certificates found
+     * @throws CertStoreException       if an exception occurs
+     */
+    private Collection<X509Certificate> getCertificates(LDAPRequest request,
+        String id, X509CertSelector sel) throws CertStoreException {
+
+        /* fetch encoded certs from storage */
+        byte[][] encodedCert;
+        try {
+            encodedCert = request.getValues(id);
+        } catch (NamingException namingEx) {
+            throw new CertStoreException(namingEx);
+        }
+
+        int n = encodedCert.length;
+        if (n == 0) {
+            return Collections.emptySet();
+        }
+
+        List<X509Certificate> certs = new ArrayList<>(n);
+        /* decode certs and check if they satisfy selector */
+        for (int i = 0; i < n; i++) {
+            ByteArrayInputStream bais = new ByteArrayInputStream(encodedCert[i]);
+            try {
+                Certificate cert = cf.generateCertificate(bais);
+                if (sel.match(cert)) {
+                  certs.add((X509Certificate)cert);
+                }
+            } catch (CertificateException e) {
+                if (debug != null) {
+                    debug.println("LDAPCertStore.getCertificates() encountered "
+                        + "exception while parsing cert, skipping the bad data: ");
+                    HexDumpEncoder encoder = new HexDumpEncoder();
+                    debug.println(
+                        "[ " + encoder.encodeBuffer(encodedCert[i]) + " ]");
+                }
+            }
+        }
+
+        return certs;
+    }
+
+    /*
+     * Gets certificate pairs from an attribute id and location in the LDAP
+     * directory.
+     *
+     * @param name the location holding the attribute
+     * @param id the attribute identifier
+     * @return a Collection of X509CertificatePairs found
+     * @throws CertStoreException       if an exception occurs
+     */
+    private Collection<X509CertificatePair> getCertPairs(
+        LDAPRequest request, String id) throws CertStoreException {
+
+        /* fetch the encoded cert pairs from storage */
+        byte[][] encodedCertPair;
+        try {
+            encodedCertPair = request.getValues(id);
+        } catch (NamingException namingEx) {
+            throw new CertStoreException(namingEx);
+        }
+
+        int n = encodedCertPair.length;
+        if (n == 0) {
+            return Collections.emptySet();
+        }
+
+        List<X509CertificatePair> certPairs = new ArrayList<>(n);
+        /* decode each cert pair and add it to the Collection */
+        for (int i = 0; i < n; i++) {
+            try {
+                X509CertificatePair certPair =
+                    X509CertificatePair.generateCertificatePair(encodedCertPair[i]);
+                certPairs.add(certPair);
+            } catch (CertificateException e) {
+                if (debug != null) {
+                    debug.println(
+                        "LDAPCertStore.getCertPairs() encountered exception "
+                        + "while parsing cert, skipping the bad data: ");
+                    HexDumpEncoder encoder = new HexDumpEncoder();
+                    debug.println(
+                        "[ " + encoder.encodeBuffer(encodedCertPair[i]) + " ]");
+                }
+            }
+        }
+
+        return certPairs;
+    }
+
+    /*
+     * Looks at certificate pairs stored in the crossCertificatePair attribute
+     * at the specified location in the LDAP directory. Returns a Collection
+     * containing all X509Certificates stored in the forward component that match
+     * the forward X509CertSelector and all Certificates stored in the reverse
+     * component that match the reverse X509CertSelector.
+     * <p>
+     * If either forward or reverse is null, all certificates from the
+     * corresponding component will be rejected.
+     *
+     * @param name the location to look in
+     * @param forward the forward X509CertSelector (or null)
+     * @param reverse the reverse X509CertSelector (or null)
+     * @return a Collection of X509Certificates found
+     * @throws CertStoreException       if an exception occurs
+     */
+    private Collection<X509Certificate> getMatchingCrossCerts(
+            LDAPRequest request, X509CertSelector forward,
+            X509CertSelector reverse)
+            throws CertStoreException {
+        // Get the cert pairs
+        Collection<X509CertificatePair> certPairs =
+                                getCertPairs(request, CROSS_CERT);
+
+        // Find Certificates that match and put them in a list
+        ArrayList<X509Certificate> matchingCerts = new ArrayList<>();
+        for (X509CertificatePair certPair : certPairs) {
+            X509Certificate cert;
+            if (forward != null) {
+                cert = certPair.getForward();
+                if ((cert != null) && forward.match(cert)) {
+                    matchingCerts.add(cert);
+                }
+            }
+            if (reverse != null) {
+                cert = certPair.getReverse();
+                if ((cert != null) && reverse.match(cert)) {
+                    matchingCerts.add(cert);
+                }
+            }
+        }
+        return matchingCerts;
+    }
+
+    /**
+     * Returns a <code>Collection</code> of <code>X509Certificate</code>s that
+     * match the specified selector. If no <code>X509Certificate</code>s
+     * match the selector, an empty <code>Collection</code> will be returned.
+     * <p>
+     * It is not practical to search every entry in the LDAP database for
+     * matching <code>X509Certificate</code>s. Instead, the
+     * <code>X509CertSelector</code> is examined in order to determine where
+     * matching <code>Certificate</code>s are likely to be found (according
+     * to the PKIX LDAPv2 schema, RFC 2587).
+     * If the subject is specified, its directory entry is searched. If the
+     * issuer is specified, its directory entry is searched. If neither the
+     * subject nor the issuer are specified (or the selector is not an
+     * <code>X509CertSelector</code>), a <code>CertStoreException</code> is
+     * thrown.
+     *
+     * @param selector a <code>X509CertSelector</code> used to select which
+     *  <code>Certificate</code>s should be returned.
+     * @return a <code>Collection</code> of <code>X509Certificate</code>s that
+     *         match the specified selector
+     * @throws CertStoreException if an exception occurs
+     */
+    synchronized Collection<X509Certificate> getCertificates
+        (X509CertSelector xsel, String ldapDN) throws CertStoreException {
+
+        if (ldapDN == null) {
+            ldapDN = xsel.getSubjectAsString();
+        }
+        int basicConstraints = xsel.getBasicConstraints();
+        String issuer = xsel.getIssuerAsString();
+        HashSet<X509Certificate> certs = new HashSet<>();
+        if (debug != null) {
+            debug.println("LDAPCertStore.engineGetCertificates() basicConstraints: "
+                + basicConstraints);
+        }
+
+        // basicConstraints:
+        // -2: only EE certs accepted
+        // -1: no check is done
+        //  0: any CA certificate accepted
+        // >1: certificate's basicConstraints extension pathlen must match
+        if (ldapDN != null) {
+            if (debug != null) {
+                debug.println("LDAPCertStore.engineGetCertificates() "
+                    + " subject is not null");
+            }
+            LDAPRequest request = new LDAPRequest(ldapDN);
+            if (basicConstraints > -2) {
+                request.addRequestedAttribute(CROSS_CERT);
+                request.addRequestedAttribute(CA_CERT);
+                request.addRequestedAttribute(ARL);
+                if (prefetchCRLs) {
+                    request.addRequestedAttribute(CRL);
+                }
+            }
+            if (basicConstraints < 0) {
+                request.addRequestedAttribute(USER_CERT);
+            }
+
+            if (basicConstraints > -2) {
+                certs.addAll(getMatchingCrossCerts(request, xsel, null));
+                if (debug != null) {
+                    debug.println("LDAPCertStore.engineGetCertificates() after "
+                        + "getMatchingCrossCerts(subject,xsel,null),certs.size(): "
+                        + certs.size());
+                }
+                certs.addAll(getCertificates(request, CA_CERT, xsel));
+                if (debug != null) {
+                    debug.println("LDAPCertStore.engineGetCertificates() after "
+                        + "getCertificates(subject,CA_CERT,xsel),certs.size(): "
+                        + certs.size());
+                }
+            }
+            if (basicConstraints < 0) {
+                certs.addAll(getCertificates(request, USER_CERT, xsel));
+                if (debug != null) {
+                    debug.println("LDAPCertStore.engineGetCertificates() after "
+                        + "getCertificates(subject,USER_CERT, xsel),certs.size(): "
+                        + certs.size());
+                }
+            }
+        } else {
+            if (debug != null) {
+                debug.println
+                    ("LDAPCertStore.engineGetCertificates() subject is null");
+            }
+            if (basicConstraints == -2) {
+                throw new CertStoreException("need subject to find EE certs");
+            }
+            if (issuer == null) {
+                throw new CertStoreException("need subject or issuer to find certs");
+            }
+        }
+        if (debug != null) {
+            debug.println("LDAPCertStore.engineGetCertificates() about to "
+                + "getMatchingCrossCerts...");
+        }
+        if ((issuer != null) && (basicConstraints > -2)) {
+            LDAPRequest request = new LDAPRequest(issuer);
+            request.addRequestedAttribute(CROSS_CERT);
+            request.addRequestedAttribute(CA_CERT);
+            request.addRequestedAttribute(ARL);
+            if (prefetchCRLs) {
+                request.addRequestedAttribute(CRL);
+            }
+
+            certs.addAll(getMatchingCrossCerts(request, null, xsel));
+            if (debug != null) {
+                debug.println("LDAPCertStore.engineGetCertificates() after "
+                    + "getMatchingCrossCerts(issuer,null,xsel),certs.size(): "
+                    + certs.size());
+            }
+            certs.addAll(getCertificates(request, CA_CERT, xsel));
+            if (debug != null) {
+                debug.println("LDAPCertStore.engineGetCertificates() after "
+                    + "getCertificates(issuer,CA_CERT,xsel),certs.size(): "
+                    + certs.size());
+            }
+        }
+        if (debug != null) {
+            debug.println("LDAPCertStore.engineGetCertificates() returning certs");
+        }
+        return certs;
+    }
+
+    /*
+     * Gets CRLs from an attribute id and location in the LDAP directory.
+     * Returns a Collection containing only the CRLs that match the
+     * specified X509CRLSelector.
+     *
+     * @param name the location holding the attribute
+     * @param id the attribute identifier
+     * @param sel a X509CRLSelector that the CRLs must match
+     * @return a Collection of CRLs found
+     * @throws CertStoreException       if an exception occurs
+     */
+    private Collection<X509CRL> getCRLs(LDAPRequest request, String id,
+            X509CRLSelector sel) throws CertStoreException {
+
+        /* fetch the encoded crls from storage */
+        byte[][] encodedCRL;
+        try {
+            encodedCRL = request.getValues(id);
+        } catch (NamingException namingEx) {
+            throw new CertStoreException(namingEx);
+        }
+
+        int n = encodedCRL.length;
+        if (n == 0) {
+            return Collections.emptySet();
+        }
+
+        List<X509CRL> crls = new ArrayList<>(n);
+        /* decode each crl and check if it matches selector */
+        for (int i = 0; i < n; i++) {
+            try {
+                CRL crl = cf.generateCRL(new ByteArrayInputStream(encodedCRL[i]));
+                if (sel.match(crl)) {
+                    crls.add((X509CRL)crl);
+                }
+            } catch (CRLException e) {
+                if (debug != null) {
+                    debug.println("LDAPCertStore.getCRLs() encountered exception"
+                        + " while parsing CRL, skipping the bad data: ");
+                    HexDumpEncoder encoder = new HexDumpEncoder();
+                    debug.println("[ " + encoder.encodeBuffer(encodedCRL[i]) + " ]");
+                }
+            }
+        }
+
+        return crls;
+    }
+
+    /**
+     * Returns a <code>Collection</code> of <code>X509CRL</code>s that
+     * match the specified selector. If no <code>X509CRL</code>s
+     * match the selector, an empty <code>Collection</code> will be returned.
+     * <p>
+     * It is not practical to search every entry in the LDAP database for
+     * matching <code>X509CRL</code>s. Instead, the <code>X509CRLSelector</code>
+     * is examined in order to determine where matching <code>X509CRL</code>s
+     * are likely to be found (according to the PKIX LDAPv2 schema, RFC 2587).
+     * If issuerNames or certChecking are specified, the issuer's directory
+     * entry is searched. If neither issuerNames or certChecking are specified
+     * (or the selector is not an <code>X509CRLSelector</code>), a
+     * <code>CertStoreException</code> is thrown.
+     *
+     * @param selector A <code>X509CRLSelector</code> used to select which
+     *  <code>CRL</code>s should be returned. Specify <code>null</code>
+     *  to return all <code>CRL</code>s.
+     * @return A <code>Collection</code> of <code>X509CRL</code>s that
+     *         match the specified selector
+     * @throws CertStoreException if an exception occurs
+     */
+    synchronized Collection<X509CRL> getCRLs(X509CRLSelector xsel,
+         String ldapDN) throws CertStoreException {
+
+        HashSet<X509CRL> crls = new HashSet<>();
+
+        // Look in directory entry for issuer of cert we're checking.
+        Collection<Object> issuerNames;
+        X509Certificate certChecking = xsel.getCertificateChecking();
+        if (certChecking != null) {
+            issuerNames = new HashSet<>();
+            X500Principal issuer = certChecking.getIssuerX500Principal();
+            issuerNames.add(issuer.getName(X500Principal.RFC2253));
+        } else {
+            // But if we don't know which cert we're checking, try the directory
+            // entries of all acceptable CRL issuers
+            if (ldapDN != null) {
+                issuerNames = new HashSet<>();
+                issuerNames.add(ldapDN);
+            } else {
+                issuerNames = xsel.getIssuerNames();
+                if (issuerNames == null) {
+                    throw new CertStoreException("need issuerNames or"
+                       + " certChecking to find CRLs");
+                }
+            }
+        }
+        for (Object nameObject : issuerNames) {
+            String issuerName;
+            if (nameObject instanceof byte[]) {
+                try {
+                    X500Principal issuer = new X500Principal((byte[])nameObject);
+                    issuerName = issuer.getName(X500Principal.RFC2253);
+                } catch (IllegalArgumentException e) {
+                    continue;
+                }
+            } else {
+                issuerName = (String)nameObject;
+            }
+            // If all we want is CA certs, try to get the (probably shorter) ARL
+            Collection<X509CRL> entryCRLs = Collections.emptySet();
+            if (certChecking == null || certChecking.getBasicConstraints() != -1) {
+                LDAPRequest request = new LDAPRequest(issuerName);
+                request.addRequestedAttribute(CROSS_CERT);
+                request.addRequestedAttribute(CA_CERT);
+                request.addRequestedAttribute(ARL);
+                if (prefetchCRLs) {
+                    request.addRequestedAttribute(CRL);
+                }
+                try {
+                    entryCRLs = getCRLs(request, ARL, xsel);
+                    if (entryCRLs.isEmpty()) {
+                        // no ARLs found. We assume that means that there are
+                        // no ARLs on this server at all and prefetch the CRLs.
+                        prefetchCRLs = true;
+                    } else {
+                        crls.addAll(entryCRLs);
+                    }
+                } catch (CertStoreException e) {
+                    if (debug != null) {
+                        debug.println("LDAPCertStore.engineGetCRLs non-fatal error "
+                            + "retrieving ARLs:" + e);
+                        e.printStackTrace();
+                    }
+                }
+            }
+            // Otherwise, get the CRL
+            // if certChecking is null, we don't know if we should look in ARL or CRL
+            // attribute, so check both for matching CRLs.
+            if (entryCRLs.isEmpty() || certChecking == null) {
+                LDAPRequest request = new LDAPRequest(issuerName);
+                request.addRequestedAttribute(CRL);
+                entryCRLs = getCRLs(request, CRL, xsel);
+                crls.addAll(entryCRLs);
+            }
+        }
+        return crls;
+    }
+}
--- a/jdk/src/java.smartcardio/share/classes/javax/smartcardio/CardTerminals.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.smartcardio/share/classes/javax/smartcardio/CardTerminals.java	Wed Jul 05 20:33:55 2017 +0200
@@ -94,9 +94,9 @@
      *
      * @param state the State
      * @return an unmodifiable list of all terminals matching the specified
-     *   attribute.
+     *   state.
      *
-     * @throws NullPointerException if attr is null
+     * @throws NullPointerException if state is null
      * @throws CardException if the card operation failed
      */
     public abstract List<CardTerminal> list(State state) throws CardException;
--- a/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/DoubleByteEncoder.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,241 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import sun.nio.cs.Surrogate;
-
-public abstract class DoubleByteEncoder
-    extends CharsetEncoder
-{
-
-    private short index1[];
-    private String index2[];
-
-    private final Surrogate.Parser sgp = new Surrogate.Parser();
-
-    protected DoubleByteEncoder(Charset cs,
-                                short[] index1, String[] index2)
-    {
-        super(cs, 2.0f, 2.0f);
-        this.index1 = index1;
-        this.index2 = index2;
-    }
-
-    protected DoubleByteEncoder(Charset cs,
-                                short[] index1, String[] index2,
-                                float avg, float max)
-    {
-        super(cs, avg, max);
-        this.index1 = index1;
-        this.index2 = index2;
-    }
-
-    protected DoubleByteEncoder(Charset cs,
-                                short[] index1, String[] index2, byte[] repl)
-    {
-        super(cs, 2.0f, 2.0f, repl);
-        this.index1 = index1;
-        this.index2 = index2;
-    }
-
-
-    protected DoubleByteEncoder(Charset cs,
-                                short[] index1, String[] index2,
-                                byte[] repl, float avg, float max)
-    {
-        super(cs, avg, max,repl);
-        this.index1 = index1;
-        this.index2 = index2;
-    }
-
-    public boolean canEncode(char c) {
-        return (encodeSingle(c) != -1 ||
-                encodeDouble(c) != 0);
-    }
-
-    private CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
-        char[] sa = src.array();
-        int sp = src.arrayOffset() + src.position();
-        int sl = src.arrayOffset() + src.limit();
-        byte[] da = dst.array();
-        int dp = dst.arrayOffset() + dst.position();
-        int dl = dst.arrayOffset() + dst.limit();
-
-        try {
-            while (sp < sl) {
-                char c = sa[sp];
-                if (Character.isSurrogate(c)) {
-                    if (sgp.parse(c, sa, sp, sl) < 0)
-                        return sgp.error();
-                    if (sl - sp < 2)
-                        return CoderResult.UNDERFLOW;
-                    char c2 = sa[sp + 1];
-
-                    byte[] outputBytes = new byte[2];
-                    outputBytes = encodeSurrogate(c, c2);
-
-                    if (outputBytes == null) {
-                        return sgp.unmappableResult();
-                    }
-                    else {
-                        if (dl - dp < 2)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = outputBytes[0];
-                        da[dp++] = outputBytes[1];
-                        sp += 2;
-                        continue;
-                    }
-                }
-                if (c >= '\uFFFE')
-                    return CoderResult.unmappableForLength(1);
-
-                int b = encodeSingle(c);
-                if (b != -1) { // Single Byte
-                    if (dl - dp < 1)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = (byte)b;
-                    sp++;
-                    continue;
-                }
-
-                int ncode  = encodeDouble(c);
-                if (ncode != 0 && c != '\u0000' ) {
-                    if (dl - dp < 2)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = (byte) ((ncode & 0xff00) >> 8);
-                    da[dp++] = (byte) (ncode & 0xff);
-                    sp++;
-                    continue;
-                }
-                return CoderResult.unmappableForLength(1);
-                }
-            return CoderResult.UNDERFLOW;
-        } finally {
-            src.position(sp - src.arrayOffset());
-            dst.position(dp - dst.arrayOffset());
-        }
-    }
-
-    private CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
-        int mark = src.position();
-
-        try {
-            while (src.hasRemaining()) {
-                char c = src.get();
-                if (Character.isSurrogate(c)) {
-                    int surr;
-                    if ((surr = sgp.parse(c, src)) < 0)
-                        return sgp.error();
-                    char c2 = Surrogate.low(surr);
-                    byte[] outputBytes = new byte[2];
-                    outputBytes = encodeSurrogate(c, c2);
-
-                    if (outputBytes == null) {
-                        return sgp.unmappableResult();
-                    } else {
-                        if (dst.remaining() < 2)
-                            return CoderResult.OVERFLOW;
-                        mark += 2;
-                        dst.put(outputBytes[0]);
-                        dst.put(outputBytes[1]);
-                        continue;
-                    }
-                }
-                if (c >= '\uFFFE')
-                    return CoderResult.unmappableForLength(1);
-                int b = encodeSingle(c);
-
-                if (b != -1) { // Single-byte character
-                    if (dst.remaining() < 1)
-                        return CoderResult.OVERFLOW;
-                    mark++;
-                    dst.put((byte)b);
-                    continue;
-                }
-                // Double Byte character
-
-                int ncode = encodeDouble(c);
-                if (ncode != 0 && c != '\u0000') {
-                    if (dst.remaining() < 2)
-                        return CoderResult.OVERFLOW;
-                    mark++;
-                    dst.put((byte) ((ncode & 0xff00) >> 8));
-                    dst.put((byte) ncode);
-                    continue;
-                }
-                return CoderResult.unmappableForLength(1);
-            }
-
-            return CoderResult.UNDERFLOW;
-        } finally {
-            src.position(mark);
-        }
-    }
-
-    protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-        if (true && src.hasArray() && dst.hasArray())
-            return encodeArrayLoop(src, dst);
-        else
-            return encodeBufferLoop(src, dst);
-    }
-
-    /*
-     * Can be changed by subclass
-     */
-    protected int encodeDouble(char ch) {
-        int offset = index1[((ch & 0xff00) >> 8 )] << 8;
-        return index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
-    }
-
-    /*
-     * Can be changed by subclass
-     */
-    protected int encodeSingle(char inputChar) {
-        if (inputChar < 0x80)
-            return (byte)inputChar;
-        else
-            return -1;
-    }
-
-    /**
-     *  Protected method which should be overridden by concrete DBCS
-     *  CharsetEncoder classes which included supplementary characters
-     *  within their mapping coverage.
-     *  null return value indicates surrogate values could not be
-     *  handled or encoded.
-     */
-    protected byte[] encodeSurrogate(char highSurrogate, char lowSurrogate) {
-        return null;
-    }
-}
--- a/jdk/src/jdk.charsets/unix/classes/sun/nio/cs/ext/COMPOUND_TEXT.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-
-public class COMPOUND_TEXT extends Charset {
-    public COMPOUND_TEXT () {
-        super("x-COMPOUND_TEXT",
-              ExtendedCharsets.aliasesFor("x-COMPOUND_TEXT"));
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new COMPOUND_TEXT_Encoder(this);
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new COMPOUND_TEXT_Decoder(this);
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof COMPOUND_TEXT;
-    }
-}
--- a/jdk/src/jdk.charsets/unix/classes/sun/nio/cs/ext/COMPOUND_TEXT_Decoder.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,714 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.nio.cs.ext;
-import java.io.ByteArrayOutputStream;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.*;
-
-/**
- * An algorithmic conversion from COMPOUND_TEXT to Unicode.
- */
-
-public class COMPOUND_TEXT_Decoder extends CharsetDecoder {
-
-    private static final int NORMAL_BYTES             =  0;
-    private static final int NONSTANDARD_BYTES        =  1;
-    private static final int VERSION_SEQUENCE_V       =  2;
-    private static final int VERSION_SEQUENCE_TERM    =  3;
-    private static final int ESCAPE_SEQUENCE          =  4;
-    private static final int CHARSET_NGIIF            =  5;
-    private static final int CHARSET_NLIIF            =  6;
-    private static final int CHARSET_NLIF             =  7;
-    private static final int CHARSET_NRIIF            =  8;
-    private static final int CHARSET_NRIF             =  9;
-    private static final int CHARSET_NONSTANDARD_FOML = 10;
-    private static final int CHARSET_NONSTANDARD_OML  = 11;
-    private static final int CHARSET_NONSTANDARD_ML   = 12;
-    private static final int CHARSET_NONSTANDARD_L    = 13;
-    private static final int CHARSET_NONSTANDARD      = 14;
-    private static final int CHARSET_LIIF             = 15;
-    private static final int CHARSET_LIF              = 16;
-    private static final int CHARSET_RIIF             = 17;
-    private static final int CHARSET_RIF              = 18;
-    private static final int CONTROL_SEQUENCE_PIF     = 19;
-    private static final int CONTROL_SEQUENCE_IF      = 20;
-    private static final int EXTENSION_ML             = 21;
-    private static final int EXTENSION_L              = 22;
-    private static final int EXTENSION                = 23;
-    private static final int ESCAPE_SEQUENCE_OTHER    = 24;
-
-    private static final String ERR_LATIN1 = "ISO8859_1 unsupported";
-    private static final String ERR_ILLSTATE = "Illegal state";
-    private static final String ERR_ESCBYTE =
-        "Illegal byte in 0x1B escape sequence";
-    private static final String ERR_ENCODINGBYTE =
-        "Illegal byte in non-standard character set name";
-    private static final String ERR_CTRLBYTE =
-        "Illegal byte in 0x9B control sequence";
-    private static final String ERR_CTRLPI =
-        "P following I in 0x9B control sequence";
-    private static final String ERR_VERSTART =
-        "Versioning escape sequence can only appear at start of byte stream";
-    private static final String ERR_VERMANDATORY =
-        "Cannot parse mandatory extensions";
-    private static final String ERR_ENCODING = "Unknown encoding: ";
-    private static final String ERR_FLUSH =
-        "Escape sequence, control sequence, or ML extension not terminated";
-
-    private int state = NORMAL_BYTES ;
-    private int ext_count, ext_offset;
-    private boolean versionSequenceAllowed = true;
-    private byte[] byteBuf = new byte[1];
-    private ByteBuffer inBB = ByteBuffer.allocate(16);
-    private ByteArrayOutputStream queue = new ByteArrayOutputStream(),
-        encodingQueue = new ByteArrayOutputStream();
-
-    private CharsetDecoder glDecoder, grDecoder, nonStandardDecoder,
-        lastDecoder;
-    private boolean glHigh = false, grHigh = true;
-
-
-    public COMPOUND_TEXT_Decoder(Charset cs) {
-        super(cs, 1.0f, 1.0f);
-        try {
-            // Initial state in ISO 2022 designates Latin-1 charset.
-            glDecoder = Charset.forName("ASCII").newDecoder();
-            grDecoder = Charset.forName("ISO8859_1").newDecoder();
-        } catch (IllegalArgumentException e) {
-            error(ERR_LATIN1);
-        }
-        initDecoder(glDecoder);
-        initDecoder(grDecoder);
-    }
-
-    protected CoderResult decodeLoop(ByteBuffer src, CharBuffer des) {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        byte[] input = src.array();
-        int inOff = src.arrayOffset() + src.position();
-        int inEnd = src.arrayOffset() + src.limit();
-
-        try {
-            while (inOff < inEnd && cr.isUnderflow()) {
-                // Byte parsing is done with shorts instead of bytes because
-                // Java bytes are signed, while COMPOUND_TEXT bytes are not. If
-                // we used the Java byte type, the > and < tests during parsing
-                // would not work correctly.
-                cr = handleByte((short)(input[inOff] & 0xFF), des);
-                inOff++;
-            }
-            return cr;
-        } finally {
-            src.position(inOff - src.arrayOffset());
-        }
-    }
-
-    private CoderResult handleByte(short newByte, CharBuffer cb) {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        switch (state) {
-        case NORMAL_BYTES:
-            cr= normalBytes(newByte, cb);
-            break;
-        case NONSTANDARD_BYTES:
-            cr = nonStandardBytes(newByte, cb);
-            break;
-        case VERSION_SEQUENCE_V:
-        case VERSION_SEQUENCE_TERM:
-            cr = versionSequence(newByte);
-            break;
-        case ESCAPE_SEQUENCE:
-            cr = escapeSequence(newByte);
-            break;
-        case CHARSET_NGIIF:
-            cr = charset94N(newByte);
-            break;
-        case CHARSET_NLIIF:
-        case CHARSET_NLIF:
-            cr = charset94NL(newByte, cb);
-            break;
-        case CHARSET_NRIIF:
-        case CHARSET_NRIF:
-            cr = charset94NR(newByte, cb);
-            break;
-        case CHARSET_NONSTANDARD_FOML:
-        case CHARSET_NONSTANDARD_OML:
-        case CHARSET_NONSTANDARD_ML:
-        case CHARSET_NONSTANDARD_L:
-        case CHARSET_NONSTANDARD:
-            cr = charsetNonStandard(newByte, cb);
-            break;
-        case CHARSET_LIIF:
-        case CHARSET_LIF:
-            cr = charset9496L(newByte, cb);
-            break;
-        case CHARSET_RIIF:
-        case CHARSET_RIF:
-            cr = charset9496R(newByte, cb);
-            break;
-        case CONTROL_SEQUENCE_PIF:
-        case CONTROL_SEQUENCE_IF:
-            cr = controlSequence(newByte);
-            break;
-        case EXTENSION_ML:
-        case EXTENSION_L:
-        case EXTENSION:
-            cr = extension(newByte);
-            break;
-        case ESCAPE_SEQUENCE_OTHER:
-            cr = escapeSequenceOther(newByte);
-            break;
-        default:
-            error(ERR_ILLSTATE);
-        }
-        return cr;
-    }
-
-    private CoderResult normalBytes(short newByte, CharBuffer cb) {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        if ((newByte >= 0x00 && newByte <= 0x1F) || // C0
-            (newByte >= 0x80 && newByte <= 0x9F)) { // C1
-            char newChar;
-
-            switch (newByte) {
-            case 0x1B:
-                state = ESCAPE_SEQUENCE;
-                queue.write(newByte);
-                return cr;
-            case 0x9B:
-                state = CONTROL_SEQUENCE_PIF;
-                versionSequenceAllowed = false;
-                queue.write(newByte);
-                return cr;
-            case 0x09:
-                versionSequenceAllowed = false;
-                newChar = '\t';
-                break;
-            case 0x0A:
-                versionSequenceAllowed = false;
-                newChar = '\n';
-                break;
-            default:
-                versionSequenceAllowed = false;
-                return cr;
-            }
-            if (!cb.hasRemaining())
-                return CoderResult.OVERFLOW;
-            else
-                cb.put(newChar);
-        } else {
-            CharsetDecoder decoder;
-            boolean high;
-            versionSequenceAllowed = false;
-
-            if (newByte >= 0x20 && newByte <= 0x7F) {
-                decoder = glDecoder;
-                high = glHigh;
-            } else /* if (newByte >= 0xA0 && newByte <= 0xFF) */ {
-                decoder = grDecoder;
-                high = grHigh;
-            }
-            if (lastDecoder != null && decoder != lastDecoder) {
-                cr = flushDecoder(lastDecoder, cb);
-            }
-            lastDecoder = decoder;
-
-            if (decoder != null) {
-                byte b = (byte)newByte;
-                if (high) {
-                    b |= 0x80;
-                } else {
-                    b &= 0x7F;
-                }
-                inBB.put(b);
-                inBB.flip();
-                cr = decoder.decode(inBB, cb, false);
-                if (!inBB.hasRemaining() || cr.isMalformed()) {
-                    inBB.clear();
-                } else {
-                  int pos = inBB.limit();
-                  inBB.clear();
-                  inBB.position(pos);
-                }
-            } else if (cb.remaining() < replacement().length()) {
-                cb.put(replacement());
-            } else {
-                return CoderResult.OVERFLOW;
-            }
-        }
-        return cr;
-    }
-
-    private CoderResult nonStandardBytes(short newByte, CharBuffer cb)
-    {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        if (nonStandardDecoder != null) {
-            //byteBuf[0] = (byte)newByte;
-            inBB.put((byte)newByte);
-            inBB.flip();
-            cr = nonStandardDecoder.decode(inBB, cb, false);
-            if (!inBB.hasRemaining()) {
-                inBB.clear();
-            } else {
-                int pos = inBB.limit();
-                inBB.clear();
-                inBB.position(pos);
-            }
-        } else if (cb.remaining() < replacement().length()) {
-            cb.put(replacement());
-        } else {
-            return CoderResult.OVERFLOW;
-        }
-
-        ext_offset++;
-        if (ext_offset >= ext_count) {
-            ext_offset = ext_count = 0;
-            state = NORMAL_BYTES;
-            cr = flushDecoder(nonStandardDecoder, cb);
-            nonStandardDecoder = null;
-        }
-        return cr;
-    }
-
-    private CoderResult escapeSequence(short newByte) {
-        switch (newByte) {
-        case 0x23:
-            state = VERSION_SEQUENCE_V;
-            break;
-        case 0x24:
-            state = CHARSET_NGIIF;
-            versionSequenceAllowed = false;
-            break;
-        case 0x25:
-            state = CHARSET_NONSTANDARD_FOML;
-            versionSequenceAllowed = false;
-            break;
-        case 0x28:
-            state = CHARSET_LIIF;
-            versionSequenceAllowed = false;
-            break;
-        case 0x29:
-        case 0x2D:
-            state = CHARSET_RIIF;
-            versionSequenceAllowed = false;
-            break;
-        default:
-            // escapeSequenceOther will write to queue if appropriate
-            return escapeSequenceOther(newByte);
-        }
-
-        queue.write(newByte);
-        return CoderResult.UNDERFLOW;
-    }
-
-    /**
-     * Test for unknown, but valid, escape sequences.
-     */
-    private CoderResult escapeSequenceOther(short newByte) {
-        if (newByte >= 0x20 && newByte <= 0x2F) {
-            // {I}
-            state = ESCAPE_SEQUENCE_OTHER;
-            versionSequenceAllowed = false;
-            queue.write(newByte);
-        } else if (newByte >= 0x30 && newByte <= 0x7E) {
-            // F -- end of sequence
-            state = NORMAL_BYTES;
-            versionSequenceAllowed = false;
-            queue.reset();
-        } else {
-            return malformedInput(ERR_ESCBYTE);
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    /**
-     * Parses directionality, as well as unknown, but valid, control sequences.
-     */
-    private CoderResult controlSequence(short newByte) {
-        if (newByte >= 0x30 && newByte <= 0x3F) {
-            // {P}
-            if (state == CONTROL_SEQUENCE_IF) {
-                // P no longer allowed
-                return malformedInput(ERR_CTRLPI);
-            }
-            queue.write(newByte);
-        } else if (newByte >= 0x20 && newByte <= 0x2F) {
-            // {I}
-            state = CONTROL_SEQUENCE_IF;
-            queue.write(newByte);
-        } else if (newByte >= 0x40 && newByte <= 0x7E) {
-            // F -- end of sequence
-            state = NORMAL_BYTES;
-            queue.reset();
-        } else {
-            return malformedInput(ERR_CTRLBYTE);
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    private CoderResult versionSequence(short newByte) {
-        if (state == VERSION_SEQUENCE_V) {
-            if (newByte >= 0x20 && newByte <= 0x2F) {
-                state = VERSION_SEQUENCE_TERM;
-                queue.write(newByte);
-            } else {
-                return escapeSequenceOther(newByte);
-            }
-        } else /* if (state == VERSION_SEQUENCE_TERM) */ {
-            switch (newByte) {
-            case 0x30:
-                if (!versionSequenceAllowed) {
-                    return malformedInput(ERR_VERSTART);
-                }
-
-                // OK to ignore extensions
-                versionSequenceAllowed = false;
-                state = NORMAL_BYTES;
-                queue.reset();
-                break;
-            case 0x31:
-                return malformedInput((versionSequenceAllowed)
-                               ? ERR_VERMANDATORY : ERR_VERSTART);
-            default:
-                return escapeSequenceOther(newByte);
-            }
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    private CoderResult charset94N(short newByte) {
-        switch (newByte) {
-        case 0x28:
-            state = CHARSET_NLIIF;
-            break;
-        case 0x29:
-            state = CHARSET_NRIIF;
-            break;
-        default:
-            // escapeSequenceOther will write byte if appropriate
-            return escapeSequenceOther(newByte);
-        }
-
-        queue.write(newByte);
-        return CoderResult.UNDERFLOW;
-    }
-
-    private CoderResult charset94NL(short newByte, CharBuffer cb) {
-        if (newByte >= 0x21 &&
-            newByte <= (state == CHARSET_NLIIF ? 0x23 : 0x2F)) {
-            // {I}
-            state = CHARSET_NLIF;
-            queue.write(newByte);
-        } else if (newByte >= 0x40 && newByte <= 0x7E) {
-            // F
-            return switchDecoder(newByte, cb);
-        } else {
-            return escapeSequenceOther(newByte);
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    private CoderResult charset94NR(short newByte, CharBuffer cb)
-    {
-        if (newByte >= 0x21 &&
-            newByte <= (state == CHARSET_NRIIF ? 0x23 : 0x2F)) {
-            // {I}
-            state = CHARSET_NRIF;
-            queue.write(newByte);
-        } else if (newByte >= 0x40 && newByte <= 0x7E) {
-            // F
-            return switchDecoder(newByte, cb);
-        } else {
-            return escapeSequenceOther(newByte);
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    private CoderResult charset9496L(short newByte, CharBuffer cb) {
-        if (newByte >= 0x21 &&
-            newByte <= (state == CHARSET_LIIF ? 0x23 : 0x2F)) {
-            // {I}
-            state = CHARSET_LIF;
-            queue.write(newByte);
-            return CoderResult.UNDERFLOW;
-        } else if (newByte >= 0x40 && newByte <= 0x7E) {
-            // F
-            return switchDecoder(newByte, cb);
-        } else {
-            return escapeSequenceOther(newByte);
-        }
-    }
-
-    private CoderResult charset9496R(short newByte, CharBuffer cb) {
-        if (newByte >= 0x21 &&
-            newByte <= (state == CHARSET_RIIF ? 0x23 : 0x2F)) {
-            // {I}
-            state = CHARSET_RIF;
-            queue.write(newByte);
-            return CoderResult.UNDERFLOW;
-        } else if (newByte >= 0x40 && newByte <= 0x7E) {
-            // F
-            return switchDecoder(newByte, cb);
-        } else {
-            return escapeSequenceOther(newByte);
-        }
-    }
-
-    private CoderResult charsetNonStandard(short newByte, CharBuffer cb) {
-        switch (state) {
-        case CHARSET_NONSTANDARD_FOML:
-            if (newByte == 0x2F) {
-                state = CHARSET_NONSTANDARD_OML;
-                queue.write(newByte);
-            } else {
-                return escapeSequenceOther(newByte);
-            }
-            break;
-        case CHARSET_NONSTANDARD_OML:
-            if (newByte >= 0x30 && newByte <= 0x34) {
-                state = CHARSET_NONSTANDARD_ML;
-                queue.write(newByte);
-            } else if (newByte >= 0x35 && newByte <= 0x3F) {
-                state = EXTENSION_ML;
-                queue.write(newByte);
-            } else {
-                return escapeSequenceOther(newByte);
-            }
-            break;
-        case CHARSET_NONSTANDARD_ML:
-            ext_count = (newByte & 0x7F) * 0x80;
-            state = CHARSET_NONSTANDARD_L;
-            break;
-        case CHARSET_NONSTANDARD_L:
-            ext_count = ext_count + (newByte & 0x7F);
-            state = (ext_count > 0) ? CHARSET_NONSTANDARD : NORMAL_BYTES;
-            break;
-        case CHARSET_NONSTANDARD:
-            if (newByte == 0x3F || newByte == 0x2A) {
-                queue.reset(); // In this case, only current byte is bad.
-                return malformedInput(ERR_ENCODINGBYTE);
-            }
-            ext_offset++;
-            if (ext_offset >= ext_count) {
-                ext_offset = ext_count = 0;
-                state = NORMAL_BYTES;
-                queue.reset();
-                encodingQueue.reset();
-            } else if (newByte == 0x02) {
-                // encoding name terminator
-                return switchDecoder((short)0, cb);
-            } else {
-                encodingQueue.write(newByte);
-            }
-            break;
-        default:
-            error(ERR_ILLSTATE);
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    private CoderResult extension(short newByte) {
-        switch (state) {
-        case EXTENSION_ML:
-            ext_count = (newByte & 0x7F) * 0x80;
-            state = EXTENSION_L;
-            break;
-        case EXTENSION_L:
-            ext_count = ext_count + (newByte & 0x7F);
-            state = (ext_count > 0) ? EXTENSION : NORMAL_BYTES;
-            break;
-        case EXTENSION:
-            // Consume 'count' bytes. Don't bother putting them on the queue.
-            // There may be too many and we can't do anything with them anyway.
-            ext_offset++;
-            if (ext_offset >= ext_count) {
-                ext_offset = ext_count = 0;
-                state = NORMAL_BYTES;
-                queue.reset();
-            }
-            break;
-        default:
-            error(ERR_ILLSTATE);
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    /**
-     * Preconditions:
-     *   1. 'queue' contains ControlSequence.escSequence
-     *   2. 'encodingQueue' contains ControlSequence.encoding
-     */
-    private CoderResult switchDecoder(short lastByte, CharBuffer cb) {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        CharsetDecoder decoder = null;
-        boolean high = false;
-        byte[] escSequence;
-        byte[] encoding = null;
-
-        if (lastByte != 0) {
-            queue.write(lastByte);
-        }
-
-        escSequence = queue.toByteArray();
-        queue.reset();
-
-        if (state == CHARSET_NONSTANDARD) {
-            encoding = encodingQueue.toByteArray();
-            encodingQueue.reset();
-            decoder = CompoundTextSupport.
-                getNonStandardDecoder(escSequence, encoding);
-        } else {
-            decoder = CompoundTextSupport.getStandardDecoder(escSequence);
-            high = CompoundTextSupport.getHighBit(escSequence);
-        }
-        if (decoder != null) {
-            initDecoder(decoder);
-        } else if (unmappableCharacterAction() == CodingErrorAction.REPORT) {
-            int badInputLength = 1;
-            if (encoding != null) {
-                badInputLength = encoding.length;
-            } else if (escSequence.length > 0) {
-                badInputLength = escSequence.length;
-            }
-            return CoderResult.unmappableForLength(badInputLength);
-        }
-
-        if (state == CHARSET_NLIIF || state == CHARSET_NLIF ||
-            state == CHARSET_LIIF || state == CHARSET_LIF)
-        {
-            if (lastDecoder == glDecoder) {
-                cr = flushDecoder(glDecoder, cb);
-            }
-            glDecoder = lastDecoder = decoder;
-            glHigh = high;
-            state = NORMAL_BYTES;
-        } else if (state == CHARSET_NRIIF || state == CHARSET_NRIF ||
-                   state == CHARSET_RIIF || state == CHARSET_RIF) {
-            if (lastDecoder == grDecoder) {
-                cr = flushDecoder(grDecoder, cb);
-            }
-            grDecoder = lastDecoder = decoder;
-            grHigh = high;
-            state = NORMAL_BYTES;
-        } else if (state == CHARSET_NONSTANDARD) {
-            if (lastDecoder != null) {
-                cr = flushDecoder(lastDecoder, cb);
-                lastDecoder = null;
-            }
-            nonStandardDecoder = decoder;
-            state = NONSTANDARD_BYTES;
-        } else {
-            error(ERR_ILLSTATE);
-        }
-        return cr;
-    }
-
-    private ByteBuffer fbb= ByteBuffer.allocate(0);
-    private CoderResult flushDecoder(CharsetDecoder dec, CharBuffer cb) {
-        dec.decode(fbb, cb, true);
-        CoderResult cr = dec.flush(cb);
-        dec.reset();  //reuse
-        return cr;
-    }
-
-    private CoderResult malformedInput(String msg) {
-        int badInputLength = queue.size() + 1 /* current byte */ ;
-        queue.reset();
-        //TBD: nowhere to put the msg in CoderResult
-        return CoderResult.malformedForLength(badInputLength);
-    }
-
-    private void error(String msg) {
-        // For now, throw InternalError. Convert to 'assert' keyword later.
-        throw new InternalError(msg);
-    }
-
-    protected CoderResult implFlush(CharBuffer out) {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        if (lastDecoder != null)
-          cr = flushDecoder(lastDecoder, out);
-        if (state != NORMAL_BYTES)
-            //TBD message ERR_FLUSH;
-            cr = CoderResult.malformedForLength(0);
-        reset();
-        return cr;
-    }
-
-    /**
-     * Resets the decoder.
-     * Call this method to reset the decoder to its initial state
-     */
-    protected void implReset() {
-        state = NORMAL_BYTES;
-        ext_count = ext_offset = 0;
-        versionSequenceAllowed = true;
-        queue.reset();
-        encodingQueue.reset();
-        nonStandardDecoder = lastDecoder = null;
-        glHigh = false;
-        grHigh = true;
-        try {
-            // Initial state in ISO 2022 designates Latin-1 charset.
-            glDecoder = Charset.forName("ASCII").newDecoder();
-            grDecoder = Charset.forName("ISO8859_1").newDecoder();
-        } catch (IllegalArgumentException e) {
-            error(ERR_LATIN1);
-        }
-        initDecoder(glDecoder);
-        initDecoder(grDecoder);
-    }
-
-    protected void implOnMalformedInput(CodingErrorAction newAction) {
-        if (glDecoder != null)
-            glDecoder.onMalformedInput(newAction);
-        if (grDecoder != null)
-            grDecoder.onMalformedInput(newAction);
-        if (nonStandardDecoder != null)
-            nonStandardDecoder.onMalformedInput(newAction);
-    }
-
-    protected void implOnUnmappableCharacter(CodingErrorAction newAction) {
-        if (glDecoder != null)
-            glDecoder.onUnmappableCharacter(newAction);
-        if (grDecoder != null)
-            grDecoder.onUnmappableCharacter(newAction);
-        if (nonStandardDecoder != null)
-            nonStandardDecoder.onUnmappableCharacter(newAction);
-    }
-
-    protected void implReplaceWith(String newReplacement) {
-        if (glDecoder != null)
-            glDecoder.replaceWith(newReplacement);
-        if (grDecoder != null)
-            grDecoder.replaceWith(newReplacement);
-        if (nonStandardDecoder != null)
-            nonStandardDecoder.replaceWith(newReplacement);
-    }
-
-    private void initDecoder(CharsetDecoder dec) {
-        dec.onUnmappableCharacter(CodingErrorAction.REPLACE)
-            .replaceWith(replacement());
-    }
-}
--- a/jdk/src/jdk.charsets/unix/classes/sun/nio/cs/ext/COMPOUND_TEXT_Encoder.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,349 +0,0 @@
-/*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package sun.nio.cs.ext;
-
-import java.io.ByteArrayOutputStream;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.*;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-public class COMPOUND_TEXT_Encoder extends CharsetEncoder {
-
-    /**
-     * NOTE: The following four static variables should be used *only* for
-     * testing whether a encoder can encode a specific character. They
-     * cannot be used for actual encoding because they are shared across all
-     * COMPOUND_TEXT encoders and may be stateful.
-     */
-    private static final Map<String,CharsetEncoder> encodingToEncoderMap =
-      Collections.synchronizedMap(new HashMap<String,CharsetEncoder>(21, 1.0f));
-    private static final CharsetEncoder latin1Encoder;
-    private static final CharsetEncoder defaultEncoder;
-    private static final boolean defaultEncodingSupported;
-
-    static {
-        CharsetEncoder encoder = Charset.defaultCharset().newEncoder();
-        String encoding = encoder.charset().name();
-        if ("ISO8859_1".equals(encoding)) {
-            latin1Encoder = encoder;
-            defaultEncoder = encoder;
-            defaultEncodingSupported = true;
-        } else {
-            try {
-                latin1Encoder =
-                    Charset.forName("ISO8859_1").newEncoder();
-            } catch (IllegalArgumentException e) {
-                throw new ExceptionInInitializerError
-                    ("ISO8859_1 unsupported");
-            }
-            defaultEncoder = encoder;
-            defaultEncodingSupported = CompoundTextSupport.getEncodings().
-                contains(defaultEncoder.charset().name());
-        }
-    }
-
-    private CharsetEncoder encoder;
-    private char[] charBuf = new char[1];
-    private CharBuffer charbuf = CharBuffer.wrap(charBuf);
-    private ByteArrayOutputStream nonStandardCharsetBuffer;
-    private byte[] byteBuf;
-    private ByteBuffer bytebuf;
-    private int numNonStandardChars, nonStandardEncodingLen;
-
-    public COMPOUND_TEXT_Encoder(Charset cs) {
-        super(cs,
-              (float)(CompoundTextSupport.MAX_CONTROL_SEQUENCE_LEN + 2),
-              (float)(CompoundTextSupport.MAX_CONTROL_SEQUENCE_LEN + 2));
-        try {
-            encoder = Charset.forName("ISO8859_1").newEncoder();
-        } catch (IllegalArgumentException cannotHappen) {}
-        initEncoder(encoder);
-    }
-
-    protected CoderResult encodeLoop(CharBuffer src, ByteBuffer des) {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        char[] input = src.array();
-        int inOff = src.arrayOffset() + src.position();
-        int inEnd = src.arrayOffset() + src.limit();
-
-        try {
-            while (inOff < inEnd && cr.isUnderflow()) {
-                charBuf[0] = input[inOff];
-                if (charBuf[0] <= '\u0008' ||
-                    (charBuf[0] >= '\u000B' && charBuf[0] <= '\u001F') ||
-                    (charBuf[0] >= '\u0080' && charBuf[0] <= '\u009F')) {
-                    // The compound text specification only permits the octets
-                    // 0x09, 0x0A, 0x1B, and 0x9B in C0 and C1. Of these, 1B and
-                    // 9B must also be removed because they initiate control
-                    // sequences.
-                    charBuf[0] = '?';
-                }
-
-                CharsetEncoder enc = getEncoder(charBuf[0]);
-                //System.out.println("char=" + charBuf[0] + ", enc=" + enc);
-                if (enc == null) {
-                    if (unmappableCharacterAction()
-                        == CodingErrorAction.REPORT) {
-                        charBuf[0] = '?';
-                        enc = latin1Encoder;
-                    } else {
-                        return CoderResult.unmappableForLength(1);
-                    }
-                }
-                if (enc != encoder) {
-                    if (nonStandardCharsetBuffer != null) {
-                        cr = flushNonStandardCharsetBuffer(des);
-                    } else {
-                        //cr= encoder.flush(des);
-                        flushEncoder(encoder, des);
-                    }
-                    if (!cr.isUnderflow())
-                        return cr;
-                    byte[] escSequence = CompoundTextSupport.
-                        getEscapeSequence(enc.charset().name());
-                    if (escSequence == null) {
-                        throw new InternalError("Unknown encoding: " +
-                                                enc.charset().name());
-                    } else if (escSequence[1] == (byte)0x25 &&
-                               escSequence[2] == (byte)0x2F) {
-                        initNonStandardCharsetBuffer(enc, escSequence);
-                    } else if (des.remaining() >= escSequence.length) {
-                        des.put(escSequence, 0, escSequence.length);
-                    } else {
-                        return CoderResult.OVERFLOW;
-                    }
-                    encoder = enc;
-                    continue;
-                }
-                charbuf.rewind();
-                if (nonStandardCharsetBuffer == null) {
-                    cr = encoder.encode(charbuf, des, false);
-                } else {
-                    bytebuf.clear();
-                    cr = encoder.encode(charbuf, bytebuf, false);
-                    bytebuf.flip();
-                    nonStandardCharsetBuffer.write(byteBuf,
-                                                   0, bytebuf.limit());
-                    numNonStandardChars++;
-                }
-                inOff++;
-            }
-            return cr;
-        } finally {
-            src.position(inOff - src.arrayOffset());
-        }
-    }
-
-    protected CoderResult implFlush(ByteBuffer out) {
-        CoderResult cr = (nonStandardCharsetBuffer != null)
-            ? flushNonStandardCharsetBuffer(out)
-            //: encoder.flush(out);
-            : flushEncoder(encoder, out);
-        reset();
-        return cr;
-    }
-
-    private void initNonStandardCharsetBuffer(CharsetEncoder c,
-                                              byte[] escSequence)
-    {
-        nonStandardCharsetBuffer = new ByteArrayOutputStream();
-        byteBuf = new byte[(int)c.maxBytesPerChar()];
-        bytebuf = ByteBuffer.wrap(byteBuf);
-        nonStandardCharsetBuffer.write(escSequence, 0, escSequence.length);
-        nonStandardCharsetBuffer.write(0); // M placeholder
-        nonStandardCharsetBuffer.write(0); // L placeholder
-        byte[] encoding = CompoundTextSupport.
-            getEncoding(c.charset().name());
-        if (encoding == null) {
-            throw new InternalError
-                ("Unknown encoding: " + encoder.charset().name());
-        }
-        nonStandardCharsetBuffer.write(encoding, 0, encoding.length);
-        nonStandardCharsetBuffer.write(0x02); // divider
-        nonStandardEncodingLen = encoding.length + 1;
-    }
-
-    private CoderResult flushNonStandardCharsetBuffer(ByteBuffer out) {
-        if (numNonStandardChars > 0) {
-            byte[] flushBuf = new byte[(int)encoder.maxBytesPerChar() *
-                                       numNonStandardChars];
-            ByteBuffer bb = ByteBuffer.wrap(flushBuf);
-            flushEncoder(encoder, bb);
-            bb.flip();
-            nonStandardCharsetBuffer.write(flushBuf, 0, bb.limit());
-            numNonStandardChars = 0;
-        }
-
-        int numBytes = nonStandardCharsetBuffer.size();
-        int nonStandardBytesOff = 6 + nonStandardEncodingLen;
-
-        if (out.remaining() < (numBytes - nonStandardBytesOff) +
-            nonStandardBytesOff * (((numBytes - nonStandardBytesOff) /
-                                    ((1 << 14) - 1)) + 1))
-        {
-            return CoderResult.OVERFLOW;
-        }
-
-        byte[] nonStandardBytes =
-            nonStandardCharsetBuffer.toByteArray();
-
-        // The non-standard charset header only supports 2^14-1 bytes of data.
-        // If we have more than that, we have to repeat the header.
-        do {
-            out.put((byte)0x1B);
-            out.put((byte)0x25);
-            out.put((byte)0x2F);
-            out.put(nonStandardBytes[3]);
-
-            int toWrite = Math.min(numBytes - nonStandardBytesOff,
-                                   (1 << 14) - 1 - nonStandardEncodingLen);
-
-            out.put((byte)
-                (((toWrite + nonStandardEncodingLen) / 0x80) | 0x80)); // M
-            out.put((byte)
-                (((toWrite + nonStandardEncodingLen) % 0x80) | 0x80)); // L
-            out.put(nonStandardBytes, 6, nonStandardEncodingLen);
-            out.put(nonStandardBytes, nonStandardBytesOff, toWrite);
-            nonStandardBytesOff += toWrite;
-        } while (nonStandardBytesOff < numBytes);
-
-        nonStandardCharsetBuffer = null;
-        byteBuf = null;
-        nonStandardEncodingLen = 0;
-        return CoderResult.UNDERFLOW;
-    }
-
-    /**
-     * Resets the encoder.
-     * Call this method to reset the encoder to its initial state
-     */
-    protected void implReset() {
-        numNonStandardChars = nonStandardEncodingLen = 0;
-        nonStandardCharsetBuffer = null;
-        byteBuf = null;
-        try {
-            encoder = Charset.forName("ISO8859_1").newEncoder();
-        } catch (IllegalArgumentException cannotHappen) {
-        }
-        initEncoder(encoder);
-    }
-
-    /**
-     * Return whether a character is mappable or not
-     * @return true if a character is mappable
-     */
-    public boolean canEncode(char ch) {
-        return getEncoder(ch) != null;
-    }
-
-    protected void implOnMalformedInput(CodingErrorAction newAction) {
-        encoder.onUnmappableCharacter(newAction);
-    }
-
-    protected void implOnUnmappableCharacter(CodingErrorAction newAction) {
-        encoder.onUnmappableCharacter(newAction);
-    }
-
-    protected void implReplaceWith(byte[] newReplacement) {
-        if (encoder != null)
-            encoder.replaceWith(newReplacement);
-    }
-
-    /**
-     * Try to figure out which CharsetEncoder to use for conversion
-     * of the specified Unicode character. The target character encoding
-     * of the returned encoder is approved to be used with Compound Text.
-     *
-     * @param ch Unicode character
-     * @return CharsetEncoder to convert the given character
-     */
-    private CharsetEncoder getEncoder(char ch) {
-        // 1. Try the current encoder.
-        if (encoder.canEncode(ch)) {
-            return encoder;
-        }
-
-        // 2. Try the default encoder.
-        if (defaultEncodingSupported && defaultEncoder.canEncode(ch)) {
-            CharsetEncoder retval = null;
-            try {
-                retval = defaultEncoder.charset().newEncoder();
-            } catch (UnsupportedOperationException cannotHappen) {
-            }
-            initEncoder(retval);
-            return retval;
-        }
-
-        // 3. Try ISO8859-1.
-        if (latin1Encoder.canEncode(ch)) {
-            CharsetEncoder retval = null;
-            try {
-                retval = latin1Encoder.charset().newEncoder();
-            } catch (UnsupportedOperationException cannotHappen) {}
-            initEncoder(retval);
-            return retval;
-        }
-
-        // 4. Brute force search of all supported encodings.
-        for (String encoding : CompoundTextSupport.getEncodings())
-        {
-            CharsetEncoder enc = encodingToEncoderMap.get(encoding);
-            if (enc == null) {
-                enc = CompoundTextSupport.getEncoder(encoding);
-                if (enc == null) {
-                    throw new InternalError("Unsupported encoding: " +
-                                            encoding);
-                }
-                encodingToEncoderMap.put(encoding, enc);
-            }
-            if (enc.canEncode(ch)) {
-                CharsetEncoder retval = CompoundTextSupport.getEncoder(encoding);
-                initEncoder(retval);
-                return retval;
-            }
-        }
-
-        return null;
-    }
-
-    private void initEncoder(CharsetEncoder enc) {
-        try {
-            enc.onUnmappableCharacter(CodingErrorAction.REPLACE)
-                .replaceWith(replacement());
-        } catch (IllegalArgumentException x) {}
-    }
-
-    private CharBuffer fcb= CharBuffer.allocate(0);
-    private CoderResult flushEncoder(CharsetEncoder enc, ByteBuffer bb) {
-        enc.encode(fcb, bb, true);
-        return enc.flush(bb);
-    }
-}
--- a/jdk/src/jdk.charsets/unix/classes/sun/nio/cs/ext/CompoundTextSupport.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,548 +0,0 @@
-/*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.nio.cs.ext;
-
-import java.util.Collections;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.nio.charset.*;
-
-final class CompoundTextSupport {
-
-    private static final class ControlSequence {
-
-        final int hash;
-        final byte[] escSequence;
-        final byte[] encoding;
-
-        ControlSequence(byte[] escSequence) {
-            this(escSequence, null);
-        }
-        ControlSequence(byte[] escSequence, byte[] encoding) {
-            if (escSequence == null) {
-                throw new NullPointerException();
-            }
-
-            this.escSequence = escSequence;
-            this.encoding = encoding;
-
-            int hash = 0;
-            int length = escSequence.length;
-
-            for (int i = 0; i < escSequence.length; i++) {
-                hash += (((int)escSequence[i]) & 0xff) << (i % 4);
-            }
-            if (encoding != null) {
-                for (int i = 0; i < encoding.length; i++) {
-                    hash += (((int)encoding[i]) & 0xff) << (i % 4);
-                }
-                length += 2 /* M L */ + encoding.length + 1 /* 0x02 */;
-            }
-
-            this.hash = hash;
-
-            if (MAX_CONTROL_SEQUENCE_LEN < length) {
-                MAX_CONTROL_SEQUENCE_LEN = length;
-            }
-        }
-
-        public boolean equals(Object obj) {
-            if (this == obj) {
-                return true;
-            }
-            if (!(obj instanceof ControlSequence)) {
-                return false;
-            }
-            ControlSequence rhs = (ControlSequence)obj;
-            if (escSequence != rhs.escSequence) {
-                if (escSequence.length != rhs.escSequence.length) {
-                    return false;
-                }
-                for (int i = 0; i < escSequence.length; i++) {
-                    if (escSequence[i] != rhs.escSequence[i]) {
-                        return false;
-                    }
-                }
-            }
-            if (encoding != rhs.encoding) {
-                if (encoding == null || rhs.encoding == null ||
-                    encoding.length != rhs.encoding.length)
-                {
-                    return false;
-                }
-                for (int i = 0; i < encoding.length; i++) {
-                    if (encoding[i] != rhs.encoding[i]) {
-                        return false;
-                    }
-                }
-            }
-            return true;
-        }
-
-        public int hashCode() {
-            return hash;
-        }
-
-        ControlSequence concatenate(ControlSequence rhs) {
-            if (encoding != null) {
-                throw new IllegalArgumentException
-                    ("cannot concatenate to a non-standard charset escape " +
-                     "sequence");
-            }
-
-            int len = escSequence.length + rhs.escSequence.length;
-            byte[] newEscSequence = new byte[len];
-            System.arraycopy(escSequence, 0, newEscSequence, 0,
-                             escSequence.length);
-            System.arraycopy(rhs.escSequence, 0, newEscSequence,
-                             escSequence.length, rhs.escSequence.length);
-            return new ControlSequence(newEscSequence, rhs.encoding);
-        }
-    }
-
-    static int MAX_CONTROL_SEQUENCE_LEN;
-
-    /**
-     * Maps a GL or GR escape sequence to an encoding.
-     */
-    private static final Map<ControlSequence, String> sequenceToEncodingMap;
-
-    /**
-     * Indicates whether a particular encoding wants the high bit turned on
-     * or off.
-     */
-    private static final Map<ControlSequence, Boolean> highBitsMap;
-
-    /**
-     * Maps an encoding to an escape sequence. Rather than manage two
-     * converters in CharToByteCOMPOUND_TEXT, we output escape sequences which
-     * modify both GL and GR if necessary. This makes the output slightly less
-     * efficient, but our code much simpler.
-     */
-    private static final Map<String, ControlSequence> encodingToSequenceMap;
-
-    /**
-     * The keys of 'encodingToSequenceMap', sorted in preferential order.
-     */
-    private static final List<String> encodings;
-
-    static {
-        HashMap<ControlSequence, String> tSequenceToEncodingMap =
-            new HashMap<>(33, 1.0f);
-        HashMap<ControlSequence, Boolean> tHighBitsMap =
-            new HashMap<>(31, 1.0f);
-        HashMap<String, ControlSequence> tEncodingToSequenceMap =
-            new HashMap<>(21, 1.0f);
-        ArrayList<String> tEncodings = new ArrayList<>(21);
-
-        if (!(isEncodingSupported("US-ASCII") &&
-              isEncodingSupported("ISO-8859-1")))
-        {
-            throw new ExceptionInInitializerError
-                ("US-ASCII and ISO-8859-1 unsupported");
-        }
-
-        ControlSequence leftAscii = // high bit off, leave off
-            new ControlSequence(new byte[] { 0x1B, 0x28, 0x42 });
-        tSequenceToEncodingMap.put(leftAscii, "US-ASCII");
-        tHighBitsMap.put(leftAscii, Boolean.FALSE);
-
-        {
-            ControlSequence rightAscii = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x29, 0x42 });
-            tSequenceToEncodingMap.put(rightAscii, "US-ASCII");
-            tHighBitsMap.put(rightAscii, Boolean.FALSE);
-        }
-
-        {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x41 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-1");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-1", fullSet);
-            tEncodings.add("ISO-8859-1");
-        }
-        if (isEncodingSupported("ISO-8859-2")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x42 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-2");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-2", fullSet);
-            tEncodings.add("ISO-8859-2");
-        }
-        if (isEncodingSupported("ISO-8859-3")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x43 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-3");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-3", fullSet);
-            tEncodings.add("ISO-8859-3");
-        }
-        if (isEncodingSupported("ISO-8859-4")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x44 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-4");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-4", fullSet);
-            tEncodings.add("ISO-8859-4");
-        }
-        if (isEncodingSupported("ISO-8859-5")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x4C });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-5");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-5", fullSet);
-            tEncodings.add("ISO-8859-5");
-        }
-        if (isEncodingSupported("ISO-8859-6")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x47 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-6");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-6", fullSet);
-            tEncodings.add("ISO-8859-6");
-        }
-        if (isEncodingSupported("ISO-8859-7")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x46 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-7");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-7", fullSet);
-            tEncodings.add("ISO-8859-7");
-        }
-        if (isEncodingSupported("ISO-8859-8")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x48 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-8");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-8", fullSet);
-            tEncodings.add("ISO-8859-8");
-        }
-        if (isEncodingSupported("ISO-8859-9")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x4D });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-9");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-9", fullSet);
-            tEncodings.add("ISO-8859-9");
-        }
-        if (isEncodingSupported("JIS_X0201")) {
-            ControlSequence glLeft = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x28, 0x4A });
-            ControlSequence glRight = // high bit off, turn on
-                new ControlSequence(new byte[] { 0x1B, 0x28, 0x49 });
-            ControlSequence grLeft = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x29, 0x4A });
-            ControlSequence grRight = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x29, 0x49 });
-            tSequenceToEncodingMap.put(glLeft, "JIS_X0201");
-            tSequenceToEncodingMap.put(glRight, "JIS_X0201");
-            tSequenceToEncodingMap.put(grLeft, "JIS_X0201");
-            tSequenceToEncodingMap.put(grRight, "JIS_X0201");
-            tHighBitsMap.put(glLeft, Boolean.FALSE);
-            tHighBitsMap.put(glRight, Boolean.TRUE);
-            tHighBitsMap.put(grLeft, Boolean.FALSE);
-            tHighBitsMap.put(grRight, Boolean.TRUE);
-
-            ControlSequence fullSet = glLeft.concatenate(grRight);
-            tEncodingToSequenceMap.put("JIS_X0201", fullSet);
-            tEncodings.add("JIS_X0201");
-        }
-        if (isEncodingSupported("X11GB2312")) {
-            ControlSequence leftHalf =  // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x41 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x41 });
-            tSequenceToEncodingMap.put(leftHalf, "X11GB2312");
-            tSequenceToEncodingMap.put(rightHalf, "X11GB2312");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("X11GB2312", leftHalf);
-            tEncodings.add("X11GB2312");
-        }
-        if (isEncodingSupported("x-JIS0208")) {
-            ControlSequence leftHalf = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x42 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x42 });
-            tSequenceToEncodingMap.put(leftHalf, "x-JIS0208");
-            tSequenceToEncodingMap.put(rightHalf, "x-JIS0208");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("x-JIS0208", leftHalf);
-            tEncodings.add("x-JIS0208");
-        }
-        if (isEncodingSupported("X11KSC5601")) {
-            ControlSequence leftHalf = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x43 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x43 });
-            tSequenceToEncodingMap.put(leftHalf, "X11KSC5601");
-            tSequenceToEncodingMap.put(rightHalf, "X11KSC5601");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("X11KSC5601", leftHalf);
-            tEncodings.add("X11KSC5601");
-        }
-
-        // Encodings not listed in Compound Text Encoding spec
-
-        // Esc seq: -b
-        if (isEncodingSupported("ISO-8859-15")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x62 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-15");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-15", fullSet);
-            tEncodings.add("ISO-8859-15");
-        }
-        // Esc seq: -T
-        if (isEncodingSupported("TIS-620")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x54 });
-            tSequenceToEncodingMap.put(rightHalf, "TIS-620");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("TIS-620", fullSet);
-            tEncodings.add("TIS-620");
-        }
-        if (isEncodingSupported("JIS_X0212-1990")) {
-            ControlSequence leftHalf = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x44 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x44 });
-            tSequenceToEncodingMap.put(leftHalf, "JIS_X0212-1990");
-            tSequenceToEncodingMap.put(rightHalf, "JIS_X0212-1990");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("JIS_X0212-1990", leftHalf);
-            tEncodings.add("JIS_X0212-1990");
-        }
-        if (isEncodingSupported("X11CNS11643P1")) {
-            ControlSequence leftHalf = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x47 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x47 });
-            tSequenceToEncodingMap.put(leftHalf, "X11CNS11643P1");
-            tSequenceToEncodingMap.put(rightHalf, "X11CNS11643P1");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("X11CNS11643P1", leftHalf);
-            tEncodings.add("X11CNS11643P1");
-        }
-        if (isEncodingSupported("X11CNS11643P2")) {
-            ControlSequence leftHalf = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x48 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x48 });
-            tSequenceToEncodingMap.put(leftHalf, "X11CNS11643P2");
-            tSequenceToEncodingMap.put(rightHalf, "X11CNS11643P2");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("X11CNS11643P2", leftHalf);
-            tEncodings.add("X11CNS11643P2");
-        }
-        if (isEncodingSupported("X11CNS11643P3")) {
-            ControlSequence leftHalf = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x49 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x49 });
-            tSequenceToEncodingMap.put(leftHalf, "X11CNS11643P3");
-            tSequenceToEncodingMap.put(rightHalf, "X11CNS11643P3");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("X11CNS11643P3", leftHalf);
-            tEncodings.add("X11CNS11643P3");
-        }
-        // Esc seq: %/2??SUN-KSC5601.1992-3
-        if (isEncodingSupported("x-Johab")) {
-            // 0x32 looks wrong. It's copied from the Sun X11 Compound Text
-            // support code. It implies that all Johab characters comprise two
-            // octets, which isn't true. Johab supports the ASCII/KS-Roman
-            // characters from 0x21-0x7E with single-byte representations.
-            ControlSequence johab = new ControlSequence(
-                new byte[] { 0x1b, 0x25, 0x2f, 0x32 },
-                new byte[] { 0x53, 0x55, 0x4e, 0x2d, 0x4b, 0x53, 0x43, 0x35,
-                             0x36, 0x30, 0x31, 0x2e, 0x31, 0x39, 0x39, 0x32,
-                             0x2d, 0x33 });
-            tSequenceToEncodingMap.put(johab, "x-Johab");
-            tEncodingToSequenceMap.put("x-Johab", johab);
-            tEncodings.add("x-Johab");
-        }
-        // Esc seq: %/2??SUN-BIG5-1
-        if (isEncodingSupported("Big5")) {
-            // 0x32 looks wrong. It's copied from the Sun X11 Compound Text
-            // support code. It implies that all Big5 characters comprise two
-            // octets, which isn't true. Big5 supports the ASCII/CNS-Roman
-            // characters from 0x21-0x7E with single-byte representations.
-            ControlSequence big5 = new ControlSequence(
-                new byte[] { 0x1b, 0x25, 0x2f, 0x32 },
-                new byte[] { 0x53, 0x55, 0x4e, 0x2d, 0x42, 0x49, 0x47, 0x35,
-                             0x2d, 0x31 });
-            tSequenceToEncodingMap.put(big5, "Big5");
-            tEncodingToSequenceMap.put("Big5", big5);
-            tEncodings.add("Big5");
-        }
-
-        sequenceToEncodingMap =
-            Collections.unmodifiableMap(tSequenceToEncodingMap);
-        highBitsMap = Collections.unmodifiableMap(tHighBitsMap);
-        encodingToSequenceMap =
-            Collections.unmodifiableMap(tEncodingToSequenceMap);
-        encodings = Collections.unmodifiableList(tEncodings);
-    }
-
-    private static boolean isEncodingSupported(String encoding) {
-        try {
-            if (Charset.isSupported(encoding))
-                return true;
-        } catch (IllegalArgumentException x) { }
-        return (getDecoder(encoding) != null &&
-                getEncoder(encoding) != null);
-    }
-
-
-    // For Decoder
-    static CharsetDecoder getStandardDecoder(byte[] escSequence) {
-        return getNonStandardDecoder(escSequence, null);
-    }
-    static boolean getHighBit(byte[] escSequence) {
-        Boolean bool = highBitsMap.get(new ControlSequence(escSequence));
-        return (bool == Boolean.TRUE);
-    }
-    static CharsetDecoder getNonStandardDecoder(byte[] escSequence,
-                                                       byte[] encoding) {
-        return getDecoder(sequenceToEncodingMap.get
-            (new ControlSequence(escSequence, encoding)));
-    }
-    static CharsetDecoder getDecoder(String enc) {
-        if (enc == null) {
-            return null;
-        }
-        Charset cs = null;
-        try {
-            cs = Charset.forName(enc);
-        } catch (IllegalArgumentException e) {
-            Class<?> cls;
-            try {
-                cls = Class.forName("sun.awt.motif." + enc);
-            } catch (ClassNotFoundException ee) {
-                return null;
-            }
-            try {
-                cs = (Charset)cls.newInstance();
-            } catch (InstantiationException ee) {
-                return null;
-            } catch (IllegalAccessException ee) {
-                return null;
-            }
-        }
-        try {
-            return cs.newDecoder();
-        } catch (UnsupportedOperationException e) {}
-        return null;
-    }
-
-
-    // For Encoder
-    static byte[] getEscapeSequence(String encoding) {
-        ControlSequence seq = encodingToSequenceMap.get(encoding);
-        if (seq != null) {
-            return seq.escSequence;
-        }
-        return null;
-    }
-    static byte[] getEncoding(String encoding) {
-        ControlSequence seq = encodingToSequenceMap.get(encoding);
-        if (seq != null) {
-            return seq.encoding;
-        }
-        return null;
-    }
-    static List<String> getEncodings() {
-        return encodings;
-    }
-    static CharsetEncoder getEncoder(String enc) {
-        if (enc == null) {
-            return null;
-        }
-        Charset cs = null;
-        try {
-            cs = Charset.forName(enc);
-        } catch (IllegalArgumentException e) {
-            Class<?> cls;
-            try {
-                cls = Class.forName("sun.awt.motif." + enc);
-            } catch (ClassNotFoundException ee) {
-                return null;
-            }
-            try {
-                cs = (Charset)cls.newInstance();
-            } catch (InstantiationException ee) {
-                return null;
-            } catch (IllegalAccessException ee) {
-                return null;
-            }
-        }
-        try {
-            return cs.newEncoder();
-        } catch (Throwable e) {}
-        return null;
-    }
-
-    // Not an instantiable class
-    private CompoundTextSupport() {}
-}
--- a/jdk/test/ProblemList.txt	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/ProblemList.txt	Wed Jul 05 20:33:55 2017 +0200
@@ -225,12 +225,6 @@
 # 8058849
 sun/security/krb5/config/dns.sh                                 generic-all
 
-# 6988842: 4 tests failing on Solaris 5.10
-sun/security/pkcs11/Secmod/AddPrivateKey.java                   solaris-all
-sun/security/pkcs11/ec/ReadCertificates.java                    solaris-all
-sun/security/pkcs11/ec/ReadPKCS12.java                          solaris-all
-sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java            solaris-all
-
 # 7041639: Solaris DSA keypair generation bug
 java/security/KeyPairGenerator/SolarisShortDSA.java             solaris-all
 sun/security/tools/keytool/standard.sh                          solaris-all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/BasicStroke/DashStrokeTest.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ * @test
+ * @bug 8075942
+ * @summary test there is no exception rendering a dashed stroke
+ * @run DashStrokeTest
+ * @run -Dsun.java2d.renderer=sun.java2d.pisces.PiscesRenderingEngine
+ */
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Stroke;
+import java.awt.geom.GeneralPath;
+import java.awt.image.BufferedImage;
+
+
+public class DashStrokeTest {
+
+    public static void main(String[] args) {
+
+        GeneralPath shape = new GeneralPath();
+        int[] pointTypes = {0, 0, 1, 1, 0, 1, 1, 0};
+        double[] xpoints = {428, 420, 400, 400, 400, 400, 420, 733};
+        double[] ypoints = {180, 180, 180, 160, 30, 10, 10, 10};
+        shape.moveTo(xpoints[0], ypoints[0]);
+        for (int i = 1; i < pointTypes.length; i++) {
+            if (pointTypes[i] == 1 && i < pointTypes.length - 1) {
+                shape.quadTo(xpoints[i], ypoints[i],
+                             xpoints[i + 1], ypoints[i + 1]);
+            } else {
+                shape.lineTo(xpoints[i], ypoints[i]);
+            }
+        }
+
+        BufferedImage image = new
+            BufferedImage(1000, 1000, BufferedImage.TYPE_INT_ARGB);
+        Graphics2D g2 = image.createGraphics();
+
+        Color color = new Color(124, 0, 124, 255);
+        g2.setColor(color);
+        Stroke stroke = new BasicStroke(1.0f,
+                                        BasicStroke.CAP_BUTT,
+                                        BasicStroke.JOIN_BEVEL,
+                                        10.0f, new float[] {9, 6}, 0.0f);
+        g2.setStroke(stroke);
+        g2.draw(shape);
+    }
+}
--- a/jdk/test/java/awt/Component/Headless/HeadlessComponent.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Component/Headless/HeadlessComponent.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -52,7 +52,6 @@
         comp.getName();
         comp.setName("goober");
         comp.getParent();
-        comp.getPeer();
         comp.getGraphicsConfiguration();
         comp.getTreeLock();
         comp.getToolkit();
--- a/jdk/test/java/awt/Component/Headless/HeadlessContainer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Component/Headless/HeadlessContainer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -87,7 +87,6 @@
         lw.setName("goober");
         lw.getName();
         lw.getParent();
-        lw.getPeer();
         lw.getGraphicsConfiguration();
         lw.getTreeLock();
         lw.getToolkit();
--- a/jdk/test/java/awt/Component/Headless/HeadlessPanel.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Component/Headless/HeadlessPanel.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -76,7 +76,6 @@
         p.setName("goober");
         p.getName();
         p.getParent();
-        p.getPeer();
         p.getGraphicsConfiguration();
         p.getTreeLock();
         p.getToolkit();
--- a/jdk/test/java/awt/Component/isLightweightCrash/StubPeerCrash.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,188 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
-  @test
-  @bug 6255653
-  @summary REGRESSION: Override isLightweight() causes access violation in awt.dll
-  @author Andrei Dmitriev: area=awt-component
-  @run main StubPeerCrash
-*/
-
-/*
- * The test may not crash for several times so iteratively continue up to some limit.
- */
-
-import java.awt.*;
-import java.awt.peer.*;
-import java.awt.event.PaintEvent;
-import java.awt.image.ImageProducer;
-import java.awt.image.ImageObserver;
-import java.awt.image.ColorModel;
-import java.awt.image.VolatileImage;
-import java.awt.GraphicsConfiguration;
-import sun.awt.CausedFocusEvent;
-import sun.java2d.pipe.Region;
-
-public class StubPeerCrash {
-    public static int ITERATIONS = 20;
-
-    public static void main(String []s)
-    {
-        for (int i = 0; i < ITERATIONS; i++){
-            showFrame(i);
-        }
-    }
-
-    private static void showFrame(int i){
-        System.out.println("iteration = "+i);
-        Frame f = new Frame();
-        f.add(new AHeavyweightComponent());
-        f.setVisible(true);
-        f.setVisible(false);
-    }
-}
-
-class AHeavyweightComponent extends Component {
-    private ComponentPeer peer = new StubComponentPeer();
-
-    public AHeavyweightComponent(){
-    }
-
-    public boolean isLightweight() {
-        return false;
-    }
-
-    public ComponentPeer getPeer(){
-        return peer;
-    }
-}
-
-class StubComponentPeer implements ComponentPeer {
-    public boolean isObscured(){return true;};
-    public boolean canDetermineObscurity(){return true;};
-    public void                setVisible(boolean b){};
-    public void                setEnabled(boolean b){};
-    public void                paint(Graphics g){};
-    public void                repaint(long tm, int x, int y, int width, int height){};
-    public void                print(Graphics g){};
-    public void                setBounds(int x, int y, int width, int height, int op){};
-    public void                handleEvent(AWTEvent e){};
-    public void                coalescePaintEvent(PaintEvent e){};
-    public Point               getLocationOnScreen(){return null;};
-    public Dimension           getPreferredSize(){return null;};
-    public Dimension           getMinimumSize(){return null;};
-    public ColorModel          getColorModel(){return null;};
-    public Toolkit             getToolkit(){return null;};
-    public Graphics            getGraphics(){return null;};
-    public FontMetrics         getFontMetrics(Font font){return null;};
-    public void                dispose(){};
-    public void                setForeground(Color c){};
-    public void                setBackground(Color c){};
-    public void                setFont(Font f){};
-    public void                updateCursorImmediately(){};
-    public boolean             requestFocus(Component lightweightChild,
-                                     boolean temporary,
-                                     boolean focusedWindowChangeAllowed,
-                                     long time, CausedFocusEvent.Cause cause){
-        return true;
-    };
-    public boolean             isFocusable(){return true;};
-
-    public Image               createImage(ImageProducer producer){return null;};
-    public Image               createImage(int width, int height){return null;};
-    public VolatileImage       createVolatileImage(int width, int height){return null;};
-    public boolean             prepareImage(Image img, int w, int h, ImageObserver o){return true;};
-    public int                 checkImage(Image img, int w, int h, ImageObserver o){return 0;};
-    public GraphicsConfiguration getGraphicsConfiguration(){return null;};
-    public boolean     handlesWheelScrolling(){return true;};
-    public void createBuffers(int numBuffers, BufferCapabilities caps) throws AWTException{};
-    public Image getBackBuffer(){return null;};
-    public void flip(int x1, int y1, int x2, int y2, BufferCapabilities.FlipContents flipAction){};
-    public void destroyBuffers(){};
-
-    /**
-     * Reparents this peer to the new parent referenced by <code>newContainer</code> peer
-     * Implementation depends on toolkit and container.
-     * @param newContainer peer of the new parent container
-     * @since 1.5
-     */
-    public void reparent(ContainerPeer newContainer){};
-    /**
-     * Returns whether this peer supports reparenting to another parent withour destroying the peer
-     * @return true if appropriate reparent is supported, false otherwise
-     * @since 1.5
-     */
-    public boolean isReparentSupported(){return true;};
-
-    /**
-     * Used by lightweight implementations to tell a ComponentPeer to layout
-     * its sub-elements.  For instance, a lightweight Checkbox needs to layout
-     * the box, as well as the text label.
-     */
-    public void        layout(){};
-
-
-     public    Rectangle getBounds(){return null;};
-
-    /**
-     * Applies the shape to the native component window.
-     * @since 1.7
-     */
-    public void applyShape(Region shape){};
-
-    /**
-     * DEPRECATED:  Replaced by getPreferredSize().
-     */
-    public Dimension           preferredSize(){return null;};
-
-    /**
-     * DEPRECATED:  Replaced by getMinimumSize().
-     */
-    public Dimension           minimumSize(){return null;};
-
-    /**
-     * DEPRECATED:  Replaced by setVisible(boolean).
-     */
-    public void                show(){};
-
-    /**
-     * DEPRECATED:  Replaced by setVisible(boolean).
-     */
-    public void                hide(){};
-
-    /**
-     * DEPRECATED:  Replaced by setEnabled(boolean).
-     */
-    public void                enable(){};
-
-    /**
-     * DEPRECATED:  Replaced by setEnabled(boolean).
-     */
-    public void                disable(){};
-
-    /**
-     * DEPRECATED:  Replaced by setBounds(int, int, int, int).
-     */
-    public void                reshape(int x, int y, int width, int height){};
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Focus/8073453/AWTFocusTransitionTest.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 8073453
+ * @summary Focus doesn't move when pressing Shift + Tab keys
+ * @author Dmitry Markov
+ * @compile AWTFocusTransitionTest.java
+ * @run main/othervm AWTFocusTransitionTest
+ */
+import sun.awt.SunToolkit;
+
+import java.awt.*;
+import java.awt.event.KeyEvent;
+
+public class AWTFocusTransitionTest {
+    private static SunToolkit toolkit;
+    private static Robot robot;
+
+    private static Frame frame;
+    private static TextField textField;
+    private static Button button;
+
+    public static void main(String[] args) throws Exception {
+        toolkit = (SunToolkit)Toolkit.getDefaultToolkit();
+        robot = new Robot();
+        robot.setAutoDelay(50);
+
+        try {
+            createAndShowGUI();
+
+            toolkit.realSync();
+
+            checkFocusOwner(textField);
+
+            robot.keyPress(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_TAB);
+            toolkit.realSync();
+
+            checkFocusOwner(button);
+
+            robot.keyPress(KeyEvent.VK_SHIFT);
+            robot.keyPress(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_SHIFT);
+            toolkit.realSync();
+
+            checkFocusOwner(textField);
+
+            robot.keyPress(KeyEvent.VK_SHIFT);
+            robot.keyPress(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_SHIFT);
+            toolkit.realSync();
+
+            checkFocusOwner(button);
+        } finally {
+            if (frame != null) {
+                frame.dispose();
+            }
+        }
+        System.out.println("Test Passed!");
+    }
+
+    private static void createAndShowGUI() {
+        frame = new Frame("AWTFocusTransitionTest");
+        frame.setSize(300, 300);
+        frame.setFocusTraversalPolicyProvider(true);
+        frame.setFocusTraversalPolicy(new DefaultFocusTraversalPolicy());
+
+        textField = new TextField();
+        button = new Button();
+
+        Panel panel = new Panel();
+        panel.setFocusTraversalPolicyProvider(true);
+        panel.setFocusTraversalPolicy(new DefaultFocusTraversalPolicy());
+
+        Panel p = new Panel();
+        p.setLayout(new GridLayout(3, 1));
+        p.add(textField);
+        p.add(button);
+        p.add(panel);
+
+        frame.add(p);
+        frame.setVisible(true);
+    }
+
+    private static void checkFocusOwner(Component component) {
+        if (component != frame.getFocusOwner()) {
+            throw new RuntimeException("Test Failed! Incorrect focus owner: " + frame.getFocusOwner() +
+                    ", but expected: " + component);
+        }
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Focus/8073453/SwingFocusTransitionTest.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 8073453
+ * @summary Focus doesn't move when pressing Shift + Tab keys
+ * @author Dmitry Markov
+ * @compile SwingFocusTransitionTest.java
+ * @run main/othervm SwingFocusTransitionTest
+ */
+import sun.awt.SunToolkit;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.KeyEvent;
+
+public class SwingFocusTransitionTest {
+    private static SunToolkit toolkit;
+    private static Robot robot;
+
+    private static JFrame frame;
+    private static JTextField textField;
+    private static JButton button;
+
+    public static void main(String[] args) throws Exception {
+        toolkit = (SunToolkit)Toolkit.getDefaultToolkit();
+        robot = new Robot();
+        robot.setAutoDelay(50);
+
+        try {
+            SwingUtilities.invokeAndWait(new Runnable() {
+                @Override
+                public void run() {
+                    createAndShowGUI();
+                }
+            });
+
+            toolkit.realSync();
+
+            checkFocusOwner(textField);
+
+            robot.keyPress(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_TAB);
+            toolkit.realSync();
+
+            checkFocusOwner(button);
+
+            robot.keyPress(KeyEvent.VK_SHIFT);
+            robot.keyPress(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_SHIFT);
+            toolkit.realSync();
+
+            checkFocusOwner(textField);
+
+            robot.keyPress(KeyEvent.VK_SHIFT);
+            robot.keyPress(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_SHIFT);
+            toolkit.realSync();
+
+            checkFocusOwner(button);
+        } finally {
+            SwingUtilities.invokeLater(new Runnable() {
+                @Override
+                public void run() {
+                    if (frame != null) {
+                        frame.dispose();
+                    }
+                }
+            });
+        }
+        System.out.println("Test Passed!");
+    }
+
+    private static void createAndShowGUI() {
+        frame = new JFrame("SwingFocusTransitionTest");
+        frame.setSize(300, 300);
+        frame.setFocusTraversalPolicyProvider(true);
+        frame.setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());
+
+        textField = new JTextField();
+        button = new JButton();
+
+        JPanel panel = new JPanel();
+        panel.setFocusTraversalPolicyProvider(true);
+        panel.setFocusTraversalPolicy(new DefaultFocusTraversalPolicy());
+
+        JPanel p = new JPanel();
+        p.setLayout(new GridLayout(3, 1));
+        p.add(textField);
+        p.add(button);
+        p.add(panel);
+
+        frame.add(p);
+        frame.setVisible(true);
+    }
+
+    private static void checkFocusOwner(final Component component) throws Exception {
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                if (component != frame.getFocusOwner()) {
+                    throw new RuntimeException("Test Failed! Incorrect focus owner: " + frame.getFocusOwner() +
+                            ", but expected: " + component);
+                }
+            }
+        });
+    }
+}
+
--- a/jdk/test/java/awt/FontClass/CreateFont/fileaccess/FontFile.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/FontClass/CreateFont/fileaccess/FontFile.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,6 +25,16 @@
  * @test
  * @bug 6652929
  * @summary verify handling of File.getPath()
+ * @compile FontFile.java
+ * @run shell TestFontFile.sh
+ */
+
+/*
+ * When using jtreg this test needs to be run by shell script,
+ * since otherwise jtreg reflectively invokes the main method
+ * and the codebase for the purposes of the security manager
+ * is that of the jtreg harness, not the codebase (class file location)
+ * of this program, thus access to read to that location is not available.
  */
 
 import java.awt.*;
@@ -34,10 +44,21 @@
     public static void main(String[] args) throws Exception {
         String sep = System.getProperty("file.separator");
         String fname = ".." + sep + "A.ttf";
-        String dir = System.getProperty("test.src");
+        //String dir = System.getProperty("test.src");
+        String dir = System.getenv("TESTSRC");
         if (dir != null) {
             fname = dir + sep + fname;
         }
+        //String classesDir = System.getProperty("test.classes");
+        String classesDir = System.getenv("TESTCLASSES");
+        System.out.println("classesDir="+classesDir);
+        String testfile = "somefile";
+        if (classesDir != null) {
+            testfile = classesDir + sep + testfile;
+        }
+        final String somefile = testfile;
+        System.out.println("somefile="+somefile);
+        System.out.println("userdir="+System.getProperty("user.dir"));
         final String name = fname;
         System.out.println("Will try to access " + name);
         if (!(new File(name)).canRead()) {
@@ -66,7 +87,7 @@
                             return name;
                         } else {
                             read = true;
-                            return "somefile";
+                            return somefile;
                         }
                     }
                     @Override public boolean canRead() {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/FontClass/CreateFont/fileaccess/TestFontFile.sh	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,84 @@
+#
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+#!/bin/sh
+
+if [ "${TESTSRC}" = "" ]
+then TESTSRC=.
+fi
+
+if [ "${TESTJAVA}" = "" ]
+then
+  PARENT=`dirname \`which java\``
+  TESTJAVA=`dirname ${PARENT}`
+  echo "TESTJAVA not set, selecting " ${TESTJAVA}
+  echo "If this is incorrect, try setting the variable manually."
+fi
+
+if [ "${TESTCLASSES}" = "" ]
+then
+  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
+  exit 1
+fi
+
+BIT_FLAG=""
+
+# set platform-dependent variables
+OS=`uname -s`
+case "$OS" in
+  SunOS | Linux | Darwin )
+    NULL=/dev/null
+    PS=":"
+    FS="/"
+    ## for solaris, linux it's HOME
+    FILE_LOCATION=$HOME
+    if [ -f ${FILE_LOCATION}${FS}JDK64BIT -a ${OS} = "SunOS" ]
+    then
+        BIT_FLAG=`cat ${FILE_LOCATION}${FS}JDK64BIT`
+    fi
+    ;;
+  Windows_* | CYGWIN* )
+    NULL=NUL
+    PS=";"
+    FS="\\"
+    ;;
+  * )
+    echo "Unrecognized system!"
+    exit 1;
+    ;;
+esac
+
+JEMMYPATH=${CPAPPEND}
+CLASSPATH=.${PS}${TESTCLASSES}${PS}${JEMMYPATH} ; export CLASSPATH
+
+THIS_DIR=`pwd`
+
+${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} -version
+
+${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} FontFile > test.out 2>&1
+
+STATUS=$?
+
+cat test.out
+
+exit $STATUS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/FontClass/DebugFonts.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4956241 80769790
+ * @summary NPE debugging fonts
+ * @run main/othervm DebugFonts
+ */
+
+import java.awt.Font;
+
+public class DebugFonts {
+
+   public static void main(String [] args) {
+      System.setProperty("sun.java2d.debugfonts", "true");
+      Font font = new Font("dialog", Font.PLAIN, 14);
+      System.out.println(font);
+      String s1 = font.getFamily();
+      String s2 = font.getFontName();
+   }
+}
--- a/jdk/test/java/awt/FontClass/HeadlessFont.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/FontClass/HeadlessFont.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -224,11 +224,6 @@
                 f2.hasUniformLineMetrics();
                 f3.hasUniformLineMetrics();
                 f4.hasUniformLineMetrics();
-
-                f1.getPeer();
-                f2.getPeer();
-                f3.getPeer();
-                f4.getPeer();
             }
         }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Graphics2D/ScaledTransform/ScaledTransform.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.awt.Dialog;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsDevice;
+import java.awt.GraphicsEnvironment;
+import java.awt.Panel;
+import java.awt.geom.AffineTransform;
+
+/*
+ * @test
+ * @bug 8069361
+ * @summary SunGraphics2D.getDefaultTransform() does not include scale factor
+ * @author Alexander Scherbatiy
+ * @run main ScaledTransform
+ */
+public class ScaledTransform {
+
+    private static volatile boolean passed = false;
+
+    public static void main(String[] args) {
+        GraphicsEnvironment ge = GraphicsEnvironment.
+                getLocalGraphicsEnvironment();
+
+        if (ge.isHeadlessInstance()) {
+            return;
+        }
+
+        for (GraphicsDevice gd : ge.getScreenDevices()) {
+            for (GraphicsConfiguration gc : gd.getConfigurations()) {
+                testScaleFactor(gc);
+            }
+        }
+    }
+
+    private static void testScaleFactor(final GraphicsConfiguration gc) {
+        final Dialog dialog = new Dialog((Frame) null, "Test", true, gc);
+
+        try {
+            dialog.setSize(100, 100);
+            Panel panel = new Panel() {
+
+                @Override
+                public void paint(Graphics g) {
+                    if (g instanceof Graphics2D) {
+                        AffineTransform gcTx = gc.getDefaultTransform();
+                        AffineTransform gTx
+                                = ((Graphics2D) g).getTransform();
+                        passed = gcTx.getScaleX() == gTx.getScaleX()
+                                && gcTx.getScaleY() == gTx.getScaleY();
+                    } else {
+                        passed = true;
+                    }
+                    dialog.setVisible(false);
+                }
+            };
+            dialog.add(panel);
+            dialog.setVisible(true);
+
+            if (!passed) {
+                throw new RuntimeException("Transform is not scaled!");
+            }
+        } finally {
+            dialog.dispose();
+        }
+    }
+}
--- a/jdk/test/java/awt/Mixing/AWT_Mixing/OverlappingTestBase.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Mixing/AWT_Mixing/OverlappingTestBase.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,6 +29,8 @@
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import javax.swing.*;
+
+import sun.awt.AWTAccessor;
 import sun.awt.EmbeddedFrame;
 import java.io.*;
 import test.java.awt.regtesthelpers.Util;
@@ -243,8 +245,9 @@
                 if (Toolkit.getDefaultToolkit().getClass().getName().contains("XToolkit")) {
                     getWindowMethodName = "getWindow";
                 }
-                ComponentPeer peer = embedder.getPeer();
-//                System.err.println("Peer: " + peer);
+                ComponentPeer peer = AWTAccessor.getComponentAccessor()
+                                                .getPeer(embedder);
+                //  System.err.println("Peer: " + peer);
                 Method getWindowMethod = peer.getClass().getMethod(getWindowMethodName);
                 frameWindow = (Long) getWindowMethod.invoke(peer);
 //                System.err.println("frame peer ID: " + frameWindow);
--- a/jdk/test/java/awt/Paint/ButtonRepaint.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Paint/ButtonRepaint.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,6 @@
 
 
 import java.awt.*;
-import java.awt.peer.ButtonPeer;
 
 /**
  * @test
@@ -66,23 +65,16 @@
         setLabel("");
         setLabel(null);
         setLabel(getLabel());
-        ((ButtonPeer) getPeer()).setLabel("");
-        ((ButtonPeer) getPeer()).setLabel(null);
-        ((ButtonPeer) getPeer()).setLabel(getLabel());
 
         setFont(null);
         setFont(getFont());
-        getPeer().setFont(getFont());
 
         setBackground(null);
         setBackground(getBackground());
-        getPeer().setBackground(getBackground());
 
         setForeground(null);
         setForeground(getForeground());
-        getPeer().setForeground(getForeground());
 
         setEnabled(isEnabled());
-        getPeer().setEnabled(isEnabled());
     }
 }
--- a/jdk/test/java/awt/Paint/CheckboxRepaint.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Paint/CheckboxRepaint.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,6 @@
  */
 
 import java.awt.*;
-import java.awt.peer.CheckboxPeer;
 
 /**
  * @test
@@ -63,31 +62,21 @@
 
     void test() {
         setState(getState());
-        ((CheckboxPeer) getPeer()).setState(getState());
-
         setCheckboxGroup(getCheckboxGroup());
-        ((CheckboxPeer) getPeer()).setCheckboxGroup(getCheckboxGroup());
 
         setLabel("");
         setLabel(null);
         setLabel(getLabel());
-        ((CheckboxPeer) getPeer()).setLabel("");
-        ((CheckboxPeer) getPeer()).setLabel(null);
-        ((CheckboxPeer) getPeer()).setLabel(getLabel());
 
         setFont(null);
         setFont(getFont());
-        getPeer().setFont(getFont());
 
         setBackground(null);
         setBackground(getBackground());
-        getPeer().setBackground(getBackground());
 
         setForeground(null);
         setForeground(getForeground());
-        getPeer().setForeground(getForeground());
 
         setEnabled(isEnabled());
-        getPeer().setEnabled(isEnabled());
     }
 }
--- a/jdk/test/java/awt/Paint/LabelRepaint.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Paint/LabelRepaint.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,7 +25,6 @@
 import java.awt.Frame;
 import java.awt.Graphics;
 import java.awt.Label;
-import java.awt.peer.LabelPeer;
 
 /**
  * @test
@@ -66,28 +65,20 @@
 
     void test() {
         setAlignment(getAlignment());
-        ((LabelPeer) getPeer()).setAlignment(getAlignment());
 
         setText("");
         setText(null);
         setText(getText());
-        ((LabelPeer) getPeer()).setText("");
-        ((LabelPeer) getPeer()).setText(null);
-        ((LabelPeer) getPeer()).setText(getText());
 
         setFont(null);
         setFont(getFont());
-        getPeer().setFont(getFont());
 
         setBackground(null);
         setBackground(getBackground());
-        getPeer().setBackground(getBackground());
 
         setForeground(null);
         setForeground(getForeground());
-        getPeer().setForeground(getForeground());
 
         setEnabled(isEnabled());
-        getPeer().setEnabled(isEnabled());
     }
 }
--- a/jdk/test/java/awt/Paint/ListRepaint.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Paint/ListRepaint.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,7 +25,6 @@
 import java.awt.Frame;
 import java.awt.Graphics;
 import java.awt.List;
-import java.awt.peer.ListPeer;
 
 /**
  * @test
@@ -71,21 +70,16 @@
 
     void test() {
         select(0);
-        ((ListPeer) getPeer()).select(getSelectedIndex());
 
         setFont(null);
         setFont(getFont());
-        getPeer().setFont(getFont());
 
         setBackground(null);
         setBackground(getBackground());
-        getPeer().setBackground(getBackground());
 
         setForeground(null);
         setForeground(getForeground());
-        getPeer().setForeground(getForeground());
 
         setEnabled(isEnabled());
-        getPeer().setEnabled(isEnabled());
     }
 }
--- a/jdk/test/java/awt/SplashScreen/MultiResolutionSplash/MultiResolutionSplashTest.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/SplashScreen/MultiResolutionSplash/MultiResolutionSplashTest.java	Wed Jul 05 20:33:55 2017 +0200
@@ -40,7 +40,7 @@
 
 /**
  * @test
- * @bug 8043869 8075244
+ * @bug 8043869 8075244 8078082
  * @author Alexander Scherbatiy
  * @summary [macosx] java -splash does not honor 2x hi dpi notation for retina
  * support
@@ -115,6 +115,7 @@
         frame.setSize(100, 100);
         String test = "123";
         TextField textField = new TextField(test);
+        textField.selectAll();
         frame.add(textField);
         frame.setVisible(true);
         robot.waitForIdle();
--- a/jdk/test/java/awt/TextArea/TextAreaCaretVisibilityTest/bug7129742.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/TextArea/TextAreaCaretVisibilityTest/bug7129742.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -42,6 +42,9 @@
 import javax.swing.SwingUtilities;
 import javax.swing.text.DefaultCaret;
 
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
+
 
 public class bug7129742 {
 
@@ -64,7 +67,8 @@
                 frame.setVisible(true);
 
                 try {
-                    Class XTextAreaPeerClzz  = textArea.getPeer().getClass();
+                    ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+                    Class XTextAreaPeerClzz = acc.getPeer(textArea).getClass();
                     System.out.println(XTextAreaPeerClzz.getName());
                     if (!XTextAreaPeerClzz.getName().equals("sun.awt.X11.XTextAreaPeer")) {
                         fastreturn = true;
@@ -73,7 +77,7 @@
 
                     Field jtextField = XTextAreaPeerClzz.getDeclaredField("jtext");
                     jtextField.setAccessible(true);
-                    JTextArea jtext = (JTextArea)jtextField.get(textArea.getPeer());
+                    JTextArea jtext = (JTextArea)jtextField.get(acc.getPeer(textArea));
                     caret = (DefaultCaret) jtext.getCaret();
 
                     textArea.requestFocusInWindow();
--- a/jdk/test/java/awt/Toolkit/DynamicLayout/bug7172833.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Toolkit/DynamicLayout/bug7172833.java	Wed Jul 05 20:33:55 2017 +0200
@@ -23,16 +23,13 @@
 
 
 import java.awt.*;
+import java.awt.Frame;
 import java.awt.datatransfer.Clipboard;
-import java.awt.dnd.DragGestureEvent;
-import java.awt.dnd.InvalidDnDOperationException;
-import java.awt.dnd.peer.DragSourceContextPeer;
 import java.awt.font.TextAttribute;
 import java.awt.im.InputMethodHighlight;
 import java.awt.image.ColorModel;
 import java.awt.image.ImageObserver;
 import java.awt.image.ImageProducer;
-import java.awt.peer.*;
 import java.net.URL;
 import java.util.Map;
 import java.util.Properties;
@@ -67,130 +64,6 @@
             return super.isDynamicLayoutSet();
         }
 
-        @Override
-        protected DesktopPeer createDesktopPeer(final Desktop target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ButtonPeer createButton(final Button target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected TextFieldPeer createTextField(final TextField target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected LabelPeer createLabel(final Label target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ListPeer createList(final List target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected CheckboxPeer createCheckbox(final Checkbox target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ScrollbarPeer createScrollbar(final Scrollbar target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ScrollPanePeer createScrollPane(final ScrollPane target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected TextAreaPeer createTextArea(final TextArea target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ChoicePeer createChoice(final Choice target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected FramePeer createFrame(final Frame target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected CanvasPeer createCanvas(final Canvas target) {
-            return null;
-        }
-
-        @Override
-        protected PanelPeer createPanel(final Panel target) {
-            return null;
-        }
-
-        @Override
-        protected WindowPeer createWindow(final Window target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected DialogPeer createDialog(final Dialog target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected MenuBarPeer createMenuBar(final MenuBar target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected MenuPeer createMenu(final Menu target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected PopupMenuPeer createPopupMenu(final PopupMenu target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected MenuItemPeer createMenuItem(final MenuItem target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected FileDialogPeer createFileDialog(final FileDialog target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected CheckboxMenuItemPeer createCheckboxMenuItem(
-                final CheckboxMenuItem target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected FontPeer getFontPeer(final String name, final int style) {
-            return null;
-        }
 
         @Override
         public Dimension getScreenSize() throws HeadlessException {
@@ -288,12 +161,6 @@
         }
 
         @Override
-        public DragSourceContextPeer createDragSourceContextPeer(
-                final DragGestureEvent dge) throws InvalidDnDOperationException {
-            return null;
-        }
-
-        @Override
         public boolean isModalityTypeSupported(
                 final Dialog.ModalityType modalityType) {
             return false;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Toolkit/GetImage/bug8078165.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+import java.awt.*;
+import java.net.URL;
+import java.security.Permission;
+
+
+/**
+ * @test
+ * @bug 8078165
+ * @summary NPE when attempting to get image from toolkit
+ * @author Anton Nashatyrev
+ */
+public final class bug8078165 {
+
+    public static void main(final String[] args) throws Exception {
+        // Mac only
+        System.setSecurityManager(new SecurityManager() {
+            @Override
+            public void checkPermission(Permission permission) {
+                // Just allows everything
+            }
+        });
+        // The method shouldn't throw NPE
+        Toolkit.getDefaultToolkit().getImage(new URL("file://./dummyImage@2x.png"));
+        Toolkit.getDefaultToolkit().getImage("./dummyImage@2x.png");
+    }
+}
--- a/jdk/test/java/awt/Toolkit/Headless/ExceptionContract/ExceptionContract.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Toolkit/Headless/ExceptionContract/ExceptionContract.java	Wed Jul 05 20:33:55 2017 +0200
@@ -36,12 +36,9 @@
 import test.java.awt.regtesthelpers.Sysout;
 
 import java.awt.datatransfer.Clipboard;
-import java.awt.dnd.*;
-import java.awt.dnd.peer.DragSourceContextPeer;
 import java.awt.font.TextAttribute;
 import java.awt.im.InputMethodHighlight;
 import java.awt.image.*;
-import java.awt.peer.*;
 import java.net.URL;
 import java.util.Map;
 import java.util.Properties;
@@ -112,116 +109,6 @@
         }
 
         @Override
-        protected DesktopPeer createDesktopPeer(Desktop target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ButtonPeer createButton(Button target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected TextFieldPeer createTextField(TextField target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected LabelPeer createLabel(Label target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ListPeer createList(List target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected CheckboxPeer createCheckbox(Checkbox target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ScrollbarPeer createScrollbar(Scrollbar target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ScrollPanePeer createScrollPane(ScrollPane target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected TextAreaPeer createTextArea(TextArea target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ChoicePeer createChoice(Choice target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected FramePeer createFrame(Frame target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected CanvasPeer createCanvas(Canvas target) {
-            return null;
-        }
-
-        @Override
-        protected PanelPeer createPanel(Panel target) {
-            return null;
-        }
-
-        @Override
-        protected WindowPeer createWindow(Window target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected DialogPeer createDialog(Dialog target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected MenuBarPeer createMenuBar(MenuBar target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected MenuPeer createMenu(Menu target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected PopupMenuPeer createPopupMenu(PopupMenu target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected MenuItemPeer createMenuItem(MenuItem target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected FileDialogPeer createFileDialog(FileDialog target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected FontPeer getFontPeer(String name, int style) {
-            return null;
-        }
-
-        @Override
         public Dimension getScreenSize() throws HeadlessException {
             return null;
         }
@@ -312,11 +199,6 @@
         }
 
         @Override
-        public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) throws InvalidDnDOperationException {
-            return null;
-        }
-
-        @Override
         public boolean isModalityTypeSupported(Dialog.ModalityType modalityType) {
             return false;
         }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/datatransfer/DragImage/MultiResolutionDragImageTest.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,172 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import sun.awt.image.MultiResolutionToolkitImage;
+import sun.java2d.SunGraphics2D;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+
+import static java.awt.event.InputEvent.BUTTON1_DOWN_MASK;
+
+/**
+ * @test
+ * @bug 8076106
+ * @author Hendrik Schreiber
+ * @summary [macosx] Drag image of TransferHandler does not honor
+ * MultiResolutionImage
+ * @run main MultiResolutionDragImageTest TEST_DRAG
+ */
+public class MultiResolutionDragImageTest {
+
+    private static final Color COLOR_1X = Color.BLUE;
+    private static final Color COLOR_2X = Color.RED;
+    private static JFrame frame;
+    private static JTextField field;
+    private static Point p;
+
+    public static void main(String[] args) throws Exception {
+
+        final String test = args[0];
+
+        switch (test) {
+            case "TEST_DRAG":
+                testDrag();
+                break;
+            default:
+                throw new RuntimeException("Unknown test: " + test);
+        }
+    }
+
+    private static void testDrag() throws Exception {
+
+
+        SwingUtilities.invokeAndWait(() -> {
+
+            frame = new JFrame();
+            field = new JTextField("Drag Me");
+            setupFrame(frame, field);
+            frame.setVisible(true);
+        });
+
+        final Robot robot = new Robot();
+        robot.setAutoDelay(500);
+        robot.setAutoWaitForIdle(true);
+        robot.waitForIdle();
+
+        // get mouse into position
+        SwingUtilities.invokeAndWait(() -> {
+
+            p = new Point(field.getWidth() / 2, field.getHeight() / 2);
+            SwingUtilities.convertPointToScreen(p, field);
+        });
+
+        robot.mouseMove(p.x, p.y);
+        // simulate dragging
+        robot.mousePress(BUTTON1_DOWN_MASK);
+        p.translate(10, 10);
+        robot.mouseMove(p.x, p.y);
+
+        p.translate(5, 5);
+        final Color color = robot.getPixelColor(p.x, p.y);
+        robot.mouseRelease(BUTTON1_DOWN_MASK);
+
+        SwingUtilities.invokeAndWait(frame::dispose);
+
+        final float scaleFactor = getScaleFactor();
+        final Color testColor = (1 < scaleFactor) ? COLOR_2X : COLOR_1X;
+
+        if (!similar(testColor, color)) {
+            throw new RuntimeException(
+                    "TEST FAILED: Image with wrong resolution is used for drag image!");
+        }
+        System.out.println("TEST PASSED!");
+    }
+
+    private static void setupFrame(final JFrame frame, final JTextField field) {
+
+        frame.setBounds(0, 0, 50, 50);
+        frame.setLayout(new BorderLayout());
+        field.setDragEnabled(true);
+        final TransferHandler transferHandler = field.getTransferHandler();
+        transferHandler.setDragImage(createMultiResolutionImage());
+        frame.getContentPane().add(field, BorderLayout.CENTER);
+    }
+
+    private static boolean similar(Color c1, Color c2){
+        return similar(c1.getRed(), c2.getRed())
+                && similar(c1.getGreen(), c2.getGreen())
+                && similar(c1.getBlue(), c2.getBlue());
+    }
+
+    private static boolean similar(int n, int m){
+        return Math.abs(n - m) <= 50;
+    }
+
+    private static float getScaleFactor() {
+
+        final Dialog dialog = new Dialog((Window) null);
+        dialog.setSize(100, 100);
+        dialog.setModal(true);
+        final float[] scaleFactors = new float[1];
+        Panel panel = new Panel() {
+
+            @Override
+            public void paint(Graphics g) {
+                float scaleFactor = 1;
+                if (g instanceof SunGraphics2D) {
+                    scaleFactor = ((SunGraphics2D) g).surfaceData.getDefaultScale();
+                }
+                scaleFactors[0] = scaleFactor;
+                dialog.setVisible(false);
+            }
+        };
+
+        dialog.add(panel);
+        dialog.setVisible(true);
+        dialog.dispose();
+
+        return scaleFactors[0];
+    }
+
+    private static Image createMultiResolutionImage() {
+
+        return new MultiResolutionToolkitImage(
+                createImage(50, COLOR_1X),
+                createImage(100, COLOR_2X)
+        );
+
+    }
+
+    private static Image createImage(final int length, final Color color) {
+
+        final BufferedImage image = new BufferedImage(length, length,
+                BufferedImage.TYPE_INT_ARGB_PRE);
+        final Graphics graphics = image.getGraphics();
+        graphics.setColor(color);
+        graphics.fillRect(0, 0, length, length);
+        graphics.dispose();
+        return image;
+    }
+}
\ No newline at end of file
--- a/jdk/test/java/awt/dnd/DragSourceListenerSerializationTest/DragSourceListenerSerializationTest.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/dnd/DragSourceListenerSerializationTest/DragSourceListenerSerializationTest.java	Wed Jul 05 20:33:55 2017 +0200
@@ -74,7 +74,6 @@
                 new Point(100, 100),
                 Arrays.asList(me));
         DragSourceContext dsc = new DragSourceContext(
-                Toolkit.getDefaultToolkit().createDragSourceContextPeer(dge),
                 dge,
                 new Cursor(Cursor.HAND_CURSOR),
                 null, null, new StringSelection("TEXT"), null);
--- a/jdk/test/java/awt/geom/Path2D/Path2DCopyConstructor.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/geom/Path2D/Path2DCopyConstructor.java	Wed Jul 05 20:33:55 2017 +0200
@@ -37,7 +37,7 @@
  * @bug 8076419
  * @summary Check Path2D copy constructor (trims arrays)
  *          and constructor with zero capacity
- * @run main Path2DTrimCopy
+ * @run main Path2DCopyConstructor
  */
 public class Path2DCopyConstructor {
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/geom/Path2D/Path2DGrow.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,188 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Path2D;
+
+/**
+ * @test
+ * @bug 8078464
+ * @summary Check the growth algorithm (needRoom) in Path2D implementations
+ * @run main Path2DGrow
+ */
+public class Path2DGrow {
+
+    public static final int N = 1000 * 1000;
+
+    public static boolean verbose = false;
+    public static boolean force = false;
+
+    static void echo(String msg) {
+        System.out.println(msg);
+    }
+
+    static void log(String msg) {
+        if (verbose || force) {
+            echo(msg);
+        }
+    }
+
+    public static void main(String argv[]) {
+        verbose = (argv.length != 0);
+
+        testEmptyDoublePaths();
+        testDoublePaths();
+
+        testEmptyFloatPaths();
+        testFloatPaths();
+
+        testEmptyGeneralPath();
+        testGeneralPath();
+    }
+
+    static void testEmptyDoublePaths() {
+        echo("\n - Test(Path2D.Double[0]) ---");
+        test(() -> new Path2D.Double(Path2D.WIND_NON_ZERO, 0));
+    }
+
+    static void testDoublePaths() {
+        echo("\n - Test(Path2D.Double) ---");
+        test(() -> new Path2D.Double());
+    }
+
+    static void testEmptyFloatPaths() {
+        echo("\n - Test(Path2D.Float[0]) ---");
+        test(() -> new Path2D.Float(Path2D.WIND_NON_ZERO, 0));
+    }
+
+    static void testFloatPaths() {
+        echo("\n - Test(Path2D.Float) ---");
+        test(() -> new Path2D.Float());
+    }
+
+    static void testEmptyGeneralPath() {
+        echo("\n - Test(GeneralPath[0]) ---");
+        test(() -> new GeneralPath(Path2D.WIND_NON_ZERO, 0));
+    }
+
+    static void testGeneralPath() {
+        echo("\n - Test(GeneralPath) ---");
+        test(() -> new GeneralPath());
+    }
+
+    interface PathFactory {
+        Path2D makePath();
+    }
+
+    static void test(PathFactory pf) {
+        long start, end;
+
+        for (int n = 1; n <= N; n *= 10) {
+            force = (n == N);
+
+            start = System.nanoTime();
+            testAddMoves(pf.makePath(), n);
+            end = System.nanoTime();
+            log("testAddMoves[" + n + "] duration= "
+                + (1e-6 * (end - start)) + " ms.");
+
+            start = System.nanoTime();
+            testAddLines(pf.makePath(), n);
+            end = System.nanoTime();
+            log("testAddLines[" + n + "] duration= "
+                + (1e-6 * (end - start)) + " ms.");
+
+            start = System.nanoTime();
+            testAddQuads(pf.makePath(), n);
+            end = System.nanoTime();
+            log("testAddQuads[" + n + "] duration= "
+                + (1e-6 * (end - start)) + " ms.");
+
+            start = System.nanoTime();
+            testAddCubics(pf.makePath(), n);
+            end = System.nanoTime();
+            log("testAddCubics[" + n + "] duration= "
+                + (1e-6 * (end - start)) + " ms.");
+
+            start = System.nanoTime();
+            testAddMoveAndCloses(pf.makePath(), n);
+            end = System.nanoTime();
+            log("testAddMoveAndCloses[" + n + "] duration= "
+                + (1e-6 * (end - start)) + " ms.");
+        }
+    }
+
+    static void addMove(Path2D p2d, int i) {
+        p2d.moveTo(1.0 * i, 0.5 * i);
+    }
+
+    static void addLine(Path2D p2d, int i) {
+        p2d.lineTo(1.1 * i, 2.3 * i);
+    }
+
+    static void addCubic(Path2D p2d, int i) {
+        p2d.curveTo(1.1 * i, 1.2 * i, 1.3 * i, 1.4 * i, 1.5 * i, 1.6 * i);
+    }
+
+    static void addQuad(Path2D p2d, int i) {
+        p2d.quadTo(1.1 * i, 1.2 * i, 1.3 * i, 1.4 * i);
+    }
+
+    static void addClose(Path2D p2d) {
+        p2d.closePath();
+    }
+
+    static void testAddMoves(Path2D pathA, int n) {
+        for (int i = 0; i < n; i++) {
+            addMove(pathA, i);
+        }
+    }
+
+    static void testAddLines(Path2D pathA, int n) {
+        addMove(pathA, 0);
+        for (int i = 0; i < n; i++) {
+            addLine(pathA, i);
+        }
+    }
+
+    static void testAddQuads(Path2D pathA, int n) {
+        addMove(pathA, 0);
+        for (int i = 0; i < n; i++) {
+            addQuad(pathA, i);
+        }
+    }
+
+    static void testAddCubics(Path2D pathA, int n) {
+        addMove(pathA, 0);
+        for (int i = 0; i < n; i++) {
+            addCubic(pathA, i);
+        }
+    }
+
+    static void testAddMoveAndCloses(Path2D pathA, int n) {
+        for (int i = 0; i < n; i++) {
+            addMove(pathA, i);
+            addClose(pathA);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/print/PageFormat/ImageableAreaTest.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,264 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dialog;
+import java.awt.FlowLayout;
+import java.awt.print.Printable;
+import java.awt.print.PrinterException;
+import java.awt.print.PrinterJob;
+import java.text.MessageFormat;
+import javax.print.attribute.HashPrintRequestAttributeSet;
+import javax.print.attribute.PrintRequestAttributeSet;
+import javax.print.attribute.standard.Copies;
+import javax.print.attribute.standard.DialogTypeSelection;
+import javax.print.attribute.standard.MediaPrintableArea;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableModel;
+
+/**
+ * @test
+ * @bug 8044444
+ * @summary The output's 'Page-n' footer does not show completely
+ * @author Alexandr Scherbatiy
+ * @run main/manual ImageableAreaTest
+ */
+public class ImageableAreaTest {
+
+    public static void main(String[] args) throws Exception {
+        SwingUtilities.invokeAndWait(new Runnable() {
+
+            @Override
+            public void run() {
+
+                createAndShowTestDialog(
+                        "1. Press the Print Table button\n"
+                        + " Java print dialog should appear.\n"
+                        + "2. Press the Print button on the Java Print dialog.\n"
+                        + "2. Check that the page number is correctly printed.\n"
+                        + "If so, press PASS, else press FAIL.",
+                        "Page number is not correctly printed!",
+                        ImageableAreaTest::printWithJavaPrintDialog);
+
+                createAndShowTestDialog(
+                        "1. Press the Print Table button\n"
+                        + " The table should be printed without the print dialog.\n"
+                        + "2. Check that the page number is correctly printed.\n"
+                        + "If so, press PASS, else press FAIL.",
+                        "Page number is not correctly printed!",
+                        ImageableAreaTest::printWithoutPrintDialog);
+
+                createAndShowTestDialog(
+                        "1. Press the Print Table button\n"
+                        + " Java print dialog should appear.\n"
+                        + "2. Press the Print button on the Java Print dialog.\n"
+                        + "3. Check that the table has about half size of the printed page\n"
+                        + "If so, press PASS, else press FAIL.",
+                        "Custom imageable area is not correctly printed!",
+                        ImageableAreaTest::printWithCustomImageareaSize);
+            }
+        });
+    }
+
+    private static void printWithJavaPrintDialog() {
+        final JTable table = createAuthorTable(42);
+        Printable printable = table.getPrintable(
+                JTable.PrintMode.NORMAL,
+                new MessageFormat("Author Table"),
+                new MessageFormat("Page - {0}"));
+
+        PrinterJob job = PrinterJob.getPrinterJob();
+        job.setPrintable(printable);
+
+        boolean printAccepted = job.printDialog();
+        if (printAccepted) {
+            try {
+                job.print();
+                closeFrame();
+            } catch (PrinterException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    private static void printWithoutPrintDialog() {
+
+        final JTable table = createAuthorTable(42);
+        PrintRequestAttributeSet pras
+                = new HashPrintRequestAttributeSet();
+        pras.add(new Copies(1));
+
+        try {
+
+            boolean printAccepted = table.print(JTable.PrintMode.FIT_WIDTH,
+                    new MessageFormat("Author Table"),
+                    new MessageFormat("Page - {0}"),
+                    false, pras, false);
+
+            closeFrame();
+            if (!printAccepted) {
+                throw new RuntimeException("User cancels the printer job!");
+            }
+
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private static void printWithCustomImageareaSize() {
+        final JTable table = createAuthorTable(18);
+        PrintRequestAttributeSet printAttributes = new HashPrintRequestAttributeSet();
+        printAttributes.add(DialogTypeSelection.NATIVE);
+        printAttributes.add(new Copies(1));
+        printAttributes.add(new MediaPrintableArea(
+                0.25f, 0.25f, 8.0f, 5.0f, MediaPrintableArea.INCH));
+        Printable printable = table.getPrintable(
+                JTable.PrintMode.NORMAL,
+                new MessageFormat("Author Table"),
+                new MessageFormat("Page - {0}")
+        );
+
+        PrinterJob job = PrinterJob.getPrinterJob();
+        job.setPrintable(printable);
+
+        boolean printAccepted = job.printDialog(printAttributes);
+        if (printAccepted) {
+            try {
+                job.print(printAttributes);
+                closeFrame();
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        } else {
+            throw new RuntimeException("User cancels the printer job!");
+        }
+    }
+
+    private static JFrame frame;
+
+    private static void closeFrame() {
+        if (frame != null) {
+            frame.setVisible(false);
+            frame.dispose();
+        }
+    }
+
+    private static JTable createAuthorTable(int rows) {
+        final String[] headers = {"Book", "Title"};
+
+        final Object[][] data = new Object[rows][2];
+        for (int i = 0; i < rows; i++) {
+            int n = i + 1;
+            data[i] = new Object[]{"Book: " + n, "Title: " + n};
+        }
+
+        TableModel dataModel = new AbstractTableModel() {
+
+            public int getColumnCount() {
+                return headers.length;
+            }
+
+            public int getRowCount() {
+                return data.length;
+            }
+
+            public Object getValueAt(int row, int col) {
+                return data[row][col];
+            }
+
+            public String getColumnName(int column) {
+                return headers[column];
+            }
+
+            public Class getColumnClass(int col) {
+                return getValueAt(0, col).getClass();
+            }
+
+            public void setValueAt(Object aValue, int row, int column) {
+                data[row][column] = aValue;
+            }
+
+            public boolean isCellEditable(int row, int col) {
+                return false;
+            }
+        };
+
+        JTable table = new JTable(dataModel);
+        table.setGridColor(Color.BLUE);
+        table.setBackground(Color.WHITE);
+        table.setForeground(Color.BLACK);
+        table.setSize(600, 800);
+
+        frame = new JFrame();
+        frame.setSize(400, 600);
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        frame.add(table);
+        frame.setVisible(true);
+        return table;
+    }
+
+    private static int testCount;
+
+    private static void createAndShowTestDialog(String description,
+            String failMessage, Runnable action) {
+        final JDialog dialog = new JDialog();
+        dialog.setTitle("Test: " + (++testCount));
+        dialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
+        JTextArea textArea = new JTextArea(description);
+        textArea.setEditable(false);
+        final JButton testButton = new JButton("Print Table");
+        final JButton passButton = new JButton("PASS");
+        passButton.setEnabled(false);
+        passButton.addActionListener((e) -> {
+            dialog.dispose();
+        });
+        final JButton failButton = new JButton("FAIL");
+        failButton.setEnabled(false);
+        failButton.addActionListener((e) -> {
+            throw new RuntimeException(failMessage);
+        });
+        testButton.addActionListener((e) -> {
+            testButton.setEnabled(false);
+            action.run();
+            passButton.setEnabled(true);
+            failButton.setEnabled(true);
+        });
+        JPanel mainPanel = new JPanel(new BorderLayout());
+        mainPanel.add(textArea, BorderLayout.CENTER);
+        JPanel buttonPanel = new JPanel(new FlowLayout());
+        buttonPanel.add(testButton);
+        buttonPanel.add(passButton);
+        buttonPanel.add(failButton);
+        mainPanel.add(buttonPanel, BorderLayout.SOUTH);
+        dialog.add(mainPanel);
+        dialog.pack();
+        dialog.setVisible(true);
+    }
+}
--- a/jdk/test/java/awt/regtesthelpers/UtilInternal.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/regtesthelpers/UtilInternal.java	Wed Jul 05 20:33:55 2017 +0200
@@ -31,6 +31,7 @@
 import java.awt.Toolkit;
 import java.awt.Frame;
 
+import sun.awt.AWTAccessor;
 
 
 /**
@@ -45,7 +46,8 @@
                InstantiationException, InvocationTargetException
     {
         Toolkit tk = Toolkit.getDefaultToolkit();
-        FramePeer frame_peer = (FramePeer) embedder.getPeer();
+        FramePeer frame_peer = AWTAccessor.getComponentAccessor()
+                                          .getPeer(embedder);
         System.out.println("frame's peer = " + frame_peer);
         if ("sun.awt.windows.WToolkit".equals(tk.getClass().getName())) {
             Class comp_peer_class =
--- a/jdk/test/java/beans/Introspector/4058433/TestJavaBean.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/beans/Introspector/4058433/TestJavaBean.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -20,11 +20,13 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
+
 import java.awt.event.ActionListener;
 import java.beans.BeanDescriptor;
 import java.beans.BeanInfo;
 import java.beans.Introspector;
 import java.beans.JavaBean;
+
 /*
  * @test
  * @bug 4058433
@@ -32,53 +34,63 @@
  * @author Sergey Malenkov
  */
 public class TestJavaBean {
-    public static void main(String[] args) throws Exception {
-        test(X.class);
-        test(D.class);
-        test(DP.class);
-        test(DES.class);
+
+    static final String DSCR = "description";
+    static final String PRP = "value";
+    static final String ACT = "action";
+
+    public static void main(final String[] args) throws Exception {
+        test(X.class, "TestJavaBean$X", "TestJavaBean$X", null, null);
+        test(D.class, "TestJavaBean$D", DSCR, null, null);
+        test(DP.class, "TestJavaBean$DP", "TestJavaBean$DP", PRP, null);
+        test(DES.class, "TestJavaBean$DES", "TestJavaBean$DES", null, ACT);
+        test(DDP.class, "TestJavaBean$DDP", DSCR, PRP, null);
+        test(DDES.class, "TestJavaBean$DDES", DSCR, null, ACT);
+        test(DPDES.class, "TestJavaBean$DPDES", "TestJavaBean$DPDES", PRP, ACT);
+        test(DDPDES.class, "TestJavaBean$DDPDES", DSCR, PRP, ACT);
     }
 
-    private static void test(Class<?> type) throws Exception {
-        System.out.println(type);
+    private static void test(Class<?> type, String name, String descr,
+                             String prop, String event) throws Exception {
         BeanInfo info = Introspector.getBeanInfo(type);
         BeanDescriptor bd = info.getBeanDescriptor();
 
-        String description = bd.getShortDescription();
-        System.out.println("description = " + description);
+        if (!bd.getName().equals(name)) {
+            throw new Error("unexpected name of the bean");
+        }
+
+        if (!bd.getShortDescription().equals(descr)) {
+            throw new Error("unexpected description of the bean");
+        }
 
         int dp = info.getDefaultPropertyIndex();
-        System.out.println("property index = " + dp);
-        if (0 <= dp) {
-            String name = info.getPropertyDescriptors()[dp].getName();
-            System.out.println("property name = " + name);
+        if (dp < 0 && prop != null) {
+            throw new Error("unexpected index of the default property");
+        }
+        if (dp >= 0) {
+            if (!info.getPropertyDescriptors()[dp].getName().equals(prop)) {
+                throw new Error("unexpected default property");
+            }
         }
         int des = info.getDefaultEventIndex();
-        System.out.println("event set index = " + des);
-        if (0 <= des) {
-            String name = info.getPropertyDescriptors()[des].getName();
-            System.out.println("event set name = " + name);
+        if (des < 0 && event != null) {
+            throw new Error("unexpected index of the default event set");
         }
-
-        if ((D.class == type) == bd.getName().equals(description)) {
-            throw new Error("unexpected description of the bean");
-        }
-        if ((DP.class == type) == (dp < 0)) {
-            throw new Error("unexpected index of the default property");
-        }
-        if ((DES.class == type) == (des < 0)) {
-            throw new Error("unexpected index of the default event set");
+        if (des >= 0) {
+            if (!info.getEventSetDescriptors()[des].getName().equals(event)) {
+                throw new Error("unexpected default event set");
+            }
         }
     }
 
     public static class X {
     }
 
-    @JavaBean(description = "description")
+    @JavaBean(description = DSCR)
     public static class D {
     }
 
-    @JavaBean(defaultProperty = "value")
+    @JavaBean(defaultProperty = PRP)
     public static class DP {
         private int value;
 
@@ -91,7 +103,7 @@
         }
     }
 
-    @JavaBean(defaultEventSet = "action")
+    @JavaBean(defaultEventSet = ACT)
     public static class DES {
         public void addActionListener(ActionListener listener) {
         }
@@ -99,4 +111,64 @@
         public void removeActionListener(ActionListener listener) {
         }
     }
+
+    @JavaBean(description = DSCR, defaultProperty = PRP)
+    public static class DDP {
+        private int value;
+
+        public int getValue() {
+            return this.value;
+        }
+
+        public void setValue(int value) {
+            this.value = value;
+        }
+    }
+
+    @JavaBean(description = DSCR, defaultEventSet = ACT)
+    public static class DDES {
+        public void addActionListener(ActionListener listener) {
+        }
+
+        public void removeActionListener(ActionListener listener) {
+        }
+    }
+
+    @JavaBean(defaultProperty = PRP, defaultEventSet = ACT)
+    public static class DPDES {
+        private int value;
+
+        public int getValue() {
+            return this.value;
+        }
+
+        public void setValue(int value) {
+            this.value = value;
+        }
+
+        public void addActionListener(ActionListener listener) {
+        }
+
+        public void removeActionListener(ActionListener listener) {
+        }
+    }
+
+    @JavaBean(description = DSCR, defaultProperty = PRP, defaultEventSet = ACT)
+    public static class DDPDES {
+        private int value;
+
+        public int getValue() {
+            return this.value;
+        }
+
+        public void setValue(int value) {
+            this.value = value;
+        }
+
+        public void addActionListener(ActionListener listener) {
+        }
+
+        public void removeActionListener(ActionListener listener) {
+        }
+    }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Reader/ReaderBulkReadContract.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.CharArrayReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.LineNumberReader;
+import java.io.PipedReader;
+import java.io.PipedWriter;
+import java.io.PushbackReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.UncheckedIOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
+
+import static java.lang.String.format;
+
+/*
+ * @test
+ * @bug 8029689
+ * @summary checks the bounds part of the contract of java.io.Reader.read(char[], int, int):
+ *
+ *              0 <= off <= off+len <= cbuf.length
+ *
+ *          for publicly exported subtypes of java.io.Reader
+ */
+public class ReaderBulkReadContract {
+
+    public static void main(String[] args) throws IOException {
+        ReaderBulkReadContract t = new ReaderBulkReadContract();
+        t.test();
+    }
+
+    private void test() throws IOException {
+        Iterator<Object[]> args = args();
+        while (args.hasNext()) {
+            Object[] a = args.next();
+            Reader r = (Reader) a[0];
+            int size = (int) a[1];
+            int off = (int) a[2];
+            int len = (int) a[3];
+            try {
+                read(r, size, off, len);
+            } finally {
+                r.close();
+            }
+        }
+    }
+
+    private Iterator<Object[]> args() {
+
+        Integer[] lens = {Integer.MIN_VALUE, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, Integer.MAX_VALUE};
+        Integer[] offs = {Integer.MIN_VALUE, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, Integer.MAX_VALUE};
+        Integer[] sizes = {0, 1, 2, 3, 4, 5};
+        String[] contents = {"", "a", "ab"};
+
+        List<Function<String, Reader>> fs = Arrays.asList(
+                (String s) -> new BufferedReader(new StringReader(s)),
+                (String s) -> new LineNumberReader(new StringReader(s)),
+                (String s) -> new CharArrayReader(s.toCharArray()),
+                (String s) -> new InputStreamReader(new ByteArrayInputStream(s.getBytes())),
+                (String s) -> newFileReader(s),
+                (String s) -> new PushbackReader(new StringReader(s)),
+                (String s) -> newPipedReader(s),
+                (String s) -> new StringReader(s)
+        );
+
+        // The easiest way to produce a cartesian product from a small fixed number of sets
+        List<Object[]> tuples = Collections.synchronizedList(new LinkedList<>());
+        for (Integer len : lens)
+            for (Integer off : offs)
+                for (String s : contents)
+                    for (Integer size : sizes)
+                        for (Function<String, Reader> f : fs)
+                            tuples.add(new Object[]{f.apply(s), size, off, len});
+
+        return tuples.iterator();
+    }
+
+    private void read(Reader r, int size, int off, int len) throws IOException {
+        IndexOutOfBoundsException ex = null;
+        try {
+            r.read(new char[size], off, len);
+        } catch (IndexOutOfBoundsException e) {
+            ex = e;
+        }
+
+        boolean incorrectBounds = off < 0 || len < 0 || len > size - off;
+        boolean exceptionThrown = ex != null;
+
+        if (incorrectBounds != exceptionThrown) { // incorrectBounds iff exceptionThrown
+            throw new AssertionError(format("r=%s, size=%s, off=%s, len=%s, incorrectBounds=%s, exceptionThrown=%s",
+                    r, size, off, len, incorrectBounds, exceptionThrown));
+        }
+    }
+
+    private static PipedReader newPipedReader(String contents) {
+        try (PipedWriter w = new PipedWriter()) {
+            PipedReader r = new PipedReader(w);
+            w.write(contents);
+            return r;
+        } catch (IOException e) {
+            throw new UncheckedIOException(e);
+        }
+    }
+
+    private FileReader newFileReader(String contents) {
+        try {
+            // To not create an enormous amount of files
+            File f = cache.computeIfAbsent(contents,
+                    ReaderBulkReadContract::createTempFileWithContents);
+            return new FileReader(f);
+        } catch (IOException e) {
+            throw new UncheckedIOException(e);
+        }
+    }
+
+    private static File createTempFileWithContents(String contents) {
+        try {
+            File file = File.createTempFile("ReaderContract", "");
+            try (FileWriter w = new FileWriter(file)) {
+                w.write(contents);
+            }
+            return file;
+        } catch (IOException e) {
+            throw new UncheckedIOException(e);
+        }
+    }
+
+    //
+    // To avoid myriads of tiny files a cache is used.
+    // ConcurrentHashMap.computeIfAbsent promises a crucial thing:
+    //
+    // ...The entire method invocation is performed atomically, so the
+    // function is applied at most once per key...
+    //  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    //
+    private final ConcurrentHashMap<String, File> cache = new ConcurrentHashMap<>();
+}
--- a/jdk/test/java/lang/Double/ParseHexFloatingPoint.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/lang/Double/ParseHexFloatingPoint.java	Wed Jul 05 20:33:55 2017 +0200
@@ -32,6 +32,8 @@
  * @key randomness
  */
 
+import jdk.testlibrary.RandomFactory;
+
 public class ParseHexFloatingPoint {
     private ParseHexFloatingPoint(){}
 
--- a/jdk/test/java/lang/Integer/BitTwiddle.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/lang/Integer/BitTwiddle.java	Wed Jul 05 20:33:55 2017 +0200
@@ -33,6 +33,7 @@
  */
 
 import java.util.Random;
+import jdk.testlibrary.RandomFactory;
 import static java.lang.Integer.*;
 
 public class BitTwiddle {
--- a/jdk/test/java/lang/Long/BitTwiddle.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/lang/Long/BitTwiddle.java	Wed Jul 05 20:33:55 2017 +0200
@@ -33,6 +33,7 @@
  */
 
 import java.util.Random;
+import jdk.testlibrary.RandomFactory;
 import static java.lang.Long.*;
 
 public class BitTwiddle {
--- a/jdk/test/java/lang/Math/CubeRootTests.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/lang/Math/CubeRootTests.java	Wed Jul 05 20:33:55 2017 +0200
@@ -32,6 +32,8 @@
  * @key randomness
  */
 
+import jdk.testlibrary.RandomFactory;
+
 public class CubeRootTests {
     private CubeRootTests(){}
 
--- a/jdk/test/java/lang/Math/HypotTests.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/lang/Math/HypotTests.java	Wed Jul 05 20:33:55 2017 +0200
@@ -32,6 +32,8 @@
  * @key randomness
  */
 
+import jdk.testlibrary.RandomFactory;
+
 public class HypotTests {
     private HypotTests(){}
 
--- a/jdk/test/java/lang/Math/IeeeRecommendedTests.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/lang/Math/IeeeRecommendedTests.java	Wed Jul 05 20:33:55 2017 +0200
@@ -32,6 +32,8 @@
  * @key randomness
  */
 
+import jdk.testlibrary.RandomFactory;
+
 public class IeeeRecommendedTests {
     private IeeeRecommendedTests(){}
 
--- a/jdk/test/java/lang/Math/Log1pTests.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/lang/Math/Log1pTests.java	Wed Jul 05 20:33:55 2017 +0200
@@ -32,6 +32,8 @@
  * @key randomness
  */
 
+import jdk.testlibrary.RandomFactory;
+
 public class Log1pTests {
     private Log1pTests(){}
 
--- a/jdk/test/java/lang/SecurityManager/CheckSecurityProvider.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/lang/SecurityManager/CheckSecurityProvider.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -67,6 +67,7 @@
         expected.add("com.sun.security.sasl.Provider");
         expected.add("org.jcp.xml.dsig.internal.dom.XMLDSigRI");
         expected.add("sun.security.smartcardio.SunPCSC");
+        expected.add("sun.security.provider.certpath.ldap.JdkLDAP");
         if (os.startsWith("Windows")) {
             expected.add("sun.security.mscapi.SunMSCAPI");
         }
--- a/jdk/test/java/math/BigDecimal/StringConstructor.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/math/BigDecimal/StringConstructor.java	Wed Jul 05 20:33:55 2017 +0200
@@ -33,6 +33,7 @@
 
 import java.math.*;
 import java.util.Random;
+import jdk.testlibrary.RandomFactory;
 
 public class StringConstructor {
 
--- a/jdk/test/java/math/BigInteger/BigIntegerTest.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/math/BigInteger/BigIntegerTest.java	Wed Jul 05 20:33:55 2017 +0200
@@ -40,6 +40,7 @@
 import java.io.ObjectOutputStream;
 import java.math.BigInteger;
 import java.util.Random;
+import jdk.testlibrary.RandomFactory;
 
 /**
  * This is a simple test class created to ensure that the results
--- a/jdk/test/java/math/BigInteger/ModPow65537.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/math/BigInteger/ModPow65537.java	Wed Jul 05 20:33:55 2017 +0200
@@ -37,6 +37,7 @@
 import java.security.*;
 import java.security.spec.*;
 import java.util.Random;
+import jdk.testlibrary.RandomFactory;
 
 public class ModPow65537 {
 
--- a/jdk/test/java/math/BigInteger/PrimeTest.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/math/BigInteger/PrimeTest.java	Wed Jul 05 20:33:55 2017 +0200
@@ -40,6 +40,7 @@
 import java.util.Set;
 import java.util.SplittableRandom;
 import java.util.TreeSet;
+import jdk.testlibrary.RandomFactory;
 import static java.util.stream.Collectors.toCollection;
 import static java.util.stream.Collectors.toList;
 
--- a/jdk/test/java/math/BigInteger/SymmetricRangeTests.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/math/BigInteger/SymmetricRangeTests.java	Wed Jul 05 20:33:55 2017 +0200
@@ -40,6 +40,7 @@
 import java.util.Arrays;
 import java.math.BigInteger;
 import java.util.Random;
+import jdk.testlibrary.RandomFactory;
 
 public class SymmetricRangeTests {
 
--- a/jdk/test/java/nio/channels/DatagramChannel/Promiscuous.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/nio/channels/DatagramChannel/Promiscuous.java	Wed Jul 05 20:33:55 2017 +0200
@@ -97,7 +97,7 @@
                 // no datagram received
                 if (sa == null) {
                     if (datagramExepcted) {
-                        throw new RuntimeException("Expected message not recieved");
+                        throw new RuntimeException("Expected message not received");
                     }
                     System.out.println("No message received (correct)");
                     return;
@@ -109,10 +109,15 @@
                 buf.flip();
                 byte[] bytes = new byte[buf.remaining()];
                 buf.get(bytes);
-                int receivedId = Integer.parseInt(new String(bytes));
-
-                System.out.format("Received message from %s (id=0x%x)\n",
-                    sender, receivedId);
+                String s = new String(bytes, "UTF-8");
+                int receivedId = -1;
+                try {
+                    receivedId = Integer.parseInt(s);
+                    System.out.format("Received message from %s (id=0x%x)\n",
+                            sender, receivedId);
+                } catch (NumberFormatException x) {
+                    System.out.format("Received message from %s (msg=%s)\n", sender, s);
+                }
 
                 if (!datagramExepcted) {
                     if (receivedId == id)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/security/Policy/PolicyProvider/CustomPolicy.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.security.AccessController;
+import java.security.Permission;
+import java.security.Policy;
+import java.security.PrivilegedAction;
+import java.security.ProtectionDomain;
+
+public class CustomPolicy extends Policy {
+
+    // the ProtectionDomain of CustomPolicy
+    private final ProtectionDomain policyPd;
+
+    public CustomPolicy() {
+        policyPd = AccessController.doPrivileged(
+            (PrivilegedAction<ProtectionDomain>)
+                () -> this.getClass().getProtectionDomain());
+    }
+
+    @Override
+    public boolean implies(ProtectionDomain pd, Permission perm) {
+        System.out.println("CustomPolicy.implies");
+
+        // If the protection domain is the same as CustomPolicy, then
+        // we return true. This is to prevent recursive permission checks
+        // that lead to StackOverflow errors when the policy implementation
+        // performs a sensitive operation that triggers a permission check,
+        // for example, as below.
+        if (pd == policyPd) {
+            return true;
+        }
+
+        // Do something that triggers a permission check to make sure that
+        // we don't cause a StackOverflow error.
+        String home = AccessController.doPrivileged(
+            (PrivilegedAction<String>) () -> System.getProperty("user.home"));
+
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/security/Policy/PolicyProvider/UseSystemClassLoader.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.File;
+import java.net.URL;
+import java.security.Policy;
+import java.security.Security;
+
+/*
+ * @test
+ * @bug 8075706
+ * @summary Check that a custom policy provider can be loaded from the classpath
+ * @run main/othervm UseSystemClassLoader CUSTOM
+ * @run main/othervm UseSystemClassLoader DEFAULT
+ * @run main/othervm UseSystemClassLoader NOT_AVAIL
+ * @run main/othervm UseSystemClassLoader NOT_SET
+ */
+
+public class UseSystemClassLoader {
+
+    enum Type {
+        CUSTOM, DEFAULT, NOT_AVAIL, NOT_SET
+    };
+
+    public static void main(String[] args) throws Exception {
+
+        Type t = Type.valueOf(args[0]);
+
+        // We can't use the jtreg java.security.policy option to specify
+        // the policy file because that causes the default JDK policy provider
+        // to be set and once set, we cannot change it. So, instead we use the
+        // policy.url security property.
+        File file = new File(System.getProperty("test.src"), "test.policy");
+        URL policyURL = file.toURI().toURL();
+        Security.setProperty("policy.url.1", policyURL.toString());
+
+        switch (t) {
+            case CUSTOM:
+                // Set policy.provider to our custom policy provider
+                Security.setProperty("policy.provider", "CustomPolicy");
+                break;
+            case NOT_AVAIL:
+                // Set policy.provider to a non-existent policy provider
+                Security.setProperty("policy.provider", "NonExistentPolicy");
+                break;
+            case DEFAULT:
+                // Don't set policy.provider (leave default)
+                break;
+            case NOT_SET:
+                // Set policy.provider to empty string
+                Security.setProperty("policy.provider", "");
+                break;
+        }
+
+        System.setSecurityManager(new SecurityManager());
+        Policy p = Policy.getPolicy();
+        switch (t) {
+            case CUSTOM:
+                // check that the custom policy provider has been set
+                if (!(p instanceof CustomPolicy)) {
+                    throw new Exception("CustomPolicy was not set");
+                }
+                break;
+            case NOT_AVAIL:
+            case DEFAULT:
+            case NOT_SET:
+                // check that the default policy provider has been set
+                if (!(p instanceof sun.security.provider.PolicyFile)) {
+                    throw new Exception("default provider was not set");
+                }
+                break;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/security/Policy/PolicyProvider/test.policy	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,9 @@
+grant {
+  permission java.lang.RuntimePermission "createSecurityManager";
+  permission java.lang.RuntimePermission "setSecurityManager";
+  permission java.security.SecurityPermission "setProperty.policy.provider";
+  permission java.security.SecurityPermission "getPolicy";
+  permission java.util.PropertyPermission "user.home", "read";
+  permission java.lang.RuntimePermission "getProtectionDomain";
+  permission java.lang.RuntimePermission "accessClassInPackage.sun.security.provider";
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/security/cert/URICertStoreParameters/TestBasic.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.security.cert.CertStore;
+import java.security.cert.URICertStoreParameters;
+import java.net.URI;
+
+/*
+ * @test
+ * @bug 8038084
+ * @summary Basic testing for URICertStoreParameters
+ * @run main TestBasic
+ */
+public class TestBasic {
+
+    public static void main(String[] args) throws Exception {
+        String str1 = "ldap://myownhost:5000/";
+        String str2 = "ldap://myownhost:5000/cn=foo";
+        test(str1, str2);
+        System.out.println("Test passed");
+    }
+
+    private static void test(String str1, String str2) throws Exception {
+        System.out.println("Testing clone");
+        URICertStoreParameters p1 = new URICertStoreParameters(new URI(str1));
+        URICertStoreParameters p1Too = p1.clone();
+        if (!(p1.getURI().equals(p1Too.getURI())) ||
+            !(p1.equals(p1Too))) {
+            throw new Exception("Error: problem with clone");
+        }
+        System.out.println("Testing equal and hashCode");
+        p1Too = new URICertStoreParameters(new URI(str1));
+        URICertStoreParameters p2 = new URICertStoreParameters(new URI(str2));
+
+        if (p1.equals(null)) {
+            throw new Exception("Error: p1 should NOT equal null");
+        }
+        if ((!p1.equals(p1)) || (p1.hashCode() != p1.hashCode())) {
+            throw new Exception("Error: p1 should equal p1");
+        }
+        if ((!p1.equals(p1Too)) || (p1.hashCode() != p1Too.hashCode())) {
+            throw new Exception("Error: p1 should equal p1Too");
+        }
+        if ((!p1Too.equals(p1)) || (p1Too.hashCode() != p1.hashCode())) {
+            throw new Exception("Error: p1Too should equal p1");
+        }
+        if (p1.equals(p2) || p1Too.equals(p2)) {
+            throw new Exception("Error: p1/p1Too should NOT equal p2");
+        }
+    }
+}
--- a/jdk/test/java/util/Map/Collisions.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/util/Map/Collisions.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -198,138 +198,125 @@
     }
 
     private static <T> void testInsertion(Map<T, T> map, String keys_desc, T[] keys) {
-        check("map empty", (map.size() == 0) && map.isEmpty());
+        check(map.size() == 0 && map.isEmpty(), "map empty");
 
         for (int i = 0; i < keys.length; i++) {
-            check(String.format("insertion: map expected size m%d != i%d", map.size(), i),
-                    map.size() == i);
-            check(String.format("insertion: put(%s[%d])", keys_desc, i), null == map.put(keys[i], keys[i]));
-            check(String.format("insertion: containsKey(%s[%d])", keys_desc, i), map.containsKey(keys[i]));
-            check(String.format("insertion: containsValue(%s[%d])", keys_desc, i), map.containsValue(keys[i]));
+            check(map.size() == i, "insertion: map expected size m%d != i%d", map.size(), i);
+            check(null == map.put(keys[i], keys[i]), "insertion: put(%s[%d])", keys_desc, i);
+            check(map.containsKey(keys[i]), "insertion: containsKey(%s[%d])", keys_desc, i);
+            check(map.containsValue(keys[i]), "insertion: containsValue(%s[%d])", keys_desc, i);
         }
 
-        check(String.format("map expected size m%d != k%d", map.size(), keys.length),
-                map.size() == keys.length);
+        check(map.size() == keys.length, "map expected size m%d != k%d", map.size(), keys.length);
     }
 
     private static void testIntegerIteration(Map<HashableInteger, HashableInteger> map, HashableInteger[] keys) {
-        check(String.format("map expected size m%d != k%d", map.size(), keys.length),
-                map.size() == keys.length);
+        check(map.size() == keys.length, "map expected size m%d != k%d", map.size(), keys.length);
 
         BitSet all = new BitSet(keys.length);
         for (Map.Entry<HashableInteger, HashableInteger> each : map.entrySet()) {
-            check("Iteration: key already seen", !all.get(each.getKey().value));
+            check(!all.get(each.getKey().value), "Iteration: key already seen");
             all.set(each.getKey().value);
         }
 
         all.flip(0, keys.length);
-        check("Iteration: some keys not visited", all.isEmpty());
+        check(all.isEmpty(), "Iteration: some keys not visited");
 
         for (HashableInteger each : map.keySet()) {
-            check("Iteration: key already seen", !all.get(each.value));
+            check(!all.get(each.value), "Iteration: key already seen");
             all.set(each.value);
         }
 
         all.flip(0, keys.length);
-        check("Iteration: some keys not visited", all.isEmpty());
+        check(all.isEmpty(), "Iteration: some keys not visited");
 
         int count = 0;
         for (HashableInteger each : map.values()) {
             count++;
         }
 
-        check(String.format("Iteration: value count matches size m%d != c%d", map.size(), count),
-                map.size() == count);
+        check(map.size() == count, "Iteration: value count matches size m%d != c%d", map.size(), count);
     }
 
     private static void testStringIteration(Map<String, String> map, String[] keys) {
-        check(String.format("map expected size m%d != k%d", map.size(), keys.length),
-                map.size() == keys.length);
+        check(map.size() == keys.length, "map expected size m%d != k%d", map.size(), keys.length);
 
         BitSet all = new BitSet(keys.length);
         for (Map.Entry<String, String> each : map.entrySet()) {
             String key = each.getKey();
             boolean longKey = key.length() > 5;
             int index = key.hashCode() + (longKey ? keys.length / 2 : 0);
-            check("key already seen", !all.get(index));
+            check(!all.get(index), "key already seen");
             all.set(index);
         }
 
         all.flip(0, keys.length);
-        check("some keys not visited", all.isEmpty());
+        check(all.isEmpty(), "some keys not visited");
 
         for (String each : map.keySet()) {
             boolean longKey = each.length() > 5;
             int index = each.hashCode() + (longKey ? keys.length / 2 : 0);
-            check("key already seen", !all.get(index));
+            check(!all.get(index), "key already seen");
             all.set(index);
         }
 
         all.flip(0, keys.length);
-        check("some keys not visited", all.isEmpty());
+        check(all.isEmpty(), "some keys not visited");
 
         int count = 0;
         for (String each : map.values()) {
             count++;
         }
 
-        check(String.format("value count matches size m%d != k%d", map.size(), keys.length),
-                map.size() == keys.length);
+        check(map.size() == keys.length, "value count matches size m%d != k%d", map.size(), keys.length);
     }
 
     private static <T> void testContainsKey(Map<T, T> map, String keys_desc, T[] keys) {
         for (int i = 0; i < keys.length; i++) {
             T each = keys[i];
-            check("containsKey: " + keys_desc + "[" + i + "]" + each, map.containsKey(each));
+            check(map.containsKey(each), "containsKey: %s[%d]%s", keys_desc, i, each);
         }
     }
 
     private static <T> void testRemove(Map<T, T> map, String keys_desc, T[] keys) {
-        check(String.format("remove: map expected size m%d != k%d", map.size(), keys.length),
-                map.size() == keys.length);
+        check(map.size() == keys.length, "remove: map expected size m%d != k%d", map.size(), keys.length);
 
         for (int i = 0; i < keys.length; i++) {
             T each = keys[i];
-            check("remove: " + keys_desc + "[" + i + "]" + each, null != map.remove(each));
+            check(null != map.remove(each), "remove: %s[%d]%s", keys_desc, i, each);
         }
 
-        check(String.format("remove: map empty. size=%d", map.size()),
-                (map.size() == 0) && map.isEmpty());
+        check(map.size() == 0 && map.isEmpty(), "remove: map empty. size=%d", map.size());
     }
 
     private static <T> void testKeysIteratorRemove(Map<T, T> map, String keys_desc, T[] keys) {
-        check(String.format("remove: map expected size m%d != k%d", map.size(), keys.length),
-                map.size() == keys.length);
+        check(map.size() == keys.length, "remove: map expected size m%d != k%d", map.size(), keys.length);
 
         Iterator<T> each = map.keySet().iterator();
         while (each.hasNext()) {
             T t = each.next();
             each.remove();
-            check("not removed: " + each, !map.containsKey(t) );
+            check(!map.containsKey(t), "not removed: %s", each);
         }
 
-        check(String.format("remove: map empty. size=%d", map.size()),
-                (map.size() == 0) && map.isEmpty());
+        check(map.size() == 0 && map.isEmpty(), "remove: map empty. size=%d", map.size());
     }
 
     private static <T> void testValuesIteratorRemove(Map<T, T> map, String keys_desc, T[] keys) {
-        check(String.format("remove: map expected size m%d != k%d", map.size(), keys.length),
-                map.size() == keys.length);
+        check(map.size() == keys.length, "remove: map expected size m%d != k%d", map.size(), keys.length);
 
         Iterator<T> each = map.values().iterator();
         while (each.hasNext()) {
             T t = each.next();
             each.remove();
-            check("not removed: " + each, !map.containsValue(t) );
+            check(!map.containsValue(t), "not removed: %s", each);
         }
 
-        check(String.format("remove: map empty. size=%d", map.size()),
-                (map.size() == 0) && map.isEmpty());
+        check(map.size() == 0 && map.isEmpty(), "remove: map empty. size=%d", map.size());
     }
 
     private static <T> void testEntriesIteratorRemove(Map<T, T> map, String keys_desc, T[] keys) {
-        check(String.format("remove: map expected size m%d != k%d", map.size(), keys.length),
-                map.size() == keys.length);
+        check(map.size() == keys.length, "remove: map expected size m%d != k%d", map.size(), keys.length);
 
         Iterator<Map.Entry<T,T>> each = map.entrySet().iterator();
         while (each.hasNext()) {
@@ -337,13 +324,12 @@
             T key = t.getKey();
             T value = t.getValue();
             each.remove();
-            check("not removed: " + each, (map instanceof IdentityHashMap) || !map.entrySet().contains(t) );
-            check("not removed: " + each, !map.containsKey(key) );
-            check("not removed: " + each, !map.containsValue(value));
+            check((map instanceof IdentityHashMap) || !map.entrySet().contains(t), "not removed: %s", each);
+            check(!map.containsKey(key),                                           "not removed: %s", each);
+            check(!map.containsValue(value),                                       "not removed: %s", each);
         }
 
-        check(String.format("remove: map empty. size=%d", map.size()),
-                (map.size() == 0) && map.isEmpty());
+        check(map.size() == 0 && map.isEmpty(), "remove: map empty. size=%d", map.size());
     }
 
     //--------------------- Infrastructure ---------------------------
@@ -391,7 +377,7 @@
         }
     }
 
-    static void check(String desc, boolean cond) {
+    static void check(boolean cond, String desc) {
         if (cond) {
             pass();
         } else {
@@ -399,6 +385,46 @@
         }
     }
 
+    static void check(boolean cond, String fmt, int i) {
+        if (cond) {
+            pass();
+        } else {
+            fail(String.format(fmt, i));
+        }
+    }
+
+    static void check(boolean cond, String fmt, Object o) {
+        if (cond) {
+            pass();
+        } else {
+            fail(String.format(fmt, o));
+        }
+    }
+
+    static void check(boolean cond, String fmt, int i1, int i2) {
+        if (cond) {
+            pass();
+        } else {
+            fail(String.format(fmt, i1, i2));
+        }
+    }
+
+    static void check(boolean cond, String fmt, String s, int i) {
+        if (cond) {
+            pass();
+        } else {
+            fail(String.format(fmt, s, i));
+        }
+    }
+
+    static void check(boolean cond, String fmt, String s, int i, Object o) {
+        if (cond) {
+            pass();
+        } else {
+            fail(String.format(fmt, s, i, o));
+        }
+    }
+
     static void equal(Object x, Object y) {
         if (Objects.equals(x, y)) {
             pass();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/concurrent/ConcurrentMap/ConcurrentRemoveIf.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @run testng ConcurrentRemoveIf
+ * @bug 8078645
+ * @summary Test removeIf on views of concurrent maps
+ */
+
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ConcurrentNavigableMap;
+import java.util.concurrent.ConcurrentSkipListMap;
+import java.util.concurrent.CyclicBarrier;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.function.Consumer;
+import java.util.function.Supplier;
+
+@Test
+public class ConcurrentRemoveIf {
+    static final int K = 100;
+    static final int SIZE = 1000;
+    static final int HALF_SIZE = SIZE / 2;
+
+    @DataProvider(name = "String,Supplier<ConcurrentMap>,Runnable")
+    public static Object[][] spliteratorDataProvider() {
+        List<Object[]> rows = new ArrayList<>();
+
+        // ConcurrentMap classes to test
+        Map<String, Supplier<ConcurrentMap<Integer, Integer>>> maps = new HashMap<>();
+        maps.put("ConcurrentHashMap", ConcurrentHashMap::new);
+        maps.put("ConcurrentSkipListMap", ConcurrentSkipListMap::new);
+
+        // ConcurrentMap actions
+        Map<String, Consumer<ConcurrentMap<Integer, Integer>>> actions = new HashMap<>();
+        actions.put(".entrySet().removeIf()", m -> m.entrySet().removeIf(e -> e.getValue() == 0));
+        actions.put(".values().removeIf()", m -> m.values().removeIf(v -> v == 0));
+
+        // ConcurrentNavigableMap actions
+        Map<String, Consumer<ConcurrentNavigableMap<Integer, Integer>>> navActions = new HashMap<>();
+        navActions.put(".headMap()/tailMap().entrySet().removeIf()",
+                       m -> {
+                           ConcurrentMap<Integer, Integer> left = m.headMap(HALF_SIZE, false);
+                           ConcurrentMap<Integer, Integer> right = m.tailMap(HALF_SIZE, true);
+                           left.entrySet().removeIf(e -> e.getValue() == 0);
+                           right.entrySet().removeIf(e -> e.getValue() == 0);
+                       });
+        navActions.put(".headMap()/tailMap().values().removeIf()",
+                       m -> {
+                           ConcurrentMap<Integer, Integer> left = m.headMap(HALF_SIZE, false);
+                           ConcurrentMap<Integer, Integer> right = m.tailMap(HALF_SIZE, true);
+                           left.values().removeIf(v -> v == 0);
+                           right.values().removeIf(v -> v == 0);
+                       });
+        navActions.put(".descendingMap().entrySet().removeIf()",
+                       m -> {
+                           ConcurrentMap<Integer, Integer> dm = m.descendingMap();
+                           dm.entrySet().removeIf(e -> e.getValue() == 0);
+                       });
+        navActions.put(".descendingMap().values().removeIf()",
+                       m -> {
+                           ConcurrentMap<Integer, Integer> dm = m.descendingMap();
+                           dm.values().removeIf(v -> v == 0);
+                       });
+
+        for (Map.Entry<String, Supplier<ConcurrentMap<Integer, Integer>>> mapSupplier : maps.entrySet()) {
+            Supplier<ConcurrentMap<Integer, Integer>> sm = mapSupplier.getValue();
+            for (Map.Entry<String, Consumer<ConcurrentMap<Integer, Integer>>> action : actions.entrySet()) {
+                rows.add(new Object[]{
+                        mapSupplier.getKey() + action.getKey(),
+                        sm,
+                        action.getValue()});
+            }
+
+            if (sm.get() instanceof ConcurrentNavigableMap) {
+                for (Map.Entry<String, Consumer<ConcurrentNavigableMap<Integer, Integer>>> action : navActions.entrySet()) {
+                    rows.add(new Object[]{
+                            mapSupplier.getKey() + action.getKey(),
+                            sm,
+                            action.getValue()});
+                }
+            }
+        }
+
+        return rows.toArray(new Object[0][]);
+    }
+
+    ExecutorService executorService = Executors.newCachedThreadPool();
+
+    @AfterClass
+    public void after() {
+        executorService.shutdown();
+    }
+
+    @Test(dataProvider = "String,Supplier<ConcurrentMap>,Runnable")
+    public void testMap(String desc, Supplier<ConcurrentMap<Integer, Integer>> ms, Consumer<ConcurrentMap<Integer, Integer>> action)
+            throws InterruptedException {
+        for (int i = 0; i < K; i++) {
+            testMap(ms.get(), action);
+        }
+    }
+
+    private void testMap(ConcurrentMap<Integer, Integer> map, Consumer<ConcurrentMap<Integer, Integer>> action)
+            throws InterruptedException {
+        // put 0's
+        fillMap(map, 0);
+
+        // To start working simultaneously
+        CyclicBarrier threadStarted = new CyclicBarrier(2);
+
+        // This task put 1's into map
+        CompletableFuture<Void> putter = CompletableFuture.runAsync(
+                awaitOn(threadStarted, () -> fillMap(map, 1)),
+                executorService);
+
+        // This task performs the map action to remove all 0's from map
+        CompletableFuture<Void> remover = CompletableFuture.runAsync(
+                awaitOn(threadStarted, () -> action.accept(map)),
+                executorService);
+
+        // Wait for both tasks to complete
+        CompletableFuture.allOf(putter, remover).join();
+
+        Assert.assertEquals(map.size(), SIZE, "Map size incorrect");
+    }
+
+    static void fillMap(ConcurrentMap<Integer, Integer> map, int value) {
+        for (int i = 0; i < SIZE; i++) {
+            map.put(i, value);
+        }
+    }
+
+    static Runnable awaitOn(CyclicBarrier threadStarted, Runnable r) {
+        return () -> {
+            try {
+                threadStarted.await();
+            }
+            catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+            r.run();
+        };
+    }
+}
--- a/jdk/test/java/util/logging/LogManager/TestLoggerNames.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/util/logging/LogManager/TestLoggerNames.java	Wed Jul 05 20:33:55 2017 +0200
@@ -20,6 +20,7 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.Iterator;
@@ -107,7 +108,11 @@
                     System.out.println("OK: Iterator doesn't support remove.");
                 }
             }
+            // We're not supposed to come here, but if we do then we
+            // need to rewind names...
+            names = LogManager.getLogManager().getLoggerNames();
         }
+
         List<String> loggerNames = Collections.list(names);
         if (!loggerNames.contains("")) {
             throw new RuntimeException("\"\"" +
@@ -147,7 +152,13 @@
         Thread loggerNamesThread = new Thread(() -> {
             try {
                 while (!stop) {
-                    checkLoggerNames(loggers);
+                    // Make a defensive copy of the list of loggers that we pass
+                    // to checkLoggerNames - in order to make sure that
+                    // we won't see new loggers that might appear after
+                    // checkLoggerNames has called LogManager.getLoggerNames().
+                    // ('loggers' is a live list and the main thread adds and
+                    //  and removes loggers from it concurrently to this thread).
+                    checkLoggerNames(new ArrayList<>(loggers));
                     Thread.sleep(10);
                     if (!stop) {
                         phaser.arriveAndAwaitAdvance();
@@ -156,6 +167,10 @@
             } catch (Throwable t) {
                 t.printStackTrace(System.err);
                 checkLoggerNamesFailed = t;
+                // makes sure the main thread isn't going to wait
+                // forever waiting for this dead thread to arrive at the
+                // phaser.
+                phaser.arrive();
             }
         }, "loggerNames");
 
@@ -197,14 +212,29 @@
                     loggers.remove(l);
                     l = Logger.getLogger(name.replace("replaceMe", "meReplaced"));
                     loggers.add(l);
+                    // Give some chance to the loggerNames thread to arrive at the
+                    // phaser first. We don't really care if the logger is actually
+                    // replaced this turn - or the next.
+                    Thread.sleep(100);
                     System.gc();
                     if (LogManager.getLogManager().getLogger(name) == null) {
-                        System.out.println("*** "+ name + " successfully replaced with " + l.getName());
+                        // The original logger may not have been gc'ed yet, since
+                        // it could still be referenced by the list being processed
+                        // by the loggerNamesThread, if that thread hasn't arrived
+                        // to the phaser yet...
+                        System.out.println("*** "+ name
+                                + " successfully replaced with " + l.getName());
                     }
                     i++;
                 } else {
                     System.out.println("Nothing to do for logger: " + name);
                 }
+                if (checkLoggerNamesFailed != null) {
+                    // The checkLoggerNames thread failed. No need to
+                    // continue.
+                    break;
+                }
+                // Waits for the checkLoggerNamesThread to arrive
                 phaser.arriveAndAwaitAdvance();
                 if (i >= 3 && i++ == 3) {
                     System.out.println("Loggers are now: " +
--- a/jdk/test/java/util/regex/RegExTest.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/util/regex/RegExTest.java	Wed Jul 05 20:33:55 2017 +0200
@@ -46,6 +46,7 @@
 import java.util.*;
 import java.nio.CharBuffer;
 import java.util.function.Predicate;
+import jdk.testlibrary.RandomFactory;
 
 /**
  * This is a test class created to check the operation of
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/security/auth/Subject/AddPrincipalSubclass.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8034820
+ * @summary Check that adding Principal subclasses to Subject works
+ */
+
+import java.security.Principal;
+import java.util.Collections;
+import java.util.Set;
+import javax.security.auth.Subject;
+
+public class AddPrincipalSubclass {
+
+    public static void main(String[] args) throws Exception {
+
+        // create Subject with no principals and then add TestPrincipal
+        Subject subject = new Subject();
+        Set<Principal> principals = subject.getPrincipals(Principal.class);
+        Principal principal = new TestPrincipal();
+        if (!principals.add(principal)) {
+            throw new Exception("add returned false instead of true");
+        }
+        if (!principals.contains(principal)) {
+            throw new Exception("set does not contain principal");
+        }
+
+        // pre-populate Subject with TestPrincipal
+        subject = new Subject(false,
+                              Collections.singleton(principal),
+                              Collections.emptySet(), Collections.emptySet());
+        principals = subject.getPrincipals(Principal.class);
+        if (!principals.contains(principal)) {
+            throw new Exception("set does not contain principal");
+        }
+    }
+
+    private static class TestPrincipal implements Principal {
+        @Override
+        public String getName() {
+            return "TestPrincipal";
+        }
+    }
+}
--- a/jdk/test/javax/swing/Headless/HeadlessBox.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessBox.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -142,7 +142,6 @@
             b.setName("goober");
             b.getName();
             b.getParent();
-            b.getPeer();
             b.getGraphicsConfiguration();
             b.getTreeLock();
             b.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessBox_Filler.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessBox_Filler.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -113,7 +113,6 @@
         bf.setName("goober");
         bf.getName();
         bf.getParent();
-        bf.getPeer();
         bf.getGraphicsConfiguration();
         bf.getTreeLock();
         bf.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessCellRendererPane.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessCellRendererPane.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -91,7 +91,6 @@
         crp.setName("goober");
         crp.getName();
         crp.getParent();
-        crp.getPeer();
         crp.getGraphicsConfiguration();
         crp.getTreeLock();
         crp.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessDefaultListCellRenderer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessDefaultListCellRenderer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -116,7 +116,6 @@
         dcr.setName("goober");
         dcr.getName();
         dcr.getParent();
-        dcr.getPeer();
         dcr.getGraphicsConfiguration();
         dcr.getTreeLock();
         dcr.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessDefaultListCellRenderer_UIResource.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessDefaultListCellRenderer_UIResource.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -116,7 +116,6 @@
         dcr.setName("goober");
         dcr.getName();
         dcr.getParent();
-        dcr.getPeer();
         dcr.getGraphicsConfiguration();
         dcr.getTreeLock();
         dcr.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJButton.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJButton.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -113,7 +113,6 @@
         b.setName("goober");
         b.getName();
         b.getParent();
-        b.getPeer();
         b.getGraphicsConfiguration();
         b.getTreeLock();
         b.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJCheckBox.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJCheckBox.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -116,7 +116,6 @@
         ch.setName("goober");
         ch.getName();
         ch.getParent();
-        ch.getPeer();
         ch.getGraphicsConfiguration();
         ch.getTreeLock();
         ch.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJCheckBoxMenuItem.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJCheckBoxMenuItem.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -113,7 +113,6 @@
         ch.setName("goober");
         ch.getName();
         ch.getParent();
-        ch.getPeer();
         ch.getGraphicsConfiguration();
         ch.getTreeLock();
         ch.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJColorChooser.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJColorChooser.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -113,7 +113,6 @@
         cc.setName("goober");
         cc.getName();
         cc.getParent();
-        cc.getPeer();
         cc.getGraphicsConfiguration();
         cc.getTreeLock();
         cc.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJComboBox.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJComboBox.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -113,7 +113,6 @@
         ch.setName("goober");
         ch.getName();
         ch.getParent();
-        ch.getPeer();
         ch.getGraphicsConfiguration();
         ch.getTreeLock();
         ch.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJComponent.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJComponent.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         ch.setName("goober");
         ch.getName();
         ch.getParent();
-        ch.getPeer();
         ch.getGraphicsConfiguration();
         ch.getTreeLock();
         ch.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJDesktopPane.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJDesktopPane.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         ch.setName("goober");
         ch.getName();
         ch.getParent();
-        ch.getPeer();
         ch.getGraphicsConfiguration();
         ch.getTreeLock();
         ch.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJEditorPane.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJEditorPane.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -115,7 +115,6 @@
         b.setName("goober");
         b.getName();
         b.getParent();
-        b.getPeer();
         b.getGraphicsConfiguration();
         b.getTreeLock();
         b.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJFileChooser.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJFileChooser.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         ch.setName("goober");
         ch.getName();
         ch.getParent();
-        ch.getPeer();
         ch.getGraphicsConfiguration();
         ch.getTreeLock();
         ch.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJInternalFrame.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJInternalFrame.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -135,7 +135,6 @@
         intf.setName("goober");
         intf.getName();
         intf.getParent();
-        intf.getPeer();
         intf.getGraphicsConfiguration();
         intf.getTreeLock();
         intf.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJInternalFrame_JDesktopIcon.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJInternalFrame_JDesktopIcon.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         jdi.setName("goober");
         jdi.getName();
         jdi.getParent();
-        jdi.getPeer();
         jdi.getGraphicsConfiguration();
         jdi.getTreeLock();
         jdi.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJLabel.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJLabel.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         l.setName("goober");
         l.getName();
         l.getParent();
-        l.getPeer();
         l.getGraphicsConfiguration();
         l.getTreeLock();
         l.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJLayeredPane.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJLayeredPane.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         lp.setName("goober");
         lp.getName();
         lp.getParent();
-        lp.getPeer();
         lp.getGraphicsConfiguration();
         lp.getTreeLock();
         lp.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJList.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJList.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         l.setName("goober");
         l.getName();
         l.getParent();
-        l.getPeer();
         l.getGraphicsConfiguration();
         l.getTreeLock();
         l.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJMenu.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJMenu.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -110,7 +110,6 @@
         m.setName("goober");
         m.getName();
         m.getParent();
-        m.getPeer();
         m.getGraphicsConfiguration();
         m.getTreeLock();
         m.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJMenuBar.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJMenuBar.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         mb.setName("goober");
         mb.getName();
         mb.getParent();
-        mb.getPeer();
         mb.getGraphicsConfiguration();
         mb.getTreeLock();
         mb.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJMenuItem.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJMenuItem.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         mi.setName("goober");
         mi.getName();
         mi.getParent();
-        mi.getPeer();
         mi.getGraphicsConfiguration();
         mi.getTreeLock();
         mi.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJOptionPane.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJOptionPane.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         op.setName("goober");
         op.getName();
         op.getParent();
-        op.getPeer();
         op.getGraphicsConfiguration();
         op.getTreeLock();
         op.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJPanel.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJPanel.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         p.setName("goober");
         p.getName();
         p.getParent();
-        p.getPeer();
         p.getGraphicsConfiguration();
         p.getTreeLock();
         p.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJPopupMenu.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJPopupMenu.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -110,7 +110,6 @@
         m.setName("goober");
         m.getName();
         m.getParent();
-        m.getPeer();
         m.getGraphicsConfiguration();
         m.getTreeLock();
         m.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJPopupMenu_Separator.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJPopupMenu_Separator.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         s.setName("goober");
         s.getName();
         s.getParent();
-        s.getPeer();
         s.getGraphicsConfiguration();
         s.getTreeLock();
         s.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJProgressBar.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJProgressBar.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         pb.setName("goober");
         pb.getName();
         pb.getParent();
-        pb.getPeer();
         pb.getGraphicsConfiguration();
         pb.getTreeLock();
         pb.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJRadioButton.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJRadioButton.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         rb.setName("goober");
         rb.getName();
         rb.getParent();
-        rb.getPeer();
         rb.getGraphicsConfiguration();
         rb.getTreeLock();
         rb.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJRadioButtonMenuItem.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJRadioButtonMenuItem.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         i.setName("goober");
         i.getName();
         i.getParent();
-        i.getPeer();
         i.getGraphicsConfiguration();
         i.getTreeLock();
         i.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJRootPane.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJRootPane.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         rp.setName("goober");
         rp.getName();
         rp.getParent();
-        rp.getPeer();
         rp.getGraphicsConfiguration();
         rp.getTreeLock();
         rp.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJScrollBar.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJScrollBar.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         sb.setName("goober");
         sb.getName();
         sb.getParent();
-        sb.getPeer();
         sb.getGraphicsConfiguration();
         sb.getTreeLock();
         sb.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJScrollPane.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJScrollPane.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         sp.setName("goober");
         sp.getName();
         sp.getParent();
-        sp.getPeer();
         sp.getGraphicsConfiguration();
         sp.getTreeLock();
         sp.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJSeparator.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJSeparator.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         sp.setName("goober");
         sp.getName();
         sp.getParent();
-        sp.getPeer();
         sp.getGraphicsConfiguration();
         sp.getTreeLock();
         sp.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJSlider.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJSlider.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         s.setName("goober");
         s.getName();
         s.getParent();
-        s.getPeer();
         s.getGraphicsConfiguration();
         s.getTreeLock();
         s.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJSpinner.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJSpinner.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         s.setName("goober");
         s.getName();
         s.getParent();
-        s.getPeer();
         s.getGraphicsConfiguration();
         s.getTreeLock();
         s.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJSplitPane.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJSplitPane.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -106,7 +106,6 @@
         s.setName("goober");
         s.getName();
         s.getParent();
-        s.getPeer();
         s.getGraphicsConfiguration();
         s.getTreeLock();
         s.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJTabbedPane.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJTabbedPane.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         s.setName("goober");
         s.getName();
         s.getParent();
-        s.getPeer();
         s.getGraphicsConfiguration();
         s.getTreeLock();
         s.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJTable.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJTable.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -135,7 +135,6 @@
         t.setName("goober");
         t.getName();
         t.getParent();
-        t.getPeer();
         t.getGraphicsConfiguration();
         t.getTreeLock();
         t.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJTextArea.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJTextArea.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -116,7 +116,6 @@
         t.setName("goober");
         t.getName();
         t.getParent();
-        t.getPeer();
         t.getGraphicsConfiguration();
         t.getTreeLock();
         t.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJTextField.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJTextField.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -116,7 +116,6 @@
         t.setName("goober");
         t.getName();
         t.getParent();
-        t.getPeer();
         t.getGraphicsConfiguration();
         t.getTreeLock();
         t.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJToggleButton.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJToggleButton.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         tb.setName("goober");
         tb.getName();
         tb.getParent();
-        tb.getPeer();
         tb.getGraphicsConfiguration();
         tb.getTreeLock();
         tb.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJToolBar.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJToolBar.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         tb.setName("goober");
         tb.getName();
         tb.getParent();
-        tb.getPeer();
         tb.getGraphicsConfiguration();
         tb.getTreeLock();
         tb.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJToolBar_Separator.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJToolBar_Separator.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         s.setName("goober");
         s.getName();
         s.getParent();
-        s.getPeer();
         s.getGraphicsConfiguration();
         s.getTreeLock();
         s.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJToolTip.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJToolTip.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         tt.setName("goober");
         tt.getName();
         tt.getParent();
-        tt.getPeer();
         tt.getGraphicsConfiguration();
         tt.getTreeLock();
         tt.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJTree.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJTree.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -153,7 +153,6 @@
         t.setName("goober");
         t.getName();
         t.getParent();
-        t.getPeer();
         t.getGraphicsConfiguration();
         t.getTreeLock();
         t.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJViewport.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJViewport.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -120,7 +120,6 @@
         v.setName("goober");
         v.getName();
         v.getParent();
-        v.getPeer();
         v.getGraphicsConfiguration();
         v.getTreeLock();
         v.getToolkit();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JColorChooser/Test4319113.html	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+<html>
+<body>
+1. Press button "Show ColorChooser" in the frame "frame" and
+   a color chooser dialog should appear.
+2. Without closing the color chooser, change Look And Feel
+   selecting it from the combobox in the frame "frame".
+   Dialog appearance will change.
+3. Resize the color chooser by mouse drag.
+
+   If you see some remnants of the previous color chooser,
+   press "Fail" else press "Pass".
+
+<applet width="500" height="400" code="Test4319113.class">
+</applet>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JColorChooser/Test4319113.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4319113
+ * @summary Tests the open JColorChooser behavior on LaF change.
+ * @author yan
+ * @run applet/manual=yesno Test4319113.html
+ */
+
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Frame;
+import java.awt.GridLayout;
+import java.awt.LayoutManager;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.io.PrintStream;
+import javax.swing.JApplet;
+import javax.swing.JButton;
+import javax.swing.JColorChooser;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+
+public class Test4319113
+extends JApplet
+implements ActionListener {
+    private final JFrame frame = new JFrame("frame");
+    private JComboBox cbPlaf;
+
+    @Override
+    public void init() {
+        try {
+            java.awt.EventQueue.invokeLater( () -> {
+                Test4319113.this.frame.setLayout(new GridLayout(2, 1));
+                Test4319113.this.show(Test4319113.this.frame);
+            });
+        }catch(Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent actionEvent) {
+        Object object = actionEvent.getSource();
+        Component component = object instanceof Component ? (Component)object : null;
+        JDialog jDialog = JColorChooser.createDialog(component, "ColorChooser", false, new JColorChooser(Color.BLUE), null, null);
+        jDialog.setVisible(true);
+    }
+
+    private void show(Window window) {
+        JButton jButton = new JButton("Show ColorChooser");
+        jButton.setActionCommand("Show ColorChooser");
+        jButton.addActionListener(this);
+        this.cbPlaf = new JComboBox<UIManager.LookAndFeelInfo>(UIManager.getInstalledLookAndFeels());
+        this.cbPlaf.addItemListener(new ItemListener(){
+
+            @Override
+            public void itemStateChanged(ItemEvent itemEvent) {
+                if (itemEvent.getStateChange() == 1) {
+                    SwingUtilities.invokeLater(new Runnable(){
+
+                        @Override
+                        public void run() {
+                            UIManager.LookAndFeelInfo lookAndFeelInfo = (UIManager.LookAndFeelInfo)Test4319113.this.cbPlaf.getSelectedItem();
+                            try {
+                                UIManager.setLookAndFeel(lookAndFeelInfo.getClassName());
+                                Frame[] arrframe = Frame.getFrames();
+                                int n = arrframe.length;
+                                while (--n >= 0) {
+                                    Test4319113.updateWindowTreeUI(arrframe[n]);
+                                }
+                            }
+                            catch (Exception var2_3) {
+                                System.err.println("Exception while changing L&F!");
+                            }
+                        }
+                    });
+                }
+            }
+
+        });
+        window.add(this.cbPlaf);
+        window.add(jButton);
+        window.pack();
+        window.setVisible(true);
+    }
+
+    private static void updateWindowTreeUI(Window window) {
+        SwingUtilities.updateComponentTreeUI(window);
+        Window[] arrwindow = window.getOwnedWindows();
+        int n = arrwindow.length;
+        while (--n >= 0) {
+            Window window2 = arrwindow[n];
+            if (!window2.isDisplayable()) continue;
+            Test4319113.updateWindowTreeUI(window2);
+        }
+    }
+
+}
--- a/jdk/test/javax/swing/JComboBox/6632953/bug6632953.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/JComboBox/6632953/bug6632953.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015 Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,23 +22,39 @@
  */
 
 /* @test
- * @bug 6632953
+ * @bug 6632953 8078614
  * @summary MetalComboBoxUI.getBaseline(JComponent, int, int) throws IAE for valid width/height
  * @author Alexander Potochkin
  */
-
 import javax.swing.JComboBox;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
 import javax.swing.plaf.metal.MetalComboBoxUI;
 
 public class bug6632953 {
 
     public static void main(String... args) throws Exception {
-        MetalComboBoxUI ui = new MetalComboBoxUI();
-        ui.installUI(new JComboBox());
-        ui.getBaseline(new JComboBox(), 0, 0);
-        ui.getBaseline(new JComboBox(), 1, 1);
-        ui.getBaseline(new JComboBox(), 2, 2);
-        ui.getBaseline(new JComboBox(), 3, 3);
-        ui.getBaseline(new JComboBox(), 4, 4);
+        SwingUtilities.invokeAndWait(new Runnable() {
+
+            @Override
+            public void run() {
+
+                for (UIManager.LookAndFeelInfo lafInfo
+                        : UIManager.getInstalledLookAndFeels()) {
+                    try {
+                        UIManager.setLookAndFeel(lafInfo.getClassName());
+                    } catch (Exception e) {
+                        throw new RuntimeException(e);
+                    }
+                    MetalComboBoxUI ui = new MetalComboBoxUI();
+                    ui.installUI(new JComboBox());
+                    ui.getBaseline(new JComboBox(), 0, 0);
+                    ui.getBaseline(new JComboBox(), 1, 1);
+                    ui.getBaseline(new JComboBox(), 2, 2);
+                    ui.getBaseline(new JComboBox(), 3, 3);
+                    ui.getBaseline(new JComboBox(), 4, 4);
+                }
+            }
+        });
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JComboBox/8072767/bug8072767.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,111 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ /*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import javax.swing.DefaultCellEditor;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JTable;
+import javax.swing.SwingUtilities;
+
+/**
+ * @test
+ * @bug 8072767
+ * @author Alexander Scherbatiy
+ * @summary DefaultCellEditor for comboBox creates ActionEvent with wrong source
+ *          object
+ * @run main bug8072767
+ */
+
+public class bug8072767 {
+
+    private static final String TEST1 = "Test";
+    private static final String TEST2 = TEST1 + 1;
+
+    private static JFrame frame;
+    private static JTable table;
+    private static Point point;
+    private static boolean testPass;
+
+    public static void main(String[] args) throws Exception {
+        Robot robot = new Robot();
+        robot.setAutoDelay(50);
+        SwingUtilities.invokeAndWait(bug8072767::createAndShowGUI);
+        robot.waitForIdle();
+        SwingUtilities.invokeAndWait(() -> {
+            point = table.getLocationOnScreen();
+            Rectangle rect = table.getCellRect(0, 0, true);
+            point.translate(rect.width / 2, rect.height / 2);
+        });
+        robot.mouseMove(point.x, point.y);
+        robot.mousePress(InputEvent.BUTTON1_MASK);
+        robot.mouseRelease(InputEvent.BUTTON1_MASK);
+        robot.waitForIdle();
+
+        robot.keyPress(KeyEvent.VK_1);
+        robot.keyRelease(KeyEvent.VK_1);
+        robot.waitForIdle();
+
+        SwingUtilities.invokeAndWait(() -> {
+            point = frame.getLocationOnScreen();
+            point.translate(frame.getWidth() / 2, frame.getHeight() / 2);
+        });
+
+        robot.mouseMove(point.x, point.y);
+        robot.mousePress(InputEvent.BUTTON1_MASK);
+        robot.mouseRelease(InputEvent.BUTTON1_MASK);
+        robot.waitForIdle();
+
+        SwingUtilities.invokeAndWait(() -> {
+            testPass = TEST2.equals(table.getValueAt(0, 0));
+            frame.dispose();
+        });
+
+        if (!testPass) {
+            throw new RuntimeException("Table cell is not edited!");
+        }
+    }
+
+    private static void createAndShowGUI() {
+        frame = new JFrame();
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        frame.setSize(200, 200);
+        frame.setLocation(100, 100);
+
+        table = new JTable(
+                new String[][]{{TEST1}}, new String[]{"Header"});
+        JComboBox<String> comboBox = new JComboBox<>();
+        comboBox.setEditable(true);
+        table.getColumnModel().getColumn(0).setCellEditor(
+                new DefaultCellEditor(comboBox));
+        frame.getContentPane().add(table);
+        frame.setVisible(true);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JOptionPane/4174551/bug4174551.html	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,36 @@
+<!--
+ Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+<html>
+<body>
+   Message Dialog should pop up
+   with a button font size 10 
+   and message font size 24.
+    
+   It should be true even on OS X.
+   If it is not so press "Fail" else press "Pass".
+
+<applet width="500" height="400" code="bug4174551.class">
+</applet>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JOptionPane/4174551/bug4174551.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4174551
+ * @summary JOptionPane should allow custom buttons
+ * @author Xhipra Tyagi(xhipra.tyagi@india.sun.com) area=Swing
+ * @run applet/manual=yesno bug4174551.html
+ */
+import java.awt.Font;
+import javax.swing.JApplet;
+import javax.swing.UIManager;
+import javax.swing.JOptionPane;
+
+public class bug4174551 extends JApplet {
+
+    public void init() {
+        try {
+            java.awt.EventQueue.invokeLater( () -> {
+                UIManager.getDefaults().put("OptionPane.buttonFont", new Font("Dialog", Font.PLAIN, 10));
+                UIManager.getDefaults().put("OptionPane.messageFont", new Font("Dialog", Font.PLAIN, 24));
+                JOptionPane.showMessageDialog(null, "HI 24!");
+
+                System.out.println(UIManager.getDefaults().get("OptionPane.buttonFont"));
+                System.out.println(UIManager.getDefaults().get("OptionPane.messageFont"));
+            });
+        }catch(Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTabbedPane/4666224/bug4666224.html	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,42 @@
+<!--
+ Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+<html>
+<!--
+  @test
+  @summary   Test that focus indicator is painted properly in JTabbedPane
+  @author Xhipra Tyagi(xhipra.tyagi@india.sun.com) area=Swing
+  @run applet/manual=done bug4666224.html
+  -->
+<head>
+<title> bug4666224 </title>
+</head>
+<body>
+
+<h1>bug4666224<br>Bug ID: 4666224 </h1>
+
+<p> See the dialog box (usually in upper left corner) for instructions</p>
+
+<APPLET CODE="bug4666224.class" WIDTH=300 HEIGHT=300></APPLET>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTabbedPane/4666224/bug4666224.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,554 @@
+/*
+ * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+/*
+ * test
+ * @bug 4666224
+*/
+
+public class bug4666224 extends JApplet {
+    final static int placements[] = { JTabbedPane.LEFT, JTabbedPane.RIGHT, JTabbedPane.TOP, JTabbedPane.BOTTOM };
+    private JTabbedPane tabPane;
+    private JPanel mainPanel;
+
+    public bug4666224() throws Exception {
+       java.awt.EventQueue.invokeAndWait( () -> {
+           tabPane = new JTabbedPane();
+           tabPane.addMouseListener(new MouseAdapter() {
+                public void mouseClicked(MouseEvent e) {
+                    Point pt = e.getPoint();
+                    System.out.println("Index at location: "
+                        + tabPane.indexAtLocation(pt.x, pt.y));
+                }
+            });
+            InputMap inputMap = createInputMap();
+            SwingUtilities.replaceUIInputMap(getRootPane(), JComponent.WHEN_IN_FOCUSED_WINDOW, inputMap);
+            ActionMap actionMap = createActionMap();
+            SwingUtilities.replaceUIActionMap(getRootPane(), actionMap);
+
+            //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+            tabPane.setTabPlacement(JTabbedPane.TOP);
+            tabPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
+            JPanel panel = new JPanel();
+            panel.setPreferredSize(new Dimension(200, 300));
+            tabPane.addTab("Number Zero", panel);
+            panel = new JPanel();
+            //panel.requestFocus();
+            panel.setPreferredSize(new Dimension(200, 300));
+            tabPane.addTab("Number One", panel);
+            panel = new JPanel();
+            panel.setPreferredSize(new Dimension(200, 300));
+            tabPane.addTab("Number Two", panel);
+            panel = new JPanel();
+            panel.setPreferredSize(new Dimension(200, 300));
+            tabPane.addTab("Number Three", new JColorChooser());
+            panel = new JPanel();
+            panel.setPreferredSize(new Dimension(200, 300));
+            tabPane.addTab("Number Four", panel);
+            mainPanel = new JPanel();
+            mainPanel.add(tabPane);
+
+            getContentPane().add(mainPanel);
+                    tabPane.requestFocus();
+
+
+            //pack();
+            //setVisible(true);
+        });
+    }
+
+    public void init() {
+                String[][] instructionsSet =
+                {
+                        {
+                                " Note : Incase of Assertion failure,user can enter",
+                                " remarks by pressing 'Assertion Fail Remarks ' button",
+                                " ",
+                                " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+                " ",
+                    " ON ALL PLATFORMS",
+                "1. Click on any of the tabs, focus indicator is visible",
+                    "2. Lose focus on the window by clicking on some other window ",
+                    "3. Focus indicator should disappear",
+                    "4. Regain focus on the window the focus indicator should reappear." ,
+                    " If focus doesn't behave as above, ",
+                    " press 'Assertion Fail' else press 'Assertion Pass'",
+                },
+
+                        {
+                                " Note : Incase of Assertion failure,user can enter",
+                                " remarks by pressing 'Assertion Fail Remarks ' button",
+                                " ",
+                                " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+                " ",
+                    " ON ALL PLATFORMS",
+                    "1. type 'R' to align the tabs to the right side ",
+                    "2. Lose focus on the window by clicking on some other window ",
+                    "3. Focus indicator should disappear",
+                    "4. Regain focus on the window the focus indicator should reappear." ,
+                    " If focus doesn't behave as above, ",
+                    " press 'Assertion Fail' else press 'Assertion Pass'",
+                },
+
+                {
+                                " Note : Incase of Assertion failure,user can enter",
+                                " remarks by pressing 'Assertion Fail Remarks ' button",
+                                " ",
+                                " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+                " ",
+                    " ON ALL PLATFORMS",
+                "1. type 'B' to align the tabs to the bottom side ",
+                    "2. Lose focus on the window by clicking on some other window ",
+                    "3. Focus indicator should disappear",
+                    "4. Regain focus on the window the focus indicator should reappear." ,
+                    " If focus doesn't behave as above, ",
+                    " press 'Assertion Fail' else press 'Assertion Pass'",
+                },
+
+                {
+                                " Note : Incase of Assertion failure,user can enter",
+                                " remarks by pressing 'Assertion Fail Remarks ' button",
+                                " ",
+                                " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+                " ",
+                    " ON ALL PLATFORMS",
+                    "1. type 'L' to align the tabs to the left side ",
+                    "2. Lose focus on the window by clicking on some other window ",
+                    "3. Focus indicator should disappear",
+                    "4. Regain focus on the window the focus indicator should reappear." ,
+                    " If focus doesn't behave as above, ",
+                    " press 'Assertion Fail' else press 'Assertion Pass'",
+                },
+
+                {
+                                " Note : Incase of Assertion failure,user can enter",
+                                " remarks by pressing 'Assertion Fail Remarks ' button",
+                                " ",
+                                " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+                " ",
+                    " ON ALL PLATFORMS",
+                    "1. type 'C' to change the tab layout to WRAP_TAB_LAYOUT ",
+                    "2. Lose focus on the window by clicking on some other window ",
+                    "3. Focus indicator should disappear",
+                    "4. Regain focus on the window the focus indicator should reappear." ,
+                    " If focus doesn't behave as above, ",
+                    " press 'Assertion Fail' else press 'Assertion Pass'",
+                },
+
+                {
+                                " Note : Incase of Assertion failure,user can enter",
+                                " remarks by pressing 'Assertion Fail Remarks ' button",
+                                " ",
+                                " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+                        " ",
+                    " ON ALL PLATFORMS",
+                        "1. type 'T' to align the tabs to the top side ",
+                        "2. Lose focus on the window by clicking on some other window ",
+                    "3. Focus indicator should disappear",
+                    "4. Regain focus on the window the focus indicator should reappear." ,
+                    " If focus doesn't behave as above, ",
+                    " press 'Assertion Fail' else press 'Assertion Pass'",
+                },
+
+                {
+                                " Note : Incase of Assertion failure,user can enter",
+                                " remarks by pressing 'Assertion Fail Remarks ' button",
+                                " ",
+                                " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+                " ",
+                    " ON ALL PLATFORMS",
+                        "1. type 'B' to align the tabs to the bottom side ",
+                        "2. Lose focus on the window by clicking on some other window ",
+                    "3. Focus indicator should disappear",
+                    "4. Regain focus on the window the focus indicator should reappear." ,
+                    " If focus doesn't behave as above, ",
+                    " press 'Assertion Fail' else press 'Assertion Pass'",
+                },
+
+                {
+                                " Note : Incase of Assertion failure,user can enter",
+                                " remarks by pressing 'Assertion Fail Remarks ' button",
+                                " ",
+                                " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+                        " ",
+                    " ON ALL PLATFORMS",
+                    "1. type 'R' to align the tabs to the right side ",
+                    "2. Lose focus on the window by clicking on some other window ",
+                    "3. Focus indicator should disappear",
+                    "4. Regain focus on the window the focus indicator should reappear." ,
+                    " If focus doesn't behave as above, ",
+                    " press 'Assertion Fail' else press 'Assertion Pass'",
+                }
+                };
+
+                String[] exceptionsSet =
+                {
+                        "Focus painted incorrectly in tabbed pane(SCROLL_TAB_LAYOUT) when tabs aligned to the TOP of the window",
+                        "Focus painted incorrectly in tabbed pane(SCROLL_TAB_LAYOUT) when tabs aligned to the RIGHT of the window",
+                        "Focus painted incorrectly in tabbed pane(SCROLL_TAB_LAYOUT) when tabs aligned to the BOTTOM of the window",
+                        "Focus painted incorrectly in tabbed pane(SCROLL_TAB_LAYOUT) when tabs aligned to the LEFT of the window",
+                        "Focus painted incorrectly in tabbed pane(WRAP_TAB_LAYOUT) when tabs aligned to the LEFT of the window",
+                        "Focus painted incorrectly in tabbed pane(WRAP_TAB_LAYOUT) when tabs aligned to the TOP of the window",
+                        "Focus painted incorrectly in tabbed pane(WRAP_TAB_LAYOUT) when tabs aligned to the BOTTOM of the window",
+                        "Focus painted incorrectly in tabbed pane(WRAP_TAB_LAYOUT) when tabs aligned to the RIGHT of the window"
+                };
+
+                Sysout.setInstructionsWithExceptions(instructionsSet,exceptionsSet);
+
+        }
+
+        public void start (){}
+
+        public void destroy(){
+            if(Sysout.failStatus())    {
+                String failMsg = Sysout.getFailureMessages();
+                failMsg = failMsg.replace('\n',' ');
+                throw new RuntimeException(failMsg);
+            }// End destroy
+    }
+
+    protected InputMap createInputMap() {
+        return LookAndFeel.makeComponentInputMap(getRootPane(), new Object[] {
+            "R", "right",
+            "L", "left",
+            "T", "top",
+            "B", "bottom",
+            "C", "changeLayout",
+            "D", "dump"
+        });
+    }
+
+    protected ActionMap createActionMap() {
+        ActionMap map = new ActionMap();
+        map.put("right", new RotateAction(JTabbedPane.RIGHT));
+        map.put("left", new RotateAction(JTabbedPane.LEFT));
+        map.put("top", new RotateAction(JTabbedPane.TOP));
+        map.put("bottom", new RotateAction(JTabbedPane.BOTTOM));
+        map.put("changeLayout", new ChangeLayoutAction());
+        map.put("dump", new DumpAction());
+        return map;
+    }
+
+    private class RotateAction extends AbstractAction {
+        private int placement;
+        public RotateAction(int placement) {
+            this.placement = placement;
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            tabPane.setTabPlacement(placement);
+        }
+    }
+
+    private class ChangeLayoutAction extends AbstractAction {
+        private boolean a = true;
+        public void actionPerformed(ActionEvent e) {
+            if (a) {
+                tabPane.setTabLayoutPolicy(JTabbedPane.WRAP_TAB_LAYOUT);
+                a = false;
+            } else {
+                tabPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
+                a = true;
+            }
+        }
+    }
+
+    private class DumpAction extends AbstractAction {
+        public void actionPerformed(ActionEvent e) {
+            for (int i = 0; i < tabPane.getTabCount(); i++) {
+                System.out.println("Tab: " + i + " "
+                    + tabPane.getUI().getTabBounds(tabPane, i));
+            }
+        }
+    }
+}
+
+
+/****************************************************
+ Standard Test Machinery
+ DO NOT modify anything below -- it's a standard
+  chunk of code whose purpose is to make user
+  interaction uniform, and thereby make it simpler
+  to read and understand someone else's test.
+ ****************************************************/
+
+/**
+ This is part of the standard test machinery.
+ It creates a dialog (with the instructions), and is the interface
+  for sending text messages to the user.
+ To print the instructions, send an array of strings to Sysout.createDialog
+  WithInstructions method.  Put one line of instructions per array entry.
+ To display a message for the tester to see, simply call Sysout.println
+  with the string to be displayed.
+ This mimics System.out.println but works within the test harness as well
+  as standalone.
+ */
+
+class Sysout
+ {
+   private static TestDialog dialog;
+
+   public static void createDialogWithInstructions( String[] instructions )
+    {
+      dialog = new TestDialog( new Frame(), "Instructions" );
+      dialog.printInstructions( instructions );
+      dialog.show();
+      println( "Any messages for the tester will display here." );
+    }
+
+   public static void createDialog( )
+    {
+      dialog = new TestDialog( new Frame(), "Instructions" );
+      String[] defInstr = { "Instructions will appear here. ", "" } ;
+      dialog.printInstructions( defInstr );
+      dialog.show();
+      println( "Any messages for the tester will display here." );
+    }
+
+
+   public static void printInstructions( String[] instructions )
+    {
+      dialog.printInstructions( instructions );
+    }
+
+
+   public static void println( String messageIn )
+    {
+      dialog.displayMessage( messageIn );
+    }
+
+   public static void setInstructionsWithExceptions(String instructionsSet[][],
+                                                    String exceptionsSet[]) {
+       createDialogWithInstructions(instructionsSet[0]);
+       dialog.setInstructions(instructionsSet);
+       dialog.setExceptionMessages(exceptionsSet);
+   }
+
+   public static String getFailureMessages()   {
+       return dialog.failureMessages;
+   }
+
+   public static boolean failStatus()  {
+       return dialog.failStatus;
+   }
+
+ }// Sysout  class
+
+/**
+  This is part of the standard test machinery.  It provides a place for the
+   test instructions to be displayed, and a place for interactive messages
+   to the user to be displayed.
+  To have the test instructions displayed, see Sysout.
+  To have a message to the user be displayed, see Sysout.
+  Do not call anything in this dialog directly.
+  */
+class TestDialog extends Dialog
+ {
+
+   TextArea instructionsText;
+   TextArea messageText;
+   int maxStringLength = 70;
+
+   Panel assertPanel;
+   Button assertPass,assertFail,remarks;
+   HandleAssert handleAssert;
+   boolean failStatus=false;
+   int instructionCounter=0;
+   String instructions[][];
+   int exceptionCounter=0;
+   String exceptionMessages[];
+   String failureMessages="<br>";
+   String remarksMessage=null;
+   RemarksDialog remarksDialog;
+
+   //DO NOT call this directly, go through Sysout
+   public TestDialog( Frame frame, String name )
+    {
+      super( frame, name );
+      int scrollBoth = TextArea.SCROLLBARS_BOTH;
+      instructionsText = new TextArea( "", 14, maxStringLength, scrollBoth );
+      add( "North", instructionsText );
+
+      messageText = new TextArea( "", 3, maxStringLength, scrollBoth );
+      add("Center", messageText);
+
+      assertPanel = new Panel(new FlowLayout());
+      assertPass=new Button("Assertion Pass");
+      assertPass.setName("Assertion Pass");
+      assertFail=new Button("Assertion Fail");
+      assertFail.setName("Assertion Fail");
+      remarks = new Button("Assertion Fail Remarks");
+      remarks.setEnabled(false);
+      remarks.setName("Assertion Remarks");
+      assertPanel.add(assertPass);
+      assertPanel.add(assertFail);
+      assertPanel.add(remarks);
+      handleAssert = new HandleAssert();
+      assertPass.addActionListener(handleAssert);
+      assertFail.addActionListener(handleAssert);
+      remarks.addActionListener(handleAssert);
+      add("South",assertPanel);
+      pack();
+
+      show();
+    }// TestDialog()
+
+   //DO NOT call this directly, go through Sysout
+   public void printInstructions( String[] instructions )
+    {
+      //Clear out any current instructions
+      instructionsText.setText( "" );
+
+      //Go down array of instruction strings
+
+      String printStr, remainingStr;
+      for( int i=0; i < instructions.length; i++ )
+       {
+     //chop up each into pieces maxSringLength long
+     remainingStr = instructions[ i ];
+     while( remainingStr.length() > 0 )
+      {
+        //if longer than max then chop off first max chars to print
+        if( remainingStr.length() >= maxStringLength )
+         {
+           //Try to chop on a word boundary
+           int posOfSpace = remainingStr.
+          lastIndexOf( ' ', maxStringLength - 1 );
+
+           if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
+
+           printStr = remainingStr.substring( 0, posOfSpace + 1 );
+           remainingStr = remainingStr.substring( posOfSpace + 1 );
+         }
+        //else just print
+        else
+         {
+           printStr = remainingStr;
+           remainingStr = "";
+         }
+
+            instructionsText.append( printStr + "\n" );
+
+      }// while
+
+       }// for
+
+    }//printInstructions()
+
+   //DO NOT call this directly, go through Sysout
+   public void displayMessage( String messageIn )
+    {
+      messageText.append( messageIn + "\n" );
+    }
+
+   public void emptyMessage()   {
+       messageText.setText("");
+   }
+
+   public void setInstructions(String insStr[][])    {
+       instructions=insStr;
+   }
+
+   public void setExceptionMessages(String exceptionMessages[])   {
+       this.exceptionMessages=exceptionMessages;
+   }
+
+   class HandleAssert implements ActionListener   {
+        public void actionPerformed(ActionEvent ae)    {
+           if(ae.getSource()==remarks)  {
+               remarksDialog = new RemarksDialog(TestDialog.this,
+                                        "Assertion Remarks Dialog",true);
+               remarks.setEnabled(false);
+               if(remarksMessage!=null)
+                    failureMessages+=". User Remarks : "+remarksMessage;
+           }
+           else {
+               if(instructionCounter<instructions.length-1) {
+                   emptyMessage();
+                   instructionCounter++;
+                   printInstructions(instructions[instructionCounter]);
+               }
+               else {
+                   emptyMessage();
+                   displayMessage("Testcase Completed");
+                   displayMessage("Press 'Done' button in the "+
+                                                    "BaseApplet to close");
+                   assertPass.setEnabled(false);
+                   assertFail.setEnabled(false);
+               }
+
+               if(ae.getSource()==assertPass)    {
+                   // anything to be done in future
+               }
+               else if(ae.getSource()==assertFail)   {
+                   remarks.setEnabled(true);
+                   if(!failStatus)
+                       failStatus=true;
+                   if(exceptionCounter<exceptionMessages.length)   {
+                        failureMessages = failureMessages + "<br>"+
+                                    exceptionMessages[exceptionCounter];
+                   }
+               }
+               exceptionCounter++;
+           }
+        }
+    }
+
+    class RemarksDialog extends Dialog  implements ActionListener{
+        Panel rootPanel,remarksPanel;
+        TextArea textarea;
+        Button addRemarks,cancelRemarks;
+        public RemarksDialog(Dialog owner,String title,boolean modal)  {
+            super(owner,title,modal);
+            rootPanel = new Panel(new BorderLayout());
+            remarksPanel = new Panel(new FlowLayout());
+            textarea = new TextArea(5,30);
+            addRemarks=new Button("Add Remarks");
+            addRemarks.addActionListener(this);
+            cancelRemarks = new Button("Cancel Remarks");
+            cancelRemarks.addActionListener(this);
+            remarksPanel.add(addRemarks);
+            remarksPanel.add(cancelRemarks);
+            rootPanel.add(textarea,"Center");
+            rootPanel.add(remarksPanel,"South");
+            add(rootPanel);
+            setBounds(150,150,400,200);
+            setVisible(true);
+        }
+
+        public void actionPerformed(ActionEvent ae) {
+            remarksMessage=null;
+            if(ae.getSource()==addRemarks)  {
+                String msg = textarea.getText().trim();
+                if (msg.length()>0)
+                    remarksMessage=msg;
+            }
+            dispose();
+        }
+
+    }
+
+}// TestDialog  class
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JToolTip/4644444/bug4644444.html	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,44 @@
+<!--
+ Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+
+<html>
+<!--
+  @test
+  @summary   JToolTip is shown improperly when placed very close to screen boundaries
+  @bug 4644444 8076246
+  @author Xhipra Tyagi(xhipra.tyagi@india.sun.com) area=Swing
+  @run applet/manual=done bug4644444.html
+  -->
+<head>
+<title> bug4644444 </title>
+</head>
+<body>
+
+<h1>bug4644444<br>Bug ID: 4644444 </h1>
+
+<p> See the dialog box (usually in upper left corner) for instructions</p>
+
+<APPLET CODE="bug4644444.class" WIDTH=50 HEIGHT=40></APPLET>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JToolTip/4644444/bug4644444.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,354 @@
+/*
+ * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.*;
+import javax.swing.*;
+import java.awt.event.*;
+
+/*
+ * test
+ * @bug  4644444 8076246
+*/
+
+public class bug4644444 extends JApplet {
+
+        JPanel panel;
+        JButton button;
+
+        public bug4644444() throws Exception {
+            java.awt.EventQueue.invokeLater( () -> {
+                panel = new JPanel();
+                button = new JButton("whooo");
+                button.setToolTipText("Somthing really long 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890");
+                panel.add(button);
+                getContentPane().add(panel);
+            });
+    }
+
+    public void init() {
+                String[][] instructionsSet =
+                {
+                        {
+                                " Note : Incase of Assertion failure,user can enter",
+                                " remarks by pressing 'Assertion Fail Remarks ' button",
+                                " ",
+                                " You would see a testframe with a Button",
+                        " ",
+                                " ON ALL PLATFORMS",
+                        "1. Move the mouse on the button, ",
+                        "   so that the tooltip attached to it comes up ",
+                        "2. Tool tip should get adjusted it-self to show ",
+                        "       its full length of text. ",
+                        "3. If tooltip  text gets cut, ",
+                        "   press 'Assertion Fail' else press 'Assertion Pass'",
+                        "4. Similarly, move the applet to different locations of the screen, ",
+                        "   & see if tooltip works properly everywhere. "
+                        }
+                };
+
+                String[] exceptionsSet =
+                {
+                        "JToolTip is shown partially when placed very close to screen boundaries",
+                };
+
+                Sysout.setInstructionsWithExceptions(instructionsSet,exceptionsSet);
+
+        }
+
+        public void start (){}
+
+        public void destroy(){
+            if(Sysout.failStatus())    {
+                String failMsg = Sysout.getFailureMessages();
+                failMsg = failMsg.replace('\n',' ');
+                throw new RuntimeException(failMsg);
+            }// End destroy
+        }
+}
+
+
+/****************************************************
+ Standard Test Machinery
+ DO NOT modify anything below -- it's a standard
+  chunk of code whose purpose is to make user
+  interaction uniform, and thereby make it simpler
+  to read and understand someone else's test.
+ ****************************************************/
+
+/**
+ This is part of the standard test machinery.
+ It creates a dialog (with the instructions), and is the interface
+  for sending text messages to the user.
+ To print the instructions, send an array of strings to Sysout.createDialog
+  WithInstructions method.  Put one line of instructions per array entry.
+ To display a message for the tester to see, simply call Sysout.println
+  with the string to be displayed.
+ This mimics System.out.println but works within the test harness as well
+  as standalone.
+ */
+
+class Sysout
+ {
+   private static TestDialog dialog;
+
+   public static void createDialogWithInstructions( String[] instructions )
+    {
+      dialog = new TestDialog( new Frame(), "Instructions" );
+      dialog.printInstructions( instructions );
+      dialog.show();
+      println( "Any messages for the tester will display here." );
+    }
+
+   public static void createDialog( )
+    {
+      dialog = new TestDialog( new Frame(), "Instructions" );
+      String[] defInstr = { "Instructions will appear here. ", "" } ;
+      dialog.printInstructions( defInstr );
+      dialog.show();
+      println( "Any messages for the tester will display here." );
+    }
+
+
+   public static void printInstructions( String[] instructions )
+    {
+      dialog.printInstructions( instructions );
+    }
+
+
+   public static void println( String messageIn )
+    {
+      dialog.displayMessage( messageIn );
+    }
+
+   public static void setInstructionsWithExceptions(String instructionsSet[][],
+                                                    String exceptionsSet[]) {
+       createDialogWithInstructions(instructionsSet[0]);
+       dialog.setInstructions(instructionsSet);
+       dialog.setExceptionMessages(exceptionsSet);
+   }
+
+   public static String getFailureMessages()   {
+       return dialog.failureMessages;
+   }
+
+   public static boolean failStatus()  {
+       return dialog.failStatus;
+   }
+
+ }// Sysout  class
+
+/**
+  This is part of the standard test machinery.  It provides a place for the
+   test instructions to be displayed, and a place for interactive messages
+   to the user to be displayed.
+  To have the test instructions displayed, see Sysout.
+  To have a message to the user be displayed, see Sysout.
+  Do not call anything in this dialog directly.
+  */
+class TestDialog extends Dialog
+ {
+
+   TextArea instructionsText;
+   TextArea messageText;
+   int maxStringLength = 70;
+
+   Panel assertPanel;
+   Button assertPass,assertFail,remarks;
+   HandleAssert handleAssert;
+   boolean failStatus=false;
+   int instructionCounter=0;
+   String instructions[][];
+   int exceptionCounter=0;
+   String exceptionMessages[];
+   String failureMessages="<br>";
+   String remarksMessage=null;
+   RemarksDialog remarksDialog;
+
+   //DO NOT call this directly, go through Sysout
+   public TestDialog( Frame frame, String name )
+    {
+      super( frame, name );
+      int scrollBoth = TextArea.SCROLLBARS_BOTH;
+      instructionsText = new TextArea( "", 14, maxStringLength, scrollBoth );
+      add( "North", instructionsText );
+
+      messageText = new TextArea( "", 3, maxStringLength, scrollBoth );
+      add("Center", messageText);
+
+      assertPanel = new Panel(new FlowLayout());
+      assertPass=new Button("Assertion Pass");
+      assertPass.setName("Assertion Pass");
+      assertFail=new Button("Assertion Fail");
+      assertFail.setName("Assertion Fail");
+      remarks = new Button("Assertion Fail Remarks");
+      remarks.setEnabled(false);
+      remarks.setName("Assertion Remarks");
+      assertPanel.add(assertPass);
+      assertPanel.add(assertFail);
+      assertPanel.add(remarks);
+      handleAssert = new HandleAssert();
+      assertPass.addActionListener(handleAssert);
+      assertFail.addActionListener(handleAssert);
+      remarks.addActionListener(handleAssert);
+      add("South",assertPanel);
+      pack();
+
+      show();
+    }// TestDialog()
+
+   //DO NOT call this directly, go through Sysout
+   public void printInstructions( String[] instructions )
+    {
+      //Clear out any current instructions
+      instructionsText.setText( "" );
+
+      //Go down array of instruction strings
+
+      String printStr, remainingStr;
+      for( int i=0; i < instructions.length; i++ )
+       {
+     //chop up each into pieces maxSringLength long
+     remainingStr = instructions[ i ];
+     while( remainingStr.length() > 0 )
+      {
+        //if longer than max then chop off first max chars to print
+        if( remainingStr.length() >= maxStringLength )
+         {
+           //Try to chop on a word boundary
+           int posOfSpace = remainingStr.
+          lastIndexOf( ' ', maxStringLength - 1 );
+
+           if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
+
+           printStr = remainingStr.substring( 0, posOfSpace + 1 );
+           remainingStr = remainingStr.substring( posOfSpace + 1 );
+         }
+        //else just print
+        else
+         {
+           printStr = remainingStr;
+           remainingStr = "";
+         }
+
+            instructionsText.append( printStr + "\n" );
+
+      }// while
+
+       }// for
+
+    }//printInstructions()
+
+   //DO NOT call this directly, go through Sysout
+   public void displayMessage( String messageIn )
+    {
+      messageText.append( messageIn + "\n" );
+    }
+
+   public void emptyMessage()   {
+       messageText.setText("");
+   }
+
+   public void setInstructions(String insStr[][])    {
+       instructions=insStr;
+   }
+
+   public void setExceptionMessages(String exceptionMessages[])   {
+       this.exceptionMessages=exceptionMessages;
+   }
+
+   class HandleAssert implements ActionListener   {
+        public void actionPerformed(ActionEvent ae)    {
+           if(ae.getSource()==remarks)  {
+               remarksDialog = new RemarksDialog(TestDialog.this,
+                                        "Assertion Remarks Dialog",true);
+               remarks.setEnabled(false);
+               if(remarksMessage!=null)
+                    failureMessages+=". User Remarks : "+remarksMessage;
+           }
+           else {
+               if(instructionCounter<instructions.length-1) {
+                   emptyMessage();
+                   instructionCounter++;
+                   printInstructions(instructions[instructionCounter]);
+               }
+               else {
+                   emptyMessage();
+                   displayMessage("Testcase Completed");
+                   displayMessage("Press 'Done' button in the "+
+                                                    "BaseApplet to close");
+                   assertPass.setEnabled(false);
+                   assertFail.setEnabled(false);
+               }
+
+               if(ae.getSource()==assertPass)    {
+                   // anything to be done in future
+               }
+               else if(ae.getSource()==assertFail)   {
+                   remarks.setEnabled(true);
+                   if(!failStatus)
+                       failStatus=true;
+                   if(exceptionCounter<exceptionMessages.length)   {
+                        failureMessages = failureMessages + "<br>"+
+                                    exceptionMessages[exceptionCounter];
+                   }
+               }
+               exceptionCounter++;
+           }
+        }
+    }
+
+    class RemarksDialog extends Dialog  implements ActionListener{
+        Panel rootPanel,remarksPanel;
+        TextArea textarea;
+        Button addRemarks,cancelRemarks;
+        public RemarksDialog(Dialog owner,String title,boolean modal)  {
+            super(owner,title,modal);
+            rootPanel = new Panel(new BorderLayout());
+            remarksPanel = new Panel(new FlowLayout());
+            textarea = new TextArea(5,30);
+            addRemarks=new Button("Add Remarks");
+            addRemarks.addActionListener(this);
+            cancelRemarks = new Button("Cancel Remarks");
+            cancelRemarks.addActionListener(this);
+            remarksPanel.add(addRemarks);
+            remarksPanel.add(cancelRemarks);
+            rootPanel.add(textarea,"Center");
+            rootPanel.add(remarksPanel,"South");
+            add(rootPanel);
+            setBounds(150,150,400,200);
+            setVisible(true);
+        }
+
+        public void actionPerformed(ActionEvent ae) {
+            remarksMessage=null;
+            if(ae.getSource()==addRemarks)  {
+                String msg = textarea.getText().trim();
+                if (msg.length()>0)
+                    remarksMessage=msg;
+            }
+            dispose();
+        }
+
+    }
+
+}// TestDialog  class
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/plaf/aqua/CustomComboBoxFocusTest.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,327 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+   @bug     8073001
+   @summary Test verifies that combo box with custom editor renders
+            focus ring around arrow button correctly.
+   @run     main CustomComboBoxFocusTest
+*/
+
+import java.awt.AWTException;
+import java.awt.Component;
+import java.awt.GridLayout;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.concurrent.CountDownLatch;
+import javax.imageio.ImageIO;
+import javax.swing.ComboBoxEditor;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+
+public class CustomComboBoxFocusTest {
+
+    private static CustomComboBoxFocusTest test = null;
+
+    public static void main(String[] args) {
+
+        try {
+            SwingUtilities.invokeAndWait(new Runnable() {
+                public void run() {
+                    test = new CustomComboBoxFocusTest();
+                }
+            });
+        } catch (InterruptedException | InvocationTargetException e ) {
+            throw new RuntimeException("Test failed.", e);
+        }
+
+        SwingUtilities.invokeLater(test.init);
+
+        try {
+            System.out.println("Wait for screenshots...");
+            test.testDone.await();
+        } catch (InterruptedException e) {
+            throw new RuntimeException("Test failed.", e);
+        }
+        System.out.println("Compare screenshots...");
+        if (!test.match()) {
+            throw new RuntimeException("Test failed.");
+        }
+        System.out.println("Test passed.");
+    }
+
+    private final JComboBox<String> ref = new JComboBox<String>() {
+        public String toString() {
+            return "reference";
+        }
+    };
+
+    private final JComboBox<String> custom = new JComboBox<String>() {
+        public String toString() {
+            return "custom";
+        }
+    };
+
+    private final JFrame frame;
+
+    private CountDownLatch testDone = new CountDownLatch(1);
+
+    private Robot robot;
+
+    public CustomComboBoxFocusTest() {
+        frame = new JFrame(System.getProperty("java.version"));
+
+        try {
+            robot = new Robot(frame.getGraphicsConfiguration().getDevice());
+
+        } catch (AWTException e) {
+            throw new RuntimeException("Test failed.", e);
+        }
+    }
+
+    private boolean match() {
+        final BufferedImage a = captureRef.img;
+        final BufferedImage b = captureCustom.img;
+
+        final int w = Math.min(a.getWidth(), b.getWidth());
+        final int h = Math.min(a.getHeight(), b.getHeight());
+
+        for (int y = 0; y < h; y++) {
+            for (int x = 0; x < w; x++) {
+                if (a.getRGB(x, y) != b.getRGB(x, y)) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    private JComboBox<String> getReference() {
+        return ref;
+    }
+
+    private JComboBox<String> getCustom() {
+        return custom;
+    }
+
+    private JFrame getFrame() {
+        return frame;
+    }
+
+    private static abstract class Step implements Runnable {
+        final public void run() {
+            doStep();
+
+            final Step next = nextStep();
+
+            if (next != null) {
+                SwingUtilities.invokeLater(next);
+            }
+        }
+
+        public abstract void doStep();
+
+        public abstract Step nextStep();
+    }
+
+    private final Step init = new Step() {
+        public void doStep() {
+            final JFrame f = getFrame();
+
+            final JPanel p = new JPanel(new GridLayout(4, 1, 20, 20));
+
+            JComboBox<String> r = getReference();
+            r.setEditable(true);
+            r.addItem("One");
+
+            JComboBox<String> c = getCustom();
+            c.setEditable(true);
+            c.addItem("One");
+            final ComboBoxEditor e = new ComboBoxEditor() {
+                private JTextField text = new JTextField();
+
+                @Override
+                public Component getEditorComponent() {
+                    return this.text;
+                }
+
+                @Override
+                public void setItem(Object o) {
+                    text.setText(o == null ? "" : o.toString());
+                }
+
+                @Override
+                public Object getItem() {
+                    return text.getText();
+                }
+
+                @Override
+                public void selectAll() {
+                    text.selectAll();
+                }
+
+                @Override
+                public void addActionListener(ActionListener actionListener) {
+                    text.addActionListener(actionListener);
+                }
+
+                @Override
+                public void removeActionListener(ActionListener actionListener) {
+                    text.removeActionListener(actionListener);
+                }
+            };
+            c.setEditor(e);
+
+            p.add(new JLabel("Reference"));
+            p.add(r);
+            p.add(c);
+            p.add(new JLabel("Custom"));
+
+            f.add(p);
+
+            f.pack();
+            f.setVisible(true);
+        }
+
+        public Step nextStep() {
+            return focusRef;
+        }
+    };
+
+    private class FocusStep extends Step {
+        private final JComboBox<String> target;
+        private final Step focusHandler;
+        private final Step next;
+
+        public FocusStep(JComboBox<String> t, Step h, Step n) {
+            target = t;
+            focusHandler = h;
+            next = n;
+        }
+
+        public void doStep() {
+            System.out.println("Request focus on " + target);
+            final Component c = target.getEditor().getEditorComponent();
+
+            c.addFocusListener(new FocusListener() {
+                @Override
+                public void focusGained(FocusEvent e) {
+                    SwingUtilities.invokeLater(focusHandler);
+                }
+
+                @Override
+                public void focusLost(FocusEvent e) {
+
+                }
+            });
+
+            c.requestFocus();
+
+        }
+
+        public Step nextStep() {
+            return next;
+        }
+    }
+
+
+    private class CaptureStep extends Step {
+        private final JComboBox<String> target;
+        private BufferedImage img;
+        private String fname;
+        private final Step next;
+
+        private final int timeout = 2000;
+
+        public CaptureStep(JComboBox<String> t, String name, Step n) {
+            target = t;
+            next = n;
+            fname = name;
+        }
+
+        public void doStep() {
+            try {
+                Thread.sleep(timeout);
+            } catch (InterruptedException e) {
+            }
+            System.out.println("Capture sceeenshot of " + target);
+
+            Rectangle bounds = target.getBounds();
+            Point p = target.getLocationOnScreen();
+            System.out.println("Target bounds: " + bounds);
+            System.out.println("Target location: " + p);
+
+            bounds.x = p.x;
+            bounds.y = p.y;
+
+            img = robot.createScreenCapture(bounds);
+
+            try {
+                ImageIO.write(img, "PNG", new File(fname + ".png"));
+            } catch (IOException ioe) {
+                ioe.printStackTrace();
+            }
+
+        }
+
+        public Step nextStep() {
+            return next;
+        }
+    }
+
+    private final Step done = new Step() {
+        public void doStep() {
+            JFrame f = getFrame();
+            if (f != null) {
+                f.dispose();
+            }
+            System.out.println("Done");
+
+            testDone.countDown();
+        }
+
+        public Step nextStep() {
+            return null;
+        }
+    };
+
+    private final CaptureStep captureCustom = new CaptureStep(getCustom(), "cb_custom", done);
+
+    private final FocusStep focusCustom = new FocusStep(getCustom(), captureCustom, null);
+
+    private final CaptureStep captureRef = new CaptureStep(getReference(), "cb_ref", focusCustom);
+
+    private final FocusStep focusRef = new FocusStep(getReference(), captureRef, null);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/plaf/basic/6866751/bug6866751.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+   @bug 6866751
+   @summary J2SE_Swing_Reg: the caret disappears when moving to the end of the line.
+   @author Semyon Sadetsky
+  */
+import javax.swing.*;
+
+public class bug6866751 {
+    private static JFrame frame;
+    private static JTextArea area;
+
+    public static void main(String[] args) throws Exception {
+        try {
+            SwingUtilities.invokeAndWait(new Runnable() {
+                public void run() {
+                    frame = new JFrame();
+                    frame.setUndecorated(true);
+                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+                    setup(frame);
+                }
+            });
+            SwingUtilities.invokeAndWait(new Runnable() {
+                public void run() {
+                    int width = area.getWidth();
+                    double caretX =
+                            area.getCaret().getMagicCaretPosition().getX();
+                    if (width < caretX + 1) {
+                        throw new RuntimeException(
+                                "Width of the area (" + width +
+                                        ") is less than caret x-position " +
+                                        caretX + 1);
+                    }
+                    area.putClientProperty("caretWidth", 10);
+                }
+            });
+            SwingUtilities.invokeAndWait(new Runnable() {
+                public void run() {
+                    int width = area.getWidth();
+                    double caretX =
+                            area.getCaret().getMagicCaretPosition().getX();
+                    if (width < caretX + 10) {
+                        throw new RuntimeException(
+                                "Width of the area (" + width +
+                                        ") is less  than caret x-position " +
+                                        caretX + 10);
+                    }
+                }
+            });
+            System.out.println("ok");
+        } finally {
+            SwingUtilities.invokeAndWait(new Runnable() {
+                @Override
+                public void run() {
+                    frame.dispose();
+                }
+            });
+        }
+    }
+
+    static void setup(JFrame frame) {
+        area = new JTextArea();
+        frame.getContentPane().add(new JScrollPane(area));
+        area.setText(
+                "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm");
+        area.getCaret().setDot(area.getText().length() + 1);
+
+        frame.setSize(300, 200);
+        frame.setVisible(true);
+
+        area.requestFocus();
+
+    }
+
+}
--- a/jdk/test/javax/swing/plaf/windows/6921687/bug6921687.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/plaf/windows/6921687/bug6921687.java	Wed Jul 05 20:33:55 2017 +0200
@@ -22,12 +22,13 @@
  */
 
 /* @test
-   @bug 6921687
+   @bug 6921687 8079428
    @summary Mnemonic disappears after repeated attempts to open menu items using
    mnemonics
    @author Semyon Sadetsky
    @library /lib/testlibrary
    @build jdk.testlibrary.OSInfo
+   @run main bug6921687
   */
 
 
@@ -109,4 +110,4 @@
         frame.setVisible(true);
 
     }
-}
\ No newline at end of file
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/text/html/8031109/bug8031109.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.net.URL;
+import javax.swing.JEditorPane;
+import javax.swing.JFrame;
+import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
+import javax.swing.text.EditorKit;
+/*
+ * @test
+ * @bug 8031109
+ * @author Victor Dyakov
+ * @summary  Rendering HTML code in JEditorPane throws NumberFormatException
+ * @run main bug8031109
+ */
+public class bug8031109 {
+
+    private static final String TEXT_HTML = "text/html";
+
+    public static void main(String[] args) throws Exception {
+        SwingUtilities.invokeAndWait(new Runnable() {
+
+            @Override
+            public void run() {
+                JEditorPane editorPane = new JEditorPane();
+                editorPane.setEditable(false);
+                EditorKit defaultHtmlEditor = JEditorPane
+                        .createEditorKitForContentType(TEXT_HTML);
+                editorPane.setEditorKitForContentType(TEXT_HTML, defaultHtmlEditor);
+                editorPane.setContentType(TEXT_HTML);
+                editorPane.getDocument().putProperty("IgnoreCharsetDirective",
+                        Boolean.TRUE);
+                URL url = generateHtmlFile();
+                String html = "<html>"
+                        + "<frameset rows=\"120px, 120 PX ,  * , 10 *\">\n"
+                        + "   <frame name=\"top\" src=\"" + url + "\" />\n"
+                        + "   <frame name=\"center\" src=\"" + url + "\" />\n"
+                        + "   <frame name=\"main\" src=\"" + url + "\" />\n"
+                        + "   <noframes>\n"
+                        + "   <body>\n"
+                        + "      Your browser does not support frames.\n"
+                        + "   </body>\n"
+                        + "   </noframes>\n"
+                        + "</frameset>";
+                editorPane.setText(html);
+                JScrollPane scrollPane = new JScrollPane(editorPane);
+
+                JFrame frame = new JFrame();
+                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+                frame.getContentPane().add(scrollPane);
+                frame.setSize(500, 500);
+                frame.setVisible(true);
+            }
+        });
+    }
+
+    private static URL generateHtmlFile() {
+        File file = new File("hello.html");
+        try (
+                FileWriter fw = new FileWriter(file.getAbsoluteFile());
+                BufferedWriter bw = new BufferedWriter(fw);) {
+            bw.write("<head></head><body>Hello World!</body>");
+            return file.toURI().toURL();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/text/html/parser/8074956/bug8074956.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.swing.text.html.parser.ContentModel;
+import javax.swing.text.html.parser.DTD;
+import javax.swing.text.html.parser.Element;
+
+/*
+ * @test
+ * @bug 8074956
+ * @author Alexey Ivanov
+ * @summary Tests correct handling of additional HTML elements in ContentModel
+ * @run main bug8074956
+ */
+public class bug8074956 {
+    public static void main(String[] args) throws Exception {
+        final DTD html32 = DTD.getDTD("html32");
+        ContentModel contentModel = new ContentModel('&', new ContentModel());
+
+        Element elem1 = html32.getElement("html-element");
+        contentModel.first(elem1);
+
+        Element elem2 = html32.getElement("test-element");
+        // Shouldn't throw ArrayIndexOutOfBoundsException
+        contentModel.first(elem2);
+    }
+}
--- a/jdk/test/lib/testlibrary/jdk/testlibrary/RandomFactory.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/lib/testlibrary/jdk/testlibrary/RandomFactory.java	Wed Jul 05 20:33:55 2017 +0200
@@ -21,6 +21,8 @@
  * questions.
  */
 
+package jdk.testlibrary;
+
 import java.util.Random;
 import java.util.SplittableRandom;
 
--- a/jdk/test/sun/nio/cs/OLD/X11GB2312_OLD.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.ext.EUC_CN;
-
-public class X11GB2312_OLD extends Charset {
-    public X11GB2312_OLD () {
-        super("X11GB2312-OLD", null);
-    }
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11GB2312_OLD;
-    }
-
-    private class Encoder extends EUC_CN_OLD.Encoder {
-        public Encoder(Charset cs) {
-            super(cs);
-        }
-
-        public boolean canEncode(char c) {
-            if (c <= 0x7F) {
-                return false;
-            }
-            return super.canEncode(c);
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    if (c <= '\u007f')
-                        return CoderResult.unmappableForLength(1);
-                    int ncode = encodeDouble(c);
-                    if (ncode != 0 && c != '\u0000' ) {
-                        da[dp++] = (byte) ((ncode  >> 8) & 0x7f);
-                        da[dp++] = (byte) (ncode & 0x7f);
-                        sp++;
-                        continue;
-                    }
-                    return CoderResult.unmappableForLength(1);
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-    }
-
-    private class Decoder extends EUC_CN_OLD.Decoder {
-        public Decoder(Charset cs) {
-            super(cs);
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            try {
-                while (sp < sl) {
-                    if ( sl - sp < 2) {
-                        return CoderResult.UNDERFLOW;
-                    }
-                    int b1 = sa[sp] & 0xFF | 0x80;
-                    int b2 = sa[sp + 1] & 0xFF | 0x80;
-                    char c = decodeDouble(b1, b2);
-                    if (c == replacement().charAt(0)) {
-                        return CoderResult.unmappableForLength(2);
-                    }
-                    if (dl - dp < 1)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = c;
-                    sp +=2;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-
-        }
-    }
-
-}
--- a/jdk/test/sun/nio/cs/OLD/X11GBK_OLD.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.ext.GBK;
-
-public class X11GBK_OLD extends Charset {
-    public X11GBK_OLD () {
-        super("X11GBK-OLD", null);
-    }
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-    public CharsetDecoder newDecoder() {
-        return new GBK_OLD.Decoder(this);
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11GBK_OLD;
-    }
-
-    private class Encoder extends GBK_OLD.Encoder {
-        public Encoder(Charset cs) {
-            super(cs);
-        }
-        public boolean canEncode(char ch){
-            if (ch < 0x80) return false;
-            return super.canEncode(ch);
-        }
-    }
-}
--- a/jdk/test/sun/nio/cs/OLD/X11KSC5601_OLD.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.ext.EUC_KR;
-
-public class X11KSC5601_OLD extends Charset {
-    public X11KSC5601_OLD () {
-        super("X11KSC5601-OLD", null);
-    }
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11KSC5601_OLD;
-    }
-
-    private class Encoder extends EUC_KR_OLD.Encoder {
-        public Encoder(Charset cs) {
-            super(cs);
-        }
-
-        public boolean canEncode(char c) {
-            if (c <= 0x7F) {
-                return false;
-            }
-            return super.canEncode(c);
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    if (c <= '\u007f')
-                        return CoderResult.unmappableForLength(1);
-                    int ncode = encodeDouble(c);
-                    if (ncode != 0 && c != '\u0000' ) {
-                        da[dp++] = (byte) ((ncode  >> 8) & 0x7f);
-                        da[dp++] = (byte) (ncode & 0x7f);
-                        sp++;
-                        continue;
-                    }
-                    return CoderResult.unmappableForLength(1);
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-    }
-
-    private class Decoder extends EUC_KR_OLD.Decoder {
-        public Decoder(Charset cs) {
-            super(cs);
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-
-            try {
-                while (sp < sl) {
-                    if ( sl - sp < 2) {
-                        return CoderResult.UNDERFLOW;
-                    }
-                    int b1 = sa[sp] & 0xFF | 0x80;
-                    int b2 = sa[sp + 1] & 0xFF | 0x80;
-                    char c = decodeDouble(b1, b2);
-                    if (c == replacement().charAt(0)) {
-                        return CoderResult.unmappableForLength(2);
-                    }
-                    if (dl - dp < 1)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = c;
-                    sp +=2;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-
-        }
-    }
-}
--- a/jdk/test/sun/nio/cs/TestCompoundTest.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/* @test
- * @bug 6427981
- * @summary Check the Compound_Text's canonical name and its aliases
- */
-
-import java.nio.charset.*;
-import java.util.Set;
-
-public class TestCompoundTest {
-
-    public static void main(String args[]) throws Exception
-    {
-        if (System.getProperty("os.name").startsWith("Windows"))
-            return;
-        Charset cs = Charset.forName("COMPOUND_TEXT");
-        if (!cs.name().startsWith("x-"))
-            throw new RuntimeException("FAILED: name does not start with x-");
-        Set<String> aliases = cs.aliases();
-        if (!aliases.contains("COMPOUND_TEXT") ||
-            !aliases.contains("x-compound-text") ||
-            !aliases.contains("x11-compound_text"))
-            throw new RuntimeException("FAILED: alias name is missing");
-    }
-}
--- a/jdk/test/sun/nio/cs/TestX11CNS.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 6831794
- * @summary Test X11CNS charset
- */
-
-import java.nio.charset.*;
-import java.nio.*;
-import java.util.*;
-
-public class TestX11CNS {
-    static char[] decode(byte[] bb, Charset cs)
-        throws Exception {
-        CharsetDecoder dec = cs.newDecoder();
-        ByteBuffer bbf = ByteBuffer.wrap(bb);
-        CharBuffer cbf = CharBuffer.allocate(bb.length);
-        CoderResult cr = dec.decode(bbf, cbf, true);
-        if (cr != CoderResult.UNDERFLOW) {
-            System.out.println("DEC-----------------");
-            int pos = bbf.position();
-            System.out.printf("  cr=%s, bbf.pos=%d, bb[pos]=%x,%x,%x,%x%n",
-                              cr.toString(), pos,
-                              bb[pos++]&0xff, bb[pos++]&0xff,bb[pos++]&0xff, bb[pos++]&0xff);
-            throw new RuntimeException("Decoding err: " + cs.name());
-        }
-        char[] cc = new char[cbf.position()];
-        cbf.flip(); cbf.get(cc);
-        return cc;
-
-    }
-
-    static byte[] encode(char[] cc, Charset cs)
-        throws Exception {
-        ByteBuffer bbf = ByteBuffer.allocate(cc.length * 4);
-        CharBuffer cbf = CharBuffer.wrap(cc);
-        CharsetEncoder enc = cs.newEncoder();
-
-        CoderResult cr = enc.encode(cbf, bbf, true);
-        if (cr != CoderResult.UNDERFLOW) {
-            System.out.println("ENC-----------------");
-            int pos = cbf.position();
-            System.out.printf("  cr=%s, cbf.pos=%d, cc[pos]=%x%n",
-                              cr.toString(), pos, cc[pos]&0xffff);
-            throw new RuntimeException("Encoding err: " + cs.name());
-        }
-        byte[] bb = new byte[bbf.position()];
-        bbf.flip(); bbf.get(bb);
-        return bb;
-    }
-
-    static char[] getChars(Charset newCS, Charset oldCS) {
-        CharsetEncoder enc = oldCS.newEncoder();
-        CharsetEncoder encNew = newCS.newEncoder();
-        char[] cc = new char[0x10000];
-        int pos = 0;
-        int i = 0;
-        while (i < 0x10000) {
-            if (i == 0x4ea0 || i == 0x51ab || i == 0x52f9) {
-                i++;continue;
-            }
-            if (enc.canEncode((char)i) != encNew.canEncode((char)i)) {
-                System.out.printf("  Err i=%x%n", i);
-                //throw new RuntimeException("canEncode() err!");
-            }
-            if (enc.canEncode((char)i)) {
-                cc[pos++] = (char)i;
-            }
-            i++;
-        }
-        return Arrays.copyOf(cc, pos);
-    }
-
-    static void compare(Charset newCS, Charset oldCS) throws Exception {
-        if (newCS == null)
-            return;  // does not exist on this platform
-        char[] cc = getChars(newCS, oldCS);
-        System.out.printf("    Diff <%s> <%s>...%n", newCS.name(), oldCS.name());
-
-        byte[] bb1 = encode(cc, newCS);
-        byte[] bb2 = encode(cc, oldCS);
-
-        if (!Arrays.equals(bb1, bb2)) {
-            System.out.printf("        encoding failed!%n");
-        }
-        char[] cc1 = decode(bb1, newCS);
-        char[] cc2 = decode(bb1, oldCS);
-        if (!Arrays.equals(cc1, cc2)) {
-            for (int i = 0; i < cc1.length; i++) {
-                if (cc1[i] != cc2[i]) {
-                    System.out.printf("i=%d, cc1=%x cc2=%x,  bb=<%x%x>%n",
-                                      i,
-                                      cc1[i]&0xffff, cc2[i]&0xffff,
-                                      bb1[i*2]&0xff, bb1[i*2+1]&0xff);
-                }
-
-            }
-
-            System.out.printf("        decoding failed%n");
-        }
-    }
-
-    private static Charset getCharset(String czName)
-        throws Exception {
-        try {
-            return (Charset)Class.forName(czName).newInstance();
-        } catch (ClassNotFoundException e){}
-        return null;  // does not exist
-    }
-
-    public static void main(String[] args) throws Exception {
-        compare(getCharset("sun.awt.motif.X11CNS11643P1"),
-                new X11CNS11643P1());
-
-        compare(getCharset("sun.awt.motif.X11CNS11643P2"),
-                new X11CNS11643P2());
-
-        compare(getCharset("sun.awt.motif.X11CNS11643P3"),
-                new X11CNS11643P3());
-
-    }
-}
--- a/jdk/test/sun/nio/cs/TestX11JIS0201.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/* @test
- * @bug 4195325
- * @summary name() should return "X11JIS0201"
- *
- */
-
-import java.nio.charset.*;
-
-public class TestX11JIS0201 {
-
-    public static void main(String args[])
-        throws Exception
-    {
-        test();
-    }
-
-    private static void test()
-        throws Exception
-    {
-        Class cl = null;
-        try {
-            cl = Class.forName("sun.awt.motif.X11JIS0201");
-        } catch (Exception e){
-            return;
-        }
-        Charset cs = (Charset)cl.newInstance();
-        if (! cs.name().equals("X11JIS0201")){
-            throw new Exception("X11JIS0201 does not work correctly");
-        }
-        CharsetEncoder enc = cs.newEncoder();
-        char[] cc = new char[0xffff];
-        for (char c = 0; c < 0xffff; c++) {
-            cc[c] = c;
-            if (enc.canEncode(c) !=
-                ((c >= 0xff61 && c <= 0xff9f) || c == 0x203e || c == 0xa5)) {
-                throw new RuntimeException("x11jis0201 canEncod() failed!");
-            }
-        }
-        String s = new String(cc);
-        byte[] bb_x11 = s.getBytes(cs);
-        byte[] bb = s.getBytes("jis0201");
-        if (!java.util.Arrays.equals(bb, bb_x11)) {
-            throw new RuntimeException("x11jis0201 encoding failed");
-        }
-    }
-}
--- a/jdk/test/sun/nio/cs/X11CNS11643.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,188 +0,0 @@
-/*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-
-public abstract class X11CNS11643 extends Charset {
-    private final int plane;
-    public X11CNS11643 (int plane, String name) {
-        super(name, null);
-        switch (plane) {
-        case 1:
-            this.plane = 0; // CS1
-            break;
-        case 2:
-        case 3:
-            this.plane = plane;
-            break;
-        default:
-            throw new IllegalArgumentException
-                ("Only planes 1, 2, and 3 supported");
-        }
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this, plane);
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this, plane);
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11CNS11643;
-    }
-
-    private class Encoder extends EUC_TW_OLD.Encoder {
-        private int plane;
-        public Encoder(Charset cs, int plane) {
-            super(cs);
-            this.plane = plane;
-        }
-        public boolean canEncode(char c) {
-            if (c <= 0x7F) {
-                return false;
-            }
-            int p = getNative(c) >> 16;
-            if (p == 1 && plane == 0 ||
-                p == 2 && plane == 2 ||
-                p == 3 && plane == 3)
-                return true;
-            return false;
-        }
-
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    if (c >= '\uFFFE' || c <= '\u007f')
-                        return CoderResult.unmappableForLength(1);
-                    int cns = getNative(c);
-                    int p = cns >> 16;
-                    if (p == 1 && plane == 0 ||
-                        p == 2 && plane == 2 ||
-                        p == 3 && plane == 3) {
-                        if (dl - dp < 2)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = (byte) ((cns  >> 8) & 0x7f);
-                        da[dp++] = (byte) (cns & 0x7f);
-                        sp++;
-                        continue;
-                    }
-                    return CoderResult.unmappableForLength(1);
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-    }
-
-    private class Decoder extends EUC_TW_OLD.Decoder {
-        private String table;
-        protected Decoder(Charset cs, int plane) {
-            super(cs);
-            switch (plane) {
-            case 0:
-                table = unicodeCNS1;
-                break;
-            case 2:
-                table = unicodeCNS2;
-                break;
-            case 3:
-                table = unicodeCNS3;
-                break;
-            default:
-                throw new IllegalArgumentException
-                    ("Only planes 1, 2, and 3 supported");
-            }
-        }
-
-        //we only work on array backed buffer.
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            try {
-                while (sp < sl) {
-                    if ( sl - sp < 2) {
-                        return CoderResult.UNDERFLOW;
-                    }
-                    byte b1 = sa[sp];
-                    byte b2 = sa[sp + 1];
-                    char c = replacement().charAt(0);
-
-                    if (table == unicodeCNS3) {
-                        char[] cc = convToSurrogate((byte)(b1 | 0x80),
-                                                    (byte)(b2 | 0x80),
-                                                    table);
-                        if (cc != null && cc[0] == '\u0000')
-                            c = cc[1];
-                    } else {
-                        c = convToUnicode((byte)(b1 | 0x80),
-                                           (byte)(b2 | 0x80),
-                                           table);
-                    }
-                    if (c == replacement().charAt(0)
-                        //to keep the compatibility with b2cX11CNS11643
-                        /*|| c == '\u0000'*/) {
-                        return CoderResult.unmappableForLength(2);
-                    }
-                    if (dl - dp < 1)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = c;
-                    sp +=2;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-    }
-}
--- a/jdk/test/sun/nio/cs/X11CNS11643P1.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-public class X11CNS11643P1 extends X11CNS11643 {
-    public X11CNS11643P1() {
-        super(1, "X11CNS11643P1");
-    }
-}
--- a/jdk/test/sun/nio/cs/X11CNS11643P2.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-public class X11CNS11643P2 extends X11CNS11643 {
-    public X11CNS11643P2() {
-        super(2, "X11CNS11643P2");
-    }
-}
--- a/jdk/test/sun/nio/cs/X11CNS11643P3.java	Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-public class X11CNS11643P3 extends X11CNS11643 {
-    public X11CNS11643P3() {
-        super(3, "X11CNS11643P3");
-    }
-}
--- a/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java	Wed Jul 05 20:33:55 2017 +0200
@@ -40,6 +40,7 @@
 import java.security.*;
 import java.security.interfaces.*;
 import java.security.spec.*;
+import jdk.testlibrary.RandomFactory;
 
 public class TestKeyPairGenerator extends PKCS11Test {
 
--- a/jdk/test/sun/security/tools/keytool/i18n.sh	Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/sun/security/tools/keytool/i18n.sh	Wed Jul 05 20:33:55 2017 +0200
@@ -22,7 +22,7 @@
 #
 
 # @test
-# @bug 4348369
+# @bug 4348369 8076069
 # @summary keytool not i18n compliant
 # @author charlie lai
 # @run shell/manual i18n.sh
@@ -44,7 +44,7 @@
 # set platform-dependent variables
 OS=`uname -s`
 case "$OS" in
-  SunOS | Linux )
+  SunOS | Linux | Darwin )
     NULL=/dev/null
     PS=":"
     FS="/"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/launcher/TestMainWithoutEnclosing.java	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @test
+ * @bug 8076264
+ * @summary Launching app shouldn't require enclosing class for the main class.
+ * @compile TestMainWithoutEnclosing.java
+ * @run main TestMainWithoutEnclosing
+ */
+public final class TestMainWithoutEnclosing extends TestHelper {
+
+    static final String EnclosingName = "Enclosing";
+
+    static void createJarFile(File testJar) throws IOException {
+        List<String> scratch = new ArrayList<>();
+        scratch.add("public class Enclosing {");
+        scratch.add("    public static final class Main {");
+        scratch.add("        public static void main(String... args) {");
+        scratch.add("            System.out.println(\"Hello World\");");
+        scratch.add("        }");
+        scratch.add("    }");
+        scratch.add("}");
+        File enclosingFile = new File(EnclosingName + ".java");
+        createFile(enclosingFile, scratch);
+        compile(enclosingFile.getName());
+        // avoid side effects remove the Enclosing class
+        getClassFile(enclosingFile).delete();
+        createJar("cvfe", testJar.getName(), EnclosingName + "$Main",
+                EnclosingName + "$Main" + ".class");
+        // remove extraneous files in the current directory
+        new File(EnclosingName + "$Main" + ".class").delete();
+    }
+
+    public static void main(String... args) throws IOException {
+        File testJarFile = new File("test.jar");
+        createJarFile(testJarFile);
+        TestResult tr = doExec(javaCmd, "-jar", testJarFile.getName());
+        if (!tr.isOK()) {
+            System.out.println(tr);
+            throw new RuntimeException("test returned non-positive value");
+        }
+        if (!tr.contains("Hello World")) {
+            System.out.println(tr);
+            throw new RuntimeException("expected output not found");
+        }
+    }
+}
--- a/langtools/.hgtags	Wed Jul 05 20:32:49 2017 +0200
+++ b/langtools/.hgtags	Wed Jul 05 20:33:55 2017 +0200
@@ -306,3 +306,4 @@
 0eb91327db5a840779cc5c35b9b858d6ef7959d1 jdk9-b61
 40058141a4ec04a3d4cacdb693ad188a5ddf48ed jdk9-b62
 a28b7f42dae9bd59513beaa5a2d6eb563dc09e08 jdk9-b63
+809d66512998789b620d08c335d7c31211a0cf29 jdk9-b64
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java	Wed Jul 05 20:33:55 2017 +0200
@@ -119,7 +119,7 @@
             Content captionSpan;
             Content span;
             if (type.isDefaultTab()) {
-                captionSpan = HtmlTree.SPAN(new StringContent(type.text()));
+                captionSpan = HtmlTree.SPAN(configuration.getResource(type.resourceKey()));
                 span = HtmlTree.SPAN(type.tabId(),
                         HtmlStyle.activeTableTab, captionSpan);
             } else {
@@ -142,7 +142,7 @@
      */
     public Content getMethodTypeLinks(MethodTypes methodType) {
         String jsShow = "javascript:show(" + methodType.value() +");";
-        HtmlTree link = HtmlTree.A(jsShow, new StringContent(methodType.text()));
+        HtmlTree link = HtmlTree.A(jsShow, configuration.getResource(methodType.resourceKey()));
         return link;
     }
 
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java	Wed Jul 05 20:33:55 2017 +0200
@@ -465,10 +465,10 @@
         for (Map.Entry<String,Integer> entry : typeMap.entrySet()) {
             vars.append(sep);
             sep = ",";
-            vars.append("\"");
-            vars.append(entry.getKey());
-            vars.append("\":");
-            vars.append(entry.getValue());
+            vars.append("\"")
+                    .append(entry.getKey())
+                    .append("\":")
+                    .append(entry.getValue());
         }
         vars.append("};").append(DocletConstants.NL);
         sep = "";
@@ -476,11 +476,19 @@
         for (MethodTypes entry : methodTypes) {
             vars.append(sep);
             sep = ",";
-            vars.append(entry.value()).append(":");
-            vars.append("[").append("\"").append(entry.tabId());
-            vars.append("\"").append(sep).append("\"").append(entry.text()).append("\"]");
+            vars.append(entry.value())
+                    .append(":")
+                    .append("[")
+                    .append("\"")
+                    .append(entry.tabId())
+                    .append("\"")
+                    .append(sep)
+                    .append("\"")
+                    .append(configuration.getText(entry.resourceKey()))
+                    .append("\"]");
         }
-        vars.append("};").append(DocletConstants.NL);
+        vars.append("};")
+                .append(DocletConstants.NL);
         addStyles(HtmlStyle.altColor, vars);
         addStyles(HtmlStyle.rowColor, vars);
         addStyles(HtmlStyle.tableTab, vars);
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties	Wed Jul 05 20:32:49 2017 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties	Wed Jul 05 20:33:55 2017 +0200
@@ -150,6 +150,13 @@
 doclet.Constructors=Constructors
 doclet.methods=methods
 doclet.Methods=Methods
+doclet.All_Methods=All Methods
+doclet.Static_Methods=Static Methods
+doclet.Instance_Methods=Instance Methods
+doclet.Abstract_Methods=Abstract Methods
+doclet.Concrete_Methods=Concrete Methods
+doclet.Default_Methods=Default Methods
+doclet.Deprecated_Methods=Deprecated Methods
 doclet.annotation_type_optional_members=optional elements
 doclet.Annotation_Type_Optional_Members=Optional Elements
 doclet.annotation_type_required_members=required elements
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/util/MethodTypes.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/util/MethodTypes.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,22 +31,22 @@
  * @author Bhavesh Patel
  */
 public enum MethodTypes {
-    ALL(0xffff, "All Methods", "t0", true),
-    STATIC(0x1, "Static Methods", "t1", false),
-    INSTANCE(0x2, "Instance Methods", "t2", false),
-    ABSTRACT(0x4, "Abstract Methods", "t3", false),
-    CONCRETE(0x8, "Concrete Methods", "t4", false),
-    DEFAULT(0x10, "Default Methods", "t5", false),
-    DEPRECATED(0x20, "Deprecated Methods", "t6", false);
+    ALL(0xffff, "doclet.All_Methods", "t0", true),
+    STATIC(0x1, "doclet.Static_Methods", "t1", false),
+    INSTANCE(0x2, "doclet.Instance_Methods", "t2", false),
+    ABSTRACT(0x4, "doclet.Abstract_Methods", "t3", false),
+    CONCRETE(0x8, "doclet.Concrete_Methods", "t4", false),
+    DEFAULT(0x10, "doclet.Default_Methods", "t5", false),
+    DEPRECATED(0x20, "doclet.Deprecated_Methods", "t6", false);
 
     private final int value;
-    private final String text;
+    private final String resourceKey;
     private final String tabId;
     private final boolean isDefaultTab;
 
-    MethodTypes(int v, String t, String id, boolean dt) {
+    MethodTypes(int v, String k, String id, boolean dt) {
         this.value = v;
-        this.text = t;
+        this.resourceKey = k;
         this.tabId = id;
         this.isDefaultTab = dt;
     }
@@ -55,8 +55,8 @@
         return value;
     }
 
-    public String text() {
-        return text;
+    public String resourceKey() {
+        return resourceKey;
     }
 
     public String tabId() {
--- a/make/CompileJavaModules.gmk	Wed Jul 05 20:32:49 2017 +0200
+++ b/make/CompileJavaModules.gmk	Wed Jul 05 20:33:55 2017 +0200
@@ -89,7 +89,7 @@
 
 ################################################################################
 
-java.desktop_ADD_JAVAC_FLAGS := -Xdoclint:all/protected,-missing,-reference '-Xdoclint/package:java.*,javax.*'
+java.desktop_ADD_JAVAC_FLAGS := -Xdoclint:all/protected,-reference '-Xdoclint/package:java.*,javax.*'
 java.desktop_COPY := .gif .png .wav .txt .xml .css .pf
 java.desktop_CLEAN := iio-plugin.properties cursors.properties
 
@@ -152,7 +152,6 @@
       $(wildcard $(JDK_TOPDIR)/src/java.desktop/unix/classes/sun/java2d/*.java) \
       $(wildcard $(JDK_TOPDIR)/src/java.desktop/unix/classes/sun/java2d/opengl/*.java) \
       $(wildcard $(JDK_TOPDIR)/src/java.desktop/unix/classes/sun/awt/*.java) \
-      $(wildcard $(JDK_TOPDIR)/src/java.desktop/unix/classes/sun/awt/motif/*.java) \
       $(wildcard $(JDK_TOPDIR)/src/java.desktop/unix/classes/sun/font/*.java) \
       #
 else
--- a/make/Init.gmk	Wed Jul 05 20:32:49 2017 +0200
+++ b/make/Init.gmk	Wed Jul 05 20:33:55 2017 +0200
@@ -267,7 +267,9 @@
 	    ( cd $(TOPDIR) && \
 	        $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) $(OUTPUT_SYNC_FLAG) \
 	        -j $(JOBS) -f make/Main.gmk $(USER_MAKE_VARS) \
-	        $(PARALLEL_TARGETS) )
+	        $(PARALLEL_TARGETS) || \
+	        ( exitcode=$$? && $(BUILD_LOG_WRAPPER) $(PRINTF) "\nERROR: Build failed for $(TARGET_DESCRIPTION) (exit code $$exitcode) \n" && \
+	        $(PRINTF) "Hint: If caused by a warning, try configure --disable-warnings-as-errors \n\n" && exit $$exitcode ) )
 	    $(call CleanupSmartJavac)
 	    $(call StopGlobalTimer)
 	    $(call ReportBuildTimes)
--- a/make/Javadoc.gmk	Wed Jul 05 20:32:49 2017 +0200
+++ b/make/Javadoc.gmk	Wed Jul 05 20:33:55 2017 +0200
@@ -1141,7 +1141,7 @@
 NASHORNAPI_HEADER := <strong>Nashorn API</strong>
 NASHORNAPI_BOTTOM := $(call CommonBottom,$(NASHORNAPI_FIRST_COPYRIGHT_YEAR))
 NASHORNAPI_GROUPNAME := Packages
-NASHORNAPI_REGEXP := jdk.nashorn.api.scripting.*
+NASHORNAPI_REGEXP := jdk.nashorn.api.*
 # NASHORNAPI_PKGS is located in NON_CORE_PKGS.gmk
 
 NASHORNAPI_INDEX_HTML = $(NASHORNAPI_DOCDIR)/index.html
--- a/make/common/NON_CORE_PKGS.gmk	Wed Jul 05 20:32:49 2017 +0200
+++ b/make/common/NON_CORE_PKGS.gmk	Wed Jul 05 20:33:55 2017 +0200
@@ -82,7 +82,8 @@
     com.sun.source.util \
     jdk
 
-NASHORNAPI_PKGS = jdk.nashorn.api.scripting
+NASHORNAPI_PKGS = jdk.nashorn.api.scripting \
+    jdk.nashorn.api.tree
 
 SMARTCARDIO_PKGS = javax.smartcardio
 
--- a/make/common/NativeCompilation.gmk	Wed Jul 05 20:32:49 2017 +0200
+++ b/make/common/NativeCompilation.gmk	Wed Jul 05 20:33:55 2017 +0200
@@ -487,6 +487,21 @@
     $1_EXTRA_CXXFLAGS += $$(addprefix $(DISABLE_WARNING_PREFIX), $$($1_DISABLED_WARNINGS_$(TOOLCHAIN_TYPE)))
   endif
 
+  # Check if warnings should be considered errors.
+  # Pick first binary and toolchain specific, then binary specific, then general setting.
+  ifeq ($$($1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE)),)
+    ifeq ($$($1_WARNINGS_AS_ERRORS),)
+      $1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE) := $$(WARNINGS_AS_ERRORS)
+    else
+      $1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE) := $$($1_WARNINGS_AS_ERRORS)
+    endif
+  endif
+
+  ifeq ($$($1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE)), true)
+    $1_EXTRA_CFLAGS += $(CFLAGS_WARNINGS_ARE_ERRORS)
+    $1_EXTRA_CXXFLAGS += $(CFLAGS_WARNINGS_ARE_ERRORS)
+  endif
+
   ifeq (NONE, $$($1_OPTIMIZATION))
     $1_EXTRA_CFLAGS += $(C_O_FLAG_NONE)
     $1_EXTRA_CXXFLAGS += $(CXX_O_FLAG_NONE)
--- a/modules.xml	Wed Jul 05 20:32:49 2017 +0200
+++ b/modules.xml	Wed Jul 05 20:33:55 2017 +0200
@@ -616,7 +616,6 @@
     <depend>java.prefs</depend>
     <depend re-exports="true">java.xml</depend>
     <depend re-exports="true">java.datatransfer</depend>
-    <depend>jdk.charsets</depend>
     <export>
       <name>java.applet</name>
     </export>
@@ -1502,10 +1501,6 @@
   <module>
     <name>jdk.charsets</name>
     <depend>java.base</depend>
-    <export>
-      <name>sun.nio.cs.ext</name>
-      <to>java.desktop</to>
-    </export>
   </module>
   <module>
     <name>jdk.compiler</name>
--- a/nashorn/.hgtags	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/.hgtags	Wed Jul 05 20:33:55 2017 +0200
@@ -297,3 +297,4 @@
 89937bee80bd28826de8cf60aa63a21edab63f79 jdk9-b61
 1b5604bc81a6161b1c3c9dd654cd1399474ae9ee jdk9-b62
 bc8e67bec2f92772c4a67e20e66a4f216207f0af jdk9-b63
+00df6e4fc75a83bdd958f9ef86d80e008c9ba967 jdk9-b64
--- a/nashorn/make/build.xml	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/make/build.xml	Wed Jul 05 20:33:55 2017 +0200
@@ -188,7 +188,7 @@
     <mkdir dir="${fxshell.classes.dir}"/>
     <javac srcdir="${fxshell.dir}"
            destdir="${fxshell.classes.dir}"
-           classpath="${dist.jar}:${javac.classpath}"
+           classpath="${dist.jar}${path.separator}${javac.classpath}"
            debug="${javac.debug}"
            encoding="${javac.encoding}"
            includeantruntime="false">
--- a/nashorn/make/project.properties	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/make/project.properties	Wed Jul 05 20:33:55 2017 +0200
@@ -105,8 +105,8 @@
 javac.classpath=\
     ${build.classes.dir}
 javac.test.classpath=\
-    ${build.classes.dir}:\
-    ${build.test.classes.dir}:\
+    ${build.classes.dir}${path.separator}\
+    ${build.test.classes.dir}${path.separator}\
     ${file.reference.testng.jar}
 
 meta.inf.dir=${src.dir}/META-INF
@@ -259,8 +259,8 @@
 testjfx-test-sys-prop.test.fork.jvm.options=${run.test.jvmargs.main} -Xmx${run.test.xmx} -cp ${testjfx.run.test.classpath}
 
 run.test.classpath=\
-    ${file.reference.testng.jar}:\
-    ${nashorn.internal.tests.jar}:\
+    ${file.reference.testng.jar}${path.separator}\
+    ${nashorn.internal.tests.jar}${path.separator}\
     ${nashorn.api.tests.jar}
 
 src.dir=src/jdk.scripting.nashorn/share/classes
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeArray.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeArray.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1228,31 +1228,41 @@
         final List<Object> list = Arrays.asList(array);
         final Object cmpThis = cmp == null || cmp.isStrict() ? ScriptRuntime.UNDEFINED : Global.instance();
 
-        Collections.sort(list, new Comparator<Object>() {
-            private final MethodHandle call_cmp = getCALL_CMP();
-            @Override
-            public int compare(final Object x, final Object y) {
-                if (x == ScriptRuntime.UNDEFINED && y == ScriptRuntime.UNDEFINED) {
-                    return 0;
-                } else if (x == ScriptRuntime.UNDEFINED) {
-                    return 1;
-                } else if (y == ScriptRuntime.UNDEFINED) {
-                    return -1;
-                }
+        try {
+            Collections.sort(list, new Comparator<Object>() {
+                private final MethodHandle call_cmp = getCALL_CMP();
+                @Override
+                public int compare(final Object x, final Object y) {
+                    if (x == ScriptRuntime.UNDEFINED && y == ScriptRuntime.UNDEFINED) {
+                        return 0;
+                    } else if (x == ScriptRuntime.UNDEFINED) {
+                        return 1;
+                    } else if (y == ScriptRuntime.UNDEFINED) {
+                        return -1;
+                    }
 
-                if (cmp != null) {
-                    try {
-                        return (int)Math.signum((double)call_cmp.invokeExact(cmp, cmpThis, x, y));
-                    } catch (final RuntimeException | Error e) {
-                        throw e;
-                    } catch (final Throwable t) {
-                        throw new RuntimeException(t);
+                    if (cmp != null) {
+                        try {
+                            return (int)Math.signum((double)call_cmp.invokeExact(cmp, cmpThis, x, y));
+                        } catch (final RuntimeException | Error e) {
+                            throw e;
+                        } catch (final Throwable t) {
+                            throw new RuntimeException(t);
+                        }
                     }
-                }
 
-                return JSType.toString(x).compareTo(JSType.toString(y));
-            }
-        });
+                    return JSType.toString(x).compareTo(JSType.toString(y));
+                }
+            });
+        } catch (final IllegalArgumentException iae) {
+            // Collections.sort throws IllegalArgumentException when
+            // Comparison method violates its general contract
+
+            // See ECMA spec 15.4.4.11 Array.prototype.sort (comparefn).
+            // If "comparefn" is not undefined and is not a consistent
+            // comparison function for the elements of this array, the
+            // behaviour of sort is implementation-defined.
+        }
 
         return list.toArray(new Object[array.length]);
     }
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeArrayBuffer.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeArrayBuffer.java	Wed Jul 05 20:33:55 2017 +0200
@@ -28,6 +28,7 @@
 import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
 
 import java.nio.ByteBuffer;
+
 import jdk.nashorn.internal.objects.annotations.Attribute;
 import jdk.nashorn.internal.objects.annotations.Constructor;
 import jdk.nashorn.internal.objects.annotations.Function;
@@ -226,10 +227,10 @@
     }
 
     ByteBuffer getBuffer(final int offset) {
-        return nb.duplicate().position(offset);
+        return (ByteBuffer)nb.duplicate().position(offset);
     }
 
     ByteBuffer getBuffer(final int offset, final int length) {
-        return getBuffer(offset).limit(length);
+        return (ByteBuffer)getBuffer(offset).limit(length);
     }
 }
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeFloat32Array.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeFloat32Array.java	Wed Jul 05 20:33:55 2017 +0200
@@ -81,7 +81,7 @@
         private static final MethodHandle SET_ELEM = specialCall(MethodHandles.lookup(), Float32ArrayData.class, "setElem", void.class, int.class, double.class).methodHandle();
 
         private Float32ArrayData(final FloatBuffer nb, final int start, final int end) {
-            super(nb.position(start).limit(end).slice(), end - start);
+            super(((FloatBuffer)nb.position(start).limit(end)).slice(), end - start);
         }
 
         @Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeFloat64Array.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeFloat64Array.java	Wed Jul 05 20:33:55 2017 +0200
@@ -81,7 +81,7 @@
         private static final MethodHandle SET_ELEM = specialCall(MethodHandles.lookup(), Float64ArrayData.class, "setElem", void.class, int.class, double.class).methodHandle();
 
         private Float64ArrayData(final DoubleBuffer nb, final int start, final int end) {
-            super(nb.position(start).limit(end).slice(), end - start);
+            super(((DoubleBuffer)nb.position(start).limit(end)).slice(), end - start);
         }
 
         @Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeInt16Array.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeInt16Array.java	Wed Jul 05 20:33:55 2017 +0200
@@ -82,7 +82,7 @@
         private static final MethodHandle SET_ELEM = specialCall(MethodHandles.lookup(), Int16ArrayData.class, "setElem", void.class, int.class, int.class).methodHandle();
 
         private Int16ArrayData(final ShortBuffer nb, final int start, final int end) {
-            super(nb.position(start).limit(end).slice(), end - start);
+            super(((ShortBuffer)nb.position(start).limit(end)).slice(), end - start);
         }
 
         @Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeInt32Array.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeInt32Array.java	Wed Jul 05 20:33:55 2017 +0200
@@ -81,7 +81,7 @@
         private static final MethodHandle SET_ELEM = specialCall(MethodHandles.lookup(), Int32ArrayData.class, "setElem", void.class, int.class, int.class).methodHandle();
 
         private Int32ArrayData(final IntBuffer nb, final int start, final int end) {
-            super(nb.position(start).limit(end).slice(), end - start);
+            super(((IntBuffer)nb.position(start).limit(end)).slice(), end - start);
         }
 
         @Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeInt8Array.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeInt8Array.java	Wed Jul 05 20:33:55 2017 +0200
@@ -80,7 +80,7 @@
         private static final MethodHandle SET_ELEM = specialCall(MethodHandles.lookup(), Int8ArrayData.class, "setElem", void.class, int.class, int.class).methodHandle();
 
         private Int8ArrayData(final ByteBuffer nb, final int start, final int end) {
-            super(nb.position(start).limit(end).slice(), end - start);
+            super(((ByteBuffer)nb.position(start).limit(end)).slice(), end - start);
         }
 
         @Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint16Array.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint16Array.java	Wed Jul 05 20:33:55 2017 +0200
@@ -81,7 +81,7 @@
         private static final MethodHandle SET_ELEM = specialCall(MethodHandles.lookup(), Uint16ArrayData.class, "setElem", void.class, int.class, int.class).methodHandle();
 
         private Uint16ArrayData(final CharBuffer nb, final int start, final int end) {
-            super(nb.position(start).limit(end).slice(), end - start);
+            super(((CharBuffer)nb.position(start).limit(end)).slice(), end - start);
         }
 
         @Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint32Array.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint32Array.java	Wed Jul 05 20:33:55 2017 +0200
@@ -82,7 +82,7 @@
         private static final MethodHandle SET_ELEM = specialCall(MethodHandles.lookup(), Uint32ArrayData.class, "setElem", void.class, int.class, int.class).methodHandle();
 
         private Uint32ArrayData(final IntBuffer nb, final int start, final int end) {
-            super(nb.position(start).limit(end).slice(), end - start);
+            super(((IntBuffer)nb.position(start).limit(end)).slice(), end - start);
         }
 
         @Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint8Array.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint8Array.java	Wed Jul 05 20:33:55 2017 +0200
@@ -81,7 +81,7 @@
         private static final MethodHandle SET_ELEM = specialCall(MethodHandles.lookup(), Uint8ArrayData.class, "setElem", void.class, int.class, int.class).methodHandle();
 
         private Uint8ArrayData(final ByteBuffer nb, final int start, final int end) {
-            super(nb.position(start).limit(end).slice(), end - start);
+            super(((ByteBuffer)nb.position(start).limit(end)).slice(), end - start);
         }
 
         @Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint8ClampedArray.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint8ClampedArray.java	Wed Jul 05 20:33:55 2017 +0200
@@ -85,7 +85,7 @@
         private static final MethodHandle CLAMP_LONG = staticCall(MethodHandles.lookup(), Uint8ClampedArrayData.class, "clampLong", long.class, long.class).methodHandle();
 
         private Uint8ClampedArrayData(final ByteBuffer nb, final int start, final int end) {
-            super(nb.position(start).limit(end).slice(), end - start);
+            super(((ByteBuffer)nb.position(start).limit(end)).slice(), end - start);
         }
 
         @Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Context.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Context.java	Wed Jul 05 20:33:55 2017 +0200
@@ -1239,6 +1239,10 @@
         }
 
         if (storedScript == null) {
+            if (env._dest_dir != null) {
+                source.dump(env._dest_dir);
+            }
+
             functionNode = new Parser(env, source, errMan, strict, getLogger(Parser.class)).parse();
 
             if (errMan.hasErrors()) {
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptEnvironment.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptEnvironment.java	Wed Jul 05 20:33:55 2017 +0200
@@ -73,7 +73,7 @@
     /** Generate line number table in class files */
     public final boolean _debug_lines;
 
-    /** Package to which generated class files are added */
+    /** Directory in which source files and generated class files are dumped */
     public final String  _dest_dir;
 
     /** Display stack trace upon error, default is false */
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Source.java	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Source.java	Wed Jul 05 20:33:55 2017 +0200
@@ -28,9 +28,11 @@
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
 import java.io.IOError;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.PrintWriter;
 import java.io.Reader;
 import java.lang.ref.WeakReference;
 import java.net.MalformedURLException;
@@ -44,6 +46,7 @@
 import java.nio.file.Paths;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.time.LocalDateTime;
 import java.util.Arrays;
 import java.util.Base64;
 import java.util.Objects;
@@ -989,4 +992,39 @@
     public DebugLogger getLogger() {
         return initLogger(Context.getContextTrusted());
     }
+
+    private File dumpFile(final String dir) {
+        final URL u = getURL();
+        final StringBuilder buf = new StringBuilder();
+        // make it unique by prefixing current date & time
+        buf.append(LocalDateTime.now().toString());
+        buf.append('_');
+        if (u != null) {
+            // make it a safe file name
+            buf.append(u.toString()
+                    .replace('/', '_')
+                    .replace('\\', '_'));
+        } else {
+            buf.append(getName());
+        }
+
+        return new File(dir, buf.toString());
+    }
+
+    void dump(final String dir) {
+        final File file = dumpFile(dir);
+        try (final FileOutputStream fos = new FileOutputStream(file)) {
+            final PrintWriter pw = new PrintWriter(fos);
+            pw.print(data.toString());
+            pw.flush();
+        } catch (final IOException ioExp) {
+            debug("Skipping source dump for " +
+                    name +
+                    ": " +
+                    ECMAErrors.getMessage(
+                        "io.error.cant.write",
+                        dir.toString() +
+                        " : " + ioExp.toString()));
+        }
+    }
 }
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Messages.properties	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Messages.properties	Wed Jul 05 20:33:55 2017 +0200
@@ -121,7 +121,7 @@
 type.error.cannot.get.default.number=Cannot get default number value
 type.error.cant.apply.with.to.null=Cannot apply "with" to null
 type.error.cant.apply.with.to.undefined=Cannot apply "with" to undefined
-type.error.cant.apply.with.to.non.scriptobject=Cannot apply "with" to non script object
+type.error.cant.apply.with.to.non.scriptobject=Cannot apply "with" to non script object. Consider using "with(Object.bindProperties('{'}, nonScriptObject))".
 type.error.in.with.non.object=Right hand side of "in" cannot be non-Object, found {0}
 type.error.prototype.not.an.object="prototype" of {0} is not an Object, it is {1}
 type.error.cant.load.script=Cannot load script from {0}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Options.properties	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Options.properties	Wed Jul 05 20:33:55 2017 +0200
@@ -114,7 +114,7 @@
     short_name="-d",                                             \
     is_undocumented=true,                                        \
     params="<path>",                                             \
-    desc="specify a destination directory to dump class files.", \
+    desc="specify a destination directory to dump source and class files.", \
     type=String                                                  \
 }
 
--- a/nashorn/test/script/basic/8024180/with_java_object.js.EXPECTED	Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/test/script/basic/8024180/with_java_object.js.EXPECTED	Wed Jul 05 20:33:55 2017 +0200
@@ -1,1 +1,1 @@
-TypeError: Cannot apply "with" to non script object
+TypeError: Cannot apply "with" to non script object. Consider using "with(Object.bindProperties({}, nonScriptObject))".
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8080182.js	Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * 
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ * 
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ * 
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ * 
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * JDK-8080182: Array.prototype.sort throws IAE on inconsistent comparison
+ *
+ * @test
+ * @run
+ */
+
+function Random() { 
+    this.toString = function() {
+        return (Math.random() * 100).toString();
+    }
+}
+
+for (var i = 0; i < 100; ++i) {
+    var arr = []; 
+
+    for (var j = 0; j < 64; ++j) {
+        arr[j] = new Random();
+    }
+
+    // no IllegalArgumentException expected!
+    arr.sort();
+}