[Scummvm-git-logs] scummvm master -> 68a9136e4d43b424243e4ad33821138a7b659aa0
phcoder
phcoder at gmail.com
Sun Nov 15 15:20:38 UTC 2020
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
68a9136e4d COMMON: Rewrite Encoder and drop dependency on iconv (#2586)
Commit: 68a9136e4d43b424243e4ad33821138a7b659aa0
https://github.com/scummvm/scummvm/commit/68a9136e4d43b424243e4ad33821138a7b659aa0
Author: Vladimir Serbinenko (phcoder at google.com)
Date: 2020-11-15T16:20:35+01:00
Commit Message:
COMMON: Rewrite Encoder and drop dependency on iconv (#2586)
Different platforms have different levels of support of encodings and
often have slight variations. We already have tables for most encoding
with only CJK missing. Full transcoding inclusion allows us to get reliable
encoding results independently of platform. The biggest con is the need for
external tables encoding.dat.
It removes a duplicate table for korean in graphics/korfont.cpp
Changed paths:
A common/enc-internal.h
A common/encodings/singlebyte.cpp
A devtools/create_encoding/CP932.TXT
A devtools/create_encoding/CP949.TXT
A devtools/create_encoding/CP950.TXT
A devtools/create_encoding/create_encoging.py
A dists/engine-data/encoding.dat
A test/common/encoding.h
A test/null_osystem.cpp
A test/null_osystem.h
A test/stubs.cpp
R backends/platform/sdl/win32/codepage.h
R common/encoding.cpp
R common/encoding.h
R common/iconv.cpp
R common/iconv.h
R engines/testbed/encoding.cpp
R engines/testbed/encoding.h
Makefile.common
backends/dialogs/gtk/gtk-dialogs.cpp
backends/dialogs/win32/win32-dialogs.cpp
backends/events/sdl/sdl-events.cpp
backends/networking/sdl_net/handlerutils.cpp
backends/platform/android/android.cpp
backends/platform/android/android.h
backends/platform/android/jni-android.cpp
backends/platform/android/jni-android.h
backends/platform/android/org/scummvm/scummvm/ScummVM.java
backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java
backends/platform/android3d/android.cpp
backends/platform/android3d/android.h
backends/platform/android3d/org/residualvm/residualvm/ResidualVM.java
backends/platform/android3d/org/residualvm/residualvm/ResidualVMActivity.java
backends/platform/null/null.cpp
backends/platform/sdl/sdl.cpp
backends/platform/sdl/sdl.h
backends/platform/sdl/win32/win32.cpp
backends/platform/sdl/win32/win32.h
backends/platform/symbian/S60/scummvm-CVS-SymbianS60v1.pkg
backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg
backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg
backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3_split.pkg
backends/platform/symbian/S80/scummvm-CVS-SymbianS80.pkg
backends/platform/symbian/S90/scummvm-CVS-SymbianS90.pkg
backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg
backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg
backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3_split.pkg
backends/text-to-speech/linux/linux-text-to-speech.cpp
backends/text-to-speech/windows/windows-text-to-speech.cpp
common/base-str.cpp
common/base-str.h
common/module.mk
common/str-enc.cpp
common/str-enc.h
common/str.cpp
common/str.h
common/system.h
common/text-to-speech.h
common/ustr.cpp
common/ustr.h
configure
devtools/README
devtools/create_project/xcode.cpp
dists/engine-data/README
dists/irix/scummvm.idb
dists/scummvm.rc
engines/mortevielle/sound.cpp
engines/myst3/subtitles.cpp
engines/scumm/dialogs.cpp
engines/testbed/module.mk
engines/testbed/testbed.cpp
graphics/fonts/ttf.cpp
graphics/korfont.cpp
ports.mk
test/module.mk
diff --git a/Makefile.common b/Makefile.common
index 1a140790b9..4b7d5d63bd 100644
--- a/Makefile.common
+++ b/Makefile.common
@@ -433,6 +433,7 @@ endif
ifdef ENABLE_MYST3
DIST_FILES_ENGINEDATA+=myst3.dat
endif
+DIST_FILES_ENGINEDATA+=encoding.dat
DIST_FILES_ENGINEDATA:=$(addprefix $(srcdir)/dists/engine-data/,$(DIST_FILES_ENGINEDATA))
# pred.dic is currently only used for the AGI engine
diff --git a/backends/dialogs/gtk/gtk-dialogs.cpp b/backends/dialogs/gtk/gtk-dialogs.cpp
index ceb1e59027..0d2d6fa9e1 100644
--- a/backends/dialogs/gtk/gtk-dialogs.cpp
+++ b/backends/dialogs/gtk/gtk-dialogs.cpp
@@ -30,7 +30,6 @@
#include "backends/dialogs/gtk/gtk-dialogs.h"
#include "common/config-manager.h"
-#include "common/encoding.h"
#include "common/translation.h"
#include <gtk/gtk.h>
diff --git a/backends/dialogs/win32/win32-dialogs.cpp b/backends/dialogs/win32/win32-dialogs.cpp
index 100ed720b1..c524b789f0 100644
--- a/backends/dialogs/win32/win32-dialogs.cpp
+++ b/backends/dialogs/win32/win32-dialogs.cpp
@@ -67,7 +67,6 @@
#include "backends/platform/sdl/win32/win32-window.h"
#include "common/config-manager.h"
-#include "common/encoding.h"
#include "common/translation.h"
Win32DialogManager::Win32DialogManager(SdlWindow_Win32 *window) : _window(window) {
@@ -131,11 +130,11 @@ Common::DialogManager::DialogResult Win32DialogManager::showFileBrowser(const Co
hr = dialog->SetOptions(dwOptions);
}
- LPWSTR dialogTitle = (LPWSTR)Common::Encoding::convert("UTF-16", title);
+ LPWSTR dialogTitle = (LPWSTR)title.encodeUTF16Native();
hr = dialog->SetTitle(dialogTitle);
free(dialogTitle);
- LPWSTR okTitle = (LPWSTR)Common::Encoding::convert("UTF-16", _("Choose"));
+ LPWSTR okTitle = (LPWSTR)_("Choose").encodeUTF16Native();
hr = dialog->SetOkButtonLabel(okTitle);
free(okTitle);
diff --git a/backends/events/sdl/sdl-events.cpp b/backends/events/sdl/sdl-events.cpp
index 68c7e43b7e..dd40e0fbec 100644
--- a/backends/events/sdl/sdl-events.cpp
+++ b/backends/events/sdl/sdl-events.cpp
@@ -38,22 +38,8 @@
#define GAMECONTROLLERDB_FILE "gamecontrollerdb.txt"
static uint32 convUTF8ToUTF32(const char *src) {
- uint32 utf32 = 0;
-
- char *dst = SDL_iconv_string(
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- "UTF-32BE",
-#else
- "UTF-32LE",
-#endif
- "UTF-8", src, SDL_strlen(src) + 1);
-
- if (dst) {
- utf32 = *((uint32 *)dst);
- SDL_free(dst);
- }
-
- return utf32;
+ Common::U32String u32(src);
+ return u32[0];
}
void SdlEventSource::loadGameControllerMappingFile() {
diff --git a/backends/networking/sdl_net/handlerutils.cpp b/backends/networking/sdl_net/handlerutils.cpp
index 5706887009..de5948ff50 100644
--- a/backends/networking/sdl_net/handlerutils.cpp
+++ b/backends/networking/sdl_net/handlerutils.cpp
@@ -28,7 +28,6 @@
#include "common/file.h"
#include "common/translation.h"
#include "common/unzip.h"
-#include "common/encoding.h"
namespace Networking {
diff --git a/backends/platform/android/android.cpp b/backends/platform/android/android.cpp
index 69e014e500..4f732eacfb 100644
--- a/backends/platform/android/android.cpp
+++ b/backends/platform/android/android.cpp
@@ -666,8 +666,4 @@ Common::String OSystem_Android::getSystemProperty(const char *name) const {
return Common::String(value, len);
}
-char *OSystem_Android::convertEncoding(const char *to, const char *from, const char *string, size_t length) {
- return JNI::convertEncoding(to, from, string, length);
-}
-
#endif
diff --git a/backends/platform/android/android.h b/backends/platform/android/android.h
index 4dcaea07bc..61d6474144 100644
--- a/backends/platform/android/android.h
+++ b/backends/platform/android/android.h
@@ -136,7 +136,6 @@ public:
virtual bool setTextInClipboard(const Common::U32String &text) override;
virtual bool isConnectionLimited() override;
virtual Common::String getSystemLanguage() const override;
- virtual char *convertEncoding(const char *to, const char *from, const char *string, size_t length) override;
};
#endif
diff --git a/backends/platform/android/jni-android.cpp b/backends/platform/android/jni-android.cpp
index 352aae0060..5a3f979dbc 100644
--- a/backends/platform/android/jni-android.cpp
+++ b/backends/platform/android/jni-android.cpp
@@ -45,7 +45,6 @@
#include "common/config-manager.h"
#include "common/error.h"
#include "common/textconsole.h"
-#include "common/encoding.h"
#include "engines/engine.h"
#include "backends/platform/android/android.h"
@@ -86,7 +85,6 @@ jmethodID JNI::_MID_setWindowCaption = 0;
jmethodID JNI::_MID_showVirtualKeyboard = 0;
jmethodID JNI::_MID_showKeyboardControl = 0;
jmethodID JNI::_MID_getSysArchives = 0;
-jmethodID JNI::_MID_convertEncoding = 0;
jmethodID JNI::_MID_getAllStorageLocations = 0;
jmethodID JNI::_MID_initSurface = 0;
jmethodID JNI::_MID_deinitSurface = 0;
@@ -236,7 +234,7 @@ void JNI::displayMessageOnOSD(const Common::U32String &msg) {
// called from common/osd_message_queue, method: OSDMessageQueue::pollEvent()
JNIEnv *env = JNI::getEnv();
- jstring java_msg = convertToJString(env, msg.encode(), "UTF-8");
+ jstring java_msg = convertToJString(env, msg);
if (java_msg == nullptr) {
// Show a placeholder indicative of the translation error instead of silent failing
java_msg = env->NewStringUTF("?");
@@ -303,15 +301,15 @@ Common::U32String JNI::getTextFromClipboard() {
return Common::U32String();
}
- Common::String text = convertFromJString(env, javaText, "UTF-8");
+ Common::U32String text = convertFromJString(env, javaText);
env->DeleteLocalRef(javaText);
- return text.decode();
+ return text;
}
bool JNI::setTextInClipboard(const Common::U32String &text) {
JNIEnv *env = JNI::getEnv();
- jstring javaText = convertToJString(env, text.encode(), "UTF-8");
+ jstring javaText = convertToJString(env, text);
bool success = env->CallBooleanMethod(_jobj, _MID_setTextInClipboard, javaText);
@@ -344,7 +342,7 @@ bool JNI::isConnectionLimited() {
void JNI::setWindowCaption(const Common::String &caption) {
JNIEnv *env = JNI::getEnv();
- jstring java_caption = convertToJString(env, caption, "ISO-8859-1");
+ jstring java_caption = convertToJString(env, caption.decode(Common::kISO8859_1));
env->CallVoidMethod(_jobj, _MID_setWindowCaption, java_caption);
@@ -428,36 +426,6 @@ void JNI::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) {
s.add("ASSET", _asset_archive, priority - 1, false);
}
-char *JNI::convertEncoding(const char *to, const char *from, const char *string, size_t length) {
- JNIEnv *env = JNI::getEnv();
-
- jstring javaTo = env->NewStringUTF(to);
- jstring javaFrom = env->NewStringUTF(from);
- jbyteArray javaString = env->NewByteArray(length);
- env->SetByteArrayRegion(javaString, 0, length, reinterpret_cast<const jbyte*>(string));
-
- jbyteArray javaOut = (jbyteArray)env->CallObjectMethod(_jobj, _MID_convertEncoding, javaTo, javaFrom, javaString);
-
- if (!javaOut || env->ExceptionCheck()) {
- LOGE("Failed to convert text from %s to %s", from, to);
-
- env->ExceptionDescribe();
- env->ExceptionClear();
-
- return nullptr;
- }
-
- int outLength = env->GetArrayLength(javaOut);
- char *buf = (char *)malloc(outLength + 1);
- if (!buf)
- return nullptr;
-
- env->GetByteArrayRegion(javaOut, 0, outLength, reinterpret_cast<jbyte *>(buf));
- buf[outLength] = 0;
-
- return buf;
-}
-
bool JNI::initSurface() {
JNIEnv *env = JNI::getEnv();
@@ -586,7 +554,6 @@ void JNI::create(JNIEnv *env, jobject self, jobject asset_manager,
FIND_METHOD(, showKeyboardControl, "(Z)V");
FIND_METHOD(, getSysArchives, "()[Ljava/lang/String;");
FIND_METHOD(, getAllStorageLocations, "()[Ljava/lang/String;");
- FIND_METHOD(, convertEncoding, "(Ljava/lang/String;Ljava/lang/String;[B)[B");
FIND_METHOD(, initSurface, "()Ljavax/microedition/khronos/egl/EGLSurface;");
FIND_METHOD(, deinitSurface, "()V");
FIND_METHOD(, createDirectoryWithSAF, "(Ljava/lang/String;)Z");
@@ -752,29 +719,21 @@ void JNI::setPause(JNIEnv *env, jobject self, jboolean value) {
}
}
-jstring JNI::convertToJString(JNIEnv *env, const Common::String &str, const Common::String &from) {
- Common::Encoding converter("UTF-8", from.c_str());
- char *utf8Str = converter.convert(str.c_str(), converter.stringLength(str.c_str(), from));
- if (utf8Str == nullptr)
- return nullptr;
-
- jstring jstr = env->NewStringUTF(utf8Str);
- free(utf8Str);
-
+jstring JNI::convertToJString(JNIEnv *env, const Common::U32String &str) {
+ uint len = 0;
+ uint16 *u16str = str.encodeUTF16Native(&len);
+ jstring jstr = env->NewString(u16str, len);
+ delete[] u16str;
return jstr;
}
-Common::String JNI::convertFromJString(JNIEnv *env, const jstring &jstr, const Common::String &to) {
- const char *utf8Str = env->GetStringUTFChars(jstr, 0);
- if (!utf8Str)
- return Common::String();
-
- Common::Encoding converter(to.c_str(), "UTF-8");
- char *asciiStr = converter.convert(utf8Str, env->GetStringUTFLength(jstr));
- env->ReleaseStringUTFChars(jstr, utf8Str);
-
- Common::String str(asciiStr);
- free(asciiStr);
+Common::U32String JNI::convertFromJString(JNIEnv *env, const jstring &jstr) {
+ const uint16 *utf16Str = env->GetStringChars(jstr, 0);
+ uint jcount = env->GetStringLength(jstr);
+ if (!utf16Str)
+ return Common::U32String();
+ Common::U32String str = Common::U32String::decodeUTF16Native(utf16Str, jcount);
+ env->ReleaseStringChars(jstr, utf16Str);
return str;
}
@@ -830,7 +789,7 @@ bool JNI::createDirectoryWithSAF(const Common::String &dirPath) {
}
-Common::String JNI::createFileWithSAF(const Common::String &filePath) {
+Common::U32String JNI::createFileWithSAF(const Common::String &filePath) {
JNIEnv *env = JNI::getEnv();
jstring javaFilePath = env->NewStringUTF(filePath.c_str());
@@ -845,7 +804,7 @@ Common::String JNI::createFileWithSAF(const Common::String &filePath) {
hackyFilenameJSTR = env->NewStringUTF("");
}
- Common::String hackyFilenameStr = convertFromJString(env, hackyFilenameJSTR, "UTF-8");
+ Common::U32String hackyFilenameStr = convertFromJString(env, hackyFilenameJSTR);
//LOGD("JNI - _MID_createFileWithSAF returned %s", hackyFilenameStr.c_str());
env->DeleteLocalRef(hackyFilenameJSTR);
diff --git a/backends/platform/android/jni-android.h b/backends/platform/android/jni-android.h
index 393c78ad6c..6f01f90192 100644
--- a/backends/platform/android/jni-android.h
+++ b/backends/platform/android/jni-android.h
@@ -69,7 +69,6 @@ public:
static void showVirtualKeyboard(bool enable);
static void showKeyboardControl(bool enable);
static void addSysArchivesToSearchSet(Common::SearchSet &s, int priority);
- static char *convertEncoding(const char *to, const char *from, const char *string, size_t length);
static inline bool haveSurface();
static inline bool swapBuffers();
@@ -86,7 +85,7 @@ public:
static Common::Array<Common::String> getAllStorageLocations();
static bool createDirectoryWithSAF(const Common::String &dirPath);
- static Common::String createFileWithSAF(const Common::String &filePath);
+ static Common::U32String createFileWithSAF(const Common::String &filePath);
static void closeFileWithSAF(const Common::String &hackyFilename);
private:
@@ -114,7 +113,6 @@ private:
static jmethodID _MID_showVirtualKeyboard;
static jmethodID _MID_showKeyboardControl;
static jmethodID _MID_getSysArchives;
- static jmethodID _MID_convertEncoding;
static jmethodID _MID_getAllStorageLocations;
static jmethodID _MID_initSurface;
static jmethodID _MID_deinitSurface;
@@ -149,8 +147,8 @@ private:
int arg2, int arg3, int arg4, int arg5, int arg6);
static void setPause(JNIEnv *env, jobject self, jboolean value);
- static jstring convertToJString(JNIEnv *env, const Common::String &str, const Common::String &from);
- static Common::String convertFromJString(JNIEnv *env, const jstring &jstr, const Common::String &to);
+ static jstring convertToJString(JNIEnv *env, const Common::U32String &str);
+ static Common::U32String convertFromJString(JNIEnv *env, const jstring &jstr);
static PauseToken _pauseToken;
};
diff --git a/backends/platform/android/org/scummvm/scummvm/ScummVM.java b/backends/platform/android/org/scummvm/scummvm/ScummVM.java
index a5471a8d25..46d72cef69 100644
--- a/backends/platform/android/org/scummvm/scummvm/ScummVM.java
+++ b/backends/platform/android/org/scummvm/scummvm/ScummVM.java
@@ -10,7 +10,6 @@ import android.os.Build;
import android.util.Log;
import android.view.SurfaceHolder;
-import java.io.UnsupportedEncodingException;
import java.util.LinkedHashMap;
import java.util.Locale;
@@ -68,7 +67,6 @@ public abstract class ScummVM implements SurfaceHolder.Callback, Runnable {
abstract protected void showVirtualKeyboard(boolean enable);
abstract protected void showKeyboardControl(boolean enable);
abstract protected String[] getSysArchives();
- abstract protected byte[] convertEncoding(String to, String from, byte[] string) throws UnsupportedEncodingException;
abstract protected String[] getAllStorageLocations();
abstract protected String[] getAllStorageLocationsNoPermissionRequest();
abstract protected boolean createDirectoryWithSAF(String dirPath);
diff --git a/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java b/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java
index 16a6a970f5..cdf6224086 100644
--- a/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java
+++ b/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java
@@ -673,12 +673,6 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
} else return new String[]{_actualScummVMDataDir.getPath()};
}
- @Override
- protected byte[] convertEncoding(String to, String from, byte[] string) throws UnsupportedEncodingException {
- String str = new String(string, from);
- return str.getBytes(to);
- }
-
@Override
protected String[] getAllStorageLocations() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
diff --git a/backends/platform/android3d/android.cpp b/backends/platform/android3d/android.cpp
index e06f93da3d..782da7fb49 100644
--- a/backends/platform/android3d/android.cpp
+++ b/backends/platform/android3d/android.cpp
@@ -581,8 +581,4 @@ Common::String OSystem_Android::getSystemProperty(const char *name) const {
return Common::String(value, len);
}
-char *OSystem_Android::convertEncoding(const char *to, const char *from, const char *string, size_t length) {
- return JNI::convertEncoding(to, from, string, length);
-}
-
#endif
diff --git a/backends/platform/android3d/android.h b/backends/platform/android3d/android.h
index dc0d8e3d0c..8cc67d6212 100644
--- a/backends/platform/android3d/android.h
+++ b/backends/platform/android3d/android.h
@@ -189,7 +189,6 @@ public:
virtual bool setTextInClipboard(const Common::U32String &text);
virtual bool isConnectionLimited();
virtual Common::String getSystemLanguage() const;
- virtual char *convertEncoding(const char *to, const char *from, const char *string, size_t length);
void updateEventScale(const GLESBaseTexture *tex);
TouchControls* getTouchControls() { return &_touchControls; }
diff --git a/backends/platform/android3d/org/residualvm/residualvm/ResidualVM.java b/backends/platform/android3d/org/residualvm/residualvm/ResidualVM.java
index c3f416114a..5de94d5821 100644
--- a/backends/platform/android3d/org/residualvm/residualvm/ResidualVM.java
+++ b/backends/platform/android3d/org/residualvm/residualvm/ResidualVM.java
@@ -65,7 +65,6 @@ public abstract class ResidualVM implements SurfaceHolder.Callback, Runnable {
abstract protected void showVirtualKeyboard(boolean enable);
abstract protected void showKeyboardControl(boolean enable);
abstract protected String[] getSysArchives();
- abstract protected byte[] convertEncoding(String to, String from, byte[] string) throws UnsupportedEncodingException;
abstract protected String[] getAllStorageLocations();
public ResidualVM(AssetManager asset_manager, SurfaceHolder holder) {
diff --git a/backends/platform/android3d/org/residualvm/residualvm/ResidualVMActivity.java b/backends/platform/android3d/org/residualvm/residualvm/ResidualVMActivity.java
index 3555526f84..fa8fedb774 100644
--- a/backends/platform/android3d/org/residualvm/residualvm/ResidualVMActivity.java
+++ b/backends/platform/android3d/org/residualvm/residualvm/ResidualVMActivity.java
@@ -228,12 +228,6 @@ public class ResidualVMActivity extends Activity {
return new String[0];
}
- @Override
- protected byte[] convertEncoding(String to, String from, byte[] string) throws UnsupportedEncodingException {
- String str = new String(string, from);
- return str.getBytes(to);
- }
-
@Override
protected String[] getAllStorageLocations() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
diff --git a/backends/platform/null/null.cpp b/backends/platform/null/null.cpp
index ab77059ffa..340f0298c8 100644
--- a/backends/platform/null/null.cpp
+++ b/backends/platform/null/null.cpp
@@ -83,6 +83,10 @@ public:
virtual void logMessage(LogMessageType::Type type, const char *message);
+#ifdef NULL_DRIVER_USE_FOR_TEST
+ virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority);
+#endif
+
private:
#ifdef POSIX
timeval _startTime;
@@ -108,7 +112,7 @@ OSystem_NULL::OSystem_NULL() {
OSystem_NULL::~OSystem_NULL() {
}
-#ifdef POSIX
+#if defined(POSIX) && !defined(NULL_DRIVER_USE_FOR_TEST)
static volatile bool intReceived = false;
static sighandler_t last_handler;
@@ -122,7 +126,8 @@ void intHandler(int dummy) {
void OSystem_NULL::initBackend() {
#ifdef POSIX
gettimeofday(&_startTime, 0);
-
+#endif
+#if defined(POSIX) && !defined(NULL_DRIVER_USE_FOR_TEST)
last_handler = signal(SIGINT, intHandler);
#endif
@@ -142,7 +147,7 @@ bool OSystem_NULL::pollEvent(Common::Event &event) {
((DefaultTimerManager *)getTimerManager())->checkTimers();
((NullMixerManager *)_mixerManager)->update(1);
-#ifdef POSIX
+#if defined(POSIX) && !defined(NULL_DRIVER_USE_FOR_TEST)
if (intReceived) {
intReceived = false;
@@ -214,6 +219,7 @@ OSystem *OSystem_NULL_create() {
return new OSystem_NULL();
}
+#ifndef NULL_DRIVER_USE_FOR_TEST
int main(int argc, char *argv[]) {
g_system = OSystem_NULL_create();
assert(g_system);
@@ -223,6 +229,16 @@ int main(int argc, char *argv[]) {
g_system->destroy();
return res;
}
+#else
+void OSystem_NULL::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) {
+ Common::String dataPath = "dists/engine-data";
+ Common::FSNode dataNode(dataPath);
+ s.add(dataPath, new Common::FSDirectory(dataNode, 4), priority);
+}
+void Common::install_null_g_system() {
+ g_system = OSystem_NULL_create();
+}
+#endif
#else /* USE_NULL_DRIVER */
diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp
index 8a2601fa6f..016d710689 100644
--- a/backends/platform/sdl/sdl.cpp
+++ b/backends/platform/sdl/sdl.cpp
@@ -27,7 +27,6 @@
#include "gui/EventRecorder.h"
#include "common/taskbar.h"
#include "common/textconsole.h"
-#include "common/encoding.h"
#ifdef USE_DISCORD
#include "backends/presence/discord/discord.h"
@@ -892,49 +891,3 @@ void OSystem_SDL::setupGraphicsModes() {
}
#endif
-char *OSystem_SDL::convertEncoding(const char *to, const char *from, const char *string, size_t length) {
-#if SDL_VERSION_ATLEAST(1, 2, 10) && !defined(__MORPHOS__)
- int zeroBytes = 1;
- if (Common::String(from).hasPrefixIgnoreCase("utf-16"))
- zeroBytes = 2;
- else if (Common::String(from).hasPrefixIgnoreCase("utf-32"))
- zeroBytes = 4;
-
- char *result;
- // SDL_iconv_string() takes char * instead of const char * as it's third parameter
- // with some older versions of SDL.
-#if SDL_VERSION_ATLEAST(2, 0, 0)
- result = SDL_iconv_string(to, from, string, length + zeroBytes);
-#else
- char *stringCopy = (char *) calloc(sizeof(char), length + zeroBytes);
- memcpy(stringCopy, string, length);
- result = SDL_iconv_string(to, from, stringCopy, length + zeroBytes);
- free(stringCopy);
-#endif // SDL_VERSION_ATLEAST(2, 0, 0)
- if (result == nullptr)
- return nullptr;
-
- // We need to copy the result, so that we can use SDL_free()
- // on the string returned by SDL_iconv_string() and free()
- // can then be used on the copyed and returned string.
- // Sometimes free() and SDL_free() aren't compatible and
- // using free() instead of SDL_free() can cause crashes.
- size_t newLength = Common::Encoding::stringLength(result, to);
- zeroBytes = 1;
- if (Common::String(to).hasPrefixIgnoreCase("utf-16"))
- zeroBytes = 2;
- else if (Common::String(to).hasPrefixIgnoreCase("utf-32"))
- zeroBytes = 4;
- char *finalResult = (char *) malloc(newLength + zeroBytes);
- if (!finalResult) {
- warning("Could not allocate memory for encoding conversion");
- SDL_free(result);
- return nullptr;
- }
- memcpy(finalResult, result, newLength + zeroBytes);
- SDL_free(result);
- return finalResult;
-#else
- return BaseBackend::convertEncoding(to, from, string, length);
-#endif // SDL_VERSION_ATLEAST(1, 2, 10)
-}
diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h
index 82ff5ac1c6..55361c8288 100644
--- a/backends/platform/sdl/sdl.h
+++ b/backends/platform/sdl/sdl.h
@@ -169,8 +169,6 @@ protected:
virtual bool setGraphicsMode(int mode, uint flags) override;
virtual int getGraphicsMode() const override;
#endif
-protected:
- virtual char *convertEncoding(const char *to, const char *from, const char *string, size_t length) override;
};
#endif
diff --git a/backends/platform/sdl/win32/codepage.h b/backends/platform/sdl/win32/codepage.h
deleted file mode 100644
index 6048f34fe1..0000000000
--- a/backends/platform/sdl/win32/codepage.h
+++ /dev/null
@@ -1,209 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef WIN32_CODEPAGE_H
-#define WIN32_CODEPAGE_H
-
-#include "common/scummsys.h"
-#include "common/str.h"
-namespace Win32 {
-struct CodePageDescription {
- const char *name;
- int id;
-};
-
-//For more info look at https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers
-//If there is a different name for a codepage, just add another row.
-const CodePageDescription g_cpDescriptions[] = {
- {"ibm037", 37}, //IBM EBCDIC US-Canada
- {"ibm437", 437}, //OEM United States
- {"ibm500", 500}, //IBM EBCDIC International
- {"asmo-708", 708}, //Arabic (ASMO 708)
- {"arabic1", 709}, //Arabic (ASMO-449+, BCON V4)
- {"arabic2", 710}, //Arabic - Transparent Arabic
- {"dos-720", 720}, //Arabic (Transparent ASMO); Arabic (DOS)
- {"ibm737", 737}, //OEM Greek (formerly 437G); Greek (DOS)
- {"ibm775", 775}, //OEM Baltic; Baltic (DOS)
- {"ibm850", 850}, //OEM Multilingual Latin 1; Western European (DOS)
- {"cp850", 850}, //OEM Multilingual Latin 1; Western European (DOS)
- {"ascii", 850}, //We have multiple choices for codepage for ascii, this is one of many that works
- {"ibm852", 852}, //OEM Latin 2; Central European (DOS)
- {"ibm855", 855}, //OEM Cyrillic (primarily Russian)
- {"ibm857", 857}, //OEM Turkish; Turkish (DOS)
- {"ibm00858", 858}, //OEM Multilingual Latin 1 + Euro symbol
- {"ibm858", 858}, //OEM Multilingual Latin 1 + Euro symbol
- {"ibm860", 860}, //OEM Portuguese; Portuguese (DOS)
- {"ibm861", 861}, //OEM Icelandic; Icelandic (DOS)
- {"dos-862", 862}, //OEM Hebrew; Hebrew (DOS)
- {"ibm863", 863}, //OEM French Canadian; French Canadian (DOS)
- {"ibm864", 864}, //OEM Arabic; Arabic (864)
- {"ibm865", 865}, //OEM Nordic; Nordic (DOS)
- {"cp866", 866}, //OEM Russian; Cyrillic (DOS)
- {"ibm869", 869}, //OEM Modern Greek; Greek, Modern (DOS)
- {"ibm870", 870}, //IBM EBCDIC Multilingual/ROECE (Latin 2); IBM EBCDIC Multilingual Latin 2
- {"windows-874", 874}, //ANSI/OEM Thai (ISO 8859-11); Thai (Windows)
- {"cp875", 875}, //IBM EBCDIC Greek Modern
- {"shift_jis", 932}, //ANSI/OEM Japanese; Japanese (Shift-JIS)
- {"cp932", 932}, //ANSI/OEM Japanese; Japanese (Shift-JIS)
- {"gb2312", 936}, //ANSI/OEM Simplified Chinese (PRC, Singapore); Chinese Simplified (GB2312)
- {"ks_c_5601-1987", 949}, //ANSI/OEM Korean (Unified Hangul Code)
- {"cp949", 949}, //ANSI/OEM Korean (Unified Hangul Code)
- {"uhc", 949}, //ANSI/OEM Korean (Unified Hangul Code)
- {"big5", 950}, //ANSI/OEM Traditional Chinese (Taiwan; Hong Kong SAR, PRC); Chinese Traditional (Big5)
- {"cp950", 950}, //ANSI/OEM Traditional Chinese (Taiwan; Hong Kong SAR, PRC); Chinese Traditional (Big5)
- {"ibm1026", 1026}, //IBM EBCDIC Turkish (Latin 5)
- {"ibm01047", 1047}, //IBM EBCDIC Latin 1/Open System
- {"ibm01140", 1140}, //IBM EBCDIC US-Canada (037 + Euro symbol); IBM EBCDIC (US-Canada-Euro)
- {"ibm01141", 1141}, //IBM EBCDIC Germany (20273 + Euro symbol); IBM EBCDIC (Germany-Euro)
- {"ibm01142", 1142}, //IBM EBCDIC Denmark-Norway (20277 + Euro symbol); IBM EBCDIC (Denmark-Norway-Euro)
- {"ibm01143", 1143}, //IBM EBCDIC Finland-Sweden (20278 + Euro symbol); IBM EBCDIC (Finland-Sweden-Euro)
- {"ibm01144", 1144}, //IBM EBCDIC Italy (20280 + Euro symbol); IBM EBCDIC (Italy-Euro)
- {"ibm01145", 1145}, //IBM EBCDIC Latin America-Spain (20284 + Euro symbol); IBM EBCDIC (Spain-Euro)
- {"ibm01146", 1146}, //IBM EBCDIC United Kingdom (20285 + Euro symbol); IBM EBCDIC (UK-Euro)
- {"ibm01147", 1147}, //IBM EBCDIC France (20297 + Euro symbol); IBM EBCDIC (France-Euro)
- {"ibm01148", 1148}, //IBM EBCDIC International (500 + Euro symbol); IBM EBCDIC (International-Euro)
- {"ibm01149", 1149}, //IBM EBCDIC Icelandic (20871 + Euro symbol); IBM EBCDIC (Icelandic-Euro)
- {"utf-16", 1200}, //Unicode UTF-16, little endian byte order (BMP of ISO 10646); available only to managed applications
- {"unicodefffe", 1201}, //Unicode UTF-16, big endian byte order; available only to managed applications
- {"windows-1250", 1250}, //ANSI Central European; Central European (Windows)
- {"windows-1251", 1251}, //ANSI Cyrillic; Cyrillic (Windows)
- {"windows-1252", 1252}, //ANSI Latin 1; Western European (Windows)
- {"windows-1253", 1253}, //ANSI Greek; Greek (Windows)
- {"windows-1254", 1254}, //ANSI Turkish; Turkish (Windows)
- {"windows-1255", 1255}, //ANSI Hebrew; Hebrew (Windows)
- {"windows-1256", 1256}, //ANSI Arabic; Arabic (Windows)
- {"windows-1257", 1257}, //ANSI Baltic; Baltic (Windows)
- {"windows-1258", 1258}, //ANSI/OEM Vietnamese; Vietnamese (Windows)
- {"johab", 1361}, //Korean (Johab)
- {"macintosh", 10000}, //MAC Roman; Western European (Mac)
- {"x-mac-japanese", 10001}, //Japanese (Mac)
- {"x-mac-chinesetrad", 10002}, //MAC Traditional Chinese (Big5); Chinese Traditional (Mac)
- {"x-mac-korean", 10003}, //Korean (Mac)
- {"x-mac-arabic", 10004}, //Arabic (Mac)
- {"x-mac-hebrew", 10005}, //Hebrew (Mac)
- {"x-mac-greek", 10006}, //Greek (Mac)
- {"x-mac-cyrillic", 10007}, //Cyrillic (Mac)
- {"x-mac-chinesesimp", 10008}, //MAC Simplified Chinese (GB 2312); Chinese Simplified (Mac)
- {"x-mac-romanian", 10010}, //Romanian (Mac)
- {"x-mac-ukrainian", 10017}, //Ukrainian (Mac)
- {"x-mac-thai", 10021}, //Thai (Mac)
- {"x-mac-ce", 10029}, //MAC Latin 2; Central European (Mac)
- {"x-mac-icelandic", 10079}, //Icelandic (Mac)
- {"x-mac-turkish", 10081}, //Turkish (Mac)
- {"x-mac-croatian", 10082}, //Croatian (Mac)
- {"utf-32", 12000}, //Unicode UTF-32, little endian byte order; available only to managed applications
- {"utf-32be", 12001}, //Unicode UTF-32, big endian byte order; available only to managed applications
- {"x-chinese_cns", 20000}, //CNS Taiwan; Chinese Traditional (CNS)
- {"x-cp20001", 20001}, //TCA Taiwan
- {"x_chinese-eten", 20002}, //Eten Taiwan; Chinese Traditional (Eten)
- {"x-cp20003", 20003}, //IBM5550 Taiwan
- {"x-cp20004", 20004}, //TeleText Taiwan
- {"x-cp20005", 20005}, //Wang Taiwan
- {"x-ia5", 20105}, //IA5 (IRV International Alphabet No. 5, 7-bit); Western European (IA5)
- {"x-ia5-german", 20106}, //IA5 German (7-bit)
- {"x-ia5-swedish", 20107}, //IA5 Swedish (7-bit)
- {"x-ia5-norwegian", 20108}, //IA5 Norwegian (7-bit)
- {"us-ascii", 20127}, //US-ASCII (7-bit)
- {"x-cp20261", 20261}, //T.61
- {"x-cp20269", 20269}, //ISO 6937 Non-Spacing Accent
- {"ibm273", 20273}, //IBM EBCDIC Germany
- {"ibm277", 20277}, //IBM EBCDIC Denmark-Norway
- {"ibm278", 20278}, //IBM EBCDIC Finland-Sweden
- {"ibm280", 20280}, //IBM EBCDIC Italy
- {"ibm284", 20284}, //IBM EBCDIC Latin America-Spain
- {"ibm285", 20285}, //IBM EBCDIC United Kingdom
- {"ibm290", 20290}, //IBM EBCDIC Japanese Katakana Extended
- {"ibm297", 20297}, //IBM EBCDIC France
- {"ibm420", 20420}, //IBM EBCDIC Arabic
- {"ibm423", 20423}, //IBM EBCDIC Greek
- {"ibm424", 20424}, //IBM EBCDIC Hebrew
- {"x-ebcdic-koreanextended", 20833}, //IBM EBCDIC Korean Extended
- {"ibm-thai", 20838}, //IBM EBCDIC Thai
- {"koi8-r", 20866}, //Russian (KOI8-R); Cyrillic (KOI8-R)
- {"ibm871", 20871}, //IBM EBCDIC Icelandic
- {"ibm880", 20880}, //IBM EBCDIC Cyrillic Russian
- {"ibm905", 20905}, //IBM EBCDIC Turkish
- {"ibm00924", 20924}, //IBM EBCDIC Latin 1/Open System (1047 + Euro symbol)
- {"euc-jp", 20932}, //Japanese (JIS 0208-1990 and 0212-1990)
- {"x-cp20936", 20936}, //Simplified Chinese (GB2312); Chinese Simplified (GB2312-80)
- {"x-cp20949", 20949}, //Korean Wansung
- {"cp1025", 21025}, //IBM EBCDIC Cyrillic Serbian-Bulgarian
- {"deprecated", 21027}, //(deprecated)
- {"koi8-u", 21866}, //Ukrainian (KOI8-U); Cyrillic (KOI8-U)
- {"iso-8859-1", 28591}, //ISO 8859-1 Latin 1; Western European (ISO)
- {"iso-8859-2", 28592}, //ISO 8859-2 Central European; Central European (ISO)
- {"iso-8859-3", 28593}, //ISO 8859-3 Latin 3
- {"iso-8859-4", 28594}, //ISO 8859-4 Baltic
- {"iso-8859-5", 28595}, //ISO 8859-5 Cyrillic
- {"iso-8859-6", 28596}, //ISO 8859-6 Arabic
- {"kIso-8859-7", 28597}, //ISO 8859-7 Greek
- {"iso-8859-8", 28598}, //ISO 8859-8 Hebrew; Hebrew (ISO-Visual)
- {"iso-8859-9", 28599}, //ISO 8859-9 Turkish
- {"iso-8859-13", 28603}, //ISO 8859-13 Estonian
- {"iso-8859-15", 28605}, //ISO 8859-15 Latin 9
- {"x-europa", 29001}, //Europa 3
- {"iso-8859-8-i", 38598}, //ISO 8859-8 Hebrew; Hebrew (ISO-Logical)
- {"iso-2022-jp", 50220}, //ISO 2022 Japanese with no halfwidth Katakana; Japanese (JIS)
- {"csiso2022jp", 50221}, //ISO 2022 Japanese with halfwidth Katakana; Japanese (JIS-Allow 1 byte Kana)
- {"iso-2022-jp", 50222}, //ISO 2022 Japanese JIS X 0201-1989; Japanese (JIS-Allow 1 byte Kana - SO/SI)
- {"iso-2022-kr", 50225}, //ISO 2022 Korean
- {"x-cp50227", 50227}, //ISO 2022 Simplified Chinese; Chinese Simplified (ISO 2022)
- {"iso2022", 50229}, //Traditional Chinese
- {"ebcdic1", 50930}, //Japanese (Katakana) Extended
- {"ebcdic2", 50931}, //US-Canada and Japanese
- {"ebcdic3", 50933}, //Korean Extended and Korean
- {"ebcdic4", 50935}, //Simplified Chinese Extended and Simplified Chinese
- {"ebcdic5", 50936}, //Simplified Chinese
- {"ebcdic6", 50937}, //US-Canada and Traditional Chinese
- {"ebcdic7", 50939}, //Japanese (Latin) Extended and Japanese
- {"euc-jp", 51932}, //EUC Japanese
- {"euc-cn", 51936}, //EUC Simplified Chinese; Chinese Simplified (EUC)
- {"euc-kr", 51949}, //EUC Korean
- {"euc", 51950}, //Traditional Chinese
- {"hz-gb-2312", 52936}, //HZ-GB2312 Simplified Chinese; Chinese Simplified (HZ)
- {"gb18030", 54936}, //Windows XP and later: GB18030 Simplified Chinese (4 byte); Chinese Simplified (GB18030)
- {"x-iscii-de", 57002}, //ISCII Devanagari
- {"x-iscii-be", 57003}, //ISCII Bangla
- {"x-iscii-ta", 57004}, //ISCII Tamil
- {"x-iscii-te", 57005}, //ISCII Telugu
- {"x-iscii-as", 57006}, //ISCII Assamese
- {"x-iscii-or", 57007}, //ISCII Odia
- {"x-iscii-ka", 57008}, //ISCII Kannada
- {"x-iscii-ma", 57009}, //ISCII Malayalam
- {"x-iscii-gu", 57010}, //ISCII Gujarati
- {"x-iscii-pa", 57011}, //ISCII Punjabi
- {"utf-7", 65000}, //Unicode (UTF-7)
- {"utf-8", 65001}, //Unicode (UTF-8)
- {nullptr, 0} //End
-};
-
-int getCodePageId(Common::String codePageName) {
- const CodePageDescription *cp = g_cpDescriptions;
- for (; cp->name; cp++) {
- if (codePageName.equalsIgnoreCase(cp->name))
- return cp->id;
- }
- return -1;
-}
-}
-
-#endif // WIN32_CODEPAGE_H
diff --git a/backends/platform/sdl/win32/win32.cpp b/backends/platform/sdl/win32/win32.cpp
index 0c9d844a9d..835f7ff62c 100644
--- a/backends/platform/sdl/win32/win32.cpp
+++ b/backends/platform/sdl/win32/win32.cpp
@@ -44,7 +44,6 @@
#include "backends/platform/sdl/win32/win32.h"
#include "backends/platform/sdl/win32/win32-window.h"
#include "backends/platform/sdl/win32/win32_wrapper.h"
-#include "backends/platform/sdl/win32/codepage.h"
#include "backends/saves/windows/windows-saves.h"
#include "backends/fs/windows/windows-fs-factory.h"
#include "backends/taskbar/win32/win32-taskbar.h"
@@ -53,7 +52,6 @@
#include "common/memstream.h"
#include "common/ustr.h"
-#include "common/encoding.h"
#if defined(USE_TTS)
#include "backends/text-to-speech/windows/windows-text-to-speech.h"
@@ -398,106 +396,4 @@ AudioCDManager *OSystem_Win32::createAudioCDManager() {
return createWin32AudioCDManager();
}
-char *OSystem_Win32::convertEncoding(const char* to, const char *from, const char *string, size_t length) {
- char *newString = nullptr;
- char *result = OSystem_SDL::convertEncoding(to, from, string, length);
- if (result != nullptr)
- return result;
-
- bool swapFromEndian = false;
-#ifdef SCUMM_BIG_ENDIAN
- if (Common::String(from).hasSuffixIgnoreCase("le"))
- swapFromEndian = true;
-#else
- if (Common::String(from).hasSuffixIgnoreCase("be"))
- swapFromEndian = true;
-#endif
- if (swapFromEndian) {
- if (Common::String(from).hasPrefixIgnoreCase("utf-16")) {
- newString = Common::Encoding::switchEndian(string, length, 16);
- from = "utf-16";
- }
- else if (Common::String(from).hasPrefixIgnoreCase("utf-32")) {
- newString = Common::Encoding::switchEndian(string, length, 32);
- from = "utf-32";
- }
- else
- return nullptr;
- if (newString != nullptr)
- string = newString;
- else
- return nullptr;
- }
- bool swapToEndian = false;
-#ifdef SCUMM_BIG_ENDIAN
- if (Common::String(to).hasSuffixIgnoreCase("le"))
- swapToEndian = true;
-#else
- if (Common::String(to).hasSuffixIgnoreCase("be"))
- swapToEndian = true;
-#endif
- // UTF-32 is really important for us, because it is used for the
- // transliteration in Common::Encoding and Win32 cannot convert it
- Common::String tempString;
- if (Common::String(from).hasPrefixIgnoreCase("utf-32")) {
- Common::U32String UTF32Str((const uint32 *)string, length / 4);
- tempString = Common::convertUtf32ToUtf8(UTF32Str);
- string = tempString.c_str();
- from = "utf-8";
- }
- if (Common::String(to).hasPrefixIgnoreCase("utf-32")) {
- char *UTF8Str = Common::Encoding::convert("utf-8", from, string, length);
- Common::U32String UTF32Str = Common::convertUtf8ToUtf32(UTF8Str);
- free(UTF8Str);
- if (swapToEndian) {
- result = Common::Encoding::switchEndian((const char *) UTF32Str.c_str(),
- (UTF32Str.size() + 1) * 4,
- 32);
- } else {
- result = (char *) malloc((UTF32Str.size() + 1) * 4);
- memcpy(result, UTF32Str.c_str(), (UTF32Str.size() + 1) * 4);
- }
- if (newString != nullptr)
- free(newString);
- return result;
- }
-
- // Add ending zeros
- WCHAR *tmpStr;
- if (Common::String(from).hasPrefixIgnoreCase("utf-16")) {
- // Allocate space for string and 2 ending zeros
- tmpStr = (WCHAR *) calloc(sizeof(char), length + 2);
- if (!tmpStr) {
- if (newString != nullptr)
- free(newString);
- warning("Could not allocate memory for string conversion");
- return nullptr;
- }
- memcpy(tmpStr, string, length);
- } else {
- tmpStr = Win32::ansiToUnicode(string, Win32::getCodePageId(from));
- if (!tmpStr) {
- if (newString != nullptr)
- free(newString);
- return nullptr;
- }
- }
-
- if (newString != nullptr)
- free(newString);
-
- if (Common::String(to).hasPrefixIgnoreCase("utf-16")) {
- if (swapToEndian) {
- result = Common::Encoding::switchEndian((char *)tmpStr, wcslen(tmpStr) * 2 + 2, 16);
- free(tmpStr);
- return result;
- }
- return (char *) tmpStr;
- } else {
- result = Win32::unicodeToAnsi(tmpStr, Win32::getCodePageId(to));
- free(tmpStr);
- return result;
- }
-}
-
#endif
diff --git a/backends/platform/sdl/win32/win32.h b/backends/platform/sdl/win32/win32.h
index 03cf6036ab..e7fa7858f9 100644
--- a/backends/platform/sdl/win32/win32.h
+++ b/backends/platform/sdl/win32/win32.h
@@ -54,8 +54,6 @@ protected:
virtual AudioCDManager *createAudioCDManager() override;
HWND getHwnd() { return ((SdlWindow_Win32*)_window)->getHwnd(); }
-
- virtual char *convertEncoding(const char *to, const char *from, const char *string, size_t length) override;
};
#endif
diff --git a/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v1.pkg b/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v1.pkg
index 6ec03557be..5d3bee4953 100644
--- a/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v1.pkg
+++ b/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v1.pkg
@@ -50,6 +50,7 @@
"..\..\..\..\NEWS"-"!:\system\apps\scummvm\NEWS"
; Common datafiles needed for some games
+"..\encoding.dat"-"!:\system\apps\scummvm\encoding.dat"
"..\kyra.dat"-"!:\system\apps\scummvm\kyra.dat"
"..\sky.cpt"-"!:\system\apps\scummvm\sky.cpt"
diff --git a/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg b/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg
index fddf772b7f..07300ecc39 100644
--- a/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg
+++ b/backends/platform/symbian/S60/scummvm-CVS-SymbianS60v2.pkg
@@ -49,6 +49,7 @@
"..\..\..\..\NEWS"-"!:\system\apps\scummvm\NEWS"
; Common datafiles needed for some games
+"..\..\..\..\dists\engine-data\encoding.dat"-"!:\system\apps\scummvm\encoding.dat"
"..\..\..\..\dists\engine-data\kyra.dat"-"!:\system\apps\scummvm\kyra.dat"
"..\..\..\..\dists\engine-data\sky.cpt"-"!:\system\apps\scummvm\sky.cpt"
"..\..\..\..\dists\engine-data\lure.dat"-"!:\system\apps\scummvm\lure.dat"
diff --git a/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg b/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg
index 7096af37ff..e0449fa0b0 100644
--- a/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg
+++ b/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3.pkg
@@ -62,6 +62,7 @@
; Common datafiles needed for some games
"..\..\..\..\dists\engine-data\drascula.dat"-"c:\data\scummvm\drascula.dat"
+"..\..\..\..\dists\engine-data\encoding.dat"-"c:\system\apps\scummvm\encoding.dat"
"..\..\..\..\dists\engine-data\fonts.dat"-"c:\data\scummvm\fonts.dat"
"..\..\..\..\dists\engine-data\hugo.dat"-"c:\data\scummvm\hugo.dat"
"..\..\..\..\dists\engine-data\kyra.dat"-"c:\data\scummvm\kyra.dat"
diff --git a/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3_split.pkg b/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3_split.pkg
index 9f36859d0c..3b7ad39671 100644
--- a/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3_split.pkg
+++ b/backends/platform/symbian/S60v3/scummvm-CVS-SymbianS60v3_split.pkg
@@ -67,6 +67,7 @@
; Common datafiles needed for some games
"..\..\..\..\dists\engine-data\drascula.dat"-"c:\data\scummvm\drascula.dat"
+"..\..\..\..\dists\engine-data\encoding.dat"-"c:\data\scummvm\encoding.dat"
"..\..\..\..\dists\engine-data\fonts.dat"-"c:\data\scummvm\fonts.dat"
"..\..\..\..\dists\engine-data\hugo.dat"-"c:\data\scummvm\hugo.dat"
"..\..\..\..\dists\engine-data\kyra.dat"-"c:\data\scummvm\kyra.dat"
diff --git a/backends/platform/symbian/S80/scummvm-CVS-SymbianS80.pkg b/backends/platform/symbian/S80/scummvm-CVS-SymbianS80.pkg
index cfff4be7c5..ed06528e4d 100644
--- a/backends/platform/symbian/S80/scummvm-CVS-SymbianS80.pkg
+++ b/backends/platform/symbian/S80/scummvm-CVS-SymbianS80.pkg
@@ -49,6 +49,7 @@
"..\..\..\..\NEWS"-"!:\system\apps\scummvm\NEWS"
; Common datafiles needed for some games
+"..\..\..\..\dists\engine-data\encoding.dat"-"!:\system\apps\scummvm\encoding.dat"
"..\..\..\..\dists\engine-data\kyra.dat"-"!:\system\apps\scummvm\kyra.dat"
"..\..\..\..\dists\engine-data\sky.cpt"-"!:\system\apps\scummvm\sky.cpt"
"..\..\..\..\dists\engine-data\lure.dat"-"!:\system\apps\scummvm\lure.dat"
diff --git a/backends/platform/symbian/S90/scummvm-CVS-SymbianS90.pkg b/backends/platform/symbian/S90/scummvm-CVS-SymbianS90.pkg
index 9057eb66a5..17ac12e6bf 100644
--- a/backends/platform/symbian/S90/scummvm-CVS-SymbianS90.pkg
+++ b/backends/platform/symbian/S90/scummvm-CVS-SymbianS90.pkg
@@ -49,6 +49,7 @@
"..\..\..\..\NEWS"-"!:\system\apps\scummvm\NEWS"
; Common datafiles needed for some games
+"..\..\..\..\dists\engine-data\encoding.dat"-"!:\system\apps\scummvm\encoding.dat"
"..\..\..\..\dists\engine-data\kyra.dat"-"!:\system\apps\scummvm\kyra.dat"
"..\..\..\..\dists\engine-data\sky.cpt"-"!:\system\apps\scummvm\sky.cpt"
"..\..\..\..\dists\engine-data\lure.dat"-"!:\system\apps\scummvm\lure.dat"
diff --git a/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg b/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg
index 26038f4875..74ff4fcd0c 100644
--- a/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg
+++ b/backends/platform/symbian/UIQ2/scummvm-CVS-SymbianUIQ2.pkg
@@ -48,6 +48,7 @@
"..\..\..\..\NEWS"-"!:\system\apps\scummvm\NEWS"
; Common datafiles needed for some games
+"..\encoding.dat"-"!:\system\apps\scummvm\encoding.dat"
"..\kyra.dat"-"!:\system\apps\scummvm\kyra.dat"
"..\sky.cpt"-"!:\system\apps\scummvm\sky.cpt"
diff --git a/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg b/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg
index 183495cfd5..d976f2a062 100644
--- a/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg
+++ b/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3.pkg
@@ -60,6 +60,7 @@
; Common datafiles needed for some games
"..\..\..\..\dists\engine-data\drascula.dat"-"c:\shared\scummvm\drascula.dat"
+"..\..\..\..\dists\engine-data\encoding.dat"-"c:\shared\scummvm\encoding.dat"
"..\..\..\..\dists\engine-data\fonts.dat"-"c:\shared\scummvm\fonts.dat"
"..\..\..\..\dists\engine-data\hugo.dat"-"c:\shared\scummvm\hugo.dat"
"..\..\..\..\dists\engine-data\kyra.dat"-"c:\shared\scummvm\kyra.dat"
diff --git a/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3_split.pkg b/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3_split.pkg
index c437d6720c..1c7843d79e 100644
--- a/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3_split.pkg
+++ b/backends/platform/symbian/UIQ3/scummvm-CVS-SymbianUIQ3_split.pkg
@@ -68,6 +68,7 @@
; Common datafiles needed for some games
"..\..\..\..\dists\engine-data\drascula.dat"-"c:\shared\scummvm\drascula.dat"
+"..\..\..\..\dists\engine-data\encoding.dat"-"c:\shared\scummvm\encoding.dat"
"..\..\..\..\dists\engine-data\fonts.dat"-"c:\shared\scummvm\fonts.dat"
"..\..\..\..\dists\engine-data\hugo.dat"-"c:\shared\scummvm\hugo.dat"
"..\..\..\..\dists\engine-data\kyra.dat"-"c:\shared\scummvm\kyra.dat"
diff --git a/backends/text-to-speech/linux/linux-text-to-speech.cpp b/backends/text-to-speech/linux/linux-text-to-speech.cpp
index 5751fced65..5ebd34a3b6 100644
--- a/backends/text-to-speech/linux/linux-text-to-speech.cpp
+++ b/backends/text-to-speech/linux/linux-text-to-speech.cpp
@@ -32,7 +32,6 @@
#include "common/system.h"
#include "common/ustr.h"
#include "common/config-manager.h"
-#include "common/encoding.h"
SPDConnection *_connection;
diff --git a/backends/text-to-speech/windows/windows-text-to-speech.cpp b/backends/text-to-speech/windows/windows-text-to-speech.cpp
index 974d677978..d9599d1575 100644
--- a/backends/text-to-speech/windows/windows-text-to-speech.cpp
+++ b/backends/text-to-speech/windows/windows-text-to-speech.cpp
@@ -40,7 +40,6 @@
#include "common/system.h"
#include "common/ustr.h"
#include "common/config-manager.h"
-#include "common/encoding.h"
ISpVoice *_voice;
@@ -184,8 +183,8 @@ bool WindowsTextToSpeechManager::say(const Common::U32String &str, Action action
return true;
// We have to set the pitch by prepending xml code at the start of the said string;
- Common::U32String pitch = Common::U32String::format(Common::U32String("<pitch absmiddle=\"%d\">%S"), _ttsState->_pitch / 10, str.c_str());
- WCHAR *strW = (WCHAR *) Common::Encoding::convert("UTF-16", pitch);
+ Common::U32String pitch = Common::U32String::format("<pitch absmiddle=\"%d\">%S", _ttsState->_pitch / 10, str.c_str());
+ WCHAR *strW = (WCHAR *) pitch.encodeUTF16Native();
if (strW == nullptr) {
warning("Cannot convert from UTF-32 encoding for text to speech");
return true;
diff --git a/common/base-str.cpp b/common/base-str.cpp
index b0bad0b518..027aba1c03 100644
--- a/common/base-str.cpp
+++ b/common/base-str.cpp
@@ -241,30 +241,6 @@ TEMPLATE void BASESTRING::initWithValueTypeStr(const value_type *str, uint32 len
_str[len] = 0;
}
-TEMPLATE void BASESTRING::initWithCStr(const char *str, uint32 len) {
- assert(str);
-
- // Init _storage member explicitly (ie. without calling its constructor)
- // for GCC 2.95.x compatibility (see also tracker item #1602879).
- _storage[0] = 0;
-
- _size = len;
-
- if (len >= _builtinCapacity) {
- // Not enough internal storage, so allocate more
- _extern._capacity = computeCapacity(len + 1);
- _extern._refCount = nullptr;
- _str = new value_type[_extern._capacity];
- assert(_str != nullptr);
- }
-
- // Copy the string into the storage area
- for (size_t idx = 0; idx < len; ++idx, ++str)
- _str[idx] = (byte)(*str);
-
- _str[len] = 0;
-}
-
TEMPLATE bool BASESTRING::equals(const BaseString &x) const {
if (this == &x || _str == x._str) {
return true;
diff --git a/common/base-str.h b/common/base-str.h
index cfb2b1a57d..fe6188c667 100644
--- a/common/base-str.h
+++ b/common/base-str.h
@@ -243,7 +243,6 @@ protected:
void incRefCount() const;
void decRefCount(int *oldRefCount);
void initWithValueTypeStr(const value_type *str, uint32 len);
- void initWithCStr(const char *str, uint32 len);
void assignAppend(const value_type *str);
void assignAppend(value_type c);
diff --git a/common/iconv.h b/common/enc-internal.h
similarity index 54%
rename from common/iconv.h
rename to common/enc-internal.h
index 2389caba25..4282f0ff78 100644
--- a/common/iconv.h
+++ b/common/enc-internal.h
@@ -20,42 +20,28 @@
*
*/
-#ifndef COMMON_ICONV_H
-#define COMMON_ICONV_H
-
+#ifndef COMMON_ENC_INTERNAL
+#define COMMON_ENC_INTERNAL 1
#include "common/scummsys.h"
-#ifdef USE_ICONV
-
namespace Common {
-class String;
-class U32String;
-
-enum IconvEncoding {
- /** Windows codepage 1250 (Eastern European, Latin alphabet) */
- kEncodingCP1250,
-
- /** Windows codepage 1251 (Eastern European, Cyrillic alphabet) */
- kEncodingCP1251,
-
- /** Windows codepage 1252 (Western European, Latin alphabet) */
- kEncodingCP1252,
-
- /** Windows codepage 1255 (Hebrew) */
- kEncodingCP1255,
-
- /** Windows codepage 932 (Japanese, extended Shift-JIS) */
- kEncodingCP932,
-
- /** Macintosh Central European (Eastern European, Latin alphabet) */
- kEncodingMacCentralEurope
-};
-
-U32String convertToU32String(IconvEncoding fromEncoding, const String &string);
-
-} // End of namespace Common
-
-#endif // USE_ICONV
-
-#endif // COMMON_ICONV_H
+extern const uint16 kWindows1250ConversionTable[128];
+extern const uint16 kWindows1251ConversionTable[128];
+extern const uint16 kWindows1252ConversionTable[128];
+extern const uint16 kWindows1253ConversionTable[128];
+extern const uint16 kWindows1254ConversionTable[128];
+extern const uint16 kWindows1255ConversionTable[128];
+extern const uint16 kWindows1256ConversionTable[128];
+extern const uint16 kWindows1257ConversionTable[128];
+extern const uint16 kMacCentralEuropeConversionTable[128];
+extern const uint16 kLatin1ConversionTable[128];
+extern const uint16 kLatin2ConversionTable[128];
+extern const uint16 kISO5ConversionTable[128];
+extern const uint16 kASCIIConversionTable[128];
+extern const uint16 kDos850ConversionTable[128];
+extern const uint16 kDos866ConversionTable[128];
+
+}
+
+#endif
diff --git a/common/encoding.cpp b/common/encoding.cpp
deleted file mode 100644
index 5d701d3cd1..0000000000
--- a/common/encoding.cpp
+++ /dev/null
@@ -1,484 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#define FORBIDDEN_SYMBOL_ALLOW_ALL
-#include "common/encoding.h"
-#include "common/textconsole.h"
-#include "common/system.h"
-#include "common/translation.h"
-#include "common/endian.h"
-#include <errno.h>
-
-#ifdef USE_ICONV
-
-#include <iconv.h>
-
-#endif // USE_ICONV
-
-namespace Common {
-
-String addUtfEndianness(const String &str) {
- if (str.equalsIgnoreCase("utf-16") || str.equalsIgnoreCase("utf-32")) {
-#ifdef SCUMM_BIG_ENDIAN
- return str + "BE";
-#else
- return str + "LE";
-#endif
- } else
- return str;
-}
-
-Encoding::Encoding(const String &to, const String &from)
- : _to(to)
- , _from(from) {
-}
-
-char *Encoding::switchEndian(const char *string, int length, int bitCount) {
- assert(bitCount % 8 == 0);
- assert(length % (bitCount / 8) == 0);
- char *newString = (char *)calloc(sizeof(char), length + 4);
- if (!newString) {
- warning("Could not allocate memory for string conversion");
- return nullptr;
- }
- if (bitCount == 16) {
- int characterCount = length / 2;
- for(int i = 0; i < characterCount ; i++)
- ((uint16 *)newString)[i] = SWAP_BYTES_16(((const uint16 *)string)[i]);
- return newString;
- } else if (bitCount == 32) {
- int characterCount = length / 4;
- for(int i = 0; i < characterCount ; i++)
- ((uint32 *)newString)[i] = SWAP_BYTES_32(((const uint32 *)string)[i]);
- return newString;
- } else {
- free(newString);
- return nullptr;
- }
-}
-
-char *Encoding::convert(const char *string, size_t size) {
- return convertWithTransliteration(_to, _from, string, size);
-}
-
-char *Encoding::convert(const String &to, const String &from, const char *string, size_t size) {
- return convertWithTransliteration(to, from, string, size);
-}
-
-char *Encoding::convertWithTransliteration(const String &to, const String &from, const char *string, size_t length) {
- if (from.equalsIgnoreCase(to)) {
- // don't convert, just copy the string and return it
- char *result = (char *)calloc(sizeof(char), length + 4);
-
- if (!result) {
- warning("Could not allocate memory for string conversion");
- return nullptr;
- }
-
- memcpy(result, string, length);
- return result;
- }
-
- if ((to.hasPrefixIgnoreCase("utf-16") && from.hasPrefixIgnoreCase("utf-16")) ||
- (to.hasPrefixIgnoreCase("utf-32") && from.hasPrefixIgnoreCase("utf-32"))) {
- // Since the two strings are not equal as this is already checked above,
- // this likely mean that one or both has an endianness suffix, and we
- // just need to switch the endianess.
-#ifdef SCUMM_BIG_ENDIAN
- bool fromBigEndian = !from.hasSuffixIgnoreCase("le");
- bool toBigEndian = !to.hasSuffixIgnoreCase("le");
-#else
- bool fromBigEndian = from.hasSuffixIgnoreCase("be");
- bool toBigEndian = to.hasSuffixIgnoreCase("be");
-#endif
- if (fromBigEndian == toBigEndian) {
- // don't convert, just copy the string and return it
- char *result = (char *)calloc(sizeof(char), length + 4);
- if (!result) {
- warning("Could not allocate memory for string conversion");
- return nullptr;
- }
- memcpy(result, string, length);
- return result;
- } else {
- if (to.hasPrefixIgnoreCase("utf-16"))
- return switchEndian(string, length, 16);
- else
- return switchEndian(string, length, 32);
- }
- }
-
- char *newString = nullptr;
- String newFrom = from;
- size_t newLength = length;
-
- if (from.equalsIgnoreCase("iso-8859-5") &&
- !to.hasPrefixIgnoreCase("utf")) {
- // There might be some cyrillic characters, which need to be transliterated.
- newString = transliterateCyrillic(string);
-
- if (!newString)
- return nullptr;
-
- newFrom = "ASCII";
- }
-
- if (from.hasPrefixIgnoreCase("utf") &&
- !to.hasPrefixIgnoreCase("utf") &&
- !to.equalsIgnoreCase("iso-8859-5")) {
- // There might be some cyrillic characters, which need to be transliterated.
- char *tmpString;
- if (from.hasPrefixIgnoreCase("utf-32")) {
- tmpString = nullptr;
- } else {
- tmpString = conversion("UTF-32", from, string, length);
- if (!tmpString)
- return nullptr;
- // find out the length in bytes of the tmpString
- int i;
-
- for (i = 0; ((const uint32 *)tmpString)[i]; i++)
- ;
-
- newLength = i * 4;
- newFrom = "UTF-32";
- }
-
- if (tmpString != nullptr) {
- newString = (char *)transliterateUTF32((const uint32 *)tmpString, newLength);
- free(tmpString);
- } else {
- newString = (char *)transliterateUTF32((const uint32 *)string, newLength);
- }
-
- if (!newString)
- return nullptr;
- }
-
- char *result;
- if (newString != nullptr) {
- result = conversion(to, newFrom, newString, newLength);
- free(newString);
- } else {
- result = conversion(to, newFrom, string, newLength);
- }
-
- return result;
-}
-
-char *Encoding::conversion(const String &to, const String &from, const char *string, size_t length) {
- char *result = nullptr;
-#ifdef USE_ICONV
- result = convertIconv(addUtfEndianness(to).c_str(), addUtfEndianness(from).c_str(), string, length);
-#endif // USE_ICONV
- if (result == nullptr)
- result = g_system->convertEncoding(addUtfEndianness(to).c_str(),
- addUtfEndianness(from).c_str(), string, length);
-
- if (result == nullptr) {
- result = convertConversionTable(addUtfEndianness(to).c_str(), addUtfEndianness(from).c_str(), string, length);
- }
-
- return result;
-}
-
-char *Encoding::convertIconv(const char *to, const char *from, const char *string, size_t length) {
-#ifdef USE_ICONV
-
- String toTranslit = String(to) + "//TRANSLIT";
- iconv_t iconvHandle = iconv_open(toTranslit.c_str(), from);
-
- if (iconvHandle == (iconv_t)-1)
- return nullptr;
-
- size_t inSize = length;
- size_t stringSize = inSize > 4 ? inSize : 4;
- size_t outSize = stringSize;
-
-
-#ifdef ICONV_USES_CONST
- const char *src = string;
-#else
- char *src = new char[length];
- char *originalSrc = src;
- memcpy(src, string, length);
-#endif // ICONV_USES_CONST
-
- char *buffer = (char *)calloc(sizeof(char), stringSize);
- if (!buffer) {
-#ifndef ICONV_USES_CONST
- delete[] originalSrc;
-#endif // ICONV_USES_CONST
- iconv_close(iconvHandle);
- warning ("Cannot allocate memory for converting string");
- return nullptr;
- }
- char *dst = buffer;
- bool error = false;
-
- while (true) {
- if (iconv(iconvHandle, &src, &inSize, &dst, &outSize) == ((size_t)-1)) {
- // from SDL's implementation of SDL_iconv_string (slightly altered)
- if (errno == E2BIG) {
- char *oldString = buffer;
- stringSize *= 2;
- buffer = (char *)realloc(buffer, stringSize);
- if (!buffer) {
- warning("Cannot allocate memory for converting string");
- error = true;
- break;
- }
- dst = buffer + (dst - oldString);
- outSize = stringSize - (dst - buffer);
- memset(dst, 0, outSize);
- } else {
- error = true;
- break;
- }
- } else {
- // we've successfully finished, after the last call with NULLs
- if (inSize == 0 && src == NULL) {
- break;
- }
- }
- if (inSize == 0) {
- // we're at the end - call one last time with NULLs
- src = NULL;
- }
- }
-
- // Add a zero character to the end. Hopefuly UTF32 uses the most bytes from
- // all possible encodings, so add 4 zero bytes.
- buffer = (char *)realloc(buffer, stringSize + 4);
- memset(buffer + stringSize, 0, 4);
-
-#ifndef ICONV_USES_CONST
- delete[] originalSrc;
-#endif // ICONV_USES_CONST
-
- iconv_close(iconvHandle);
- if (error) {
- if (buffer)
- free(buffer);
- return nullptr;
- }
- return buffer;
-#else
- return nullptr;
-#endif //USE_ICONV
-}
-
-static uint32 g_cp850ConversionTable[] = {
- 0x0000, 0x263A, 0x263B, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
- 0x25d8, 0x25CB, 0x25D9, 0x2642, 0x2640, 0x266A, 0x266B, 0x263C,
- 0x25BA, 0x25C4, 0x2195, 0x203C, 0x00B6, 0x00A7, 0x25AC, 0x21A8,
- 0x2191, 0x2193, 0x2192, 0x2190, 0x221F, 0x2194, 0x25B2, 0x25BC,
- 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
- 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
- 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
- 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
- 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
- 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
- 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
- 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
- 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
- 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
- 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
- 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x2302,
-
- 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7,
- 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
- 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9,
- 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192,
- 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA,
- 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0,
- 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3,
- 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
- 0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x0131, 0x00CD, 0x00CE,
- 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580,
- 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE,
- 0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4,
- 0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8,
- 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
-};
-
-static uint32 g_cp437ConversionTable[] = {
- 0x0000, 0x263A, 0x263B, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
- 0x25d8, 0x25CB, 0x25D9, 0x2642, 0x2640, 0x266A, 0x266B, 0x263C,
- 0x25BA, 0x25C4, 0x2195, 0x203C, 0x00B6, 0x00A7, 0x25AC, 0x21A8,
- 0x2191, 0x2193, 0x2192, 0x2190, 0x221F, 0x2194, 0x25B2, 0x25BC,
- 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
- 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
- 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
- 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
- 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
- 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
- 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
- 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
- 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
- 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
- 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
- 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x2302,
-
- 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7,
- 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
- 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9,
- 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
- 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA,
- 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
- 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F,
- 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
- 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B,
- 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
- 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4,
- 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
- 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248,
- 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
-};
-
-struct ConversionTable {
- const char *name;
- uint32 *table;
-};
-
-const ConversionTable g_encodingConversionTables[] = {
- {"cp850", g_cp850ConversionTable},
- {"cp437", g_cp437ConversionTable},
- {nullptr, nullptr}
-};
-
-char *Encoding::convertConversionTable(const char *to, const char *from, const char *string, size_t length) {
- uint32 *table = nullptr;
- for (const ConversionTable *i = g_encodingConversionTables; i->name != nullptr; i++) {
- if (String(from).equalsIgnoreCase(i->name)) {
- table = i->table;
- }
- }
- if (table != nullptr) {
- uint32 *utf32Result = (uint32 *)calloc(sizeof(uint32), length + 1);
- if (!utf32Result) {
- warning("Could not allocate memory for encoding conversion");
- return nullptr;
- }
- for (unsigned i = 0; i < length; i++) {
- utf32Result[i] = table[(unsigned char)string[i]];
- }
- char *finalResult = convert(to, "utf-32", (char *)utf32Result, length * 4);
- free(utf32Result);
- return finalResult;
- }
-
- for (const ConversionTable *i = g_encodingConversionTables; i->name != nullptr; i++) {
- if (String(to).equalsIgnoreCase(i->name)) {
- table = i->table;
- }
- }
- if (table != nullptr) {
- uint32 *utf32Result = (uint32 *)convert("utf-32", from, string, length);
- if (String(from).hasPrefixIgnoreCase("utf-16"))
- length /= 2;
- if (String(from).hasPrefixIgnoreCase("utf-32"))
- length /= 4;
- char *finalResult = (char *)calloc(sizeof(char), length +1);
- if (!finalResult) {
- warning("Could not allocate memory for encoding conversion");
- return nullptr;
- }
- for (unsigned i = 0; i < length; i++) {
- for (unsigned j = 0; j < 257; j++) {
- if (j == 256) {
- // We have some character, that isn't a part of cp850, so
- // we replace it with '?' to remain consistent with iconv
- // and SDL
- finalResult[i] = '?';
- } else if (utf32Result[i] == table[j]){
- finalResult[i] = j;
- break;
- }
- }
- }
- free(utf32Result);
- return finalResult;
- }
- return nullptr;
-}
-
-static char g_cyrillicTransliterationTable[] = {
- ' ', 'E', 'D', 'G', 'E', 'Z', 'I', 'I', 'J', 'L', 'N', 'C', 'K', '-', 'U', 'D',
- 'A', 'B', 'V', 'G', 'D', 'E', 'Z', 'Z', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
- 'R', 'S', 'T', 'U', 'F', 'H', 'C', 'C', 'S', 'S', '\"', 'Y', '\'', 'E', 'U', 'A',
- 'a', 'b', 'v', 'g', 'd', 'e', 'z', 'z', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
- 'r', 's', 't', 'u', 'f', 'h', 'c', 'c', 's', 's', '\"', 'y', '\'', 'e', 'u', 'a',
- 'N', 'e', 'd', 'g', 'e', 'z', 'i', 'i', 'j', 'l', 'n', 'c', 'k', '?', 'u', 'd',
-};
-
-char *Encoding::transliterateCyrillic(const char *string) {
- char *result = (char *)malloc(strlen(string) + 1);
- if (!result) {
- warning("Could not allocate memory for encoding conversion");
- return nullptr;
- }
- for(unsigned i = 0; i <= strlen(string); i++) {
- if ((unsigned char)string[i] >= 160)
- result[i] = g_cyrillicTransliterationTable[(unsigned char)string[i] - 160];
- else
- result[i] = string[i];
- }
- return result;
-}
-
-uint32 *Encoding::transliterateUTF32(const uint32 *string, size_t length) {
- uint32 *result = (uint32 *)malloc(length + 4);
- if (!result) {
- warning("Could not allocate memory for encoding conversion");
- return nullptr;
- }
- for(unsigned i = 0; i <= length / 4; i++) {
- if (string[i] >= 0x410 && string[i] <= 0x450)
- result[i] = g_cyrillicTransliterationTable[string[i] - 160 - 864];
- else
- result[i] = string[i];
- }
- return result;
-}
-
-size_t Encoding::stringLength(const char *string, const String &encoding) {
- if (encoding.hasPrefixIgnoreCase("UTF-16")) {
- const uint16 *i = (const uint16 *)string;
- for (;*i != 0; i++) {}
- return (const char *)i - string;
- } else if (encoding.hasPrefixIgnoreCase("UTF-32")) {
- const uint32 *i = (const uint32 *)string;
- for (;*i != 0; i++) {}
- return (const char *)i - string;
- } else {
- const char *i = string;
- for (;*i != 0; i++) {}
- return i - string;
- }
-}
-
-}
diff --git a/common/encoding.h b/common/encoding.h
deleted file mode 100644
index 054da9b9a2..0000000000
--- a/common/encoding.h
+++ /dev/null
@@ -1,244 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef COMMON_ENCODING_H
-#define COMMON_ENCODING_H
-
-#include "common/scummsys.h"
-#include "common/str.h"
-#include "common/system.h"
-
-
-namespace Common {
-
-/**
- * @defgroup common_encoding Text encoding
- * @ingroup common
- *
- * @brief Functions for managing text encoding.
- *
- * @{
- */
-
-/**
- * A class that allows conversion between different text encoding.
- * The encodings available depend on the current backend and whether
- * ScummVM is compiled with or without iconv.
- */
-class Encoding {
- public:
- /**
- * Construct everything needed for the conversion between two encodings
- * and saves the values for future use.
- *
- * @param to Name of the encoding the strings will be converted to.
- * @param from Name of the encoding the strings will be converted from.
- */
- Encoding(const String &to, const String &from);
- ~Encoding() {};
-
- /**
- * Convert a string between encodings.
- *
- * The resulting string is ended by a character with value 0
- * (C-like ending for 1 byte per character encodings, 2 zero bytes for UTF-16,
- * 4 zero bytes for UTF-32).
- * The result must be freed after usage using @c free(), not @c delete[].
- *
- * @param string String to be converted.
- * @param length Length of the string to convert in bytes.
- *
- * @return Converted string (must be freed) or nullptr if the conversion failed.
- */
- char *convert(const char *string, size_t length);
-
- /**
- * Convert a string between encodings.
- *
- * This is a static version of the method above.
- * The resulting string is ended by a character with value 0
- * (C-like ending for 1 byte per character encodings, 2 zero bytes for UTF-16,
- * 4 zero bytes for UTF-32). The result must be freed after usage.
- *
- * @param to Name of the encoding the strings will be converted to.
- * @param from Name of the encoding the strings will be converted from.
- * @param string String to be converted.
- * @param length Length of the string to convert in bytes.
- *
- * @return Converted string (must be freed) or nullptr if the conversion failed
- */
- static char *convert(const String &to, const String &from, const char *string, size_t length);
-
- static char *convert(const String &to, const String &from, const String &s) {
- return convert(to, from, s.c_str(), s.size());
- }
-
- static char *convert(const String &to, const U32String &s) {
- return convert(to, "UTF-32", (const char *)s.c_str(), s.size() * 4);
- }
-
- /**
- * @return The encoding that is currently being converted from.
- */
- String getFrom() {return _from;};
-
- /**
- * @param from The encoding to convert from.
- */
- void setFrom(const String &from) {_from = from;};
-
- /**
- * @return The encoding that is currently being converted to.
- */
- String getTo() {return _to;};
-
- /**
- * @param to The encoding to convert to.
- */
- void setTo(const String &to) {_to = to;};
-
- /**
- * Switch the endianness of a string.
- *
- * @param string Array containing the characters of a string.
- * @param length Length of the string in bytes.
- * @param bitCount Number of bits used for each character.
- *
- * @return Array of characters with the opposite endianness.
- */
- static char *switchEndian(const char *string, int length, int bitCount);
-
- /**
- * Compute the length (in bytes) of a string in a given encoding.
- *
- * The string must be zero ended. Similar to @c strlen.
- *
- * @note This function must be used instead of @c strlen for some encodings
- * (such as UTF-16 and UTF-32) because @c strlen does not support
- * multi-byte encodings, with some exceptions (such as UTF-8).
- *
- * @param string The string whose size to compute.
- * @param encoding Encoding of the string.
- *
- * @return Size of the string in bytes.
- */
- static size_t stringLength(const char *string, const String &encoding);
-
- private:
- /** The encoding that is currently being converted to. */
- String _to;
-
- /** The encoding that is currently being converted from. */
- String _from;
-
- /**
- * Take care of transliteration and call conversion.
- *
- * The result must be freed after usage.
- *
- * @param to Name of the encoding the strings will be converted to.
- * @param from Name of the encoding the strings will be converted from.
- * @param string The string to convert.
- * @param length Length of the string to convert in bytes.
- *
- * @return Converted string (must be freed) or nullptr if the conversion failed.
- */
- static char *convertWithTransliteration(const String &to, const String &from, const char *string, size_t length);
-
- /**
- * Call as many conversion functions as possible, or until the conversion
- * succeeds.
- *
- * It first tries to use iconv, then it tries to use platform
- * specific functions, and after that, it tries to use TransMan mapping.
- *
- * The result must be freed after usage.
- *
- * @param to Name of the encoding the strings will be converted to.
- * @param from Name of the encoding the strings will be converted from.
- * @param string The string to convert.
- * @param length Length of the string to convert in bytes.
- *
- * @return Converted string (must be freed) or nullptr if the conversion failed.
- */
- static char *conversion(const String &to, const String &from, const char *string, size_t length);
-
- /**
- * Attempt to convert the string using iconv.
- *
- * The result must be freed after usage.
- *
- * @param to Name of the encoding the strings will be converted to.
- * @param from Name of the encoding the strings will be converted from.
- * @param string The string to convert.
- * @param length Length of the string to convert in bytes.
- *
- * @return Converted string (must be freed) or nullptr if the conversion failed.
- */
- static char *convertIconv(const char *to, const char *from, const char *string, size_t length);
-
- /**
- * Use a conversion table to convert the string to unicode, and from that,
- * to the final encoding. Important encodings, that are not supported by
- * all backends should go here.
- *
- * The result must be freed after usage.
- *
- * @param to Name of the encoding the strings will be converted to.
- * @param from Name of the encoding the strings will be converted from.
- * @param string The string to be converted.
- * @param length Length of the string to convert in bytes.
- *
- * @return Converted string (must be freed) or nullptr if the conversion failed.
- */
- static char *convertConversionTable(const char *to, const char *from, const char *string, size_t length);
-
- /**
- * Transliterate a Cyrillic string in ISO-8859-5 encoding and return
- * its ASCII (Latin) form.
- *
- * The result must be freed after usage.
- *
- * @param string The string to convert.
- *
- * @return Transliterated string in ASCII (must be freed) or nullptr on fail.
- */
- static char *transliterateCyrillic(const char *string);
-
- /**
- * Transliterate a Cyrillic string into a UTF-32 string.
- *
- * The result must be freed after usage.
- *
- * @param string The string to convert.
- * @param length Length of the string in bytes.
- *
- * @return Transliterated string in UTF-32 (must be freed) or nullptr on fail.
- */
- static uint32 *transliterateUTF32(const uint32 *string, size_t length);
-};
-
-/** @} */
-
-}
-
-#endif // COMMON_ENCODING_H
diff --git a/common/encodings/singlebyte.cpp b/common/encodings/singlebyte.cpp
new file mode 100644
index 0000000000..5314ec05ca
--- /dev/null
+++ b/common/encodings/singlebyte.cpp
@@ -0,0 +1,266 @@
+#include "common/scummsys.h"
+#include "common/enc-internal.h"
+
+namespace Common {
+
+const uint16 kWindows1250ConversionTable[128] = {
+ 0x20AC, 0x0081, 0x201A, 0x0083, 0x201E, 0x2026, 0x2020, 0x2021,
+ 0x0088, 0x2030, 0x0160, 0x2039, 0x015A, 0x0164, 0x017D, 0x0179,
+ 0x0090, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
+ 0x0098, 0x2122, 0x0161, 0x203A, 0x015B, 0x0165, 0x017E, 0x017A,
+ 0x00A0, 0x02C7, 0x02D8, 0x0141, 0x00A4, 0x0104, 0x00A6, 0x00A7,
+ 0x00A8, 0x00A9, 0x015E, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x017B,
+ 0x00B0, 0x00B1, 0x02DB, 0x0142, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
+ 0x00B8, 0x0105, 0x015F, 0x00BB, 0x013D, 0x02DD, 0x013E, 0x017C,
+ 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7,
+ 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E,
+ 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7,
+ 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF,
+ 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7,
+ 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F,
+ 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7,
+ 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9};
+
+const uint16 kWindows1251ConversionTable[128] = {
+ 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021,
+ 0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F,
+ 0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
+ 0x0098, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F,
+ 0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7,
+ 0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407,
+ 0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7,
+ 0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457,
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
+ 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
+ 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
+ 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
+ 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F};
+
+const uint16 kWindows1252ConversionTable[128] = {
+ 0x20AC, 0x0081, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
+ 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008D, 0x017D, 0x008F,
+ 0x0090, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
+ 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x009D, 0x017E, 0x0178,
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
+ 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
+ 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
+ 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
+ 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
+ 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
+ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
+ 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
+ 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
+ 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF};
+
+const uint16 kWindows1253ConversionTable[128] = {
+ 0x20AC, 0x0081, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
+ 0x0088, 0x2030, 0x008A, 0x2039, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
+ 0x0098, 0x2122, 0x009A, 0x203A, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x0385, 0x0386, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
+ 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x2015,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x00B5, 0x00B6, 0x00B7,
+ 0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F,
+ 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
+ 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
+ 0x03A0, 0x03A1, 0x00D2, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7,
+ 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF,
+ 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7,
+ 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
+ 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7,
+ 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0x00FF};
+
+const uint16 kWindows1254ConversionTable[128] = {
+ 0x20AC, 0x0081, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
+ 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
+ 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x009D, 0x009E, 0x0178,
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
+ 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
+ 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
+ 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
+ 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
+ 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF,
+ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
+ 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
+ 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
+ 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF};
+
+const uint16 kWindows1255ConversionTable[128] = {
+ 0x20AC, 0x0081, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
+ 0x02C6, 0x2030, 0x008A, 0x2039, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
+ 0x02DC, 0x2122, 0x009A, 0x203A, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AA, 0x00A5, 0x00A6, 0x00A7,
+ 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
+ 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
+ 0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7,
+ 0x05B8, 0x05B9, 0x05BA, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF,
+ 0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05F0, 0x05F1, 0x05F2, 0x05F3,
+ 0x05F4, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
+ 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7,
+ 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
+ 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7,
+ 0x05E8, 0x05E9, 0x05EA, 0x00FB, 0x00FC, 0x200E, 0x200F, 0x00FF};
+
+const uint16 kWindows1256ConversionTable[128] = {
+ 0x20AC, 0x067E, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
+ 0x02C6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688,
+ 0x06AF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
+ 0x06A9, 0x2122, 0x0691, 0x203A, 0x0153, 0x200C, 0x200D, 0x06BA,
+ 0x00A0, 0x060C, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
+ 0x00A8, 0x00A9, 0x06BE, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
+ 0x00B8, 0x00B9, 0x061B, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x061F,
+ 0x06C1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
+ 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F,
+ 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00D7,
+ 0x0637, 0x0638, 0x0639, 0x063A, 0x0640, 0x0641, 0x0642, 0x0643,
+ 0x00E0, 0x0644, 0x00E2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00E7,
+ 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0649, 0x064A, 0x00EE, 0x00EF,
+ 0x064B, 0x064C, 0x064D, 0x064E, 0x00F4, 0x064F, 0x0650, 0x00F7,
+ 0x0651, 0x00F9, 0x0652, 0x00FB, 0x00FC, 0x200E, 0x200F, 0x06D2};
+
+const uint16 kWindows1257ConversionTable[128] = {
+ 0x20AC, 0x0081, 0x201A, 0x0083, 0x201E, 0x2026, 0x2020, 0x2021,
+ 0x0088, 0x2030, 0x008A, 0x2039, 0x008C, 0x00A8, 0x02C7, 0x00B8,
+ 0x0090, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
+ 0x0098, 0x2122, 0x009A, 0x203A, 0x009C, 0x00AF, 0x02DB, 0x009F,
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
+ 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
+ 0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6,
+ 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112,
+ 0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B,
+ 0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7,
+ 0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF,
+ 0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113,
+ 0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C,
+ 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7,
+ 0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x02D9};
+
+const uint16 kMacCentralEuropeConversionTable[128] = {
+ 0x00C4, 0x0100, 0x0101, 0x00C9, 0x0104, 0x00D6, 0x00DC, 0x00E1,
+ 0x0105, 0x010C, 0x00E4, 0x010D, 0x0106, 0x0107, 0x00E9, 0x0179,
+ 0x017A, 0x010E, 0x00ED, 0x010F, 0x0112, 0x0113, 0x0116, 0x00F3,
+ 0x0117, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x011A, 0x011B, 0x00FC,
+ 0x2020, 0x00B0, 0x0118, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF,
+ 0x00AE, 0x00A9, 0x2122, 0x0119, 0x00A8, 0x2260, 0x0123, 0x012E,
+ 0x012F, 0x012A, 0x2264, 0x2265, 0x012B, 0x0136, 0x2202, 0x2211,
+ 0x0142, 0x013B, 0x013C, 0x013D, 0x013E, 0x0139, 0x013A, 0x0145,
+ 0x0146, 0x0143, 0x00AC, 0x221A, 0x0144, 0x0147, 0x2206, 0x00AB,
+ 0x00BB, 0x2026, 0x00A0, 0x0148, 0x0150, 0x00D5, 0x0151, 0x014C,
+ 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA,
+ 0x014D, 0x0154, 0x0155, 0x0158, 0x2039, 0x203A, 0x0159, 0x0156,
+ 0x0157, 0x0160, 0x201A, 0x201E, 0x0161, 0x015A, 0x015B, 0x00C1,
+ 0x0164, 0x0165, 0x00CD, 0x017D, 0x017E, 0x016A, 0x00D3, 0x00D4,
+ 0x016B, 0x016E, 0x00DA, 0x016F, 0x0170, 0x0171, 0x0172, 0x0173,
+ 0x00DD, 0x00FD, 0x0137, 0x017B, 0x0141, 0x017C, 0x0122, 0x02C7
+};
+
+const uint16 kLatin1ConversionTable[128] = {
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
+ 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
+ 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
+ 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
+ 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
+ 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
+ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
+ 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
+ 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
+ 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF,
+};
+
+const uint16 kLatin2ConversionTable[128] = {
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7,
+ 0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B,
+ 0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7,
+ 0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C,
+ 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7,
+ 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E,
+ 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7,
+ 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF,
+ 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7,
+ 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F,
+ 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7,
+ 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9,
+};
+
+const uint16 kISO5ConversionTable[128] = {
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+ 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407,
+ 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F,
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
+ 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
+ 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
+ 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
+ 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
+ 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457,
+ 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x00A7, 0x045E, 0x045F,
+};
+
+const uint16 kASCIIConversionTable[128] = {
+};
+
+const uint16 kDos850ConversionTable[128] = {
+ 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7,
+ 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5,
+ 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9,
+ 0x00ff, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x00d7, 0x0192,
+ 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba,
+ 0x00bf, 0x00ae, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb,
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00c1, 0x00c2, 0x00c0,
+ 0x00a9, 0x2563, 0x2551, 0x2557, 0x255d, 0x00a2, 0x00a5, 0x2510,
+ 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x00e3, 0x00c3,
+ 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4,
+ 0x00f0, 0x00d0, 0x00ca, 0x00cb, 0x00c8, 0x0131, 0x00cd, 0x00ce,
+ 0x00cf, 0x2518, 0x250c, 0x2588, 0x2584, 0x00a6, 0x00cc, 0x2580,
+ 0x00d3, 0x00df, 0x00d4, 0x00d2, 0x00f5, 0x00d5, 0x00b5, 0x00fe,
+ 0x00de, 0x00da, 0x00db, 0x00d9, 0x00fd, 0x00dd, 0x00af, 0x00b4,
+ 0x00ad, 0x00b1, 0x2017, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x00b8,
+ 0x00b0, 0x00a8, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0,
+};
+
+const uint16 kDos866ConversionTable[128] = {
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
+ 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
+ 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
+ 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
+ 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510,
+ 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f,
+ 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567,
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b,
+ 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
+ 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
+ 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040e, 0x045e,
+ 0x00b0, 0x2219, 0x00b7, 0x221a, 0x2116, 0x00a4, 0x25a0, 0x00a0,
+};
+}
diff --git a/common/iconv.cpp b/common/iconv.cpp
deleted file mode 100644
index fbc69f7737..0000000000
--- a/common/iconv.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include <iconv.h>
-
-#include "common/iconv.h"
-#include "common/str.h"
-#include "common/textconsole.h"
-#include "common/ustr.h"
-
-namespace Common {
-
-static const char **getIconvCodesForEncoding(IconvEncoding encoding) {
- static const char *encodingCP932Codes[] = { "cp932", nullptr };
- static const char *encodingCP1250Codes[] = { "cp1250", nullptr };
- static const char *encodingCP1251Codes[] = { "cp1251", nullptr };
- static const char *encodingCP1252Codes[] = { "cp1252", nullptr };
- static const char *encodingCP1255Codes[] = { "cp1255", nullptr };
-
- // libiconv and glibc-iconv don't use the same name for that encoding, we have to try both
- static const char *encodingMacCentralEuropeCodes[] = { "maccentraleurope", "mac-centraleurope", nullptr };
-
- switch (encoding) {
- case kEncodingCP932: return encodingCP932Codes;
- case kEncodingCP1250: return encodingCP1250Codes;
- case kEncodingCP1251: return encodingCP1251Codes;
- case kEncodingCP1252: return encodingCP1252Codes;
- case kEncodingCP1255: return encodingCP1255Codes;
- case kEncodingMacCentralEurope: return encodingMacCentralEuropeCodes;
- }
-
- error("Failed look up iconv codes for encoding '%d'", encoding);
-}
-
-U32String convertToU32String(IconvEncoding fromEncoding, const String &string) {
- const char **fromCodes = getIconvCodesForEncoding(fromEncoding);
-
- // Apparently UTF-32 isn't native endian. Also, UCSâ4âINTERNAL fails
- // for me.
- static const char *toCode =
-#ifdef SCUMM_BIG_ENDIAN
- "UTF-32BE";
-#else
- "UTF-32LE";
-#endif
-
- iconv_t handle;
- do {
- handle = iconv_open(toCode, *fromCodes);
-
- if (handle == (iconv_t)-1) {
- fromCodes++;
- }
- } while (handle == ((iconv_t)-1) && *fromCodes);
-
- if (handle == ((iconv_t)-1))
- error("Failed to initialize UTF-32 conversion from %d", fromEncoding);
-
- size_t inSize = string.size();
- size_t outSize = inSize * 4; // Approximation
- size_t originalOutSize = outSize;
-
- char *buffer = new char[outSize];
- char *dst = buffer;
-
-#ifdef ICONV_USES_CONST
- const char *src = string.c_str();
-#else
- char *src = const_cast<char *>(string.c_str());
-#endif
-
- if (iconv(handle, &src, &inSize, &dst, &outSize) == ((size_t)-1))
- error("Failed to convert %s to UTF-32 string", *fromCodes);
-
- // The conversion descriptor may still contain some state. Write it to the output buffer.
- if (iconv(handle, nullptr, nullptr, &dst, &outSize) == ((size_t)-1))
- error("Failed to convert the remaining state of %s to UTF-32 string", *fromCodes);
-
- U32String output((const U32String::value_type *)buffer, (originalOutSize - outSize) / 4);
-
- delete[] buffer;
- iconv_close(handle);
-
- return output;
-}
-
-} // End of namespace Common
diff --git a/common/module.mk b/common/module.mk
index a897e85a83..edfa8aa9d3 100644
--- a/common/module.mk
+++ b/common/module.mk
@@ -33,9 +33,10 @@ MODULE_OBJS := \
rendermode.o \
sinewindows.o \
str.o \
- str-enc.o \
stream.o \
streamdebug.o \
+ str-enc.o \
+ encodings/singlebyte.o \
stuffit.o \
system.o \
textconsole.o \
@@ -57,7 +58,6 @@ MODULE_OBJS += \
dct.o \
fft.o \
rdft.o \
- encoding.o \
sinetables.o
ifdef ENABLE_EVENTRECORDER
@@ -111,10 +111,5 @@ MODULE_OBJS += \
text-to-speech.o
endif
-ifdef USE_ICONV
-MODULE_OBJS += \
- iconv.o
-endif
-
# Include common rules
include $(srcdir)/rules.mk
diff --git a/common/str-enc.cpp b/common/str-enc.cpp
index 42ba83d9ce..c1d821edce 100644
--- a/common/str-enc.cpp
+++ b/common/str-enc.cpp
@@ -20,94 +20,567 @@
*
*/
-#include "common/encoding.h"
#include "common/str.h"
#include "common/ustr.h"
#include "common/util.h"
+#include "common/endian.h"
+#include "common/error.h"
+#include "common/system.h"
+#include "common/enc-internal.h"
+#include "common/file.h"
namespace Common {
// //TODO: This is a quick and dirty converter. Refactoring needed:
-// 1. This version is unsafe! There are no checks for end of buffer
-// near i++ operations.
-// 2. Original version has an option for performing strict / nonstrict
+// 1. Original version has an option for performing strict / nonstrict
// conversion for the 0xD800...0xDFFF interval
-// 3. Original version returns a result code. This version does NOT
+// 2. Original version returns a result code. This version does NOT
// insert 'FFFD' on errors & does not inform caller on any errors
//
// More comprehensive one lives in wintermute/utils/convert_utf.cpp
-void String::decodeUTF8(U32String &dst) const {
+void U32String::decodeUTF8(const char *src, uint32 len) {
+ ensureCapacity(len, false);
+
// The String class, and therefore the Font class as well, assume one
// character is one byte, but in this case it's actually an UTF-8
// string with up to 4 bytes per character. To work around this,
// convert it to an U32String before drawing it, because our Font class
// can handle that.
- uint i = 0;
- while (i < _size) {
+ for (uint i = 0; i < len;) {
uint32 chr = 0;
uint num = 1;
- if ((_str[i] & 0xF8) == 0xF0) {
+ if ((src[i] & 0xF8) == 0xF0) {
num = 4;
- } else if ((_str[i] & 0xF0) == 0xE0) {
+ } else if ((src[i] & 0xF0) == 0xE0) {
num = 3;
- } else if ((_str[i] & 0xE0) == 0xC0) {
+ } else if ((src[i] & 0xE0) == 0xC0) {
num = 2;
}
- if (i - _size >= num) {
+ if (len - i >= num) {
switch (num) {
case 4:
- chr |= (_str[i++] & 0x07) << 18;
- chr |= (_str[i++] & 0x3F) << 12;
- chr |= (_str[i++] & 0x3F) << 6;
- chr |= (_str[i++] & 0x3F);
+ chr |= (src[i++] & 0x07) << 18;
+ chr |= (src[i++] & 0x3F) << 12;
+ chr |= (src[i++] & 0x3F) << 6;
+ chr |= (src[i++] & 0x3F);
break;
case 3:
- chr |= (_str[i++] & 0x0F) << 12;
- chr |= (_str[i++] & 0x3F) << 6;
- chr |= (_str[i++] & 0x3F);
+ chr |= (src[i++] & 0x0F) << 12;
+ chr |= (src[i++] & 0x3F) << 6;
+ chr |= (src[i++] & 0x3F);
break;
case 2:
- chr |= (_str[i++] & 0x1F) << 6;
- chr |= (_str[i++] & 0x3F);
+ chr |= (src[i++] & 0x1F) << 6;
+ chr |= (src[i++] & 0x3F);
break;
default:
- chr = (_str[i++] & 0x7F);
+ chr = (src[i++] & 0x7F);
break;
}
} else {
break;
}
- dst += chr;
+ operator+=(chr);
+ }
+}
+
+const uint16 invalidCode = 0xFFFD;
+
+static bool cjk_tables_loaded = false;
+static const uint16 *windows932ConversionTable;
+static const uint16 *windows949ConversionTable;
+static const uint16 *windows950ConversionTable;
+
+static const uint16 *loadCJKTable(File &f, int idx, size_t sz) {
+ f.seek(16 + idx * 4);
+ uint32 off = f.readUint32LE();
+ f.seek(off);
+ uint16 *res = new uint16[sz];
+ f.read(res, 2 * sz);
+#ifndef SCUMM_LITTLE_ENDIAN
+ for (uint i = 0; i < sz; i++)
+ res[i] = FROM_LE_16(res[i]);
+#endif
+ return res;
+}
+
+static void loadCJKTables() {
+ File f;
+
+ cjk_tables_loaded = true;
+
+ if (!f.open("encoding.dat")) {
+ warning("encoding.dat is not found. Support for CJK is disabled");
+ return;
+ }
+
+ if (f.size() < 16 + 3 * 4) {
+ warning("encoding.dat is invalid. Support for CJK is disabled");
+ return;
+ }
+
+ if (f.readUint32BE() != MKTAG('S', 'C', 'V', 'M')
+ || f.readUint32BE() != MKTAG('E', 'N', 'C', 'D')) {
+ warning("encoding.dat is invalid. Support for CJK is disabled");
+ return;
+ }
+
+ // Version and number of tables.
+ if (f.readUint32LE() != 0 || f.readUint32LE() < 3) {
+ warning("encoding.dat is of incompatible version. Support for CJK is disabled");
+ return;
+ }
+
+ windows932ConversionTable = loadCJKTable(f, 0, 47 * 192);
+ windows949ConversionTable = loadCJKTable(f, 1, 0x7e * 0xb2);
+ windows950ConversionTable = loadCJKTable(f, 2, 89 * 157);
+}
+
+void U32String::decodeWindows932(const char *src, uint32 len) {
+ ensureCapacity(len, false);
+
+ if (!cjk_tables_loaded)
+ loadCJKTables();
+
+ for (uint i = 0; i < len;) {
+ uint8 high = src[i++];
+
+ if ((high & 0x80) == 0x00) {
+ operator+=(high);
+ continue;
+ }
+
+ // Katakana
+ if (high >= 0xa1 && high <= 0xdf) {
+ operator+=(high - 0xa1 + 0xFF61);
+ continue;
+ }
+
+ if (i >= len) {
+ operator+=(invalidCode);
+ continue;
+ }
+
+ uint8 low = src[i++];
+ if (low < 0x40) {
+ operator+=(invalidCode);
+ continue;
+ }
+ uint8 lowidx = low - 0x40;
+ uint8 highidx;
+
+ if (high >= 0x81 && high <= 0x84)
+ highidx = high - 0x81;
+ else if (high >= 0x87 && high <= 0x9f)
+ highidx = high - 0x87 + 4;
+ else if (high >= 0xe0 && high <= 0xee)
+ highidx = high - 0xe0 + 29;
+ else {
+ operator+=(invalidCode);
+ continue;
+ }
+
+ if (!windows932ConversionTable) {
+ operator+=(invalidCode);
+ continue;
+ }
+
+ // Main range
+ uint16 val = windows932ConversionTable[highidx * 192 + lowidx];
+ operator+=(val ? val : invalidCode);
+ }
+}
+
+static uint16 convertUHCToUCSReal(uint8 high, uint8 low) {
+ uint lowidx = 0;
+ if (low >= 0x41 && low <= 0x5a)
+ lowidx = low - 0x41;
+ else if (low >= 0x61 && low <= 0x7a)
+ lowidx = low - 0x61 + 0x1a;
+ else if (low >= 0x81 && low <= 0xfe)
+ lowidx = low - 0x81 + 0x1a * 2;
+ else
+ return 0;
+ if (!windows949ConversionTable)
+ return 0;
+ uint16 idx = (high - 0x81) * 0xb2 + lowidx;
+ return windows949ConversionTable[idx];
+}
+
+uint16 convertUHCToUCS(uint8 high, uint8 low) {
+ if (!cjk_tables_loaded)
+ loadCJKTables();
+
+ return convertUHCToUCSReal(high, low);
+}
+
+
+void U32String::decodeWindows949(const char *src, uint32 len) {
+ ensureCapacity(len, false);
+
+ if (!cjk_tables_loaded)
+ loadCJKTables();
+
+ for (uint i = 0; i < len;) {
+ uint8 high = src[i++];
+
+ if ((high & 0x80) == 0x00) {
+ operator+=(high);
+ continue;
+ }
+
+ if (high == 0x80 || high == 0xff) {
+ operator+=(invalidCode);
+ continue;
+ }
+
+ if (i >= len) {
+ operator+=(invalidCode);
+ continue;
+ }
+
+ uint8 low = src[i++];
+ uint16 val = convertUHCToUCSReal(high, low);
+
+ operator+=(val ? val : invalidCode);
+ }
+}
+
+void U32String::decodeWindows950(const char *src, uint32 len) {
+ ensureCapacity(len, false);
+
+ if (!cjk_tables_loaded)
+ loadCJKTables();
+
+ for (uint i = 0; i < len;) {
+ uint8 high = src[i++];
+
+ if ((high & 0x80) == 0x00) {
+ operator+=(high);
+ continue;
+ }
+
+ // Euro symbol
+ if (high == 0x80) {
+ operator+=(0x20ac);
+ continue;
+ }
+
+ if (high == 0xff) {
+ operator+=(invalidCode);
+ continue;
+ }
+
+ if (i >= len) {
+ operator+=(invalidCode);
+ continue;
+ }
+
+ uint8 low = src[i++];
+ uint8 lowidx = low < 0x80 ? low - 0x40 : low - 0x62;
+
+ // Main range
+ if (high >= 0xa1 && high < 0xfa) {
+ uint16 val = windows950ConversionTable ?
+ windows950ConversionTable[(high - 0xa1) * 157 + lowidx] : 0;
+ operator+=(val ? val : invalidCode);
+ continue;
+ }
+
+ // PUA range
+ if (high <= 0x8d) {
+ operator+=(0xeeb8 + 157 * (high-0x81) + lowidx);
+ continue;
+ }
+ if (high <= 0xa0) {
+ operator+=(0xe311 + (157 * (high-0x8e)) + lowidx);
+ continue;
+ }
+ if (high >= 0xfa) {
+ operator+=(0xe000 + (157 * (high-0xfa)) + lowidx);
+ continue;
+ }
+ }
+}
+
+void String::encodeWindows932(const U32String &src) {
+ static uint16 *reverseTable;
+
+ ensureCapacity(src.size() * 2, false);
+
+ if (!cjk_tables_loaded)
+ loadCJKTables();
+
+ if (!reverseTable && windows932ConversionTable) {
+ uint16 *rt = new uint16[0x10000];
+ memset(rt, 0, sizeof(rt[0]) * 0x10000);
+ for (uint highidx = 0; highidx < 58; highidx++)
+ for (uint lowidx = 0; lowidx < 192; lowidx++) {
+ uint8 high = 0;
+ uint8 low = lowidx + 0x40;
+ uint16 unicode = windows932ConversionTable[highidx * 192 + lowidx];
+
+ if (highidx < 4)
+ high = highidx + 0x81;
+ else if (highidx < 29)
+ high = highidx + 0x87 - 4;
+ else
+ high = highidx + 0xe0 - 29;
+
+ rt[unicode] = (high << 8) | low;
+ }
+
+ reverseTable = rt;
+ }
+
+ for (uint i = 0; i < src.size();) {
+ uint32 point = src[i++];
+
+ if (point < 0x80) {
+ operator+=(point);
+ continue;
+ }
+
+ // Katakana
+ if (point >= 0xff61 && point <= 0xff9f) {
+ operator+=(0xa1 + (point - 0xFF61));
+ continue;
+ }
+
+ if (point > 0x10000) {
+ operator+=('?');
+ continue;
+ }
+
+ if (!reverseTable) {
+ operator+=('?');
+ continue;
+ }
+
+ uint16 rev = reverseTable[point];
+ if (rev != 0) {
+ operator+=(rev >> 8);
+ operator+=(rev & 0xff);
+ continue;
+ }
+
+ // This codepage contains cyrillic, so no need to transliterate
+
+ operator+=('?');
+ continue;
+ }
+}
+
+void String::encodeWindows949(const U32String &src) {
+ static const uint16 *reverseTable;
+
+ ensureCapacity(src.size() * 2, false);
+
+ if (!cjk_tables_loaded)
+ loadCJKTables();
+
+ if (!reverseTable && windows949ConversionTable) {
+ uint16 *rt = new uint16[0x10000];
+ memset(rt, 0, sizeof(rt[0]) * 0x10000);
+
+ for (uint highidx = 0; highidx < 0x7e; highidx++)
+ for (uint lowidx = 0; lowidx < 0xb2; lowidx++) {
+ uint8 high = highidx + 0x81;
+ uint8 low = 0;
+ uint16 unicode = windows949ConversionTable[highidx * 0xb2 + lowidx];
+
+ if (lowidx < 0x1a)
+ low = 0x41 + lowidx;
+ else if (lowidx < 0x1a * 2)
+ low = 0x61 + lowidx - 0x1a;
+ else
+ low = 0x81 + lowidx - 0x1a * 2;
+ rt[unicode] = (high << 8) | low;
+ }
+
+ reverseTable = rt;
+ }
+
+ for (uint i = 0; i < src.size();) {
+ uint32 point = src[i++];
+
+ if (point < 0x80) {
+ operator+=(point);
+ continue;
+ }
+
+ if (point > 0x10000 || !reverseTable) {
+ operator+=('?');
+ continue;
+ }
+
+ uint16 rev = reverseTable[point];
+ if (rev == 0) {
+ // This codepage contains cyrillic, so no need to transliterate
+ operator+=('?');
+ continue;
+ }
+
+ operator+=(rev >> 8);
+ operator+=(rev & 0xff);
+ }
+}
+
+static const char g_cyrillicTransliterationTable[] = {
+ ' ', 'E', 'D', 'G', 'E', 'Z', 'I', 'I', 'J', 'L', 'N', 'C', 'K', 'I', 'U', 'D',
+ 'A', 'B', 'V', 'G', 'D', 'E', 'Z', 'Z', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
+ 'R', 'S', 'T', 'U', 'F', 'H', 'C', 'C', 'S', 'S', '\"', 'Y', '\'', 'E', 'U', 'A',
+ 'a', 'b', 'v', 'g', 'd', 'e', 'z', 'z', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
+ 'r', 's', 't', 'u', 'f', 'h', 'c', 'c', 's', 's', '\"', 'y', '\'', 'e', 'u', 'a',
+ 'e', 'e', 'd', 'g', 'e', 'z', 'i', 'i', 'j', 'l', 'n', 'c', 'k', 'i', 'u', 'd',
+};
+
+void String::translitChar(U32String::value_type point) {
+ if (point == 0xa0) {
+ operator+=(' ');
+ return;
+ }
+
+ if (point == 0xad) {
+ operator+=('-');
+ return;
+ }
+
+ if (point == 0x2116) {
+ operator+=('N');
+ return;
+ }
+
+ if (point >= 0x401 && point <= 0x45f) {
+ operator+=(g_cyrillicTransliterationTable[point - 0x400]);
+ return;
+ }
+
+ operator+=('?');
+}
+
+void String::encodeWindows950(const U32String &src, bool transliterate) {
+ static uint16 *reverseTable;
+
+ ensureCapacity(src.size() * 2, false);
+
+ if (!cjk_tables_loaded)
+ loadCJKTables();
+
+ if (!reverseTable && windows950ConversionTable) {
+ uint16 *rt = new uint16[0x10000];
+ memset(rt, 0, sizeof(rt[0]) * 0x10000);
+
+ for (uint highidx = 0; highidx < 90; highidx++)
+ for (uint lowidx = 0; lowidx < 157; lowidx++) {
+ uint8 high = highidx + 0xa1;
+ uint8 low = 0;
+ uint16 unicode = windows950ConversionTable[highidx * 157 + lowidx];
+
+ if (lowidx <= 0x3e)
+ low = 0x40 + lowidx;
+ else
+ low = 0x62 + lowidx;
+ rt[unicode] = (high << 8) | low;
+ }
+
+ reverseTable = rt;
+ }
+
+ for (uint i = 0; i < src.size();) {
+ uint32 point = src[i++];
+
+ if (point < 0x80) {
+ operator+=(point);
+ continue;
+ }
+
+ if (point > 0x10000) {
+ operator+=('?');
+ continue;
+ }
+
+ // Euro symbol
+ if (point == 0x20ac) {
+ operator+=((char) 0x80);
+ continue;
+ }
+
+ if (!reverseTable) {
+ operator+=('?');
+ continue;
+ }
+
+ uint16 rev = reverseTable[point];
+ if (rev != 0) {
+ operator+=(rev >> 8);
+ operator+=(rev & 0xff);
+ continue;
+ }
+
+ // PUA range
+ if (point >= 0xe000 && point <= 0xf848) {
+ byte lowidx = 0, high = 0, low = 0;
+ if (point <= 0xe310) {
+ high = (point - 0xe000) / 157 + 0xfa;
+ lowidx = (point - 0xe000) % 157;
+ } else if (point <= 0xeeb7) {
+ high = (point - 0xe311) / 157 + 0x8e;
+ lowidx = (point - 0xe311) % 157;
+ } else if (point <= 0xf6b0) {
+ high = (point - 0xeeb8) / 157 + 0x81;
+ lowidx = (point - 0xeeb8) % 157;
+ } else {
+ high = (point - 0xf672) / 157 + 0xc6;
+ lowidx = (point - 0xf672) % 157;
+ }
+
+ if (lowidx <= 0x3e)
+ low = 0x40 + lowidx;
+ else
+ low = 0x62 + lowidx;
+
+ operator+=(high);
+ operator+=(low);
+ reverseTable[point] = (high << 8) | low;
+ continue;
+ }
+
+ if (transliterate) {
+ translitChar(point);
+ continue;
+ }
+
+ operator+=('?');
+ continue;
}
}
// //TODO: This is a quick and dirty converter. Refactoring needed:
-// 1. Original version is more effective.
-// This version features buffer = (char)(...) + buffer; pattern that causes
-// unnecessary copying and reallocations, original code works with raw bytes
-// 2. Original version has an option for performing strict / nonstrict
+// 1. Original version has an option for performing strict / nonstrict
// conversion for the 0xD800...0xDFFF interval
-// 3. Original version returns a result code. This version inserts '0xFFFD' if
+// 2. Original version returns a result code. This version inserts '0xFFFD' if
// character does not fit in 4 bytes & does not inform caller on any errors
//
// More comprehensive one lives in wintermute/utils/convert_utf.cpp
-void U32String::encodeUTF8(String &dst) const {
+void String::encodeUTF8(const U32String &src) {
+ ensureCapacity(src.size(), false);
static const uint8 firstByteMark[5] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0 };
char writingBytes[5] = {0x00, 0x00, 0x00, 0x00, 0x00};
uint i = 0;
- while (i < _size) {
+ while (i < src.size()) {
unsigned short bytesToWrite = 0;
const uint32 byteMask = 0xBF;
const uint32 byteMark = 0x80;
- uint32 ch = _str[i++];
+ uint32 ch = src[i++];
if (ch < (uint32)0x80) {
bytesToWrite = 1;
} else if (ch < (uint32)0x800) {
@@ -118,7 +591,7 @@ void U32String::encodeUTF8(String &dst) const {
bytesToWrite = 4;
} else {
bytesToWrite = 3;
- ch = 0x0000FFFD;
+ ch = invalidCode;
}
char *pBytes = writingBytes + (4 - bytesToWrite);
@@ -143,301 +616,238 @@ void U32String::encodeUTF8(String &dst) const {
break;
}
- dst += pBytes;
+ operator+=(pBytes);
}
}
-static const uint32 g_windows1250ConversionTable[] = {0x20AC, 0x0081, 0x201A, 0x0083, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x0088, 0x2030, 0x0160, 0x2039, 0x015A, 0x0164, 0x017D, 0x0179,
- 0x0090, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x0098, 0x2122, 0x0161, 0x203A, 0x015B, 0x0165, 0x017E, 0x017A,
- 0x00A0, 0x02C7, 0x02D8, 0x0141, 0x00A4, 0x0104, 0x00A6, 0x00A7,
- 0x00A8, 0x00A9, 0x015E, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x017B,
- 0x00B0, 0x00B1, 0x02DB, 0x0142, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- 0x00B8, 0x0105, 0x015F, 0x00BB, 0x013D, 0x02DD, 0x013E, 0x017C,
- 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7,
- 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E,
- 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7,
- 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF,
- 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7,
- 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F,
- 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7,
- 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9};
-
-static const uint32 g_windows1251ConversionTable[] = {0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F,
- 0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x0098, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F,
- 0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7,
- 0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407,
- 0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7,
- 0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457,
- 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
- 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
- 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
- 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
- 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
- 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
- 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
- 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F};
-
-static const uint32 g_windows1252ConversionTable[] = {0x20AC, 0x0081, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008D, 0x017D, 0x008F,
- 0x0090, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x009D, 0x017E, 0x0178,
- 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
- 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
- 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
- 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
- 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
- 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
- 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
- 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
- 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
- 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
- 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF};
-
-static const uint32 g_windows1253ConversionTable[] = {0x20AC, 0x0081, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x0088, 0x2030, 0x008A, 0x2039, 0x008C, 0x008D, 0x008E, 0x008F,
- 0x0090, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x0098, 0x2122, 0x009A, 0x203A, 0x009C, 0x009D, 0x009E, 0x009F,
- 0x00A0, 0x0385, 0x0386, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
- 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x2015,
- 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x00B5, 0x00B6, 0x00B7,
- 0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F,
- 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
- 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
- 0x03A0, 0x03A1, 0x00D2, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7,
- 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF,
- 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7,
- 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
- 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7,
- 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0x00FF};
-
-static const uint32 g_windows1254ConversionTable[] = {0x20AC, 0x0081, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008D, 0x008E, 0x008F,
- 0x0090, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x009D, 0x009E, 0x0178,
- 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
- 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
- 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
- 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
- 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
- 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
- 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF,
- 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
- 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
- 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
- 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF};
-
-static const uint32 g_windows1255ConversionTable[] = {0x20AC, 0x0081, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x02C6, 0x2030, 0x008A, 0x2039, 0x008C, 0x008D, 0x008E, 0x008F,
- 0x0090, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x02DC, 0x2122, 0x009A, 0x203A, 0x009C, 0x009D, 0x009E, 0x009F,
- 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AA, 0x00A5, 0x00A6, 0x00A7,
- 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
- 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
- 0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7,
- 0x05B8, 0x05B9, 0x05BA, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF,
- 0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05F0, 0x05F1, 0x05F2, 0x05F3,
- 0x05F4, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
- 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7,
- 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
- 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7,
- 0x05E8, 0x05E9, 0x05EA, 0x00FB, 0x00FC, 0x200E, 0x200F, 0x00FF};
-
-static const uint32 g_windows1256ConversionTable[] = {0x20AC, 0x067E, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x02C6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688,
- 0x06AF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x06A9, 0x2122, 0x0691, 0x203A, 0x0153, 0x200C, 0x200D, 0x06BA,
- 0x00A0, 0x060C, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
- 0x00A8, 0x00A9, 0x06BE, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
- 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- 0x00B8, 0x00B9, 0x061B, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x061F,
- 0x06C1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
- 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F,
- 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00D7,
- 0x0637, 0x0638, 0x0639, 0x063A, 0x0640, 0x0641, 0x0642, 0x0643,
- 0x00E0, 0x0644, 0x00E2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00E7,
- 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0649, 0x064A, 0x00EE, 0x00EF,
- 0x064B, 0x064C, 0x064D, 0x064E, 0x00F4, 0x064F, 0x0650, 0x00F7,
- 0x0651, 0x00F9, 0x0652, 0x00FB, 0x00FC, 0x200E, 0x200F, 0x06D2};
-
-static const uint32 g_windows1257ConversionTable[] = {0x20AC, 0x0081, 0x201A, 0x0083, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x0088, 0x2030, 0x008A, 0x2039, 0x008C, 0x00A8, 0x02C7, 0x00B8,
- 0x0090, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x0098, 0x2122, 0x009A, 0x203A, 0x009C, 0x00AF, 0x02DB, 0x009F,
- 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
- 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6,
- 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- 0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6,
- 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112,
- 0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B,
- 0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7,
- 0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF,
- 0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113,
- 0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C,
- 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7,
- 0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x02D9};
-
-
-/* This array must match the enum defined in str-enc.h */
-static char const *const g_codePageMap[] = {
- "UTF-8", /* kUtf8 */
- "WINDOWS-1250", /* kWindows1250 */
- "WINDOWS-1251", /* kWindows1251 */
- "WINDOWS-1252", /* kWindows1252 */
- "WINDOWS-1253", /* kWindows1253 */
- "WINDOWS-1254", /* kWindows1254 */
- "WINDOWS-1255", /* kWindows1255 */
- "WINDOWS-1256", /* kWindows1256 */
- "WINDOWS-1257", /* kWindows1257 */
- "MS932", /* kWindows932 */
- "MSCP949", /* kWindows949 */
- "CP950" /* kWindows950 */
-};
-
-void String::decodeOneByte(U32String &dst, CodePage page) const {
- for (uint i = 0; i < _size; ++i) {
- if ((byte)_str[i] <= 0x7F) {
- dst += _str[i];
- continue;
- }
-
- byte index = _str[i] - 0x80;
-
- switch (page) {
- case kWindows1250:
- dst += g_windows1250ConversionTable[index];
- break;
- case kWindows1251:
- dst += g_windows1251ConversionTable[index];
- break;
- case kWindows1252:
- dst += g_windows1252ConversionTable[index];
- break;
- case kWindows1253:
- dst += g_windows1253ConversionTable[index];
- break;
- case kWindows1254:
- dst += g_windows1254ConversionTable[index];
- break;
- case kWindows1255:
- dst += g_windows1255ConversionTable[index];
- break;
- case kWindows1256:
- dst += g_windows1256ConversionTable[index];
- break;
- case kWindows1257:
- dst += g_windows1257ConversionTable[index];
- break;
- default:
- break;
- }
- }
+#define decodeUTF16Template(suffix, read) \
+Common::U32String U32String::decodeUTF16 ## suffix (const uint16 *start, uint len) { \
+ const uint16 *ptr = start; \
+ Common::U32String dst; \
+ dst.ensureCapacity(len, false); \
+ \
+ while (len-- > 0) { \
+ uint16 c = read(ptr++); \
+ if (c >= 0xD800 && c <= 0xDBFF && len > 0) { \
+ uint16 low = read(ptr++); \
+ if (low >= 0xDC00 && low <= 0xDFFF) \
+ dst += ((c & 0x3ff) << 10) \
+ | (low & 0x3ff); \
+ else \
+ dst += invalidCode; \
+ continue; \
+ } \
+ \
+ if (c >= 0xD800 && c <= 0xDFFF) { \
+ dst += invalidCode; \
+ continue; \
+ } \
+ dst += c; \
+ } \
+ \
+ return dst; \
}
-U32String String::decode(CodePage page) const {
- if (page == kCodePageInvalid ||
- page >= ARRAYSIZE(g_codePageMap)) {
- error("Invalid codepage");
- }
- char *result = Encoding::convert("UTF-32", g_codePageMap[page], *this);
- if (result) {
- U32String unicodeString((uint32 *)result);
- free(result);
- return unicodeString;
- }
-
- U32String unicodeString;
- if (page == kUtf8) {
- decodeUTF8(unicodeString);
- } else {
- decodeOneByte(unicodeString, page);
- }
- return unicodeString;
+decodeUTF16Template(BE, READ_BE_UINT16)
+decodeUTF16Template(LE, READ_LE_UINT16)
+decodeUTF16Template(Native, READ_UINT16)
+
+#define encodeUTF16Template(suffix, write) \
+uint16 *U32String::encodeUTF16 ## suffix (uint *len) const { \
+ uint16 *out = new uint16[_size * 2 + 1]; \
+ uint16 *ptr = out; \
+ \
+ for (uint i = 0; i < _size; i++) { \
+ uint32 c = _str[i]; \
+ if (c < 0x10000) { \
+ write(ptr++, c); \
+ continue; \
+ } \
+ write (ptr++, 0xD800 | ((c >> 10) & 0x3ff)); \
+ write (ptr++, 0xDC00 | (c & 0x3ff)); \
+ } \
+ \
+ write(ptr, 0); \
+ if (len) \
+ *len = ptr - out; \
+ \
+ return out; \
}
+encodeUTF16Template(BE, WRITE_BE_UINT16)
+encodeUTF16Template(LE, WRITE_LE_UINT16)
+encodeUTF16Template(Native, WRITE_UINT16)
+// Upper bound on unicode codepoint in any single-byte encoding. Must be divisible by 0x100 and be strictly above large codepoint
+static const int kMaxCharSingleByte = 0x3000;
-void U32String::encodeOneByte(String &dst, CodePage page) const {
- const uint32 *conversionTable = NULL;
+
+static const uint16 *
+getConversionTable(CodePage page) {
switch (page) {
case kWindows1250:
- conversionTable = g_windows1250ConversionTable;
- break;
+ return kWindows1250ConversionTable;
case kWindows1251:
- conversionTable = g_windows1251ConversionTable;
- break;
+ return kWindows1251ConversionTable;
case kWindows1252:
- conversionTable = g_windows1252ConversionTable;
- break;
+ return kWindows1252ConversionTable;
case kWindows1253:
- conversionTable = g_windows1253ConversionTable;
- break;
+ return kWindows1253ConversionTable;
case kWindows1254:
- conversionTable = g_windows1254ConversionTable;
- break;
+ return kWindows1254ConversionTable;
case kWindows1255:
- conversionTable = g_windows1255ConversionTable;
- break;
+ return kWindows1255ConversionTable;
case kWindows1256:
- conversionTable = g_windows1256ConversionTable;
- break;
+ return kWindows1256ConversionTable;
case kWindows1257:
- conversionTable = g_windows1257ConversionTable;
- break;
- default:
- break;
+ return kWindows1257ConversionTable;
+ case kMacCentralEurope:
+ return kMacCentralEuropeConversionTable;
+ case kISO8859_1:
+ return kLatin1ConversionTable;
+ case kISO8859_2:
+ return kLatin2ConversionTable;
+ case kISO8859_5:
+ return kISO5ConversionTable;
+ case kDos850:
+ return kDos850ConversionTable;
+ case kDos866:
+ return kDos866ConversionTable;
+ case kASCII:
+ return kASCIIConversionTable;
+
+ case kCodePageInvalid:
+ // Multibyte encodings. Can't be represented in simple table way
+ case kUtf8:
+ case kWindows932:
+ case kWindows949:
+ case kWindows950:
+ return nullptr;
+ }
+ return nullptr;
+}
+
+struct ReverseTablePrefixTreeLevel1 {
+ struct ReverseTablePrefixTreeLevel2 *next[kMaxCharSingleByte / 0x100];
+ bool valid;
+};
+
+struct ReverseTablePrefixTreeLevel2 {
+ uint8 end[256];
+
+ ReverseTablePrefixTreeLevel2() {
+ memset(end, 0, sizeof(end));
}
+};
- for (uint i = 0; i < _size; ++i) {
- if (_str[i] <= 0x7F) {
- dst += _str[i];
+ReverseTablePrefixTreeLevel1 reverseTables[kLastEncoding + 1];
+
+static const ReverseTablePrefixTreeLevel1 *
+getReverseConversionTable(CodePage page) {
+ if (reverseTables[page].valid)
+ return &reverseTables[page];
+ const uint16 *conversionTable = getConversionTable(page);
+ if (!conversionTable)
+ return nullptr;
+ reverseTables[page].valid = true;
+ for (uint i = 0; i < 0x80; i++) {
+ uint32 c = conversionTable[i];
+ if (c == 0 || c >= kMaxCharSingleByte)
continue;
+ if (!reverseTables[page].next[c >> 8]) {
+ reverseTables[page].next[c >> 8] = new ReverseTablePrefixTreeLevel2();
}
- if (!conversionTable) {
+ reverseTables[page].next[c >> 8]->end[c&0xff] = i | 0x80;
+ }
+
+ return &reverseTables[page];
+}
+
+void U32String::decodeOneByte(const char *src, uint32 len, CodePage page) {
+ const uint16 *conversionTable = getConversionTable(page);
+
+ if (conversionTable == nullptr) {
+ conversionTable = kASCIIConversionTable;
+ }
+
+ ensureCapacity(len, false);
+
+ for (uint i = 0; i < len; ++i) {
+ if ((src[i] & 0x80) == 0) {
+ operator+=(src[i]);
continue;
}
- for (uint j = 0; j < 128; ++j) {
- if (conversionTable[j] == _str[i]) {
- dst += (char)(j + 0x80);
- break;
- }
- }
+ uint16 val = conversionTable[src[i] & 0x7f];
+ operator+=(val ? val : invalidCode);
}
}
+void String::encodeOneByte(const U32String &src, CodePage page, bool transliterate) {
+ const ReverseTablePrefixTreeLevel1 *conversionTable =
+ getReverseConversionTable(page);
-String U32String::encode(CodePage page) const {
- if (page == kCodePageInvalid ||
- page >= ARRAYSIZE(g_codePageMap)) {
- error("Invalid codepage");
- }
- char *result = Encoding::convert(g_codePageMap[page], *this);
- if (result) {
- // Encodings in CodePage all use '\0' as string ending
- // That would be problematic if CodePage has UTF-16 or UTF-32
- String string(result);
- free(result);
- return string;
+ ensureCapacity(src.size(), false);
+
+ if (conversionTable == nullptr) {
+ for (uint i = 0; i < src.size(); ++i) {
+ uint32 c = src[i];
+ if (c <= 0x7F) {
+ operator+=((char)c);
+ continue;
+ }
+
+ if (transliterate) {
+ translitChar(c);
+ } else
+ operator+=('?');
+ }
+ return;
}
- String string;
- if (page == kUtf8) {
- encodeUTF8(string);
- } else {
- encodeOneByte(string, page);
+ for (uint i = 0; i < src.size(); ++i) {
+ uint32 c = src[i];
+ if (c <= 0x7F) {
+ operator+=((char)c);
+ continue;
+ }
+
+ if (c >= kMaxCharSingleByte)
+ continue;
+ ReverseTablePrefixTreeLevel2 *l2 = conversionTable->next[c>>8];
+ unsigned char uc = l2 ? l2->end[c&0xff] : 0;
+ if (uc != 0) {
+ operator+=((char)uc);
+ continue;
+ }
+
+ if (transliterate) {
+ translitChar(c);
+ } else
+ operator+=('?');
}
- return string;
}
-
+void String::encodeInternal(const U32String &src, CodePage page) {
+ switch(page) {
+ case kUtf8:
+ encodeUTF8(src);
+ break;
+ case kWindows932:
+ encodeWindows932(src);
+ break;
+ case kWindows949:
+ encodeWindows949(src);
+ break;
+ case kWindows950:
+ encodeWindows950(src);
+ break;
+ default:
+ encodeOneByte(src, page);
+ break;
+ }
+}
U32String convertToU32String(const char *str, CodePage page) {
return String(str).decode(page);
@@ -455,4 +865,51 @@ String convertUtf32ToUtf8(const U32String &u32str) {
return u32str.encode(kUtf8);
}
+void U32String::decodeInternal(const char *str, uint32 len, CodePage page) {
+ assert(str);
+
+ _storage[0] = 0;
+ _size = 0;
+
+ switch(page) {
+ case kUtf8:
+ decodeUTF8(str, len);
+ break;
+ case kWindows932:
+ decodeWindows932(str, len);
+ break;
+ case kWindows949:
+ decodeWindows949(str, len);
+ break;
+ case kWindows950:
+ decodeWindows950(str, len);
+ break;
+ default:
+ decodeOneByte(str, len, page);
+ break;
+ }
+}
+
+U32String String::decode(CodePage page) const {
+ if (page == kCodePageInvalid ||
+ page > kLastEncoding) {
+ error("Invalid codepage");
+ }
+
+ U32String unicodeString;
+ unicodeString.decodeInternal(_str, _size, page);
+ return unicodeString;
+}
+
+String U32String::encode(CodePage page) const {
+ if (page == kCodePageInvalid ||
+ page > kLastEncoding) {
+ error("Invalid codepage");
+ }
+
+ String string;
+ string.encodeInternal(*this, page);
+ return string;
+}
+
} // End of namespace Common
diff --git a/common/str-enc.h b/common/str-enc.h
index 0e2a7ba8a6..0c0304f0e9 100644
--- a/common/str-enc.h
+++ b/common/str-enc.h
@@ -41,7 +41,18 @@ enum CodePage {
kWindows1257,
kWindows932,
kWindows949,
- kWindows950
+ kWindows950,
+ kISO8859_1,
+ kISO8859_2,
+ kISO8859_5,
+ kMacCentralEurope,
+ kDos850,
+ kDos866,
+ kASCII,
+
+ kLatin1 = kISO8859_1,
+ kBig5 = kWindows950,
+ kLastEncoding = kASCII
};
U32String convertUtf8ToUtf32(const String &str);
@@ -49,6 +60,7 @@ String convertUtf32ToUtf8(const U32String &str);
U32String convertToU32String(const char *str, CodePage page = kUtf8);
String convertFromU32String(const U32String &str, CodePage page = kUtf8);
+uint16 convertUHCToUCS(uint8 high, uint8 low);
} // End of namespace Common
#endif
diff --git a/common/str.cpp b/common/str.cpp
index 084551316b..e1171a9511 100644
--- a/common/str.cpp
+++ b/common/str.cpp
@@ -39,10 +39,10 @@ String::String(char c)
}
#ifndef SCUMMVM_UTIL
-String::String(const U32String &str)
+String::String(const U32String &str, Common::CodePage page)
: BaseString<char>() {
_storage[0] = 0;
- *this = String(str.encode());
+ *this = String(str.encode(page));
}
#endif
diff --git a/common/str.h b/common/str.h
index 3b677af92a..654d82a051 100644
--- a/common/str.h
+++ b/common/str.h
@@ -85,7 +85,7 @@ public:
explicit String(char c);
/** Construct a new string from the given u32 string. */
- String(const U32String &str);
+ String(const U32String &str, CodePage page = kUtf8);
String &operator=(const char *str);
String &operator=(const String &str);
@@ -246,8 +246,15 @@ public:
U32String decode(CodePage page = kUtf8) const;
protected:
- void decodeUTF8(U32String &dst) const;
- void decodeOneByte(U32String &dst, CodePage page) const;
+ void encodeUTF8(const U32String &src);
+ void encodeWindows932(const U32String &src);
+ void encodeWindows949(const U32String &src);
+ void encodeWindows950(const U32String &src, bool translit = true);
+ void encodeOneByte(const U32String &src, CodePage page, bool translit = true);
+ void encodeInternal(const U32String &src, CodePage page);
+ void translitChar(U32String::value_type point);
+
+ friend class U32String;
};
// Append two strings to form a new (temp) string
diff --git a/common/system.h b/common/system.h
index 8793222684..e1e55481b4 100644
--- a/common/system.h
+++ b/common/system.h
@@ -1735,24 +1735,7 @@ public:
*/
virtual bool isConnectionLimited();
-
-protected:
-
- /**
- * This allows derived classes to implement encoding conversion using platform
- * specific API.
- * This method shouldn't be called directly. Use Common::Encoding instead.
- *
- * @param to Encoding to convert the string to
- * @param from Encoding to convert the string from
- * @param string The string that should be converted
- * @param length Size of the string in bytes
- *
- * @return Converted string, which must be freed by the caller (using free()
- * and not delete[]), or nullptr if the conversion isn't possible.
- */
- virtual char *convertEncoding(const char *to, const char *from, const char *string, size_t length) { return nullptr; }
- /** @} */
+ //@}
};
diff --git a/common/text-to-speech.h b/common/text-to-speech.h
index e91ed87239..a5c2e3765e 100644
--- a/common/text-to-speech.h
+++ b/common/text-to-speech.h
@@ -24,7 +24,7 @@
#define BACKENDS_TEXT_TO_SPEECH_ABSTRACT_H
#include "common/scummsys.h"
-#include "common/encoding.h"
+#include "common/str.h"
#if defined(USE_TTS)
@@ -183,11 +183,8 @@ public:
* Says the given string, but strings can have a custom charset here.
* It will convert to UTF-32 before passing along to the intended method.
*/
- bool say(const String &str, Action action, String charset = "UTF-8") {
- uint32 *res = (uint32 *)Encoding::convert("UTF-32", charset, str);
- U32String textToSpeak(res);
- free(res);
-
+ bool say(const String &str, Action action, CodePage charset = kUtf8) {
+ U32String textToSpeak(str, charset);
return say(textToSpeak, action);
}
@@ -205,7 +202,7 @@ public:
* @param charset The encoding of the string. It will be converted to UTF-32.
* It will use UTF-8 by default.
*/
- bool say(const String &str, String charset = "UTF-8") {
+ bool say(const String &str, CodePage charset = kUtf8) {
return say(str, INTERRUPT_NO_REPEAT, charset);
}
diff --git a/common/ustr.cpp b/common/ustr.cpp
index 85bd362047..8f43349eab 100644
--- a/common/ustr.cpp
+++ b/common/ustr.cpp
@@ -27,26 +27,26 @@
namespace Common {
-U32String::U32String(const char *str) : BaseString<u32char_type_t>() {
+U32String::U32String(const char *str, Common::CodePage page) : BaseString<u32char_type_t>() {
if (str == nullptr) {
_storage[0] = 0;
_size = 0;
} else {
- initWithCStr(str, strlen(str));
+ decodeInternal(str, strlen(str), page);
}
}
-U32String::U32String(const char *str, uint32 len) : BaseString<u32char_type_t>() {
- initWithCStr(str, len);
+U32String::U32String(const char *str, uint32 len, Common::CodePage page) : BaseString<u32char_type_t>() {
+ decodeInternal(str, len, page);
}
-U32String::U32String(const char *beginP, const char *endP) : BaseString<u32char_type_t>() {
+U32String::U32String(const char *beginP, const char *endP, Common::CodePage page) : BaseString<u32char_type_t>() {
assert(endP >= beginP);
- initWithCStr(beginP, endP - beginP);
+ decodeInternal(beginP, endP - beginP, page);
}
-U32String::U32String(const String &str) : BaseString<u32char_type_t>() {
- initWithCStr(str.c_str(), str.size());
+U32String::U32String(const String &str, Common::CodePage page) : BaseString<u32char_type_t>() {
+ decodeInternal(str.c_str(), str.size(), page);
}
U32String &U32String::operator=(const U32String &str) {
@@ -56,7 +56,7 @@ U32String &U32String::operator=(const U32String &str) {
U32String &U32String::operator=(const String &str) {
clear();
- initWithCStr(str.c_str(), str.size());
+ decodeInternal(str.c_str(), str.size(), Common::kUtf8);
return *this;
}
@@ -66,7 +66,7 @@ U32String &U32String::operator=(const value_type *str) {
U32String &U32String::operator=(const char *str) {
clear();
- initWithCStr(str, strlen(str));
+ decodeInternal(str, strlen(str), Common::kUtf8);
return *this;
}
@@ -131,16 +131,12 @@ U32String U32String::substr(size_t pos, size_t len) const {
return U32String(_str + pos, MIN((size_t)_size - pos, len));
}
-void U32String::insertString(const char *s, uint32 p) {
- while (*s != '\0') {
- BaseString<u32char_type_t>::insertChar(*s++, p++);
- }
+void U32String::insertString(const char *s, uint32 p, CodePage page) {
+ insertString(U32String(s, page), p);
}
-void U32String::insertString(const String &s, uint32 p) {
- for (uint32 i = 0; i < s.size(); ++i) {
- BaseString<u32char_type_t>::insertChar(s[i], p++);
- }
+void U32String::insertString(const String &s, uint32 p, CodePage page) {
+ insertString(U32String(s, page), p);
}
U32String U32String::format(U32String fmt, ...) {
diff --git a/common/ustr.h b/common/ustr.h
index 53cb795879..d40542e88f 100644
--- a/common/ustr.h
+++ b/common/ustr.h
@@ -84,16 +84,16 @@ public:
U32String(const U32String &str) : BaseString<u32char_type_t>(str) {}
/** Construct a new string from the given NULL-terminated C string. */
- explicit U32String(const char *str);
+ explicit U32String(const char *str, CodePage page = kUtf8);
/** Construct a new string containing exactly len characters read from address str. */
- U32String(const char *str, uint32 len);
+ U32String(const char *str, uint32 len, CodePage page = kUtf8);
/** Construct a new string containing the characters between beginP (including) and endP (excluding). */
- U32String(const char *beginP, const char *endP);
+ U32String(const char *beginP, const char *endP, CodePage page = kUtf8);
/** Construct a copy of the given string. */
- U32String(const String &str);
+ U32String(const String &str, CodePage page = kUtf8);
U32String &operator=(const U32String &str);
U32String &operator=(const String &str);
@@ -130,8 +130,8 @@ public:
static char* itoa(int num, char* str, int base);
using BaseString<value_type>::insertString;
- void insertString(const char *s, uint32 p);
- void insertString(const String &s, uint32 p);
+ void insertString(const char *s, uint32 p, CodePage page = kUtf8);
+ void insertString(const String &s, uint32 p, CodePage page = kUtf8);
/** Return a substring of this string */
U32String substr(size_t pos = 0, size_t len = npos) const;
@@ -140,9 +140,24 @@ public:
return (const uint32 *) _str;
}
+ static Common::U32String decodeUTF16BE(const uint16 *start, uint len);
+ static Common::U32String decodeUTF16LE(const uint16 *start, uint len);
+ static Common::U32String decodeUTF16Native(const uint16 *start, uint len);
+
+ /* Transform U32String into UTF-16 representation. The result must be freed. */
+ uint16 *encodeUTF16BE(uint *len = nullptr) const;
+ uint16 *encodeUTF16LE(uint *len = nullptr) const;
+ uint16 *encodeUTF16Native(uint *len = nullptr) const;
+
private:
- void encodeUTF8(String &dst) const;
- void encodeOneByte(String &dst, CodePage page) const;
+ void decodeInternal(const char *str, uint32 len, CodePage page);
+ void decodeOneByte(const char *str, uint32 len, CodePage page);
+ void decodeWindows932(const char *src, uint32 len);
+ void decodeWindows949(const char *src, uint32 len);
+ void decodeWindows950(const char *src, uint32 len);
+ void decodeUTF8(const char *str, uint32 len);
+
+ friend class String;
};
U32String operator+(const U32String &x, const U32String &y);
diff --git a/configure b/configure
index 997bee82fd..b0ad6355f8 100755
--- a/configure
+++ b/configure
@@ -171,7 +171,6 @@ _taskbar=auto
_updates=no
_libunity=auto
_dialogs=auto
-_iconv=auto
_tts=auto
_gtk=auto
_fribidi=auto
@@ -1181,9 +1180,6 @@ Optional Libraries:
--with-libcurl-prefix=DIR prefix where libcurl is installed (optional)
--disable-libcurl disable libcurl networking library [autodetect]
- --with-iconv-prefix=DIR prefix where libiconv is installed (optional)
- --disable-iconv disable libiconv encoding conversion library [autodetect]
-
--with-discord-prefix=DIR prefix where discord-rpc is installed (optional)
--disable-discord disable Discord rich presence integration [autodetect]
@@ -1349,8 +1345,6 @@ for ac_option in $@; do
--disable-eventrecorder) _eventrec=no ;;
--enable-text-console) _text_console=yes ;;
--disable-text-console) _text_console=no ;;
- --enable-iconv) _iconv=yes ;;
- --disable-iconv) _iconv=no ;;
--with-fluidsynth-prefix=*)
arg=`echo $ac_option | cut -d '=' -f 2`
FLUIDSYNTH_CFLAGS="-I$arg/include"
@@ -1470,11 +1464,6 @@ for ac_option in $@; do
GLEW_CFLAGS="-I$arg/include"
GLEW_LIBS="-L$arg/lib"
;;
- --with-iconv-prefix=*)
- arg=`echo $ac_option | cut -d '=' -f 2`
- ICONV_CFLAGS="-I$arg/include"
- ICONV_LIBS="-L$arg/lib"
- ;;
--with-discord-prefix=*)
arg=`echo $ac_option | cut -d '=' -f 2`
DISCORD_CFLAGS="-I$arg/include"
@@ -5516,86 +5505,6 @@ if test -n "$LIBS_3D" ; then
fi
-#
-# Check for iconv
-#
-echo_n "Checking whether iconv.h is present... "
-if test "$_iconv" = auto ; then
- _iconv=no
- cat > $TMPC << EOF
-#include <iconv.h>
-int main(int, char **) {
- return 0;
-}
-EOF
- cc_check $ICONV_CFLAGS $ICONV_LIBS && _iconv=yes
-fi
-
-create_iconv_test() {
- cat > $TMPC << EOF
-#include <iconv.h>
-int main(int, char **) {
- iconv_t iconv = iconv_open("UTF-32", "SJIS");
- iconv_close(iconv);
- return 0;
-}
-EOF
-}
-echo "$_iconv"
-
-if test "$_iconv" = yes ; then
- echo_n "Checking whether iconv needs linking against libiconv... "
-
- needs_iconvlib='auto'
- create_iconv_test
- cc_check $ICONV_CFLAGS $ICONV_LIBS -liconv && needs_iconvlib='yes'
- # We do check linking without -liconv here too, just in case
- # it would fail otherwise too
- create_iconv_test
- cc_check $ICONV_CFLAGS $ICONV_LIBS && needs_iconvlib='no'
-
- if test "$needs_iconvlib" = auto ; then
- _iconv=no
- echo "does not link at all"
- else
- if test "$needs_iconvlib" = yes ; then
- append_var ICONV_LIBS "-liconv"
- fi
- echo "$needs_iconvlib"
-
- echo_n "Checking signature of iconv... "
- uses_const=no
-
- cat > $TMPC << EOF
-#include <iconv.h>
-int main(int argc, char **argv) {
- iconv_t iconvP;
- const char **inbuf = 0;
- iconv(iconvP, inbuf, 0, 0, 0);
- return 0;
-}
-EOF
- cc_check $ICONV_CFLAGS $ICONV_LIBS && uses_const=yes
-
- if test "$uses_const" = yes ; then
- echo "iconv_t, const char **, size_t *, char **, size_t *"
- else
- echo "iconv_t, char **, size_t *, char **, size_t *"
- fi
-
- define_in_config_if_yes "$uses_const" 'ICONV_USES_CONST'
- fi
-fi
-
-if test "$_iconv" = yes ; then
- append_var LIBS "$ICONV_LIBS"
- append_var INCLUDES "$ICONV_CFLAGS"
-fi
-
-echocheck "iconv"
-define_in_config_if_yes "$_iconv" 'USE_ICONV'
-echo "$_iconv"
-
#
# Check for Linux CD-ROM support
#
diff --git a/devtools/README b/devtools/README
index 5c4d494e76..a6006cd4ae 100644
--- a/devtools/README
+++ b/devtools/README
@@ -45,6 +45,12 @@ create_drascula (sev)
and Italian. This tool is used to create the drascula.dat file.
+create_encodings (phcoder)
+--------------
+ Transforms CJK tables from unicode consortium format to the format
+ used by ScummVM
+
+
create_hugo (Strangerke)
-----------
Creates hugo.dat file which contains all kinds of static data contained
diff --git a/devtools/create_encoding/CP932.TXT b/devtools/create_encoding/CP932.TXT
new file mode 100644
index 0000000000..7ff471bcd1
--- /dev/null
+++ b/devtools/create_encoding/CP932.TXT
@@ -0,0 +1,7998 @@
+#
+# Name: cp932 to Unicode table
+# Unicode version: 2.0
+# Table version: 2.01
+# Table format: Format A
+# Date: 04/15/98
+#
+# Contact: Shawn.Steele at microsoft.com
+#
+# General notes: none
+#
+# Format: Three tab-separated columns
+# Column #1 is the cp932 code (in hex)
+# Column #2 is the Unicode (in hex as 0xXXXX)
+# Column #3 is the Unicode name (follows a comment sign, '#')
+#
+# The entries are in cp932 order
+#
+0x00 0x0000 #NULL
+0x01 0x0001 #START OF HEADING
+0x02 0x0002 #START OF TEXT
+0x03 0x0003 #END OF TEXT
+0x04 0x0004 #END OF TRANSMISSION
+0x05 0x0005 #ENQUIRY
+0x06 0x0006 #ACKNOWLEDGE
+0x07 0x0007 #BELL
+0x08 0x0008 #BACKSPACE
+0x09 0x0009 #HORIZONTAL TABULATION
+0x0A 0x000A #LINE FEED
+0x0B 0x000B #VERTICAL TABULATION
+0x0C 0x000C #FORM FEED
+0x0D 0x000D #CARRIAGE RETURN
+0x0E 0x000E #SHIFT OUT
+0x0F 0x000F #SHIFT IN
+0x10 0x0010 #DATA LINK ESCAPE
+0x11 0x0011 #DEVICE CONTROL ONE
+0x12 0x0012 #DEVICE CONTROL TWO
+0x13 0x0013 #DEVICE CONTROL THREE
+0x14 0x0014 #DEVICE CONTROL FOUR
+0x15 0x0015 #NEGATIVE ACKNOWLEDGE
+0x16 0x0016 #SYNCHRONOUS IDLE
+0x17 0x0017 #END OF TRANSMISSION BLOCK
+0x18 0x0018 #CANCEL
+0x19 0x0019 #END OF MEDIUM
+0x1A 0x001A #SUBSTITUTE
+0x1B 0x001B #ESCAPE
+0x1C 0x001C #FILE SEPARATOR
+0x1D 0x001D #GROUP SEPARATOR
+0x1E 0x001E #RECORD SEPARATOR
+0x1F 0x001F #UNIT SEPARATOR
+0x20 0x0020 #SPACE
+0x21 0x0021 #EXCLAMATION MARK
+0x22 0x0022 #QUOTATION MARK
+0x23 0x0023 #NUMBER SIGN
+0x24 0x0024 #DOLLAR SIGN
+0x25 0x0025 #PERCENT SIGN
+0x26 0x0026 #AMPERSAND
+0x27 0x0027 #APOSTROPHE
+0x28 0x0028 #LEFT PARENTHESIS
+0x29 0x0029 #RIGHT PARENTHESIS
+0x2A 0x002A #ASTERISK
+0x2B 0x002B #PLUS SIGN
+0x2C 0x002C #COMMA
+0x2D 0x002D #HYPHEN-MINUS
+0x2E 0x002E #FULL STOP
+0x2F 0x002F #SOLIDUS
+0x30 0x0030 #DIGIT ZERO
+0x31 0x0031 #DIGIT ONE
+0x32 0x0032 #DIGIT TWO
+0x33 0x0033 #DIGIT THREE
+0x34 0x0034 #DIGIT FOUR
+0x35 0x0035 #DIGIT FIVE
+0x36 0x0036 #DIGIT SIX
+0x37 0x0037 #DIGIT SEVEN
+0x38 0x0038 #DIGIT EIGHT
+0x39 0x0039 #DIGIT NINE
+0x3A 0x003A #COLON
+0x3B 0x003B #SEMICOLON
+0x3C 0x003C #LESS-THAN SIGN
+0x3D 0x003D #EQUALS SIGN
+0x3E 0x003E #GREATER-THAN SIGN
+0x3F 0x003F #QUESTION MARK
+0x40 0x0040 #COMMERCIAL AT
+0x41 0x0041 #LATIN CAPITAL LETTER A
+0x42 0x0042 #LATIN CAPITAL LETTER B
+0x43 0x0043 #LATIN CAPITAL LETTER C
+0x44 0x0044 #LATIN CAPITAL LETTER D
+0x45 0x0045 #LATIN CAPITAL LETTER E
+0x46 0x0046 #LATIN CAPITAL LETTER F
+0x47 0x0047 #LATIN CAPITAL LETTER G
+0x48 0x0048 #LATIN CAPITAL LETTER H
+0x49 0x0049 #LATIN CAPITAL LETTER I
+0x4A 0x004A #LATIN CAPITAL LETTER J
+0x4B 0x004B #LATIN CAPITAL LETTER K
+0x4C 0x004C #LATIN CAPITAL LETTER L
+0x4D 0x004D #LATIN CAPITAL LETTER M
+0x4E 0x004E #LATIN CAPITAL LETTER N
+0x4F 0x004F #LATIN CAPITAL LETTER O
+0x50 0x0050 #LATIN CAPITAL LETTER P
+0x51 0x0051 #LATIN CAPITAL LETTER Q
+0x52 0x0052 #LATIN CAPITAL LETTER R
+0x53 0x0053 #LATIN CAPITAL LETTER S
+0x54 0x0054 #LATIN CAPITAL LETTER T
+0x55 0x0055 #LATIN CAPITAL LETTER U
+0x56 0x0056 #LATIN CAPITAL LETTER V
+0x57 0x0057 #LATIN CAPITAL LETTER W
+0x58 0x0058 #LATIN CAPITAL LETTER X
+0x59 0x0059 #LATIN CAPITAL LETTER Y
+0x5A 0x005A #LATIN CAPITAL LETTER Z
+0x5B 0x005B #LEFT SQUARE BRACKET
+0x5C 0x005C #REVERSE SOLIDUS
+0x5D 0x005D #RIGHT SQUARE BRACKET
+0x5E 0x005E #CIRCUMFLEX ACCENT
+0x5F 0x005F #LOW LINE
+0x60 0x0060 #GRAVE ACCENT
+0x61 0x0061 #LATIN SMALL LETTER A
+0x62 0x0062 #LATIN SMALL LETTER B
+0x63 0x0063 #LATIN SMALL LETTER C
+0x64 0x0064 #LATIN SMALL LETTER D
+0x65 0x0065 #LATIN SMALL LETTER E
+0x66 0x0066 #LATIN SMALL LETTER F
+0x67 0x0067 #LATIN SMALL LETTER G
+0x68 0x0068 #LATIN SMALL LETTER H
+0x69 0x0069 #LATIN SMALL LETTER I
+0x6A 0x006A #LATIN SMALL LETTER J
+0x6B 0x006B #LATIN SMALL LETTER K
+0x6C 0x006C #LATIN SMALL LETTER L
+0x6D 0x006D #LATIN SMALL LETTER M
+0x6E 0x006E #LATIN SMALL LETTER N
+0x6F 0x006F #LATIN SMALL LETTER O
+0x70 0x0070 #LATIN SMALL LETTER P
+0x71 0x0071 #LATIN SMALL LETTER Q
+0x72 0x0072 #LATIN SMALL LETTER R
+0x73 0x0073 #LATIN SMALL LETTER S
+0x74 0x0074 #LATIN SMALL LETTER T
+0x75 0x0075 #LATIN SMALL LETTER U
+0x76 0x0076 #LATIN SMALL LETTER V
+0x77 0x0077 #LATIN SMALL LETTER W
+0x78 0x0078 #LATIN SMALL LETTER X
+0x79 0x0079 #LATIN SMALL LETTER Y
+0x7A 0x007A #LATIN SMALL LETTER Z
+0x7B 0x007B #LEFT CURLY BRACKET
+0x7C 0x007C #VERTICAL LINE
+0x7D 0x007D #RIGHT CURLY BRACKET
+0x7E 0x007E #TILDE
+0x7F 0x007F #DELETE
+0x80 #UNDEFINED
+0x81 #DBCS LEAD BYTE
+0x82 #DBCS LEAD BYTE
+0x83 #DBCS LEAD BYTE
+0x84 #DBCS LEAD BYTE
+0x85 #DBCS LEAD BYTE
+0x86 #DBCS LEAD BYTE
+0x87 #DBCS LEAD BYTE
+0x88 #DBCS LEAD BYTE
+0x89 #DBCS LEAD BYTE
+0x8A #DBCS LEAD BYTE
+0x8B #DBCS LEAD BYTE
+0x8C #DBCS LEAD BYTE
+0x8D #DBCS LEAD BYTE
+0x8E #DBCS LEAD BYTE
+0x8F #DBCS LEAD BYTE
+0x90 #DBCS LEAD BYTE
+0x91 #DBCS LEAD BYTE
+0x92 #DBCS LEAD BYTE
+0x93 #DBCS LEAD BYTE
+0x94 #DBCS LEAD BYTE
+0x95 #DBCS LEAD BYTE
+0x96 #DBCS LEAD BYTE
+0x97 #DBCS LEAD BYTE
+0x98 #DBCS LEAD BYTE
+0x99 #DBCS LEAD BYTE
+0x9A #DBCS LEAD BYTE
+0x9B #DBCS LEAD BYTE
+0x9C #DBCS LEAD BYTE
+0x9D #DBCS LEAD BYTE
+0x9E #DBCS LEAD BYTE
+0x9F #DBCS LEAD BYTE
+0xA0 #UNDEFINED
+0xA1 0xFF61 #HALFWIDTH IDEOGRAPHIC FULL STOP
+0xA2 0xFF62 #HALFWIDTH LEFT CORNER BRACKET
+0xA3 0xFF63 #HALFWIDTH RIGHT CORNER BRACKET
+0xA4 0xFF64 #HALFWIDTH IDEOGRAPHIC COMMA
+0xA5 0xFF65 #HALFWIDTH KATAKANA MIDDLE DOT
+0xA6 0xFF66 #HALFWIDTH KATAKANA LETTER WO
+0xA7 0xFF67 #HALFWIDTH KATAKANA LETTER SMALL A
+0xA8 0xFF68 #HALFWIDTH KATAKANA LETTER SMALL I
+0xA9 0xFF69 #HALFWIDTH KATAKANA LETTER SMALL U
+0xAA 0xFF6A #HALFWIDTH KATAKANA LETTER SMALL E
+0xAB 0xFF6B #HALFWIDTH KATAKANA LETTER SMALL O
+0xAC 0xFF6C #HALFWIDTH KATAKANA LETTER SMALL YA
+0xAD 0xFF6D #HALFWIDTH KATAKANA LETTER SMALL YU
+0xAE 0xFF6E #HALFWIDTH KATAKANA LETTER SMALL YO
+0xAF 0xFF6F #HALFWIDTH KATAKANA LETTER SMALL TU
+0xB0 0xFF70 #HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+0xB1 0xFF71 #HALFWIDTH KATAKANA LETTER A
+0xB2 0xFF72 #HALFWIDTH KATAKANA LETTER I
+0xB3 0xFF73 #HALFWIDTH KATAKANA LETTER U
+0xB4 0xFF74 #HALFWIDTH KATAKANA LETTER E
+0xB5 0xFF75 #HALFWIDTH KATAKANA LETTER O
+0xB6 0xFF76 #HALFWIDTH KATAKANA LETTER KA
+0xB7 0xFF77 #HALFWIDTH KATAKANA LETTER KI
+0xB8 0xFF78 #HALFWIDTH KATAKANA LETTER KU
+0xB9 0xFF79 #HALFWIDTH KATAKANA LETTER KE
+0xBA 0xFF7A #HALFWIDTH KATAKANA LETTER KO
+0xBB 0xFF7B #HALFWIDTH KATAKANA LETTER SA
+0xBC 0xFF7C #HALFWIDTH KATAKANA LETTER SI
+0xBD 0xFF7D #HALFWIDTH KATAKANA LETTER SU
+0xBE 0xFF7E #HALFWIDTH KATAKANA LETTER SE
+0xBF 0xFF7F #HALFWIDTH KATAKANA LETTER SO
+0xC0 0xFF80 #HALFWIDTH KATAKANA LETTER TA
+0xC1 0xFF81 #HALFWIDTH KATAKANA LETTER TI
+0xC2 0xFF82 #HALFWIDTH KATAKANA LETTER TU
+0xC3 0xFF83 #HALFWIDTH KATAKANA LETTER TE
+0xC4 0xFF84 #HALFWIDTH KATAKANA LETTER TO
+0xC5 0xFF85 #HALFWIDTH KATAKANA LETTER NA
+0xC6 0xFF86 #HALFWIDTH KATAKANA LETTER NI
+0xC7 0xFF87 #HALFWIDTH KATAKANA LETTER NU
+0xC8 0xFF88 #HALFWIDTH KATAKANA LETTER NE
+0xC9 0xFF89 #HALFWIDTH KATAKANA LETTER NO
+0xCA 0xFF8A #HALFWIDTH KATAKANA LETTER HA
+0xCB 0xFF8B #HALFWIDTH KATAKANA LETTER HI
+0xCC 0xFF8C #HALFWIDTH KATAKANA LETTER HU
+0xCD 0xFF8D #HALFWIDTH KATAKANA LETTER HE
+0xCE 0xFF8E #HALFWIDTH KATAKANA LETTER HO
+0xCF 0xFF8F #HALFWIDTH KATAKANA LETTER MA
+0xD0 0xFF90 #HALFWIDTH KATAKANA LETTER MI
+0xD1 0xFF91 #HALFWIDTH KATAKANA LETTER MU
+0xD2 0xFF92 #HALFWIDTH KATAKANA LETTER ME
+0xD3 0xFF93 #HALFWIDTH KATAKANA LETTER MO
+0xD4 0xFF94 #HALFWIDTH KATAKANA LETTER YA
+0xD5 0xFF95 #HALFWIDTH KATAKANA LETTER YU
+0xD6 0xFF96 #HALFWIDTH KATAKANA LETTER YO
+0xD7 0xFF97 #HALFWIDTH KATAKANA LETTER RA
+0xD8 0xFF98 #HALFWIDTH KATAKANA LETTER RI
+0xD9 0xFF99 #HALFWIDTH KATAKANA LETTER RU
+0xDA 0xFF9A #HALFWIDTH KATAKANA LETTER RE
+0xDB 0xFF9B #HALFWIDTH KATAKANA LETTER RO
+0xDC 0xFF9C #HALFWIDTH KATAKANA LETTER WA
+0xDD 0xFF9D #HALFWIDTH KATAKANA LETTER N
+0xDE 0xFF9E #HALFWIDTH KATAKANA VOICED SOUND MARK
+0xDF 0xFF9F #HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+0xE0 #DBCS LEAD BYTE
+0xE1 #DBCS LEAD BYTE
+0xE2 #DBCS LEAD BYTE
+0xE3 #DBCS LEAD BYTE
+0xE4 #DBCS LEAD BYTE
+0xE5 #DBCS LEAD BYTE
+0xE6 #DBCS LEAD BYTE
+0xE7 #DBCS LEAD BYTE
+0xE8 #DBCS LEAD BYTE
+0xE9 #DBCS LEAD BYTE
+0xEA #DBCS LEAD BYTE
+0xEB #DBCS LEAD BYTE
+0xEC #DBCS LEAD BYTE
+0xED #DBCS LEAD BYTE
+0xEE #DBCS LEAD BYTE
+0xEF #DBCS LEAD BYTE
+0xF0 #DBCS LEAD BYTE
+0xF1 #DBCS LEAD BYTE
+0xF2 #DBCS LEAD BYTE
+0xF3 #DBCS LEAD BYTE
+0xF4 #DBCS LEAD BYTE
+0xF5 #DBCS LEAD BYTE
+0xF6 #DBCS LEAD BYTE
+0xF7 #DBCS LEAD BYTE
+0xF8 #DBCS LEAD BYTE
+0xF9 #DBCS LEAD BYTE
+0xFA #DBCS LEAD BYTE
+0xFB #DBCS LEAD BYTE
+0xFC #DBCS LEAD BYTE
+0xFD #UNDEFINED
+0xFE #UNDEFINED
+0xFF #UNDEFINED
+0x8140 0x3000 #IDEOGRAPHIC SPACE
+0x8141 0x3001 #IDEOGRAPHIC COMMA
+0x8142 0x3002 #IDEOGRAPHIC FULL STOP
+0x8143 0xFF0C #FULLWIDTH COMMA
+0x8144 0xFF0E #FULLWIDTH FULL STOP
+0x8145 0x30FB #KATAKANA MIDDLE DOT
+0x8146 0xFF1A #FULLWIDTH COLON
+0x8147 0xFF1B #FULLWIDTH SEMICOLON
+0x8148 0xFF1F #FULLWIDTH QUESTION MARK
+0x8149 0xFF01 #FULLWIDTH EXCLAMATION MARK
+0x814A 0x309B #KATAKANA-HIRAGANA VOICED SOUND MARK
+0x814B 0x309C #KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+0x814C 0x00B4 #ACUTE ACCENT
+0x814D 0xFF40 #FULLWIDTH GRAVE ACCENT
+0x814E 0x00A8 #DIAERESIS
+0x814F 0xFF3E #FULLWIDTH CIRCUMFLEX ACCENT
+0x8150 0xFFE3 #FULLWIDTH MACRON
+0x8151 0xFF3F #FULLWIDTH LOW LINE
+0x8152 0x30FD #KATAKANA ITERATION MARK
+0x8153 0x30FE #KATAKANA VOICED ITERATION MARK
+0x8154 0x309D #HIRAGANA ITERATION MARK
+0x8155 0x309E #HIRAGANA VOICED ITERATION MARK
+0x8156 0x3003 #DITTO MARK
+0x8157 0x4EDD #CJK UNIFIED IDEOGRAPH
+0x8158 0x3005 #IDEOGRAPHIC ITERATION MARK
+0x8159 0x3006 #IDEOGRAPHIC CLOSING MARK
+0x815A 0x3007 #IDEOGRAPHIC NUMBER ZERO
+0x815B 0x30FC #KATAKANA-HIRAGANA PROLONGED SOUND MARK
+0x815C 0x2015 #HORIZONTAL BAR
+0x815D 0x2010 #HYPHEN
+0x815E 0xFF0F #FULLWIDTH SOLIDUS
+0x815F 0xFF3C #FULLWIDTH REVERSE SOLIDUS
+0x8160 0xFF5E #FULLWIDTH TILDE
+0x8161 0x2225 #PARALLEL TO
+0x8162 0xFF5C #FULLWIDTH VERTICAL LINE
+0x8163 0x2026 #HORIZONTAL ELLIPSIS
+0x8164 0x2025 #TWO DOT LEADER
+0x8165 0x2018 #LEFT SINGLE QUOTATION MARK
+0x8166 0x2019 #RIGHT SINGLE QUOTATION MARK
+0x8167 0x201C #LEFT DOUBLE QUOTATION MARK
+0x8168 0x201D #RIGHT DOUBLE QUOTATION MARK
+0x8169 0xFF08 #FULLWIDTH LEFT PARENTHESIS
+0x816A 0xFF09 #FULLWIDTH RIGHT PARENTHESIS
+0x816B 0x3014 #LEFT TORTOISE SHELL BRACKET
+0x816C 0x3015 #RIGHT TORTOISE SHELL BRACKET
+0x816D 0xFF3B #FULLWIDTH LEFT SQUARE BRACKET
+0x816E 0xFF3D #FULLWIDTH RIGHT SQUARE BRACKET
+0x816F 0xFF5B #FULLWIDTH LEFT CURLY BRACKET
+0x8170 0xFF5D #FULLWIDTH RIGHT CURLY BRACKET
+0x8171 0x3008 #LEFT ANGLE BRACKET
+0x8172 0x3009 #RIGHT ANGLE BRACKET
+0x8173 0x300A #LEFT DOUBLE ANGLE BRACKET
+0x8174 0x300B #RIGHT DOUBLE ANGLE BRACKET
+0x8175 0x300C #LEFT CORNER BRACKET
+0x8176 0x300D #RIGHT CORNER BRACKET
+0x8177 0x300E #LEFT WHITE CORNER BRACKET
+0x8178 0x300F #RIGHT WHITE CORNER BRACKET
+0x8179 0x3010 #LEFT BLACK LENTICULAR BRACKET
+0x817A 0x3011 #RIGHT BLACK LENTICULAR BRACKET
+0x817B 0xFF0B #FULLWIDTH PLUS SIGN
+0x817C 0xFF0D #FULLWIDTH HYPHEN-MINUS
+0x817D 0x00B1 #PLUS-MINUS SIGN
+0x817E 0x00D7 #MULTIPLICATION SIGN
+0x8180 0x00F7 #DIVISION SIGN
+0x8181 0xFF1D #FULLWIDTH EQUALS SIGN
+0x8182 0x2260 #NOT EQUAL TO
+0x8183 0xFF1C #FULLWIDTH LESS-THAN SIGN
+0x8184 0xFF1E #FULLWIDTH GREATER-THAN SIGN
+0x8185 0x2266 #LESS-THAN OVER EQUAL TO
+0x8186 0x2267 #GREATER-THAN OVER EQUAL TO
+0x8187 0x221E #INFINITY
+0x8188 0x2234 #THEREFORE
+0x8189 0x2642 #MALE SIGN
+0x818A 0x2640 #FEMALE SIGN
+0x818B 0x00B0 #DEGREE SIGN
+0x818C 0x2032 #PRIME
+0x818D 0x2033 #DOUBLE PRIME
+0x818E 0x2103 #DEGREE CELSIUS
+0x818F 0xFFE5 #FULLWIDTH YEN SIGN
+0x8190 0xFF04 #FULLWIDTH DOLLAR SIGN
+0x8191 0xFFE0 #FULLWIDTH CENT SIGN
+0x8192 0xFFE1 #FULLWIDTH POUND SIGN
+0x8193 0xFF05 #FULLWIDTH PERCENT SIGN
+0x8194 0xFF03 #FULLWIDTH NUMBER SIGN
+0x8195 0xFF06 #FULLWIDTH AMPERSAND
+0x8196 0xFF0A #FULLWIDTH ASTERISK
+0x8197 0xFF20 #FULLWIDTH COMMERCIAL AT
+0x8198 0x00A7 #SECTION SIGN
+0x8199 0x2606 #WHITE STAR
+0x819A 0x2605 #BLACK STAR
+0x819B 0x25CB #WHITE CIRCLE
+0x819C 0x25CF #BLACK CIRCLE
+0x819D 0x25CE #BULLSEYE
+0x819E 0x25C7 #WHITE DIAMOND
+0x819F 0x25C6 #BLACK DIAMOND
+0x81A0 0x25A1 #WHITE SQUARE
+0x81A1 0x25A0 #BLACK SQUARE
+0x81A2 0x25B3 #WHITE UP-POINTING TRIANGLE
+0x81A3 0x25B2 #BLACK UP-POINTING TRIANGLE
+0x81A4 0x25BD #WHITE DOWN-POINTING TRIANGLE
+0x81A5 0x25BC #BLACK DOWN-POINTING TRIANGLE
+0x81A6 0x203B #REFERENCE MARK
+0x81A7 0x3012 #POSTAL MARK
+0x81A8 0x2192 #RIGHTWARDS ARROW
+0x81A9 0x2190 #LEFTWARDS ARROW
+0x81AA 0x2191 #UPWARDS ARROW
+0x81AB 0x2193 #DOWNWARDS ARROW
+0x81AC 0x3013 #GETA MARK
+0x81B8 0x2208 #ELEMENT OF
+0x81B9 0x220B #CONTAINS AS MEMBER
+0x81BA 0x2286 #SUBSET OF OR EQUAL TO
+0x81BB 0x2287 #SUPERSET OF OR EQUAL TO
+0x81BC 0x2282 #SUBSET OF
+0x81BD 0x2283 #SUPERSET OF
+0x81BE 0x222A #UNION
+0x81BF 0x2229 #INTERSECTION
+0x81C8 0x2227 #LOGICAL AND
+0x81C9 0x2228 #LOGICAL OR
+0x81CA 0xFFE2 #FULLWIDTH NOT SIGN
+0x81CB 0x21D2 #RIGHTWARDS DOUBLE ARROW
+0x81CC 0x21D4 #LEFT RIGHT DOUBLE ARROW
+0x81CD 0x2200 #FOR ALL
+0x81CE 0x2203 #THERE EXISTS
+0x81DA 0x2220 #ANGLE
+0x81DB 0x22A5 #UP TACK
+0x81DC 0x2312 #ARC
+0x81DD 0x2202 #PARTIAL DIFFERENTIAL
+0x81DE 0x2207 #NABLA
+0x81DF 0x2261 #IDENTICAL TO
+0x81E0 0x2252 #APPROXIMATELY EQUAL TO OR THE IMAGE OF
+0x81E1 0x226A #MUCH LESS-THAN
+0x81E2 0x226B #MUCH GREATER-THAN
+0x81E3 0x221A #SQUARE ROOT
+0x81E4 0x223D #REVERSED TILDE
+0x81E5 0x221D #PROPORTIONAL TO
+0x81E6 0x2235 #BECAUSE
+0x81E7 0x222B #INTEGRAL
+0x81E8 0x222C #DOUBLE INTEGRAL
+0x81F0 0x212B #ANGSTROM SIGN
+0x81F1 0x2030 #PER MILLE SIGN
+0x81F2 0x266F #MUSIC SHARP SIGN
+0x81F3 0x266D #MUSIC FLAT SIGN
+0x81F4 0x266A #EIGHTH NOTE
+0x81F5 0x2020 #DAGGER
+0x81F6 0x2021 #DOUBLE DAGGER
+0x81F7 0x00B6 #PILCROW SIGN
+0x81FC 0x25EF #LARGE CIRCLE
+0x824F 0xFF10 #FULLWIDTH DIGIT ZERO
+0x8250 0xFF11 #FULLWIDTH DIGIT ONE
+0x8251 0xFF12 #FULLWIDTH DIGIT TWO
+0x8252 0xFF13 #FULLWIDTH DIGIT THREE
+0x8253 0xFF14 #FULLWIDTH DIGIT FOUR
+0x8254 0xFF15 #FULLWIDTH DIGIT FIVE
+0x8255 0xFF16 #FULLWIDTH DIGIT SIX
+0x8256 0xFF17 #FULLWIDTH DIGIT SEVEN
+0x8257 0xFF18 #FULLWIDTH DIGIT EIGHT
+0x8258 0xFF19 #FULLWIDTH DIGIT NINE
+0x8260 0xFF21 #FULLWIDTH LATIN CAPITAL LETTER A
+0x8261 0xFF22 #FULLWIDTH LATIN CAPITAL LETTER B
+0x8262 0xFF23 #FULLWIDTH LATIN CAPITAL LETTER C
+0x8263 0xFF24 #FULLWIDTH LATIN CAPITAL LETTER D
+0x8264 0xFF25 #FULLWIDTH LATIN CAPITAL LETTER E
+0x8265 0xFF26 #FULLWIDTH LATIN CAPITAL LETTER F
+0x8266 0xFF27 #FULLWIDTH LATIN CAPITAL LETTER G
+0x8267 0xFF28 #FULLWIDTH LATIN CAPITAL LETTER H
+0x8268 0xFF29 #FULLWIDTH LATIN CAPITAL LETTER I
+0x8269 0xFF2A #FULLWIDTH LATIN CAPITAL LETTER J
+0x826A 0xFF2B #FULLWIDTH LATIN CAPITAL LETTER K
+0x826B 0xFF2C #FULLWIDTH LATIN CAPITAL LETTER L
+0x826C 0xFF2D #FULLWIDTH LATIN CAPITAL LETTER M
+0x826D 0xFF2E #FULLWIDTH LATIN CAPITAL LETTER N
+0x826E 0xFF2F #FULLWIDTH LATIN CAPITAL LETTER O
+0x826F 0xFF30 #FULLWIDTH LATIN CAPITAL LETTER P
+0x8270 0xFF31 #FULLWIDTH LATIN CAPITAL LETTER Q
+0x8271 0xFF32 #FULLWIDTH LATIN CAPITAL LETTER R
+0x8272 0xFF33 #FULLWIDTH LATIN CAPITAL LETTER S
+0x8273 0xFF34 #FULLWIDTH LATIN CAPITAL LETTER T
+0x8274 0xFF35 #FULLWIDTH LATIN CAPITAL LETTER U
+0x8275 0xFF36 #FULLWIDTH LATIN CAPITAL LETTER V
+0x8276 0xFF37 #FULLWIDTH LATIN CAPITAL LETTER W
+0x8277 0xFF38 #FULLWIDTH LATIN CAPITAL LETTER X
+0x8278 0xFF39 #FULLWIDTH LATIN CAPITAL LETTER Y
+0x8279 0xFF3A #FULLWIDTH LATIN CAPITAL LETTER Z
+0x8281 0xFF41 #FULLWIDTH LATIN SMALL LETTER A
+0x8282 0xFF42 #FULLWIDTH LATIN SMALL LETTER B
+0x8283 0xFF43 #FULLWIDTH LATIN SMALL LETTER C
+0x8284 0xFF44 #FULLWIDTH LATIN SMALL LETTER D
+0x8285 0xFF45 #FULLWIDTH LATIN SMALL LETTER E
+0x8286 0xFF46 #FULLWIDTH LATIN SMALL LETTER F
+0x8287 0xFF47 #FULLWIDTH LATIN SMALL LETTER G
+0x8288 0xFF48 #FULLWIDTH LATIN SMALL LETTER H
+0x8289 0xFF49 #FULLWIDTH LATIN SMALL LETTER I
+0x828A 0xFF4A #FULLWIDTH LATIN SMALL LETTER J
+0x828B 0xFF4B #FULLWIDTH LATIN SMALL LETTER K
+0x828C 0xFF4C #FULLWIDTH LATIN SMALL LETTER L
+0x828D 0xFF4D #FULLWIDTH LATIN SMALL LETTER M
+0x828E 0xFF4E #FULLWIDTH LATIN SMALL LETTER N
+0x828F 0xFF4F #FULLWIDTH LATIN SMALL LETTER O
+0x8290 0xFF50 #FULLWIDTH LATIN SMALL LETTER P
+0x8291 0xFF51 #FULLWIDTH LATIN SMALL LETTER Q
+0x8292 0xFF52 #FULLWIDTH LATIN SMALL LETTER R
+0x8293 0xFF53 #FULLWIDTH LATIN SMALL LETTER S
+0x8294 0xFF54 #FULLWIDTH LATIN SMALL LETTER T
+0x8295 0xFF55 #FULLWIDTH LATIN SMALL LETTER U
+0x8296 0xFF56 #FULLWIDTH LATIN SMALL LETTER V
+0x8297 0xFF57 #FULLWIDTH LATIN SMALL LETTER W
+0x8298 0xFF58 #FULLWIDTH LATIN SMALL LETTER X
+0x8299 0xFF59 #FULLWIDTH LATIN SMALL LETTER Y
+0x829A 0xFF5A #FULLWIDTH LATIN SMALL LETTER Z
+0x829F 0x3041 #HIRAGANA LETTER SMALL A
+0x82A0 0x3042 #HIRAGANA LETTER A
+0x82A1 0x3043 #HIRAGANA LETTER SMALL I
+0x82A2 0x3044 #HIRAGANA LETTER I
+0x82A3 0x3045 #HIRAGANA LETTER SMALL U
+0x82A4 0x3046 #HIRAGANA LETTER U
+0x82A5 0x3047 #HIRAGANA LETTER SMALL E
+0x82A6 0x3048 #HIRAGANA LETTER E
+0x82A7 0x3049 #HIRAGANA LETTER SMALL O
+0x82A8 0x304A #HIRAGANA LETTER O
+0x82A9 0x304B #HIRAGANA LETTER KA
+0x82AA 0x304C #HIRAGANA LETTER GA
+0x82AB 0x304D #HIRAGANA LETTER KI
+0x82AC 0x304E #HIRAGANA LETTER GI
+0x82AD 0x304F #HIRAGANA LETTER KU
+0x82AE 0x3050 #HIRAGANA LETTER GU
+0x82AF 0x3051 #HIRAGANA LETTER KE
+0x82B0 0x3052 #HIRAGANA LETTER GE
+0x82B1 0x3053 #HIRAGANA LETTER KO
+0x82B2 0x3054 #HIRAGANA LETTER GO
+0x82B3 0x3055 #HIRAGANA LETTER SA
+0x82B4 0x3056 #HIRAGANA LETTER ZA
+0x82B5 0x3057 #HIRAGANA LETTER SI
+0x82B6 0x3058 #HIRAGANA LETTER ZI
+0x82B7 0x3059 #HIRAGANA LETTER SU
+0x82B8 0x305A #HIRAGANA LETTER ZU
+0x82B9 0x305B #HIRAGANA LETTER SE
+0x82BA 0x305C #HIRAGANA LETTER ZE
+0x82BB 0x305D #HIRAGANA LETTER SO
+0x82BC 0x305E #HIRAGANA LETTER ZO
+0x82BD 0x305F #HIRAGANA LETTER TA
+0x82BE 0x3060 #HIRAGANA LETTER DA
+0x82BF 0x3061 #HIRAGANA LETTER TI
+0x82C0 0x3062 #HIRAGANA LETTER DI
+0x82C1 0x3063 #HIRAGANA LETTER SMALL TU
+0x82C2 0x3064 #HIRAGANA LETTER TU
+0x82C3 0x3065 #HIRAGANA LETTER DU
+0x82C4 0x3066 #HIRAGANA LETTER TE
+0x82C5 0x3067 #HIRAGANA LETTER DE
+0x82C6 0x3068 #HIRAGANA LETTER TO
+0x82C7 0x3069 #HIRAGANA LETTER DO
+0x82C8 0x306A #HIRAGANA LETTER NA
+0x82C9 0x306B #HIRAGANA LETTER NI
+0x82CA 0x306C #HIRAGANA LETTER NU
+0x82CB 0x306D #HIRAGANA LETTER NE
+0x82CC 0x306E #HIRAGANA LETTER NO
+0x82CD 0x306F #HIRAGANA LETTER HA
+0x82CE 0x3070 #HIRAGANA LETTER BA
+0x82CF 0x3071 #HIRAGANA LETTER PA
+0x82D0 0x3072 #HIRAGANA LETTER HI
+0x82D1 0x3073 #HIRAGANA LETTER BI
+0x82D2 0x3074 #HIRAGANA LETTER PI
+0x82D3 0x3075 #HIRAGANA LETTER HU
+0x82D4 0x3076 #HIRAGANA LETTER BU
+0x82D5 0x3077 #HIRAGANA LETTER PU
+0x82D6 0x3078 #HIRAGANA LETTER HE
+0x82D7 0x3079 #HIRAGANA LETTER BE
+0x82D8 0x307A #HIRAGANA LETTER PE
+0x82D9 0x307B #HIRAGANA LETTER HO
+0x82DA 0x307C #HIRAGANA LETTER BO
+0x82DB 0x307D #HIRAGANA LETTER PO
+0x82DC 0x307E #HIRAGANA LETTER MA
+0x82DD 0x307F #HIRAGANA LETTER MI
+0x82DE 0x3080 #HIRAGANA LETTER MU
+0x82DF 0x3081 #HIRAGANA LETTER ME
+0x82E0 0x3082 #HIRAGANA LETTER MO
+0x82E1 0x3083 #HIRAGANA LETTER SMALL YA
+0x82E2 0x3084 #HIRAGANA LETTER YA
+0x82E3 0x3085 #HIRAGANA LETTER SMALL YU
+0x82E4 0x3086 #HIRAGANA LETTER YU
+0x82E5 0x3087 #HIRAGANA LETTER SMALL YO
+0x82E6 0x3088 #HIRAGANA LETTER YO
+0x82E7 0x3089 #HIRAGANA LETTER RA
+0x82E8 0x308A #HIRAGANA LETTER RI
+0x82E9 0x308B #HIRAGANA LETTER RU
+0x82EA 0x308C #HIRAGANA LETTER RE
+0x82EB 0x308D #HIRAGANA LETTER RO
+0x82EC 0x308E #HIRAGANA LETTER SMALL WA
+0x82ED 0x308F #HIRAGANA LETTER WA
+0x82EE 0x3090 #HIRAGANA LETTER WI
+0x82EF 0x3091 #HIRAGANA LETTER WE
+0x82F0 0x3092 #HIRAGANA LETTER WO
+0x82F1 0x3093 #HIRAGANA LETTER N
+0x8340 0x30A1 #KATAKANA LETTER SMALL A
+0x8341 0x30A2 #KATAKANA LETTER A
+0x8342 0x30A3 #KATAKANA LETTER SMALL I
+0x8343 0x30A4 #KATAKANA LETTER I
+0x8344 0x30A5 #KATAKANA LETTER SMALL U
+0x8345 0x30A6 #KATAKANA LETTER U
+0x8346 0x30A7 #KATAKANA LETTER SMALL E
+0x8347 0x30A8 #KATAKANA LETTER E
+0x8348 0x30A9 #KATAKANA LETTER SMALL O
+0x8349 0x30AA #KATAKANA LETTER O
+0x834A 0x30AB #KATAKANA LETTER KA
+0x834B 0x30AC #KATAKANA LETTER GA
+0x834C 0x30AD #KATAKANA LETTER KI
+0x834D 0x30AE #KATAKANA LETTER GI
+0x834E 0x30AF #KATAKANA LETTER KU
+0x834F 0x30B0 #KATAKANA LETTER GU
+0x8350 0x30B1 #KATAKANA LETTER KE
+0x8351 0x30B2 #KATAKANA LETTER GE
+0x8352 0x30B3 #KATAKANA LETTER KO
+0x8353 0x30B4 #KATAKANA LETTER GO
+0x8354 0x30B5 #KATAKANA LETTER SA
+0x8355 0x30B6 #KATAKANA LETTER ZA
+0x8356 0x30B7 #KATAKANA LETTER SI
+0x8357 0x30B8 #KATAKANA LETTER ZI
+0x8358 0x30B9 #KATAKANA LETTER SU
+0x8359 0x30BA #KATAKANA LETTER ZU
+0x835A 0x30BB #KATAKANA LETTER SE
+0x835B 0x30BC #KATAKANA LETTER ZE
+0x835C 0x30BD #KATAKANA LETTER SO
+0x835D 0x30BE #KATAKANA LETTER ZO
+0x835E 0x30BF #KATAKANA LETTER TA
+0x835F 0x30C0 #KATAKANA LETTER DA
+0x8360 0x30C1 #KATAKANA LETTER TI
+0x8361 0x30C2 #KATAKANA LETTER DI
+0x8362 0x30C3 #KATAKANA LETTER SMALL TU
+0x8363 0x30C4 #KATAKANA LETTER TU
+0x8364 0x30C5 #KATAKANA LETTER DU
+0x8365 0x30C6 #KATAKANA LETTER TE
+0x8366 0x30C7 #KATAKANA LETTER DE
+0x8367 0x30C8 #KATAKANA LETTER TO
+0x8368 0x30C9 #KATAKANA LETTER DO
+0x8369 0x30CA #KATAKANA LETTER NA
+0x836A 0x30CB #KATAKANA LETTER NI
+0x836B 0x30CC #KATAKANA LETTER NU
+0x836C 0x30CD #KATAKANA LETTER NE
+0x836D 0x30CE #KATAKANA LETTER NO
+0x836E 0x30CF #KATAKANA LETTER HA
+0x836F 0x30D0 #KATAKANA LETTER BA
+0x8370 0x30D1 #KATAKANA LETTER PA
+0x8371 0x30D2 #KATAKANA LETTER HI
+0x8372 0x30D3 #KATAKANA LETTER BI
+0x8373 0x30D4 #KATAKANA LETTER PI
+0x8374 0x30D5 #KATAKANA LETTER HU
+0x8375 0x30D6 #KATAKANA LETTER BU
+0x8376 0x30D7 #KATAKANA LETTER PU
+0x8377 0x30D8 #KATAKANA LETTER HE
+0x8378 0x30D9 #KATAKANA LETTER BE
+0x8379 0x30DA #KATAKANA LETTER PE
+0x837A 0x30DB #KATAKANA LETTER HO
+0x837B 0x30DC #KATAKANA LETTER BO
+0x837C 0x30DD #KATAKANA LETTER PO
+0x837D 0x30DE #KATAKANA LETTER MA
+0x837E 0x30DF #KATAKANA LETTER MI
+0x8380 0x30E0 #KATAKANA LETTER MU
+0x8381 0x30E1 #KATAKANA LETTER ME
+0x8382 0x30E2 #KATAKANA LETTER MO
+0x8383 0x30E3 #KATAKANA LETTER SMALL YA
+0x8384 0x30E4 #KATAKANA LETTER YA
+0x8385 0x30E5 #KATAKANA LETTER SMALL YU
+0x8386 0x30E6 #KATAKANA LETTER YU
+0x8387 0x30E7 #KATAKANA LETTER SMALL YO
+0x8388 0x30E8 #KATAKANA LETTER YO
+0x8389 0x30E9 #KATAKANA LETTER RA
+0x838A 0x30EA #KATAKANA LETTER RI
+0x838B 0x30EB #KATAKANA LETTER RU
+0x838C 0x30EC #KATAKANA LETTER RE
+0x838D 0x30ED #KATAKANA LETTER RO
+0x838E 0x30EE #KATAKANA LETTER SMALL WA
+0x838F 0x30EF #KATAKANA LETTER WA
+0x8390 0x30F0 #KATAKANA LETTER WI
+0x8391 0x30F1 #KATAKANA LETTER WE
+0x8392 0x30F2 #KATAKANA LETTER WO
+0x8393 0x30F3 #KATAKANA LETTER N
+0x8394 0x30F4 #KATAKANA LETTER VU
+0x8395 0x30F5 #KATAKANA LETTER SMALL KA
+0x8396 0x30F6 #KATAKANA LETTER SMALL KE
+0x839F 0x0391 #GREEK CAPITAL LETTER ALPHA
+0x83A0 0x0392 #GREEK CAPITAL LETTER BETA
+0x83A1 0x0393 #GREEK CAPITAL LETTER GAMMA
+0x83A2 0x0394 #GREEK CAPITAL LETTER DELTA
+0x83A3 0x0395 #GREEK CAPITAL LETTER EPSILON
+0x83A4 0x0396 #GREEK CAPITAL LETTER ZETA
+0x83A5 0x0397 #GREEK CAPITAL LETTER ETA
+0x83A6 0x0398 #GREEK CAPITAL LETTER THETA
+0x83A7 0x0399 #GREEK CAPITAL LETTER IOTA
+0x83A8 0x039A #GREEK CAPITAL LETTER KAPPA
+0x83A9 0x039B #GREEK CAPITAL LETTER LAMDA
+0x83AA 0x039C #GREEK CAPITAL LETTER MU
+0x83AB 0x039D #GREEK CAPITAL LETTER NU
+0x83AC 0x039E #GREEK CAPITAL LETTER XI
+0x83AD 0x039F #GREEK CAPITAL LETTER OMICRON
+0x83AE 0x03A0 #GREEK CAPITAL LETTER PI
+0x83AF 0x03A1 #GREEK CAPITAL LETTER RHO
+0x83B0 0x03A3 #GREEK CAPITAL LETTER SIGMA
+0x83B1 0x03A4 #GREEK CAPITAL LETTER TAU
+0x83B2 0x03A5 #GREEK CAPITAL LETTER UPSILON
+0x83B3 0x03A6 #GREEK CAPITAL LETTER PHI
+0x83B4 0x03A7 #GREEK CAPITAL LETTER CHI
+0x83B5 0x03A8 #GREEK CAPITAL LETTER PSI
+0x83B6 0x03A9 #GREEK CAPITAL LETTER OMEGA
+0x83BF 0x03B1 #GREEK SMALL LETTER ALPHA
+0x83C0 0x03B2 #GREEK SMALL LETTER BETA
+0x83C1 0x03B3 #GREEK SMALL LETTER GAMMA
+0x83C2 0x03B4 #GREEK SMALL LETTER DELTA
+0x83C3 0x03B5 #GREEK SMALL LETTER EPSILON
+0x83C4 0x03B6 #GREEK SMALL LETTER ZETA
+0x83C5 0x03B7 #GREEK SMALL LETTER ETA
+0x83C6 0x03B8 #GREEK SMALL LETTER THETA
+0x83C7 0x03B9 #GREEK SMALL LETTER IOTA
+0x83C8 0x03BA #GREEK SMALL LETTER KAPPA
+0x83C9 0x03BB #GREEK SMALL LETTER LAMDA
+0x83CA 0x03BC #GREEK SMALL LETTER MU
+0x83CB 0x03BD #GREEK SMALL LETTER NU
+0x83CC 0x03BE #GREEK SMALL LETTER XI
+0x83CD 0x03BF #GREEK SMALL LETTER OMICRON
+0x83CE 0x03C0 #GREEK SMALL LETTER PI
+0x83CF 0x03C1 #GREEK SMALL LETTER RHO
+0x83D0 0x03C3 #GREEK SMALL LETTER SIGMA
+0x83D1 0x03C4 #GREEK SMALL LETTER TAU
+0x83D2 0x03C5 #GREEK SMALL LETTER UPSILON
+0x83D3 0x03C6 #GREEK SMALL LETTER PHI
+0x83D4 0x03C7 #GREEK SMALL LETTER CHI
+0x83D5 0x03C8 #GREEK SMALL LETTER PSI
+0x83D6 0x03C9 #GREEK SMALL LETTER OMEGA
+0x8440 0x0410 #CYRILLIC CAPITAL LETTER A
+0x8441 0x0411 #CYRILLIC CAPITAL LETTER BE
+0x8442 0x0412 #CYRILLIC CAPITAL LETTER VE
+0x8443 0x0413 #CYRILLIC CAPITAL LETTER GHE
+0x8444 0x0414 #CYRILLIC CAPITAL LETTER DE
+0x8445 0x0415 #CYRILLIC CAPITAL LETTER IE
+0x8446 0x0401 #CYRILLIC CAPITAL LETTER IO
+0x8447 0x0416 #CYRILLIC CAPITAL LETTER ZHE
+0x8448 0x0417 #CYRILLIC CAPITAL LETTER ZE
+0x8449 0x0418 #CYRILLIC CAPITAL LETTER I
+0x844A 0x0419 #CYRILLIC CAPITAL LETTER SHORT I
+0x844B 0x041A #CYRILLIC CAPITAL LETTER KA
+0x844C 0x041B #CYRILLIC CAPITAL LETTER EL
+0x844D 0x041C #CYRILLIC CAPITAL LETTER EM
+0x844E 0x041D #CYRILLIC CAPITAL LETTER EN
+0x844F 0x041E #CYRILLIC CAPITAL LETTER O
+0x8450 0x041F #CYRILLIC CAPITAL LETTER PE
+0x8451 0x0420 #CYRILLIC CAPITAL LETTER ER
+0x8452 0x0421 #CYRILLIC CAPITAL LETTER ES
+0x8453 0x0422 #CYRILLIC CAPITAL LETTER TE
+0x8454 0x0423 #CYRILLIC CAPITAL LETTER U
+0x8455 0x0424 #CYRILLIC CAPITAL LETTER EF
+0x8456 0x0425 #CYRILLIC CAPITAL LETTER HA
+0x8457 0x0426 #CYRILLIC CAPITAL LETTER TSE
+0x8458 0x0427 #CYRILLIC CAPITAL LETTER CHE
+0x8459 0x0428 #CYRILLIC CAPITAL LETTER SHA
+0x845A 0x0429 #CYRILLIC CAPITAL LETTER SHCHA
+0x845B 0x042A #CYRILLIC CAPITAL LETTER HARD SIGN
+0x845C 0x042B #CYRILLIC CAPITAL LETTER YERU
+0x845D 0x042C #CYRILLIC CAPITAL LETTER SOFT SIGN
+0x845E 0x042D #CYRILLIC CAPITAL LETTER E
+0x845F 0x042E #CYRILLIC CAPITAL LETTER YU
+0x8460 0x042F #CYRILLIC CAPITAL LETTER YA
+0x8470 0x0430 #CYRILLIC SMALL LETTER A
+0x8471 0x0431 #CYRILLIC SMALL LETTER BE
+0x8472 0x0432 #CYRILLIC SMALL LETTER VE
+0x8473 0x0433 #CYRILLIC SMALL LETTER GHE
+0x8474 0x0434 #CYRILLIC SMALL LETTER DE
+0x8475 0x0435 #CYRILLIC SMALL LETTER IE
+0x8476 0x0451 #CYRILLIC SMALL LETTER IO
+0x8477 0x0436 #CYRILLIC SMALL LETTER ZHE
+0x8478 0x0437 #CYRILLIC SMALL LETTER ZE
+0x8479 0x0438 #CYRILLIC SMALL LETTER I
+0x847A 0x0439 #CYRILLIC SMALL LETTER SHORT I
+0x847B 0x043A #CYRILLIC SMALL LETTER KA
+0x847C 0x043B #CYRILLIC SMALL LETTER EL
+0x847D 0x043C #CYRILLIC SMALL LETTER EM
+0x847E 0x043D #CYRILLIC SMALL LETTER EN
+0x8480 0x043E #CYRILLIC SMALL LETTER O
+0x8481 0x043F #CYRILLIC SMALL LETTER PE
+0x8482 0x0440 #CYRILLIC SMALL LETTER ER
+0x8483 0x0441 #CYRILLIC SMALL LETTER ES
+0x8484 0x0442 #CYRILLIC SMALL LETTER TE
+0x8485 0x0443 #CYRILLIC SMALL LETTER U
+0x8486 0x0444 #CYRILLIC SMALL LETTER EF
+0x8487 0x0445 #CYRILLIC SMALL LETTER HA
+0x8488 0x0446 #CYRILLIC SMALL LETTER TSE
+0x8489 0x0447 #CYRILLIC SMALL LETTER CHE
+0x848A 0x0448 #CYRILLIC SMALL LETTER SHA
+0x848B 0x0449 #CYRILLIC SMALL LETTER SHCHA
+0x848C 0x044A #CYRILLIC SMALL LETTER HARD SIGN
+0x848D 0x044B #CYRILLIC SMALL LETTER YERU
+0x848E 0x044C #CYRILLIC SMALL LETTER SOFT SIGN
+0x848F 0x044D #CYRILLIC SMALL LETTER E
+0x8490 0x044E #CYRILLIC SMALL LETTER YU
+0x8491 0x044F #CYRILLIC SMALL LETTER YA
+0x849F 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL
+0x84A0 0x2502 #BOX DRAWINGS LIGHT VERTICAL
+0x84A1 0x250C #BOX DRAWINGS LIGHT DOWN AND RIGHT
+0x84A2 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT
+0x84A3 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT
+0x84A4 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT
+0x84A5 0x251C #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+0x84A6 0x252C #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+0x84A7 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT
+0x84A8 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL
+0x84A9 0x253C #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+0x84AA 0x2501 #BOX DRAWINGS HEAVY HORIZONTAL
+0x84AB 0x2503 #BOX DRAWINGS HEAVY VERTICAL
+0x84AC 0x250F #BOX DRAWINGS HEAVY DOWN AND RIGHT
+0x84AD 0x2513 #BOX DRAWINGS HEAVY DOWN AND LEFT
+0x84AE 0x251B #BOX DRAWINGS HEAVY UP AND LEFT
+0x84AF 0x2517 #BOX DRAWINGS HEAVY UP AND RIGHT
+0x84B0 0x2523 #BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+0x84B1 0x2533 #BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+0x84B2 0x252B #BOX DRAWINGS HEAVY VERTICAL AND LEFT
+0x84B3 0x253B #BOX DRAWINGS HEAVY UP AND HORIZONTAL
+0x84B4 0x254B #BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+0x84B5 0x2520 #BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+0x84B6 0x252F #BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+0x84B7 0x2528 #BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+0x84B8 0x2537 #BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+0x84B9 0x253F #BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+0x84BA 0x251D #BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+0x84BB 0x2530 #BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+0x84BC 0x2525 #BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+0x84BD 0x2538 #BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+0x84BE 0x2542 #BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+0x8740 0x2460 #CIRCLED DIGIT ONE
+0x8741 0x2461 #CIRCLED DIGIT TWO
+0x8742 0x2462 #CIRCLED DIGIT THREE
+0x8743 0x2463 #CIRCLED DIGIT FOUR
+0x8744 0x2464 #CIRCLED DIGIT FIVE
+0x8745 0x2465 #CIRCLED DIGIT SIX
+0x8746 0x2466 #CIRCLED DIGIT SEVEN
+0x8747 0x2467 #CIRCLED DIGIT EIGHT
+0x8748 0x2468 #CIRCLED DIGIT NINE
+0x8749 0x2469 #CIRCLED NUMBER TEN
+0x874A 0x246A #CIRCLED NUMBER ELEVEN
+0x874B 0x246B #CIRCLED NUMBER TWELVE
+0x874C 0x246C #CIRCLED NUMBER THIRTEEN
+0x874D 0x246D #CIRCLED NUMBER FOURTEEN
+0x874E 0x246E #CIRCLED NUMBER FIFTEEN
+0x874F 0x246F #CIRCLED NUMBER SIXTEEN
+0x8750 0x2470 #CIRCLED NUMBER SEVENTEEN
+0x8751 0x2471 #CIRCLED NUMBER EIGHTEEN
+0x8752 0x2472 #CIRCLED NUMBER NINETEEN
+0x8753 0x2473 #CIRCLED NUMBER TWENTY
+0x8754 0x2160 #ROMAN NUMERAL ONE
+0x8755 0x2161 #ROMAN NUMERAL TWO
+0x8756 0x2162 #ROMAN NUMERAL THREE
+0x8757 0x2163 #ROMAN NUMERAL FOUR
+0x8758 0x2164 #ROMAN NUMERAL FIVE
+0x8759 0x2165 #ROMAN NUMERAL SIX
+0x875A 0x2166 #ROMAN NUMERAL SEVEN
+0x875B 0x2167 #ROMAN NUMERAL EIGHT
+0x875C 0x2168 #ROMAN NUMERAL NINE
+0x875D 0x2169 #ROMAN NUMERAL TEN
+0x875F 0x3349 #SQUARE MIRI
+0x8760 0x3314 #SQUARE KIRO
+0x8761 0x3322 #SQUARE SENTI
+0x8762 0x334D #SQUARE MEETORU
+0x8763 0x3318 #SQUARE GURAMU
+0x8764 0x3327 #SQUARE TON
+0x8765 0x3303 #SQUARE AARU
+0x8766 0x3336 #SQUARE HEKUTAARU
+0x8767 0x3351 #SQUARE RITTORU
+0x8768 0x3357 #SQUARE WATTO
+0x8769 0x330D #SQUARE KARORII
+0x876A 0x3326 #SQUARE DORU
+0x876B 0x3323 #SQUARE SENTO
+0x876C 0x332B #SQUARE PAASENTO
+0x876D 0x334A #SQUARE MIRIBAARU
+0x876E 0x333B #SQUARE PEEZI
+0x876F 0x339C #SQUARE MM
+0x8770 0x339D #SQUARE CM
+0x8771 0x339E #SQUARE KM
+0x8772 0x338E #SQUARE MG
+0x8773 0x338F #SQUARE KG
+0x8774 0x33C4 #SQUARE CC
+0x8775 0x33A1 #SQUARE M SQUARED
+0x877E 0x337B #SQUARE ERA NAME HEISEI
+0x8780 0x301D #REVERSED DOUBLE PRIME QUOTATION MARK
+0x8781 0x301F #LOW DOUBLE PRIME QUOTATION MARK
+0x8782 0x2116 #NUMERO SIGN
+0x8783 0x33CD #SQUARE KK
+0x8784 0x2121 #TELEPHONE SIGN
+0x8785 0x32A4 #CIRCLED IDEOGRAPH HIGH
+0x8786 0x32A5 #CIRCLED IDEOGRAPH CENTRE
+0x8787 0x32A6 #CIRCLED IDEOGRAPH LOW
+0x8788 0x32A7 #CIRCLED IDEOGRAPH LEFT
+0x8789 0x32A8 #CIRCLED IDEOGRAPH RIGHT
+0x878A 0x3231 #PARENTHESIZED IDEOGRAPH STOCK
+0x878B 0x3232 #PARENTHESIZED IDEOGRAPH HAVE
+0x878C 0x3239 #PARENTHESIZED IDEOGRAPH REPRESENT
+0x878D 0x337E #SQUARE ERA NAME MEIZI
+0x878E 0x337D #SQUARE ERA NAME TAISYOU
+0x878F 0x337C #SQUARE ERA NAME SYOUWA
+0x8790 0x2252 #APPROXIMATELY EQUAL TO OR THE IMAGE OF
+0x8791 0x2261 #IDENTICAL TO
+0x8792 0x222B #INTEGRAL
+0x8793 0x222E #CONTOUR INTEGRAL
+0x8794 0x2211 #N-ARY SUMMATION
+0x8795 0x221A #SQUARE ROOT
+0x8796 0x22A5 #UP TACK
+0x8797 0x2220 #ANGLE
+0x8798 0x221F #RIGHT ANGLE
+0x8799 0x22BF #RIGHT TRIANGLE
+0x879A 0x2235 #BECAUSE
+0x879B 0x2229 #INTERSECTION
+0x879C 0x222A #UNION
+0x889F 0x4E9C #CJK UNIFIED IDEOGRAPH
+0x88A0 0x5516 #CJK UNIFIED IDEOGRAPH
+0x88A1 0x5A03 #CJK UNIFIED IDEOGRAPH
+0x88A2 0x963F #CJK UNIFIED IDEOGRAPH
+0x88A3 0x54C0 #CJK UNIFIED IDEOGRAPH
+0x88A4 0x611B #CJK UNIFIED IDEOGRAPH
+0x88A5 0x6328 #CJK UNIFIED IDEOGRAPH
+0x88A6 0x59F6 #CJK UNIFIED IDEOGRAPH
+0x88A7 0x9022 #CJK UNIFIED IDEOGRAPH
+0x88A8 0x8475 #CJK UNIFIED IDEOGRAPH
+0x88A9 0x831C #CJK UNIFIED IDEOGRAPH
+0x88AA 0x7A50 #CJK UNIFIED IDEOGRAPH
+0x88AB 0x60AA #CJK UNIFIED IDEOGRAPH
+0x88AC 0x63E1 #CJK UNIFIED IDEOGRAPH
+0x88AD 0x6E25 #CJK UNIFIED IDEOGRAPH
+0x88AE 0x65ED #CJK UNIFIED IDEOGRAPH
+0x88AF 0x8466 #CJK UNIFIED IDEOGRAPH
+0x88B0 0x82A6 #CJK UNIFIED IDEOGRAPH
+0x88B1 0x9BF5 #CJK UNIFIED IDEOGRAPH
+0x88B2 0x6893 #CJK UNIFIED IDEOGRAPH
+0x88B3 0x5727 #CJK UNIFIED IDEOGRAPH
+0x88B4 0x65A1 #CJK UNIFIED IDEOGRAPH
+0x88B5 0x6271 #CJK UNIFIED IDEOGRAPH
+0x88B6 0x5B9B #CJK UNIFIED IDEOGRAPH
+0x88B7 0x59D0 #CJK UNIFIED IDEOGRAPH
+0x88B8 0x867B #CJK UNIFIED IDEOGRAPH
+0x88B9 0x98F4 #CJK UNIFIED IDEOGRAPH
+0x88BA 0x7D62 #CJK UNIFIED IDEOGRAPH
+0x88BB 0x7DBE #CJK UNIFIED IDEOGRAPH
+0x88BC 0x9B8E #CJK UNIFIED IDEOGRAPH
+0x88BD 0x6216 #CJK UNIFIED IDEOGRAPH
+0x88BE 0x7C9F #CJK UNIFIED IDEOGRAPH
+0x88BF 0x88B7 #CJK UNIFIED IDEOGRAPH
+0x88C0 0x5B89 #CJK UNIFIED IDEOGRAPH
+0x88C1 0x5EB5 #CJK UNIFIED IDEOGRAPH
+0x88C2 0x6309 #CJK UNIFIED IDEOGRAPH
+0x88C3 0x6697 #CJK UNIFIED IDEOGRAPH
+0x88C4 0x6848 #CJK UNIFIED IDEOGRAPH
+0x88C5 0x95C7 #CJK UNIFIED IDEOGRAPH
+0x88C6 0x978D #CJK UNIFIED IDEOGRAPH
+0x88C7 0x674F #CJK UNIFIED IDEOGRAPH
+0x88C8 0x4EE5 #CJK UNIFIED IDEOGRAPH
+0x88C9 0x4F0A #CJK UNIFIED IDEOGRAPH
+0x88CA 0x4F4D #CJK UNIFIED IDEOGRAPH
+0x88CB 0x4F9D #CJK UNIFIED IDEOGRAPH
+0x88CC 0x5049 #CJK UNIFIED IDEOGRAPH
+0x88CD 0x56F2 #CJK UNIFIED IDEOGRAPH
+0x88CE 0x5937 #CJK UNIFIED IDEOGRAPH
+0x88CF 0x59D4 #CJK UNIFIED IDEOGRAPH
+0x88D0 0x5A01 #CJK UNIFIED IDEOGRAPH
+0x88D1 0x5C09 #CJK UNIFIED IDEOGRAPH
+0x88D2 0x60DF #CJK UNIFIED IDEOGRAPH
+0x88D3 0x610F #CJK UNIFIED IDEOGRAPH
+0x88D4 0x6170 #CJK UNIFIED IDEOGRAPH
+0x88D5 0x6613 #CJK UNIFIED IDEOGRAPH
+0x88D6 0x6905 #CJK UNIFIED IDEOGRAPH
+0x88D7 0x70BA #CJK UNIFIED IDEOGRAPH
+0x88D8 0x754F #CJK UNIFIED IDEOGRAPH
+0x88D9 0x7570 #CJK UNIFIED IDEOGRAPH
+0x88DA 0x79FB #CJK UNIFIED IDEOGRAPH
+0x88DB 0x7DAD #CJK UNIFIED IDEOGRAPH
+0x88DC 0x7DEF #CJK UNIFIED IDEOGRAPH
+0x88DD 0x80C3 #CJK UNIFIED IDEOGRAPH
+0x88DE 0x840E #CJK UNIFIED IDEOGRAPH
+0x88DF 0x8863 #CJK UNIFIED IDEOGRAPH
+0x88E0 0x8B02 #CJK UNIFIED IDEOGRAPH
+0x88E1 0x9055 #CJK UNIFIED IDEOGRAPH
+0x88E2 0x907A #CJK UNIFIED IDEOGRAPH
+0x88E3 0x533B #CJK UNIFIED IDEOGRAPH
+0x88E4 0x4E95 #CJK UNIFIED IDEOGRAPH
+0x88E5 0x4EA5 #CJK UNIFIED IDEOGRAPH
+0x88E6 0x57DF #CJK UNIFIED IDEOGRAPH
+0x88E7 0x80B2 #CJK UNIFIED IDEOGRAPH
+0x88E8 0x90C1 #CJK UNIFIED IDEOGRAPH
+0x88E9 0x78EF #CJK UNIFIED IDEOGRAPH
+0x88EA 0x4E00 #CJK UNIFIED IDEOGRAPH
+0x88EB 0x58F1 #CJK UNIFIED IDEOGRAPH
+0x88EC 0x6EA2 #CJK UNIFIED IDEOGRAPH
+0x88ED 0x9038 #CJK UNIFIED IDEOGRAPH
+0x88EE 0x7A32 #CJK UNIFIED IDEOGRAPH
+0x88EF 0x8328 #CJK UNIFIED IDEOGRAPH
+0x88F0 0x828B #CJK UNIFIED IDEOGRAPH
+0x88F1 0x9C2F #CJK UNIFIED IDEOGRAPH
+0x88F2 0x5141 #CJK UNIFIED IDEOGRAPH
+0x88F3 0x5370 #CJK UNIFIED IDEOGRAPH
+0x88F4 0x54BD #CJK UNIFIED IDEOGRAPH
+0x88F5 0x54E1 #CJK UNIFIED IDEOGRAPH
+0x88F6 0x56E0 #CJK UNIFIED IDEOGRAPH
+0x88F7 0x59FB #CJK UNIFIED IDEOGRAPH
+0x88F8 0x5F15 #CJK UNIFIED IDEOGRAPH
+0x88F9 0x98F2 #CJK UNIFIED IDEOGRAPH
+0x88FA 0x6DEB #CJK UNIFIED IDEOGRAPH
+0x88FB 0x80E4 #CJK UNIFIED IDEOGRAPH
+0x88FC 0x852D #CJK UNIFIED IDEOGRAPH
+0x8940 0x9662 #CJK UNIFIED IDEOGRAPH
+0x8941 0x9670 #CJK UNIFIED IDEOGRAPH
+0x8942 0x96A0 #CJK UNIFIED IDEOGRAPH
+0x8943 0x97FB #CJK UNIFIED IDEOGRAPH
+0x8944 0x540B #CJK UNIFIED IDEOGRAPH
+0x8945 0x53F3 #CJK UNIFIED IDEOGRAPH
+0x8946 0x5B87 #CJK UNIFIED IDEOGRAPH
+0x8947 0x70CF #CJK UNIFIED IDEOGRAPH
+0x8948 0x7FBD #CJK UNIFIED IDEOGRAPH
+0x8949 0x8FC2 #CJK UNIFIED IDEOGRAPH
+0x894A 0x96E8 #CJK UNIFIED IDEOGRAPH
+0x894B 0x536F #CJK UNIFIED IDEOGRAPH
+0x894C 0x9D5C #CJK UNIFIED IDEOGRAPH
+0x894D 0x7ABA #CJK UNIFIED IDEOGRAPH
+0x894E 0x4E11 #CJK UNIFIED IDEOGRAPH
+0x894F 0x7893 #CJK UNIFIED IDEOGRAPH
+0x8950 0x81FC #CJK UNIFIED IDEOGRAPH
+0x8951 0x6E26 #CJK UNIFIED IDEOGRAPH
+0x8952 0x5618 #CJK UNIFIED IDEOGRAPH
+0x8953 0x5504 #CJK UNIFIED IDEOGRAPH
+0x8954 0x6B1D #CJK UNIFIED IDEOGRAPH
+0x8955 0x851A #CJK UNIFIED IDEOGRAPH
+0x8956 0x9C3B #CJK UNIFIED IDEOGRAPH
+0x8957 0x59E5 #CJK UNIFIED IDEOGRAPH
+0x8958 0x53A9 #CJK UNIFIED IDEOGRAPH
+0x8959 0x6D66 #CJK UNIFIED IDEOGRAPH
+0x895A 0x74DC #CJK UNIFIED IDEOGRAPH
+0x895B 0x958F #CJK UNIFIED IDEOGRAPH
+0x895C 0x5642 #CJK UNIFIED IDEOGRAPH
+0x895D 0x4E91 #CJK UNIFIED IDEOGRAPH
+0x895E 0x904B #CJK UNIFIED IDEOGRAPH
+0x895F 0x96F2 #CJK UNIFIED IDEOGRAPH
+0x8960 0x834F #CJK UNIFIED IDEOGRAPH
+0x8961 0x990C #CJK UNIFIED IDEOGRAPH
+0x8962 0x53E1 #CJK UNIFIED IDEOGRAPH
+0x8963 0x55B6 #CJK UNIFIED IDEOGRAPH
+0x8964 0x5B30 #CJK UNIFIED IDEOGRAPH
+0x8965 0x5F71 #CJK UNIFIED IDEOGRAPH
+0x8966 0x6620 #CJK UNIFIED IDEOGRAPH
+0x8967 0x66F3 #CJK UNIFIED IDEOGRAPH
+0x8968 0x6804 #CJK UNIFIED IDEOGRAPH
+0x8969 0x6C38 #CJK UNIFIED IDEOGRAPH
+0x896A 0x6CF3 #CJK UNIFIED IDEOGRAPH
+0x896B 0x6D29 #CJK UNIFIED IDEOGRAPH
+0x896C 0x745B #CJK UNIFIED IDEOGRAPH
+0x896D 0x76C8 #CJK UNIFIED IDEOGRAPH
+0x896E 0x7A4E #CJK UNIFIED IDEOGRAPH
+0x896F 0x9834 #CJK UNIFIED IDEOGRAPH
+0x8970 0x82F1 #CJK UNIFIED IDEOGRAPH
+0x8971 0x885B #CJK UNIFIED IDEOGRAPH
+0x8972 0x8A60 #CJK UNIFIED IDEOGRAPH
+0x8973 0x92ED #CJK UNIFIED IDEOGRAPH
+0x8974 0x6DB2 #CJK UNIFIED IDEOGRAPH
+0x8975 0x75AB #CJK UNIFIED IDEOGRAPH
+0x8976 0x76CA #CJK UNIFIED IDEOGRAPH
+0x8977 0x99C5 #CJK UNIFIED IDEOGRAPH
+0x8978 0x60A6 #CJK UNIFIED IDEOGRAPH
+0x8979 0x8B01 #CJK UNIFIED IDEOGRAPH
+0x897A 0x8D8A #CJK UNIFIED IDEOGRAPH
+0x897B 0x95B2 #CJK UNIFIED IDEOGRAPH
+0x897C 0x698E #CJK UNIFIED IDEOGRAPH
+0x897D 0x53AD #CJK UNIFIED IDEOGRAPH
+0x897E 0x5186 #CJK UNIFIED IDEOGRAPH
+0x8980 0x5712 #CJK UNIFIED IDEOGRAPH
+0x8981 0x5830 #CJK UNIFIED IDEOGRAPH
+0x8982 0x5944 #CJK UNIFIED IDEOGRAPH
+0x8983 0x5BB4 #CJK UNIFIED IDEOGRAPH
+0x8984 0x5EF6 #CJK UNIFIED IDEOGRAPH
+0x8985 0x6028 #CJK UNIFIED IDEOGRAPH
+0x8986 0x63A9 #CJK UNIFIED IDEOGRAPH
+0x8987 0x63F4 #CJK UNIFIED IDEOGRAPH
+0x8988 0x6CBF #CJK UNIFIED IDEOGRAPH
+0x8989 0x6F14 #CJK UNIFIED IDEOGRAPH
+0x898A 0x708E #CJK UNIFIED IDEOGRAPH
+0x898B 0x7114 #CJK UNIFIED IDEOGRAPH
+0x898C 0x7159 #CJK UNIFIED IDEOGRAPH
+0x898D 0x71D5 #CJK UNIFIED IDEOGRAPH
+0x898E 0x733F #CJK UNIFIED IDEOGRAPH
+0x898F 0x7E01 #CJK UNIFIED IDEOGRAPH
+0x8990 0x8276 #CJK UNIFIED IDEOGRAPH
+0x8991 0x82D1 #CJK UNIFIED IDEOGRAPH
+0x8992 0x8597 #CJK UNIFIED IDEOGRAPH
+0x8993 0x9060 #CJK UNIFIED IDEOGRAPH
+0x8994 0x925B #CJK UNIFIED IDEOGRAPH
+0x8995 0x9D1B #CJK UNIFIED IDEOGRAPH
+0x8996 0x5869 #CJK UNIFIED IDEOGRAPH
+0x8997 0x65BC #CJK UNIFIED IDEOGRAPH
+0x8998 0x6C5A #CJK UNIFIED IDEOGRAPH
+0x8999 0x7525 #CJK UNIFIED IDEOGRAPH
+0x899A 0x51F9 #CJK UNIFIED IDEOGRAPH
+0x899B 0x592E #CJK UNIFIED IDEOGRAPH
+0x899C 0x5965 #CJK UNIFIED IDEOGRAPH
+0x899D 0x5F80 #CJK UNIFIED IDEOGRAPH
+0x899E 0x5FDC #CJK UNIFIED IDEOGRAPH
+0x899F 0x62BC #CJK UNIFIED IDEOGRAPH
+0x89A0 0x65FA #CJK UNIFIED IDEOGRAPH
+0x89A1 0x6A2A #CJK UNIFIED IDEOGRAPH
+0x89A2 0x6B27 #CJK UNIFIED IDEOGRAPH
+0x89A3 0x6BB4 #CJK UNIFIED IDEOGRAPH
+0x89A4 0x738B #CJK UNIFIED IDEOGRAPH
+0x89A5 0x7FC1 #CJK UNIFIED IDEOGRAPH
+0x89A6 0x8956 #CJK UNIFIED IDEOGRAPH
+0x89A7 0x9D2C #CJK UNIFIED IDEOGRAPH
+0x89A8 0x9D0E #CJK UNIFIED IDEOGRAPH
+0x89A9 0x9EC4 #CJK UNIFIED IDEOGRAPH
+0x89AA 0x5CA1 #CJK UNIFIED IDEOGRAPH
+0x89AB 0x6C96 #CJK UNIFIED IDEOGRAPH
+0x89AC 0x837B #CJK UNIFIED IDEOGRAPH
+0x89AD 0x5104 #CJK UNIFIED IDEOGRAPH
+0x89AE 0x5C4B #CJK UNIFIED IDEOGRAPH
+0x89AF 0x61B6 #CJK UNIFIED IDEOGRAPH
+0x89B0 0x81C6 #CJK UNIFIED IDEOGRAPH
+0x89B1 0x6876 #CJK UNIFIED IDEOGRAPH
+0x89B2 0x7261 #CJK UNIFIED IDEOGRAPH
+0x89B3 0x4E59 #CJK UNIFIED IDEOGRAPH
+0x89B4 0x4FFA #CJK UNIFIED IDEOGRAPH
+0x89B5 0x5378 #CJK UNIFIED IDEOGRAPH
+0x89B6 0x6069 #CJK UNIFIED IDEOGRAPH
+0x89B7 0x6E29 #CJK UNIFIED IDEOGRAPH
+0x89B8 0x7A4F #CJK UNIFIED IDEOGRAPH
+0x89B9 0x97F3 #CJK UNIFIED IDEOGRAPH
+0x89BA 0x4E0B #CJK UNIFIED IDEOGRAPH
+0x89BB 0x5316 #CJK UNIFIED IDEOGRAPH
+0x89BC 0x4EEE #CJK UNIFIED IDEOGRAPH
+0x89BD 0x4F55 #CJK UNIFIED IDEOGRAPH
+0x89BE 0x4F3D #CJK UNIFIED IDEOGRAPH
+0x89BF 0x4FA1 #CJK UNIFIED IDEOGRAPH
+0x89C0 0x4F73 #CJK UNIFIED IDEOGRAPH
+0x89C1 0x52A0 #CJK UNIFIED IDEOGRAPH
+0x89C2 0x53EF #CJK UNIFIED IDEOGRAPH
+0x89C3 0x5609 #CJK UNIFIED IDEOGRAPH
+0x89C4 0x590F #CJK UNIFIED IDEOGRAPH
+0x89C5 0x5AC1 #CJK UNIFIED IDEOGRAPH
+0x89C6 0x5BB6 #CJK UNIFIED IDEOGRAPH
+0x89C7 0x5BE1 #CJK UNIFIED IDEOGRAPH
+0x89C8 0x79D1 #CJK UNIFIED IDEOGRAPH
+0x89C9 0x6687 #CJK UNIFIED IDEOGRAPH
+0x89CA 0x679C #CJK UNIFIED IDEOGRAPH
+0x89CB 0x67B6 #CJK UNIFIED IDEOGRAPH
+0x89CC 0x6B4C #CJK UNIFIED IDEOGRAPH
+0x89CD 0x6CB3 #CJK UNIFIED IDEOGRAPH
+0x89CE 0x706B #CJK UNIFIED IDEOGRAPH
+0x89CF 0x73C2 #CJK UNIFIED IDEOGRAPH
+0x89D0 0x798D #CJK UNIFIED IDEOGRAPH
+0x89D1 0x79BE #CJK UNIFIED IDEOGRAPH
+0x89D2 0x7A3C #CJK UNIFIED IDEOGRAPH
+0x89D3 0x7B87 #CJK UNIFIED IDEOGRAPH
+0x89D4 0x82B1 #CJK UNIFIED IDEOGRAPH
+0x89D5 0x82DB #CJK UNIFIED IDEOGRAPH
+0x89D6 0x8304 #CJK UNIFIED IDEOGRAPH
+0x89D7 0x8377 #CJK UNIFIED IDEOGRAPH
+0x89D8 0x83EF #CJK UNIFIED IDEOGRAPH
+0x89D9 0x83D3 #CJK UNIFIED IDEOGRAPH
+0x89DA 0x8766 #CJK UNIFIED IDEOGRAPH
+0x89DB 0x8AB2 #CJK UNIFIED IDEOGRAPH
+0x89DC 0x5629 #CJK UNIFIED IDEOGRAPH
+0x89DD 0x8CA8 #CJK UNIFIED IDEOGRAPH
+0x89DE 0x8FE6 #CJK UNIFIED IDEOGRAPH
+0x89DF 0x904E #CJK UNIFIED IDEOGRAPH
+0x89E0 0x971E #CJK UNIFIED IDEOGRAPH
+0x89E1 0x868A #CJK UNIFIED IDEOGRAPH
+0x89E2 0x4FC4 #CJK UNIFIED IDEOGRAPH
+0x89E3 0x5CE8 #CJK UNIFIED IDEOGRAPH
+0x89E4 0x6211 #CJK UNIFIED IDEOGRAPH
+0x89E5 0x7259 #CJK UNIFIED IDEOGRAPH
+0x89E6 0x753B #CJK UNIFIED IDEOGRAPH
+0x89E7 0x81E5 #CJK UNIFIED IDEOGRAPH
+0x89E8 0x82BD #CJK UNIFIED IDEOGRAPH
+0x89E9 0x86FE #CJK UNIFIED IDEOGRAPH
+0x89EA 0x8CC0 #CJK UNIFIED IDEOGRAPH
+0x89EB 0x96C5 #CJK UNIFIED IDEOGRAPH
+0x89EC 0x9913 #CJK UNIFIED IDEOGRAPH
+0x89ED 0x99D5 #CJK UNIFIED IDEOGRAPH
+0x89EE 0x4ECB #CJK UNIFIED IDEOGRAPH
+0x89EF 0x4F1A #CJK UNIFIED IDEOGRAPH
+0x89F0 0x89E3 #CJK UNIFIED IDEOGRAPH
+0x89F1 0x56DE #CJK UNIFIED IDEOGRAPH
+0x89F2 0x584A #CJK UNIFIED IDEOGRAPH
+0x89F3 0x58CA #CJK UNIFIED IDEOGRAPH
+0x89F4 0x5EFB #CJK UNIFIED IDEOGRAPH
+0x89F5 0x5FEB #CJK UNIFIED IDEOGRAPH
+0x89F6 0x602A #CJK UNIFIED IDEOGRAPH
+0x89F7 0x6094 #CJK UNIFIED IDEOGRAPH
+0x89F8 0x6062 #CJK UNIFIED IDEOGRAPH
+0x89F9 0x61D0 #CJK UNIFIED IDEOGRAPH
+0x89FA 0x6212 #CJK UNIFIED IDEOGRAPH
+0x89FB 0x62D0 #CJK UNIFIED IDEOGRAPH
+0x89FC 0x6539 #CJK UNIFIED IDEOGRAPH
+0x8A40 0x9B41 #CJK UNIFIED IDEOGRAPH
+0x8A41 0x6666 #CJK UNIFIED IDEOGRAPH
+0x8A42 0x68B0 #CJK UNIFIED IDEOGRAPH
+0x8A43 0x6D77 #CJK UNIFIED IDEOGRAPH
+0x8A44 0x7070 #CJK UNIFIED IDEOGRAPH
+0x8A45 0x754C #CJK UNIFIED IDEOGRAPH
+0x8A46 0x7686 #CJK UNIFIED IDEOGRAPH
+0x8A47 0x7D75 #CJK UNIFIED IDEOGRAPH
+0x8A48 0x82A5 #CJK UNIFIED IDEOGRAPH
+0x8A49 0x87F9 #CJK UNIFIED IDEOGRAPH
+0x8A4A 0x958B #CJK UNIFIED IDEOGRAPH
+0x8A4B 0x968E #CJK UNIFIED IDEOGRAPH
+0x8A4C 0x8C9D #CJK UNIFIED IDEOGRAPH
+0x8A4D 0x51F1 #CJK UNIFIED IDEOGRAPH
+0x8A4E 0x52BE #CJK UNIFIED IDEOGRAPH
+0x8A4F 0x5916 #CJK UNIFIED IDEOGRAPH
+0x8A50 0x54B3 #CJK UNIFIED IDEOGRAPH
+0x8A51 0x5BB3 #CJK UNIFIED IDEOGRAPH
+0x8A52 0x5D16 #CJK UNIFIED IDEOGRAPH
+0x8A53 0x6168 #CJK UNIFIED IDEOGRAPH
+0x8A54 0x6982 #CJK UNIFIED IDEOGRAPH
+0x8A55 0x6DAF #CJK UNIFIED IDEOGRAPH
+0x8A56 0x788D #CJK UNIFIED IDEOGRAPH
+0x8A57 0x84CB #CJK UNIFIED IDEOGRAPH
+0x8A58 0x8857 #CJK UNIFIED IDEOGRAPH
+0x8A59 0x8A72 #CJK UNIFIED IDEOGRAPH
+0x8A5A 0x93A7 #CJK UNIFIED IDEOGRAPH
+0x8A5B 0x9AB8 #CJK UNIFIED IDEOGRAPH
+0x8A5C 0x6D6C #CJK UNIFIED IDEOGRAPH
+0x8A5D 0x99A8 #CJK UNIFIED IDEOGRAPH
+0x8A5E 0x86D9 #CJK UNIFIED IDEOGRAPH
+0x8A5F 0x57A3 #CJK UNIFIED IDEOGRAPH
+0x8A60 0x67FF #CJK UNIFIED IDEOGRAPH
+0x8A61 0x86CE #CJK UNIFIED IDEOGRAPH
+0x8A62 0x920E #CJK UNIFIED IDEOGRAPH
+0x8A63 0x5283 #CJK UNIFIED IDEOGRAPH
+0x8A64 0x5687 #CJK UNIFIED IDEOGRAPH
+0x8A65 0x5404 #CJK UNIFIED IDEOGRAPH
+0x8A66 0x5ED3 #CJK UNIFIED IDEOGRAPH
+0x8A67 0x62E1 #CJK UNIFIED IDEOGRAPH
+0x8A68 0x64B9 #CJK UNIFIED IDEOGRAPH
+0x8A69 0x683C #CJK UNIFIED IDEOGRAPH
+0x8A6A 0x6838 #CJK UNIFIED IDEOGRAPH
+0x8A6B 0x6BBB #CJK UNIFIED IDEOGRAPH
+0x8A6C 0x7372 #CJK UNIFIED IDEOGRAPH
+0x8A6D 0x78BA #CJK UNIFIED IDEOGRAPH
+0x8A6E 0x7A6B #CJK UNIFIED IDEOGRAPH
+0x8A6F 0x899A #CJK UNIFIED IDEOGRAPH
+0x8A70 0x89D2 #CJK UNIFIED IDEOGRAPH
+0x8A71 0x8D6B #CJK UNIFIED IDEOGRAPH
+0x8A72 0x8F03 #CJK UNIFIED IDEOGRAPH
+0x8A73 0x90ED #CJK UNIFIED IDEOGRAPH
+0x8A74 0x95A3 #CJK UNIFIED IDEOGRAPH
+0x8A75 0x9694 #CJK UNIFIED IDEOGRAPH
+0x8A76 0x9769 #CJK UNIFIED IDEOGRAPH
+0x8A77 0x5B66 #CJK UNIFIED IDEOGRAPH
+0x8A78 0x5CB3 #CJK UNIFIED IDEOGRAPH
+0x8A79 0x697D #CJK UNIFIED IDEOGRAPH
+0x8A7A 0x984D #CJK UNIFIED IDEOGRAPH
+0x8A7B 0x984E #CJK UNIFIED IDEOGRAPH
+0x8A7C 0x639B #CJK UNIFIED IDEOGRAPH
+0x8A7D 0x7B20 #CJK UNIFIED IDEOGRAPH
+0x8A7E 0x6A2B #CJK UNIFIED IDEOGRAPH
+0x8A80 0x6A7F #CJK UNIFIED IDEOGRAPH
+0x8A81 0x68B6 #CJK UNIFIED IDEOGRAPH
+0x8A82 0x9C0D #CJK UNIFIED IDEOGRAPH
+0x8A83 0x6F5F #CJK UNIFIED IDEOGRAPH
+0x8A84 0x5272 #CJK UNIFIED IDEOGRAPH
+0x8A85 0x559D #CJK UNIFIED IDEOGRAPH
+0x8A86 0x6070 #CJK UNIFIED IDEOGRAPH
+0x8A87 0x62EC #CJK UNIFIED IDEOGRAPH
+0x8A88 0x6D3B #CJK UNIFIED IDEOGRAPH
+0x8A89 0x6E07 #CJK UNIFIED IDEOGRAPH
+0x8A8A 0x6ED1 #CJK UNIFIED IDEOGRAPH
+0x8A8B 0x845B #CJK UNIFIED IDEOGRAPH
+0x8A8C 0x8910 #CJK UNIFIED IDEOGRAPH
+0x8A8D 0x8F44 #CJK UNIFIED IDEOGRAPH
+0x8A8E 0x4E14 #CJK UNIFIED IDEOGRAPH
+0x8A8F 0x9C39 #CJK UNIFIED IDEOGRAPH
+0x8A90 0x53F6 #CJK UNIFIED IDEOGRAPH
+0x8A91 0x691B #CJK UNIFIED IDEOGRAPH
+0x8A92 0x6A3A #CJK UNIFIED IDEOGRAPH
+0x8A93 0x9784 #CJK UNIFIED IDEOGRAPH
+0x8A94 0x682A #CJK UNIFIED IDEOGRAPH
+0x8A95 0x515C #CJK UNIFIED IDEOGRAPH
+0x8A96 0x7AC3 #CJK UNIFIED IDEOGRAPH
+0x8A97 0x84B2 #CJK UNIFIED IDEOGRAPH
+0x8A98 0x91DC #CJK UNIFIED IDEOGRAPH
+0x8A99 0x938C #CJK UNIFIED IDEOGRAPH
+0x8A9A 0x565B #CJK UNIFIED IDEOGRAPH
+0x8A9B 0x9D28 #CJK UNIFIED IDEOGRAPH
+0x8A9C 0x6822 #CJK UNIFIED IDEOGRAPH
+0x8A9D 0x8305 #CJK UNIFIED IDEOGRAPH
+0x8A9E 0x8431 #CJK UNIFIED IDEOGRAPH
+0x8A9F 0x7CA5 #CJK UNIFIED IDEOGRAPH
+0x8AA0 0x5208 #CJK UNIFIED IDEOGRAPH
+0x8AA1 0x82C5 #CJK UNIFIED IDEOGRAPH
+0x8AA2 0x74E6 #CJK UNIFIED IDEOGRAPH
+0x8AA3 0x4E7E #CJK UNIFIED IDEOGRAPH
+0x8AA4 0x4F83 #CJK UNIFIED IDEOGRAPH
+0x8AA5 0x51A0 #CJK UNIFIED IDEOGRAPH
+0x8AA6 0x5BD2 #CJK UNIFIED IDEOGRAPH
+0x8AA7 0x520A #CJK UNIFIED IDEOGRAPH
+0x8AA8 0x52D8 #CJK UNIFIED IDEOGRAPH
+0x8AA9 0x52E7 #CJK UNIFIED IDEOGRAPH
+0x8AAA 0x5DFB #CJK UNIFIED IDEOGRAPH
+0x8AAB 0x559A #CJK UNIFIED IDEOGRAPH
+0x8AAC 0x582A #CJK UNIFIED IDEOGRAPH
+0x8AAD 0x59E6 #CJK UNIFIED IDEOGRAPH
+0x8AAE 0x5B8C #CJK UNIFIED IDEOGRAPH
+0x8AAF 0x5B98 #CJK UNIFIED IDEOGRAPH
+0x8AB0 0x5BDB #CJK UNIFIED IDEOGRAPH
+0x8AB1 0x5E72 #CJK UNIFIED IDEOGRAPH
+0x8AB2 0x5E79 #CJK UNIFIED IDEOGRAPH
+0x8AB3 0x60A3 #CJK UNIFIED IDEOGRAPH
+0x8AB4 0x611F #CJK UNIFIED IDEOGRAPH
+0x8AB5 0x6163 #CJK UNIFIED IDEOGRAPH
+0x8AB6 0x61BE #CJK UNIFIED IDEOGRAPH
+0x8AB7 0x63DB #CJK UNIFIED IDEOGRAPH
+0x8AB8 0x6562 #CJK UNIFIED IDEOGRAPH
+0x8AB9 0x67D1 #CJK UNIFIED IDEOGRAPH
+0x8ABA 0x6853 #CJK UNIFIED IDEOGRAPH
+0x8ABB 0x68FA #CJK UNIFIED IDEOGRAPH
+0x8ABC 0x6B3E #CJK UNIFIED IDEOGRAPH
+0x8ABD 0x6B53 #CJK UNIFIED IDEOGRAPH
+0x8ABE 0x6C57 #CJK UNIFIED IDEOGRAPH
+0x8ABF 0x6F22 #CJK UNIFIED IDEOGRAPH
+0x8AC0 0x6F97 #CJK UNIFIED IDEOGRAPH
+0x8AC1 0x6F45 #CJK UNIFIED IDEOGRAPH
+0x8AC2 0x74B0 #CJK UNIFIED IDEOGRAPH
+0x8AC3 0x7518 #CJK UNIFIED IDEOGRAPH
+0x8AC4 0x76E3 #CJK UNIFIED IDEOGRAPH
+0x8AC5 0x770B #CJK UNIFIED IDEOGRAPH
+0x8AC6 0x7AFF #CJK UNIFIED IDEOGRAPH
+0x8AC7 0x7BA1 #CJK UNIFIED IDEOGRAPH
+0x8AC8 0x7C21 #CJK UNIFIED IDEOGRAPH
+0x8AC9 0x7DE9 #CJK UNIFIED IDEOGRAPH
+0x8ACA 0x7F36 #CJK UNIFIED IDEOGRAPH
+0x8ACB 0x7FF0 #CJK UNIFIED IDEOGRAPH
+0x8ACC 0x809D #CJK UNIFIED IDEOGRAPH
+0x8ACD 0x8266 #CJK UNIFIED IDEOGRAPH
+0x8ACE 0x839E #CJK UNIFIED IDEOGRAPH
+0x8ACF 0x89B3 #CJK UNIFIED IDEOGRAPH
+0x8AD0 0x8ACC #CJK UNIFIED IDEOGRAPH
+0x8AD1 0x8CAB #CJK UNIFIED IDEOGRAPH
+0x8AD2 0x9084 #CJK UNIFIED IDEOGRAPH
+0x8AD3 0x9451 #CJK UNIFIED IDEOGRAPH
+0x8AD4 0x9593 #CJK UNIFIED IDEOGRAPH
+0x8AD5 0x9591 #CJK UNIFIED IDEOGRAPH
+0x8AD6 0x95A2 #CJK UNIFIED IDEOGRAPH
+0x8AD7 0x9665 #CJK UNIFIED IDEOGRAPH
+0x8AD8 0x97D3 #CJK UNIFIED IDEOGRAPH
+0x8AD9 0x9928 #CJK UNIFIED IDEOGRAPH
+0x8ADA 0x8218 #CJK UNIFIED IDEOGRAPH
+0x8ADB 0x4E38 #CJK UNIFIED IDEOGRAPH
+0x8ADC 0x542B #CJK UNIFIED IDEOGRAPH
+0x8ADD 0x5CB8 #CJK UNIFIED IDEOGRAPH
+0x8ADE 0x5DCC #CJK UNIFIED IDEOGRAPH
+0x8ADF 0x73A9 #CJK UNIFIED IDEOGRAPH
+0x8AE0 0x764C #CJK UNIFIED IDEOGRAPH
+0x8AE1 0x773C #CJK UNIFIED IDEOGRAPH
+0x8AE2 0x5CA9 #CJK UNIFIED IDEOGRAPH
+0x8AE3 0x7FEB #CJK UNIFIED IDEOGRAPH
+0x8AE4 0x8D0B #CJK UNIFIED IDEOGRAPH
+0x8AE5 0x96C1 #CJK UNIFIED IDEOGRAPH
+0x8AE6 0x9811 #CJK UNIFIED IDEOGRAPH
+0x8AE7 0x9854 #CJK UNIFIED IDEOGRAPH
+0x8AE8 0x9858 #CJK UNIFIED IDEOGRAPH
+0x8AE9 0x4F01 #CJK UNIFIED IDEOGRAPH
+0x8AEA 0x4F0E #CJK UNIFIED IDEOGRAPH
+0x8AEB 0x5371 #CJK UNIFIED IDEOGRAPH
+0x8AEC 0x559C #CJK UNIFIED IDEOGRAPH
+0x8AED 0x5668 #CJK UNIFIED IDEOGRAPH
+0x8AEE 0x57FA #CJK UNIFIED IDEOGRAPH
+0x8AEF 0x5947 #CJK UNIFIED IDEOGRAPH
+0x8AF0 0x5B09 #CJK UNIFIED IDEOGRAPH
+0x8AF1 0x5BC4 #CJK UNIFIED IDEOGRAPH
+0x8AF2 0x5C90 #CJK UNIFIED IDEOGRAPH
+0x8AF3 0x5E0C #CJK UNIFIED IDEOGRAPH
+0x8AF4 0x5E7E #CJK UNIFIED IDEOGRAPH
+0x8AF5 0x5FCC #CJK UNIFIED IDEOGRAPH
+0x8AF6 0x63EE #CJK UNIFIED IDEOGRAPH
+0x8AF7 0x673A #CJK UNIFIED IDEOGRAPH
+0x8AF8 0x65D7 #CJK UNIFIED IDEOGRAPH
+0x8AF9 0x65E2 #CJK UNIFIED IDEOGRAPH
+0x8AFA 0x671F #CJK UNIFIED IDEOGRAPH
+0x8AFB 0x68CB #CJK UNIFIED IDEOGRAPH
+0x8AFC 0x68C4 #CJK UNIFIED IDEOGRAPH
+0x8B40 0x6A5F #CJK UNIFIED IDEOGRAPH
+0x8B41 0x5E30 #CJK UNIFIED IDEOGRAPH
+0x8B42 0x6BC5 #CJK UNIFIED IDEOGRAPH
+0x8B43 0x6C17 #CJK UNIFIED IDEOGRAPH
+0x8B44 0x6C7D #CJK UNIFIED IDEOGRAPH
+0x8B45 0x757F #CJK UNIFIED IDEOGRAPH
+0x8B46 0x7948 #CJK UNIFIED IDEOGRAPH
+0x8B47 0x5B63 #CJK UNIFIED IDEOGRAPH
+0x8B48 0x7A00 #CJK UNIFIED IDEOGRAPH
+0x8B49 0x7D00 #CJK UNIFIED IDEOGRAPH
+0x8B4A 0x5FBD #CJK UNIFIED IDEOGRAPH
+0x8B4B 0x898F #CJK UNIFIED IDEOGRAPH
+0x8B4C 0x8A18 #CJK UNIFIED IDEOGRAPH
+0x8B4D 0x8CB4 #CJK UNIFIED IDEOGRAPH
+0x8B4E 0x8D77 #CJK UNIFIED IDEOGRAPH
+0x8B4F 0x8ECC #CJK UNIFIED IDEOGRAPH
+0x8B50 0x8F1D #CJK UNIFIED IDEOGRAPH
+0x8B51 0x98E2 #CJK UNIFIED IDEOGRAPH
+0x8B52 0x9A0E #CJK UNIFIED IDEOGRAPH
+0x8B53 0x9B3C #CJK UNIFIED IDEOGRAPH
+0x8B54 0x4E80 #CJK UNIFIED IDEOGRAPH
+0x8B55 0x507D #CJK UNIFIED IDEOGRAPH
+0x8B56 0x5100 #CJK UNIFIED IDEOGRAPH
+0x8B57 0x5993 #CJK UNIFIED IDEOGRAPH
+0x8B58 0x5B9C #CJK UNIFIED IDEOGRAPH
+0x8B59 0x622F #CJK UNIFIED IDEOGRAPH
+0x8B5A 0x6280 #CJK UNIFIED IDEOGRAPH
+0x8B5B 0x64EC #CJK UNIFIED IDEOGRAPH
+0x8B5C 0x6B3A #CJK UNIFIED IDEOGRAPH
+0x8B5D 0x72A0 #CJK UNIFIED IDEOGRAPH
+0x8B5E 0x7591 #CJK UNIFIED IDEOGRAPH
+0x8B5F 0x7947 #CJK UNIFIED IDEOGRAPH
+0x8B60 0x7FA9 #CJK UNIFIED IDEOGRAPH
+0x8B61 0x87FB #CJK UNIFIED IDEOGRAPH
+0x8B62 0x8ABC #CJK UNIFIED IDEOGRAPH
+0x8B63 0x8B70 #CJK UNIFIED IDEOGRAPH
+0x8B64 0x63AC #CJK UNIFIED IDEOGRAPH
+0x8B65 0x83CA #CJK UNIFIED IDEOGRAPH
+0x8B66 0x97A0 #CJK UNIFIED IDEOGRAPH
+0x8B67 0x5409 #CJK UNIFIED IDEOGRAPH
+0x8B68 0x5403 #CJK UNIFIED IDEOGRAPH
+0x8B69 0x55AB #CJK UNIFIED IDEOGRAPH
+0x8B6A 0x6854 #CJK UNIFIED IDEOGRAPH
+0x8B6B 0x6A58 #CJK UNIFIED IDEOGRAPH
+0x8B6C 0x8A70 #CJK UNIFIED IDEOGRAPH
+0x8B6D 0x7827 #CJK UNIFIED IDEOGRAPH
+0x8B6E 0x6775 #CJK UNIFIED IDEOGRAPH
+0x8B6F 0x9ECD #CJK UNIFIED IDEOGRAPH
+0x8B70 0x5374 #CJK UNIFIED IDEOGRAPH
+0x8B71 0x5BA2 #CJK UNIFIED IDEOGRAPH
+0x8B72 0x811A #CJK UNIFIED IDEOGRAPH
+0x8B73 0x8650 #CJK UNIFIED IDEOGRAPH
+0x8B74 0x9006 #CJK UNIFIED IDEOGRAPH
+0x8B75 0x4E18 #CJK UNIFIED IDEOGRAPH
+0x8B76 0x4E45 #CJK UNIFIED IDEOGRAPH
+0x8B77 0x4EC7 #CJK UNIFIED IDEOGRAPH
+0x8B78 0x4F11 #CJK UNIFIED IDEOGRAPH
+0x8B79 0x53CA #CJK UNIFIED IDEOGRAPH
+0x8B7A 0x5438 #CJK UNIFIED IDEOGRAPH
+0x8B7B 0x5BAE #CJK UNIFIED IDEOGRAPH
+0x8B7C 0x5F13 #CJK UNIFIED IDEOGRAPH
+0x8B7D 0x6025 #CJK UNIFIED IDEOGRAPH
+0x8B7E 0x6551 #CJK UNIFIED IDEOGRAPH
+0x8B80 0x673D #CJK UNIFIED IDEOGRAPH
+0x8B81 0x6C42 #CJK UNIFIED IDEOGRAPH
+0x8B82 0x6C72 #CJK UNIFIED IDEOGRAPH
+0x8B83 0x6CE3 #CJK UNIFIED IDEOGRAPH
+0x8B84 0x7078 #CJK UNIFIED IDEOGRAPH
+0x8B85 0x7403 #CJK UNIFIED IDEOGRAPH
+0x8B86 0x7A76 #CJK UNIFIED IDEOGRAPH
+0x8B87 0x7AAE #CJK UNIFIED IDEOGRAPH
+0x8B88 0x7B08 #CJK UNIFIED IDEOGRAPH
+0x8B89 0x7D1A #CJK UNIFIED IDEOGRAPH
+0x8B8A 0x7CFE #CJK UNIFIED IDEOGRAPH
+0x8B8B 0x7D66 #CJK UNIFIED IDEOGRAPH
+0x8B8C 0x65E7 #CJK UNIFIED IDEOGRAPH
+0x8B8D 0x725B #CJK UNIFIED IDEOGRAPH
+0x8B8E 0x53BB #CJK UNIFIED IDEOGRAPH
+0x8B8F 0x5C45 #CJK UNIFIED IDEOGRAPH
+0x8B90 0x5DE8 #CJK UNIFIED IDEOGRAPH
+0x8B91 0x62D2 #CJK UNIFIED IDEOGRAPH
+0x8B92 0x62E0 #CJK UNIFIED IDEOGRAPH
+0x8B93 0x6319 #CJK UNIFIED IDEOGRAPH
+0x8B94 0x6E20 #CJK UNIFIED IDEOGRAPH
+0x8B95 0x865A #CJK UNIFIED IDEOGRAPH
+0x8B96 0x8A31 #CJK UNIFIED IDEOGRAPH
+0x8B97 0x8DDD #CJK UNIFIED IDEOGRAPH
+0x8B98 0x92F8 #CJK UNIFIED IDEOGRAPH
+0x8B99 0x6F01 #CJK UNIFIED IDEOGRAPH
+0x8B9A 0x79A6 #CJK UNIFIED IDEOGRAPH
+0x8B9B 0x9B5A #CJK UNIFIED IDEOGRAPH
+0x8B9C 0x4EA8 #CJK UNIFIED IDEOGRAPH
+0x8B9D 0x4EAB #CJK UNIFIED IDEOGRAPH
+0x8B9E 0x4EAC #CJK UNIFIED IDEOGRAPH
+0x8B9F 0x4F9B #CJK UNIFIED IDEOGRAPH
+0x8BA0 0x4FA0 #CJK UNIFIED IDEOGRAPH
+0x8BA1 0x50D1 #CJK UNIFIED IDEOGRAPH
+0x8BA2 0x5147 #CJK UNIFIED IDEOGRAPH
+0x8BA3 0x7AF6 #CJK UNIFIED IDEOGRAPH
+0x8BA4 0x5171 #CJK UNIFIED IDEOGRAPH
+0x8BA5 0x51F6 #CJK UNIFIED IDEOGRAPH
+0x8BA6 0x5354 #CJK UNIFIED IDEOGRAPH
+0x8BA7 0x5321 #CJK UNIFIED IDEOGRAPH
+0x8BA8 0x537F #CJK UNIFIED IDEOGRAPH
+0x8BA9 0x53EB #CJK UNIFIED IDEOGRAPH
+0x8BAA 0x55AC #CJK UNIFIED IDEOGRAPH
+0x8BAB 0x5883 #CJK UNIFIED IDEOGRAPH
+0x8BAC 0x5CE1 #CJK UNIFIED IDEOGRAPH
+0x8BAD 0x5F37 #CJK UNIFIED IDEOGRAPH
+0x8BAE 0x5F4A #CJK UNIFIED IDEOGRAPH
+0x8BAF 0x602F #CJK UNIFIED IDEOGRAPH
+0x8BB0 0x6050 #CJK UNIFIED IDEOGRAPH
+0x8BB1 0x606D #CJK UNIFIED IDEOGRAPH
+0x8BB2 0x631F #CJK UNIFIED IDEOGRAPH
+0x8BB3 0x6559 #CJK UNIFIED IDEOGRAPH
+0x8BB4 0x6A4B #CJK UNIFIED IDEOGRAPH
+0x8BB5 0x6CC1 #CJK UNIFIED IDEOGRAPH
+0x8BB6 0x72C2 #CJK UNIFIED IDEOGRAPH
+0x8BB7 0x72ED #CJK UNIFIED IDEOGRAPH
+0x8BB8 0x77EF #CJK UNIFIED IDEOGRAPH
+0x8BB9 0x80F8 #CJK UNIFIED IDEOGRAPH
+0x8BBA 0x8105 #CJK UNIFIED IDEOGRAPH
+0x8BBB 0x8208 #CJK UNIFIED IDEOGRAPH
+0x8BBC 0x854E #CJK UNIFIED IDEOGRAPH
+0x8BBD 0x90F7 #CJK UNIFIED IDEOGRAPH
+0x8BBE 0x93E1 #CJK UNIFIED IDEOGRAPH
+0x8BBF 0x97FF #CJK UNIFIED IDEOGRAPH
+0x8BC0 0x9957 #CJK UNIFIED IDEOGRAPH
+0x8BC1 0x9A5A #CJK UNIFIED IDEOGRAPH
+0x8BC2 0x4EF0 #CJK UNIFIED IDEOGRAPH
+0x8BC3 0x51DD #CJK UNIFIED IDEOGRAPH
+0x8BC4 0x5C2D #CJK UNIFIED IDEOGRAPH
+0x8BC5 0x6681 #CJK UNIFIED IDEOGRAPH
+0x8BC6 0x696D #CJK UNIFIED IDEOGRAPH
+0x8BC7 0x5C40 #CJK UNIFIED IDEOGRAPH
+0x8BC8 0x66F2 #CJK UNIFIED IDEOGRAPH
+0x8BC9 0x6975 #CJK UNIFIED IDEOGRAPH
+0x8BCA 0x7389 #CJK UNIFIED IDEOGRAPH
+0x8BCB 0x6850 #CJK UNIFIED IDEOGRAPH
+0x8BCC 0x7C81 #CJK UNIFIED IDEOGRAPH
+0x8BCD 0x50C5 #CJK UNIFIED IDEOGRAPH
+0x8BCE 0x52E4 #CJK UNIFIED IDEOGRAPH
+0x8BCF 0x5747 #CJK UNIFIED IDEOGRAPH
+0x8BD0 0x5DFE #CJK UNIFIED IDEOGRAPH
+0x8BD1 0x9326 #CJK UNIFIED IDEOGRAPH
+0x8BD2 0x65A4 #CJK UNIFIED IDEOGRAPH
+0x8BD3 0x6B23 #CJK UNIFIED IDEOGRAPH
+0x8BD4 0x6B3D #CJK UNIFIED IDEOGRAPH
+0x8BD5 0x7434 #CJK UNIFIED IDEOGRAPH
+0x8BD6 0x7981 #CJK UNIFIED IDEOGRAPH
+0x8BD7 0x79BD #CJK UNIFIED IDEOGRAPH
+0x8BD8 0x7B4B #CJK UNIFIED IDEOGRAPH
+0x8BD9 0x7DCA #CJK UNIFIED IDEOGRAPH
+0x8BDA 0x82B9 #CJK UNIFIED IDEOGRAPH
+0x8BDB 0x83CC #CJK UNIFIED IDEOGRAPH
+0x8BDC 0x887F #CJK UNIFIED IDEOGRAPH
+0x8BDD 0x895F #CJK UNIFIED IDEOGRAPH
+0x8BDE 0x8B39 #CJK UNIFIED IDEOGRAPH
+0x8BDF 0x8FD1 #CJK UNIFIED IDEOGRAPH
+0x8BE0 0x91D1 #CJK UNIFIED IDEOGRAPH
+0x8BE1 0x541F #CJK UNIFIED IDEOGRAPH
+0x8BE2 0x9280 #CJK UNIFIED IDEOGRAPH
+0x8BE3 0x4E5D #CJK UNIFIED IDEOGRAPH
+0x8BE4 0x5036 #CJK UNIFIED IDEOGRAPH
+0x8BE5 0x53E5 #CJK UNIFIED IDEOGRAPH
+0x8BE6 0x533A #CJK UNIFIED IDEOGRAPH
+0x8BE7 0x72D7 #CJK UNIFIED IDEOGRAPH
+0x8BE8 0x7396 #CJK UNIFIED IDEOGRAPH
+0x8BE9 0x77E9 #CJK UNIFIED IDEOGRAPH
+0x8BEA 0x82E6 #CJK UNIFIED IDEOGRAPH
+0x8BEB 0x8EAF #CJK UNIFIED IDEOGRAPH
+0x8BEC 0x99C6 #CJK UNIFIED IDEOGRAPH
+0x8BED 0x99C8 #CJK UNIFIED IDEOGRAPH
+0x8BEE 0x99D2 #CJK UNIFIED IDEOGRAPH
+0x8BEF 0x5177 #CJK UNIFIED IDEOGRAPH
+0x8BF0 0x611A #CJK UNIFIED IDEOGRAPH
+0x8BF1 0x865E #CJK UNIFIED IDEOGRAPH
+0x8BF2 0x55B0 #CJK UNIFIED IDEOGRAPH
+0x8BF3 0x7A7A #CJK UNIFIED IDEOGRAPH
+0x8BF4 0x5076 #CJK UNIFIED IDEOGRAPH
+0x8BF5 0x5BD3 #CJK UNIFIED IDEOGRAPH
+0x8BF6 0x9047 #CJK UNIFIED IDEOGRAPH
+0x8BF7 0x9685 #CJK UNIFIED IDEOGRAPH
+0x8BF8 0x4E32 #CJK UNIFIED IDEOGRAPH
+0x8BF9 0x6ADB #CJK UNIFIED IDEOGRAPH
+0x8BFA 0x91E7 #CJK UNIFIED IDEOGRAPH
+0x8BFB 0x5C51 #CJK UNIFIED IDEOGRAPH
+0x8BFC 0x5C48 #CJK UNIFIED IDEOGRAPH
+0x8C40 0x6398 #CJK UNIFIED IDEOGRAPH
+0x8C41 0x7A9F #CJK UNIFIED IDEOGRAPH
+0x8C42 0x6C93 #CJK UNIFIED IDEOGRAPH
+0x8C43 0x9774 #CJK UNIFIED IDEOGRAPH
+0x8C44 0x8F61 #CJK UNIFIED IDEOGRAPH
+0x8C45 0x7AAA #CJK UNIFIED IDEOGRAPH
+0x8C46 0x718A #CJK UNIFIED IDEOGRAPH
+0x8C47 0x9688 #CJK UNIFIED IDEOGRAPH
+0x8C48 0x7C82 #CJK UNIFIED IDEOGRAPH
+0x8C49 0x6817 #CJK UNIFIED IDEOGRAPH
+0x8C4A 0x7E70 #CJK UNIFIED IDEOGRAPH
+0x8C4B 0x6851 #CJK UNIFIED IDEOGRAPH
+0x8C4C 0x936C #CJK UNIFIED IDEOGRAPH
+0x8C4D 0x52F2 #CJK UNIFIED IDEOGRAPH
+0x8C4E 0x541B #CJK UNIFIED IDEOGRAPH
+0x8C4F 0x85AB #CJK UNIFIED IDEOGRAPH
+0x8C50 0x8A13 #CJK UNIFIED IDEOGRAPH
+0x8C51 0x7FA4 #CJK UNIFIED IDEOGRAPH
+0x8C52 0x8ECD #CJK UNIFIED IDEOGRAPH
+0x8C53 0x90E1 #CJK UNIFIED IDEOGRAPH
+0x8C54 0x5366 #CJK UNIFIED IDEOGRAPH
+0x8C55 0x8888 #CJK UNIFIED IDEOGRAPH
+0x8C56 0x7941 #CJK UNIFIED IDEOGRAPH
+0x8C57 0x4FC2 #CJK UNIFIED IDEOGRAPH
+0x8C58 0x50BE #CJK UNIFIED IDEOGRAPH
+0x8C59 0x5211 #CJK UNIFIED IDEOGRAPH
+0x8C5A 0x5144 #CJK UNIFIED IDEOGRAPH
+0x8C5B 0x5553 #CJK UNIFIED IDEOGRAPH
+0x8C5C 0x572D #CJK UNIFIED IDEOGRAPH
+0x8C5D 0x73EA #CJK UNIFIED IDEOGRAPH
+0x8C5E 0x578B #CJK UNIFIED IDEOGRAPH
+0x8C5F 0x5951 #CJK UNIFIED IDEOGRAPH
+0x8C60 0x5F62 #CJK UNIFIED IDEOGRAPH
+0x8C61 0x5F84 #CJK UNIFIED IDEOGRAPH
+0x8C62 0x6075 #CJK UNIFIED IDEOGRAPH
+0x8C63 0x6176 #CJK UNIFIED IDEOGRAPH
+0x8C64 0x6167 #CJK UNIFIED IDEOGRAPH
+0x8C65 0x61A9 #CJK UNIFIED IDEOGRAPH
+0x8C66 0x63B2 #CJK UNIFIED IDEOGRAPH
+0x8C67 0x643A #CJK UNIFIED IDEOGRAPH
+0x8C68 0x656C #CJK UNIFIED IDEOGRAPH
+0x8C69 0x666F #CJK UNIFIED IDEOGRAPH
+0x8C6A 0x6842 #CJK UNIFIED IDEOGRAPH
+0x8C6B 0x6E13 #CJK UNIFIED IDEOGRAPH
+0x8C6C 0x7566 #CJK UNIFIED IDEOGRAPH
+0x8C6D 0x7A3D #CJK UNIFIED IDEOGRAPH
+0x8C6E 0x7CFB #CJK UNIFIED IDEOGRAPH
+0x8C6F 0x7D4C #CJK UNIFIED IDEOGRAPH
+0x8C70 0x7D99 #CJK UNIFIED IDEOGRAPH
+0x8C71 0x7E4B #CJK UNIFIED IDEOGRAPH
+0x8C72 0x7F6B #CJK UNIFIED IDEOGRAPH
+0x8C73 0x830E #CJK UNIFIED IDEOGRAPH
+0x8C74 0x834A #CJK UNIFIED IDEOGRAPH
+0x8C75 0x86CD #CJK UNIFIED IDEOGRAPH
+0x8C76 0x8A08 #CJK UNIFIED IDEOGRAPH
+0x8C77 0x8A63 #CJK UNIFIED IDEOGRAPH
+0x8C78 0x8B66 #CJK UNIFIED IDEOGRAPH
+0x8C79 0x8EFD #CJK UNIFIED IDEOGRAPH
+0x8C7A 0x981A #CJK UNIFIED IDEOGRAPH
+0x8C7B 0x9D8F #CJK UNIFIED IDEOGRAPH
+0x8C7C 0x82B8 #CJK UNIFIED IDEOGRAPH
+0x8C7D 0x8FCE #CJK UNIFIED IDEOGRAPH
+0x8C7E 0x9BE8 #CJK UNIFIED IDEOGRAPH
+0x8C80 0x5287 #CJK UNIFIED IDEOGRAPH
+0x8C81 0x621F #CJK UNIFIED IDEOGRAPH
+0x8C82 0x6483 #CJK UNIFIED IDEOGRAPH
+0x8C83 0x6FC0 #CJK UNIFIED IDEOGRAPH
+0x8C84 0x9699 #CJK UNIFIED IDEOGRAPH
+0x8C85 0x6841 #CJK UNIFIED IDEOGRAPH
+0x8C86 0x5091 #CJK UNIFIED IDEOGRAPH
+0x8C87 0x6B20 #CJK UNIFIED IDEOGRAPH
+0x8C88 0x6C7A #CJK UNIFIED IDEOGRAPH
+0x8C89 0x6F54 #CJK UNIFIED IDEOGRAPH
+0x8C8A 0x7A74 #CJK UNIFIED IDEOGRAPH
+0x8C8B 0x7D50 #CJK UNIFIED IDEOGRAPH
+0x8C8C 0x8840 #CJK UNIFIED IDEOGRAPH
+0x8C8D 0x8A23 #CJK UNIFIED IDEOGRAPH
+0x8C8E 0x6708 #CJK UNIFIED IDEOGRAPH
+0x8C8F 0x4EF6 #CJK UNIFIED IDEOGRAPH
+0x8C90 0x5039 #CJK UNIFIED IDEOGRAPH
+0x8C91 0x5026 #CJK UNIFIED IDEOGRAPH
+0x8C92 0x5065 #CJK UNIFIED IDEOGRAPH
+0x8C93 0x517C #CJK UNIFIED IDEOGRAPH
+0x8C94 0x5238 #CJK UNIFIED IDEOGRAPH
+0x8C95 0x5263 #CJK UNIFIED IDEOGRAPH
+0x8C96 0x55A7 #CJK UNIFIED IDEOGRAPH
+0x8C97 0x570F #CJK UNIFIED IDEOGRAPH
+0x8C98 0x5805 #CJK UNIFIED IDEOGRAPH
+0x8C99 0x5ACC #CJK UNIFIED IDEOGRAPH
+0x8C9A 0x5EFA #CJK UNIFIED IDEOGRAPH
+0x8C9B 0x61B2 #CJK UNIFIED IDEOGRAPH
+0x8C9C 0x61F8 #CJK UNIFIED IDEOGRAPH
+0x8C9D 0x62F3 #CJK UNIFIED IDEOGRAPH
+0x8C9E 0x6372 #CJK UNIFIED IDEOGRAPH
+0x8C9F 0x691C #CJK UNIFIED IDEOGRAPH
+0x8CA0 0x6A29 #CJK UNIFIED IDEOGRAPH
+0x8CA1 0x727D #CJK UNIFIED IDEOGRAPH
+0x8CA2 0x72AC #CJK UNIFIED IDEOGRAPH
+0x8CA3 0x732E #CJK UNIFIED IDEOGRAPH
+0x8CA4 0x7814 #CJK UNIFIED IDEOGRAPH
+0x8CA5 0x786F #CJK UNIFIED IDEOGRAPH
+0x8CA6 0x7D79 #CJK UNIFIED IDEOGRAPH
+0x8CA7 0x770C #CJK UNIFIED IDEOGRAPH
+0x8CA8 0x80A9 #CJK UNIFIED IDEOGRAPH
+0x8CA9 0x898B #CJK UNIFIED IDEOGRAPH
+0x8CAA 0x8B19 #CJK UNIFIED IDEOGRAPH
+0x8CAB 0x8CE2 #CJK UNIFIED IDEOGRAPH
+0x8CAC 0x8ED2 #CJK UNIFIED IDEOGRAPH
+0x8CAD 0x9063 #CJK UNIFIED IDEOGRAPH
+0x8CAE 0x9375 #CJK UNIFIED IDEOGRAPH
+0x8CAF 0x967A #CJK UNIFIED IDEOGRAPH
+0x8CB0 0x9855 #CJK UNIFIED IDEOGRAPH
+0x8CB1 0x9A13 #CJK UNIFIED IDEOGRAPH
+0x8CB2 0x9E78 #CJK UNIFIED IDEOGRAPH
+0x8CB3 0x5143 #CJK UNIFIED IDEOGRAPH
+0x8CB4 0x539F #CJK UNIFIED IDEOGRAPH
+0x8CB5 0x53B3 #CJK UNIFIED IDEOGRAPH
+0x8CB6 0x5E7B #CJK UNIFIED IDEOGRAPH
+0x8CB7 0x5F26 #CJK UNIFIED IDEOGRAPH
+0x8CB8 0x6E1B #CJK UNIFIED IDEOGRAPH
+0x8CB9 0x6E90 #CJK UNIFIED IDEOGRAPH
+0x8CBA 0x7384 #CJK UNIFIED IDEOGRAPH
+0x8CBB 0x73FE #CJK UNIFIED IDEOGRAPH
+0x8CBC 0x7D43 #CJK UNIFIED IDEOGRAPH
+0x8CBD 0x8237 #CJK UNIFIED IDEOGRAPH
+0x8CBE 0x8A00 #CJK UNIFIED IDEOGRAPH
+0x8CBF 0x8AFA #CJK UNIFIED IDEOGRAPH
+0x8CC0 0x9650 #CJK UNIFIED IDEOGRAPH
+0x8CC1 0x4E4E #CJK UNIFIED IDEOGRAPH
+0x8CC2 0x500B #CJK UNIFIED IDEOGRAPH
+0x8CC3 0x53E4 #CJK UNIFIED IDEOGRAPH
+0x8CC4 0x547C #CJK UNIFIED IDEOGRAPH
+0x8CC5 0x56FA #CJK UNIFIED IDEOGRAPH
+0x8CC6 0x59D1 #CJK UNIFIED IDEOGRAPH
+0x8CC7 0x5B64 #CJK UNIFIED IDEOGRAPH
+0x8CC8 0x5DF1 #CJK UNIFIED IDEOGRAPH
+0x8CC9 0x5EAB #CJK UNIFIED IDEOGRAPH
+0x8CCA 0x5F27 #CJK UNIFIED IDEOGRAPH
+0x8CCB 0x6238 #CJK UNIFIED IDEOGRAPH
+0x8CCC 0x6545 #CJK UNIFIED IDEOGRAPH
+0x8CCD 0x67AF #CJK UNIFIED IDEOGRAPH
+0x8CCE 0x6E56 #CJK UNIFIED IDEOGRAPH
+0x8CCF 0x72D0 #CJK UNIFIED IDEOGRAPH
+0x8CD0 0x7CCA #CJK UNIFIED IDEOGRAPH
+0x8CD1 0x88B4 #CJK UNIFIED IDEOGRAPH
+0x8CD2 0x80A1 #CJK UNIFIED IDEOGRAPH
+0x8CD3 0x80E1 #CJK UNIFIED IDEOGRAPH
+0x8CD4 0x83F0 #CJK UNIFIED IDEOGRAPH
+0x8CD5 0x864E #CJK UNIFIED IDEOGRAPH
+0x8CD6 0x8A87 #CJK UNIFIED IDEOGRAPH
+0x8CD7 0x8DE8 #CJK UNIFIED IDEOGRAPH
+0x8CD8 0x9237 #CJK UNIFIED IDEOGRAPH
+0x8CD9 0x96C7 #CJK UNIFIED IDEOGRAPH
+0x8CDA 0x9867 #CJK UNIFIED IDEOGRAPH
+0x8CDB 0x9F13 #CJK UNIFIED IDEOGRAPH
+0x8CDC 0x4E94 #CJK UNIFIED IDEOGRAPH
+0x8CDD 0x4E92 #CJK UNIFIED IDEOGRAPH
+0x8CDE 0x4F0D #CJK UNIFIED IDEOGRAPH
+0x8CDF 0x5348 #CJK UNIFIED IDEOGRAPH
+0x8CE0 0x5449 #CJK UNIFIED IDEOGRAPH
+0x8CE1 0x543E #CJK UNIFIED IDEOGRAPH
+0x8CE2 0x5A2F #CJK UNIFIED IDEOGRAPH
+0x8CE3 0x5F8C #CJK UNIFIED IDEOGRAPH
+0x8CE4 0x5FA1 #CJK UNIFIED IDEOGRAPH
+0x8CE5 0x609F #CJK UNIFIED IDEOGRAPH
+0x8CE6 0x68A7 #CJK UNIFIED IDEOGRAPH
+0x8CE7 0x6A8E #CJK UNIFIED IDEOGRAPH
+0x8CE8 0x745A #CJK UNIFIED IDEOGRAPH
+0x8CE9 0x7881 #CJK UNIFIED IDEOGRAPH
+0x8CEA 0x8A9E #CJK UNIFIED IDEOGRAPH
+0x8CEB 0x8AA4 #CJK UNIFIED IDEOGRAPH
+0x8CEC 0x8B77 #CJK UNIFIED IDEOGRAPH
+0x8CED 0x9190 #CJK UNIFIED IDEOGRAPH
+0x8CEE 0x4E5E #CJK UNIFIED IDEOGRAPH
+0x8CEF 0x9BC9 #CJK UNIFIED IDEOGRAPH
+0x8CF0 0x4EA4 #CJK UNIFIED IDEOGRAPH
+0x8CF1 0x4F7C #CJK UNIFIED IDEOGRAPH
+0x8CF2 0x4FAF #CJK UNIFIED IDEOGRAPH
+0x8CF3 0x5019 #CJK UNIFIED IDEOGRAPH
+0x8CF4 0x5016 #CJK UNIFIED IDEOGRAPH
+0x8CF5 0x5149 #CJK UNIFIED IDEOGRAPH
+0x8CF6 0x516C #CJK UNIFIED IDEOGRAPH
+0x8CF7 0x529F #CJK UNIFIED IDEOGRAPH
+0x8CF8 0x52B9 #CJK UNIFIED IDEOGRAPH
+0x8CF9 0x52FE #CJK UNIFIED IDEOGRAPH
+0x8CFA 0x539A #CJK UNIFIED IDEOGRAPH
+0x8CFB 0x53E3 #CJK UNIFIED IDEOGRAPH
+0x8CFC 0x5411 #CJK UNIFIED IDEOGRAPH
+0x8D40 0x540E #CJK UNIFIED IDEOGRAPH
+0x8D41 0x5589 #CJK UNIFIED IDEOGRAPH
+0x8D42 0x5751 #CJK UNIFIED IDEOGRAPH
+0x8D43 0x57A2 #CJK UNIFIED IDEOGRAPH
+0x8D44 0x597D #CJK UNIFIED IDEOGRAPH
+0x8D45 0x5B54 #CJK UNIFIED IDEOGRAPH
+0x8D46 0x5B5D #CJK UNIFIED IDEOGRAPH
+0x8D47 0x5B8F #CJK UNIFIED IDEOGRAPH
+0x8D48 0x5DE5 #CJK UNIFIED IDEOGRAPH
+0x8D49 0x5DE7 #CJK UNIFIED IDEOGRAPH
+0x8D4A 0x5DF7 #CJK UNIFIED IDEOGRAPH
+0x8D4B 0x5E78 #CJK UNIFIED IDEOGRAPH
+0x8D4C 0x5E83 #CJK UNIFIED IDEOGRAPH
+0x8D4D 0x5E9A #CJK UNIFIED IDEOGRAPH
+0x8D4E 0x5EB7 #CJK UNIFIED IDEOGRAPH
+0x8D4F 0x5F18 #CJK UNIFIED IDEOGRAPH
+0x8D50 0x6052 #CJK UNIFIED IDEOGRAPH
+0x8D51 0x614C #CJK UNIFIED IDEOGRAPH
+0x8D52 0x6297 #CJK UNIFIED IDEOGRAPH
+0x8D53 0x62D8 #CJK UNIFIED IDEOGRAPH
+0x8D54 0x63A7 #CJK UNIFIED IDEOGRAPH
+0x8D55 0x653B #CJK UNIFIED IDEOGRAPH
+0x8D56 0x6602 #CJK UNIFIED IDEOGRAPH
+0x8D57 0x6643 #CJK UNIFIED IDEOGRAPH
+0x8D58 0x66F4 #CJK UNIFIED IDEOGRAPH
+0x8D59 0x676D #CJK UNIFIED IDEOGRAPH
+0x8D5A 0x6821 #CJK UNIFIED IDEOGRAPH
+0x8D5B 0x6897 #CJK UNIFIED IDEOGRAPH
+0x8D5C 0x69CB #CJK UNIFIED IDEOGRAPH
+0x8D5D 0x6C5F #CJK UNIFIED IDEOGRAPH
+0x8D5E 0x6D2A #CJK UNIFIED IDEOGRAPH
+0x8D5F 0x6D69 #CJK UNIFIED IDEOGRAPH
+0x8D60 0x6E2F #CJK UNIFIED IDEOGRAPH
+0x8D61 0x6E9D #CJK UNIFIED IDEOGRAPH
+0x8D62 0x7532 #CJK UNIFIED IDEOGRAPH
+0x8D63 0x7687 #CJK UNIFIED IDEOGRAPH
+0x8D64 0x786C #CJK UNIFIED IDEOGRAPH
+0x8D65 0x7A3F #CJK UNIFIED IDEOGRAPH
+0x8D66 0x7CE0 #CJK UNIFIED IDEOGRAPH
+0x8D67 0x7D05 #CJK UNIFIED IDEOGRAPH
+0x8D68 0x7D18 #CJK UNIFIED IDEOGRAPH
+0x8D69 0x7D5E #CJK UNIFIED IDEOGRAPH
+0x8D6A 0x7DB1 #CJK UNIFIED IDEOGRAPH
+0x8D6B 0x8015 #CJK UNIFIED IDEOGRAPH
+0x8D6C 0x8003 #CJK UNIFIED IDEOGRAPH
+0x8D6D 0x80AF #CJK UNIFIED IDEOGRAPH
+0x8D6E 0x80B1 #CJK UNIFIED IDEOGRAPH
+0x8D6F 0x8154 #CJK UNIFIED IDEOGRAPH
+0x8D70 0x818F #CJK UNIFIED IDEOGRAPH
+0x8D71 0x822A #CJK UNIFIED IDEOGRAPH
+0x8D72 0x8352 #CJK UNIFIED IDEOGRAPH
+0x8D73 0x884C #CJK UNIFIED IDEOGRAPH
+0x8D74 0x8861 #CJK UNIFIED IDEOGRAPH
+0x8D75 0x8B1B #CJK UNIFIED IDEOGRAPH
+0x8D76 0x8CA2 #CJK UNIFIED IDEOGRAPH
+0x8D77 0x8CFC #CJK UNIFIED IDEOGRAPH
+0x8D78 0x90CA #CJK UNIFIED IDEOGRAPH
+0x8D79 0x9175 #CJK UNIFIED IDEOGRAPH
+0x8D7A 0x9271 #CJK UNIFIED IDEOGRAPH
+0x8D7B 0x783F #CJK UNIFIED IDEOGRAPH
+0x8D7C 0x92FC #CJK UNIFIED IDEOGRAPH
+0x8D7D 0x95A4 #CJK UNIFIED IDEOGRAPH
+0x8D7E 0x964D #CJK UNIFIED IDEOGRAPH
+0x8D80 0x9805 #CJK UNIFIED IDEOGRAPH
+0x8D81 0x9999 #CJK UNIFIED IDEOGRAPH
+0x8D82 0x9AD8 #CJK UNIFIED IDEOGRAPH
+0x8D83 0x9D3B #CJK UNIFIED IDEOGRAPH
+0x8D84 0x525B #CJK UNIFIED IDEOGRAPH
+0x8D85 0x52AB #CJK UNIFIED IDEOGRAPH
+0x8D86 0x53F7 #CJK UNIFIED IDEOGRAPH
+0x8D87 0x5408 #CJK UNIFIED IDEOGRAPH
+0x8D88 0x58D5 #CJK UNIFIED IDEOGRAPH
+0x8D89 0x62F7 #CJK UNIFIED IDEOGRAPH
+0x8D8A 0x6FE0 #CJK UNIFIED IDEOGRAPH
+0x8D8B 0x8C6A #CJK UNIFIED IDEOGRAPH
+0x8D8C 0x8F5F #CJK UNIFIED IDEOGRAPH
+0x8D8D 0x9EB9 #CJK UNIFIED IDEOGRAPH
+0x8D8E 0x514B #CJK UNIFIED IDEOGRAPH
+0x8D8F 0x523B #CJK UNIFIED IDEOGRAPH
+0x8D90 0x544A #CJK UNIFIED IDEOGRAPH
+0x8D91 0x56FD #CJK UNIFIED IDEOGRAPH
+0x8D92 0x7A40 #CJK UNIFIED IDEOGRAPH
+0x8D93 0x9177 #CJK UNIFIED IDEOGRAPH
+0x8D94 0x9D60 #CJK UNIFIED IDEOGRAPH
+0x8D95 0x9ED2 #CJK UNIFIED IDEOGRAPH
+0x8D96 0x7344 #CJK UNIFIED IDEOGRAPH
+0x8D97 0x6F09 #CJK UNIFIED IDEOGRAPH
+0x8D98 0x8170 #CJK UNIFIED IDEOGRAPH
+0x8D99 0x7511 #CJK UNIFIED IDEOGRAPH
+0x8D9A 0x5FFD #CJK UNIFIED IDEOGRAPH
+0x8D9B 0x60DA #CJK UNIFIED IDEOGRAPH
+0x8D9C 0x9AA8 #CJK UNIFIED IDEOGRAPH
+0x8D9D 0x72DB #CJK UNIFIED IDEOGRAPH
+0x8D9E 0x8FBC #CJK UNIFIED IDEOGRAPH
+0x8D9F 0x6B64 #CJK UNIFIED IDEOGRAPH
+0x8DA0 0x9803 #CJK UNIFIED IDEOGRAPH
+0x8DA1 0x4ECA #CJK UNIFIED IDEOGRAPH
+0x8DA2 0x56F0 #CJK UNIFIED IDEOGRAPH
+0x8DA3 0x5764 #CJK UNIFIED IDEOGRAPH
+0x8DA4 0x58BE #CJK UNIFIED IDEOGRAPH
+0x8DA5 0x5A5A #CJK UNIFIED IDEOGRAPH
+0x8DA6 0x6068 #CJK UNIFIED IDEOGRAPH
+0x8DA7 0x61C7 #CJK UNIFIED IDEOGRAPH
+0x8DA8 0x660F #CJK UNIFIED IDEOGRAPH
+0x8DA9 0x6606 #CJK UNIFIED IDEOGRAPH
+0x8DAA 0x6839 #CJK UNIFIED IDEOGRAPH
+0x8DAB 0x68B1 #CJK UNIFIED IDEOGRAPH
+0x8DAC 0x6DF7 #CJK UNIFIED IDEOGRAPH
+0x8DAD 0x75D5 #CJK UNIFIED IDEOGRAPH
+0x8DAE 0x7D3A #CJK UNIFIED IDEOGRAPH
+0x8DAF 0x826E #CJK UNIFIED IDEOGRAPH
+0x8DB0 0x9B42 #CJK UNIFIED IDEOGRAPH
+0x8DB1 0x4E9B #CJK UNIFIED IDEOGRAPH
+0x8DB2 0x4F50 #CJK UNIFIED IDEOGRAPH
+0x8DB3 0x53C9 #CJK UNIFIED IDEOGRAPH
+0x8DB4 0x5506 #CJK UNIFIED IDEOGRAPH
+0x8DB5 0x5D6F #CJK UNIFIED IDEOGRAPH
+0x8DB6 0x5DE6 #CJK UNIFIED IDEOGRAPH
+0x8DB7 0x5DEE #CJK UNIFIED IDEOGRAPH
+0x8DB8 0x67FB #CJK UNIFIED IDEOGRAPH
+0x8DB9 0x6C99 #CJK UNIFIED IDEOGRAPH
+0x8DBA 0x7473 #CJK UNIFIED IDEOGRAPH
+0x8DBB 0x7802 #CJK UNIFIED IDEOGRAPH
+0x8DBC 0x8A50 #CJK UNIFIED IDEOGRAPH
+0x8DBD 0x9396 #CJK UNIFIED IDEOGRAPH
+0x8DBE 0x88DF #CJK UNIFIED IDEOGRAPH
+0x8DBF 0x5750 #CJK UNIFIED IDEOGRAPH
+0x8DC0 0x5EA7 #CJK UNIFIED IDEOGRAPH
+0x8DC1 0x632B #CJK UNIFIED IDEOGRAPH
+0x8DC2 0x50B5 #CJK UNIFIED IDEOGRAPH
+0x8DC3 0x50AC #CJK UNIFIED IDEOGRAPH
+0x8DC4 0x518D #CJK UNIFIED IDEOGRAPH
+0x8DC5 0x6700 #CJK UNIFIED IDEOGRAPH
+0x8DC6 0x54C9 #CJK UNIFIED IDEOGRAPH
+0x8DC7 0x585E #CJK UNIFIED IDEOGRAPH
+0x8DC8 0x59BB #CJK UNIFIED IDEOGRAPH
+0x8DC9 0x5BB0 #CJK UNIFIED IDEOGRAPH
+0x8DCA 0x5F69 #CJK UNIFIED IDEOGRAPH
+0x8DCB 0x624D #CJK UNIFIED IDEOGRAPH
+0x8DCC 0x63A1 #CJK UNIFIED IDEOGRAPH
+0x8DCD 0x683D #CJK UNIFIED IDEOGRAPH
+0x8DCE 0x6B73 #CJK UNIFIED IDEOGRAPH
+0x8DCF 0x6E08 #CJK UNIFIED IDEOGRAPH
+0x8DD0 0x707D #CJK UNIFIED IDEOGRAPH
+0x8DD1 0x91C7 #CJK UNIFIED IDEOGRAPH
+0x8DD2 0x7280 #CJK UNIFIED IDEOGRAPH
+0x8DD3 0x7815 #CJK UNIFIED IDEOGRAPH
+0x8DD4 0x7826 #CJK UNIFIED IDEOGRAPH
+0x8DD5 0x796D #CJK UNIFIED IDEOGRAPH
+0x8DD6 0x658E #CJK UNIFIED IDEOGRAPH
+0x8DD7 0x7D30 #CJK UNIFIED IDEOGRAPH
+0x8DD8 0x83DC #CJK UNIFIED IDEOGRAPH
+0x8DD9 0x88C1 #CJK UNIFIED IDEOGRAPH
+0x8DDA 0x8F09 #CJK UNIFIED IDEOGRAPH
+0x8DDB 0x969B #CJK UNIFIED IDEOGRAPH
+0x8DDC 0x5264 #CJK UNIFIED IDEOGRAPH
+0x8DDD 0x5728 #CJK UNIFIED IDEOGRAPH
+0x8DDE 0x6750 #CJK UNIFIED IDEOGRAPH
+0x8DDF 0x7F6A #CJK UNIFIED IDEOGRAPH
+0x8DE0 0x8CA1 #CJK UNIFIED IDEOGRAPH
+0x8DE1 0x51B4 #CJK UNIFIED IDEOGRAPH
+0x8DE2 0x5742 #CJK UNIFIED IDEOGRAPH
+0x8DE3 0x962A #CJK UNIFIED IDEOGRAPH
+0x8DE4 0x583A #CJK UNIFIED IDEOGRAPH
+0x8DE5 0x698A #CJK UNIFIED IDEOGRAPH
+0x8DE6 0x80B4 #CJK UNIFIED IDEOGRAPH
+0x8DE7 0x54B2 #CJK UNIFIED IDEOGRAPH
+0x8DE8 0x5D0E #CJK UNIFIED IDEOGRAPH
+0x8DE9 0x57FC #CJK UNIFIED IDEOGRAPH
+0x8DEA 0x7895 #CJK UNIFIED IDEOGRAPH
+0x8DEB 0x9DFA #CJK UNIFIED IDEOGRAPH
+0x8DEC 0x4F5C #CJK UNIFIED IDEOGRAPH
+0x8DED 0x524A #CJK UNIFIED IDEOGRAPH
+0x8DEE 0x548B #CJK UNIFIED IDEOGRAPH
+0x8DEF 0x643E #CJK UNIFIED IDEOGRAPH
+0x8DF0 0x6628 #CJK UNIFIED IDEOGRAPH
+0x8DF1 0x6714 #CJK UNIFIED IDEOGRAPH
+0x8DF2 0x67F5 #CJK UNIFIED IDEOGRAPH
+0x8DF3 0x7A84 #CJK UNIFIED IDEOGRAPH
+0x8DF4 0x7B56 #CJK UNIFIED IDEOGRAPH
+0x8DF5 0x7D22 #CJK UNIFIED IDEOGRAPH
+0x8DF6 0x932F #CJK UNIFIED IDEOGRAPH
+0x8DF7 0x685C #CJK UNIFIED IDEOGRAPH
+0x8DF8 0x9BAD #CJK UNIFIED IDEOGRAPH
+0x8DF9 0x7B39 #CJK UNIFIED IDEOGRAPH
+0x8DFA 0x5319 #CJK UNIFIED IDEOGRAPH
+0x8DFB 0x518A #CJK UNIFIED IDEOGRAPH
+0x8DFC 0x5237 #CJK UNIFIED IDEOGRAPH
+0x8E40 0x5BDF #CJK UNIFIED IDEOGRAPH
+0x8E41 0x62F6 #CJK UNIFIED IDEOGRAPH
+0x8E42 0x64AE #CJK UNIFIED IDEOGRAPH
+0x8E43 0x64E6 #CJK UNIFIED IDEOGRAPH
+0x8E44 0x672D #CJK UNIFIED IDEOGRAPH
+0x8E45 0x6BBA #CJK UNIFIED IDEOGRAPH
+0x8E46 0x85A9 #CJK UNIFIED IDEOGRAPH
+0x8E47 0x96D1 #CJK UNIFIED IDEOGRAPH
+0x8E48 0x7690 #CJK UNIFIED IDEOGRAPH
+0x8E49 0x9BD6 #CJK UNIFIED IDEOGRAPH
+0x8E4A 0x634C #CJK UNIFIED IDEOGRAPH
+0x8E4B 0x9306 #CJK UNIFIED IDEOGRAPH
+0x8E4C 0x9BAB #CJK UNIFIED IDEOGRAPH
+0x8E4D 0x76BF #CJK UNIFIED IDEOGRAPH
+0x8E4E 0x6652 #CJK UNIFIED IDEOGRAPH
+0x8E4F 0x4E09 #CJK UNIFIED IDEOGRAPH
+0x8E50 0x5098 #CJK UNIFIED IDEOGRAPH
+0x8E51 0x53C2 #CJK UNIFIED IDEOGRAPH
+0x8E52 0x5C71 #CJK UNIFIED IDEOGRAPH
+0x8E53 0x60E8 #CJK UNIFIED IDEOGRAPH
+0x8E54 0x6492 #CJK UNIFIED IDEOGRAPH
+0x8E55 0x6563 #CJK UNIFIED IDEOGRAPH
+0x8E56 0x685F #CJK UNIFIED IDEOGRAPH
+0x8E57 0x71E6 #CJK UNIFIED IDEOGRAPH
+0x8E58 0x73CA #CJK UNIFIED IDEOGRAPH
+0x8E59 0x7523 #CJK UNIFIED IDEOGRAPH
+0x8E5A 0x7B97 #CJK UNIFIED IDEOGRAPH
+0x8E5B 0x7E82 #CJK UNIFIED IDEOGRAPH
+0x8E5C 0x8695 #CJK UNIFIED IDEOGRAPH
+0x8E5D 0x8B83 #CJK UNIFIED IDEOGRAPH
+0x8E5E 0x8CDB #CJK UNIFIED IDEOGRAPH
+0x8E5F 0x9178 #CJK UNIFIED IDEOGRAPH
+0x8E60 0x9910 #CJK UNIFIED IDEOGRAPH
+0x8E61 0x65AC #CJK UNIFIED IDEOGRAPH
+0x8E62 0x66AB #CJK UNIFIED IDEOGRAPH
+0x8E63 0x6B8B #CJK UNIFIED IDEOGRAPH
+0x8E64 0x4ED5 #CJK UNIFIED IDEOGRAPH
+0x8E65 0x4ED4 #CJK UNIFIED IDEOGRAPH
+0x8E66 0x4F3A #CJK UNIFIED IDEOGRAPH
+0x8E67 0x4F7F #CJK UNIFIED IDEOGRAPH
+0x8E68 0x523A #CJK UNIFIED IDEOGRAPH
+0x8E69 0x53F8 #CJK UNIFIED IDEOGRAPH
+0x8E6A 0x53F2 #CJK UNIFIED IDEOGRAPH
+0x8E6B 0x55E3 #CJK UNIFIED IDEOGRAPH
+0x8E6C 0x56DB #CJK UNIFIED IDEOGRAPH
+0x8E6D 0x58EB #CJK UNIFIED IDEOGRAPH
+0x8E6E 0x59CB #CJK UNIFIED IDEOGRAPH
+0x8E6F 0x59C9 #CJK UNIFIED IDEOGRAPH
+0x8E70 0x59FF #CJK UNIFIED IDEOGRAPH
+0x8E71 0x5B50 #CJK UNIFIED IDEOGRAPH
+0x8E72 0x5C4D #CJK UNIFIED IDEOGRAPH
+0x8E73 0x5E02 #CJK UNIFIED IDEOGRAPH
+0x8E74 0x5E2B #CJK UNIFIED IDEOGRAPH
+0x8E75 0x5FD7 #CJK UNIFIED IDEOGRAPH
+0x8E76 0x601D #CJK UNIFIED IDEOGRAPH
+0x8E77 0x6307 #CJK UNIFIED IDEOGRAPH
+0x8E78 0x652F #CJK UNIFIED IDEOGRAPH
+0x8E79 0x5B5C #CJK UNIFIED IDEOGRAPH
+0x8E7A 0x65AF #CJK UNIFIED IDEOGRAPH
+0x8E7B 0x65BD #CJK UNIFIED IDEOGRAPH
+0x8E7C 0x65E8 #CJK UNIFIED IDEOGRAPH
+0x8E7D 0x679D #CJK UNIFIED IDEOGRAPH
+0x8E7E 0x6B62 #CJK UNIFIED IDEOGRAPH
+0x8E80 0x6B7B #CJK UNIFIED IDEOGRAPH
+0x8E81 0x6C0F #CJK UNIFIED IDEOGRAPH
+0x8E82 0x7345 #CJK UNIFIED IDEOGRAPH
+0x8E83 0x7949 #CJK UNIFIED IDEOGRAPH
+0x8E84 0x79C1 #CJK UNIFIED IDEOGRAPH
+0x8E85 0x7CF8 #CJK UNIFIED IDEOGRAPH
+0x8E86 0x7D19 #CJK UNIFIED IDEOGRAPH
+0x8E87 0x7D2B #CJK UNIFIED IDEOGRAPH
+0x8E88 0x80A2 #CJK UNIFIED IDEOGRAPH
+0x8E89 0x8102 #CJK UNIFIED IDEOGRAPH
+0x8E8A 0x81F3 #CJK UNIFIED IDEOGRAPH
+0x8E8B 0x8996 #CJK UNIFIED IDEOGRAPH
+0x8E8C 0x8A5E #CJK UNIFIED IDEOGRAPH
+0x8E8D 0x8A69 #CJK UNIFIED IDEOGRAPH
+0x8E8E 0x8A66 #CJK UNIFIED IDEOGRAPH
+0x8E8F 0x8A8C #CJK UNIFIED IDEOGRAPH
+0x8E90 0x8AEE #CJK UNIFIED IDEOGRAPH
+0x8E91 0x8CC7 #CJK UNIFIED IDEOGRAPH
+0x8E92 0x8CDC #CJK UNIFIED IDEOGRAPH
+0x8E93 0x96CC #CJK UNIFIED IDEOGRAPH
+0x8E94 0x98FC #CJK UNIFIED IDEOGRAPH
+0x8E95 0x6B6F #CJK UNIFIED IDEOGRAPH
+0x8E96 0x4E8B #CJK UNIFIED IDEOGRAPH
+0x8E97 0x4F3C #CJK UNIFIED IDEOGRAPH
+0x8E98 0x4F8D #CJK UNIFIED IDEOGRAPH
+0x8E99 0x5150 #CJK UNIFIED IDEOGRAPH
+0x8E9A 0x5B57 #CJK UNIFIED IDEOGRAPH
+0x8E9B 0x5BFA #CJK UNIFIED IDEOGRAPH
+0x8E9C 0x6148 #CJK UNIFIED IDEOGRAPH
+0x8E9D 0x6301 #CJK UNIFIED IDEOGRAPH
+0x8E9E 0x6642 #CJK UNIFIED IDEOGRAPH
+0x8E9F 0x6B21 #CJK UNIFIED IDEOGRAPH
+0x8EA0 0x6ECB #CJK UNIFIED IDEOGRAPH
+0x8EA1 0x6CBB #CJK UNIFIED IDEOGRAPH
+0x8EA2 0x723E #CJK UNIFIED IDEOGRAPH
+0x8EA3 0x74BD #CJK UNIFIED IDEOGRAPH
+0x8EA4 0x75D4 #CJK UNIFIED IDEOGRAPH
+0x8EA5 0x78C1 #CJK UNIFIED IDEOGRAPH
+0x8EA6 0x793A #CJK UNIFIED IDEOGRAPH
+0x8EA7 0x800C #CJK UNIFIED IDEOGRAPH
+0x8EA8 0x8033 #CJK UNIFIED IDEOGRAPH
+0x8EA9 0x81EA #CJK UNIFIED IDEOGRAPH
+0x8EAA 0x8494 #CJK UNIFIED IDEOGRAPH
+0x8EAB 0x8F9E #CJK UNIFIED IDEOGRAPH
+0x8EAC 0x6C50 #CJK UNIFIED IDEOGRAPH
+0x8EAD 0x9E7F #CJK UNIFIED IDEOGRAPH
+0x8EAE 0x5F0F #CJK UNIFIED IDEOGRAPH
+0x8EAF 0x8B58 #CJK UNIFIED IDEOGRAPH
+0x8EB0 0x9D2B #CJK UNIFIED IDEOGRAPH
+0x8EB1 0x7AFA #CJK UNIFIED IDEOGRAPH
+0x8EB2 0x8EF8 #CJK UNIFIED IDEOGRAPH
+0x8EB3 0x5B8D #CJK UNIFIED IDEOGRAPH
+0x8EB4 0x96EB #CJK UNIFIED IDEOGRAPH
+0x8EB5 0x4E03 #CJK UNIFIED IDEOGRAPH
+0x8EB6 0x53F1 #CJK UNIFIED IDEOGRAPH
+0x8EB7 0x57F7 #CJK UNIFIED IDEOGRAPH
+0x8EB8 0x5931 #CJK UNIFIED IDEOGRAPH
+0x8EB9 0x5AC9 #CJK UNIFIED IDEOGRAPH
+0x8EBA 0x5BA4 #CJK UNIFIED IDEOGRAPH
+0x8EBB 0x6089 #CJK UNIFIED IDEOGRAPH
+0x8EBC 0x6E7F #CJK UNIFIED IDEOGRAPH
+0x8EBD 0x6F06 #CJK UNIFIED IDEOGRAPH
+0x8EBE 0x75BE #CJK UNIFIED IDEOGRAPH
+0x8EBF 0x8CEA #CJK UNIFIED IDEOGRAPH
+0x8EC0 0x5B9F #CJK UNIFIED IDEOGRAPH
+0x8EC1 0x8500 #CJK UNIFIED IDEOGRAPH
+0x8EC2 0x7BE0 #CJK UNIFIED IDEOGRAPH
+0x8EC3 0x5072 #CJK UNIFIED IDEOGRAPH
+0x8EC4 0x67F4 #CJK UNIFIED IDEOGRAPH
+0x8EC5 0x829D #CJK UNIFIED IDEOGRAPH
+0x8EC6 0x5C61 #CJK UNIFIED IDEOGRAPH
+0x8EC7 0x854A #CJK UNIFIED IDEOGRAPH
+0x8EC8 0x7E1E #CJK UNIFIED IDEOGRAPH
+0x8EC9 0x820E #CJK UNIFIED IDEOGRAPH
+0x8ECA 0x5199 #CJK UNIFIED IDEOGRAPH
+0x8ECB 0x5C04 #CJK UNIFIED IDEOGRAPH
+0x8ECC 0x6368 #CJK UNIFIED IDEOGRAPH
+0x8ECD 0x8D66 #CJK UNIFIED IDEOGRAPH
+0x8ECE 0x659C #CJK UNIFIED IDEOGRAPH
+0x8ECF 0x716E #CJK UNIFIED IDEOGRAPH
+0x8ED0 0x793E #CJK UNIFIED IDEOGRAPH
+0x8ED1 0x7D17 #CJK UNIFIED IDEOGRAPH
+0x8ED2 0x8005 #CJK UNIFIED IDEOGRAPH
+0x8ED3 0x8B1D #CJK UNIFIED IDEOGRAPH
+0x8ED4 0x8ECA #CJK UNIFIED IDEOGRAPH
+0x8ED5 0x906E #CJK UNIFIED IDEOGRAPH
+0x8ED6 0x86C7 #CJK UNIFIED IDEOGRAPH
+0x8ED7 0x90AA #CJK UNIFIED IDEOGRAPH
+0x8ED8 0x501F #CJK UNIFIED IDEOGRAPH
+0x8ED9 0x52FA #CJK UNIFIED IDEOGRAPH
+0x8EDA 0x5C3A #CJK UNIFIED IDEOGRAPH
+0x8EDB 0x6753 #CJK UNIFIED IDEOGRAPH
+0x8EDC 0x707C #CJK UNIFIED IDEOGRAPH
+0x8EDD 0x7235 #CJK UNIFIED IDEOGRAPH
+0x8EDE 0x914C #CJK UNIFIED IDEOGRAPH
+0x8EDF 0x91C8 #CJK UNIFIED IDEOGRAPH
+0x8EE0 0x932B #CJK UNIFIED IDEOGRAPH
+0x8EE1 0x82E5 #CJK UNIFIED IDEOGRAPH
+0x8EE2 0x5BC2 #CJK UNIFIED IDEOGRAPH
+0x8EE3 0x5F31 #CJK UNIFIED IDEOGRAPH
+0x8EE4 0x60F9 #CJK UNIFIED IDEOGRAPH
+0x8EE5 0x4E3B #CJK UNIFIED IDEOGRAPH
+0x8EE6 0x53D6 #CJK UNIFIED IDEOGRAPH
+0x8EE7 0x5B88 #CJK UNIFIED IDEOGRAPH
+0x8EE8 0x624B #CJK UNIFIED IDEOGRAPH
+0x8EE9 0x6731 #CJK UNIFIED IDEOGRAPH
+0x8EEA 0x6B8A #CJK UNIFIED IDEOGRAPH
+0x8EEB 0x72E9 #CJK UNIFIED IDEOGRAPH
+0x8EEC 0x73E0 #CJK UNIFIED IDEOGRAPH
+0x8EED 0x7A2E #CJK UNIFIED IDEOGRAPH
+0x8EEE 0x816B #CJK UNIFIED IDEOGRAPH
+0x8EEF 0x8DA3 #CJK UNIFIED IDEOGRAPH
+0x8EF0 0x9152 #CJK UNIFIED IDEOGRAPH
+0x8EF1 0x9996 #CJK UNIFIED IDEOGRAPH
+0x8EF2 0x5112 #CJK UNIFIED IDEOGRAPH
+0x8EF3 0x53D7 #CJK UNIFIED IDEOGRAPH
+0x8EF4 0x546A #CJK UNIFIED IDEOGRAPH
+0x8EF5 0x5BFF #CJK UNIFIED IDEOGRAPH
+0x8EF6 0x6388 #CJK UNIFIED IDEOGRAPH
+0x8EF7 0x6A39 #CJK UNIFIED IDEOGRAPH
+0x8EF8 0x7DAC #CJK UNIFIED IDEOGRAPH
+0x8EF9 0x9700 #CJK UNIFIED IDEOGRAPH
+0x8EFA 0x56DA #CJK UNIFIED IDEOGRAPH
+0x8EFB 0x53CE #CJK UNIFIED IDEOGRAPH
+0x8EFC 0x5468 #CJK UNIFIED IDEOGRAPH
+0x8F40 0x5B97 #CJK UNIFIED IDEOGRAPH
+0x8F41 0x5C31 #CJK UNIFIED IDEOGRAPH
+0x8F42 0x5DDE #CJK UNIFIED IDEOGRAPH
+0x8F43 0x4FEE #CJK UNIFIED IDEOGRAPH
+0x8F44 0x6101 #CJK UNIFIED IDEOGRAPH
+0x8F45 0x62FE #CJK UNIFIED IDEOGRAPH
+0x8F46 0x6D32 #CJK UNIFIED IDEOGRAPH
+0x8F47 0x79C0 #CJK UNIFIED IDEOGRAPH
+0x8F48 0x79CB #CJK UNIFIED IDEOGRAPH
+0x8F49 0x7D42 #CJK UNIFIED IDEOGRAPH
+0x8F4A 0x7E4D #CJK UNIFIED IDEOGRAPH
+0x8F4B 0x7FD2 #CJK UNIFIED IDEOGRAPH
+0x8F4C 0x81ED #CJK UNIFIED IDEOGRAPH
+0x8F4D 0x821F #CJK UNIFIED IDEOGRAPH
+0x8F4E 0x8490 #CJK UNIFIED IDEOGRAPH
+0x8F4F 0x8846 #CJK UNIFIED IDEOGRAPH
+0x8F50 0x8972 #CJK UNIFIED IDEOGRAPH
+0x8F51 0x8B90 #CJK UNIFIED IDEOGRAPH
+0x8F52 0x8E74 #CJK UNIFIED IDEOGRAPH
+0x8F53 0x8F2F #CJK UNIFIED IDEOGRAPH
+0x8F54 0x9031 #CJK UNIFIED IDEOGRAPH
+0x8F55 0x914B #CJK UNIFIED IDEOGRAPH
+0x8F56 0x916C #CJK UNIFIED IDEOGRAPH
+0x8F57 0x96C6 #CJK UNIFIED IDEOGRAPH
+0x8F58 0x919C #CJK UNIFIED IDEOGRAPH
+0x8F59 0x4EC0 #CJK UNIFIED IDEOGRAPH
+0x8F5A 0x4F4F #CJK UNIFIED IDEOGRAPH
+0x8F5B 0x5145 #CJK UNIFIED IDEOGRAPH
+0x8F5C 0x5341 #CJK UNIFIED IDEOGRAPH
+0x8F5D 0x5F93 #CJK UNIFIED IDEOGRAPH
+0x8F5E 0x620E #CJK UNIFIED IDEOGRAPH
+0x8F5F 0x67D4 #CJK UNIFIED IDEOGRAPH
+0x8F60 0x6C41 #CJK UNIFIED IDEOGRAPH
+0x8F61 0x6E0B #CJK UNIFIED IDEOGRAPH
+0x8F62 0x7363 #CJK UNIFIED IDEOGRAPH
+0x8F63 0x7E26 #CJK UNIFIED IDEOGRAPH
+0x8F64 0x91CD #CJK UNIFIED IDEOGRAPH
+0x8F65 0x9283 #CJK UNIFIED IDEOGRAPH
+0x8F66 0x53D4 #CJK UNIFIED IDEOGRAPH
+0x8F67 0x5919 #CJK UNIFIED IDEOGRAPH
+0x8F68 0x5BBF #CJK UNIFIED IDEOGRAPH
+0x8F69 0x6DD1 #CJK UNIFIED IDEOGRAPH
+0x8F6A 0x795D #CJK UNIFIED IDEOGRAPH
+0x8F6B 0x7E2E #CJK UNIFIED IDEOGRAPH
+0x8F6C 0x7C9B #CJK UNIFIED IDEOGRAPH
+0x8F6D 0x587E #CJK UNIFIED IDEOGRAPH
+0x8F6E 0x719F #CJK UNIFIED IDEOGRAPH
+0x8F6F 0x51FA #CJK UNIFIED IDEOGRAPH
+0x8F70 0x8853 #CJK UNIFIED IDEOGRAPH
+0x8F71 0x8FF0 #CJK UNIFIED IDEOGRAPH
+0x8F72 0x4FCA #CJK UNIFIED IDEOGRAPH
+0x8F73 0x5CFB #CJK UNIFIED IDEOGRAPH
+0x8F74 0x6625 #CJK UNIFIED IDEOGRAPH
+0x8F75 0x77AC #CJK UNIFIED IDEOGRAPH
+0x8F76 0x7AE3 #CJK UNIFIED IDEOGRAPH
+0x8F77 0x821C #CJK UNIFIED IDEOGRAPH
+0x8F78 0x99FF #CJK UNIFIED IDEOGRAPH
+0x8F79 0x51C6 #CJK UNIFIED IDEOGRAPH
+0x8F7A 0x5FAA #CJK UNIFIED IDEOGRAPH
+0x8F7B 0x65EC #CJK UNIFIED IDEOGRAPH
+0x8F7C 0x696F #CJK UNIFIED IDEOGRAPH
+0x8F7D 0x6B89 #CJK UNIFIED IDEOGRAPH
+0x8F7E 0x6DF3 #CJK UNIFIED IDEOGRAPH
+0x8F80 0x6E96 #CJK UNIFIED IDEOGRAPH
+0x8F81 0x6F64 #CJK UNIFIED IDEOGRAPH
+0x8F82 0x76FE #CJK UNIFIED IDEOGRAPH
+0x8F83 0x7D14 #CJK UNIFIED IDEOGRAPH
+0x8F84 0x5DE1 #CJK UNIFIED IDEOGRAPH
+0x8F85 0x9075 #CJK UNIFIED IDEOGRAPH
+0x8F86 0x9187 #CJK UNIFIED IDEOGRAPH
+0x8F87 0x9806 #CJK UNIFIED IDEOGRAPH
+0x8F88 0x51E6 #CJK UNIFIED IDEOGRAPH
+0x8F89 0x521D #CJK UNIFIED IDEOGRAPH
+0x8F8A 0x6240 #CJK UNIFIED IDEOGRAPH
+0x8F8B 0x6691 #CJK UNIFIED IDEOGRAPH
+0x8F8C 0x66D9 #CJK UNIFIED IDEOGRAPH
+0x8F8D 0x6E1A #CJK UNIFIED IDEOGRAPH
+0x8F8E 0x5EB6 #CJK UNIFIED IDEOGRAPH
+0x8F8F 0x7DD2 #CJK UNIFIED IDEOGRAPH
+0x8F90 0x7F72 #CJK UNIFIED IDEOGRAPH
+0x8F91 0x66F8 #CJK UNIFIED IDEOGRAPH
+0x8F92 0x85AF #CJK UNIFIED IDEOGRAPH
+0x8F93 0x85F7 #CJK UNIFIED IDEOGRAPH
+0x8F94 0x8AF8 #CJK UNIFIED IDEOGRAPH
+0x8F95 0x52A9 #CJK UNIFIED IDEOGRAPH
+0x8F96 0x53D9 #CJK UNIFIED IDEOGRAPH
+0x8F97 0x5973 #CJK UNIFIED IDEOGRAPH
+0x8F98 0x5E8F #CJK UNIFIED IDEOGRAPH
+0x8F99 0x5F90 #CJK UNIFIED IDEOGRAPH
+0x8F9A 0x6055 #CJK UNIFIED IDEOGRAPH
+0x8F9B 0x92E4 #CJK UNIFIED IDEOGRAPH
+0x8F9C 0x9664 #CJK UNIFIED IDEOGRAPH
+0x8F9D 0x50B7 #CJK UNIFIED IDEOGRAPH
+0x8F9E 0x511F #CJK UNIFIED IDEOGRAPH
+0x8F9F 0x52DD #CJK UNIFIED IDEOGRAPH
+0x8FA0 0x5320 #CJK UNIFIED IDEOGRAPH
+0x8FA1 0x5347 #CJK UNIFIED IDEOGRAPH
+0x8FA2 0x53EC #CJK UNIFIED IDEOGRAPH
+0x8FA3 0x54E8 #CJK UNIFIED IDEOGRAPH
+0x8FA4 0x5546 #CJK UNIFIED IDEOGRAPH
+0x8FA5 0x5531 #CJK UNIFIED IDEOGRAPH
+0x8FA6 0x5617 #CJK UNIFIED IDEOGRAPH
+0x8FA7 0x5968 #CJK UNIFIED IDEOGRAPH
+0x8FA8 0x59BE #CJK UNIFIED IDEOGRAPH
+0x8FA9 0x5A3C #CJK UNIFIED IDEOGRAPH
+0x8FAA 0x5BB5 #CJK UNIFIED IDEOGRAPH
+0x8FAB 0x5C06 #CJK UNIFIED IDEOGRAPH
+0x8FAC 0x5C0F #CJK UNIFIED IDEOGRAPH
+0x8FAD 0x5C11 #CJK UNIFIED IDEOGRAPH
+0x8FAE 0x5C1A #CJK UNIFIED IDEOGRAPH
+0x8FAF 0x5E84 #CJK UNIFIED IDEOGRAPH
+0x8FB0 0x5E8A #CJK UNIFIED IDEOGRAPH
+0x8FB1 0x5EE0 #CJK UNIFIED IDEOGRAPH
+0x8FB2 0x5F70 #CJK UNIFIED IDEOGRAPH
+0x8FB3 0x627F #CJK UNIFIED IDEOGRAPH
+0x8FB4 0x6284 #CJK UNIFIED IDEOGRAPH
+0x8FB5 0x62DB #CJK UNIFIED IDEOGRAPH
+0x8FB6 0x638C #CJK UNIFIED IDEOGRAPH
+0x8FB7 0x6377 #CJK UNIFIED IDEOGRAPH
+0x8FB8 0x6607 #CJK UNIFIED IDEOGRAPH
+0x8FB9 0x660C #CJK UNIFIED IDEOGRAPH
+0x8FBA 0x662D #CJK UNIFIED IDEOGRAPH
+0x8FBB 0x6676 #CJK UNIFIED IDEOGRAPH
+0x8FBC 0x677E #CJK UNIFIED IDEOGRAPH
+0x8FBD 0x68A2 #CJK UNIFIED IDEOGRAPH
+0x8FBE 0x6A1F #CJK UNIFIED IDEOGRAPH
+0x8FBF 0x6A35 #CJK UNIFIED IDEOGRAPH
+0x8FC0 0x6CBC #CJK UNIFIED IDEOGRAPH
+0x8FC1 0x6D88 #CJK UNIFIED IDEOGRAPH
+0x8FC2 0x6E09 #CJK UNIFIED IDEOGRAPH
+0x8FC3 0x6E58 #CJK UNIFIED IDEOGRAPH
+0x8FC4 0x713C #CJK UNIFIED IDEOGRAPH
+0x8FC5 0x7126 #CJK UNIFIED IDEOGRAPH
+0x8FC6 0x7167 #CJK UNIFIED IDEOGRAPH
+0x8FC7 0x75C7 #CJK UNIFIED IDEOGRAPH
+0x8FC8 0x7701 #CJK UNIFIED IDEOGRAPH
+0x8FC9 0x785D #CJK UNIFIED IDEOGRAPH
+0x8FCA 0x7901 #CJK UNIFIED IDEOGRAPH
+0x8FCB 0x7965 #CJK UNIFIED IDEOGRAPH
+0x8FCC 0x79F0 #CJK UNIFIED IDEOGRAPH
+0x8FCD 0x7AE0 #CJK UNIFIED IDEOGRAPH
+0x8FCE 0x7B11 #CJK UNIFIED IDEOGRAPH
+0x8FCF 0x7CA7 #CJK UNIFIED IDEOGRAPH
+0x8FD0 0x7D39 #CJK UNIFIED IDEOGRAPH
+0x8FD1 0x8096 #CJK UNIFIED IDEOGRAPH
+0x8FD2 0x83D6 #CJK UNIFIED IDEOGRAPH
+0x8FD3 0x848B #CJK UNIFIED IDEOGRAPH
+0x8FD4 0x8549 #CJK UNIFIED IDEOGRAPH
+0x8FD5 0x885D #CJK UNIFIED IDEOGRAPH
+0x8FD6 0x88F3 #CJK UNIFIED IDEOGRAPH
+0x8FD7 0x8A1F #CJK UNIFIED IDEOGRAPH
+0x8FD8 0x8A3C #CJK UNIFIED IDEOGRAPH
+0x8FD9 0x8A54 #CJK UNIFIED IDEOGRAPH
+0x8FDA 0x8A73 #CJK UNIFIED IDEOGRAPH
+0x8FDB 0x8C61 #CJK UNIFIED IDEOGRAPH
+0x8FDC 0x8CDE #CJK UNIFIED IDEOGRAPH
+0x8FDD 0x91A4 #CJK UNIFIED IDEOGRAPH
+0x8FDE 0x9266 #CJK UNIFIED IDEOGRAPH
+0x8FDF 0x937E #CJK UNIFIED IDEOGRAPH
+0x8FE0 0x9418 #CJK UNIFIED IDEOGRAPH
+0x8FE1 0x969C #CJK UNIFIED IDEOGRAPH
+0x8FE2 0x9798 #CJK UNIFIED IDEOGRAPH
+0x8FE3 0x4E0A #CJK UNIFIED IDEOGRAPH
+0x8FE4 0x4E08 #CJK UNIFIED IDEOGRAPH
+0x8FE5 0x4E1E #CJK UNIFIED IDEOGRAPH
+0x8FE6 0x4E57 #CJK UNIFIED IDEOGRAPH
+0x8FE7 0x5197 #CJK UNIFIED IDEOGRAPH
+0x8FE8 0x5270 #CJK UNIFIED IDEOGRAPH
+0x8FE9 0x57CE #CJK UNIFIED IDEOGRAPH
+0x8FEA 0x5834 #CJK UNIFIED IDEOGRAPH
+0x8FEB 0x58CC #CJK UNIFIED IDEOGRAPH
+0x8FEC 0x5B22 #CJK UNIFIED IDEOGRAPH
+0x8FED 0x5E38 #CJK UNIFIED IDEOGRAPH
+0x8FEE 0x60C5 #CJK UNIFIED IDEOGRAPH
+0x8FEF 0x64FE #CJK UNIFIED IDEOGRAPH
+0x8FF0 0x6761 #CJK UNIFIED IDEOGRAPH
+0x8FF1 0x6756 #CJK UNIFIED IDEOGRAPH
+0x8FF2 0x6D44 #CJK UNIFIED IDEOGRAPH
+0x8FF3 0x72B6 #CJK UNIFIED IDEOGRAPH
+0x8FF4 0x7573 #CJK UNIFIED IDEOGRAPH
+0x8FF5 0x7A63 #CJK UNIFIED IDEOGRAPH
+0x8FF6 0x84B8 #CJK UNIFIED IDEOGRAPH
+0x8FF7 0x8B72 #CJK UNIFIED IDEOGRAPH
+0x8FF8 0x91B8 #CJK UNIFIED IDEOGRAPH
+0x8FF9 0x9320 #CJK UNIFIED IDEOGRAPH
+0x8FFA 0x5631 #CJK UNIFIED IDEOGRAPH
+0x8FFB 0x57F4 #CJK UNIFIED IDEOGRAPH
+0x8FFC 0x98FE #CJK UNIFIED IDEOGRAPH
+0x9040 0x62ED #CJK UNIFIED IDEOGRAPH
+0x9041 0x690D #CJK UNIFIED IDEOGRAPH
+0x9042 0x6B96 #CJK UNIFIED IDEOGRAPH
+0x9043 0x71ED #CJK UNIFIED IDEOGRAPH
+0x9044 0x7E54 #CJK UNIFIED IDEOGRAPH
+0x9045 0x8077 #CJK UNIFIED IDEOGRAPH
+0x9046 0x8272 #CJK UNIFIED IDEOGRAPH
+0x9047 0x89E6 #CJK UNIFIED IDEOGRAPH
+0x9048 0x98DF #CJK UNIFIED IDEOGRAPH
+0x9049 0x8755 #CJK UNIFIED IDEOGRAPH
+0x904A 0x8FB1 #CJK UNIFIED IDEOGRAPH
+0x904B 0x5C3B #CJK UNIFIED IDEOGRAPH
+0x904C 0x4F38 #CJK UNIFIED IDEOGRAPH
+0x904D 0x4FE1 #CJK UNIFIED IDEOGRAPH
+0x904E 0x4FB5 #CJK UNIFIED IDEOGRAPH
+0x904F 0x5507 #CJK UNIFIED IDEOGRAPH
+0x9050 0x5A20 #CJK UNIFIED IDEOGRAPH
+0x9051 0x5BDD #CJK UNIFIED IDEOGRAPH
+0x9052 0x5BE9 #CJK UNIFIED IDEOGRAPH
+0x9053 0x5FC3 #CJK UNIFIED IDEOGRAPH
+0x9054 0x614E #CJK UNIFIED IDEOGRAPH
+0x9055 0x632F #CJK UNIFIED IDEOGRAPH
+0x9056 0x65B0 #CJK UNIFIED IDEOGRAPH
+0x9057 0x664B #CJK UNIFIED IDEOGRAPH
+0x9058 0x68EE #CJK UNIFIED IDEOGRAPH
+0x9059 0x699B #CJK UNIFIED IDEOGRAPH
+0x905A 0x6D78 #CJK UNIFIED IDEOGRAPH
+0x905B 0x6DF1 #CJK UNIFIED IDEOGRAPH
+0x905C 0x7533 #CJK UNIFIED IDEOGRAPH
+0x905D 0x75B9 #CJK UNIFIED IDEOGRAPH
+0x905E 0x771F #CJK UNIFIED IDEOGRAPH
+0x905F 0x795E #CJK UNIFIED IDEOGRAPH
+0x9060 0x79E6 #CJK UNIFIED IDEOGRAPH
+0x9061 0x7D33 #CJK UNIFIED IDEOGRAPH
+0x9062 0x81E3 #CJK UNIFIED IDEOGRAPH
+0x9063 0x82AF #CJK UNIFIED IDEOGRAPH
+0x9064 0x85AA #CJK UNIFIED IDEOGRAPH
+0x9065 0x89AA #CJK UNIFIED IDEOGRAPH
+0x9066 0x8A3A #CJK UNIFIED IDEOGRAPH
+0x9067 0x8EAB #CJK UNIFIED IDEOGRAPH
+0x9068 0x8F9B #CJK UNIFIED IDEOGRAPH
+0x9069 0x9032 #CJK UNIFIED IDEOGRAPH
+0x906A 0x91DD #CJK UNIFIED IDEOGRAPH
+0x906B 0x9707 #CJK UNIFIED IDEOGRAPH
+0x906C 0x4EBA #CJK UNIFIED IDEOGRAPH
+0x906D 0x4EC1 #CJK UNIFIED IDEOGRAPH
+0x906E 0x5203 #CJK UNIFIED IDEOGRAPH
+0x906F 0x5875 #CJK UNIFIED IDEOGRAPH
+0x9070 0x58EC #CJK UNIFIED IDEOGRAPH
+0x9071 0x5C0B #CJK UNIFIED IDEOGRAPH
+0x9072 0x751A #CJK UNIFIED IDEOGRAPH
+0x9073 0x5C3D #CJK UNIFIED IDEOGRAPH
+0x9074 0x814E #CJK UNIFIED IDEOGRAPH
+0x9075 0x8A0A #CJK UNIFIED IDEOGRAPH
+0x9076 0x8FC5 #CJK UNIFIED IDEOGRAPH
+0x9077 0x9663 #CJK UNIFIED IDEOGRAPH
+0x9078 0x976D #CJK UNIFIED IDEOGRAPH
+0x9079 0x7B25 #CJK UNIFIED IDEOGRAPH
+0x907A 0x8ACF #CJK UNIFIED IDEOGRAPH
+0x907B 0x9808 #CJK UNIFIED IDEOGRAPH
+0x907C 0x9162 #CJK UNIFIED IDEOGRAPH
+0x907D 0x56F3 #CJK UNIFIED IDEOGRAPH
+0x907E 0x53A8 #CJK UNIFIED IDEOGRAPH
+0x9080 0x9017 #CJK UNIFIED IDEOGRAPH
+0x9081 0x5439 #CJK UNIFIED IDEOGRAPH
+0x9082 0x5782 #CJK UNIFIED IDEOGRAPH
+0x9083 0x5E25 #CJK UNIFIED IDEOGRAPH
+0x9084 0x63A8 #CJK UNIFIED IDEOGRAPH
+0x9085 0x6C34 #CJK UNIFIED IDEOGRAPH
+0x9086 0x708A #CJK UNIFIED IDEOGRAPH
+0x9087 0x7761 #CJK UNIFIED IDEOGRAPH
+0x9088 0x7C8B #CJK UNIFIED IDEOGRAPH
+0x9089 0x7FE0 #CJK UNIFIED IDEOGRAPH
+0x908A 0x8870 #CJK UNIFIED IDEOGRAPH
+0x908B 0x9042 #CJK UNIFIED IDEOGRAPH
+0x908C 0x9154 #CJK UNIFIED IDEOGRAPH
+0x908D 0x9310 #CJK UNIFIED IDEOGRAPH
+0x908E 0x9318 #CJK UNIFIED IDEOGRAPH
+0x908F 0x968F #CJK UNIFIED IDEOGRAPH
+0x9090 0x745E #CJK UNIFIED IDEOGRAPH
+0x9091 0x9AC4 #CJK UNIFIED IDEOGRAPH
+0x9092 0x5D07 #CJK UNIFIED IDEOGRAPH
+0x9093 0x5D69 #CJK UNIFIED IDEOGRAPH
+0x9094 0x6570 #CJK UNIFIED IDEOGRAPH
+0x9095 0x67A2 #CJK UNIFIED IDEOGRAPH
+0x9096 0x8DA8 #CJK UNIFIED IDEOGRAPH
+0x9097 0x96DB #CJK UNIFIED IDEOGRAPH
+0x9098 0x636E #CJK UNIFIED IDEOGRAPH
+0x9099 0x6749 #CJK UNIFIED IDEOGRAPH
+0x909A 0x6919 #CJK UNIFIED IDEOGRAPH
+0x909B 0x83C5 #CJK UNIFIED IDEOGRAPH
+0x909C 0x9817 #CJK UNIFIED IDEOGRAPH
+0x909D 0x96C0 #CJK UNIFIED IDEOGRAPH
+0x909E 0x88FE #CJK UNIFIED IDEOGRAPH
+0x909F 0x6F84 #CJK UNIFIED IDEOGRAPH
+0x90A0 0x647A #CJK UNIFIED IDEOGRAPH
+0x90A1 0x5BF8 #CJK UNIFIED IDEOGRAPH
+0x90A2 0x4E16 #CJK UNIFIED IDEOGRAPH
+0x90A3 0x702C #CJK UNIFIED IDEOGRAPH
+0x90A4 0x755D #CJK UNIFIED IDEOGRAPH
+0x90A5 0x662F #CJK UNIFIED IDEOGRAPH
+0x90A6 0x51C4 #CJK UNIFIED IDEOGRAPH
+0x90A7 0x5236 #CJK UNIFIED IDEOGRAPH
+0x90A8 0x52E2 #CJK UNIFIED IDEOGRAPH
+0x90A9 0x59D3 #CJK UNIFIED IDEOGRAPH
+0x90AA 0x5F81 #CJK UNIFIED IDEOGRAPH
+0x90AB 0x6027 #CJK UNIFIED IDEOGRAPH
+0x90AC 0x6210 #CJK UNIFIED IDEOGRAPH
+0x90AD 0x653F #CJK UNIFIED IDEOGRAPH
+0x90AE 0x6574 #CJK UNIFIED IDEOGRAPH
+0x90AF 0x661F #CJK UNIFIED IDEOGRAPH
+0x90B0 0x6674 #CJK UNIFIED IDEOGRAPH
+0x90B1 0x68F2 #CJK UNIFIED IDEOGRAPH
+0x90B2 0x6816 #CJK UNIFIED IDEOGRAPH
+0x90B3 0x6B63 #CJK UNIFIED IDEOGRAPH
+0x90B4 0x6E05 #CJK UNIFIED IDEOGRAPH
+0x90B5 0x7272 #CJK UNIFIED IDEOGRAPH
+0x90B6 0x751F #CJK UNIFIED IDEOGRAPH
+0x90B7 0x76DB #CJK UNIFIED IDEOGRAPH
+0x90B8 0x7CBE #CJK UNIFIED IDEOGRAPH
+0x90B9 0x8056 #CJK UNIFIED IDEOGRAPH
+0x90BA 0x58F0 #CJK UNIFIED IDEOGRAPH
+0x90BB 0x88FD #CJK UNIFIED IDEOGRAPH
+0x90BC 0x897F #CJK UNIFIED IDEOGRAPH
+0x90BD 0x8AA0 #CJK UNIFIED IDEOGRAPH
+0x90BE 0x8A93 #CJK UNIFIED IDEOGRAPH
+0x90BF 0x8ACB #CJK UNIFIED IDEOGRAPH
+0x90C0 0x901D #CJK UNIFIED IDEOGRAPH
+0x90C1 0x9192 #CJK UNIFIED IDEOGRAPH
+0x90C2 0x9752 #CJK UNIFIED IDEOGRAPH
+0x90C3 0x9759 #CJK UNIFIED IDEOGRAPH
+0x90C4 0x6589 #CJK UNIFIED IDEOGRAPH
+0x90C5 0x7A0E #CJK UNIFIED IDEOGRAPH
+0x90C6 0x8106 #CJK UNIFIED IDEOGRAPH
+0x90C7 0x96BB #CJK UNIFIED IDEOGRAPH
+0x90C8 0x5E2D #CJK UNIFIED IDEOGRAPH
+0x90C9 0x60DC #CJK UNIFIED IDEOGRAPH
+0x90CA 0x621A #CJK UNIFIED IDEOGRAPH
+0x90CB 0x65A5 #CJK UNIFIED IDEOGRAPH
+0x90CC 0x6614 #CJK UNIFIED IDEOGRAPH
+0x90CD 0x6790 #CJK UNIFIED IDEOGRAPH
+0x90CE 0x77F3 #CJK UNIFIED IDEOGRAPH
+0x90CF 0x7A4D #CJK UNIFIED IDEOGRAPH
+0x90D0 0x7C4D #CJK UNIFIED IDEOGRAPH
+0x90D1 0x7E3E #CJK UNIFIED IDEOGRAPH
+0x90D2 0x810A #CJK UNIFIED IDEOGRAPH
+0x90D3 0x8CAC #CJK UNIFIED IDEOGRAPH
+0x90D4 0x8D64 #CJK UNIFIED IDEOGRAPH
+0x90D5 0x8DE1 #CJK UNIFIED IDEOGRAPH
+0x90D6 0x8E5F #CJK UNIFIED IDEOGRAPH
+0x90D7 0x78A9 #CJK UNIFIED IDEOGRAPH
+0x90D8 0x5207 #CJK UNIFIED IDEOGRAPH
+0x90D9 0x62D9 #CJK UNIFIED IDEOGRAPH
+0x90DA 0x63A5 #CJK UNIFIED IDEOGRAPH
+0x90DB 0x6442 #CJK UNIFIED IDEOGRAPH
+0x90DC 0x6298 #CJK UNIFIED IDEOGRAPH
+0x90DD 0x8A2D #CJK UNIFIED IDEOGRAPH
+0x90DE 0x7A83 #CJK UNIFIED IDEOGRAPH
+0x90DF 0x7BC0 #CJK UNIFIED IDEOGRAPH
+0x90E0 0x8AAC #CJK UNIFIED IDEOGRAPH
+0x90E1 0x96EA #CJK UNIFIED IDEOGRAPH
+0x90E2 0x7D76 #CJK UNIFIED IDEOGRAPH
+0x90E3 0x820C #CJK UNIFIED IDEOGRAPH
+0x90E4 0x8749 #CJK UNIFIED IDEOGRAPH
+0x90E5 0x4ED9 #CJK UNIFIED IDEOGRAPH
+0x90E6 0x5148 #CJK UNIFIED IDEOGRAPH
+0x90E7 0x5343 #CJK UNIFIED IDEOGRAPH
+0x90E8 0x5360 #CJK UNIFIED IDEOGRAPH
+0x90E9 0x5BA3 #CJK UNIFIED IDEOGRAPH
+0x90EA 0x5C02 #CJK UNIFIED IDEOGRAPH
+0x90EB 0x5C16 #CJK UNIFIED IDEOGRAPH
+0x90EC 0x5DDD #CJK UNIFIED IDEOGRAPH
+0x90ED 0x6226 #CJK UNIFIED IDEOGRAPH
+0x90EE 0x6247 #CJK UNIFIED IDEOGRAPH
+0x90EF 0x64B0 #CJK UNIFIED IDEOGRAPH
+0x90F0 0x6813 #CJK UNIFIED IDEOGRAPH
+0x90F1 0x6834 #CJK UNIFIED IDEOGRAPH
+0x90F2 0x6CC9 #CJK UNIFIED IDEOGRAPH
+0x90F3 0x6D45 #CJK UNIFIED IDEOGRAPH
+0x90F4 0x6D17 #CJK UNIFIED IDEOGRAPH
+0x90F5 0x67D3 #CJK UNIFIED IDEOGRAPH
+0x90F6 0x6F5C #CJK UNIFIED IDEOGRAPH
+0x90F7 0x714E #CJK UNIFIED IDEOGRAPH
+0x90F8 0x717D #CJK UNIFIED IDEOGRAPH
+0x90F9 0x65CB #CJK UNIFIED IDEOGRAPH
+0x90FA 0x7A7F #CJK UNIFIED IDEOGRAPH
+0x90FB 0x7BAD #CJK UNIFIED IDEOGRAPH
+0x90FC 0x7DDA #CJK UNIFIED IDEOGRAPH
+0x9140 0x7E4A #CJK UNIFIED IDEOGRAPH
+0x9141 0x7FA8 #CJK UNIFIED IDEOGRAPH
+0x9142 0x817A #CJK UNIFIED IDEOGRAPH
+0x9143 0x821B #CJK UNIFIED IDEOGRAPH
+0x9144 0x8239 #CJK UNIFIED IDEOGRAPH
+0x9145 0x85A6 #CJK UNIFIED IDEOGRAPH
+0x9146 0x8A6E #CJK UNIFIED IDEOGRAPH
+0x9147 0x8CCE #CJK UNIFIED IDEOGRAPH
+0x9148 0x8DF5 #CJK UNIFIED IDEOGRAPH
+0x9149 0x9078 #CJK UNIFIED IDEOGRAPH
+0x914A 0x9077 #CJK UNIFIED IDEOGRAPH
+0x914B 0x92AD #CJK UNIFIED IDEOGRAPH
+0x914C 0x9291 #CJK UNIFIED IDEOGRAPH
+0x914D 0x9583 #CJK UNIFIED IDEOGRAPH
+0x914E 0x9BAE #CJK UNIFIED IDEOGRAPH
+0x914F 0x524D #CJK UNIFIED IDEOGRAPH
+0x9150 0x5584 #CJK UNIFIED IDEOGRAPH
+0x9151 0x6F38 #CJK UNIFIED IDEOGRAPH
+0x9152 0x7136 #CJK UNIFIED IDEOGRAPH
+0x9153 0x5168 #CJK UNIFIED IDEOGRAPH
+0x9154 0x7985 #CJK UNIFIED IDEOGRAPH
+0x9155 0x7E55 #CJK UNIFIED IDEOGRAPH
+0x9156 0x81B3 #CJK UNIFIED IDEOGRAPH
+0x9157 0x7CCE #CJK UNIFIED IDEOGRAPH
+0x9158 0x564C #CJK UNIFIED IDEOGRAPH
+0x9159 0x5851 #CJK UNIFIED IDEOGRAPH
+0x915A 0x5CA8 #CJK UNIFIED IDEOGRAPH
+0x915B 0x63AA #CJK UNIFIED IDEOGRAPH
+0x915C 0x66FE #CJK UNIFIED IDEOGRAPH
+0x915D 0x66FD #CJK UNIFIED IDEOGRAPH
+0x915E 0x695A #CJK UNIFIED IDEOGRAPH
+0x915F 0x72D9 #CJK UNIFIED IDEOGRAPH
+0x9160 0x758F #CJK UNIFIED IDEOGRAPH
+0x9161 0x758E #CJK UNIFIED IDEOGRAPH
+0x9162 0x790E #CJK UNIFIED IDEOGRAPH
+0x9163 0x7956 #CJK UNIFIED IDEOGRAPH
+0x9164 0x79DF #CJK UNIFIED IDEOGRAPH
+0x9165 0x7C97 #CJK UNIFIED IDEOGRAPH
+0x9166 0x7D20 #CJK UNIFIED IDEOGRAPH
+0x9167 0x7D44 #CJK UNIFIED IDEOGRAPH
+0x9168 0x8607 #CJK UNIFIED IDEOGRAPH
+0x9169 0x8A34 #CJK UNIFIED IDEOGRAPH
+0x916A 0x963B #CJK UNIFIED IDEOGRAPH
+0x916B 0x9061 #CJK UNIFIED IDEOGRAPH
+0x916C 0x9F20 #CJK UNIFIED IDEOGRAPH
+0x916D 0x50E7 #CJK UNIFIED IDEOGRAPH
+0x916E 0x5275 #CJK UNIFIED IDEOGRAPH
+0x916F 0x53CC #CJK UNIFIED IDEOGRAPH
+0x9170 0x53E2 #CJK UNIFIED IDEOGRAPH
+0x9171 0x5009 #CJK UNIFIED IDEOGRAPH
+0x9172 0x55AA #CJK UNIFIED IDEOGRAPH
+0x9173 0x58EE #CJK UNIFIED IDEOGRAPH
+0x9174 0x594F #CJK UNIFIED IDEOGRAPH
+0x9175 0x723D #CJK UNIFIED IDEOGRAPH
+0x9176 0x5B8B #CJK UNIFIED IDEOGRAPH
+0x9177 0x5C64 #CJK UNIFIED IDEOGRAPH
+0x9178 0x531D #CJK UNIFIED IDEOGRAPH
+0x9179 0x60E3 #CJK UNIFIED IDEOGRAPH
+0x917A 0x60F3 #CJK UNIFIED IDEOGRAPH
+0x917B 0x635C #CJK UNIFIED IDEOGRAPH
+0x917C 0x6383 #CJK UNIFIED IDEOGRAPH
+0x917D 0x633F #CJK UNIFIED IDEOGRAPH
+0x917E 0x63BB #CJK UNIFIED IDEOGRAPH
+0x9180 0x64CD #CJK UNIFIED IDEOGRAPH
+0x9181 0x65E9 #CJK UNIFIED IDEOGRAPH
+0x9182 0x66F9 #CJK UNIFIED IDEOGRAPH
+0x9183 0x5DE3 #CJK UNIFIED IDEOGRAPH
+0x9184 0x69CD #CJK UNIFIED IDEOGRAPH
+0x9185 0x69FD #CJK UNIFIED IDEOGRAPH
+0x9186 0x6F15 #CJK UNIFIED IDEOGRAPH
+0x9187 0x71E5 #CJK UNIFIED IDEOGRAPH
+0x9188 0x4E89 #CJK UNIFIED IDEOGRAPH
+0x9189 0x75E9 #CJK UNIFIED IDEOGRAPH
+0x918A 0x76F8 #CJK UNIFIED IDEOGRAPH
+0x918B 0x7A93 #CJK UNIFIED IDEOGRAPH
+0x918C 0x7CDF #CJK UNIFIED IDEOGRAPH
+0x918D 0x7DCF #CJK UNIFIED IDEOGRAPH
+0x918E 0x7D9C #CJK UNIFIED IDEOGRAPH
+0x918F 0x8061 #CJK UNIFIED IDEOGRAPH
+0x9190 0x8349 #CJK UNIFIED IDEOGRAPH
+0x9191 0x8358 #CJK UNIFIED IDEOGRAPH
+0x9192 0x846C #CJK UNIFIED IDEOGRAPH
+0x9193 0x84BC #CJK UNIFIED IDEOGRAPH
+0x9194 0x85FB #CJK UNIFIED IDEOGRAPH
+0x9195 0x88C5 #CJK UNIFIED IDEOGRAPH
+0x9196 0x8D70 #CJK UNIFIED IDEOGRAPH
+0x9197 0x9001 #CJK UNIFIED IDEOGRAPH
+0x9198 0x906D #CJK UNIFIED IDEOGRAPH
+0x9199 0x9397 #CJK UNIFIED IDEOGRAPH
+0x919A 0x971C #CJK UNIFIED IDEOGRAPH
+0x919B 0x9A12 #CJK UNIFIED IDEOGRAPH
+0x919C 0x50CF #CJK UNIFIED IDEOGRAPH
+0x919D 0x5897 #CJK UNIFIED IDEOGRAPH
+0x919E 0x618E #CJK UNIFIED IDEOGRAPH
+0x919F 0x81D3 #CJK UNIFIED IDEOGRAPH
+0x91A0 0x8535 #CJK UNIFIED IDEOGRAPH
+0x91A1 0x8D08 #CJK UNIFIED IDEOGRAPH
+0x91A2 0x9020 #CJK UNIFIED IDEOGRAPH
+0x91A3 0x4FC3 #CJK UNIFIED IDEOGRAPH
+0x91A4 0x5074 #CJK UNIFIED IDEOGRAPH
+0x91A5 0x5247 #CJK UNIFIED IDEOGRAPH
+0x91A6 0x5373 #CJK UNIFIED IDEOGRAPH
+0x91A7 0x606F #CJK UNIFIED IDEOGRAPH
+0x91A8 0x6349 #CJK UNIFIED IDEOGRAPH
+0x91A9 0x675F #CJK UNIFIED IDEOGRAPH
+0x91AA 0x6E2C #CJK UNIFIED IDEOGRAPH
+0x91AB 0x8DB3 #CJK UNIFIED IDEOGRAPH
+0x91AC 0x901F #CJK UNIFIED IDEOGRAPH
+0x91AD 0x4FD7 #CJK UNIFIED IDEOGRAPH
+0x91AE 0x5C5E #CJK UNIFIED IDEOGRAPH
+0x91AF 0x8CCA #CJK UNIFIED IDEOGRAPH
+0x91B0 0x65CF #CJK UNIFIED IDEOGRAPH
+0x91B1 0x7D9A #CJK UNIFIED IDEOGRAPH
+0x91B2 0x5352 #CJK UNIFIED IDEOGRAPH
+0x91B3 0x8896 #CJK UNIFIED IDEOGRAPH
+0x91B4 0x5176 #CJK UNIFIED IDEOGRAPH
+0x91B5 0x63C3 #CJK UNIFIED IDEOGRAPH
+0x91B6 0x5B58 #CJK UNIFIED IDEOGRAPH
+0x91B7 0x5B6B #CJK UNIFIED IDEOGRAPH
+0x91B8 0x5C0A #CJK UNIFIED IDEOGRAPH
+0x91B9 0x640D #CJK UNIFIED IDEOGRAPH
+0x91BA 0x6751 #CJK UNIFIED IDEOGRAPH
+0x91BB 0x905C #CJK UNIFIED IDEOGRAPH
+0x91BC 0x4ED6 #CJK UNIFIED IDEOGRAPH
+0x91BD 0x591A #CJK UNIFIED IDEOGRAPH
+0x91BE 0x592A #CJK UNIFIED IDEOGRAPH
+0x91BF 0x6C70 #CJK UNIFIED IDEOGRAPH
+0x91C0 0x8A51 #CJK UNIFIED IDEOGRAPH
+0x91C1 0x553E #CJK UNIFIED IDEOGRAPH
+0x91C2 0x5815 #CJK UNIFIED IDEOGRAPH
+0x91C3 0x59A5 #CJK UNIFIED IDEOGRAPH
+0x91C4 0x60F0 #CJK UNIFIED IDEOGRAPH
+0x91C5 0x6253 #CJK UNIFIED IDEOGRAPH
+0x91C6 0x67C1 #CJK UNIFIED IDEOGRAPH
+0x91C7 0x8235 #CJK UNIFIED IDEOGRAPH
+0x91C8 0x6955 #CJK UNIFIED IDEOGRAPH
+0x91C9 0x9640 #CJK UNIFIED IDEOGRAPH
+0x91CA 0x99C4 #CJK UNIFIED IDEOGRAPH
+0x91CB 0x9A28 #CJK UNIFIED IDEOGRAPH
+0x91CC 0x4F53 #CJK UNIFIED IDEOGRAPH
+0x91CD 0x5806 #CJK UNIFIED IDEOGRAPH
+0x91CE 0x5BFE #CJK UNIFIED IDEOGRAPH
+0x91CF 0x8010 #CJK UNIFIED IDEOGRAPH
+0x91D0 0x5CB1 #CJK UNIFIED IDEOGRAPH
+0x91D1 0x5E2F #CJK UNIFIED IDEOGRAPH
+0x91D2 0x5F85 #CJK UNIFIED IDEOGRAPH
+0x91D3 0x6020 #CJK UNIFIED IDEOGRAPH
+0x91D4 0x614B #CJK UNIFIED IDEOGRAPH
+0x91D5 0x6234 #CJK UNIFIED IDEOGRAPH
+0x91D6 0x66FF #CJK UNIFIED IDEOGRAPH
+0x91D7 0x6CF0 #CJK UNIFIED IDEOGRAPH
+0x91D8 0x6EDE #CJK UNIFIED IDEOGRAPH
+0x91D9 0x80CE #CJK UNIFIED IDEOGRAPH
+0x91DA 0x817F #CJK UNIFIED IDEOGRAPH
+0x91DB 0x82D4 #CJK UNIFIED IDEOGRAPH
+0x91DC 0x888B #CJK UNIFIED IDEOGRAPH
+0x91DD 0x8CB8 #CJK UNIFIED IDEOGRAPH
+0x91DE 0x9000 #CJK UNIFIED IDEOGRAPH
+0x91DF 0x902E #CJK UNIFIED IDEOGRAPH
+0x91E0 0x968A #CJK UNIFIED IDEOGRAPH
+0x91E1 0x9EDB #CJK UNIFIED IDEOGRAPH
+0x91E2 0x9BDB #CJK UNIFIED IDEOGRAPH
+0x91E3 0x4EE3 #CJK UNIFIED IDEOGRAPH
+0x91E4 0x53F0 #CJK UNIFIED IDEOGRAPH
+0x91E5 0x5927 #CJK UNIFIED IDEOGRAPH
+0x91E6 0x7B2C #CJK UNIFIED IDEOGRAPH
+0x91E7 0x918D #CJK UNIFIED IDEOGRAPH
+0x91E8 0x984C #CJK UNIFIED IDEOGRAPH
+0x91E9 0x9DF9 #CJK UNIFIED IDEOGRAPH
+0x91EA 0x6EDD #CJK UNIFIED IDEOGRAPH
+0x91EB 0x7027 #CJK UNIFIED IDEOGRAPH
+0x91EC 0x5353 #CJK UNIFIED IDEOGRAPH
+0x91ED 0x5544 #CJK UNIFIED IDEOGRAPH
+0x91EE 0x5B85 #CJK UNIFIED IDEOGRAPH
+0x91EF 0x6258 #CJK UNIFIED IDEOGRAPH
+0x91F0 0x629E #CJK UNIFIED IDEOGRAPH
+0x91F1 0x62D3 #CJK UNIFIED IDEOGRAPH
+0x91F2 0x6CA2 #CJK UNIFIED IDEOGRAPH
+0x91F3 0x6FEF #CJK UNIFIED IDEOGRAPH
+0x91F4 0x7422 #CJK UNIFIED IDEOGRAPH
+0x91F5 0x8A17 #CJK UNIFIED IDEOGRAPH
+0x91F6 0x9438 #CJK UNIFIED IDEOGRAPH
+0x91F7 0x6FC1 #CJK UNIFIED IDEOGRAPH
+0x91F8 0x8AFE #CJK UNIFIED IDEOGRAPH
+0x91F9 0x8338 #CJK UNIFIED IDEOGRAPH
+0x91FA 0x51E7 #CJK UNIFIED IDEOGRAPH
+0x91FB 0x86F8 #CJK UNIFIED IDEOGRAPH
+0x91FC 0x53EA #CJK UNIFIED IDEOGRAPH
+0x9240 0x53E9 #CJK UNIFIED IDEOGRAPH
+0x9241 0x4F46 #CJK UNIFIED IDEOGRAPH
+0x9242 0x9054 #CJK UNIFIED IDEOGRAPH
+0x9243 0x8FB0 #CJK UNIFIED IDEOGRAPH
+0x9244 0x596A #CJK UNIFIED IDEOGRAPH
+0x9245 0x8131 #CJK UNIFIED IDEOGRAPH
+0x9246 0x5DFD #CJK UNIFIED IDEOGRAPH
+0x9247 0x7AEA #CJK UNIFIED IDEOGRAPH
+0x9248 0x8FBF #CJK UNIFIED IDEOGRAPH
+0x9249 0x68DA #CJK UNIFIED IDEOGRAPH
+0x924A 0x8C37 #CJK UNIFIED IDEOGRAPH
+0x924B 0x72F8 #CJK UNIFIED IDEOGRAPH
+0x924C 0x9C48 #CJK UNIFIED IDEOGRAPH
+0x924D 0x6A3D #CJK UNIFIED IDEOGRAPH
+0x924E 0x8AB0 #CJK UNIFIED IDEOGRAPH
+0x924F 0x4E39 #CJK UNIFIED IDEOGRAPH
+0x9250 0x5358 #CJK UNIFIED IDEOGRAPH
+0x9251 0x5606 #CJK UNIFIED IDEOGRAPH
+0x9252 0x5766 #CJK UNIFIED IDEOGRAPH
+0x9253 0x62C5 #CJK UNIFIED IDEOGRAPH
+0x9254 0x63A2 #CJK UNIFIED IDEOGRAPH
+0x9255 0x65E6 #CJK UNIFIED IDEOGRAPH
+0x9256 0x6B4E #CJK UNIFIED IDEOGRAPH
+0x9257 0x6DE1 #CJK UNIFIED IDEOGRAPH
+0x9258 0x6E5B #CJK UNIFIED IDEOGRAPH
+0x9259 0x70AD #CJK UNIFIED IDEOGRAPH
+0x925A 0x77ED #CJK UNIFIED IDEOGRAPH
+0x925B 0x7AEF #CJK UNIFIED IDEOGRAPH
+0x925C 0x7BAA #CJK UNIFIED IDEOGRAPH
+0x925D 0x7DBB #CJK UNIFIED IDEOGRAPH
+0x925E 0x803D #CJK UNIFIED IDEOGRAPH
+0x925F 0x80C6 #CJK UNIFIED IDEOGRAPH
+0x9260 0x86CB #CJK UNIFIED IDEOGRAPH
+0x9261 0x8A95 #CJK UNIFIED IDEOGRAPH
+0x9262 0x935B #CJK UNIFIED IDEOGRAPH
+0x9263 0x56E3 #CJK UNIFIED IDEOGRAPH
+0x9264 0x58C7 #CJK UNIFIED IDEOGRAPH
+0x9265 0x5F3E #CJK UNIFIED IDEOGRAPH
+0x9266 0x65AD #CJK UNIFIED IDEOGRAPH
+0x9267 0x6696 #CJK UNIFIED IDEOGRAPH
+0x9268 0x6A80 #CJK UNIFIED IDEOGRAPH
+0x9269 0x6BB5 #CJK UNIFIED IDEOGRAPH
+0x926A 0x7537 #CJK UNIFIED IDEOGRAPH
+0x926B 0x8AC7 #CJK UNIFIED IDEOGRAPH
+0x926C 0x5024 #CJK UNIFIED IDEOGRAPH
+0x926D 0x77E5 #CJK UNIFIED IDEOGRAPH
+0x926E 0x5730 #CJK UNIFIED IDEOGRAPH
+0x926F 0x5F1B #CJK UNIFIED IDEOGRAPH
+0x9270 0x6065 #CJK UNIFIED IDEOGRAPH
+0x9271 0x667A #CJK UNIFIED IDEOGRAPH
+0x9272 0x6C60 #CJK UNIFIED IDEOGRAPH
+0x9273 0x75F4 #CJK UNIFIED IDEOGRAPH
+0x9274 0x7A1A #CJK UNIFIED IDEOGRAPH
+0x9275 0x7F6E #CJK UNIFIED IDEOGRAPH
+0x9276 0x81F4 #CJK UNIFIED IDEOGRAPH
+0x9277 0x8718 #CJK UNIFIED IDEOGRAPH
+0x9278 0x9045 #CJK UNIFIED IDEOGRAPH
+0x9279 0x99B3 #CJK UNIFIED IDEOGRAPH
+0x927A 0x7BC9 #CJK UNIFIED IDEOGRAPH
+0x927B 0x755C #CJK UNIFIED IDEOGRAPH
+0x927C 0x7AF9 #CJK UNIFIED IDEOGRAPH
+0x927D 0x7B51 #CJK UNIFIED IDEOGRAPH
+0x927E 0x84C4 #CJK UNIFIED IDEOGRAPH
+0x9280 0x9010 #CJK UNIFIED IDEOGRAPH
+0x9281 0x79E9 #CJK UNIFIED IDEOGRAPH
+0x9282 0x7A92 #CJK UNIFIED IDEOGRAPH
+0x9283 0x8336 #CJK UNIFIED IDEOGRAPH
+0x9284 0x5AE1 #CJK UNIFIED IDEOGRAPH
+0x9285 0x7740 #CJK UNIFIED IDEOGRAPH
+0x9286 0x4E2D #CJK UNIFIED IDEOGRAPH
+0x9287 0x4EF2 #CJK UNIFIED IDEOGRAPH
+0x9288 0x5B99 #CJK UNIFIED IDEOGRAPH
+0x9289 0x5FE0 #CJK UNIFIED IDEOGRAPH
+0x928A 0x62BD #CJK UNIFIED IDEOGRAPH
+0x928B 0x663C #CJK UNIFIED IDEOGRAPH
+0x928C 0x67F1 #CJK UNIFIED IDEOGRAPH
+0x928D 0x6CE8 #CJK UNIFIED IDEOGRAPH
+0x928E 0x866B #CJK UNIFIED IDEOGRAPH
+0x928F 0x8877 #CJK UNIFIED IDEOGRAPH
+0x9290 0x8A3B #CJK UNIFIED IDEOGRAPH
+0x9291 0x914E #CJK UNIFIED IDEOGRAPH
+0x9292 0x92F3 #CJK UNIFIED IDEOGRAPH
+0x9293 0x99D0 #CJK UNIFIED IDEOGRAPH
+0x9294 0x6A17 #CJK UNIFIED IDEOGRAPH
+0x9295 0x7026 #CJK UNIFIED IDEOGRAPH
+0x9296 0x732A #CJK UNIFIED IDEOGRAPH
+0x9297 0x82E7 #CJK UNIFIED IDEOGRAPH
+0x9298 0x8457 #CJK UNIFIED IDEOGRAPH
+0x9299 0x8CAF #CJK UNIFIED IDEOGRAPH
+0x929A 0x4E01 #CJK UNIFIED IDEOGRAPH
+0x929B 0x5146 #CJK UNIFIED IDEOGRAPH
+0x929C 0x51CB #CJK UNIFIED IDEOGRAPH
+0x929D 0x558B #CJK UNIFIED IDEOGRAPH
+0x929E 0x5BF5 #CJK UNIFIED IDEOGRAPH
+0x929F 0x5E16 #CJK UNIFIED IDEOGRAPH
+0x92A0 0x5E33 #CJK UNIFIED IDEOGRAPH
+0x92A1 0x5E81 #CJK UNIFIED IDEOGRAPH
+0x92A2 0x5F14 #CJK UNIFIED IDEOGRAPH
+0x92A3 0x5F35 #CJK UNIFIED IDEOGRAPH
+0x92A4 0x5F6B #CJK UNIFIED IDEOGRAPH
+0x92A5 0x5FB4 #CJK UNIFIED IDEOGRAPH
+0x92A6 0x61F2 #CJK UNIFIED IDEOGRAPH
+0x92A7 0x6311 #CJK UNIFIED IDEOGRAPH
+0x92A8 0x66A2 #CJK UNIFIED IDEOGRAPH
+0x92A9 0x671D #CJK UNIFIED IDEOGRAPH
+0x92AA 0x6F6E #CJK UNIFIED IDEOGRAPH
+0x92AB 0x7252 #CJK UNIFIED IDEOGRAPH
+0x92AC 0x753A #CJK UNIFIED IDEOGRAPH
+0x92AD 0x773A #CJK UNIFIED IDEOGRAPH
+0x92AE 0x8074 #CJK UNIFIED IDEOGRAPH
+0x92AF 0x8139 #CJK UNIFIED IDEOGRAPH
+0x92B0 0x8178 #CJK UNIFIED IDEOGRAPH
+0x92B1 0x8776 #CJK UNIFIED IDEOGRAPH
+0x92B2 0x8ABF #CJK UNIFIED IDEOGRAPH
+0x92B3 0x8ADC #CJK UNIFIED IDEOGRAPH
+0x92B4 0x8D85 #CJK UNIFIED IDEOGRAPH
+0x92B5 0x8DF3 #CJK UNIFIED IDEOGRAPH
+0x92B6 0x929A #CJK UNIFIED IDEOGRAPH
+0x92B7 0x9577 #CJK UNIFIED IDEOGRAPH
+0x92B8 0x9802 #CJK UNIFIED IDEOGRAPH
+0x92B9 0x9CE5 #CJK UNIFIED IDEOGRAPH
+0x92BA 0x52C5 #CJK UNIFIED IDEOGRAPH
+0x92BB 0x6357 #CJK UNIFIED IDEOGRAPH
+0x92BC 0x76F4 #CJK UNIFIED IDEOGRAPH
+0x92BD 0x6715 #CJK UNIFIED IDEOGRAPH
+0x92BE 0x6C88 #CJK UNIFIED IDEOGRAPH
+0x92BF 0x73CD #CJK UNIFIED IDEOGRAPH
+0x92C0 0x8CC3 #CJK UNIFIED IDEOGRAPH
+0x92C1 0x93AE #CJK UNIFIED IDEOGRAPH
+0x92C2 0x9673 #CJK UNIFIED IDEOGRAPH
+0x92C3 0x6D25 #CJK UNIFIED IDEOGRAPH
+0x92C4 0x589C #CJK UNIFIED IDEOGRAPH
+0x92C5 0x690E #CJK UNIFIED IDEOGRAPH
+0x92C6 0x69CC #CJK UNIFIED IDEOGRAPH
+0x92C7 0x8FFD #CJK UNIFIED IDEOGRAPH
+0x92C8 0x939A #CJK UNIFIED IDEOGRAPH
+0x92C9 0x75DB #CJK UNIFIED IDEOGRAPH
+0x92CA 0x901A #CJK UNIFIED IDEOGRAPH
+0x92CB 0x585A #CJK UNIFIED IDEOGRAPH
+0x92CC 0x6802 #CJK UNIFIED IDEOGRAPH
+0x92CD 0x63B4 #CJK UNIFIED IDEOGRAPH
+0x92CE 0x69FB #CJK UNIFIED IDEOGRAPH
+0x92CF 0x4F43 #CJK UNIFIED IDEOGRAPH
+0x92D0 0x6F2C #CJK UNIFIED IDEOGRAPH
+0x92D1 0x67D8 #CJK UNIFIED IDEOGRAPH
+0x92D2 0x8FBB #CJK UNIFIED IDEOGRAPH
+0x92D3 0x8526 #CJK UNIFIED IDEOGRAPH
+0x92D4 0x7DB4 #CJK UNIFIED IDEOGRAPH
+0x92D5 0x9354 #CJK UNIFIED IDEOGRAPH
+0x92D6 0x693F #CJK UNIFIED IDEOGRAPH
+0x92D7 0x6F70 #CJK UNIFIED IDEOGRAPH
+0x92D8 0x576A #CJK UNIFIED IDEOGRAPH
+0x92D9 0x58F7 #CJK UNIFIED IDEOGRAPH
+0x92DA 0x5B2C #CJK UNIFIED IDEOGRAPH
+0x92DB 0x7D2C #CJK UNIFIED IDEOGRAPH
+0x92DC 0x722A #CJK UNIFIED IDEOGRAPH
+0x92DD 0x540A #CJK UNIFIED IDEOGRAPH
+0x92DE 0x91E3 #CJK UNIFIED IDEOGRAPH
+0x92DF 0x9DB4 #CJK UNIFIED IDEOGRAPH
+0x92E0 0x4EAD #CJK UNIFIED IDEOGRAPH
+0x92E1 0x4F4E #CJK UNIFIED IDEOGRAPH
+0x92E2 0x505C #CJK UNIFIED IDEOGRAPH
+0x92E3 0x5075 #CJK UNIFIED IDEOGRAPH
+0x92E4 0x5243 #CJK UNIFIED IDEOGRAPH
+0x92E5 0x8C9E #CJK UNIFIED IDEOGRAPH
+0x92E6 0x5448 #CJK UNIFIED IDEOGRAPH
+0x92E7 0x5824 #CJK UNIFIED IDEOGRAPH
+0x92E8 0x5B9A #CJK UNIFIED IDEOGRAPH
+0x92E9 0x5E1D #CJK UNIFIED IDEOGRAPH
+0x92EA 0x5E95 #CJK UNIFIED IDEOGRAPH
+0x92EB 0x5EAD #CJK UNIFIED IDEOGRAPH
+0x92EC 0x5EF7 #CJK UNIFIED IDEOGRAPH
+0x92ED 0x5F1F #CJK UNIFIED IDEOGRAPH
+0x92EE 0x608C #CJK UNIFIED IDEOGRAPH
+0x92EF 0x62B5 #CJK UNIFIED IDEOGRAPH
+0x92F0 0x633A #CJK UNIFIED IDEOGRAPH
+0x92F1 0x63D0 #CJK UNIFIED IDEOGRAPH
+0x92F2 0x68AF #CJK UNIFIED IDEOGRAPH
+0x92F3 0x6C40 #CJK UNIFIED IDEOGRAPH
+0x92F4 0x7887 #CJK UNIFIED IDEOGRAPH
+0x92F5 0x798E #CJK UNIFIED IDEOGRAPH
+0x92F6 0x7A0B #CJK UNIFIED IDEOGRAPH
+0x92F7 0x7DE0 #CJK UNIFIED IDEOGRAPH
+0x92F8 0x8247 #CJK UNIFIED IDEOGRAPH
+0x92F9 0x8A02 #CJK UNIFIED IDEOGRAPH
+0x92FA 0x8AE6 #CJK UNIFIED IDEOGRAPH
+0x92FB 0x8E44 #CJK UNIFIED IDEOGRAPH
+0x92FC 0x9013 #CJK UNIFIED IDEOGRAPH
+0x9340 0x90B8 #CJK UNIFIED IDEOGRAPH
+0x9341 0x912D #CJK UNIFIED IDEOGRAPH
+0x9342 0x91D8 #CJK UNIFIED IDEOGRAPH
+0x9343 0x9F0E #CJK UNIFIED IDEOGRAPH
+0x9344 0x6CE5 #CJK UNIFIED IDEOGRAPH
+0x9345 0x6458 #CJK UNIFIED IDEOGRAPH
+0x9346 0x64E2 #CJK UNIFIED IDEOGRAPH
+0x9347 0x6575 #CJK UNIFIED IDEOGRAPH
+0x9348 0x6EF4 #CJK UNIFIED IDEOGRAPH
+0x9349 0x7684 #CJK UNIFIED IDEOGRAPH
+0x934A 0x7B1B #CJK UNIFIED IDEOGRAPH
+0x934B 0x9069 #CJK UNIFIED IDEOGRAPH
+0x934C 0x93D1 #CJK UNIFIED IDEOGRAPH
+0x934D 0x6EBA #CJK UNIFIED IDEOGRAPH
+0x934E 0x54F2 #CJK UNIFIED IDEOGRAPH
+0x934F 0x5FB9 #CJK UNIFIED IDEOGRAPH
+0x9350 0x64A4 #CJK UNIFIED IDEOGRAPH
+0x9351 0x8F4D #CJK UNIFIED IDEOGRAPH
+0x9352 0x8FED #CJK UNIFIED IDEOGRAPH
+0x9353 0x9244 #CJK UNIFIED IDEOGRAPH
+0x9354 0x5178 #CJK UNIFIED IDEOGRAPH
+0x9355 0x586B #CJK UNIFIED IDEOGRAPH
+0x9356 0x5929 #CJK UNIFIED IDEOGRAPH
+0x9357 0x5C55 #CJK UNIFIED IDEOGRAPH
+0x9358 0x5E97 #CJK UNIFIED IDEOGRAPH
+0x9359 0x6DFB #CJK UNIFIED IDEOGRAPH
+0x935A 0x7E8F #CJK UNIFIED IDEOGRAPH
+0x935B 0x751C #CJK UNIFIED IDEOGRAPH
+0x935C 0x8CBC #CJK UNIFIED IDEOGRAPH
+0x935D 0x8EE2 #CJK UNIFIED IDEOGRAPH
+0x935E 0x985B #CJK UNIFIED IDEOGRAPH
+0x935F 0x70B9 #CJK UNIFIED IDEOGRAPH
+0x9360 0x4F1D #CJK UNIFIED IDEOGRAPH
+0x9361 0x6BBF #CJK UNIFIED IDEOGRAPH
+0x9362 0x6FB1 #CJK UNIFIED IDEOGRAPH
+0x9363 0x7530 #CJK UNIFIED IDEOGRAPH
+0x9364 0x96FB #CJK UNIFIED IDEOGRAPH
+0x9365 0x514E #CJK UNIFIED IDEOGRAPH
+0x9366 0x5410 #CJK UNIFIED IDEOGRAPH
+0x9367 0x5835 #CJK UNIFIED IDEOGRAPH
+0x9368 0x5857 #CJK UNIFIED IDEOGRAPH
+0x9369 0x59AC #CJK UNIFIED IDEOGRAPH
+0x936A 0x5C60 #CJK UNIFIED IDEOGRAPH
+0x936B 0x5F92 #CJK UNIFIED IDEOGRAPH
+0x936C 0x6597 #CJK UNIFIED IDEOGRAPH
+0x936D 0x675C #CJK UNIFIED IDEOGRAPH
+0x936E 0x6E21 #CJK UNIFIED IDEOGRAPH
+0x936F 0x767B #CJK UNIFIED IDEOGRAPH
+0x9370 0x83DF #CJK UNIFIED IDEOGRAPH
+0x9371 0x8CED #CJK UNIFIED IDEOGRAPH
+0x9372 0x9014 #CJK UNIFIED IDEOGRAPH
+0x9373 0x90FD #CJK UNIFIED IDEOGRAPH
+0x9374 0x934D #CJK UNIFIED IDEOGRAPH
+0x9375 0x7825 #CJK UNIFIED IDEOGRAPH
+0x9376 0x783A #CJK UNIFIED IDEOGRAPH
+0x9377 0x52AA #CJK UNIFIED IDEOGRAPH
+0x9378 0x5EA6 #CJK UNIFIED IDEOGRAPH
+0x9379 0x571F #CJK UNIFIED IDEOGRAPH
+0x937A 0x5974 #CJK UNIFIED IDEOGRAPH
+0x937B 0x6012 #CJK UNIFIED IDEOGRAPH
+0x937C 0x5012 #CJK UNIFIED IDEOGRAPH
+0x937D 0x515A #CJK UNIFIED IDEOGRAPH
+0x937E 0x51AC #CJK UNIFIED IDEOGRAPH
+0x9380 0x51CD #CJK UNIFIED IDEOGRAPH
+0x9381 0x5200 #CJK UNIFIED IDEOGRAPH
+0x9382 0x5510 #CJK UNIFIED IDEOGRAPH
+0x9383 0x5854 #CJK UNIFIED IDEOGRAPH
+0x9384 0x5858 #CJK UNIFIED IDEOGRAPH
+0x9385 0x5957 #CJK UNIFIED IDEOGRAPH
+0x9386 0x5B95 #CJK UNIFIED IDEOGRAPH
+0x9387 0x5CF6 #CJK UNIFIED IDEOGRAPH
+0x9388 0x5D8B #CJK UNIFIED IDEOGRAPH
+0x9389 0x60BC #CJK UNIFIED IDEOGRAPH
+0x938A 0x6295 #CJK UNIFIED IDEOGRAPH
+0x938B 0x642D #CJK UNIFIED IDEOGRAPH
+0x938C 0x6771 #CJK UNIFIED IDEOGRAPH
+0x938D 0x6843 #CJK UNIFIED IDEOGRAPH
+0x938E 0x68BC #CJK UNIFIED IDEOGRAPH
+0x938F 0x68DF #CJK UNIFIED IDEOGRAPH
+0x9390 0x76D7 #CJK UNIFIED IDEOGRAPH
+0x9391 0x6DD8 #CJK UNIFIED IDEOGRAPH
+0x9392 0x6E6F #CJK UNIFIED IDEOGRAPH
+0x9393 0x6D9B #CJK UNIFIED IDEOGRAPH
+0x9394 0x706F #CJK UNIFIED IDEOGRAPH
+0x9395 0x71C8 #CJK UNIFIED IDEOGRAPH
+0x9396 0x5F53 #CJK UNIFIED IDEOGRAPH
+0x9397 0x75D8 #CJK UNIFIED IDEOGRAPH
+0x9398 0x7977 #CJK UNIFIED IDEOGRAPH
+0x9399 0x7B49 #CJK UNIFIED IDEOGRAPH
+0x939A 0x7B54 #CJK UNIFIED IDEOGRAPH
+0x939B 0x7B52 #CJK UNIFIED IDEOGRAPH
+0x939C 0x7CD6 #CJK UNIFIED IDEOGRAPH
+0x939D 0x7D71 #CJK UNIFIED IDEOGRAPH
+0x939E 0x5230 #CJK UNIFIED IDEOGRAPH
+0x939F 0x8463 #CJK UNIFIED IDEOGRAPH
+0x93A0 0x8569 #CJK UNIFIED IDEOGRAPH
+0x93A1 0x85E4 #CJK UNIFIED IDEOGRAPH
+0x93A2 0x8A0E #CJK UNIFIED IDEOGRAPH
+0x93A3 0x8B04 #CJK UNIFIED IDEOGRAPH
+0x93A4 0x8C46 #CJK UNIFIED IDEOGRAPH
+0x93A5 0x8E0F #CJK UNIFIED IDEOGRAPH
+0x93A6 0x9003 #CJK UNIFIED IDEOGRAPH
+0x93A7 0x900F #CJK UNIFIED IDEOGRAPH
+0x93A8 0x9419 #CJK UNIFIED IDEOGRAPH
+0x93A9 0x9676 #CJK UNIFIED IDEOGRAPH
+0x93AA 0x982D #CJK UNIFIED IDEOGRAPH
+0x93AB 0x9A30 #CJK UNIFIED IDEOGRAPH
+0x93AC 0x95D8 #CJK UNIFIED IDEOGRAPH
+0x93AD 0x50CD #CJK UNIFIED IDEOGRAPH
+0x93AE 0x52D5 #CJK UNIFIED IDEOGRAPH
+0x93AF 0x540C #CJK UNIFIED IDEOGRAPH
+0x93B0 0x5802 #CJK UNIFIED IDEOGRAPH
+0x93B1 0x5C0E #CJK UNIFIED IDEOGRAPH
+0x93B2 0x61A7 #CJK UNIFIED IDEOGRAPH
+0x93B3 0x649E #CJK UNIFIED IDEOGRAPH
+0x93B4 0x6D1E #CJK UNIFIED IDEOGRAPH
+0x93B5 0x77B3 #CJK UNIFIED IDEOGRAPH
+0x93B6 0x7AE5 #CJK UNIFIED IDEOGRAPH
+0x93B7 0x80F4 #CJK UNIFIED IDEOGRAPH
+0x93B8 0x8404 #CJK UNIFIED IDEOGRAPH
+0x93B9 0x9053 #CJK UNIFIED IDEOGRAPH
+0x93BA 0x9285 #CJK UNIFIED IDEOGRAPH
+0x93BB 0x5CE0 #CJK UNIFIED IDEOGRAPH
+0x93BC 0x9D07 #CJK UNIFIED IDEOGRAPH
+0x93BD 0x533F #CJK UNIFIED IDEOGRAPH
+0x93BE 0x5F97 #CJK UNIFIED IDEOGRAPH
+0x93BF 0x5FB3 #CJK UNIFIED IDEOGRAPH
+0x93C0 0x6D9C #CJK UNIFIED IDEOGRAPH
+0x93C1 0x7279 #CJK UNIFIED IDEOGRAPH
+0x93C2 0x7763 #CJK UNIFIED IDEOGRAPH
+0x93C3 0x79BF #CJK UNIFIED IDEOGRAPH
+0x93C4 0x7BE4 #CJK UNIFIED IDEOGRAPH
+0x93C5 0x6BD2 #CJK UNIFIED IDEOGRAPH
+0x93C6 0x72EC #CJK UNIFIED IDEOGRAPH
+0x93C7 0x8AAD #CJK UNIFIED IDEOGRAPH
+0x93C8 0x6803 #CJK UNIFIED IDEOGRAPH
+0x93C9 0x6A61 #CJK UNIFIED IDEOGRAPH
+0x93CA 0x51F8 #CJK UNIFIED IDEOGRAPH
+0x93CB 0x7A81 #CJK UNIFIED IDEOGRAPH
+0x93CC 0x6934 #CJK UNIFIED IDEOGRAPH
+0x93CD 0x5C4A #CJK UNIFIED IDEOGRAPH
+0x93CE 0x9CF6 #CJK UNIFIED IDEOGRAPH
+0x93CF 0x82EB #CJK UNIFIED IDEOGRAPH
+0x93D0 0x5BC5 #CJK UNIFIED IDEOGRAPH
+0x93D1 0x9149 #CJK UNIFIED IDEOGRAPH
+0x93D2 0x701E #CJK UNIFIED IDEOGRAPH
+0x93D3 0x5678 #CJK UNIFIED IDEOGRAPH
+0x93D4 0x5C6F #CJK UNIFIED IDEOGRAPH
+0x93D5 0x60C7 #CJK UNIFIED IDEOGRAPH
+0x93D6 0x6566 #CJK UNIFIED IDEOGRAPH
+0x93D7 0x6C8C #CJK UNIFIED IDEOGRAPH
+0x93D8 0x8C5A #CJK UNIFIED IDEOGRAPH
+0x93D9 0x9041 #CJK UNIFIED IDEOGRAPH
+0x93DA 0x9813 #CJK UNIFIED IDEOGRAPH
+0x93DB 0x5451 #CJK UNIFIED IDEOGRAPH
+0x93DC 0x66C7 #CJK UNIFIED IDEOGRAPH
+0x93DD 0x920D #CJK UNIFIED IDEOGRAPH
+0x93DE 0x5948 #CJK UNIFIED IDEOGRAPH
+0x93DF 0x90A3 #CJK UNIFIED IDEOGRAPH
+0x93E0 0x5185 #CJK UNIFIED IDEOGRAPH
+0x93E1 0x4E4D #CJK UNIFIED IDEOGRAPH
+0x93E2 0x51EA #CJK UNIFIED IDEOGRAPH
+0x93E3 0x8599 #CJK UNIFIED IDEOGRAPH
+0x93E4 0x8B0E #CJK UNIFIED IDEOGRAPH
+0x93E5 0x7058 #CJK UNIFIED IDEOGRAPH
+0x93E6 0x637A #CJK UNIFIED IDEOGRAPH
+0x93E7 0x934B #CJK UNIFIED IDEOGRAPH
+0x93E8 0x6962 #CJK UNIFIED IDEOGRAPH
+0x93E9 0x99B4 #CJK UNIFIED IDEOGRAPH
+0x93EA 0x7E04 #CJK UNIFIED IDEOGRAPH
+0x93EB 0x7577 #CJK UNIFIED IDEOGRAPH
+0x93EC 0x5357 #CJK UNIFIED IDEOGRAPH
+0x93ED 0x6960 #CJK UNIFIED IDEOGRAPH
+0x93EE 0x8EDF #CJK UNIFIED IDEOGRAPH
+0x93EF 0x96E3 #CJK UNIFIED IDEOGRAPH
+0x93F0 0x6C5D #CJK UNIFIED IDEOGRAPH
+0x93F1 0x4E8C #CJK UNIFIED IDEOGRAPH
+0x93F2 0x5C3C #CJK UNIFIED IDEOGRAPH
+0x93F3 0x5F10 #CJK UNIFIED IDEOGRAPH
+0x93F4 0x8FE9 #CJK UNIFIED IDEOGRAPH
+0x93F5 0x5302 #CJK UNIFIED IDEOGRAPH
+0x93F6 0x8CD1 #CJK UNIFIED IDEOGRAPH
+0x93F7 0x8089 #CJK UNIFIED IDEOGRAPH
+0x93F8 0x8679 #CJK UNIFIED IDEOGRAPH
+0x93F9 0x5EFF #CJK UNIFIED IDEOGRAPH
+0x93FA 0x65E5 #CJK UNIFIED IDEOGRAPH
+0x93FB 0x4E73 #CJK UNIFIED IDEOGRAPH
+0x93FC 0x5165 #CJK UNIFIED IDEOGRAPH
+0x9440 0x5982 #CJK UNIFIED IDEOGRAPH
+0x9441 0x5C3F #CJK UNIFIED IDEOGRAPH
+0x9442 0x97EE #CJK UNIFIED IDEOGRAPH
+0x9443 0x4EFB #CJK UNIFIED IDEOGRAPH
+0x9444 0x598A #CJK UNIFIED IDEOGRAPH
+0x9445 0x5FCD #CJK UNIFIED IDEOGRAPH
+0x9446 0x8A8D #CJK UNIFIED IDEOGRAPH
+0x9447 0x6FE1 #CJK UNIFIED IDEOGRAPH
+0x9448 0x79B0 #CJK UNIFIED IDEOGRAPH
+0x9449 0x7962 #CJK UNIFIED IDEOGRAPH
+0x944A 0x5BE7 #CJK UNIFIED IDEOGRAPH
+0x944B 0x8471 #CJK UNIFIED IDEOGRAPH
+0x944C 0x732B #CJK UNIFIED IDEOGRAPH
+0x944D 0x71B1 #CJK UNIFIED IDEOGRAPH
+0x944E 0x5E74 #CJK UNIFIED IDEOGRAPH
+0x944F 0x5FF5 #CJK UNIFIED IDEOGRAPH
+0x9450 0x637B #CJK UNIFIED IDEOGRAPH
+0x9451 0x649A #CJK UNIFIED IDEOGRAPH
+0x9452 0x71C3 #CJK UNIFIED IDEOGRAPH
+0x9453 0x7C98 #CJK UNIFIED IDEOGRAPH
+0x9454 0x4E43 #CJK UNIFIED IDEOGRAPH
+0x9455 0x5EFC #CJK UNIFIED IDEOGRAPH
+0x9456 0x4E4B #CJK UNIFIED IDEOGRAPH
+0x9457 0x57DC #CJK UNIFIED IDEOGRAPH
+0x9458 0x56A2 #CJK UNIFIED IDEOGRAPH
+0x9459 0x60A9 #CJK UNIFIED IDEOGRAPH
+0x945A 0x6FC3 #CJK UNIFIED IDEOGRAPH
+0x945B 0x7D0D #CJK UNIFIED IDEOGRAPH
+0x945C 0x80FD #CJK UNIFIED IDEOGRAPH
+0x945D 0x8133 #CJK UNIFIED IDEOGRAPH
+0x945E 0x81BF #CJK UNIFIED IDEOGRAPH
+0x945F 0x8FB2 #CJK UNIFIED IDEOGRAPH
+0x9460 0x8997 #CJK UNIFIED IDEOGRAPH
+0x9461 0x86A4 #CJK UNIFIED IDEOGRAPH
+0x9462 0x5DF4 #CJK UNIFIED IDEOGRAPH
+0x9463 0x628A #CJK UNIFIED IDEOGRAPH
+0x9464 0x64AD #CJK UNIFIED IDEOGRAPH
+0x9465 0x8987 #CJK UNIFIED IDEOGRAPH
+0x9466 0x6777 #CJK UNIFIED IDEOGRAPH
+0x9467 0x6CE2 #CJK UNIFIED IDEOGRAPH
+0x9468 0x6D3E #CJK UNIFIED IDEOGRAPH
+0x9469 0x7436 #CJK UNIFIED IDEOGRAPH
+0x946A 0x7834 #CJK UNIFIED IDEOGRAPH
+0x946B 0x5A46 #CJK UNIFIED IDEOGRAPH
+0x946C 0x7F75 #CJK UNIFIED IDEOGRAPH
+0x946D 0x82AD #CJK UNIFIED IDEOGRAPH
+0x946E 0x99AC #CJK UNIFIED IDEOGRAPH
+0x946F 0x4FF3 #CJK UNIFIED IDEOGRAPH
+0x9470 0x5EC3 #CJK UNIFIED IDEOGRAPH
+0x9471 0x62DD #CJK UNIFIED IDEOGRAPH
+0x9472 0x6392 #CJK UNIFIED IDEOGRAPH
+0x9473 0x6557 #CJK UNIFIED IDEOGRAPH
+0x9474 0x676F #CJK UNIFIED IDEOGRAPH
+0x9475 0x76C3 #CJK UNIFIED IDEOGRAPH
+0x9476 0x724C #CJK UNIFIED IDEOGRAPH
+0x9477 0x80CC #CJK UNIFIED IDEOGRAPH
+0x9478 0x80BA #CJK UNIFIED IDEOGRAPH
+0x9479 0x8F29 #CJK UNIFIED IDEOGRAPH
+0x947A 0x914D #CJK UNIFIED IDEOGRAPH
+0x947B 0x500D #CJK UNIFIED IDEOGRAPH
+0x947C 0x57F9 #CJK UNIFIED IDEOGRAPH
+0x947D 0x5A92 #CJK UNIFIED IDEOGRAPH
+0x947E 0x6885 #CJK UNIFIED IDEOGRAPH
+0x9480 0x6973 #CJK UNIFIED IDEOGRAPH
+0x9481 0x7164 #CJK UNIFIED IDEOGRAPH
+0x9482 0x72FD #CJK UNIFIED IDEOGRAPH
+0x9483 0x8CB7 #CJK UNIFIED IDEOGRAPH
+0x9484 0x58F2 #CJK UNIFIED IDEOGRAPH
+0x9485 0x8CE0 #CJK UNIFIED IDEOGRAPH
+0x9486 0x966A #CJK UNIFIED IDEOGRAPH
+0x9487 0x9019 #CJK UNIFIED IDEOGRAPH
+0x9488 0x877F #CJK UNIFIED IDEOGRAPH
+0x9489 0x79E4 #CJK UNIFIED IDEOGRAPH
+0x948A 0x77E7 #CJK UNIFIED IDEOGRAPH
+0x948B 0x8429 #CJK UNIFIED IDEOGRAPH
+0x948C 0x4F2F #CJK UNIFIED IDEOGRAPH
+0x948D 0x5265 #CJK UNIFIED IDEOGRAPH
+0x948E 0x535A #CJK UNIFIED IDEOGRAPH
+0x948F 0x62CD #CJK UNIFIED IDEOGRAPH
+0x9490 0x67CF #CJK UNIFIED IDEOGRAPH
+0x9491 0x6CCA #CJK UNIFIED IDEOGRAPH
+0x9492 0x767D #CJK UNIFIED IDEOGRAPH
+0x9493 0x7B94 #CJK UNIFIED IDEOGRAPH
+0x9494 0x7C95 #CJK UNIFIED IDEOGRAPH
+0x9495 0x8236 #CJK UNIFIED IDEOGRAPH
+0x9496 0x8584 #CJK UNIFIED IDEOGRAPH
+0x9497 0x8FEB #CJK UNIFIED IDEOGRAPH
+0x9498 0x66DD #CJK UNIFIED IDEOGRAPH
+0x9499 0x6F20 #CJK UNIFIED IDEOGRAPH
+0x949A 0x7206 #CJK UNIFIED IDEOGRAPH
+0x949B 0x7E1B #CJK UNIFIED IDEOGRAPH
+0x949C 0x83AB #CJK UNIFIED IDEOGRAPH
+0x949D 0x99C1 #CJK UNIFIED IDEOGRAPH
+0x949E 0x9EA6 #CJK UNIFIED IDEOGRAPH
+0x949F 0x51FD #CJK UNIFIED IDEOGRAPH
+0x94A0 0x7BB1 #CJK UNIFIED IDEOGRAPH
+0x94A1 0x7872 #CJK UNIFIED IDEOGRAPH
+0x94A2 0x7BB8 #CJK UNIFIED IDEOGRAPH
+0x94A3 0x8087 #CJK UNIFIED IDEOGRAPH
+0x94A4 0x7B48 #CJK UNIFIED IDEOGRAPH
+0x94A5 0x6AE8 #CJK UNIFIED IDEOGRAPH
+0x94A6 0x5E61 #CJK UNIFIED IDEOGRAPH
+0x94A7 0x808C #CJK UNIFIED IDEOGRAPH
+0x94A8 0x7551 #CJK UNIFIED IDEOGRAPH
+0x94A9 0x7560 #CJK UNIFIED IDEOGRAPH
+0x94AA 0x516B #CJK UNIFIED IDEOGRAPH
+0x94AB 0x9262 #CJK UNIFIED IDEOGRAPH
+0x94AC 0x6E8C #CJK UNIFIED IDEOGRAPH
+0x94AD 0x767A #CJK UNIFIED IDEOGRAPH
+0x94AE 0x9197 #CJK UNIFIED IDEOGRAPH
+0x94AF 0x9AEA #CJK UNIFIED IDEOGRAPH
+0x94B0 0x4F10 #CJK UNIFIED IDEOGRAPH
+0x94B1 0x7F70 #CJK UNIFIED IDEOGRAPH
+0x94B2 0x629C #CJK UNIFIED IDEOGRAPH
+0x94B3 0x7B4F #CJK UNIFIED IDEOGRAPH
+0x94B4 0x95A5 #CJK UNIFIED IDEOGRAPH
+0x94B5 0x9CE9 #CJK UNIFIED IDEOGRAPH
+0x94B6 0x567A #CJK UNIFIED IDEOGRAPH
+0x94B7 0x5859 #CJK UNIFIED IDEOGRAPH
+0x94B8 0x86E4 #CJK UNIFIED IDEOGRAPH
+0x94B9 0x96BC #CJK UNIFIED IDEOGRAPH
+0x94BA 0x4F34 #CJK UNIFIED IDEOGRAPH
+0x94BB 0x5224 #CJK UNIFIED IDEOGRAPH
+0x94BC 0x534A #CJK UNIFIED IDEOGRAPH
+0x94BD 0x53CD #CJK UNIFIED IDEOGRAPH
+0x94BE 0x53DB #CJK UNIFIED IDEOGRAPH
+0x94BF 0x5E06 #CJK UNIFIED IDEOGRAPH
+0x94C0 0x642C #CJK UNIFIED IDEOGRAPH
+0x94C1 0x6591 #CJK UNIFIED IDEOGRAPH
+0x94C2 0x677F #CJK UNIFIED IDEOGRAPH
+0x94C3 0x6C3E #CJK UNIFIED IDEOGRAPH
+0x94C4 0x6C4E #CJK UNIFIED IDEOGRAPH
+0x94C5 0x7248 #CJK UNIFIED IDEOGRAPH
+0x94C6 0x72AF #CJK UNIFIED IDEOGRAPH
+0x94C7 0x73ED #CJK UNIFIED IDEOGRAPH
+0x94C8 0x7554 #CJK UNIFIED IDEOGRAPH
+0x94C9 0x7E41 #CJK UNIFIED IDEOGRAPH
+0x94CA 0x822C #CJK UNIFIED IDEOGRAPH
+0x94CB 0x85E9 #CJK UNIFIED IDEOGRAPH
+0x94CC 0x8CA9 #CJK UNIFIED IDEOGRAPH
+0x94CD 0x7BC4 #CJK UNIFIED IDEOGRAPH
+0x94CE 0x91C6 #CJK UNIFIED IDEOGRAPH
+0x94CF 0x7169 #CJK UNIFIED IDEOGRAPH
+0x94D0 0x9812 #CJK UNIFIED IDEOGRAPH
+0x94D1 0x98EF #CJK UNIFIED IDEOGRAPH
+0x94D2 0x633D #CJK UNIFIED IDEOGRAPH
+0x94D3 0x6669 #CJK UNIFIED IDEOGRAPH
+0x94D4 0x756A #CJK UNIFIED IDEOGRAPH
+0x94D5 0x76E4 #CJK UNIFIED IDEOGRAPH
+0x94D6 0x78D0 #CJK UNIFIED IDEOGRAPH
+0x94D7 0x8543 #CJK UNIFIED IDEOGRAPH
+0x94D8 0x86EE #CJK UNIFIED IDEOGRAPH
+0x94D9 0x532A #CJK UNIFIED IDEOGRAPH
+0x94DA 0x5351 #CJK UNIFIED IDEOGRAPH
+0x94DB 0x5426 #CJK UNIFIED IDEOGRAPH
+0x94DC 0x5983 #CJK UNIFIED IDEOGRAPH
+0x94DD 0x5E87 #CJK UNIFIED IDEOGRAPH
+0x94DE 0x5F7C #CJK UNIFIED IDEOGRAPH
+0x94DF 0x60B2 #CJK UNIFIED IDEOGRAPH
+0x94E0 0x6249 #CJK UNIFIED IDEOGRAPH
+0x94E1 0x6279 #CJK UNIFIED IDEOGRAPH
+0x94E2 0x62AB #CJK UNIFIED IDEOGRAPH
+0x94E3 0x6590 #CJK UNIFIED IDEOGRAPH
+0x94E4 0x6BD4 #CJK UNIFIED IDEOGRAPH
+0x94E5 0x6CCC #CJK UNIFIED IDEOGRAPH
+0x94E6 0x75B2 #CJK UNIFIED IDEOGRAPH
+0x94E7 0x76AE #CJK UNIFIED IDEOGRAPH
+0x94E8 0x7891 #CJK UNIFIED IDEOGRAPH
+0x94E9 0x79D8 #CJK UNIFIED IDEOGRAPH
+0x94EA 0x7DCB #CJK UNIFIED IDEOGRAPH
+0x94EB 0x7F77 #CJK UNIFIED IDEOGRAPH
+0x94EC 0x80A5 #CJK UNIFIED IDEOGRAPH
+0x94ED 0x88AB #CJK UNIFIED IDEOGRAPH
+0x94EE 0x8AB9 #CJK UNIFIED IDEOGRAPH
+0x94EF 0x8CBB #CJK UNIFIED IDEOGRAPH
+0x94F0 0x907F #CJK UNIFIED IDEOGRAPH
+0x94F1 0x975E #CJK UNIFIED IDEOGRAPH
+0x94F2 0x98DB #CJK UNIFIED IDEOGRAPH
+0x94F3 0x6A0B #CJK UNIFIED IDEOGRAPH
+0x94F4 0x7C38 #CJK UNIFIED IDEOGRAPH
+0x94F5 0x5099 #CJK UNIFIED IDEOGRAPH
+0x94F6 0x5C3E #CJK UNIFIED IDEOGRAPH
+0x94F7 0x5FAE #CJK UNIFIED IDEOGRAPH
+0x94F8 0x6787 #CJK UNIFIED IDEOGRAPH
+0x94F9 0x6BD8 #CJK UNIFIED IDEOGRAPH
+0x94FA 0x7435 #CJK UNIFIED IDEOGRAPH
+0x94FB 0x7709 #CJK UNIFIED IDEOGRAPH
+0x94FC 0x7F8E #CJK UNIFIED IDEOGRAPH
+0x9540 0x9F3B #CJK UNIFIED IDEOGRAPH
+0x9541 0x67CA #CJK UNIFIED IDEOGRAPH
+0x9542 0x7A17 #CJK UNIFIED IDEOGRAPH
+0x9543 0x5339 #CJK UNIFIED IDEOGRAPH
+0x9544 0x758B #CJK UNIFIED IDEOGRAPH
+0x9545 0x9AED #CJK UNIFIED IDEOGRAPH
+0x9546 0x5F66 #CJK UNIFIED IDEOGRAPH
+0x9547 0x819D #CJK UNIFIED IDEOGRAPH
+0x9548 0x83F1 #CJK UNIFIED IDEOGRAPH
+0x9549 0x8098 #CJK UNIFIED IDEOGRAPH
+0x954A 0x5F3C #CJK UNIFIED IDEOGRAPH
+0x954B 0x5FC5 #CJK UNIFIED IDEOGRAPH
+0x954C 0x7562 #CJK UNIFIED IDEOGRAPH
+0x954D 0x7B46 #CJK UNIFIED IDEOGRAPH
+0x954E 0x903C #CJK UNIFIED IDEOGRAPH
+0x954F 0x6867 #CJK UNIFIED IDEOGRAPH
+0x9550 0x59EB #CJK UNIFIED IDEOGRAPH
+0x9551 0x5A9B #CJK UNIFIED IDEOGRAPH
+0x9552 0x7D10 #CJK UNIFIED IDEOGRAPH
+0x9553 0x767E #CJK UNIFIED IDEOGRAPH
+0x9554 0x8B2C #CJK UNIFIED IDEOGRAPH
+0x9555 0x4FF5 #CJK UNIFIED IDEOGRAPH
+0x9556 0x5F6A #CJK UNIFIED IDEOGRAPH
+0x9557 0x6A19 #CJK UNIFIED IDEOGRAPH
+0x9558 0x6C37 #CJK UNIFIED IDEOGRAPH
+0x9559 0x6F02 #CJK UNIFIED IDEOGRAPH
+0x955A 0x74E2 #CJK UNIFIED IDEOGRAPH
+0x955B 0x7968 #CJK UNIFIED IDEOGRAPH
+0x955C 0x8868 #CJK UNIFIED IDEOGRAPH
+0x955D 0x8A55 #CJK UNIFIED IDEOGRAPH
+0x955E 0x8C79 #CJK UNIFIED IDEOGRAPH
+0x955F 0x5EDF #CJK UNIFIED IDEOGRAPH
+0x9560 0x63CF #CJK UNIFIED IDEOGRAPH
+0x9561 0x75C5 #CJK UNIFIED IDEOGRAPH
+0x9562 0x79D2 #CJK UNIFIED IDEOGRAPH
+0x9563 0x82D7 #CJK UNIFIED IDEOGRAPH
+0x9564 0x9328 #CJK UNIFIED IDEOGRAPH
+0x9565 0x92F2 #CJK UNIFIED IDEOGRAPH
+0x9566 0x849C #CJK UNIFIED IDEOGRAPH
+0x9567 0x86ED #CJK UNIFIED IDEOGRAPH
+0x9568 0x9C2D #CJK UNIFIED IDEOGRAPH
+0x9569 0x54C1 #CJK UNIFIED IDEOGRAPH
+0x956A 0x5F6C #CJK UNIFIED IDEOGRAPH
+0x956B 0x658C #CJK UNIFIED IDEOGRAPH
+0x956C 0x6D5C #CJK UNIFIED IDEOGRAPH
+0x956D 0x7015 #CJK UNIFIED IDEOGRAPH
+0x956E 0x8CA7 #CJK UNIFIED IDEOGRAPH
+0x956F 0x8CD3 #CJK UNIFIED IDEOGRAPH
+0x9570 0x983B #CJK UNIFIED IDEOGRAPH
+0x9571 0x654F #CJK UNIFIED IDEOGRAPH
+0x9572 0x74F6 #CJK UNIFIED IDEOGRAPH
+0x9573 0x4E0D #CJK UNIFIED IDEOGRAPH
+0x9574 0x4ED8 #CJK UNIFIED IDEOGRAPH
+0x9575 0x57E0 #CJK UNIFIED IDEOGRAPH
+0x9576 0x592B #CJK UNIFIED IDEOGRAPH
+0x9577 0x5A66 #CJK UNIFIED IDEOGRAPH
+0x9578 0x5BCC #CJK UNIFIED IDEOGRAPH
+0x9579 0x51A8 #CJK UNIFIED IDEOGRAPH
+0x957A 0x5E03 #CJK UNIFIED IDEOGRAPH
+0x957B 0x5E9C #CJK UNIFIED IDEOGRAPH
+0x957C 0x6016 #CJK UNIFIED IDEOGRAPH
+0x957D 0x6276 #CJK UNIFIED IDEOGRAPH
+0x957E 0x6577 #CJK UNIFIED IDEOGRAPH
+0x9580 0x65A7 #CJK UNIFIED IDEOGRAPH
+0x9581 0x666E #CJK UNIFIED IDEOGRAPH
+0x9582 0x6D6E #CJK UNIFIED IDEOGRAPH
+0x9583 0x7236 #CJK UNIFIED IDEOGRAPH
+0x9584 0x7B26 #CJK UNIFIED IDEOGRAPH
+0x9585 0x8150 #CJK UNIFIED IDEOGRAPH
+0x9586 0x819A #CJK UNIFIED IDEOGRAPH
+0x9587 0x8299 #CJK UNIFIED IDEOGRAPH
+0x9588 0x8B5C #CJK UNIFIED IDEOGRAPH
+0x9589 0x8CA0 #CJK UNIFIED IDEOGRAPH
+0x958A 0x8CE6 #CJK UNIFIED IDEOGRAPH
+0x958B 0x8D74 #CJK UNIFIED IDEOGRAPH
+0x958C 0x961C #CJK UNIFIED IDEOGRAPH
+0x958D 0x9644 #CJK UNIFIED IDEOGRAPH
+0x958E 0x4FAE #CJK UNIFIED IDEOGRAPH
+0x958F 0x64AB #CJK UNIFIED IDEOGRAPH
+0x9590 0x6B66 #CJK UNIFIED IDEOGRAPH
+0x9591 0x821E #CJK UNIFIED IDEOGRAPH
+0x9592 0x8461 #CJK UNIFIED IDEOGRAPH
+0x9593 0x856A #CJK UNIFIED IDEOGRAPH
+0x9594 0x90E8 #CJK UNIFIED IDEOGRAPH
+0x9595 0x5C01 #CJK UNIFIED IDEOGRAPH
+0x9596 0x6953 #CJK UNIFIED IDEOGRAPH
+0x9597 0x98A8 #CJK UNIFIED IDEOGRAPH
+0x9598 0x847A #CJK UNIFIED IDEOGRAPH
+0x9599 0x8557 #CJK UNIFIED IDEOGRAPH
+0x959A 0x4F0F #CJK UNIFIED IDEOGRAPH
+0x959B 0x526F #CJK UNIFIED IDEOGRAPH
+0x959C 0x5FA9 #CJK UNIFIED IDEOGRAPH
+0x959D 0x5E45 #CJK UNIFIED IDEOGRAPH
+0x959E 0x670D #CJK UNIFIED IDEOGRAPH
+0x959F 0x798F #CJK UNIFIED IDEOGRAPH
+0x95A0 0x8179 #CJK UNIFIED IDEOGRAPH
+0x95A1 0x8907 #CJK UNIFIED IDEOGRAPH
+0x95A2 0x8986 #CJK UNIFIED IDEOGRAPH
+0x95A3 0x6DF5 #CJK UNIFIED IDEOGRAPH
+0x95A4 0x5F17 #CJK UNIFIED IDEOGRAPH
+0x95A5 0x6255 #CJK UNIFIED IDEOGRAPH
+0x95A6 0x6CB8 #CJK UNIFIED IDEOGRAPH
+0x95A7 0x4ECF #CJK UNIFIED IDEOGRAPH
+0x95A8 0x7269 #CJK UNIFIED IDEOGRAPH
+0x95A9 0x9B92 #CJK UNIFIED IDEOGRAPH
+0x95AA 0x5206 #CJK UNIFIED IDEOGRAPH
+0x95AB 0x543B #CJK UNIFIED IDEOGRAPH
+0x95AC 0x5674 #CJK UNIFIED IDEOGRAPH
+0x95AD 0x58B3 #CJK UNIFIED IDEOGRAPH
+0x95AE 0x61A4 #CJK UNIFIED IDEOGRAPH
+0x95AF 0x626E #CJK UNIFIED IDEOGRAPH
+0x95B0 0x711A #CJK UNIFIED IDEOGRAPH
+0x95B1 0x596E #CJK UNIFIED IDEOGRAPH
+0x95B2 0x7C89 #CJK UNIFIED IDEOGRAPH
+0x95B3 0x7CDE #CJK UNIFIED IDEOGRAPH
+0x95B4 0x7D1B #CJK UNIFIED IDEOGRAPH
+0x95B5 0x96F0 #CJK UNIFIED IDEOGRAPH
+0x95B6 0x6587 #CJK UNIFIED IDEOGRAPH
+0x95B7 0x805E #CJK UNIFIED IDEOGRAPH
+0x95B8 0x4E19 #CJK UNIFIED IDEOGRAPH
+0x95B9 0x4F75 #CJK UNIFIED IDEOGRAPH
+0x95BA 0x5175 #CJK UNIFIED IDEOGRAPH
+0x95BB 0x5840 #CJK UNIFIED IDEOGRAPH
+0x95BC 0x5E63 #CJK UNIFIED IDEOGRAPH
+0x95BD 0x5E73 #CJK UNIFIED IDEOGRAPH
+0x95BE 0x5F0A #CJK UNIFIED IDEOGRAPH
+0x95BF 0x67C4 #CJK UNIFIED IDEOGRAPH
+0x95C0 0x4E26 #CJK UNIFIED IDEOGRAPH
+0x95C1 0x853D #CJK UNIFIED IDEOGRAPH
+0x95C2 0x9589 #CJK UNIFIED IDEOGRAPH
+0x95C3 0x965B #CJK UNIFIED IDEOGRAPH
+0x95C4 0x7C73 #CJK UNIFIED IDEOGRAPH
+0x95C5 0x9801 #CJK UNIFIED IDEOGRAPH
+0x95C6 0x50FB #CJK UNIFIED IDEOGRAPH
+0x95C7 0x58C1 #CJK UNIFIED IDEOGRAPH
+0x95C8 0x7656 #CJK UNIFIED IDEOGRAPH
+0x95C9 0x78A7 #CJK UNIFIED IDEOGRAPH
+0x95CA 0x5225 #CJK UNIFIED IDEOGRAPH
+0x95CB 0x77A5 #CJK UNIFIED IDEOGRAPH
+0x95CC 0x8511 #CJK UNIFIED IDEOGRAPH
+0x95CD 0x7B86 #CJK UNIFIED IDEOGRAPH
+0x95CE 0x504F #CJK UNIFIED IDEOGRAPH
+0x95CF 0x5909 #CJK UNIFIED IDEOGRAPH
+0x95D0 0x7247 #CJK UNIFIED IDEOGRAPH
+0x95D1 0x7BC7 #CJK UNIFIED IDEOGRAPH
+0x95D2 0x7DE8 #CJK UNIFIED IDEOGRAPH
+0x95D3 0x8FBA #CJK UNIFIED IDEOGRAPH
+0x95D4 0x8FD4 #CJK UNIFIED IDEOGRAPH
+0x95D5 0x904D #CJK UNIFIED IDEOGRAPH
+0x95D6 0x4FBF #CJK UNIFIED IDEOGRAPH
+0x95D7 0x52C9 #CJK UNIFIED IDEOGRAPH
+0x95D8 0x5A29 #CJK UNIFIED IDEOGRAPH
+0x95D9 0x5F01 #CJK UNIFIED IDEOGRAPH
+0x95DA 0x97AD #CJK UNIFIED IDEOGRAPH
+0x95DB 0x4FDD #CJK UNIFIED IDEOGRAPH
+0x95DC 0x8217 #CJK UNIFIED IDEOGRAPH
+0x95DD 0x92EA #CJK UNIFIED IDEOGRAPH
+0x95DE 0x5703 #CJK UNIFIED IDEOGRAPH
+0x95DF 0x6355 #CJK UNIFIED IDEOGRAPH
+0x95E0 0x6B69 #CJK UNIFIED IDEOGRAPH
+0x95E1 0x752B #CJK UNIFIED IDEOGRAPH
+0x95E2 0x88DC #CJK UNIFIED IDEOGRAPH
+0x95E3 0x8F14 #CJK UNIFIED IDEOGRAPH
+0x95E4 0x7A42 #CJK UNIFIED IDEOGRAPH
+0x95E5 0x52DF #CJK UNIFIED IDEOGRAPH
+0x95E6 0x5893 #CJK UNIFIED IDEOGRAPH
+0x95E7 0x6155 #CJK UNIFIED IDEOGRAPH
+0x95E8 0x620A #CJK UNIFIED IDEOGRAPH
+0x95E9 0x66AE #CJK UNIFIED IDEOGRAPH
+0x95EA 0x6BCD #CJK UNIFIED IDEOGRAPH
+0x95EB 0x7C3F #CJK UNIFIED IDEOGRAPH
+0x95EC 0x83E9 #CJK UNIFIED IDEOGRAPH
+0x95ED 0x5023 #CJK UNIFIED IDEOGRAPH
+0x95EE 0x4FF8 #CJK UNIFIED IDEOGRAPH
+0x95EF 0x5305 #CJK UNIFIED IDEOGRAPH
+0x95F0 0x5446 #CJK UNIFIED IDEOGRAPH
+0x95F1 0x5831 #CJK UNIFIED IDEOGRAPH
+0x95F2 0x5949 #CJK UNIFIED IDEOGRAPH
+0x95F3 0x5B9D #CJK UNIFIED IDEOGRAPH
+0x95F4 0x5CF0 #CJK UNIFIED IDEOGRAPH
+0x95F5 0x5CEF #CJK UNIFIED IDEOGRAPH
+0x95F6 0x5D29 #CJK UNIFIED IDEOGRAPH
+0x95F7 0x5E96 #CJK UNIFIED IDEOGRAPH
+0x95F8 0x62B1 #CJK UNIFIED IDEOGRAPH
+0x95F9 0x6367 #CJK UNIFIED IDEOGRAPH
+0x95FA 0x653E #CJK UNIFIED IDEOGRAPH
+0x95FB 0x65B9 #CJK UNIFIED IDEOGRAPH
+0x95FC 0x670B #CJK UNIFIED IDEOGRAPH
+0x9640 0x6CD5 #CJK UNIFIED IDEOGRAPH
+0x9641 0x6CE1 #CJK UNIFIED IDEOGRAPH
+0x9642 0x70F9 #CJK UNIFIED IDEOGRAPH
+0x9643 0x7832 #CJK UNIFIED IDEOGRAPH
+0x9644 0x7E2B #CJK UNIFIED IDEOGRAPH
+0x9645 0x80DE #CJK UNIFIED IDEOGRAPH
+0x9646 0x82B3 #CJK UNIFIED IDEOGRAPH
+0x9647 0x840C #CJK UNIFIED IDEOGRAPH
+0x9648 0x84EC #CJK UNIFIED IDEOGRAPH
+0x9649 0x8702 #CJK UNIFIED IDEOGRAPH
+0x964A 0x8912 #CJK UNIFIED IDEOGRAPH
+0x964B 0x8A2A #CJK UNIFIED IDEOGRAPH
+0x964C 0x8C4A #CJK UNIFIED IDEOGRAPH
+0x964D 0x90A6 #CJK UNIFIED IDEOGRAPH
+0x964E 0x92D2 #CJK UNIFIED IDEOGRAPH
+0x964F 0x98FD #CJK UNIFIED IDEOGRAPH
+0x9650 0x9CF3 #CJK UNIFIED IDEOGRAPH
+0x9651 0x9D6C #CJK UNIFIED IDEOGRAPH
+0x9652 0x4E4F #CJK UNIFIED IDEOGRAPH
+0x9653 0x4EA1 #CJK UNIFIED IDEOGRAPH
+0x9654 0x508D #CJK UNIFIED IDEOGRAPH
+0x9655 0x5256 #CJK UNIFIED IDEOGRAPH
+0x9656 0x574A #CJK UNIFIED IDEOGRAPH
+0x9657 0x59A8 #CJK UNIFIED IDEOGRAPH
+0x9658 0x5E3D #CJK UNIFIED IDEOGRAPH
+0x9659 0x5FD8 #CJK UNIFIED IDEOGRAPH
+0x965A 0x5FD9 #CJK UNIFIED IDEOGRAPH
+0x965B 0x623F #CJK UNIFIED IDEOGRAPH
+0x965C 0x66B4 #CJK UNIFIED IDEOGRAPH
+0x965D 0x671B #CJK UNIFIED IDEOGRAPH
+0x965E 0x67D0 #CJK UNIFIED IDEOGRAPH
+0x965F 0x68D2 #CJK UNIFIED IDEOGRAPH
+0x9660 0x5192 #CJK UNIFIED IDEOGRAPH
+0x9661 0x7D21 #CJK UNIFIED IDEOGRAPH
+0x9662 0x80AA #CJK UNIFIED IDEOGRAPH
+0x9663 0x81A8 #CJK UNIFIED IDEOGRAPH
+0x9664 0x8B00 #CJK UNIFIED IDEOGRAPH
+0x9665 0x8C8C #CJK UNIFIED IDEOGRAPH
+0x9666 0x8CBF #CJK UNIFIED IDEOGRAPH
+0x9667 0x927E #CJK UNIFIED IDEOGRAPH
+0x9668 0x9632 #CJK UNIFIED IDEOGRAPH
+0x9669 0x5420 #CJK UNIFIED IDEOGRAPH
+0x966A 0x982C #CJK UNIFIED IDEOGRAPH
+0x966B 0x5317 #CJK UNIFIED IDEOGRAPH
+0x966C 0x50D5 #CJK UNIFIED IDEOGRAPH
+0x966D 0x535C #CJK UNIFIED IDEOGRAPH
+0x966E 0x58A8 #CJK UNIFIED IDEOGRAPH
+0x966F 0x64B2 #CJK UNIFIED IDEOGRAPH
+0x9670 0x6734 #CJK UNIFIED IDEOGRAPH
+0x9671 0x7267 #CJK UNIFIED IDEOGRAPH
+0x9672 0x7766 #CJK UNIFIED IDEOGRAPH
+0x9673 0x7A46 #CJK UNIFIED IDEOGRAPH
+0x9674 0x91E6 #CJK UNIFIED IDEOGRAPH
+0x9675 0x52C3 #CJK UNIFIED IDEOGRAPH
+0x9676 0x6CA1 #CJK UNIFIED IDEOGRAPH
+0x9677 0x6B86 #CJK UNIFIED IDEOGRAPH
+0x9678 0x5800 #CJK UNIFIED IDEOGRAPH
+0x9679 0x5E4C #CJK UNIFIED IDEOGRAPH
+0x967A 0x5954 #CJK UNIFIED IDEOGRAPH
+0x967B 0x672C #CJK UNIFIED IDEOGRAPH
+0x967C 0x7FFB #CJK UNIFIED IDEOGRAPH
+0x967D 0x51E1 #CJK UNIFIED IDEOGRAPH
+0x967E 0x76C6 #CJK UNIFIED IDEOGRAPH
+0x9680 0x6469 #CJK UNIFIED IDEOGRAPH
+0x9681 0x78E8 #CJK UNIFIED IDEOGRAPH
+0x9682 0x9B54 #CJK UNIFIED IDEOGRAPH
+0x9683 0x9EBB #CJK UNIFIED IDEOGRAPH
+0x9684 0x57CB #CJK UNIFIED IDEOGRAPH
+0x9685 0x59B9 #CJK UNIFIED IDEOGRAPH
+0x9686 0x6627 #CJK UNIFIED IDEOGRAPH
+0x9687 0x679A #CJK UNIFIED IDEOGRAPH
+0x9688 0x6BCE #CJK UNIFIED IDEOGRAPH
+0x9689 0x54E9 #CJK UNIFIED IDEOGRAPH
+0x968A 0x69D9 #CJK UNIFIED IDEOGRAPH
+0x968B 0x5E55 #CJK UNIFIED IDEOGRAPH
+0x968C 0x819C #CJK UNIFIED IDEOGRAPH
+0x968D 0x6795 #CJK UNIFIED IDEOGRAPH
+0x968E 0x9BAA #CJK UNIFIED IDEOGRAPH
+0x968F 0x67FE #CJK UNIFIED IDEOGRAPH
+0x9690 0x9C52 #CJK UNIFIED IDEOGRAPH
+0x9691 0x685D #CJK UNIFIED IDEOGRAPH
+0x9692 0x4EA6 #CJK UNIFIED IDEOGRAPH
+0x9693 0x4FE3 #CJK UNIFIED IDEOGRAPH
+0x9694 0x53C8 #CJK UNIFIED IDEOGRAPH
+0x9695 0x62B9 #CJK UNIFIED IDEOGRAPH
+0x9696 0x672B #CJK UNIFIED IDEOGRAPH
+0x9697 0x6CAB #CJK UNIFIED IDEOGRAPH
+0x9698 0x8FC4 #CJK UNIFIED IDEOGRAPH
+0x9699 0x4FAD #CJK UNIFIED IDEOGRAPH
+0x969A 0x7E6D #CJK UNIFIED IDEOGRAPH
+0x969B 0x9EBF #CJK UNIFIED IDEOGRAPH
+0x969C 0x4E07 #CJK UNIFIED IDEOGRAPH
+0x969D 0x6162 #CJK UNIFIED IDEOGRAPH
+0x969E 0x6E80 #CJK UNIFIED IDEOGRAPH
+0x969F 0x6F2B #CJK UNIFIED IDEOGRAPH
+0x96A0 0x8513 #CJK UNIFIED IDEOGRAPH
+0x96A1 0x5473 #CJK UNIFIED IDEOGRAPH
+0x96A2 0x672A #CJK UNIFIED IDEOGRAPH
+0x96A3 0x9B45 #CJK UNIFIED IDEOGRAPH
+0x96A4 0x5DF3 #CJK UNIFIED IDEOGRAPH
+0x96A5 0x7B95 #CJK UNIFIED IDEOGRAPH
+0x96A6 0x5CAC #CJK UNIFIED IDEOGRAPH
+0x96A7 0x5BC6 #CJK UNIFIED IDEOGRAPH
+0x96A8 0x871C #CJK UNIFIED IDEOGRAPH
+0x96A9 0x6E4A #CJK UNIFIED IDEOGRAPH
+0x96AA 0x84D1 #CJK UNIFIED IDEOGRAPH
+0x96AB 0x7A14 #CJK UNIFIED IDEOGRAPH
+0x96AC 0x8108 #CJK UNIFIED IDEOGRAPH
+0x96AD 0x5999 #CJK UNIFIED IDEOGRAPH
+0x96AE 0x7C8D #CJK UNIFIED IDEOGRAPH
+0x96AF 0x6C11 #CJK UNIFIED IDEOGRAPH
+0x96B0 0x7720 #CJK UNIFIED IDEOGRAPH
+0x96B1 0x52D9 #CJK UNIFIED IDEOGRAPH
+0x96B2 0x5922 #CJK UNIFIED IDEOGRAPH
+0x96B3 0x7121 #CJK UNIFIED IDEOGRAPH
+0x96B4 0x725F #CJK UNIFIED IDEOGRAPH
+0x96B5 0x77DB #CJK UNIFIED IDEOGRAPH
+0x96B6 0x9727 #CJK UNIFIED IDEOGRAPH
+0x96B7 0x9D61 #CJK UNIFIED IDEOGRAPH
+0x96B8 0x690B #CJK UNIFIED IDEOGRAPH
+0x96B9 0x5A7F #CJK UNIFIED IDEOGRAPH
+0x96BA 0x5A18 #CJK UNIFIED IDEOGRAPH
+0x96BB 0x51A5 #CJK UNIFIED IDEOGRAPH
+0x96BC 0x540D #CJK UNIFIED IDEOGRAPH
+0x96BD 0x547D #CJK UNIFIED IDEOGRAPH
+0x96BE 0x660E #CJK UNIFIED IDEOGRAPH
+0x96BF 0x76DF #CJK UNIFIED IDEOGRAPH
+0x96C0 0x8FF7 #CJK UNIFIED IDEOGRAPH
+0x96C1 0x9298 #CJK UNIFIED IDEOGRAPH
+0x96C2 0x9CF4 #CJK UNIFIED IDEOGRAPH
+0x96C3 0x59EA #CJK UNIFIED IDEOGRAPH
+0x96C4 0x725D #CJK UNIFIED IDEOGRAPH
+0x96C5 0x6EC5 #CJK UNIFIED IDEOGRAPH
+0x96C6 0x514D #CJK UNIFIED IDEOGRAPH
+0x96C7 0x68C9 #CJK UNIFIED IDEOGRAPH
+0x96C8 0x7DBF #CJK UNIFIED IDEOGRAPH
+0x96C9 0x7DEC #CJK UNIFIED IDEOGRAPH
+0x96CA 0x9762 #CJK UNIFIED IDEOGRAPH
+0x96CB 0x9EBA #CJK UNIFIED IDEOGRAPH
+0x96CC 0x6478 #CJK UNIFIED IDEOGRAPH
+0x96CD 0x6A21 #CJK UNIFIED IDEOGRAPH
+0x96CE 0x8302 #CJK UNIFIED IDEOGRAPH
+0x96CF 0x5984 #CJK UNIFIED IDEOGRAPH
+0x96D0 0x5B5F #CJK UNIFIED IDEOGRAPH
+0x96D1 0x6BDB #CJK UNIFIED IDEOGRAPH
+0x96D2 0x731B #CJK UNIFIED IDEOGRAPH
+0x96D3 0x76F2 #CJK UNIFIED IDEOGRAPH
+0x96D4 0x7DB2 #CJK UNIFIED IDEOGRAPH
+0x96D5 0x8017 #CJK UNIFIED IDEOGRAPH
+0x96D6 0x8499 #CJK UNIFIED IDEOGRAPH
+0x96D7 0x5132 #CJK UNIFIED IDEOGRAPH
+0x96D8 0x6728 #CJK UNIFIED IDEOGRAPH
+0x96D9 0x9ED9 #CJK UNIFIED IDEOGRAPH
+0x96DA 0x76EE #CJK UNIFIED IDEOGRAPH
+0x96DB 0x6762 #CJK UNIFIED IDEOGRAPH
+0x96DC 0x52FF #CJK UNIFIED IDEOGRAPH
+0x96DD 0x9905 #CJK UNIFIED IDEOGRAPH
+0x96DE 0x5C24 #CJK UNIFIED IDEOGRAPH
+0x96DF 0x623B #CJK UNIFIED IDEOGRAPH
+0x96E0 0x7C7E #CJK UNIFIED IDEOGRAPH
+0x96E1 0x8CB0 #CJK UNIFIED IDEOGRAPH
+0x96E2 0x554F #CJK UNIFIED IDEOGRAPH
+0x96E3 0x60B6 #CJK UNIFIED IDEOGRAPH
+0x96E4 0x7D0B #CJK UNIFIED IDEOGRAPH
+0x96E5 0x9580 #CJK UNIFIED IDEOGRAPH
+0x96E6 0x5301 #CJK UNIFIED IDEOGRAPH
+0x96E7 0x4E5F #CJK UNIFIED IDEOGRAPH
+0x96E8 0x51B6 #CJK UNIFIED IDEOGRAPH
+0x96E9 0x591C #CJK UNIFIED IDEOGRAPH
+0x96EA 0x723A #CJK UNIFIED IDEOGRAPH
+0x96EB 0x8036 #CJK UNIFIED IDEOGRAPH
+0x96EC 0x91CE #CJK UNIFIED IDEOGRAPH
+0x96ED 0x5F25 #CJK UNIFIED IDEOGRAPH
+0x96EE 0x77E2 #CJK UNIFIED IDEOGRAPH
+0x96EF 0x5384 #CJK UNIFIED IDEOGRAPH
+0x96F0 0x5F79 #CJK UNIFIED IDEOGRAPH
+0x96F1 0x7D04 #CJK UNIFIED IDEOGRAPH
+0x96F2 0x85AC #CJK UNIFIED IDEOGRAPH
+0x96F3 0x8A33 #CJK UNIFIED IDEOGRAPH
+0x96F4 0x8E8D #CJK UNIFIED IDEOGRAPH
+0x96F5 0x9756 #CJK UNIFIED IDEOGRAPH
+0x96F6 0x67F3 #CJK UNIFIED IDEOGRAPH
+0x96F7 0x85AE #CJK UNIFIED IDEOGRAPH
+0x96F8 0x9453 #CJK UNIFIED IDEOGRAPH
+0x96F9 0x6109 #CJK UNIFIED IDEOGRAPH
+0x96FA 0x6108 #CJK UNIFIED IDEOGRAPH
+0x96FB 0x6CB9 #CJK UNIFIED IDEOGRAPH
+0x96FC 0x7652 #CJK UNIFIED IDEOGRAPH
+0x9740 0x8AED #CJK UNIFIED IDEOGRAPH
+0x9741 0x8F38 #CJK UNIFIED IDEOGRAPH
+0x9742 0x552F #CJK UNIFIED IDEOGRAPH
+0x9743 0x4F51 #CJK UNIFIED IDEOGRAPH
+0x9744 0x512A #CJK UNIFIED IDEOGRAPH
+0x9745 0x52C7 #CJK UNIFIED IDEOGRAPH
+0x9746 0x53CB #CJK UNIFIED IDEOGRAPH
+0x9747 0x5BA5 #CJK UNIFIED IDEOGRAPH
+0x9748 0x5E7D #CJK UNIFIED IDEOGRAPH
+0x9749 0x60A0 #CJK UNIFIED IDEOGRAPH
+0x974A 0x6182 #CJK UNIFIED IDEOGRAPH
+0x974B 0x63D6 #CJK UNIFIED IDEOGRAPH
+0x974C 0x6709 #CJK UNIFIED IDEOGRAPH
+0x974D 0x67DA #CJK UNIFIED IDEOGRAPH
+0x974E 0x6E67 #CJK UNIFIED IDEOGRAPH
+0x974F 0x6D8C #CJK UNIFIED IDEOGRAPH
+0x9750 0x7336 #CJK UNIFIED IDEOGRAPH
+0x9751 0x7337 #CJK UNIFIED IDEOGRAPH
+0x9752 0x7531 #CJK UNIFIED IDEOGRAPH
+0x9753 0x7950 #CJK UNIFIED IDEOGRAPH
+0x9754 0x88D5 #CJK UNIFIED IDEOGRAPH
+0x9755 0x8A98 #CJK UNIFIED IDEOGRAPH
+0x9756 0x904A #CJK UNIFIED IDEOGRAPH
+0x9757 0x9091 #CJK UNIFIED IDEOGRAPH
+0x9758 0x90F5 #CJK UNIFIED IDEOGRAPH
+0x9759 0x96C4 #CJK UNIFIED IDEOGRAPH
+0x975A 0x878D #CJK UNIFIED IDEOGRAPH
+0x975B 0x5915 #CJK UNIFIED IDEOGRAPH
+0x975C 0x4E88 #CJK UNIFIED IDEOGRAPH
+0x975D 0x4F59 #CJK UNIFIED IDEOGRAPH
+0x975E 0x4E0E #CJK UNIFIED IDEOGRAPH
+0x975F 0x8A89 #CJK UNIFIED IDEOGRAPH
+0x9760 0x8F3F #CJK UNIFIED IDEOGRAPH
+0x9761 0x9810 #CJK UNIFIED IDEOGRAPH
+0x9762 0x50AD #CJK UNIFIED IDEOGRAPH
+0x9763 0x5E7C #CJK UNIFIED IDEOGRAPH
+0x9764 0x5996 #CJK UNIFIED IDEOGRAPH
+0x9765 0x5BB9 #CJK UNIFIED IDEOGRAPH
+0x9766 0x5EB8 #CJK UNIFIED IDEOGRAPH
+0x9767 0x63DA #CJK UNIFIED IDEOGRAPH
+0x9768 0x63FA #CJK UNIFIED IDEOGRAPH
+0x9769 0x64C1 #CJK UNIFIED IDEOGRAPH
+0x976A 0x66DC #CJK UNIFIED IDEOGRAPH
+0x976B 0x694A #CJK UNIFIED IDEOGRAPH
+0x976C 0x69D8 #CJK UNIFIED IDEOGRAPH
+0x976D 0x6D0B #CJK UNIFIED IDEOGRAPH
+0x976E 0x6EB6 #CJK UNIFIED IDEOGRAPH
+0x976F 0x7194 #CJK UNIFIED IDEOGRAPH
+0x9770 0x7528 #CJK UNIFIED IDEOGRAPH
+0x9771 0x7AAF #CJK UNIFIED IDEOGRAPH
+0x9772 0x7F8A #CJK UNIFIED IDEOGRAPH
+0x9773 0x8000 #CJK UNIFIED IDEOGRAPH
+0x9774 0x8449 #CJK UNIFIED IDEOGRAPH
+0x9775 0x84C9 #CJK UNIFIED IDEOGRAPH
+0x9776 0x8981 #CJK UNIFIED IDEOGRAPH
+0x9777 0x8B21 #CJK UNIFIED IDEOGRAPH
+0x9778 0x8E0A #CJK UNIFIED IDEOGRAPH
+0x9779 0x9065 #CJK UNIFIED IDEOGRAPH
+0x977A 0x967D #CJK UNIFIED IDEOGRAPH
+0x977B 0x990A #CJK UNIFIED IDEOGRAPH
+0x977C 0x617E #CJK UNIFIED IDEOGRAPH
+0x977D 0x6291 #CJK UNIFIED IDEOGRAPH
+0x977E 0x6B32 #CJK UNIFIED IDEOGRAPH
+0x9780 0x6C83 #CJK UNIFIED IDEOGRAPH
+0x9781 0x6D74 #CJK UNIFIED IDEOGRAPH
+0x9782 0x7FCC #CJK UNIFIED IDEOGRAPH
+0x9783 0x7FFC #CJK UNIFIED IDEOGRAPH
+0x9784 0x6DC0 #CJK UNIFIED IDEOGRAPH
+0x9785 0x7F85 #CJK UNIFIED IDEOGRAPH
+0x9786 0x87BA #CJK UNIFIED IDEOGRAPH
+0x9787 0x88F8 #CJK UNIFIED IDEOGRAPH
+0x9788 0x6765 #CJK UNIFIED IDEOGRAPH
+0x9789 0x83B1 #CJK UNIFIED IDEOGRAPH
+0x978A 0x983C #CJK UNIFIED IDEOGRAPH
+0x978B 0x96F7 #CJK UNIFIED IDEOGRAPH
+0x978C 0x6D1B #CJK UNIFIED IDEOGRAPH
+0x978D 0x7D61 #CJK UNIFIED IDEOGRAPH
+0x978E 0x843D #CJK UNIFIED IDEOGRAPH
+0x978F 0x916A #CJK UNIFIED IDEOGRAPH
+0x9790 0x4E71 #CJK UNIFIED IDEOGRAPH
+0x9791 0x5375 #CJK UNIFIED IDEOGRAPH
+0x9792 0x5D50 #CJK UNIFIED IDEOGRAPH
+0x9793 0x6B04 #CJK UNIFIED IDEOGRAPH
+0x9794 0x6FEB #CJK UNIFIED IDEOGRAPH
+0x9795 0x85CD #CJK UNIFIED IDEOGRAPH
+0x9796 0x862D #CJK UNIFIED IDEOGRAPH
+0x9797 0x89A7 #CJK UNIFIED IDEOGRAPH
+0x9798 0x5229 #CJK UNIFIED IDEOGRAPH
+0x9799 0x540F #CJK UNIFIED IDEOGRAPH
+0x979A 0x5C65 #CJK UNIFIED IDEOGRAPH
+0x979B 0x674E #CJK UNIFIED IDEOGRAPH
+0x979C 0x68A8 #CJK UNIFIED IDEOGRAPH
+0x979D 0x7406 #CJK UNIFIED IDEOGRAPH
+0x979E 0x7483 #CJK UNIFIED IDEOGRAPH
+0x979F 0x75E2 #CJK UNIFIED IDEOGRAPH
+0x97A0 0x88CF #CJK UNIFIED IDEOGRAPH
+0x97A1 0x88E1 #CJK UNIFIED IDEOGRAPH
+0x97A2 0x91CC #CJK UNIFIED IDEOGRAPH
+0x97A3 0x96E2 #CJK UNIFIED IDEOGRAPH
+0x97A4 0x9678 #CJK UNIFIED IDEOGRAPH
+0x97A5 0x5F8B #CJK UNIFIED IDEOGRAPH
+0x97A6 0x7387 #CJK UNIFIED IDEOGRAPH
+0x97A7 0x7ACB #CJK UNIFIED IDEOGRAPH
+0x97A8 0x844E #CJK UNIFIED IDEOGRAPH
+0x97A9 0x63A0 #CJK UNIFIED IDEOGRAPH
+0x97AA 0x7565 #CJK UNIFIED IDEOGRAPH
+0x97AB 0x5289 #CJK UNIFIED IDEOGRAPH
+0x97AC 0x6D41 #CJK UNIFIED IDEOGRAPH
+0x97AD 0x6E9C #CJK UNIFIED IDEOGRAPH
+0x97AE 0x7409 #CJK UNIFIED IDEOGRAPH
+0x97AF 0x7559 #CJK UNIFIED IDEOGRAPH
+0x97B0 0x786B #CJK UNIFIED IDEOGRAPH
+0x97B1 0x7C92 #CJK UNIFIED IDEOGRAPH
+0x97B2 0x9686 #CJK UNIFIED IDEOGRAPH
+0x97B3 0x7ADC #CJK UNIFIED IDEOGRAPH
+0x97B4 0x9F8D #CJK UNIFIED IDEOGRAPH
+0x97B5 0x4FB6 #CJK UNIFIED IDEOGRAPH
+0x97B6 0x616E #CJK UNIFIED IDEOGRAPH
+0x97B7 0x65C5 #CJK UNIFIED IDEOGRAPH
+0x97B8 0x865C #CJK UNIFIED IDEOGRAPH
+0x97B9 0x4E86 #CJK UNIFIED IDEOGRAPH
+0x97BA 0x4EAE #CJK UNIFIED IDEOGRAPH
+0x97BB 0x50DA #CJK UNIFIED IDEOGRAPH
+0x97BC 0x4E21 #CJK UNIFIED IDEOGRAPH
+0x97BD 0x51CC #CJK UNIFIED IDEOGRAPH
+0x97BE 0x5BEE #CJK UNIFIED IDEOGRAPH
+0x97BF 0x6599 #CJK UNIFIED IDEOGRAPH
+0x97C0 0x6881 #CJK UNIFIED IDEOGRAPH
+0x97C1 0x6DBC #CJK UNIFIED IDEOGRAPH
+0x97C2 0x731F #CJK UNIFIED IDEOGRAPH
+0x97C3 0x7642 #CJK UNIFIED IDEOGRAPH
+0x97C4 0x77AD #CJK UNIFIED IDEOGRAPH
+0x97C5 0x7A1C #CJK UNIFIED IDEOGRAPH
+0x97C6 0x7CE7 #CJK UNIFIED IDEOGRAPH
+0x97C7 0x826F #CJK UNIFIED IDEOGRAPH
+0x97C8 0x8AD2 #CJK UNIFIED IDEOGRAPH
+0x97C9 0x907C #CJK UNIFIED IDEOGRAPH
+0x97CA 0x91CF #CJK UNIFIED IDEOGRAPH
+0x97CB 0x9675 #CJK UNIFIED IDEOGRAPH
+0x97CC 0x9818 #CJK UNIFIED IDEOGRAPH
+0x97CD 0x529B #CJK UNIFIED IDEOGRAPH
+0x97CE 0x7DD1 #CJK UNIFIED IDEOGRAPH
+0x97CF 0x502B #CJK UNIFIED IDEOGRAPH
+0x97D0 0x5398 #CJK UNIFIED IDEOGRAPH
+0x97D1 0x6797 #CJK UNIFIED IDEOGRAPH
+0x97D2 0x6DCB #CJK UNIFIED IDEOGRAPH
+0x97D3 0x71D0 #CJK UNIFIED IDEOGRAPH
+0x97D4 0x7433 #CJK UNIFIED IDEOGRAPH
+0x97D5 0x81E8 #CJK UNIFIED IDEOGRAPH
+0x97D6 0x8F2A #CJK UNIFIED IDEOGRAPH
+0x97D7 0x96A3 #CJK UNIFIED IDEOGRAPH
+0x97D8 0x9C57 #CJK UNIFIED IDEOGRAPH
+0x97D9 0x9E9F #CJK UNIFIED IDEOGRAPH
+0x97DA 0x7460 #CJK UNIFIED IDEOGRAPH
+0x97DB 0x5841 #CJK UNIFIED IDEOGRAPH
+0x97DC 0x6D99 #CJK UNIFIED IDEOGRAPH
+0x97DD 0x7D2F #CJK UNIFIED IDEOGRAPH
+0x97DE 0x985E #CJK UNIFIED IDEOGRAPH
+0x97DF 0x4EE4 #CJK UNIFIED IDEOGRAPH
+0x97E0 0x4F36 #CJK UNIFIED IDEOGRAPH
+0x97E1 0x4F8B #CJK UNIFIED IDEOGRAPH
+0x97E2 0x51B7 #CJK UNIFIED IDEOGRAPH
+0x97E3 0x52B1 #CJK UNIFIED IDEOGRAPH
+0x97E4 0x5DBA #CJK UNIFIED IDEOGRAPH
+0x97E5 0x601C #CJK UNIFIED IDEOGRAPH
+0x97E6 0x73B2 #CJK UNIFIED IDEOGRAPH
+0x97E7 0x793C #CJK UNIFIED IDEOGRAPH
+0x97E8 0x82D3 #CJK UNIFIED IDEOGRAPH
+0x97E9 0x9234 #CJK UNIFIED IDEOGRAPH
+0x97EA 0x96B7 #CJK UNIFIED IDEOGRAPH
+0x97EB 0x96F6 #CJK UNIFIED IDEOGRAPH
+0x97EC 0x970A #CJK UNIFIED IDEOGRAPH
+0x97ED 0x9E97 #CJK UNIFIED IDEOGRAPH
+0x97EE 0x9F62 #CJK UNIFIED IDEOGRAPH
+0x97EF 0x66A6 #CJK UNIFIED IDEOGRAPH
+0x97F0 0x6B74 #CJK UNIFIED IDEOGRAPH
+0x97F1 0x5217 #CJK UNIFIED IDEOGRAPH
+0x97F2 0x52A3 #CJK UNIFIED IDEOGRAPH
+0x97F3 0x70C8 #CJK UNIFIED IDEOGRAPH
+0x97F4 0x88C2 #CJK UNIFIED IDEOGRAPH
+0x97F5 0x5EC9 #CJK UNIFIED IDEOGRAPH
+0x97F6 0x604B #CJK UNIFIED IDEOGRAPH
+0x97F7 0x6190 #CJK UNIFIED IDEOGRAPH
+0x97F8 0x6F23 #CJK UNIFIED IDEOGRAPH
+0x97F9 0x7149 #CJK UNIFIED IDEOGRAPH
+0x97FA 0x7C3E #CJK UNIFIED IDEOGRAPH
+0x97FB 0x7DF4 #CJK UNIFIED IDEOGRAPH
+0x97FC 0x806F #CJK UNIFIED IDEOGRAPH
+0x9840 0x84EE #CJK UNIFIED IDEOGRAPH
+0x9841 0x9023 #CJK UNIFIED IDEOGRAPH
+0x9842 0x932C #CJK UNIFIED IDEOGRAPH
+0x9843 0x5442 #CJK UNIFIED IDEOGRAPH
+0x9844 0x9B6F #CJK UNIFIED IDEOGRAPH
+0x9845 0x6AD3 #CJK UNIFIED IDEOGRAPH
+0x9846 0x7089 #CJK UNIFIED IDEOGRAPH
+0x9847 0x8CC2 #CJK UNIFIED IDEOGRAPH
+0x9848 0x8DEF #CJK UNIFIED IDEOGRAPH
+0x9849 0x9732 #CJK UNIFIED IDEOGRAPH
+0x984A 0x52B4 #CJK UNIFIED IDEOGRAPH
+0x984B 0x5A41 #CJK UNIFIED IDEOGRAPH
+0x984C 0x5ECA #CJK UNIFIED IDEOGRAPH
+0x984D 0x5F04 #CJK UNIFIED IDEOGRAPH
+0x984E 0x6717 #CJK UNIFIED IDEOGRAPH
+0x984F 0x697C #CJK UNIFIED IDEOGRAPH
+0x9850 0x6994 #CJK UNIFIED IDEOGRAPH
+0x9851 0x6D6A #CJK UNIFIED IDEOGRAPH
+0x9852 0x6F0F #CJK UNIFIED IDEOGRAPH
+0x9853 0x7262 #CJK UNIFIED IDEOGRAPH
+0x9854 0x72FC #CJK UNIFIED IDEOGRAPH
+0x9855 0x7BED #CJK UNIFIED IDEOGRAPH
+0x9856 0x8001 #CJK UNIFIED IDEOGRAPH
+0x9857 0x807E #CJK UNIFIED IDEOGRAPH
+0x9858 0x874B #CJK UNIFIED IDEOGRAPH
+0x9859 0x90CE #CJK UNIFIED IDEOGRAPH
+0x985A 0x516D #CJK UNIFIED IDEOGRAPH
+0x985B 0x9E93 #CJK UNIFIED IDEOGRAPH
+0x985C 0x7984 #CJK UNIFIED IDEOGRAPH
+0x985D 0x808B #CJK UNIFIED IDEOGRAPH
+0x985E 0x9332 #CJK UNIFIED IDEOGRAPH
+0x985F 0x8AD6 #CJK UNIFIED IDEOGRAPH
+0x9860 0x502D #CJK UNIFIED IDEOGRAPH
+0x9861 0x548C #CJK UNIFIED IDEOGRAPH
+0x9862 0x8A71 #CJK UNIFIED IDEOGRAPH
+0x9863 0x6B6A #CJK UNIFIED IDEOGRAPH
+0x9864 0x8CC4 #CJK UNIFIED IDEOGRAPH
+0x9865 0x8107 #CJK UNIFIED IDEOGRAPH
+0x9866 0x60D1 #CJK UNIFIED IDEOGRAPH
+0x9867 0x67A0 #CJK UNIFIED IDEOGRAPH
+0x9868 0x9DF2 #CJK UNIFIED IDEOGRAPH
+0x9869 0x4E99 #CJK UNIFIED IDEOGRAPH
+0x986A 0x4E98 #CJK UNIFIED IDEOGRAPH
+0x986B 0x9C10 #CJK UNIFIED IDEOGRAPH
+0x986C 0x8A6B #CJK UNIFIED IDEOGRAPH
+0x986D 0x85C1 #CJK UNIFIED IDEOGRAPH
+0x986E 0x8568 #CJK UNIFIED IDEOGRAPH
+0x986F 0x6900 #CJK UNIFIED IDEOGRAPH
+0x9870 0x6E7E #CJK UNIFIED IDEOGRAPH
+0x9871 0x7897 #CJK UNIFIED IDEOGRAPH
+0x9872 0x8155 #CJK UNIFIED IDEOGRAPH
+0x989F 0x5F0C #CJK UNIFIED IDEOGRAPH
+0x98A0 0x4E10 #CJK UNIFIED IDEOGRAPH
+0x98A1 0x4E15 #CJK UNIFIED IDEOGRAPH
+0x98A2 0x4E2A #CJK UNIFIED IDEOGRAPH
+0x98A3 0x4E31 #CJK UNIFIED IDEOGRAPH
+0x98A4 0x4E36 #CJK UNIFIED IDEOGRAPH
+0x98A5 0x4E3C #CJK UNIFIED IDEOGRAPH
+0x98A6 0x4E3F #CJK UNIFIED IDEOGRAPH
+0x98A7 0x4E42 #CJK UNIFIED IDEOGRAPH
+0x98A8 0x4E56 #CJK UNIFIED IDEOGRAPH
+0x98A9 0x4E58 #CJK UNIFIED IDEOGRAPH
+0x98AA 0x4E82 #CJK UNIFIED IDEOGRAPH
+0x98AB 0x4E85 #CJK UNIFIED IDEOGRAPH
+0x98AC 0x8C6B #CJK UNIFIED IDEOGRAPH
+0x98AD 0x4E8A #CJK UNIFIED IDEOGRAPH
+0x98AE 0x8212 #CJK UNIFIED IDEOGRAPH
+0x98AF 0x5F0D #CJK UNIFIED IDEOGRAPH
+0x98B0 0x4E8E #CJK UNIFIED IDEOGRAPH
+0x98B1 0x4E9E #CJK UNIFIED IDEOGRAPH
+0x98B2 0x4E9F #CJK UNIFIED IDEOGRAPH
+0x98B3 0x4EA0 #CJK UNIFIED IDEOGRAPH
+0x98B4 0x4EA2 #CJK UNIFIED IDEOGRAPH
+0x98B5 0x4EB0 #CJK UNIFIED IDEOGRAPH
+0x98B6 0x4EB3 #CJK UNIFIED IDEOGRAPH
+0x98B7 0x4EB6 #CJK UNIFIED IDEOGRAPH
+0x98B8 0x4ECE #CJK UNIFIED IDEOGRAPH
+0x98B9 0x4ECD #CJK UNIFIED IDEOGRAPH
+0x98BA 0x4EC4 #CJK UNIFIED IDEOGRAPH
+0x98BB 0x4EC6 #CJK UNIFIED IDEOGRAPH
+0x98BC 0x4EC2 #CJK UNIFIED IDEOGRAPH
+0x98BD 0x4ED7 #CJK UNIFIED IDEOGRAPH
+0x98BE 0x4EDE #CJK UNIFIED IDEOGRAPH
+0x98BF 0x4EED #CJK UNIFIED IDEOGRAPH
+0x98C0 0x4EDF #CJK UNIFIED IDEOGRAPH
+0x98C1 0x4EF7 #CJK UNIFIED IDEOGRAPH
+0x98C2 0x4F09 #CJK UNIFIED IDEOGRAPH
+0x98C3 0x4F5A #CJK UNIFIED IDEOGRAPH
+0x98C4 0x4F30 #CJK UNIFIED IDEOGRAPH
+0x98C5 0x4F5B #CJK UNIFIED IDEOGRAPH
+0x98C6 0x4F5D #CJK UNIFIED IDEOGRAPH
+0x98C7 0x4F57 #CJK UNIFIED IDEOGRAPH
+0x98C8 0x4F47 #CJK UNIFIED IDEOGRAPH
+0x98C9 0x4F76 #CJK UNIFIED IDEOGRAPH
+0x98CA 0x4F88 #CJK UNIFIED IDEOGRAPH
+0x98CB 0x4F8F #CJK UNIFIED IDEOGRAPH
+0x98CC 0x4F98 #CJK UNIFIED IDEOGRAPH
+0x98CD 0x4F7B #CJK UNIFIED IDEOGRAPH
+0x98CE 0x4F69 #CJK UNIFIED IDEOGRAPH
+0x98CF 0x4F70 #CJK UNIFIED IDEOGRAPH
+0x98D0 0x4F91 #CJK UNIFIED IDEOGRAPH
+0x98D1 0x4F6F #CJK UNIFIED IDEOGRAPH
+0x98D2 0x4F86 #CJK UNIFIED IDEOGRAPH
+0x98D3 0x4F96 #CJK UNIFIED IDEOGRAPH
+0x98D4 0x5118 #CJK UNIFIED IDEOGRAPH
+0x98D5 0x4FD4 #CJK UNIFIED IDEOGRAPH
+0x98D6 0x4FDF #CJK UNIFIED IDEOGRAPH
+0x98D7 0x4FCE #CJK UNIFIED IDEOGRAPH
+0x98D8 0x4FD8 #CJK UNIFIED IDEOGRAPH
+0x98D9 0x4FDB #CJK UNIFIED IDEOGRAPH
+0x98DA 0x4FD1 #CJK UNIFIED IDEOGRAPH
+0x98DB 0x4FDA #CJK UNIFIED IDEOGRAPH
+0x98DC 0x4FD0 #CJK UNIFIED IDEOGRAPH
+0x98DD 0x4FE4 #CJK UNIFIED IDEOGRAPH
+0x98DE 0x4FE5 #CJK UNIFIED IDEOGRAPH
+0x98DF 0x501A #CJK UNIFIED IDEOGRAPH
+0x98E0 0x5028 #CJK UNIFIED IDEOGRAPH
+0x98E1 0x5014 #CJK UNIFIED IDEOGRAPH
+0x98E2 0x502A #CJK UNIFIED IDEOGRAPH
+0x98E3 0x5025 #CJK UNIFIED IDEOGRAPH
+0x98E4 0x5005 #CJK UNIFIED IDEOGRAPH
+0x98E5 0x4F1C #CJK UNIFIED IDEOGRAPH
+0x98E6 0x4FF6 #CJK UNIFIED IDEOGRAPH
+0x98E7 0x5021 #CJK UNIFIED IDEOGRAPH
+0x98E8 0x5029 #CJK UNIFIED IDEOGRAPH
+0x98E9 0x502C #CJK UNIFIED IDEOGRAPH
+0x98EA 0x4FFE #CJK UNIFIED IDEOGRAPH
+0x98EB 0x4FEF #CJK UNIFIED IDEOGRAPH
+0x98EC 0x5011 #CJK UNIFIED IDEOGRAPH
+0x98ED 0x5006 #CJK UNIFIED IDEOGRAPH
+0x98EE 0x5043 #CJK UNIFIED IDEOGRAPH
+0x98EF 0x5047 #CJK UNIFIED IDEOGRAPH
+0x98F0 0x6703 #CJK UNIFIED IDEOGRAPH
+0x98F1 0x5055 #CJK UNIFIED IDEOGRAPH
+0x98F2 0x5050 #CJK UNIFIED IDEOGRAPH
+0x98F3 0x5048 #CJK UNIFIED IDEOGRAPH
+0x98F4 0x505A #CJK UNIFIED IDEOGRAPH
+0x98F5 0x5056 #CJK UNIFIED IDEOGRAPH
+0x98F6 0x506C #CJK UNIFIED IDEOGRAPH
+0x98F7 0x5078 #CJK UNIFIED IDEOGRAPH
+0x98F8 0x5080 #CJK UNIFIED IDEOGRAPH
+0x98F9 0x509A #CJK UNIFIED IDEOGRAPH
+0x98FA 0x5085 #CJK UNIFIED IDEOGRAPH
+0x98FB 0x50B4 #CJK UNIFIED IDEOGRAPH
+0x98FC 0x50B2 #CJK UNIFIED IDEOGRAPH
+0x9940 0x50C9 #CJK UNIFIED IDEOGRAPH
+0x9941 0x50CA #CJK UNIFIED IDEOGRAPH
+0x9942 0x50B3 #CJK UNIFIED IDEOGRAPH
+0x9943 0x50C2 #CJK UNIFIED IDEOGRAPH
+0x9944 0x50D6 #CJK UNIFIED IDEOGRAPH
+0x9945 0x50DE #CJK UNIFIED IDEOGRAPH
+0x9946 0x50E5 #CJK UNIFIED IDEOGRAPH
+0x9947 0x50ED #CJK UNIFIED IDEOGRAPH
+0x9948 0x50E3 #CJK UNIFIED IDEOGRAPH
+0x9949 0x50EE #CJK UNIFIED IDEOGRAPH
+0x994A 0x50F9 #CJK UNIFIED IDEOGRAPH
+0x994B 0x50F5 #CJK UNIFIED IDEOGRAPH
+0x994C 0x5109 #CJK UNIFIED IDEOGRAPH
+0x994D 0x5101 #CJK UNIFIED IDEOGRAPH
+0x994E 0x5102 #CJK UNIFIED IDEOGRAPH
+0x994F 0x5116 #CJK UNIFIED IDEOGRAPH
+0x9950 0x5115 #CJK UNIFIED IDEOGRAPH
+0x9951 0x5114 #CJK UNIFIED IDEOGRAPH
+0x9952 0x511A #CJK UNIFIED IDEOGRAPH
+0x9953 0x5121 #CJK UNIFIED IDEOGRAPH
+0x9954 0x513A #CJK UNIFIED IDEOGRAPH
+0x9955 0x5137 #CJK UNIFIED IDEOGRAPH
+0x9956 0x513C #CJK UNIFIED IDEOGRAPH
+0x9957 0x513B #CJK UNIFIED IDEOGRAPH
+0x9958 0x513F #CJK UNIFIED IDEOGRAPH
+0x9959 0x5140 #CJK UNIFIED IDEOGRAPH
+0x995A 0x5152 #CJK UNIFIED IDEOGRAPH
+0x995B 0x514C #CJK UNIFIED IDEOGRAPH
+0x995C 0x5154 #CJK UNIFIED IDEOGRAPH
+0x995D 0x5162 #CJK UNIFIED IDEOGRAPH
+0x995E 0x7AF8 #CJK UNIFIED IDEOGRAPH
+0x995F 0x5169 #CJK UNIFIED IDEOGRAPH
+0x9960 0x516A #CJK UNIFIED IDEOGRAPH
+0x9961 0x516E #CJK UNIFIED IDEOGRAPH
+0x9962 0x5180 #CJK UNIFIED IDEOGRAPH
+0x9963 0x5182 #CJK UNIFIED IDEOGRAPH
+0x9964 0x56D8 #CJK UNIFIED IDEOGRAPH
+0x9965 0x518C #CJK UNIFIED IDEOGRAPH
+0x9966 0x5189 #CJK UNIFIED IDEOGRAPH
+0x9967 0x518F #CJK UNIFIED IDEOGRAPH
+0x9968 0x5191 #CJK UNIFIED IDEOGRAPH
+0x9969 0x5193 #CJK UNIFIED IDEOGRAPH
+0x996A 0x5195 #CJK UNIFIED IDEOGRAPH
+0x996B 0x5196 #CJK UNIFIED IDEOGRAPH
+0x996C 0x51A4 #CJK UNIFIED IDEOGRAPH
+0x996D 0x51A6 #CJK UNIFIED IDEOGRAPH
+0x996E 0x51A2 #CJK UNIFIED IDEOGRAPH
+0x996F 0x51A9 #CJK UNIFIED IDEOGRAPH
+0x9970 0x51AA #CJK UNIFIED IDEOGRAPH
+0x9971 0x51AB #CJK UNIFIED IDEOGRAPH
+0x9972 0x51B3 #CJK UNIFIED IDEOGRAPH
+0x9973 0x51B1 #CJK UNIFIED IDEOGRAPH
+0x9974 0x51B2 #CJK UNIFIED IDEOGRAPH
+0x9975 0x51B0 #CJK UNIFIED IDEOGRAPH
+0x9976 0x51B5 #CJK UNIFIED IDEOGRAPH
+0x9977 0x51BD #CJK UNIFIED IDEOGRAPH
+0x9978 0x51C5 #CJK UNIFIED IDEOGRAPH
+0x9979 0x51C9 #CJK UNIFIED IDEOGRAPH
+0x997A 0x51DB #CJK UNIFIED IDEOGRAPH
+0x997B 0x51E0 #CJK UNIFIED IDEOGRAPH
+0x997C 0x8655 #CJK UNIFIED IDEOGRAPH
+0x997D 0x51E9 #CJK UNIFIED IDEOGRAPH
+0x997E 0x51ED #CJK UNIFIED IDEOGRAPH
+0x9980 0x51F0 #CJK UNIFIED IDEOGRAPH
+0x9981 0x51F5 #CJK UNIFIED IDEOGRAPH
+0x9982 0x51FE #CJK UNIFIED IDEOGRAPH
+0x9983 0x5204 #CJK UNIFIED IDEOGRAPH
+0x9984 0x520B #CJK UNIFIED IDEOGRAPH
+0x9985 0x5214 #CJK UNIFIED IDEOGRAPH
+0x9986 0x520E #CJK UNIFIED IDEOGRAPH
+0x9987 0x5227 #CJK UNIFIED IDEOGRAPH
+0x9988 0x522A #CJK UNIFIED IDEOGRAPH
+0x9989 0x522E #CJK UNIFIED IDEOGRAPH
+0x998A 0x5233 #CJK UNIFIED IDEOGRAPH
+0x998B 0x5239 #CJK UNIFIED IDEOGRAPH
+0x998C 0x524F #CJK UNIFIED IDEOGRAPH
+0x998D 0x5244 #CJK UNIFIED IDEOGRAPH
+0x998E 0x524B #CJK UNIFIED IDEOGRAPH
+0x998F 0x524C #CJK UNIFIED IDEOGRAPH
+0x9990 0x525E #CJK UNIFIED IDEOGRAPH
+0x9991 0x5254 #CJK UNIFIED IDEOGRAPH
+0x9992 0x526A #CJK UNIFIED IDEOGRAPH
+0x9993 0x5274 #CJK UNIFIED IDEOGRAPH
+0x9994 0x5269 #CJK UNIFIED IDEOGRAPH
+0x9995 0x5273 #CJK UNIFIED IDEOGRAPH
+0x9996 0x527F #CJK UNIFIED IDEOGRAPH
+0x9997 0x527D #CJK UNIFIED IDEOGRAPH
+0x9998 0x528D #CJK UNIFIED IDEOGRAPH
+0x9999 0x5294 #CJK UNIFIED IDEOGRAPH
+0x999A 0x5292 #CJK UNIFIED IDEOGRAPH
+0x999B 0x5271 #CJK UNIFIED IDEOGRAPH
+0x999C 0x5288 #CJK UNIFIED IDEOGRAPH
+0x999D 0x5291 #CJK UNIFIED IDEOGRAPH
+0x999E 0x8FA8 #CJK UNIFIED IDEOGRAPH
+0x999F 0x8FA7 #CJK UNIFIED IDEOGRAPH
+0x99A0 0x52AC #CJK UNIFIED IDEOGRAPH
+0x99A1 0x52AD #CJK UNIFIED IDEOGRAPH
+0x99A2 0x52BC #CJK UNIFIED IDEOGRAPH
+0x99A3 0x52B5 #CJK UNIFIED IDEOGRAPH
+0x99A4 0x52C1 #CJK UNIFIED IDEOGRAPH
+0x99A5 0x52CD #CJK UNIFIED IDEOGRAPH
+0x99A6 0x52D7 #CJK UNIFIED IDEOGRAPH
+0x99A7 0x52DE #CJK UNIFIED IDEOGRAPH
+0x99A8 0x52E3 #CJK UNIFIED IDEOGRAPH
+0x99A9 0x52E6 #CJK UNIFIED IDEOGRAPH
+0x99AA 0x98ED #CJK UNIFIED IDEOGRAPH
+0x99AB 0x52E0 #CJK UNIFIED IDEOGRAPH
+0x99AC 0x52F3 #CJK UNIFIED IDEOGRAPH
+0x99AD 0x52F5 #CJK UNIFIED IDEOGRAPH
+0x99AE 0x52F8 #CJK UNIFIED IDEOGRAPH
+0x99AF 0x52F9 #CJK UNIFIED IDEOGRAPH
+0x99B0 0x5306 #CJK UNIFIED IDEOGRAPH
+0x99B1 0x5308 #CJK UNIFIED IDEOGRAPH
+0x99B2 0x7538 #CJK UNIFIED IDEOGRAPH
+0x99B3 0x530D #CJK UNIFIED IDEOGRAPH
+0x99B4 0x5310 #CJK UNIFIED IDEOGRAPH
+0x99B5 0x530F #CJK UNIFIED IDEOGRAPH
+0x99B6 0x5315 #CJK UNIFIED IDEOGRAPH
+0x99B7 0x531A #CJK UNIFIED IDEOGRAPH
+0x99B8 0x5323 #CJK UNIFIED IDEOGRAPH
+0x99B9 0x532F #CJK UNIFIED IDEOGRAPH
+0x99BA 0x5331 #CJK UNIFIED IDEOGRAPH
+0x99BB 0x5333 #CJK UNIFIED IDEOGRAPH
+0x99BC 0x5338 #CJK UNIFIED IDEOGRAPH
+0x99BD 0x5340 #CJK UNIFIED IDEOGRAPH
+0x99BE 0x5346 #CJK UNIFIED IDEOGRAPH
+0x99BF 0x5345 #CJK UNIFIED IDEOGRAPH
+0x99C0 0x4E17 #CJK UNIFIED IDEOGRAPH
+0x99C1 0x5349 #CJK UNIFIED IDEOGRAPH
+0x99C2 0x534D #CJK UNIFIED IDEOGRAPH
+0x99C3 0x51D6 #CJK UNIFIED IDEOGRAPH
+0x99C4 0x535E #CJK UNIFIED IDEOGRAPH
+0x99C5 0x5369 #CJK UNIFIED IDEOGRAPH
+0x99C6 0x536E #CJK UNIFIED IDEOGRAPH
+0x99C7 0x5918 #CJK UNIFIED IDEOGRAPH
+0x99C8 0x537B #CJK UNIFIED IDEOGRAPH
+0x99C9 0x5377 #CJK UNIFIED IDEOGRAPH
+0x99CA 0x5382 #CJK UNIFIED IDEOGRAPH
+0x99CB 0x5396 #CJK UNIFIED IDEOGRAPH
+0x99CC 0x53A0 #CJK UNIFIED IDEOGRAPH
+0x99CD 0x53A6 #CJK UNIFIED IDEOGRAPH
+0x99CE 0x53A5 #CJK UNIFIED IDEOGRAPH
+0x99CF 0x53AE #CJK UNIFIED IDEOGRAPH
+0x99D0 0x53B0 #CJK UNIFIED IDEOGRAPH
+0x99D1 0x53B6 #CJK UNIFIED IDEOGRAPH
+0x99D2 0x53C3 #CJK UNIFIED IDEOGRAPH
+0x99D3 0x7C12 #CJK UNIFIED IDEOGRAPH
+0x99D4 0x96D9 #CJK UNIFIED IDEOGRAPH
+0x99D5 0x53DF #CJK UNIFIED IDEOGRAPH
+0x99D6 0x66FC #CJK UNIFIED IDEOGRAPH
+0x99D7 0x71EE #CJK UNIFIED IDEOGRAPH
+0x99D8 0x53EE #CJK UNIFIED IDEOGRAPH
+0x99D9 0x53E8 #CJK UNIFIED IDEOGRAPH
+0x99DA 0x53ED #CJK UNIFIED IDEOGRAPH
+0x99DB 0x53FA #CJK UNIFIED IDEOGRAPH
+0x99DC 0x5401 #CJK UNIFIED IDEOGRAPH
+0x99DD 0x543D #CJK UNIFIED IDEOGRAPH
+0x99DE 0x5440 #CJK UNIFIED IDEOGRAPH
+0x99DF 0x542C #CJK UNIFIED IDEOGRAPH
+0x99E0 0x542D #CJK UNIFIED IDEOGRAPH
+0x99E1 0x543C #CJK UNIFIED IDEOGRAPH
+0x99E2 0x542E #CJK UNIFIED IDEOGRAPH
+0x99E3 0x5436 #CJK UNIFIED IDEOGRAPH
+0x99E4 0x5429 #CJK UNIFIED IDEOGRAPH
+0x99E5 0x541D #CJK UNIFIED IDEOGRAPH
+0x99E6 0x544E #CJK UNIFIED IDEOGRAPH
+0x99E7 0x548F #CJK UNIFIED IDEOGRAPH
+0x99E8 0x5475 #CJK UNIFIED IDEOGRAPH
+0x99E9 0x548E #CJK UNIFIED IDEOGRAPH
+0x99EA 0x545F #CJK UNIFIED IDEOGRAPH
+0x99EB 0x5471 #CJK UNIFIED IDEOGRAPH
+0x99EC 0x5477 #CJK UNIFIED IDEOGRAPH
+0x99ED 0x5470 #CJK UNIFIED IDEOGRAPH
+0x99EE 0x5492 #CJK UNIFIED IDEOGRAPH
+0x99EF 0x547B #CJK UNIFIED IDEOGRAPH
+0x99F0 0x5480 #CJK UNIFIED IDEOGRAPH
+0x99F1 0x5476 #CJK UNIFIED IDEOGRAPH
+0x99F2 0x5484 #CJK UNIFIED IDEOGRAPH
+0x99F3 0x5490 #CJK UNIFIED IDEOGRAPH
+0x99F4 0x5486 #CJK UNIFIED IDEOGRAPH
+0x99F5 0x54C7 #CJK UNIFIED IDEOGRAPH
+0x99F6 0x54A2 #CJK UNIFIED IDEOGRAPH
+0x99F7 0x54B8 #CJK UNIFIED IDEOGRAPH
+0x99F8 0x54A5 #CJK UNIFIED IDEOGRAPH
+0x99F9 0x54AC #CJK UNIFIED IDEOGRAPH
+0x99FA 0x54C4 #CJK UNIFIED IDEOGRAPH
+0x99FB 0x54C8 #CJK UNIFIED IDEOGRAPH
+0x99FC 0x54A8 #CJK UNIFIED IDEOGRAPH
+0x9A40 0x54AB #CJK UNIFIED IDEOGRAPH
+0x9A41 0x54C2 #CJK UNIFIED IDEOGRAPH
+0x9A42 0x54A4 #CJK UNIFIED IDEOGRAPH
+0x9A43 0x54BE #CJK UNIFIED IDEOGRAPH
+0x9A44 0x54BC #CJK UNIFIED IDEOGRAPH
+0x9A45 0x54D8 #CJK UNIFIED IDEOGRAPH
+0x9A46 0x54E5 #CJK UNIFIED IDEOGRAPH
+0x9A47 0x54E6 #CJK UNIFIED IDEOGRAPH
+0x9A48 0x550F #CJK UNIFIED IDEOGRAPH
+0x9A49 0x5514 #CJK UNIFIED IDEOGRAPH
+0x9A4A 0x54FD #CJK UNIFIED IDEOGRAPH
+0x9A4B 0x54EE #CJK UNIFIED IDEOGRAPH
+0x9A4C 0x54ED #CJK UNIFIED IDEOGRAPH
+0x9A4D 0x54FA #CJK UNIFIED IDEOGRAPH
+0x9A4E 0x54E2 #CJK UNIFIED IDEOGRAPH
+0x9A4F 0x5539 #CJK UNIFIED IDEOGRAPH
+0x9A50 0x5540 #CJK UNIFIED IDEOGRAPH
+0x9A51 0x5563 #CJK UNIFIED IDEOGRAPH
+0x9A52 0x554C #CJK UNIFIED IDEOGRAPH
+0x9A53 0x552E #CJK UNIFIED IDEOGRAPH
+0x9A54 0x555C #CJK UNIFIED IDEOGRAPH
+0x9A55 0x5545 #CJK UNIFIED IDEOGRAPH
+0x9A56 0x5556 #CJK UNIFIED IDEOGRAPH
+0x9A57 0x5557 #CJK UNIFIED IDEOGRAPH
+0x9A58 0x5538 #CJK UNIFIED IDEOGRAPH
+0x9A59 0x5533 #CJK UNIFIED IDEOGRAPH
+0x9A5A 0x555D #CJK UNIFIED IDEOGRAPH
+0x9A5B 0x5599 #CJK UNIFIED IDEOGRAPH
+0x9A5C 0x5580 #CJK UNIFIED IDEOGRAPH
+0x9A5D 0x54AF #CJK UNIFIED IDEOGRAPH
+0x9A5E 0x558A #CJK UNIFIED IDEOGRAPH
+0x9A5F 0x559F #CJK UNIFIED IDEOGRAPH
+0x9A60 0x557B #CJK UNIFIED IDEOGRAPH
+0x9A61 0x557E #CJK UNIFIED IDEOGRAPH
+0x9A62 0x5598 #CJK UNIFIED IDEOGRAPH
+0x9A63 0x559E #CJK UNIFIED IDEOGRAPH
+0x9A64 0x55AE #CJK UNIFIED IDEOGRAPH
+0x9A65 0x557C #CJK UNIFIED IDEOGRAPH
+0x9A66 0x5583 #CJK UNIFIED IDEOGRAPH
+0x9A67 0x55A9 #CJK UNIFIED IDEOGRAPH
+0x9A68 0x5587 #CJK UNIFIED IDEOGRAPH
+0x9A69 0x55A8 #CJK UNIFIED IDEOGRAPH
+0x9A6A 0x55DA #CJK UNIFIED IDEOGRAPH
+0x9A6B 0x55C5 #CJK UNIFIED IDEOGRAPH
+0x9A6C 0x55DF #CJK UNIFIED IDEOGRAPH
+0x9A6D 0x55C4 #CJK UNIFIED IDEOGRAPH
+0x9A6E 0x55DC #CJK UNIFIED IDEOGRAPH
+0x9A6F 0x55E4 #CJK UNIFIED IDEOGRAPH
+0x9A70 0x55D4 #CJK UNIFIED IDEOGRAPH
+0x9A71 0x5614 #CJK UNIFIED IDEOGRAPH
+0x9A72 0x55F7 #CJK UNIFIED IDEOGRAPH
+0x9A73 0x5616 #CJK UNIFIED IDEOGRAPH
+0x9A74 0x55FE #CJK UNIFIED IDEOGRAPH
+0x9A75 0x55FD #CJK UNIFIED IDEOGRAPH
+0x9A76 0x561B #CJK UNIFIED IDEOGRAPH
+0x9A77 0x55F9 #CJK UNIFIED IDEOGRAPH
+0x9A78 0x564E #CJK UNIFIED IDEOGRAPH
+0x9A79 0x5650 #CJK UNIFIED IDEOGRAPH
+0x9A7A 0x71DF #CJK UNIFIED IDEOGRAPH
+0x9A7B 0x5634 #CJK UNIFIED IDEOGRAPH
+0x9A7C 0x5636 #CJK UNIFIED IDEOGRAPH
+0x9A7D 0x5632 #CJK UNIFIED IDEOGRAPH
+0x9A7E 0x5638 #CJK UNIFIED IDEOGRAPH
+0x9A80 0x566B #CJK UNIFIED IDEOGRAPH
+0x9A81 0x5664 #CJK UNIFIED IDEOGRAPH
+0x9A82 0x562F #CJK UNIFIED IDEOGRAPH
+0x9A83 0x566C #CJK UNIFIED IDEOGRAPH
+0x9A84 0x566A #CJK UNIFIED IDEOGRAPH
+0x9A85 0x5686 #CJK UNIFIED IDEOGRAPH
+0x9A86 0x5680 #CJK UNIFIED IDEOGRAPH
+0x9A87 0x568A #CJK UNIFIED IDEOGRAPH
+0x9A88 0x56A0 #CJK UNIFIED IDEOGRAPH
+0x9A89 0x5694 #CJK UNIFIED IDEOGRAPH
+0x9A8A 0x568F #CJK UNIFIED IDEOGRAPH
+0x9A8B 0x56A5 #CJK UNIFIED IDEOGRAPH
+0x9A8C 0x56AE #CJK UNIFIED IDEOGRAPH
+0x9A8D 0x56B6 #CJK UNIFIED IDEOGRAPH
+0x9A8E 0x56B4 #CJK UNIFIED IDEOGRAPH
+0x9A8F 0x56C2 #CJK UNIFIED IDEOGRAPH
+0x9A90 0x56BC #CJK UNIFIED IDEOGRAPH
+0x9A91 0x56C1 #CJK UNIFIED IDEOGRAPH
+0x9A92 0x56C3 #CJK UNIFIED IDEOGRAPH
+0x9A93 0x56C0 #CJK UNIFIED IDEOGRAPH
+0x9A94 0x56C8 #CJK UNIFIED IDEOGRAPH
+0x9A95 0x56CE #CJK UNIFIED IDEOGRAPH
+0x9A96 0x56D1 #CJK UNIFIED IDEOGRAPH
+0x9A97 0x56D3 #CJK UNIFIED IDEOGRAPH
+0x9A98 0x56D7 #CJK UNIFIED IDEOGRAPH
+0x9A99 0x56EE #CJK UNIFIED IDEOGRAPH
+0x9A9A 0x56F9 #CJK UNIFIED IDEOGRAPH
+0x9A9B 0x5700 #CJK UNIFIED IDEOGRAPH
+0x9A9C 0x56FF #CJK UNIFIED IDEOGRAPH
+0x9A9D 0x5704 #CJK UNIFIED IDEOGRAPH
+0x9A9E 0x5709 #CJK UNIFIED IDEOGRAPH
+0x9A9F 0x5708 #CJK UNIFIED IDEOGRAPH
+0x9AA0 0x570B #CJK UNIFIED IDEOGRAPH
+0x9AA1 0x570D #CJK UNIFIED IDEOGRAPH
+0x9AA2 0x5713 #CJK UNIFIED IDEOGRAPH
+0x9AA3 0x5718 #CJK UNIFIED IDEOGRAPH
+0x9AA4 0x5716 #CJK UNIFIED IDEOGRAPH
+0x9AA5 0x55C7 #CJK UNIFIED IDEOGRAPH
+0x9AA6 0x571C #CJK UNIFIED IDEOGRAPH
+0x9AA7 0x5726 #CJK UNIFIED IDEOGRAPH
+0x9AA8 0x5737 #CJK UNIFIED IDEOGRAPH
+0x9AA9 0x5738 #CJK UNIFIED IDEOGRAPH
+0x9AAA 0x574E #CJK UNIFIED IDEOGRAPH
+0x9AAB 0x573B #CJK UNIFIED IDEOGRAPH
+0x9AAC 0x5740 #CJK UNIFIED IDEOGRAPH
+0x9AAD 0x574F #CJK UNIFIED IDEOGRAPH
+0x9AAE 0x5769 #CJK UNIFIED IDEOGRAPH
+0x9AAF 0x57C0 #CJK UNIFIED IDEOGRAPH
+0x9AB0 0x5788 #CJK UNIFIED IDEOGRAPH
+0x9AB1 0x5761 #CJK UNIFIED IDEOGRAPH
+0x9AB2 0x577F #CJK UNIFIED IDEOGRAPH
+0x9AB3 0x5789 #CJK UNIFIED IDEOGRAPH
+0x9AB4 0x5793 #CJK UNIFIED IDEOGRAPH
+0x9AB5 0x57A0 #CJK UNIFIED IDEOGRAPH
+0x9AB6 0x57B3 #CJK UNIFIED IDEOGRAPH
+0x9AB7 0x57A4 #CJK UNIFIED IDEOGRAPH
+0x9AB8 0x57AA #CJK UNIFIED IDEOGRAPH
+0x9AB9 0x57B0 #CJK UNIFIED IDEOGRAPH
+0x9ABA 0x57C3 #CJK UNIFIED IDEOGRAPH
+0x9ABB 0x57C6 #CJK UNIFIED IDEOGRAPH
+0x9ABC 0x57D4 #CJK UNIFIED IDEOGRAPH
+0x9ABD 0x57D2 #CJK UNIFIED IDEOGRAPH
+0x9ABE 0x57D3 #CJK UNIFIED IDEOGRAPH
+0x9ABF 0x580A #CJK UNIFIED IDEOGRAPH
+0x9AC0 0x57D6 #CJK UNIFIED IDEOGRAPH
+0x9AC1 0x57E3 #CJK UNIFIED IDEOGRAPH
+0x9AC2 0x580B #CJK UNIFIED IDEOGRAPH
+0x9AC3 0x5819 #CJK UNIFIED IDEOGRAPH
+0x9AC4 0x581D #CJK UNIFIED IDEOGRAPH
+0x9AC5 0x5872 #CJK UNIFIED IDEOGRAPH
+0x9AC6 0x5821 #CJK UNIFIED IDEOGRAPH
+0x9AC7 0x5862 #CJK UNIFIED IDEOGRAPH
+0x9AC8 0x584B #CJK UNIFIED IDEOGRAPH
+0x9AC9 0x5870 #CJK UNIFIED IDEOGRAPH
+0x9ACA 0x6BC0 #CJK UNIFIED IDEOGRAPH
+0x9ACB 0x5852 #CJK UNIFIED IDEOGRAPH
+0x9ACC 0x583D #CJK UNIFIED IDEOGRAPH
+0x9ACD 0x5879 #CJK UNIFIED IDEOGRAPH
+0x9ACE 0x5885 #CJK UNIFIED IDEOGRAPH
+0x9ACF 0x58B9 #CJK UNIFIED IDEOGRAPH
+0x9AD0 0x589F #CJK UNIFIED IDEOGRAPH
+0x9AD1 0x58AB #CJK UNIFIED IDEOGRAPH
+0x9AD2 0x58BA #CJK UNIFIED IDEOGRAPH
+0x9AD3 0x58DE #CJK UNIFIED IDEOGRAPH
+0x9AD4 0x58BB #CJK UNIFIED IDEOGRAPH
+0x9AD5 0x58B8 #CJK UNIFIED IDEOGRAPH
+0x9AD6 0x58AE #CJK UNIFIED IDEOGRAPH
+0x9AD7 0x58C5 #CJK UNIFIED IDEOGRAPH
+0x9AD8 0x58D3 #CJK UNIFIED IDEOGRAPH
+0x9AD9 0x58D1 #CJK UNIFIED IDEOGRAPH
+0x9ADA 0x58D7 #CJK UNIFIED IDEOGRAPH
+0x9ADB 0x58D9 #CJK UNIFIED IDEOGRAPH
+0x9ADC 0x58D8 #CJK UNIFIED IDEOGRAPH
+0x9ADD 0x58E5 #CJK UNIFIED IDEOGRAPH
+0x9ADE 0x58DC #CJK UNIFIED IDEOGRAPH
+0x9ADF 0x58E4 #CJK UNIFIED IDEOGRAPH
+0x9AE0 0x58DF #CJK UNIFIED IDEOGRAPH
+0x9AE1 0x58EF #CJK UNIFIED IDEOGRAPH
+0x9AE2 0x58FA #CJK UNIFIED IDEOGRAPH
+0x9AE3 0x58F9 #CJK UNIFIED IDEOGRAPH
+0x9AE4 0x58FB #CJK UNIFIED IDEOGRAPH
+0x9AE5 0x58FC #CJK UNIFIED IDEOGRAPH
+0x9AE6 0x58FD #CJK UNIFIED IDEOGRAPH
+0x9AE7 0x5902 #CJK UNIFIED IDEOGRAPH
+0x9AE8 0x590A #CJK UNIFIED IDEOGRAPH
+0x9AE9 0x5910 #CJK UNIFIED IDEOGRAPH
+0x9AEA 0x591B #CJK UNIFIED IDEOGRAPH
+0x9AEB 0x68A6 #CJK UNIFIED IDEOGRAPH
+0x9AEC 0x5925 #CJK UNIFIED IDEOGRAPH
+0x9AED 0x592C #CJK UNIFIED IDEOGRAPH
+0x9AEE 0x592D #CJK UNIFIED IDEOGRAPH
+0x9AEF 0x5932 #CJK UNIFIED IDEOGRAPH
+0x9AF0 0x5938 #CJK UNIFIED IDEOGRAPH
+0x9AF1 0x593E #CJK UNIFIED IDEOGRAPH
+0x9AF2 0x7AD2 #CJK UNIFIED IDEOGRAPH
+0x9AF3 0x5955 #CJK UNIFIED IDEOGRAPH
+0x9AF4 0x5950 #CJK UNIFIED IDEOGRAPH
+0x9AF5 0x594E #CJK UNIFIED IDEOGRAPH
+0x9AF6 0x595A #CJK UNIFIED IDEOGRAPH
+0x9AF7 0x5958 #CJK UNIFIED IDEOGRAPH
+0x9AF8 0x5962 #CJK UNIFIED IDEOGRAPH
+0x9AF9 0x5960 #CJK UNIFIED IDEOGRAPH
+0x9AFA 0x5967 #CJK UNIFIED IDEOGRAPH
+0x9AFB 0x596C #CJK UNIFIED IDEOGRAPH
+0x9AFC 0x5969 #CJK UNIFIED IDEOGRAPH
+0x9B40 0x5978 #CJK UNIFIED IDEOGRAPH
+0x9B41 0x5981 #CJK UNIFIED IDEOGRAPH
+0x9B42 0x599D #CJK UNIFIED IDEOGRAPH
+0x9B43 0x4F5E #CJK UNIFIED IDEOGRAPH
+0x9B44 0x4FAB #CJK UNIFIED IDEOGRAPH
+0x9B45 0x59A3 #CJK UNIFIED IDEOGRAPH
+0x9B46 0x59B2 #CJK UNIFIED IDEOGRAPH
+0x9B47 0x59C6 #CJK UNIFIED IDEOGRAPH
+0x9B48 0x59E8 #CJK UNIFIED IDEOGRAPH
+0x9B49 0x59DC #CJK UNIFIED IDEOGRAPH
+0x9B4A 0x598D #CJK UNIFIED IDEOGRAPH
+0x9B4B 0x59D9 #CJK UNIFIED IDEOGRAPH
+0x9B4C 0x59DA #CJK UNIFIED IDEOGRAPH
+0x9B4D 0x5A25 #CJK UNIFIED IDEOGRAPH
+0x9B4E 0x5A1F #CJK UNIFIED IDEOGRAPH
+0x9B4F 0x5A11 #CJK UNIFIED IDEOGRAPH
+0x9B50 0x5A1C #CJK UNIFIED IDEOGRAPH
+0x9B51 0x5A09 #CJK UNIFIED IDEOGRAPH
+0x9B52 0x5A1A #CJK UNIFIED IDEOGRAPH
+0x9B53 0x5A40 #CJK UNIFIED IDEOGRAPH
+0x9B54 0x5A6C #CJK UNIFIED IDEOGRAPH
+0x9B55 0x5A49 #CJK UNIFIED IDEOGRAPH
+0x9B56 0x5A35 #CJK UNIFIED IDEOGRAPH
+0x9B57 0x5A36 #CJK UNIFIED IDEOGRAPH
+0x9B58 0x5A62 #CJK UNIFIED IDEOGRAPH
+0x9B59 0x5A6A #CJK UNIFIED IDEOGRAPH
+0x9B5A 0x5A9A #CJK UNIFIED IDEOGRAPH
+0x9B5B 0x5ABC #CJK UNIFIED IDEOGRAPH
+0x9B5C 0x5ABE #CJK UNIFIED IDEOGRAPH
+0x9B5D 0x5ACB #CJK UNIFIED IDEOGRAPH
+0x9B5E 0x5AC2 #CJK UNIFIED IDEOGRAPH
+0x9B5F 0x5ABD #CJK UNIFIED IDEOGRAPH
+0x9B60 0x5AE3 #CJK UNIFIED IDEOGRAPH
+0x9B61 0x5AD7 #CJK UNIFIED IDEOGRAPH
+0x9B62 0x5AE6 #CJK UNIFIED IDEOGRAPH
+0x9B63 0x5AE9 #CJK UNIFIED IDEOGRAPH
+0x9B64 0x5AD6 #CJK UNIFIED IDEOGRAPH
+0x9B65 0x5AFA #CJK UNIFIED IDEOGRAPH
+0x9B66 0x5AFB #CJK UNIFIED IDEOGRAPH
+0x9B67 0x5B0C #CJK UNIFIED IDEOGRAPH
+0x9B68 0x5B0B #CJK UNIFIED IDEOGRAPH
+0x9B69 0x5B16 #CJK UNIFIED IDEOGRAPH
+0x9B6A 0x5B32 #CJK UNIFIED IDEOGRAPH
+0x9B6B 0x5AD0 #CJK UNIFIED IDEOGRAPH
+0x9B6C 0x5B2A #CJK UNIFIED IDEOGRAPH
+0x9B6D 0x5B36 #CJK UNIFIED IDEOGRAPH
+0x9B6E 0x5B3E #CJK UNIFIED IDEOGRAPH
+0x9B6F 0x5B43 #CJK UNIFIED IDEOGRAPH
+0x9B70 0x5B45 #CJK UNIFIED IDEOGRAPH
+0x9B71 0x5B40 #CJK UNIFIED IDEOGRAPH
+0x9B72 0x5B51 #CJK UNIFIED IDEOGRAPH
+0x9B73 0x5B55 #CJK UNIFIED IDEOGRAPH
+0x9B74 0x5B5A #CJK UNIFIED IDEOGRAPH
+0x9B75 0x5B5B #CJK UNIFIED IDEOGRAPH
+0x9B76 0x5B65 #CJK UNIFIED IDEOGRAPH
+0x9B77 0x5B69 #CJK UNIFIED IDEOGRAPH
+0x9B78 0x5B70 #CJK UNIFIED IDEOGRAPH
+0x9B79 0x5B73 #CJK UNIFIED IDEOGRAPH
+0x9B7A 0x5B75 #CJK UNIFIED IDEOGRAPH
+0x9B7B 0x5B78 #CJK UNIFIED IDEOGRAPH
+0x9B7C 0x6588 #CJK UNIFIED IDEOGRAPH
+0x9B7D 0x5B7A #CJK UNIFIED IDEOGRAPH
+0x9B7E 0x5B80 #CJK UNIFIED IDEOGRAPH
+0x9B80 0x5B83 #CJK UNIFIED IDEOGRAPH
+0x9B81 0x5BA6 #CJK UNIFIED IDEOGRAPH
+0x9B82 0x5BB8 #CJK UNIFIED IDEOGRAPH
+0x9B83 0x5BC3 #CJK UNIFIED IDEOGRAPH
+0x9B84 0x5BC7 #CJK UNIFIED IDEOGRAPH
+0x9B85 0x5BC9 #CJK UNIFIED IDEOGRAPH
+0x9B86 0x5BD4 #CJK UNIFIED IDEOGRAPH
+0x9B87 0x5BD0 #CJK UNIFIED IDEOGRAPH
+0x9B88 0x5BE4 #CJK UNIFIED IDEOGRAPH
+0x9B89 0x5BE6 #CJK UNIFIED IDEOGRAPH
+0x9B8A 0x5BE2 #CJK UNIFIED IDEOGRAPH
+0x9B8B 0x5BDE #CJK UNIFIED IDEOGRAPH
+0x9B8C 0x5BE5 #CJK UNIFIED IDEOGRAPH
+0x9B8D 0x5BEB #CJK UNIFIED IDEOGRAPH
+0x9B8E 0x5BF0 #CJK UNIFIED IDEOGRAPH
+0x9B8F 0x5BF6 #CJK UNIFIED IDEOGRAPH
+0x9B90 0x5BF3 #CJK UNIFIED IDEOGRAPH
+0x9B91 0x5C05 #CJK UNIFIED IDEOGRAPH
+0x9B92 0x5C07 #CJK UNIFIED IDEOGRAPH
+0x9B93 0x5C08 #CJK UNIFIED IDEOGRAPH
+0x9B94 0x5C0D #CJK UNIFIED IDEOGRAPH
+0x9B95 0x5C13 #CJK UNIFIED IDEOGRAPH
+0x9B96 0x5C20 #CJK UNIFIED IDEOGRAPH
+0x9B97 0x5C22 #CJK UNIFIED IDEOGRAPH
+0x9B98 0x5C28 #CJK UNIFIED IDEOGRAPH
+0x9B99 0x5C38 #CJK UNIFIED IDEOGRAPH
+0x9B9A 0x5C39 #CJK UNIFIED IDEOGRAPH
+0x9B9B 0x5C41 #CJK UNIFIED IDEOGRAPH
+0x9B9C 0x5C46 #CJK UNIFIED IDEOGRAPH
+0x9B9D 0x5C4E #CJK UNIFIED IDEOGRAPH
+0x9B9E 0x5C53 #CJK UNIFIED IDEOGRAPH
+0x9B9F 0x5C50 #CJK UNIFIED IDEOGRAPH
+0x9BA0 0x5C4F #CJK UNIFIED IDEOGRAPH
+0x9BA1 0x5B71 #CJK UNIFIED IDEOGRAPH
+0x9BA2 0x5C6C #CJK UNIFIED IDEOGRAPH
+0x9BA3 0x5C6E #CJK UNIFIED IDEOGRAPH
+0x9BA4 0x4E62 #CJK UNIFIED IDEOGRAPH
+0x9BA5 0x5C76 #CJK UNIFIED IDEOGRAPH
+0x9BA6 0x5C79 #CJK UNIFIED IDEOGRAPH
+0x9BA7 0x5C8C #CJK UNIFIED IDEOGRAPH
+0x9BA8 0x5C91 #CJK UNIFIED IDEOGRAPH
+0x9BA9 0x5C94 #CJK UNIFIED IDEOGRAPH
+0x9BAA 0x599B #CJK UNIFIED IDEOGRAPH
+0x9BAB 0x5CAB #CJK UNIFIED IDEOGRAPH
+0x9BAC 0x5CBB #CJK UNIFIED IDEOGRAPH
+0x9BAD 0x5CB6 #CJK UNIFIED IDEOGRAPH
+0x9BAE 0x5CBC #CJK UNIFIED IDEOGRAPH
+0x9BAF 0x5CB7 #CJK UNIFIED IDEOGRAPH
+0x9BB0 0x5CC5 #CJK UNIFIED IDEOGRAPH
+0x9BB1 0x5CBE #CJK UNIFIED IDEOGRAPH
+0x9BB2 0x5CC7 #CJK UNIFIED IDEOGRAPH
+0x9BB3 0x5CD9 #CJK UNIFIED IDEOGRAPH
+0x9BB4 0x5CE9 #CJK UNIFIED IDEOGRAPH
+0x9BB5 0x5CFD #CJK UNIFIED IDEOGRAPH
+0x9BB6 0x5CFA #CJK UNIFIED IDEOGRAPH
+0x9BB7 0x5CED #CJK UNIFIED IDEOGRAPH
+0x9BB8 0x5D8C #CJK UNIFIED IDEOGRAPH
+0x9BB9 0x5CEA #CJK UNIFIED IDEOGRAPH
+0x9BBA 0x5D0B #CJK UNIFIED IDEOGRAPH
+0x9BBB 0x5D15 #CJK UNIFIED IDEOGRAPH
+0x9BBC 0x5D17 #CJK UNIFIED IDEOGRAPH
+0x9BBD 0x5D5C #CJK UNIFIED IDEOGRAPH
+0x9BBE 0x5D1F #CJK UNIFIED IDEOGRAPH
+0x9BBF 0x5D1B #CJK UNIFIED IDEOGRAPH
+0x9BC0 0x5D11 #CJK UNIFIED IDEOGRAPH
+0x9BC1 0x5D14 #CJK UNIFIED IDEOGRAPH
+0x9BC2 0x5D22 #CJK UNIFIED IDEOGRAPH
+0x9BC3 0x5D1A #CJK UNIFIED IDEOGRAPH
+0x9BC4 0x5D19 #CJK UNIFIED IDEOGRAPH
+0x9BC5 0x5D18 #CJK UNIFIED IDEOGRAPH
+0x9BC6 0x5D4C #CJK UNIFIED IDEOGRAPH
+0x9BC7 0x5D52 #CJK UNIFIED IDEOGRAPH
+0x9BC8 0x5D4E #CJK UNIFIED IDEOGRAPH
+0x9BC9 0x5D4B #CJK UNIFIED IDEOGRAPH
+0x9BCA 0x5D6C #CJK UNIFIED IDEOGRAPH
+0x9BCB 0x5D73 #CJK UNIFIED IDEOGRAPH
+0x9BCC 0x5D76 #CJK UNIFIED IDEOGRAPH
+0x9BCD 0x5D87 #CJK UNIFIED IDEOGRAPH
+0x9BCE 0x5D84 #CJK UNIFIED IDEOGRAPH
+0x9BCF 0x5D82 #CJK UNIFIED IDEOGRAPH
+0x9BD0 0x5DA2 #CJK UNIFIED IDEOGRAPH
+0x9BD1 0x5D9D #CJK UNIFIED IDEOGRAPH
+0x9BD2 0x5DAC #CJK UNIFIED IDEOGRAPH
+0x9BD3 0x5DAE #CJK UNIFIED IDEOGRAPH
+0x9BD4 0x5DBD #CJK UNIFIED IDEOGRAPH
+0x9BD5 0x5D90 #CJK UNIFIED IDEOGRAPH
+0x9BD6 0x5DB7 #CJK UNIFIED IDEOGRAPH
+0x9BD7 0x5DBC #CJK UNIFIED IDEOGRAPH
+0x9BD8 0x5DC9 #CJK UNIFIED IDEOGRAPH
+0x9BD9 0x5DCD #CJK UNIFIED IDEOGRAPH
+0x9BDA 0x5DD3 #CJK UNIFIED IDEOGRAPH
+0x9BDB 0x5DD2 #CJK UNIFIED IDEOGRAPH
+0x9BDC 0x5DD6 #CJK UNIFIED IDEOGRAPH
+0x9BDD 0x5DDB #CJK UNIFIED IDEOGRAPH
+0x9BDE 0x5DEB #CJK UNIFIED IDEOGRAPH
+0x9BDF 0x5DF2 #CJK UNIFIED IDEOGRAPH
+0x9BE0 0x5DF5 #CJK UNIFIED IDEOGRAPH
+0x9BE1 0x5E0B #CJK UNIFIED IDEOGRAPH
+0x9BE2 0x5E1A #CJK UNIFIED IDEOGRAPH
+0x9BE3 0x5E19 #CJK UNIFIED IDEOGRAPH
+0x9BE4 0x5E11 #CJK UNIFIED IDEOGRAPH
+0x9BE5 0x5E1B #CJK UNIFIED IDEOGRAPH
+0x9BE6 0x5E36 #CJK UNIFIED IDEOGRAPH
+0x9BE7 0x5E37 #CJK UNIFIED IDEOGRAPH
+0x9BE8 0x5E44 #CJK UNIFIED IDEOGRAPH
+0x9BE9 0x5E43 #CJK UNIFIED IDEOGRAPH
+0x9BEA 0x5E40 #CJK UNIFIED IDEOGRAPH
+0x9BEB 0x5E4E #CJK UNIFIED IDEOGRAPH
+0x9BEC 0x5E57 #CJK UNIFIED IDEOGRAPH
+0x9BED 0x5E54 #CJK UNIFIED IDEOGRAPH
+0x9BEE 0x5E5F #CJK UNIFIED IDEOGRAPH
+0x9BEF 0x5E62 #CJK UNIFIED IDEOGRAPH
+0x9BF0 0x5E64 #CJK UNIFIED IDEOGRAPH
+0x9BF1 0x5E47 #CJK UNIFIED IDEOGRAPH
+0x9BF2 0x5E75 #CJK UNIFIED IDEOGRAPH
+0x9BF3 0x5E76 #CJK UNIFIED IDEOGRAPH
+0x9BF4 0x5E7A #CJK UNIFIED IDEOGRAPH
+0x9BF5 0x9EBC #CJK UNIFIED IDEOGRAPH
+0x9BF6 0x5E7F #CJK UNIFIED IDEOGRAPH
+0x9BF7 0x5EA0 #CJK UNIFIED IDEOGRAPH
+0x9BF8 0x5EC1 #CJK UNIFIED IDEOGRAPH
+0x9BF9 0x5EC2 #CJK UNIFIED IDEOGRAPH
+0x9BFA 0x5EC8 #CJK UNIFIED IDEOGRAPH
+0x9BFB 0x5ED0 #CJK UNIFIED IDEOGRAPH
+0x9BFC 0x5ECF #CJK UNIFIED IDEOGRAPH
+0x9C40 0x5ED6 #CJK UNIFIED IDEOGRAPH
+0x9C41 0x5EE3 #CJK UNIFIED IDEOGRAPH
+0x9C42 0x5EDD #CJK UNIFIED IDEOGRAPH
+0x9C43 0x5EDA #CJK UNIFIED IDEOGRAPH
+0x9C44 0x5EDB #CJK UNIFIED IDEOGRAPH
+0x9C45 0x5EE2 #CJK UNIFIED IDEOGRAPH
+0x9C46 0x5EE1 #CJK UNIFIED IDEOGRAPH
+0x9C47 0x5EE8 #CJK UNIFIED IDEOGRAPH
+0x9C48 0x5EE9 #CJK UNIFIED IDEOGRAPH
+0x9C49 0x5EEC #CJK UNIFIED IDEOGRAPH
+0x9C4A 0x5EF1 #CJK UNIFIED IDEOGRAPH
+0x9C4B 0x5EF3 #CJK UNIFIED IDEOGRAPH
+0x9C4C 0x5EF0 #CJK UNIFIED IDEOGRAPH
+0x9C4D 0x5EF4 #CJK UNIFIED IDEOGRAPH
+0x9C4E 0x5EF8 #CJK UNIFIED IDEOGRAPH
+0x9C4F 0x5EFE #CJK UNIFIED IDEOGRAPH
+0x9C50 0x5F03 #CJK UNIFIED IDEOGRAPH
+0x9C51 0x5F09 #CJK UNIFIED IDEOGRAPH
+0x9C52 0x5F5D #CJK UNIFIED IDEOGRAPH
+0x9C53 0x5F5C #CJK UNIFIED IDEOGRAPH
+0x9C54 0x5F0B #CJK UNIFIED IDEOGRAPH
+0x9C55 0x5F11 #CJK UNIFIED IDEOGRAPH
+0x9C56 0x5F16 #CJK UNIFIED IDEOGRAPH
+0x9C57 0x5F29 #CJK UNIFIED IDEOGRAPH
+0x9C58 0x5F2D #CJK UNIFIED IDEOGRAPH
+0x9C59 0x5F38 #CJK UNIFIED IDEOGRAPH
+0x9C5A 0x5F41 #CJK UNIFIED IDEOGRAPH
+0x9C5B 0x5F48 #CJK UNIFIED IDEOGRAPH
+0x9C5C 0x5F4C #CJK UNIFIED IDEOGRAPH
+0x9C5D 0x5F4E #CJK UNIFIED IDEOGRAPH
+0x9C5E 0x5F2F #CJK UNIFIED IDEOGRAPH
+0x9C5F 0x5F51 #CJK UNIFIED IDEOGRAPH
+0x9C60 0x5F56 #CJK UNIFIED IDEOGRAPH
+0x9C61 0x5F57 #CJK UNIFIED IDEOGRAPH
+0x9C62 0x5F59 #CJK UNIFIED IDEOGRAPH
+0x9C63 0x5F61 #CJK UNIFIED IDEOGRAPH
+0x9C64 0x5F6D #CJK UNIFIED IDEOGRAPH
+0x9C65 0x5F73 #CJK UNIFIED IDEOGRAPH
+0x9C66 0x5F77 #CJK UNIFIED IDEOGRAPH
+0x9C67 0x5F83 #CJK UNIFIED IDEOGRAPH
+0x9C68 0x5F82 #CJK UNIFIED IDEOGRAPH
+0x9C69 0x5F7F #CJK UNIFIED IDEOGRAPH
+0x9C6A 0x5F8A #CJK UNIFIED IDEOGRAPH
+0x9C6B 0x5F88 #CJK UNIFIED IDEOGRAPH
+0x9C6C 0x5F91 #CJK UNIFIED IDEOGRAPH
+0x9C6D 0x5F87 #CJK UNIFIED IDEOGRAPH
+0x9C6E 0x5F9E #CJK UNIFIED IDEOGRAPH
+0x9C6F 0x5F99 #CJK UNIFIED IDEOGRAPH
+0x9C70 0x5F98 #CJK UNIFIED IDEOGRAPH
+0x9C71 0x5FA0 #CJK UNIFIED IDEOGRAPH
+0x9C72 0x5FA8 #CJK UNIFIED IDEOGRAPH
+0x9C73 0x5FAD #CJK UNIFIED IDEOGRAPH
+0x9C74 0x5FBC #CJK UNIFIED IDEOGRAPH
+0x9C75 0x5FD6 #CJK UNIFIED IDEOGRAPH
+0x9C76 0x5FFB #CJK UNIFIED IDEOGRAPH
+0x9C77 0x5FE4 #CJK UNIFIED IDEOGRAPH
+0x9C78 0x5FF8 #CJK UNIFIED IDEOGRAPH
+0x9C79 0x5FF1 #CJK UNIFIED IDEOGRAPH
+0x9C7A 0x5FDD #CJK UNIFIED IDEOGRAPH
+0x9C7B 0x60B3 #CJK UNIFIED IDEOGRAPH
+0x9C7C 0x5FFF #CJK UNIFIED IDEOGRAPH
+0x9C7D 0x6021 #CJK UNIFIED IDEOGRAPH
+0x9C7E 0x6060 #CJK UNIFIED IDEOGRAPH
+0x9C80 0x6019 #CJK UNIFIED IDEOGRAPH
+0x9C81 0x6010 #CJK UNIFIED IDEOGRAPH
+0x9C82 0x6029 #CJK UNIFIED IDEOGRAPH
+0x9C83 0x600E #CJK UNIFIED IDEOGRAPH
+0x9C84 0x6031 #CJK UNIFIED IDEOGRAPH
+0x9C85 0x601B #CJK UNIFIED IDEOGRAPH
+0x9C86 0x6015 #CJK UNIFIED IDEOGRAPH
+0x9C87 0x602B #CJK UNIFIED IDEOGRAPH
+0x9C88 0x6026 #CJK UNIFIED IDEOGRAPH
+0x9C89 0x600F #CJK UNIFIED IDEOGRAPH
+0x9C8A 0x603A #CJK UNIFIED IDEOGRAPH
+0x9C8B 0x605A #CJK UNIFIED IDEOGRAPH
+0x9C8C 0x6041 #CJK UNIFIED IDEOGRAPH
+0x9C8D 0x606A #CJK UNIFIED IDEOGRAPH
+0x9C8E 0x6077 #CJK UNIFIED IDEOGRAPH
+0x9C8F 0x605F #CJK UNIFIED IDEOGRAPH
+0x9C90 0x604A #CJK UNIFIED IDEOGRAPH
+0x9C91 0x6046 #CJK UNIFIED IDEOGRAPH
+0x9C92 0x604D #CJK UNIFIED IDEOGRAPH
+0x9C93 0x6063 #CJK UNIFIED IDEOGRAPH
+0x9C94 0x6043 #CJK UNIFIED IDEOGRAPH
+0x9C95 0x6064 #CJK UNIFIED IDEOGRAPH
+0x9C96 0x6042 #CJK UNIFIED IDEOGRAPH
+0x9C97 0x606C #CJK UNIFIED IDEOGRAPH
+0x9C98 0x606B #CJK UNIFIED IDEOGRAPH
+0x9C99 0x6059 #CJK UNIFIED IDEOGRAPH
+0x9C9A 0x6081 #CJK UNIFIED IDEOGRAPH
+0x9C9B 0x608D #CJK UNIFIED IDEOGRAPH
+0x9C9C 0x60E7 #CJK UNIFIED IDEOGRAPH
+0x9C9D 0x6083 #CJK UNIFIED IDEOGRAPH
+0x9C9E 0x609A #CJK UNIFIED IDEOGRAPH
+0x9C9F 0x6084 #CJK UNIFIED IDEOGRAPH
+0x9CA0 0x609B #CJK UNIFIED IDEOGRAPH
+0x9CA1 0x6096 #CJK UNIFIED IDEOGRAPH
+0x9CA2 0x6097 #CJK UNIFIED IDEOGRAPH
+0x9CA3 0x6092 #CJK UNIFIED IDEOGRAPH
+0x9CA4 0x60A7 #CJK UNIFIED IDEOGRAPH
+0x9CA5 0x608B #CJK UNIFIED IDEOGRAPH
+0x9CA6 0x60E1 #CJK UNIFIED IDEOGRAPH
+0x9CA7 0x60B8 #CJK UNIFIED IDEOGRAPH
+0x9CA8 0x60E0 #CJK UNIFIED IDEOGRAPH
+0x9CA9 0x60D3 #CJK UNIFIED IDEOGRAPH
+0x9CAA 0x60B4 #CJK UNIFIED IDEOGRAPH
+0x9CAB 0x5FF0 #CJK UNIFIED IDEOGRAPH
+0x9CAC 0x60BD #CJK UNIFIED IDEOGRAPH
+0x9CAD 0x60C6 #CJK UNIFIED IDEOGRAPH
+0x9CAE 0x60B5 #CJK UNIFIED IDEOGRAPH
+0x9CAF 0x60D8 #CJK UNIFIED IDEOGRAPH
+0x9CB0 0x614D #CJK UNIFIED IDEOGRAPH
+0x9CB1 0x6115 #CJK UNIFIED IDEOGRAPH
+0x9CB2 0x6106 #CJK UNIFIED IDEOGRAPH
+0x9CB3 0x60F6 #CJK UNIFIED IDEOGRAPH
+0x9CB4 0x60F7 #CJK UNIFIED IDEOGRAPH
+0x9CB5 0x6100 #CJK UNIFIED IDEOGRAPH
+0x9CB6 0x60F4 #CJK UNIFIED IDEOGRAPH
+0x9CB7 0x60FA #CJK UNIFIED IDEOGRAPH
+0x9CB8 0x6103 #CJK UNIFIED IDEOGRAPH
+0x9CB9 0x6121 #CJK UNIFIED IDEOGRAPH
+0x9CBA 0x60FB #CJK UNIFIED IDEOGRAPH
+0x9CBB 0x60F1 #CJK UNIFIED IDEOGRAPH
+0x9CBC 0x610D #CJK UNIFIED IDEOGRAPH
+0x9CBD 0x610E #CJK UNIFIED IDEOGRAPH
+0x9CBE 0x6147 #CJK UNIFIED IDEOGRAPH
+0x9CBF 0x613E #CJK UNIFIED IDEOGRAPH
+0x9CC0 0x6128 #CJK UNIFIED IDEOGRAPH
+0x9CC1 0x6127 #CJK UNIFIED IDEOGRAPH
+0x9CC2 0x614A #CJK UNIFIED IDEOGRAPH
+0x9CC3 0x613F #CJK UNIFIED IDEOGRAPH
+0x9CC4 0x613C #CJK UNIFIED IDEOGRAPH
+0x9CC5 0x612C #CJK UNIFIED IDEOGRAPH
+0x9CC6 0x6134 #CJK UNIFIED IDEOGRAPH
+0x9CC7 0x613D #CJK UNIFIED IDEOGRAPH
+0x9CC8 0x6142 #CJK UNIFIED IDEOGRAPH
+0x9CC9 0x6144 #CJK UNIFIED IDEOGRAPH
+0x9CCA 0x6173 #CJK UNIFIED IDEOGRAPH
+0x9CCB 0x6177 #CJK UNIFIED IDEOGRAPH
+0x9CCC 0x6158 #CJK UNIFIED IDEOGRAPH
+0x9CCD 0x6159 #CJK UNIFIED IDEOGRAPH
+0x9CCE 0x615A #CJK UNIFIED IDEOGRAPH
+0x9CCF 0x616B #CJK UNIFIED IDEOGRAPH
+0x9CD0 0x6174 #CJK UNIFIED IDEOGRAPH
+0x9CD1 0x616F #CJK UNIFIED IDEOGRAPH
+0x9CD2 0x6165 #CJK UNIFIED IDEOGRAPH
+0x9CD3 0x6171 #CJK UNIFIED IDEOGRAPH
+0x9CD4 0x615F #CJK UNIFIED IDEOGRAPH
+0x9CD5 0x615D #CJK UNIFIED IDEOGRAPH
+0x9CD6 0x6153 #CJK UNIFIED IDEOGRAPH
+0x9CD7 0x6175 #CJK UNIFIED IDEOGRAPH
+0x9CD8 0x6199 #CJK UNIFIED IDEOGRAPH
+0x9CD9 0x6196 #CJK UNIFIED IDEOGRAPH
+0x9CDA 0x6187 #CJK UNIFIED IDEOGRAPH
+0x9CDB 0x61AC #CJK UNIFIED IDEOGRAPH
+0x9CDC 0x6194 #CJK UNIFIED IDEOGRAPH
+0x9CDD 0x619A #CJK UNIFIED IDEOGRAPH
+0x9CDE 0x618A #CJK UNIFIED IDEOGRAPH
+0x9CDF 0x6191 #CJK UNIFIED IDEOGRAPH
+0x9CE0 0x61AB #CJK UNIFIED IDEOGRAPH
+0x9CE1 0x61AE #CJK UNIFIED IDEOGRAPH
+0x9CE2 0x61CC #CJK UNIFIED IDEOGRAPH
+0x9CE3 0x61CA #CJK UNIFIED IDEOGRAPH
+0x9CE4 0x61C9 #CJK UNIFIED IDEOGRAPH
+0x9CE5 0x61F7 #CJK UNIFIED IDEOGRAPH
+0x9CE6 0x61C8 #CJK UNIFIED IDEOGRAPH
+0x9CE7 0x61C3 #CJK UNIFIED IDEOGRAPH
+0x9CE8 0x61C6 #CJK UNIFIED IDEOGRAPH
+0x9CE9 0x61BA #CJK UNIFIED IDEOGRAPH
+0x9CEA 0x61CB #CJK UNIFIED IDEOGRAPH
+0x9CEB 0x7F79 #CJK UNIFIED IDEOGRAPH
+0x9CEC 0x61CD #CJK UNIFIED IDEOGRAPH
+0x9CED 0x61E6 #CJK UNIFIED IDEOGRAPH
+0x9CEE 0x61E3 #CJK UNIFIED IDEOGRAPH
+0x9CEF 0x61F6 #CJK UNIFIED IDEOGRAPH
+0x9CF0 0x61FA #CJK UNIFIED IDEOGRAPH
+0x9CF1 0x61F4 #CJK UNIFIED IDEOGRAPH
+0x9CF2 0x61FF #CJK UNIFIED IDEOGRAPH
+0x9CF3 0x61FD #CJK UNIFIED IDEOGRAPH
+0x9CF4 0x61FC #CJK UNIFIED IDEOGRAPH
+0x9CF5 0x61FE #CJK UNIFIED IDEOGRAPH
+0x9CF6 0x6200 #CJK UNIFIED IDEOGRAPH
+0x9CF7 0x6208 #CJK UNIFIED IDEOGRAPH
+0x9CF8 0x6209 #CJK UNIFIED IDEOGRAPH
+0x9CF9 0x620D #CJK UNIFIED IDEOGRAPH
+0x9CFA 0x620C #CJK UNIFIED IDEOGRAPH
+0x9CFB 0x6214 #CJK UNIFIED IDEOGRAPH
+0x9CFC 0x621B #CJK UNIFIED IDEOGRAPH
+0x9D40 0x621E #CJK UNIFIED IDEOGRAPH
+0x9D41 0x6221 #CJK UNIFIED IDEOGRAPH
+0x9D42 0x622A #CJK UNIFIED IDEOGRAPH
+0x9D43 0x622E #CJK UNIFIED IDEOGRAPH
+0x9D44 0x6230 #CJK UNIFIED IDEOGRAPH
+0x9D45 0x6232 #CJK UNIFIED IDEOGRAPH
+0x9D46 0x6233 #CJK UNIFIED IDEOGRAPH
+0x9D47 0x6241 #CJK UNIFIED IDEOGRAPH
+0x9D48 0x624E #CJK UNIFIED IDEOGRAPH
+0x9D49 0x625E #CJK UNIFIED IDEOGRAPH
+0x9D4A 0x6263 #CJK UNIFIED IDEOGRAPH
+0x9D4B 0x625B #CJK UNIFIED IDEOGRAPH
+0x9D4C 0x6260 #CJK UNIFIED IDEOGRAPH
+0x9D4D 0x6268 #CJK UNIFIED IDEOGRAPH
+0x9D4E 0x627C #CJK UNIFIED IDEOGRAPH
+0x9D4F 0x6282 #CJK UNIFIED IDEOGRAPH
+0x9D50 0x6289 #CJK UNIFIED IDEOGRAPH
+0x9D51 0x627E #CJK UNIFIED IDEOGRAPH
+0x9D52 0x6292 #CJK UNIFIED IDEOGRAPH
+0x9D53 0x6293 #CJK UNIFIED IDEOGRAPH
+0x9D54 0x6296 #CJK UNIFIED IDEOGRAPH
+0x9D55 0x62D4 #CJK UNIFIED IDEOGRAPH
+0x9D56 0x6283 #CJK UNIFIED IDEOGRAPH
+0x9D57 0x6294 #CJK UNIFIED IDEOGRAPH
+0x9D58 0x62D7 #CJK UNIFIED IDEOGRAPH
+0x9D59 0x62D1 #CJK UNIFIED IDEOGRAPH
+0x9D5A 0x62BB #CJK UNIFIED IDEOGRAPH
+0x9D5B 0x62CF #CJK UNIFIED IDEOGRAPH
+0x9D5C 0x62FF #CJK UNIFIED IDEOGRAPH
+0x9D5D 0x62C6 #CJK UNIFIED IDEOGRAPH
+0x9D5E 0x64D4 #CJK UNIFIED IDEOGRAPH
+0x9D5F 0x62C8 #CJK UNIFIED IDEOGRAPH
+0x9D60 0x62DC #CJK UNIFIED IDEOGRAPH
+0x9D61 0x62CC #CJK UNIFIED IDEOGRAPH
+0x9D62 0x62CA #CJK UNIFIED IDEOGRAPH
+0x9D63 0x62C2 #CJK UNIFIED IDEOGRAPH
+0x9D64 0x62C7 #CJK UNIFIED IDEOGRAPH
+0x9D65 0x629B #CJK UNIFIED IDEOGRAPH
+0x9D66 0x62C9 #CJK UNIFIED IDEOGRAPH
+0x9D67 0x630C #CJK UNIFIED IDEOGRAPH
+0x9D68 0x62EE #CJK UNIFIED IDEOGRAPH
+0x9D69 0x62F1 #CJK UNIFIED IDEOGRAPH
+0x9D6A 0x6327 #CJK UNIFIED IDEOGRAPH
+0x9D6B 0x6302 #CJK UNIFIED IDEOGRAPH
+0x9D6C 0x6308 #CJK UNIFIED IDEOGRAPH
+0x9D6D 0x62EF #CJK UNIFIED IDEOGRAPH
+0x9D6E 0x62F5 #CJK UNIFIED IDEOGRAPH
+0x9D6F 0x6350 #CJK UNIFIED IDEOGRAPH
+0x9D70 0x633E #CJK UNIFIED IDEOGRAPH
+0x9D71 0x634D #CJK UNIFIED IDEOGRAPH
+0x9D72 0x641C #CJK UNIFIED IDEOGRAPH
+0x9D73 0x634F #CJK UNIFIED IDEOGRAPH
+0x9D74 0x6396 #CJK UNIFIED IDEOGRAPH
+0x9D75 0x638E #CJK UNIFIED IDEOGRAPH
+0x9D76 0x6380 #CJK UNIFIED IDEOGRAPH
+0x9D77 0x63AB #CJK UNIFIED IDEOGRAPH
+0x9D78 0x6376 #CJK UNIFIED IDEOGRAPH
+0x9D79 0x63A3 #CJK UNIFIED IDEOGRAPH
+0x9D7A 0x638F #CJK UNIFIED IDEOGRAPH
+0x9D7B 0x6389 #CJK UNIFIED IDEOGRAPH
+0x9D7C 0x639F #CJK UNIFIED IDEOGRAPH
+0x9D7D 0x63B5 #CJK UNIFIED IDEOGRAPH
+0x9D7E 0x636B #CJK UNIFIED IDEOGRAPH
+0x9D80 0x6369 #CJK UNIFIED IDEOGRAPH
+0x9D81 0x63BE #CJK UNIFIED IDEOGRAPH
+0x9D82 0x63E9 #CJK UNIFIED IDEOGRAPH
+0x9D83 0x63C0 #CJK UNIFIED IDEOGRAPH
+0x9D84 0x63C6 #CJK UNIFIED IDEOGRAPH
+0x9D85 0x63E3 #CJK UNIFIED IDEOGRAPH
+0x9D86 0x63C9 #CJK UNIFIED IDEOGRAPH
+0x9D87 0x63D2 #CJK UNIFIED IDEOGRAPH
+0x9D88 0x63F6 #CJK UNIFIED IDEOGRAPH
+0x9D89 0x63C4 #CJK UNIFIED IDEOGRAPH
+0x9D8A 0x6416 #CJK UNIFIED IDEOGRAPH
+0x9D8B 0x6434 #CJK UNIFIED IDEOGRAPH
+0x9D8C 0x6406 #CJK UNIFIED IDEOGRAPH
+0x9D8D 0x6413 #CJK UNIFIED IDEOGRAPH
+0x9D8E 0x6426 #CJK UNIFIED IDEOGRAPH
+0x9D8F 0x6436 #CJK UNIFIED IDEOGRAPH
+0x9D90 0x651D #CJK UNIFIED IDEOGRAPH
+0x9D91 0x6417 #CJK UNIFIED IDEOGRAPH
+0x9D92 0x6428 #CJK UNIFIED IDEOGRAPH
+0x9D93 0x640F #CJK UNIFIED IDEOGRAPH
+0x9D94 0x6467 #CJK UNIFIED IDEOGRAPH
+0x9D95 0x646F #CJK UNIFIED IDEOGRAPH
+0x9D96 0x6476 #CJK UNIFIED IDEOGRAPH
+0x9D97 0x644E #CJK UNIFIED IDEOGRAPH
+0x9D98 0x652A #CJK UNIFIED IDEOGRAPH
+0x9D99 0x6495 #CJK UNIFIED IDEOGRAPH
+0x9D9A 0x6493 #CJK UNIFIED IDEOGRAPH
+0x9D9B 0x64A5 #CJK UNIFIED IDEOGRAPH
+0x9D9C 0x64A9 #CJK UNIFIED IDEOGRAPH
+0x9D9D 0x6488 #CJK UNIFIED IDEOGRAPH
+0x9D9E 0x64BC #CJK UNIFIED IDEOGRAPH
+0x9D9F 0x64DA #CJK UNIFIED IDEOGRAPH
+0x9DA0 0x64D2 #CJK UNIFIED IDEOGRAPH
+0x9DA1 0x64C5 #CJK UNIFIED IDEOGRAPH
+0x9DA2 0x64C7 #CJK UNIFIED IDEOGRAPH
+0x9DA3 0x64BB #CJK UNIFIED IDEOGRAPH
+0x9DA4 0x64D8 #CJK UNIFIED IDEOGRAPH
+0x9DA5 0x64C2 #CJK UNIFIED IDEOGRAPH
+0x9DA6 0x64F1 #CJK UNIFIED IDEOGRAPH
+0x9DA7 0x64E7 #CJK UNIFIED IDEOGRAPH
+0x9DA8 0x8209 #CJK UNIFIED IDEOGRAPH
+0x9DA9 0x64E0 #CJK UNIFIED IDEOGRAPH
+0x9DAA 0x64E1 #CJK UNIFIED IDEOGRAPH
+0x9DAB 0x62AC #CJK UNIFIED IDEOGRAPH
+0x9DAC 0x64E3 #CJK UNIFIED IDEOGRAPH
+0x9DAD 0x64EF #CJK UNIFIED IDEOGRAPH
+0x9DAE 0x652C #CJK UNIFIED IDEOGRAPH
+0x9DAF 0x64F6 #CJK UNIFIED IDEOGRAPH
+0x9DB0 0x64F4 #CJK UNIFIED IDEOGRAPH
+0x9DB1 0x64F2 #CJK UNIFIED IDEOGRAPH
+0x9DB2 0x64FA #CJK UNIFIED IDEOGRAPH
+0x9DB3 0x6500 #CJK UNIFIED IDEOGRAPH
+0x9DB4 0x64FD #CJK UNIFIED IDEOGRAPH
+0x9DB5 0x6518 #CJK UNIFIED IDEOGRAPH
+0x9DB6 0x651C #CJK UNIFIED IDEOGRAPH
+0x9DB7 0x6505 #CJK UNIFIED IDEOGRAPH
+0x9DB8 0x6524 #CJK UNIFIED IDEOGRAPH
+0x9DB9 0x6523 #CJK UNIFIED IDEOGRAPH
+0x9DBA 0x652B #CJK UNIFIED IDEOGRAPH
+0x9DBB 0x6534 #CJK UNIFIED IDEOGRAPH
+0x9DBC 0x6535 #CJK UNIFIED IDEOGRAPH
+0x9DBD 0x6537 #CJK UNIFIED IDEOGRAPH
+0x9DBE 0x6536 #CJK UNIFIED IDEOGRAPH
+0x9DBF 0x6538 #CJK UNIFIED IDEOGRAPH
+0x9DC0 0x754B #CJK UNIFIED IDEOGRAPH
+0x9DC1 0x6548 #CJK UNIFIED IDEOGRAPH
+0x9DC2 0x6556 #CJK UNIFIED IDEOGRAPH
+0x9DC3 0x6555 #CJK UNIFIED IDEOGRAPH
+0x9DC4 0x654D #CJK UNIFIED IDEOGRAPH
+0x9DC5 0x6558 #CJK UNIFIED IDEOGRAPH
+0x9DC6 0x655E #CJK UNIFIED IDEOGRAPH
+0x9DC7 0x655D #CJK UNIFIED IDEOGRAPH
+0x9DC8 0x6572 #CJK UNIFIED IDEOGRAPH
+0x9DC9 0x6578 #CJK UNIFIED IDEOGRAPH
+0x9DCA 0x6582 #CJK UNIFIED IDEOGRAPH
+0x9DCB 0x6583 #CJK UNIFIED IDEOGRAPH
+0x9DCC 0x8B8A #CJK UNIFIED IDEOGRAPH
+0x9DCD 0x659B #CJK UNIFIED IDEOGRAPH
+0x9DCE 0x659F #CJK UNIFIED IDEOGRAPH
+0x9DCF 0x65AB #CJK UNIFIED IDEOGRAPH
+0x9DD0 0x65B7 #CJK UNIFIED IDEOGRAPH
+0x9DD1 0x65C3 #CJK UNIFIED IDEOGRAPH
+0x9DD2 0x65C6 #CJK UNIFIED IDEOGRAPH
+0x9DD3 0x65C1 #CJK UNIFIED IDEOGRAPH
+0x9DD4 0x65C4 #CJK UNIFIED IDEOGRAPH
+0x9DD5 0x65CC #CJK UNIFIED IDEOGRAPH
+0x9DD6 0x65D2 #CJK UNIFIED IDEOGRAPH
+0x9DD7 0x65DB #CJK UNIFIED IDEOGRAPH
+0x9DD8 0x65D9 #CJK UNIFIED IDEOGRAPH
+0x9DD9 0x65E0 #CJK UNIFIED IDEOGRAPH
+0x9DDA 0x65E1 #CJK UNIFIED IDEOGRAPH
+0x9DDB 0x65F1 #CJK UNIFIED IDEOGRAPH
+0x9DDC 0x6772 #CJK UNIFIED IDEOGRAPH
+0x9DDD 0x660A #CJK UNIFIED IDEOGRAPH
+0x9DDE 0x6603 #CJK UNIFIED IDEOGRAPH
+0x9DDF 0x65FB #CJK UNIFIED IDEOGRAPH
+0x9DE0 0x6773 #CJK UNIFIED IDEOGRAPH
+0x9DE1 0x6635 #CJK UNIFIED IDEOGRAPH
+0x9DE2 0x6636 #CJK UNIFIED IDEOGRAPH
+0x9DE3 0x6634 #CJK UNIFIED IDEOGRAPH
+0x9DE4 0x661C #CJK UNIFIED IDEOGRAPH
+0x9DE5 0x664F #CJK UNIFIED IDEOGRAPH
+0x9DE6 0x6644 #CJK UNIFIED IDEOGRAPH
+0x9DE7 0x6649 #CJK UNIFIED IDEOGRAPH
+0x9DE8 0x6641 #CJK UNIFIED IDEOGRAPH
+0x9DE9 0x665E #CJK UNIFIED IDEOGRAPH
+0x9DEA 0x665D #CJK UNIFIED IDEOGRAPH
+0x9DEB 0x6664 #CJK UNIFIED IDEOGRAPH
+0x9DEC 0x6667 #CJK UNIFIED IDEOGRAPH
+0x9DED 0x6668 #CJK UNIFIED IDEOGRAPH
+0x9DEE 0x665F #CJK UNIFIED IDEOGRAPH
+0x9DEF 0x6662 #CJK UNIFIED IDEOGRAPH
+0x9DF0 0x6670 #CJK UNIFIED IDEOGRAPH
+0x9DF1 0x6683 #CJK UNIFIED IDEOGRAPH
+0x9DF2 0x6688 #CJK UNIFIED IDEOGRAPH
+0x9DF3 0x668E #CJK UNIFIED IDEOGRAPH
+0x9DF4 0x6689 #CJK UNIFIED IDEOGRAPH
+0x9DF5 0x6684 #CJK UNIFIED IDEOGRAPH
+0x9DF6 0x6698 #CJK UNIFIED IDEOGRAPH
+0x9DF7 0x669D #CJK UNIFIED IDEOGRAPH
+0x9DF8 0x66C1 #CJK UNIFIED IDEOGRAPH
+0x9DF9 0x66B9 #CJK UNIFIED IDEOGRAPH
+0x9DFA 0x66C9 #CJK UNIFIED IDEOGRAPH
+0x9DFB 0x66BE #CJK UNIFIED IDEOGRAPH
+0x9DFC 0x66BC #CJK UNIFIED IDEOGRAPH
+0x9E40 0x66C4 #CJK UNIFIED IDEOGRAPH
+0x9E41 0x66B8 #CJK UNIFIED IDEOGRAPH
+0x9E42 0x66D6 #CJK UNIFIED IDEOGRAPH
+0x9E43 0x66DA #CJK UNIFIED IDEOGRAPH
+0x9E44 0x66E0 #CJK UNIFIED IDEOGRAPH
+0x9E45 0x663F #CJK UNIFIED IDEOGRAPH
+0x9E46 0x66E6 #CJK UNIFIED IDEOGRAPH
+0x9E47 0x66E9 #CJK UNIFIED IDEOGRAPH
+0x9E48 0x66F0 #CJK UNIFIED IDEOGRAPH
+0x9E49 0x66F5 #CJK UNIFIED IDEOGRAPH
+0x9E4A 0x66F7 #CJK UNIFIED IDEOGRAPH
+0x9E4B 0x670F #CJK UNIFIED IDEOGRAPH
+0x9E4C 0x6716 #CJK UNIFIED IDEOGRAPH
+0x9E4D 0x671E #CJK UNIFIED IDEOGRAPH
+0x9E4E 0x6726 #CJK UNIFIED IDEOGRAPH
+0x9E4F 0x6727 #CJK UNIFIED IDEOGRAPH
+0x9E50 0x9738 #CJK UNIFIED IDEOGRAPH
+0x9E51 0x672E #CJK UNIFIED IDEOGRAPH
+0x9E52 0x673F #CJK UNIFIED IDEOGRAPH
+0x9E53 0x6736 #CJK UNIFIED IDEOGRAPH
+0x9E54 0x6741 #CJK UNIFIED IDEOGRAPH
+0x9E55 0x6738 #CJK UNIFIED IDEOGRAPH
+0x9E56 0x6737 #CJK UNIFIED IDEOGRAPH
+0x9E57 0x6746 #CJK UNIFIED IDEOGRAPH
+0x9E58 0x675E #CJK UNIFIED IDEOGRAPH
+0x9E59 0x6760 #CJK UNIFIED IDEOGRAPH
+0x9E5A 0x6759 #CJK UNIFIED IDEOGRAPH
+0x9E5B 0x6763 #CJK UNIFIED IDEOGRAPH
+0x9E5C 0x6764 #CJK UNIFIED IDEOGRAPH
+0x9E5D 0x6789 #CJK UNIFIED IDEOGRAPH
+0x9E5E 0x6770 #CJK UNIFIED IDEOGRAPH
+0x9E5F 0x67A9 #CJK UNIFIED IDEOGRAPH
+0x9E60 0x677C #CJK UNIFIED IDEOGRAPH
+0x9E61 0x676A #CJK UNIFIED IDEOGRAPH
+0x9E62 0x678C #CJK UNIFIED IDEOGRAPH
+0x9E63 0x678B #CJK UNIFIED IDEOGRAPH
+0x9E64 0x67A6 #CJK UNIFIED IDEOGRAPH
+0x9E65 0x67A1 #CJK UNIFIED IDEOGRAPH
+0x9E66 0x6785 #CJK UNIFIED IDEOGRAPH
+0x9E67 0x67B7 #CJK UNIFIED IDEOGRAPH
+0x9E68 0x67EF #CJK UNIFIED IDEOGRAPH
+0x9E69 0x67B4 #CJK UNIFIED IDEOGRAPH
+0x9E6A 0x67EC #CJK UNIFIED IDEOGRAPH
+0x9E6B 0x67B3 #CJK UNIFIED IDEOGRAPH
+0x9E6C 0x67E9 #CJK UNIFIED IDEOGRAPH
+0x9E6D 0x67B8 #CJK UNIFIED IDEOGRAPH
+0x9E6E 0x67E4 #CJK UNIFIED IDEOGRAPH
+0x9E6F 0x67DE #CJK UNIFIED IDEOGRAPH
+0x9E70 0x67DD #CJK UNIFIED IDEOGRAPH
+0x9E71 0x67E2 #CJK UNIFIED IDEOGRAPH
+0x9E72 0x67EE #CJK UNIFIED IDEOGRAPH
+0x9E73 0x67B9 #CJK UNIFIED IDEOGRAPH
+0x9E74 0x67CE #CJK UNIFIED IDEOGRAPH
+0x9E75 0x67C6 #CJK UNIFIED IDEOGRAPH
+0x9E76 0x67E7 #CJK UNIFIED IDEOGRAPH
+0x9E77 0x6A9C #CJK UNIFIED IDEOGRAPH
+0x9E78 0x681E #CJK UNIFIED IDEOGRAPH
+0x9E79 0x6846 #CJK UNIFIED IDEOGRAPH
+0x9E7A 0x6829 #CJK UNIFIED IDEOGRAPH
+0x9E7B 0x6840 #CJK UNIFIED IDEOGRAPH
+0x9E7C 0x684D #CJK UNIFIED IDEOGRAPH
+0x9E7D 0x6832 #CJK UNIFIED IDEOGRAPH
+0x9E7E 0x684E #CJK UNIFIED IDEOGRAPH
+0x9E80 0x68B3 #CJK UNIFIED IDEOGRAPH
+0x9E81 0x682B #CJK UNIFIED IDEOGRAPH
+0x9E82 0x6859 #CJK UNIFIED IDEOGRAPH
+0x9E83 0x6863 #CJK UNIFIED IDEOGRAPH
+0x9E84 0x6877 #CJK UNIFIED IDEOGRAPH
+0x9E85 0x687F #CJK UNIFIED IDEOGRAPH
+0x9E86 0x689F #CJK UNIFIED IDEOGRAPH
+0x9E87 0x688F #CJK UNIFIED IDEOGRAPH
+0x9E88 0x68AD #CJK UNIFIED IDEOGRAPH
+0x9E89 0x6894 #CJK UNIFIED IDEOGRAPH
+0x9E8A 0x689D #CJK UNIFIED IDEOGRAPH
+0x9E8B 0x689B #CJK UNIFIED IDEOGRAPH
+0x9E8C 0x6883 #CJK UNIFIED IDEOGRAPH
+0x9E8D 0x6AAE #CJK UNIFIED IDEOGRAPH
+0x9E8E 0x68B9 #CJK UNIFIED IDEOGRAPH
+0x9E8F 0x6874 #CJK UNIFIED IDEOGRAPH
+0x9E90 0x68B5 #CJK UNIFIED IDEOGRAPH
+0x9E91 0x68A0 #CJK UNIFIED IDEOGRAPH
+0x9E92 0x68BA #CJK UNIFIED IDEOGRAPH
+0x9E93 0x690F #CJK UNIFIED IDEOGRAPH
+0x9E94 0x688D #CJK UNIFIED IDEOGRAPH
+0x9E95 0x687E #CJK UNIFIED IDEOGRAPH
+0x9E96 0x6901 #CJK UNIFIED IDEOGRAPH
+0x9E97 0x68CA #CJK UNIFIED IDEOGRAPH
+0x9E98 0x6908 #CJK UNIFIED IDEOGRAPH
+0x9E99 0x68D8 #CJK UNIFIED IDEOGRAPH
+0x9E9A 0x6922 #CJK UNIFIED IDEOGRAPH
+0x9E9B 0x6926 #CJK UNIFIED IDEOGRAPH
+0x9E9C 0x68E1 #CJK UNIFIED IDEOGRAPH
+0x9E9D 0x690C #CJK UNIFIED IDEOGRAPH
+0x9E9E 0x68CD #CJK UNIFIED IDEOGRAPH
+0x9E9F 0x68D4 #CJK UNIFIED IDEOGRAPH
+0x9EA0 0x68E7 #CJK UNIFIED IDEOGRAPH
+0x9EA1 0x68D5 #CJK UNIFIED IDEOGRAPH
+0x9EA2 0x6936 #CJK UNIFIED IDEOGRAPH
+0x9EA3 0x6912 #CJK UNIFIED IDEOGRAPH
+0x9EA4 0x6904 #CJK UNIFIED IDEOGRAPH
+0x9EA5 0x68D7 #CJK UNIFIED IDEOGRAPH
+0x9EA6 0x68E3 #CJK UNIFIED IDEOGRAPH
+0x9EA7 0x6925 #CJK UNIFIED IDEOGRAPH
+0x9EA8 0x68F9 #CJK UNIFIED IDEOGRAPH
+0x9EA9 0x68E0 #CJK UNIFIED IDEOGRAPH
+0x9EAA 0x68EF #CJK UNIFIED IDEOGRAPH
+0x9EAB 0x6928 #CJK UNIFIED IDEOGRAPH
+0x9EAC 0x692A #CJK UNIFIED IDEOGRAPH
+0x9EAD 0x691A #CJK UNIFIED IDEOGRAPH
+0x9EAE 0x6923 #CJK UNIFIED IDEOGRAPH
+0x9EAF 0x6921 #CJK UNIFIED IDEOGRAPH
+0x9EB0 0x68C6 #CJK UNIFIED IDEOGRAPH
+0x9EB1 0x6979 #CJK UNIFIED IDEOGRAPH
+0x9EB2 0x6977 #CJK UNIFIED IDEOGRAPH
+0x9EB3 0x695C #CJK UNIFIED IDEOGRAPH
+0x9EB4 0x6978 #CJK UNIFIED IDEOGRAPH
+0x9EB5 0x696B #CJK UNIFIED IDEOGRAPH
+0x9EB6 0x6954 #CJK UNIFIED IDEOGRAPH
+0x9EB7 0x697E #CJK UNIFIED IDEOGRAPH
+0x9EB8 0x696E #CJK UNIFIED IDEOGRAPH
+0x9EB9 0x6939 #CJK UNIFIED IDEOGRAPH
+0x9EBA 0x6974 #CJK UNIFIED IDEOGRAPH
+0x9EBB 0x693D #CJK UNIFIED IDEOGRAPH
+0x9EBC 0x6959 #CJK UNIFIED IDEOGRAPH
+0x9EBD 0x6930 #CJK UNIFIED IDEOGRAPH
+0x9EBE 0x6961 #CJK UNIFIED IDEOGRAPH
+0x9EBF 0x695E #CJK UNIFIED IDEOGRAPH
+0x9EC0 0x695D #CJK UNIFIED IDEOGRAPH
+0x9EC1 0x6981 #CJK UNIFIED IDEOGRAPH
+0x9EC2 0x696A #CJK UNIFIED IDEOGRAPH
+0x9EC3 0x69B2 #CJK UNIFIED IDEOGRAPH
+0x9EC4 0x69AE #CJK UNIFIED IDEOGRAPH
+0x9EC5 0x69D0 #CJK UNIFIED IDEOGRAPH
+0x9EC6 0x69BF #CJK UNIFIED IDEOGRAPH
+0x9EC7 0x69C1 #CJK UNIFIED IDEOGRAPH
+0x9EC8 0x69D3 #CJK UNIFIED IDEOGRAPH
+0x9EC9 0x69BE #CJK UNIFIED IDEOGRAPH
+0x9ECA 0x69CE #CJK UNIFIED IDEOGRAPH
+0x9ECB 0x5BE8 #CJK UNIFIED IDEOGRAPH
+0x9ECC 0x69CA #CJK UNIFIED IDEOGRAPH
+0x9ECD 0x69DD #CJK UNIFIED IDEOGRAPH
+0x9ECE 0x69BB #CJK UNIFIED IDEOGRAPH
+0x9ECF 0x69C3 #CJK UNIFIED IDEOGRAPH
+0x9ED0 0x69A7 #CJK UNIFIED IDEOGRAPH
+0x9ED1 0x6A2E #CJK UNIFIED IDEOGRAPH
+0x9ED2 0x6991 #CJK UNIFIED IDEOGRAPH
+0x9ED3 0x69A0 #CJK UNIFIED IDEOGRAPH
+0x9ED4 0x699C #CJK UNIFIED IDEOGRAPH
+0x9ED5 0x6995 #CJK UNIFIED IDEOGRAPH
+0x9ED6 0x69B4 #CJK UNIFIED IDEOGRAPH
+0x9ED7 0x69DE #CJK UNIFIED IDEOGRAPH
+0x9ED8 0x69E8 #CJK UNIFIED IDEOGRAPH
+0x9ED9 0x6A02 #CJK UNIFIED IDEOGRAPH
+0x9EDA 0x6A1B #CJK UNIFIED IDEOGRAPH
+0x9EDB 0x69FF #CJK UNIFIED IDEOGRAPH
+0x9EDC 0x6B0A #CJK UNIFIED IDEOGRAPH
+0x9EDD 0x69F9 #CJK UNIFIED IDEOGRAPH
+0x9EDE 0x69F2 #CJK UNIFIED IDEOGRAPH
+0x9EDF 0x69E7 #CJK UNIFIED IDEOGRAPH
+0x9EE0 0x6A05 #CJK UNIFIED IDEOGRAPH
+0x9EE1 0x69B1 #CJK UNIFIED IDEOGRAPH
+0x9EE2 0x6A1E #CJK UNIFIED IDEOGRAPH
+0x9EE3 0x69ED #CJK UNIFIED IDEOGRAPH
+0x9EE4 0x6A14 #CJK UNIFIED IDEOGRAPH
+0x9EE5 0x69EB #CJK UNIFIED IDEOGRAPH
+0x9EE6 0x6A0A #CJK UNIFIED IDEOGRAPH
+0x9EE7 0x6A12 #CJK UNIFIED IDEOGRAPH
+0x9EE8 0x6AC1 #CJK UNIFIED IDEOGRAPH
+0x9EE9 0x6A23 #CJK UNIFIED IDEOGRAPH
+0x9EEA 0x6A13 #CJK UNIFIED IDEOGRAPH
+0x9EEB 0x6A44 #CJK UNIFIED IDEOGRAPH
+0x9EEC 0x6A0C #CJK UNIFIED IDEOGRAPH
+0x9EED 0x6A72 #CJK UNIFIED IDEOGRAPH
+0x9EEE 0x6A36 #CJK UNIFIED IDEOGRAPH
+0x9EEF 0x6A78 #CJK UNIFIED IDEOGRAPH
+0x9EF0 0x6A47 #CJK UNIFIED IDEOGRAPH
+0x9EF1 0x6A62 #CJK UNIFIED IDEOGRAPH
+0x9EF2 0x6A59 #CJK UNIFIED IDEOGRAPH
+0x9EF3 0x6A66 #CJK UNIFIED IDEOGRAPH
+0x9EF4 0x6A48 #CJK UNIFIED IDEOGRAPH
+0x9EF5 0x6A38 #CJK UNIFIED IDEOGRAPH
+0x9EF6 0x6A22 #CJK UNIFIED IDEOGRAPH
+0x9EF7 0x6A90 #CJK UNIFIED IDEOGRAPH
+0x9EF8 0x6A8D #CJK UNIFIED IDEOGRAPH
+0x9EF9 0x6AA0 #CJK UNIFIED IDEOGRAPH
+0x9EFA 0x6A84 #CJK UNIFIED IDEOGRAPH
+0x9EFB 0x6AA2 #CJK UNIFIED IDEOGRAPH
+0x9EFC 0x6AA3 #CJK UNIFIED IDEOGRAPH
+0x9F40 0x6A97 #CJK UNIFIED IDEOGRAPH
+0x9F41 0x8617 #CJK UNIFIED IDEOGRAPH
+0x9F42 0x6ABB #CJK UNIFIED IDEOGRAPH
+0x9F43 0x6AC3 #CJK UNIFIED IDEOGRAPH
+0x9F44 0x6AC2 #CJK UNIFIED IDEOGRAPH
+0x9F45 0x6AB8 #CJK UNIFIED IDEOGRAPH
+0x9F46 0x6AB3 #CJK UNIFIED IDEOGRAPH
+0x9F47 0x6AAC #CJK UNIFIED IDEOGRAPH
+0x9F48 0x6ADE #CJK UNIFIED IDEOGRAPH
+0x9F49 0x6AD1 #CJK UNIFIED IDEOGRAPH
+0x9F4A 0x6ADF #CJK UNIFIED IDEOGRAPH
+0x9F4B 0x6AAA #CJK UNIFIED IDEOGRAPH
+0x9F4C 0x6ADA #CJK UNIFIED IDEOGRAPH
+0x9F4D 0x6AEA #CJK UNIFIED IDEOGRAPH
+0x9F4E 0x6AFB #CJK UNIFIED IDEOGRAPH
+0x9F4F 0x6B05 #CJK UNIFIED IDEOGRAPH
+0x9F50 0x8616 #CJK UNIFIED IDEOGRAPH
+0x9F51 0x6AFA #CJK UNIFIED IDEOGRAPH
+0x9F52 0x6B12 #CJK UNIFIED IDEOGRAPH
+0x9F53 0x6B16 #CJK UNIFIED IDEOGRAPH
+0x9F54 0x9B31 #CJK UNIFIED IDEOGRAPH
+0x9F55 0x6B1F #CJK UNIFIED IDEOGRAPH
+0x9F56 0x6B38 #CJK UNIFIED IDEOGRAPH
+0x9F57 0x6B37 #CJK UNIFIED IDEOGRAPH
+0x9F58 0x76DC #CJK UNIFIED IDEOGRAPH
+0x9F59 0x6B39 #CJK UNIFIED IDEOGRAPH
+0x9F5A 0x98EE #CJK UNIFIED IDEOGRAPH
+0x9F5B 0x6B47 #CJK UNIFIED IDEOGRAPH
+0x9F5C 0x6B43 #CJK UNIFIED IDEOGRAPH
+0x9F5D 0x6B49 #CJK UNIFIED IDEOGRAPH
+0x9F5E 0x6B50 #CJK UNIFIED IDEOGRAPH
+0x9F5F 0x6B59 #CJK UNIFIED IDEOGRAPH
+0x9F60 0x6B54 #CJK UNIFIED IDEOGRAPH
+0x9F61 0x6B5B #CJK UNIFIED IDEOGRAPH
+0x9F62 0x6B5F #CJK UNIFIED IDEOGRAPH
+0x9F63 0x6B61 #CJK UNIFIED IDEOGRAPH
+0x9F64 0x6B78 #CJK UNIFIED IDEOGRAPH
+0x9F65 0x6B79 #CJK UNIFIED IDEOGRAPH
+0x9F66 0x6B7F #CJK UNIFIED IDEOGRAPH
+0x9F67 0x6B80 #CJK UNIFIED IDEOGRAPH
+0x9F68 0x6B84 #CJK UNIFIED IDEOGRAPH
+0x9F69 0x6B83 #CJK UNIFIED IDEOGRAPH
+0x9F6A 0x6B8D #CJK UNIFIED IDEOGRAPH
+0x9F6B 0x6B98 #CJK UNIFIED IDEOGRAPH
+0x9F6C 0x6B95 #CJK UNIFIED IDEOGRAPH
+0x9F6D 0x6B9E #CJK UNIFIED IDEOGRAPH
+0x9F6E 0x6BA4 #CJK UNIFIED IDEOGRAPH
+0x9F6F 0x6BAA #CJK UNIFIED IDEOGRAPH
+0x9F70 0x6BAB #CJK UNIFIED IDEOGRAPH
+0x9F71 0x6BAF #CJK UNIFIED IDEOGRAPH
+0x9F72 0x6BB2 #CJK UNIFIED IDEOGRAPH
+0x9F73 0x6BB1 #CJK UNIFIED IDEOGRAPH
+0x9F74 0x6BB3 #CJK UNIFIED IDEOGRAPH
+0x9F75 0x6BB7 #CJK UNIFIED IDEOGRAPH
+0x9F76 0x6BBC #CJK UNIFIED IDEOGRAPH
+0x9F77 0x6BC6 #CJK UNIFIED IDEOGRAPH
+0x9F78 0x6BCB #CJK UNIFIED IDEOGRAPH
+0x9F79 0x6BD3 #CJK UNIFIED IDEOGRAPH
+0x9F7A 0x6BDF #CJK UNIFIED IDEOGRAPH
+0x9F7B 0x6BEC #CJK UNIFIED IDEOGRAPH
+0x9F7C 0x6BEB #CJK UNIFIED IDEOGRAPH
+0x9F7D 0x6BF3 #CJK UNIFIED IDEOGRAPH
+0x9F7E 0x6BEF #CJK UNIFIED IDEOGRAPH
+0x9F80 0x9EBE #CJK UNIFIED IDEOGRAPH
+0x9F81 0x6C08 #CJK UNIFIED IDEOGRAPH
+0x9F82 0x6C13 #CJK UNIFIED IDEOGRAPH
+0x9F83 0x6C14 #CJK UNIFIED IDEOGRAPH
+0x9F84 0x6C1B #CJK UNIFIED IDEOGRAPH
+0x9F85 0x6C24 #CJK UNIFIED IDEOGRAPH
+0x9F86 0x6C23 #CJK UNIFIED IDEOGRAPH
+0x9F87 0x6C5E #CJK UNIFIED IDEOGRAPH
+0x9F88 0x6C55 #CJK UNIFIED IDEOGRAPH
+0x9F89 0x6C62 #CJK UNIFIED IDEOGRAPH
+0x9F8A 0x6C6A #CJK UNIFIED IDEOGRAPH
+0x9F8B 0x6C82 #CJK UNIFIED IDEOGRAPH
+0x9F8C 0x6C8D #CJK UNIFIED IDEOGRAPH
+0x9F8D 0x6C9A #CJK UNIFIED IDEOGRAPH
+0x9F8E 0x6C81 #CJK UNIFIED IDEOGRAPH
+0x9F8F 0x6C9B #CJK UNIFIED IDEOGRAPH
+0x9F90 0x6C7E #CJK UNIFIED IDEOGRAPH
+0x9F91 0x6C68 #CJK UNIFIED IDEOGRAPH
+0x9F92 0x6C73 #CJK UNIFIED IDEOGRAPH
+0x9F93 0x6C92 #CJK UNIFIED IDEOGRAPH
+0x9F94 0x6C90 #CJK UNIFIED IDEOGRAPH
+0x9F95 0x6CC4 #CJK UNIFIED IDEOGRAPH
+0x9F96 0x6CF1 #CJK UNIFIED IDEOGRAPH
+0x9F97 0x6CD3 #CJK UNIFIED IDEOGRAPH
+0x9F98 0x6CBD #CJK UNIFIED IDEOGRAPH
+0x9F99 0x6CD7 #CJK UNIFIED IDEOGRAPH
+0x9F9A 0x6CC5 #CJK UNIFIED IDEOGRAPH
+0x9F9B 0x6CDD #CJK UNIFIED IDEOGRAPH
+0x9F9C 0x6CAE #CJK UNIFIED IDEOGRAPH
+0x9F9D 0x6CB1 #CJK UNIFIED IDEOGRAPH
+0x9F9E 0x6CBE #CJK UNIFIED IDEOGRAPH
+0x9F9F 0x6CBA #CJK UNIFIED IDEOGRAPH
+0x9FA0 0x6CDB #CJK UNIFIED IDEOGRAPH
+0x9FA1 0x6CEF #CJK UNIFIED IDEOGRAPH
+0x9FA2 0x6CD9 #CJK UNIFIED IDEOGRAPH
+0x9FA3 0x6CEA #CJK UNIFIED IDEOGRAPH
+0x9FA4 0x6D1F #CJK UNIFIED IDEOGRAPH
+0x9FA5 0x884D #CJK UNIFIED IDEOGRAPH
+0x9FA6 0x6D36 #CJK UNIFIED IDEOGRAPH
+0x9FA7 0x6D2B #CJK UNIFIED IDEOGRAPH
+0x9FA8 0x6D3D #CJK UNIFIED IDEOGRAPH
+0x9FA9 0x6D38 #CJK UNIFIED IDEOGRAPH
+0x9FAA 0x6D19 #CJK UNIFIED IDEOGRAPH
+0x9FAB 0x6D35 #CJK UNIFIED IDEOGRAPH
+0x9FAC 0x6D33 #CJK UNIFIED IDEOGRAPH
+0x9FAD 0x6D12 #CJK UNIFIED IDEOGRAPH
+0x9FAE 0x6D0C #CJK UNIFIED IDEOGRAPH
+0x9FAF 0x6D63 #CJK UNIFIED IDEOGRAPH
+0x9FB0 0x6D93 #CJK UNIFIED IDEOGRAPH
+0x9FB1 0x6D64 #CJK UNIFIED IDEOGRAPH
+0x9FB2 0x6D5A #CJK UNIFIED IDEOGRAPH
+0x9FB3 0x6D79 #CJK UNIFIED IDEOGRAPH
+0x9FB4 0x6D59 #CJK UNIFIED IDEOGRAPH
+0x9FB5 0x6D8E #CJK UNIFIED IDEOGRAPH
+0x9FB6 0x6D95 #CJK UNIFIED IDEOGRAPH
+0x9FB7 0x6FE4 #CJK UNIFIED IDEOGRAPH
+0x9FB8 0x6D85 #CJK UNIFIED IDEOGRAPH
+0x9FB9 0x6DF9 #CJK UNIFIED IDEOGRAPH
+0x9FBA 0x6E15 #CJK UNIFIED IDEOGRAPH
+0x9FBB 0x6E0A #CJK UNIFIED IDEOGRAPH
+0x9FBC 0x6DB5 #CJK UNIFIED IDEOGRAPH
+0x9FBD 0x6DC7 #CJK UNIFIED IDEOGRAPH
+0x9FBE 0x6DE6 #CJK UNIFIED IDEOGRAPH
+0x9FBF 0x6DB8 #CJK UNIFIED IDEOGRAPH
+0x9FC0 0x6DC6 #CJK UNIFIED IDEOGRAPH
+0x9FC1 0x6DEC #CJK UNIFIED IDEOGRAPH
+0x9FC2 0x6DDE #CJK UNIFIED IDEOGRAPH
+0x9FC3 0x6DCC #CJK UNIFIED IDEOGRAPH
+0x9FC4 0x6DE8 #CJK UNIFIED IDEOGRAPH
+0x9FC5 0x6DD2 #CJK UNIFIED IDEOGRAPH
+0x9FC6 0x6DC5 #CJK UNIFIED IDEOGRAPH
+0x9FC7 0x6DFA #CJK UNIFIED IDEOGRAPH
+0x9FC8 0x6DD9 #CJK UNIFIED IDEOGRAPH
+0x9FC9 0x6DE4 #CJK UNIFIED IDEOGRAPH
+0x9FCA 0x6DD5 #CJK UNIFIED IDEOGRAPH
+0x9FCB 0x6DEA #CJK UNIFIED IDEOGRAPH
+0x9FCC 0x6DEE #CJK UNIFIED IDEOGRAPH
+0x9FCD 0x6E2D #CJK UNIFIED IDEOGRAPH
+0x9FCE 0x6E6E #CJK UNIFIED IDEOGRAPH
+0x9FCF 0x6E2E #CJK UNIFIED IDEOGRAPH
+0x9FD0 0x6E19 #CJK UNIFIED IDEOGRAPH
+0x9FD1 0x6E72 #CJK UNIFIED IDEOGRAPH
+0x9FD2 0x6E5F #CJK UNIFIED IDEOGRAPH
+0x9FD3 0x6E3E #CJK UNIFIED IDEOGRAPH
+0x9FD4 0x6E23 #CJK UNIFIED IDEOGRAPH
+0x9FD5 0x6E6B #CJK UNIFIED IDEOGRAPH
+0x9FD6 0x6E2B #CJK UNIFIED IDEOGRAPH
+0x9FD7 0x6E76 #CJK UNIFIED IDEOGRAPH
+0x9FD8 0x6E4D #CJK UNIFIED IDEOGRAPH
+0x9FD9 0x6E1F #CJK UNIFIED IDEOGRAPH
+0x9FDA 0x6E43 #CJK UNIFIED IDEOGRAPH
+0x9FDB 0x6E3A #CJK UNIFIED IDEOGRAPH
+0x9FDC 0x6E4E #CJK UNIFIED IDEOGRAPH
+0x9FDD 0x6E24 #CJK UNIFIED IDEOGRAPH
+0x9FDE 0x6EFF #CJK UNIFIED IDEOGRAPH
+0x9FDF 0x6E1D #CJK UNIFIED IDEOGRAPH
+0x9FE0 0x6E38 #CJK UNIFIED IDEOGRAPH
+0x9FE1 0x6E82 #CJK UNIFIED IDEOGRAPH
+0x9FE2 0x6EAA #CJK UNIFIED IDEOGRAPH
+0x9FE3 0x6E98 #CJK UNIFIED IDEOGRAPH
+0x9FE4 0x6EC9 #CJK UNIFIED IDEOGRAPH
+0x9FE5 0x6EB7 #CJK UNIFIED IDEOGRAPH
+0x9FE6 0x6ED3 #CJK UNIFIED IDEOGRAPH
+0x9FE7 0x6EBD #CJK UNIFIED IDEOGRAPH
+0x9FE8 0x6EAF #CJK UNIFIED IDEOGRAPH
+0x9FE9 0x6EC4 #CJK UNIFIED IDEOGRAPH
+0x9FEA 0x6EB2 #CJK UNIFIED IDEOGRAPH
+0x9FEB 0x6ED4 #CJK UNIFIED IDEOGRAPH
+0x9FEC 0x6ED5 #CJK UNIFIED IDEOGRAPH
+0x9FED 0x6E8F #CJK UNIFIED IDEOGRAPH
+0x9FEE 0x6EA5 #CJK UNIFIED IDEOGRAPH
+0x9FEF 0x6EC2 #CJK UNIFIED IDEOGRAPH
+0x9FF0 0x6E9F #CJK UNIFIED IDEOGRAPH
+0x9FF1 0x6F41 #CJK UNIFIED IDEOGRAPH
+0x9FF2 0x6F11 #CJK UNIFIED IDEOGRAPH
+0x9FF3 0x704C #CJK UNIFIED IDEOGRAPH
+0x9FF4 0x6EEC #CJK UNIFIED IDEOGRAPH
+0x9FF5 0x6EF8 #CJK UNIFIED IDEOGRAPH
+0x9FF6 0x6EFE #CJK UNIFIED IDEOGRAPH
+0x9FF7 0x6F3F #CJK UNIFIED IDEOGRAPH
+0x9FF8 0x6EF2 #CJK UNIFIED IDEOGRAPH
+0x9FF9 0x6F31 #CJK UNIFIED IDEOGRAPH
+0x9FFA 0x6EEF #CJK UNIFIED IDEOGRAPH
+0x9FFB 0x6F32 #CJK UNIFIED IDEOGRAPH
+0x9FFC 0x6ECC #CJK UNIFIED IDEOGRAPH
+0xE040 0x6F3E #CJK UNIFIED IDEOGRAPH
+0xE041 0x6F13 #CJK UNIFIED IDEOGRAPH
+0xE042 0x6EF7 #CJK UNIFIED IDEOGRAPH
+0xE043 0x6F86 #CJK UNIFIED IDEOGRAPH
+0xE044 0x6F7A #CJK UNIFIED IDEOGRAPH
+0xE045 0x6F78 #CJK UNIFIED IDEOGRAPH
+0xE046 0x6F81 #CJK UNIFIED IDEOGRAPH
+0xE047 0x6F80 #CJK UNIFIED IDEOGRAPH
+0xE048 0x6F6F #CJK UNIFIED IDEOGRAPH
+0xE049 0x6F5B #CJK UNIFIED IDEOGRAPH
+0xE04A 0x6FF3 #CJK UNIFIED IDEOGRAPH
+0xE04B 0x6F6D #CJK UNIFIED IDEOGRAPH
+0xE04C 0x6F82 #CJK UNIFIED IDEOGRAPH
+0xE04D 0x6F7C #CJK UNIFIED IDEOGRAPH
+0xE04E 0x6F58 #CJK UNIFIED IDEOGRAPH
+0xE04F 0x6F8E #CJK UNIFIED IDEOGRAPH
+0xE050 0x6F91 #CJK UNIFIED IDEOGRAPH
+0xE051 0x6FC2 #CJK UNIFIED IDEOGRAPH
+0xE052 0x6F66 #CJK UNIFIED IDEOGRAPH
+0xE053 0x6FB3 #CJK UNIFIED IDEOGRAPH
+0xE054 0x6FA3 #CJK UNIFIED IDEOGRAPH
+0xE055 0x6FA1 #CJK UNIFIED IDEOGRAPH
+0xE056 0x6FA4 #CJK UNIFIED IDEOGRAPH
+0xE057 0x6FB9 #CJK UNIFIED IDEOGRAPH
+0xE058 0x6FC6 #CJK UNIFIED IDEOGRAPH
+0xE059 0x6FAA #CJK UNIFIED IDEOGRAPH
+0xE05A 0x6FDF #CJK UNIFIED IDEOGRAPH
+0xE05B 0x6FD5 #CJK UNIFIED IDEOGRAPH
+0xE05C 0x6FEC #CJK UNIFIED IDEOGRAPH
+0xE05D 0x6FD4 #CJK UNIFIED IDEOGRAPH
+0xE05E 0x6FD8 #CJK UNIFIED IDEOGRAPH
+0xE05F 0x6FF1 #CJK UNIFIED IDEOGRAPH
+0xE060 0x6FEE #CJK UNIFIED IDEOGRAPH
+0xE061 0x6FDB #CJK UNIFIED IDEOGRAPH
+0xE062 0x7009 #CJK UNIFIED IDEOGRAPH
+0xE063 0x700B #CJK UNIFIED IDEOGRAPH
+0xE064 0x6FFA #CJK UNIFIED IDEOGRAPH
+0xE065 0x7011 #CJK UNIFIED IDEOGRAPH
+0xE066 0x7001 #CJK UNIFIED IDEOGRAPH
+0xE067 0x700F #CJK UNIFIED IDEOGRAPH
+0xE068 0x6FFE #CJK UNIFIED IDEOGRAPH
+0xE069 0x701B #CJK UNIFIED IDEOGRAPH
+0xE06A 0x701A #CJK UNIFIED IDEOGRAPH
+0xE06B 0x6F74 #CJK UNIFIED IDEOGRAPH
+0xE06C 0x701D #CJK UNIFIED IDEOGRAPH
+0xE06D 0x7018 #CJK UNIFIED IDEOGRAPH
+0xE06E 0x701F #CJK UNIFIED IDEOGRAPH
+0xE06F 0x7030 #CJK UNIFIED IDEOGRAPH
+0xE070 0x703E #CJK UNIFIED IDEOGRAPH
+0xE071 0x7032 #CJK UNIFIED IDEOGRAPH
+0xE072 0x7051 #CJK UNIFIED IDEOGRAPH
+0xE073 0x7063 #CJK UNIFIED IDEOGRAPH
+0xE074 0x7099 #CJK UNIFIED IDEOGRAPH
+0xE075 0x7092 #CJK UNIFIED IDEOGRAPH
+0xE076 0x70AF #CJK UNIFIED IDEOGRAPH
+0xE077 0x70F1 #CJK UNIFIED IDEOGRAPH
+0xE078 0x70AC #CJK UNIFIED IDEOGRAPH
+0xE079 0x70B8 #CJK UNIFIED IDEOGRAPH
+0xE07A 0x70B3 #CJK UNIFIED IDEOGRAPH
+0xE07B 0x70AE #CJK UNIFIED IDEOGRAPH
+0xE07C 0x70DF #CJK UNIFIED IDEOGRAPH
+0xE07D 0x70CB #CJK UNIFIED IDEOGRAPH
+0xE07E 0x70DD #CJK UNIFIED IDEOGRAPH
+0xE080 0x70D9 #CJK UNIFIED IDEOGRAPH
+0xE081 0x7109 #CJK UNIFIED IDEOGRAPH
+0xE082 0x70FD #CJK UNIFIED IDEOGRAPH
+0xE083 0x711C #CJK UNIFIED IDEOGRAPH
+0xE084 0x7119 #CJK UNIFIED IDEOGRAPH
+0xE085 0x7165 #CJK UNIFIED IDEOGRAPH
+0xE086 0x7155 #CJK UNIFIED IDEOGRAPH
+0xE087 0x7188 #CJK UNIFIED IDEOGRAPH
+0xE088 0x7166 #CJK UNIFIED IDEOGRAPH
+0xE089 0x7162 #CJK UNIFIED IDEOGRAPH
+0xE08A 0x714C #CJK UNIFIED IDEOGRAPH
+0xE08B 0x7156 #CJK UNIFIED IDEOGRAPH
+0xE08C 0x716C #CJK UNIFIED IDEOGRAPH
+0xE08D 0x718F #CJK UNIFIED IDEOGRAPH
+0xE08E 0x71FB #CJK UNIFIED IDEOGRAPH
+0xE08F 0x7184 #CJK UNIFIED IDEOGRAPH
+0xE090 0x7195 #CJK UNIFIED IDEOGRAPH
+0xE091 0x71A8 #CJK UNIFIED IDEOGRAPH
+0xE092 0x71AC #CJK UNIFIED IDEOGRAPH
+0xE093 0x71D7 #CJK UNIFIED IDEOGRAPH
+0xE094 0x71B9 #CJK UNIFIED IDEOGRAPH
+0xE095 0x71BE #CJK UNIFIED IDEOGRAPH
+0xE096 0x71D2 #CJK UNIFIED IDEOGRAPH
+0xE097 0x71C9 #CJK UNIFIED IDEOGRAPH
+0xE098 0x71D4 #CJK UNIFIED IDEOGRAPH
+0xE099 0x71CE #CJK UNIFIED IDEOGRAPH
+0xE09A 0x71E0 #CJK UNIFIED IDEOGRAPH
+0xE09B 0x71EC #CJK UNIFIED IDEOGRAPH
+0xE09C 0x71E7 #CJK UNIFIED IDEOGRAPH
+0xE09D 0x71F5 #CJK UNIFIED IDEOGRAPH
+0xE09E 0x71FC #CJK UNIFIED IDEOGRAPH
+0xE09F 0x71F9 #CJK UNIFIED IDEOGRAPH
+0xE0A0 0x71FF #CJK UNIFIED IDEOGRAPH
+0xE0A1 0x720D #CJK UNIFIED IDEOGRAPH
+0xE0A2 0x7210 #CJK UNIFIED IDEOGRAPH
+0xE0A3 0x721B #CJK UNIFIED IDEOGRAPH
+0xE0A4 0x7228 #CJK UNIFIED IDEOGRAPH
+0xE0A5 0x722D #CJK UNIFIED IDEOGRAPH
+0xE0A6 0x722C #CJK UNIFIED IDEOGRAPH
+0xE0A7 0x7230 #CJK UNIFIED IDEOGRAPH
+0xE0A8 0x7232 #CJK UNIFIED IDEOGRAPH
+0xE0A9 0x723B #CJK UNIFIED IDEOGRAPH
+0xE0AA 0x723C #CJK UNIFIED IDEOGRAPH
+0xE0AB 0x723F #CJK UNIFIED IDEOGRAPH
+0xE0AC 0x7240 #CJK UNIFIED IDEOGRAPH
+0xE0AD 0x7246 #CJK UNIFIED IDEOGRAPH
+0xE0AE 0x724B #CJK UNIFIED IDEOGRAPH
+0xE0AF 0x7258 #CJK UNIFIED IDEOGRAPH
+0xE0B0 0x7274 #CJK UNIFIED IDEOGRAPH
+0xE0B1 0x727E #CJK UNIFIED IDEOGRAPH
+0xE0B2 0x7282 #CJK UNIFIED IDEOGRAPH
+0xE0B3 0x7281 #CJK UNIFIED IDEOGRAPH
+0xE0B4 0x7287 #CJK UNIFIED IDEOGRAPH
+0xE0B5 0x7292 #CJK UNIFIED IDEOGRAPH
+0xE0B6 0x7296 #CJK UNIFIED IDEOGRAPH
+0xE0B7 0x72A2 #CJK UNIFIED IDEOGRAPH
+0xE0B8 0x72A7 #CJK UNIFIED IDEOGRAPH
+0xE0B9 0x72B9 #CJK UNIFIED IDEOGRAPH
+0xE0BA 0x72B2 #CJK UNIFIED IDEOGRAPH
+0xE0BB 0x72C3 #CJK UNIFIED IDEOGRAPH
+0xE0BC 0x72C6 #CJK UNIFIED IDEOGRAPH
+0xE0BD 0x72C4 #CJK UNIFIED IDEOGRAPH
+0xE0BE 0x72CE #CJK UNIFIED IDEOGRAPH
+0xE0BF 0x72D2 #CJK UNIFIED IDEOGRAPH
+0xE0C0 0x72E2 #CJK UNIFIED IDEOGRAPH
+0xE0C1 0x72E0 #CJK UNIFIED IDEOGRAPH
+0xE0C2 0x72E1 #CJK UNIFIED IDEOGRAPH
+0xE0C3 0x72F9 #CJK UNIFIED IDEOGRAPH
+0xE0C4 0x72F7 #CJK UNIFIED IDEOGRAPH
+0xE0C5 0x500F #CJK UNIFIED IDEOGRAPH
+0xE0C6 0x7317 #CJK UNIFIED IDEOGRAPH
+0xE0C7 0x730A #CJK UNIFIED IDEOGRAPH
+0xE0C8 0x731C #CJK UNIFIED IDEOGRAPH
+0xE0C9 0x7316 #CJK UNIFIED IDEOGRAPH
+0xE0CA 0x731D #CJK UNIFIED IDEOGRAPH
+0xE0CB 0x7334 #CJK UNIFIED IDEOGRAPH
+0xE0CC 0x732F #CJK UNIFIED IDEOGRAPH
+0xE0CD 0x7329 #CJK UNIFIED IDEOGRAPH
+0xE0CE 0x7325 #CJK UNIFIED IDEOGRAPH
+0xE0CF 0x733E #CJK UNIFIED IDEOGRAPH
+0xE0D0 0x734E #CJK UNIFIED IDEOGRAPH
+0xE0D1 0x734F #CJK UNIFIED IDEOGRAPH
+0xE0D2 0x9ED8 #CJK UNIFIED IDEOGRAPH
+0xE0D3 0x7357 #CJK UNIFIED IDEOGRAPH
+0xE0D4 0x736A #CJK UNIFIED IDEOGRAPH
+0xE0D5 0x7368 #CJK UNIFIED IDEOGRAPH
+0xE0D6 0x7370 #CJK UNIFIED IDEOGRAPH
+0xE0D7 0x7378 #CJK UNIFIED IDEOGRAPH
+0xE0D8 0x7375 #CJK UNIFIED IDEOGRAPH
+0xE0D9 0x737B #CJK UNIFIED IDEOGRAPH
+0xE0DA 0x737A #CJK UNIFIED IDEOGRAPH
+0xE0DB 0x73C8 #CJK UNIFIED IDEOGRAPH
+0xE0DC 0x73B3 #CJK UNIFIED IDEOGRAPH
+0xE0DD 0x73CE #CJK UNIFIED IDEOGRAPH
+0xE0DE 0x73BB #CJK UNIFIED IDEOGRAPH
+0xE0DF 0x73C0 #CJK UNIFIED IDEOGRAPH
+0xE0E0 0x73E5 #CJK UNIFIED IDEOGRAPH
+0xE0E1 0x73EE #CJK UNIFIED IDEOGRAPH
+0xE0E2 0x73DE #CJK UNIFIED IDEOGRAPH
+0xE0E3 0x74A2 #CJK UNIFIED IDEOGRAPH
+0xE0E4 0x7405 #CJK UNIFIED IDEOGRAPH
+0xE0E5 0x746F #CJK UNIFIED IDEOGRAPH
+0xE0E6 0x7425 #CJK UNIFIED IDEOGRAPH
+0xE0E7 0x73F8 #CJK UNIFIED IDEOGRAPH
+0xE0E8 0x7432 #CJK UNIFIED IDEOGRAPH
+0xE0E9 0x743A #CJK UNIFIED IDEOGRAPH
+0xE0EA 0x7455 #CJK UNIFIED IDEOGRAPH
+0xE0EB 0x743F #CJK UNIFIED IDEOGRAPH
+0xE0EC 0x745F #CJK UNIFIED IDEOGRAPH
+0xE0ED 0x7459 #CJK UNIFIED IDEOGRAPH
+0xE0EE 0x7441 #CJK UNIFIED IDEOGRAPH
+0xE0EF 0x745C #CJK UNIFIED IDEOGRAPH
+0xE0F0 0x7469 #CJK UNIFIED IDEOGRAPH
+0xE0F1 0x7470 #CJK UNIFIED IDEOGRAPH
+0xE0F2 0x7463 #CJK UNIFIED IDEOGRAPH
+0xE0F3 0x746A #CJK UNIFIED IDEOGRAPH
+0xE0F4 0x7476 #CJK UNIFIED IDEOGRAPH
+0xE0F5 0x747E #CJK UNIFIED IDEOGRAPH
+0xE0F6 0x748B #CJK UNIFIED IDEOGRAPH
+0xE0F7 0x749E #CJK UNIFIED IDEOGRAPH
+0xE0F8 0x74A7 #CJK UNIFIED IDEOGRAPH
+0xE0F9 0x74CA #CJK UNIFIED IDEOGRAPH
+0xE0FA 0x74CF #CJK UNIFIED IDEOGRAPH
+0xE0FB 0x74D4 #CJK UNIFIED IDEOGRAPH
+0xE0FC 0x73F1 #CJK UNIFIED IDEOGRAPH
+0xE140 0x74E0 #CJK UNIFIED IDEOGRAPH
+0xE141 0x74E3 #CJK UNIFIED IDEOGRAPH
+0xE142 0x74E7 #CJK UNIFIED IDEOGRAPH
+0xE143 0x74E9 #CJK UNIFIED IDEOGRAPH
+0xE144 0x74EE #CJK UNIFIED IDEOGRAPH
+0xE145 0x74F2 #CJK UNIFIED IDEOGRAPH
+0xE146 0x74F0 #CJK UNIFIED IDEOGRAPH
+0xE147 0x74F1 #CJK UNIFIED IDEOGRAPH
+0xE148 0x74F8 #CJK UNIFIED IDEOGRAPH
+0xE149 0x74F7 #CJK UNIFIED IDEOGRAPH
+0xE14A 0x7504 #CJK UNIFIED IDEOGRAPH
+0xE14B 0x7503 #CJK UNIFIED IDEOGRAPH
+0xE14C 0x7505 #CJK UNIFIED IDEOGRAPH
+0xE14D 0x750C #CJK UNIFIED IDEOGRAPH
+0xE14E 0x750E #CJK UNIFIED IDEOGRAPH
+0xE14F 0x750D #CJK UNIFIED IDEOGRAPH
+0xE150 0x7515 #CJK UNIFIED IDEOGRAPH
+0xE151 0x7513 #CJK UNIFIED IDEOGRAPH
+0xE152 0x751E #CJK UNIFIED IDEOGRAPH
+0xE153 0x7526 #CJK UNIFIED IDEOGRAPH
+0xE154 0x752C #CJK UNIFIED IDEOGRAPH
+0xE155 0x753C #CJK UNIFIED IDEOGRAPH
+0xE156 0x7544 #CJK UNIFIED IDEOGRAPH
+0xE157 0x754D #CJK UNIFIED IDEOGRAPH
+0xE158 0x754A #CJK UNIFIED IDEOGRAPH
+0xE159 0x7549 #CJK UNIFIED IDEOGRAPH
+0xE15A 0x755B #CJK UNIFIED IDEOGRAPH
+0xE15B 0x7546 #CJK UNIFIED IDEOGRAPH
+0xE15C 0x755A #CJK UNIFIED IDEOGRAPH
+0xE15D 0x7569 #CJK UNIFIED IDEOGRAPH
+0xE15E 0x7564 #CJK UNIFIED IDEOGRAPH
+0xE15F 0x7567 #CJK UNIFIED IDEOGRAPH
+0xE160 0x756B #CJK UNIFIED IDEOGRAPH
+0xE161 0x756D #CJK UNIFIED IDEOGRAPH
+0xE162 0x7578 #CJK UNIFIED IDEOGRAPH
+0xE163 0x7576 #CJK UNIFIED IDEOGRAPH
+0xE164 0x7586 #CJK UNIFIED IDEOGRAPH
+0xE165 0x7587 #CJK UNIFIED IDEOGRAPH
+0xE166 0x7574 #CJK UNIFIED IDEOGRAPH
+0xE167 0x758A #CJK UNIFIED IDEOGRAPH
+0xE168 0x7589 #CJK UNIFIED IDEOGRAPH
+0xE169 0x7582 #CJK UNIFIED IDEOGRAPH
+0xE16A 0x7594 #CJK UNIFIED IDEOGRAPH
+0xE16B 0x759A #CJK UNIFIED IDEOGRAPH
+0xE16C 0x759D #CJK UNIFIED IDEOGRAPH
+0xE16D 0x75A5 #CJK UNIFIED IDEOGRAPH
+0xE16E 0x75A3 #CJK UNIFIED IDEOGRAPH
+0xE16F 0x75C2 #CJK UNIFIED IDEOGRAPH
+0xE170 0x75B3 #CJK UNIFIED IDEOGRAPH
+0xE171 0x75C3 #CJK UNIFIED IDEOGRAPH
+0xE172 0x75B5 #CJK UNIFIED IDEOGRAPH
+0xE173 0x75BD #CJK UNIFIED IDEOGRAPH
+0xE174 0x75B8 #CJK UNIFIED IDEOGRAPH
+0xE175 0x75BC #CJK UNIFIED IDEOGRAPH
+0xE176 0x75B1 #CJK UNIFIED IDEOGRAPH
+0xE177 0x75CD #CJK UNIFIED IDEOGRAPH
+0xE178 0x75CA #CJK UNIFIED IDEOGRAPH
+0xE179 0x75D2 #CJK UNIFIED IDEOGRAPH
+0xE17A 0x75D9 #CJK UNIFIED IDEOGRAPH
+0xE17B 0x75E3 #CJK UNIFIED IDEOGRAPH
+0xE17C 0x75DE #CJK UNIFIED IDEOGRAPH
+0xE17D 0x75FE #CJK UNIFIED IDEOGRAPH
+0xE17E 0x75FF #CJK UNIFIED IDEOGRAPH
+0xE180 0x75FC #CJK UNIFIED IDEOGRAPH
+0xE181 0x7601 #CJK UNIFIED IDEOGRAPH
+0xE182 0x75F0 #CJK UNIFIED IDEOGRAPH
+0xE183 0x75FA #CJK UNIFIED IDEOGRAPH
+0xE184 0x75F2 #CJK UNIFIED IDEOGRAPH
+0xE185 0x75F3 #CJK UNIFIED IDEOGRAPH
+0xE186 0x760B #CJK UNIFIED IDEOGRAPH
+0xE187 0x760D #CJK UNIFIED IDEOGRAPH
+0xE188 0x7609 #CJK UNIFIED IDEOGRAPH
+0xE189 0x761F #CJK UNIFIED IDEOGRAPH
+0xE18A 0x7627 #CJK UNIFIED IDEOGRAPH
+0xE18B 0x7620 #CJK UNIFIED IDEOGRAPH
+0xE18C 0x7621 #CJK UNIFIED IDEOGRAPH
+0xE18D 0x7622 #CJK UNIFIED IDEOGRAPH
+0xE18E 0x7624 #CJK UNIFIED IDEOGRAPH
+0xE18F 0x7634 #CJK UNIFIED IDEOGRAPH
+0xE190 0x7630 #CJK UNIFIED IDEOGRAPH
+0xE191 0x763B #CJK UNIFIED IDEOGRAPH
+0xE192 0x7647 #CJK UNIFIED IDEOGRAPH
+0xE193 0x7648 #CJK UNIFIED IDEOGRAPH
+0xE194 0x7646 #CJK UNIFIED IDEOGRAPH
+0xE195 0x765C #CJK UNIFIED IDEOGRAPH
+0xE196 0x7658 #CJK UNIFIED IDEOGRAPH
+0xE197 0x7661 #CJK UNIFIED IDEOGRAPH
+0xE198 0x7662 #CJK UNIFIED IDEOGRAPH
+0xE199 0x7668 #CJK UNIFIED IDEOGRAPH
+0xE19A 0x7669 #CJK UNIFIED IDEOGRAPH
+0xE19B 0x766A #CJK UNIFIED IDEOGRAPH
+0xE19C 0x7667 #CJK UNIFIED IDEOGRAPH
+0xE19D 0x766C #CJK UNIFIED IDEOGRAPH
+0xE19E 0x7670 #CJK UNIFIED IDEOGRAPH
+0xE19F 0x7672 #CJK UNIFIED IDEOGRAPH
+0xE1A0 0x7676 #CJK UNIFIED IDEOGRAPH
+0xE1A1 0x7678 #CJK UNIFIED IDEOGRAPH
+0xE1A2 0x767C #CJK UNIFIED IDEOGRAPH
+0xE1A3 0x7680 #CJK UNIFIED IDEOGRAPH
+0xE1A4 0x7683 #CJK UNIFIED IDEOGRAPH
+0xE1A5 0x7688 #CJK UNIFIED IDEOGRAPH
+0xE1A6 0x768B #CJK UNIFIED IDEOGRAPH
+0xE1A7 0x768E #CJK UNIFIED IDEOGRAPH
+0xE1A8 0x7696 #CJK UNIFIED IDEOGRAPH
+0xE1A9 0x7693 #CJK UNIFIED IDEOGRAPH
+0xE1AA 0x7699 #CJK UNIFIED IDEOGRAPH
+0xE1AB 0x769A #CJK UNIFIED IDEOGRAPH
+0xE1AC 0x76B0 #CJK UNIFIED IDEOGRAPH
+0xE1AD 0x76B4 #CJK UNIFIED IDEOGRAPH
+0xE1AE 0x76B8 #CJK UNIFIED IDEOGRAPH
+0xE1AF 0x76B9 #CJK UNIFIED IDEOGRAPH
+0xE1B0 0x76BA #CJK UNIFIED IDEOGRAPH
+0xE1B1 0x76C2 #CJK UNIFIED IDEOGRAPH
+0xE1B2 0x76CD #CJK UNIFIED IDEOGRAPH
+0xE1B3 0x76D6 #CJK UNIFIED IDEOGRAPH
+0xE1B4 0x76D2 #CJK UNIFIED IDEOGRAPH
+0xE1B5 0x76DE #CJK UNIFIED IDEOGRAPH
+0xE1B6 0x76E1 #CJK UNIFIED IDEOGRAPH
+0xE1B7 0x76E5 #CJK UNIFIED IDEOGRAPH
+0xE1B8 0x76E7 #CJK UNIFIED IDEOGRAPH
+0xE1B9 0x76EA #CJK UNIFIED IDEOGRAPH
+0xE1BA 0x862F #CJK UNIFIED IDEOGRAPH
+0xE1BB 0x76FB #CJK UNIFIED IDEOGRAPH
+0xE1BC 0x7708 #CJK UNIFIED IDEOGRAPH
+0xE1BD 0x7707 #CJK UNIFIED IDEOGRAPH
+0xE1BE 0x7704 #CJK UNIFIED IDEOGRAPH
+0xE1BF 0x7729 #CJK UNIFIED IDEOGRAPH
+0xE1C0 0x7724 #CJK UNIFIED IDEOGRAPH
+0xE1C1 0x771E #CJK UNIFIED IDEOGRAPH
+0xE1C2 0x7725 #CJK UNIFIED IDEOGRAPH
+0xE1C3 0x7726 #CJK UNIFIED IDEOGRAPH
+0xE1C4 0x771B #CJK UNIFIED IDEOGRAPH
+0xE1C5 0x7737 #CJK UNIFIED IDEOGRAPH
+0xE1C6 0x7738 #CJK UNIFIED IDEOGRAPH
+0xE1C7 0x7747 #CJK UNIFIED IDEOGRAPH
+0xE1C8 0x775A #CJK UNIFIED IDEOGRAPH
+0xE1C9 0x7768 #CJK UNIFIED IDEOGRAPH
+0xE1CA 0x776B #CJK UNIFIED IDEOGRAPH
+0xE1CB 0x775B #CJK UNIFIED IDEOGRAPH
+0xE1CC 0x7765 #CJK UNIFIED IDEOGRAPH
+0xE1CD 0x777F #CJK UNIFIED IDEOGRAPH
+0xE1CE 0x777E #CJK UNIFIED IDEOGRAPH
+0xE1CF 0x7779 #CJK UNIFIED IDEOGRAPH
+0xE1D0 0x778E #CJK UNIFIED IDEOGRAPH
+0xE1D1 0x778B #CJK UNIFIED IDEOGRAPH
+0xE1D2 0x7791 #CJK UNIFIED IDEOGRAPH
+0xE1D3 0x77A0 #CJK UNIFIED IDEOGRAPH
+0xE1D4 0x779E #CJK UNIFIED IDEOGRAPH
+0xE1D5 0x77B0 #CJK UNIFIED IDEOGRAPH
+0xE1D6 0x77B6 #CJK UNIFIED IDEOGRAPH
+0xE1D7 0x77B9 #CJK UNIFIED IDEOGRAPH
+0xE1D8 0x77BF #CJK UNIFIED IDEOGRAPH
+0xE1D9 0x77BC #CJK UNIFIED IDEOGRAPH
+0xE1DA 0x77BD #CJK UNIFIED IDEOGRAPH
+0xE1DB 0x77BB #CJK UNIFIED IDEOGRAPH
+0xE1DC 0x77C7 #CJK UNIFIED IDEOGRAPH
+0xE1DD 0x77CD #CJK UNIFIED IDEOGRAPH
+0xE1DE 0x77D7 #CJK UNIFIED IDEOGRAPH
+0xE1DF 0x77DA #CJK UNIFIED IDEOGRAPH
+0xE1E0 0x77DC #CJK UNIFIED IDEOGRAPH
+0xE1E1 0x77E3 #CJK UNIFIED IDEOGRAPH
+0xE1E2 0x77EE #CJK UNIFIED IDEOGRAPH
+0xE1E3 0x77FC #CJK UNIFIED IDEOGRAPH
+0xE1E4 0x780C #CJK UNIFIED IDEOGRAPH
+0xE1E5 0x7812 #CJK UNIFIED IDEOGRAPH
+0xE1E6 0x7926 #CJK UNIFIED IDEOGRAPH
+0xE1E7 0x7820 #CJK UNIFIED IDEOGRAPH
+0xE1E8 0x792A #CJK UNIFIED IDEOGRAPH
+0xE1E9 0x7845 #CJK UNIFIED IDEOGRAPH
+0xE1EA 0x788E #CJK UNIFIED IDEOGRAPH
+0xE1EB 0x7874 #CJK UNIFIED IDEOGRAPH
+0xE1EC 0x7886 #CJK UNIFIED IDEOGRAPH
+0xE1ED 0x787C #CJK UNIFIED IDEOGRAPH
+0xE1EE 0x789A #CJK UNIFIED IDEOGRAPH
+0xE1EF 0x788C #CJK UNIFIED IDEOGRAPH
+0xE1F0 0x78A3 #CJK UNIFIED IDEOGRAPH
+0xE1F1 0x78B5 #CJK UNIFIED IDEOGRAPH
+0xE1F2 0x78AA #CJK UNIFIED IDEOGRAPH
+0xE1F3 0x78AF #CJK UNIFIED IDEOGRAPH
+0xE1F4 0x78D1 #CJK UNIFIED IDEOGRAPH
+0xE1F5 0x78C6 #CJK UNIFIED IDEOGRAPH
+0xE1F6 0x78CB #CJK UNIFIED IDEOGRAPH
+0xE1F7 0x78D4 #CJK UNIFIED IDEOGRAPH
+0xE1F8 0x78BE #CJK UNIFIED IDEOGRAPH
+0xE1F9 0x78BC #CJK UNIFIED IDEOGRAPH
+0xE1FA 0x78C5 #CJK UNIFIED IDEOGRAPH
+0xE1FB 0x78CA #CJK UNIFIED IDEOGRAPH
+0xE1FC 0x78EC #CJK UNIFIED IDEOGRAPH
+0xE240 0x78E7 #CJK UNIFIED IDEOGRAPH
+0xE241 0x78DA #CJK UNIFIED IDEOGRAPH
+0xE242 0x78FD #CJK UNIFIED IDEOGRAPH
+0xE243 0x78F4 #CJK UNIFIED IDEOGRAPH
+0xE244 0x7907 #CJK UNIFIED IDEOGRAPH
+0xE245 0x7912 #CJK UNIFIED IDEOGRAPH
+0xE246 0x7911 #CJK UNIFIED IDEOGRAPH
+0xE247 0x7919 #CJK UNIFIED IDEOGRAPH
+0xE248 0x792C #CJK UNIFIED IDEOGRAPH
+0xE249 0x792B #CJK UNIFIED IDEOGRAPH
+0xE24A 0x7940 #CJK UNIFIED IDEOGRAPH
+0xE24B 0x7960 #CJK UNIFIED IDEOGRAPH
+0xE24C 0x7957 #CJK UNIFIED IDEOGRAPH
+0xE24D 0x795F #CJK UNIFIED IDEOGRAPH
+0xE24E 0x795A #CJK UNIFIED IDEOGRAPH
+0xE24F 0x7955 #CJK UNIFIED IDEOGRAPH
+0xE250 0x7953 #CJK UNIFIED IDEOGRAPH
+0xE251 0x797A #CJK UNIFIED IDEOGRAPH
+0xE252 0x797F #CJK UNIFIED IDEOGRAPH
+0xE253 0x798A #CJK UNIFIED IDEOGRAPH
+0xE254 0x799D #CJK UNIFIED IDEOGRAPH
+0xE255 0x79A7 #CJK UNIFIED IDEOGRAPH
+0xE256 0x9F4B #CJK UNIFIED IDEOGRAPH
+0xE257 0x79AA #CJK UNIFIED IDEOGRAPH
+0xE258 0x79AE #CJK UNIFIED IDEOGRAPH
+0xE259 0x79B3 #CJK UNIFIED IDEOGRAPH
+0xE25A 0x79B9 #CJK UNIFIED IDEOGRAPH
+0xE25B 0x79BA #CJK UNIFIED IDEOGRAPH
+0xE25C 0x79C9 #CJK UNIFIED IDEOGRAPH
+0xE25D 0x79D5 #CJK UNIFIED IDEOGRAPH
+0xE25E 0x79E7 #CJK UNIFIED IDEOGRAPH
+0xE25F 0x79EC #CJK UNIFIED IDEOGRAPH
+0xE260 0x79E1 #CJK UNIFIED IDEOGRAPH
+0xE261 0x79E3 #CJK UNIFIED IDEOGRAPH
+0xE262 0x7A08 #CJK UNIFIED IDEOGRAPH
+0xE263 0x7A0D #CJK UNIFIED IDEOGRAPH
+0xE264 0x7A18 #CJK UNIFIED IDEOGRAPH
+0xE265 0x7A19 #CJK UNIFIED IDEOGRAPH
+0xE266 0x7A20 #CJK UNIFIED IDEOGRAPH
+0xE267 0x7A1F #CJK UNIFIED IDEOGRAPH
+0xE268 0x7980 #CJK UNIFIED IDEOGRAPH
+0xE269 0x7A31 #CJK UNIFIED IDEOGRAPH
+0xE26A 0x7A3B #CJK UNIFIED IDEOGRAPH
+0xE26B 0x7A3E #CJK UNIFIED IDEOGRAPH
+0xE26C 0x7A37 #CJK UNIFIED IDEOGRAPH
+0xE26D 0x7A43 #CJK UNIFIED IDEOGRAPH
+0xE26E 0x7A57 #CJK UNIFIED IDEOGRAPH
+0xE26F 0x7A49 #CJK UNIFIED IDEOGRAPH
+0xE270 0x7A61 #CJK UNIFIED IDEOGRAPH
+0xE271 0x7A62 #CJK UNIFIED IDEOGRAPH
+0xE272 0x7A69 #CJK UNIFIED IDEOGRAPH
+0xE273 0x9F9D #CJK UNIFIED IDEOGRAPH
+0xE274 0x7A70 #CJK UNIFIED IDEOGRAPH
+0xE275 0x7A79 #CJK UNIFIED IDEOGRAPH
+0xE276 0x7A7D #CJK UNIFIED IDEOGRAPH
+0xE277 0x7A88 #CJK UNIFIED IDEOGRAPH
+0xE278 0x7A97 #CJK UNIFIED IDEOGRAPH
+0xE279 0x7A95 #CJK UNIFIED IDEOGRAPH
+0xE27A 0x7A98 #CJK UNIFIED IDEOGRAPH
+0xE27B 0x7A96 #CJK UNIFIED IDEOGRAPH
+0xE27C 0x7AA9 #CJK UNIFIED IDEOGRAPH
+0xE27D 0x7AC8 #CJK UNIFIED IDEOGRAPH
+0xE27E 0x7AB0 #CJK UNIFIED IDEOGRAPH
+0xE280 0x7AB6 #CJK UNIFIED IDEOGRAPH
+0xE281 0x7AC5 #CJK UNIFIED IDEOGRAPH
+0xE282 0x7AC4 #CJK UNIFIED IDEOGRAPH
+0xE283 0x7ABF #CJK UNIFIED IDEOGRAPH
+0xE284 0x9083 #CJK UNIFIED IDEOGRAPH
+0xE285 0x7AC7 #CJK UNIFIED IDEOGRAPH
+0xE286 0x7ACA #CJK UNIFIED IDEOGRAPH
+0xE287 0x7ACD #CJK UNIFIED IDEOGRAPH
+0xE288 0x7ACF #CJK UNIFIED IDEOGRAPH
+0xE289 0x7AD5 #CJK UNIFIED IDEOGRAPH
+0xE28A 0x7AD3 #CJK UNIFIED IDEOGRAPH
+0xE28B 0x7AD9 #CJK UNIFIED IDEOGRAPH
+0xE28C 0x7ADA #CJK UNIFIED IDEOGRAPH
+0xE28D 0x7ADD #CJK UNIFIED IDEOGRAPH
+0xE28E 0x7AE1 #CJK UNIFIED IDEOGRAPH
+0xE28F 0x7AE2 #CJK UNIFIED IDEOGRAPH
+0xE290 0x7AE6 #CJK UNIFIED IDEOGRAPH
+0xE291 0x7AED #CJK UNIFIED IDEOGRAPH
+0xE292 0x7AF0 #CJK UNIFIED IDEOGRAPH
+0xE293 0x7B02 #CJK UNIFIED IDEOGRAPH
+0xE294 0x7B0F #CJK UNIFIED IDEOGRAPH
+0xE295 0x7B0A #CJK UNIFIED IDEOGRAPH
+0xE296 0x7B06 #CJK UNIFIED IDEOGRAPH
+0xE297 0x7B33 #CJK UNIFIED IDEOGRAPH
+0xE298 0x7B18 #CJK UNIFIED IDEOGRAPH
+0xE299 0x7B19 #CJK UNIFIED IDEOGRAPH
+0xE29A 0x7B1E #CJK UNIFIED IDEOGRAPH
+0xE29B 0x7B35 #CJK UNIFIED IDEOGRAPH
+0xE29C 0x7B28 #CJK UNIFIED IDEOGRAPH
+0xE29D 0x7B36 #CJK UNIFIED IDEOGRAPH
+0xE29E 0x7B50 #CJK UNIFIED IDEOGRAPH
+0xE29F 0x7B7A #CJK UNIFIED IDEOGRAPH
+0xE2A0 0x7B04 #CJK UNIFIED IDEOGRAPH
+0xE2A1 0x7B4D #CJK UNIFIED IDEOGRAPH
+0xE2A2 0x7B0B #CJK UNIFIED IDEOGRAPH
+0xE2A3 0x7B4C #CJK UNIFIED IDEOGRAPH
+0xE2A4 0x7B45 #CJK UNIFIED IDEOGRAPH
+0xE2A5 0x7B75 #CJK UNIFIED IDEOGRAPH
+0xE2A6 0x7B65 #CJK UNIFIED IDEOGRAPH
+0xE2A7 0x7B74 #CJK UNIFIED IDEOGRAPH
+0xE2A8 0x7B67 #CJK UNIFIED IDEOGRAPH
+0xE2A9 0x7B70 #CJK UNIFIED IDEOGRAPH
+0xE2AA 0x7B71 #CJK UNIFIED IDEOGRAPH
+0xE2AB 0x7B6C #CJK UNIFIED IDEOGRAPH
+0xE2AC 0x7B6E #CJK UNIFIED IDEOGRAPH
+0xE2AD 0x7B9D #CJK UNIFIED IDEOGRAPH
+0xE2AE 0x7B98 #CJK UNIFIED IDEOGRAPH
+0xE2AF 0x7B9F #CJK UNIFIED IDEOGRAPH
+0xE2B0 0x7B8D #CJK UNIFIED IDEOGRAPH
+0xE2B1 0x7B9C #CJK UNIFIED IDEOGRAPH
+0xE2B2 0x7B9A #CJK UNIFIED IDEOGRAPH
+0xE2B3 0x7B8B #CJK UNIFIED IDEOGRAPH
+0xE2B4 0x7B92 #CJK UNIFIED IDEOGRAPH
+0xE2B5 0x7B8F #CJK UNIFIED IDEOGRAPH
+0xE2B6 0x7B5D #CJK UNIFIED IDEOGRAPH
+0xE2B7 0x7B99 #CJK UNIFIED IDEOGRAPH
+0xE2B8 0x7BCB #CJK UNIFIED IDEOGRAPH
+0xE2B9 0x7BC1 #CJK UNIFIED IDEOGRAPH
+0xE2BA 0x7BCC #CJK UNIFIED IDEOGRAPH
+0xE2BB 0x7BCF #CJK UNIFIED IDEOGRAPH
+0xE2BC 0x7BB4 #CJK UNIFIED IDEOGRAPH
+0xE2BD 0x7BC6 #CJK UNIFIED IDEOGRAPH
+0xE2BE 0x7BDD #CJK UNIFIED IDEOGRAPH
+0xE2BF 0x7BE9 #CJK UNIFIED IDEOGRAPH
+0xE2C0 0x7C11 #CJK UNIFIED IDEOGRAPH
+0xE2C1 0x7C14 #CJK UNIFIED IDEOGRAPH
+0xE2C2 0x7BE6 #CJK UNIFIED IDEOGRAPH
+0xE2C3 0x7BE5 #CJK UNIFIED IDEOGRAPH
+0xE2C4 0x7C60 #CJK UNIFIED IDEOGRAPH
+0xE2C5 0x7C00 #CJK UNIFIED IDEOGRAPH
+0xE2C6 0x7C07 #CJK UNIFIED IDEOGRAPH
+0xE2C7 0x7C13 #CJK UNIFIED IDEOGRAPH
+0xE2C8 0x7BF3 #CJK UNIFIED IDEOGRAPH
+0xE2C9 0x7BF7 #CJK UNIFIED IDEOGRAPH
+0xE2CA 0x7C17 #CJK UNIFIED IDEOGRAPH
+0xE2CB 0x7C0D #CJK UNIFIED IDEOGRAPH
+0xE2CC 0x7BF6 #CJK UNIFIED IDEOGRAPH
+0xE2CD 0x7C23 #CJK UNIFIED IDEOGRAPH
+0xE2CE 0x7C27 #CJK UNIFIED IDEOGRAPH
+0xE2CF 0x7C2A #CJK UNIFIED IDEOGRAPH
+0xE2D0 0x7C1F #CJK UNIFIED IDEOGRAPH
+0xE2D1 0x7C37 #CJK UNIFIED IDEOGRAPH
+0xE2D2 0x7C2B #CJK UNIFIED IDEOGRAPH
+0xE2D3 0x7C3D #CJK UNIFIED IDEOGRAPH
+0xE2D4 0x7C4C #CJK UNIFIED IDEOGRAPH
+0xE2D5 0x7C43 #CJK UNIFIED IDEOGRAPH
+0xE2D6 0x7C54 #CJK UNIFIED IDEOGRAPH
+0xE2D7 0x7C4F #CJK UNIFIED IDEOGRAPH
+0xE2D8 0x7C40 #CJK UNIFIED IDEOGRAPH
+0xE2D9 0x7C50 #CJK UNIFIED IDEOGRAPH
+0xE2DA 0x7C58 #CJK UNIFIED IDEOGRAPH
+0xE2DB 0x7C5F #CJK UNIFIED IDEOGRAPH
+0xE2DC 0x7C64 #CJK UNIFIED IDEOGRAPH
+0xE2DD 0x7C56 #CJK UNIFIED IDEOGRAPH
+0xE2DE 0x7C65 #CJK UNIFIED IDEOGRAPH
+0xE2DF 0x7C6C #CJK UNIFIED IDEOGRAPH
+0xE2E0 0x7C75 #CJK UNIFIED IDEOGRAPH
+0xE2E1 0x7C83 #CJK UNIFIED IDEOGRAPH
+0xE2E2 0x7C90 #CJK UNIFIED IDEOGRAPH
+0xE2E3 0x7CA4 #CJK UNIFIED IDEOGRAPH
+0xE2E4 0x7CAD #CJK UNIFIED IDEOGRAPH
+0xE2E5 0x7CA2 #CJK UNIFIED IDEOGRAPH
+0xE2E6 0x7CAB #CJK UNIFIED IDEOGRAPH
+0xE2E7 0x7CA1 #CJK UNIFIED IDEOGRAPH
+0xE2E8 0x7CA8 #CJK UNIFIED IDEOGRAPH
+0xE2E9 0x7CB3 #CJK UNIFIED IDEOGRAPH
+0xE2EA 0x7CB2 #CJK UNIFIED IDEOGRAPH
+0xE2EB 0x7CB1 #CJK UNIFIED IDEOGRAPH
+0xE2EC 0x7CAE #CJK UNIFIED IDEOGRAPH
+0xE2ED 0x7CB9 #CJK UNIFIED IDEOGRAPH
+0xE2EE 0x7CBD #CJK UNIFIED IDEOGRAPH
+0xE2EF 0x7CC0 #CJK UNIFIED IDEOGRAPH
+0xE2F0 0x7CC5 #CJK UNIFIED IDEOGRAPH
+0xE2F1 0x7CC2 #CJK UNIFIED IDEOGRAPH
+0xE2F2 0x7CD8 #CJK UNIFIED IDEOGRAPH
+0xE2F3 0x7CD2 #CJK UNIFIED IDEOGRAPH
+0xE2F4 0x7CDC #CJK UNIFIED IDEOGRAPH
+0xE2F5 0x7CE2 #CJK UNIFIED IDEOGRAPH
+0xE2F6 0x9B3B #CJK UNIFIED IDEOGRAPH
+0xE2F7 0x7CEF #CJK UNIFIED IDEOGRAPH
+0xE2F8 0x7CF2 #CJK UNIFIED IDEOGRAPH
+0xE2F9 0x7CF4 #CJK UNIFIED IDEOGRAPH
+0xE2FA 0x7CF6 #CJK UNIFIED IDEOGRAPH
+0xE2FB 0x7CFA #CJK UNIFIED IDEOGRAPH
+0xE2FC 0x7D06 #CJK UNIFIED IDEOGRAPH
+0xE340 0x7D02 #CJK UNIFIED IDEOGRAPH
+0xE341 0x7D1C #CJK UNIFIED IDEOGRAPH
+0xE342 0x7D15 #CJK UNIFIED IDEOGRAPH
+0xE343 0x7D0A #CJK UNIFIED IDEOGRAPH
+0xE344 0x7D45 #CJK UNIFIED IDEOGRAPH
+0xE345 0x7D4B #CJK UNIFIED IDEOGRAPH
+0xE346 0x7D2E #CJK UNIFIED IDEOGRAPH
+0xE347 0x7D32 #CJK UNIFIED IDEOGRAPH
+0xE348 0x7D3F #CJK UNIFIED IDEOGRAPH
+0xE349 0x7D35 #CJK UNIFIED IDEOGRAPH
+0xE34A 0x7D46 #CJK UNIFIED IDEOGRAPH
+0xE34B 0x7D73 #CJK UNIFIED IDEOGRAPH
+0xE34C 0x7D56 #CJK UNIFIED IDEOGRAPH
+0xE34D 0x7D4E #CJK UNIFIED IDEOGRAPH
+0xE34E 0x7D72 #CJK UNIFIED IDEOGRAPH
+0xE34F 0x7D68 #CJK UNIFIED IDEOGRAPH
+0xE350 0x7D6E #CJK UNIFIED IDEOGRAPH
+0xE351 0x7D4F #CJK UNIFIED IDEOGRAPH
+0xE352 0x7D63 #CJK UNIFIED IDEOGRAPH
+0xE353 0x7D93 #CJK UNIFIED IDEOGRAPH
+0xE354 0x7D89 #CJK UNIFIED IDEOGRAPH
+0xE355 0x7D5B #CJK UNIFIED IDEOGRAPH
+0xE356 0x7D8F #CJK UNIFIED IDEOGRAPH
+0xE357 0x7D7D #CJK UNIFIED IDEOGRAPH
+0xE358 0x7D9B #CJK UNIFIED IDEOGRAPH
+0xE359 0x7DBA #CJK UNIFIED IDEOGRAPH
+0xE35A 0x7DAE #CJK UNIFIED IDEOGRAPH
+0xE35B 0x7DA3 #CJK UNIFIED IDEOGRAPH
+0xE35C 0x7DB5 #CJK UNIFIED IDEOGRAPH
+0xE35D 0x7DC7 #CJK UNIFIED IDEOGRAPH
+0xE35E 0x7DBD #CJK UNIFIED IDEOGRAPH
+0xE35F 0x7DAB #CJK UNIFIED IDEOGRAPH
+0xE360 0x7E3D #CJK UNIFIED IDEOGRAPH
+0xE361 0x7DA2 #CJK UNIFIED IDEOGRAPH
+0xE362 0x7DAF #CJK UNIFIED IDEOGRAPH
+0xE363 0x7DDC #CJK UNIFIED IDEOGRAPH
+0xE364 0x7DB8 #CJK UNIFIED IDEOGRAPH
+0xE365 0x7D9F #CJK UNIFIED IDEOGRAPH
+0xE366 0x7DB0 #CJK UNIFIED IDEOGRAPH
+0xE367 0x7DD8 #CJK UNIFIED IDEOGRAPH
+0xE368 0x7DDD #CJK UNIFIED IDEOGRAPH
+0xE369 0x7DE4 #CJK UNIFIED IDEOGRAPH
+0xE36A 0x7DDE #CJK UNIFIED IDEOGRAPH
+0xE36B 0x7DFB #CJK UNIFIED IDEOGRAPH
+0xE36C 0x7DF2 #CJK UNIFIED IDEOGRAPH
+0xE36D 0x7DE1 #CJK UNIFIED IDEOGRAPH
+0xE36E 0x7E05 #CJK UNIFIED IDEOGRAPH
+0xE36F 0x7E0A #CJK UNIFIED IDEOGRAPH
+0xE370 0x7E23 #CJK UNIFIED IDEOGRAPH
+0xE371 0x7E21 #CJK UNIFIED IDEOGRAPH
+0xE372 0x7E12 #CJK UNIFIED IDEOGRAPH
+0xE373 0x7E31 #CJK UNIFIED IDEOGRAPH
+0xE374 0x7E1F #CJK UNIFIED IDEOGRAPH
+0xE375 0x7E09 #CJK UNIFIED IDEOGRAPH
+0xE376 0x7E0B #CJK UNIFIED IDEOGRAPH
+0xE377 0x7E22 #CJK UNIFIED IDEOGRAPH
+0xE378 0x7E46 #CJK UNIFIED IDEOGRAPH
+0xE379 0x7E66 #CJK UNIFIED IDEOGRAPH
+0xE37A 0x7E3B #CJK UNIFIED IDEOGRAPH
+0xE37B 0x7E35 #CJK UNIFIED IDEOGRAPH
+0xE37C 0x7E39 #CJK UNIFIED IDEOGRAPH
+0xE37D 0x7E43 #CJK UNIFIED IDEOGRAPH
+0xE37E 0x7E37 #CJK UNIFIED IDEOGRAPH
+0xE380 0x7E32 #CJK UNIFIED IDEOGRAPH
+0xE381 0x7E3A #CJK UNIFIED IDEOGRAPH
+0xE382 0x7E67 #CJK UNIFIED IDEOGRAPH
+0xE383 0x7E5D #CJK UNIFIED IDEOGRAPH
+0xE384 0x7E56 #CJK UNIFIED IDEOGRAPH
+0xE385 0x7E5E #CJK UNIFIED IDEOGRAPH
+0xE386 0x7E59 #CJK UNIFIED IDEOGRAPH
+0xE387 0x7E5A #CJK UNIFIED IDEOGRAPH
+0xE388 0x7E79 #CJK UNIFIED IDEOGRAPH
+0xE389 0x7E6A #CJK UNIFIED IDEOGRAPH
+0xE38A 0x7E69 #CJK UNIFIED IDEOGRAPH
+0xE38B 0x7E7C #CJK UNIFIED IDEOGRAPH
+0xE38C 0x7E7B #CJK UNIFIED IDEOGRAPH
+0xE38D 0x7E83 #CJK UNIFIED IDEOGRAPH
+0xE38E 0x7DD5 #CJK UNIFIED IDEOGRAPH
+0xE38F 0x7E7D #CJK UNIFIED IDEOGRAPH
+0xE390 0x8FAE #CJK UNIFIED IDEOGRAPH
+0xE391 0x7E7F #CJK UNIFIED IDEOGRAPH
+0xE392 0x7E88 #CJK UNIFIED IDEOGRAPH
+0xE393 0x7E89 #CJK UNIFIED IDEOGRAPH
+0xE394 0x7E8C #CJK UNIFIED IDEOGRAPH
+0xE395 0x7E92 #CJK UNIFIED IDEOGRAPH
+0xE396 0x7E90 #CJK UNIFIED IDEOGRAPH
+0xE397 0x7E93 #CJK UNIFIED IDEOGRAPH
+0xE398 0x7E94 #CJK UNIFIED IDEOGRAPH
+0xE399 0x7E96 #CJK UNIFIED IDEOGRAPH
+0xE39A 0x7E8E #CJK UNIFIED IDEOGRAPH
+0xE39B 0x7E9B #CJK UNIFIED IDEOGRAPH
+0xE39C 0x7E9C #CJK UNIFIED IDEOGRAPH
+0xE39D 0x7F38 #CJK UNIFIED IDEOGRAPH
+0xE39E 0x7F3A #CJK UNIFIED IDEOGRAPH
+0xE39F 0x7F45 #CJK UNIFIED IDEOGRAPH
+0xE3A0 0x7F4C #CJK UNIFIED IDEOGRAPH
+0xE3A1 0x7F4D #CJK UNIFIED IDEOGRAPH
+0xE3A2 0x7F4E #CJK UNIFIED IDEOGRAPH
+0xE3A3 0x7F50 #CJK UNIFIED IDEOGRAPH
+0xE3A4 0x7F51 #CJK UNIFIED IDEOGRAPH
+0xE3A5 0x7F55 #CJK UNIFIED IDEOGRAPH
+0xE3A6 0x7F54 #CJK UNIFIED IDEOGRAPH
+0xE3A7 0x7F58 #CJK UNIFIED IDEOGRAPH
+0xE3A8 0x7F5F #CJK UNIFIED IDEOGRAPH
+0xE3A9 0x7F60 #CJK UNIFIED IDEOGRAPH
+0xE3AA 0x7F68 #CJK UNIFIED IDEOGRAPH
+0xE3AB 0x7F69 #CJK UNIFIED IDEOGRAPH
+0xE3AC 0x7F67 #CJK UNIFIED IDEOGRAPH
+0xE3AD 0x7F78 #CJK UNIFIED IDEOGRAPH
+0xE3AE 0x7F82 #CJK UNIFIED IDEOGRAPH
+0xE3AF 0x7F86 #CJK UNIFIED IDEOGRAPH
+0xE3B0 0x7F83 #CJK UNIFIED IDEOGRAPH
+0xE3B1 0x7F88 #CJK UNIFIED IDEOGRAPH
+0xE3B2 0x7F87 #CJK UNIFIED IDEOGRAPH
+0xE3B3 0x7F8C #CJK UNIFIED IDEOGRAPH
+0xE3B4 0x7F94 #CJK UNIFIED IDEOGRAPH
+0xE3B5 0x7F9E #CJK UNIFIED IDEOGRAPH
+0xE3B6 0x7F9D #CJK UNIFIED IDEOGRAPH
+0xE3B7 0x7F9A #CJK UNIFIED IDEOGRAPH
+0xE3B8 0x7FA3 #CJK UNIFIED IDEOGRAPH
+0xE3B9 0x7FAF #CJK UNIFIED IDEOGRAPH
+0xE3BA 0x7FB2 #CJK UNIFIED IDEOGRAPH
+0xE3BB 0x7FB9 #CJK UNIFIED IDEOGRAPH
+0xE3BC 0x7FAE #CJK UNIFIED IDEOGRAPH
+0xE3BD 0x7FB6 #CJK UNIFIED IDEOGRAPH
+0xE3BE 0x7FB8 #CJK UNIFIED IDEOGRAPH
+0xE3BF 0x8B71 #CJK UNIFIED IDEOGRAPH
+0xE3C0 0x7FC5 #CJK UNIFIED IDEOGRAPH
+0xE3C1 0x7FC6 #CJK UNIFIED IDEOGRAPH
+0xE3C2 0x7FCA #CJK UNIFIED IDEOGRAPH
+0xE3C3 0x7FD5 #CJK UNIFIED IDEOGRAPH
+0xE3C4 0x7FD4 #CJK UNIFIED IDEOGRAPH
+0xE3C5 0x7FE1 #CJK UNIFIED IDEOGRAPH
+0xE3C6 0x7FE6 #CJK UNIFIED IDEOGRAPH
+0xE3C7 0x7FE9 #CJK UNIFIED IDEOGRAPH
+0xE3C8 0x7FF3 #CJK UNIFIED IDEOGRAPH
+0xE3C9 0x7FF9 #CJK UNIFIED IDEOGRAPH
+0xE3CA 0x98DC #CJK UNIFIED IDEOGRAPH
+0xE3CB 0x8006 #CJK UNIFIED IDEOGRAPH
+0xE3CC 0x8004 #CJK UNIFIED IDEOGRAPH
+0xE3CD 0x800B #CJK UNIFIED IDEOGRAPH
+0xE3CE 0x8012 #CJK UNIFIED IDEOGRAPH
+0xE3CF 0x8018 #CJK UNIFIED IDEOGRAPH
+0xE3D0 0x8019 #CJK UNIFIED IDEOGRAPH
+0xE3D1 0x801C #CJK UNIFIED IDEOGRAPH
+0xE3D2 0x8021 #CJK UNIFIED IDEOGRAPH
+0xE3D3 0x8028 #CJK UNIFIED IDEOGRAPH
+0xE3D4 0x803F #CJK UNIFIED IDEOGRAPH
+0xE3D5 0x803B #CJK UNIFIED IDEOGRAPH
+0xE3D6 0x804A #CJK UNIFIED IDEOGRAPH
+0xE3D7 0x8046 #CJK UNIFIED IDEOGRAPH
+0xE3D8 0x8052 #CJK UNIFIED IDEOGRAPH
+0xE3D9 0x8058 #CJK UNIFIED IDEOGRAPH
+0xE3DA 0x805A #CJK UNIFIED IDEOGRAPH
+0xE3DB 0x805F #CJK UNIFIED IDEOGRAPH
+0xE3DC 0x8062 #CJK UNIFIED IDEOGRAPH
+0xE3DD 0x8068 #CJK UNIFIED IDEOGRAPH
+0xE3DE 0x8073 #CJK UNIFIED IDEOGRAPH
+0xE3DF 0x8072 #CJK UNIFIED IDEOGRAPH
+0xE3E0 0x8070 #CJK UNIFIED IDEOGRAPH
+0xE3E1 0x8076 #CJK UNIFIED IDEOGRAPH
+0xE3E2 0x8079 #CJK UNIFIED IDEOGRAPH
+0xE3E3 0x807D #CJK UNIFIED IDEOGRAPH
+0xE3E4 0x807F #CJK UNIFIED IDEOGRAPH
+0xE3E5 0x8084 #CJK UNIFIED IDEOGRAPH
+0xE3E6 0x8086 #CJK UNIFIED IDEOGRAPH
+0xE3E7 0x8085 #CJK UNIFIED IDEOGRAPH
+0xE3E8 0x809B #CJK UNIFIED IDEOGRAPH
+0xE3E9 0x8093 #CJK UNIFIED IDEOGRAPH
+0xE3EA 0x809A #CJK UNIFIED IDEOGRAPH
+0xE3EB 0x80AD #CJK UNIFIED IDEOGRAPH
+0xE3EC 0x5190 #CJK UNIFIED IDEOGRAPH
+0xE3ED 0x80AC #CJK UNIFIED IDEOGRAPH
+0xE3EE 0x80DB #CJK UNIFIED IDEOGRAPH
+0xE3EF 0x80E5 #CJK UNIFIED IDEOGRAPH
+0xE3F0 0x80D9 #CJK UNIFIED IDEOGRAPH
+0xE3F1 0x80DD #CJK UNIFIED IDEOGRAPH
+0xE3F2 0x80C4 #CJK UNIFIED IDEOGRAPH
+0xE3F3 0x80DA #CJK UNIFIED IDEOGRAPH
+0xE3F4 0x80D6 #CJK UNIFIED IDEOGRAPH
+0xE3F5 0x8109 #CJK UNIFIED IDEOGRAPH
+0xE3F6 0x80EF #CJK UNIFIED IDEOGRAPH
+0xE3F7 0x80F1 #CJK UNIFIED IDEOGRAPH
+0xE3F8 0x811B #CJK UNIFIED IDEOGRAPH
+0xE3F9 0x8129 #CJK UNIFIED IDEOGRAPH
+0xE3FA 0x8123 #CJK UNIFIED IDEOGRAPH
+0xE3FB 0x812F #CJK UNIFIED IDEOGRAPH
+0xE3FC 0x814B #CJK UNIFIED IDEOGRAPH
+0xE440 0x968B #CJK UNIFIED IDEOGRAPH
+0xE441 0x8146 #CJK UNIFIED IDEOGRAPH
+0xE442 0x813E #CJK UNIFIED IDEOGRAPH
+0xE443 0x8153 #CJK UNIFIED IDEOGRAPH
+0xE444 0x8151 #CJK UNIFIED IDEOGRAPH
+0xE445 0x80FC #CJK UNIFIED IDEOGRAPH
+0xE446 0x8171 #CJK UNIFIED IDEOGRAPH
+0xE447 0x816E #CJK UNIFIED IDEOGRAPH
+0xE448 0x8165 #CJK UNIFIED IDEOGRAPH
+0xE449 0x8166 #CJK UNIFIED IDEOGRAPH
+0xE44A 0x8174 #CJK UNIFIED IDEOGRAPH
+0xE44B 0x8183 #CJK UNIFIED IDEOGRAPH
+0xE44C 0x8188 #CJK UNIFIED IDEOGRAPH
+0xE44D 0x818A #CJK UNIFIED IDEOGRAPH
+0xE44E 0x8180 #CJK UNIFIED IDEOGRAPH
+0xE44F 0x8182 #CJK UNIFIED IDEOGRAPH
+0xE450 0x81A0 #CJK UNIFIED IDEOGRAPH
+0xE451 0x8195 #CJK UNIFIED IDEOGRAPH
+0xE452 0x81A4 #CJK UNIFIED IDEOGRAPH
+0xE453 0x81A3 #CJK UNIFIED IDEOGRAPH
+0xE454 0x815F #CJK UNIFIED IDEOGRAPH
+0xE455 0x8193 #CJK UNIFIED IDEOGRAPH
+0xE456 0x81A9 #CJK UNIFIED IDEOGRAPH
+0xE457 0x81B0 #CJK UNIFIED IDEOGRAPH
+0xE458 0x81B5 #CJK UNIFIED IDEOGRAPH
+0xE459 0x81BE #CJK UNIFIED IDEOGRAPH
+0xE45A 0x81B8 #CJK UNIFIED IDEOGRAPH
+0xE45B 0x81BD #CJK UNIFIED IDEOGRAPH
+0xE45C 0x81C0 #CJK UNIFIED IDEOGRAPH
+0xE45D 0x81C2 #CJK UNIFIED IDEOGRAPH
+0xE45E 0x81BA #CJK UNIFIED IDEOGRAPH
+0xE45F 0x81C9 #CJK UNIFIED IDEOGRAPH
+0xE460 0x81CD #CJK UNIFIED IDEOGRAPH
+0xE461 0x81D1 #CJK UNIFIED IDEOGRAPH
+0xE462 0x81D9 #CJK UNIFIED IDEOGRAPH
+0xE463 0x81D8 #CJK UNIFIED IDEOGRAPH
+0xE464 0x81C8 #CJK UNIFIED IDEOGRAPH
+0xE465 0x81DA #CJK UNIFIED IDEOGRAPH
+0xE466 0x81DF #CJK UNIFIED IDEOGRAPH
+0xE467 0x81E0 #CJK UNIFIED IDEOGRAPH
+0xE468 0x81E7 #CJK UNIFIED IDEOGRAPH
+0xE469 0x81FA #CJK UNIFIED IDEOGRAPH
+0xE46A 0x81FB #CJK UNIFIED IDEOGRAPH
+0xE46B 0x81FE #CJK UNIFIED IDEOGRAPH
+0xE46C 0x8201 #CJK UNIFIED IDEOGRAPH
+0xE46D 0x8202 #CJK UNIFIED IDEOGRAPH
+0xE46E 0x8205 #CJK UNIFIED IDEOGRAPH
+0xE46F 0x8207 #CJK UNIFIED IDEOGRAPH
+0xE470 0x820A #CJK UNIFIED IDEOGRAPH
+0xE471 0x820D #CJK UNIFIED IDEOGRAPH
+0xE472 0x8210 #CJK UNIFIED IDEOGRAPH
+0xE473 0x8216 #CJK UNIFIED IDEOGRAPH
+0xE474 0x8229 #CJK UNIFIED IDEOGRAPH
+0xE475 0x822B #CJK UNIFIED IDEOGRAPH
+0xE476 0x8238 #CJK UNIFIED IDEOGRAPH
+0xE477 0x8233 #CJK UNIFIED IDEOGRAPH
+0xE478 0x8240 #CJK UNIFIED IDEOGRAPH
+0xE479 0x8259 #CJK UNIFIED IDEOGRAPH
+0xE47A 0x8258 #CJK UNIFIED IDEOGRAPH
+0xE47B 0x825D #CJK UNIFIED IDEOGRAPH
+0xE47C 0x825A #CJK UNIFIED IDEOGRAPH
+0xE47D 0x825F #CJK UNIFIED IDEOGRAPH
More information about the Scummvm-git-logs
mailing list