--- /dev/null
+define sw
+x /20i 0x280000+$eip
+end
+define sw2
+x /40i 0x280000+$eip
+end
+define sw3
+x /200i 0x280000+$eip
+end
+define sd
+x /20i 0x280000+$eip-20
+end
+
+define bw
+x /20i $eip
+end
+define bw2
+x /40i $eip
+end
+define bw3
+x /200i $eip
+end
+define bd
+x /20i $eip-20
+end
+
+define re
+info reg
+end
+
+define bb
+break *(0x280000 + 0x0002DB8)
+c
+disable 1
+end
+
+define t
+target remote :1234
+end
+
+set disassembly-flavor intel
--- /dev/null
+
+*.bxrc
+*.tlog
+*.obj
+*.pdb
+*.idb
+*.sdf
+*.user
+*.log
+*.pch
+*.filters
+*.vsmdi
+*.OBJ
+*.opensdf
--- /dev/null
+TOOLPATH = ../z_tools/
+INCPATH = ../z_tools/haribote/
+
+MAKE = make.exe -r
+EDIMG = $(TOOLPATH)edimg.exe
+IMGTOL = $(TOOLPATH)imgtol.com
+MKISOFS = cdrtools-1.11a12-win32-bin/mkisofs
+COPY = cp
+DEL = rm
+
+# \83f\83t\83H\83\8b\83g\93®\8dì
+
+default :
+ cd haribote && $(MAKE)
+ $(MAKE) haribote.img
+
+# \83t\83@\83C\83\8b\90¶\90¬\8bK\91¥
+
+haribote.iso : Makefile
+ cd haribote && $(MAKE)
+ $(COPY) haribote/iplcd.bin cd/
+ $(MKISOFS) -hard-disk-boot -b iplcd.bin -o ./haribote.iso ./cd
+
+#haribote.img : Makefile
+# cd haribote && $(MAKE)
+# perl makefat.pl > fatrootdir
+# perl hdimage.pl -i=0,haribote/mbr.bin -i=0x3f,haribote/iplhd.bin -i=0x281,haribote/haribote.sys -i=0x27f,fatrootdir -s=0x372 -o $@
+
+haribote.img : Makefile fat.fatdef
+ cd haribote && $(MAKE)
+ ./fatmgr.exe
+
+
+
+haribote.img : haribote/mbr.bin haribote/iplhd.bin haribote/haribote.sys
+
+# \83R\83}\83\93\83h
+
+run :
+ $(MAKE)
+# $(COPY) haribote.img ..\z_tools\qemu\fdimage0.bin
+ $(MAKE) -C ../z_tools/qemu
+
+install :
+ $(MAKE) haribote.img
+ $(IMGTOL) w a: haribote.img
+
+full :
+ $(MAKE) clean
+ $(MAKE)
+
+run_full :
+ $(MAKE) full
+ $(COPY) haribote.img ..\z_tools\qemu\fdimage0.bin
+ $(MAKE) -C ../z_tools/qemu
+
+install_full :
+ $(MAKE) full
+ $(IMGTOL) w a: haribote.img
+
+run_os :
+ $(MAKE) -C haribote
+ $(MAKE) run
+
+clean :
+ cd haribote && $(MAKE) clean
+ -$(DEL) haribote.img
+# \89½\82à\82µ\82È\82¢
+
+src_only :
+ $(MAKE) clean
+ -$(DEL) haribote.img
+
+clean_full :
+ $(MAKE) -C haribote clean
+ $(MAKE) -C apilib clean
+
+src_only_full :
+ $(MAKE) -C haribote src_only
+ $(MAKE) -C apilib src_only
+ -$(DEL) haribote.img
+
+refresh :
+ $(MAKE) full
+ $(MAKE) clean_full
+ -$(DEL) haribote.img
--- /dev/null
+
+my $FileName = $ARGV[0];
+if($FileName eq ''){
+ $FileName = "binout";
+}
+
+while(1){
+ print ">";chomp(my $arg1 = <STDIN>);
+ if($arg1 eq 'q'){
+ last;
+ }
+
+ if($arg1 eq 'c'){
+ unlink($FileName);
+ print "Cleared\n";
+ next;
+ }
+ my $tmp = "tmpfile" . rand();
+ open(OUT, ">", $tmp) or die("$tmp open error");
+ binmode(OUT);
+ print OUT (&de(\$arg1));
+ close(OUT);
+
+ print `G:\\c\\os\\cd\\omake\\tolsrc\\aksa1a\\a.exe $tmp 0 0x7c00 0 30`;
+
+ unlink($tmp);
+}
+sub de{
+ my $data = shift;
+ my $outdata = '';
+
+ $data =~ s/0x[^ ]*://g;
+
+ my @l = grep {length($_)!=0 && $_ ne ' '} split(//, $$data);
+ for(my $i = 0; $i < scalar(@l); $i+=2){
+ $outdata .= (chr(hex($l[$i].$l[$i+1])));
+ }
+ return $outdata;
+}
--- /dev/null
+bootsector "haribote/iplhd.bin"
+o "haribote.img"
+r "haribote/mbr.bin"
+m "haribote/haribote.sys"
+f "curtain_m.bmp"
+f "ntdll.dll" "windows/system32/"
+f "ostestapp.exe"
+s 2
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+ <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
+ <security>
+ <requestedPrivileges>
+ <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
+ </requestedPrivileges>
+ </security>
+ </trustInfo>
+</assembly>
\ No newline at end of file
--- /dev/null
+<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
+<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
+ <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
+ <security>
+ <requestedPrivileges>
+ <requestedExecutionLevel level='asInvoker' uiAccess='false' />
+ </requestedPrivileges>
+ </security>
+ </trustInfo>
+</assembly>
--- /dev/null
+#v4.0:v100
+Debug|Win32|G:\c\os\winexe-harib\haribote\|
--- /dev/null
+========================================================================
+ コンソール アプリケーション: fatmgr プロジェクトの概要
+========================================================================
+
+この fatmgr アプリケーションは、AppWizard により作成されました。
+
+このファイルには、fatmgr
+アプリケーションを構成する各ファイルの内容の概要が含まれています。
+
+
+fatmgr.vcxproj
+ これは、アプリケーション ウィザードを使用して生成された VC++
+ プロジェクトのメイン プロジェクト ファイルです。
+ ファイルを生成した Visual C++ のバージョンに関する情報と、アプリケーション
+ ウィザードで選択されたプラットフォーム、
+ 構成、およびプロジェクト機能に関する情報が含まれています。
+
+fatmgr.vcxproj.filters
+ これは、アプリケーション ウィザードで生成された VC++ プロジェクトのフィルター
+ ファイルです。
+ このファイルには、プロジェクト内のファイルとフィルターとの間の関連付けに関する
+ 情報が含まれています。 この関連付けは、特定のノー
+ ドで同様の拡張子を持つファイルのグループ化を
+ 示すために IDE で使用されます (たとえば、".cpp" ファイルは "ソース ファイル"
+ フィルターに関連付けられています)。
+
+fatmgr.cpp
+ これは、メインのアプリケーション ソース ファイルです。
+
+/////////////////////////////////////////////////////////////////////////////
+その他の標準ファイル :
+
+StdAfx.h、StdAfx.cpp
+ これらのファイルは、fatmgr.pch
+ という名前のプリコンパイル済みヘッダー (PCH) ファイルと、StdAfx.obj
+ という名前のプリコンパイル済みの型ファイルを構築するために使用されます。
+
+/////////////////////////////////////////////////////////////////////////////
+その他のメモ :
+
+AppWizard では "TODO:"
+コメントを使用して、ユーザーが追加またはカスタマイズする必要のあるソース
+コードを示します。
+
+/////////////////////////////////////////////////////////////////////////////
--- /dev/null
+#include "stdafx.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <algorithm>
+#include <string>
+#include <vector>
+#include <deque>
+#include <list>
+#include <assert.h>
+#include <time.h>
+#include <math.h>
+#include <iostream>
+#include <fstream>
+#include <complex>
+#include <windows.h>
+//#include <udis86.h>
+#include <io.h>
+#include <fcntl.h>
+#include <boost/scoped_array.hpp>
+using namespace std;
+
+const int BOOTSECTOR_JUMPINST = 3;
+
+#pragma pack(push, 1)
+
+struct FAT32_BOOTSECTOR
+{
+ //BYTE BS_jmpBoot[3]; // Jump Instruction to boot code
+ char BS_OEMName[8]; // "MSWIN4.1" is recommended setting
+ WORD BPB_BytsPerSec; // Count of bytes per Sector
+ BYTE BPB_SecPerClus; // Number of Sectors per Allocation Unit which must be a power of 2
+ WORD BPB_RsvdSecCnt; // Number of Reserved Sectors in the Reserved Region of the volume starting at the first sector of the volume
+ BYTE BPB_NumFATs; // Count of FAT data structures on the volume
+ WORD BPB_RootEntCnt; // Count of 32byte directory entries in the root directory for FAT12 and FAT16 volumes
+ WORD BPB_TotSec16; // Old 16-bit total count of sectors on the volume
+ BYTE BPB_Media; // 0xF8 for fixed media, 0xF0 for removable media
+ WORD BPB_FATSz16; //@ FAT12/FAT16 16bit-count of sectors occupied by ONE FAT
+
+ WORD BPB_SecPerTrk; // Sectors per Track for interrupt 0x13 (um... it is Wintel culture... x_x;)
+ WORD BPB_NumHeads; // Number of Heads for interrupt 0x13 (um... it is Wintel culture... x_x;)
+ DWORD BPB_HiddSec; // Count of Hidden Sectors preceding the partition that contains this FAT volume
+ DWORD BPB_TotSec32; // New 32-bit total count of sectors on the volume
+ // Following structure is prepared for FAT12 and FAT16 (not for FAT32)
+ DWORD BPB_FATSz32; //@ FAT32 32bit-count of sectors occupied by ONE FAT\81©\82±\82±\82ð\92Ç\89Á
+ WORD BPB_ExtFlags;
+ WORD BPB_FSVer;
+ DWORD BPB_RootClus;
+ WORD BPB_FSInfo;
+ WORD BPB_BkBootSec;
+ BYTE BPB_Reserved[12];
+ BYTE BS_DrvNum; // Int0x13 drive number (um... it is Wintel culture... x_x;)
+ BYTE BS_Reserved1; // Reserved for WindowsNT (um... it is MS culture... x_x;)
+ BYTE BS_BootSig; // Extended Boot Signature (0x29) which indicates following three fields in the boot sector are present
+ DWORD BS_VolID; // Volume Serial Number
+ BYTE BS_VolLab[11]; // Volume Label
+ BYTE BS_FilSysType[8]; // Type of File System (it is no more than a hint)
+} ;
+
+struct DIRENT{
+ char DIR_Name[11];
+ BYTE DIR_Attr;
+ BYTE DIR_NTRes;
+ BYTE DIR_CrtTimeTenth;
+ WORD DIR_CrtTime;
+ WORD DIR_CrtDate;
+ WORD DIR_LstAccDate;
+ WORD DIR_FstClusHI;
+ WORD DIR_WrtTime;
+ WORD DIR_WrtDate;
+ WORD DIR_FstClusLO;
+ DWORD DIR_FileSize;
+
+ DWORD getfirstclus(){
+ return DIR_FstClusHI << 16 | DIR_FstClusLO;
+ }
+ void setfirstclus(DWORD clus){
+ DIR_FstClusHI = (clus & 0xffff0000) >> 16;
+ DIR_FstClusLO = clus & 0x0000ffff;
+ }
+};
+
+enum FAT_ATTR{
+ ATTR_READ_ONLY = 0x01,
+ ATTR_HIDDEN = 0x02,
+ ATTR_SYSTEM = 0x04,
+ ATTR_VOLUME_ID = 0x08,
+ ATTR_DIRECTORY = 0x10,
+ ATTR_ARCHIVE = 0x20,
+ ATTR_LONG_NAME = ATTR_READ_ONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID
+};
+
+struct PAT_TABLE{
+ BYTE flag;
+ BYTE begin_chs[3];
+ BYTE type;
+ BYTE end_chs[3];
+ DWORD begin_lba;
+ DWORD size_lba;
+};
+
+struct FSINFO{
+ DWORD LeadSig;
+ BYTE Reserved1[480];
+ DWORD StrucSig;
+ DWORD Free_Count;
+ DWORD Nxt_Free;
+ BYTE Reserved2[12];
+ DWORD TrailSig;
+};
+
+#pragma pack(pop)
+
+bool islegalch(char c){
+ return isalnum(c) || c > 127
+ || c == '$' || c == '\'' || c == '%'
+ || c == '-' || c == '_' || c == '@'
+ || c == '~' || c == '`' || c == '!'
+ || c == '(' || c == ')' || c == '{'
+ || c == '}' || c == '^' || c == '#'
+ || c == '&';
+}
+
+bool toshort(char *s, string l){
+ memset(s, 0x20, 11);
+ int r = l.find('.');
+ if(r == -1){
+ int np = 0;
+ for(size_t i = 0; i < l.length(); i++){
+ if(islegalch(l[i])){
+ s[np++] = toupper(l[i]);
+ if(np >= 8){
+ break;
+ }
+ }
+ }
+ if(np == 0){
+ return false;
+ }
+ return true;
+ }
+ string name = l.substr(0, r);
+ string ext = l.substr(r + 1);
+ int np = 0;
+ for(size_t i = 0; i < name.length(); i++){
+ if(islegalch(name[i])){
+ s[np++] = toupper(name[i]);
+ if(np >= 8){
+ break;
+ }
+ }
+ }
+ if(np == 0){
+ return false;
+ }
+ int ep = 8;
+ for(size_t i = 0; i < ext.length(); i++){
+ if(islegalch(ext[i])){
+ s[ep++] = toupper(ext[i]);
+ if(ep >= 11){
+ break;
+ }
+ }
+ }
+ return true;
+}
+
+const char *DEFAULT_DEF_FILE = "fat.fatdef";
+const DWORD sectorsize = 512;
+const DWORD sectorperclus = 2;
+const DWORD clussize = sectorperclus * sectorsize;
+const DWORD EOC = 0x0FFFFFF8;
+const DWORD fatreserved = 0x80;
+const DWORD fatnum = 2;
+
+string getelem(const string& text, int *pos){
+ string ret = "";
+ for(; (text[*pos] == ' ' || text[*pos] == '\t'); (*pos)++);
+ if(*pos == text.length()){
+ return "";
+ }
+ if(isalnum(text[*pos])){
+ for(; isalnum(text[*pos]); (*pos)++){
+ ret += text[*pos];
+ }
+ return ret;
+ }else if(text[*pos] == ':'){
+ (*pos)++;
+ return ":";
+ }else if(text[*pos] == '"'){
+ (*pos)++;
+ int n = text.find('"', *pos);
+ if(n == -1){
+ ret = text.substr(*pos);
+ *pos = text.length();
+ return ret;
+ }
+ ret = text.substr(*pos, n - *pos);
+ *pos = n + 1;
+ return ret;
+ }else{
+ char buf[2] = {0};
+ buf[0] = text[(*pos)++];
+ return buf;
+ }
+}
+
+bool getfilesize(string f, DWORD *s){
+ HANDLE hFile = CreateFile(f.c_str(), GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
+ if( hFile != INVALID_HANDLE_VALUE ){
+ DWORD size = GetFileSize( hFile, NULL );
+ if( size == -1 )
+ {
+ if( GetLastError() == NO_ERROR )
+ {
+ // GetFileSize()\82Í\8e¸\94s\82µ\82½\82Ì\82Å\82Í\82È\82¢
+ CloseHandle( hFile );
+ *s = size;
+ return true;
+ }
+ else
+ {
+ // \96{\93\96\82ÉGetFileSize()\82ª\8e¸\94s\82µ\82½
+ CloseHandle( hFile );
+ return false;
+ }
+ }
+ CloseHandle( hFile );
+ *s = size;
+ return true;
+ }
+ return false;
+}
+
+class DirEntWrap{
+public:
+ DIRENT ent;
+ DirEntWrap(){
+ memset(&ent, 0, sizeof(ent));
+ }
+ string filename;
+ vector<DirEntWrap> subdir;
+};
+
+void PutDir(DWORD *const fat, DWORD *const entptr, std::vector<DirEntWrap> &dirent
+ , const FAT32_BOOTSECTOR &bootsect, DWORD FirstDataSector, fstream &of){
+ DWORD direntclus = *entptr;
+
+ //\83f\83B\83\8c\83N\83g\83\8a\83G\83\93\83g\83\8a\82ð\8ai\94[\82·\82é\82Ì\82É\95K\97v\82È\83N\83\89\83X\83^\90\94\82ð\8cv\8eZ
+ DWORD dirclus = (dirent.size() * sizeof(DIRENT) + clussize - 1) / clussize;
+ for(DWORD i = 0; i < dirclus - 1; i++){
+ fat[*entptr + i] = *entptr + i + 1;
+ }
+ fat[*entptr + dirclus - 1] = EOC;
+ *entptr += dirclus;
+
+
+ for(size_t i = 0; i < dirent.size(); i++){
+ DWORD clus;
+ if(dirent[i].ent.DIR_Attr & ATTR_DIRECTORY){
+ dirent[i].ent.setfirstclus(*entptr);
+ PutDir(fat, entptr, dirent[i].subdir, bootsect, FirstDataSector, of);
+ }else{
+ clus = (dirent[i].ent.DIR_FileSize + clussize - 1) / clussize;
+
+ for(DWORD j = 0; j < clus - 1; j++){
+ fat[j + *entptr] = j + *entptr + 1;
+ }
+ fat[clus + *entptr - 1] = EOC;
+ *entptr += clus;
+
+ dirent[i].ent.setfirstclus(*entptr - clus);
+
+ string filename = dirent[i].filename;
+
+ fstream entfile(filename.c_str(), ios::binary | ios::in);
+ if(entfile.is_open()){
+ boost::scoped_array<char> b(new char [dirent[i].ent.DIR_FileSize]);
+ entfile.read(b.get(), dirent[i].ent.DIR_FileSize);
+ entfile.close();
+
+ of.seekg(bootsect.BPB_BytsPerSec * (FirstDataSector + (*entptr - clus - 2) * bootsect.BPB_SecPerClus));
+ of.write(b.get(), dirent[i].ent.DIR_FileSize);
+ }else{
+ printf("could not open %s\n", filename.c_str());
+ throw std::exception("file not found");
+ }
+ }
+ }
+ //fat\82Ì\83\8b\81[\83g\83f\83B\83\8c\83N\83g\83\8a\82Ö\88Ú\93®
+ of.seekg(bootsect.BPB_BytsPerSec * (FirstDataSector + (direntclus - 2) * bootsect.BPB_SecPerClus), ios::beg);
+ //of.write((char *)&dirent[0], dirent.size() * sizeof(DIRENT));
+ for(size_t i = 0; i < dirent.size(); i++){
+ of.write((char *)&dirent[i].ent, sizeof(DIRENT));
+ }
+}
+
+string getdir(string &dir){
+ size_t p = dir.find('/', 0);
+ string ret = dir.substr(0, p);
+ dir.erase(0, p + 1);
+ return ret;
+}
+
+int main(int argc, char *argv[]){
+ const char *def = DEFAULT_DEF_FILE;
+ if(argc < 2){
+ printf("use default file : %s\n", def);
+ }else{
+ def = argv[1];
+ }
+
+ ifstream f(def);
+
+ string bootsector, outfile, bootmgr, mbr;
+ DWORD dataclus = 0;
+ std::vector<std::pair<string, string> > files;
+ DWORD mintotalclus = 0;
+ std::vector<DirEntWrap> dirent;
+ std::vector<std::vector<DirEntWrap> *> dirent_list;
+ dirent_list.push_back(&dirent);
+
+ string buf, line = "";
+ int c = 0;
+ while(getline(f, buf)){
+ c++;
+ line = buf;
+ int pos = 0;
+ string cmd = getelem(line, &pos);
+ if(cmd == "b" || cmd == "bootsector"){
+ bootsector = getelem(line, &pos);
+ printf("bootsector: %s\n", bootsector.c_str());
+ }else if(cmd == "r" || cmd == "mbr"){
+ mbr = getelem(line, &pos);
+ printf("mbr: %s\n", mbr.c_str());
+ }else if(cmd == "o" || cmd == "outfile"){
+ outfile = getelem(line, &pos);
+ printf("outfile: %s\n", outfile.c_str());
+ }else if(cmd == "s" || cmd == "size"){
+ string size = getelem(line, &pos);
+ DWORD size_i = atoi(size.c_str());
+ printf("size: %d mb\n", size_i);
+ dataclus = size_i * 1024 * 1024 / clussize;
+ }else if(cmd == "m" || cmd == "bootmgr"){
+ bootmgr = getelem(line, &pos);
+ printf("bootmgr: %s\n", bootmgr.c_str());
+ DWORD size;
+ if(!getfilesize(bootmgr, &size)){
+ printf("could not open %s\n", bootmgr.c_str());
+ return -1;
+ }
+ mintotalclus += (size + clussize - 1) / clussize;
+ }else if(cmd == "f" || cmd == "file"){
+ string file, dir;
+ file = getelem(line, &pos);
+ dir = getelem(line, &pos);
+
+ printf("file: %s\n", file.c_str());
+ files.push_back(make_pair(file, dir));
+ }else{
+ printf("error unkown command %s line %d\n", cmd.c_str(), c);
+ return -1;
+ }
+ }
+ f.close();
+
+ if(bootmgr != ""){
+ files.insert(files.begin(), make_pair(bootmgr, ""));
+ }
+ for(size_t i = 0; i < files.size(); i++){
+ std::vector<DirEntWrap> *curdirent = &dirent;
+ if(files[i].second == ""){
+ }else{
+ string dir = files[i].second;
+ size_t p = 0;
+ while(1){
+ p = dir.find('\\', p);
+ if(p == -1){
+ break;
+ }
+ dir.replace(p, 1, 1, '/');
+ }
+ char last = dir[dir.size() - 1];
+ if(last != '/'){
+ dir.push_back('/');
+ }
+
+ while(dir != ""){
+ string name = getdir(dir);
+ DirEntWrap w;
+ w.ent.DIR_Attr = ATTR_DIRECTORY;
+ w.filename = name;
+ toshort(w.ent.DIR_Name, name);
+ bool found = false;
+ for(size_t j = 0; j < curdirent->size(); j++){
+ if(memcmp(curdirent->operator[](j).ent.DIR_Name
+ , w.ent.DIR_Name, sizeof(w.ent.DIR_Name)) == 0){
+ found = true;
+ curdirent = &((*curdirent)[j].subdir);
+ break;
+ }
+ }
+ if(found){
+ }else{
+ curdirent->push_back(w);
+ curdirent = &((*curdirent)[curdirent->size() - 1].subdir);
+ dirent_list.push_back(curdirent);
+ }
+ }
+ }
+ DirEntWrap w;
+ w.ent.DIR_Attr = 0;
+ if(!toshort(w.ent.DIR_Name, files[i].first)){
+ printf("toshort failed %s\n", files[i].first.c_str());
+ return -1;
+ }
+
+ DWORD size;
+ if(!getfilesize(files[i].first, &size)){
+ printf("could not open %s\n", files[i].first.c_str());
+ return -1;
+ }
+ mintotalclus += (size + clussize - 1) / clussize;
+ w.ent.DIR_FileSize = size;
+ w.filename = files[i].first;
+ curdirent->push_back(w);
+ }
+
+ //\83f\83B\83\8c\83N\83g\83\8a\83G\83\93\83g\83\8a\82É\95K\97v\82È\83N\83\89\83X\83^\90\94
+ for(size_t i = 0; i < dirent_list.size(); i++){
+ mintotalclus += (dirent_list[i]->size() * sizeof(DIRENT) + clussize - 1) / clussize;
+ }
+ dataclus = max(dataclus, mintotalclus);
+
+
+ printf("mintotalclus = 0x%X\n", mintotalclus);
+ printf("dataclus = 0x%X\n", dataclus);
+
+ //fat \83N\83\89\83X\83^\83e\81[\83u\83\8b\82É\95K\97v\82È\83Z\83N\83^\90\94
+ DWORD fatsectors = (dataclus * 4 + sectorsize - 1) / sectorsize;
+
+ fstream of;
+
+ if(mbr != ""){
+ if(!CopyFile(mbr.c_str(), outfile.c_str(), FALSE)){
+ printf("could not copy '%s' to '%s'\n", mbr.c_str(), outfile.c_str());
+ return -1;
+ }
+ }
+ of.open(outfile.c_str(), ios::out | ios::binary | ios::in);
+ if(!of.is_open()){
+ printf("could not open %s\n", outfile.c_str());
+ return -1;
+ }
+
+ //-------------------\83p\81[\83e\83B\83V\83\87\83\93\83e\81[\83u\83\8b\82Ì\8f\91\82«\8d\9e\82Ý----------------
+ PAT_TABLE pat0;
+ pat0.flag = 0x80;
+ pat0.begin_chs[0] = 1;
+ pat0.begin_chs[1] = 1;
+ pat0.begin_chs[2] = 0;
+ pat0.type = 0x0B;
+ pat0.end_chs[0] = 0xfe;
+ pat0.end_chs[1] = 0xff;
+ pat0.end_chs[2] = 0xff;
+ pat0.begin_lba = 0x80;
+ pat0.size_lba = dataclus * sectorperclus + fatreserved + fatnum * fatsectors;
+
+ of.seekg(0x200 - 2 - sizeof(PAT_TABLE) * 4, ios::beg);
+ of.write((char *)&pat0, sizeof(PAT_TABLE));
+
+
+ //--------------------\83u\81[\83g\83Z\83N\83^\82Ì\8f\91\82«\8d\9e\82Ý----------------------------
+ ifstream fbootsect(bootsector.c_str(), ios::in | ios::binary);
+ if(!fbootsect.is_open()){
+ printf("could not open %s\n", bootsector.c_str());
+ return -1;
+ }
+ fbootsect.seekg(0, ios::end);
+ DWORD bootsectorsize = fbootsect.tellg();
+ fbootsect.seekg(0, ios::beg);
+
+ boost::scoped_array<char> bootsectbuf(new char [bootsectorsize]);
+ fbootsect.read(bootsectbuf.get(), bootsectorsize);
+ fbootsect.close();
+
+ of.seekg(pat0.begin_lba * sectorsize, ios::beg);
+ of.write(bootsectbuf.get(), bootsectorsize);
+
+ bootsectbuf.reset();
+
+
+ FAT32_BOOTSECTOR bootsect = {0};
+ memcpy(bootsect.BS_OEMName, "MSWIN4.1", 8);
+ bootsect.BPB_BytsPerSec = sectorsize;
+ bootsect.BPB_SecPerClus = sectorperclus;
+ bootsect.BPB_RsvdSecCnt = fatreserved;
+ bootsect.BPB_NumFATs = fatnum;
+ bootsect.BPB_RootEntCnt = 0;
+ bootsect.BPB_TotSec16 = 0;
+ bootsect.BPB_Media = 0xf8;
+ bootsect.BPB_FATSz16 = 0;
+ bootsect.BPB_SecPerTrk = 0x003f;
+ bootsect.BPB_NumHeads = 0x00ff;
+ bootsect.BPB_HiddSec = pat0.begin_lba;
+ bootsect.BPB_TotSec32 = pat0.size_lba;
+ bootsect.BPB_FATSz32 = fatsectors;
+ bootsect.BPB_ExtFlags = 0;
+ bootsect.BPB_FSVer = 0;
+ bootsect.BPB_RootClus = 0x02;
+ bootsect.BPB_FSInfo = 0x01;
+ bootsect.BPB_BkBootSec = 0x06;
+ //bootsect.BPB_Reserved;
+ bootsect.BS_DrvNum = 0x80;
+ bootsect.BS_Reserved1 = 0;
+ bootsect.BS_BootSig = 0x29;
+ bootsect.BS_VolID = 0xdeadbeef;
+ memcpy(bootsect.BS_VolLab, "NO NAME ", 11);
+ memcpy(bootsect.BS_FilSysType, "FAT32 ", 8);
+
+ of.seekg(bootsect.BPB_HiddSec * bootsect.BPB_BytsPerSec + BOOTSECTOR_JUMPINST, ios::beg);
+ of.write((char *)&bootsect, sizeof(FAT32_BOOTSECTOR));
+
+ //------------------------------FSInfo\8f\91\82«\8d\9e\82Ý------------------------------
+ FSINFO fsi = {0};
+ fsi.LeadSig = 0x41615252;
+ fsi.StrucSig = 0x61417272;
+ fsi.Free_Count = 0xffffffff;
+ fsi.Nxt_Free = 0xffffffff;
+ fsi.TrailSig = 0xAA550000;
+
+ of.seekg((bootsect.BPB_HiddSec + bootsect.BPB_FSInfo) * bootsect.BPB_BytsPerSec, ios::beg);
+ of.write((char *)&fsi, sizeof(FSINFO));
+
+ //DWORD DataSectors =
+ DWORD FirstDataSector = bootsect.BPB_HiddSec + bootsect.BPB_RsvdSecCnt + bootsect.BPB_NumFATs * bootsect.BPB_FATSz32;
+ printf("FirstDataSector = 0x%X\n", FirstDataSector);
+ printf("FirstDataSector * 512 = %p\n", FirstDataSector * bootsect.BPB_BytsPerSec);
+
+ //bootmgr\82Ì\90Ý\92è
+ //DWORD bootmgrsize = 0;
+ //if(bootmgr != ""){
+ // ifstream bootmgrfile(bootmgr.c_str(), ios::out | ios::binary | ios::in);
+ // if(bootmgrfile.is_open()){
+ // bootmgrfile.seekg(0, ios::end);
+ // bootmgrsize = static_cast<DWORD>(bootmgrfile.tellg());
+ // bootmgrfile.seekg(0, ios::beg);
+
+ // boost::scoped_array<char> b(new char [bootmgrsize]);
+ // bootmgrfile.read(b.get(), bootmgrsize);
+ // bootmgrfile.close();
+ // //FirstSectorofCluster = ((N - 2) * BPB_SecPerClus) + FirstDataSector;
+ // //FirstDataSector = BPB_ResvdSecCnt + (BPB_NumFATs * FATSz) + RootDirSectors;
+
+ // //fat\82Ì\83\8b\81[\83g\83f\83B\83\8c\83N\83g\83\8a\82Ö\88Ú\93®
+ // //of.seekg(bootsect.BPB_BytsPerSec * FirstDataSector);
+ // //of.write(b.get(), bootmgrsize);
+ // }else{
+ // printf("could not open %s\n", bootmgr.c_str());
+ // return -1;
+ // }
+ //}
+
+ //fat\83G\83\93\83g\83\8a\82Ì\90Ý\92è
+ boost::scoped_array<DWORD> fat(new DWORD [bootsect.BPB_FATSz32 * bootsect.BPB_BytsPerSec / 4]);
+ memset(fat.get(), 0, bootsect.BPB_FATSz32 * bootsect.BPB_BytsPerSec);
+ fat[0] = bootsect.BPB_Media | 0x0fffff00;
+ fat[1] = 0x03ffffff;
+
+
+
+
+ //if(bootmgr != ""){
+ // DWORD bootmgrsize;
+ // if(!getfilesize(bootmgr, &bootmgrsize)){
+ // printf("could not get file size: %s\n", bootmgr.c_str());
+ // return -1;
+ // }
+
+ // DIRENT mgrent = {0};
+ // mgrent.DIR_Attr = ATTR_READ_ONLY | ATTR_SYSTEM;
+ // mgrent.DIR_FileSize = bootmgrsize;
+ // memcpy(mgrent.DIR_Name, "BOOTMGR ", 11);
+
+ // dirent.insert(dirent.begin(), mgrent);
+ //}
+
+ DWORD entptr = 2;
+
+ PutDir(fat.get(), &entptr, dirent, bootsect, FirstDataSector, of);
+
+
+ for(int i = 0; i < bootsect.BPB_NumFATs; i++){
+ of.seekg(bootsect.BPB_BytsPerSec *
+ (bootsect.BPB_HiddSec + bootsect.BPB_RsvdSecCnt + i * bootsect.BPB_FATSz32));
+ of.write((char *)fat.get(), bootsect.BPB_FATSz32 * bootsect.BPB_BytsPerSec);
+ }
+
+
+ of.seekg(0, ios::end);
+ DWORD lastsize = of.tellg();
+ DWORD lastsector = (lastsize + sectorsize - 1) / sectorsize;
+ //\8dÅ\8cã\82É\82 \82é\83t\83@\83C\83\8b\82ª\8aï\90\94\83Z\83N\83^\8eg\82Á\82Ä\82¢\82é\8fê\8d\871\82¸\82ê\82é\82Ì\82Å\83`\83F\83b\83N\82Í\82µ\82È\82¢
+ //assert(lastsector == (mintotalclus * sectorperclus + bootsect.BPB_HiddSec + bootsect.BPB_RsvdSecCnt + bootsect.BPB_NumFATs * bootsect.BPB_FATSz32));
+ DWORD allsector = dataclus * sectorperclus + bootsect.BPB_HiddSec + bootsect.BPB_RsvdSecCnt + bootsect.BPB_NumFATs * bootsect.BPB_FATSz32;
+
+
+ //\83t\83@\83C\83\8b\83T\83C\83Y\82ð\83Z\83N\83^\83T\83C\83Y\8b«\8aE\82É\82 \82í\82¹\82é
+ of.seekg(0, ios::end);
+ if(static_cast<DWORD>(of.tellg()) == allsector * sectorsize){
+ //\8aù\82É\91µ\82Á\82Ä\82¢\82é
+ }else{
+ of.seekg(allsector * sectorsize - 1, ios::beg);
+ char dummy = 0;
+ of.write(&dummy, 1);
+ }
+
+ of.close();
+}
+
+
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{84F34813-8B38-4C65-9B9D-CA81FCD18521}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>fatmgr</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>NotSet</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>NotSet</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <PostBuildEvent>
+ <Command>copy "$(TargetPath)" "G:\c\os\harib27f"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <PostBuildEvent>
+ <Command>copy "$(TargetPath)" "G:\c\os\harib27f"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <None Include="ReadMe.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="stdafx.h" />
+ <ClInclude Include="targetver.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="fatmgr.cpp" />
+ <ClCompile Include="stdafx.cpp">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+ </ClCompile>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file
--- /dev/null
+// stdafx.cpp : \95W\8f\80\83C\83\93\83N\83\8b\81[\83h fatmgr.pch \82Ì\82Ý\82ð
+// \8aÜ\82Þ\83\\81[\83X \83t\83@\83C\83\8b\82Í\81A\83v\83\8a\83R\83\93\83p\83C\83\8b\8dÏ\82Ý\83w\83b\83_\81[\82É\82È\82è\82Ü\82·\81B
+// stdafx.obj \82É\82Í\83v\83\8a\83R\83\93\83p\83C\83\8b\8dÏ\82Ý\8c^\8fî\95ñ\82ª\8aÜ\82Ü\82ê\82Ü\82·\81B
+
+#include "stdafx.h"
+
+// TODO: \82±\82Ì\83t\83@\83C\83\8b\82Å\82Í\82È\82\81ASTDAFX.H \82Å\95K\97v\82È
+// \92Ç\89Á\83w\83b\83_\81[\82ð\8eQ\8fÆ\82µ\82Ä\82\82¾\82³\82¢\81B
--- /dev/null
+// stdafx.h : \95W\8f\80\82Ì\83V\83X\83e\83\80 \83C\83\93\83N\83\8b\81[\83h \83t\83@\83C\83\8b\82Ì\83C\83\93\83N\83\8b\81[\83h \83t\83@\83C\83\8b\81A\82Ü\82½\82Í
+// \8eQ\8fÆ\89ñ\90\94\82ª\91½\82\81A\82©\82Â\82 \82Ü\82è\95Ï\8dX\82³\82ê\82È\82¢\81A\83v\83\8d\83W\83F\83N\83g\90ê\97p\82Ì\83C\83\93\83N\83\8b\81[\83h \83t\83@\83C\83\8b
+// \82ð\8bL\8fq\82µ\82Ü\82·\81B
+//
+
+#pragma once
+
+#include "targetver.h"
+
+#include <stdio.h>
+#include <tchar.h>
+
+
+
+// TODO: \83v\83\8d\83O\83\89\83\80\82É\95K\97v\82È\92Ç\89Á\83w\83b\83_\81[\82ð\82±\82±\82Å\8eQ\8fÆ\82µ\82Ä\82\82¾\82³\82¢\81B
--- /dev/null
+#pragma once
+
+// SDKDDKVer.h \82ð\83C\83\93\83N\83\8b\81[\83h\82·\82é\82Æ\81A\97\98\97p\82Å\82«\82é\8dÅ\82à\8fã\88Ê\82Ì Windows \83v\83\89\83b\83g\83t\83H\81[\83\80\82ª\92è\8b`\82³\82ê\82Ü\82·\81B
+
+// \88È\91O\82Ì Windows \83v\83\89\83b\83g\83t\83H\81[\83\80\97p\82É\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\83r\83\8b\83h\82·\82é\8fê\8d\87\82Í\81AWinSDKVer.h \82ð\83C\83\93\83N\83\8b\81[\83h\82µ\81A
+// SDKDDKVer.h \82ð\83C\83\93\83N\83\8b\81[\83h\82·\82é\91O\82É\81A\83T\83|\81[\83g\91Î\8fÛ\82Æ\82·\82é\83v\83\89\83b\83g\83t\83H\81[\83\80\82ð\8e¦\82·\82æ\82¤\82É _WIN32_WINNT \83}\83N\83\8d\82ð\90Ý\92è\82µ\82Ü\82·\81B
+
+#include <SDKDDKVer.h>
--- /dev/null
+TARGET = golibc
+STACKSIZE =
+MALLOCSIZE =
+MMAREA =
+OBJS = abs.obj atof.obj atoi.obj errno.obj frexp.obj ldexp.obj \
+ memchr.obj memcmp.obj memmove.obj memset.obj memcpy.obj qsort.obj rand.obj \
+ sprintf.obj strcat.obj strcmp.obj strcpy.obj strcspn.obj strdup.obj \
+ strlen.obj strncat.obj strncmp.obj strncpy.obj strpbrk.obj strrchr.obj \
+ strspn.obj strstr.obj strtol.obj strtoul.obj strtoul0.obj vsprintf.obj charset.obj
+
+# \88È\8fã5\82Â\82Í\83\\81[\83X\82²\82Æ\82É\8f\91\82«\8a·\82¦\82é
+# OBJS\82ð\8f\91\82«\8a·\82¦\82é\82Æ\95ª\8a\84\83R\83\93\83p\83C\83\8b\91Î\89\9e
+
+TOOLPATH =
+INCPATH = .
+RULEFILE =
+MAKE = $(TOOLPATH)make -r
+SJISCONV = $(TOOLPATH)sjisconv -s
+CC1 = $(TOOLPATH)cc1 -I$(INCPATH) -Os -quiet -W -Wall -Werror
+GAS2NASK = $(TOOLPATH)gas2nask -a
+NASK = $(TOOLPATH)nask
+OBJ2BIM = $(TOOLPATH)obj2bim3
+BIM2BIN = $(TOOLPATH)bim2bin3
+CPP0 = $(TOOLPATH)cpp0 -P -I$(INCPATH)
+ASKA = $(TOOLPATH)aska
+NASKCNV = $(TOOLPATH)naskcnv0 -l -s -w
+GOLIB = $(TOOLPATH)golib00w
+DELE = rm
+LIB = ar rv
+CC = g++ -c -I../include
+
+# \88È\8fã\82Ì\8d\80\96Ú\82Í\82 \82È\82½\82Ì\83f\83B\83\8c\83N\83g\83\8a\8d\\90¬\82É\82 \82í\82¹\82Ä\8f\91\82«\8a·\82¦\82é
+
+ALL :
+ $(MAKE) $(TARGET).lib
+
+%.ca : %.c Makefile
+ $(SJISCONV) $*.c $*.ca
+
+%.gas : %.ca Makefile
+ $(CC1) -o $*.gas $*.ca
+
+%.nas : %.gas Makefile
+ $(GAS2NASK) $*.gas $*.nas
+
+%.obj : %.c Makefile
+ $(CC) $*.c -o $*.obj
+
+%.obj : %.cpp Makefile
+ $(CC) $*.cpp -o $*.obj
+
+%.ias : %.ask Makefile
+ $(CPP0) -o $*.ias $*.ask
+
+%.3as : %.ias Makefile
+ $(ASKA) $*.ias $*.3as
+
+%.nas : %.3as Makefile
+ $(NASKCNV) $*.3as $*.nas
+
+%.lst : %.nas Makefile
+ $(NASK) $*.nas $*.obj $*.lst
+
+$(TARGET).lib : $(OBJS) Makefile
+ $(LIB) $(TARGET).lib $(OBJS)
+
+%.bin : %.bim Makefile
+ $(BIM2BIN) in:$*.bim out:$*.org malloc:$(MALLOCSIZE) mmarea:$(MMAREA)
+ $(BIM2BIN) in:$*.org out:$*.bin -osacmp -tek0
+
+
+clean :
+ -$(DELE) *.obj
+ -$(DELE) $(TARGET).bim
+ -$(DELE) $(TARGET).map
+ -$(DELE) $(TARGET).org
+ -$(DELE) $(TARGET).lib
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+extern "C" int abs(int n)
+{
+ if (n < 0)
+ n = - n;
+ return n;
+}
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#include <stdlib.h> /* strtod */
+#include <stdio.h> /* NULL */
+
+extern "C" double atof(const char *s)
+{
+ return strtod(s, (const char **) NULL);
+}
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#include <stdlib.h> /* strtol */
+#include <stdio.h> /* NULL */
+
+extern "C" int atoi(const char *s)
+{
+ return (int) strtol(s, (const char **) NULL, 10);
+}
--- /dev/null
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include "CP932.h2"
+
+//--------------------stdlib.h------------------
+
+int cp932towcs(const char *p1, int n, wchar_t *unicode){
+ int left = 0;
+ int right = sizeof(cp932_unicode) / sizeof(cp932_unicode[0]);
+ int cp932 = 0;
+ int ret = 0;
+ unsigned char *p = (unsigned char *)p1;
+ unsigned char c = *p;
+ //fprintf(stderr, "c:%02X\n", *p);
+ if(c < 0x7f){
+ *unicode = c;
+ return 1;
+ }else if (c >= 0xa1 && c <= 0xdf){
+ cp932 = c;
+ ret = 1;
+ }else{
+ if(n < 2){
+ return 0;
+ }
+ cp932 = p[1] | (p[0] << 8);
+ //fprintf(stderr, "p:%p\n", cp932);
+ ret = 2;
+ }
+ *unicode = 0;
+ while(1){
+ if(right <= left){
+ break;
+ }
+ int mid = (right + left) / 2;
+ //printf("r:%04X(%04X) l:%04X(%04X) m:%04X(%04X)\n", right, cp932_unicode[right].cp932, left, cp932_unicode[left].cp932, mid, cp932_unicode[mid].cp932);
+ if(cp932_unicode[mid].cp932 < cp932){
+ left = mid + 1;
+ }else if(cp932_unicode[mid].cp932 > cp932){
+ right = mid;
+ }else{
+ *unicode = cp932_unicode[mid].unicode;
+ break;
+ }
+ }
+ if(*unicode == 0){
+ return 0;
+ }
+ return ret;
+}
+
+size_t mbstowcs(wchar_t *dest, const char *src, size_t n){
+ if(dest != NULL){
+ size_t p = 0;
+ for(;;){
+ int r = cp932towcs(src, 10, dest + p);
+ if(r == 0){
+ return (size_t)-1;
+ }
+ if(dest[p] == 0){
+ return p;
+ }
+ if(p >= n - 1){
+ return n;
+ }
+ p++;
+
+ src += r;
+ }
+ }else{
+ size_t p = 0;
+ for(;;){
+ wchar_t u;
+ int r = cp932towcs(src, 10, &u);
+ if(r == 0){
+ return (size_t)-1;
+ }
+ if(u == 0){
+ return p;
+ }
+ p++;
+
+ src += r;
+ }
+ }
+}
+
+//----------------------string.h--------------------------
+
+
+int wcslen(const wchar_t *p){
+ int len = 0;
+ while(p[len++]);
+ return len - 1;
+}
+
+wchar_t *wcsncpy(wchar_t *dest, const wchar_t *src, int n){
+ for(int i = 0; i < n; i++){
+ if(!(dest[i] = src[i])){
+ break;
+ }
+ }
+ return dest;
+}
+
+int wcsicmp(const wchar_t *s1, const wchar_t *s2){
+ int i;
+ for(i = 0; towlower(s1[i]) == towlower(s2[i]); i++){
+ if(s1[i] == L'\0' || s2[i] == L'\0'){
+ return (int)s1[i] - (int)s2[i];
+ }
+ }
+ return (int)towlower(s1[i]) - (int)towlower(s2[i]);
+}
--- /dev/null
+extern "C" int errno = 0;
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#if (!defined(ERRNO_H))
+
+#define ERRNO_H 1
+
+#if (defined(__cplusplus))
+ extern "C" {
+#endif
+
+extern int errno;
+
+#define ENOENT 2 /* No such file or directory */
+#define ERANGE 34 /* Result too large (or too small) */
+
+#if (defined(__cplusplus))
+ }
+#endif
+
+#endif
--- /dev/null
+/* copyright(C) 2002 H.Kawai (under KL-01). */
+
+#if (!defined(FLOAT_H))
+
+#define FLOAT_H 1
+
+#define FLT_RADIX 2
+#define FLT_ROUNDS 1 /* nearest */
+#define FLT_DIG 6
+#define FLT_EPSILON 1.19209290e-07F
+#define FLT_MANT_DIG 24
+#define FLT_MAX 3.40282347e+38F
+#define FLT_MAX_EXP (+128)
+#define FLT_MIN 1.17549435e-38F
+#define FLT_MIN_EXP (-125)
+
+#define DBL_DIG 15
+#define DBL_EPSILON 2.2204460492503131e-16
+#define DBL_MANT_DIG 53
+#define DBL_MAX 1.7976931348623157e+308
+#define DBL_MAX_EXP 1024
+#define DBL_MIN 2.2250738585072014e-308
+#define DBL_MIN_EXP (-1021)
+
+#endif
+
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+extern "C" double frexp(double x, int *exp)
+{
+ int n = 0;
+ double s = 1.0;
+ if (x < 0.0) {
+ x = - x;
+ s = -1.0;
+ }
+ if (x != 0.0) {
+ if (x >= 1.0) {
+ do {
+ n++;
+ x *= 0.5;
+ } while (x >= 1.0);
+ }
+ if (x < 0.5) {
+ do {
+ n--;
+ x *= 2.0;
+ } while (x < 0.5);
+ }
+ }
+ *exp = n;
+ return x * s;
+}
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+extern "C" double ldexp(double x, int n)
+{
+ if (n > 0) {
+ do {
+ x *= 2.0;
+ } while (--n);
+ }
+ if (n < 0) {
+ do {
+ x *= 0.5;
+ } while (++n);
+ }
+ return x;
+}
--- /dev/null
+/* copyright(C) 2002 H.Kawai (under KL-01). */
+
+#if (!defined(LIMITS_H))
+
+#define LIMITS_H 1
+
+#define CHAR_BIT 8
+#define CHAR_MAX (+127)
+#define CHAR_MIN 0
+#define INT_MAX (+0x7fffffff)
+#define INT_MIN (-0x7fffffff)
+#define LONG_MAX INT_MAX
+#define LONG_MIN INT_MIN
+#define SCHAR_MAX (+127)
+#define SCHAR_MIN (-127)
+#define SHRT_MAX (+0x7fff)
+#define SHRT_MIN (-0x7fff)
+#define UCHAR_MAX (+0xff)
+#define UINT_MAX (+0xffffffff)
+#define ULONG_MAX UINT_MAX
+#define USHRT_MAX (+0xffff)
+
+#endif
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#if (!defined(MATH_H))
+
+#define MATH_H 1
+
+#if (defined(__cplusplus))
+ extern "C" {
+#endif
+
+double sin(double);
+double cos(double);
+double sqrt(double);
+double ldexp(double x, int n);
+double frexp(double x, int *exp);
+
+extern __inline__ double sin(double x)
+{
+ double res;
+ __asm__ ("fsin" : "=t" (res) : "0" (x));
+ return res;
+}
+
+extern __inline__ double cos(double x)
+{
+ double res;
+ __asm__ ("fcos" : "=t" (res) : "0" (x));
+ return res;
+}
+
+extern __inline__ double sqrt(double x)
+{
+ double res;
+ __asm__ ("fsqrt" : "=t" (res) : "0" (x));
+ return res;
+}
+
+#if (defined(__cplusplus))
+ }
+#endif
+
+#endif
--- /dev/null
+//*****************************************************************************
+// memchr.c : memory function
+// 2002/02/04 by Gaku : this is rough sketch
+//*****************************************************************************
+
+#include <stdio.h>
+#include <stddef.h>
+
+//=============================================================================
+// search SZ bytes of D for C
+//=============================================================================
+extern "C" void* memchr (void *d, int c, size_t sz)
+{
+ char *dp = (char*)d;
+
+ while (sz--) {
+ if (c == *dp)
+ return dp;
+ dp++;
+ }
+
+ return NULL;
+}
--- /dev/null
+//*****************************************************************************
+// memcmp.c : memory function
+// 2002/02/04 by Gaku : this is rough sketch
+//*****************************************************************************
+
+#include <stddef.h>
+
+//=============================================================================
+// compare SZ bytes of D and S
+//=============================================================================
+extern "C" int memcmp (const void *d, const void *s, size_t sz)
+{
+ const char *dp = (const char*) d;
+ const char *sp = (const char*) s;
+
+ while (sz--) {
+ if (*dp != *sp)
+ return *dp - *sp;
+ dp++;
+ sp++;
+ }
+
+ return 0;
+}
--- /dev/null
+//*****************************************************************************
+// memcpy.c : memory function
+// 2002/02/04 by Gaku : this is rough sketch
+//*****************************************************************************
+
+#include <stddef.h>
+
+//=============================================================================
+// copy SZ bytes of S to D
+//=============================================================================
+extern "C" void* memcpy (void *d, void *s, size_t sz)
+{
+ void *tmp = d;
+ char *dp = (char*)d;
+ char *sp = (char*)s;
+
+ while (sz--)
+ *dp++ = *sp++;
+
+ return tmp;
+}
--- /dev/null
+//*****************************************************************************
+// memmove.c : memory function
+// 2002/02/04 by Gaku : this is rough sketch
+//*****************************************************************************
+
+#include <stddef.h>
+
+//=============================================================================
+// copy SZ bytes of S to D
+// * guarantee - acceptable result for overlaped strings
+//=============================================================================
+extern "C" void* memmove (void *d, void *s, size_t sz)
+{
+ void *tmp = d;
+ char *dp = (char*)d;
+ char *sp = (char*)s;
+
+ if (dp > sp) {
+ dp += sz;
+ sp += sz;
+ while (sz--)
+ *--dp = *--sp;
+ } else {
+ while (sz--)
+ *dp++ = *sp++;
+ }
+
+ return tmp;
+}
--- /dev/null
+//*****************************************************************************
+// memset.c : memory function
+// 2002/02/04 by Gaku : this is rough sketch
+//*****************************************************************************
+
+#include <stddef.h>
+
+//=============================================================================
+// set SZ bytes of S to C
+//=============================================================================
+extern "C" void * memset (void *d, int c, size_t sz)
+{
+ void *tmp = d;
+ char *dp = (char*)d;
+
+ while (sz--)
+ *dp++ = c;
+
+ return tmp;
+}
--- /dev/null
+/* K&R\82©\82ç\82Ù\82Ú\82»\82Ì\82Ü\82Ü\88ø\97p */
+
+#include <stddef.h>
+#include <stdio.h>
+
+#define pV(i) (((char *) base) + (i) * size)
+
+static void swap(size_t size, char *p, char *q)
+{
+ char t;
+ do {
+ t = *p;
+ *p++ = *q;
+ *q++ = t;
+ } while (--size);
+ return;
+}
+
+extern "C" void qsort(void *base, size_t n, size_t size,
+ int (*cmp)(const void *, const void *))
+{
+ size_t i, last;
+ if (size == 0)
+ return;
+ if (n <= 1)
+ return;
+ swap(size, pV(0), pV(n / 2));
+ last = 0;
+ for (i = 1; i < n; i++)
+ if ((*cmp)(pV(i), pV(0)) < 0)
+ swap(size, pV(++last), pV(i));
+ swap(size, pV(0), pV(last));
+ qsort(pV(0), last, size, cmp);
+ qsort(pV(last + 1), n - last - 1, size, cmp);
+ return;
+}
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+unsigned int rand_seed = 1;
+
+extern "C" int rand(void)
+{
+ rand_seed = rand_seed * 1103515245 + 12345;
+ return (unsigned int) (rand_seed >> 16) & 32767;
+}
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#if (!defined(SETJMP_H))
+
+#define SETJMP_H 1
+
+#if (defined(__cplusplus))
+ extern "C" {
+#endif
+
+typedef int jmp_buf[3]; /* EBP, EIP, ESP */
+
+#define setjmp(env) __builtin_setjmp(env)
+#define longjmp(env, val) __builtin_longjmp(env, val)
+
+#if (defined(__cplusplus))
+ }
+#endif
+
+#endif
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#include <stdarg.h>
+#include <stdio.h>
+
+extern "C" int sprintf(char *s, const char *format, ...)
+{
+ int i;
+ va_list ap;
+
+ va_start(ap, format);
+ i = vsprintf(s, format, ap);
+ va_end(ap);
+ return i;
+}
+
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#if (!defined(STDARG_H))
+
+#define STDARG_H 1
+
+#if (defined(__cplusplus))
+ extern "C" {
+#endif
+
+#define va_start(v,l) __builtin_stdarg_start((v),l)
+#define va_end __builtin_va_end
+#define va_arg __builtin_va_arg
+#define va_copy(d,s) __builtin_va_copy((d),(s))
+#define va_list __builtin_va_list
+
+#if (defined(__cplusplus))
+ }
+#endif
+
+#endif
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#if (!defined(STDDEF_H))
+
+#define STDDEF_H 1
+
+#if (defined(__cplusplus))
+ extern "C" {
+#endif
+
+typedef unsigned int size_t;
+
+#if (defined(__cplusplus))
+ }
+#endif
+
+#endif
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#if (!defined(STDIO_H))
+
+#define STDIO_H 1
+
+#if (defined(__cplusplus))
+ extern "C" {
+#endif
+
+#if (!defined(NULL))
+ #define NULL ((void *) 0)
+#endif
+
+#include <stdarg.h>
+
+/* golibc */
+int sprintf(char *s, const char *format, ...);
+int vsprintf(char *s, const char *format, va_list arg);
+
+#if (defined(__cplusplus))
+ }
+#endif
+
+#endif
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#if (!defined(STDLIB_H))
+
+#define STDLIB_H 1
+
+#if (defined(__cplusplus))
+ extern "C" {
+#endif
+
+#include <stddef.h> /* size_t */
+
+#define RAND_MAX 0x7fff
+#define srand(seed) (void) (rand_seed = (seed))
+
+#define EXIT_SUCCESS 0
+#define EXIT_FAILURE 1
+
+int abs(int n);
+double atof(const char *s);
+int atoi(const char *s);
+void qsort(void *base, size_t n, size_t size,
+ int (*cmp)(const void *, const void *));
+int rand(void);
+extern unsigned int rand_seed;
+double strtod(const char *s, const char **endp);
+long strtol(const char *s, const char **endp, int base);
+unsigned long strtoul(const char *s, const char **endp, int base);
+
+/* for strdup() */
+void *malloc(unsigned int nbytes);
+void free(void *ap);
+
+#if (defined(__cplusplus))
+ }
+#endif
+
+#endif
--- /dev/null
+//*****************************************************************************
+// strcat.c : string function
+// 2002/02/04 by Gaku : this is rough sketch
+//*****************************************************************************
+
+#include <stddef.h>
+
+//=============================================================================
+// append S to D
+//=============================================================================
+extern "C" char* strcat (char *d, const char *s)
+{
+ char *tmp = d;
+
+ while ('\0' != *d)
+ d++;
+
+ while ('\0' != *s)
+ *d++ = *s++;
+
+ *d = '\0';
+
+ return tmp;
+}
--- /dev/null
+//*****************************************************************************
+// strchr.c : string function
+// 2002/02/04 by Gaku : this is rough sketch
+//*****************************************************************************
+
+#include <stddef.h>
+
+//=============================================================================
+// search D for C
+//=============================================================================
+extern "C" char* strchr (char *d, int c)
+{
+ while (c != *d) {
+ if ('\0' == *d++)
+ return NULL;
+ }
+
+ return d;
+}
--- /dev/null
+//*****************************************************************************
+// strcmp.c : string function
+// 2002/02/04 by Gaku : this is rough sketch
+//*****************************************************************************
+
+#include <stddef.h>
+
+//=============================================================================
+// compare D and S
+//=============================================================================
+extern "C" int strcmp (const char *d, const char *s)
+{
+ while ('\0' != *d) {
+ if (*d != *s)
+ return *d - *s;
+ d++;
+ s++;
+ }
+
+ return *d - *s;
+}
--- /dev/null
+//*****************************************************************************
+// strcpy.c : string function
+// 2002/02/04 by Gaku : this is rough sketch
+//*****************************************************************************
+
+#include <stddef.h>
+
+//=============================================================================
+// copy S to D
+//=============================================================================
+extern "C" char* strcpy (char *d, const char *s)
+{
+ char *tmp = d;
+
+#if 0
+ while ('\0' != *s)
+ *d++ = *s++;
+
+ *d = '\0';
+#endif
+ while ((*d++ = *s++) != '\0');
+
+ return tmp;
+}
--- /dev/null
+//*****************************************************************************
+// strcspn.c : string function
+// 2002/02/04 by Gaku : this is rough sketch
+//*****************************************************************************
+
+#include <stddef.h>
+
+//=============================================================================
+// return length of D which any characters in S
+//=============================================================================
+extern "C" size_t strcspn (char *d, const char *s)
+{
+ char *tmp = d;
+ const char *bgn = s;
+
+ while ('\0' != *d) {
+ while ('\0' != *s)
+ if (*d == *s++)
+ return d - tmp;
+ d++;
+ s = bgn;
+ }
+
+ return d - tmp;
+}
--- /dev/null
+/* copyright(C) 2002 H.Kawai (under KL-01). */
+
+#include <stdlib.h>
+#include <string.h>
+
+extern "C" char *strdup(const char *cs)
+{
+ char *t = (char *)malloc(strlen(cs) + 1);
+ if (t)
+ strcpy(t, cs);
+ return t;
+}
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#if (!defined(STRING_H))
+
+#define STRING_H 1
+
+#if (defined(__cplusplus))
+ extern "C" {
+#endif
+
+#include <stddef.h> /* size_t */
+
+char *strcpy(char *s, const char *ct);
+char *strncpy(char *s, const char *ct, size_t n);
+char *strcat(char *s, const char *ct);
+char *strncat(char *s, const char *ct, size_t n);
+int strcmp(const char *cs, const char *ct);
+int strncmp(const char *cs, const char *ct, size_t n);
+char *strchr(const char *cs, int c);
+char *strrchr(const char *cs, int c);
+size_t strspn(const char *s, const char *accept);
+size_t strcspn(const char *s, const char *reject);
+char *strpbrk(const char *s, const char *accept);
+char *strstr(const char *cs, const char *ct);
+size_t strlen(const char *cs);
+
+void *memcpy(void *s, const void *ct, size_t n);
+void *memmove(void *s, const void *ct, size_t n);
+int memcmp(const void *cs, const void *ct, size_t n);
+void *memchr(const void *cs, int c, size_t n);
+void *memset(void *s, int c, size_t n);
+char *strdup(const char *s);
+
+#if (defined(__cplusplus))
+ }
+#endif
+
+#endif
--- /dev/null
+//*****************************************************************************
+// strlen.c : string function
+// 2002/02/04 by Gaku : this is rough sketch
+//*****************************************************************************
+
+#include <stddef.h>
+
+//=============================================================================
+// return the length of D
+//=============================================================================
+extern "C" size_t strlen (char *d)
+{
+ char *tmp = d;
+
+ while ('\0' != *d)
+ d++;
+
+ return d - tmp;
+}
--- /dev/null
+//*****************************************************************************
+// strncat.c : string function
+// 2002/02/04 by Gaku : this is rough sketch
+//*****************************************************************************
+
+#include <stddef.h>
+
+//=============================================================================
+// append no more SZ bytes from S to D
+//=============================================================================
+extern "C" char* strncat (char *d, const char *s, size_t sz)
+{
+ char *tmp = d;
+
+ while ('\0' != *d)
+ d++;
+
+ while ('\0' != *s) {
+ if (0 == sz)
+ break;
+ sz--;
+ *d++ = *s++;
+ }
+
+ if (sz)
+ *d = '\0';
+
+ return tmp;
+}
--- /dev/null
+//*****************************************************************************
+// strncmp.c : string function
+// 2002/02/04 by Gaku : this is rough sketch
+//*****************************************************************************
+
+#include <stddef.h>
+
+//=============================================================================
+// compare no more SZ bytes D and S
+//=============================================================================
+extern "C" int strncmp (char *d, const char *s, size_t sz)
+{
+#if 0
+ /* Gaku's code */
+
+ while ( sz-- && '\0' != *d ) {
+ if (*d != *s)
+ return *d - *s;
+ d++;
+ s++;
+ }
+ return *d - *s; /* bug? (if sz == 0) */
+
+#endif
+
+#if 1
+ /* Kawai's code */
+
+ while (sz--) {
+ if (*d == '\0')
+ goto ret;
+ if (*d != *s) {
+ret:
+ return *d - *s;
+ }
+ d++;
+ s++;
+ }
+ return 0;
+#endif
+
+}
--- /dev/null
+//*****************************************************************************
+// strncpy.c : string function
+// 2002/02/04 by Gaku : this is rough sketch
+//*****************************************************************************
+
+#include <stddef.h>
+
+//=============================================================================
+// copy no more SZ bytes S to D
+//=============================================================================
+extern "C" char* strncpy (char *d, const char *s, size_t sz)
+{
+ char *tmp = d;
+
+ while ('\0' != *s) {
+ if (0 == sz)
+ break;
+ sz--;
+ *d++ = *s++;
+ }
+
+ while (sz--)
+ *d++ = '\0';
+
+ return tmp;
+}
--- /dev/null
+//*****************************************************************************
+// strpbrk.c : string function
+// 2002/02/04 by Gaku : this is rough sketch
+//*****************************************************************************
+
+#include <stdio.h>
+#include <stddef.h>
+
+//=============================================================================
+// search D of any character in S
+//=============================================================================
+extern "C" char* strpbrk (char *d, const char *s)
+{
+ const char *bgn = s;
+
+ while ('\0' != *d) {
+ while ('\0' != *s)
+ if (*d == *s++)
+ return d;
+ d++;
+ s = bgn;
+ }
+
+ return NULL;
+}
--- /dev/null
+//*****************************************************************************
+// strrchr.c : string function
+// 2002/02/04 by Gaku : this is rough sketch
+//*****************************************************************************
+
+#include <stdio.h>
+#include <stddef.h>
+
+//=============================================================================
+// search the last occur of C in D
+//=============================================================================
+extern "C" char* strrchr (char *d, int c)
+{
+ char *tmp = d;
+
+ while ('\0' != *d)
+ d++;
+
+ while (tmp <= d) {
+ if (c == *d)
+ return d;
+ d--;
+ }
+
+ return NULL;
+}
--- /dev/null
+//*****************************************************************************
+// strspn.c : string function
+// 2002/02/04 by Gaku : this is rough sketch
+//*****************************************************************************
+
+#include <stddef.h>
+
+//=============================================================================
+// return the length of D of any character in S
+//=============================================================================
+extern "C" size_t strspn (char *d, const char *s)
+{
+ char *tmp = d;
+ const char *bgn = s;
+
+ while ('\0' != *d) {
+ while ('\0' != *s) {
+ if (*d == *s)
+ break;
+ s++;
+ }
+ if ('\0' == *s)
+ return d - tmp;
+ d++;
+ s = bgn;
+ }
+
+ return d - tmp;
+}
--- /dev/null
+//*****************************************************************************
+// strstr.c : string function
+// 2002/02/04 by Gaku : this is rough sketch
+//*****************************************************************************
+
+#include <stdio.h>
+#include <stddef.h>
+
+//=============================================================================
+// search S in D
+// * simple search
+//=============================================================================
+extern "C" char* strstr (char *d, const char *s)
+{
+ char *tmp;
+ const char *bgn = s;
+
+ while ('\0' != *d) {
+ tmp = d;
+ while (*d++ == *s++)
+ if ('\0' == *d || '\0' == *s)
+ return tmp;
+ d = tmp+1;
+ s = bgn;
+ }
+
+ return NULL;
+}
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#include <errno.h>
+#include <limits.h>
+
+unsigned long strtoul0(const char **ps, int base, char *errflag);
+
+extern "C" long strtol(const char *s, const char **endp, int base)
+{
+ const char *s0 = s, *s1;
+ char sign = 0, errflag;
+ unsigned long val;
+ while (*s != '\0' && *s <= ' ')
+ s++;
+ if (*s == '-') {
+ sign = 1;
+ s++;
+ }
+ while (*s != '\0' && *s <= ' ')
+ s++;
+ s1 = s;
+ val = strtoul0(&s, base, &errflag);
+ if (s == s1)
+ s = s0;
+ if (endp)
+ *endp = s;
+ if (val > LONG_MAX) {
+ errflag = 1;
+ val = LONG_MAX;
+ if (sign)
+ val = LONG_MIN;
+ }
+ if (errflag == 0 && sign != 0)
+ val = - val;
+ if (errflag)
+ errno = ERANGE;
+ return val;
+}
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#include <errno.h>
+
+extern "C" unsigned long strtoul0(const char **ps, int base, char *errflag);
+
+extern "C" unsigned long strtoul(const char *s, const char **endp, int base)
+{
+ const char *s0 = s, *s1;
+ char sign = 0, errflag;
+ unsigned long val;
+ while (*s != '\0' && *s <= ' ')
+ s++;
+ if (*s == '-') {
+ sign = 1;
+ s++;
+ }
+ while (*s != '\0' && *s <= ' ')
+ s++;
+ s1 = s;
+ val = strtoul0(&s, base, &errflag);
+ if (s == s1)
+ s = s0;
+ if (endp)
+ *endp = s;
+ if (errflag == 0 && sign != 0)
+ val = - val;
+ if (errflag)
+ errno = ERANGE;
+ return val;
+}
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#include <limits.h>
+
+extern "C" unsigned long strtoul0(const unsigned char **ps, int base, unsigned char *errflag);
+
+static int prefix(int c)
+{
+ signed char base = 0;
+ if ('a' <= c && c <= 'z')
+ c += 'A' - 'a';
+ if (c == 'B')
+ base = 2;
+ if (c == 'D')
+ base = 10;
+ if (c == 'O')
+ base = 8;
+ if (c == 'X')
+ base = 16;
+ return base;
+}
+
+extern "C" unsigned long strtoul0(const unsigned char **ps, int base, unsigned char *errflag)
+{
+ const unsigned char *s = *ps;
+ unsigned long val = 0, max;
+ int digit;
+ if (base == 0) {
+ base += 10;
+ if (*s == '0') {
+ base = prefix(*(s + 1));
+ if (base == 0)
+ base += 8; /* base = 8; */
+ }
+ }
+ if (*s == '0') {
+ if (base == prefix(*(s + 1)))
+ s += 2;
+ }
+ max = ULONG_MAX / base;
+ *errflag = 0;
+ for (;;) {
+ digit = 99;
+ if ('0' <= *s && *s <= '9')
+ digit = *s - '0';
+ if ('A' <= *s && *s <= 'Z')
+ digit = *s - ('A' - 10);
+ if ('a' <= *s && *s <= 'z')
+ digit = *s - ('a' - 10);
+ if (digit >= base)
+ break;
+ if (val > max)
+ goto err;
+ val *= base;
+ if (ULONG_MAX - val < (unsigned long) digit) {
+err:
+ *errflag = 1;
+ val = ULONG_MAX;
+ } else
+ val += digit;
+ s++;
+ }
+ *ps = s;
+ return val;
+}
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <limits.h>
+#include <string.h>
+
+extern "C" unsigned long strtoul0(const char **ps, int base, char *errflag);
+
+typedef unsigned char UCHAR;
+typedef unsigned int UINT;
+
+static UCHAR *setdec(UCHAR *s, UINT ui)
+{
+ do {
+ *--s = (ui % 10) + '0';
+ } while (ui /= 10);
+ return s;
+}
+
+extern "C" int vsprintf(char *s, const char *format, va_list arg)
+{
+ UCHAR c, *t = (UCHAR *)s, *p, flag_left, flag_zero /* , flag_sign, flag_space */;
+ UCHAR temp[32] /* \90\94\8e\9a\97p */, *q;
+ temp[31] = '\0';
+ int field_min, field_max, i;
+ long l;
+ static char hextable_X[] = "0123456789ABCDEF";
+ static char hextable_x[] = "0123456789abcdef";
+ //for(;*s++=*format++;){}return 0;
+ for (;;) {
+ c = *format++;
+ if (c != '%') {
+put1char:
+ *t++ = c;
+ if (c)
+ continue;
+ return t - (UCHAR *) s - 1;
+ }
+ flag_left = flag_zero = /* flag_sign = flag_space = flag_another = */ 0;
+ c = *format++;
+ for (;;) {
+ if (c == '-')
+ flag_left = 1;
+ else if (c == '0')
+ flag_zero = 1;
+ else
+ break;
+ c = *format++;
+ }
+ field_min = 0;
+ if ('1' <= c && c <= '9') {
+ format--;
+ field_min = (int) strtoul0(&format, 10, (char *)&c);
+ c = *format++;
+ } else if (c == '*') {
+ field_min = va_arg(arg, int);
+ c = *format++;
+ }
+ field_max = INT_MAX;
+ if (c == '.') {
+ c = *format++;
+ if ('1' <= c && c <= '9') {
+ format--;
+ field_min = (int) strtoul0(&format, 10, (char *)&c);
+ c = *format++;
+ } else if (c == '*') {
+ field_max = va_arg(arg, int);
+ c = *format++;
+ }
+ }
+ if (c == 's') {
+ if (field_max != INT_MAX)
+ goto mikan;
+ p = (UCHAR *)va_arg(arg, char *);
+ l = strlen((char *)p);
+ if (*p) {
+ c = ' ';
+copy_p2t:
+ if (flag_left == 0) {
+ while (l < field_min) {
+ *t++ = c;
+ field_min--;
+ }
+ }
+ do {
+ *t++ = *p++;
+ } while (*p);
+ }
+ while (l < field_min) {
+ *t++ = ' ';
+ field_min--;
+ }
+ continue;
+ }
+ if (c == 'l') {
+ c = *format++;
+ if (c != 'd' && c != 'x' && c != 'u' && c != 'X' && c != 'o') {
+ format--;
+ goto mikan;
+ }
+ }
+ if (c == 'u') {
+ l = va_arg(arg, UINT);
+ goto printf_u;
+ }
+ if (c == 'd') {
+printf_d:
+ l = va_arg(arg, long);
+ if (l < 0) {
+ *t++ = '-';
+ l = - l;
+ field_min--;
+ }
+printf_u:
+ if (field_max != INT_MAX)
+ goto mikan;
+ if (field_min <= 0)
+ field_min = 1;
+ p = setdec(&temp[31], l);
+printf_x2:
+ c = ' ';
+ l = &temp[31] - p;
+ if (flag_zero)
+ c = '0';
+ goto copy_p2t;
+ }
+ if (c == 'i')
+ goto printf_d;
+ if (c == '%')
+ goto put1char;
+ if (c == 'x') {
+ q = (UCHAR *)hextable_x;
+printf_x:
+ l = va_arg(arg, UINT);
+ p = &temp[31];
+ do {
+ *--p = q[l & 0x0f];
+ } while ((*(UINT *) &l) >>= 4);
+ goto printf_x2;
+ }
+ if (c == 'X') {
+ q = (UCHAR *)hextable_X;
+ goto printf_x;
+ }
+ if (c == 'p') {
+ i = (int) va_arg(arg, void *);
+ p = &temp[31];
+ for (l = 0; l < 8; l++) {
+ *--p = hextable_X[i & 0x0f];
+ i >>= 4;
+ }
+ goto copy_p2t;
+ }
+ if (c == 'c') {
+ i = (int) va_arg(arg, void *);
+ p = &temp[31];
+ *--p = i;
+ goto copy_p2t;
+ }
+ if (c == 'o') {
+ l = va_arg(arg, UINT);
+ p = &temp[31];
+ do {
+ *--p = hextable_x[l & 0x07];
+ } while ((*(UINT *) &l) >>= 3);
+ goto printf_x2;
+ }
+ if (c == 'f') {
+ if (field_max == INT_MAX)
+ field_max = 6;
+ /* for ese */
+ if (field_min < field_max + 2)
+ field_min = field_max + 2;
+ do {
+ *t++ = '#';
+ } while (--field_min);
+ continue;
+ }
+mikan:
+ for(;;);
+ }
+}
--- /dev/null
+TOOLPATH = ../../z_tools/
+INCPATH = ../../z_tools/haribote/
+
+MAKE = make.exe -r
+ASM = nasm
+GAS2NASK = $(TOOLPATH)gas2nask.exe -a
+OBJ2BIM = $(TOOLPATH)obj2bim.exe
+MAKEFONT = $(TOOLPATH)makefont.exe
+BIN2OBJ = $(TOOLPATH)bin2obj.exe
+BIM2HRB = $(TOOLPATH)bim2hrb.exe
+RULEFILE = ../haribote.rul
+EDIMG = $(TOOLPATH)edimg.exe
+IMGTOL = $(TOOLPATH)imgtol.com
+GOLIB = $(TOOLPATH)golib00.exe
+COPY = cp
+DEL = rm
+OBJCOPY = objcopy
+OBJS = filesystem.obj screen.obj timer.obj desctable.obj naskfunc.obj pic.obj startup.obj debug.obj MemMan.obj ProcessMan.obj ThreadMan.obj
+CFILES = filesystem.cpp screen.cpp timer.cpp desctable.cpp naskfunc.cpp pic.cpp startup.cpp debug.cpp MemMan.cpp ProcessMan.cpp ThreadMan.cpp
+LIBS = ./ata/ataio.lib ../golibc/golibc.lib
+CC = g++
+BOOTPACKTARGET = bootpack.exe
+CFLAGS = -g -c -nostdinc -fno-rtti -fno-builtin-alloca -I../include -Ig:/lib/boost -DBOOST_NO_EXCEPTIONS -DBOOST_SP_DISABLE_THREADS -DBOOST_DISABLE_ASSERTS -DBOOST_NO_AUTO_PTR -DBOOST_NO_IOSTREAM -masm=intel -std=c++0x
+
+# \83f\83t\83H\83\8b\83g\93®\8dì
+
+default :
+ cd ata && $(MAKE)
+ $(MAKE) mbr.bin
+ $(MAKE) iplhd.bin
+ $(MAKE) haribote.sys
+
+
+# \83t\83@\83C\83\8b\90¶\90¬\8bK\91¥
+
+mbr.bin : mbr.asm Makefile
+ $(ASM) mbr.asm -o mbr.bin -l mbr.lst
+ perl mbr.pl >> mbr.bin
+
+iplhd.bin : iplhd.asm Makefile
+ $(ASM) iplhd.asm -o iplhd.bin -l iplhd.lst
+
+asmhead.bin : asmhead.asm Makefile
+ $(ASM) asmhead.asm -o asmhead.bin -l asmhead.lst
+
+bootpack.obj : bootpack.cpp Makefile
+ $(CC) $(CFLAGS) bootpack.cpp -o bootpack.obj
+
+$(BOOTPACKTARGET) : bootpack.obj $(OBJS) $(LIBS) Makefile
+ g++ -shared -Wl,--image-base=0x00280000 -e _user_start -static -nostdlib -lgcc_s -lgcc bootpack.obj $(OBJS) $(LIBS) -o $(BOOTPACKTARGET)
+# objcopy -j .text -I pe-i386 -O binary bootpack.dll bootpack.sys
+
+
+haribote.sys : asmhead.bin $(BOOTPACKTARGET) Makefile
+ cp asmhead.bin haribote.sys
+ cat $(BOOTPACKTARGET) >> haribote.sys
+
+naskfunc.obj : naskfunc.asm Makefile
+ $(ASM) -f win32 naskfunc.asm -o naskfunc.obj -l naskfunc.lst
+
+
+# \88ê\94Ê\8bK\91¥
+
+%.asm : %.gas Makefile
+ $(GAS2NASK) $*.gas $*.asm
+
+%.obj : %.cpp Makefile
+ $(CC) $(CFLAGS) $*.cpp -o $*.obj
+
+
+# \83R\83}\83\93\83h
+
+clean :
+ -$(DEL) mbr.bin
+ -$(DEL) iplhd.bin
+ -$(DEL) $(OBJS) bootpack.obj
+
+
+src_only :
+ $(MAKE) clean
+ -$(DEL) haribote.sys
+
+depend :
+ makedepend -- -- $(CFILES) bootpack.cpp
+
+# DO NOT DELETE
+
+filesystem.obj: filesystem.h bootpack.h typedefs.h ata/ataio.h ata\dos.h
+filesystem.obj: fat32.h screen.h debug.h
+screen.obj: screen.h ata/ataio.h ata\dos.h bootpack.h typedefs.h hankaku.h
+timer.obj: bootpack.h typedefs.h timer.h naskfunc.h pic.h
+desctable.obj: bootpack.h typedefs.h desctable.h naskfunc.h screen.h
+desctable.obj: ata/ataio.h ata\dos.h debug.h processman.h Vector.h MemMan.h
+desctable.obj: FileSystem.h fat32.h ThreadMan.h
+pic.obj: bootpack.h typedefs.h pic.h naskfunc.h
+debug.obj: debug.h screen.h ata/ataio.h ata\dos.h bootpack.h typedefs.h
+debug.obj: MemMan.h
+MemMan.obj: MemMan.h typedefs.h naskfunc.h debug.h vector.h
+ProcessMan.obj: ProcessMan.h typedefs.h Vector.h MemMan.h FileSystem.h
+ProcessMan.obj: bootpack.h ata/ataio.h ata\dos.h fat32.h desctable.h
+ProcessMan.obj: ThreadMan.h filesystem.h debug.h naskfunc.h
+ThreadMan.obj: ThreadMan.h desctable.h typedefs.h MemMan.h Vector.h debug.h
+ThreadMan.obj: ProcessMan.h FileSystem.h bootpack.h ata/ataio.h ata\dos.h
+ThreadMan.obj: fat32.h
+bootpack.obj: bootpack.h typedefs.h filesystem.h ata/ataio.h ata\dos.h
+bootpack.obj: fat32.h screen.h timer.h desctable.h pic.h naskfunc.h MemMan.h
+bootpack.obj: debug.h ProcessMan.h Vector.h FileSystem.h ThreadMan.h
--- /dev/null
+TOOLPATH = ../../z_tools/
+INCPATH = ../../z_tools/haribote/
+
+MAKE = make.exe -r
+ASM = nasm
+GAS2NASK = $(TOOLPATH)gas2nask.exe -a
+OBJ2BIM = $(TOOLPATH)obj2bim.exe
+MAKEFONT = $(TOOLPATH)makefont.exe
+BIN2OBJ = $(TOOLPATH)bin2obj.exe
+BIM2HRB = $(TOOLPATH)bim2hrb.exe
+RULEFILE = ../haribote.rul
+EDIMG = $(TOOLPATH)edimg.exe
+IMGTOL = $(TOOLPATH)imgtol.com
+GOLIB = $(TOOLPATH)golib00.exe
+COPY = cp
+DEL = rm
+OBJCOPY = objcopy
+OBJS = filesystem.obj screen.obj timer.obj desctable.obj naskfunc.obj pic.obj startup.obj debug.obj MemMan.obj ProcessMan.obj ThreadMan.obj
+CFILES = filesystem.cpp screen.cpp timer.cpp desctable.cpp naskfunc.cpp pic.cpp startup.cpp debug.cpp MemMan.cpp ProcessMan.cpp ThreadMan.cpp
+LIBS = ./ata/ataio.lib ../golibc/golibc.lib
+CC = g++
+BOOTPACKTARGET = bootpack.exe
+CFLAGS = -g -c -nostdinc -fno-rtti -fno-builtin-alloca -I../include -Ig:/lib/boost -DBOOST_NO_EXCEPTIONS -DBOOST_SP_DISABLE_THREADS -DBOOST_DISABLE_ASSERTS -DBOOST_NO_AUTO_PTR -DBOOST_NO_IOSTREAM -masm=intel -std=c++0x
+
+# \83f\83t\83H\83\8b\83g\93®\8dì
+
+default :
+ cd ata && $(MAKE)
+ $(MAKE) mbr.bin
+ $(MAKE) iplhd.bin
+ $(MAKE) haribote.sys
+
+
+# \83t\83@\83C\83\8b\90¶\90¬\8bK\91¥
+
+mbr.bin : mbr.asm Makefile
+ $(ASM) mbr.asm -o mbr.bin -l mbr.lst
+ perl mbr.pl >> mbr.bin
+
+iplhd.bin : iplhd.asm Makefile
+ $(ASM) iplhd.asm -o iplhd.bin -l iplhd.lst
+
+asmhead.bin : asmhead.asm Makefile
+ $(ASM) asmhead.asm -o asmhead.bin -l asmhead.lst
+
+bootpack.obj : bootpack.cpp Makefile
+ $(CC) $(CFLAGS) bootpack.cpp -o bootpack.obj
+
+$(BOOTPACKTARGET) : bootpack.obj $(OBJS) $(LIBS) Makefile
+ g++ -shared -Wl,--image-base=0x00280000 -e _user_start -static -nostdlib -lgcc_s -lgcc bootpack.obj $(OBJS) $(LIBS) -o $(BOOTPACKTARGET)
+# objcopy -j .text -I pe-i386 -O binary bootpack.dll bootpack.sys
+
+
+haribote.sys : asmhead.bin $(BOOTPACKTARGET) Makefile
+ cp asmhead.bin haribote.sys
+ cat $(BOOTPACKTARGET) >> haribote.sys
+
+naskfunc.obj : naskfunc.asm Makefile
+ $(ASM) -f win32 naskfunc.asm -o naskfunc.obj -l naskfunc.lst
+
+
+# \88ê\94Ê\8bK\91¥
+
+%.asm : %.gas Makefile
+ $(GAS2NASK) $*.gas $*.asm
+
+%.obj : %.cpp Makefile
+ $(CC) $(CFLAGS) $*.cpp -o $*.obj
+
+
+# \83R\83}\83\93\83h
+
+clean :
+ -$(DEL) mbr.bin
+ -$(DEL) iplhd.bin
+ -$(DEL) $(OBJS) bootpack.obj
+
+
+src_only :
+ $(MAKE) clean
+ -$(DEL) haribote.sys
+
+depend :
+ makedepend -- -- $(CFILES) bootpack.cpp
+
+# DO NOT DELETE
+
+filesystem.obj: filesystem.h bootpack.h typedefs.h ata/ataio.h ata\dos.h
+filesystem.obj: fat32.h screen.h debug.h
+screen.obj: screen.h ata/ataio.h ata\dos.h bootpack.h typedefs.h hankaku.h
+timer.obj: bootpack.h typedefs.h timer.h naskfunc.h pic.h
+desctable.obj: bootpack.h typedefs.h desctable.h naskfunc.h screen.h
+desctable.obj: ata/ataio.h ata\dos.h debug.h processman.h Vector.h MemMan.h
+desctable.obj: FileSystem.h fat32.h
+pic.obj: bootpack.h typedefs.h pic.h naskfunc.h
+debug.obj: debug.h screen.h ata/ataio.h ata\dos.h bootpack.h typedefs.h
+debug.obj: MemMan.h
+MemMan.obj: MemMan.h typedefs.h naskfunc.h debug.h vector.h
--- /dev/null
+#include "MemMan.h"
+#include "naskfunc.h"
+#include "debug.h"
+#include "vector.h"
+
+#define EFLAGS_AC_BIT 0x00040000
+#define CR0_CACHE_DISABLE 0x60000000
+
+BYTE MemMan::buf[sizeof(MemMan)];
+
+void MemMan::Init(){
+ new ((void *)buf) MemMan();
+}
+
+MemMan::MemMan(void)
+{
+ debugprint("memory checking...\n");
+ memsize = memtest(SECOND_BEGIN, 0xbfffffff);
+ if(memsize >= 0x80000000){
+ memsize = 0x80000000;
+ }
+ debugprint("memory:%d (max mem is 2G byte)\n", memsize);
+
+ //0~memsize-1\82Ü\82Å\8eg\82¦\82é
+ pagecount = (FIRST_END - FIRST_BEGIN) / PAGE_SIZE + memsize / PAGE_SIZE;
+ pages_for_pageinfo = (pagecount * sizeof(PAGEINFO) + PAGE_SIZE - 1) / PAGE_SIZE;
+ //0x00001000 - 0x0009efff\82É\93ü\82éBLOCKINFO\82Ì\90\94\82ð\8cv\8eZ
+ maxfirst = (FIRST_END - FIRST_BEGIN) / sizeof(PAGEINFO);
+
+ for(int i = 0; i < pagecount; i++){
+ PAGEINFO &pi = *getpageinfo(i);
+ if(i < pages_for_pageinfo){
+ //PAGEINFO\8ai\94[\82É\97\98\97p\82³\82ê\82é\83y\81[\83W
+ pi.commited = 1;
+ pi.unpageoutable = 1;
+ pi.system = 1;
+ pi.pid = 0;
+ }else{
+ pi.commited = 0;
+ pi.unpageoutable = 0;
+ pi.system = 0;
+ pi.pid = 0;
+ }
+ }
+
+ minfo = new Vector<MEMINFO>(0);
+}
+
+
+MemMan::~MemMan(void)
+{
+ delete minfo;
+}
+
+MemMan::PAGEINFO *MemMan::getpageinfo(DWORD i){
+ if(pagecount <= i){
+ return NULL;
+ }
+ if(i < maxfirst){
+ //\88ê\82Â\96Ú\82Ì\8bó\82«\97Ì\88æ
+ return (PAGEINFO *)(FIRST_BEGIN + i * sizeof(PAGEINFO));
+ }else{
+ return (PAGEINFO *)(SECOND_BEGIN + (i - maxfirst) * sizeof(PAGEINFO));
+ }
+}
+
+DWORD MemMan::getpageaddr(DWORD i){
+ if(pagecount <= i){
+ return -1;
+ }
+ if(FIRST_BEGIN + i * PAGE_SIZE < FIRST_END){
+ return FIRST_BEGIN + i * PAGE_SIZE;
+ }else{
+ return SECOND_BEGIN + (i - (FIRST_END - FIRST_BEGIN) / PAGE_SIZE) * PAGE_SIZE;
+ }
+}
+
+DWORD MemMan::getpageindex(DWORD addr){
+ DWORD pageindex = 0;
+ if(addr < FIRST_END){
+ pageindex = (addr - FIRST_BEGIN) / PAGE_SIZE;
+ }else{
+ pageindex = (FIRST_END - FIRST_BEGIN) / PAGE_SIZE + (addr - SECOND_BEGIN) / PAGE_SIZE;
+ }
+ return pageindex;
+}
+
+DWORD MemMan::malloc(bool unpageoutable, bool system, DWORD pid, DWORD count){
+ for(int i = 0; i < pagecount - count + 1; i++){
+ bool allocable = true;
+ for(DWORD j = 0; j < count; j++){
+ if(getpageinfo(i + j)->commited){
+ allocable = false;
+ break;
+ }
+ }
+ if(allocable){
+ for(DWORD j = 0; j < count; j++){
+ //debugprint("malloc phy:%p\n", getpageaddr(i + j));
+ PAGEINFO &pi = *getpageinfo(i + j);
+ pi.commited = 1;
+ pi.unpageoutable = unpageoutable;
+ pi.pid = pid;
+ pi.system = system;
+ }
+
+ return getpageaddr(i);
+ }
+ }
+}
+
+void MemMan::free(DWORD addr, DWORD count){
+ DWORD pageindex = getpageindex(addr);
+ for(DWORD i = 0; i < count; i++){
+ //debugprint("free phy:%p\n", getpageaddr(pageindex + i));
+ getpageinfo(pageindex + i)->commited = 0;
+ }
+}
+
+
+DWORD MemMan::memtest(DWORD start, DWORD end)
+{
+ bool flg486 = false;
+ DWORD eflg, cr0, i;
+
+ /* 386\82©\81A486\88È\8d~\82È\82Ì\82©\82Ì\8am\94F */
+ eflg = io_load_eflags();
+ eflg |= EFLAGS_AC_BIT; /* AC-bit = 1 */
+ io_store_eflags(eflg);
+ eflg = io_load_eflags();
+ if ((eflg & EFLAGS_AC_BIT) != 0) { /* 386\82Å\82ÍAC=1\82É\82µ\82Ä\82à\8e©\93®\82Å0\82É\96ß\82Á\82Ä\82µ\82Ü\82¤ */
+ flg486 = true;
+ }
+ eflg &= ~EFLAGS_AC_BIT; /* AC-bit = 0 */
+ io_store_eflags(eflg);
+
+ if (flg486) {
+ cr0 = load_cr0();
+ cr0 |= CR0_CACHE_DISABLE; /* \83L\83\83\83b\83V\83\85\8bÖ\8e~ */
+ store_cr0(cr0);
+ }
+
+ i = memtest_sub(start, end);
+
+ if (flg486) {
+ cr0 = load_cr0();
+ cr0 &= ~CR0_CACHE_DISABLE; /* \83L\83\83\83b\83V\83\85\8b\96\89Â */
+ store_cr0(cr0);
+ }
+
+ return i;
+}
+
+DWORD MemMan::memtest_sub(DWORD start, DWORD end)
+{
+ volatile DWORD i, *p, old, pat0 = 0xaa55aa55, pat1 = 0x55aa55aa;
+ for (i = start; i <= end; i += 0x1000) {
+ p = (DWORD *) (i + 0xffc);
+ old = *p; /* \82¢\82¶\82é\91O\82Ì\92l\82ð\8ao\82¦\82Ä\82¨\82 */
+ *p = pat0; /* \82½\82ß\82µ\82É\8f\91\82¢\82Ä\82Ý\82é */
+ *p ^= 0xffffffff; /* \82»\82µ\82Ä\82»\82ê\82ð\94½\93]\82µ\82Ä\82Ý\82é */
+ if (*p != pat1) { /* \94½\93]\8c\8b\89Ê\82É\82È\82Á\82½\82©\81H */
+not_memory:
+ *p = old;
+ break;
+ }
+ *p ^= 0xffffffff; /* \82à\82¤\88ê\93x\94½\93]\82µ\82Ä\82Ý\82é */
+ if (*p != pat0) { /* \8c³\82É\96ß\82Á\82½\82©\81H */
+ goto not_memory;
+ }
+ *p = old; /* \82¢\82¶\82Á\82½\92l\82ð\8c³\82É\96ß\82· */
+ }
+ return i;
+}
+
+
+
+void *MemMan::sys_malloc(size_t size){
+ MEMINFO m;
+ m.addr = malloc(true, true, 0, (size + PAGE_SIZE - 1) / PAGE_SIZE);
+ m.size = size;
+ minfo->Add(m);
+ debugprint("malloced:%p %p %p\n", m.addr, m.size, (size + PAGE_SIZE - 1) / PAGE_SIZE);
+
+ return (void *)m.addr;
+}
+
+void MemMan::sys_free(void *p){
+ DWORD i = 0;
+ for(i = 0; i < minfo->GetCount(); i++){
+ if((*minfo)[i]->addr == (DWORD)p){
+ break;
+ }
+ }
+ if(i == minfo->GetCount()){
+ debugprint("sys_free error");
+ hung();
+ return;
+ }
+ MEMINFO m = *((*minfo)[i]);
+ free(m.addr, (m.size + PAGE_SIZE - 1) / PAGE_SIZE);
+ debugprint("freed:%p %p\n", m.addr, m.size);
+
+ minfo->Remove(i);
+}
--- /dev/null
+#pragma once
+#include <new>
+#include "typedefs.h"
+//#include "ProcessMan.h"
+
+template <class> class Vector;
+
+
+class MemMan
+{
+public:
+ static void Init();
+ static MemMan &Inst(){return *(MemMan *)buf;}
+
+private:
+ MemMan(void);
+ ~MemMan(void);
+ static BYTE buf[];
+ static void* operator new(size_t size, void* pbuf){ return pbuf; }
+
+#pragma pack(push, 1)
+ struct PAGEINFO{
+ BYTE commited:1;
+ BYTE unpageoutable:1;
+ BYTE system:1;
+ DWORD pid;
+ };
+#pragma pack(pop)
+ int pages_for_pageinfo, maxfirst, pagecount;
+ static const DWORD FIRST_BEGIN = 0x00001000;
+ static const DWORD FIRST_END = 0x0009f000;
+ static const DWORD SECOND_BEGIN = 0x00400000;
+
+
+ PAGEINFO *getpageinfo(DWORD i);
+ DWORD getpageaddr(DWORD i);
+ DWORD getpageindex(DWORD addr);
+
+public:
+ DWORD malloc(bool unpageoutable, bool system, DWORD pid, DWORD count = 1);
+ void free(DWORD addr, DWORD count = 1);
+
+ static DWORD neccesarypagecount(DWORD size){
+ return (size + PAGE_SIZE - 1) / PAGE_SIZE;
+ }
+private:
+ DWORD memsize;
+
+ DWORD memtest(DWORD start, DWORD end);
+ DWORD memtest_sub(DWORD start, DWORD end);
+
+public:
+ void *sys_malloc(size_t size);
+ void sys_free(void *p);
+private:
+
+ struct MEMINFO{
+ DWORD addr, size;
+ };
+ Vector<MEMINFO> *minfo;
+
+};
+
+
+class phymemdeleter {
+ DWORD count;
+public:
+ phymemdeleter(DWORD count = 1):count(count){
+ }
+ template <class T>
+ void operator ()(T *p){
+ MemMan::Inst().free((DWORD)p, count);
+ }
+};
--- /dev/null
+#include "ProcessMan.h"
+#include "filesystem.h"
+#include "desctable.h"
+#include "debug.h"
+#include "naskfunc.h"
+#include <string.h>
+
+BYTE ProcessMan::buf[sizeof(ProcessMan)];
+
+void ProcessMan::Init(){
+ new ((void *)buf) ProcessMan();
+}
+
+ProcessMan::ProcessMan(void)
+ :curpid(1), plist(0), sysdll(0)
+{
+ //Process sys(0, SYSTEM_PAGE_DIRECTORY_PHY);
+ //plist.Add(sys);
+
+ //sysdll.Add(DLL(L"c:\\windows\\system32\\ntdll.dll"));
+ sysdll.Add(DLL(L"c:\\windows\\system32\\ntdll.dll"));
+}
+
+
+ProcessMan::~ProcessMan(void)
+{
+}
+
+
+void ProcessMan::CreateProcess(const wchar_t *filename){
+ //FileSystem::File *file = FileSystem::Inst().CreateFile(filename, 0, 0, 0, 0, 0, 0);
+ DWORD newpid = curpid++;
+ DWORD pagedir = MemMan::Inst().malloc(true, true, newpid);
+
+ Process p(newpid, pagedir, sysdll);
+
+ plist.Add(p);
+}
+
+
+Process::Process(DWORD pid, DWORD cr3, Vector<DLL> &sysdll):pid(pid),cr3(cr3),MainThread(NULL){
+ DWORD *ppagedir = getppagedir();
+ for(int i = 0; i < 0x400; i++){
+ ppagedir[i] = 0;
+ }
+
+ //dt->set_gatedesc();
+ for(DWORD i = 0; i < sysdll.GetCount(); i++){
+ sysdll[i]->setpagedir(this);
+ }
+
+
+ DWORD eip = 0;
+ if(!sysdll[0]->getprocaddr("entry", &eip)){
+ debugprint("ntdll does not have func 'entry'");
+ hung();
+ }
+ MainThread = ThreadMan::Inst().CreateThread(this, eip);
+
+}
+
+Process::~Process(){
+}
+
+DWORD Process::VirtualAlloc(DWORD addr, bool phy, DWORD phyaddr, bool isreadonly
+ , DWORD pagecount, bool reserve, bool onlycommit)
+{
+ if(onlycommit){
+ for(DWORD i = 0; i < pagecount; i++){
+ DWORD *pagetableent = getpagetableent(addr + i * PAGE_SIZE);
+ *pagetableent |= ePAGE_TABLE_ENT::COMMIT;
+
+ }
+ }else{
+ DWORD i = addr;
+ for(i = addr; i < END_OF_VMEM; i += PAGE_SIZE){
+ bool empty = true;
+ DWORD j = 0;
+ for(j = 0; j < pagecount; j++){
+ DWORD *pagetableent = getpagetableent(i + j * PAGE_SIZE);
+ if(*pagetableent & ePAGE_TABLE_ENT::RESERVE){
+ //\97\\96ñ\8dÏ\82Ý
+ empty = false;
+ break;
+ }else{
+ //\90V\82½\82É\83R\83~\83b\83g\82Å\82«\82é
+ }
+ }
+ if(empty){
+ break;
+ }
+ i += j * PAGE_SIZE;
+ }
+ if(i >= END_OF_VMEM){
+ return 0;
+ }
+ //DWORD *pagetableent = getpagetableent(addr);
+ for(DWORD j = 0; j < pagecount; j++){
+ DWORD *pagetableent = getpagetableent(i + j * PAGE_SIZE);
+ //\90V\82½\82É\83R\83~\83b\83g\82·\82é
+ *pagetableent |= 0;
+ if(!reserve){
+ //\96{\93\96\82É\97\\96ñ\82Ì\82Æ\82«\82ÍRESERVE\82ÆCOMMIT\82ð\97¼\95û\97§\82Ä\82é
+ *pagetableent |= ePAGE_TABLE_ENT::COMMIT;
+ }
+ *pagetableent |= ePAGE_TABLE_ENT::RESERVE;
+ *pagetableent |= (isreadonly ? 0 : ePAGE_TABLE_ENT::READ_WRITE);
+ if(phy){
+ //\95¨\97\9d\83A\83h\83\8c\83X\82ª\8ew\92è\82³\82ê\82Ä\82¢\82é\82Æ\82«\82Í\82»\82ê\82ð\8ew\82·\82æ\82¤\82É\82·\82é
+ *pagetableent |= phyaddr;
+ }else{
+ //\8dÅ\8f\89\82Ì#PF\8e\9e\82É\95¨\97\9d\83\81\83\82\83\8a\82ð\8a\84\82è\93\96\82Ä\82é
+ *pagetableent |= ePAGE_TABLE_ENT::NEW_PAGE;
+ }
+ }
+ }else{
+ }
+}
+
+DWORD *Process::getpagetableent(DWORD addr){
+ DWORD *ppagedir = getppagedir();
+ DWORD *pagedir = &ppagedir[addr >> 22];
+ if(*pagedir & ePAGE_DIR_ENT::PRESENT){
+ //\83f\83B\83\8c\83N\83g\83\8a\83G\83\93\83g\83\8a(\83y\81[\83W\83e\81[\83u\83\8b)\82ª\8aù\82É\91¶\8dÝ\82µ\82Ä\82¢\82½\82ç\82à\82¤\8dì\82ç\82È\82¢
+ }else{
+ //\83y\81[\83W\83e\81[\83u\83\8b\82ª\82È\82¢\82Ì\82Å\8dì\90¬
+ *pagedir = 0;
+ *pagedir |= ePAGE_DIR_ENT::PRESENT;
+ *pagedir |= ePAGE_DIR_ENT::READ_WRITE;
+ //*pagedir |= ePAGE_DIR_ENT::;
+ DWORD *pagetable = (DWORD *)MemMan::Inst().malloc(true, true, pid);
+ for(int i = 0; i < 0x400; i++){
+ pagetable[i] = 0;
+ }
+ *pagedir |= ((DWORD)pagetable) & ~0xfff;
+ }
+ DWORD *pagetable = (DWORD *)((*pagedir) & ~0xfff);
+ DWORD *pagetableent = &pagetable[(addr >> 12) & 0x3ff];
+ return pagetableent;
+}
+
+
+DLL::DLL(const wchar_t *filename){
+ DWORD e_lfanew = 0;
+ DWORD image_base = 0;
+ file.reset(FileSystem::Inst().CreateFile(filename, 0, 0, 0, 0, 0, 0));
+ if(file.get() == NULL){
+ debugprint("could not open file in DLL::DLL");
+ hung();
+ }
+
+ header.reset((BYTE *)MemMan::Inst().malloc(true, true, 0)
+ , phymemdeleter(1));
+ file->Read(header.get(), PAGE_SIZE < file->Size() ? PAGE_SIZE : file->Size());
+
+ DWORD count = MemMan::neccesarypagecount(nt()->OptionalHeader.SizeOfImage);
+ BYTE *newheader = (BYTE *)MemMan::Inst().malloc(true, true, 0
+ , count);
+ debugprint("size:%p %p\n", nt()->OptionalHeader.SizeOfImage, count);
+
+ memset(newheader, 0, count * PAGE_SIZE);
+ file->Seek(0, FileSystem::File::SEEK_ORG::SET);
+ file->Read(newheader
+ , nt()->OptionalHeader.SizeOfHeaders < file->Size()
+ ? nt()->OptionalHeader.SizeOfHeaders : file->Size());
+ debugprint("size2:%p\n", nt()->OptionalHeader.SizeOfHeaders);
+
+ header.reset(newheader, phymemdeleter(count));
+
+ //debugprint("test:%c%c %p\n", header.get(), header.get() + 1, nt()->FileHeader.NumberOfSections);
+
+ for(int i = 0; i < nt()->FileHeader.NumberOfSections; i++){
+ debugprint("s:%d %d %d\n", i, sec(i)->VirtualAddress, sec(i)->SizeOfRawData);
+ file->Seek(sec(i)->PointerToRawData, FileSystem::File::SEEK_ORG::SET);
+ file->Read(header.get() + sec(i)->VirtualAddress, sec(i)->SizeOfRawData);
+ }
+}
+
+DLL::~DLL(){
+}
+
+bool DLL::getprocaddr(const char *name, DWORD *addr){
+ IMAGE_EXPORT_DIRECTORY *e = (IMAGE_EXPORT_DIRECTORY *)(header.get()
+ + nt()->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
+ bool found = false;
+ debugprint("get:%p %p %p\n", e->AddressOfFunctions, e->AddressOfNameOrdinals, e->Base);
+ debugprint("dllname:%s\n", e->Name + header.get());
+
+ DWORD *names = (DWORD *)(header.get() + e->AddressOfNames);
+ for(DWORD i = 0; i < e->NumberOfNames; i++){
+ char *s = (char *)(header.get() + names[i]);
+ //debugprint("%s\n", s);
+ if(strcmp(s, name) == 0){
+ WORD *nameords = (WORD *)(header.get() + e->AddressOfNameOrdinals);
+ *addr = ((DWORD *)(header.get() + e->AddressOfFunctions))[nameords[i]];
+ *addr += nt()->OptionalHeader.ImageBase;
+ found = true;
+ break;
+ }
+ }
+ return found;
+}
+
+
+void DLL::setpagedir(Process *p){
+ DWORD base = nt()->OptionalHeader.ImageBase;
+ p->VirtualAlloc(base, true, (DWORD)header.get(), true);
+}
--- /dev/null
+#pragma once
+#include "typedefs.h"
+#include "Vector.h"
+#include "FileSystem.h"
+#include "desctable.h"
+#include "ThreadMan.h"
+#include "MemMan.h"
+#include <boost\shared_ptr.hpp>
+
+namespace ePAGE_DIR_ENT{
+enum ePAGE_DIR_ENT{
+ PRESENT = 1 << 0,
+ READ_WRITE = 1 << 1,
+ USER_SUPER_VISOR = 1 << 2,
+ ACCESS = 1 << 5,
+ DIRTY = 1 << 6,
+ PAGE_SIZE_4M = 1 << 7,
+ GLOBAL = 1 << 8
+};
+}
+
+namespace ePAGE_TABLE_ENT{
+enum ePAGE_TABLE_ENT{
+ PRESENT = 1 << 0,
+ READ_WRITE = 1 << 1,
+ USER_SUPER_VISOR = 1 << 2,
+ USABLE1 = 1 << 9,
+ COMMIT = USABLE1,
+ USABLE2 = 1 << 10,
+ RESERVE = USABLE2,
+ USABLE3 = 1 << 11,
+ NEW_PAGE = USABLE3
+};
+}
+
+const DWORD END_OF_VMEM = 0x80000000;
+
+
+class Process;
+
+class DLL{
+public:
+ DLL(const wchar_t *filename);
+ ~DLL();
+
+ void setpagedir(Process *p);
+ bool getprocaddr(const char *name, DWORD *addr);
+private:
+ //struct SECTION{
+ // BYTE *phyaddr;
+ // DWORD size;
+ //};
+ //Vector<SECTION> sections;
+ boost::shared_ptr<FileSystem::File> file;
+ boost::shared_ptr<BYTE> header;
+ IMAGE_DOS_HEADER *dos(){return (IMAGE_DOS_HEADER *)header.get();}
+ IMAGE_NT_HEADERS *nt(){return (IMAGE_NT_HEADERS *)(header.get() + dos()->e_lfanew);}
+ IMAGE_SECTION_HEADER *sec(DWORD i = 0){
+ return (IMAGE_SECTION_HEADER *)(header.get() + dos()->e_lfanew
+ + sizeof(IMAGE_NT_HEADERS) + sizeof(IMAGE_SECTION_HEADER) * i);
+ }
+
+
+};
+
+class Process{
+public:
+ Process(DWORD pid, DWORD cr3, Vector<DLL> &sysdll);
+ ~Process();
+
+ DWORD VirtualAlloc(DWORD addr, bool phy = false
+ , DWORD phyaddr = 0, bool isreadonly = false
+ , DWORD pagecount = 1, bool reserve = false, bool onlycommit = false);
+
+ DWORD *getppagedir(){
+ return (DWORD *)(cr3 & ~0x3fff);
+ }
+
+ DWORD getpid(){
+ return pid;
+ }
+
+ DWORD getcr3(){
+ return cr3;
+ }
+private:
+ DWORD pid;
+ DWORD cr3;
+
+ Thread *MainThread;
+
+ DWORD *getpagetableent(DWORD addr);
+};
+
+class ProcessMan
+{
+public:
+ static void Init();
+ static ProcessMan &Inst(){
+ return *(ProcessMan *)buf;
+ }
+
+ void CreateProcess(const wchar_t *filename);
+
+ Process *SysProcess(){
+ return plist.Get(0);
+ }
+private:
+ static BYTE buf[];
+ static void* operator new(size_t size, void* pbuf){ return pbuf; }
+ ProcessMan(void);
+ ~ProcessMan(void);
+
+ DWORD curpid;
+ Vector<Process> plist;
+
+ Vector<DLL> sysdll;
+};
+
--- /dev/null
+#include "ProcessMem.h"
+
+
+ProcessMem::ProcessMem(void):minfo(0)
+{
+}
+
+
+ProcessMem::~ProcessMem(void)
+{
+}
+
+
+void *ProcessMem::sys_malloc(size_t size){
+ count++;
+ minfo[count - 1].size = (size + 0x1000 - 1) / 0x1000 * 0x1000;
+ //return (void *)(minfo[count - 1].addr = alloc(minfo[count - 1].size));
+ return 0;
+}
+
+void ProcessMem::sys_free(void *p){
+ int i = 0;
+ for(i = 0; i < count; i++){
+ if(minfo[i].addr == (DWORD)p){
+ break;
+ }
+ }
+ if(i == count){
+ debugprint("sys_free error");
+ hung();
+ return;
+ }
+ for(; i < count; i++){
+ minfo[i] = minfo[i + 1];
+ }
+ count--;
+}
--- /dev/null
+#pragma once
+#include "Vector.h"
+
+
+class ProcessMem
+{
+public:
+ ProcessMem(void);
+ ~ProcessMem(void);
+
+ void *sys_malloc(size_t size);
+ void sys_free(void *p);
+private:
+
+ struct MEMINFO{
+ DWORD addr, size;
+ };
+ Vector<MEMINFO> minfo;
+ int count;
+
+};
--- /dev/null
+#include "ThreadMan.h"
+#include "debug.h"
+#include "typedefs.h"
+#include "ProcessMan.h"
+#include "naskfunc.h"
+#include <stdlib.h>
+#include <string.h>
+
+BYTE ThreadMan::buf[sizeof(ThreadMan)];
+
+
+Thread::Thread(Process *p, DWORD tid, DWORD eip)
+:p(p),tid(tid)
+{
+ DWORD gdtsize = 0x400, idtsize = 0x800;
+ dtbuf.reset((BYTE *)MemMan::Inst().malloc(true, false, p->getpid()));
+
+ DWORD dtva = p->VirtualAlloc(0xc0000000, true, (DWORD)dtbuf.get());
+
+ dt.init((DWORD)dtbuf.get(), ((DWORD)dtbuf.get()) + gdtsize
+ , gdtsize - 1, idtsize - 1);
+
+ TSS32 *tsslist = (TSS32 *)(((DWORD)dtbuf.get()) + gdtsize + idtsize);
+ tss.reset(&tsslist[0], placementdeleter());
+ systss.reset(&tsslist[1], placementdeleter());
+ memset(tss.get(), 0, sizeof(TSS32));
+ memset(systss.get(), 0, sizeof(TSS32));
+
+ debugprint("systss:%p\n", systss.get());
+
+ dt.init_app_gdtidt(tss.get(), systss.get());
+
+
+ //\83X\83^\83b\83N\97Ì\88æ\82Æ\82µ\82Ä1MB\83\8a\83U\81[\83u
+ DWORD esp = p->VirtualAlloc(0xf00000, false, 0, false, 0x100);
+ p->VirtualAlloc(esp, false, 0, false, 2, false, true);
+
+ tss->ldtr = 0;
+ tss->iomap = 0x40000000;
+ tss->fs = tss->ds = tss->es = tss->gs = tss->ss = 1 << 3;
+ tss->cs = 2 << 3;
+ tss->esp = esp;
+ //tss->cr3 = p->getcr3();
+ tss->cr3 = SYSTEM_PAGE_DIRECTORY_PHY;
+ tss->eflags = 0x00000202;
+ tss->eax = tss->ecx = tss->edx = tss->edi = tss->esi = tss->ebp = tss->ebx = 0;
+ tss->eip = eip;
+ tss->eax = dtva;
+ tss->ecx = p->getcr3();
+
+ systss->ldtr = 0;
+ systss->iomap = 0x40000000;
+ systss->cr3 = SYSTEM_PAGE_DIRECTORY_PHY;
+}
+
+Thread::~Thread(){
+}
+
+
+void Thread::seteip(DWORD eip){
+ tss->eip = eip;
+}
+
+void Thread::SwitchThread(){
+ store_cr3(p->getcr3());
+ dt.load();
+ dt.load_systr();
+ dt.jump_to_task();
+}
+
+void ThreadMan::Init(void)
+{
+ new ((void *)buf) ThreadMan();
+}
+
+ThreadMan::ThreadMan(void)
+:thlist(0)
+{
+ curtid = 1;
+ curthread = 0;
+}
+
+
+ThreadMan::~ThreadMan(void)
+{
+}
+
+Thread *ThreadMan::CreateThread(Process *p, DWORD eip){
+ Thread t(p, curtid++, eip);
+ thlist.Add(t);
+ return thlist[thlist.GetCount() - 1];
+}
+
+void ThreadMan::SwitchThread(){
+ if(curthread == 0){
+ if(thlist.GetCount() < 1){
+ return;
+ }
+ Thread *t = thlist[0];
+ t->SwitchThread();
+ }
+
+}
--- /dev/null
+#pragma once
+#include <boost\shared_ptr.hpp>
+#include "desctable.h"
+#include "MemMan.h"
+#include "Vector.h"
+
+class Process;
+
+class Thread{
+public:
+ Thread(Process *p, DWORD tid, DWORD eip);
+ ~Thread();
+
+ void seteip(DWORD eip);
+ const BYTE *gettss(){
+ return (BYTE *)tss.get();
+ }
+ Process *GetProcess(){
+ return p;
+ }
+
+ //\82±\82Ì\83X\83\8c\83b\83h\82Ö\83X\83C\83b\83`\82·\82é
+ void SwitchThread();
+
+private:
+ boost::shared_ptr<BYTE> dtbuf;
+ boost::shared_ptr<TSS32> tss;
+ boost::shared_ptr<TSS32> systss;
+ GDT_IDT dt;
+ Process *p;
+ DWORD tid;
+};
+
+class ThreadMan
+{
+public:
+ static void Init();
+ static ThreadMan &Inst(){
+ return *(ThreadMan *)buf;
+ }
+
+
+ Thread *CreateThread(Process *p, DWORD eip);
+
+ void SwitchThread();
+private:
+ static BYTE buf[];
+ static void* operator new(size_t size, void* pbuf){ return pbuf; }
+ ThreadMan(void);
+ ~ThreadMan(void);
+
+ Vector<Thread> thlist;
+ DWORD curtid;
+
+ DWORD curthread;
+};
+
--- /dev/null
+#include "Vector.h"
+
+
+Vector::Vector(void)
+{
+}
+
+
+Vector::~Vector(void)
+{
+}
--- /dev/null
+#pragma once
+#include "MemMan.h"
+#include <stdio.h>
+
+template<class T>
+class Vector
+{
+public:
+ Vector(DWORD pid):pid(pid), head(NULL){
+ head = (ELEM *)MemMan::Inst().malloc(true, true, pid);
+ head->next = NULL;
+ count = 0;
+ }
+ ~Vector(void){
+ }
+
+ void Add(T e){
+ DWORD elemnum = count / ELEM::numperelem;
+ ELEM **p = GetElem(elemnum);
+ if(count % ELEM::numperelem == 0){
+ *p = (ELEM *)MemMan::Inst().malloc(true, true, pid);
+ }
+ (*p)->a[count % ELEM::numperelem] = e;
+ count++;
+ }
+
+ T *Get(DWORD index){
+ DWORD elemnum = index / ELEM::numperelem;
+ ELEM **p = GetElem(elemnum);
+ return &(*p)->a[index % ELEM::numperelem];
+ }
+
+ T* operator [](size_t i){
+ return Get(i);
+ }
+
+ DWORD GetCount(){
+ return count;
+ }
+
+ void Remove(DWORD index){
+ for(DWORD i = index; i < count - 1; i++){
+ *Get(i) = *Get(i + 1);
+ }
+ Get(count - 1)->~T();
+ count--;
+ if(count % ELEM::numperelem == 0){
+ DWORD elemnum = index / ELEM::numperelem;
+ ELEM **p = GetElem(elemnum);
+ MemMan::Inst().free((DWORD)*p);
+ *p = NULL;
+ }
+ }
+private:
+ DWORD pid;
+ struct ELEM{
+ ELEM *next;
+ static const DWORD numperelem = (PAGE_SIZE - sizeof(ELEM *)) / sizeof(T);
+ T a[numperelem];
+ };
+ ELEM *head;
+ DWORD count;
+
+ ELEM **GetElem(DWORD elemnum){
+ ELEM **p = &head;
+ for(DWORD i = 0; i < elemnum; i++){
+ p = &((*p)->next);
+ }
+ return p;
+ }
+};
+
--- /dev/null
+; haribote-os boot asm
+; TAB=4
+
+
+VBEMODE EQU 0x118 ; 1024 x 768 x 24bitカラー
+BITPERPIXEL EQU 24
+MEMORYMODEL EQU 6 ; 4ならインデックスカラー 6ならダイレクトカラー
+; (画面モード一覧)
+; 0x100 : 640 x 400 x 8bitカラー
+; 0x101 : 640 x 480 x 8bitカラー
+; 0x103 : 800 x 600 x 8bitカラー
+; 0x105 : 1024 x 768 x 8bitカラー
+; 0x107 : 1280 x 1024 x 8bitカラー
+; 0x118 : 1024 x 768 x 24bitカラー
+
+
+BOOTPACK_CODE EQU 0x00280000 ; bootpackのロード先
+
+;DSKCAC EQU 0x00100000 ; ディスクキャッシュの場所
+;DSKCAC0 EQU 0x00008000 ; ディスクキャッシュの場所(リアルモード)
+
+SYSPAGEDIR EQU 0x00100000
+
+; BOOT_INFO関係
+BOOTDRIVE EQU 0x0ff0 ; ブートセクタが設定する
+LEDS EQU 0x0ff1
+VMODE EQU 0x0ff2 ; 色数に関する情報。何ビットカラーか?
+SCRNX EQU 0x0ff4 ; 解像度のX
+SCRNY EQU 0x0ff6 ; 解像度のY
+VRAM EQU 0x0ff8 ; グラフィックバッファの開始番地
+
+ ORG 0xc200 ; このプログラムがどこに読み込まれるのか
+
+;ブートデバイスを保存
+ mov [BOOTDRIVE], dl
+; VBE存在確認
+
+ MOV AX,0x9000
+ MOV ES,AX
+ MOV DI,0
+ MOV AX,0x4f00
+ INT 0x10
+ CMP AX,0x004f
+ JNE scrn320
+
+; VBEのバージョンチェック
+
+ MOV AX,[ES:DI+4]
+ CMP AX,0x0200
+ JB scrn320 ; if (AX < 0x0200) goto scrn320
+
+; 画面モード情報を得る
+
+ MOV CX,VBEMODE
+ MOV AX,0x4f01
+ INT 0x10
+ CMP AX,0x004f
+ JNE scrn320
+
+; 画面モード情報の確認
+
+ CMP BYTE [ES:DI+0x19],BITPERPIXEL
+ JNE scrn320
+ CMP BYTE [ES:DI+0x1b],MEMORYMODEL
+ JNE scrn320
+ MOV AX,[ES:DI+0x00]
+ AND AX,0x0080
+ JZ scrn320 ; モード属性のbit7が0だったのであきらめる
+
+; 画面モードの切り替え
+
+ MOV BX,VBEMODE | 0x4000
+ MOV AX,0x4f02
+ INT 0x10
+ MOV BYTE [VMODE],BITPERPIXEL ; 画面モードをメモする(C言語が参照する)
+ MOV AX,[ES:DI+0x12]
+ MOV [SCRNX],AX
+ MOV AX,[ES:DI+0x14]
+ MOV [SCRNY],AX
+ MOV EAX,[ES:DI+0x28]
+ MOV [VRAM],EAX
+ JMP keystatus
+
+scrn320:
+ MOV AL,0x13 ; VGAグラフィックス、320x200x8bitカラー
+ MOV AH,0x00
+ INT 0x10
+ MOV BYTE [VMODE],8 ; 画面モードをメモする(C言語が参照する)
+ MOV WORD [SCRNX],320
+ MOV WORD [SCRNY],200
+ MOV DWORD [VRAM],0x000a0000
+
+; キーボードのLED状態をBIOSに教えてもらう
+
+keystatus:
+ MOV AH,0x02
+ INT 0x16 ; keyboard BIOS
+ MOV [LEDS],AL
+
+; PICが一切の割り込みを受け付けないようにする
+; AT互換機の仕様では、PICの初期化をするなら、
+; こいつをCLI前にやっておかないと、たまにハングアップする
+; PICの初期化はあとでやる
+
+ MOV AL,0xff
+ OUT 0x21,AL
+ NOP ; OUT命令を連続させるとうまくいかない機種があるらしいので
+ OUT 0xa1,AL
+
+ CLI ; さらにCPUレベルでも割り込み禁止
+
+; CPUから1MB以上のメモリにアクセスできるように、A20GATEを設定
+
+ CALL waitkbdout
+ MOV AL,0xd1
+ OUT 0x64,AL
+ CALL waitkbdout
+ MOV AL,0xdf ; enable A20
+ OUT 0x60,AL
+ CALL waitkbdout
+
+;[INSTRSET "i486p"] ; 486の命令まで使いたいという記述
+
+; プロテクトモード移行
+; page size = 4mb or 4kb (混在) pys addr size = 32 bit
+
+ LGDT [GDTR0] ; 暫定GDTを設定
+ MOV EAX,CR0
+ ;or eax, 1 << 0x1f ; paging flag
+ ;AND EAX,0x7fffffff ; bit31を0にする(ページング禁止のため)
+ OR EAX,0x00000001 ; bit0を1にする(プロテクトモード移行のため)
+ MOV CR0,EAX
+ JMP pipelineflush
+pipelineflush:
+;ページディレクトリ等の設定
+
+ xor eax, eax
+ mov ecx, 0
+
+ align 16
+pagedirloop:
+ mov eax, ecx
+ shl eax, 22
+ or eax, ((1 << 8)|(1 << 7)|(1 << 1)|1)
+ mov [SYSPAGEDIR + 4 * ecx], eax
+
+ inc ecx
+ cmp ecx, 0x400
+ jb pagedirloop
+
+
+;ページングの設定
+ mov eax, cr3
+ or eax, SYSPAGEDIR
+ mov cr3, eax
+
+ mov eax, cr4
+ and eax, ~(1 << 5) ; physical addr ext(pae) を無効に
+ or eax, 1 << 4; enable paging size ext(pse)
+ mov cr4, eax
+
+ ;TLB無効化?
+ mov eax, cr3
+ mov cr3, eax
+
+ MOV EAX,CR0
+ or eax, 1 << 0x1f ; paging flag
+ MOV CR0,EAX
+ JMP pipelineflush2
+pipelineflush2:
+
+ MOV AX,1*8 ; 読み書き可能セグメント32bit
+ MOV DS,AX
+ MOV ES,AX
+ MOV FS,AX
+ MOV GS,AX
+ MOV SS,AX
+
+
+; ついでにディスクデータも本来の位置へ転送
+
+; まずはブートセクタから
+
+ ;MOV ESI,0x7c00 ; 転送元
+ ;MOV EDI,DSKCAC ; 転送先
+ ;MOV ECX,512/4
+ ;CALL memcpy
+
+; asmheadでしなければいけないことは全部し終わったので、
+; あとはbootpackに任せる
+
+; bootpackの起動
+
+ MOV EBX, bootpack
+ MOV ECX, [EBX+0x3C] ; lfanew
+ add ebx, ecx ; nt header 32
+ mov ax, [ebx + 6] ; number of section
+ mov ebp, [ebx + 0x28] ; entry point
+ add ebp, BOOTPACK_CODE
+ add ebx, 0xf8 ; section header
+readsection:
+ mov edi, [ebx + 0x0C] ; virtual addr
+ mov ecx, [ebx + 0x10] ; size of raw data
+ mov esi, [ebx + 0x14] ; pointer to raw data
+ add edi, BOOTPACK_CODE ; このセクションのコピー先
+ add esi, bootpack ; コピー元
+ cld
+
+ a32 rep movsb
+ ;db 0xf3
+ ;db 0x67
+ ;db 0xa4
+ ;rep dword movsb ; f3 a4
+
+
+ add ebx, 0x28 ; section header size
+ dec ax
+ jnz readsection
+
+
+ MOV ESP, 0x00380000 ; スタック初期値
+
+ push dword 2*8
+ push ebp
+
+ ;sti
+
+
+ o32 retf
+ ; call eipload
+; eipload:
+ ; pop ax
+ ; movzx eax, ax
+ ; mov [eax+0x15], ebp
+ ; mov dword [eax+0x19], 2*8
+
+ ; jmp dword 0:0
+ ; db 0,0
+
+waitkbdout:
+ IN AL,0x64
+ AND AL,0x02
+ IN AL,0x60 ; から読み(受信バッファが悪さをしないように)
+ JNZ waitkbdout ; ANDの結果が0でなければwaitkbdoutへ
+ RET
+
+memcpy:
+ push eax
+memcpy_loop:
+ MOV EAX,[ESI]
+ ADD ESI,4
+ MOV [EDI],EAX
+ ADD EDI,4
+ SUB ECX,1
+ JNZ memcpy_loop ; 引き算した結果が0でなければmemcpyへ
+ pop eax
+ RET
+; memcpyはアドレスサイズプリフィクスを入れ忘れなければ、ストリング命令でも書ける
+
+
+ ALIGNB 16
+GDT0:
+ RESB 8 ; ヌルセレクタ
+ db 0xff,0xff,0x00,0x00,0x00,0x92,0xcf,0x00 ; 読み書き可能セグメント32bit
+ ;db 0xff,0xff,0x00,0x00,0x28,0x9a,0x4f,0x00 ; 実行可能セグメント32bit(bootpack用)
+ db 0xff,0xff,0x00,0x00,0x00,0x9a,0xcf,0x00 ; 実行可能セグメント32bit(bootpack用)
+
+ DW 0
+GDTR0:
+ DW 8*3-1
+ DD GDT0
+
+ ALIGNB 16
+bootpack:
--- /dev/null
+ 1 ; haribote-os boot asm
+ 2 ; TAB=4
+ 3
+ 4
+ 5 VBEMODE EQU 0x118 ; 1024 x 768 x 24bitカラー
+ 6 BITPERPIXEL EQU 24
+ 7 MEMORYMODEL EQU 6 ; 4ならインデックスカラー 6ならダイレクトカラー
+ 8 ; (画面モード一覧)
+ 9 ; 0x100 : 640 x 400 x 8bitカラー
+ 10 ; 0x101 : 640 x 480 x 8bitカラー
+ 11 ; 0x103 : 800 x 600 x 8bitカラー
+ 12 ; 0x105 : 1024 x 768 x 8bitカラー
+ 13 ; 0x107 : 1280 x 1024 x 8bitカラー
+ 14 ; 0x118 : 1024 x 768 x 24bitカラー
+ 15
+ 16
+ 17 BOOTPACK_CODE EQU 0x00280000 ; bootpackのロード先
+ 18
+ 19 ;DSKCAC EQU 0x00100000 ; ディスクキャッシュの場所
+ 20 ;DSKCAC0 EQU 0x00008000 ; ディスクキャッシュの場所(リアルモード)
+ 21
+ 22 SYSPAGEDIR EQU 0x00100000
+ 23
+ 24 ; BOOT_INFO関係
+ 25 BOOTDRIVE EQU 0x0ff0 ; ブートセクタが設定する
+ 26 LEDS EQU 0x0ff1
+ 27 VMODE EQU 0x0ff2 ; 色数に関する情報。何ビットカラーか?
+ 28 SCRNX EQU 0x0ff4 ; 解像度のX
+ 29 SCRNY EQU 0x0ff6 ; 解像度のY
+ 30 VRAM EQU 0x0ff8 ; グラフィックバッファの開始番地
+ 31
+ 32 ORG 0xc200 ; このプログラムがどこに読み込まれるのか
+ 33
+ 34 ;ブートデバイスを保存
+ 35 00000000 8816F00F mov [BOOTDRIVE], dl
+ 36 ; VBE存在確認
+ 37
+ 38 00000004 B80090 MOV AX,0x9000
+ 39 00000007 8EC0 MOV ES,AX
+ 40 00000009 BF0000 MOV DI,0
+ 41 0000000C B8004F MOV AX,0x4f00
+ 42 0000000F CD10 INT 0x10
+ 43 00000011 3D4F00 CMP AX,0x004f
+ 44 00000014 7553 JNE scrn320
+ 45
+ 46 ; VBEのバージョンチェック
+ 47
+ 48 00000016 268B4504 MOV AX,[ES:DI+4]
+ 49 0000001A 3D0002 CMP AX,0x0200
+ 50 0000001D 724A JB scrn320 ; if (AX < 0x0200) goto scrn320
+ 51
+ 52 ; 画面モード情報を得る
+ 53
+ 54 0000001F B91801 MOV CX,VBEMODE
+ 55 00000022 B8014F MOV AX,0x4f01
+ 56 00000025 CD10 INT 0x10
+ 57 00000027 3D4F00 CMP AX,0x004f
+ 58 0000002A 753D JNE scrn320
+ 59
+ 60 ; 画面モード情報の確認
+ 61
+ 62 0000002C 26807D1918 CMP BYTE [ES:DI+0x19],BITPERPIXEL
+ 63 00000031 7536 JNE scrn320
+ 64 00000033 26807D1B06 CMP BYTE [ES:DI+0x1b],MEMORYMODEL
+ 65 00000038 752F JNE scrn320
+ 66 0000003A 268B05 MOV AX,[ES:DI+0x00]
+ 67 0000003D 258000 AND AX,0x0080
+ 68 00000040 7427 JZ scrn320 ; モード属性のbit7が0だったのであきらめる
+ 69
+ 70 ; 画面モードの切り替え
+ 71
+ 72 00000042 BB1841 MOV BX,VBEMODE | 0x4000
+ 73 00000045 B8024F MOV AX,0x4f02
+ 74 00000048 CD10 INT 0x10
+ 75 0000004A C606F20F18 MOV BYTE [VMODE],BITPERPIXEL ; 画面モードをメモする(C言語が参照する)
+ 76 0000004F 268B4512 MOV AX,[ES:DI+0x12]
+ 77 00000053 A3F40F MOV [SCRNX],AX
+ 78 00000056 268B4514 MOV AX,[ES:DI+0x14]
+ 79 0000005A A3F60F MOV [SCRNY],AX
+ 80 0000005D 26668B4528 MOV EAX,[ES:DI+0x28]
+ 81 00000062 66A3F80F MOV [VRAM],EAX
+ 82 00000066 E92000 JMP keystatus
+ 83
+ 84 scrn320:
+ 85 00000069 B013 MOV AL,0x13 ; VGAグラフィックス、320x200x8bitカラー
+ 86 0000006B B400 MOV AH,0x00
+ 87 0000006D CD10 INT 0x10
+ 88 0000006F C606F20F08 MOV BYTE [VMODE],8 ; 画面モードをメモする(C言語が参照する)
+ 89 00000074 C706F40F4001 MOV WORD [SCRNX],320
+ 90 0000007A C706F60FC800 MOV WORD [SCRNY],200
+ 91 00000080 66C706F80F00000A00 MOV DWORD [VRAM],0x000a0000
+ 92
+ 93 ; キーボードのLED状態をBIOSに教えてもらう
+ 94
+ 95 keystatus:
+ 96 00000089 B402 MOV AH,0x02
+ 97 0000008B CD16 INT 0x16 ; keyboard BIOS
+ 98 0000008D A2F10F MOV [LEDS],AL
+ 99
+ 100 ; PICが一切の割り込みを受け付けないようにする
+ 101 ; AT互換機の仕様では、PICの初期化をするなら、
+ 102 ; こいつをCLI前にやっておかないと、たまにハングアップする
+ 103 ; PICの初期化はあとでやる
+ 104
+ 105 00000090 B0FF MOV AL,0xff
+ 106 00000092 E621 OUT 0x21,AL
+ 107 00000094 90 NOP ; OUT命令を連続させるとうまくいかない機種があるらしいので
+ 108 00000095 E6A1 OUT 0xa1,AL
+ 109
+ 110 00000097 FA CLI ; さらにCPUレベルでも割り込み禁止
+ 111
+ 112 ; CPUから1MB以上のメモリにアクセスできるように、A20GATEを設定
+ 113
+ 114 00000098 E8F600 CALL waitkbdout
+ 115 0000009B B0D1 MOV AL,0xd1
+ 116 0000009D E664 OUT 0x64,AL
+ 117 0000009F E8EF00 CALL waitkbdout
+ 118 000000A2 B0DF MOV AL,0xdf ; enable A20
+ 119 000000A4 E660 OUT 0x60,AL
+ 120 000000A6 E8E800 CALL waitkbdout
+ 121
+ 122 ;[INSTRSET "i486p"] ; 486の命令まで使いたいという記述
+ 123
+ 124 ; プロテクトモード移行
+ 125 ; page size = 4mb or 4kb (混在) pys addr size = 32 bit
+ 126
+ 127 000000A9 0F0116[DA01] LGDT [GDTR0] ; 暫定GDTを設定
+ 128 000000AE 0F20C0 MOV EAX,CR0
+ 129 ;or eax, 1 << 0x1f ; paging flag
+ 130 ;AND EAX,0x7fffffff ; bit31を0にする(ページング禁止のため)
+ 131 000000B1 660D01000000 OR EAX,0x00000001 ; bit0を1にする(プロテクトモード移行のため)
+ 132 000000B7 0F22C0 MOV CR0,EAX
+ 133 000000BA E90000 JMP pipelineflush
+ 134 pipelineflush:
+ 135 ;ページディレクトリ等の設定
+ 136
+ 137 000000BD 6631C0 xor eax, eax
+ 138 000000C0 66B900000000 mov ecx, 0
+ 139
+ 140 000000C6 90<rept> align 16
+ 141 pagedirloop:
+ 142 000000D0 6689C8 mov eax, ecx
+ 143 000000D3 66C1E016 shl eax, 22
+ 144 000000D7 660D83010000 or eax, ((1 << 8)|(1 << 7)|(1 << 1)|1)
+ 145 000000DD 676689048D00001000 mov [SYSPAGEDIR + 4 * ecx], eax
+ 146
+ 147 000000E6 6641 inc ecx
+ 148 000000E8 6681F900040000 cmp ecx, 0x400
+ 149 000000EF 72DF jb pagedirloop
+ 150
+ 151
+ 152 ;ページングの設定
+ 153 000000F1 0F20D8 mov eax, cr3
+ 154 000000F4 660D00001000 or eax, SYSPAGEDIR
+ 155 000000FA 0F22D8 mov cr3, eax
+ 156
+ 157 000000FD 0F20E0 mov eax, cr4
+ 158 00000100 6625DFFFFFFF and eax, ~(1 << 5) ; physical addr ext(pae) を無効に
+ 159 00000106 660D10000000 or eax, 1 << 4; enable paging size ext(pse)
+ 160 0000010C 0F22E0 mov cr4, eax
+ 161
+ 162 ;TLB無効化?
+ 163 0000010F 0F20D8 mov eax, cr3
+ 164 00000112 0F22D8 mov cr3, eax
+ 165
+ 166 00000115 0F20C0 MOV EAX,CR0
+ 167 00000118 660D00000080 or eax, 1 << 0x1f ; paging flag
+ 168 0000011E 0F22C0 MOV CR0,EAX
+ 169 00000121 E90000 JMP pipelineflush2
+ 170 pipelineflush2:
+ 171
+ 172 00000124 B80800 MOV AX,1*8 ; 読み書き可能セグメント32bit
+ 173 00000127 8ED8 MOV DS,AX
+ 174 00000129 8EC0 MOV ES,AX
+ 175 0000012B 8EE0 MOV FS,AX
+ 176 0000012D 8EE8 MOV GS,AX
+ 177 0000012F 8ED0 MOV SS,AX
+ 178
+ 179
+ 180 ; ついでにディスクデータも本来の位置へ転送
+ 181
+ 182 ; まずはブートセクタから
+ 183
+ 184 ;MOV ESI,0x7c00 ; 転送元
+ 185 ;MOV EDI,DSKCAC ; 転送先
+ 186 ;MOV ECX,512/4
+ 187 ;CALL memcpy
+ 188
+ 189 ; asmheadでしなければいけないことは全部し終わったので、
+ 190 ; あとはbootpackに任せる
+ 191
+ 192 ; bootpackの起動
+ 193
+ 194 00000131 66BB[E0010000] MOV EBX, bootpack
+ 195 00000137 67668B4B3C MOV ECX, [EBX+0x3C] ; lfanew
+ 196 0000013C 6601CB add ebx, ecx ; nt header 32
+ 197 0000013F 678B4306 mov ax, [ebx + 6] ; number of section
+ 198 00000143 67668B6B28 mov ebp, [ebx + 0x28] ; entry point
+ 199 00000148 6681C500002800 add ebp, BOOTPACK_CODE
+ 200 0000014F 6681C3F8000000 add ebx, 0xf8 ; section header
+ 201 readsection:
+ 202 00000156 67668B7B0C mov edi, [ebx + 0x0C] ; virtual addr
+ 203 0000015B 67668B4B10 mov ecx, [ebx + 0x10] ; size of raw data
+ 204 00000160 67668B7314 mov esi, [ebx + 0x14] ; pointer to raw data
+ 205 00000165 6681C700002800 add edi, BOOTPACK_CODE ; このセクションのコピー先
+ 206 0000016C 6681C6[E0010000] add esi, bootpack ; コピー元
+ 207 00000173 FC cld
+ 208
+ 209 00000174 F367A4 a32 rep movsb
+ 210 ;db 0xf3
+ 211 ;db 0x67
+ 212 ;db 0xa4
+ 213 ;rep dword movsb ; f3 a4
+ 214
+ 215
+ 216 00000177 6681C328000000 add ebx, 0x28 ; section header size
+ 217 0000017E 48 dec ax
+ 218 0000017F 75D5 jnz readsection
+ 219
+ 220
+ 221 00000181 66BC00003800 MOV ESP, 0x00380000 ; スタック初期値
+ 222
+ 223 00000187 666810000000 push dword 2*8
+ 224 0000018D 6655 push ebp
+ 225
+ 226 ;sti
+ 227
+ 228
+ 229 0000018F 66CB o32 retf
+ 230 ; call eipload
+ 231 ; eipload:
+ 232 ; pop ax
+ 233 ; movzx eax, ax
+ 234 ; mov [eax+0x15], ebp
+ 235 ; mov dword [eax+0x19], 2*8
+ 236
+ 237 ; jmp dword 0:0
+ 238 ; db 0,0
+ 239
+ 240 waitkbdout:
+ 241 00000191 E464 IN AL,0x64
+ 242 00000193 2402 AND AL,0x02
+ 243 00000195 E460 IN AL,0x60 ; から読み(受信バッファが悪さをしないように)
+ 244 00000197 75F8 JNZ waitkbdout ; ANDの結果が0でなければwaitkbdoutへ
+ 245 00000199 C3 RET
+ 246
+ 247 memcpy:
+ 248 0000019A 6650 push eax
+ 249 memcpy_loop:
+ 250 0000019C 67668B06 MOV EAX,[ESI]
+ 251 000001A0 6681C604000000 ADD ESI,4
+ 252 000001A7 67668907 MOV [EDI],EAX
+ 253 000001AB 6681C704000000 ADD EDI,4
+ 254 000001B2 6681E901000000 SUB ECX,1
+ 255 000001B9 75E1 JNZ memcpy_loop ; 引き算した結果が0でなければmemcpyへ
+ 256 000001BB 6658 pop eax
+ 257 000001BD C3 RET
+ 258 ; memcpyはアドレスサイズプリフィクスを入れ忘れなければ、ストリング命令でも書ける
+ 259
+ 260
+ 261 000001BE <res 00000002> ALIGNB 16
+ 262 ****************** warning: uninitialized space declared in .text section: zeroing
+ 263 GDT0:
+ 264 000001C0 <res 00000008> RESB 8 ; ヌルセレクタ
+ 265 ****************** warning: uninitialized space declared in .text section: zeroing
+ 266 000001C8 FFFF00000092CF00 db 0xff,0xff,0x00,0x00,0x00,0x92,0xcf,0x00 ; 読み書き可能セグメント32bit
+ 267 ;db 0xff,0xff,0x00,0x00,0x28,0x9a,0x4f,0x00 ; 実行可能セグメント32bit(bootpack用)
+ 268 000001D0 FFFF0000009ACF00 db 0xff,0xff,0x00,0x00,0x00,0x9a,0xcf,0x00 ; 実行可能セグメント32bit(bootpack用)
+ 269
+ 270 000001D8 0000 DW 0
+ 271 GDTR0:
+ 272 000001DA 1700 DW 8*3-1
+ 273 000001DC [C0010000] DD GDT0
+ 274
+ 275 ALIGNB 16
+ 276 bootpack:
--- /dev/null
+#pragma once
+//********************************************************************
+// ATA LOW LEVEL I/O DRIVER -- ATAIO.H (driver's public data)
+//
+// by Hale Landis (www.ata-atapi.com)
+//
+// There is no copyright and there are no restrictions on the use
+// of this ATA Low Level I/O Driver code. It is distributed to
+// help other programmers understand how the ATA device interface
+// works and it is distributed without any warranty. Use this
+// code at your own risk.
+//
+// This code is based on the ATA-2, ATA-3 and ATA-4 standards and
+// on interviews with various ATA controller and drive designers.
+//
+// This code has been run on many ATA (IDE) drives and
+// MFM/RLL controllers. This code may be a little
+// more picky about the status it sees at various times. A real
+// BIOS probably would not check the status as carefully.
+//
+// Compile with one of the Borland C or C++ compilers.
+// See the make files EXAMPLE1.MAK and EXAMPLE2.MAK.
+//
+// This C source file is the header file for the for this driver
+// and is used in the ATAIOxxx.C files and must also be used
+// by any program using this driver code.
+//********************************************************************
+
+#define ATA_DRIVER_VERSION "16N"
+
+//**************************************************************
+//
+// Global defines -- ATA register and register bits.
+// command block & control block regs
+//
+//**************************************************************
+#include "dos.h"
+
+// These are the offsets into pio_reg_addrs[]
+
+#define CB_DATA 0 // data reg in/out pio_base_addr1+0
+#define CB_ERR 1 // error in pio_base_addr1+1
+#define CB_FR 1 // feature reg out pio_base_addr1+1
+#define CB_SC 2 // sector count in/out pio_base_addr1+2
+#define CB_SN 3 // sector number in/out pio_base_addr1+3
+#define CB_CL 4 // cylinder low in/out pio_base_addr1+4
+#define CB_CH 5 // cylinder high in/out pio_base_addr1+5
+#define CB_DH 6 // device head in/out pio_base_addr1+6
+#define CB_STAT 7 // primary status in pio_base_addr1+7
+#define CB_CMD 7 // command out pio_base_addr1+7
+#define CB_ASTAT 8 // alternate status in pio_base_addr2+6
+#define CB_DC 8 // device control out pio_base_addr2+6
+#define CB_DA 9 // device address in pio_base_addr2+7
+
+// error reg (CB_ERR) bits
+
+#define CB_ER_ICRC 0x80 // ATA Ultra DMA bad CRC
+#define CB_ER_BBK 0x80 // ATA bad block
+#define CB_ER_UNC 0x40 // ATA uncorrected error
+#define CB_ER_MC 0x20 // ATA media change
+#define CB_ER_IDNF 0x10 // ATA id not found
+#define CB_ER_MCR 0x08 // ATA media change request
+#define CB_ER_ABRT 0x04 // ATA command aborted
+#define CB_ER_NTK0 0x02 // ATA track 0 not found
+#define CB_ER_NDAM 0x01 // ATA address mark not found
+
+#define CB_ER_P_SNSKEY 0xf0 // ATAPI sense key (mask)
+#define CB_ER_P_MCR 0x08 // ATAPI Media Change Request
+#define CB_ER_P_ABRT 0x04 // ATAPI command abort
+#define CB_ER_P_EOM 0x02 // ATAPI End of Media
+#define CB_ER_P_ILI 0x01 // ATAPI Illegal Length Indication
+
+// ATAPI Interrupt Reason bits in the Sector Count reg (CB_SC)
+
+#define CB_SC_P_TAG 0xf8 // ATAPI tag (mask)
+#define CB_SC_P_REL 0x04 // ATAPI release
+#define CB_SC_P_IO 0x02 // ATAPI I/O
+#define CB_SC_P_CD 0x01 // ATAPI C/D
+
+// bits 7-4 of the device/head (CB_DH) reg
+
+#define CB_DH_LBA 0x40 // LBA bit
+#define CB_DH_DEV0 0x00 // select device 0
+#define CB_DH_DEV1 0x10 // select device 1
+#define CB_DH_OBSOLETE 0xa0 // bits 7 and 5 both 1 (obsolete)
+
+// status reg (CB_STAT and CB_ASTAT) bits
+
+#define CB_STAT_BSY 0x80 // busy
+#define CB_STAT_RDY 0x40 // ready
+#define CB_STAT_DF 0x20 // device fault
+#define CB_STAT_WFT 0x20 // write fault (old name)
+#define CB_STAT_SKC 0x10 // seek complete (only SEEK command)
+#define CB_STAT_SERV 0x10 // service (overlap/queued commands)
+#define CB_STAT_DRQ 0x08 // data request
+#define CB_STAT_CORR 0x04 // corrected (obsolete)
+#define CB_STAT_IDX 0x02 // index (obsolete)
+#define CB_STAT_ERR 0x01 // error (ATA)
+#define CB_STAT_CHK 0x01 // check (ATAPI)
+
+// device control reg (CB_DC) bits
+
+#define CB_DC_HOB 0x80 // High Order Byte (48-bit LBA)
+#define CB_DC_HD15 0x00 // bit 3 is reserved
+// #define CB_DC_HD15 0x08 // (old definition of bit 3)
+#define CB_DC_SRST 0x04 // soft reset
+#define CB_DC_NIEN 0x02 // disable interrupts
+
+// BMIDE registers and bits
+
+#define BM_COMMAND_REG 0 // offset to BM command reg
+#define BM_CR_MASK_READ 0x00 // read from memory
+#define BM_CR_MASK_WRITE 0x08 // write to memory
+#define BM_CR_MASK_START 0x01 // start transfer
+#define BM_CR_MASK_STOP 0x00 // stop transfer
+
+#define BM_STATUS_REG 2 // offset to BM status reg
+#define BM_SR_MASK_SIMPLEX 0x80 // simplex only
+#define BM_SR_MASK_DRV1 0x40 // drive 1 can do dma
+#define BM_SR_MASK_DRV0 0x20 // drive 0 can do dma
+#define BM_SR_MASK_INT 0x04 // INTRQ signal asserted
+#define BM_SR_MASK_ERR 0x02 // error
+#define BM_SR_MASK_ACT 0x01 // active
+
+#define BM_PRD_ADDR_LOW 4 // offset to prd addr reg low 16 bits
+#define BM_PRD_ADDR_HIGH 6 // offset to prd addr reg high 16 bits
+
+//**************************************************************
+//
+// Most mandtory and optional ATA commands
+//
+//**************************************************************
+
+#define CMD_CFA_ERASE_SECTORS 0xC0
+#define CMD_CFA_REQUEST_EXT_ERR_CODE 0x03
+#define CMD_CFA_TRANSLATE_SECTOR 0x87
+#define CMD_CFA_WRITE_MULTIPLE_WO_ERASE 0xCD
+#define CMD_CFA_WRITE_SECTORS_WO_ERASE 0x38
+#define CMD_CHECK_POWER_MODE1 0xE5
+#define CMD_CHECK_POWER_MODE2 0x98
+#define CMD_DEVICE_RESET 0x08
+#define CMD_EXECUTE_DEVICE_DIAGNOSTIC 0x90
+#define CMD_FLUSH_CACHE 0xE7
+#define CMD_FLUSH_CACHE_EXT 0xEA
+#define CMD_FORMAT_TRACK 0x50
+#define CMD_IDENTIFY_DEVICE 0xEC
+#define CMD_IDENTIFY_DEVICE_PACKET 0xA1
+#define CMD_IDENTIFY_PACKET_DEVICE 0xA1
+#define CMD_IDLE1 0xE3
+#define CMD_IDLE2 0x97
+#define CMD_IDLE_IMMEDIATE1 0xE1
+#define CMD_IDLE_IMMEDIATE2 0x95
+#define CMD_INITIALIZE_DRIVE_PARAMETERS 0x91
+#define CMD_INITIALIZE_DEVICE_PARAMETERS 0x91
+#define CMD_NOP 0x00
+#define CMD_PACKET 0xA0
+#define CMD_READ_BUFFER 0xE4
+#define CMD_READ_DMA 0xC8
+#define CMD_READ_DMA_EXT 0x25
+#define CMD_READ_MULTIPLE 0xC4
+#define CMD_READ_MULTIPLE_EXT 0x29
+#define CMD_READ_SECTORS 0x20
+#define CMD_READ_SECTORS_EXT 0x24
+#define CMD_READ_VERIFY_SECTORS 0x40
+#define CMD_READ_VERIFY_SECTORS_EXT 0x42
+#define CMD_RECALIBRATE 0x10
+#define CMD_SEEK 0x70
+#define CMD_SET_FEATURES 0xEF
+#define CMD_SET_MULTIPLE_MODE 0xC6
+#define CMD_SLEEP1 0xE6
+#define CMD_SLEEP2 0x99
+#define CMD_SMART 0xB0
+#define CMD_STANDBY1 0xE2
+#define CMD_STANDBY2 0x96
+#define CMD_STANDBY_IMMEDIATE1 0xE0
+#define CMD_STANDBY_IMMEDIATE2 0x94
+#define CMD_WRITE_BUFFER 0xE8
+#define CMD_WRITE_DMA 0xCA
+#define CMD_WRITE_DMA_EXT 0x35
+#define CMD_WRITE_DMA_FUA_EXT 0x3D
+#define CMD_WRITE_MULTIPLE 0xC5
+#define CMD_WRITE_MULTIPLE_EXT 0x39
+#define CMD_WRITE_MULTIPLE_FUA_EXT 0xCE
+#define CMD_WRITE_SECTORS 0x30
+#define CMD_WRITE_SECTORS_EXT 0x34
+#define CMD_WRITE_VERIFY 0x3C
+
+#define CMD_SRST 256 // fake command code for Soft Reset
+
+//**************************************************************
+//
+// Public functions in ATAIOISA.C
+//
+//**************************************************************
+
+extern int dma_isa_config( int chan );
+
+extern int dma_isa_chs( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned int cyl, unsigned int head, unsigned int sect,
+ unsigned int seg, unsigned int off,
+ long numSect );
+
+extern int dma_isa_lba28( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lba,
+ unsigned int seg, unsigned int off,
+ long numSect );
+
+extern int dma_isa_lba48( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lbahi, unsigned long lbalo,
+ unsigned int seg, unsigned int off,
+ long numSect );
+
+extern int dma_isa_packet( int dev,
+ unsigned int cpbc,
+ unsigned int cpseg, unsigned int cpoff,
+ int dir,
+ long dpbc,
+ unsigned int dpseg, unsigned int dpoff,
+ unsigned long lba );
+
+//**************************************************************
+//
+// Public data in ATAIOINT.C
+//
+//**************************************************************
+
+// Interrupt mode flag (interrupts in use if != 0 )
+// This value is READ ONLY - do not change.
+
+extern int int_use_intr_flag;
+
+//**************************************************************
+//
+// Public functions in ATAIOINT.C
+//
+//**************************************************************
+
+extern int int_enable_irq( int shared, int irqNum,
+ unsigned int bmAddr, unsigned int ataAddr );
+
+extern void int_disable_irq( void );
+
+//**************************************************************
+//
+// Public data in ATAIOPCI.C
+//
+//**************************************************************
+
+extern int dma_pci_prd_type; // type of PRD list to use
+#define PRD_TYPE_SIMPLE 0 // use PRD buffer, simple list
+#define PRD_TYPE_COMPLEX 1 // use PRD buffer, complex list
+#define PRD_TYPE_LARGE 2 // use I/O buffer, overlay I/O buffer
+
+extern long dma_pci_largeMaxB; // max LARGE dma transfer size in bytes
+extern long dma_pci_largeMaxS; // max LARGE dma transfer size in sectors
+extern unsigned long far * dma_pci_largePrdBufPtr; // LARGE PRD buffer ptr
+extern unsigned char far * dma_pci_largeIoBufPtr; // LARGE PRD I/O address
+
+extern unsigned long far * dma_pci_prd_ptr; // current PRD buffer address
+extern int dma_pci_num_prd; // current number of PRD entries
+
+//**************************************************************
+//
+// Public functions in ATAIOPCI.C
+//
+//**************************************************************
+
+extern int dma_pci_config( unsigned int regAddr );
+
+extern void dma_pci_set_max_xfer( unsigned int seg, unsigned int off,
+ long bufSize );
+
+extern int dma_pci_chs( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned int cyl, unsigned int head, unsigned int sect,
+ unsigned int seg, unsigned int off,
+ long numSect );
+
+extern int dma_pci_lba28( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lba,
+ unsigned int seg, unsigned int off,
+ long numSect );
+
+extern int dma_pci_lba48( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lbahi, unsigned long lbalo,
+ unsigned int seg, unsigned int off,
+ long numSect );
+
+extern int dma_pci_packet( int dev,
+ unsigned int cpbc,
+ unsigned int cpseg, unsigned int cpoff,
+ int dir,
+ long dpbc,
+ unsigned int dpseg, unsigned int dpoff,
+ unsigned long lba );
+
+//**************************************************************
+//
+// Public data in ATAIOPIO.C
+//
+//**************************************************************
+
+extern unsigned int pio_base_addr1;
+extern unsigned int pio_base_addr2;
+
+extern unsigned int pio_memory_seg;
+extern int pio_memory_dt_opt;
+#define PIO_MEMORY_DT_OPT0 0 // use Data reg at offset 0H
+#define PIO_MEMORY_DT_OPT8 1 // use Data reg at offset 8H
+#define PIO_MEMORY_DT_OPTB 2 // use Data reg at offsets 400-7ffH
+#define PIO_MEMORY_DT_OPTR 3 // randomly select these options
+
+extern unsigned int pio_bmide_base_addr;
+
+extern unsigned int pio_reg_addrs[10];
+
+extern unsigned char pio_last_write[10];
+extern unsigned char pio_last_read[10];
+
+extern int pio_xfer_width;
+
+//**************************************************************
+//
+// Public functions in ATAIOPIO.C
+//
+//**************************************************************
+
+// configuration functions
+
+extern void pio_set_iobase_addr( unsigned int base1,
+ unsigned int base2,
+ unsigned int base3 );
+
+extern void pio_set_memory_addr( unsigned int seg );
+
+// normal register read/write functions
+
+extern unsigned char pio_inbyte( unsigned int addr );
+
+extern void pio_outbyte( unsigned int addr, unsigned char data );
+
+extern unsigned int pio_inword( unsigned int addr );
+
+extern void pio_outword( unsigned int addr, unsigned int data );
+
+// Normal PIO DRQ block transfer functions. These functions
+// handle both PCMCIA memory mode and all I/O mode transfers.
+
+extern void pio_drq_block_in( unsigned int addrDataReg,
+ unsigned int bufSeg, unsigned int bufOff,
+ long wordCnt );
+
+extern void pio_drq_block_out( unsigned int addrDataReg,
+ unsigned int bufSeg, unsigned int bufOff,
+ long wordCnt );
+
+// These functions can be called directly but are normally
+// called by the pio_drq_block_in() and pio_drq_block_out()
+// functions. These functions handle only I/O mode transfers.
+
+extern void pio_rep_inbyte( unsigned int addrDataReg,
+ unsigned int bufSeg, unsigned int bufOff,
+ long byteCnt );
+
+extern void pio_rep_outbyte( unsigned int addrDataReg,
+ unsigned int bufSeg, unsigned int bufOff,
+ long byteCnt );
+
+extern void pio_rep_inword( unsigned int addrDataReg,
+ unsigned int bufSeg, unsigned int bufOff,
+ long wordCnt );
+
+extern void pio_rep_outword( unsigned int addrDataReg,
+ unsigned int bufSeg, unsigned int bufOff,
+ long wordCnt );
+
+extern void pio_rep_indword( unsigned int addrDataReg,
+ unsigned int bufSeg, unsigned int bufOff,
+ long dwordCnt );
+
+extern void pio_rep_outdword( unsigned int addrDataReg,
+ unsigned int bufSeg, unsigned int bufOff,
+ long dwordCnt );
+
+//**************************************************************
+//
+// Public data in ATAIOREG.C
+//
+//**************************************************************
+
+// last ATAPI command packet size and data
+
+extern int reg_atapi_cp_size;
+extern unsigned char reg_atapi_cp_data[16];
+
+// flag to control the ~110ms delay for ATAPI devices,
+// no delay if the flag is zero.
+
+extern int reg_atapi_delay_flag;
+
+// the values in these variables are placed into the Feature,
+// Sector Count, Sector Number and Device/Head register by
+// reg_packet() before the A0H command is issued. reg_packet()
+// sets these variables to zero before returning. These variables
+// are initialized to zero. Only bits 3,2,1,0 of reg_atapi_reg_dh
+// are used.
+
+extern unsigned char reg_atapi_reg_fr;
+extern unsigned char reg_atapi_reg_sc;
+extern unsigned char reg_atapi_reg_sn;
+extern unsigned char reg_atapi_reg_dh;
+
+extern long reg_buffer_size;
+
+// Extended error information returned by
+// reg_reset(), reg_non_data_*(), reg_pio_data_in_*(),
+// reg_pio_data_out_*(), reg_packet(), dma_isa_*()
+// and dma_pci_*() functions.
+
+struct REG_CMD_INFO
+{
+ // entry type, flag and command code
+ unsigned char flg; // see TRC_FLAG_xxx in ataio.h
+ unsigned char ct; // see TRC_TYPE_xxx in ataio.h
+ unsigned char cmd; // command code
+ // before regs
+ unsigned int fr1; // feature (8 or 16 bits)
+ unsigned int sc1; // sec cnt (8 or 16 bits)
+ unsigned char sn1; // sec num
+ unsigned char cl1; // cyl low
+ unsigned char ch1; // cyl high
+ unsigned char dh1; // device head
+ unsigned char dc1; // device control
+ // after regs
+ unsigned char st2; // status reg
+ unsigned char as2; // alt status reg
+ unsigned char er2; // error reg
+ unsigned int sc2; // sec cnt (8 or 16 bits)
+ unsigned char sn2; // sec num
+ unsigned char cl2; // cyl low
+ unsigned char ch2; // cyl high
+ unsigned char dh2; // device head
+ // driver error codes
+ unsigned char ec; // detailed error code
+ unsigned char to; // not zero if time out error
+ // additional result info
+ long totalBytesXfer; // total bytes transfered
+ long drqPackets; // number of PIO DRQ packets
+ long drqPacketSize; // number of bytes in current DRQ block
+ unsigned int failbits; // failure bits (protocol errors)
+ #define FAILBIT15 0x8000 // extra interrupts detected
+ #define FAILBIT14 0x4000
+ #define FAILBIT13 0x2000
+ #define FAILBIT12 0x1000
+ #define FAILBIT11 0x0800
+ #define FAILBIT10 0x0400
+ #define FAILBIT9 0x0200
+ #define FAILBIT8 0x0100 // SC( CD/IO bits) wrong at end of cmd
+ #define FAILBIT7 0x0080 // byte count odd at data packet xfer time
+ #define FAILBIT6 0x0040 // byte count wrong at data packet xfer time
+ #define FAILBIT5 0x0020 // SC (IO bit) wrong at data packet xfer time
+ #define FAILBIT4 0x0010 // SC (CD bit) wrong at data packet xfer time
+ #define FAILBIT3 0x0008 // byte count wrong at cmd packet xfer time
+ #define FAILBIT2 0x0004 // SC wrong at cmd packet xfer time
+ #define FAILBIT1 0x0002 // got interrupt before cmd packet xfer
+ #define FAILBIT0 0x0001 // slow setting BSY=1 or DRQ=1 after AO cmd
+ // sector count, multiple count, and CHS/LBA info
+ long ns; // number of sectors (sector count)
+ int mc; // multiple count
+ unsigned char lbaSize; // size of LBA used
+ #define LBACHS 0 // last command used CHS
+ #define LBA28 28 // last command used 28-bit LBA
+ #define LBA32 32 // last command used 32-bit LBA (Packet)
+ #define LBA48 48 // last command used 48-bit LBA
+ #define LBA64 64 // future use?
+ unsigned long lbaLow1; // lower 32-bits of LBA before
+ unsigned long lbaHigh1; // upper 32-bits of LBA before
+ unsigned long lbaLow2; // lower 32-bits of LBA after
+ unsigned long lbaHigh2; // upper 32-bits of LBA after
+} ;
+
+extern struct REG_CMD_INFO reg_cmd_info;
+
+// Configuration data for device 0 and 1
+// returned by the reg_config() function.
+
+extern int reg_config_info[2];
+
+#define REG_CONFIG_TYPE_NONE 0
+#define REG_CONFIG_TYPE_UNKN 1
+#define REG_CONFIG_TYPE_ATA 2
+#define REG_CONFIG_TYPE_ATAPI 3
+
+// flag to control the slow data transfer option:
+// 0 = no slow data transfer
+// !0= slow data transfer before this DRQ packet
+
+extern long reg_slow_xfer_flag;
+
+// flag bits for 'incompatible' controllers and devices
+
+extern int reg_incompat_flags; // see #defines...
+
+#define REG_INCOMPAT_DMA_DELAY 0x0001 // set to 1 for delay before
+ // and after stopping the
+ // DMA engine
+#define REG_INCOMPAT_DMA_POLL 0x0002 // set to 1 for no polling
+ // of Alt Status during
+ // DMA transfers
+
+#define REG_INCOMPAT_DEVREG 0x0004 // set bits 7 and 5 to
+ // to 1 in the Device
+ // (Drive/Head) register
+
+//**************************************************************
+//
+// Public functions in ATAIOREG.C
+//
+//**************************************************************
+
+// config and reset funcitons
+
+extern int reg_config( void );
+
+extern int reg_reset( int skipFlag, int devRtrn );
+
+// ATA Non-Data command funnctions (for CHS, LBA28 and LBA48)
+
+extern int reg_non_data_chs( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned int cyl, unsigned int head, unsigned int sect );
+
+extern int reg_non_data_lba28( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lba );
+
+extern int reg_non_data_lba48( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lbahi, unsigned long lbalo );
+
+// PIO Data In/Out data transfer call back function
+
+extern void ( * reg_drq_block_call_back ) ( struct REG_CMD_INFO * );
+
+// ATA PIO Data In command functions (for CHS, LBA28 and LBA48)
+
+extern int reg_pio_data_in_chs( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned int cyl, unsigned int head, unsigned int sect,
+ unsigned int seg, unsigned int off,
+ long numSect, int multiCnt );
+
+extern int reg_pio_data_in_lba28( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lba,
+ unsigned int seg, unsigned int off,
+ long numSect, int multiCnt );
+
+extern int reg_pio_data_in_lba48( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lbahi, unsigned long lbalo,
+ unsigned int seg, unsigned int off,
+ long numSect, int multiCnt );
+
+// ATA PIO Data Out command functions (for CHS, LBA28 and LBA48)
+
+extern int reg_pio_data_out_chs( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned int cyl, unsigned int head, unsigned int sect,
+ unsigned int seg, unsigned int off,
+ long numSect, int multiCnt );
+
+extern int reg_pio_data_out_lba28( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lba,
+ unsigned int seg, unsigned int off,
+ long numSect, int multiCnt );
+
+extern int reg_pio_data_out_lba48( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lbahi, unsigned long lbalo,
+ unsigned int seg, unsigned int off,
+ long numSect, int multiCnt );
+
+// ATAPI Packet PIO function
+
+extern int reg_packet( int dev,
+ unsigned int cpbc,
+ unsigned int cpseg, unsigned int cpoff,
+ int dir,
+ long dpbc,
+ unsigned int dpseg, unsigned int dpoff,
+ unsigned long lba );
+
+//**************************************************************
+//
+// Public data in ATAIOTMR.C
+//
+//**************************************************************
+
+extern long tmr_time_out; // command time out in seconds
+
+extern long tmr_cmd_start_time; // command start time
+
+extern long tmr_1s_count; // number of I/O port reads required
+ // for a 1s delay
+extern long tmr_1ms_count; // number of I/O port reads required
+ // for a 1ms delay
+extern long tmr_1us_count; // number of I/O port reads required
+ // for a 1us delay
+extern long tmr_500ns_count; // number of I/O port reads required
+ // for a 500ns delay
+
+//**************************************************************
+//
+// Public functions in ATAIOTMR.C
+//
+//**************************************************************
+
+extern long tmr_read_bios_timer( void );
+
+extern void tmr_set_timeout( void );
+
+extern int tmr_chk_timeout( void );
+
+extern void tmr_get_delay_counts( void );
+
+extern void tmr_delay_1ms( long count );
+
+extern void tmr_delay_1us( long count );
+
+extern void tmr_delay_ata( void );
+
+extern void tmr_delay_atapi( int dev );
+
+extern void tmr_delay_xfer( void );
+
+//**************************************************************
+//
+// Public functions in ATAIOTRC.C
+//
+//**************************************************************
+
+// number of commands in lookup table
+#define TRC_NUM_CMDS 52
+
+// macro to convert a command code to a command index
+#define TRC_CC2NDX(cc) (trc_CmdCodeNdx[cc])
+
+// command code to command index table
+extern char trc_CmdCodeNdx[256];
+
+// command history trace entry types used by reg_cmd_info.flg,
+// trc_get_cmd_name(), etc.
+#define TRC_FLAG_EMPTY 0
+#define TRC_FLAG_SRST 1
+#define TRC_FLAG_ATA 2
+#define TRC_FLAG_ATAPI 3
+
+// command types (protocol types) used by reg_cmd_info.ct,
+// trc_cht_types(), etc. this is a bit shift value.
+// NOTE: also see trc_get_type_name() in ATAIOTRC.C !
+#define TRC_TYPE_ALL 16 // trace all cmd types
+#define TRC_TYPE_NONE 0 // don't trace any cmd types
+#define TRC_TYPE_ADMAI 1 // ATA DMA In
+#define TRC_TYPE_ADMAO 2 // ATA DMA Out
+#define TRC_TYPE_AND 3 // ATA PIO Non-Data
+#define TRC_TYPE_APDI 4 // ATA PIO Data In
+#define TRC_TYPE_APDO 5 // ATA PIO Data Out
+#define TRC_TYPE_ASR 6 // ATA Soft Reset
+#define TRC_TYPE_PDMAI 7 // ATAPI DMA In
+#define TRC_TYPE_PDMAO 8 // ATAPI DMA Out
+#define TRC_TYPE_PND 9 // ATAPI PIO Non-Data
+#define TRC_TYPE_PPDI 10 // ATAPI PIO Data In
+#define TRC_TYPE_PPDO 11 // ATAPI PIO Data Out
+
+extern char * trc_get_type_name( char ct );
+
+extern char * trc_get_cmd_name( unsigned int cc );
+
+extern char * trc_get_st_bit_name( unsigned char st );
+
+extern char * trc_get_er_bit_name( unsigned char er );
+
+extern char * trc_get_err_name( int ec );
+
+extern void trc_err_dump1( void );
+extern char * trc_err_dump2( void );
+
+extern void trc_cht_types( int type );
+extern void trc_cht_dump0( void );
+extern void trc_cht_dump1( void );
+extern char * trc_cht_dump2( void );
+
+extern void trc_llt_dump0( void );
+extern void trc_llt_dump1( void );
+extern char * trc_llt_dump2( void );
+
+//********************************************************************
+//
+// The remainder of this file is ATADRVR's private data -
+// this data and these functions should not be used outside
+// of the ATADRVR source files.
+//
+//********************************************************************
+
+// macro used to read Alt Status, delay and read Alt Status again,
+// this delay (~400ns) is required by the older ATA command protocols.
+
+#define ATA_DELAY() {pio_inbyte(CB_ASTAT);tmr_delay_ata();pio_inbyte(CB_ASTAT);}
+
+// marco used to read Alt Status, delay and read Alt Status again,
+// this delay (~80ms) is required for some poorly designed ATAPI
+// device to get the status updated correctly.
+
+#define ATAPI_DELAY(dev) {pio_inbyte(CB_ASTAT);tmr_delay_atapi(dev);pio_inbyte(CB_ASTAT);}
+
+//**************************************************************
+//
+// Private data in ATAIOINT.C
+//
+//**************************************************************
+
+// Interrupt counter (incremented each time there is an interrupt)
+
+extern volatile int int_intr_cntr;
+
+// Interrupt flag (!= 0 if there was an interrupt)
+
+extern volatile int int_intr_flag;
+
+// BMIDE Status register I/O address
+
+extern unsigned int int_bmide_addr;
+
+// BMIDE Status register at time of last interrupt
+
+extern volatile unsigned char int_bm_status;
+
+// ATA Status register I/O address
+
+extern unsigned int int_ata_addr;
+
+// ATA Status register at time of last interrupt
+
+extern volatile unsigned char int_ata_status;
+
+//**************************************************************
+//
+// Private functions in ATAIOINT.C
+//
+//**************************************************************
+
+extern void int_save_int_vect( void );
+
+extern void int_restore_int_vect( void );
+
+//**************************************************************
+//
+// Private data in ATAIOSUB.C
+//
+//**************************************************************
+
+// Private functions in ATAIOSUB.C
+
+extern void sub_zero_return_data( void );
+extern void sub_setup_command( void );
+extern void sub_trace_command( void );
+extern int sub_select( int dev );
+extern unsigned char sub_readBusMstrCmd( void );
+extern unsigned char sub_readBusMstrStatus( void );
+extern void sub_writeBusMstrCmd( unsigned char x );
+extern void sub_writeBusMstrStatus( unsigned char x );
+
+//**************************************************************
+//
+// Private data in ATAIOTRC.C
+//
+//**************************************************************
+
+// low level trace entry type values
+
+#define TRC_LLT_NONE 0 // unused entry
+
+#define TRC_LLT_INB 1 // in byte
+#define TRC_LLT_OUTB 2 // out byte
+#define TRC_LLT_INW 3 // in word
+#define TRC_LLT_OUTW 4 // out word
+#define TRC_LLT_INSB 5 // rep in byte
+#define TRC_LLT_OUTSB 6 // rep out byte
+#define TRC_LLT_INSW 7 // rep in word
+#define TRC_LLT_OUTSW 8 // rep out word
+#define TRC_LLT_INSD 9 // rep in dword
+#define TRC_LLT_OUTSD 10 // rep out dword
+
+#define TRC_LLT_S_CFG 11 // start config
+#define TRC_LLT_S_RST 12 // start reset
+#define TRC_LLT_S_ND 13 // start ND cmd
+#define TRC_LLT_S_PDI 14 // start PDI cmd
+#define TRC_LLT_S_PDO 15 // start PDO cmd
+#define TRC_LLT_S_PI 16 // start packet cmd
+#define TRC_LLT_S_RWD 17 // start ata R/W DMA cmd
+#define TRC_LLT_S_PID 18 // start packet DMA cmd
+#define TRC_LLT_WINT 21 // wait for int
+#define TRC_LLT_INTRQ 22 // int received
+#define TRC_LLT_PNBSY 23 // poll for not busy
+#define TRC_LLT_PRDY 24 // poll for ready
+#define TRC_LLT_TOUT 25 // timeout
+#define TRC_LLT_ERROR 26 // error detected
+#define TRC_LLT_DELAY1 27 // delay ~110ms
+#define TRC_LLT_DELAY2 28 // delay 0-55ms
+#define TRC_LLT_E_CFG 31 // end config
+#define TRC_LLT_E_RST 32 // end reset
+#define TRC_LLT_E_ND 33 // end ND cmd
+#define TRC_LLT_E_PDI 34 // end PDI cmd
+#define TRC_LLT_E_PDO 35 // end PDO cmd
+#define TRC_LLT_E_PI 36 // end packet CMD
+#define TRC_LLT_E_RWD 37 // end ata R/W DMA cmd
+#define TRC_LLT_E_PID 38 // end packet DMA cmd
+
+#define TRC_LLT_DMA1 41 // enable/start ISA DMA channel
+#define TRC_LLT_DMA2 42 // poll the ISA DMA TC bit
+#define TRC_LLT_DMA3 43 // disable/stop ISA DMA channel
+
+#define TRC_LLT_DEBUG 51 // debug data
+#define TRC_LLT_P_CMD 52 // packet cmd code
+#define TRC_LLT_R_BM_CR 53 // read bus master cmd reg
+#define TRC_LLT_R_BM_SR 54 // read bus master status reg
+#define TRC_LLT_W_BM_CR 55 // write bus master cmd reg
+#define TRC_LLT_W_BM_SR 56 // write bus master status reg
+
+//**************************************************************
+//
+// Private functions in ATAIOTRC.C
+//
+//**************************************************************
+
+extern void trc_cht( void );
+
+extern void trc_llt( unsigned char addr,
+ unsigned char data,
+ unsigned char type );
+
+// end ataio.h
--- /dev/null
+//********************************************************************
+// ATA LOW LEVEL I/O DRIVER -- ATAIOINT.C
+//
+// by Hale Landis (www.ata-atapi.com)
+//
+// There is no copyright and there are no restrictions on the use
+// of this ATA Low Level I/O Driver code. It is distributed to
+// help other programmers understand how the ATA device interface
+// works and it is distributed without any warranty. Use this
+// code at your own risk.
+//
+// This code is based on the ATA-x, and ATA/ATAPI-x standards and
+// on interviews with various ATA controller and drive designers.
+//
+// This code has been run on many ATA (IDE) drives and
+// MFM/RLL controllers. This code may be a little
+// more picky about the status it sees at various times. A real
+// BIOS probably would not check the status as carefully.
+//
+// Compile with one of the Borland C or C++ compilers.
+//
+// This C source contains the low level interrupt set up and
+// interrupt handler functions.
+//********************************************************************
+
+#include <dos.h>
+
+#include "ataio.h"
+
+//*************************************************************
+//
+// Global interrupt mode data
+//
+//*************************************************************
+
+int int_use_intr_flag = 0; // use INT mode if != 0
+
+volatile int int_intr_cntr; // interrupt counter, incremented
+ // each time there is an interrupt
+
+volatile int int_intr_flag; // interrupt flag, incremented
+ // for each device interrupt
+
+unsigned int int_bmide_addr; // BMIDE status reg i/o address
+
+volatile unsigned char int_bm_status; // BMIDE status
+
+unsigned int int_ata_addr; // ATA status reg I/O address
+
+volatile unsigned char int_ata_status; // ATA status
+
+//*************************************************************
+//
+// Local data
+//
+//*************************************************************
+
+// interrupt handler function info...
+
+static void interrupt ( far * int_org_int_vect ) (); // save area for the
+ // system's INT vector
+
+static void far interrupt int_handler( void ); // our INT handler
+
+// our interrupt handler's data...
+
+static int int_got_it_now = 0; // != 0, our interrupt handler
+ //is installed now
+
+static int int_irq_number = 0; // IRQ number in use, 1 to 15
+static int int_int_vector = 0; // INT vector in use,
+ // INT 8h-15h and INT 70H-77H.
+static int int_shared = 0; // shared flag
+
+// system interrupt controller data...
+
+#define PIC0_CTRL 0x20 // PIC0 i/o address
+#define PIC0_MASK 0x21 // PIC0 i/o address
+#define PIC1_CTRL 0xA0 // PIC1 i/o address
+#define PIC1_MASK 0xA1 // PIC1 i/o address
+
+#define PIC0_ENABLE_PIC1 0xFB // mask to enable PIC1 in PIC0
+
+static int pic_enable_irq[8] = // mask to enable
+ { 0xFE, 0xFD, 0xFB, 0xF7, // IRQ 0-7 in PIC 0 or
+ 0xEF, 0xDF, 0xBF, 0x7F }; // IRQ 8-15 in PIC 1
+
+#define PIC_EOI 0x20 // end of interrupt
+
+//*************************************************************
+//
+// Enable interrupt mode -- get the IRQ number we are using.
+//
+// The function MUST be called before interrupt mode can
+// be used!
+//
+// If this function is called then the int_disable_irq()
+// function MUST be called before exiting to DOS.
+//
+//*************************************************************
+
+int int_enable_irq( int shared, int irqNum,
+ unsigned int bmAddr, unsigned int ataAddr )
+
+// shared: 0 is not shared, != 0 is shared
+// irqNum: 1 to 15
+// bmAddr: i/o address for BMIDE Status register
+// ataAddr: i/o address for the ATA Status register
+
+{
+
+ // error if interrupts enabled now
+ // error if invalid irq number
+ // error if bmAddr is < 100H
+ // error if shared and bmAddr is 0
+ // error if ataAddr is < 100H
+
+ if ( int_use_intr_flag )
+ return 1;
+ if ( ( irqNum < 1 ) || ( irqNum > 15 ) )
+ return 2;
+ if ( irqNum == 2 )
+ return 2;
+ if ( bmAddr && ( bmAddr < 0x0100 ) )
+ return 3;
+ if ( shared && ( ! bmAddr ) )
+ return 4;
+ if ( ataAddr < 0x0100 )
+ return 5;
+
+ // save the input parameters
+
+ int_shared = shared;
+ int_irq_number = irqNum;
+ int_bmide_addr = bmAddr;
+ int_ata_addr = ataAddr;
+
+ // convert IRQ number to INT number
+ // and
+ // enable the interrupt in the PIC
+
+ if ( irqNum < 8 )
+ {
+ int_int_vector = irqNum + 8;
+ // In PIC0 change the IRQ 0-7 enable bit to 0
+ outportb( PIC0_MASK, ( inportb( PIC0_MASK )
+ & pic_enable_irq[ irqNum ] ) );
+ }
+ else
+ {
+ int_int_vector = 0x70 + ( irqNum - 8 );
+ // In PIC0 change the PIC1 enable bit to 0 (enable IRQ 2)
+ // In PIC1 change the IRQ enable bit to 0
+ outportb( PIC0_MASK, ( inportb( PIC0_MASK ) & PIC0_ENABLE_PIC1 ) );
+ outportb( PIC1_MASK, ( inportb( PIC1_MASK )
+ & pic_enable_irq[ irqNum - 8 ] ) );
+ }
+
+ // interrupts use is now enabled
+
+ int_use_intr_flag = 1;
+ int_got_it_now = 0;
+
+ // Done.
+
+ return 0;
+}
+
+//*************************************************************
+//
+// Disable interrupt mode.
+//
+// If the int_enable_irq() function has been called,
+// this function MUST be called before exiting to DOS.
+//
+//*************************************************************
+
+void int_disable_irq( void )
+
+{
+
+ // if our interrupt handler is installed now,
+ // restore the system's (the original) interrupt handler.
+
+ if ( int_got_it_now )
+ {
+
+ // Disable interrupts.
+ // Restore the system's interrupt vector.
+ // Enable interrupts.
+
+ disable();
+ setvect( int_int_vector, int_org_int_vect );
+ enable();
+ }
+
+ // Reset all the interrupt data.
+
+ int_use_intr_flag = 0;
+ int_got_it_now = 0;
+}
+
+//*************************************************************
+//
+// Install our interrupt handler.
+//
+// Interrupt mode MUST be setup by calling int_enable_irq()
+// before calling this function.
+//
+//*************************************************************
+
+void int_save_int_vect( void )
+
+{
+
+ // Do nothing if interrupt use not enabled now.
+ // Do nothing if our interrupt handler is installed now.
+
+ if ( ! int_use_intr_flag )
+ return;
+ if ( int_got_it_now )
+ return;
+
+ // Disable interrupts.
+ // Save the interrupt vector.
+
+ disable();
+ int_org_int_vect = getvect( int_int_vector );
+
+ // install our interrupt handler
+
+ setvect( int_int_vector, int_handler );
+
+ // Our interrupt handler is installed now.
+
+ int_got_it_now = 1;
+
+ // Reset the interrupt flag.
+
+ int_intr_cntr = 0;
+ int_intr_flag = 0;
+
+ // Enable interrupts.
+
+ enable();
+}
+
+//*************************************************************
+//
+// Restore the interrupt vector.
+//
+// Interrupt mode MUST be setup by calling int_enable_irq()
+// before calling this function.
+//
+//*************************************************************
+
+void int_restore_int_vect( void )
+
+{
+
+ // Do nothing if interrupt useis disabled now.
+ // Do nothing if our interrupt handler is not installed.
+
+ if ( ! int_use_intr_flag )
+ return;
+ if ( ! int_got_it_now )
+ return;
+
+ // Disable interrupts.
+ // Restore the interrupt vector.
+ // Enable interrupts.
+
+ disable();
+ setvect( int_int_vector, int_org_int_vect );
+ enable();
+
+ // Our interrupt handler is not installed now.
+
+ int_got_it_now = 0;
+}
+
+//*************************************************************
+//
+// ATADRVR's Interrupt Handler.
+//
+//*************************************************************
+
+static void far interrupt int_handler( void )
+
+{
+
+ // increment the interrupt counter
+
+ int_intr_cntr ++ ;
+
+ // if BMIDE present read the BMIDE status
+ // else just read the device status.
+
+ if ( int_bmide_addr )
+ {
+ // PCI ATA controller...
+ // ... read BMIDE status
+ int_bm_status = inportb( int_bmide_addr );
+ //... check if Interrupt bit = 1
+ if ( int_bm_status & BM_SR_MASK_INT )
+ {
+ // ... Interrupt=1...
+ // ... increment interrupt flag,
+ // ... read ATA status,
+ // ... reset Interrupt bit.
+ int_intr_flag ++ ;
+ int_ata_status = inportb( int_ata_addr );
+ outportb( int_bmide_addr, BM_SR_MASK_INT );
+ }
+ }
+ else
+ {
+ // legacy ATA controller...
+ // ... increment interrupt flag,
+ // ... read ATA status.
+ int_intr_flag ++ ;
+ int_ata_status = inportb( int_ata_addr );
+ }
+
+ // if interrupt is shared, jump to the original handler...
+
+ if ( int_shared )
+ {
+
+ // pop all regs
+#if 0
+ asm pop bp
+ asm pop edi
+ asm pop esi
+ asm pop ds
+ asm pop es
+ asm pop edx
+ asm pop ecx
+ asm pop ebx
+ asm pop eax
+
+ // put cs:ip of next interrupt handler on stack
+
+ asm push ax // will be bp+8
+ asm push ax // will be bp+6
+ asm push ax
+ asm push bp
+ asm push ds
+ asm mov bp,DGROUP
+ asm mov ds,bp
+ asm mov bp, sp
+ asm mov ax, word ptr DGROUP:int_org_int_vect
+ asm mov [bp+6], ax
+ asm mov ax, word ptr DGROUP:int_org_int_vect+2
+ asm mov [bp+8], ax
+ asm pop ds
+ asm pop bp
+ asm pop ax
+
+ // jump to the original interrupt handler
+
+ asm retf
+#endif
+ // never get here
+
+ }
+
+ // interrupt is not shared...
+ // send End-of-Interrupt (EOI) to the interrupt controller(s).
+
+ outportb( PIC0_CTRL, PIC_EOI );
+ if ( int_irq_number >= 8 )
+ outportb( PIC1_CTRL, PIC_EOI );
+
+ // IRET here (return from interrupt)
+}
+
+// end ataioint.c
--- /dev/null
+//********************************************************************
+// ATA LOW LEVEL I/O DRIVER -- ATAIOISA.C
+//
+// by Hale Landis (www.ata-atapi.com)
+//
+// There is no copyright and there are no restrictions on the use
+// of this ATA Low Level I/O Driver code. It is distributed to
+// help other programmers understand how the ATA device interface
+// works and it is distributed without any warranty. Use this
+// code at your own risk.
+//
+// This code is based on the ATA-2, ATA-3 and ATA-4 standards and
+// on interviews with various ATA controller and drive designers.
+//
+// This code has been run on many ATA (IDE) drives and
+// MFM/RLL controllers. This code may be a little
+// more picky about the status it sees at various times. A real
+// BIOS probably would not check the status as carefully.
+//
+// Compile with one of the Borland C or C++ compilers.
+//
+// This C source contains the ISA bus READ/WRITE DMA command
+// processing for ATA and ATAPI.
+//********************************************************************
+
+#include <dos.h>
+
+#include "ataio.h"
+
+#define DEBUG_ISA 0x00 // not zero for debug
+ // 0x01 trace the DMA channel mode
+
+//***********************************************************
+//
+// Some notes about ISA bus DMA...
+//
+// ISA bus DMA uses an DMA controller built into an ISA bus
+// motherboard. This DMA controller has six DMA channels: 1, 2, 3,
+// 5, 6 and 7. Channels 0 and 4 are reserved for other uses.
+// Channels 1, 2 and 3 are 8-bit and channels 5, 6 and 7 are 16-bit.
+// Since ATA DMA is always 16-bit only channels 5, 6 or 7 can be
+// used here.
+//
+// An ISA bus DMA controller is unable to transfer data across a
+// 128K boundary in physical memory. This code is able to cross one
+// 128K DMA boundary. It could be enhanced to cross any number of
+// boundaries but since a tradional ATA read/write command can not
+// transfer more than 256 sectors or 128K bytes, there is little
+// need for this code to handle more than one boundary crossing.
+//
+// Note that the ISA 16-bit DMA channels are restricted to
+// transfering data on word boundaries and transfers of an even
+// number of bytes. This is because the host memory address and the
+// transfer length byte count are both divided by 2. These word
+// addresses and word counts are used by the DMA controller.
+//
+//***********************************************************
+
+//***********************************************************
+//
+// isa bus dma channel configuration stuff,
+// see dma_isa_config().
+//
+//***********************************************************
+
+static int dmaChan = 0; // dma channel number (5, 6 or 7)
+
+static int dmaPageReg; // page reg addr
+static int dmaAddrReg; // addr reg addr
+static int dmaCntrReg; // cntr reg addr
+
+static int dmaChanSel; // channel selection bits...
+ // also see modeByte below
+
+#define DMA_SEL5 0x01 // values used in dmaChanSel
+#define DMA_SEL6 0x02
+#define DMA_SEL7 0x03
+
+static int dmaTCbit; // terminal count bit status
+
+#define DMA_TC5 0x02 // values used in dmaTCbit
+#define DMA_TC6 0x04
+#define DMA_TC7 0x08
+
+//***********************************************************
+//
+// isa bus dma channel configuration and control macros
+//
+//***********************************************************
+
+#define DMA_MASK_ENABLE 0x00 // bits for enable/disable
+#define DMA_MASK_DISABLE 0x04
+
+#define enableChan() outportb( 0xd4, DMA_MASK_ENABLE | dmaChanSel )
+#define disableChan() outportb( 0xd4, DMA_MASK_DISABLE | dmaChanSel )
+
+#define clearFF() outportb( 0xd8, 0 ) // macro to reset flip-flop
+ // so we access the low byte
+ // of the address and word
+ // count registers
+
+//***********************************************************
+//
+// dma channel programming stuff
+//
+//***********************************************************
+
+static int doTwo; // transfer crosses a physical boundary if != 0
+
+static unsigned int page1; // upper part of physical memory address
+ // for 1st (or only) transfer
+static unsigned int page2; // upper part of physical memory address
+ // for 2nd transfer
+
+static unsigned long addr1; // physical address for 1st (or only) transfer
+static unsigned long addr2; // physical address for 2nd transfer
+
+static unsigned long count1; // byte/word count for 1st (or only) transfer
+static unsigned long count2; // byte/word count for 2nd transfer
+
+static int modeByte; // mode byte for the dma channel...
+ // also see dmaChanSel above
+
+#define DMA_MODE_DEMAND 0x00 // modeByte bits for various dma modes
+#define DMA_MODE_BLOCK 0x80
+#define DMA_MODE_SINGLE 0x40
+
+#define DMA_MODE_MEMR 0x08 // modeByte memory read or write
+#define DMA_MODE_MEMW 0x04
+
+//***********************************************************
+//
+// set_up_xfer() -- set up for 1 or 2 dma transfers -- either
+// 1 or 2 transfers are required per ata
+// or atapi command.
+//
+//***********************************************************
+
+static void set_up_xfer( int dir, long bc, unsigned int seg, unsigned int off );
+
+static void set_up_xfer( int dir, long bc, unsigned int seg, unsigned int off )
+
+{
+ unsigned long count; // total byte/word count
+ unsigned long addr; // absolute memory address
+
+ // determine number of bytes to be transferred
+
+ count = bc;
+
+ // convert transfer address from seg:off to a 20-bit absolute memory address
+
+ addr = (unsigned long) seg;
+ addr = addr << 4;
+ addr = addr + (unsigned long) off;
+
+ // determine first transfer address,
+ // determine first and second transfer counts.
+ // The absolute address bits a19 - a0 are used as follows:
+ // bits 7-4 of the page register are set to 0.
+ // a19 - a17 are placed into the page register bits 3-1.
+ // bit 0 of the page register is set to 0.
+ // a16-a1 are placed into the address register bits 15-0.
+ // a0 is discarded.
+ // assume that only one transfer is needed and determine the
+ // page, addr1, count1 and count2 values.
+ // the transfer count is converted from byte to word counts.
+
+ page1 = (int) ( ( addr & 0x000e0000L ) >> 16 );
+ page2 = page1 + 2;
+ addr1 = ( addr & 0x0001fffeL ) >> 1;
+ addr2 = 0;
+ count1 = count >> 1;
+ count2 = 0;
+
+ // if a dma boundary will be crossed, determine the
+ // first and second transfer counts. again the
+ // transfer counts must be converted from byte to word counts.
+
+ doTwo = 0;
+ if ( ( ( addr + count - 1L ) & 0x000e0000L ) != ( addr & 0x000e0000L ) )
+ {
+ doTwo = 1;
+
+ // determine first and second transfer counts
+
+ count1 = ( ( addr & 0x000e0000L ) + 0x00020000L ) - addr;
+ count2 = count - count1;
+
+ // convert counts to word values
+
+ count1 = count1 >> 1;
+ count2 = count2 >> 1;
+ }
+
+ // get dma channel mode
+
+ modeByte = DMA_MODE_DEMAND; // change this line for single word dma
+ modeByte = modeByte | ( dir ? DMA_MODE_MEMR : DMA_MODE_MEMW );
+ modeByte = modeByte | dmaChanSel;
+}
+
+//***********************************************************
+//
+// prog_dma_chan() -- config the dma channel we will use --
+// we call this function to set each
+// part of a dma transfer.
+//
+//***********************************************************
+
+static void prog_dma_chan( unsigned int page, unsigned long addr,
+ unsigned long count, int mode );
+
+static void prog_dma_chan( unsigned int page, unsigned long addr,
+ unsigned long count, int mode )
+
+{
+
+ // disable interrupts
+
+ disable();
+
+ // disable the dma channel
+
+ trc_llt( 0, 0, TRC_LLT_DMA3 );
+ disableChan();
+
+ // reset channel status (required by some systems)
+
+ inportb( 0xd0 );
+
+ // set dma channel transfer address
+
+ clearFF();
+ outportb( dmaAddrReg, (int) ( addr & 0x000000ffL ) );
+ addr = addr >> 8;
+ outportb( dmaAddrReg, (int) ( addr & 0x000000ffL ) );
+
+ // set dma channel page
+
+ outportb( dmaPageReg, page );
+
+ // set dma channel word count
+
+ count -- ;
+ clearFF();
+ outportb( dmaCntrReg, (int) ( count & 0x000000ffL ) );
+ count = count >> 8;
+ outportb( dmaCntrReg, (int) ( count & 0x000000ffL ) );
+
+ // set dma channel mode
+
+ outportb( 0xd6, mode );
+
+ #if DEBUG_ISA & 0x01
+ trc_llt( 0, mode, TRC_LLT_DEBUG ); // for debugging
+ #endif
+
+ // enable the dma channel
+
+ trc_llt( 0, 0, TRC_LLT_DMA1 );
+ enableChan();
+
+ // enable interrupts
+
+ enable();
+}
+
+//***********************************************************
+//
+// chk_cmd_done() -- check for command completion
+//
+//***********************************************************
+
+static int chk_cmd_done( void );
+
+static int chk_cmd_done( void )
+
+{
+ int status;
+
+ // check for interrupt or poll status
+
+ if ( int_use_intr_flag )
+ {
+ if ( int_intr_flag ) // interrupt?
+ {
+ trc_llt( 0, 0, TRC_LLT_INTRQ );
+ status = int_ata_status; // get status
+ trc_llt( CB_STAT, status, TRC_LLT_INB );
+ return 1; // cmd done
+ }
+ }
+ else
+ {
+ status = pio_inbyte( CB_ASTAT ); // poll for not busy & DRQ/errors
+ if ( ( status & ( CB_STAT_BSY | CB_STAT_DRQ ) ) == 0 )
+ return 1; // cmd done
+ if ( ( status & ( CB_STAT_BSY | CB_STAT_DF ) ) == CB_STAT_DF )
+ return 1; // cmd done
+ if ( ( status & ( CB_STAT_BSY | CB_STAT_ERR ) ) == CB_STAT_ERR )
+ return 1; // cmd done
+ }
+ return 0; // not done yet
+}
+
+//***********************************************************
+//
+// dma_isa_config() - configure/setup for Read/Write DMA
+//
+// The caller must call this function before attempting
+// to use any ATA or ATAPI commands in ISA DMA mode.
+//
+//***********************************************************
+
+int dma_isa_config( int chan )
+
+{
+
+ // channel must be 0 (disable) or 5, 6 or 7.
+
+ switch ( chan )
+ {
+ case 0:
+ dmaChan = 0; // disable ISA DMA
+ return 0;
+ case 5: // set up channel 5
+ dmaChan = 5;
+ dmaPageReg = 0x8b;
+ dmaAddrReg = 0xc4;
+ dmaCntrReg = 0xc6;
+ dmaChanSel = DMA_SEL5;
+ dmaTCbit = DMA_TC5;
+ break;
+ case 6: // set up channel 6
+ dmaChan = 6;
+ dmaPageReg = 0x89;
+ dmaAddrReg = 0xc8;
+ dmaCntrReg = 0xca;
+ dmaChanSel = DMA_SEL6;
+ dmaTCbit = DMA_TC6;
+ break;
+ case 7: // set up channel 7
+ dmaChan = 7;
+ dmaPageReg = 0x8a;
+ dmaAddrReg = 0xcc;
+ dmaCntrReg = 0xce;
+ dmaChanSel = DMA_SEL7;
+ dmaTCbit = DMA_TC7;
+ break;
+ default: // not channel 5, 6 or 7
+ dmaChan = 0; // disable ISA DMA
+ return 1; // return error
+ }
+
+ return 0;
+}
+
+//***********************************************************
+//
+// exec_isa_ata_cmd() - DMA in ISA Multiword for ATA R/W DMA
+//
+//***********************************************************
+
+static int exec_isa_ata_cmd( int dev,
+ unsigned int seg, unsigned int off,
+ long numSect );
+
+static int exec_isa_ata_cmd( int dev,
+ unsigned int seg, unsigned int off,
+ long numSect )
+
+{
+ unsigned char status;
+ unsigned long lw1, lw2;
+
+ // mark start of a R/W DMA command in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_S_RWD );
+
+ // Quit now if no dma channel set up.
+
+ if ( ! dmaChan )
+ {
+ reg_cmd_info.ec = 70;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ sub_trace_command();
+ trc_llt( 0, 0, TRC_LLT_E_RWD );
+ return 1;
+ }
+
+ // Quit now if 1) I/O buffer overrun possible
+ // or 2) DMA can't handle the transfer size.
+
+ if ( ( numSect > 256L ) || ( ( numSect * 512L ) > reg_buffer_size ) )
+ {
+ reg_cmd_info.ec = 61;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ sub_trace_command();
+ trc_llt( 0, 0, TRC_LLT_E_PID );
+ return 1;
+ }
+
+ // set up the dma transfer
+
+ set_up_xfer( ( reg_cmd_info.cmd == CMD_WRITE_DMA )
+ ||
+ ( reg_cmd_info.cmd == CMD_WRITE_DMA_EXT ),
+ numSect * 512L, seg, off );
+
+ // Set command time out.
+
+ tmr_set_timeout();
+
+ // Select the drive - call the sub_select function.
+ // Quit now if this fails.
+
+ if ( sub_select( dev ) )
+ {
+ sub_trace_command();
+ trc_llt( 0, 0, TRC_LLT_E_RWD );
+ return 1;
+ }
+
+ // Set up all the registers except the command register.
+
+ sub_setup_command();
+
+ // For interrupt mode, install interrupt handler.
+
+ int_save_int_vect();
+
+ // program the dma channel for the first or only transfer.
+
+ prog_dma_chan( page1, addr1, count1, modeByte );
+
+ // Start the command by setting the Command register. The drive
+ // should immediately set BUSY status.
+
+ pio_outbyte( CB_CMD, reg_cmd_info.cmd );
+
+ // Waste some time by reading the alternate status a few times.
+ // This gives the drive time to set BUSY in the status register on
+ // really fast systems. If we don't do this, a slow drive on a fast
+ // system may not set BUSY fast enough and we would think it had
+ // completed the command when it really had not even started the
+ // command yet.
+
+ ATA_DELAY();
+
+ // Data transfer...
+ // If this transfer requires two dma transfers,
+ // wait for the first transfer to complete and
+ // then program the dma channel for the second transfer.
+
+ if ( ( reg_cmd_info.ec == 0 ) && doTwo )
+ {
+ // Data transfer...
+ // wait for dma chan to transfer first part by monitoring
+ // the dma channel's terminal count status bit
+ // -or-
+ // watch for command completion due to an error
+ // -or-
+ // time out if this takes too long.
+
+ trc_llt( 0, 0, TRC_LLT_DMA2 );
+ while ( 1 )
+ {
+ if ( inportb( 0xd0 ) & dmaTCbit ) // terminal count yet ?
+ break; // yes - ok!
+ if ( chk_cmd_done() ) // cmd done ?
+ {
+ reg_cmd_info.ec = 71;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break;
+ }
+ if ( tmr_chk_timeout() ) // time out yet ?
+ {
+ trc_llt( 0, 0, TRC_LLT_TOUT );
+ reg_cmd_info.to = 1;
+ reg_cmd_info.ec = 72;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break;
+ }
+ }
+
+ // if no error, set up 2nd transfer
+
+ if ( reg_cmd_info.ec == 0 )
+ {
+ // update bytes transferred count
+ reg_cmd_info.totalBytesXfer += count1 << 1;
+
+ // program dma channel to transfer the second part
+ prog_dma_chan( page2, addr2, count2, modeByte );
+ count1 = count2;
+ }
+ }
+
+ // End of command...
+ // if no error,
+ // wait for drive to signal command completion
+ // -or-
+ // time out if this takes to long.
+
+ if ( reg_cmd_info.ec == 0 )
+ {
+ if ( int_use_intr_flag )
+ trc_llt( 0, 0, TRC_LLT_WINT );
+ else
+ trc_llt( 0, 0, TRC_LLT_PNBSY );
+ while ( 1 )
+ {
+ if ( chk_cmd_done() ) // cmd done ?
+ break; // yes
+ if ( tmr_chk_timeout() ) // time out yet ?
+ {
+ trc_llt( 0, 0, TRC_LLT_TOUT ); // yes
+ reg_cmd_info.to = 1;
+ reg_cmd_info.ec = 73;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break;
+ }
+ }
+ }
+
+ // End of command...
+ // disable the dma channel
+
+ trc_llt( 0, 0, TRC_LLT_DMA3 );
+ disableChan();
+
+ // End of command...
+ // If polling or error read the Status register,
+ // otherwise use the Status register value that was read
+ // by the interrupt handler.
+
+ if ( ( ! int_use_intr_flag ) || ( reg_cmd_info.ec ) )
+ status = pio_inbyte( CB_STAT );
+ else
+ status = int_ata_status;
+
+ // Final status check...
+ // if no error, check final status...
+ // Error if BUSY, DEVICE FAULT, DRQ or ERROR status now.
+
+ if ( reg_cmd_info.ec == 0 )
+ {
+ if ( status & ( CB_STAT_BSY | CB_STAT_DF | CB_STAT_DRQ | CB_STAT_ERR ) )
+ {
+ reg_cmd_info.ec = 74;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+ }
+
+ // Final status check...
+ // if no error, check dma channel terminal count flag
+
+ if ( ( reg_cmd_info.ec == 0 )
+ &&
+ ( ( inportb( 0xd0 ) & dmaTCbit ) == 0 )
+ )
+ {
+ reg_cmd_info.ec = 71;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+
+ // Final status check...
+ // update total bytes transferred
+
+ if ( reg_cmd_info.ec == 0 )
+ reg_cmd_info.totalBytesXfer += count1 << 1;
+ else
+ {
+ clearFF();
+ lw1 = inportb( dmaCntrReg );
+ lw2 = inportb( dmaCntrReg );
+ lw1 = ( ( lw2 << 8 ) | lw1 ) + 1;
+ lw1 = lw1 & 0x0000ffffL;
+ reg_cmd_info.totalBytesXfer += ( count1 - lw1 ) << 1;
+ }
+
+ // Done...
+ // Read the output registers and trace the command.
+
+ sub_trace_command();
+
+ // Done...
+ // For interrupt mode, remove interrupt handler.
+
+ int_restore_int_vect();
+
+ // Done...
+ // mark end of a R/W DMA command in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_E_RWD );
+
+ // All done. The return values of this function are described in
+ // ATAIO.H.
+
+ if ( reg_cmd_info.ec )
+ return 1;
+ return 0;
+}
+
+//***********************************************************
+//
+// dma_isa_chs() - DMA in ISA Multiword for ATA R/W DMA
+//
+//***********************************************************
+
+int dma_isa_chs( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned int cyl, unsigned int head, unsigned int sect,
+ unsigned int seg, unsigned int off,
+ long numSect )
+
+{
+
+ // Setup current command information.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_ATA;
+ reg_cmd_info.ct = TRC_TYPE_ADMAI;
+ if ( ( cmd == CMD_WRITE_DMA ) || ( cmd == CMD_WRITE_DMA_EXT ) )
+ reg_cmd_info.ct = TRC_TYPE_ADMAO;
+ reg_cmd_info.cmd = cmd;
+ reg_cmd_info.fr1 = fr;
+ reg_cmd_info.sc1 = sc;
+ reg_cmd_info.sn1 = sect;
+ reg_cmd_info.cl1 = cyl & 0x00ff;
+ reg_cmd_info.ch1 = ( cyl & 0xff00 ) >> 8;
+ reg_cmd_info.dh1 = ( dev ? CB_DH_DEV1 : CB_DH_DEV0 ) | ( head & 0x0f );
+ reg_cmd_info.dc1 = int_use_intr_flag ? 0 : CB_DC_NIEN;
+ reg_cmd_info.ns = numSect;
+ reg_cmd_info.lbaSize = LBACHS;
+
+ // Execute the command.
+
+ return exec_isa_ata_cmd( dev, seg, off, numSect );
+}
+
+//***********************************************************
+//
+// dma_isa_lba28() - DMA in ISA Multiword for ATA R/W DMA
+//
+//***********************************************************
+
+int dma_isa_lba28( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lba,
+ unsigned int seg, unsigned int off,
+ long numSect )
+
+{
+
+ // Setup current command information.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_ATA;
+ reg_cmd_info.ct = TRC_TYPE_ADMAI;
+ reg_cmd_info.cmd = cmd;
+ if ( ( cmd == CMD_WRITE_DMA ) || ( cmd == CMD_WRITE_DMA_EXT ) )
+ reg_cmd_info.ct = TRC_TYPE_ADMAO;
+ reg_cmd_info.fr1 = fr;
+ reg_cmd_info.sc1 = sc;
+ reg_cmd_info.dh1 = CB_DH_LBA | (dev ? CB_DH_DEV1 : CB_DH_DEV0 );
+ reg_cmd_info.dc1 = int_use_intr_flag ? 0 : CB_DC_NIEN;
+ reg_cmd_info.ns = numSect;
+ reg_cmd_info.lbaSize = LBA28;
+ reg_cmd_info.lbaHigh1 = 0L;
+ reg_cmd_info.lbaLow1 = lba;
+
+ // Execute the command.
+
+ return exec_isa_ata_cmd( dev, seg, off, numSect );
+}
+
+//***********************************************************
+//
+// dma_isa_lba48() - DMA in ISA Multiword for ATA R/W DMA
+//
+//***********************************************************
+
+int dma_isa_lba48( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lbahi, unsigned long lbalo,
+ unsigned int seg, unsigned int off,
+ long numSect )
+
+{
+
+ // Setup current command information.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_ATA;
+ reg_cmd_info.ct = TRC_TYPE_ADMAI;
+ if ( ( cmd == CMD_WRITE_DMA ) || ( cmd == CMD_WRITE_DMA_EXT ) )
+ reg_cmd_info.ct = TRC_TYPE_ADMAO;
+ reg_cmd_info.cmd = cmd;
+ reg_cmd_info.fr1 = fr;
+ reg_cmd_info.sc1 = sc;
+ reg_cmd_info.dh1 = CB_DH_LBA | (dev ? CB_DH_DEV1 : CB_DH_DEV0 );
+ reg_cmd_info.dc1 = int_use_intr_flag ? 0 : CB_DC_NIEN;
+ reg_cmd_info.ns = numSect;
+ reg_cmd_info.lbaSize = LBA48;
+ reg_cmd_info.lbaHigh1 = lbahi;
+ reg_cmd_info.lbaLow1 = lbalo;
+
+ // Execute the command.
+
+ return exec_isa_ata_cmd( dev, seg, off, numSect );
+}
+
+//***********************************************************
+//
+// dma_isa_packet() - DMA in ISA Multiword for ATAPI Packet
+//
+//***********************************************************
+
+int dma_isa_packet( int dev,
+ unsigned int cpbc,
+ unsigned int cpseg, unsigned int cpoff,
+ int dir,
+ long dpbc,
+ unsigned int dpseg, unsigned int dpoff,
+ unsigned long lba )
+
+{
+ unsigned char status;
+ unsigned char reason;
+ unsigned char lowCyl;
+ unsigned char highCyl;
+ int ndx;
+ unsigned char far * cfp;
+ unsigned long lw1, lw2;
+
+ // mark start of isa dma PI cmd in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_S_PID );
+
+ // Make sure the command packet size is either 12 or 16
+ // and save the command packet size and data.
+
+ cpbc = cpbc < 12 ? 12 : cpbc;
+ cpbc = cpbc > 12 ? 16 : cpbc;
+
+ // Setup current command information.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_ATAPI;
+ reg_cmd_info.ct = dir ? TRC_TYPE_PDMAO : TRC_TYPE_PDMAI;
+ reg_cmd_info.cmd = CMD_PACKET;
+ reg_cmd_info.fr1 = reg_atapi_reg_fr | 0x01; // packet DMA mode !
+ reg_cmd_info.sc1 = reg_atapi_reg_sc;
+ reg_cmd_info.sn1 = reg_atapi_reg_sn;
+ reg_cmd_info.cl1 = 0; // no Byte Count Limit in DMA !
+ reg_cmd_info.ch1 = 0; // no Byte Count Limit in DMA !
+ reg_cmd_info.dh1 = dev ? CB_DH_DEV1 : CB_DH_DEV0;
+ reg_cmd_info.dc1 = int_use_intr_flag ? 0 : CB_DC_NIEN;
+ reg_cmd_info.lbaSize = LBA32;
+ reg_cmd_info.lbaLow1 = lba;
+ reg_cmd_info.lbaHigh1 = 0L;
+ reg_atapi_cp_size = cpbc;
+ cfp = MK_FP( cpseg, cpoff );
+ for ( ndx = 0; ndx < cpbc; ndx ++ )
+ {
+ reg_atapi_cp_data[ndx] = * cfp;
+ cfp ++ ;
+ }
+
+ // Zero the alternate ATAPI register data.
+
+ reg_atapi_reg_fr = 0;
+ reg_atapi_reg_sc = 0;
+ reg_atapi_reg_sn = 0;
+ reg_atapi_reg_dh = 0;
+
+ // Quit now if no dma channel set up
+
+ if ( ! dmaChan )
+ {
+ reg_cmd_info.ec = 70;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ sub_trace_command();
+ trc_llt( 0, 0, TRC_LLT_E_PID );
+ return 1;
+ }
+
+ // the data packet byte count must be even
+ // and must not be zero
+
+ if ( dpbc & 1L )
+ dpbc ++ ;
+ if ( dpbc < 2L )
+ dpbc = 2L;
+
+ // Quit now if 1) I/O buffer overrun possible
+ // or 2) DMA can't handle the transfer size.
+
+ if ( ( dpbc > 131072L ) || ( dpbc > reg_buffer_size ) )
+ {
+ reg_cmd_info.ec = 61;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ sub_trace_command();
+ trc_llt( 0, 0, TRC_LLT_E_PID );
+ return 1;
+ }
+
+ // set up the dma transfer(s)
+
+ set_up_xfer( dir, dpbc, dpseg, dpoff );
+
+ // Set command time out.
+
+ tmr_set_timeout();
+
+ // Select the drive - call the reg_select function.
+ // Quit now if this fails.
+
+ if ( sub_select( dev ) )
+ {
+ sub_trace_command();
+ trc_llt( 0, 0, TRC_LLT_E_PID );
+ return 1;
+ }
+
+ // Set up all the registers except the command register.
+
+ sub_setup_command();
+
+ // For interrupt mode, install interrupt handler.
+
+ int_save_int_vect();
+
+ // program the dma channel for the first or only transfer.
+
+ prog_dma_chan( page1, addr1, count1, modeByte );
+
+ // Start the command by setting the Command register. The drive
+ // should immediately set BUSY status.
+
+ pio_outbyte( CB_CMD, CMD_PACKET );
+
+ // Waste some time by reading the alternate status a few times.
+ // This gives the drive time to set BUSY in the status register on
+ // really fast systems. If we don't do this, a slow drive on a fast
+ // system may not set BUSY fast enough and we would think it had
+ // completed the command when it really had not even started the
+ // command yet.
+
+ ATA_DELAY();
+
+ // Command packet transfer...
+ // Check for protocol failures,
+ // the device should have BSY=1 or
+ // if BSY=0 then either DRQ=1 or CHK=1.
+
+ ATAPI_DELAY( dev );
+ status = pio_inbyte( CB_ASTAT );
+ if ( status & CB_STAT_BSY )
+ {
+ // BSY=1 is OK
+ }
+ else
+ {
+ if ( status & ( CB_STAT_DRQ | CB_STAT_ERR ) )
+ {
+ // BSY=0 and DRQ=1 is OK
+ // BSY=0 and ERR=1 is OK
+ }
+ else
+ {
+ reg_cmd_info.failbits |= FAILBIT0; // not OK
+ }
+ }
+
+ // Command packet transfer...
+ // Poll Alternate Status for BSY=0.
+
+ trc_llt( 0, 0, TRC_LLT_PNBSY );
+ while ( 1 )
+ {
+ status = pio_inbyte( CB_ASTAT ); // poll for not busy
+ if ( ( status & CB_STAT_BSY ) == 0 )
+ break;
+ if ( tmr_chk_timeout() ) // time out yet ?
+ {
+ trc_llt( 0, 0, TRC_LLT_TOUT ); // yes
+ reg_cmd_info.to = 1;
+ reg_cmd_info.ec = 75;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break;
+ }
+ }
+
+ // Command packet transfer...
+ // Check for protocol failures... no interrupt here please!
+ // Clear any interrupt the command packet transfer may have caused.
+
+ if ( int_intr_flag ) // extra interrupt(s) ?
+ reg_cmd_info.failbits |= FAILBIT1;
+ int_intr_flag = 0;
+
+ // Command packet transfer...
+ // If no error, transfer the command packet.
+
+ if ( reg_cmd_info.ec == 0 )
+ {
+
+ // Command packet transfer...
+ // Read the primary status register and the other ATAPI registers.
+
+ status = pio_inbyte( CB_STAT );
+ reason = pio_inbyte( CB_SC );
+ lowCyl = pio_inbyte( CB_CL );
+ highCyl = pio_inbyte( CB_CH );
+
+ // Command packet transfer...
+ // check status: must have BSY=0, DRQ=1 now
+
+ if ( ( status & ( CB_STAT_BSY | CB_STAT_DRQ | CB_STAT_ERR ) )
+ != CB_STAT_DRQ
+ )
+ {
+ reg_cmd_info.ec = 76;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+ else
+ {
+ // Command packet transfer...
+ // Check for protocol failures...
+ // check: C/nD=1, IO=0.
+
+ if ( ( reason & ( CB_SC_P_TAG | CB_SC_P_REL | CB_SC_P_IO ) )
+ || ( ! ( reason & CB_SC_P_CD ) )
+ )
+ reg_cmd_info.failbits |= FAILBIT2;
+ if ( ( lowCyl != reg_cmd_info.cl1 )
+ || ( highCyl != reg_cmd_info.ch1 ) )
+ reg_cmd_info.failbits |= FAILBIT3;
+
+ // Command packet transfer...
+ // trace cdb byte 0,
+ // xfer the command packet (the cdb)
+
+ trc_llt( 0, * (unsigned char far *) MK_FP( cpseg, cpoff ), TRC_LLT_P_CMD );
+ pio_drq_block_out( CB_DATA, cpseg, cpoff, cpbc >> 1 );
+ }
+ }
+
+ // Data transfer...
+ // If this transfer requires two dma transfers,
+ // wait for the first transfer to complete and
+ // then program the dma channel for the second transfer.
+
+ if ( ( reg_cmd_info.ec == 0 ) && doTwo )
+ {
+ // Data transfer...
+ // wait for dma chan to transfer first part by monitoring
+ // the dma channel's terminal count status bit
+ // -or-
+ // watch for command completion due to an error
+ // -or-
+ // time out if this takes too long.
+
+ trc_llt( 0, 0, TRC_LLT_DMA2 );
+ while ( 1 )
+ {
+ if ( inportb( 0xd0 ) & dmaTCbit ) // terminal count yet ?
+ break; // yes - ok!
+ if ( chk_cmd_done() ) // cmd done ?
+ {
+ reg_cmd_info.ec = 71;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break;
+ }
+ if ( tmr_chk_timeout() ) // time out yet ?
+ {
+ trc_llt( 0, 0, TRC_LLT_TOUT );
+ reg_cmd_info.to = 1;
+ reg_cmd_info.ec = 72;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break;
+ }
+ }
+
+ // if no error, set up 2nd transfer
+
+ if ( reg_cmd_info.ec == 0 )
+ {
+ // update bytes transferred count
+ reg_cmd_info.totalBytesXfer += count1 << 1;
+
+ // program dma channel to transfer the second part
+ prog_dma_chan( page2, addr2, count2, modeByte );
+ count1 = count2;
+ }
+ }
+
+ // End of command...
+ // if no error,
+ // wait for drive to signal command completion
+ // -or-
+ // time out if this takes to long.
+
+ if ( reg_cmd_info.ec == 0 )
+ {
+ if ( int_use_intr_flag )
+ trc_llt( 0, 0, TRC_LLT_WINT );
+ else
+ trc_llt( 0, 0, TRC_LLT_PNBSY );
+ while ( 1 )
+ {
+ if ( chk_cmd_done() ) // cmd done ?
+ break; // yes
+ if ( tmr_chk_timeout() ) // time out yet ?
+ {
+ trc_llt( 0, 0, TRC_LLT_TOUT ); // yes
+ reg_cmd_info.to = 1;
+ reg_cmd_info.ec = 73;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break;
+ }
+ }
+ }
+
+ // End of command...
+ // disable/stop the dma channel
+
+ trc_llt( 0, 0, TRC_LLT_DMA3 );
+ disableChan();
+
+ // End of command...
+ // If polling or error read the Status register,
+ // otherwise use the Status register value that was read
+ // by the interrupt handler.
+
+ if ( ( ! int_use_intr_flag ) || ( reg_cmd_info.ec ) )
+ status = pio_inbyte( CB_STAT );
+ else
+ status = int_ata_status;
+
+ // Final status check...
+ // if no error, check final status...
+ // Error if BUSY, DEVICE FAULT, DRQ or ERROR status now.
+
+ if ( reg_cmd_info.ec == 0 )
+ {
+ if ( status & ( CB_STAT_BSY | CB_STAT_DRQ | CB_STAT_ERR ) )
+ {
+ reg_cmd_info.ec = 74;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+ }
+
+ // Final status check...
+ // Check for protocol failures...
+ // check: C/nD=1, IO=1.
+
+ reason = pio_inbyte( CB_SC );
+ if ( ( reason & ( CB_SC_P_TAG | CB_SC_P_REL ) )
+ || ( ! ( reason & CB_SC_P_IO ) )
+ || ( ! ( reason & CB_SC_P_CD ) )
+ )
+ reg_cmd_info.failbits |= FAILBIT8;
+
+ // Final status check...
+ // update total bytes transferred
+
+ clearFF();
+ lw1 = inportb( dmaCntrReg );
+ lw2 = inportb( dmaCntrReg );
+ lw1 = ( ( lw2 << 8 ) | lw1 ) + 1;
+ lw1 = lw1 & 0x0000ffffL;
+ reg_cmd_info.totalBytesXfer += ( count1 - lw1 ) << 1;
+
+ // Done...
+ // Read the output registers and trace the command.
+
+ sub_trace_command();
+
+ // Done...
+ // For interrupt mode, remove interrupt handler.
+
+ int_restore_int_vect();
+
+ // Done...
+ // mark end of isa dma PI cmd in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_E_PID );
+
+ // All done. The return values of this function are described in
+ // ATAIO.H.
+
+ if ( reg_cmd_info.ec )
+ return 1;
+ return 0;
+}
+
+// end ataioisa.c
--- /dev/null
+//********************************************************************
+// ATA LOW LEVEL I/O DRIVER -- ATAIOPCI.C
+//
+// by Hale Landis (www.ata-atapi.com)
+//
+// There is no copyright and there are no restrictions on the use
+// of this ATA Low Level I/O Driver code. It is distributed to
+// help other programmers understand how the ATA device interface
+// works and it is distributed without any warranty. Use this
+// code at your own risk.
+//
+// This code is based on the ATA-2, ATA-3 and ATA-4 standards and
+// on interviews with various ATA controller and drive designers.
+//
+// This code has been run on many ATA (IDE) drives and
+// MFM/RLL controllers. This code may be a little
+// more picky about the status it sees at various times. A real
+// BIOS probably would not check the status as carefully.
+//
+// Compile with one of the Borland C or C++ compilers.
+//
+// This C source contains the functions for executing ATA PCI bus
+// mastering READ/WRITE DMA commands for ATA and ATAPI.
+//********************************************************************
+
+#include <dos.h>
+
+#include "ataio.h"
+
+#define DEBUG_PCI 0x00 // not zero for debug
+ // 0x01 trace the interrupt counter and flag
+ // 0x02 debug LARGE PRD
+
+#if DEBUG_PCI & 0x02
+ #include <stdio.h>
+ extern unsigned char far LFB[128];
+ extern void prt( void );
+ extern void pstr( unsigned char * s );
+#endif
+
+//***********************************************************
+//
+// Some notes about PCI bus mastering DMA...
+//
+// ATA PCI Bus Master DMA was first described by the SFF-8038
+// document. That document is now very obsolete and generally
+// difficult to obtain. The ANSI INCITS T13 document "ATA Host
+// Adapter Standards" (T13 document 1510D) has replaced
+// SFF-8038. This code supports the type of DMA described by
+// sections 1 to 5 of the T13 1510D document.
+//
+// Note that the T13 1510D document also describes (in section 6) a
+// complex DMA engine called ADMA. While ADMA is a good idea it
+// will probably never be popular or widely implemented. This code
+// does not support ADMA.
+//
+// The base address of the Bus Master Control Registers (BMIDE) is
+// found in the PCI Configuration space for the ATA controller (at
+// offset 0x30 in the config space data). This is normally an I/O
+// address.
+//
+// The BMIDE data is 16 bytes of data starting at the BMIDE base
+// address. The first 8 bytes is for the primary ATA channel and
+// the second 8 bytes is for the secondary ATA channel. The 8 bytes
+// contain a "command" byte and a "status" byte and a 4 byte
+// (32-bit) physical memory address pointing to the Physical Region
+// Descriptor (PRD) list. Each PRD entry describes an area of
+// memory or data buffer for the DMA transfer. A region described
+// by a PRD may not cross a 64K byte boundary in physical memory.
+// Also, the PRD list must not cross a 64K byte boundary.
+//
+// SIMPLE/COMPLEX PRD lists...
+// This code can build a PRD list for data transfers up to 256K
+// bytes. These types of PRD lists are built in a data area
+// that is statically allocated below. These PRD lists use
+// transfer the data to/from the caller's I/O buffer.
+//
+// LARGE PRD lists...
+// This code also supports READ/WRITE DMA EXT command transfers
+// up to 65536 sectors. This is done by creating a large
+// PRD list in the caller's I/O buffer. This PRD list
+// reuses a 64K part of the caller's I/O buffer for the data transfer.
+// In this manner transfers up toe 65536 sectors (or about 33Mbytes).
+// See the function dma_pci_set_max_xfer().
+//
+//***********************************************************
+
+//***********************************************************
+//
+// pci bus master registers and PRD list buffer,
+// see dma_pci_config().
+//
+//***********************************************************
+
+// public data...
+
+int dma_pci_prd_type; // type of PRD list to use
+
+long dma_pci_largeMaxB; // max LARGE dma xfer size in bytes
+long dma_pci_largeMaxS; // max LARGE dma xfer size in sectors
+unsigned long far * dma_pci_largePrdBufPtr; // LARGE PRD buffer ptr
+unsigned char far * dma_pci_largeIoBufPtr; // LARGE PRD I/O address
+
+unsigned long far * dma_pci_prd_ptr; // current PRD buffer address
+int dma_pci_num_prd; // current number of PRD entries
+
+// private data...
+
+// data used by SIMPLE/COMPLEX PRD lists
+
+#define MAX_TRANSFER_SIZE 262144L // max transfer size (in bytes,
+ // should be multiple of 65536)
+
+#define MAX_SEG ((MAX_TRANSFER_SIZE/65536L)+2L) // number physical segments
+#define MAX_PRD (MAX_SEG*4L) // number of PRDs required
+
+#define PRD_BUF_SIZE (48+(2*MAX_PRD*8)) // size of PRD list buffer
+
+static unsigned char far prdBuf[PRD_BUF_SIZE]; // PRD buffer address
+static unsigned long far * prdBufPtr; // PRD addr (seg:off) off is 0
+
+// BMIDE data
+
+static unsigned char statReg; // save BM status reg bits
+static unsigned char rwControl; // read/write control bit setting
+
+//***********************************************************
+//
+// set_up_xfer() -- set up the PRD entry list
+//
+// NOTE:
+// dma_pci_prd_type == PCI_TYPE_LARGE uses part of the caller's
+// I/O buffer to hold a large PRD list and another part of the
+// caller's I/O buffer to send/receive the actual data. Each
+// PRD entry uses the same memory address.
+//
+//***********************************************************
+
+static int set_up_xfer( int dir, long bc, unsigned int seg, unsigned int off );
+
+static int set_up_xfer( int dir, long bc, unsigned int seg, unsigned int off )
+
+{
+ int numPrd; // number of PRD required
+ int maxPrd; // max number of PRD allowed
+ unsigned long temp;
+ unsigned long phyAddr; // physical memory address
+ unsigned long savePhyAddr; // physical memory address
+ unsigned long bigCnt; // complex big count
+ unsigned long smallCnt; // complex small count
+ unsigned long far * prdPtr; // pointer to PRD entry list
+
+ // disable/stop the dma channel, clear interrupt and error bits
+ sub_writeBusMstrCmd( BM_CR_MASK_STOP );
+ sub_writeBusMstrStatus( statReg | BM_SR_MASK_INT | BM_SR_MASK_ERR );
+
+ // setup to build the PRD list...
+ if ( dma_pci_prd_type == PRD_TYPE_LARGE )
+ {
+ // ...set up for LARGE PRD list
+ // ...max PRDs allowed
+ maxPrd = 512;
+ // ...set big and small counts to max
+ bigCnt = smallCnt = 65536L;
+ // ...set the LARGE PRD buffer address
+ dma_pci_prd_ptr = prdPtr = dma_pci_largePrdBufPtr;
+ // ...convert I/O buffer address to physical memory address
+ phyAddr = (unsigned long) FP_SEG( dma_pci_largeIoBufPtr );
+ phyAddr = phyAddr << 4;
+ phyAddr = phyAddr + (unsigned long) FP_OFF( dma_pci_largeIoBufPtr );
+ phyAddr = phyAddr & 0xfffffffeL;
+ }
+ else
+ {
+ // ...set up for SIMPLE/COMPLEX PRD list
+ // ...max PRDs allowed
+ maxPrd = (int) MAX_PRD;
+ // ...set big and small counts to max
+ bigCnt = smallCnt = 65536L;
+ // ...adjust PRD buffer address and adjust big and small counts
+ prdPtr = prdBufPtr;
+ if ( dma_pci_prd_type == PRD_TYPE_COMPLEX )
+ {
+ temp = tmr_read_bios_timer();
+ prdPtr = MK_FP( FP_SEG( prdBufPtr ),
+ (unsigned int) ( temp & 0x0000000cL ) );
+ smallCnt = ( temp & 0x000000feL ) + 2L;
+ bigCnt = bigCnt - smallCnt - ( temp & 0x0000000eL );
+ }
+ // ...set the SIMPLE/COMPLEX PRD buffer address
+ dma_pci_prd_ptr = prdPtr;
+ // ... convert I/O buffer address to an physical memory address
+ phyAddr = (unsigned long) seg;
+ phyAddr = phyAddr << 4;
+ phyAddr = phyAddr + (unsigned long) off;
+ phyAddr = phyAddr & 0xfffffffeL;
+ }
+ savePhyAddr = phyAddr;
+
+ #if DEBUG_PCI & 0x02
+ pstr( "z=>[prd] set_up_xfer()..." );
+ sprintf( LFB, "z=>[prd] dir %d bc %lx seg %04x off %04x",
+ dir, bc, seg, off );
+ prt();
+ sprintf( LFB, "z=>[prd] maxPrd %d prdPtr %Fp bigCnt %lx smallCnt %lx",
+ maxPrd, prdPtr, bigCnt, smallCnt );
+ prt();
+ sprintf( LFB, "z=>[prd] phyAddr %08lx", phyAddr );
+ prt();
+ #endif
+
+ // build the PRD list...
+ // ...PRD entry format:
+ // +0 to +3 = memory address
+ // +4 to +5 = 0x0000 (not EOT) or 0x8000 (EOT)
+ // +6 to +7 = byte count
+ // ...zero number of PRDs
+ numPrd = 0;
+ // ...loop to build each PRD
+ while ( bc > 0 )
+ {
+ if ( numPrd >= maxPrd )
+ return 1;
+ // set this PRD's address
+ if ( dma_pci_prd_type == PRD_TYPE_LARGE )
+ phyAddr = savePhyAddr;
+ prdPtr[0] = phyAddr;
+ // set count for this PRD
+ if ( ( numPrd & 0x0003 ) == 0x0002 )
+ temp = bigCnt; // use big count (1 of 4 PRDs)
+ else // else
+ temp = smallCnt; // use small count (3 of 4 PRDs)
+ if ( temp > bc ) // count to large?
+ temp = bc; // yes - use actual count
+ // check if count will fit
+ phyAddr = phyAddr + temp;
+ if ( ( phyAddr & 0xffff0000L ) != ( prdPtr[0] & 0xffff0000L ) )
+ {
+ phyAddr = phyAddr & 0xffff0000L;
+ temp = phyAddr - prdPtr[0];
+ }
+ // set this PRD's count
+ prdPtr[1] = temp & 0x0000ffffL;
+ // update byte count
+ bc = bc - temp;
+ // set the end bit in the prd list
+ if ( bc < 1 )
+ prdPtr[1] = prdPtr[1] | 0x80000000L;
+ prdPtr ++ ;
+ prdPtr ++ ;
+ numPrd ++ ;
+ }
+
+ // return the current PRD list size and
+ // set the prd list address in the BMIDE:
+ // convert PRD buffer seg:off to a physical address
+ // and write into BMIDE PRD address registers.
+
+ dma_pci_num_prd = numPrd;
+ temp = FP_SEG( dma_pci_prd_ptr );
+ temp = temp << 4;
+ temp = temp + FP_OFF( dma_pci_prd_ptr );
+ outport( pio_bmide_base_addr + BM_PRD_ADDR_LOW,
+ (unsigned int) ( temp & 0x0000ffffL ) );
+ outport( pio_bmide_base_addr + BM_PRD_ADDR_HIGH,
+ (unsigned int) ( ( temp & 0xffff0000L ) >> 16 ) );
+
+ #if DEBUG_PCI & 0x02
+ {
+ int ndx;
+ unsigned long far * lfp;
+
+ pstr( "z=>[prd] ----- Bus Master PRD List -----" );
+ sprintf( LFB, "z=>[prd] PRD PhyAddr %08lX",
+ ( ( (unsigned long) FP_SEG( dma_pci_prd_ptr ) ) << 4 )
+ + ( (unsigned long) FP_OFF( dma_pci_prd_ptr ) ) );
+ prt();
+ lfp = dma_pci_prd_ptr;
+ ndx = 0;
+ while ( ndx < dma_pci_num_prd )
+ {
+ sprintf( LFB, "z=>[prd] PRD %2d - PhyAddr %08lX Cnt %08lX",
+ ndx, * lfp, * ( lfp + 1 ) );
+ prt();
+ lfp ++ ;
+ if ( ( * lfp ) & 0x80000000L )
+ break;
+ lfp ++ ;
+ ndx ++ ;
+ }
+ }
+ #endif
+
+ // set the read/write control:
+ // PCI reads for ATA Write DMA commands,
+ // PCI writes for ATA Read DMA commands.
+
+ if ( dir )
+ rwControl = BM_CR_MASK_READ; // ATA Write DMA
+ else
+ rwControl = BM_CR_MASK_WRITE; // ATA Read DMA
+ sub_writeBusMstrCmd( rwControl );
+ return 0;
+}
+
+//***********************************************************
+//
+// dma_pci_config() - configure/setup for Read/Write DMA
+//
+// The caller must call this function before attempting
+// to use any ATA or ATAPI commands in PCI DMA mode.
+//
+//***********************************************************
+
+int dma_pci_config( unsigned int regAddr )
+
+{
+ unsigned int off;
+ unsigned int seg;
+ unsigned long lw;
+
+ // check reg address
+
+ if ( regAddr & 0x0007 ) // error if regs addr
+ return 1; // are not xxx0h or xxx8h
+
+ // save the base i/o address of the bus master (BMIDE) regs
+
+ pio_bmide_base_addr = regAddr;
+
+ // disable if reg address is zero
+
+ if ( ! regAddr ) // if zero,
+ return 0; // PCI DMA is disabled.
+
+ // Set up the PRD entry list buffer address - the PRD entry list
+ // may not span a 64KB boundary in physical memory. Space is
+ // allocated (above) for this buffer such that it will be
+ // aligned on a seqment boundary (off of seg:off will be 0)
+ // and such that the PRD list will not span a 64KB boundary...
+ // ...convert seg:off to physical address.
+ seg = FP_SEG( (unsigned char far *) prdBuf );
+ off = FP_OFF( (unsigned char far *) prdBuf );
+ lw = (unsigned long) seg;
+ lw = lw << 4;
+ lw = lw + (unsigned long) off;
+ // ...move up to a segment boundary.
+ lw = lw + 15;
+ lw = lw & 0xfffffff0L;
+ // ...check for 64KB boundary in the first part of the PRD buffer,
+ // ...if so just move the buffer to that boundary.
+ if ( ( lw & 0xffff0000L )
+ !=
+ ( ( lw + ( MAX_PRD * 8L ) - 1L ) & 0xffff0000L )
+ )
+ lw = ( lw + ( MAX_PRD * 8L ) ) & 0xffff0000L;
+ // ...convert back to seg:off, note that off is now 0
+ seg = (unsigned int) ( lw >> 4 );
+ dma_pci_prd_ptr = prdBufPtr = MK_FP( seg, 0 );
+ // ... current size of the SIMPLE/COMPLEX PRD buffer
+ dma_pci_num_prd = 0;
+
+ // read the BM status reg and save the upper 3 bits.
+ statReg = sub_readBusMstrStatus() & 0x60;
+
+ // initialize the large PRD list info
+ dma_pci_largePrdBufPtr = (void *) 0;
+ dma_pci_largeIoBufPtr = (void *) 0;
+ dma_pci_largeMaxB = 0;
+ dma_pci_largeMaxS = 0;
+
+ return 0;
+}
+
+//***********************************************************
+//
+// determine max dma transfer for PRD type LARGE
+//
+// dma_pci_prd_type == PCI_TYPE_LARGE uses part of the caller's
+// I/O buffer to hold a large PRD list and another part of the
+// caller's I/O buffer to send/receive the actual data. Each
+// PRD entry uses the same memory address.
+//
+//***********************************************************
+
+void dma_pci_set_max_xfer( unsigned int seg, unsigned int off,
+ long bufSize )
+
+{
+ long bufStart; // buffer starting physical memory address
+ long bufEnd; // buffer ending physical memory address (+1)
+ long pmaStart; // start of 64K area within buffer
+ long pmaEnd; // end of 64K area within buffer
+
+ // save buffer size
+ reg_buffer_size = bufSize;
+
+ // large DMA xfers not supported
+ dma_pci_largePrdBufPtr = (void *) 0;
+ dma_pci_largeIoBufPtr = (void *) 0;
+ dma_pci_largeMaxB = 0L;
+ dma_pci_largeMaxS = 0L;
+
+ // convert I/O buffer address from seg:off to an absolute memory address
+ // note: the physical address must be a word boundary (an even number).
+ bufStart = (unsigned long) seg;
+ bufStart = bufStart << 4;
+ bufStart = bufStart + (unsigned long) off;
+ bufStart = bufStart & 0xfffffffeL;
+ // move up to dword boundary
+ bufStart = ( bufStart + 15L ) & 0xfffffff0;
+ // compute end
+ bufEnd = bufStart + bufSize;
+ // compute start/end of 64K area (pma)
+ // that will be the I/O buffer
+ pmaStart = ( bufStart + 0x00010000L ) & 0xffff0000;
+ pmaEnd = pmaStart + 0x00010000L;
+
+ // if pma is in buffer then...
+ if ( ( pmaStart < bufEnd ) && ( pmaEnd <= bufEnd ) )
+ {
+ // ...find location for PRD list
+ if ( ( pmaStart - bufStart ) >= 4096L )
+ {
+ // PRD buffer first (I/O buffer second)
+ dma_pci_largePrdBufPtr = MK_FP( (unsigned int) ( bufStart >> 4 ), 0 );
+ }
+ else
+ if ( ( bufEnd - pmaEnd ) >= 4096L )
+ {
+ // PRD buffer second (I/O buffer first)
+ dma_pci_largePrdBufPtr = MK_FP( (unsigned int) ( pmaEnd >> 4 ), 0 );
+ }
+ if ( dma_pci_largePrdBufPtr )
+ {
+ dma_pci_largeIoBufPtr = MK_FP( (unsigned int) ( pmaStart >> 4 ), 0 );
+ dma_pci_largeMaxB = 65536L * 512L;
+ dma_pci_largeMaxS = 65536L;
+ }
+ }
+
+ #if DEBUG_PCI & 0x02
+ pstr( "z=>[dma] dma_pci_set_max_xfer()..." );
+ sprintf( LFB, "z=>[dma] seg %04x off %04x bufSize %lx", seg, off, bufSize );
+ prt();
+ sprintf( LFB, "z=>[dma] bufStart %lx bufEnd %lx", bufStart, bufEnd );
+ prt();
+ sprintf( LFB, "z=>[dma] pmaStart %lx pmaEnd %lx", pmaStart, pmaEnd );
+ prt();
+ sprintf( LFB, "z=>[dma] largePrdBufPtr %Fp largeIoBufPtr %Fp",
+ dma_pci_largePrdBufPtr, dma_pci_largeIoBufPtr );
+ prt();
+ sprintf( LFB, "z=>[dma] dma_pci_largeMaxB %ld dma_pci_largeMaxS %ld",
+ dma_pci_largeMaxB, dma_pci_largeMaxS );
+ prt();
+ #endif
+
+}
+
+//***********************************************************
+//
+// exec_pci_ata_cmd() - PCI Bus Master for ATA R/W DMA commands
+//
+//***********************************************************
+
+static int exec_pci_ata_cmd( int dev,
+ unsigned int seg, unsigned int off,
+ long numSect );
+
+static int exec_pci_ata_cmd( int dev,
+ unsigned int seg, unsigned int off,
+ long numSect )
+
+{
+ unsigned int cntr;
+ unsigned char status;
+ long lw;
+
+ // mark start of a R/W DMA command in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_S_RWD );
+
+ // Quit now if no dma channel set up
+ // or interrupts are not enabled.
+
+ if ( ( ! pio_bmide_base_addr ) || ( ! int_use_intr_flag ) )
+ {
+ reg_cmd_info.ec = 70;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ sub_trace_command();
+ trc_llt( 0, 0, TRC_LLT_E_RWD );
+ return 1;
+ }
+
+ // Quit now if 1) I/O buffer overrun possible.
+ // or 2) DMA can't handle the transfer size.
+
+ lw = numSect * 512L;
+ if ( ( ( dma_pci_prd_type != PRD_TYPE_LARGE )
+ && ( ( lw > MAX_TRANSFER_SIZE ) || ( lw > reg_buffer_size ) ) )
+ ||
+ ( ( dma_pci_prd_type == PRD_TYPE_LARGE )
+ && ( lw > dma_pci_largeMaxB ) )
+ )
+ {
+ reg_cmd_info.ec = 61;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ sub_trace_command();
+ trc_llt( 0, 0, TRC_LLT_E_PID );
+ return 1;
+ }
+
+ // Set up the dma transfer
+
+ if ( set_up_xfer( ( reg_cmd_info.cmd == CMD_WRITE_DMA )
+ || ( reg_cmd_info.cmd == CMD_WRITE_DMA_EXT )
+ || ( reg_cmd_info.cmd == CMD_WRITE_DMA_FUA_EXT ),
+ numSect * 512L, seg, off ) )
+ {
+ reg_cmd_info.ec = 61;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ sub_trace_command();
+ trc_llt( 0, 0, TRC_LLT_E_PID );
+ return 1;
+ }
+
+ // Set command time out.
+
+ tmr_set_timeout();
+
+ // Select the drive - call the sub_select function.
+ // Quit now if this fails.
+
+ if ( sub_select( dev ) )
+ {
+ sub_trace_command();
+ trc_llt( 0, 0, TRC_LLT_E_RWD );
+ return 1;
+ }
+
+ // Set up all the registers except the command register.
+
+ sub_setup_command();
+
+ // For interrupt mode, install interrupt handler.
+
+ int_save_int_vect();
+
+ // Start the command by setting the Command register. The drive
+ // should immediately set BUSY status.
+
+ pio_outbyte( CB_CMD, reg_cmd_info.cmd );
+
+ // The drive should start executing the command including any
+ // data transfer.
+
+ // Data transfer...
+ // read the BMIDE regs
+ // enable/start the dma channel.
+ // read the BMIDE regs again
+
+ sub_readBusMstrCmd();
+ sub_readBusMstrStatus();
+ sub_writeBusMstrCmd( rwControl | BM_CR_MASK_START );
+ sub_readBusMstrCmd();
+ sub_readBusMstrStatus();
+
+ // Data transfer...
+ // the device and dma channel transfer the data here while we start
+ // checking for command completion...
+ // wait for the PCI BM Interrupt=1 (see ATAIOINT.C)...
+
+ trc_llt( 0, 0, TRC_LLT_WINT );
+ cntr = 0;
+ while ( 1 )
+ {
+ cntr ++ ;
+ if ( ! ( cntr & 0x1fff ) )
+ {
+ sub_readBusMstrStatus(); // read BM status (for trace)
+ if ( ! ( reg_incompat_flags & REG_INCOMPAT_DMA_POLL ) )
+ pio_inbyte( CB_ASTAT ); // poll Alt Status
+ }
+ if ( int_intr_flag ) // interrupt ?
+ {
+ trc_llt( 0, 0, TRC_LLT_INTRQ ); // yes
+ trc_llt( 0, int_bm_status, TRC_LLT_R_BM_SR );
+ trc_llt( CB_STAT, int_ata_status, TRC_LLT_INB );
+ trc_llt( 0, 0x04, TRC_LLT_W_BM_SR );
+ break;
+ }
+ if ( tmr_chk_timeout() ) // time out ?
+ {
+ trc_llt( 0, 0, TRC_LLT_TOUT ); // yes
+ reg_cmd_info.to = 1;
+ reg_cmd_info.ec = 73;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break;
+ }
+ }
+
+ if ( reg_incompat_flags & REG_INCOMPAT_DMA_DELAY )
+ {
+ tmr_delay_1ms( 1L ); // delay for buggy controllers
+ }
+
+ // End of command...
+ // disable/stop the dma channel
+
+ status = int_bm_status; // read BM status
+ status &= ~ BM_SR_MASK_ACT; // ignore Active bit
+ sub_writeBusMstrCmd( BM_CR_MASK_STOP ); // shutdown DMA
+ sub_readBusMstrCmd(); // read BM cmd (just for trace)
+ status |= sub_readBusMstrStatus(); // read BM status again
+
+ if ( reg_incompat_flags & REG_INCOMPAT_DMA_DELAY )
+ {
+ tmr_delay_1ms( 1L ); // delay for buggy controlers
+ }
+
+ if ( reg_cmd_info.ec == 0 )
+ {
+ if ( status & BM_SR_MASK_ERR ) // bus master error?
+ {
+ reg_cmd_info.ec = 78; // yes
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+ }
+ if ( reg_cmd_info.ec == 0 )
+ {
+ if ( status & BM_SR_MASK_ACT ) // end of PRD list?
+ {
+ reg_cmd_info.ec = 71; // no
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+ }
+
+ #if DEBUG_PCI & 0x01
+ trc_llt( 0, int_intr_cntr, TRC_LLT_DEBUG ); // for debugging
+ #endif
+
+ // End of command...
+ // If no error use the Status register value that was read
+ // by the interrupt handler. If there was an error
+ // read the Status register because it may not have been
+ // read by the interrupt handler.
+
+ if ( reg_cmd_info.ec )
+ status = pio_inbyte( CB_STAT );
+ else
+ status = int_ata_status;
+
+ // Final status check...
+ // if no error, check final status...
+ // Error if BUSY, DEVICE FAULT, DRQ or ERROR status now.
+
+ if ( reg_cmd_info.ec == 0 )
+ {
+ if ( status & ( CB_STAT_BSY | CB_STAT_DF | CB_STAT_DRQ | CB_STAT_ERR ) )
+ {
+ reg_cmd_info.ec = 74;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+ }
+
+ // Final status check...
+ // if any error, update total bytes transferred.
+
+ if ( reg_cmd_info.ec == 0 )
+ reg_cmd_info.totalBytesXfer = numSect * 512L;
+ else
+ reg_cmd_info.totalBytesXfer = 0L;
+
+ // Done...
+ // Read the output registers and trace the command.
+
+ sub_trace_command();
+
+ // Done...
+ // For interrupt mode, remove interrupt handler.
+
+ int_restore_int_vect();
+
+ // Done...
+ // mark end of a R/W DMA command in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_E_RWD );
+
+ // All done. The return values of this function are described in
+ // ATAIO.H.
+
+ if ( reg_cmd_info.ec )
+ return 1;
+ return 0;
+}
+
+//***********************************************************
+//
+// dma_pci_chs() - PCI Bus Master for ATA R/W DMA commands
+//
+//***********************************************************
+
+int dma_pci_chs( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned int cyl, unsigned int head, unsigned int sect,
+ unsigned int seg, unsigned int off,
+ long numSect )
+
+{
+
+ // Setup current command information.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_ATA;
+ reg_cmd_info.ct = TRC_TYPE_ADMAI;
+ if ( ( cmd == CMD_WRITE_DMA )
+ || ( cmd == CMD_WRITE_DMA_EXT )
+ || ( cmd == CMD_WRITE_DMA_FUA_EXT )
+ )
+ reg_cmd_info.ct = TRC_TYPE_ADMAO;
+ reg_cmd_info.cmd = cmd;
+ reg_cmd_info.fr1 = fr;
+ reg_cmd_info.sc1 = sc;
+ reg_cmd_info.sn1 = sect;
+ reg_cmd_info.cl1 = cyl & 0x00ff;
+ reg_cmd_info.ch1 = ( cyl & 0xff00 ) >> 8;
+ reg_cmd_info.dh1 = ( dev ? CB_DH_DEV1 : CB_DH_DEV0 ) | ( head & 0x0f );
+ reg_cmd_info.dc1 = 0x00; // nIEN=0 required on PCI !
+ reg_cmd_info.ns = numSect;
+ reg_cmd_info.lbaSize = LBACHS;
+
+ // Execute the command.
+
+ return exec_pci_ata_cmd( dev, seg, off, numSect );
+}
+
+//***********************************************************
+//
+// dma_pci_lba28() - DMA in PCI Multiword for ATA R/W DMA
+//
+//***********************************************************
+
+int dma_pci_lba28( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lba,
+ unsigned int seg, unsigned int off,
+ long numSect )
+
+{
+
+ // Setup current command information.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_ATA;
+ reg_cmd_info.ct = TRC_TYPE_ADMAI;
+ if ( ( cmd == CMD_WRITE_DMA )
+ || ( cmd == CMD_WRITE_DMA_EXT )
+ || ( cmd == CMD_WRITE_DMA_FUA_EXT )
+ )
+ reg_cmd_info.ct = TRC_TYPE_ADMAO;
+ reg_cmd_info.cmd = cmd;
+ reg_cmd_info.fr1 = fr;
+ reg_cmd_info.sc1 = sc;
+ reg_cmd_info.dh1 = CB_DH_LBA | (dev ? CB_DH_DEV1 : CB_DH_DEV0 );
+ reg_cmd_info.dc1 = 0x00; // nIEN=0 required on PCI !
+ reg_cmd_info.ns = numSect;
+ reg_cmd_info.lbaSize = LBA28;
+ reg_cmd_info.lbaHigh1 = 0L;
+ reg_cmd_info.lbaLow1 = lba;
+
+ // Execute the command.
+
+ return exec_pci_ata_cmd( dev, seg, off, numSect );
+}
+
+//***********************************************************
+//
+// dma_pci_lba48() - DMA in PCI Multiword for ATA R/W DMA
+//
+//***********************************************************
+
+int dma_pci_lba48( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lbahi, unsigned long lbalo,
+ unsigned int seg, unsigned int off,
+ long numSect )
+
+{
+
+ // Setup current command information.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_ATA;
+ reg_cmd_info.ct = TRC_TYPE_ADMAI;
+ if ( ( cmd == CMD_WRITE_DMA )
+ || ( cmd == CMD_WRITE_DMA_EXT )
+ || ( cmd == CMD_WRITE_DMA_FUA_EXT )
+ )
+ reg_cmd_info.ct = TRC_TYPE_ADMAO;
+ reg_cmd_info.cmd = cmd;
+ reg_cmd_info.fr1 = fr;
+ reg_cmd_info.sc1 = sc;
+ reg_cmd_info.dh1 = CB_DH_LBA | (dev ? CB_DH_DEV1 : CB_DH_DEV0 );
+ reg_cmd_info.dc1 = 0x00; // nIEN=0 required on PCI !
+ reg_cmd_info.ns = numSect;
+ reg_cmd_info.lbaSize = LBA48;
+ reg_cmd_info.lbaHigh1 = lbahi;
+ reg_cmd_info.lbaLow1 = lbalo;
+
+ // Execute the command.
+
+ return exec_pci_ata_cmd( dev, seg, off, numSect );
+}
+
+//***********************************************************
+//
+// dma_pci_packet() - PCI Bus Master for ATAPI Packet command
+//
+//***********************************************************
+
+int dma_pci_packet( int dev,
+ unsigned int cpbc,
+ unsigned int cpseg, unsigned int cpoff,
+ int dir,
+ long dpbc,
+ unsigned int dpseg, unsigned int dpoff,
+ unsigned long lba )
+
+{
+ unsigned char status;
+ unsigned char reason;
+ unsigned char lowCyl;
+ unsigned char highCyl;
+ unsigned int cntr;
+ int ndx;
+ unsigned char far * cfp;
+
+ // mark start of isa dma PI cmd in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_S_PID );
+
+ // Make sure the command packet size is either 12 or 16
+ // and save the command packet size and data.
+
+ cpbc = cpbc < 12 ? 12 : cpbc;
+ cpbc = cpbc > 12 ? 16 : cpbc;
+
+ // Setup current command information.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_ATAPI;
+ reg_cmd_info.ct = dir ? TRC_TYPE_PDMAO : TRC_TYPE_PDMAI;
+ reg_cmd_info.cmd = CMD_PACKET;
+ reg_cmd_info.fr1 = reg_atapi_reg_fr | 0x01; // packet DMA mode !
+ reg_cmd_info.sc1 = reg_atapi_reg_sc;
+ reg_cmd_info.sn1 = reg_atapi_reg_sn;
+ reg_cmd_info.cl1 = 0; // no Byte Count Limit in DMA !
+ reg_cmd_info.ch1 = 0; // no Byte Count Limit in DMA !
+ reg_cmd_info.dh1 = dev ? CB_DH_DEV1 : CB_DH_DEV0;
+ reg_cmd_info.dc1 = 0x00; // nIEN=0 required on PCI !
+ reg_cmd_info.lbaSize = LBA32;
+ reg_cmd_info.lbaLow1 = lba;
+ reg_cmd_info.lbaHigh1 = 0L;
+ reg_atapi_cp_size = cpbc;
+ cfp = MK_FP( cpseg, cpoff );
+ for ( ndx = 0; ndx < cpbc; ndx ++ )
+ {
+ reg_atapi_cp_data[ndx] = * cfp;
+ cfp ++ ;
+ }
+
+ // Zero the alternate ATAPI register data.
+
+ reg_atapi_reg_fr = 0;
+ reg_atapi_reg_sc = 0;
+ reg_atapi_reg_sn = 0;
+ reg_atapi_reg_dh = 0;
+
+ // Quit now if no dma channel set up
+
+ if ( ! pio_bmide_base_addr )
+ {
+ reg_cmd_info.ec = 70;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ sub_trace_command();
+ trc_llt( 0, 0, TRC_LLT_E_PID );
+ return 1;
+ }
+
+ // the data packet byte count must be even
+ // and must not be zero
+
+ if ( dpbc & 1L )
+ dpbc ++ ;
+ if ( dpbc < 2L )
+ dpbc = 2L;
+
+ // Quit now if 1) I/O buffer overrun possible
+ // or 2) DMA can't handle the transfer size.
+
+ if ( ( ( dma_pci_prd_type != PRD_TYPE_LARGE )
+ && ( ( dpbc > MAX_TRANSFER_SIZE ) || ( dpbc > reg_buffer_size ) ) )
+ ||
+ ( ( dma_pci_prd_type == PRD_TYPE_LARGE )
+ && ( dpbc > dma_pci_largeMaxB ) )
+ )
+ {
+ reg_cmd_info.ec = 61;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ sub_trace_command();
+ trc_llt( 0, 0, TRC_LLT_E_PID );
+ return 1;
+ }
+
+ // Set up the dma transfer
+
+ if ( set_up_xfer( dir, dpbc, dpseg, dpoff ) )
+ {
+ reg_cmd_info.ec = 61;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ sub_trace_command();
+ trc_llt( 0, 0, TRC_LLT_E_PID );
+ return 1;
+ }
+
+ // Set command time out.
+
+ tmr_set_timeout();
+
+ // Select the drive - call the reg_select function.
+ // Quit now if this fails.
+
+ if ( sub_select( dev ) )
+ {
+ sub_trace_command();
+ trc_llt( 0, 0, TRC_LLT_E_PID );
+ return 1;
+ }
+
+ // Set up all the registers except the command register.
+
+ sub_setup_command();
+
+ // For interrupt mode, install interrupt handler.
+
+ int_save_int_vect();
+
+ // Start the command by setting the Command register. The drive
+ // should immediately set BUSY status.
+
+ pio_outbyte( CB_CMD, CMD_PACKET );
+
+ // Waste some time by reading the alternate status a few times.
+ // This gives the drive time to set BUSY in the status register on
+ // really fast systems. If we don't do this, a slow drive on a fast
+ // system may not set BUSY fast enough and we would think it had
+ // completed the command when it really had not started the
+ // command yet.
+
+ ATA_DELAY();
+
+ // Command packet transfer...
+ // Check for protocol failures,
+ // the device should have BSY=1 or
+ // if BSY=0 then either DRQ=1 or CHK=1.
+
+ ATAPI_DELAY( dev );
+ status = pio_inbyte( CB_ASTAT );
+ if ( status & CB_STAT_BSY )
+ {
+ // BSY=1 is OK
+ }
+ else
+ {
+ if ( status & ( CB_STAT_DRQ | CB_STAT_ERR ) )
+ {
+ // BSY=0 and DRQ=1 is OK
+ // BSY=0 and ERR=1 is OK
+ }
+ else
+ {
+ reg_cmd_info.failbits |= FAILBIT0; // not OK
+ }
+ }
+
+ // Command packet transfer...
+ // Poll Alternate Status for BSY=0.
+
+ trc_llt( 0, 0, TRC_LLT_PNBSY );
+ while ( 1 )
+ {
+ status = pio_inbyte( CB_ASTAT ); // poll for not busy
+ if ( ( status & CB_STAT_BSY ) == 0 )
+ break;
+ if ( tmr_chk_timeout() ) // time out yet ?
+ {
+ trc_llt( 0, 0, TRC_LLT_TOUT ); // yes
+ reg_cmd_info.to = 1;
+ reg_cmd_info.ec = 75;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break;
+ }
+ }
+
+ // Command packet transfer...
+ // Check for protocol failures... no interrupt here please!
+ // Clear any interrupt the command packet transfer may have caused.
+
+ if ( int_intr_flag ) // extra interrupt(s) ?
+ reg_cmd_info.failbits |= FAILBIT1;
+ int_intr_flag = 0;
+
+ // Command packet transfer...
+ // If no error, transfer the command packet.
+
+ if ( reg_cmd_info.ec == 0 )
+ {
+
+ // Command packet transfer...
+ // Read the primary status register and the other ATAPI registers.
+
+ status = pio_inbyte( CB_STAT );
+ reason = pio_inbyte( CB_SC );
+ lowCyl = pio_inbyte( CB_CL );
+ highCyl = pio_inbyte( CB_CH );
+
+ // Command packet transfer...
+ // check status: must have BSY=0, DRQ=1 now
+
+ if ( ( status & ( CB_STAT_BSY | CB_STAT_DRQ | CB_STAT_ERR ) )
+ != CB_STAT_DRQ
+ )
+ {
+ reg_cmd_info.ec = 76;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+ else
+ {
+ // Command packet transfer...
+ // Check for protocol failures...
+ // check: C/nD=1, IO=0.
+
+ if ( ( reason & ( CB_SC_P_TAG | CB_SC_P_REL | CB_SC_P_IO ) )
+ || ( ! ( reason & CB_SC_P_CD ) )
+ )
+ reg_cmd_info.failbits |= FAILBIT2;
+ if ( ( lowCyl != reg_cmd_info.cl1 )
+ || ( highCyl != reg_cmd_info.ch1 ) )
+ reg_cmd_info.failbits |= FAILBIT3;
+
+ // Command packet transfer...
+ // trace cdb byte 0,
+ // xfer the command packet (the cdb)
+
+ trc_llt( 0, * (unsigned char far *) MK_FP( cpseg, cpoff ), TRC_LLT_P_CMD );
+ pio_drq_block_out( CB_DATA, cpseg, cpoff, cpbc >> 1 );
+ }
+ }
+
+ // Data transfer...
+ // The drive should start executing the command
+ // including any data transfer.
+ // If no error, set up and start the DMA,
+ // and wait for the DMA to complete.
+
+ if ( reg_cmd_info.ec == 0 )
+ {
+
+ // Data transfer...
+ // read the BMIDE regs
+ // enable/start the dma channel.
+ // read the BMIDE regs again
+
+ sub_readBusMstrCmd();
+ sub_readBusMstrStatus();
+ sub_writeBusMstrCmd( rwControl | BM_CR_MASK_START );
+ sub_readBusMstrCmd();
+ sub_readBusMstrStatus();
+
+ // Data transfer...
+ // the device and dma channel transfer the data here while we start
+ // checking for command completion...
+ // wait for the PCI BM Active=0 and Interrupt=1 or PCI BM Error=1...
+
+ trc_llt( 0, 0, TRC_LLT_WINT );
+ cntr = 0;
+ while ( 1 )
+ {
+ cntr ++ ;
+ if ( ! ( cntr & 0x1fff) )
+ {
+ sub_readBusMstrStatus(); // read BM status (for trace)
+ if ( ! ( reg_incompat_flags & REG_INCOMPAT_DMA_POLL ) )
+ pio_inbyte( CB_ASTAT ); // poll Alt Status
+ }
+ if ( int_intr_flag ) // interrupt ?
+ {
+ trc_llt( 0, 0, TRC_LLT_INTRQ ); // yes
+ trc_llt( 0, int_bm_status, TRC_LLT_R_BM_SR );
+ trc_llt( CB_STAT, int_ata_status, TRC_LLT_INB );
+ trc_llt( 0, 0x04, TRC_LLT_W_BM_SR );
+ break;
+ }
+ if ( tmr_chk_timeout() ) // time out ?
+ {
+ trc_llt( 0, 0, TRC_LLT_TOUT ); // yes
+ reg_cmd_info.to = 1;
+ reg_cmd_info.ec = 73;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break;
+ }
+ }
+
+ if ( reg_incompat_flags & REG_INCOMPAT_DMA_DELAY )
+ {
+ tmr_delay_1ms( 1L); // delay for buggy controllers
+ }
+
+ // End of command...
+ // disable/stop the dma channel
+
+ status = int_bm_status; // read BM status
+ status &= ~ BM_SR_MASK_ACT; // ignore Active bit
+ sub_writeBusMstrCmd( BM_CR_MASK_STOP ); // shutdown DMA
+ sub_readBusMstrCmd(); // read BM cmd (just for trace)
+ status |= sub_readBusMstrStatus(); // read BM statu again
+
+ if ( reg_incompat_flags & REG_INCOMPAT_DMA_DELAY )
+ {
+ tmr_delay_1ms( 1L ); // delay for buggy controllers
+ }
+ }
+
+ if ( reg_cmd_info.ec == 0 )
+ {
+ if ( status & ( BM_SR_MASK_ERR ) ) // bus master error?
+ {
+ reg_cmd_info.ec = 78; // yes
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+ if ( ( status & BM_SR_MASK_ACT ) ) // end of PRD list?
+ {
+ reg_cmd_info.ec = 71; // no
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+ }
+
+ #if DEBUG_PCI & 0x01
+ trc_llt( 0, int_intr_cntr, TRC_LLT_DEBUG ); // for debugging
+ #endif
+
+ // End of command...
+ // If no error use the Status register value that was read
+ // by the interrupt handler. If there was an error
+ // read the Status register because it may not have been
+ // read by the interrupt handler.
+
+ if ( reg_cmd_info.ec )
+ status = pio_inbyte( CB_STAT );
+ else
+ status = int_ata_status;
+
+ // Final status check...
+ // if no error, check final status...
+ // Error if BUSY, DRQ or ERROR status now.
+
+ if ( reg_cmd_info.ec == 0 )
+ {
+ if ( status & ( CB_STAT_BSY | CB_STAT_DRQ | CB_STAT_ERR ) )
+ {
+ reg_cmd_info.ec = 74;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+ }
+
+ // Final status check...
+ // Check for protocol failures...
+ // check: C/nD=1, IO=1.
+
+ reason = pio_inbyte( CB_SC );
+ if ( ( reason & ( CB_SC_P_TAG | CB_SC_P_REL ) )
+ || ( ! ( reason & CB_SC_P_IO ) )
+ || ( ! ( reason & CB_SC_P_CD ) )
+ )
+ reg_cmd_info.failbits |= FAILBIT8;
+
+ // Final status check...
+ // if any error, update total bytes transferred.
+
+ if ( reg_cmd_info.ec == 0 )
+ reg_cmd_info.totalBytesXfer = dpbc;
+ else
+ reg_cmd_info.totalBytesXfer = 0L;
+
+ // Done...
+ // Read the output registers and trace the command.
+
+ sub_trace_command();
+
+ // Done...
+ // For interrupt mode, remove interrupt handler.
+
+ int_restore_int_vect();
+
+ // Done...
+ // mark end of isa dma PI cmd in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_E_PID );
+
+ // All done. The return values of this function are described in
+ // ATAIO.H.
+
+ if ( reg_cmd_info.ec )
+ return 1;
+ return 0;
+}
+
+// end ataiopci.c
--- /dev/null
+//********************************************************************
+// ATA LOW LEVEL I/O DRIVER -- ATAIOPIO.C
+//
+// by Hale Landis (www.ata-atapi.com)
+//
+// There is no copyright and there are no restrictions on the use
+// of this ATA Low Level I/O Driver code. It is distributed to
+// help other programmers understand how the ATA device interface
+// works and it is distributed without any warranty. Use this
+// code at your own risk.
+//
+// This code is based on the ATA-2, ATA-3 and ATA-4 standards and
+// on interviews with various ATA controller and drive designers.
+//
+// This code has been run on many ATA (IDE) drives and
+// MFM/RLL controllers. This code may be a little
+// more picky about the status it sees at various times. A real
+// BIOS probably would not check the status as carefully.
+//
+// Compile with one of the Borland C or C++ compilers.
+// This module contains inline assembler code so you'll
+// also need Borland's Assembler.
+//
+// This C source contains the low level I/O port IN/OUT functions.
+//********************************************************************
+
+#include <dos.h>
+
+#include "ataio.h"
+
+//*************************************************************
+//
+// Host adapter base addresses.
+//
+//*************************************************************
+
+unsigned int pio_base_addr1 = 0x1f0;
+unsigned int pio_base_addr2 = 0x3f0;
+
+unsigned int pio_memory_seg = 0;
+int pio_memory_dt_opt = PIO_MEMORY_DT_OPT0;
+
+unsigned int pio_bmide_base_addr = 0;
+
+unsigned int pio_reg_addrs[10];
+
+unsigned char pio_last_write[10];
+unsigned char pio_last_read[10];
+
+int pio_xfer_width = 16;
+
+//*************************************************************
+//
+// Set the host adapter i/o base addresses.
+//
+//*************************************************************
+
+void pio_set_iobase_addr( unsigned int base1,
+ unsigned int base2,
+ unsigned int base3 )
+
+{
+
+ pio_base_addr1 = base1;
+ pio_base_addr2 = base2;
+ pio_bmide_base_addr = base3;
+ pio_memory_seg = 0;
+ pio_reg_addrs[ CB_DATA ] = pio_base_addr1 + 0; // 0
+ pio_reg_addrs[ CB_FR ] = pio_base_addr1 + 1; // 1
+ pio_reg_addrs[ CB_SC ] = pio_base_addr1 + 2; // 2
+ pio_reg_addrs[ CB_SN ] = pio_base_addr1 + 3; // 3
+ pio_reg_addrs[ CB_CL ] = pio_base_addr1 + 4; // 4
+ pio_reg_addrs[ CB_CH ] = pio_base_addr1 + 5; // 5
+ pio_reg_addrs[ CB_DH ] = pio_base_addr1 + 6; // 6
+ pio_reg_addrs[ CB_CMD ] = pio_base_addr1 + 7; // 7
+ pio_reg_addrs[ CB_DC ] = pio_base_addr2 + 6; // 8
+ pio_reg_addrs[ CB_DA ] = pio_base_addr2 + 7; // 9
+}
+
+//*************************************************************
+//
+// Set the host adapter memory base addresses.
+//
+//*************************************************************
+
+void pio_set_memory_addr( unsigned int seg )
+
+{
+
+ pio_base_addr1 = 0;
+ pio_base_addr2 = 8;
+ pio_bmide_base_addr = 0;
+ pio_memory_seg = seg;
+ pio_memory_dt_opt = PIO_MEMORY_DT_OPT0;
+ pio_reg_addrs[ CB_DATA ] = pio_base_addr1 + 0; // 0
+ pio_reg_addrs[ CB_FR ] = pio_base_addr1 + 1; // 1
+ pio_reg_addrs[ CB_SC ] = pio_base_addr1 + 2; // 2
+ pio_reg_addrs[ CB_SN ] = pio_base_addr1 + 3; // 3
+ pio_reg_addrs[ CB_CL ] = pio_base_addr1 + 4; // 4
+ pio_reg_addrs[ CB_CH ] = pio_base_addr1 + 5; // 5
+ pio_reg_addrs[ CB_DH ] = pio_base_addr1 + 6; // 6
+ pio_reg_addrs[ CB_CMD ] = pio_base_addr1 + 7; // 7
+ pio_reg_addrs[ CB_DC ] = pio_base_addr2 + 6; // 8
+ pio_reg_addrs[ CB_DA ] = pio_base_addr2 + 7; // 9
+}
+
+//*************************************************************
+//
+// These functions do basic IN/OUT of byte and word values:
+//
+// pio_inbyte()
+// pio_outbyte()
+// pio_inword()
+// pio_outword()
+//
+//*************************************************************
+
+unsigned char pio_inbyte( unsigned int addr )
+
+{
+ unsigned int regAddr;
+ unsigned char uc;
+ unsigned char far * ucp;
+
+ regAddr = pio_reg_addrs[ addr ];
+ if ( pio_memory_seg )
+ {
+ ucp = (unsigned char far *) MK_FP( pio_memory_seg, regAddr );
+ uc = * ucp;
+ }
+ else
+ {
+ uc = (unsigned char) inportb( regAddr );
+
+ // READ THIS: If you get a compile error on the following
+ // statement you are trying to use BASM (the assembler
+ // built into Borland C). BASM can not assemble 386
+ // instructions. You must use Borland TASM as is shown
+ // in the EXAMPLE1.MAK or EXAMPLE2.MAK "make files".
+
+ // asm .386
+
+ // asm push ax
+ // asm push dx
+
+ // asm mov dx,regAddr
+
+ // asm in al,dx
+ // asm mov uc,al
+
+ // asm pop dx
+ // asm pop ax
+
+ }
+ pio_last_read[ addr ] = uc;
+ trc_llt( addr, uc, TRC_LLT_INB );
+ return uc;
+}
+
+//*************************************************************
+
+void pio_outbyte( unsigned int addr, unsigned char data )
+
+{
+ unsigned int regAddr;
+ unsigned char far * ucp;
+
+ regAddr = pio_reg_addrs[ addr ];
+ if ( pio_memory_seg )
+ {
+ ucp = (unsigned char far *) MK_FP( pio_memory_seg, regAddr );
+ * ucp = data;
+ }
+ else
+ {
+ outportb( regAddr, data );
+
+ // asm .386
+
+ // asm push ax
+ // asm push dx
+
+ // asm mov dx,regAddr
+ // asm mov al,data
+
+ // asm out dx,al
+
+ // asm pop dx
+ // asm pop ax
+
+ }
+ pio_last_write[ addr ] = data;
+ trc_llt( addr, data, TRC_LLT_OUTB );
+}
+
+//*************************************************************
+
+unsigned int pio_inword( unsigned int addr )
+
+{
+ unsigned int regAddr;
+ unsigned int ui;
+ unsigned int far * uip;
+
+ regAddr = pio_reg_addrs[ addr ];
+ if ( pio_memory_seg )
+ {
+ uip = (unsigned int far *) MK_FP( pio_memory_seg, regAddr );
+ ui = * uip;
+ }
+ else
+ {
+ ui = inportw( regAddr );
+
+ // asm .386
+
+ // asm push ax
+ // asm push dx
+
+ // asm mov dx,regAddr
+
+ // asm in ax,dx
+ // asm mov ui,ax
+
+ // asm pop dx
+ // asm pop ax
+
+ }
+ trc_llt( addr, 0, TRC_LLT_INW );
+ return ui;
+}
+
+//*************************************************************
+
+void pio_outword( unsigned int addr, unsigned int data )
+
+{
+ unsigned int regAddr;
+ unsigned int far * uip;
+
+ regAddr = pio_reg_addrs[ addr ];
+ if ( pio_memory_seg )
+ {
+ uip = (unsigned int far *) MK_FP( pio_memory_seg, regAddr );
+ * uip = data;
+ }
+ else
+ {
+ outportw( regAddr, data );
+
+ // asm .386
+
+ // asm push ax
+ // asm push dx
+
+ // asm mov dx,regAddr
+ // asm mov ax,data
+
+ // asm out dx,ax
+
+ // asm pop dx
+ // asm pop ax
+
+ }
+ trc_llt( addr, 0, TRC_LLT_OUTW );
+}
+
+//*************************************************************
+//
+// These functions are normally used to transfer DRQ blocks:
+//
+// pio_drq_block_in()
+// pio_drq_block_out()
+//
+//*************************************************************
+
+// Note: pio_drq_block_in() is the primary way perform PIO
+// Data In transfers. It will handle 8-bit, 16-bit and 32-bit
+// I/O based data transfers and 8-bit and 16-bit PCMCIA Memory
+// mode transfers.
+
+void pio_drq_block_in( unsigned int addrDataReg,
+ unsigned int bufSeg, unsigned int bufOff,
+ long wordCnt )
+
+{
+ long bCnt;
+ int memDtOpt;
+ unsigned int randVal;
+ unsigned int dataRegAddr;
+ unsigned int far * uip1;
+ unsigned int far * uip2;
+ unsigned char far * ucp1;
+ unsigned char far * ucp2;
+ unsigned long bufAddr;
+
+ // NOTE: wordCnt is the size of a DRQ block
+ // in words. The maximum value of wordCnt is normally:
+ // a) For ATA, 16384 words or 32768 bytes (64 sectors,
+ // only with READ/WRITE MULTIPLE commands),
+ // b) For ATAPI, 32768 words or 65536 bytes
+ // (actually 65535 bytes plus a pad byte).
+
+ // normalize bufSeg:bufOff
+
+ bufAddr = bufSeg;
+ bufAddr = bufAddr << 4;
+ bufAddr = bufAddr + bufOff;
+
+ if ( pio_memory_seg )
+ {
+
+ // PCMCIA Memory mode data transfer.
+
+ // set Data reg address per pio_memory_dt_opt
+ dataRegAddr = 0x0000;
+ memDtOpt = pio_memory_dt_opt;
+ if ( pio_memory_dt_opt == PIO_MEMORY_DT_OPTR )
+ {
+ randVal = * (unsigned int *) MK_FP( 0x40, 0x6c );
+ memDtOpt = randVal % 3;
+ }
+ if ( memDtOpt == PIO_MEMORY_DT_OPT8 )
+ dataRegAddr = 0x0008;
+ if ( memDtOpt == PIO_MEMORY_DT_OPTB )
+ {
+ dataRegAddr = 0x0400;
+ if ( pio_memory_dt_opt == PIO_MEMORY_DT_OPTR )
+ dataRegAddr = dataRegAddr | ( randVal & 0x03fe );
+ }
+
+ if ( pio_xfer_width == 8 )
+ {
+ // PCMCIA Memory mode 8-bit
+ bCnt = wordCnt * 2L;
+ ucp1 = (unsigned char far *) MK_FP( pio_memory_seg, dataRegAddr );
+ for ( ; bCnt > 0; bCnt -- )
+ {
+ bufSeg = (unsigned int) ( bufAddr >> 4 );
+ bufOff = (unsigned int) ( bufAddr & 0x0000000fL );
+ ucp2 = (unsigned char far *) MK_FP( bufSeg, bufOff );
+ * ucp2 = * ucp1;
+ bufAddr += 1;
+ if ( memDtOpt == PIO_MEMORY_DT_OPTB )
+ {
+ dataRegAddr += 1;
+ dataRegAddr = ( dataRegAddr & 0x03ff ) | 0x0400;
+ ucp1 = (unsigned char far *) MK_FP( pio_memory_seg, dataRegAddr );
+ }
+ }
+ trc_llt( addrDataReg, 0, TRC_LLT_INSB );
+ }
+ else
+ {
+ // PCMCIA Memory mode 16-bit
+ uip1 = (unsigned int far *) MK_FP( pio_memory_seg, dataRegAddr );
+ for ( ; wordCnt > 0; wordCnt -- )
+ {
+ bufSeg = (unsigned int) ( bufAddr >> 4 );
+ bufOff = (unsigned int) ( bufAddr & 0x0000000fL );
+ uip2 = (unsigned int far *) MK_FP( bufSeg, bufOff );
+ * uip2 = * uip1;
+ bufAddr += 2;
+ if ( memDtOpt == PIO_MEMORY_DT_OPTB )
+ {
+ dataRegAddr += 2;
+ dataRegAddr = ( dataRegAddr & 0x03fe ) | 0x0400;
+ uip1 = (unsigned int far *) MK_FP( pio_memory_seg, dataRegAddr );
+ }
+ }
+ trc_llt( addrDataReg, 0, TRC_LLT_INSW );
+ }
+ }
+ else
+ {
+ int pxw;
+ long wc;
+
+ // adjust pio_xfer_width - don't use DWORD if wordCnt is odd.
+
+ pxw = pio_xfer_width;
+ if ( ( pxw == 32 ) && ( wordCnt & 0x00000001L ) )
+ pxw = 16;
+
+ // Data transfer using INS instruction.
+ // Break the transfer into chunks of 32768 or fewer bytes.
+
+ while ( wordCnt > 0 )
+ {
+ //bufSeg = (unsigned int) ( bufAddr >> 4 );
+ //bufOff = (unsigned int) ( bufAddr & 0x0000000fL );
+ bufSeg = 0;
+ bufOff = bufAddr;
+ if ( wordCnt > 16384L )
+ wc = 16384;
+ else
+ wc = wordCnt;
+ if ( pxw == 8 )
+ {
+ // do REP INS
+ pio_rep_inbyte( addrDataReg, bufSeg, bufOff, wc * 2L );
+ }
+ else
+ if ( pxw == 32 )
+ {
+ // do REP INSD
+ pio_rep_indword( addrDataReg, bufSeg, bufOff, wc / 2L );
+ }
+ else
+ {
+ // do REP INSW
+ pio_rep_inword( addrDataReg, bufSeg, bufOff, wc );
+ }
+ bufAddr = bufAddr + ( wc * 2 );
+ wordCnt = wordCnt - wc;
+ }
+ }
+
+ return;
+}
+
+//*************************************************************
+
+// Note: pio_drq_block_out() is the primary way perform PIO
+// Data Out transfers. It will handle 8-bit, 16-bit and 32-bit
+// I/O based data transfers and 8-bit and 16-bit PCMCIA Memory
+// mode transfers.
+
+void pio_drq_block_out( unsigned int addrDataReg,
+ unsigned int bufSeg, unsigned int bufOff,
+ long wordCnt )
+
+{
+ long bCnt;
+ int memDtOpt;
+ unsigned int randVal;
+ unsigned int dataRegAddr;
+ unsigned int far * uip1;
+ unsigned int far * uip2;
+ unsigned char far * ucp1;
+ unsigned char far * ucp2;
+ unsigned long bufAddr;
+
+ // NOTE: wordCnt is the size of a DRQ block
+ // in words. The maximum value of wordCnt is normally:
+ // a) For ATA, 16384 words or 32768 bytes (64 sectors,
+ // only with READ/WRITE MULTIPLE commands),
+ // b) For ATAPI, 32768 words or 65536 bytes
+ // (actually 65535 bytes plus a pad byte).
+
+ // normalize bufSeg:bufOff
+
+ bufAddr = bufSeg;
+ bufAddr = bufAddr << 4;
+ bufAddr = bufAddr + bufOff;
+
+ if ( pio_memory_seg )
+ {
+
+ // PCMCIA Memory mode data transfer.
+
+ // set Data reg address per pio_memory_dt_opt
+ dataRegAddr = 0x0000;
+ memDtOpt = pio_memory_dt_opt;
+ if ( pio_memory_dt_opt == PIO_MEMORY_DT_OPTR )
+ {
+ randVal = * (unsigned int *) MK_FP( 0x40, 0x6c );
+ memDtOpt = randVal % 3;
+ }
+ if ( memDtOpt == PIO_MEMORY_DT_OPT8 )
+ dataRegAddr = 0x0008;
+ if ( memDtOpt == PIO_MEMORY_DT_OPTB )
+ {
+ dataRegAddr = 0x0400;
+ if ( pio_memory_dt_opt == PIO_MEMORY_DT_OPTR )
+ dataRegAddr = dataRegAddr | ( randVal & 0x03fe );
+ }
+
+ if ( pio_xfer_width == 8 )
+ {
+ // PCMCIA Memory mode 8-bit
+ bCnt = wordCnt * 2L;
+ ucp2 = (unsigned char far *) MK_FP( pio_memory_seg, dataRegAddr );
+ for ( ; bCnt > 0; bCnt -- )
+ {
+ bufSeg = (unsigned int) ( bufAddr >> 4 );
+ bufOff = (unsigned int) ( bufAddr & 0x0000000fL );
+ ucp1 = (unsigned char far *) MK_FP( bufSeg, bufOff );
+ * ucp2 = * ucp1;
+ bufAddr += 1;
+ if ( memDtOpt == PIO_MEMORY_DT_OPTB )
+ {
+ dataRegAddr += 1;
+ dataRegAddr = ( dataRegAddr & 0x03ff ) | 0x0400;
+ ucp2 = (unsigned char far *) MK_FP( pio_memory_seg, dataRegAddr );
+ }
+ }
+ trc_llt( addrDataReg, 0, TRC_LLT_OUTSB );
+ }
+ else
+ {
+ // PCMCIA Memory mode 16-bit
+ uip2 = (unsigned int far *) MK_FP( pio_memory_seg, dataRegAddr );
+ for ( ; wordCnt > 0; wordCnt -- )
+ {
+ bufSeg = (unsigned int) ( bufAddr >> 4 );
+ bufOff = (unsigned int) ( bufAddr & 0x0000000fL );
+ uip1 = (unsigned int far *) MK_FP( bufSeg, bufOff );
+ * uip2 = * uip1;
+ bufAddr += 2;
+ if ( memDtOpt == PIO_MEMORY_DT_OPTB )
+ {
+ dataRegAddr = dataRegAddr + 2;
+ dataRegAddr = ( dataRegAddr & 0x03fe ) | 0x0400;
+ uip2 = (unsigned int far *) MK_FP( pio_memory_seg, dataRegAddr );
+ }
+ }
+ trc_llt( addrDataReg, 0, TRC_LLT_OUTSW );
+ }
+ }
+ else
+ {
+ int pxw;
+ long wc;
+
+ // adjust pio_xfer_width - don't use DWORD if wordCnt is odd.
+
+ pxw = pio_xfer_width;
+ if ( ( pxw == 32 ) && ( wordCnt & 0x00000001L ) )
+ pxw = 16;
+
+ // Data transfer using OUTS instruction.
+ // Break the transfer into chunks of 32768 or fewer bytes.
+
+ while ( wordCnt > 0 )
+ {
+ bufOff = (unsigned int) ( bufAddr & 0x0000000fL );
+ bufSeg = (unsigned int) ( bufAddr >> 4 );
+ if ( wordCnt > 16384L )
+ wc = 16384;
+ else
+ wc = wordCnt;
+ if ( pxw == 8 )
+ {
+ // do REP OUTS
+ pio_rep_outbyte( addrDataReg, bufSeg, bufOff, wc * 2L );
+ }
+ else
+ if ( pxw == 32 )
+ {
+ // do REP OUTSD
+ pio_rep_outdword( addrDataReg, bufSeg, bufOff, wc / 2L );
+ }
+ else
+ {
+ // do REP OUTSW
+ pio_rep_outword( addrDataReg, bufSeg, bufOff, wc );
+ }
+ bufAddr = bufAddr + ( wc * 2 );
+ wordCnt = wordCnt - wc;
+ }
+ }
+
+ return;
+}
+
+//*************************************************************
+//
+// These functions do REP INS/OUTS data transfers
+// (PIO data transfers in I/O mode):
+//
+// pio_rep_inbyte()
+// pio_rep_outbyte()
+// pio_rep_inword()
+// pio_rep_outword()
+// pio_rep_indword()
+// pio_rep_outdword()
+//
+// These functions can be called directly but usually they
+// are called by the pio_drq_block_in() and pio_drq_block_out()
+// functions to perform I/O mode transfers. See the
+// pio_xfer_width variable!
+//
+//*************************************************************
+
+void pio_rep_inbyte( unsigned int addrDataReg,
+ unsigned int bufSeg, unsigned int bufOff,
+ long byteCnt )
+
+{
+ unsigned short dataRegAddr = pio_reg_addrs[ addrDataReg ];
+ unsigned int bCnt = (unsigned int) byteCnt;
+
+ // Warning: Avoid calling this function with
+ // byteCnt > 32768 (transfers 32768 bytes).
+ // bufSeg and bufOff should be normalized such
+ // that bufOff is a value between 0 and 15 (0xf).
+
+ //asm .386
+
+ asm(
+ "cld\n\t"
+ "rep insb\n\t"
+ ::"D"(bufOff),"c"(byteCnt),"d"(dataRegAddr));
+
+ trc_llt( addrDataReg, 0, TRC_LLT_INSB );
+}
+
+//*************************************************************
+
+void pio_rep_outbyte( unsigned int addrDataReg,
+ unsigned int bufSeg, unsigned int bufOff,
+ long byteCnt )
+
+{
+ unsigned int dataRegAddr = pio_reg_addrs[ addrDataReg ];
+ unsigned int bCnt = (unsigned int) byteCnt;
+
+ // Warning: Avoid calling this function with
+ // byteCnt > 32768 (transfers 32768 bytes).
+ // bufSeg and bufOff should be normalized such
+ // that bufOff is a value between 0 and 15 (0xf).
+
+ //asm(".386");
+
+ asm(
+ "cld\n\t"
+ "rep outsb\n\t"
+ ::"S"(bufOff),"c"(bCnt),"d"(dataRegAddr));
+
+ trc_llt( addrDataReg, 0, TRC_LLT_OUTSB );
+}
+
+//*************************************************************
+
+void pio_rep_inword( unsigned int addrDataReg,
+ unsigned int bufSeg, unsigned int bufOff,
+ long wordCnt )
+
+{
+ unsigned int dataRegAddr = pio_reg_addrs[ addrDataReg ];
+ unsigned int wCnt = (unsigned int) wordCnt;
+
+ // Warning: Avoid calling this function with
+ // wordCnt > 16384 (transfers 32768 bytes).
+ // bufSeg and bufOff should be normalized such
+ // that bufOff is a value between 0 and 15 (0xf).
+
+ //asm(".386");
+
+
+ asm(
+ "cld\n\t"
+ "rep insw\n\t"
+ ::"D"(bufOff),"c"(wCnt),"d"(dataRegAddr));
+ trc_llt( addrDataReg, 0, TRC_LLT_INSW );
+}
+
+//*************************************************************
+
+void pio_rep_outword( unsigned int addrDataReg,
+ unsigned int bufSeg, unsigned int bufOff,
+ long wordCnt )
+
+{
+ unsigned int dataRegAddr = pio_reg_addrs[ addrDataReg ];
+ unsigned int wCnt = (unsigned int) wordCnt;
+
+ // Warning: Avoid calling this function with
+ // wordCnt > 16384 (transfers 32768 bytes).
+ // bufSeg and bufOff should be normalized such
+ // that bufOff is a value between 0 and 15 (0xf).
+
+ //asm(".386");
+
+ asm(
+ "cld\n\t"
+ "rep outsw\n\t"
+ ::"S"(bufOff),"c"(wCnt),"d"(dataRegAddr));
+
+ trc_llt( addrDataReg, 0, TRC_LLT_OUTSW );
+}
+
+//*************************************************************
+
+void pio_rep_indword( unsigned int addrDataReg,
+ unsigned int bufSeg, unsigned int bufOff,
+ long dwordCnt )
+
+{
+ unsigned int dataRegAddr = pio_reg_addrs[ addrDataReg ];
+ unsigned int dwCnt = (unsigned int) dwordCnt;
+
+ // Warning: Avoid calling this function with
+ // dwordCnt > 8192 (transfers 32768 bytes).
+ // bufSeg and bufOff should be normalized such
+ // that bufOff is a value between 0 and 15 (0xf).
+
+ //asm(".386");
+
+ asm(
+ "cld\n\t"
+ "rep insd\n\t" //"rep insd;"
+ ::"D"(bufOff),"c"(dwCnt),"d"(dataRegAddr));
+
+ trc_llt( addrDataReg, 0, TRC_LLT_INSD );
+}
+
+//*************************************************************
+
+void pio_rep_outdword( unsigned int addrDataReg,
+ unsigned int bufSeg, unsigned int bufOff,
+ long dwordCnt )
+
+{
+ unsigned int dataRegAddr = pio_reg_addrs[ addrDataReg ];
+ unsigned int dwCnt = (unsigned int) dwordCnt;
+
+ // Warning: Avoid calling this function with
+ // dwordCnt > 8192 (transfers 32768 bytes).
+ // bufSeg and bufOff should be normalized such
+ // that bufOff is a value between 0 and 15 (0xf).
+
+ //asm(".386");
+
+
+ asm(
+ "cld;\n\t"
+ "rep outsd\n\t" // "rep outsd;"
+ ::"S"(bufOff),"c"(dwCnt),"d"(dataRegAddr));
+
+ trc_llt( addrDataReg, 0, TRC_LLT_OUTSD );
+}
+
+// end ataiopio.c
--- /dev/null
+//********************************************************************
+// ATA LOW LEVEL I/O DRIVER -- ATAIOREG.C
+//
+// by Hale Landis (www.ata-atapi.com)
+//
+// There is no copyright and there are no restrictions on the use
+// of this ATA Low Level I/O Driver code. It is distributed to
+// help other programmers understand how the ATA device interface
+// works and it is distributed without any warranty. Use this
+// code at your own risk.
+//
+// This code is based on the ATA-2, ATA-3 and ATA-4 standards and
+// on interviews with various ATA controller and drive designers.
+//
+// This code has been run on many ATA (IDE) drives and
+// MFM/RLL controllers. This code may be a little
+// more picky about the status it sees at various times. A real
+// BIOS probably would not check the status as carefully.
+//
+// Compile with one of the Borland C or C++ compilers.
+//
+// This C source contains the main body of the driver code:
+// Determine what devices are present, issue ATA Soft Reset,
+// execute Non-Data, PIO data in and PIO data out commands.
+//********************************************************************
+
+#include <dos.h>
+
+#include "ataio.h"
+
+#define DEBUG_REG 0x00 // not zero for debug
+ // 0x01 trace the interrupt flag
+
+//*************************************************************
+//
+// ATAPI command packet,
+// atapi register data,
+// atapi delay flag,
+// config information,
+// slow transfer flag,
+// incompatible flags.
+//
+//*************************************************************
+
+unsigned char reg_atapi_cp_data[16];
+int reg_atapi_cp_size;
+
+int reg_atapi_delay_flag;
+
+unsigned char reg_atapi_reg_fr; // see reg_packet()
+unsigned char reg_atapi_reg_sc; // see reg_packet()
+unsigned char reg_atapi_reg_sn; // see reg_packet()
+unsigned char reg_atapi_reg_dh; // see reg_packet()
+
+long reg_buffer_size;
+
+struct REG_CMD_INFO reg_cmd_info;
+
+int reg_config_info[2];
+
+void ( * reg_drq_block_call_back ) ( struct REG_CMD_INFO * );
+
+long reg_slow_xfer_flag;
+
+int reg_incompat_flags;
+
+//*************************************************************
+//
+// reg_wait_poll() - wait for interrupt or poll for BSY=0
+//
+//*************************************************************
+
+static void reg_wait_poll( int we, int pe );
+
+static void reg_wait_poll( int we, int pe )
+
+{
+ unsigned char status;
+
+ // Wait for interrupt -or- wait for not BUSY -or- wait for time out.
+
+ if ( we && int_use_intr_flag )
+ {
+ trc_llt( 0, 0, TRC_LLT_WINT );
+ while ( 1 )
+ {
+ if ( int_intr_flag ) // interrupt ?
+ {
+ trc_llt( 0, 0, TRC_LLT_INTRQ ); // yes
+ if ( int_bmide_addr )
+ trc_llt( 0, int_bm_status, TRC_LLT_R_BM_SR );
+ status = int_ata_status; // get status
+ trc_llt( CB_STAT, status, TRC_LLT_INB );
+ if ( int_bmide_addr )
+ trc_llt( 0, 0x04, TRC_LLT_W_BM_SR );
+ break;
+ }
+ if ( tmr_chk_timeout() ) // time out ?
+ {
+ trc_llt( 0, 0, TRC_LLT_TOUT ); // yes
+ reg_cmd_info.to = 1;
+ reg_cmd_info.ec = we;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break;
+ }
+ }
+ }
+ else
+ {
+ trc_llt( 0, 0, TRC_LLT_PNBSY );
+ while ( 1 )
+ {
+ status = pio_inbyte( CB_ASTAT ); // poll for not busy
+ if ( ( status & CB_STAT_BSY ) == 0 )
+ break;
+ if ( tmr_chk_timeout() ) // time out yet ?
+ {
+ trc_llt( 0, 0, TRC_LLT_TOUT );
+ reg_cmd_info.to = 1;
+ reg_cmd_info.ec = pe;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break;
+ }
+ }
+ }
+
+ #if DEBUG_REG & 0x01
+ trc_llt( 0, int_intr_cntr, TRC_LLT_DEBUG ); // for debugging
+ #endif
+
+ // Reset the interrupt flag.
+
+ if ( int_intr_flag > 1 ) // extra interrupt(s) ?
+ reg_cmd_info.failbits |= FAILBIT15;
+ int_intr_flag = 0;
+}
+
+//*************************************************************
+//
+// reg_config() - Check the host adapter and determine the
+// number and type of drives attached.
+//
+// This process is not documented by any of the ATA standards.
+//
+// Infomation is returned by this function is in
+// reg_config_info[] -- see ATAIO.H.
+//
+//*************************************************************
+
+int reg_config( void )
+
+{
+ int numDev = 0;
+ unsigned char dev75;
+ unsigned char sc;
+ unsigned char sn;
+ unsigned char cl;
+ unsigned char ch;
+ unsigned char st;
+ unsigned char devCtrl;
+
+ // compute the 1ms, 1us and 500ns delay counts - the number of I/O reads
+ // required to get an approximately 1ms, 1us and 500ns delay.
+
+ tmr_get_delay_counts();
+
+ // determine value of Device (Drive/Head) register bits 7 and 5
+
+ dev75 = 0; // normal value
+ if ( reg_incompat_flags & REG_INCOMPAT_DEVREG )
+ dev75 = CB_DH_OBSOLETE; // obsolete value
+
+ // setup register values
+
+ devCtrl = CB_DC_HD15 | ( int_use_intr_flag ? 0 : CB_DC_NIEN );
+
+ // mark start of config in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_S_CFG );
+
+ // reset Bus Master Error bit
+
+ sub_writeBusMstrStatus( BM_SR_MASK_ERR );
+
+ // assume there are no devices
+
+ reg_config_info[0] = REG_CONFIG_TYPE_NONE;
+ reg_config_info[1] = REG_CONFIG_TYPE_NONE;
+
+ // set up Device Control register
+
+ pio_outbyte( CB_DC, devCtrl );
+
+ // lets see if there is a device 0
+
+ pio_outbyte( CB_DH, CB_DH_DEV0 | dev75 );
+ ATA_DELAY();
+ pio_outbyte( CB_SC, 0x55 );
+ pio_outbyte( CB_SN, 0xaa );
+ pio_outbyte( CB_SC, 0xaa );
+ pio_outbyte( CB_SN, 0x55 );
+ pio_outbyte( CB_SC, 0x55 );
+ pio_outbyte( CB_SN, 0xaa );
+ sc = pio_inbyte( CB_SC );
+ sn = pio_inbyte( CB_SN );
+ if ( ( sc == 0x55 ) && ( sn == 0xaa ) )
+ reg_config_info[0] = REG_CONFIG_TYPE_UNKN;
+
+ // lets see if there is a device 1
+
+ pio_outbyte( CB_DH, CB_DH_DEV1 | dev75 );
+ ATA_DELAY();
+ pio_outbyte( CB_SC, 0x55 );
+ pio_outbyte( CB_SN, 0xaa );
+ pio_outbyte( CB_SC, 0xaa );
+ pio_outbyte( CB_SN, 0x55 );
+ pio_outbyte( CB_SC, 0x55 );
+ pio_outbyte( CB_SN, 0xaa );
+ sc = pio_inbyte( CB_SC );
+ sn = pio_inbyte( CB_SN );
+ if ( ( sc == 0x55 ) && ( sn == 0xaa ) )
+ reg_config_info[1] = REG_CONFIG_TYPE_UNKN;
+
+ // quit if no devices found
+
+ if ( ( reg_config_info[0] == REG_CONFIG_TYPE_NONE )
+ &&
+ ( reg_config_info[1] == REG_CONFIG_TYPE_NONE )
+ )
+ {
+ trc_llt( 0, 0, TRC_LLT_E_CFG );
+ return numDev; // no devices found
+ }
+
+ // now we think we know which devices, if any are there,
+ // so lets try a soft reset (ignoring any errors).
+
+ pio_outbyte( CB_DH, CB_DH_DEV0 | dev75 );
+ ATA_DELAY();
+ reg_reset( 0, 0 );
+
+ // lets check device 0 again, is device 0 really there?
+ // is it ATA or ATAPI?
+
+ pio_outbyte( CB_DH, CB_DH_DEV0 | dev75 );
+ ATA_DELAY();
+ sc = pio_inbyte( CB_SC );
+ sn = pio_inbyte( CB_SN );
+ st = pio_inbyte( CB_STAT );
+ if ( st == 0x7f )
+ {
+ reg_config_info[0] = REG_CONFIG_TYPE_NONE;
+ }
+ else
+ if ( ( sc == 0x01 ) && ( sn == 0x01 ) )
+ {
+ // yep, there is a device, what kind is it?
+ numDev ++ ;
+ cl = pio_inbyte( CB_CL );
+ ch = pio_inbyte( CB_CH );
+ if ( ( ( cl == 0x14 ) && ( ch == 0xeb ) ) // PATAPI
+ ||
+ ( ( cl == 0x69 ) && ( ch == 0x96 ) ) // SATAPI
+ )
+ {
+ reg_config_info[0] = REG_CONFIG_TYPE_ATAPI;
+ }
+ else
+ if ( ( ( cl == 0x00 ) && ( ch == 0x00 ) ) // PATA
+ ||
+ ( ( cl == 0x3c ) && ( ch == 0xc3 ) ) // SATA
+ )
+ {
+ reg_config_info[0] = REG_CONFIG_TYPE_ATA;
+ }
+ }
+
+ // lets check device 1 again, is device 1 really there?
+ // is it ATA or ATAPI?
+
+ pio_outbyte( CB_DH, CB_DH_DEV1 | dev75 );
+ ATA_DELAY();
+ sc = pio_inbyte( CB_SC );
+ sn = pio_inbyte( CB_SN );
+ st = pio_inbyte( CB_STAT );
+ if ( st == 0x7f )
+ {
+ reg_config_info[1] = REG_CONFIG_TYPE_NONE;
+ }
+ else
+ if ( ( sc == 0x01 ) && ( sn == 0x01 ) )
+ {
+ // yep, there is a device, what kind is it?
+ numDev ++ ;
+ cl = pio_inbyte( CB_CL );
+ ch = pio_inbyte( CB_CH );
+ if ( ( ( cl == 0x14 ) && ( ch == 0xeb ) ) // PATAPI
+ ||
+ ( ( cl == 0x69 ) && ( ch == 0x96 ) ) // SATAPI
+ )
+ {
+ reg_config_info[1] = REG_CONFIG_TYPE_ATAPI;
+ }
+ else
+ if ( ( ( cl == 0x00 ) && ( ch == 0x00 ) ) // PATA
+ ||
+ ( ( cl == 0x3c ) && ( ch == 0xc3 ) ) // SATA
+ )
+ {
+ reg_config_info[1] = REG_CONFIG_TYPE_ATA;
+ }
+ }
+
+ // If possible, select a device that exists
+
+ if ( reg_config_info[1] != REG_CONFIG_TYPE_NONE )
+ {
+ pio_outbyte( CB_DH, CB_DH_DEV1 | dev75 );
+ ATA_DELAY();
+ }
+ if ( reg_config_info[0] != REG_CONFIG_TYPE_NONE )
+ {
+ pio_outbyte( CB_DH, CB_DH_DEV0 | dev75 );
+ ATA_DELAY();
+ }
+
+ // BMIDE Error=1?
+
+ if ( sub_readBusMstrStatus() & BM_SR_MASK_ERR )
+ {
+ reg_cmd_info.ec = 78; // yes
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+
+ // mark end of config in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_E_CFG );
+
+ // return the number of devices found
+
+ return numDev;
+}
+
+//*************************************************************
+//
+// reg_reset() - Execute a Software Reset.
+//
+// See ATA-2 Section 9.2, ATA-3 Section 9.2, ATA-4 Section 8.3.
+//
+//*************************************************************
+
+int reg_reset( int skipFlag, int devRtrn )
+
+{
+ unsigned char dev75;
+ unsigned char sc;
+ unsigned char sn;
+ unsigned char status;
+ unsigned char devCtrl;
+
+ // determine value of Device (Drive/Head) register bits 7 and 5
+
+ dev75 = 0; // normal value
+ if ( reg_incompat_flags & REG_INCOMPAT_DEVREG )
+ dev75 = CB_DH_OBSOLETE; // obsolete value
+
+ // setup register values
+
+ devCtrl = CB_DC_HD15 | ( int_use_intr_flag ? 0 : CB_DC_NIEN );
+
+ // mark start of reset in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_S_RST );
+
+ // reset Bus Master Error bit
+
+ sub_writeBusMstrStatus( BM_SR_MASK_ERR );
+
+ // Reset error return data.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_SRST;
+ reg_cmd_info.ct = TRC_TYPE_ASR;
+
+ // initialize the command timeout counter
+
+ tmr_set_timeout();
+
+ // Set and then reset the soft reset bit in the Device Control
+ // register. This causes device 0 be selected.
+
+ if ( ! skipFlag )
+ {
+ // set SRST=1
+ pio_outbyte( CB_DC, devCtrl | CB_DC_SRST );
+ ATA_DELAY(); // for trace of Alternate Status
+ // delay ~10us
+ tmr_delay_1us( 10L );
+ // set SRST=0
+ pio_outbyte( CB_DC, devCtrl );
+ ATA_DELAY(); // for trace of Alternate Status
+ }
+ ATAPI_DELAY( 0 );
+ ATAPI_DELAY( 1 );
+
+ // If there is a device 0, wait for device 0 to set BSY=0.
+
+ if ( reg_config_info[0] != REG_CONFIG_TYPE_NONE )
+ {
+ trc_llt( 0, 0, TRC_LLT_PNBSY );
+ while ( 1 )
+ {
+ status = pio_inbyte( CB_STAT );
+ if ( ( status & CB_STAT_BSY ) == 0 )
+ break;
+ if ( tmr_chk_timeout() )
+ {
+ trc_llt( 0, 0, TRC_LLT_TOUT );
+ reg_cmd_info.to = 1;
+ reg_cmd_info.ec = 1;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break;
+ }
+ }
+ }
+
+ // Check that drive 0 has valid BSY=0 status
+
+ if ( reg_cmd_info.ec == 0 )
+ {
+ status = pio_inbyte( CB_STAT );
+ if ( ( status == 0x7f ) || ( status & CB_STAT_BSY ) )
+ {
+ reg_cmd_info.ec = 1;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+ }
+
+ // If there is a device 1, wait until device 1 allows
+ // register access.
+
+ if ( reg_config_info[1] != REG_CONFIG_TYPE_NONE )
+ {
+ trc_llt( 0, 0, TRC_LLT_PNBSY );
+ while ( 1 )
+ {
+ pio_outbyte( CB_DH, CB_DH_DEV1 | dev75 );
+ ATA_DELAY();
+ sc = pio_inbyte( CB_SC );
+ sn = pio_inbyte( CB_SN );
+ if ( ( sc == 0x01 ) && ( sn == 0x01 ) )
+ break;
+ if ( tmr_chk_timeout() )
+ {
+ trc_llt( 0, 0, TRC_LLT_TOUT );
+ reg_cmd_info.to = 1;
+ reg_cmd_info.ec = 2;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break;
+ }
+ }
+
+ // Check if drive 1 has valid BSY=0 status
+
+ if ( reg_cmd_info.ec == 0 )
+ {
+ status = pio_inbyte( CB_STAT );
+ if ( ( status == 0x7f ) || ( status & CB_STAT_BSY ) )
+ {
+ reg_cmd_info.ec = 3;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+ }
+ }
+
+ // RESET_DONE:
+
+ // We are done but now we must select the device the caller
+ // requested before we trace the command. This will cause
+ // the correct data to be returned in reg_cmd_info.
+
+ pio_outbyte( CB_DH, ( devRtrn ? CB_DH_DEV1 : CB_DH_DEV0 ) | dev75 );
+ ATA_DELAY();
+ sub_trace_command();
+
+ // If possible, select a device that exists
+
+ if ( reg_config_info[1] != REG_CONFIG_TYPE_NONE )
+ {
+ pio_outbyte( CB_DH, CB_DH_DEV1 | dev75 );
+ ATA_DELAY();
+ }
+ if ( reg_config_info[0] != REG_CONFIG_TYPE_NONE )
+ {
+ pio_outbyte( CB_DH, CB_DH_DEV0 | dev75 );
+ ATA_DELAY();
+ }
+
+ // BMIDE Error=1?
+
+ if ( sub_readBusMstrStatus() & BM_SR_MASK_ERR )
+ {
+ reg_cmd_info.ec = 78; // yes
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+
+ // mark end of reset in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_E_RST );
+
+ // All done. The return values of this function are described in
+ // ATAIO.H.
+
+ if ( reg_cmd_info.ec )
+ return 1;
+ return 0;
+}
+
+//*************************************************************
+//
+// exec_non_data_cmd() - Execute a non-data command.
+//
+// Note special handling for Execute Device Diagnostics
+// command when there is no device 0.
+//
+// See ATA-2 Section 9.5, ATA-3 Section 9.5,
+// ATA-4 Section 8.8 Figure 12. Also see Section 8.5.
+//
+//*************************************************************
+
+static int exec_non_data_cmd( int dev );
+
+static int exec_non_data_cmd( int dev )
+
+{
+ unsigned char dev75;
+ unsigned char secCnt;
+ unsigned char secNum;
+ unsigned char status;
+ int polled = 0;
+
+ // determine value of Device (Drive/Head) register bits 7 and 5
+
+ dev75 = 0; // normal value
+ if ( reg_incompat_flags & REG_INCOMPAT_DEVREG )
+ dev75 = CB_DH_OBSOLETE; // obsolete value
+
+ // mark start of ND cmd in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_S_ND );
+
+ // reset Bus Master Error bit
+
+ sub_writeBusMstrStatus( BM_SR_MASK_ERR );
+
+ // Set command time out.
+
+ tmr_set_timeout();
+
+ // PAY ATTENTION HERE
+ // If the caller is attempting a Device Reset command, then
+ // don't do most of the normal stuff. Device Reset has no
+ // parameters, should not generate an interrupt and it is the
+ // only command that can be written to the Command register
+ // when a device has BSY=1 (a very strange command!). Not
+ // all devices support this command (even some ATAPI devices
+ // don't support the command.
+
+ if ( reg_cmd_info.cmd != CMD_DEVICE_RESET )
+ {
+ // Select the drive - call the sub_select function.
+ // Quit now if this fails.
+
+ if ( sub_select( dev ) )
+ {
+ sub_trace_command();
+ trc_llt( 0, 0, TRC_LLT_E_ND );
+ return 1;
+ }
+
+ // Set up all the registers except the command register.
+
+ sub_setup_command();
+
+ // For interrupt mode, install interrupt handler.
+
+ int_save_int_vect();
+ }
+
+ // Start the command by setting the Command register. The drive
+ // should immediately set BUSY status.
+
+ pio_outbyte( CB_CMD, reg_cmd_info.cmd );
+
+ // Waste some time by reading the alternate status a few times.
+ // This gives the drive time to set BUSY in the status register on
+ // really fast systems. If we don't do this, a slow drive on a fast
+ // system may not set BUSY fast enough and we would think it had
+ // completed the command when it really had not even started the
+ // command yet.
+
+ ATA_DELAY();
+ ATAPI_DELAY( 0 );
+ ATAPI_DELAY( 1 );
+
+ // IF
+ // This is an Exec Dev Diag command (cmd=0x90)
+ // and there is no device 0 then
+ // there will be no interrupt. So we must
+ // poll device 1 until it allows register
+ // access and then do normal polling of the Status
+ // register for BSY=0.
+ // ELSE
+ // IF
+ // This is a Dev Reset command (cmd=0x08) then
+ // there should be no interrupt. So we must
+ // poll for BSY=0.
+ // ELSE
+ // Do the normal wait for interrupt or polling for
+ // completion.
+
+ if ( ( reg_cmd_info.cmd == CMD_EXECUTE_DEVICE_DIAGNOSTIC )
+ &&
+ ( reg_config_info[0] == REG_CONFIG_TYPE_NONE )
+ )
+ {
+ polled = 1;
+ trc_llt( 0, 0, TRC_LLT_PNBSY );
+ while ( 1 )
+ {
+ pio_outbyte( CB_DH, CB_DH_DEV1 | dev75 );
+ ATA_DELAY();
+ secCnt = pio_inbyte( CB_SC );
+ secNum = pio_inbyte( CB_SN );
+ if ( ( secCnt == 0x01 ) && ( secNum == 0x01 ) )
+ break;
+ if ( tmr_chk_timeout() )
+ {
+ trc_llt( 0, 0, TRC_LLT_TOUT );
+ reg_cmd_info.to = 1;
+ reg_cmd_info.ec = 24;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break;
+ }
+ }
+ }
+ else
+ {
+ if ( reg_cmd_info.cmd == CMD_DEVICE_RESET )
+ {
+ // Wait for not BUSY -or- wait for time out.
+
+ polled = 1;
+ reg_wait_poll( 0, 23 );
+ }
+ else
+ {
+ // Wait for interrupt -or- wait for not BUSY -or- wait for time out.
+
+ if ( ! int_use_intr_flag )
+ polled = 1;
+ reg_wait_poll( 22, 23 );
+ }
+ }
+
+ // If status was polled or if any error read the status register,
+ // otherwise get the status that was read by the interrupt handler.
+
+ if ( ( polled ) || ( reg_cmd_info.ec ) )
+ status = pio_inbyte( CB_STAT );
+ else
+ status = int_ata_status;
+
+ // Error if BUSY, DEVICE FAULT, DRQ or ERROR status now.
+
+ if ( reg_cmd_info.ec == 0 )
+ {
+ if ( status & ( CB_STAT_BSY | CB_STAT_DF | CB_STAT_DRQ | CB_STAT_ERR ) )
+ {
+ reg_cmd_info.ec = 21;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+ }
+
+ // read the output registers and trace the command.
+
+ sub_trace_command();
+
+ // BMIDE Error=1?
+
+ if ( sub_readBusMstrStatus() & BM_SR_MASK_ERR )
+ {
+ reg_cmd_info.ec = 78; // yes
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+
+ // NON_DATA_DONE:
+
+ // For interrupt mode, remove interrupt handler.
+
+ int_restore_int_vect();
+
+ // mark end of ND cmd in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_E_ND );
+
+ // All done. The return values of this function are described in
+ // ATAIO.H.
+
+ if ( reg_cmd_info.ec )
+ return 1;
+ return 0;
+}
+
+//*************************************************************
+//
+// reg_non_data_chs() - Execute a non-data command.
+//
+// Note special handling for Execute Device Diagnostics
+// command when there is no device 0.
+//
+// See ATA-2 Section 9.5, ATA-3 Section 9.5,
+// ATA-4 Section 8.8 Figure 12. Also see Section 8.5.
+//
+//*************************************************************
+
+int reg_non_data_chs( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned int cyl, unsigned int head, unsigned int sect )
+
+{
+
+ // Setup command parameters.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_ATA;
+ reg_cmd_info.ct = TRC_TYPE_AND;
+ reg_cmd_info.cmd = cmd;
+ reg_cmd_info.fr1 = fr;
+ reg_cmd_info.sc1 = sc;
+ reg_cmd_info.sn1 = sect;
+ reg_cmd_info.cl1 = cyl & 0x00ff;
+ reg_cmd_info.ch1 = ( cyl & 0xff00 ) >> 8;
+ reg_cmd_info.dh1 = ( dev ? CB_DH_DEV1 : CB_DH_DEV0 ) | ( head & 0x0f );
+ reg_cmd_info.dc1 = int_use_intr_flag ? 0 : CB_DC_NIEN;
+ reg_cmd_info.ns = sc;
+ reg_cmd_info.lbaSize = LBACHS;
+
+ // Execute the command.
+
+ return exec_non_data_cmd( dev );
+}
+
+//*************************************************************
+//
+// reg_non_data_lba28() - Easy way to execute a non-data command
+// using an LBA sector address.
+//
+//*************************************************************
+
+int reg_non_data_lba28( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lba )
+
+{
+
+ // Setup current command information.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_ATA;
+ reg_cmd_info.ct = TRC_TYPE_AND;
+ reg_cmd_info.cmd = cmd;
+ reg_cmd_info.fr1 = fr;
+ reg_cmd_info.sc1 = sc;
+ reg_cmd_info.dh1 = CB_DH_LBA | (dev ? CB_DH_DEV1 : CB_DH_DEV0 );
+ reg_cmd_info.dc1 = int_use_intr_flag ? 0 : CB_DC_NIEN;
+ reg_cmd_info.ns = sc;
+ reg_cmd_info.lbaSize = LBA28;
+ reg_cmd_info.lbaHigh1 = 0L;
+ reg_cmd_info.lbaLow1 = lba;
+
+ // Execute the command.
+
+ return exec_non_data_cmd( dev );
+}
+
+//*************************************************************
+//
+// reg_non_data_lba48() - Easy way to execute a non-data command
+// using an LBA sector address.
+//
+//*************************************************************
+
+int reg_non_data_lba48( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lbahi, unsigned long lbalo )
+
+{
+
+ // Setup current command infomation.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_ATA;
+ reg_cmd_info.ct = TRC_TYPE_AND;
+ reg_cmd_info.cmd = cmd;
+ reg_cmd_info.fr1 = fr;
+ reg_cmd_info.sc1 = sc;
+ reg_cmd_info.dh1 = CB_DH_LBA | (dev ? CB_DH_DEV1 : CB_DH_DEV0 );
+ reg_cmd_info.dc1 = int_use_intr_flag ? 0 : CB_DC_NIEN;
+ reg_cmd_info.ns = sc;
+ reg_cmd_info.lbaSize = LBA48;
+ reg_cmd_info.lbaHigh1 = lbahi;
+ reg_cmd_info.lbaLow1 = lbalo;
+
+ // Execute the command.
+
+ return exec_non_data_cmd( dev );
+}
+
+//*************************************************************
+//
+// exec_pio_data_in_cmd() - Execute a PIO Data In command.
+//
+// See ATA-2 Section 9.3, ATA-3 Section 9.3,
+// ATA-4 Section 8.6 Figure 10.
+//
+//*************************************************************
+
+static int exec_pio_data_in_cmd( int dev,
+ unsigned int seg, unsigned int off,
+ long numSect, int multiCnt );
+
+
+static int exec_pio_data_in_cmd( int dev,
+ unsigned int seg, unsigned int off,
+ long numSect, int multiCnt )
+
+{
+ unsigned char status;
+ long wordCnt;
+ unsigned int saveSeg = seg;
+ unsigned int saveOff = off;
+
+ // mark start of PDI cmd in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_S_PDI );
+
+ // reset Bus Master Error bit
+
+ sub_writeBusMstrStatus( BM_SR_MASK_ERR );
+
+ // Set command time out.
+
+ tmr_set_timeout();
+
+ // Select the drive - call the sub_select function.
+ // Quit now if this fails.
+
+ if ( sub_select( dev ) )
+ {
+ sub_trace_command();
+ trc_llt( 0, 0, TRC_LLT_E_PDI );
+ reg_drq_block_call_back = 0;
+ return 1;
+ }
+
+ // Set up all the registers except the command register.
+
+ sub_setup_command();
+
+ // For interrupt mode, install interrupt handler.
+
+ int_save_int_vect();
+
+ // Start the command by setting the Command register. The drive
+ // should immediately set BUSY status.
+
+ pio_outbyte( CB_CMD, reg_cmd_info.cmd );
+
+ // Waste some time by reading the alternate status a few times.
+ // This gives the drive time to set BUSY in the status register on
+ // really fast systems. If we don't do this, a slow drive on a fast
+ // system may not set BUSY fast enough and we would think it had
+ // completed the command when it really had not even started the
+ // command yet.
+
+ ATA_DELAY();
+
+ // Loop to read each sector.
+
+ while ( 1 )
+ {
+ // READ_LOOP:
+ //
+ // NOTE NOTE NOTE ... The primary status register (1f7) MUST NOT be
+ // read more than ONCE for each sector transferred! When the
+ // primary status register is read, the drive resets IRQ 14. The
+ // alternate status register (3f6) can be read any number of times.
+ // After interrupt read the the primary status register ONCE
+ // and transfer the 256 words (REP INSW). AS SOON as BOTH the
+ // primary status register has been read AND the last of the 256
+ // words has been read, the drive is allowed to generate the next
+ // IRQ 14 (newer and faster drives could generate the next IRQ 14 in
+ // 50 microseconds or less). If the primary status register is read
+ // more than once, there is the possibility of a race between the
+ // drive and the software and the next IRQ 14 could be reset before
+ // the system interrupt controller sees it.
+
+ // Wait for interrupt -or- wait for not BUSY -or- wait for time out.
+
+ ATAPI_DELAY( dev );
+ reg_wait_poll( 34, 35 );
+
+ // If polling or error read the status, otherwise
+ // get the status that was read by the interrupt handler.
+
+ if ( ( ! int_use_intr_flag ) || ( reg_cmd_info.ec ) )
+ status = pio_inbyte( CB_STAT );
+ else
+ status = int_ata_status;
+
+ // If there was a time out error, go to READ_DONE.
+
+ if ( reg_cmd_info.ec )
+ break; // go to READ_DONE
+
+ // If BSY=0 and DRQ=1, transfer the data,
+ // even if we find out there is an error later.
+
+ if ( ( status & ( CB_STAT_BSY | CB_STAT_DRQ ) ) == CB_STAT_DRQ )
+ {
+ // do the slow data transfer thing
+
+ if ( reg_slow_xfer_flag )
+ {
+ if ( numSect <= reg_slow_xfer_flag )
+ {
+ tmr_delay_xfer();
+ reg_slow_xfer_flag = 0;
+ }
+ }
+
+ // increment number of DRQ packets
+
+ reg_cmd_info.drqPackets ++ ;
+
+ // determine the number of sectors to transfer
+
+ wordCnt = multiCnt ? multiCnt : 1;
+ if ( wordCnt > numSect )
+ wordCnt = numSect;
+ wordCnt = wordCnt * 256;
+
+ // Quit if buffer overrun.
+ // Adjust buffer address when DRQ block call back in use.
+
+ if ( reg_drq_block_call_back )
+ {
+ if ( ( wordCnt << 1 ) > reg_buffer_size )
+ {
+ reg_cmd_info.ec = 61;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break; // go to READ_DONE
+ }
+ seg = saveSeg;
+ off = saveOff;
+ }
+ else
+ {
+ if ( ( reg_cmd_info.totalBytesXfer + ( wordCnt << 1 ) )
+ > reg_buffer_size )
+ {
+ reg_cmd_info.ec = 61;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break; // go to READ_DONE
+ }
+ }
+
+ // Do the REP INSW to read the data for one DRQ block.
+
+ reg_cmd_info.totalBytesXfer += ( wordCnt << 1 );
+ pio_drq_block_in( CB_DATA, seg, off, wordCnt );
+
+ ATA_DELAY(); // delay so device can get the status updated
+
+ // Note: The drive should have dropped DATA REQUEST by now. If there
+ // are more sectors to transfer, BUSY should be active now (unless
+ // there is an error).
+
+ // Call DRQ block call back function.
+ if ( reg_drq_block_call_back )
+ {
+ reg_cmd_info.drqPacketSize = ( wordCnt << 1 );
+ (* reg_drq_block_call_back) ( & reg_cmd_info );
+ }
+
+ // Decrement the count of sectors to be transferred
+ // and increment buffer address.
+
+ numSect = numSect - ( multiCnt ? multiCnt : 1 );
+ seg = seg + ( 32 * ( multiCnt ? multiCnt : 1 ) );
+ }
+
+ // So was there any error condition?
+
+ if ( status & ( CB_STAT_BSY | CB_STAT_DF | CB_STAT_ERR ) )
+ {
+ reg_cmd_info.ec = 31;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break; // go to READ_DONE
+ }
+
+ // DRQ should have been set -- was it?
+
+ if ( ( status & CB_STAT_DRQ ) == 0 )
+ {
+ reg_cmd_info.ec = 32;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break; // go to READ_DONE
+ }
+
+ // If all of the requested sectors have been transferred, make a
+ // few more checks before we exit.
+
+ if ( numSect < 1 )
+ {
+ // Since the drive has transferred all of the requested sectors
+ // without error, the drive should not have BUSY, DEVICE FAULT,
+ // DATA REQUEST or ERROR active now.
+
+ ATAPI_DELAY( dev );
+ status = pio_inbyte( CB_STAT );
+ if ( status & ( CB_STAT_BSY | CB_STAT_DF | CB_STAT_DRQ | CB_STAT_ERR ) )
+ {
+ reg_cmd_info.ec = 33;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break; // go to READ_DONE
+ }
+
+ // All sectors have been read without error, go to READ_DONE.
+
+ break; // go to READ_DONE
+
+ }
+
+ // This is the end of the read loop. If we get here, the loop is
+ // repeated to read the next sector. Go back to READ_LOOP.
+
+ }
+
+ // read the output registers and trace the command.
+
+ sub_trace_command();
+
+ // BMIDE Error=1?
+
+ if ( sub_readBusMstrStatus() & BM_SR_MASK_ERR )
+ {
+ reg_cmd_info.ec = 78; // yes
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+
+ // READ_DONE:
+
+ // For interrupt mode, remove interrupt handler.
+
+ int_restore_int_vect();
+
+ // mark end of PDI cmd in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_E_PDI );
+
+ // reset reg_drq_block_call_back to NULL (0)
+
+ reg_drq_block_call_back = 0;
+
+ // All done. The return values of this function are described in
+ // ATAIO.H.
+
+ if ( reg_cmd_info.ec )
+ return 1;
+ return 0;
+}
+
+//*************************************************************
+//
+// reg_pio_data_in_chs() - Execute a PIO Data In command.
+//
+// See ATA-2 Section 9.3, ATA-3 Section 9.3,
+// ATA-4 Section 8.6 Figure 10.
+//
+//*************************************************************
+
+int reg_pio_data_in_chs( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned int cyl, unsigned int head, unsigned int sect,
+ unsigned int seg, unsigned int off,
+ long numSect, int multiCnt )
+
+{
+
+ // Reset error return data.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_ATA;
+ reg_cmd_info.ct = TRC_TYPE_APDI;
+ reg_cmd_info.cmd = cmd;
+ reg_cmd_info.fr1 = fr;
+ reg_cmd_info.sc1 = sc;
+ reg_cmd_info.sn1 = sect;
+ reg_cmd_info.cl1 = cyl & 0x00ff;
+ reg_cmd_info.ch1 = ( cyl & 0xff00 ) >> 8;
+ reg_cmd_info.dh1 = ( dev ? CB_DH_DEV1 : CB_DH_DEV0 ) | ( head & 0x0f );
+ reg_cmd_info.dc1 = int_use_intr_flag ? 0 : CB_DC_NIEN;
+ reg_cmd_info.lbaSize = LBACHS;
+
+ // these commands transfer only 1 sector
+ if ( ( cmd == CMD_IDENTIFY_DEVICE )
+ || ( cmd == CMD_IDENTIFY_DEVICE_PACKET )
+ )
+ numSect = 1;
+
+ // adjust multiple count
+ if ( multiCnt & 0x0800 )
+ {
+ // assume caller knows what they are doing
+ multiCnt &= 0x00ff;
+ }
+ else
+ {
+ // only multiple commands use multiCnt
+ if ( ( cmd != CMD_READ_MULTIPLE )
+ && ( cmd != CMD_READ_MULTIPLE_EXT )
+ )
+ multiCnt = 1;
+ }
+
+ reg_cmd_info.ns = numSect;
+ reg_cmd_info.mc = multiCnt;
+
+ return exec_pio_data_in_cmd( dev, seg, off, numSect, multiCnt );
+}
+
+//*************************************************************
+//
+// reg_pio_data_in_lba28() - Easy way to execute a PIO Data In command
+// using an LBA sector address.
+//
+//*************************************************************
+
+int reg_pio_data_in_lba28( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lba,
+ unsigned int seg, unsigned int off,
+ long numSect, int multiCnt )
+
+{
+
+ // Reset error return data.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_ATA;
+ reg_cmd_info.ct = TRC_TYPE_APDI;
+ reg_cmd_info.cmd = cmd;
+ reg_cmd_info.fr1 = fr;
+ reg_cmd_info.sc1 = sc;
+ reg_cmd_info.dh1 = CB_DH_LBA | (dev ? CB_DH_DEV1 : CB_DH_DEV0 );
+ reg_cmd_info.dc1 = int_use_intr_flag ? 0 : CB_DC_NIEN;
+ reg_cmd_info.lbaSize = LBA28;
+ reg_cmd_info.lbaHigh1 = 0L;
+ reg_cmd_info.lbaLow1 = lba;
+
+ // these commands transfer only 1 sector
+ if ( ( cmd == CMD_IDENTIFY_DEVICE )
+ || ( cmd == CMD_IDENTIFY_DEVICE_PACKET )
+ )
+ numSect = 1;
+
+ // adjust multiple count
+ if ( multiCnt & 0x0800 )
+ {
+ // assume caller knows what they are doing
+ multiCnt &= 0x00ff;
+ }
+ else
+ {
+ // only multiple commands use multiCnt
+ if ( ( cmd != CMD_READ_MULTIPLE )
+ && ( cmd != CMD_READ_MULTIPLE_EXT )
+ )
+ multiCnt = 1;
+ }
+
+ reg_cmd_info.ns = numSect;
+ reg_cmd_info.mc = multiCnt;
+
+ return exec_pio_data_in_cmd( dev, seg, off, numSect, multiCnt );
+}
+
+//*************************************************************
+//
+// reg_pio_data_in_lba48() - Easy way to execute a PIO Data In command
+// using an LBA sector address.
+//
+//*************************************************************
+
+int reg_pio_data_in_lba48( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lbahi, unsigned long lbalo,
+ unsigned int seg, unsigned int off,
+ long numSect, int multiCnt )
+
+{
+
+ // Reset error return data.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_ATA;
+ reg_cmd_info.ct = TRC_TYPE_APDI;
+ reg_cmd_info.cmd = cmd;
+ reg_cmd_info.fr1 = fr;
+ reg_cmd_info.sc1 = sc;
+ reg_cmd_info.dh1 = CB_DH_LBA | (dev ? CB_DH_DEV1 : CB_DH_DEV0 );
+ reg_cmd_info.dc1 = int_use_intr_flag ? 0 : CB_DC_NIEN;
+ reg_cmd_info.lbaSize = LBA48;
+ reg_cmd_info.lbaHigh1 = lbahi;
+ reg_cmd_info.lbaLow1 = lbalo;
+
+ // adjust multiple count
+ if ( multiCnt & 0x0800 )
+ {
+ // assume caller knows what they are doing
+ multiCnt &= 0x00ff;
+ }
+ else
+ {
+ // only multiple commands use multiCnt
+ if ( ( cmd != CMD_READ_MULTIPLE )
+ && ( cmd != CMD_READ_MULTIPLE_EXT )
+ )
+ multiCnt = 1;
+ }
+
+ reg_cmd_info.ns = numSect;
+ reg_cmd_info.mc = multiCnt;
+
+ return exec_pio_data_in_cmd( dev, seg, off, numSect, multiCnt );
+}
+
+//*************************************************************
+//
+// exec_pio_data_out_cmd() - Execute a PIO Data Out command.
+//
+// See ATA-2 Section 9.4, ATA-3 Section 9.4,
+// ATA-4 Section 8.7 Figure 11.
+//
+//*************************************************************
+
+static int exec_pio_data_out_cmd( int dev,
+ unsigned int seg, unsigned int off,
+ long numSect, int multiCnt );
+
+static int exec_pio_data_out_cmd( int dev,
+ unsigned int seg, unsigned int off,
+ long numSect, int multiCnt )
+
+{
+ unsigned char status;
+ int loopFlag = 1;
+ long wordCnt;
+ unsigned int saveSeg = seg;
+ unsigned int saveOff = off;
+
+ // mark start of PDO cmd in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_S_PDO );
+
+ // reset Bus Master Error bit
+
+ sub_writeBusMstrStatus( BM_SR_MASK_ERR );
+
+ // Set command time out.
+
+ tmr_set_timeout();
+
+ // Select the drive - call the sub_select function.
+ // Quit now if this fails.
+
+ if ( sub_select( dev ) )
+ {
+ sub_trace_command();
+ trc_llt( 0, 0, TRC_LLT_E_PDO );
+ reg_drq_block_call_back = 0;
+ return 1;
+ }
+
+ // Set up all the registers except the command register.
+
+ sub_setup_command();
+
+ // For interrupt mode, instal interrupt handler.
+
+ int_save_int_vect();
+
+ // Start the command by setting the Command register. The drive
+ // should immediately set BUSY status.
+
+ pio_outbyte( CB_CMD, reg_cmd_info.cmd );
+
+ // Waste some time by reading the alternate status a few times.
+ // This gives the drive time to set BUSY in the status register on
+ // really fast systems. If we don't do this, a slow drive on a fast
+ // system may not set BUSY fast enough and we would think it had
+ // completed the command when it really had not even started the
+ // command yet.
+
+ ATA_DELAY();
+ ATAPI_DELAY( dev );
+
+ // Wait for not BUSY or time out.
+ // Note: No interrupt is generated for the
+ // first sector of a write command. Well...
+ // that's not really true we are working with
+ // a PCMCIA PC Card ATA device.
+
+ trc_llt( 0, 0, TRC_LLT_PNBSY );
+ while ( 1 )
+ {
+ status = pio_inbyte( CB_ASTAT );
+ if ( ( status & CB_STAT_BSY ) == 0 )
+ break;
+ if ( tmr_chk_timeout() )
+ {
+ trc_llt( 0, 0, TRC_LLT_TOUT );
+ reg_cmd_info.to = 1;
+ reg_cmd_info.ec = 47;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ loopFlag = 0;
+ break;
+ }
+ }
+
+ // If we are using interrupts and we just got an interrupt, this is
+ // wrong. The drive must not generate an interrupt at this time.
+
+ if ( loopFlag && int_use_intr_flag && int_intr_flag )
+ {
+ reg_cmd_info.ec = 46;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ loopFlag = 0;
+ }
+
+ // This loop writes each sector.
+
+ while ( loopFlag )
+ {
+ // WRITE_LOOP:
+ //
+ // NOTE NOTE NOTE ... The primary status register (1f7) MUST NOT be
+ // read more than ONCE for each sector transferred! When the
+ // primary status register is read, the drive resets IRQ 14. The
+ // alternate status register (3f6) can be read any number of times.
+ // For correct results, transfer the 256 words (REP OUTSW), wait for
+ // interrupt and then read the primary status register. AS
+ // SOON as BOTH the primary status register has been read AND the
+ // last of the 256 words has been written, the drive is allowed to
+ // generate the next IRQ 14 (newer and faster drives could generate
+ // the next IRQ 14 in 50 microseconds or less). If the primary
+ // status register is read more than once, there is the possibility
+ // of a race between the drive and the software and the next IRQ 14
+ // could be reset before the system interrupt controller sees it.
+
+ // If BSY=0 and DRQ=1, transfer the data,
+ // even if we find out there is an error later.
+
+ if ( ( status & ( CB_STAT_BSY | CB_STAT_DRQ ) ) == CB_STAT_DRQ )
+ {
+ // do the slow data transfer thing
+
+ if ( reg_slow_xfer_flag )
+ {
+ if ( numSect <= reg_slow_xfer_flag )
+ {
+ tmr_delay_xfer();
+ reg_slow_xfer_flag = 0;
+ }
+ }
+
+ // increment number of DRQ packets
+
+ reg_cmd_info.drqPackets ++ ;
+
+ // determine the number of sectors to transfer
+
+ wordCnt = multiCnt ? multiCnt : 1;
+ if ( wordCnt > numSect )
+ wordCnt = numSect;
+ wordCnt = wordCnt * 256;
+
+ // Quit if buffer overrun.
+ // If DRQ call back in use:
+ // a) Call DRQ block call back function.
+ // b) Adjust buffer address.
+
+ if ( reg_drq_block_call_back )
+ {
+ if ( ( wordCnt << 1 ) > reg_buffer_size )
+ {
+ reg_cmd_info.ec = 61;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break; // go to READ_DONE
+ }
+ reg_cmd_info.drqPacketSize = ( wordCnt << 1 );
+ (* reg_drq_block_call_back) ( & reg_cmd_info );
+ seg = saveSeg;
+ off = saveOff;
+ }
+ else
+ {
+ if ( ( reg_cmd_info.totalBytesXfer + ( wordCnt << 1 ) )
+ > reg_buffer_size )
+ {
+ reg_cmd_info.ec = 61;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break; // go to READ_DONE
+ }
+ }
+
+ // Do the REP OUTSW to write the data for one DRQ block.
+
+ reg_cmd_info.totalBytesXfer += ( wordCnt << 1 );
+ pio_drq_block_out( CB_DATA, seg, off, wordCnt );
+
+ ATA_DELAY(); // delay so device can get the status updated
+
+ // Note: The drive should have dropped DATA REQUEST and
+ // raised BUSY by now.
+
+ // Decrement the count of sectors to be transferred
+ // and increment buffer address.
+
+ numSect = numSect - ( multiCnt ? multiCnt : 1 );
+ seg = seg + ( 32 * ( multiCnt ? multiCnt : 1 ) );
+ }
+
+ // So was there any error condition?
+
+ if ( status & ( CB_STAT_BSY | CB_STAT_DF | CB_STAT_ERR ) )
+ {
+ reg_cmd_info.ec = 41;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break; // go to WRITE_DONE
+ }
+
+ // DRQ should have been set -- was it?
+
+ if ( ( status & CB_STAT_DRQ ) == 0 )
+ {
+ reg_cmd_info.ec = 42;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break; // go to WRITE_DONE
+ }
+
+ // Wait for interrupt -or- wait for not BUSY -or- wait for time out.
+
+ ATAPI_DELAY( dev );
+ reg_wait_poll( 44, 45 );
+
+ // If polling or error read the status, otherwise
+ // get the status that was read by the interrupt handler.
+
+ if ( ( ! int_use_intr_flag ) || ( reg_cmd_info.ec ) )
+ status = pio_inbyte( CB_STAT );
+ else
+ status = int_ata_status;
+
+ // If there was a time out error, go to WRITE_DONE.
+
+ if ( reg_cmd_info.ec )
+ break; // go to WRITE_DONE
+
+ // If all of the requested sectors have been transferred, make a
+ // few more checks before we exit.
+
+ if ( numSect < 1 )
+ {
+ // Since the drive has transferred all of the sectors without
+ // error, the drive MUST not have BUSY, DEVICE FAULT, DATA REQUEST
+ // or ERROR status at this time.
+
+ if ( status & ( CB_STAT_BSY | CB_STAT_DF | CB_STAT_DRQ | CB_STAT_ERR ) )
+ {
+ reg_cmd_info.ec = 43;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ break; // go to WRITE_DONE
+ }
+
+ // All sectors have been written without error, go to WRITE_DONE.
+
+ break; // go to WRITE_DONE
+
+ }
+
+ //
+ // This is the end of the write loop. If we get here, the loop
+ // is repeated to write the next sector. Go back to WRITE_LOOP.
+
+ }
+
+ // read the output registers and trace the command.
+
+ sub_trace_command();
+
+ // BMIDE Error=1?
+
+ if ( sub_readBusMstrStatus() & BM_SR_MASK_ERR )
+ {
+ reg_cmd_info.ec = 78; // yes
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+
+ // WRITE_DONE:
+
+ // For interrupt mode, remove interrupt handler.
+
+ int_restore_int_vect();
+
+ // mark end of PDO cmd in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_E_PDO );
+
+ // reset reg_drq_block_call_back to NULL (0)
+
+ reg_drq_block_call_back = 0;
+
+ // All done. The return values of this function are described in
+ // ATAIO.H.
+
+ if ( reg_cmd_info.ec )
+ return 1;
+ return 0;
+}
+
+//*************************************************************
+//
+// reg_pio_data_out_chs() - Execute a PIO Data Out command.
+//
+// See ATA-2 Section 9.4, ATA-3 Section 9.4,
+// ATA-4 Section 8.7 Figure 11.
+//
+//*************************************************************
+
+int reg_pio_data_out_chs( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned int cyl, unsigned int head, unsigned int sect,
+ unsigned int seg, unsigned int off,
+ long numSect, int multiCnt )
+
+{
+
+ // Reset error return data.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_ATA;
+ reg_cmd_info.ct = TRC_TYPE_APDO;
+ reg_cmd_info.cmd = cmd;
+ reg_cmd_info.fr1 = fr;
+ reg_cmd_info.sc1 = sc;
+ reg_cmd_info.sn1 = sect;
+ reg_cmd_info.cl1 = cyl & 0x00ff;
+ reg_cmd_info.ch1 = ( cyl & 0xff00 ) >> 8;
+ reg_cmd_info.dh1 = ( dev ? CB_DH_DEV1 : CB_DH_DEV0 ) | ( head & 0x0f );
+ reg_cmd_info.dc1 = int_use_intr_flag ? 0 : CB_DC_NIEN;
+ reg_cmd_info.lbaSize = LBACHS;
+
+ // adjust multiple count
+ if ( multiCnt & 0x0800 )
+ {
+ // assume caller knows what they are doing
+ multiCnt &= 0x00ff;
+ }
+ else
+ {
+ // only multiple commands use multiCnt
+ if ( ( cmd != CMD_CFA_WRITE_MULTIPLE_WO_ERASE )
+ && ( cmd != CMD_WRITE_MULTIPLE )
+ && ( cmd != CMD_WRITE_MULTIPLE_EXT )
+ && ( cmd != CMD_WRITE_MULTIPLE_FUA_EXT )
+ )
+ multiCnt = 1;
+ }
+
+ reg_cmd_info.ns = numSect;
+ reg_cmd_info.mc = multiCnt;
+
+ return exec_pio_data_out_cmd( dev, seg, off, numSect, multiCnt );
+}
+
+//*************************************************************
+//
+// reg_pio_data_out_lba28() - Easy way to execute a PIO Data In command
+// using an LBA sector address.
+//
+//*************************************************************
+
+int reg_pio_data_out_lba28( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lba,
+ unsigned int seg, unsigned int off,
+ long numSect, int multiCnt )
+
+{
+
+ // Reset error return data.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_ATA;
+ reg_cmd_info.ct = TRC_TYPE_APDO;
+ reg_cmd_info.cmd = cmd;
+ reg_cmd_info.fr1 = fr;
+ reg_cmd_info.sc1 = sc;
+ reg_cmd_info.dh1 = CB_DH_LBA | (dev ? CB_DH_DEV1 : CB_DH_DEV0 );
+ reg_cmd_info.dc1 = int_use_intr_flag ? 0 : CB_DC_NIEN;
+ reg_cmd_info.lbaSize = LBA28;
+ reg_cmd_info.lbaHigh1 = 0;
+ reg_cmd_info.lbaLow1 = lba;
+
+ // adjust multiple count
+ if ( multiCnt & 0x0800 )
+ {
+ // assume caller knows what they are doing
+ multiCnt &= 0x00ff;
+ }
+ else
+ {
+ // only multiple commands use multiCnt
+ if ( ( cmd != CMD_CFA_WRITE_MULTIPLE_WO_ERASE )
+ && ( cmd != CMD_WRITE_MULTIPLE )
+ && ( cmd != CMD_WRITE_MULTIPLE_EXT )
+ && ( cmd != CMD_WRITE_MULTIPLE_FUA_EXT )
+ )
+ multiCnt = 1;
+ }
+
+ reg_cmd_info.ns = numSect;
+ reg_cmd_info.mc = multiCnt;
+
+ return exec_pio_data_out_cmd( dev, seg, off, numSect, multiCnt );
+}
+
+//*************************************************************
+//
+// reg_pio_data_out_lba48() - Easy way to execute a PIO Data In command
+// using an LBA sector address.
+//
+//*************************************************************
+
+int reg_pio_data_out_lba48( int dev, int cmd,
+ unsigned int fr, unsigned int sc,
+ unsigned long lbahi, unsigned long lbalo,
+ unsigned int seg, unsigned int off,
+ long numSect, int multiCnt )
+
+{
+
+ // Reset error return data.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_ATA;
+ reg_cmd_info.ct = TRC_TYPE_APDO;
+ reg_cmd_info.cmd = cmd;
+ reg_cmd_info.fr1 = fr;
+ reg_cmd_info.sc1 = sc;
+ reg_cmd_info.dh1 = CB_DH_LBA | (dev ? CB_DH_DEV1 : CB_DH_DEV0 );
+ reg_cmd_info.dc1 = int_use_intr_flag ? 0 : CB_DC_NIEN;
+ reg_cmd_info.lbaSize = LBA48;
+ reg_cmd_info.lbaHigh1 = lbahi;
+ reg_cmd_info.lbaLow1 = lbalo;
+
+ // adjust multiple count
+ if ( multiCnt & 0x0800 )
+ {
+ // assume caller knows what they are doing
+ multiCnt &= 0x00ff;
+ }
+ else
+ {
+ // only multiple commands use multiCnt
+ if ( ( cmd != CMD_CFA_WRITE_MULTIPLE_WO_ERASE )
+ && ( cmd != CMD_WRITE_MULTIPLE )
+ && ( cmd != CMD_WRITE_MULTIPLE_EXT )
+ && ( cmd != CMD_WRITE_MULTIPLE_FUA_EXT )
+ )
+ multiCnt = 1;
+ }
+
+ reg_cmd_info.ns = numSect;
+ reg_cmd_info.mc = multiCnt;
+
+ return exec_pio_data_out_cmd( dev, seg, off, numSect, multiCnt );
+}
+
+//*************************************************************
+//
+// reg_packet() - Execute an ATAPI Packet (A0H) command.
+//
+// See ATA-4 Section 9.10, Figure 14.
+//
+//*************************************************************
+
+int reg_packet( int dev,
+ unsigned int cpbc,
+ unsigned int cpseg, unsigned int cpoff,
+ int dir,
+ long dpbc,
+ unsigned int dpseg, unsigned int dpoff,
+ unsigned long lba )
+
+{
+ unsigned char status;
+ unsigned char reason;
+ unsigned char lowCyl;
+ unsigned char highCyl;
+ unsigned int byteCnt;
+ long wordCnt;
+ int ndx;
+ unsigned long dpaddr;
+ unsigned long savedpaddr;
+ unsigned char far * cfp;
+ int slowXferCntr = 0;
+ int prevFailBit7 = 0;
+
+ // mark start of PI cmd in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_S_PI );
+
+ // reset Bus Master Error bit
+
+ sub_writeBusMstrStatus( BM_SR_MASK_ERR );
+
+ // Make sure the command packet size is either 12 or 16
+ // and save the command packet size and data.
+
+ cpbc = cpbc < 12 ? 12 : cpbc;
+ cpbc = cpbc > 12 ? 16 : cpbc;
+
+ // Setup current command information.
+
+ sub_zero_return_data();
+ reg_cmd_info.flg = TRC_FLAG_ATAPI;
+ reg_cmd_info.ct = dir ? TRC_TYPE_PPDO : TRC_TYPE_PPDI;
+ reg_cmd_info.cmd = CMD_PACKET;
+ reg_cmd_info.fr1 = reg_atapi_reg_fr;
+ reg_cmd_info.sc1 = reg_atapi_reg_sc;
+ reg_cmd_info.sn1 = reg_atapi_reg_sn;
+ reg_cmd_info.cl1 = (unsigned char) ( dpbc & 0x00ff );
+ reg_cmd_info.ch1 = ( unsigned char) ( ( dpbc & 0xff00 ) >> 8 );
+ reg_cmd_info.dh1 = ( dev ? CB_DH_DEV1 : CB_DH_DEV0 )
+ | ( reg_atapi_reg_dh & 0x0f );
+ reg_cmd_info.dc1 = int_use_intr_flag ? 0 : CB_DC_NIEN;
+ reg_cmd_info.lbaSize = LBA32;
+ reg_cmd_info.lbaLow1 = lba;
+ reg_cmd_info.lbaHigh1 = 0L;
+ reg_atapi_cp_size = cpbc;
+ cfp = (unsigned char *)MK_FP( cpseg, cpoff );
+ for ( ndx = 0; ndx < cpbc; ndx ++ )
+ {
+ reg_atapi_cp_data[ndx] = * cfp;
+ cfp ++ ;
+ }
+
+ // Zero the alternate ATAPI register data.
+
+ reg_atapi_reg_fr = 0;
+ reg_atapi_reg_sc = 0;
+ reg_atapi_reg_sn = 0;
+ reg_atapi_reg_dh = 0;
+
+ // Set command time out.
+
+ tmr_set_timeout();
+
+ // Select the drive - call the sub_select function.
+ // Quit now if this fails.
+
+ if ( sub_select( dev ) )
+ {
+ sub_trace_command();
+ trc_llt( 0, 0, TRC_LLT_E_PI );
+ reg_drq_block_call_back = 0;
+ return 1;
+ }
+
+ // Set up all the registers except the command register.
+
+ sub_setup_command();
+
+ // For interrupt mode, install interrupt handler.
+
+ int_save_int_vect();
+
+ // Start the command by setting the Command register. The drive
+ // should immediately set BUSY status.
+
+ pio_outbyte( CB_CMD, CMD_PACKET );
+
+ // Waste some time by reading the alternate status a few times.
+ // This gives the drive time to set BUSY in the status register on
+ // really fast systems. If we don't do this, a slow drive on a fast
+ // system may not set BUSY fast enough and we would think it had
+ // completed the command when it really had not even started the
+ // command yet.
+
+ ATA_DELAY();
+ ATAPI_DELAY( dev );
+
+ // Command packet transfer...
+ // Check for protocol failures,
+ // the device should have BSY=1 or
+ // if BSY=0 then either DRQ=1 or CHK=1.
+
+ status = pio_inbyte( CB_ASTAT );
+ if ( status & CB_STAT_BSY )
+ {
+ // BSY=1 is OK
+ }
+ else
+ {
+ if ( status & ( CB_STAT_DRQ | CB_STAT_ERR ) )
+ {
+ // BSY=0 and DRQ=1 is OK
+ // BSY=0 and ERR=1 is OK
+ }
+ else
+ {
+ reg_cmd_info.failbits |= FAILBIT0; // not OK
+ }
+ }
+
+ // Command packet transfer...
+ // Poll Alternate Status for BSY=0.
+
+ trc_llt( 0, 0, TRC_LLT_PNBSY );
+ while ( 1 )
+ {
+ status = pio_inbyte( CB_ASTAT ); // poll for not busy
+ if ( ( status & CB_STAT_BSY ) == 0 )
+ break;
+ if ( tmr_chk_timeout() ) // time out yet ?
+ {
+ trc_llt( 0, 0, TRC_LLT_TOUT ); // yes
+ reg_cmd_info.to = 1;
+ reg_cmd_info.ec = 51;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ dir = -1; // command done
+ break;
+ }
+ }
+
+ // Command packet transfer...
+ // Check for protocol failures... no interrupt here please!
+ // Clear any interrupt the command packet transfer may have caused.
+
+ if ( int_intr_flag ) // extra interrupt(s) ?
+ reg_cmd_info.failbits |= FAILBIT1;
+ int_intr_flag = 0;
+
+ // Command packet transfer...
+ // If no error, transfer the command packet.
+
+ if ( reg_cmd_info.ec == 0 )
+ {
+
+ // Command packet transfer...
+ // Read the primary status register and the other ATAPI registers.
+
+ status = pio_inbyte( CB_STAT );
+ reason = pio_inbyte( CB_SC );
+ lowCyl = pio_inbyte( CB_CL );
+ highCyl = pio_inbyte( CB_CH );
+
+ // Command packet transfer...
+ // check status: must have BSY=0, DRQ=1 now
+
+ if ( ( status & ( CB_STAT_BSY | CB_STAT_DRQ | CB_STAT_ERR ) )
+ != CB_STAT_DRQ
+ )
+ {
+ reg_cmd_info.ec = 52;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ dir = -1; // command done
+ }
+ else
+ {
+ // Command packet transfer...
+ // Check for protocol failures...
+ // check: C/nD=1, IO=0.
+
+ if ( ( reason & ( CB_SC_P_TAG | CB_SC_P_REL | CB_SC_P_IO ) )
+ || ( ! ( reason & CB_SC_P_CD ) )
+ )
+ reg_cmd_info.failbits |= FAILBIT2;
+ if ( ( lowCyl != reg_cmd_info.cl1 )
+ || ( highCyl != reg_cmd_info.ch1 ) )
+ reg_cmd_info.failbits |= FAILBIT3;
+
+ // Command packet transfer...
+ // trace cdb byte 0,
+ // xfer the command packet (the cdb)
+
+ trc_llt( 0, * (unsigned char far *) MK_FP( cpseg, cpoff ), TRC_LLT_P_CMD );
+ pio_drq_block_out( CB_DATA, cpseg, cpoff, cpbc >> 1 );
+
+ ATA_DELAY(); // delay so device can get the status updated
+ }
+ }
+
+ // Data transfer loop...
+ // If there is no error, enter the data transfer loop.
+ // First adjust the I/O buffer address so we are able to
+ // transfer large amounts of data (more than 64K).
+
+ dpaddr = dpseg;
+ dpaddr = dpaddr << 4;
+ dpaddr = dpaddr + dpoff;
+ savedpaddr = dpaddr;
+
+ while ( reg_cmd_info.ec == 0 )
+ {
+ // Data transfer loop...
+ // Wait for interrupt -or- wait for not BUSY -or- wait for time out.
+
+ ATAPI_DELAY( dev );
+ reg_wait_poll( 53, 54 );
+
+ // Data transfer loop...
+ // If there was a time out error, exit the data transfer loop.
+
+ if ( reg_cmd_info.ec )
+ {
+ dir = -1; // command done
+ break;
+ }
+
+ // Data transfer loop...
+ // If using interrupts get the status read by the interrupt
+ // handler, otherwise read the status register.
+
+ if ( int_use_intr_flag )
+ status = int_ata_status;
+ else
+ status = pio_inbyte( CB_STAT );
+ reason = pio_inbyte( CB_SC );
+ lowCyl = pio_inbyte( CB_CL );
+ highCyl = pio_inbyte( CB_CH );
+
+ // Data transfer loop...
+ // Exit the read data loop if the device indicates this
+ // is the end of the command.
+
+ if ( ( status & ( CB_STAT_BSY | CB_STAT_DRQ ) ) == 0 )
+ {
+ dir = -1; // command done
+ break;
+ }
+
+ // Data transfer loop...
+ // The device must want to transfer data...
+ // check status: must have BSY=0, DRQ=1 now.
+
+ if ( ( status & ( CB_STAT_BSY | CB_STAT_DRQ ) ) != CB_STAT_DRQ )
+ {
+ reg_cmd_info.ec = 55;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ dir = -1; // command done
+ break;
+ }
+ else
+ {
+ // Data transfer loop...
+ // Check for protocol failures...
+ // check: C/nD=0, IO=1 (read) or IO=0 (write).
+
+ if ( ( reason & ( CB_SC_P_TAG | CB_SC_P_REL ) )
+ || ( reason & CB_SC_P_CD )
+ )
+ reg_cmd_info.failbits |= FAILBIT4;
+ if ( ( reason & CB_SC_P_IO ) && dir )
+ reg_cmd_info.failbits |= FAILBIT5;
+ }
+
+ // do the slow data transfer thing
+
+ if ( reg_slow_xfer_flag )
+ {
+ slowXferCntr ++ ;
+ if ( slowXferCntr <= reg_slow_xfer_flag )
+ {
+ tmr_delay_xfer();
+ reg_slow_xfer_flag = 0;
+ }
+ }
+
+ // Data transfer loop...
+ // get the byte count, check for zero...
+
+ byteCnt = ( highCyl << 8 ) | lowCyl;
+ if ( byteCnt < 1 )
+ {
+ reg_cmd_info.ec = 59;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ dir = -1; // command done
+ break;
+ }
+
+ // Data transfer loop...
+ // and check protocol failures...
+
+ if ( byteCnt > dpbc )
+ reg_cmd_info.failbits |= FAILBIT6;
+ reg_cmd_info.failbits |= prevFailBit7;
+ prevFailBit7 = 0;
+ if ( byteCnt & 0x0001 )
+ prevFailBit7 = FAILBIT7;
+
+ // Data transfer loop...
+ // Quit if buffer overrun.
+ // If DRQ call back in use adjust buffer address.
+
+ if ( reg_drq_block_call_back )
+ {
+ if ( byteCnt > reg_buffer_size )
+ {
+ reg_cmd_info.ec = 61;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ dir = -1; // command done
+ break;
+ }
+ reg_cmd_info.drqPacketSize = byteCnt;
+ dpaddr = savedpaddr;
+ }
+ else
+ {
+ if ( ( reg_cmd_info.totalBytesXfer + byteCnt ) > reg_buffer_size )
+ {
+ reg_cmd_info.ec = 61;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ dir = -1; // command done
+ break;
+ }
+ }
+
+ // increment number of DRQ packets
+
+ reg_cmd_info.drqPackets ++ ;
+
+ // Data transfer loop...
+ // transfer the data and update the i/o buffer address
+ // and the number of bytes transfered.
+
+ wordCnt = ( byteCnt >> 1 ) + ( byteCnt & 0x0001 );
+ reg_cmd_info.totalBytesXfer += ( wordCnt << 1 );
+ dpseg = (unsigned int) ( dpaddr >> 4 );
+ dpoff = (unsigned int) ( dpaddr & 0x0000000fL );
+ if ( dir )
+ {
+ if ( reg_drq_block_call_back )
+ (* reg_drq_block_call_back) ( & reg_cmd_info );
+ pio_drq_block_out( CB_DATA, dpseg, dpoff, wordCnt );
+ }
+ else
+ {
+ pio_drq_block_in( CB_DATA, dpseg, dpoff, wordCnt );
+ if ( reg_drq_block_call_back )
+ (* reg_drq_block_call_back) ( & reg_cmd_info );
+ }
+ dpaddr = dpaddr + byteCnt;
+
+ ATA_DELAY(); // delay so device can get the status updated
+ }
+
+ // End of command...
+ // Wait for interrupt or poll for BSY=0,
+ // but don't do this if there was any error or if this
+ // was a commmand that did not transfer data.
+
+ if ( ( reg_cmd_info.ec == 0 ) && ( dir >= 0 ) )
+ {
+ ATAPI_DELAY( dev );
+ reg_wait_poll( 56, 57 );
+ }
+
+ // Final status check, only if no previous error.
+
+ if ( reg_cmd_info.ec == 0 )
+ {
+ // Final status check...
+ // If using interrupts get the status read by the interrupt
+ // handler, otherwise read the status register.
+
+ if ( int_use_intr_flag )
+ status = int_ata_status;
+ else
+ status = pio_inbyte( CB_STAT );
+ reason = pio_inbyte( CB_SC );
+ lowCyl = pio_inbyte( CB_CL );
+ highCyl = pio_inbyte( CB_CH );
+
+ // Final status check...
+ // check for any error.
+
+ if ( status & ( CB_STAT_BSY | CB_STAT_DRQ | CB_STAT_ERR ) )
+ {
+ reg_cmd_info.ec = 58;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+ }
+
+ // Final status check...
+ // Check for protocol failures...
+ // check: C/nD=1, IO=1.
+
+ if ( ( reason & ( CB_SC_P_TAG | CB_SC_P_REL ) )
+ || ( ! ( reason & CB_SC_P_IO ) )
+ || ( ! ( reason & CB_SC_P_CD ) )
+ )
+ reg_cmd_info.failbits |= FAILBIT8;
+
+ // Done...
+ // Read the output registers and trace the command.
+
+ if ( ! reg_cmd_info.totalBytesXfer )
+ reg_cmd_info.ct = TRC_TYPE_PND;
+ sub_trace_command();
+
+ // Final status check
+ // BMIDE Error=1?
+
+ if ( sub_readBusMstrStatus() & BM_SR_MASK_ERR )
+ {
+ reg_cmd_info.ec = 78; // yes
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ }
+
+ // For interrupt mode, remove interrupt handler.
+
+ int_restore_int_vect();
+
+ // mark end of PI cmd in low level trace
+
+ trc_llt( 0, 0, TRC_LLT_E_PI );
+
+ // reset reg_drq_block_call_back to NULL (0)
+
+ reg_drq_block_call_back = 0;
+
+ // All done. The return values of this function are described in
+ // ATAIO.H.
+
+ if ( reg_cmd_info.ec )
+ return 1;
+ return 0;
+}
+
+// end ataioreg.c
--- /dev/null
+//********************************************************************
+// ATA LOW LEVEL I/O DRIVER -- ATAIOSUB.C
+//
+// by Hale Landis (www.ata-atapi.com)
+//
+// There is no copyright and there are no restrictions on the use
+// of this ATA Low Level I/O Driver code. It is distributed to
+// help other programmers understand how the ATA device interface
+// works and it is distributed without any warranty. Use this
+// code at your own risk.
+//
+// This code is based on the ATA-2, ATA-3 and ATA-4 standards and
+// on interviews with various ATA controller and drive designers.
+//
+// This code has been run on many ATA (IDE) drives and
+// MFM/RLL controllers. This code may be a little
+// more picky about the status it sees at various times. A real
+// BIOS probably would not check the status as carefully.
+//
+// Compile with one of the Borland C or C++ compilers.
+//
+// This C source contains common subroutines to support
+// the PIO and DMA command execution and trace functions.
+//********************************************************************
+
+#include <dos.h>
+
+#include "ataio.h"
+
+
+//*************************************************************
+//
+// sub_zero_return_data() -- zero the return data areas.
+//
+//*************************************************************
+
+void sub_zero_return_data( void )
+
+{
+ int ndx;
+
+ for ( ndx = 0; ndx < sizeof( reg_cmd_info ); ndx ++ )
+ ( (unsigned char *) & reg_cmd_info )[ndx] = 0;
+}
+
+//*************************************************************
+//
+// sub_setup_command() -- setup the command parameters
+// in FR, SC, SN, CL, CH and DH.
+//
+//*************************************************************
+
+void sub_setup_command( void )
+
+{
+ unsigned char dev75;
+ unsigned char fr48[2];
+ unsigned char sc48[2];
+ unsigned char lba48[8];
+
+ // determine value of Device (Drive/Head) register bits 7 and 5
+
+ dev75 = 0; // normal value
+ if ( reg_incompat_flags & REG_INCOMPAT_DEVREG )
+ dev75 = CB_DH_OBSOLETE; // obsolete value
+
+ // WARNING: THIS CODE IS DESIGNED FOR A STUPID PROCESSOR
+ // LIKE INTEL X86 THAT IS Little-Endian, THAT IS, A
+ // PROCESSOR THAT STORES DATA IN MEMORY IN THE WRONG
+ // BYTE ORDER !!!
+
+ * (unsigned int *) fr48 = reg_cmd_info.fr1;
+ * (unsigned int *) sc48 = reg_cmd_info.sc1;
+ * (unsigned long *) ( lba48 + 4 ) = reg_cmd_info.lbaHigh1;
+ * (unsigned long *) ( lba48 + 0 ) = reg_cmd_info.lbaLow1;
+
+ pio_outbyte( CB_DC, reg_cmd_info.dc1 );
+
+ if ( reg_cmd_info.lbaSize == LBA28 )
+ {
+ // in ATA LBA28 mode
+ reg_cmd_info.fr1 = fr48[0];
+ pio_outbyte( CB_FR, fr48[0] );
+ reg_cmd_info.sc1 = sc48[0];
+ pio_outbyte( CB_SC, sc48[0] );
+ reg_cmd_info.sn1 = lba48[0];
+ pio_outbyte( CB_SN, lba48[0] );
+ reg_cmd_info.cl1 = lba48[1];
+ pio_outbyte( CB_CL, lba48[1] );
+ reg_cmd_info.ch1 = lba48[2];
+ pio_outbyte( CB_CH, lba48[2] );
+ reg_cmd_info.dh1 = ( reg_cmd_info.dh1 & 0xf0 ) | ( lba48[3] & 0x0f );
+ pio_outbyte( CB_DH, reg_cmd_info.dh1 | dev75 );
+ }
+ else
+ if ( reg_cmd_info.lbaSize == LBA48 )
+ {
+ // in ATA LBA48 mode
+ pio_outbyte( CB_FR, fr48[1] );
+ pio_outbyte( CB_SC, sc48[1] );
+ pio_outbyte( CB_SN, lba48[3] );
+ pio_outbyte( CB_CL, lba48[4] );
+ pio_outbyte( CB_CH, lba48[5] );
+ reg_cmd_info.fr1 = fr48[0];
+ pio_outbyte( CB_FR, fr48[0] );
+ reg_cmd_info.sc1 = sc48[0];
+ pio_outbyte( CB_SC, sc48[0] );
+ reg_cmd_info.sn1 = lba48[0];
+ pio_outbyte( CB_SN, lba48[0] );
+ reg_cmd_info.cl1 = lba48[1];
+ pio_outbyte( CB_CL, lba48[1] );
+ reg_cmd_info.ch1 = lba48[2];
+ pio_outbyte( CB_CH, lba48[2] );
+ pio_outbyte( CB_DH, reg_cmd_info.dh1 | dev75 );
+ }
+ else
+ {
+ // in ATA CHS or ATAPI LBA32 mode
+ pio_outbyte( CB_FR, reg_cmd_info.fr1 );
+ pio_outbyte( CB_SC, reg_cmd_info.sc1 );
+ pio_outbyte( CB_SN, reg_cmd_info.sn1 );
+ pio_outbyte( CB_CL, reg_cmd_info.cl1 );
+ pio_outbyte( CB_CH, reg_cmd_info.ch1 );
+ pio_outbyte( CB_DH, reg_cmd_info.dh1 | dev75 );
+ }
+}
+
+//*************************************************************
+//
+// sub_trace_command() -- trace the end of a command.
+//
+//*************************************************************
+
+void sub_trace_command( void )
+
+{
+ unsigned long lba;
+ unsigned char sc48[2];
+ unsigned char lba48[8];
+
+ reg_cmd_info.st2 = pio_inbyte( CB_STAT );
+ reg_cmd_info.as2 = pio_inbyte( CB_ASTAT );
+ reg_cmd_info.er2 = pio_inbyte( CB_ERR );
+ if ( reg_cmd_info.lbaSize == LBA48 )
+ {
+ // read back ATA LBA48...
+ sc48[0] = pio_inbyte( CB_SC );
+ lba48[0] = pio_inbyte( CB_SN );
+ lba48[1] = pio_inbyte( CB_CL );
+ lba48[2] = pio_inbyte( CB_CH );
+ pio_outbyte( CB_DC, CB_DC_HOB );
+ sc48[1] = pio_inbyte( CB_SC );
+ lba48[3] = pio_inbyte( CB_SN );
+ reg_cmd_info.sn2 = lba48[3];
+ lba48[4] = pio_inbyte( CB_CL );
+ reg_cmd_info.cl2 = lba48[4];
+ lba48[5] = pio_inbyte( CB_CH );
+ reg_cmd_info.ch2 = lba48[5];
+ lba48[6] = 0;
+ lba48[7] = 0;
+ reg_cmd_info.sc2 = * (unsigned int *) sc48;
+ reg_cmd_info.lbaHigh2 = * (unsigned long *) ( lba48 + 4 );
+ reg_cmd_info.lbaLow2 = * (unsigned long *) ( lba48 + 0 );
+ reg_cmd_info.dh2 = pio_inbyte( CB_DH );
+ }
+ else
+ {
+ // read back ATA CHS, ATA LBA28 or ATAPI LBA32
+ reg_cmd_info.sc2 = pio_inbyte( CB_SC );
+ reg_cmd_info.sn2 = pio_inbyte( CB_SN );
+ reg_cmd_info.cl2 = pio_inbyte( CB_CL );
+ reg_cmd_info.ch2 = pio_inbyte( CB_CH );
+ reg_cmd_info.dh2 = pio_inbyte( CB_DH );
+ reg_cmd_info.lbaHigh2 = 0;
+ reg_cmd_info.lbaLow2 = 0;
+ if ( reg_cmd_info.lbaSize == LBA28 )
+ {
+ lba = reg_cmd_info.dh2 & 0x0f;
+ lba = lba << 8;
+ lba = lba | reg_cmd_info.ch2;
+ lba = lba << 8;
+ lba = lba | reg_cmd_info.cl2;
+ lba = lba << 8;
+ lba = lba | reg_cmd_info.sn2;
+ reg_cmd_info.lbaLow2 = lba;
+ }
+ }
+ trc_cht();
+}
+
+//*************************************************************
+//
+// sub_select() - function used to select a drive.
+//
+// Function to select a drive making sure that BSY=0 DRQ=0.
+//
+//**************************************************************
+
+int sub_select( int dev )
+
+{
+
+ unsigned char dev75;
+ unsigned char status;
+
+ // determine value of Device (Drive/Head) register bits 7 and 5
+
+ dev75 = 0; // normal value
+ if ( reg_incompat_flags & REG_INCOMPAT_DEVREG )
+ dev75 = CB_DH_OBSOLETE; // obsolete value
+
+ // PAY ATTENTION HERE
+ // The caller may want to issue a command to a device that doesn't
+ // exist (for example, Exec Dev Diag), so if we see this,
+ // just select that device, skip all status checking and return.
+ // We assume the caller knows what they are doing!
+
+ if ( reg_config_info[ dev ] < REG_CONFIG_TYPE_ATA )
+ {
+ // select the device and return
+
+ pio_outbyte( CB_DH, ( dev ? CB_DH_DEV1 : CB_DH_DEV0 ) | dev75 );
+ ATA_DELAY();
+ return 0;
+ }
+
+ // The rest of this is the normal ATA stuff for device selection
+ // and we don't expect the caller to be selecting a device that
+ // does not exist.
+ // We don't know which drive is currently selected but we should
+ // wait BSY=0 and DRQ=0. Normally both BSY=0 and DRQ=0
+ // unless something is very wrong!
+
+ trc_llt( 0, 0, TRC_LLT_PNBSY );
+ while ( 1 )
+ {
+ status = pio_inbyte( CB_STAT );
+ if ( ( status & ( CB_STAT_BSY | CB_STAT_DRQ ) ) == 0 )
+ break;
+ if ( tmr_chk_timeout() )
+ {
+ trc_llt( 0, 0, TRC_LLT_TOUT );
+ reg_cmd_info.to = 1;
+ reg_cmd_info.ec = 11;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ reg_cmd_info.st2 = status;
+ reg_cmd_info.as2 = pio_inbyte( CB_ASTAT );
+ reg_cmd_info.er2 = pio_inbyte( CB_ERR );
+ reg_cmd_info.sc2 = pio_inbyte( CB_SC );
+ reg_cmd_info.sn2 = pio_inbyte( CB_SN );
+ reg_cmd_info.cl2 = pio_inbyte( CB_CL );
+ reg_cmd_info.ch2 = pio_inbyte( CB_CH );
+ reg_cmd_info.dh2 = pio_inbyte( CB_DH );
+ return 1;
+ }
+ }
+
+ // Here we select the drive we really want to work with by
+ // setting the DEV bit in the Drive/Head register.
+
+ pio_outbyte( CB_DH, ( dev ? CB_DH_DEV1 : CB_DH_DEV0 ) | dev75 );
+ ATA_DELAY();
+
+ // Wait for the selected device to have BSY=0 and DRQ=0.
+ // Normally the drive should be in this state unless
+ // something is very wrong (or initial power up is still in
+ // progress).
+
+ trc_llt( 0, 0, TRC_LLT_PNBSY );
+ while ( 1 )
+ {
+ status = pio_inbyte( CB_STAT );
+ if ( ( status & ( CB_STAT_BSY | CB_STAT_DRQ ) ) == 0 )
+ break;
+ if ( tmr_chk_timeout() )
+ {
+ trc_llt( 0, 0, TRC_LLT_TOUT );
+ reg_cmd_info.to = 1;
+ reg_cmd_info.ec = 12;
+ trc_llt( 0, reg_cmd_info.ec, TRC_LLT_ERROR );
+ reg_cmd_info.st2 = status;
+ reg_cmd_info.as2 = pio_inbyte( CB_ASTAT );
+ reg_cmd_info.er2 = pio_inbyte( CB_ERR );
+ reg_cmd_info.sc2 = pio_inbyte( CB_SC );
+ reg_cmd_info.sn2 = pio_inbyte( CB_SN );
+ reg_cmd_info.cl2 = pio_inbyte( CB_CL );
+ reg_cmd_info.ch2 = pio_inbyte( CB_CH );
+ reg_cmd_info.dh2 = pio_inbyte( CB_DH );
+ return 1;
+ }
+ }
+
+ // All done. The return values of this function are described in
+ // ATAIO.H.
+
+ if ( reg_cmd_info.ec )
+ return 1;
+ return 0;
+}
+
+//***********************************************************
+//
+// functions used to read/write the BMIDE registers
+//
+//***********************************************************
+
+unsigned char sub_readBusMstrCmd( void )
+
+{
+ unsigned char x;
+
+ if ( pio_bmide_base_addr < 0x0100 )
+ return 0;
+ x = inportb(pio_bmide_base_addr + BM_COMMAND_REG );
+ trc_llt( 0, x, TRC_LLT_R_BM_CR );
+ return x;
+}
+
+
+unsigned char sub_readBusMstrStatus( void )
+
+{
+ unsigned char x;
+
+ if ( pio_bmide_base_addr < 0x0100 )
+ return 0;
+ x = inportb( pio_bmide_base_addr + BM_STATUS_REG );
+ trc_llt( 0, x, TRC_LLT_R_BM_SR );
+ return x;
+}
+
+
+void sub_writeBusMstrCmd( unsigned char x )
+
+{
+
+ if ( pio_bmide_base_addr < 0x0100 )
+ return;
+ trc_llt( 0, x, TRC_LLT_W_BM_CR );
+ outportb( pio_bmide_base_addr + BM_COMMAND_REG, x );
+}
+
+
+void sub_writeBusMstrStatus( unsigned char x )
+
+{
+
+ if ( pio_bmide_base_addr < 0x0100 )
+ return;
+ trc_llt( 0, x, TRC_LLT_W_BM_SR );
+ outportb( pio_bmide_base_addr + BM_STATUS_REG, x );
+}
+
+// end ataiosub.c
--- /dev/null
+//********************************************************************
+// ATA LOW LEVEL I/O DRIVER -- ATAIOTMR.C
+//
+// by Hale Landis (www.ata-atapi.com)
+//
+// There is no copyright and there are no restrictions on the use
+// of this ATA Low Level I/O Driver code. It is distributed to
+// help other programmers understand how the ATA device interface
+// works and it is distributed without any warranty. Use this
+// code at your own risk.
+//
+// This code is based on the ATA-2, ATA-3 and ATA-4 standards and
+// on interviews with various ATA controller and drive designers.
+//
+// This code has been run on many ATA (IDE) drives and
+// MFM/RLL controllers. This code may be a little
+// more picky about the status it sees at various times. A real
+// BIOS probably would not check the status as carefully.
+//
+// Compile with one of the Borland C or C++ compilers.
+//
+// This C source file contains functions to access the BIOS
+// Time of Day information and to set and check the command
+// time out period.
+//********************************************************************
+
+#include <dos.h>
+
+#include "ataio.h"
+
+//**************************************************************
+
+long tmr_time_out = 20L; // max command execution time in seconds
+
+long tmr_cmd_start_time; // command start time - see the
+ // tmr_set_timeout() and
+ // tmr_chk_timeout() functions.
+
+long tmr_1s_count; // number of I/O port reads required
+ // for a 1s delay
+long tmr_1ms_count; // number of I/O port reads required
+ // for a 1ms delay
+long tmr_1us_count; // number of I/O port reads required
+ // for a 1us delay
+long tmr_500ns_count; // number of I/O port reads required
+ // for a 500ns delay
+
+//**************************************************************
+//
+// tmr_read_bios_timer() - function to read the BIOS timer
+//
+//**************************************************************
+
+long tmr_read_bios_timer_old( void )
+
+{
+ long curTime;
+
+ // Pointer to the low order word
+ // of the BIOS time of day counter at
+ // location 40:6C in the BIOS data area.
+ static volatile long far * todPtr = (long *)MK_FP( 0x40, 0x6c );
+
+ // loop so we get a valid value without
+ // turning interrupts off and on again
+ do
+ {
+ curTime = * todPtr;
+ } while ( curTime != * todPtr );
+ return curTime;
+}
+
+unsigned long long timer_getbiostimer();
+long tmr_read_bios_timer( void )
+{
+ return timer_getbiostimer();
+}
+
+//**************************************************************
+//
+// tmr_set_timeout() - get the command start time
+//
+//**************************************************************
+
+void tmr_set_timeout( void )
+
+{
+
+ // get the command start time
+ tmr_cmd_start_time = tmr_read_bios_timer();
+}
+
+//**************************************************************
+//
+// tmr_chk_timeout() - check for command timeout.
+//
+// Gives non-zero return if command has timed out.
+//
+//**************************************************************
+
+int tmr_chk_timeout( void )
+
+{
+ long curTime;
+
+ // get current time
+ curTime = tmr_read_bios_timer();
+
+ // if we have passed midnight, restart
+ if ( curTime < tmr_cmd_start_time )
+ {
+ tmr_cmd_start_time = curTime;
+ return 0;
+ }
+
+ // timed out yet ?
+ if ( curTime >= ( tmr_cmd_start_time + ( tmr_time_out * 18L ) ) )
+ return 1; // yes
+
+ // no timeout yet
+ return 0;
+}
+
+//**************************************************************
+//
+// tmr_get_delay_counts - compute the number calls to
+// tmr_waste_time() required for 1s, 1ms, 1us and 500ns delays.
+//
+//**************************************************************
+
+// our 'waste time' function (do some 32-bit multiply/divide)
+
+static long tmr_waste_time( long p );
+
+static long tmr_waste_time( long p )
+
+{
+ volatile long lc = 100;
+ for(int i = 0; i < 100; i++){
+ volatile long k = ( lc * lc ) / ( ( p * p ) + 1 );
+ }
+
+ return ( lc * lc ) / ( ( p * p ) + 1 );
+}
+
+// get the delay counts
+
+void tmr_get_delay_counts( void )
+
+{
+ long count;
+ long curTime, startTime, endTime;
+ int loop;
+ int retry;
+
+ // do only once
+ if ( tmr_1s_count )
+ return;
+
+ // outside loop to handle crossing midnight
+ count = 0;
+ retry = 1;
+ while ( retry )
+ {
+ // wait until the timer ticks
+ startTime = tmr_read_bios_timer();
+ while ( 1 )
+ {
+ curTime = tmr_read_bios_timer();
+ if ( curTime != startTime )
+ break;
+ }
+ // waste time for 1 second
+ endTime = curTime + 18L;
+ while ( 1 )
+ {
+ for ( loop = 0; loop < 100; loop ++ )
+ tmr_waste_time( 7 );
+ count += 100 ;
+ // check timer
+ curTime = tmr_read_bios_timer();
+ // pass midnight?
+ if ( curTime < startTime )
+ {
+ count = 0; // yes, zero count
+ break; // do again
+ }
+ // one second yet?
+ if ( curTime >= endTime )
+ {
+ retry = 0; // yes, we have a count
+ break; // done
+ }
+ }
+ }
+
+ // save the 1s count
+ tmr_1s_count = count;
+ // divide by 1000 and save 1ms count
+ tmr_1ms_count = count = count / 1000L;
+ // divide by 1000 and save 1us count
+ tmr_1us_count = count = count / 1000L;
+ // divide by 2 and save 500ns count
+ tmr_500ns_count = count / 2;
+
+ // make sure 1us count is at least 2
+ if ( tmr_1us_count < 2L )
+ tmr_1us_count = 2L;
+ // make sure 500ns count is at least 1
+ if ( tmr_500ns_count < 1L )
+ tmr_500ns_count = 1L;
+}
+
+//**************************************************************
+//
+// tmr_delay_1ms - delay approximately 'count' milliseconds
+//
+//**************************************************************
+
+void tmr_delay_1ms( long count )
+
+{
+ long loopcnt = tmr_1ms_count * count;
+
+ while ( loopcnt > 0 )
+ {
+ tmr_waste_time( 7 );
+ loopcnt -- ;
+ }
+}
+
+//**************************************************************
+//
+// tmr_delay_1us - delay approximately 'count' microseconds
+//
+//**************************************************************
+
+void tmr_delay_1us( long count )
+
+{
+ long loopcnt = tmr_1us_count * count;
+
+ while ( loopcnt > 0 )
+ {
+ tmr_waste_time( 7 );
+ loopcnt -- ;
+ }
+}
+
+//**************************************************************
+//
+// tmr_ata_delay - delay approximately 500 nanoseconds
+//
+//**************************************************************
+
+void tmr_delay_ata( void )
+
+{
+ long loopcnt = tmr_500ns_count;
+
+ while ( loopcnt > 0 )
+ {
+ tmr_waste_time( 7 );
+ loopcnt -- ;
+ }
+}
+
+//**************************************************************
+//
+// tmr_atapi_delay() - delay for ~80ms so that poorly designed
+// atapi device have time to updated their
+// status.
+//
+//**************************************************************
+
+void tmr_delay_atapi( int dev )
+
+{
+
+ if ( reg_config_info[dev] == REG_CONFIG_TYPE_ATA )
+ return;
+ if ( ! reg_atapi_delay_flag )
+ return;
+ trc_llt( 0, 0, TRC_LLT_DELAY1 );
+ tmr_delay_1ms( 80L );
+}
+
+//**************************************************************
+//
+// tmr_xfer_delay() - random delay until the bios timer ticks
+// (from 0 to 55ms).
+//
+//**************************************************************
+
+void tmr_delay_xfer( void )
+
+{
+ long lw;
+
+ trc_llt( 0, 0, TRC_LLT_DELAY2 );
+ lw = tmr_read_bios_timer();
+ while ( lw == tmr_read_bios_timer() )
+ /* do nothing */ ;
+}
+
+// end ataiotmr.c
--- /dev/null
+//********************************************************************
+// ATA LOW LEVEL I/O DRIVER -- ATAIOTRC.C
+//
+// by Hale Landis (www.ata-atapi.com)
+//
+// There is no copyright and there are no restrictions on the use
+// of this ATA Low Level I/O Driver code. It is distributed to
+// help other programmers understand how the ATA device interface
+// works and it is distributed without any warranty. Use this
+// code at your own risk.
+//
+// This code is based on the ATA-2, ATA-3 and ATA-4 standards and
+// on interviews with various ATA controller and drive designers.
+//
+// This code has been run on many ATA (IDE) drives and
+// MFM/RLL controllers. This code may be a little
+// more picky about the status it sees at various times. A real
+// BIOS probably would not check the status as carefully.
+//
+// Compile with one of the Borland C or C++ compilers.
+//
+// This C source contains the low level I/O trace functions.
+//********************************************************************
+
+#include <stdio.h>
+#include <string.h>
+#include <dos.h>
+
+#include "ataio.h"
+
+//**************************************************************
+
+// trace dump buffer returned by trc_err_dump2()
+// trc_cht_dump2() and trc_llt_dump2()
+
+static char trcDmpBuf[200];
+
+// buffer used to assemble print lines
+
+static char prtBuf[64];
+
+//**************************************************************
+
+// function to return command type (protocol)
+
+static char * typeNames[] =
+ {
+ //123456789012 (max 12 chars)
+ "NONE", // TRC_TYPE_NONE
+ "ATA DmaIn", // TRC_TYPE_ADMAI
+ "ATA DmaOut", // TRC_TYPE_ADMAO
+ "ATA ND", // TRC_TYPE_AND
+ "ATA PDI", // TRC_TYPE_APDI
+ "ATA PDO", // TRC_TYPE_APDO
+ "ATA SR", // TRC_TYPE_ASR
+ "ATAPI DmaIn", // TRC_TYPE_PDMAI
+ "ATAPI DmaOut", // TRC_TYPE_PDMAO
+ "ATAPI ND", // TRC_TYPE_PND
+ "ATAPI PDI", // TRC_TYPE_PPDI
+ "ATAPI PDO", // TRC_TYPE_PPDO
+ "????"
+ } ;
+
+char * trc_get_type_name( char ct )
+
+{
+
+ return typeNames[ ct ];
+}
+
+//**************************************************************
+
+// table used to initialize cmd code ndx table
+// this is used for fast lookup of cmd names
+// and can be used to implement other arrays
+// of information per cmd code.
+
+// number of commands in lookup tables
+// #define TRC_NUM_CMDS 52 // see ATAIO.H
+
+static unsigned char cmdCodeLst[TRC_NUM_CMDS] =
+ {
+ 0x00, // 00 - entry for unknown cmd codes
+ 0x03, // 01
+ 0x08, // 02
+ 0x10, // 03
+ 0x20, // 04
+ 0x24, // 05
+ 0x25, // 06
+ 0x29, // 08
+ 0x30, // 09
+ 0x34, // 10
+ 0x35, // 11
+ 0x38, // 12
+ 0x39, // 13
+ 0x3C, // 14
+ 0x3D, // 15
+ 0x40, // 16
+ 0x42, // 17
+ 0x50, // 18
+ 0x70, // 19
+ 0x87, // 20
+ 0x90, // 21
+ 0x91, // 22
+ 0x94, // 23
+ 0x95, // 24
+ 0x96, // 25
+ 0x97, // 26
+ 0x98, // 27
+ 0x99, // 28
+ 0xA0, // 29
+ 0xA1, // 30
+ 0xb0, // 31
+ 0xC0, // 32
+ 0xC4, // 33
+ 0xC5, // 34
+ 0xC6, // 35
+ 0xC8, // 36
+ 0xCA, // 37
+ 0xCD, // 38
+ 0xCE, // 39
+ 0xE0, // 40
+ 0xE1, // 41
+ 0xE2, // 42
+ 0xE3, // 43
+ 0xE4, // 44
+ 0xE5, // 45
+ 0xE6, // 46
+ 0xE7, // 47
+ 0xE8, // 48
+ 0xEA, // 49
+ 0xEC, // 50
+ 0xEF // 51
+ } ;
+
+// command name lookup table
+
+static char * cmdNames[TRC_NUM_CMDS] =
+ {
+ "? Cmd Name ?", // 0x00 00 - unknown cmd codes
+ "CFA REQUEST EXT ERR CODE" , // 0x03 01
+ "DEVICE RESET" , // 0x08 02
+ "RECALIBRATE" , // 0x10 03
+ "READ SECTORS" , // 0x20 04
+ "READ SECTORS EXT" , // 0x24 05
+ "READ DMA EXT" , // 0x25 06
+ "READ MULTIPLE EXT" , // 0x29 08
+ "WRITE SECTORS" , // 0x30 09
+ "WRITE SECTORS EXT" , // 0x34 10
+ "WRITE DMA EXT" , // 0x35 11
+ "CFA WRITE SECTORS WO ERASE" , // 0x38 12
+ "WRITE MULTIPLE EXT" , // 0x39 13
+ "WRITE VERIFY" , // 0x3C 14
+ "WRITE DMA FUA EXT" , // 0x3D 15
+ "READ VERIFY SECTORS" , // 0x40 16
+ "READ VERIFY SECTORS EXT" , // 0x42 17
+ "FORMAT TRACK" , // 0x50 18
+ "SEEK" , // 0x70 19
+ "CFA TRANSLATE SECTOR" , // 0x87 20
+ "EXECUTE DEVICE DIAGNOSTIC" , // 0x90 21
+ "INITIALIZE DEVICE PARAMETERS" , // 0x91 22
+ "STANDBY IMMEDIATE" , // 0x94 23
+ "IDLE IMMEDIATE" , // 0x95 24
+ "STANDBY" , // 0x96 25
+ "IDLE" , // 0x97 26
+ "CHECK POWER MODE" , // 0x98 27
+ "SLEEP" , // 0x99 28
+ "PACKET" , // 0xA0 29
+ "IDENTIFY PACKET DEVICE" , // 0xA1 30
+ "SMART", // 0xb0 31
+ "CFA ERASE SECTORS" , // 0xC0 32
+ "READ MULTIPLE" , // 0xC4 33
+ "WRITE MULTIPLE" , // 0xC5 34
+ "SET MULTIPLE MODE" , // 0xC6 35
+ "READ DMA" , // 0xC8 36
+ "WRITE DMA" , // 0xCA 37
+ "CFA WRITE MULTIPLE WO ERASE" , // 0xCD 38
+ "WRITE MULTIPLE FUA EXT" , // 0xCE 39
+ "STANDBY IMMEDIATE" , // 0xE0 40
+ "IDLE IMMEDIATE" , // 0xE1 41
+ "STANDBY" , // 0xE2 42
+ "IDLE" , // 0xE3 43
+ "READ BUFFER" , // 0xE4 44
+ "CHECK POWER MODE" , // 0xE5 45
+ "SLEEP" , // 0xE6 46
+ "FLUSH CACHE" , // 0xE7 47
+ "WRITE BUFFER" , // 0xE8 48
+ "FLUSH CACHE EXT" , // 0xEA 49
+ "IDENTIFY DEVICE" , // 0xEC 50
+ "SET FEATURES" , // 0xEF 51
+ } ;
+
+// cmd code to cmd ndx table -
+// see function init_cmd_ndx_tbl() and macro TRC_CC2NDX()
+
+char trc_CmdCodeNdx[256];
+
+// function to initialize trc_CmdCodeNdx[]
+
+static void init_cmd_ndx_tbl( void );
+
+static void init_cmd_ndx_tbl( void )
+
+{
+ int ndx;
+
+ for ( ndx = 0; ndx < sizeof( cmdCodeLst ); ndx ++ )
+ trc_CmdCodeNdx[cmdCodeLst[ndx]] = ndx;
+ // note: unknown cmd codes will have an ndx of 0.
+}
+
+// function to return the cmd name for a cmd code.
+
+char * trc_get_cmd_name( unsigned int cc )
+
+{
+
+ if ( trc_CmdCodeNdx[CMD_READ_SECTORS] == 0 ) // 1st call initialization
+ init_cmd_ndx_tbl();
+ if ( cc == CMD_SRST ) // soft reset
+ return "SOFT RESET";
+ return cmdNames[trc_CmdCodeNdx[cc]]; // code->ndx->name
+}
+
+//**************************************************************
+
+// ATA status names lookup table and lookup function
+
+static struct
+{
+ unsigned char bitPos;
+ char * bitName;
+} ataStatusNames[] =
+ {
+ 0x80 , "BSY " ,
+ 0x40 , "DRDY " ,
+ 0x20 , "DF " ,
+ 0x10 , "DSC " ,
+ 0x08 , "DRQ " ,
+ 0x04 , "CORR " ,
+ 0x02 , "IDX " ,
+ 0x01 , "ERR "
+ } ;
+
+static char ataStatusNameBuf[48];
+
+char * trc_get_st_bit_name( unsigned char st )
+
+{
+ int ndx;
+
+ if ( st & 0x80 )
+ st = 0x80;
+ * ataStatusNameBuf = 0;
+ for ( ndx = 0; ndx < 8; ndx ++ )
+ {
+ if ( st & ataStatusNames[ndx].bitPos )
+ strcat( ataStatusNameBuf, ataStatusNames[ndx].bitName );
+ }
+ return ataStatusNameBuf;
+}
+
+//**************************************************************
+
+// ATA error names lookup table and lookup function
+
+static struct
+{
+ unsigned char bitPos;
+ char * bitName;
+} ataErrorNames[] =
+ {
+ 0x80 , "BBK:ICRC " ,
+ 0x40 , "UNC " ,
+ 0x20 , "MC " ,
+ 0x10 , "IDNF " ,
+ 0x08 , "MCR " ,
+ 0x04 , "ABRT " ,
+ 0x02 , "TK0NF " ,
+ 0x01 , "AMNF "
+ } ;
+
+static char ataErrorNameBuf[48];
+
+char * trc_get_er_bit_name( unsigned char er )
+
+{
+ int ndx;
+
+ * ataErrorNameBuf = 0;
+ for ( ndx = 0; ndx < 8; ndx ++ )
+ {
+ if ( er & ataErrorNames[ndx].bitPos )
+ strcat( ataErrorNameBuf, ataErrorNames[ndx].bitName );
+ }
+ return ataErrorNameBuf;
+}
+
+//**************************************************************
+
+// error name lookup table and lookup function
+
+static struct
+{
+ int errCode;
+ char * errName;
+} errNames[] =
+ {
+ 1 , "Soft Reset timed out polling for device 0 to set BSY=0" ,
+ 2 , "Soft Reset timed out polling device 1" ,
+ 3 , "Soft Reset timed out polling for device 1 to set BSY=0" ,
+
+ 11 , "Selected device is hung - reset required" ,
+ 12 , "Device selection timed out polling for BSY=0 DRQ=0" ,
+
+ 21 , "Non-Data command ended with bad status" ,
+ 22 , "Non-Data command timed out waiting for an interrupt" ,
+ 23 , "Non-Data command timed out polling for BSY=0" ,
+ 24 , "Exec Dev Diag command timed out polling device 1" ,
+
+ 31 , "PIO Data In command terminated by error status" ,
+ 32 , "Device should be ready to transfer data but DRQ=0" ,
+ 33 , "PIO Data In command ended with bad status" ,
+ 34 , "PIO Data In command timed out waiting for an interrupt" ,
+ 35 , "PIO Data In command timed out polling for BSY=0" ,
+
+ 41 , "PIO Data Out command terminated by error status" ,
+ 42 , "Device should be ready to transfer data but DRQ=0" ,
+ 43 , "PIO Data Out command ended with bad status" ,
+ 44 , "PIO Data Out command timed out waiting for an interrupt" ,
+ 45 , "PIO Data Out command timed out polling for BSY=0" ,
+ 46 , "Extra interrupt at start of a PIO Data Out command" ,
+ 47 , "PIO Data Out command timed out polling for BSY=0" ,
+
+ 51 , "Timeout waiting for BSY=0/DRQ=1 for cmd packet transfer" ,
+ 52 , "Bad status at command packet transfer time" ,
+ 53 , "Timeout waiting for interrupt for data packet transfer" ,
+ 54 , "Timeout polling for BSY=0/DRQ=1 for a data packet" ,
+ 55 , "Bad status at data packet transfer time" ,
+ 56 , "Timout waiting for final interrupt at end of command" ,
+ 57 , "Timeout polling for final BSY=0 at end of command" ,
+ 58 , "Bad status at end of command" ,
+ 59 , "Byte count for data packet is zero" ,
+
+ 61 , "Buffer overrun (host buffer too small)" ,
+
+ 70 , "DMA channel and/or interrupt not setup" ,
+ 71 , "End of command without complete data transfer" ,
+ 72 , "Timeout waiting for 1st transfer to complete" ,
+ 73 , "Timeout waiting for command to complete" ,
+ 74 , "Bad status at end of command" ,
+ 75 , "Timeout waiting for BSY=0/DRQ=1 for cmd packet transfer" ,
+ 76 , "Bad status at command packet transfer time" ,
+ 78 , "End of command with BMIDE Error=1" ,
+
+ 80 , "No tag available now" ,
+ 81 , "Timeout polling for SERV=1" ,
+
+ 0 , "(no error)" // end of table
+ } ;
+
+char * trc_get_err_name( int ec )
+
+{
+ int ndx = 0;
+
+ while ( 1 )
+ {
+ if ( ec == errNames[ndx].errCode )
+ return errNames[ndx].errName;
+ if ( ! errNames[ndx].errCode )
+ break;
+ ndx ++ ;
+ }
+ return "? unknown error code ?";
+}
+
+//**************************************************************
+
+static struct
+{
+ unsigned int pErrCode;
+ char * pErrName;
+} pErrNames[] =
+ {
+ FAILBIT0 , "slow setting BSY=1 or DRQ=1 after A0 cmd" ,
+ FAILBIT1 , "got interrupt before cmd packet xfer" ,
+ FAILBIT2 , "SC wrong at cmd packet xfer time" ,
+ FAILBIT3 , "byte count wrong at cmd packet xfer time" ,
+ FAILBIT4 , "SC (CD bit) wrong at data packet xfer time" ,
+ FAILBIT5 , "SC (IO bit) wrong at data packet xfer time" ,
+ FAILBIT6 , "byte count wrong at data packet xfer time" ,
+ FAILBIT7 , "byte count odd at data packet xfer time" ,
+ FAILBIT8 , "SC (CD and IO bits) wrong at end of cmd" ,
+ FAILBIT9 , "fail bit 9" ,
+ FAILBIT10 , "fail bit 10" ,
+ FAILBIT11 , "fail bit 11" ,
+ FAILBIT12 , "fail bit 12" ,
+ FAILBIT13 , "fail bit 13" ,
+ FAILBIT14 , "fail bit 14" ,
+ FAILBIT15 , "extra interrupts detected"
+ } ;
+
+//**************************************************************
+
+// command or reset error display data
+
+static int errDmpLine = 0;
+static int errDmpLine2 = 0;
+
+//**************************************************************
+
+// start the display of a command or reset error display
+
+void trc_err_dump1( void )
+
+{
+
+ errDmpLine = 1;
+ errDmpLine2 = 0;
+}
+
+//**************************************************************
+
+// return one line of a command or reset error display,
+// returns NULL at end
+
+char * trc_err_dump2( void )
+
+{
+
+ if ( reg_cmd_info.flg == TRC_FLAG_EMPTY )
+ return 0;
+ if ( errDmpLine == 1 )
+ {
+ errDmpLine = 2;
+ if ( reg_cmd_info.flg == TRC_FLAG_SRST )
+ sprintf( trcDmpBuf, "ATA Reset: SR = %s (%s)",
+ trc_get_cmd_name( CMD_SRST ),
+ trc_get_type_name( reg_cmd_info.ct ) );
+ else
+ if ( reg_cmd_info.flg == TRC_FLAG_ATAPI )
+ sprintf( trcDmpBuf, "PACKET Command: %02X = %s (%s)",
+ reg_cmd_info.cmd,
+ trc_get_cmd_name( reg_cmd_info.cmd ),
+ trc_get_type_name( reg_cmd_info.ct ) );
+ else
+ sprintf( trcDmpBuf, "ATA Command: %02X = %s (%s)",
+ reg_cmd_info.cmd,
+ trc_get_cmd_name( reg_cmd_info.cmd ),
+ trc_get_type_name( reg_cmd_info.ct ) );
+
+ return trcDmpBuf;
+ }
+ if ( errDmpLine == 2 )
+ {
+ errDmpLine = 3;
+ if ( reg_cmd_info.flg == TRC_FLAG_ATA )
+ {
+ if ( reg_cmd_info.lbaSize == LBA48 )
+ {
+ // LBA48 before and after
+ sprintf( trcDmpBuf, "LBA48 SC %ld %lXH, "
+ "before %lu.%lu %lX.%lXH, "
+ "after %lu.%lu %lX.%lXH",
+ reg_cmd_info.ns, reg_cmd_info.ns,
+ reg_cmd_info.lbaHigh1, reg_cmd_info.lbaLow1,
+ reg_cmd_info.lbaHigh1, reg_cmd_info.lbaLow1,
+ reg_cmd_info.lbaHigh2, reg_cmd_info.lbaLow2,
+ reg_cmd_info.lbaHigh2, reg_cmd_info.lbaLow2 );
+ }
+ else
+ if ( reg_cmd_info.lbaSize == LBA28 )
+ {
+ // LBA28 before and after
+ sprintf( trcDmpBuf, "LBA28 SC %ld %lXH, "
+ "before %lu %lXH, "
+ "after %lu %lXH",
+ reg_cmd_info.ns, reg_cmd_info.ns,
+ reg_cmd_info.lbaLow1, reg_cmd_info.lbaLow1,
+ reg_cmd_info.lbaLow2, reg_cmd_info.lbaLow2 );
+ }
+ else
+ {
+ // CHS before and after
+ unsigned int cyl1, head1, sect1;
+ unsigned int cyl2, head2, sect2;
+
+ cyl1 = (unsigned int) ( reg_cmd_info.ch1 << 8 ) | reg_cmd_info.cl1;
+ head1 = (unsigned int) reg_cmd_info.dh1 & 0x0f;
+ sect1 = (unsigned int) reg_cmd_info.sn1;
+ cyl2 = (unsigned int) ( reg_cmd_info.ch2 << 8 ) | reg_cmd_info.cl2;
+ head2 = (unsigned int) reg_cmd_info.dh2 & 0x0f;
+ sect2 = (unsigned int) reg_cmd_info.sn2;
+ sprintf( trcDmpBuf, "CHS SC %ld %lXH, "
+ "before %u.%u.%u %X.%X.%XH, "
+ "after %u.%u.%u %X.%X.%XH ",
+ reg_cmd_info.ns, reg_cmd_info.ns,
+ cyl1, head1, sect1, cyl1, head1, sect1,
+ cyl2, head2, sect2, cyl2, head2, sect2 );
+ }
+ return trcDmpBuf;
+ }
+ if ( reg_cmd_info.flg == TRC_FLAG_ATAPI )
+ {
+ if ( reg_atapi_cp_size == 12 )
+ {
+ sprintf( trcDmpBuf, "CDB %02X %02X %02X %02X "
+ "%02X %02X %02X %02X "
+ "%02X %02X %02X %02X ",
+ reg_atapi_cp_data[0], reg_atapi_cp_data[1],
+ reg_atapi_cp_data[2], reg_atapi_cp_data[3],
+ reg_atapi_cp_data[4], reg_atapi_cp_data[5],
+ reg_atapi_cp_data[6], reg_atapi_cp_data[7],
+ reg_atapi_cp_data[8], reg_atapi_cp_data[9],
+ reg_atapi_cp_data[10], reg_atapi_cp_data[11] );
+ }
+ else
+ {
+ sprintf( trcDmpBuf, "CDB %02X %02X %02X %02X "
+ "%02X %02X %02X %02X "
+ "%02X %02X %02X %02X "
+ "%02X %02X %02X %02X ",
+ reg_atapi_cp_data[0], reg_atapi_cp_data[1],
+ reg_atapi_cp_data[2], reg_atapi_cp_data[3],
+ reg_atapi_cp_data[4], reg_atapi_cp_data[5],
+ reg_atapi_cp_data[6], reg_atapi_cp_data[7],
+ reg_atapi_cp_data[8], reg_atapi_cp_data[9],
+ reg_atapi_cp_data[10], reg_atapi_cp_data[11],
+ reg_atapi_cp_data[12], reg_atapi_cp_data[13],
+ reg_atapi_cp_data[14], reg_atapi_cp_data[15] );
+ }
+ return trcDmpBuf;
+ }
+ }
+ if ( errDmpLine == 3 )
+ {
+ errDmpLine = 4;
+ sprintf( trcDmpBuf, "Driver ErrCode: %d %s ",
+ reg_cmd_info.ec, trc_get_err_name( reg_cmd_info.ec ) );
+ return trcDmpBuf;
+ }
+ if ( errDmpLine == 4 )
+ {
+ errDmpLine = 5;
+ if ( reg_cmd_info.to )
+ {
+ sprintf( trcDmpBuf, " "
+ "Driver timed out (see low level trace for details) !" );
+ return trcDmpBuf;
+ }
+ }
+ if ( errDmpLine == 5 )
+ {
+ errDmpLine = 6;
+ sprintf( trcDmpBuf, "Bytes transferred: %ld (%lXH); DRQ blocks: %ld (%lXH) ",
+ reg_cmd_info.totalBytesXfer, reg_cmd_info.totalBytesXfer,
+ reg_cmd_info.drqPackets, reg_cmd_info.drqPackets );
+ return trcDmpBuf;
+ }
+ if ( errDmpLine == 6 )
+ {
+ errDmpLine = 7;
+ sprintf( trcDmpBuf, "Device Status: %02X = %s ", reg_cmd_info.st2,
+ trc_get_st_bit_name( reg_cmd_info.st2 ) );
+ return trcDmpBuf;
+ }
+ if ( errDmpLine == 7 )
+ {
+ errDmpLine = 8;
+ sprintf( trcDmpBuf, "Device Error: %02X = %s ", reg_cmd_info.er2,
+ trc_get_er_bit_name( reg_cmd_info.er2 ) );
+ return trcDmpBuf;
+ }
+ if ( errDmpLine == 8 )
+ {
+ errDmpLine = 9;
+ sprintf( trcDmpBuf, "ATA Intf Regs: FR ER SC SN CL CH DH CM ST AS DC " );
+ return trcDmpBuf;
+ }
+ if ( errDmpLine == 9 )
+ {
+ errDmpLine = 10;
+ if ( reg_cmd_info.flg == TRC_FLAG_SRST )
+ sprintf( trcDmpBuf, " Cmd Params: "
+ // fr er sc sn cl ch dh cm st as dc
+ "-- -- -- -- -- -- -- -- -- -- 04 " );
+ else
+ sprintf( trcDmpBuf, " Cmd Params: "
+ // fr er sc sn cl ch dh cm st as dc
+ "%02X -- %02X %02X %02X %02X %02X %02X -- -- %02X ",
+ reg_cmd_info.fr1 & 0x00ff,
+ reg_cmd_info.sc1 & 0x00ff,
+ reg_cmd_info.sn1,
+ reg_cmd_info.cl1, reg_cmd_info.ch1, reg_cmd_info.dh1,
+ reg_cmd_info.cmd, reg_cmd_info.dc1 );
+ return trcDmpBuf;
+ }
+ if ( errDmpLine == 10 )
+ {
+ errDmpLine = 11;
+ sprintf( trcDmpBuf, " After Cmd: "
+ // fr er sc sn cl ch dh cm st as dc
+ "-- %02X %02X %02X %02X %02X %02X -- %02X %02X -- ",
+ reg_cmd_info.er2, reg_cmd_info.sc2 & 0x00ff,
+ reg_cmd_info.sn2, reg_cmd_info.cl2, reg_cmd_info.ch2,
+ reg_cmd_info.dh2, reg_cmd_info.st2, reg_cmd_info.as2 );
+ return trcDmpBuf;
+ }
+ if ( ( errDmpLine == 11 ) && reg_cmd_info.failbits )
+ {
+ errDmpLine = 12;
+ errDmpLine2 = 0;
+ sprintf( trcDmpBuf, " ATA/ATAPI protocol errors bits (%04XH):",
+ reg_cmd_info.failbits );
+ return trcDmpBuf;
+ }
+ if ( errDmpLine == 12 )
+ {
+ while ( ( errDmpLine2 < 16 )
+ &&
+ ( ! ( reg_cmd_info.failbits & pErrNames[errDmpLine2].pErrCode ) )
+ )
+ errDmpLine2 ++ ;
+ if ( errDmpLine2 < 16 )
+ {
+ sprintf( trcDmpBuf, " - %s", pErrNames[errDmpLine2].pErrName );
+ errDmpLine2 ++ ;
+ return trcDmpBuf;
+ }
+ }
+ return 0;
+}
+
+//**********************************************************
+
+// command types to trace, see TRC_TYPE_xxx in ataio.h and
+// see trc_cht_types() below.
+
+static unsigned int chtTypes = 0xffff; // default is trace all cmd types
+
+// command history trace buffer
+
+#define MAX_CHT 100
+
+static struct
+{
+ // entry type, entry flag, command code, etc
+ unsigned char flg; // see TRC_FLAG_xxx in ataio.h
+ unsigned char ct; // see TRC_TYPE_xxx in ataio.h
+ unsigned char cmd; // command code
+ long ns; // number of sectors (sector count)
+ int mc; // multiple count
+ unsigned int fr1; // feature (8 or 16 bits)
+ unsigned char dh1; // device head
+ // starting CHS/LBA
+ unsigned char lbaSize; // CHS/LBA addr mode
+ unsigned int cyl; // CHS cyl or ATAPI BCL
+ unsigned char head; // CHS head
+ unsigned char sect; // CHS sect
+ unsigned long lbaLow1; // LBA lower 32-bits
+ // ending status and driver error codes
+ unsigned char st2; // status reg
+ unsigned char er2; // error reg
+ unsigned char ec; // detailed error code
+ unsigned char to; // not zero if time out error
+ // ATAPI CDB size and CDB data
+ unsigned char cdbSize; // CDB size (12 or 16)
+ unsigned char cdbBuf[16]; // CDB data
+} chtBuf[MAX_CHT];
+
+static int chtCur = 0;
+static int chtDmpLine = 0;
+static int chtDmpNdx = 0;
+
+static char * chtTypeName[] =
+ { "?????",
+ "DR ", "DW ",
+ "ND ", "PDI ", "PDO ",
+ "RESET",
+ "DPR ", "DPW ",
+ "PN ", "PR ", "PW " } ;
+
+//**************************************************************
+
+// set the commands types that are traced,
+// see TRC_TYPE_xxx in ataio.h and chtTypes above.
+
+void trc_cht_types( int type )
+
+{
+
+ if ( type < 1 )
+ chtTypes = 0x0000; // trace nothing
+ else
+ if ( type > 15 )
+ chtTypes = 0xffff; // trace all
+ else
+ chtTypes |= 0x0001 << type; // selective
+}
+
+//**************************************************************
+
+// place an command or reset entry into
+// the command history trace buffer
+
+void trc_cht( void )
+
+{
+ int ndx;
+
+ if ( ! ( ( 0x0001 << reg_cmd_info.ct ) & chtTypes ) )
+ return;
+ // entry type, entry flag, command code, etc
+ chtBuf[chtCur].flg = reg_cmd_info.flg;
+ chtBuf[chtCur].ct = reg_cmd_info.ct ;
+ chtBuf[chtCur].cmd = reg_cmd_info.cmd;
+ chtBuf[chtCur].ns = reg_cmd_info.ns;
+ chtBuf[chtCur].mc = reg_cmd_info.mc;
+ chtBuf[chtCur].fr1 = reg_cmd_info.fr1;
+ chtBuf[chtCur].dh1 = reg_cmd_info.dh1;
+ // starting CHS/LBA
+ chtBuf[chtCur].lbaSize = reg_cmd_info.lbaSize;
+ chtBuf[chtCur].cyl = ( reg_cmd_info.ch1 << 8 ) | reg_cmd_info.cl1;
+ chtBuf[chtCur].head = reg_cmd_info.dh1 & 0x0f;
+ chtBuf[chtCur].sect = reg_cmd_info.sn1;
+ chtBuf[chtCur].lbaLow1 = reg_cmd_info.lbaLow1;
+ // ending status and driver error codes
+ chtBuf[chtCur].st2 = reg_cmd_info.st2;
+ chtBuf[chtCur].er2 = reg_cmd_info.er2;
+ chtBuf[chtCur].ec = reg_cmd_info.ec ;
+ chtBuf[chtCur].to = reg_cmd_info.to ;
+ // ATAPI CDB size and CDB data
+ chtBuf[chtCur].cdbSize = reg_atapi_cp_size;
+ for ( ndx = 0; ndx < reg_atapi_cp_size; ndx ++ )
+ chtBuf[chtCur].cdbBuf[ndx] = reg_atapi_cp_data[ndx];
+ // move to next entry
+ chtCur ++ ;
+ if ( chtCur >= MAX_CHT )
+ chtCur = 0;
+}
+
+//**************************************************************
+
+// clear the command history trace buffer
+
+void trc_cht_dump0( void )
+
+{
+
+ for ( chtCur = 0; chtCur < MAX_CHT; chtCur ++ )
+ chtBuf[chtCur].flg = TRC_FLAG_EMPTY;
+ chtCur = 0;
+}
+
+//**************************************************************
+
+// start a dump of the command history trace buffer
+
+void trc_cht_dump1( void )
+
+{
+
+ chtDmpLine = 1;
+ chtDmpNdx = chtCur + 1;
+ if ( chtDmpNdx >= MAX_CHT )
+ chtDmpNdx = 0;
+}
+
+//**************************************************************
+
+// return one line of the command history trace buffer,
+// returns NULL at end.
+//
+// lines are formated in the style of ATADEMO commands.
+// there are three ATADEMO commands per line (DEV, LBAx,
+// and the I/O command). The three values at the end of the
+// line (following the //) are the driver result error code,
+// driver timeout flag, status register and error register.
+
+static char esStr[24];
+static char atStr[24];
+static char saStr[24];
+static char mcStr[24];
+
+char * trc_cht_dump2( void )
+
+{
+
+ if ( chtDmpLine == 1 ) // 1st line is 1st heading line
+ {
+ strcpy( trcDmpBuf,
+ //0 1 2 3 4 5 6 7
+ //123456789012345678901234567890123456789012345678901234567890123456789012
+ //DEV n, LBAnn, ttttt xxH xxxxH nnnnn nnnnnnnnn nnn ; nn nn xxH xxH
+ "Dev n, LBAnn, Type- Cmd FR--- SC--- LBA--------- MC- ; EC TO ST- ER-" );
+ chtDmpLine = 2;
+ return trcDmpBuf;
+ }
+ if ( chtDmpLine == 2 ) // 2nd line is 2nd heading line
+ {
+ strcpy( trcDmpBuf,
+ //0 1 2 3 4 5 6 7
+ //123456789012345678901234567890123456789012345678901234567890123456789012
+ //DEV n, CHS, ttttt xxH xxxxH nnnnn ccccc hh sss nnn ; nn nn xxH xxH
+ "Dev n, CHS, Type- Cmd FR--- SC--- Cyl-- Hd Sec MC- ; EC TO ST- ER-" );
+ chtDmpLine = 3;
+ return trcDmpBuf;
+ }
+ // search for oldest entry
+ while ( 1 )
+ {
+ if ( chtDmpNdx == chtCur )
+ return 0;
+ if ( chtBuf[chtDmpNdx].flg != TRC_FLAG_EMPTY )
+ break;
+ chtDmpNdx ++ ;
+ if ( chtDmpNdx >= MAX_CHT )
+ chtDmpNdx = 0;
+ }
+ // return one trace table entry...
+ // first format the result data
+ sprintf( esStr, " ; %2d %2d %02XH %02XH",
+ chtBuf[chtDmpNdx].ec,
+ chtBuf[chtDmpNdx].to,
+ chtBuf[chtDmpNdx].st2,
+ chtBuf[chtDmpNdx].er2 );
+ if ( chtBuf[chtDmpNdx].flg == TRC_FLAG_SRST )
+ {
+ // TRC_TYPE_ASR -> DEV n, LBAnn, RESET ; nn nn xxH xxH
+
+ //0 1 2 3 4 5 6 7
+ //123456789012345678901234567890123456789012345678901234567890123456789012
+ //DEV n, LBAnn, RESET ; nn nn xxH xxH
+
+ sprintf( trcDmpBuf,
+ "DEV %d, LBA28, RESET ",
+ ( chtBuf[chtDmpNdx].dh1 & 0x10 ) ? 1 : 0 );
+ strcat( trcDmpBuf, esStr );
+ }
+ else
+ if ( chtBuf[chtDmpNdx].flg == TRC_FLAG_ATA )
+ {
+ // TRC_TYPE_ADMAI -> DEV n, LBAnn, DR xxH sc lba ; nn nn xxH xxH
+ // TRC_TYPE_ADMAO -> DEV n, LBAnn, DW xxH sc lba ; nn nn xxH xxH
+ // TRC_TYPE_AND -> DEV n, LBAnn, ND xxH xxH sc lba ; nn nn xxH xxH
+ // TRC_TYPE_APDI -> DEV n, LBAnn, PDI xxH xxH sc lba mc ; nn nn xxH xxH
+ // TRC_TYPE_APDO -> DEV n, LBAnn, PDO xxH xxH sc lba mc ; nn nn xxH xxH
+
+ // format the LBAxx/CHS and starting LBA/CHS
+ if ( chtBuf[chtDmpNdx].lbaSize == 48 )
+ {
+ strcpy( atStr, "LBA48," );
+ sprintf( saStr, " %12ld", chtBuf[chtDmpNdx].lbaLow1 );
+ }
+ else
+ if ( chtBuf[chtDmpNdx].lbaSize == 28 )
+ {
+ strcpy( atStr, "LBA28," );
+ sprintf( saStr, " %12ld", chtBuf[chtDmpNdx].lbaLow1 );
+ }
+ else
+ {
+ strcpy( atStr, "CHS, " );
+ sprintf( saStr, " %5u %2u %3u",
+ chtBuf[chtDmpNdx].cyl,
+ chtBuf[chtDmpNdx].head,
+ chtBuf[chtDmpNdx].sect );
+ }
+
+ // format the MC
+ if ( ( chtBuf[chtDmpNdx].cmd == CMD_READ_MULTIPLE )
+ || ( chtBuf[chtDmpNdx].cmd == CMD_READ_MULTIPLE_EXT )
+ || ( chtBuf[chtDmpNdx].cmd == CMD_WRITE_MULTIPLE )
+ || ( chtBuf[chtDmpNdx].cmd == CMD_WRITE_MULTIPLE_EXT )
+ || ( chtBuf[chtDmpNdx].cmd == CMD_WRITE_MULTIPLE_FUA_EXT )
+ || ( chtBuf[chtDmpNdx].cmd == CMD_CFA_WRITE_MULTIPLE_WO_ERASE )
+ )
+ sprintf( mcStr, " %3d", chtBuf[chtDmpNdx].mc );
+ else
+ strcpy( mcStr, " " );
+
+ //0 1 2 3 4 5 6 7
+ //123456789012345678901234567890123456789012345678901234567890123456789012
+ //DEV n, LBAnn, ttttt xxH xxxxH nnnnn nnnnnnnnn nnn ; nn nn xxH xxH
+ //DEV n, CHS, ttttt xxH xxxxH nnnnn ccccc hh sss nnn ; nn nn xxH xxH
+
+ sprintf( trcDmpBuf,
+ "DEV %d, %s %s %02XH %4XH %5u",
+ ( chtBuf[chtDmpNdx].dh1 & 0x10 ) ? 1 : 0,
+ atStr,
+ chtTypeName[chtBuf[chtDmpNdx].ct],
+ chtBuf[chtDmpNdx].cmd,
+ chtBuf[chtDmpNdx].fr1,
+ chtBuf[chtDmpNdx].ns );
+ strcat( trcDmpBuf, saStr );
+ strcat( trcDmpBuf, mcStr );
+ strcat( trcDmpBuf, esStr );
+ }
+ else
+ if ( chtBuf[chtDmpNdx].flg == TRC_FLAG_ATAPI )
+ {
+ // TRC_TYPE_PDMAI -> not used by ATACT
+ // TRC_TYPE_PDMAO -> not used by ATACT
+ // TRC_TYPE_PND -> DEV n, PN bcl cdb0 cdb1 ... cdbn ; nn nn xxH xxH
+ // TRC_TYPE_PPDI -> DEV n, PR bcl cdb0 cdb1 ... cdbn ; nn nn xxH xxH
+ // TRC_TYPE_PPDO -> DEV n, PW bcl cdb0 cdb1 ... cdbn ; nn nn xxH xxH
+
+ if ( chtBuf[chtDmpNdx].cdbSize == 12 )
+ {
+ //DEV n, t n x x x x x x x x x x x x ; nn nn xxH xxH
+ sprintf( trcDmpBuf,
+ "DEV %d, %3.3s %u %02XH %d %d %d %d %d %d %d %d %d %d %d",
+ ( chtBuf[chtDmpNdx].dh1 & 0x10 ) ? 1 : 0,
+ chtTypeName[chtBuf[chtDmpNdx].ct],
+ chtBuf[chtDmpNdx].cyl,
+ chtBuf[chtDmpNdx].cdbBuf[0], chtBuf[chtDmpNdx].cdbBuf[1],
+ chtBuf[chtDmpNdx].cdbBuf[2], chtBuf[chtDmpNdx].cdbBuf[3],
+ chtBuf[chtDmpNdx].cdbBuf[4], chtBuf[chtDmpNdx].cdbBuf[5],
+ chtBuf[chtDmpNdx].cdbBuf[6], chtBuf[chtDmpNdx].cdbBuf[7],
+ chtBuf[chtDmpNdx].cdbBuf[8], chtBuf[chtDmpNdx].cdbBuf[9],
+ chtBuf[chtDmpNdx].cdbBuf[10], chtBuf[chtDmpNdx].cdbBuf[11] );
+ strcat( trcDmpBuf, esStr );
+ }
+ else
+ {
+ //DEV n, tt n x x x x x x x x x x x x x x x x ; nn nn xxH xxH
+ sprintf( trcDmpBuf,
+ "DEV %d, %3.3s %u %02XH %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",
+ ( chtBuf[chtDmpNdx].dh1 & 0x10 ) ? 1 : 0,
+ chtTypeName[chtBuf[chtDmpNdx].ct],
+ chtBuf[chtDmpNdx].cyl,
+ chtBuf[chtDmpNdx].cdbBuf[0], chtBuf[chtDmpNdx].cdbBuf[1],
+ chtBuf[chtDmpNdx].cdbBuf[2], chtBuf[chtDmpNdx].cdbBuf[3],
+ chtBuf[chtDmpNdx].cdbBuf[4], chtBuf[chtDmpNdx].cdbBuf[5],
+ chtBuf[chtDmpNdx].cdbBuf[6], chtBuf[chtDmpNdx].cdbBuf[7],
+ chtBuf[chtDmpNdx].cdbBuf[8], chtBuf[chtDmpNdx].cdbBuf[9],
+ chtBuf[chtDmpNdx].cdbBuf[10], chtBuf[chtDmpNdx].cdbBuf[11],
+ chtBuf[chtDmpNdx].cdbBuf[12], chtBuf[chtDmpNdx].cdbBuf[13],
+ chtBuf[chtDmpNdx].cdbBuf[14], chtBuf[chtDmpNdx].cdbBuf[15] );
+ strcat( trcDmpBuf, esStr );
+ }
+ }
+ chtDmpNdx ++ ;
+ if ( chtDmpNdx >= MAX_CHT )
+ chtDmpNdx = 0;
+ return trcDmpBuf;
+}
+
+//**********************************************************
+
+// Low-level trace buffer
+
+#define MAX_LLT 500
+
+static struct
+{
+ unsigned char addr;
+ unsigned char data;
+ unsigned char type;
+ unsigned char rep;
+} lltBuf[MAX_LLT];
+
+static int lltCur = 0;
+static int lltDmpLine = 0;
+static int lltDmpNdx = 0;
+
+static struct
+{
+ unsigned char typeId; // trace entry type
+ char * typeNm; // trace entry name
+} type_nm[]
+ =
+ {
+ //0 1 2 3 4
+ //12345678901234567890123456789012345678901
+ //<rep> <opr> <--register---> <data - note>
+ TRC_LLT_INB , "INB " ,
+ TRC_LLT_OUTB , "OUTB " ,
+ TRC_LLT_INW , "INW " ,
+ TRC_LLT_OUTW , "OUTW " ,
+ TRC_LLT_INSB , "INSB " ,
+ TRC_LLT_OUTSB , "OUTSB " ,
+ TRC_LLT_INSW , "INSW " ,
+ TRC_LLT_OUTSW , "OUTSW " ,
+ TRC_LLT_INSD , "INSD " ,
+ TRC_LLT_OUTSD , "OUTSD " ,
+
+ TRC_LLT_S_CFG , "===== Start Dev Cnfg ",
+ TRC_LLT_S_RST , "===== Start Reset ",
+ TRC_LLT_S_ND , "===== Start ND cmd ",
+ TRC_LLT_S_PDI , "===== Start PDI cmd ",
+ TRC_LLT_S_PDO , "===== Start PDO cmd ",
+ TRC_LLT_S_PI , "===== Start PI cmd ",
+ TRC_LLT_S_RWD , "===== Start R/W DMA ",
+ TRC_LLT_S_PID , "===== Start PI DMA ",
+ TRC_LLT_WINT , "..... Wait for INTRQ ",
+ TRC_LLT_INTRQ , "..... I N T R Q ",
+ TRC_LLT_PNBSY , "..... Poll for BSY=0 ",
+ TRC_LLT_PRDY , "..... Poll for DRDY=1 ",
+ TRC_LLT_TOUT , "..... T I M E O U T ",
+ TRC_LLT_ERROR , "..... E R R O R ",
+ TRC_LLT_DELAY1 , "..... DELAY ~80ms ",
+ TRC_LLT_DELAY2 , "..... DELAY ~0-55ms ",
+ TRC_LLT_E_CFG , "===== End Dev Cnfg ",
+ TRC_LLT_E_RST , "===== End Reset ",
+ TRC_LLT_E_ND , "===== End ND cmd ",
+ TRC_LLT_E_PDI , "===== End PDI cmd ",
+ TRC_LLT_E_PDO , "===== End PDO cmd ",
+ TRC_LLT_E_PI , "===== End PI cmd ",
+ TRC_LLT_E_RWD , "===== End R/W DMA ",
+ TRC_LLT_E_PID , "===== End PI DMA ",
+
+ TRC_LLT_DMA1 , "..... Enable DMA Ch ",
+ TRC_LLT_DMA2 , "..... Poll DMA TC bit ",
+ TRC_LLT_DMA3 , "..... Disable DMA Ch ",
+
+ TRC_LLT_DEBUG , "..... DEBUG ",
+ TRC_LLT_P_CMD , "..... ATAPI Cmd Code ",
+ TRC_LLT_R_BM_CR , "..... Rd BM Cmd Reg ",
+ TRC_LLT_R_BM_SR , "..... Rd BM Stat Reg ",
+ TRC_LLT_W_BM_CR , "..... Wr BM Cmd Reg ",
+ TRC_LLT_W_BM_SR , "..... Wr BM Stat Reg ",
+ 0 , "????? " ,
+ } ;
+
+static char * reg_nm[] // register names for trace
+ =
+ {
+ //0 1 2 3 4
+ //12345678901234567890123456789012345678901
+ //<rep> <opr> <--register---> <data - note>
+ "Data " , // 0 data reg
+ "Error/Feature " , // 1 error & feature
+ "SectorCount " , // 2 sector count
+ "SectorNumber " , // 3 sector number
+ "CylinderLow " , // 4 cylinder low
+ "CylinderHigh " , // 5 cylinder high
+ "DeviceHead " , // 6 device head
+ "Status/Cmd " , // 7 primary status & command
+ "AltStat/DevCtrl " , // 8 alternate status & device control
+ "DevAddr " , // 9 device address
+ } ;
+
+//*********************************************************
+
+// place an entry into the low level trace buffer
+
+void trc_llt( unsigned char addr,
+ unsigned char data,
+ unsigned char type )
+
+{
+
+ // if same as previous, incr rep count and return
+ if ( ( addr == lltBuf[lltCur].addr )
+ &&
+ ( data == lltBuf[lltCur].data )
+ &&
+ ( type == lltBuf[lltCur].type )
+ )
+ {
+ lltBuf[lltCur].rep = ( lltBuf[lltCur].rep >= 255L )
+ ? 255 : lltBuf[lltCur].rep + 1;
+ return;
+ }
+ // incr buffer index
+ lltCur ++ ;
+ if ( lltCur >= MAX_LLT )
+ lltCur = 0;
+ // start new entry
+ lltBuf[lltCur].addr = addr;
+ lltBuf[lltCur].data = data;
+ lltBuf[lltCur].type = type;
+ lltBuf[lltCur].rep = 1;
+}
+
+//**************************************************************
+
+// clear the low level trace buffer
+
+void trc_llt_dump0( void )
+
+{
+
+ for ( lltCur = 0; lltCur < MAX_LLT; lltCur ++ )
+ {
+ lltBuf[lltCur].type = TRC_LLT_NONE;
+ }
+ lltCur = 0;
+}
+
+//**************************************************************
+
+// start a dump of the low level trace buffer
+
+void trc_llt_dump1( void )
+
+{
+
+ // complete most recent trace entry
+ trc_llt( 0, 0, TRC_LLT_NONE );
+ // setup to return trace data
+ lltDmpLine = 0;
+ lltDmpNdx = lltCur + 1;
+ if ( lltDmpNdx >= MAX_LLT )
+ lltDmpNdx = 0;
+}
+
+//**************************************************************
+
+// return one line of the low level trace,
+// returns NULL at end.
+
+char * trc_llt_dump2( void )
+
+{
+ int ndx;
+
+ // increment output line number
+ lltDmpLine ++ ;
+
+ // return 1st line - the heading
+ if ( lltDmpLine == 1 ) // 1st line is heading
+ {
+ //0 1 2 3 4
+ //12345678901234567890123456789012345678901
+ strcpy( trcDmpBuf, "<rep> <opr> <--register---> <data - note>" );
+ return trcDmpBuf;
+ }
+
+ // find next non-zero trace entry
+ while ( 1 )
+ {
+ if ( lltDmpNdx == lltCur )
+ return 0;
+ if ( lltBuf[lltDmpNdx].type != 0 )
+ break;
+ lltDmpNdx ++ ;
+ if ( lltDmpNdx >= MAX_LLT )
+ lltDmpNdx = 0;
+ }
+
+ // put repeat count into buffer
+ if ( lltBuf[lltDmpNdx].rep == 255 )
+ strcpy( prtBuf, ">=255 " );
+ else
+ sprintf( prtBuf, "%5u ", lltBuf[lltDmpNdx].rep );
+ strcpy( trcDmpBuf, prtBuf );
+
+ // lookup trace entry type, put into buffer
+ ndx = 0;
+ while ( type_nm[ndx].typeId )
+ {
+ if ( lltBuf[lltDmpNdx].type == type_nm[ndx].typeId )
+ break;
+ ndx ++ ;
+ }
+ strcat( trcDmpBuf, type_nm[ ndx ].typeNm );
+
+ // register write/read or something else
+ if ( lltBuf[lltDmpNdx].type < TRC_LLT_S_CFG )
+ {
+ // reg name and value
+ strcat( trcDmpBuf, reg_nm[ lltBuf[lltDmpNdx].addr ] );
+ if ( lltBuf[lltDmpNdx].addr == CB_DATA )
+ strcpy( prtBuf, "-- " );
+ else
+ sprintf( prtBuf, "%02X ", lltBuf[lltDmpNdx].data );
+ strcat( trcDmpBuf, prtBuf );
+ // write to Dev Ctrl
+ if ( ( lltBuf[lltDmpNdx].addr == CB_DC )
+ && ( lltBuf[lltDmpNdx].type == TRC_LLT_OUTB )
+ )
+ {
+ if ( lltBuf[lltDmpNdx].data & CB_DC_SRST )
+ {
+ strcat( trcDmpBuf, "START: " );
+ strcat( trcDmpBuf, (char *)trc_get_cmd_name( CMD_SRST ) );
+ strcat( trcDmpBuf, ", " );
+ }
+ strcat( trcDmpBuf, ( lltBuf[lltDmpNdx].data & CB_DC_HOB )
+ ? "HOB=1" : "HOB=0" );
+ strcat( trcDmpBuf, ( lltBuf[lltDmpNdx].data & CB_DC_SRST )
+ ? " SRST=1" : " SRST=0" );
+ strcat( trcDmpBuf, ( lltBuf[lltDmpNdx].data & CB_DC_NIEN )
+ ? " nIEN=1" : " nIEN=0" );
+ }
+ // write to Command reg
+ if ( ( lltBuf[lltDmpNdx].addr == CB_CMD )
+ && ( lltBuf[lltDmpNdx].type == TRC_LLT_OUTB )
+ )
+ {
+ strcat( trcDmpBuf, "START: " );
+ strcat( trcDmpBuf, (char *)trc_get_cmd_name( lltBuf[lltDmpNdx].data ) );
+ }
+ // write to Device/Head
+ if ( ( lltBuf[lltDmpNdx].addr == CB_DH )
+ && ( lltBuf[lltDmpNdx].type == TRC_LLT_OUTB )
+ )
+ {
+ strcat( trcDmpBuf, ( lltBuf[lltDmpNdx].data & 0x10 )
+ ? "DEV=1" : "DEV=0" );
+ strcat( trcDmpBuf, ( lltBuf[lltDmpNdx].data & 0x40 )
+ ? " LBA=1" : " LBA=0" );
+ }
+ // read of Status or Alt Status
+ if ( ( ( lltBuf[lltDmpNdx].addr == CB_STAT )
+ || ( lltBuf[lltDmpNdx].addr == CB_ASTAT )
+ )
+ && ( lltBuf[lltDmpNdx].type == TRC_LLT_INB )
+ )
+ strcat( trcDmpBuf, (char *)trc_get_st_bit_name( lltBuf[lltDmpNdx].data ) );
+ // read of Error
+ if ( ( lltBuf[lltDmpNdx].addr == CB_ERR )
+ && ( lltBuf[lltDmpNdx].type == TRC_LLT_INB )
+ )
+ strcat( trcDmpBuf, (char *)trc_get_er_bit_name( lltBuf[lltDmpNdx].data ) );
+ }
+ else
+ // start/end/debug/etc entry or something else
+ if ( lltBuf[lltDmpNdx].type >= TRC_LLT_DEBUG )
+ {
+ sprintf( prtBuf, "%02X ", lltBuf[lltDmpNdx].data );
+ strcat( trcDmpBuf, prtBuf );
+ // write/read of BMIDE Command reg
+ if ( ( lltBuf[lltDmpNdx].type == TRC_LLT_R_BM_CR )
+ || ( lltBuf[lltDmpNdx].type == TRC_LLT_W_BM_CR )
+ )
+ {
+ strcat( trcDmpBuf, ( lltBuf[lltDmpNdx].data & 0x08 )
+ ? " Dir=1(MemWr)" : " Dir=0(MemRd)" );
+ strcat( trcDmpBuf, ( lltBuf[lltDmpNdx].data & 0x01 )
+ ? " Go=1(Start)" : " Go=0(Stop)" );
+ }
+ // write/read of BMIDE Status reg
+ if ( ( lltBuf[lltDmpNdx].type == TRC_LLT_R_BM_SR )
+ || ( lltBuf[lltDmpNdx].type == TRC_LLT_W_BM_SR )
+ )
+ {
+ strcat( trcDmpBuf, ( lltBuf[lltDmpNdx].data & 0x40 )
+ ? " D1=1" : " D1=0" );
+ strcat( trcDmpBuf, ( lltBuf[lltDmpNdx].data & 0x20 )
+ ? " D0=1" : " D0=0" );
+ strcat( trcDmpBuf, ( lltBuf[lltDmpNdx].data & 0x04 )
+ ? " Int=1" : " Int=0" );
+ strcat( trcDmpBuf, ( lltBuf[lltDmpNdx].data & 0x02 )
+ ? " Err=1" : " Err=0" );
+ strcat( trcDmpBuf, ( lltBuf[lltDmpNdx].data & 0x01 )
+ ? " Act=1" : " Act=0" );
+ }
+ }
+ else
+ // driver error
+ if ( lltBuf[lltDmpNdx].type == TRC_LLT_ERROR )
+ {
+ sprintf( prtBuf, "%02X ", lltBuf[lltDmpNdx].data );
+ strcat( trcDmpBuf, prtBuf );
+ strcat( trcDmpBuf, (char *)trc_get_err_name( lltBuf[lltDmpNdx].data ) );
+ }
+
+ // increment to next trace entry
+ lltDmpNdx ++ ;
+ if ( lltDmpNdx >= MAX_LLT )
+ lltDmpNdx = 0;
+
+ // return trace entry string
+ return trcDmpBuf;
+}
+
+// end ataiotrc.c
--- /dev/null
+#include "ataio.h"
+
+
+char inportb(unsigned int port){
+ // read a byte from a port
+ unsigned char ret;
+ asm volatile ("in al,dx":"=a"(ret):"d"(port));
+ return ret;
+}
+
+void outportb(unsigned int port,unsigned char value) {
+ // write a byte to a port
+ asm volatile ("out dx, al": :"d"(port),"a"(value));
+}
+
+WORD inportw(unsigned int port){
+ // read a byte from a port
+ WORD ret;
+ asm volatile ("in ax,dx":"=a"(ret):"d"(port));
+ return ret;
+}
+void outportw(unsigned int port,WORD value) {
+ // write a byte to a port
+ asm volatile ("out dx, ax": :"d"(port),"a"(value));
+}
+void enable(){
+ asm volatile("sti");
+}
+void disable(){
+ asm volatile("cli");
+}
+void setvect(int no, inthdlr_t func){
+ asm volatile("int 0x03");//not implemented
+}
+inthdlr_t getvect(int no){
+ asm volatile("int 0x03");//not implemented
+}
+
--- /dev/null
+LINK = ar rv
+CC = gcc -c -masm=intel -funsigned-char -traditional -Wno-write-strings -I../../include -I.
+OBJS = ATAIOINT.OBJ ATAIOPIO.OBJ ATAIOREG.OBJ ATAIOSUB.OBJ ATAIOTMR.OBJ ATAIOTRC.OBJ DOSFUNC.OBJ
+
+default:
+ make ataio.lib
+
+ataio.lib : $(OBJS) Makefile
+ $(LINK) ataio.lib $(OBJS)
+
+%.OBJ : %.C Makefile
+ $(CC) $*.C -o $*.OBJ
+
+clean :
+ -rm $(OBJS)
\ No newline at end of file
--- /dev/null
+#include "ataio.h"
+
+int main(){
+}
\ No newline at end of file
--- /dev/null
+#pragma once
+
+#define MK_FP(seg, addr) (char *)(((seg) << 4) | (addr))
+#define far
+#define interrupt
+char inportb(unsigned int port);
+void outportb(unsigned int port,unsigned char value);
+typedef unsigned short WORD;
+WORD inportw(unsigned int port);
+void outportw(unsigned int port,WORD value);
+
+typedef void interrupt far (*inthdlr_t)( void );
+void enable();
+void disable();
+void setvect(int no, inthdlr_t func);
+inthdlr_t getvect(int no);
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+void debugprint(const char *format,...);
+#ifdef __cplusplus
+};
+#endif /* __cplusplus */
\ No newline at end of file
--- /dev/null
+#include "bootpack.h"
+#include "filesystem.h"
+#include "typedefs.h"
+#include "screen.h"
+#include "timer.h"
+#include "desctable.h"
+#include "ata/ataio.h"
+#include "pic.h"
+#include "naskfunc.h"
+#include "MemMan.h"
+#include "debug.h"
+#include "ProcessMan.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+BOOTINFO *binfo = (BOOTINFO *)ADR_BOOTINFO;
+
+extern "C" int __cdecl _main(int p1){
+ Screen::Init(binfo);
+ init_gdtidt();
+
+ init_pit();
+ init_pic();
+
+ io_sti();
+
+ io_out8(PIC0_IMR, 0xfa); /* PIT\82ÆPIC1\82ð\8b\96\89Â(11111010) */
+ io_out8(PIC1_IMR, 0xff); /* \91S\95\94\96³\8e\8b(11111111) */
+
+ FileSystem::Init(binfo);
+
+ MemMan::Init();
+ ProcessMan::Init();
+ ThreadMan::Init();
+
+ BITMAPFILEHEADER fileheader;
+ BITMAPINFOHEADER infoheader;
+
+ /*
+ FileSystem::File *file = FileSystem::Inst().CreateFile(L"c:\\curtain_.bmp", 0, 0, 0, 0, 0, 0);
+ debugprint("file:%p\n", file);
+
+ file->Read((BYTE *)&fileheader, sizeof(fileheader));
+
+ file->Read((BYTE *)&infoheader, sizeof(infoheader));
+ //debugprint("%X %X %X\n", fileheader.bfType, fileheader.bfSize, fileheader.bfOffBits);
+
+ //for(;;){__asm ("hlt");}
+
+ file->Seek(fileheader.bfOffBits, FileSystem::File::SEEK_ORG::SET);
+
+ int stride = (infoheader.biWidth * 3 + 3) / 4 * 4;
+ BYTE *p = new BYTE [stride];
+ //debugprint("%d %d\n", infoheader.biHeight,infoheader.biWidth );
+ for(int i = 0; i < infoheader.biHeight; i++){
+ file->Read(p, stride);
+
+ for(int j = 0; j < infoheader.biWidth; j++){
+ //binfo->vram[((infoheader.biHeight - i - 1) * binfo->screenx + j) * 3 + 0] = p[j * 3 + 0];
+ //binfo->vram[((infoheader.biHeight - i - 1) * binfo->screenx + j) * 3 + 1] = p[j * 3 + 1];
+ //binfo->vram[((infoheader.biHeight - i - 1) * binfo->screenx + j) * 3 + 2] = p[j * 3 + 2];
+ }
+ }
+ delete [] p;
+ delete file;
+ */
+ ProcessMan::Inst().CreateProcess(L"c:\\ostestapp.exe");
+
+ int t = 0;
+ for(;;){
+ for(volatile int i = 0; i < 0x10000; i++){
+ volatile int x = i * i;
+ }
+ //Screen::Inst().printf("%d", t++);
+ __asm ("hlt");
+ }
+ return 0;
+}
--- /dev/null
+#pragma once
+#include "typedefs.h"
+#pragma pack(push, 1)
+struct BOOTINFO { /* 0x0ff0-0x0fff */
+ BYTE bootdrive; // \83u\81[\83g\82µ\82½\83h\83\89\83C\83u\82Ì\94Ô\8d\86
+ BYTE leds; /* \83u\81[\83g\8e\9e\82Ì\83L\81[\83{\81[\83h\82ÌLED\82Ì\8fó\91Ô */
+ BYTE vmode; /* \83r\83f\83I\83\82\81[\83h \89½\83r\83b\83g\83J\83\89\81[\82© */
+ BYTE reserve;
+ WORD screenx, screeny; /* \89æ\96Ê\89ð\91\9c\93x */
+ BYTE *vram;
+};
+#pragma pack(pop)
+#define ADR_BOOTINFO 0x00000ff0
+#define ADR_DISKIMG 0x00100000
+
--- /dev/null
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bootpack", "bootpack.vcxproj", "{A7009D9C-120D-51E5-3BEE-E001572DFC7E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fatmgr", "..\fatmgr\fatmgr.vcxproj", "{84F34813-8B38-4C65-9B9D-CA81FCD18521}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ntdll", "..\ntdll\ntdll.vcxproj", "{5C782ED0-884E-41DC-8E9D-BD3E13972D38}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A7009D9C-120D-51E5-3BEE-E001572DFC7E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A7009D9C-120D-51E5-3BEE-E001572DFC7E}.Debug|Win32.Build.0 = Debug|Win32
+ {A7009D9C-120D-51E5-3BEE-E001572DFC7E}.Release|Win32.ActiveCfg = Release|Win32
+ {A7009D9C-120D-51E5-3BEE-E001572DFC7E}.Release|Win32.Build.0 = Release|Win32
+ {84F34813-8B38-4C65-9B9D-CA81FCD18521}.Debug|Win32.ActiveCfg = Debug|Win32
+ {84F34813-8B38-4C65-9B9D-CA81FCD18521}.Debug|Win32.Build.0 = Debug|Win32
+ {84F34813-8B38-4C65-9B9D-CA81FCD18521}.Release|Win32.ActiveCfg = Release|Win32
+ {84F34813-8B38-4C65-9B9D-CA81FCD18521}.Release|Win32.Build.0 = Release|Win32
+ {5C782ED0-884E-41DC-8E9D-BD3E13972D38}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5C782ED0-884E-41DC-8E9D-BD3E13972D38}.Debug|Win32.Build.0 = Debug|Win32
+ {5C782ED0-884E-41DC-8E9D-BD3E13972D38}.Release|Win32.ActiveCfg = Release|Win32
+ {5C782ED0-884E-41DC-8E9D-BD3E13972D38}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <Keyword>MakeFileProj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Makefile</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <NMakeBuildCommandLine>cd .. && make</NMakeBuildCommandLine>
+ <NMakeCleanCommandLine>make clean</NMakeCleanCommandLine>
+ <NMakeReBuildCommandLine>make </NMakeReBuildCommandLine>
+ <NMakePreprocessorDefinitions>WIN32;_DEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ <NMakeIncludeSearchPath>../include;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <NMakeBuildCommandLine>make</NMakeBuildCommandLine>
+ <NMakeCleanCommandLine>make clean</NMakeCleanCommandLine>
+ <NMakeReBuildCommandLine>make all</NMakeReBuildCommandLine>
+ <NMakePreprocessorDefinitions>WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
+ <NMakeIncludeSearchPath>../include;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
+ </PropertyGroup>
+ <ItemDefinitionGroup>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="bootpack.cpp" />
+ <ClCompile Include="debug.cpp" />
+ <ClCompile Include="desctable.cpp" />
+ <ClCompile Include="filesystem.cpp" />
+ <ClCompile Include="MemMan.cpp" />
+ <ClCompile Include="pic.cpp" />
+ <ClCompile Include="ProcessMan.cpp" />
+ <ClCompile Include="screen.cpp" />
+ <ClCompile Include="startup.cpp" />
+ <ClCompile Include="ProcessMem.cpp" />
+ <ClCompile Include="ThreadMan.cpp" />
+ <ClCompile Include="timer.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="bootpack.h" />
+ <ClInclude Include="debug.h" />
+ <ClInclude Include="desctable.h" />
+ <ClInclude Include="fat32.h" />
+ <ClInclude Include="filesystem.h" />
+ <ClInclude Include="hankaku.h" />
+ <ClInclude Include="MemMan.h" />
+ <ClInclude Include="naskfunc.h" />
+ <ClInclude Include="pic.h" />
+ <ClInclude Include="ProcessMan.h" />
+ <ClInclude Include="screen.h" />
+ <ClInclude Include="ProcessMem.h" />
+ <ClInclude Include="ThreadMan.h" />
+ <ClInclude Include="timer.h" />
+ <ClInclude Include="typedefs.h" />
+ <ClInclude Include="Vector.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="asmhead.asm" />
+ <None Include="naskfunc.asm" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file
--- /dev/null
+/* \83R\83\93\83\\81[\83\8b\8aÖ\8cW */
+
+#include "bootpack.h"
+#include <stdio.h>
+#include <string.h>
+
+void console_task(struct SHEET *sheet, int memtotal)
+{
+ struct TASK *task = task_now();
+ struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR;
+ int i, *fat = (int *) memman_alloc_4k(memman, 4 * 2880);
+ struct CONSOLE cons;
+ struct FILEHANDLE fhandle[8];
+ char cmdline[30];
+ unsigned char *nihongo = (char *) *((int *) 0x0fe8);
+
+ cons.sht = sheet;
+ cons.cur_x = 8;
+ cons.cur_y = 28;
+ cons.cur_c = -1;
+ task->cons = &cons;
+ task->cmdline = cmdline;
+
+ if (cons.sht != 0) {
+ cons.timer = timer_alloc();
+ timer_init(cons.timer, &task->fifo, 1);
+ timer_settime(cons.timer, 50);
+ }
+ file_readfat(fat, (unsigned char *) (ADR_DISKIMG + 0x000200));
+ for (i = 0; i < 8; i++) {
+ fhandle[i].buf = 0; /* \96¢\8eg\97p\83}\81[\83N */
+ }
+ task->fhandle = fhandle;
+ task->fat = fat;
+ if (nihongo[4096] != 0xff) { /* \93ú\96{\8cê\83t\83H\83\93\83g\83t\83@\83C\83\8b\82ð\93Ç\82Ý\8d\9e\82ß\82½\82©\81H */
+ task->langmode = 1;
+ } else {
+ task->langmode = 0;
+ }
+ task->langbyte1 = 0;
+
+ /* \83v\83\8d\83\93\83v\83g\95\\8e¦ */
+ cons_putchar(&cons, '>', 1);
+
+ for (;;) {
+ io_cli();
+ if (fifo32_status(&task->fifo) == 0) {
+ task_sleep(task);
+ io_sti();
+ } else {
+ i = fifo32_get(&task->fifo);
+ io_sti();
+ if (i <= 1 && cons.sht != 0) { /* \83J\81[\83\\83\8b\97p\83^\83C\83} */
+ if (i != 0) {
+ timer_init(cons.timer, &task->fifo, 0); /* \8e\9f\82Í0\82ð */
+ if (cons.cur_c >= 0) {
+ cons.cur_c = COL8_FFFFFF;
+ }
+ } else {
+ timer_init(cons.timer, &task->fifo, 1); /* \8e\9f\82Í1\82ð */
+ if (cons.cur_c >= 0) {
+ cons.cur_c = COL8_000000;
+ }
+ }
+ timer_settime(cons.timer, 50);
+ }
+ if (i == 2) { /* \83J\81[\83\\83\8bON */
+ cons.cur_c = COL8_FFFFFF;
+ }
+ if (i == 3) { /* \83J\81[\83\\83\8bOFF */
+ if (cons.sht != 0) {
+ boxfill8(cons.sht->buf, cons.sht->bxsize, COL8_000000,
+ cons.cur_x, cons.cur_y, cons.cur_x + 7, cons.cur_y + 15);
+ }
+ cons.cur_c = -1;
+ }
+ if (i == 4) { /* \83R\83\93\83\\81[\83\8b\82Ì\81u\81~\81v\83{\83^\83\93\83N\83\8a\83b\83N */
+ cmd_exit(&cons, fat);
+ }
+ if (256 <= i && i <= 511) { /* \83L\81[\83{\81[\83h\83f\81[\83^\81i\83^\83X\83NA\8co\97R\81j */
+ if (i == 8 + 256) {
+ /* \83o\83b\83N\83X\83y\81[\83X */
+ if (cons.cur_x > 16) {
+ /* \83J\81[\83\\83\8b\82ð\83X\83y\81[\83X\82Å\8fÁ\82µ\82Ä\82©\82ç\81A\83J\81[\83\\83\8b\82ð1\82Â\96ß\82· */
+ cons_putchar(&cons, ' ', 0);
+ cons.cur_x -= 8;
+ }
+ } else if (i == 10 + 256) {
+ /* Enter */
+ /* \83J\81[\83\\83\8b\82ð\83X\83y\81[\83X\82Å\8fÁ\82µ\82Ä\82©\82ç\89ü\8ds\82·\82é */
+ cons_putchar(&cons, ' ', 0);
+ cmdline[cons.cur_x / 8 - 2] = 0;
+ cons_newline(&cons);
+ cons_runcmd(cmdline, &cons, fat, memtotal); /* \83R\83}\83\93\83h\8eÀ\8ds */
+ if (cons.sht == 0) {
+ cmd_exit(&cons, fat);
+ }
+ /* \83v\83\8d\83\93\83v\83g\95\\8e¦ */
+ cons_putchar(&cons, '>', 1);
+ } else {
+ /* \88ê\94Ê\95¶\8e\9a */
+ if (cons.cur_x < 240) {
+ /* \88ê\95¶\8e\9a\95\\8e¦\82µ\82Ä\82©\82ç\81A\83J\81[\83\\83\8b\82ð1\82Â\90i\82ß\82é */
+ cmdline[cons.cur_x / 8 - 2] = i - 256;
+ cons_putchar(&cons, i - 256, 1);
+ }
+ }
+ }
+ /* \83J\81[\83\\83\8b\8dÄ\95\\8e¦ */
+ if (cons.sht != 0) {
+ if (cons.cur_c >= 0) {
+ boxfill8(cons.sht->buf, cons.sht->bxsize, cons.cur_c,
+ cons.cur_x, cons.cur_y, cons.cur_x + 7, cons.cur_y + 15);
+ }
+ sheet_refresh(cons.sht, cons.cur_x, cons.cur_y, cons.cur_x + 8, cons.cur_y + 16);
+ }
+ }
+ }
+}
+
+void cons_putchar(struct CONSOLE *cons, int chr, char move)
+{
+ char s[2];
+ s[0] = chr;
+ s[1] = 0;
+ if (s[0] == 0x09) { /* \83^\83u */
+ for (;;) {
+ if (cons->sht != 0) {
+ putfonts8_asc_sht(cons->sht, cons->cur_x, cons->cur_y, COL8_FFFFFF, COL8_000000, " ", 1);
+ }
+ cons->cur_x += 8;
+ if (cons->cur_x == 8 + 240) {
+ cons_newline(cons);
+ }
+ if (((cons->cur_x - 8) & 0x1f) == 0) {
+ break; /* 32\82Å\8a\84\82è\90Ø\82ê\82½\82çbreak */
+ }
+ }
+ } else if (s[0] == 0x0a) { /* \89ü\8ds */
+ cons_newline(cons);
+ } else if (s[0] == 0x0d) { /* \95\9c\8bA */
+ /* \82Æ\82è\82 \82¦\82¸\82È\82É\82à\82µ\82È\82¢ */
+ } else { /* \95\81\92Ê\82Ì\95¶\8e\9a */
+ if (cons->sht != 0) {
+ putfonts8_asc_sht(cons->sht, cons->cur_x, cons->cur_y, COL8_FFFFFF, COL8_000000, s, 1);
+ }
+ if (move != 0) {
+ /* move\82ª0\82Ì\82Æ\82«\82Í\83J\81[\83\\83\8b\82ð\90i\82ß\82È\82¢ */
+ cons->cur_x += 8;
+ if (cons->cur_x == 8 + 240) {
+ cons_newline(cons);
+ }
+ }
+ }
+ return;
+}
+
+void cons_newline(struct CONSOLE *cons)
+{
+ int x, y;
+ struct SHEET *sheet = cons->sht;
+ struct TASK *task = task_now();
+ if (cons->cur_y < 28 + 112) {
+ cons->cur_y += 16; /* \8e\9f\82Ì\8ds\82Ö */
+ } else {
+ /* \83X\83N\83\8d\81[\83\8b */
+ if (sheet != 0) {
+ for (y = 28; y < 28 + 112; y++) {
+ for (x = 8; x < 8 + 240; x++) {
+ sheet->buf[x + y * sheet->bxsize] = sheet->buf[x + (y + 16) * sheet->bxsize];
+ }
+ }
+ for (y = 28 + 112; y < 28 + 128; y++) {
+ for (x = 8; x < 8 + 240; x++) {
+ sheet->buf[x + y * sheet->bxsize] = COL8_000000;
+ }
+ }
+ sheet_refresh(sheet, 8, 28, 8 + 240, 28 + 128);
+ }
+ }
+ cons->cur_x = 8;
+ if (task->langmode == 1 && task->langbyte1 != 0) {
+ cons->cur_x = 16;
+ }
+ return;
+}
+
+void cons_putstr0(struct CONSOLE *cons, char *s)
+{
+ for (; *s != 0; s++) {
+ cons_putchar(cons, *s, 1);
+ }
+ return;
+}
+
+void cons_putstr1(struct CONSOLE *cons, char *s, int l)
+{
+ int i;
+ for (i = 0; i < l; i++) {
+ cons_putchar(cons, s[i], 1);
+ }
+ return;
+}
+
+void cons_runcmd(char *cmdline, struct CONSOLE *cons, int *fat, int memtotal)
+{
+ if (strcmp(cmdline, "mem") == 0 && cons->sht != 0) {
+ cmd_mem(cons, memtotal);
+ } else if (strcmp(cmdline, "cls") == 0 && cons->sht != 0) {
+ cmd_cls(cons);
+ } else if (strcmp(cmdline, "dir") == 0 && cons->sht != 0) {
+ cmd_dir(cons);
+ } else if (strcmp(cmdline, "exit") == 0) {
+ cmd_exit(cons, fat);
+ } else if (strncmp(cmdline, "start ", 6) == 0) {
+ cmd_start(cons, cmdline, memtotal);
+ } else if (strncmp(cmdline, "ncst ", 5) == 0) {
+ cmd_ncst(cons, cmdline, memtotal);
+ } else if (strncmp(cmdline, "langmode ", 9) == 0) {
+ cmd_langmode(cons, cmdline);
+ } else if (cmdline[0] != 0) {
+ if (cmd_app(cons, fat, cmdline) == 0) {
+ /* \83R\83}\83\93\83h\82Å\82Í\82È\82\81A\83A\83v\83\8a\82Å\82à\82È\82\81A\82³\82ç\82É\8bó\8ds\82Å\82à\82È\82¢ */
+ cons_putstr0(cons, "Bad command.\n\n");
+ }
+ }
+ return;
+}
+
+void cmd_mem(struct CONSOLE *cons, int memtotal)
+{
+ struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR;
+ char s[60];
+ sprintf(s, "total %dMB\nfree %dKB\n\n", memtotal / (1024 * 1024), memman_total(memman) / 1024);
+ cons_putstr0(cons, s);
+ return;
+}
+
+void cmd_cls(struct CONSOLE *cons)
+{
+ int x, y;
+ struct SHEET *sheet = cons->sht;
+ for (y = 28; y < 28 + 128; y++) {
+ for (x = 8; x < 8 + 240; x++) {
+ sheet->buf[x + y * sheet->bxsize] = COL8_000000;
+ }
+ }
+ sheet_refresh(sheet, 8, 28, 8 + 240, 28 + 128);
+ cons->cur_y = 28;
+ return;
+}
+
+void cmd_dir(struct CONSOLE *cons)
+{
+ struct FILEINFO *finfo = (struct FILEINFO *) (ADR_DISKIMG + 0x002600);
+ int i, j;
+ char s[30];
+ for (i = 0; i < 224; i++) {
+ if (finfo[i].name[0] == 0x00) {
+ break;
+ }
+ if (finfo[i].name[0] != 0xe5) {
+ if ((finfo[i].type & 0x18) == 0) {
+ sprintf(s, "filename.ext %7d\n", finfo[i].size);
+ for (j = 0; j < 8; j++) {
+ s[j] = finfo[i].name[j];
+ }
+ s[ 9] = finfo[i].ext[0];
+ s[10] = finfo[i].ext[1];
+ s[11] = finfo[i].ext[2];
+ cons_putstr0(cons, s);
+ }
+ }
+ }
+ cons_newline(cons);
+ return;
+}
+
+void cmd_exit(struct CONSOLE *cons, int *fat)
+{
+ struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR;
+ struct TASK *task = task_now();
+ struct SHTCTL *shtctl = (struct SHTCTL *) *((int *) 0x0fe4);
+ struct FIFO32 *fifo = (struct FIFO32 *) *((int *) 0x0fec);
+ if (cons->sht != 0) {
+ timer_cancel(cons->timer);
+ }
+ memman_free_4k(memman, (int) fat, 4 * 2880);
+ io_cli();
+ if (cons->sht != 0) {
+ fifo32_put(fifo, cons->sht - shtctl->sheets0 + 768); /* 768\81`1023 */
+ } else {
+ fifo32_put(fifo, task - taskctl->tasks0 + 1024); /* 1024\81`2023 */
+ }
+ io_sti();
+ for (;;) {
+ task_sleep(task);
+ }
+}
+
+void cmd_start(struct CONSOLE *cons, char *cmdline, int memtotal)
+{
+ struct SHTCTL *shtctl = (struct SHTCTL *) *((int *) 0x0fe4);
+ struct SHEET *sht = open_console(shtctl, memtotal);
+ struct FIFO32 *fifo = &sht->task->fifo;
+ int i;
+ sheet_slide(sht, 32, 4);
+ sheet_updown(sht, shtctl->top);
+ /* \83R\83}\83\93\83h\83\89\83C\83\93\82É\93ü\97Í\82³\82ê\82½\95¶\8e\9a\97ñ\82ð\81A\88ê\95¶\8e\9a\82¸\82Â\90V\82µ\82¢\83R\83\93\83\\81[\83\8b\82É\93ü\97Í */
+ for (i = 6; cmdline[i] != 0; i++) {
+ fifo32_put(fifo, cmdline[i] + 256);
+ }
+ fifo32_put(fifo, 10 + 256); /* Enter */
+ cons_newline(cons);
+ return;
+}
+
+void cmd_ncst(struct CONSOLE *cons, char *cmdline, int memtotal)
+{
+ struct TASK *task = open_constask(0, memtotal);
+ struct FIFO32 *fifo = &task->fifo;
+ int i;
+ /* \83R\83}\83\93\83h\83\89\83C\83\93\82É\93ü\97Í\82³\82ê\82½\95¶\8e\9a\97ñ\82ð\81A\88ê\95¶\8e\9a\82¸\82Â\90V\82µ\82¢\83R\83\93\83\\81[\83\8b\82É\93ü\97Í */
+ for (i = 5; cmdline[i] != 0; i++) {
+ fifo32_put(fifo, cmdline[i] + 256);
+ }
+ fifo32_put(fifo, 10 + 256); /* Enter */
+ cons_newline(cons);
+ return;
+}
+
+void cmd_langmode(struct CONSOLE *cons, char *cmdline)
+{
+ struct TASK *task = task_now();
+ unsigned char mode = cmdline[9] - '0';
+ if (mode <= 2) {
+ task->langmode = mode;
+ } else {
+ cons_putstr0(cons, "mode number error.\n");
+ }
+ cons_newline(cons);
+ return;
+}
+
+int cmd_app(struct CONSOLE *cons, int *fat, char *cmdline)
+{
+ struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR;
+ struct FILEINFO *finfo;
+ char name[18], *p, *q;
+ struct TASK *task = task_now();
+ int i, segsiz, datsiz, esp, dathrb, appsiz;
+ struct SHTCTL *shtctl;
+ struct SHEET *sht;
+
+ /* \83R\83}\83\93\83h\83\89\83C\83\93\82©\82ç\83t\83@\83C\83\8b\96¼\82ð\90¶\90¬ */
+ for (i = 0; i < 13; i++) {
+ if (cmdline[i] <= ' ') {
+ break;
+ }
+ name[i] = cmdline[i];
+ }
+ name[i] = 0; /* \82Æ\82è\82 \82¦\82¸\83t\83@\83C\83\8b\96¼\82Ì\8cã\82ë\82ð0\82É\82·\82é */
+
+ /* \83t\83@\83C\83\8b\82ð\92T\82· */
+ finfo = file_search(name, (struct FILEINFO *) (ADR_DISKIMG + 0x002600), 224);
+ if (finfo == 0 && name[i - 1] != '.') {
+ /* \8c©\82Â\82©\82ç\82È\82©\82Á\82½\82Ì\82Å\8cã\82ë\82É".HRB"\82ð\82Â\82¯\82Ä\82à\82¤\88ê\93x\92T\82µ\82Ä\82Ý\82é */
+ name[i ] = '.';
+ name[i + 1] = 'H';
+ name[i + 2] = 'R';
+ name[i + 3] = 'B';
+ name[i + 4] = 0;
+ finfo = file_search(name, (struct FILEINFO *) (ADR_DISKIMG + 0x002600), 224);
+ }
+
+ if (finfo != 0) {
+ /* \83t\83@\83C\83\8b\82ª\8c©\82Â\82©\82Á\82½\8fê\8d\87 */
+ appsiz = finfo->size;
+ p = file_loadfile2(finfo->clustno, &appsiz, fat);
+ if (appsiz >= 36 && strncmp(p + 4, "Hari", 4) == 0 && *p == 0x00) {
+ segsiz = *((int *) (p + 0x0000));
+ esp = *((int *) (p + 0x000c));
+ datsiz = *((int *) (p + 0x0010));
+ dathrb = *((int *) (p + 0x0014));
+ q = (char *) memman_alloc_4k(memman, segsiz);
+ task->ds_base = (int) q;
+ set_segmdesc(task->ldt + 0, appsiz - 1, (int) p, AR_CODE32_ER + 0x60);
+ set_segmdesc(task->ldt + 1, segsiz - 1, (int) q, AR_DATA32_RW + 0x60);
+ for (i = 0; i < datsiz; i++) {
+ q[esp + i] = p[dathrb + i];
+ }
+ start_app(0x1b, 0 * 8 + 4, esp, 1 * 8 + 4, &(task->tss.esp0));
+ shtctl = (struct SHTCTL *) *((int *) 0x0fe4);
+ for (i = 0; i < MAX_SHEETS; i++) {
+ sht = &(shtctl->sheets0[i]);
+ if ((sht->flags & 0x11) == 0x11 && sht->task == task) {
+ /* \83A\83v\83\8a\82ª\8aJ\82«\82Á\82Ï\82È\82µ\82É\82µ\82½\89º\82¶\82«\82ð\94\8c© */
+ sheet_free(sht); /* \95Â\82¶\82é */
+ }
+ }
+ for (i = 0; i < 8; i++) { /* \83N\83\8d\81[\83Y\82µ\82Ä\82È\82¢\83t\83@\83C\83\8b\82ð\83N\83\8d\81[\83Y */
+ if (task->fhandle[i].buf != 0) {
+ memman_free_4k(memman, (int) task->fhandle[i].buf, task->fhandle[i].size);
+ task->fhandle[i].buf = 0;
+ }
+ }
+ timer_cancelall(&task->fifo);
+ memman_free_4k(memman, (int) q, segsiz);
+ task->langbyte1 = 0;
+ } else {
+ cons_putstr0(cons, ".hrb file format error.\n");
+ }
+ memman_free_4k(memman, (int) p, appsiz);
+ cons_newline(cons);
+ return 1;
+ }
+ /* \83t\83@\83C\83\8b\82ª\8c©\82Â\82©\82ç\82È\82©\82Á\82½\8fê\8d\87 */
+ return 0;
+}
+
+int *hrb_api(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int eax)
+{
+ struct TASK *task = task_now();
+ int ds_base = task->ds_base;
+ struct CONSOLE *cons = task->cons;
+ struct SHTCTL *shtctl = (struct SHTCTL *) *((int *) 0x0fe4);
+ struct SHEET *sht;
+ struct FIFO32 *sys_fifo = (struct FIFO32 *) *((int *) 0x0fec);
+ int *reg = &eax + 1; /* eax\82Ì\8e\9f\82Ì\94Ô\92n */
+ /* \95Û\91¶\82Ì\82½\82ß\82ÌPUSHAD\82ð\8b\88ø\82É\8f\91\82«\8a·\82¦\82é */
+ /* reg[0] : EDI, reg[1] : ESI, reg[2] : EBP, reg[3] : ESP */
+ /* reg[4] : EBX, reg[5] : EDX, reg[6] : ECX, reg[7] : EAX */
+ int i;
+ struct FILEINFO *finfo;
+ struct FILEHANDLE *fh;
+ struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR;
+
+ if (edx == 1) {
+ cons_putchar(cons, eax & 0xff, 1);
+ } else if (edx == 2) {
+ cons_putstr0(cons, (char *) ebx + ds_base);
+ } else if (edx == 3) {
+ cons_putstr1(cons, (char *) ebx + ds_base, ecx);
+ } else if (edx == 4) {
+ return &(task->tss.esp0);
+ } else if (edx == 5) {
+ sht = sheet_alloc(shtctl);
+ sht->task = task;
+ sht->flags |= 0x10;
+ sheet_setbuf(sht, (char *) ebx + ds_base, esi, edi, eax);
+ make_window8((char *) ebx + ds_base, esi, edi, (char *) ecx + ds_base, 0);
+ sheet_slide(sht, ((shtctl->xsize - esi) / 2) & ~3, (shtctl->ysize - edi) / 2);
+ sheet_updown(sht, shtctl->top); /* \8d¡\82Ì\83}\83E\83X\82Æ\93¯\82¶\8d\82\82³\82É\82È\82é\82æ\82¤\82É\8ew\92è\81F \83}\83E\83X\82Í\82±\82Ì\8fã\82É\82È\82é */
+ reg[7] = (int) sht;
+ } else if (edx == 6) {
+ sht = (struct SHEET *) (ebx & 0xfffffffe);
+ putfonts8_asc(sht->buf, sht->bxsize, esi, edi, eax, (char *) ebp + ds_base);
+ if ((ebx & 1) == 0) {
+ sheet_refresh(sht, esi, edi, esi + ecx * 8, edi + 16);
+ }
+ } else if (edx == 7) {
+ sht = (struct SHEET *) (ebx & 0xfffffffe);
+ boxfill8(sht->buf, sht->bxsize, ebp, eax, ecx, esi, edi);
+ if ((ebx & 1) == 0) {
+ sheet_refresh(sht, eax, ecx, esi + 1, edi + 1);
+ }
+ } else if (edx == 8) {
+ memman_init((struct MEMMAN *) (ebx + ds_base));
+ ecx &= 0xfffffff0; /* 16\83o\83C\83g\92P\88Ê\82É */
+ memman_free((struct MEMMAN *) (ebx + ds_base), eax, ecx);
+ } else if (edx == 9) {
+ ecx = (ecx + 0x0f) & 0xfffffff0; /* 16\83o\83C\83g\92P\88Ê\82É\90Ø\82è\8fã\82° */
+ reg[7] = memman_alloc((struct MEMMAN *) (ebx + ds_base), ecx);
+ } else if (edx == 10) {
+ ecx = (ecx + 0x0f) & 0xfffffff0; /* 16\83o\83C\83g\92P\88Ê\82É\90Ø\82è\8fã\82° */
+ memman_free((struct MEMMAN *) (ebx + ds_base), eax, ecx);
+ } else if (edx == 11) {
+ sht = (struct SHEET *) (ebx & 0xfffffffe);
+ sht->buf[sht->bxsize * edi + esi] = eax;
+ if ((ebx & 1) == 0) {
+ sheet_refresh(sht, esi, edi, esi + 1, edi + 1);
+ }
+ } else if (edx == 12) {
+ sht = (struct SHEET *) ebx;
+ sheet_refresh(sht, eax, ecx, esi, edi);
+ } else if (edx == 13) {
+ sht = (struct SHEET *) (ebx & 0xfffffffe);
+ hrb_api_linewin(sht, eax, ecx, esi, edi, ebp);
+ if ((ebx & 1) == 0) {
+ if (eax > esi) {
+ i = eax;
+ eax = esi;
+ esi = i;
+ }
+ if (ecx > edi) {
+ i = ecx;
+ ecx = edi;
+ edi = i;
+ }
+ sheet_refresh(sht, eax, ecx, esi + 1, edi + 1);
+ }
+ } else if (edx == 14) {
+ sheet_free((struct SHEET *) ebx);
+ } else if (edx == 15) {
+ for (;;) {
+ io_cli();
+ if (fifo32_status(&task->fifo) == 0) {
+ if (eax != 0) {
+ task_sleep(task); /* FIFO\82ª\8bó\82È\82Ì\82Å\90Q\82Ä\91Ò\82Â */
+ } else {
+ io_sti();
+ reg[7] = -1;
+ return 0;
+ }
+ }
+ i = fifo32_get(&task->fifo);
+ io_sti();
+ if (i <= 1 && cons->sht != 0) { /* \83J\81[\83\\83\8b\97p\83^\83C\83} */
+ /* \83A\83v\83\8a\8eÀ\8ds\92\86\82Í\83J\81[\83\\83\8b\82ª\8fo\82È\82¢\82Ì\82Å\81A\82¢\82Â\82à\8e\9f\82Í\95\\8e¦\97p\82Ì1\82ð\92\8d\95¶\82µ\82Ä\82¨\82 */
+ timer_init(cons->timer, &task->fifo, 1); /* \8e\9f\82Í1\82ð */
+ timer_settime(cons->timer, 50);
+ }
+ if (i == 2) { /* \83J\81[\83\\83\8bON */
+ cons->cur_c = COL8_FFFFFF;
+ }
+ if (i == 3) { /* \83J\81[\83\\83\8bOFF */
+ cons->cur_c = -1;
+ }
+ if (i == 4) { /* \83R\83\93\83\\81[\83\8b\82¾\82¯\82ð\95Â\82¶\82é */
+ timer_cancel(cons->timer);
+ io_cli();
+ fifo32_put(sys_fifo, cons->sht - shtctl->sheets0 + 2024); /* 2024\81`2279 */
+ cons->sht = 0;
+ io_sti();
+ }
+ if (i >= 256) { /* \83L\81[\83{\81[\83h\83f\81[\83^\81i\83^\83X\83NA\8co\97R\81j\82È\82Ç */
+ reg[7] = i - 256;
+ return 0;
+ }
+ }
+ } else if (edx == 16) {
+ reg[7] = (int) timer_alloc();
+ ((struct TIMER *) reg[7])->flags2 = 1; /* \8e©\93®\83L\83\83\83\93\83Z\83\8b\97L\8cø */
+ } else if (edx == 17) {
+ timer_init((struct TIMER *) ebx, &task->fifo, eax + 256);
+ } else if (edx == 18) {
+ timer_settime((struct TIMER *) ebx, eax);
+ } else if (edx == 19) {
+ timer_free((struct TIMER *) ebx);
+ } else if (edx == 20) {
+ if (eax == 0) {
+ i = io_in8(0x61);
+ io_out8(0x61, i & 0x0d);
+ } else {
+ i = 1193180000 / eax;
+ io_out8(0x43, 0xb6);
+ io_out8(0x42, i & 0xff);
+ io_out8(0x42, i >> 8);
+ i = io_in8(0x61);
+ io_out8(0x61, (i | 0x03) & 0x0f);
+ }
+ } else if (edx == 21) {
+ for (i = 0; i < 8; i++) {
+ if (task->fhandle[i].buf == 0) {
+ break;
+ }
+ }
+ fh = &task->fhandle[i];
+ reg[7] = 0;
+ if (i < 8) {
+ finfo = file_search((char *) ebx + ds_base,
+ (struct FILEINFO *) (ADR_DISKIMG + 0x002600), 224);
+ if (finfo != 0) {
+ reg[7] = (int) fh;
+ fh->size = finfo->size;
+ fh->pos = 0;
+ fh->buf = file_loadfile2(finfo->clustno, &fh->size, task->fat);
+ }
+ }
+ } else if (edx == 22) {
+ fh = (struct FILEHANDLE *) eax;
+ memman_free_4k(memman, (int) fh->buf, fh->size);
+ fh->buf = 0;
+ } else if (edx == 23) {
+ fh = (struct FILEHANDLE *) eax;
+ if (ecx == 0) {
+ fh->pos = ebx;
+ } else if (ecx == 1) {
+ fh->pos += ebx;
+ } else if (ecx == 2) {
+ fh->pos = fh->size + ebx;
+ }
+ if (fh->pos < 0) {
+ fh->pos = 0;
+ }
+ if (fh->pos > fh->size) {
+ fh->pos = fh->size;
+ }
+ } else if (edx == 24) {
+ fh = (struct FILEHANDLE *) eax;
+ if (ecx == 0) {
+ reg[7] = fh->size;
+ } else if (ecx == 1) {
+ reg[7] = fh->pos;
+ } else if (ecx == 2) {
+ reg[7] = fh->pos - fh->size;
+ }
+ } else if (edx == 25) {
+ fh = (struct FILEHANDLE *) eax;
+ for (i = 0; i < ecx; i++) {
+ if (fh->pos == fh->size) {
+ break;
+ }
+ *((char *) ebx + ds_base + i) = fh->buf[fh->pos];
+ fh->pos++;
+ }
+ reg[7] = i;
+ } else if (edx == 26) {
+ i = 0;
+ for (;;) {
+ *((char *) ebx + ds_base + i) = task->cmdline[i];
+ if (task->cmdline[i] == 0) {
+ break;
+ }
+ if (i >= ecx) {
+ break;
+ }
+ i++;
+ }
+ reg[7] = i;
+ } else if (edx == 27) {
+ reg[7] = task->langmode;
+ }
+ return 0;
+}
+
+int *inthandler0c(int *esp)
+{
+ struct TASK *task = task_now();
+ struct CONSOLE *cons = task->cons;
+ char s[30];
+ cons_putstr0(cons, "\nINT 0C :\n Stack Exception.\n");
+ sprintf(s, "EIP = %08X\n", esp[11]);
+ cons_putstr0(cons, s);
+ return &(task->tss.esp0); /* \88Ù\8fí\8fI\97¹\82³\82¹\82é */
+}
+
+int *inthandler0d(int *esp)
+{
+ struct TASK *task = task_now();
+ struct CONSOLE *cons = task->cons;
+ char s[30];
+ cons_putstr0(cons, "\nINT 0D :\n General Protected Exception.\n");
+ sprintf(s, "EIP = %08X\n", esp[11]);
+ cons_putstr0(cons, s);
+ return &(task->tss.esp0); /* \88Ù\8fí\8fI\97¹\82³\82¹\82é */
+}
+
+void hrb_api_linewin(struct SHEET *sht, int x0, int y0, int x1, int y1, int col)
+{
+ int i, x, y, len, dx, dy;
+
+ dx = x1 - x0;
+ dy = y1 - y0;
+ x = x0 << 10;
+ y = y0 << 10;
+ if (dx < 0) {
+ dx = - dx;
+ }
+ if (dy < 0) {
+ dy = - dy;
+ }
+ if (dx >= dy) {
+ len = dx + 1;
+ if (x0 > x1) {
+ dx = -1024;
+ } else {
+ dx = 1024;
+ }
+ if (y0 <= y1) {
+ dy = ((y1 - y0 + 1) << 10) / len;
+ } else {
+ dy = ((y1 - y0 - 1) << 10) / len;
+ }
+ } else {
+ len = dy + 1;
+ if (y0 > y1) {
+ dy = -1024;
+ } else {
+ dy = 1024;
+ }
+ if (x0 <= x1) {
+ dx = ((x1 - x0 + 1) << 10) / len;
+ } else {
+ dx = ((x1 - x0 - 1) << 10) / len;
+ }
+ }
+
+ for (i = 0; i < len; i++) {
+ sht->buf[(y >> 10) * sht->bxsize + (x >> 10)] = col;
+ x += dx;
+ y += dy;
+ }
+
+ return;
+}
--- /dev/null
+ 1 00000000 [FORMAT "WCOFF"]
+ 2 00000000 [INSTRSET "i486p"]
+ 3 00000000 [OPTIMIZE 1]
+ 4 00000000 [OPTION 1]
+ 5 00000000 [BITS 32]
+ 6 00000000 EXTERN _task_now
+ 7 00000000 EXTERN _memman_alloc_4k
+ 8 00000000 EXTERN _timer_alloc
+ 9 00000000 EXTERN _timer_init
+ 10 00000000 EXTERN _timer_settime
+ 11 00000000 EXTERN _file_readfat
+ 12 00000000 EXTERN _io_cli
+ 13 00000000 EXTERN _fifo32_status
+ 14 00000000 EXTERN _fifo32_get
+ 15 00000000 EXTERN _io_sti
+ 16 00000000 EXTERN _boxfill8
+ 17 00000000 EXTERN _sheet_refresh
+ 18 00000000 EXTERN _task_sleep
+ 19 00000000 EXTERN _putfonts8_asc_sht
+ 20 00000000 EXTERN _memman_total
+ 21 00000000 EXTERN _sprintf
+ 22 00000000 EXTERN _timer_cancel
+ 23 00000000 EXTERN _memman_free_4k
+ 24 00000000 EXTERN _fifo32_put
+ 25 00000000 EXTERN _taskctl
+ 26 00000000 EXTERN _open_console
+ 27 00000000 EXTERN _sheet_slide
+ 28 00000000 EXTERN _sheet_updown
+ 29 00000000 EXTERN _open_constask
+ 30 00000000 EXTERN _file_search
+ 31 00000000 EXTERN _file_loadfile2
+ 32 00000000 EXTERN _set_segmdesc
+ 33 00000000 EXTERN _start_app
+ 34 00000000 EXTERN _timer_cancelall
+ 35 00000000 EXTERN _sheet_free
+ 36 00000000 EXTERN _io_in8
+ 37 00000000 EXTERN _io_out8
+ 38 00000000 EXTERN _timer_free
+ 39 00000000 EXTERN _memman_free
+ 40 00000000 EXTERN _memman_alloc
+ 41 00000000 EXTERN _memman_init
+ 42 00000000 EXTERN _putfonts8_asc
+ 43 00000000 EXTERN _sheet_alloc
+ 44 00000000 EXTERN _sheet_setbuf
+ 45 00000000 EXTERN _make_window8
+ 46 00000000 [FILE "console.c"]
+ 47 [SECTION .text]
+ 48 00000000 GLOBAL _console_task
+ 49 00000000 _console_task:
+ 50 00000000 55 PUSH EBP
+ 51 00000001 89 E5 MOV EBP,ESP
+ 52 00000003 57 PUSH EDI
+ 53 00000004 56 PUSH ESI
+ 54 00000005 53 PUSH EBX
+ 55 00000006 81 EC 000000AC SUB ESP,172
+ 56 0000000C 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 57 0000000F E8 [00000000] CALL _task_now
+ 58 00000014 68 00002D00 PUSH 11520
+ 59 00000019 89 C7 MOV EDI,EAX
+ 60 0000001B 68 003C0000 PUSH 3932160
+ 61 00000020 E8 [00000000] CALL _memman_alloc_4k
+ 62 00000025 85 DB TEST EBX,EBX
+ 63 00000027 89 5D D4 MOV DWORD [-44+EBP],EBX
+ 64 0000002A 89 85 FFFFFF50 MOV DWORD [-176+EBP],EAX
+ 65 00000030 A1 00000FE8 MOV EAX,DWORD [4072]
+ 66 00000035 89 85 FFFFFF4C MOV DWORD [-180+EBP],EAX
+ 67 0000003B 8D 45 D4 LEA EAX,DWORD [-44+EBP]
+ 68 0000003E 89 87 000000A4 MOV DWORD [164+EDI],EAX
+ 69 00000044 8D 85 FFFFFF54 LEA EAX,DWORD [-172+EBP]
+ 70 0000004A 89 87 000000B8 MOV DWORD [184+EDI],EAX
+ 71 00000050 59 POP ECX
+ 72 00000051 C7 45 D8 00000008 MOV DWORD [-40+EBP],8
+ 73 00000058 C7 45 DC 0000001C MOV DWORD [-36+EBP],28
+ 74 0000005F C7 45 E0 FFFFFFFF MOV DWORD [-32+EBP],-1
+ 75 00000066 5E POP ESI
+ 76 00000067 74 21 JE L2
+ 77 00000069 E8 [00000000] CALL _timer_alloc
+ 78 0000006E 8D 57 10 LEA EDX,DWORD [16+EDI]
+ 79 00000071 6A 01 PUSH 1
+ 80 00000073 52 PUSH EDX
+ 81 00000074 89 45 E4 MOV DWORD [-28+EBP],EAX
+ 82 00000077 50 PUSH EAX
+ 83 00000078 E8 [00000000] CALL _timer_init
+ 84 0000007D 6A 32 PUSH 50
+ 85 0000007F FF 75 E4 PUSH DWORD [-28+EBP]
+ 86 00000082 E8 [00000000] CALL _timer_settime
+ 87 00000087 83 C4 14 ADD ESP,20
+ 88 0000008A L2:
+ 89 0000008A 68 00100200 PUSH 1049088
+ 90 0000008F BE 00000007 MOV ESI,7
+ 91 00000094 FF B5 FFFFFF50 PUSH DWORD [-176+EBP]
+ 92 0000009A E8 [00000000] CALL _file_readfat
+ 93 0000009F 58 POP EAX
+ 94 000000A0 5A POP EDX
+ 95 000000A1 31 C0 XOR EAX,EAX
+ 96 000000A3 L7:
+ 97 000000A3 C7 84 05 FFFFFF74 00000000 MOV DWORD [-140+EBP+EAX*1],0
+ 98 000000AE 83 C0 0C ADD EAX,12
+ 99 000000B1 4E DEC ESI
+ 100 000000B2 79 EF JNS L7
+ 101 000000B4 8B 8D FFFFFF50 MOV ECX,DWORD [-176+EBP]
+ 102 000000BA 8B 9D FFFFFF4C MOV EBX,DWORD [-180+EBP]
+ 103 000000C0 8D 85 FFFFFF74 LEA EAX,DWORD [-140+EBP]
+ 104 000000C6 89 8F 000000B4 MOV DWORD [180+EDI],ECX
+ 105 000000CC 89 87 000000B0 MOV DWORD [176+EDI],EAX
+ 106 000000D2 8D 45 D4 LEA EAX,DWORD [-44+EBP]
+ 107 000000D5 80 BB 00001000 FF CMP BYTE [4096+EBX],-1
+ 108 000000DC C6 87 000000BD 00 MOV BYTE [189+EDI],0
+ 109 000000E3 0F 95 87 000000BC SETNE BYTE [188+EDI]
+ 110 000000EA 6A 01 PUSH 1
+ 111 000000EC 6A 3E PUSH 62
+ 112 000000EE 50 PUSH EAX
+ 113 000000EF E8 0000023B CALL _cons_putchar
+ 114 000000F4 83 C4 0C ADD ESP,12
+ 115 000000F7 L10:
+ 116 000000F7 8D 5F 10 LEA EBX,DWORD [16+EDI]
+ 117 000000FA E8 [00000000] CALL _io_cli
+ 118 000000FF 53 PUSH EBX
+ 119 00000100 E8 [00000000] CALL _fifo32_status
+ 120 00000105 5E POP ESI
+ 121 00000106 85 C0 TEST EAX,EAX
+ 122 00000108 0F 84 00000210 JE L38
+ 123 0000010E 53 PUSH EBX
+ 124 0000010F E8 [00000000] CALL _fifo32_get
+ 125 00000114 89 C6 MOV ESI,EAX
+ 126 00000116 E8 [00000000] CALL _io_sti
+ 127 0000011B 59 POP ECX
+ 128 0000011C 83 FE 01 CMP ESI,1
+ 129 0000011F 0F 8E 000001A2 JLE L39
+ 130 00000125 L15:
+ 131 00000125 83 FE 02 CMP ESI,2
+ 132 00000128 0F 84 0000018D JE L40
+ 133 0000012E L20:
+ 134 0000012E 83 FE 03 CMP ESI,3
+ 135 00000131 0F 84 00000152 JE L41
+ 136 00000137 L21:
+ 137 00000137 83 FE 04 CMP ESI,4
+ 138 0000013A 0F 84 00000133 JE L42
+ 139 00000140 L23:
+ 140 00000140 8D 86 FFFFFF00 LEA EAX,DWORD [-256+ESI]
+ 141 00000146 89 85 FFFFFF48 MOV DWORD [-184+EBP],EAX
+ 142 0000014C 3D 000000FF CMP EAX,255
+ 143 00000151 77 4E JA L24
+ 144 00000153 81 FE 00000108 CMP ESI,264
+ 145 00000159 0F 84 000000F4 JE L43
+ 146 0000015F 81 FE 0000010A CMP ESI,266
+ 147 00000165 0F 84 00000089 JE L44
+ 148 0000016B 8B 4D D8 MOV ECX,DWORD [-40+EBP]
+ 149 0000016E 81 F9 000000EF CMP ECX,239
+ 150 00000174 7F 2B JG L24
+ 151 00000176 89 C8 MOV EAX,ECX
+ 152 00000178 BA 00000008 MOV EDX,8
+ 153 0000017D 89 D3 MOV EBX,EDX
+ 154 0000017F 6A 01 PUSH 1
+ 155 00000181 99 CDQ
+ 156 00000182 F7 FB IDIV EBX
+ 157 00000184 89 C1 MOV ECX,EAX
+ 158 00000186 89 F0 MOV EAX,ESI
+ 159 00000188 88 84 0D FFFFFF52 MOV BYTE [-174+EBP+ECX*1],AL
+ 160 0000018F 8D 45 D4 LEA EAX,DWORD [-44+EBP]
+ 161 00000192 FF B5 FFFFFF48 PUSH DWORD [-184+EBP]
+ 162 00000198 50 PUSH EAX
+ 163 00000199 L36:
+ 164 00000199 E8 00000191 CALL _cons_putchar
+ 165 0000019E L37:
+ 166 0000019E 83 C4 0C ADD ESP,12
+ 167 000001A1 L24:
+ 168 000001A1 8B 5D D4 MOV EBX,DWORD [-44+EBP]
+ 169 000001A4 85 DB TEST EBX,EBX
+ 170 000001A6 0F 84 FFFFFF4B JE L10
+ 171 000001AC 83 7D E0 00 CMP DWORD [-32+EBP],0
+ 172 000001B0 78 22 JS L33
+ 173 000001B2 8B 4D DC MOV ECX,DWORD [-36+EBP]
+ 174 000001B5 8B 55 D8 MOV EDX,DWORD [-40+EBP]
+ 175 000001B8 8D 41 0F LEA EAX,DWORD [15+ECX]
+ 176 000001BB 50 PUSH EAX
+ 177 000001BC 8D 42 07 LEA EAX,DWORD [7+EDX]
+ 178 000001BF 50 PUSH EAX
+ 179 000001C0 51 PUSH ECX
+ 180 000001C1 52 PUSH EDX
+ 181 000001C2 0F B6 45 E0 MOVZX EAX,BYTE [-32+EBP]
+ 182 000001C6 50 PUSH EAX
+ 183 000001C7 FF 73 04 PUSH DWORD [4+EBX]
+ 184 000001CA FF 33 PUSH DWORD [EBX]
+ 185 000001CC E8 [00000000] CALL _boxfill8
+ 186 000001D1 83 C4 1C ADD ESP,28
+ 187 000001D4 L33:
+ 188 000001D4 8B 4D DC MOV ECX,DWORD [-36+EBP]
+ 189 000001D7 8B 55 D8 MOV EDX,DWORD [-40+EBP]
+ 190 000001DA 8D 41 10 LEA EAX,DWORD [16+ECX]
+ 191 000001DD 50 PUSH EAX
+ 192 000001DE 8D 42 08 LEA EAX,DWORD [8+EDX]
+ 193 000001E1 50 PUSH EAX
+ 194 000001E2 51 PUSH ECX
+ 195 000001E3 52 PUSH EDX
+ 196 000001E4 FF 75 D4 PUSH DWORD [-44+EBP]
+ 197 000001E7 E8 [00000000] CALL _sheet_refresh
+ 198 000001EC 83 C4 14 ADD ESP,20
+ 199 000001EF E9 FFFFFF03 JMP L10
+ 200 000001F4 L44:
+ 201 000001F4 6A 00 PUSH 0
+ 202 000001F6 8D 5D D4 LEA EBX,DWORD [-44+EBP]
+ 203 000001F9 6A 20 PUSH 32
+ 204 000001FB 53 PUSH EBX
+ 205 000001FC E8 0000012E CALL _cons_putchar
+ 206 00000201 53 PUSH EBX
+ 207 00000202 8B 45 D8 MOV EAX,DWORD [-40+EBP]
+ 208 00000205 BA 00000008 MOV EDX,8
+ 209 0000020A 89 D1 MOV ECX,EDX
+ 210 0000020C 99 CDQ
+ 211 0000020D F7 F9 IDIV ECX
+ 212 0000020F C6 84 05 FFFFFF52 00 MOV BYTE [-174+EBP+EAX*1],0
+ 213 00000217 E8 000001C4 CALL _cons_newline
+ 214 0000021C 8D 85 FFFFFF54 LEA EAX,DWORD [-172+EBP]
+ 215 00000222 FF 75 0C PUSH DWORD [12+EBP]
+ 216 00000225 FF B5 FFFFFF50 PUSH DWORD [-176+EBP]
+ 217 0000022B 53 PUSH EBX
+ 218 0000022C 50 PUSH EAX
+ 219 0000022D E8 000002F7 CALL _cons_runcmd
+ 220 00000232 83 C4 20 ADD ESP,32
+ 221 00000235 83 7D D4 00 CMP DWORD [-44+EBP],0
+ 222 00000239 75 0E JNE L29
+ 223 0000023B FF B5 FFFFFF50 PUSH DWORD [-176+EBP]
+ 224 00000241 53 PUSH EBX
+ 225 00000242 E8 000005A3 CALL _cmd_exit
+ 226 00000247 58 POP EAX
+ 227 00000248 5A POP EDX
+ 228 00000249 L29:
+ 229 00000249 6A 01 PUSH 1
+ 230 0000024B 6A 3E PUSH 62
+ 231 0000024D 53 PUSH EBX
+ 232 0000024E E9 FFFFFF46 JMP L36
+ 233 00000253 L43:
+ 234 00000253 83 7D D8 10 CMP DWORD [-40+EBP],16
+ 235 00000257 0F 8E FFFFFF44 JLE L24
+ 236 0000025D 6A 00 PUSH 0
+ 237 0000025F 8D 45 D4 LEA EAX,DWORD [-44+EBP]
+ 238 00000262 6A 20 PUSH 32
+ 239 00000264 50 PUSH EAX
+ 240 00000265 E8 000000C5 CALL _cons_putchar
+ 241 0000026A 83 6D D8 08 SUB DWORD [-40+EBP],8
+ 242 0000026E E9 FFFFFF2B JMP L37
+ 243 00000273 L42:
+ 244 00000273 FF B5 FFFFFF50 PUSH DWORD [-176+EBP]
+ 245 00000279 8D 45 D4 LEA EAX,DWORD [-44+EBP]
+ 246 0000027C 50 PUSH EAX
+ 247 0000027D E8 00000568 CALL _cmd_exit
+ 248 00000282 59 POP ECX
+ 249 00000283 5B POP EBX
+ 250 00000284 E9 FFFFFEB7 JMP L23
+ 251 00000289 L41:
+ 252 00000289 8B 5D D4 MOV EBX,DWORD [-44+EBP]
+ 253 0000028C 85 DB TEST EBX,EBX
+ 254 0000028E 74 1F JE L22
+ 255 00000290 8B 4D DC MOV ECX,DWORD [-36+EBP]
+ 256 00000293 8B 55 D8 MOV EDX,DWORD [-40+EBP]
+ 257 00000296 8D 41 0F LEA EAX,DWORD [15+ECX]
+ 258 00000299 50 PUSH EAX
+ 259 0000029A 8D 42 07 LEA EAX,DWORD [7+EDX]
+ 260 0000029D 50 PUSH EAX
+ 261 0000029E 51 PUSH ECX
+ 262 0000029F 52 PUSH EDX
+ 263 000002A0 6A 00 PUSH 0
+ 264 000002A2 FF 73 04 PUSH DWORD [4+EBX]
+ 265 000002A5 FF 33 PUSH DWORD [EBX]
+ 266 000002A7 E8 [00000000] CALL _boxfill8
+ 267 000002AC 83 C4 1C ADD ESP,28
+ 268 000002AF L22:
+ 269 000002AF C7 45 E0 FFFFFFFF MOV DWORD [-32+EBP],-1
+ 270 000002B6 E9 FFFFFE7C JMP L21
+ 271 000002BB L40:
+ 272 000002BB C7 45 E0 00000007 MOV DWORD [-32+EBP],7
+ 273 000002C2 E9 FFFFFE67 JMP L20
+ 274 000002C7 L39:
+ 275 000002C7 83 7D D4 00 CMP DWORD [-44+EBP],0
+ 276 000002CB 0F 84 FFFFFE54 JE L15
+ 277 000002D1 85 F6 TEST ESI,ESI
+ 278 000002D3 74 2C JE L16
+ 279 000002D5 6A 00 PUSH 0
+ 280 000002D7 53 PUSH EBX
+ 281 000002D8 FF 75 E4 PUSH DWORD [-28+EBP]
+ 282 000002DB E8 [00000000] CALL _timer_init
+ 283 000002E0 83 C4 0C ADD ESP,12
+ 284 000002E3 83 7D E0 00 CMP DWORD [-32+EBP],0
+ 285 000002E7 78 07 JS L18
+ 286 000002E9 C7 45 E0 00000007 MOV DWORD [-32+EBP],7
+ 287 000002F0 L18:
+ 288 000002F0 6A 32 PUSH 50
+ 289 000002F2 FF 75 E4 PUSH DWORD [-28+EBP]
+ 290 000002F5 E8 [00000000] CALL _timer_settime
+ 291 000002FA 58 POP EAX
+ 292 000002FB 5A POP EDX
+ 293 000002FC E9 FFFFFE24 JMP L15
+ 294 00000301 L16:
+ 295 00000301 6A 01 PUSH 1
+ 296 00000303 53 PUSH EBX
+ 297 00000304 FF 75 E4 PUSH DWORD [-28+EBP]
+ 298 00000307 E8 [00000000] CALL _timer_init
+ 299 0000030C 83 C4 0C ADD ESP,12
+ 300 0000030F 83 7D E0 00 CMP DWORD [-32+EBP],0
+ 301 00000313 78 DB JS L18
+ 302 00000315 C7 45 E0 00000000 MOV DWORD [-32+EBP],0
+ 303 0000031C EB D2 JMP L18
+ 304 0000031E L38:
+ 305 0000031E 57 PUSH EDI
+ 306 0000031F E8 [00000000] CALL _task_sleep
+ 307 00000324 E8 [00000000] CALL _io_sti
+ 308 00000329 5B POP EBX
+ 309 0000032A E9 FFFFFDC8 JMP L10
+ 310 [SECTION .data]
+ 311 00000000 LC0:
+ 312 00000000 20 00 DB " ",0x00
+ 313 [SECTION .text]
+ 314 0000032F GLOBAL _cons_putchar
+ 315 0000032F _cons_putchar:
+ 316 0000032F 55 PUSH EBP
+ 317 00000330 89 E5 MOV EBP,ESP
+ 318 00000332 53 PUSH EBX
+ 319 00000333 50 PUSH EAX
+ 320 00000334 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 321 00000337 8A 55 10 MOV DL,BYTE [16+EBP]
+ 322 0000033A 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 323 0000033D 88 55 F9 MOV BYTE [-7+EBP],DL
+ 324 00000340 88 45 FA MOV BYTE [-6+EBP],AL
+ 325 00000343 3C 09 CMP AL,9
+ 326 00000345 C6 45 FB 00 MOV BYTE [-5+EBP],0
+ 327 00000349 74 4D JE L47
+ 328 0000034B 3C 0A CMP AL,10
+ 329 0000034D 74 25 JE L61
+ 330 0000034F 3C 0D CMP AL,13
+ 331 00000351 74 1C JE L45
+ 332 00000353 8B 13 MOV EDX,DWORD [EBX]
+ 333 00000355 85 D2 TEST EDX,EDX
+ 334 00000357 75 24 JNE L62
+ 335 00000359 L58:
+ 336 00000359 80 7D F9 00 CMP BYTE [-7+EBP],0
+ 337 0000035D 74 10 JE L45
+ 338 0000035F 8B 43 04 MOV EAX,DWORD [4+EBX]
+ 339 00000362 83 C0 08 ADD EAX,8
+ 340 00000365 89 43 04 MOV DWORD [4+EBX],EAX
+ 341 00000368 3D 000000F8 CMP EAX,248
+ 342 0000036D 74 05 JE L61
+ 343 0000036F L45:
+ 344 0000036F 8B 5D FC MOV EBX,DWORD [-4+EBP]
+ 345 00000372 C9 LEAVE
+ 346 00000373 C3 RET
+ 347 00000374 L61:
+ 348 00000374 53 PUSH EBX
+ 349 00000375 E8 00000066 CALL _cons_newline
+ 350 0000037A 58 POP EAX
+ 351 0000037B EB F2 JMP L45
+ 352 0000037D L62:
+ 353 0000037D 6A 01 PUSH 1
+ 354 0000037F 8D 45 FA LEA EAX,DWORD [-6+EBP]
+ 355 00000382 50 PUSH EAX
+ 356 00000383 6A 00 PUSH 0
+ 357 00000385 6A 07 PUSH 7
+ 358 00000387 FF 73 08 PUSH DWORD [8+EBX]
+ 359 0000038A FF 73 04 PUSH DWORD [4+EBX]
+ 360 0000038D 52 PUSH EDX
+ 361 0000038E E8 [00000000] CALL _putfonts8_asc_sht
+ 362 00000393 83 C4 1C ADD ESP,28
+ 363 00000396 EB C1 JMP L58
+ 364 00000398 L47:
+ 365 00000398 8B 03 MOV EAX,DWORD [EBX]
+ 366 0000039A 85 C0 TEST EAX,EAX
+ 367 0000039C 75 26 JNE L63
+ 368 0000039E L50:
+ 369 0000039E 8B 43 04 MOV EAX,DWORD [4+EBX]
+ 370 000003A1 83 C0 08 ADD EAX,8
+ 371 000003A4 89 43 04 MOV DWORD [4+EBX],EAX
+ 372 000003A7 3D 000000F8 CMP EAX,248
+ 373 000003AC 74 0D JE L64
+ 374 000003AE L51:
+ 375 000003AE 8B 43 04 MOV EAX,DWORD [4+EBX]
+ 376 000003B1 83 E8 08 SUB EAX,8
+ 377 000003B4 83 E0 1F AND EAX,31
+ 378 000003B7 75 DF JNE L47
+ 379 000003B9 EB B4 JMP L45
+ 380 000003BB L64:
+ 381 000003BB 53 PUSH EBX
+ 382 000003BC E8 0000001F CALL _cons_newline
+ 383 000003C1 58 POP EAX
+ 384 000003C2 EB EA JMP L51
+ 385 000003C4 L63:
+ 386 000003C4 6A 01 PUSH 1
+ 387 000003C6 68 [00000000] PUSH LC0
+ 388 000003CB 6A 00 PUSH 0
+ 389 000003CD 6A 07 PUSH 7
+ 390 000003CF FF 73 08 PUSH DWORD [8+EBX]
+ 391 000003D2 FF 73 04 PUSH DWORD [4+EBX]
+ 392 000003D5 50 PUSH EAX
+ 393 000003D6 E8 [00000000] CALL _putfonts8_asc_sht
+ 394 000003DB 83 C4 1C ADD ESP,28
+ 395 000003DE EB BE JMP L50
+ 396 000003E0 GLOBAL _cons_newline
+ 397 000003E0 _cons_newline:
+ 398 000003E0 55 PUSH EBP
+ 399 000003E1 89 E5 MOV EBP,ESP
+ 400 000003E3 57 PUSH EDI
+ 401 000003E4 56 PUSH ESI
+ 402 000003E5 53 PUSH EBX
+ 403 000003E6 50 PUSH EAX
+ 404 000003E7 50 PUSH EAX
+ 405 000003E8 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 406 000003EB 8B 00 MOV EAX,DWORD [EAX]
+ 407 000003ED 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 408 000003F0 E8 [00000000] CALL _task_now
+ 409 000003F5 8B 55 08 MOV EDX,DWORD [8+EBP]
+ 410 000003F8 89 45 EC MOV DWORD [-20+EBP],EAX
+ 411 000003FB 8B 42 08 MOV EAX,DWORD [8+EDX]
+ 412 000003FE 3D 0000008B CMP EAX,139
+ 413 00000403 7F 36 JG L66
+ 414 00000405 83 C0 10 ADD EAX,16
+ 415 00000408 89 42 08 MOV DWORD [8+EDX],EAX
+ 416 0000040B L67:
+ 417 0000040B 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 418 0000040E 8B 55 EC MOV EDX,DWORD [-20+EBP]
+ 419 00000411 C7 40 04 00000008 MOV DWORD [4+EAX],8
+ 420 00000418 80 BA 000000BC 01 CMP BYTE [188+EDX],1
+ 421 0000041F 74 08 JE L98
+ 422 00000421 L65:
+ 423 00000421 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 424 00000424 5B POP EBX
+ 425 00000425 5E POP ESI
+ 426 00000426 5F POP EDI
+ 427 00000427 5D POP EBP
+ 428 00000428 C3 RET
+ 429 00000429 L98:
+ 430 00000429 80 BA 000000BD 00 CMP BYTE [189+EDX],0
+ 431 00000430 74 EF JE L65
+ 432 00000432 C7 40 04 00000010 MOV DWORD [4+EAX],16
+ 433 00000439 EB E6 JMP L65
+ 434 0000043B L66:
+ 435 0000043B 83 7D F0 00 CMP DWORD [-16+EBP],0
+ 436 0000043F 74 CA JE L67
+ 437 00000441 BF 0000001C MOV EDI,28
+ 438 00000446 L78:
+ 439 00000446 BE 00000008 MOV ESI,8
+ 440 0000044B L77:
+ 441 0000044B 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 442 0000044E 89 FA MOV EDX,EDI
+ 443 00000450 8B 48 04 MOV ECX,DWORD [4+EAX]
+ 444 00000453 8B 18 MOV EBX,DWORD [EAX]
+ 445 00000455 8D 47 10 LEA EAX,DWORD [16+EDI]
+ 446 00000458 0F AF C1 IMUL EAX,ECX
+ 447 0000045B 0F AF D1 IMUL EDX,ECX
+ 448 0000045E 8D 04 30 LEA EAX,DWORD [EAX+ESI*1]
+ 449 00000461 8D 14 32 LEA EDX,DWORD [EDX+ESI*1]
+ 450 00000464 46 INC ESI
+ 451 00000465 8A 04 18 MOV AL,BYTE [EAX+EBX*1]
+ 452 00000468 81 FE 000000F7 CMP ESI,247
+ 453 0000046E 88 04 1A MOV BYTE [EDX+EBX*1],AL
+ 454 00000471 7E D8 JLE L77
+ 455 00000473 47 INC EDI
+ 456 00000474 81 FF 0000008B CMP EDI,139
+ 457 0000047A 7E CA JLE L78
+ 458 0000047C BF 0000008C MOV EDI,140
+ 459 00000481 L88:
+ 460 00000481 BE 00000008 MOV ESI,8
+ 461 00000486 L87:
+ 462 00000486 8B 55 F0 MOV EDX,DWORD [-16+EBP]
+ 463 00000489 89 F8 MOV EAX,EDI
+ 464 0000048B 89 D1 MOV ECX,EDX
+ 465 0000048D 0F AF 42 04 IMUL EAX,DWORD [4+EDX]
+ 466 00000491 8B 12 MOV EDX,DWORD [EDX]
+ 467 00000493 8D 04 30 LEA EAX,DWORD [EAX+ESI*1]
+ 468 00000496 46 INC ESI
+ 469 00000497 81 FE 000000F7 CMP ESI,247
+ 470 0000049D C6 04 10 00 MOV BYTE [EAX+EDX*1],0
+ 471 000004A1 7E E3 JLE L87
+ 472 000004A3 47 INC EDI
+ 473 000004A4 81 FF 0000009B CMP EDI,155
+ 474 000004AA 7E D5 JLE L88
+ 475 000004AC 68 0000009C PUSH 156
+ 476 000004B1 68 000000F8 PUSH 248
+ 477 000004B6 6A 1C PUSH 28
+ 478 000004B8 6A 08 PUSH 8
+ 479 000004BA 51 PUSH ECX
+ 480 000004BB E8 [00000000] CALL _sheet_refresh
+ 481 000004C0 83 C4 14 ADD ESP,20
+ 482 000004C3 E9 FFFFFF43 JMP L67
+ 483 000004C8 GLOBAL _cons_putstr0
+ 484 000004C8 _cons_putstr0:
+ 485 000004C8 55 PUSH EBP
+ 486 000004C9 89 E5 MOV EBP,ESP
+ 487 000004CB 56 PUSH ESI
+ 488 000004CC 53 PUSH EBX
+ 489 000004CD 8B 5D 0C MOV EBX,DWORD [12+EBP]
+ 490 000004D0 8B 75 08 MOV ESI,DWORD [8+EBP]
+ 491 000004D3 80 3B 00 CMP BYTE [EBX],0
+ 492 000004D6 75 07 JNE L104
+ 493 000004D8 L106:
+ 494 000004D8 8D 65 F8 LEA ESP,DWORD [-8+EBP]
+ 495 000004DB 5B POP EBX
+ 496 000004DC 5E POP ESI
+ 497 000004DD 5D POP EBP
+ 498 000004DE C3 RET
+ 499 000004DF L104:
+ 500 000004DF 6A 01 PUSH 1
+ 501 000004E1 0F BE 03 MOVSX EAX,BYTE [EBX]
+ 502 000004E4 50 PUSH EAX
+ 503 000004E5 43 INC EBX
+ 504 000004E6 56 PUSH ESI
+ 505 000004E7 E8 FFFFFE43 CALL _cons_putchar
+ 506 000004EC 83 C4 0C ADD ESP,12
+ 507 000004EF 80 3B 00 CMP BYTE [EBX],0
+ 508 000004F2 75 EB JNE L104
+ 509 000004F4 EB E2 JMP L106
+ 510 000004F6 GLOBAL _cons_putstr1
+ 511 000004F6 _cons_putstr1:
+ 512 000004F6 55 PUSH EBP
+ 513 000004F7 89 E5 MOV EBP,ESP
+ 514 000004F9 57 PUSH EDI
+ 515 000004FA 56 PUSH ESI
+ 516 000004FB 53 PUSH EBX
+ 517 000004FC 8B 75 10 MOV ESI,DWORD [16+EBP]
+ 518 000004FF 31 DB XOR EBX,EBX
+ 519 00000501 8B 7D 0C MOV EDI,DWORD [12+EBP]
+ 520 00000504 39 F3 CMP EBX,ESI
+ 521 00000506 7C 08 JL L112
+ 522 00000508 L114:
+ 523 00000508 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 524 0000050B 5B POP EBX
+ 525 0000050C 5E POP ESI
+ 526 0000050D 5F POP EDI
+ 527 0000050E 5D POP EBP
+ 528 0000050F C3 RET
+ 529 00000510 L112:
+ 530 00000510 6A 01 PUSH 1
+ 531 00000512 0F BE 04 3B MOVSX EAX,BYTE [EBX+EDI*1]
+ 532 00000516 50 PUSH EAX
+ 533 00000517 43 INC EBX
+ 534 00000518 FF 75 08 PUSH DWORD [8+EBP]
+ 535 0000051B E8 FFFFFE0F CALL _cons_putchar
+ 536 00000520 83 C4 0C ADD ESP,12
+ 537 00000523 39 F3 CMP EBX,ESI
+ 538 00000525 7C E9 JL L112
+ 539 00000527 EB DF JMP L114
+ 540 [SECTION .data]
+ 541 00000002 LC1:
+ 542 00000002 6D 65 6D 00 DB "mem",0x00
+ 543 00000006 LC2:
+ 544 00000006 63 6C 73 00 DB "cls",0x00
+ 545 0000000A LC3:
+ 546 0000000A 64 69 72 00 DB "dir",0x00
+ 547 0000000E LC4:
+ 548 0000000E 65 78 69 74 00 DB "exit",0x00
+ 549 00000013 LC5:
+ 550 00000013 73 74 61 72 74 20 00 DB "start ",0x00
+ 551 0000001A LC6:
+ 552 0000001A 6E 63 73 74 20 00 DB "ncst ",0x00
+ 553 00000020 LC7:
+ 554 00000020 6C 61 6E 67 6D 6F 64 65 20 00 DB "langmode ",0x00
+ 555 0000002A LC8:
+ 556 0000002A 42 61 64 20 63 6F 6D 6D 61 6E DB "Bad command.",0x0A,0x0A,0x00
+ 00000034 64 2E 0A 0A 00
+ 557 [SECTION .text]
+ 558 00000529 GLOBAL _cons_runcmd
+ 559 00000529 _cons_runcmd:
+ 560 00000529 55 PUSH EBP
+ 561 0000052A 89 E5 MOV EBP,ESP
+ 562 0000052C 57 PUSH EDI
+ 563 0000052D 56 PUSH ESI
+ 564 0000052E BF [00000002] MOV EDI,LC1
+ 565 00000533 53 PUSH EBX
+ 566 00000534 83 EC 0C SUB ESP,12
+ 567 00000537 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 568 0000053A 8B 4D 10 MOV ECX,DWORD [16+EBP]
+ 569 0000053D 89 45 E8 MOV DWORD [-24+EBP],EAX
+ 570 00000540 89 4D F0 MOV DWORD [-16+EBP],ECX
+ 571 00000543 8B 45 14 MOV EAX,DWORD [20+EBP]
+ 572 00000546 8B 75 E8 MOV ESI,DWORD [-24+EBP]
+ 573 00000549 89 45 EC MOV DWORD [-20+EBP],EAX
+ 574 0000054C 8B 5D 0C MOV EBX,DWORD [12+EBP]
+ 575 0000054F B8 00000004 MOV EAX,4
+ 576 00000554 FC CLD
+ 577 00000555 89 C1 MOV ECX,EAX
+ 578 00000557 F3 REPE
+ 579 00000558 A6 CMPSB
+ 580 00000559 75 09 JNE L116
+ 581 0000055B 83 3B 00 CMP DWORD [EBX],0
+ 582 0000055E 0F 85 00000144 JNE L132
+ 583 00000564 L116:
+ 584 00000564 B8 00000004 MOV EAX,4
+ 585 00000569 8B 75 E8 MOV ESI,DWORD [-24+EBP]
+ 586 0000056C FC CLD
+ 587 0000056D BF [00000006] MOV EDI,LC2
+ 588 00000572 89 C1 MOV ECX,EAX
+ 589 00000574 F3 REPE
+ 590 00000575 A6 CMPSB
+ 591 00000576 75 09 JNE L118
+ 592 00000578 83 3B 00 CMP DWORD [EBX],0
+ 593 0000057B 0F 85 0000011B JNE L133
+ 594 00000581 L118:
+ 595 00000581 B8 00000004 MOV EAX,4
+ 596 00000586 8B 75 E8 MOV ESI,DWORD [-24+EBP]
+ 597 00000589 FC CLD
+ 598 0000058A BF [0000000A] MOV EDI,LC3
+ 599 0000058F 89 C1 MOV ECX,EAX
+ 600 00000591 F3 REPE
+ 601 00000592 A6 CMPSB
+ 602 00000593 75 09 JNE L120
+ 603 00000595 83 3B 00 CMP DWORD [EBX],0
+ 604 00000598 0F 85 000000EF JNE L134
+ 605 0000059E L120:
+ 606 0000059E B8 00000005 MOV EAX,5
+ 607 000005A3 8B 75 E8 MOV ESI,DWORD [-24+EBP]
+ 608 000005A6 FC CLD
+ 609 000005A7 BF [0000000E] MOV EDI,LC4
+ 610 000005AC 89 C1 MOV ECX,EAX
+ 611 000005AE F3 REPE
+ 612 000005AF A6 CMPSB
+ 613 000005B0 0F 84 000000C2 JE L135
+ 614 000005B6 B8 00000006 MOV EAX,6
+ 615 000005BB 8B 75 E8 MOV ESI,DWORD [-24+EBP]
+ 616 000005BE FC CLD
+ 617 000005BF BF [00000013] MOV EDI,LC5
+ 618 000005C4 89 C1 MOV ECX,EAX
+ 619 000005C6 F3 REPE
+ 620 000005C7 A6 CMPSB
+ 621 000005C8 0F 84 0000008F JE L136
+ 622 000005CE B8 00000005 MOV EAX,5
+ 623 000005D3 8B 75 E8 MOV ESI,DWORD [-24+EBP]
+ 624 000005D6 FC CLD
+ 625 000005D7 BF [0000001A] MOV EDI,LC6
+ 626 000005DC 89 C1 MOV ECX,EAX
+ 627 000005DE F3 REPE
+ 628 000005DF A6 CMPSB
+ 629 000005E0 74 60 JE L137
+ 630 000005E2 B8 00000009 MOV EAX,9
+ 631 000005E7 8B 75 E8 MOV ESI,DWORD [-24+EBP]
+ 632 000005EA FC CLD
+ 633 000005EB BF [00000020] MOV EDI,LC7
+ 634 000005F0 89 C1 MOV ECX,EAX
+ 635 000005F2 F3 REPE
+ 636 000005F3 A6 CMPSB
+ 637 000005F4 74 37 JE L138
+ 638 000005F6 8B 4D E8 MOV ECX,DWORD [-24+EBP]
+ 639 000005F9 80 39 00 CMP BYTE [ECX],0
+ 640 000005FC 75 08 JNE L139
+ 641 000005FE L115:
+ 642 000005FE 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 643 00000601 5B POP EBX
+ 644 00000602 5E POP ESI
+ 645 00000603 5F POP EDI
+ 646 00000604 5D POP EBP
+ 647 00000605 C3 RET
+ 648 00000606 L139:
+ 649 00000606 51 PUSH ECX
+ 650 00000607 FF 75 F0 PUSH DWORD [-16+EBP]
+ 651 0000060A 53 PUSH EBX
+ 652 0000060B E8 0000039E CALL _cmd_app
+ 653 00000610 83 C4 0C ADD ESP,12
+ 654 00000613 85 C0 TEST EAX,EAX
+ 655 00000615 75 E7 JNE L115
+ 656 00000617 C7 45 0C [0000002A] MOV DWORD [12+EBP],LC8
+ 657 0000061E 89 5D 08 MOV DWORD [8+EBP],EBX
+ 658 00000621 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 659 00000624 5B POP EBX
+ 660 00000625 5E POP ESI
+ 661 00000626 5F POP EDI
+ 662 00000627 5D POP EBP
+ 663 00000628 E9 FFFFFE9B JMP _cons_putstr0
+ 664 0000062D L138:
+ 665 0000062D 8B 45 E8 MOV EAX,DWORD [-24+EBP]
+ 666 00000630 89 5D 08 MOV DWORD [8+EBP],EBX
+ 667 00000633 89 45 0C MOV DWORD [12+EBP],EAX
+ 668 00000636 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 669 00000639 5B POP EBX
+ 670 0000063A 5E POP ESI
+ 671 0000063B 5F POP EDI
+ 672 0000063C 5D POP EBP
+ 673 0000063D E9 0000032E JMP _cmd_langmode
+ 674 00000642 L137:
+ 675 00000642 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 676 00000645 8B 4D E8 MOV ECX,DWORD [-24+EBP]
+ 677 00000648 89 45 10 MOV DWORD [16+EBP],EAX
+ 678 0000064B 89 4D 0C MOV DWORD [12+EBP],ECX
+ 679 0000064E 89 5D 08 MOV DWORD [8+EBP],EBX
+ 680 00000651 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 681 00000654 5B POP EBX
+ 682 00000655 5E POP ESI
+ 683 00000656 5F POP EDI
+ 684 00000657 5D POP EBP
+ 685 00000658 E9 000002AF JMP _cmd_ncst
+ 686 0000065D L136:
+ 687 0000065D 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 688 00000660 8B 4D E8 MOV ECX,DWORD [-24+EBP]
+ 689 00000663 89 45 10 MOV DWORD [16+EBP],EAX
+ 690 00000666 89 4D 0C MOV DWORD [12+EBP],ECX
+ 691 00000669 89 5D 08 MOV DWORD [8+EBP],EBX
+ 692 0000066C 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 693 0000066F 5B POP EBX
+ 694 00000670 5E POP ESI
+ 695 00000671 5F POP EDI
+ 696 00000672 5D POP EBP
+ 697 00000673 E9 0000020A JMP _cmd_start
+ 698 00000678 L135:
+ 699 00000678 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 700 0000067B 89 5D 08 MOV DWORD [8+EBP],EBX
+ 701 0000067E 89 45 0C MOV DWORD [12+EBP],EAX
+ 702 00000681 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 703 00000684 5B POP EBX
+ 704 00000685 5E POP ESI
+ 705 00000686 5F POP EDI
+ 706 00000687 5D POP EBP
+ 707 00000688 E9 0000015D JMP _cmd_exit
+ 708 0000068D L134:
+ 709 0000068D 89 5D 08 MOV DWORD [8+EBP],EBX
+ 710 00000690 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 711 00000693 5B POP EBX
+ 712 00000694 5E POP ESI
+ 713 00000695 5F POP EDI
+ 714 00000696 5D POP EBP
+ 715 00000697 E9 000000B8 JMP _cmd_dir
+ 716 0000069C L133:
+ 717 0000069C 89 5D 08 MOV DWORD [8+EBP],EBX
+ 718 0000069F 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 719 000006A2 5B POP EBX
+ 720 000006A3 5E POP ESI
+ 721 000006A4 5F POP EDI
+ 722 000006A5 5D POP EBP
+ 723 000006A6 EB 53 JMP _cmd_cls
+ 724 000006A8 L132:
+ 725 000006A8 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 726 000006AB 89 5D 08 MOV DWORD [8+EBP],EBX
+ 727 000006AE 89 45 0C MOV DWORD [12+EBP],EAX
+ 728 000006B1 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 729 000006B4 5B POP EBX
+ 730 000006B5 5E POP ESI
+ 731 000006B6 5F POP EDI
+ 732 000006B7 5D POP EBP
+ 733 000006B8 EB 00 JMP _cmd_mem
+ 734 [SECTION .data]
+ 735 00000039 LC9:
+ 736 00000039 74 6F 74 61 6C 20 20 20 25 64 DB "total %dMB",0x0A,"free %dKB",0x0A,0x0A,0x00
+ 00000043 4D 42 0A 66 72 65 65 20 25 64
+ 0000004D 4B 42 0A 0A 00
+ 737 [SECTION .text]
+ 738 000006BA GLOBAL _cmd_mem
+ 739 000006BA _cmd_mem:
+ 740 000006BA 55 PUSH EBP
+ 741 000006BB 89 E5 MOV EBP,ESP
+ 742 000006BD 53 PUSH EBX
+ 743 000006BE 83 EC 40 SUB ESP,64
+ 744 000006C1 68 003C0000 PUSH 3932160
+ 745 000006C6 E8 [00000000] CALL _memman_total
+ 746 000006CB BA 00100000 MOV EDX,1048576
+ 747 000006D0 C1 E8 0A SHR EAX,10
+ 748 000006D3 89 D3 MOV EBX,EDX
+ 749 000006D5 89 04 24 MOV DWORD [ESP],EAX
+ 750 000006D8 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 751 000006DB 99 CDQ
+ 752 000006DC F7 FB IDIV EBX
+ 753 000006DE 50 PUSH EAX
+ 754 000006DF 8D 5D BC LEA EBX,DWORD [-68+EBP]
+ 755 000006E2 68 [00000039] PUSH LC9
+ 756 000006E7 53 PUSH EBX
+ 757 000006E8 E8 [00000000] CALL _sprintf
+ 758 000006ED 53 PUSH EBX
+ 759 000006EE FF 75 08 PUSH DWORD [8+EBP]
+ 760 000006F1 E8 FFFFFDD2 CALL _cons_putstr0
+ 761 000006F6 8B 5D FC MOV EBX,DWORD [-4+EBP]
+ 762 000006F9 C9 LEAVE
+ 763 000006FA C3 RET
+ 764 000006FB GLOBAL _cmd_cls
+ 765 000006FB _cmd_cls:
+ 766 000006FB 55 PUSH EBP
+ 767 000006FC 89 E5 MOV EBP,ESP
+ 768 000006FE 57 PUSH EDI
+ 769 000006FF 56 PUSH ESI
+ 770 00000700 BE 0000001C MOV ESI,28
+ 771 00000705 8B 7D 08 MOV EDI,DWORD [8+EBP]
+ 772 00000708 53 PUSH EBX
+ 773 00000709 8B 1F MOV EBX,DWORD [EDI]
+ 774 0000070B L151:
+ 775 0000070B B9 00000008 MOV ECX,8
+ 776 00000710 L150:
+ 777 00000710 89 F0 MOV EAX,ESI
+ 778 00000712 8B 13 MOV EDX,DWORD [EBX]
+ 779 00000714 0F AF 43 04 IMUL EAX,DWORD [4+EBX]
+ 780 00000718 8D 04 08 LEA EAX,DWORD [EAX+ECX*1]
+ 781 0000071B 41 INC ECX
+ 782 0000071C 81 F9 000000F7 CMP ECX,247
+ 783 00000722 C6 04 10 00 MOV BYTE [EAX+EDX*1],0
+ 784 00000726 7E E8 JLE L150
+ 785 00000728 46 INC ESI
+ 786 00000729 81 FE 0000009B CMP ESI,155
+ 787 0000072F 7E DA JLE L151
+ 788 00000731 68 0000009C PUSH 156
+ 789 00000736 68 000000F8 PUSH 248
+ 790 0000073B 6A 1C PUSH 28
+ 791 0000073D 6A 08 PUSH 8
+ 792 0000073F 53 PUSH EBX
+ 793 00000740 E8 [00000000] CALL _sheet_refresh
+ 794 00000745 C7 47 08 0000001C MOV DWORD [8+EDI],28
+ 795 0000074C 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 796 0000074F 5B POP EBX
+ 797 00000750 5E POP ESI
+ 798 00000751 5F POP EDI
+ 799 00000752 5D POP EBP
+ 800 00000753 C3 RET
+ 801 [SECTION .data]
+ 802 00000052 LC10:
+ 803 00000052 66 69 6C 65 6E 61 6D 65 2E 65 DB "filename.ext %7d",0x0A,0x00
+ 0000005C 78 74 20 20 20 25 37 64 0A 00
+ 804 [SECTION .text]
+ 805 00000754 GLOBAL _cmd_dir
+ 806 00000754 _cmd_dir:
+ 807 00000754 55 PUSH EBP
+ 808 00000755 89 E5 MOV EBP,ESP
+ 809 00000757 57 PUSH EDI
+ 810 00000758 56 PUSH ESI
+ 811 00000759 31 F6 XOR ESI,ESI
+ 812 0000075B 53 PUSH EBX
+ 813 0000075C 31 DB XOR EBX,EBX
+ 814 0000075E 83 EC 20 SUB ESP,32
+ 815 00000761 8B 7D 08 MOV EDI,DWORD [8+EBP]
+ 816 00000764 L169:
+ 817 00000764 8A 83 00102600 MOV AL,BYTE [1058304+EBX]
+ 818 0000076A 84 C0 TEST AL,AL
+ 819 0000076C 74 19 JE L158
+ 820 0000076E 3C E5 CMP AL,-27
+ 821 00000770 74 09 JE L159
+ 822 00000772 F6 83 0010260B 18 TEST BYTE [1058315+EBX],24
+ 823 00000779 74 1A JE L173
+ 824 0000077B L159:
+ 825 0000077B 46 INC ESI
+ 826 0000077C 83 C3 20 ADD EBX,32
+ 827 0000077F 81 FE 000000DF CMP ESI,223
+ 828 00000785 7E DD JLE L169
+ 829 00000787 L158:
+ 830 00000787 57 PUSH EDI
+ 831 00000788 E8 FFFFFC53 CALL _cons_newline
+ 832 0000078D 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 833 00000790 5B POP EBX
+ 834 00000791 5E POP ESI
+ 835 00000792 5F POP EDI
+ 836 00000793 5D POP EBP
+ 837 00000794 C3 RET
+ 838 00000795 L173:
+ 839 00000795 FF B3 0010261C PUSH DWORD [1058332+EBX]
+ 840 0000079B 68 [00000052] PUSH LC10
+ 841 000007A0 8D 45 D4 LEA EAX,DWORD [-44+EBP]
+ 842 000007A3 50 PUSH EAX
+ 843 000007A4 E8 [00000000] CALL _sprintf
+ 844 000007A9 8D 93 00102600 LEA EDX,DWORD [1058304+EBX]
+ 845 000007AF 31 C9 XOR ECX,ECX
+ 846 000007B1 83 C4 0C ADD ESP,12
+ 847 000007B4 L168:
+ 848 000007B4 8A 02 MOV AL,BYTE [EDX]
+ 849 000007B6 42 INC EDX
+ 850 000007B7 88 44 0D D4 MOV BYTE [-44+EBP+ECX*1],AL
+ 851 000007BB 41 INC ECX
+ 852 000007BC 83 F9 07 CMP ECX,7
+ 853 000007BF 7E F3 JLE L168
+ 854 000007C1 8A 83 00102608 MOV AL,BYTE [1058312+EBX]
+ 855 000007C7 88 45 DD MOV BYTE [-35+EBP],AL
+ 856 000007CA 8A 83 00102609 MOV AL,BYTE [1058313+EBX]
+ 857 000007D0 88 45 DE MOV BYTE [-34+EBP],AL
+ 858 000007D3 8A 83 0010260A MOV AL,BYTE [1058314+EBX]
+ 859 000007D9 88 45 DF MOV BYTE [-33+EBP],AL
+ 860 000007DC 8D 45 D4 LEA EAX,DWORD [-44+EBP]
+ 861 000007DF 50 PUSH EAX
+ 862 000007E0 57 PUSH EDI
+ 863 000007E1 E8 FFFFFCE2 CALL _cons_putstr0
+ 864 000007E6 58 POP EAX
+ 865 000007E7 5A POP EDX
+ 866 000007E8 EB 91 JMP L159
+ 867 000007EA GLOBAL _cmd_exit
+ 868 000007EA _cmd_exit:
+ 869 000007EA 55 PUSH EBP
+ 870 000007EB 89 E5 MOV EBP,ESP
+ 871 000007ED 57 PUSH EDI
+ 872 000007EE 56 PUSH ESI
+ 873 000007EF 53 PUSH EBX
+ 874 000007F0 50 PUSH EAX
+ 875 000007F1 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 876 000007F4 E8 [00000000] CALL _task_now
+ 877 000007F9 8B 35 00000FE4 MOV ESI,DWORD [4068]
+ 878 000007FF 8B 3D 00000FEC MOV EDI,DWORD [4076]
+ 879 00000805 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 880 00000808 83 3B 00 CMP DWORD [EBX],0
+ 881 0000080B 74 09 JE L175
+ 882 0000080D FF 73 10 PUSH DWORD [16+EBX]
+ 883 00000810 E8 [00000000] CALL _timer_cancel
+ 884 00000815 58 POP EAX
+ 885 00000816 L175:
+ 886 00000816 68 00002D00 PUSH 11520
+ 887 0000081B FF 75 0C PUSH DWORD [12+EBP]
+ 888 0000081E 68 003C0000 PUSH 3932160
+ 889 00000823 E8 [00000000] CALL _memman_free_4k
+ 890 00000828 E8 [00000000] CALL _io_cli
+ 891 0000082D 8B 03 MOV EAX,DWORD [EBX]
+ 892 0000082F 83 C4 0C ADD ESP,12
+ 893 00000832 85 C0 TEST EAX,EAX
+ 894 00000834 74 2E JE L176
+ 895 00000836 29 F0 SUB EAX,ESI
+ 896 00000838 2D 00000414 SUB EAX,1044
+ 897 0000083D C1 F8 03 SAR EAX,3
+ 898 00000840 69 C0 CCCCCCCD IMUL EAX,EAX,-858993459
+ 899 00000846 05 00000300 ADD EAX,768
+ 900 0000084B L181:
+ 901 0000084B 50 PUSH EAX
+ 902 0000084C 57 PUSH EDI
+ 903 0000084D E8 [00000000] CALL _fifo32_put
+ 904 00000852 5B POP EBX
+ 905 00000853 5E POP ESI
+ 906 00000854 E8 [00000000] CALL _io_sti
+ 907 00000859 L178:
+ 908 00000859 FF 75 F0 PUSH DWORD [-16+EBP]
+ 909 0000085C E8 [00000000] CALL _task_sleep
+ 910 00000861 59 POP ECX
+ 911 00000862 EB F5 JMP L178
+ 912 00000864 L176:
+ 913 00000864 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 914 00000867 2B 05 [00000000] SUB EAX,DWORD [_taskctl]
+ 915 0000086D 2D 00000FF8 SUB EAX,4088
+ 916 00000872 C1 F8 06 SAR EAX,6
+ 917 00000875 69 C0 AAAAAAAB IMUL EAX,EAX,-1431655765
+ 918 0000087B 05 00000400 ADD EAX,1024
+ 919 00000880 EB C9 JMP L181
+ 920 00000882 GLOBAL _cmd_start
+ 921 00000882 _cmd_start:
+ 922 00000882 55 PUSH EBP
+ 923 00000883 89 E5 MOV EBP,ESP
+ 924 00000885 57 PUSH EDI
+ 925 00000886 56 PUSH ESI
+ 926 00000887 53 PUSH EBX
+ 927 00000888 57 PUSH EDI
+ 928 00000889 57 PUSH EDI
+ 929 0000088A 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 930 0000088D 8B 7D 0C MOV EDI,DWORD [12+EBP]
+ 931 00000890 8B 35 00000FE4 MOV ESI,DWORD [4068]
+ 932 00000896 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 933 00000899 FF 75 10 PUSH DWORD [16+EBP]
+ 934 0000089C 56 PUSH ESI
+ 935 0000089D E8 [00000000] CALL _open_console
+ 936 000008A2 89 C3 MOV EBX,EAX
+ 937 000008A4 8B 40 24 MOV EAX,DWORD [36+EAX]
+ 938 000008A7 83 C0 10 ADD EAX,16
+ 939 000008AA 89 45 EC MOV DWORD [-20+EBP],EAX
+ 940 000008AD 6A 04 PUSH 4
+ 941 000008AF 6A 20 PUSH 32
+ 942 000008B1 53 PUSH EBX
+ 943 000008B2 E8 [00000000] CALL _sheet_slide
+ 944 000008B7 FF 76 10 PUSH DWORD [16+ESI]
+ 945 000008BA 53 PUSH EBX
+ 946 000008BB BB 00000006 MOV EBX,6
+ 947 000008C0 E8 [00000000] CALL _sheet_updown
+ 948 000008C5 83 C4 1C ADD ESP,28
+ 949 000008C8 80 7F 06 00 CMP BYTE [6+EDI],0
+ 950 000008CC 75 21 JNE L187
+ 951 000008CE L189:
+ 952 000008CE 68 0000010A PUSH 266
+ 953 000008D3 FF 75 EC PUSH DWORD [-20+EBP]
+ 954 000008D6 E8 [00000000] CALL _fifo32_put
+ 955 000008DB 58 POP EAX
+ 956 000008DC 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 957 000008DF 5A POP EDX
+ 958 000008E0 89 45 08 MOV DWORD [8+EBP],EAX
+ 959 000008E3 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 960 000008E6 5B POP EBX
+ 961 000008E7 5E POP ESI
+ 962 000008E8 5F POP EDI
+ 963 000008E9 5D POP EBP
+ 964 000008EA E9 FFFFFAF1 JMP _cons_newline
+ 965 000008EF L187:
+ 966 000008EF 0F BE 04 3B MOVSX EAX,BYTE [EBX+EDI*1]
+ 967 000008F3 05 00000100 ADD EAX,256
+ 968 000008F8 43 INC EBX
+ 969 000008F9 50 PUSH EAX
+ 970 000008FA FF 75 EC PUSH DWORD [-20+EBP]
+ 971 000008FD E8 [00000000] CALL _fifo32_put
+ 972 00000902 80 3C 3B 00 CMP BYTE [EBX+EDI*1],0
+ 973 00000906 59 POP ECX
+ 974 00000907 5E POP ESI
+ 975 00000908 75 E5 JNE L187
+ 976 0000090A EB C2 JMP L189
+ 977 0000090C GLOBAL _cmd_ncst
+ 978 0000090C _cmd_ncst:
+ 979 0000090C 55 PUSH EBP
+ 980 0000090D 89 E5 MOV EBP,ESP
+ 981 0000090F 57 PUSH EDI
+ 982 00000910 56 PUSH ESI
+ 983 00000911 BE 00000005 MOV ESI,5
+ 984 00000916 53 PUSH EBX
+ 985 00000917 51 PUSH ECX
+ 986 00000918 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 987 0000091B 8B 5D 0C MOV EBX,DWORD [12+EBP]
+ 988 0000091E 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 989 00000921 FF 75 10 PUSH DWORD [16+EBP]
+ 990 00000924 6A 00 PUSH 0
+ 991 00000926 E8 [00000000] CALL _open_constask
+ 992 0000092B 80 7B 05 00 CMP BYTE [5+EBX],0
+ 993 0000092F 8D 78 10 LEA EDI,DWORD [16+EAX]
+ 994 00000932 58 POP EAX
+ 995 00000933 5A POP EDX
+ 996 00000934 75 1F JNE L195
+ 997 00000936 L197:
+ 998 00000936 68 0000010A PUSH 266
+ 999 0000093B 57 PUSH EDI
+ 1000 0000093C E8 [00000000] CALL _fifo32_put
+ 1001 00000941 58 POP EAX
+ 1002 00000942 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 1003 00000945 5A POP EDX
+ 1004 00000946 89 45 08 MOV DWORD [8+EBP],EAX
+ 1005 00000949 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 1006 0000094C 5B POP EBX
+ 1007 0000094D 5E POP ESI
+ 1008 0000094E 5F POP EDI
+ 1009 0000094F 5D POP EBP
+ 1010 00000950 E9 FFFFFA8B JMP _cons_newline
+ 1011 00000955 L195:
+ 1012 00000955 0F BE 04 1E MOVSX EAX,BYTE [ESI+EBX*1]
+ 1013 00000959 05 00000100 ADD EAX,256
+ 1014 0000095E 46 INC ESI
+ 1015 0000095F 50 PUSH EAX
+ 1016 00000960 57 PUSH EDI
+ 1017 00000961 E8 [00000000] CALL _fifo32_put
+ 1018 00000966 80 3C 1E 00 CMP BYTE [ESI+EBX*1],0
+ 1019 0000096A 59 POP ECX
+ 1020 0000096B 58 POP EAX
+ 1021 0000096C 75 E7 JNE L195
+ 1022 0000096E EB C6 JMP L197
+ 1023 [SECTION .data]
+ 1024 00000066 LC11:
+ 1025 00000066 6D 6F 64 65 20 6E 75 6D 62 65 DB "mode number error.",0x0A,0x00
+ 00000070 72 20 65 72 72 6F 72 2E 0A 00
+ 1026 [SECTION .text]
+ 1027 00000970 GLOBAL _cmd_langmode
+ 1028 00000970 _cmd_langmode:
+ 1029 00000970 55 PUSH EBP
+ 1030 00000971 89 E5 MOV EBP,ESP
+ 1031 00000973 56 PUSH ESI
+ 1032 00000974 53 PUSH EBX
+ 1033 00000975 8B 5D 0C MOV EBX,DWORD [12+EBP]
+ 1034 00000978 8B 75 08 MOV ESI,DWORD [8+EBP]
+ 1035 0000097B E8 [00000000] CALL _task_now
+ 1036 00000980 8A 53 09 MOV DL,BYTE [9+EBX]
+ 1037 00000983 83 EA 30 SUB EDX,48
+ 1038 00000986 80 FA 02 CMP DL,2
+ 1039 00000989 77 14 JA L199
+ 1040 0000098B 88 90 000000BC MOV BYTE [188+EAX],DL
+ 1041 00000991 L200:
+ 1042 00000991 89 75 08 MOV DWORD [8+EBP],ESI
+ 1043 00000994 8D 65 F8 LEA ESP,DWORD [-8+EBP]
+ 1044 00000997 5B POP EBX
+ 1045 00000998 5E POP ESI
+ 1046 00000999 5D POP EBP
+ 1047 0000099A E9 FFFFFA41 JMP _cons_newline
+ 1048 0000099F L199:
+ 1049 0000099F 68 [00000066] PUSH LC11
+ 1050 000009A4 56 PUSH ESI
+ 1051 000009A5 E8 FFFFFB1E CALL _cons_putstr0
+ 1052 000009AA 5B POP EBX
+ 1053 000009AB 58 POP EAX
+ 1054 000009AC EB E3 JMP L200
+ 1055 [SECTION .data]
+ 1056 0000007A LC12:
+ 1057 0000007A 48 61 72 69 00 DB "Hari",0x00
+ 1058 0000007F LC13:
+ 1059 0000007F 2E 68 72 62 20 66 69 6C 65 20 DB ".hrb file format error.",0x0A,0x00
+ 00000089 66 6F 72 6D 61 74 20 65 72 72
+ 00000093 6F 72 2E 0A 00
+ 1060 [SECTION .text]
+ 1061 000009AE GLOBAL _cmd_app
+ 1062 000009AE _cmd_app:
+ 1063 000009AE 55 PUSH EBP
+ 1064 000009AF 89 E5 MOV EBP,ESP
+ 1065 000009B1 57 PUSH EDI
+ 1066 000009B2 56 PUSH ESI
+ 1067 000009B3 31 F6 XOR ESI,ESI
+ 1068 000009B5 53 PUSH EBX
+ 1069 000009B6 83 EC 34 SUB ESP,52
+ 1070 000009B9 8B 5D 10 MOV EBX,DWORD [16+EBP]
+ 1071 000009BC E8 [00000000] CALL _task_now
+ 1072 000009C1 89 45 C8 MOV DWORD [-56+EBP],EAX
+ 1073 000009C4 L207:
+ 1074 000009C4 8A 04 1E MOV AL,BYTE [ESI+EBX*1]
+ 1075 000009C7 3C 20 CMP AL,32
+ 1076 000009C9 7E 0A JLE L203
+ 1077 000009CB 88 44 35 D4 MOV BYTE [-44+EBP+ESI*1],AL
+ 1078 000009CF 46 INC ESI
+ 1079 000009D0 83 FE 0C CMP ESI,12
+ 1080 000009D3 7E EF JLE L207
+ 1081 000009D5 L203:
+ 1082 000009D5 68 000000E0 PUSH 224
+ 1083 000009DA 8D 5D D4 LEA EBX,DWORD [-44+EBP]
+ 1084 000009DD 68 00102600 PUSH 1058304
+ 1085 000009E2 53 PUSH EBX
+ 1086 000009E3 C6 44 35 D4 00 MOV BYTE [-44+EBP+ESI*1],0
+ 1087 000009E8 E8 [00000000] CALL _file_search
+ 1088 000009ED 83 C4 0C ADD ESP,12
+ 1089 000009F0 89 C2 MOV EDX,EAX
+ 1090 000009F2 85 C0 TEST EAX,EAX
+ 1091 000009F4 0F 84 000001B6 JE L237
+ 1092 000009FA L236:
+ 1093 000009FA 8B 42 1C MOV EAX,DWORD [28+EDX]
+ 1094 000009FD 89 45 D0 MOV DWORD [-48+EBP],EAX
+ 1095 00000A00 8D 45 D0 LEA EAX,DWORD [-48+EBP]
+ 1096 00000A03 FF 75 0C PUSH DWORD [12+EBP]
+ 1097 00000A06 50 PUSH EAX
+ 1098 00000A07 0F B7 42 1A MOVZX EAX,WORD [26+EDX]
+ 1099 00000A0B 50 PUSH EAX
+ 1100 00000A0C E8 [00000000] CALL _file_loadfile2
+ 1101 00000A11 83 C4 0C ADD ESP,12
+ 1102 00000A14 83 7D D0 23 CMP DWORD [-48+EBP],35
+ 1103 00000A18 89 45 CC MOV DWORD [-52+EBP],EAX
+ 1104 00000A1B 7E 1C JLE L210
+ 1105 00000A1D 89 C6 MOV ESI,EAX
+ 1106 00000A1F BF [0000007A] MOV EDI,LC12
+ 1107 00000A24 FC CLD
+ 1108 00000A25 83 C6 04 ADD ESI,4
+ 1109 00000A28 B9 00000004 MOV ECX,4
+ 1110 00000A2D F3 REPE
+ 1111 00000A2E A6 CMPSB
+ 1112 00000A2F 75 08 JNE L210
+ 1113 00000A31 8B 45 CC MOV EAX,DWORD [-52+EBP]
+ 1114 00000A34 80 38 00 CMP BYTE [EAX],0
+ 1115 00000A37 74 34 JE L238
+ 1116 00000A39 L210:
+ 1117 00000A39 68 [0000007F] PUSH LC13
+ 1118 00000A3E FF 75 08 PUSH DWORD [8+EBP]
+ 1119 00000A41 E8 FFFFFA82 CALL _cons_putstr0
+ 1120 00000A46 58 POP EAX
+ 1121 00000A47 5A POP EDX
+ 1122 00000A48 L228:
+ 1123 00000A48 FF 75 D0 PUSH DWORD [-48+EBP]
+ 1124 00000A4B FF 75 CC PUSH DWORD [-52+EBP]
+ 1125 00000A4E 68 003C0000 PUSH 3932160
+ 1126 00000A53 E8 [00000000] CALL _memman_free_4k
+ 1127 00000A58 FF 75 08 PUSH DWORD [8+EBP]
+ 1128 00000A5B E8 FFFFF980 CALL _cons_newline
+ 1129 00000A60 B8 00000001 MOV EAX,1
+ 1130 00000A65 L201:
+ 1131 00000A65 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 1132 00000A68 5B POP EBX
+ 1133 00000A69 5E POP ESI
+ 1134 00000A6A 5F POP EDI
+ 1135 00000A6B 5D POP EBP
+ 1136 00000A6C C3 RET
+ 1137 00000A6D L238:
+ 1138 00000A6D 8B 10 MOV EDX,DWORD [EAX]
+ 1139 00000A6F 8B 40 0C MOV EAX,DWORD [12+EAX]
+ 1140 00000A72 89 55 C4 MOV DWORD [-60+EBP],EDX
+ 1141 00000A75 89 45 C0 MOV DWORD [-64+EBP],EAX
+ 1142 00000A78 8B 55 CC MOV EDX,DWORD [-52+EBP]
+ 1143 00000A7B 8B 5A 10 MOV EBX,DWORD [16+EDX]
+ 1144 00000A7E 8B 72 14 MOV ESI,DWORD [20+EDX]
+ 1145 00000A81 FF 75 C4 PUSH DWORD [-60+EBP]
+ 1146 00000A84 68 003C0000 PUSH 3932160
+ 1147 00000A89 E8 [00000000] CALL _memman_alloc_4k
+ 1148 00000A8E 89 C7 MOV EDI,EAX
+ 1149 00000A90 8B 45 C8 MOV EAX,DWORD [-56+EBP]
+ 1150 00000A93 89 B8 000000A8 MOV DWORD [168+EAX],EDI
+ 1151 00000A99 8B 45 D0 MOV EAX,DWORD [-48+EBP]
+ 1152 00000A9C 68 000040FA PUSH 16634
+ 1153 00000AA1 48 DEC EAX
+ 1154 00000AA2 FF 75 CC PUSH DWORD [-52+EBP]
+ 1155 00000AA5 50 PUSH EAX
+ 1156 00000AA6 8B 45 C8 MOV EAX,DWORD [-56+EBP]
+ 1157 00000AA9 05 00000094 ADD EAX,148
+ 1158 00000AAE 50 PUSH EAX
+ 1159 00000AAF E8 [00000000] CALL _set_segmdesc
+ 1160 00000AB4 8B 45 C4 MOV EAX,DWORD [-60+EBP]
+ 1161 00000AB7 68 000040F2 PUSH 16626
+ 1162 00000ABC 48 DEC EAX
+ 1163 00000ABD 57 PUSH EDI
+ 1164 00000ABE 50 PUSH EAX
+ 1165 00000ABF 8B 45 C8 MOV EAX,DWORD [-56+EBP]
+ 1166 00000AC2 05 0000009C ADD EAX,156
+ 1167 00000AC7 50 PUSH EAX
+ 1168 00000AC8 E8 [00000000] CALL _set_segmdesc
+ 1169 00000ACD 83 C4 28 ADD ESP,40
+ 1170 00000AD0 85 DB TEST EBX,EBX
+ 1171 00000AD2 7E 16 JLE L231
+ 1172 00000AD4 8B 45 CC MOV EAX,DWORD [-52+EBP]
+ 1173 00000AD7 8B 4D C0 MOV ECX,DWORD [-64+EBP]
+ 1174 00000ADA 01 F9 ADD ECX,EDI
+ 1175 00000ADC 8D 14 30 LEA EDX,DWORD [EAX+ESI*1]
+ 1176 00000ADF 89 DE MOV ESI,EBX
+ 1177 00000AE1 L215:
+ 1178 00000AE1 8A 02 MOV AL,BYTE [EDX]
+ 1179 00000AE3 42 INC EDX
+ 1180 00000AE4 88 01 MOV BYTE [ECX],AL
+ 1181 00000AE6 41 INC ECX
+ 1182 00000AE7 4E DEC ESI
+ 1183 00000AE8 75 F7 JNE L215
+ 1184 00000AEA L231:
+ 1185 00000AEA 8B 45 C8 MOV EAX,DWORD [-56+EBP]
+ 1186 00000AED BE 000000FF MOV ESI,255
+ 1187 00000AF2 83 C0 30 ADD EAX,48
+ 1188 00000AF5 50 PUSH EAX
+ 1189 00000AF6 6A 0C PUSH 12
+ 1190 00000AF8 FF 75 C0 PUSH DWORD [-64+EBP]
+ 1191 00000AFB 6A 04 PUSH 4
+ 1192 00000AFD 6A 1B PUSH 27
+ 1193 00000AFF E8 [00000000] CALL _start_app
+ 1194 00000B04 8B 1D 00000FE4 MOV EBX,DWORD [4068]
+ 1195 00000B0A 83 C4 14 ADD ESP,20
+ 1196 00000B0D 81 C3 00000414 ADD EBX,1044
+ 1197 00000B13 L221:
+ 1198 00000B13 8B 43 1C MOV EAX,DWORD [28+EBX]
+ 1199 00000B16 83 E0 11 AND EAX,17
+ 1200 00000B19 83 F8 11 CMP EAX,17
+ 1201 00000B1C 74 7A JE L239
+ 1202 00000B1E L218:
+ 1203 00000B1E 83 C3 28 ADD EBX,40
+ 1204 00000B21 4E DEC ESI
+ 1205 00000B22 79 EF JNS L221
+ 1206 00000B24 31 DB XOR EBX,EBX
+ 1207 00000B26 BE 00000007 MOV ESI,7
+ 1208 00000B2B L227:
+ 1209 00000B2B 8B 55 C8 MOV EDX,DWORD [-56+EBP]
+ 1210 00000B2E 8B 82 000000B0 MOV EAX,DWORD [176+EDX]
+ 1211 00000B34 83 3C 18 00 CMP DWORD [EAX+EBX*1],0
+ 1212 00000B38 75 32 JNE L240
+ 1213 00000B3A L224:
+ 1214 00000B3A 83 C3 0C ADD EBX,12
+ 1215 00000B3D 4E DEC ESI
+ 1216 00000B3E 79 EB JNS L227
+ 1217 00000B40 8B 45 C8 MOV EAX,DWORD [-56+EBP]
+ 1218 00000B43 83 C0 10 ADD EAX,16
+ 1219 00000B46 50 PUSH EAX
+ 1220 00000B47 E8 [00000000] CALL _timer_cancelall
+ 1221 00000B4C FF 75 C4 PUSH DWORD [-60+EBP]
+ 1222 00000B4F 57 PUSH EDI
+ 1223 00000B50 68 003C0000 PUSH 3932160
+ 1224 00000B55 E8 [00000000] CALL _memman_free_4k
+ 1225 00000B5A 83 C4 10 ADD ESP,16
+ 1226 00000B5D 8B 45 C8 MOV EAX,DWORD [-56+EBP]
+ 1227 00000B60 C6 80 000000BD 00 MOV BYTE [189+EAX],0
+ 1228 00000B67 E9 FFFFFEDC JMP L228
+ 1229 00000B6C L240:
+ 1230 00000B6C FF 74 18 04 PUSH DWORD [4+EAX+EBX*1]
+ 1231 00000B70 8B 82 000000B0 MOV EAX,DWORD [176+EDX]
+ 1232 00000B76 FF 34 18 PUSH DWORD [EAX+EBX*1]
+ 1233 00000B79 68 003C0000 PUSH 3932160
+ 1234 00000B7E E8 [00000000] CALL _memman_free_4k
+ 1235 00000B83 83 C4 0C ADD ESP,12
+ 1236 00000B86 8B 55 C8 MOV EDX,DWORD [-56+EBP]
+ 1237 00000B89 8B 82 000000B0 MOV EAX,DWORD [176+EDX]
+ 1238 00000B8F C7 04 18 00000000 MOV DWORD [EAX+EBX*1],0
+ 1239 00000B96 EB A2 JMP L224
+ 1240 00000B98 L239:
+ 1241 00000B98 8B 55 C8 MOV EDX,DWORD [-56+EBP]
+ 1242 00000B9B 39 53 24 CMP DWORD [36+EBX],EDX
+ 1243 00000B9E 0F 85 FFFFFF7A JNE L218
+ 1244 00000BA4 53 PUSH EBX
+ 1245 00000BA5 E8 [00000000] CALL _sheet_free
+ 1246 00000BAA 59 POP ECX
+ 1247 00000BAB E9 FFFFFF6E JMP L218
+ 1248 00000BB0 L237:
+ 1249 00000BB0 80 7C 35 D3 2E CMP BYTE [-45+EBP+ESI*1],46
+ 1250 00000BB5 74 2E JE L208
+ 1251 00000BB7 68 000000E0 PUSH 224
+ 1252 00000BBC 68 00102600 PUSH 1058304
+ 1253 00000BC1 53 PUSH EBX
+ 1254 00000BC2 C6 44 35 D4 2E MOV BYTE [-44+EBP+ESI*1],46
+ 1255 00000BC7 C6 44 35 D5 48 MOV BYTE [-43+EBP+ESI*1],72
+ 1256 00000BCC C6 44 35 D6 52 MOV BYTE [-42+EBP+ESI*1],82
+ 1257 00000BD1 C6 44 35 D7 42 MOV BYTE [-41+EBP+ESI*1],66
+ 1258 00000BD6 C6 44 35 D8 00 MOV BYTE [-40+EBP+ESI*1],0
+ 1259 00000BDB E8 [00000000] CALL _file_search
+ 1260 00000BE0 83 C4 0C ADD ESP,12
+ 1261 00000BE3 89 C2 MOV EDX,EAX
+ 1262 00000BE5 L208:
+ 1263 00000BE5 85 D2 TEST EDX,EDX
+ 1264 00000BE7 0F 85 FFFFFE0D JNE L236
+ 1265 00000BED 31 C0 XOR EAX,EAX
+ 1266 00000BEF E9 FFFFFE71 JMP L201
+ 1267 00000BF4 GLOBAL _hrb_api
+ 1268 00000BF4 _hrb_api:
+ 1269 00000BF4 55 PUSH EBP
+ 1270 00000BF5 89 E5 MOV EBP,ESP
+ 1271 00000BF7 57 PUSH EDI
+ 1272 00000BF8 56 PUSH ESI
+ 1273 00000BF9 53 PUSH EBX
+ 1274 00000BFA 83 EC 14 SUB ESP,20
+ 1275 00000BFD 8B 75 1C MOV ESI,DWORD [28+EBP]
+ 1276 00000C00 E8 [00000000] CALL _task_now
+ 1277 00000C05 8B 0D 00000FE4 MOV ECX,DWORD [4068]
+ 1278 00000C0B 83 FE 01 CMP ESI,1
+ 1279 00000C0E 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 1280 00000C11 89 4D E8 MOV DWORD [-24+EBP],ECX
+ 1281 00000C14 8B 80 000000A8 MOV EAX,DWORD [168+EAX]
+ 1282 00000C1A 8B 55 F0 MOV EDX,DWORD [-16+EBP]
+ 1283 00000C1D 89 45 EC MOV DWORD [-20+EBP],EAX
+ 1284 00000C20 A1 00000FEC MOV EAX,DWORD [4076]
+ 1285 00000C25 8B 9A 000000A4 MOV EBX,DWORD [164+EDX]
+ 1286 00000C2B 89 45 E4 MOV DWORD [-28+EBP],EAX
+ 1287 00000C2E 0F 84 0000066C JE L355
+ 1288 00000C34 83 FE 02 CMP ESI,2
+ 1289 00000C37 0F 84 00000651 JE L356
+ 1290 00000C3D 83 FE 03 CMP ESI,3
+ 1291 00000C40 0F 84 00000633 JE L357
+ 1292 00000C46 83 FE 04 CMP ESI,4
+ 1293 00000C49 0F 84 0000061F JE L358
+ 1294 00000C4F 83 FE 05 CMP ESI,5
+ 1295 00000C52 0F 84 0000059B JE L359
+ 1296 00000C58 83 FE 06 CMP ESI,6
+ 1297 00000C5B 0F 84 00000546 JE L360
+ 1298 00000C61 83 FE 07 CMP ESI,7
+ 1299 00000C64 0F 84 00000507 JE L361
+ 1300 00000C6A 83 FE 08 CMP ESI,8
+ 1301 00000C6D 0F 84 000004DA JE L362
+ 1302 00000C73 83 FE 09 CMP ESI,9
+ 1303 00000C76 0F 84 000004B3 JE L363
+ 1304 00000C7C 83 FE 0A CMP ESI,10
+ 1305 00000C7F 0F 84 0000048C JE L364
+ 1306 00000C85 83 FE 0B CMP ESI,11
+ 1307 00000C88 0F 84 0000044C JE L365
+ 1308 00000C8E 83 FE 0C CMP ESI,12
+ 1309 00000C91 0F 84 00000432 JE L366
+ 1310 00000C97 83 FE 0D CMP ESI,13
+ 1311 00000C9A 0F 84 000003BE JE L367
+ 1312 00000CA0 83 FE 0E CMP ESI,14
+ 1313 00000CA3 0F 84 000003A8 JE L368
+ 1314 00000CA9 83 FE 0F CMP ESI,15
+ 1315 00000CAC 0F 84 000002B7 JE L277
+ 1316 00000CB2 83 FE 10 CMP ESI,16
+ 1317 00000CB5 0F 84 0000029D JE L369
+ 1318 00000CBB 83 FE 11 CMP ESI,17
+ 1319 00000CBE 0F 84 00000277 JE L370
+ 1320 00000CC4 83 FE 12 CMP ESI,18
+ 1321 00000CC7 0F 84 0000025C JE L371
+ 1322 00000CCD 83 FE 13 CMP ESI,19
+ 1323 00000CD0 0F 84 00000245 JE L372
+ 1324 00000CD6 83 FE 14 CMP ESI,20
+ 1325 00000CD9 0F 84 000001C9 JE L373
+ 1326 00000CDF 83 FE 15 CMP ESI,21
+ 1327 00000CE2 0F 84 0000013D JE L374
+ 1328 00000CE8 83 FE 16 CMP ESI,22
+ 1329 00000CEB 0F 84 00000114 JE L375
+ 1330 00000CF1 83 FE 17 CMP ESI,23
+ 1331 00000CF4 0F 84 000000BD JE L376
+ 1332 00000CFA 83 FE 18 CMP ESI,24
+ 1333 00000CFD 0F 84 00000083 JE L377
+ 1334 00000D03 83 FE 19 CMP ESI,25
+ 1335 00000D06 74 53 JE L378
+ 1336 00000D08 83 FE 1A CMP ESI,26
+ 1337 00000D0B 74 1E JE L379
+ 1338 00000D0D 83 FE 1B CMP ESI,27
+ 1339 00000D10 74 0A JE L380
+ 1340 00000D12 L243:
+ 1341 00000D12 31 C0 XOR EAX,EAX
+ 1342 00000D14 L241:
+ 1343 00000D14 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 1344 00000D17 5B POP EBX
+ 1345 00000D18 5E POP ESI
+ 1346 00000D19 5F POP EDI
+ 1347 00000D1A 5D POP EBP
+ 1348 00000D1B C3 RET
+ 1349 00000D1C L380:
+ 1350 00000D1C 8B 5D F0 MOV EBX,DWORD [-16+EBP]
+ 1351 00000D1F 0F B6 83 000000BC MOVZX EAX,BYTE [188+EBX]
+ 1352 00000D26 L348:
+ 1353 00000D26 89 45 44 MOV DWORD [68+EBP],EAX
+ 1354 00000D29 EB E7 JMP L243
+ 1355 00000D2B L379:
+ 1356 00000D2B 31 F6 XOR ESI,ESI
+ 1357 00000D2D L338:
+ 1358 00000D2D 8B 4D F0 MOV ECX,DWORD [-16+EBP]
+ 1359 00000D30 8B 55 18 MOV EDX,DWORD [24+EBP]
+ 1360 00000D33 03 55 EC ADD EDX,DWORD [-20+EBP]
+ 1361 00000D36 8B 81 000000B8 MOV EAX,DWORD [184+ECX]
+ 1362 00000D3C 8A 04 06 MOV AL,BYTE [ESI+EAX*1]
+ 1363 00000D3F 88 04 16 MOV BYTE [ESI+EDX*1],AL
+ 1364 00000D42 8B 81 000000B8 MOV EAX,DWORD [184+ECX]
+ 1365 00000D48 80 3C 06 00 CMP BYTE [ESI+EAX*1],0
+ 1366 00000D4C 74 08 JE L339
+ 1367 00000D4E 3B 75 20 CMP ESI,DWORD [32+EBP]
+ 1368 00000D51 7D 03 JGE L339
+ 1369 00000D53 46 INC ESI
+ 1370 00000D54 EB D7 JMP L338
+ 1371 00000D56 L339:
+ 1372 00000D56 89 75 44 MOV DWORD [68+EBP],ESI
+ 1373 00000D59 EB B7 JMP L243
+ 1374 00000D5B L378:
+ 1375 00000D5B 31 F6 XOR ESI,ESI
+ 1376 00000D5D 8B 5D 24 MOV EBX,DWORD [36+EBP]
+ 1377 00000D60 3B 75 20 CMP ESI,DWORD [32+EBP]
+ 1378 00000D63 7D F1 JGE L339
+ 1379 00000D65 L335:
+ 1380 00000D65 8B 4B 08 MOV ECX,DWORD [8+EBX]
+ 1381 00000D68 3B 4B 04 CMP ECX,DWORD [4+EBX]
+ 1382 00000D6B 74 E9 JE L339
+ 1383 00000D6D 8B 45 18 MOV EAX,DWORD [24+EBP]
+ 1384 00000D70 8B 13 MOV EDX,DWORD [EBX]
+ 1385 00000D72 03 45 EC ADD EAX,DWORD [-20+EBP]
+ 1386 00000D75 8A 14 11 MOV DL,BYTE [ECX+EDX*1]
+ 1387 00000D78 88 14 06 MOV BYTE [ESI+EAX*1],DL
+ 1388 00000D7B 46 INC ESI
+ 1389 00000D7C FF 43 08 INC DWORD [8+EBX]
+ 1390 00000D7F 3B 75 20 CMP ESI,DWORD [32+EBP]
+ 1391 00000D82 7C E1 JL L335
+ 1392 00000D84 EB D0 JMP L339
+ 1393 00000D86 L377:
+ 1394 00000D86 8B 5D 24 MOV EBX,DWORD [36+EBP]
+ 1395 00000D89 83 7D 20 00 CMP DWORD [32+EBP],0
+ 1396 00000D8D 75 05 JNE L323
+ 1397 00000D8F 8B 43 04 MOV EAX,DWORD [4+EBX]
+ 1398 00000D92 EB 92 JMP L348
+ 1399 00000D94 L323:
+ 1400 00000D94 83 7D 20 01 CMP DWORD [32+EBP],1
+ 1401 00000D98 74 15 JE L381
+ 1402 00000D9A 83 7D 20 02 CMP DWORD [32+EBP],2
+ 1403 00000D9E 0F 85 FFFFFF6E JNE L243
+ 1404 00000DA4 8B 43 08 MOV EAX,DWORD [8+EBX]
+ 1405 00000DA7 2B 43 04 SUB EAX,DWORD [4+EBX]
+ 1406 00000DAA E9 FFFFFF77 JMP L348
+ 1407 00000DAF L381:
+ 1408 00000DAF 8B 43 08 MOV EAX,DWORD [8+EBX]
+ 1409 00000DB2 E9 FFFFFF6F JMP L348
+ 1410 00000DB7 L376:
+ 1411 00000DB7 8B 5D 24 MOV EBX,DWORD [36+EBP]
+ 1412 00000DBA 83 7D 20 00 CMP DWORD [32+EBP],0
+ 1413 00000DBE 74 35 JE L347
+ 1414 00000DC0 83 7D 20 01 CMP DWORD [32+EBP],1
+ 1415 00000DC4 74 37 JE L382
+ 1416 00000DC6 83 7D 20 02 CMP DWORD [32+EBP],2
+ 1417 00000DCA 74 23 JE L383
+ 1418 00000DCC L315:
+ 1419 00000DCC 83 7B 08 00 CMP DWORD [8+EBX],0
+ 1420 00000DD0 78 14 JS L384
+ 1421 00000DD2 L319:
+ 1422 00000DD2 8B 43 04 MOV EAX,DWORD [4+EBX]
+ 1423 00000DD5 39 43 08 CMP DWORD [8+EBX],EAX
+ 1424 00000DD8 0F 8E FFFFFF34 JLE L243
+ 1425 00000DDE 89 43 08 MOV DWORD [8+EBX],EAX
+ 1426 00000DE1 E9 FFFFFF2C JMP L243
+ 1427 00000DE6 L384:
+ 1428 00000DE6 C7 43 08 00000000 MOV DWORD [8+EBX],0
+ 1429 00000DED EB E3 JMP L319
+ 1430 00000DEF L383:
+ 1431 00000DEF 8B 43 04 MOV EAX,DWORD [4+EBX]
+ 1432 00000DF2 01 45 18 ADD DWORD [24+EBP],EAX
+ 1433 00000DF5 L347:
+ 1434 00000DF5 8B 55 18 MOV EDX,DWORD [24+EBP]
+ 1435 00000DF8 89 53 08 MOV DWORD [8+EBX],EDX
+ 1436 00000DFB EB CF JMP L315
+ 1437 00000DFD L382:
+ 1438 00000DFD 8B 4D 18 MOV ECX,DWORD [24+EBP]
+ 1439 00000E00 01 4B 08 ADD DWORD [8+EBX],ECX
+ 1440 00000E03 EB C7 JMP L315
+ 1441 00000E05 L375:
+ 1442 00000E05 8B 5D 24 MOV EBX,DWORD [36+EBP]
+ 1443 00000E08 FF 73 04 PUSH DWORD [4+EBX]
+ 1444 00000E0B FF 33 PUSH DWORD [EBX]
+ 1445 00000E0D 68 003C0000 PUSH 3932160
+ 1446 00000E12 E8 [00000000] CALL _memman_free_4k
+ 1447 00000E17 C7 03 00000000 MOV DWORD [EBX],0
+ 1448 00000E1D L349:
+ 1449 00000E1D 83 C4 0C ADD ESP,12
+ 1450 00000E20 E9 FFFFFEED JMP L243
+ 1451 00000E25 L374:
+ 1452 00000E25 31 F6 XOR ESI,ESI
+ 1453 00000E27 31 C0 XOR EAX,EAX
+ 1454 00000E29 L307:
+ 1455 00000E29 8B 4D F0 MOV ECX,DWORD [-16+EBP]
+ 1456 00000E2C 8B 91 000000B0 MOV EDX,DWORD [176+ECX]
+ 1457 00000E32 83 3C 02 00 CMP DWORD [EDX+EAX*1],0
+ 1458 00000E36 74 09 JE L303
+ 1459 00000E38 46 INC ESI
+ 1460 00000E39 83 C0 0C ADD EAX,12
+ 1461 00000E3C 83 FE 07 CMP ESI,7
+ 1462 00000E3F 7E E8 JLE L307
+ 1463 00000E41 L303:
+ 1464 00000E41 6B C6 0C IMUL EAX,ESI,12
+ 1465 00000E44 C7 45 44 00000000 MOV DWORD [68+EBP],0
+ 1466 00000E4B 8D 1C 10 LEA EBX,DWORD [EAX+EDX*1]
+ 1467 00000E4E 83 FE 07 CMP ESI,7
+ 1468 00000E51 0F 8F FFFFFEBB JG L243
+ 1469 00000E57 8B 45 18 MOV EAX,DWORD [24+EBP]
+ 1470 00000E5A 68 000000E0 PUSH 224
+ 1471 00000E5F 03 45 EC ADD EAX,DWORD [-20+EBP]
+ 1472 00000E62 68 00102600 PUSH 1058304
+ 1473 00000E67 50 PUSH EAX
+ 1474 00000E68 E8 [00000000] CALL _file_search
+ 1475 00000E6D 83 C4 0C ADD ESP,12
+ 1476 00000E70 89 C2 MOV EDX,EAX
+ 1477 00000E72 85 C0 TEST EAX,EAX
+ 1478 00000E74 0F 84 FFFFFE98 JE L243
+ 1479 00000E7A 89 5D 44 MOV DWORD [68+EBP],EBX
+ 1480 00000E7D 8B 40 1C MOV EAX,DWORD [28+EAX]
+ 1481 00000E80 89 43 04 MOV DWORD [4+EBX],EAX
+ 1482 00000E83 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 1483 00000E86 C7 43 08 00000000 MOV DWORD [8+EBX],0
+ 1484 00000E8D FF B0 000000B4 PUSH DWORD [180+EAX]
+ 1485 00000E93 8D 43 04 LEA EAX,DWORD [4+EBX]
+ 1486 00000E96 50 PUSH EAX
+ 1487 00000E97 0F B7 42 1A MOVZX EAX,WORD [26+EDX]
+ 1488 00000E9B 50 PUSH EAX
+ 1489 00000E9C E8 [00000000] CALL _file_loadfile2
+ 1490 00000EA1 89 03 MOV DWORD [EBX],EAX
+ 1491 00000EA3 E9 FFFFFF75 JMP L349
+ 1492 00000EA8 L373:
+ 1493 00000EA8 8B 55 24 MOV EDX,DWORD [36+EBP]
+ 1494 00000EAB 85 D2 TEST EDX,EDX
+ 1495 00000EAD 75 19 JNE L298
+ 1496 00000EAF 6A 61 PUSH 97
+ 1497 00000EB1 E8 [00000000] CALL _io_in8
+ 1498 00000EB6 89 C6 MOV ESI,EAX
+ 1499 00000EB8 83 E6 0D AND ESI,13
+ 1500 00000EBB 56 PUSH ESI
+ 1501 00000EBC 6A 61 PUSH 97
+ 1502 00000EBE E8 [00000000] CALL _io_out8
+ 1503 00000EC3 E9 FFFFFF55 JMP L349
+ 1504 00000EC8 L298:
+ 1505 00000EC8 B9 471E7B60 MOV ECX,1193180000
+ 1506 00000ECD 89 D3 MOV EBX,EDX
+ 1507 00000ECF 89 C8 MOV EAX,ECX
+ 1508 00000ED1 68 000000B6 PUSH 182
+ 1509 00000ED6 99 CDQ
+ 1510 00000ED7 F7 FB IDIV EBX
+ 1511 00000ED9 6A 43 PUSH 67
+ 1512 00000EDB 89 C6 MOV ESI,EAX
+ 1513 00000EDD E8 [00000000] CALL _io_out8
+ 1514 00000EE2 89 F0 MOV EAX,ESI
+ 1515 00000EE4 C1 FE 08 SAR ESI,8
+ 1516 00000EE7 25 000000FF AND EAX,255
+ 1517 00000EEC 50 PUSH EAX
+ 1518 00000EED 6A 42 PUSH 66
+ 1519 00000EEF E8 [00000000] CALL _io_out8
+ 1520 00000EF4 56 PUSH ESI
+ 1521 00000EF5 6A 42 PUSH 66
+ 1522 00000EF7 E8 [00000000] CALL _io_out8
+ 1523 00000EFC 6A 61 PUSH 97
+ 1524 00000EFE E8 [00000000] CALL _io_in8
+ 1525 00000F03 89 C6 MOV ESI,EAX
+ 1526 00000F05 83 CE 03 OR ESI,3
+ 1527 00000F08 83 E6 0F AND ESI,15
+ 1528 00000F0B 56 PUSH ESI
+ 1529 00000F0C 6A 61 PUSH 97
+ 1530 00000F0E E8 [00000000] CALL _io_out8
+ 1531 00000F13 83 C4 24 ADD ESP,36
+ 1532 00000F16 E9 FFFFFDF7 JMP L243
+ 1533 00000F1B L372:
+ 1534 00000F1B FF 75 18 PUSH DWORD [24+EBP]
+ 1535 00000F1E E8 [00000000] CALL _timer_free
+ 1536 00000F23 L350:
+ 1537 00000F23 5B POP EBX
+ 1538 00000F24 E9 FFFFFDE9 JMP L243
+ 1539 00000F29 L371:
+ 1540 00000F29 FF 75 24 PUSH DWORD [36+EBP]
+ 1541 00000F2C FF 75 18 PUSH DWORD [24+EBP]
+ 1542 00000F2F E8 [00000000] CALL _timer_settime
+ 1543 00000F34 L352:
+ 1544 00000F34 5E POP ESI
+ 1545 00000F35 5F POP EDI
+ 1546 00000F36 E9 FFFFFDD7 JMP L243
+ 1547 00000F3B L370:
+ 1548 00000F3B 8B 45 24 MOV EAX,DWORD [36+EBP]
+ 1549 00000F3E 05 00000100 ADD EAX,256
+ 1550 00000F43 50 PUSH EAX
+ 1551 00000F44 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 1552 00000F47 83 C0 10 ADD EAX,16
+ 1553 00000F4A 50 PUSH EAX
+ 1554 00000F4B FF 75 18 PUSH DWORD [24+EBP]
+ 1555 00000F4E E8 [00000000] CALL _timer_init
+ 1556 00000F53 E9 FFFFFEC5 JMP L349
+ 1557 00000F58 L369:
+ 1558 00000F58 E8 [00000000] CALL _timer_alloc
+ 1559 00000F5D 89 45 44 MOV DWORD [68+EBP],EAX
+ 1560 00000F60 C6 40 09 01 MOV BYTE [9+EAX],1
+ 1561 00000F64 E9 FFFFFDA9 JMP L243
+ 1562 00000F69 L277:
+ 1563 00000F69 E8 [00000000] CALL _io_cli
+ 1564 00000F6E 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 1565 00000F71 83 C0 10 ADD EAX,16
+ 1566 00000F74 50 PUSH EAX
+ 1567 00000F75 E8 [00000000] CALL _fifo32_status
+ 1568 00000F7A 5A POP EDX
+ 1569 00000F7B 85 C0 TEST EAX,EAX
+ 1570 00000F7D 75 13 JNE L280
+ 1571 00000F7F 83 7D 24 00 CMP DWORD [36+EBP],0
+ 1572 00000F83 0F 84 000000B7 JE L281
+ 1573 00000F89 FF 75 F0 PUSH DWORD [-16+EBP]
+ 1574 00000F8C E8 [00000000] CALL _task_sleep
+ 1575 00000F91 58 POP EAX
+ 1576 00000F92 L280:
+ 1577 00000F92 8B 7D F0 MOV EDI,DWORD [-16+EBP]
+ 1578 00000F95 83 C7 10 ADD EDI,16
+ 1579 00000F98 57 PUSH EDI
+ 1580 00000F99 E8 [00000000] CALL _fifo32_get
+ 1581 00000F9E 89 C6 MOV ESI,EAX
+ 1582 00000FA0 E8 [00000000] CALL _io_sti
+ 1583 00000FA5 58 POP EAX
+ 1584 00000FA6 83 FE 01 CMP ESI,1
+ 1585 00000FA9 7E 73 JLE L385
+ 1586 00000FAB L283:
+ 1587 00000FAB 83 FE 02 CMP ESI,2
+ 1588 00000FAE 74 65 JE L386
+ 1589 00000FB0 L284:
+ 1590 00000FB0 83 FE 03 CMP ESI,3
+ 1591 00000FB3 74 57 JE L387
+ 1592 00000FB5 L285:
+ 1593 00000FB5 83 FE 04 CMP ESI,4
+ 1594 00000FB8 74 14 JE L388
+ 1595 00000FBA L286:
+ 1596 00000FBA 8D 86 FFFFFF00 LEA EAX,DWORD [-256+ESI]
+ 1597 00000FC0 81 FE 000000FF CMP ESI,255
+ 1598 00000FC6 0F 8F FFFFFD5A JG L348
+ 1599 00000FCC EB 9B JMP L277
+ 1600 00000FCE L388:
+ 1601 00000FCE FF 73 10 PUSH DWORD [16+EBX]
+ 1602 00000FD1 E8 [00000000] CALL _timer_cancel
+ 1603 00000FD6 E8 [00000000] CALL _io_cli
+ 1604 00000FDB 8B 03 MOV EAX,DWORD [EBX]
+ 1605 00000FDD 2B 45 E8 SUB EAX,DWORD [-24+EBP]
+ 1606 00000FE0 2D 00000414 SUB EAX,1044
+ 1607 00000FE5 C1 F8 03 SAR EAX,3
+ 1608 00000FE8 69 C0 CCCCCCCD IMUL EAX,EAX,-858993459
+ 1609 00000FEE 05 000007E8 ADD EAX,2024
+ 1610 00000FF3 50 PUSH EAX
+ 1611 00000FF4 FF 75 E4 PUSH DWORD [-28+EBP]
+ 1612 00000FF7 E8 [00000000] CALL _fifo32_put
+ 1613 00000FFC C7 03 00000000 MOV DWORD [EBX],0
+ 1614 00001002 E8 [00000000] CALL _io_sti
+ 1615 00001007 83 C4 0C ADD ESP,12
+ 1616 0000100A EB AE JMP L286
+ 1617 0000100C L387:
+ 1618 0000100C C7 43 0C FFFFFFFF MOV DWORD [12+EBX],-1
+ 1619 00001013 EB A0 JMP L285
+ 1620 00001015 L386:
+ 1621 00001015 C7 43 0C 00000007 MOV DWORD [12+EBX],7
+ 1622 0000101C EB 92 JMP L284
+ 1623 0000101E L385:
+ 1624 0000101E 83 3B 00 CMP DWORD [EBX],0
+ 1625 00001021 74 88 JE L283
+ 1626 00001023 6A 01 PUSH 1
+ 1627 00001025 57 PUSH EDI
+ 1628 00001026 FF 73 10 PUSH DWORD [16+EBX]
+ 1629 00001029 E8 [00000000] CALL _timer_init
+ 1630 0000102E 6A 32 PUSH 50
+ 1631 00001030 FF 73 10 PUSH DWORD [16+EBX]
+ 1632 00001033 E8 [00000000] CALL _timer_settime
+ 1633 00001038 83 C4 14 ADD ESP,20
+ 1634 0000103B E9 FFFFFF6B JMP L283
+ 1635 00001040 L281:
+ 1636 00001040 E8 [00000000] CALL _io_sti
+ 1637 00001045 C7 45 44 FFFFFFFF MOV DWORD [68+EBP],-1
+ 1638 0000104C E9 FFFFFCC1 JMP L243
+ 1639 00001051 L368:
+ 1640 00001051 FF 75 18 PUSH DWORD [24+EBP]
+ 1641 00001054 E8 [00000000] CALL _sheet_free
+ 1642 00001059 E9 FFFFFEC5 JMP L350
+ 1643 0000105E L367:
+ 1644 0000105E FF 75 10 PUSH DWORD [16+EBP]
+ 1645 00001061 FF 75 08 PUSH DWORD [8+EBP]
+ 1646 00001064 FF 75 0C PUSH DWORD [12+EBP]
+ 1647 00001067 FF 75 20 PUSH DWORD [32+EBP]
+ 1648 0000106A 8B 7D 18 MOV EDI,DWORD [24+EBP]
+ 1649 0000106D FF 75 24 PUSH DWORD [36+EBP]
+ 1650 00001070 83 E7 FE AND EDI,-2
+ 1651 00001073 57 PUSH EDI
+ 1652 00001074 E8 000002CB CALL _hrb_api_linewin
+ 1653 00001079 83 C4 18 ADD ESP,24
+ 1654 0000107C F7 45 18 00000001 TEST DWORD [24+EBP],1
+ 1655 00001083 0F 85 FFFFFC89 JNE L243
+ 1656 00001089 8B 45 24 MOV EAX,DWORD [36+EBP]
+ 1657 0000108C 3B 45 0C CMP EAX,DWORD [12+EBP]
+ 1658 0000108F 7E 09 JLE L271
+ 1659 00001091 8B 4D 0C MOV ECX,DWORD [12+EBP]
+ 1660 00001094 89 45 0C MOV DWORD [12+EBP],EAX
+ 1661 00001097 89 4D 24 MOV DWORD [36+EBP],ECX
+ 1662 0000109A L271:
+ 1663 0000109A 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 1664 0000109D 39 5D 20 CMP DWORD [32+EBP],EBX
+ 1665 000010A0 7E 09 JLE L272
+ 1666 000010A2 8B 75 20 MOV ESI,DWORD [32+EBP]
+ 1667 000010A5 89 5D 20 MOV DWORD [32+EBP],EBX
+ 1668 000010A8 89 75 08 MOV DWORD [8+EBP],ESI
+ 1669 000010AB L272:
+ 1670 000010AB 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 1671 000010AE 40 INC EAX
+ 1672 000010AF 50 PUSH EAX
+ 1673 000010B0 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 1674 000010B3 40 INC EAX
+ 1675 000010B4 50 PUSH EAX
+ 1676 000010B5 FF 75 20 PUSH DWORD [32+EBP]
+ 1677 000010B8 FF 75 24 PUSH DWORD [36+EBP]
+ 1678 000010BB L354:
+ 1679 000010BB 57 PUSH EDI
+ 1680 000010BC L351:
+ 1681 000010BC E8 [00000000] CALL _sheet_refresh
+ 1682 000010C1 L353:
+ 1683 000010C1 83 C4 14 ADD ESP,20
+ 1684 000010C4 E9 FFFFFC49 JMP L243
+ 1685 000010C9 L366:
+ 1686 000010C9 FF 75 08 PUSH DWORD [8+EBP]
+ 1687 000010CC FF 75 0C PUSH DWORD [12+EBP]
+ 1688 000010CF FF 75 20 PUSH DWORD [32+EBP]
+ 1689 000010D2 FF 75 24 PUSH DWORD [36+EBP]
+ 1690 000010D5 FF 75 18 PUSH DWORD [24+EBP]
+ 1691 000010D8 EB E2 JMP L351
+ 1692 000010DA L365:
+ 1693 000010DA 8B 7D 18 MOV EDI,DWORD [24+EBP]
+ 1694 000010DD 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 1695 000010E0 83 E7 FE AND EDI,-2
+ 1696 000010E3 8A 55 24 MOV DL,BYTE [36+EBP]
+ 1697 000010E6 0F AF 47 04 IMUL EAX,DWORD [4+EDI]
+ 1698 000010EA 03 45 0C ADD EAX,DWORD [12+EBP]
+ 1699 000010ED 8B 0F MOV ECX,DWORD [EDI]
+ 1700 000010EF 88 14 08 MOV BYTE [EAX+ECX*1],DL
+ 1701 000010F2 F7 45 18 00000001 TEST DWORD [24+EBP],1
+ 1702 000010F9 0F 85 FFFFFC13 JNE L243
+ 1703 000010FF 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 1704 00001102 40 INC EAX
+ 1705 00001103 50 PUSH EAX
+ 1706 00001104 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 1707 00001107 40 INC EAX
+ 1708 00001108 50 PUSH EAX
+ 1709 00001109 FF 75 08 PUSH DWORD [8+EBP]
+ 1710 0000110C FF 75 0C PUSH DWORD [12+EBP]
+ 1711 0000110F EB AA JMP L354
+ 1712 00001111 L364:
+ 1713 00001111 8B 45 20 MOV EAX,DWORD [32+EBP]
+ 1714 00001114 83 C0 0F ADD EAX,15
+ 1715 00001117 83 E0 F0 AND EAX,-16
+ 1716 0000111A 50 PUSH EAX
+ 1717 0000111B 8B 45 18 MOV EAX,DWORD [24+EBP]
+ 1718 0000111E 03 45 EC ADD EAX,DWORD [-20+EBP]
+ 1719 00001121 FF 75 24 PUSH DWORD [36+EBP]
+ 1720 00001124 50 PUSH EAX
+ 1721 00001125 E8 [00000000] CALL _memman_free
+ 1722 0000112A E9 FFFFFCEE JMP L349
+ 1723 0000112F L363:
+ 1724 0000112F 8B 45 20 MOV EAX,DWORD [32+EBP]
+ 1725 00001132 83 C0 0F ADD EAX,15
+ 1726 00001135 83 E0 F0 AND EAX,-16
+ 1727 00001138 50 PUSH EAX
+ 1728 00001139 8B 45 18 MOV EAX,DWORD [24+EBP]
+ 1729 0000113C 03 45 EC ADD EAX,DWORD [-20+EBP]
+ 1730 0000113F 50 PUSH EAX
+ 1731 00001140 E8 [00000000] CALL _memman_alloc
+ 1732 00001145 89 45 44 MOV DWORD [68+EBP],EAX
+ 1733 00001148 E9 FFFFFDE7 JMP L352
+ 1734 0000114D L362:
+ 1735 0000114D 8B 5D 18 MOV EBX,DWORD [24+EBP]
+ 1736 00001150 03 5D EC ADD EBX,DWORD [-20+EBP]
+ 1737 00001153 53 PUSH EBX
+ 1738 00001154 E8 [00000000] CALL _memman_init
+ 1739 00001159 83 65 20 F0 AND DWORD [32+EBP],-16
+ 1740 0000115D FF 75 20 PUSH DWORD [32+EBP]
+ 1741 00001160 FF 75 24 PUSH DWORD [36+EBP]
+ 1742 00001163 53 PUSH EBX
+ 1743 00001164 E8 [00000000] CALL _memman_free
+ 1744 00001169 83 C4 10 ADD ESP,16
+ 1745 0000116C E9 FFFFFBA1 JMP L243
+ 1746 00001171 L361:
+ 1747 00001171 FF 75 08 PUSH DWORD [8+EBP]
+ 1748 00001174 FF 75 0C PUSH DWORD [12+EBP]
+ 1749 00001177 FF 75 20 PUSH DWORD [32+EBP]
+ 1750 0000117A 8B 7D 18 MOV EDI,DWORD [24+EBP]
+ 1751 0000117D FF 75 24 PUSH DWORD [36+EBP]
+ 1752 00001180 83 E7 FE AND EDI,-2
+ 1753 00001183 0F B6 45 10 MOVZX EAX,BYTE [16+EBP]
+ 1754 00001187 50 PUSH EAX
+ 1755 00001188 FF 77 04 PUSH DWORD [4+EDI]
+ 1756 0000118B FF 37 PUSH DWORD [EDI]
+ 1757 0000118D E8 [00000000] CALL _boxfill8
+ 1758 00001192 83 C4 1C ADD ESP,28
+ 1759 00001195 F7 45 18 00000001 TEST DWORD [24+EBP],1
+ 1760 0000119C 0F 85 FFFFFB70 JNE L243
+ 1761 000011A2 E9 FFFFFF04 JMP L272
+ 1762 000011A7 L360:
+ 1763 000011A7 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 1764 000011AA 8B 7D 18 MOV EDI,DWORD [24+EBP]
+ 1765 000011AD 03 45 EC ADD EAX,DWORD [-20+EBP]
+ 1766 000011B0 83 E7 FE AND EDI,-2
+ 1767 000011B3 50 PUSH EAX
+ 1768 000011B4 0F BE 45 24 MOVSX EAX,BYTE [36+EBP]
+ 1769 000011B8 50 PUSH EAX
+ 1770 000011B9 FF 75 08 PUSH DWORD [8+EBP]
+ 1771 000011BC FF 75 0C PUSH DWORD [12+EBP]
+ 1772 000011BF FF 77 04 PUSH DWORD [4+EDI]
+ 1773 000011C2 FF 37 PUSH DWORD [EDI]
+ 1774 000011C4 E8 [00000000] CALL _putfonts8_asc
+ 1775 000011C9 83 C4 18 ADD ESP,24
+ 1776 000011CC F7 45 18 00000001 TEST DWORD [24+EBP],1
+ 1777 000011D3 0F 85 FFFFFB39 JNE L243
+ 1778 000011D9 8B 55 0C MOV EDX,DWORD [12+EBP]
+ 1779 000011DC 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 1780 000011DF 8B 5D 20 MOV EBX,DWORD [32+EBP]
+ 1781 000011E2 83 C0 10 ADD EAX,16
+ 1782 000011E5 50 PUSH EAX
+ 1783 000011E6 8D 04 DA LEA EAX,DWORD [EDX+EBX*8]
+ 1784 000011E9 50 PUSH EAX
+ 1785 000011EA FF 75 08 PUSH DWORD [8+EBP]
+ 1786 000011ED 52 PUSH EDX
+ 1787 000011EE E9 FFFFFEC8 JMP L354
+ 1788 000011F3 L359:
+ 1789 000011F3 FF 75 E8 PUSH DWORD [-24+EBP]
+ 1790 000011F6 E8 [00000000] CALL _sheet_alloc
+ 1791 000011FB 8B 5D 18 MOV EBX,DWORD [24+EBP]
+ 1792 000011FE 8B 55 F0 MOV EDX,DWORD [-16+EBP]
+ 1793 00001201 89 C7 MOV EDI,EAX
+ 1794 00001203 89 50 24 MOV DWORD [36+EAX],EDX
+ 1795 00001206 03 5D EC ADD EBX,DWORD [-20+EBP]
+ 1796 00001209 83 48 1C 10 OR DWORD [28+EAX],16
+ 1797 0000120D FF 75 24 PUSH DWORD [36+EBP]
+ 1798 00001210 FF 75 08 PUSH DWORD [8+EBP]
+ 1799 00001213 FF 75 0C PUSH DWORD [12+EBP]
+ 1800 00001216 53 PUSH EBX
+ 1801 00001217 50 PUSH EAX
+ 1802 00001218 E8 [00000000] CALL _sheet_setbuf
+ 1803 0000121D 8B 45 20 MOV EAX,DWORD [32+EBP]
+ 1804 00001220 03 45 EC ADD EAX,DWORD [-20+EBP]
+ 1805 00001223 6A 00 PUSH 0
+ 1806 00001225 50 PUSH EAX
+ 1807 00001226 FF 75 08 PUSH DWORD [8+EBP]
+ 1808 00001229 FF 75 0C PUSH DWORD [12+EBP]
+ 1809 0000122C 53 PUSH EBX
+ 1810 0000122D BB 00000002 MOV EBX,2
+ 1811 00001232 E8 [00000000] CALL _make_window8
+ 1812 00001237 8B 4D E8 MOV ECX,DWORD [-24+EBP]
+ 1813 0000123A 83 C4 2C ADD ESP,44
+ 1814 0000123D 8B 41 0C MOV EAX,DWORD [12+ECX]
+ 1815 00001240 2B 45 08 SUB EAX,DWORD [8+EBP]
+ 1816 00001243 99 CDQ
+ 1817 00001244 F7 FB IDIV EBX
+ 1818 00001246 50 PUSH EAX
+ 1819 00001247 8B 41 08 MOV EAX,DWORD [8+ECX]
+ 1820 0000124A 2B 45 0C SUB EAX,DWORD [12+EBP]
+ 1821 0000124D 99 CDQ
+ 1822 0000124E F7 FB IDIV EBX
+ 1823 00001250 83 E0 FC AND EAX,-4
+ 1824 00001253 50 PUSH EAX
+ 1825 00001254 57 PUSH EDI
+ 1826 00001255 E8 [00000000] CALL _sheet_slide
+ 1827 0000125A 8B 4D E8 MOV ECX,DWORD [-24+EBP]
+ 1828 0000125D FF 71 10 PUSH DWORD [16+ECX]
+ 1829 00001260 57 PUSH EDI
+ 1830 00001261 E8 [00000000] CALL _sheet_updown
+ 1831 00001266 89 7D 44 MOV DWORD [68+EBP],EDI
+ 1832 00001269 E9 FFFFFE53 JMP L353
+ 1833 0000126E L358:
+ 1834 0000126E 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 1835 00001271 83 C0 30 ADD EAX,48
+ 1836 00001274 E9 FFFFFA9B JMP L241
+ 1837 00001279 L357:
+ 1838 00001279 8B 45 18 MOV EAX,DWORD [24+EBP]
+ 1839 0000127C 03 45 EC ADD EAX,DWORD [-20+EBP]
+ 1840 0000127F FF 75 20 PUSH DWORD [32+EBP]
+ 1841 00001282 50 PUSH EAX
+ 1842 00001283 53 PUSH EBX
+ 1843 00001284 E8 FFFFF26D CALL _cons_putstr1
+ 1844 00001289 E9 FFFFFB8F JMP L349
+ 1845 0000128E L356:
+ 1846 0000128E 8B 45 18 MOV EAX,DWORD [24+EBP]
+ 1847 00001291 03 45 EC ADD EAX,DWORD [-20+EBP]
+ 1848 00001294 50 PUSH EAX
+ 1849 00001295 53 PUSH EBX
+ 1850 00001296 E8 FFFFF22D CALL _cons_putstr0
+ 1851 0000129B E9 FFFFFC94 JMP L352
+ 1852 000012A0 L355:
+ 1853 000012A0 6A 01 PUSH 1
+ 1854 000012A2 0F B6 45 24 MOVZX EAX,BYTE [36+EBP]
+ 1855 000012A6 50 PUSH EAX
+ 1856 000012A7 53 PUSH EBX
+ 1857 000012A8 E8 FFFFF082 CALL _cons_putchar
+ 1858 000012AD E9 FFFFFB6B JMP L349
+ 1859 [SECTION .data]
+ 1860 00000098 LC14:
+ 1861 00000098 0A 49 4E 54 20 30 43 20 3A 0A DB 0x0A,"INT 0C :",0x0A," Stack Exception.",0x0A,0x00
+ 000000A2 20 53 74 61 63 6B 20 45 78 63
+ 000000AC 65 70 74 69 6F 6E 2E 0A 00
+ 1862 000000B5 LC15:
+ 1863 000000B5 45 49 50 20 3D 20 25 30 38 58 DB "EIP = %08X",0x0A,0x00
+ 000000BF 0A 00
+ 1864 [SECTION .text]
+ 1865 000012B2 GLOBAL _inthandler0c
+ 1866 000012B2 _inthandler0c:
+ 1867 000012B2 55 PUSH EBP
+ 1868 000012B3 89 E5 MOV EBP,ESP
+ 1869 000012B5 57 PUSH EDI
+ 1870 000012B6 56 PUSH ESI
+ 1871 000012B7 53 PUSH EBX
+ 1872 000012B8 8D 5D D4 LEA EBX,DWORD [-44+EBP]
+ 1873 000012BB 83 EC 20 SUB ESP,32
+ 1874 000012BE E8 [00000000] CALL _task_now
+ 1875 000012C3 89 C6 MOV ESI,EAX
+ 1876 000012C5 8B B8 000000A4 MOV EDI,DWORD [164+EAX]
+ 1877 000012CB 83 C6 30 ADD ESI,48
+ 1878 000012CE 68 [00000098] PUSH LC14
+ 1879 000012D3 57 PUSH EDI
+ 1880 000012D4 E8 FFFFF1EF CALL _cons_putstr0
+ 1881 000012D9 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 1882 000012DC FF 70 2C PUSH DWORD [44+EAX]
+ 1883 000012DF 68 [000000B5] PUSH LC15
+ 1884 000012E4 53 PUSH EBX
+ 1885 000012E5 E8 [00000000] CALL _sprintf
+ 1886 000012EA 53 PUSH EBX
+ 1887 000012EB 57 PUSH EDI
+ 1888 000012EC E8 FFFFF1D7 CALL _cons_putstr0
+ 1889 000012F1 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 1890 000012F4 5B POP EBX
+ 1891 000012F5 89 F0 MOV EAX,ESI
+ 1892 000012F7 5E POP ESI
+ 1893 000012F8 5F POP EDI
+ 1894 000012F9 5D POP EBP
+ 1895 000012FA C3 RET
+ 1896 [SECTION .data]
+ 1897 000000C1 LC16:
+ 1898 000000C1 0A 49 4E 54 20 30 44 20 3A 0A DB 0x0A,"INT 0D :",0x0A," General Protected Exception.",0x0A,0x00
+ 000000CB 20 47 65 6E 65 72 61 6C 20 50
+ 000000D5 72 6F 74 65 63 74 65 64 20 45
+ 000000DF 78 63 65 70 74 69 6F 6E 2E 0A
+ 000000E9 00
+ 1899 [SECTION .text]
+ 1900 000012FB GLOBAL _inthandler0d
+ 1901 000012FB _inthandler0d:
+ 1902 000012FB 55 PUSH EBP
+ 1903 000012FC 89 E5 MOV EBP,ESP
+ 1904 000012FE 57 PUSH EDI
+ 1905 000012FF 56 PUSH ESI
+ 1906 00001300 53 PUSH EBX
+ 1907 00001301 8D 5D D4 LEA EBX,DWORD [-44+EBP]
+ 1908 00001304 83 EC 20 SUB ESP,32
+ 1909 00001307 E8 [00000000] CALL _task_now
+ 1910 0000130C 89 C6 MOV ESI,EAX
+ 1911 0000130E 8B B8 000000A4 MOV EDI,DWORD [164+EAX]
+ 1912 00001314 83 C6 30 ADD ESI,48
+ 1913 00001317 68 [000000C1] PUSH LC16
+ 1914 0000131C 57 PUSH EDI
+ 1915 0000131D E8 FFFFF1A6 CALL _cons_putstr0
+ 1916 00001322 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 1917 00001325 FF 70 2C PUSH DWORD [44+EAX]
+ 1918 00001328 68 [000000B5] PUSH LC15
+ 1919 0000132D 53 PUSH EBX
+ 1920 0000132E E8 [00000000] CALL _sprintf
+ 1921 00001333 53 PUSH EBX
+ 1922 00001334 57 PUSH EDI
+ 1923 00001335 E8 FFFFF18E CALL _cons_putstr0
+ 1924 0000133A 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 1925 0000133D 5B POP EBX
+ 1926 0000133E 89 F0 MOV EAX,ESI
+ 1927 00001340 5E POP ESI
+ 1928 00001341 5F POP EDI
+ 1929 00001342 5D POP EBP
+ 1930 00001343 C3 RET
+ 1931 00001344 GLOBAL _hrb_api_linewin
+ 1932 00001344 _hrb_api_linewin:
+ 1933 00001344 55 PUSH EBP
+ 1934 00001345 89 E5 MOV EBP,ESP
+ 1935 00001347 57 PUSH EDI
+ 1936 00001348 56 PUSH ESI
+ 1937 00001349 53 PUSH EBX
+ 1938 0000134A 83 EC 0C SUB ESP,12
+ 1939 0000134D 8B 5D 0C MOV EBX,DWORD [12+EBP]
+ 1940 00001350 8B 45 14 MOV EAX,DWORD [20+EBP]
+ 1941 00001353 89 D9 MOV ECX,EBX
+ 1942 00001355 8B 55 18 MOV EDX,DWORD [24+EBP]
+ 1943 00001358 C1 E1 0A SAL ECX,10
+ 1944 0000135B 89 D7 MOV EDI,EDX
+ 1945 0000135D 89 4D F0 MOV DWORD [-16+EBP],ECX
+ 1946 00001360 89 C6 MOV ESI,EAX
+ 1947 00001362 8B 4D 10 MOV ECX,DWORD [16+EBP]
+ 1948 00001365 2B 7D 10 SUB EDI,DWORD [16+EBP]
+ 1949 00001368 C1 E1 0A SAL ECX,10
+ 1950 0000136B 29 DE SUB ESI,EBX
+ 1951 0000136D 89 4D EC MOV DWORD [-20+EBP],ECX
+ 1952 00001370 0F 88 000000A3 JS L413
+ 1953 00001376 L392:
+ 1954 00001376 85 FF TEST EDI,EDI
+ 1955 00001378 0F 88 00000094 JS L414
+ 1956 0000137E L393:
+ 1957 0000137E 39 FE CMP ESI,EDI
+ 1958 00001380 7C 62 JL L394
+ 1959 00001382 8D 4E 01 LEA ECX,DWORD [1+ESI]
+ 1960 00001385 39 C3 CMP EBX,EAX
+ 1961 00001387 BE FFFFFC00 MOV ESI,-1024
+ 1962 0000138C 7F 05 JG L396
+ 1963 0000138E BE 00000400 MOV ESI,1024
+ 1964 00001393 L396:
+ 1965 00001393 39 55 10 CMP DWORD [16+EBP],EDX
+ 1966 00001396 7F 46 JG L397
+ 1967 00001398 2B 55 10 SUB EDX,DWORD [16+EBP]
+ 1968 0000139B 42 INC EDX
+ 1969 0000139C L412:
+ 1970 0000139C C1 E2 0A SAL EDX,10
+ 1971 0000139F 89 D0 MOV EAX,EDX
+ 1972 000013A1 99 CDQ
+ 1973 000013A2 F7 F9 IDIV ECX
+ 1974 000013A4 89 C7 MOV EDI,EAX
+ 1975 000013A6 L399:
+ 1976 000013A6 85 C9 TEST ECX,ECX
+ 1977 000013A8 7E 2C JLE L410
+ 1978 000013AA 89 CB MOV EBX,ECX
+ 1979 000013AC L408:
+ 1980 000013AC 8B 55 08 MOV EDX,DWORD [8+EBP]
+ 1981 000013AF 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 1982 000013B2 C1 F8 0A SAR EAX,10
+ 1983 000013B5 8B 4D F0 MOV ECX,DWORD [-16+EBP]
+ 1984 000013B8 0F AF 42 04 IMUL EAX,DWORD [4+EDX]
+ 1985 000013BC C1 F9 0A SAR ECX,10
+ 1986 000013BF 89 4D E8 MOV DWORD [-24+EBP],ECX
+ 1987 000013C2 8B 0A MOV ECX,DWORD [EDX]
+ 1988 000013C4 03 45 E8 ADD EAX,DWORD [-24+EBP]
+ 1989 000013C7 8A 55 1C MOV DL,BYTE [28+EBP]
+ 1990 000013CA 88 14 08 MOV BYTE [EAX+ECX*1],DL
+ 1991 000013CD 01 75 F0 ADD DWORD [-16+EBP],ESI
+ 1992 000013D0 01 7D EC ADD DWORD [-20+EBP],EDI
+ 1993 000013D3 4B DEC EBX
+ 1994 000013D4 75 D6 JNE L408
+ 1995 000013D6 L410:
+ 1996 000013D6 83 C4 0C ADD ESP,12
+ 1997 000013D9 5B POP EBX
+ 1998 000013DA 5E POP ESI
+ 1999 000013DB 5F POP EDI
+ 2000 000013DC 5D POP EBP
+ 2001 000013DD C3 RET
+ 2002 000013DE L397:
+ 2003 000013DE 2B 55 10 SUB EDX,DWORD [16+EBP]
+ 2004 000013E1 4A DEC EDX
+ 2005 000013E2 EB B8 JMP L412
+ 2006 000013E4 L394:
+ 2007 000013E4 8D 4F 01 LEA ECX,DWORD [1+EDI]
+ 2008 000013E7 39 55 10 CMP DWORD [16+EBP],EDX
+ 2009 000013EA BF FFFFFC00 MOV EDI,-1024
+ 2010 000013EF 7F 05 JG L401
+ 2011 000013F1 BF 00000400 MOV EDI,1024
+ 2012 000013F6 L401:
+ 2013 000013F6 39 C3 CMP EBX,EAX
+ 2014 000013F8 7F 11 JG L402
+ 2015 000013FA 29 D8 SUB EAX,EBX
+ 2016 000013FC 8D 50 01 LEA EDX,DWORD [1+EAX]
+ 2017 000013FF L411:
+ 2018 000013FF C1 E2 0A SAL EDX,10
+ 2019 00001402 89 D0 MOV EAX,EDX
+ 2020 00001404 99 CDQ
+ 2021 00001405 F7 F9 IDIV ECX
+ 2022 00001407 89 C6 MOV ESI,EAX
+ 2023 00001409 EB 9B JMP L399
+ 2024 0000140B L402:
+ 2025 0000140B 29 D8 SUB EAX,EBX
+ 2026 0000140D 8D 50 FF LEA EDX,DWORD [-1+EAX]
+ 2027 00001410 EB ED JMP L411
+ 2028 00001412 L414:
+ 2029 00001412 F7 DF NEG EDI
+ 2030 00001414 E9 FFFFFF65 JMP L393
+ 2031 00001419 L413:
+ 2032 00001419 F7 DE NEG ESI
+ 2033 0000141B E9 FFFFFF56 JMP L392
--- /dev/null
+#include "debug.h"
+#include "screen.h"
+#include <stdio.h>
+#include <stdarg.h>
+#include <exception>
+#include "MemMan.h"
+
+
+extern "C" void debugprint(const char *format,...){
+ int i;
+ va_list ap;
+
+ va_start(ap, format);
+ Screen::Inst().vprintf(format, ap);
+ va_end(ap);
+}
+
+extern "C" void hung(){
+ for(;;){}
+}
+
+void *operator new (size_t size) {
+ //debugprint("newed %d\n", size);
+ return MemMan::Inst().sys_malloc(size);
+}
+void *operator new[] (size_t size){
+ //debugprint("new[]ed %d\n", size);
+ return MemMan::Inst().sys_malloc(size);
+}
+
+void operator delete(void *p) throw(){
+ //debugprint("deleteed %p\n", p);
+ MemMan::Inst().sys_free(p);
+}
+
+void operator delete[](void *p) throw(){
+ //debugprint("delete[]ed %p\n", p);
+ MemMan::Inst().sys_free(p);
+}
+
+
+
+extern "C" {
+void __cxa_pure_virtual(){
+}
+
+void __cxa_end_catch(){
+}
+
+void __cxa_begin_catch(){
+}
+
+void __cxa_rethrow(){
+}
+void __cxa_call_unexpected(){}
+};
+
+namespace boost{
+ void throw_exception(std::exception const&){}
+};
--- /dev/null
+#pragma once
+
+extern "C"{
+void debugprint(const char *fotmat,...);
+void hung();
+};
+
+class placementdeleter {
+public:
+ placementdeleter(){
+ }
+ template <class T>
+ void operator ()(T *p){
+ p->~T();
+ }
+};
+
--- /dev/null
+/* GDT\82âIDT\82È\82Ç\82Ì\81A descriptor table \8aÖ\8cW */
+
+#include "bootpack.h"
+#include "desctable.h"
+#include "naskfunc.h"
+#include "screen.h"
+#include "debug.h"
+#include "processman.h"
+
+TSS32 tss_a;
+TSS32 tss_b;
+DWORD taska;
+DWORD taskb;
+char global_dt_buf[sizeof(GDT_IDT)];
+GDT_IDT *global_dt = (GDT_IDT *)global_dt_buf;
+
+void init_gdtidt(void)
+{
+ global_dt = new ((void *)global_dt_buf) GDT_IDT(NEW_GDT, NEW_IDT, LIMIT_GDT, LIMIT_IDT);
+
+ DWORD *pagedir = (DWORD *)SYSTEM_PAGE_DIRECTORY_PHY;
+ //debugprint("te2 %p\n", pagedir[SYSTEM_PAGE_FOR_PD >> 22]);
+ DWORD *pagedirent = &pagedir[SYSTEM_PAGE_FOR_DT >> 22];
+
+ *pagedirent = 0;//0xC0000000 -> 0x00000000 \82Ì4M\82Ì\83y\81[\83W\82ð\8dì\82é
+ *pagedirent |= ePAGE_DIR_ENT::PRESENT;
+ *pagedirent |= ePAGE_DIR_ENT::READ_WRITE;
+ *pagedirent |= ePAGE_DIR_ENT::PAGE_SIZE_4M;
+ *pagedirent |= ePAGE_DIR_ENT::GLOBAL;
+ *pagedirent |= ePAGE_DIR_ENT::ACCESS;
+ *pagedirent |= ePAGE_DIR_ENT::DIRTY;
+
+ tss_a.ldtr = 0;
+ tss_a.iomap = 0x40000000;
+ tss_a.cr3 = SYSTEM_PAGE_DIRECTORY_PHY;
+
+ tss_b.ldtr = 0;
+ tss_b.iomap = 0x40000000;
+ tss_b.fs = tss_b.ds = tss_b.es = tss_b.gs = tss_b.ss = 1 << 3;
+ tss_b.cs = 2 << 3;
+ tss_b.esp = 0xf00000;
+ tss_b.cr3 = SYSTEM_PAGE_DIRECTORY_PHY;
+ tss_b.eflags = 0x00000202;
+ //tss_b.eip = (DWORD)test;
+ tss_b.eax = tss_b.ecx = tss_b.edx = tss_b.edi = tss_b.esi = tss_b.ebp = tss_b.ebx = 0;
+
+ /* GDT\82Ì\8f\89\8aú\89» */
+ for (int i = 0; i < global_dt->getgdtcount(); i++) {
+ global_dt->set_segmdesc(i, 0, 0, 0);
+ }
+ int i = 1;
+ global_dt->set_segmdesc(i++, 0xffffffff, 0x00000000, AR_DATA32_RW);
+ global_dt->set_segmdesc(i++, 0xffffffff, 0x00000000, AR_CODE32_ER);
+ global_dt->set_segmdesc(i++, 0xffffffff, 0x00000000, AR_DATA32_RW | AR_DPL_3);
+ global_dt->set_segmdesc(i++, 0xffffffff, 0x00000000, AR_CODE32_ER | AR_DPL_3);
+
+ taska = i;
+ global_dt->set_segmdesc(i++, 103, (DWORD)&tss_a, AR_TSS32);
+ taskb = i;
+ global_dt->set_segmdesc(i++, 103, (DWORD)&tss_b, AR_TSS32);
+
+
+ /* IDT\82Ì\8f\89\8aú\89» */
+ for (int i = 0; i < global_dt->getidtcount(); i++) {
+ global_dt->set_gatedesc(i, 0, 0, 0);
+ }
+ /* IDT\82Ì\90Ý\92è */
+ global_dt->set_gatedesc(0x00, (DWORD) asm_inthandler00, 2 * 8, AR_INTGATE32);
+ global_dt->set_gatedesc(0x0a, (DWORD) asm_inthandler0a, 2 * 8, AR_INTGATE32);
+ global_dt->set_gatedesc(0x0b, (DWORD) asm_inthandler0b, 2 * 8, AR_INTGATE32);
+ global_dt->set_gatedesc(0x0c, (DWORD) asm_inthandler0c, 2 * 8, AR_INTGATE32);
+ global_dt->set_gatedesc(0x0d, (DWORD) asm_inthandler0d, 2 * 8, AR_INTGATE32);
+ global_dt->set_gatedesc(0x0e, (DWORD) asm_inthandler0e, 2 * 8, AR_INTGATE32);
+ global_dt->set_gatedesc(0x20, (DWORD) asm_inthandler20, 2 * 8, AR_INTGATE32);
+ //global_dt->set_gatedesc(0x21, (DWORD) asm_inthandler21, 2 * 8, AR_INTGATE32);
+ //global_dt->set_gatedesc(0x2c, (DWORD) asm_inthandler2c, 2 * 8, AR_INTGATE32);
+ //global_dt->set_gatedesc(0x40, (DWORD) asm_hrb_api, 2 * 8, AR_INTGATE32 + 0x60);
+ global_dt->load();
+ load_tr(taska << 3);
+
+
+ return;
+}
+
+void GDT_IDT::init_app_gdtidt(TSS32 *tss, TSS32 *systss){
+ /* GDT\82Ì\8f\89\8aú\89» */
+ for (int i = 0; i <= LIMIT_GDT / 8; i++) {
+ set_segmdesc(i, 0, 0, 0);
+ }
+ int i = 1;
+ set_segmdesc(i++, 0xffffffff, 0x00000000, AR_DATA32_RW);
+ set_segmdesc(i++, 0xffffffff, 0x00000000, AR_CODE32_ER);
+ set_segmdesc(i++, 0xffffffff, 0x00000000, AR_DATA32_RW | AR_DPL_3);
+ set_segmdesc(i++, 0xffffffff, 0x00000000, AR_CODE32_ER | AR_DPL_3);
+ tasktr = i;
+ set_segmdesc(i++, 103, (DWORD)tss, AR_TSS32 | AR_DPL_0);
+ systr = i;
+ set_segmdesc(i++, 103, (DWORD)systss, AR_TSS32 | AR_DPL_0);
+
+ for (int i = 0; i <= LIMIT_IDT / 8; i++) {
+ set_gatedesc(i, 0, 0, 0);
+ }
+ /*set_gatedesc(0x20, (DWORD) asm_inthandler20, 2 * 8, AR_INTGATE32);
+ set_gatedesc(0x00, (DWORD) asm_inthandler00, 2 * 8, AR_INTGATE32);
+ set_gatedesc(0x0a, (DWORD) asm_inthandler0a, 2 * 8, AR_INTGATE32);
+ set_gatedesc(0x0b, (DWORD) asm_inthandler0b, 2 * 8, AR_INTGATE32);
+ set_gatedesc(0x0c, (DWORD) asm_inthandler0c, 2 * 8, AR_INTGATE32);
+ set_gatedesc(0x0d, (DWORD) asm_inthandler0d, 2 * 8, AR_INTGATE32);
+ set_gatedesc(0x0e, (DWORD) asm_inthandler0e, 2 * 8, AR_INTGATE32);*/
+}
+
+
+GDT_IDT::GDT_IDT(DWORD gdtaddr, DWORD idtaddr, DWORD gdtlimit, DWORD idtlimit){
+ init(gdtaddr, idtaddr, gdtlimit, idtlimit);
+ ismine = false;
+}
+
+GDT_IDT::GDT_IDT(){
+ ismine = false;
+}
+
+GDT_IDT::~GDT_IDT(){
+}
+
+void GDT_IDT::init(DWORD gdtaddr, DWORD idtaddr, DWORD gdtlimit, DWORD idtlimit){
+ this->gdt = (SEGMENT_DESCRIPTOR *)gdtaddr;
+ this->idt = (GATE_DESCRIPTOR *)idtaddr;
+ this->gdtlimit = gdtlimit;
+ this->idtlimit = idtlimit;
+}
+
+void GDT_IDT::set_segmdesc(DWORD i, DWORD limit, DWORD base, DWORD ar)
+{
+ SEGMENT_DESCRIPTOR *sd = gdt + i;
+ if (limit > 0xfffff) {
+ ar |= 0x8000; /* G_bit = 1 */
+ limit /= 0x1000;
+ }
+ sd->limit_low = limit & 0xffff;
+ sd->base_low = base & 0xffff;
+ sd->base_mid = (base >> 16) & 0xff;
+ sd->access_right = ar & 0xff;
+ sd->limit_high = ((limit >> 16) & 0x0f) | ((ar >> 8) & 0xf0);
+ sd->base_high = (base >> 24) & 0xff;
+ return;
+}
+
+void GDT_IDT::set_gatedesc(DWORD i, DWORD offset, DWORD selector, DWORD ar)
+{
+ GATE_DESCRIPTOR *gd = idt + i;
+ gd->offset_low = offset & 0xffff;
+ gd->selector = selector;
+ gd->dw_count = (ar >> 8) & 0xff;
+ gd->access_right = ar & 0xff;
+ gd->offset_high = (offset >> 16) & 0xffff;
+ return;
+}
+
+void GDT_IDT::load(){
+ load_gdtr(gdtlimit, (DWORD)gdt);
+ load_idtr(idtlimit, (DWORD)idt);
+}
+
+DWORD GDT_IDT::getgdtcount()
+{
+ return (gdtlimit + 1) / sizeof(SEGMENT_DESCRIPTOR);
+}
+
+DWORD GDT_IDT::getidtcount()
+{
+ return (idtlimit + 1) / sizeof(GATE_DESCRIPTOR);
+}
+
+
+extern "C" void inthandler00(int *esp){
+ debugprint("inthandler00 div error \n");
+ for(;;){asm("hlt");}
+}
+
+extern "C" void inthandler21(int *esp){}
+extern "C" void inthandler2c(int *esp){}
+extern "C" void inthandler0a(int *esp){
+ debugprint("inthandler0a invalid tss\n");
+ for(;;){asm("hlt");}
+}
+extern "C" void inthandler0b(int *esp){
+ debugprint("inthandler0b \n");
+ for(;;){asm("hlt");}
+}
+extern "C" void inthandler0c(int *esp){
+ debugprint("inthandler0c \n");
+
+ for(;;){asm("hlt");}
+}
+extern "C" void inthandler0d(int *esp){
+ debugprint("inthandler0d generic protection exception\n");
+
+ for(;;){asm("hlt");}
+}
+
+extern "C" void inthandler0e(DWORD *esp){
+ debugprint("inthandler0e paging fault %p\n", *esp);
+ for(;;){asm("hlt");}
+ if(*esp & 1 == 0){
+ //P\83t\83\89\83O\82ª\83N\83\8a\83A\82³\82ê\82½\83Z\83O\83\81\83\93\83g\82Ö\82Ì\83A\83N\83Z\83X
+ }else{
+ //\83t\83H\83\8b\83g\82Ì\8c´\88ö\82ª\83y\81[\83W\83\8c\83x\83\8b\95Û\8cì\88á\94½\82Å\82 \82Á\82½\81B
+ }
+}
--- /dev/null
+#pragma once
+#include "typedefs.h"
+#include "naskfunc.h"
+
+#pragma pack(push, 1)
+struct SEGMENT_DESCRIPTOR {
+ WORD limit_low, base_low;
+ BYTE base_mid, access_right;
+ BYTE limit_high, base_high;
+};
+struct GATE_DESCRIPTOR {
+ WORD offset_low, selector;
+ BYTE dw_count, access_right;
+ WORD offset_high;
+};
+
+struct TSS32 {
+ DWORD backlink, esp0, ss0, esp1, ss1, esp2, ss2, cr3;
+ DWORD eip, eflags, eax, ecx, edx, ebx, esp, ebp, esi, edi;
+ DWORD es, cs, ss, ds, fs, gs;
+ DWORD ldtr, iomap;
+};
+#pragma pack(pop)
+
+
+
+class GDT_IDT{
+ SEGMENT_DESCRIPTOR *gdt;
+ GATE_DESCRIPTOR *idt;
+ DWORD gdtlimit;
+ DWORD idtlimit;
+ bool ismine;
+
+ DWORD tasktr;
+ DWORD systr;
+public:
+ GDT_IDT(DWORD gdtaddr, DWORD idtaddr, DWORD gdtlimit, DWORD idtlimit);
+ GDT_IDT();
+ ~GDT_IDT();
+
+ void init(DWORD gdtaddr, DWORD idtaddr, DWORD gdtlimit, DWORD idtlimit);
+
+ void set_segmdesc(DWORD i, DWORD limit, DWORD base, DWORD ar);
+ void set_gatedesc(DWORD i, DWORD offset, DWORD selector, DWORD ar);
+ DWORD getgdtcount();
+ DWORD getidtcount();
+ void load();
+
+ void init_app_gdtidt(TSS32 *tss, TSS32 *systss);
+
+ void load_systr(){
+ load_tr(systr << 3);
+ }
+ void load_tasktr(){
+ load_tr(tasktr << 3);
+ }
+ void jump_to_task(){
+ farjmp(0, tasktr << 3);
+ }
+};
+
+
+void init_gdtidt(void);
+
+const DWORD ADR_GDT = 0x00270000;
+const DWORD LIMIT_GDT = 0x000007ff;
+const DWORD ADR_IDT = 0x00270800;
+const DWORD LIMIT_IDT = 0x000007ff;
+
+const DWORD AR_DPL_0 = 0 << 5;
+const DWORD AR_DPL_1 = 1 << 5;
+const DWORD AR_DPL_2 = 2 << 5;
+const DWORD AR_DPL_3 = 3 << 5;
+
+#define AR_DATA32_RW 0x4092
+#define AR_CODE32_ER 0x409a
+#define AR_LDT 0x0082
+#define AR_TSS32 0x0089
+#define AR_INTGATE32 0x008e
+
+const DWORD SYSTEM_PAGE_DIRECTORY_PHY = 0x00100000;
+const DWORD SYSTEM_PAGE_FOR_DT = 0xC0000000;
+const DWORD NEW_GDT = SYSTEM_PAGE_FOR_DT + ADR_GDT;
+const DWORD NEW_IDT = SYSTEM_PAGE_FOR_DT + ADR_GDT + 0x800;
--- /dev/null
+#pragma once
+#include "typedefs.h"
+
+#pragma pack(push, 1)
+struct MBR_SECTOR{
+ BYTE code[0x1BE];
+ struct{
+ BYTE bootflag;
+ BYTE partition_begin_CHS[3];
+ BYTE type;
+ BYTE partition_end_CHS[3];
+ DWORD begin_lba;
+ DWORD size_lba;
+ }pt[4];
+ WORD magic;//0xAA55
+};
+
+struct FAT32_BOOTSECTOR
+{
+BYTE BS_jmpBoot[3]; // Jump Instruction to boot code
+char BS_OEMName[8]; // "MSWIN4.1" is recommended setting
+WORD BPB_BytsPerSec; // Count of bytes per Sector
+BYTE BPB_SecPerClus; // Number of Sectors per Allocation Unit which must be a power of 2
+WORD BPB_RsvdSecCnt; // Number of Reserved Sectors in the Reserved Region of the volume starting at the first sector of the volume
+BYTE BPB_NumFATs; // Count of FAT data structures on the volume
+WORD BPB_RootEntCnt; // Count of 32byte directory entries in the root directory for FAT12 and FAT16 volumes
+WORD BPB_TotSec16; // Old 16-bit total count of sectors on the volume
+BYTE BPB_Media; // 0xF8 for fixed media, 0xF0 for removable media
+WORD BPB_FATSz16; //@ FAT12/FAT16 16bit-count of sectors occupied by ONE FAT
+
+WORD BPB_SecPerTrk; // Sectors per Track for interrupt 0x13 (um... it is Wintel culture... x_x;)
+WORD BPB_NumHeads; // Number of Heads for interrupt 0x13 (um... it is Wintel culture... x_x;)
+DWORD BPB_HiddSec; // Count of Hidden Sectors preceding the partition that contains this FAT volume
+DWORD BPB_TotSec32; // New 32-bit total count of sectors on the volume
+// Following structure is prepared for FAT12 and FAT16 (not for FAT32)
+DWORD BPB_FATSz32; //@ FAT32 32bit-count of sectors occupied by ONE FAT\81©\82±\82±\82ð\92Ç\89Á
+WORD BPB_ExtFlags;
+WORD BPB_FSVer;
+DWORD BPB_RootClus;
+WORD BPB_FSInfo;
+WORD BPB_BkBootSec;
+BYTE BPB_Reserved[12];
+BYTE BS_DrvNum; // Int0x13 drive number (um... it is Wintel culture... x_x;)
+BYTE BS_Reserved1; // Reserved for WindowsNT (um... it is MS culture... x_x;)
+BYTE BS_BootSig; // Extended Boot Signature (0x29) which indicates following three fields in the boot sector are present
+DWORD BS_VolID; // Volume Serial Number
+BYTE BS_VolLab[11]; // Volume Label
+BYTE BS_FilSysType[8]; // Type of File System (it is no more than a hint)
+} ;
+
+
+
+struct DIRENT{
+ char DIR_Name[11];
+ BYTE DIR_Attr;
+ BYTE DIR_NTRes;
+ BYTE DIR_CrtTimeTenth;
+ WORD DIR_CrtTime;
+ WORD DIR_CrtDate;
+ WORD DIR_LstAccDate;
+ WORD DIR_FstClusHI;
+ WORD DIR_WrtTime;
+ WORD DIR_WrtDate;
+ WORD DIR_FstClusLO;
+ DWORD DIR_FileSize;
+
+ DWORD getfirstclus(){
+ return DIR_FstClusHI << 16 | DIR_FstClusLO;
+ }
+ void setfirstclus(DWORD clus){
+ DIR_FstClusHI = (clus & 0xffff0000) >> 16;
+ DIR_FstClusLO = clus & 0x0000ffff;
+ }
+};
+
+enum FAT_ATTR{
+ ATTR_READ_ONLY = 0x01,
+ ATTR_HIDDEN = 0x02,
+ ATTR_SYSTEM = 0x04,
+ ATTR_VOLUME_ID = 0x08,
+ ATTR_DIRECTORY = 0x10,
+ ATTR_ARCHIVE = 0x20,
+ ATTR_LONG_NAME = ATTR_READ_ONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID
+};
+
+#pragma pack(pop)
--- /dev/null
+/* FIFO\83\89\83C\83u\83\89\83\8a */
+
+#include "bootpack.h"
+
+#define FLAGS_OVERRUN 0x0001
+
+void fifo32_init(struct FIFO32 *fifo, int size, int *buf, struct TASK *task)
+/* FIFO\83o\83b\83t\83@\82Ì\8f\89\8aú\89» */
+{
+ fifo->size = size;
+ fifo->buf = buf;
+ fifo->free = size; /* \8bó\82« */
+ fifo->flags = 0;
+ fifo->p = 0; /* \8f\91\82«\8d\9e\82Ý\88Ê\92u */
+ fifo->q = 0; /* \93Ç\82Ý\8d\9e\82Ý\88Ê\92u */
+ fifo->task = task; /* \83f\81[\83^\82ª\93ü\82Á\82½\82Æ\82«\82É\8bN\82±\82·\83^\83X\83N */
+ return;
+}
+
+int fifo32_put(struct FIFO32 *fifo, int data)
+/* FIFO\82Ö\83f\81[\83^\82ð\91\97\82è\8d\9e\82ñ\82Å\92~\82¦\82é */
+{
+ if (fifo->free == 0) {
+ /* \8bó\82«\82ª\82È\82\82Ä\82 \82Ó\82ê\82½ */
+ fifo->flags |= FLAGS_OVERRUN;
+ return -1;
+ }
+ fifo->buf[fifo->p] = data;
+ fifo->p++;
+ if (fifo->p == fifo->size) {
+ fifo->p = 0;
+ }
+ fifo->free--;
+ if (fifo->task != 0) {
+ if (fifo->task->flags != 2) { /* \83^\83X\83N\82ª\90Q\82Ä\82¢\82½\82ç */
+ task_run(fifo->task, -1, 0); /* \8bN\82±\82µ\82Ä\82 \82°\82é */
+ }
+ }
+ return 0;
+}
+
+int fifo32_get(struct FIFO32 *fifo)
+/* FIFO\82©\82ç\83f\81[\83^\82ð\88ê\82Â\82Æ\82Á\82Ä\82\82é */
+{
+ int data;
+ if (fifo->free == fifo->size) {
+ /* \83o\83b\83t\83@\82ª\8bó\82Á\82Û\82Ì\82Æ\82«\82Í\81A\82Æ\82è\82 \82¦\82¸-1\82ª\95Ô\82³\82ê\82é */
+ return -1;
+ }
+ data = fifo->buf[fifo->q];
+ fifo->q++;
+ if (fifo->q == fifo->size) {
+ fifo->q = 0;
+ }
+ fifo->free++;
+ return data;
+}
+
+int fifo32_status(struct FIFO32 *fifo)
+/* \82Ç\82Ì\82\82ç\82¢\83f\81[\83^\82ª\97\82Ü\82Á\82Ä\82¢\82é\82©\82ð\95ñ\8d\90\82·\82é */
+{
+ return fifo->size - fifo->free;
+}
--- /dev/null
+ 1 00000000 [FORMAT "WCOFF"]
+ 2 00000000 [INSTRSET "i486p"]
+ 3 00000000 [OPTIMIZE 1]
+ 4 00000000 [OPTION 1]
+ 5 00000000 [BITS 32]
+ 6 00000000 EXTERN _task_run
+ 7 00000000 [FILE "fifo.c"]
+ 8 [SECTION .text]
+ 9 00000000 GLOBAL _fifo32_init
+ 10 00000000 _fifo32_init:
+ 11 00000000 55 PUSH EBP
+ 12 00000001 89 E5 MOV EBP,ESP
+ 13 00000003 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 14 00000006 8B 55 10 MOV EDX,DWORD [16+EBP]
+ 15 00000009 8B 4D 0C MOV ECX,DWORD [12+EBP]
+ 16 0000000C 89 10 MOV DWORD [EAX],EDX
+ 17 0000000E 89 48 0C MOV DWORD [12+EAX],ECX
+ 18 00000011 8B 55 14 MOV EDX,DWORD [20+EBP]
+ 19 00000014 89 48 10 MOV DWORD [16+EAX],ECX
+ 20 00000017 C7 40 14 00000000 MOV DWORD [20+EAX],0
+ 21 0000001E C7 40 04 00000000 MOV DWORD [4+EAX],0
+ 22 00000025 C7 40 08 00000000 MOV DWORD [8+EAX],0
+ 23 0000002C 89 50 18 MOV DWORD [24+EAX],EDX
+ 24 0000002F 5D POP EBP
+ 25 00000030 C3 RET
+ 26 00000031 GLOBAL _fifo32_put
+ 27 00000031 _fifo32_put:
+ 28 00000031 55 PUSH EBP
+ 29 00000032 89 E5 MOV EBP,ESP
+ 30 00000034 53 PUSH EBX
+ 31 00000035 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 32 00000038 83 7B 10 00 CMP DWORD [16+EBX],0
+ 33 0000003C 75 0C JNE L3
+ 34 0000003E 83 4B 14 01 OR DWORD [20+EBX],1
+ 35 00000042 83 C8 FF OR EAX,-1
+ 36 00000045 L2:
+ 37 00000045 8B 5D FC MOV EBX,DWORD [-4+EBP]
+ 38 00000048 C9 LEAVE
+ 39 00000049 C3 RET
+ 40 0000004A L3:
+ 41 0000004A 8B 4B 04 MOV ECX,DWORD [4+EBX]
+ 42 0000004D 8B 13 MOV EDX,DWORD [EBX]
+ 43 0000004F 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 44 00000052 89 04 8A MOV DWORD [EDX+ECX*4],EAX
+ 45 00000055 8B 43 04 MOV EAX,DWORD [4+EBX]
+ 46 00000058 40 INC EAX
+ 47 00000059 89 43 04 MOV DWORD [4+EBX],EAX
+ 48 0000005C 3B 43 0C CMP EAX,DWORD [12+EBX]
+ 49 0000005F 74 21 JE L7
+ 50 00000061 L4:
+ 51 00000061 8B 43 18 MOV EAX,DWORD [24+EBX]
+ 52 00000064 FF 4B 10 DEC DWORD [16+EBX]
+ 53 00000067 85 C0 TEST EAX,EAX
+ 54 00000069 74 13 JE L5
+ 55 0000006B 83 78 04 02 CMP DWORD [4+EAX],2
+ 56 0000006F 74 0D JE L5
+ 57 00000071 6A 00 PUSH 0
+ 58 00000073 6A FF PUSH -1
+ 59 00000075 50 PUSH EAX
+ 60 00000076 E8 [00000000] CALL _task_run
+ 61 0000007B 83 C4 0C ADD ESP,12
+ 62 0000007E L5:
+ 63 0000007E 31 C0 XOR EAX,EAX
+ 64 00000080 EB C3 JMP L2
+ 65 00000082 L7:
+ 66 00000082 C7 43 04 00000000 MOV DWORD [4+EBX],0
+ 67 00000089 EB D6 JMP L4
+ 68 0000008B GLOBAL _fifo32_get
+ 69 0000008B _fifo32_get:
+ 70 0000008B 55 PUSH EBP
+ 71 0000008C 83 C8 FF OR EAX,-1
+ 72 0000008F 89 E5 MOV EBP,ESP
+ 73 00000091 56 PUSH ESI
+ 74 00000092 53 PUSH EBX
+ 75 00000093 8B 4D 08 MOV ECX,DWORD [8+EBP]
+ 76 00000096 8B 71 10 MOV ESI,DWORD [16+ECX]
+ 77 00000099 8B 59 0C MOV EBX,DWORD [12+ECX]
+ 78 0000009C 39 DE CMP ESI,EBX
+ 79 0000009E 74 18 JE L8
+ 80 000000A0 8B 41 08 MOV EAX,DWORD [8+ECX]
+ 81 000000A3 8B 11 MOV EDX,DWORD [ECX]
+ 82 000000A5 8B 14 82 MOV EDX,DWORD [EDX+EAX*4]
+ 83 000000A8 40 INC EAX
+ 84 000000A9 89 41 08 MOV DWORD [8+ECX],EAX
+ 85 000000AC 39 D8 CMP EAX,EBX
+ 86 000000AE 74 0C JE L11
+ 87 000000B0 L10:
+ 88 000000B0 8D 46 01 LEA EAX,DWORD [1+ESI]
+ 89 000000B3 89 41 10 MOV DWORD [16+ECX],EAX
+ 90 000000B6 89 D0 MOV EAX,EDX
+ 91 000000B8 L8:
+ 92 000000B8 5B POP EBX
+ 93 000000B9 5E POP ESI
+ 94 000000BA 5D POP EBP
+ 95 000000BB C3 RET
+ 96 000000BC L11:
+ 97 000000BC C7 41 08 00000000 MOV DWORD [8+ECX],0
+ 98 000000C3 EB EB JMP L10
+ 99 000000C5 GLOBAL _fifo32_status
+ 100 000000C5 _fifo32_status:
+ 101 000000C5 55 PUSH EBP
+ 102 000000C6 89 E5 MOV EBP,ESP
+ 103 000000C8 8B 55 08 MOV EDX,DWORD [8+EBP]
+ 104 000000CB 5D POP EBP
+ 105 000000CC 8B 42 0C MOV EAX,DWORD [12+EDX]
+ 106 000000CF 2B 42 10 SUB EAX,DWORD [16+EDX]
+ 107 000000D2 C3 RET
--- /dev/null
+/* \83t\83@\83C\83\8b\8aÖ\8cW */
+
+#include "bootpack.h"
+
+void file_readfat(int *fat, unsigned char *img)
+/* \83f\83B\83X\83N\83C\83\81\81[\83W\93à\82ÌFAT\82Ì\88³\8fk\82ð\82Æ\82 */
+{
+ int i, j = 0;
+ for (i = 0; i < 2880; i += 2) {
+ fat[i + 0] = (img[j + 0] | img[j + 1] << 8) & 0xfff;
+ fat[i + 1] = (img[j + 1] >> 4 | img[j + 2] << 4) & 0xfff;
+ j += 3;
+ }
+ return;
+}
+
+void file_loadfile(int clustno, int size, char *buf, int *fat, char *img)
+{
+ int i;
+ for (;;) {
+ if (size <= 512) {
+ for (i = 0; i < size; i++) {
+ buf[i] = img[clustno * 512 + i];
+ }
+ break;
+ }
+ for (i = 0; i < 512; i++) {
+ buf[i] = img[clustno * 512 + i];
+ }
+ size -= 512;
+ buf += 512;
+ clustno = fat[clustno];
+ }
+ return;
+}
+
+struct FILEINFO *file_search(char *name, struct FILEINFO *finfo, int max)
+{
+ int i, j;
+ char s[12];
+ for (j = 0; j < 11; j++) {
+ s[j] = ' ';
+ }
+ j = 0;
+ for (i = 0; name[i] != 0; i++) {
+ if (j >= 11) { return 0; /* \8c©\82Â\82©\82ç\82È\82©\82Á\82½ */ }
+ if (name[i] == '.' && j <= 8) {
+ j = 8;
+ } else {
+ s[j] = name[i];
+ if ('a' <= s[j] && s[j] <= 'z') {
+ /* \8f¬\95¶\8e\9a\82Í\91å\95¶\8e\9a\82É\92¼\82· */
+ s[j] -= 0x20;
+ }
+ j++;
+ }
+ }
+ for (i = 0; i < max; ) {
+ if (finfo->name[0] == 0x00) {
+ break;
+ }
+ if ((finfo[i].type & 0x18) == 0) {
+ for (j = 0; j < 11; j++) {
+ if (finfo[i].name[j] != s[j]) {
+ goto next;
+ }
+ }
+ return finfo + i; /* \83t\83@\83C\83\8b\82ª\8c©\82Â\82©\82Á\82½ */
+ }
+next:
+ i++;
+ }
+ return 0; /* \8c©\82Â\82©\82ç\82È\82©\82Á\82½ */
+}
+
+char *file_loadfile2(int clustno, int *psize, int *fat)
+{
+ int size = *psize, size2;
+ struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR;
+ char *buf, *buf2;
+ buf = (char *) memman_alloc_4k(memman, size);
+ file_loadfile(clustno, size, buf, fat, (char *) (ADR_DISKIMG + 0x003e00));
+ if (size >= 17) {
+ size2 = tek_getsize(buf);
+ if (size2 > 0) { /* tek\88³\8fk\82ª\82©\82©\82Á\82Ä\82¢\82½ */
+ buf2 = (char *) memman_alloc_4k(memman, size2);
+ tek_decomp(buf, buf2, size2);
+ memman_free_4k(memman, (int) buf, size);
+ buf = buf2;
+ *psize = size2;
+ }
+ }
+ return buf;
+}
--- /dev/null
+ 1 00000000 [FORMAT "WCOFF"]
+ 2 00000000 [INSTRSET "i486p"]
+ 3 00000000 [OPTIMIZE 1]
+ 4 00000000 [OPTION 1]
+ 5 00000000 [BITS 32]
+ 6 00000000 EXTERN _memman_alloc_4k
+ 7 00000000 EXTERN _tek_getsize
+ 8 00000000 EXTERN _tek_decomp
+ 9 00000000 EXTERN _memman_free_4k
+ 10 00000000 [FILE "file.c"]
+ 11 [SECTION .text]
+ 12 00000000 GLOBAL _file_readfat
+ 13 00000000 _file_readfat:
+ 14 00000000 55 PUSH EBP
+ 15 00000001 31 C9 XOR ECX,ECX
+ 16 00000003 89 E5 MOV EBP,ESP
+ 17 00000005 57 PUSH EDI
+ 18 00000006 56 PUSH ESI
+ 19 00000007 53 PUSH EBX
+ 20 00000008 8B 7D 08 MOV EDI,DWORD [8+EBP]
+ 21 0000000B 8B 75 0C MOV ESI,DWORD [12+EBP]
+ 22 0000000E 31 DB XOR EBX,EBX
+ 23 00000010 L6:
+ 24 00000010 0F B6 44 31 01 MOVZX EAX,BYTE [1+ECX+ESI*1]
+ 25 00000015 0F B6 14 31 MOVZX EDX,BYTE [ECX+ESI*1]
+ 26 00000019 C1 E0 08 SAL EAX,8
+ 27 0000001C 09 C2 OR EDX,EAX
+ 28 0000001E 81 E2 00000FFF AND EDX,4095
+ 29 00000024 89 14 9F MOV DWORD [EDI+EBX*4],EDX
+ 30 00000027 8A 44 31 01 MOV AL,BYTE [1+ECX+ESI*1]
+ 31 0000002B 0F B6 54 31 02 MOVZX EDX,BYTE [2+ECX+ESI*1]
+ 32 00000030 C0 E8 04 SHR AL,4
+ 33 00000033 83 C1 03 ADD ECX,3
+ 34 00000036 C1 E2 04 SAL EDX,4
+ 35 00000039 0F B6 C0 MOVZX EAX,AL
+ 36 0000003C 09 D0 OR EAX,EDX
+ 37 0000003E 89 44 9F 04 MOV DWORD [4+EDI+EBX*4],EAX
+ 38 00000042 83 C3 02 ADD EBX,2
+ 39 00000045 81 FB 00000B3F CMP EBX,2879
+ 40 0000004B 7E C3 JLE L6
+ 41 0000004D 5B POP EBX
+ 42 0000004E 5E POP ESI
+ 43 0000004F 5F POP EDI
+ 44 00000050 5D POP EBP
+ 45 00000051 C3 RET
+ 46 00000052 GLOBAL _file_loadfile
+ 47 00000052 _file_loadfile:
+ 48 00000052 55 PUSH EBP
+ 49 00000053 89 E5 MOV EBP,ESP
+ 50 00000055 57 PUSH EDI
+ 51 00000056 56 PUSH ESI
+ 52 00000057 53 PUSH EBX
+ 53 00000058 8B 4D 0C MOV ECX,DWORD [12+EBP]
+ 54 0000005B 8B 75 08 MOV ESI,DWORD [8+EBP]
+ 55 0000005E 8B 5D 10 MOV EBX,DWORD [16+EBP]
+ 56 00000061 L10:
+ 57 00000061 81 F9 00000200 CMP ECX,512
+ 58 00000067 7E 2F JLE L27
+ 59 00000069 31 D2 XOR EDX,EDX
+ 60 0000006B L23:
+ 61 0000006B 89 F0 MOV EAX,ESI
+ 62 0000006D 8B 7D 18 MOV EDI,DWORD [24+EBP]
+ 63 00000070 C1 E0 09 SAL EAX,9
+ 64 00000073 01 D0 ADD EAX,EDX
+ 65 00000075 8A 04 38 MOV AL,BYTE [EAX+EDI*1]
+ 66 00000078 88 04 1A MOV BYTE [EDX+EBX*1],AL
+ 67 0000007B 42 INC EDX
+ 68 0000007C 81 FA 000001FF CMP EDX,511
+ 69 00000082 7E E7 JLE L23
+ 70 00000084 8B 45 14 MOV EAX,DWORD [20+EBP]
+ 71 00000087 81 E9 00000200 SUB ECX,512
+ 72 0000008D 81 C3 00000200 ADD EBX,512
+ 73 00000093 8B 34 B0 MOV ESI,DWORD [EAX+ESI*4]
+ 74 00000096 EB C9 JMP L10
+ 75 00000098 L27:
+ 76 00000098 31 D2 XOR EDX,EDX
+ 77 0000009A 39 CA CMP EDX,ECX
+ 78 0000009C 7D 15 JGE L9
+ 79 0000009E L18:
+ 80 0000009E 89 F0 MOV EAX,ESI
+ 81 000000A0 8B 7D 18 MOV EDI,DWORD [24+EBP]
+ 82 000000A3 C1 E0 09 SAL EAX,9
+ 83 000000A6 01 D0 ADD EAX,EDX
+ 84 000000A8 8A 04 38 MOV AL,BYTE [EAX+EDI*1]
+ 85 000000AB 88 04 1A MOV BYTE [EDX+EBX*1],AL
+ 86 000000AE 42 INC EDX
+ 87 000000AF 39 CA CMP EDX,ECX
+ 88 000000B1 7C EB JL L18
+ 89 000000B3 L9:
+ 90 000000B3 5B POP EBX
+ 91 000000B4 5E POP ESI
+ 92 000000B5 5F POP EDI
+ 93 000000B6 5D POP EBP
+ 94 000000B7 C3 RET
+ 95 000000B8 GLOBAL _file_search
+ 96 000000B8 _file_search:
+ 97 000000B8 55 PUSH EBP
+ 98 000000B9 31 C9 XOR ECX,ECX
+ 99 000000BB 89 E5 MOV EBP,ESP
+ 100 000000BD 57 PUSH EDI
+ 101 000000BE 56 PUSH ESI
+ 102 000000BF 53 PUSH EBX
+ 103 000000C0 83 EC 14 SUB ESP,20
+ 104 000000C3 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 105 000000C6 L33:
+ 106 000000C6 C6 44 0D E4 20 MOV BYTE [-28+EBP+ECX*1],32
+ 107 000000CB 41 INC ECX
+ 108 000000CC 83 F9 0A CMP ECX,10
+ 109 000000CF 7E F5 JLE L33
+ 110 000000D1 31 C9 XOR ECX,ECX
+ 111 000000D3 31 FF XOR EDI,EDI
+ 112 000000D5 80 3B 00 CMP BYTE [EBX],0
+ 113 000000D8 74 29 JE L60
+ 114 000000DA L42:
+ 115 000000DA 31 C0 XOR EAX,EAX
+ 116 000000DC 83 F9 0A CMP ECX,10
+ 117 000000DF 7F 5D JG L28
+ 118 000000E1 8A 14 1F MOV DL,BYTE [EDI+EBX*1]
+ 119 000000E4 80 FA 2E CMP DL,46
+ 120 000000E7 74 6E JE L64
+ 121 000000E9 L39:
+ 122 000000E9 8D 42 9F LEA EAX,DWORD [-97+EDX]
+ 123 000000EC 88 54 0D E4 MOV BYTE [-28+EBP+ECX*1],DL
+ 124 000000F0 3C 19 CMP AL,25
+ 125 000000F2 77 07 JA L41
+ 126 000000F4 8D 42 E0 LEA EAX,DWORD [-32+EDX]
+ 127 000000F7 88 44 0D E4 MOV BYTE [-28+EBP+ECX*1],AL
+ 128 000000FB L41:
+ 129 000000FB 41 INC ECX
+ 130 000000FC L36:
+ 131 000000FC 47 INC EDI
+ 132 000000FD 80 3C 1F 00 CMP BYTE [EDI+EBX*1],0
+ 133 00000101 75 D7 JNE L42
+ 134 00000103 L60:
+ 135 00000103 31 FF XOR EDI,EDI
+ 136 00000105 3B 7D 10 CMP EDI,DWORD [16+EBP]
+ 137 00000108 7D 49 JGE L44
+ 138 0000010A 8B 75 0C MOV ESI,DWORD [12+EBP]
+ 139 0000010D C7 45 E0 00000000 MOV DWORD [-32+EBP],0
+ 140 00000114 L56:
+ 141 00000114 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 142 00000117 80 38 00 CMP BYTE [EAX],0
+ 143 0000011A 74 37 JE L44
+ 144 0000011C F6 46 0B 18 TEST BYTE [11+ESI],24
+ 145 00000120 75 24 JNE L54
+ 146 00000122 89 C3 MOV EBX,EAX
+ 147 00000124 31 C9 XOR ECX,ECX
+ 148 00000126 03 5D E0 ADD EBX,DWORD [-32+EBP]
+ 149 00000129 L55:
+ 150 00000129 0F B6 13 MOVZX EDX,BYTE [EBX]
+ 151 0000012C 0F BE 44 0D E4 MOVSX EAX,BYTE [-28+EBP+ECX*1]
+ 152 00000131 39 C2 CMP EDX,EAX
+ 153 00000133 75 11 JNE L54
+ 154 00000135 41 INC ECX
+ 155 00000136 43 INC EBX
+ 156 00000137 89 F0 MOV EAX,ESI
+ 157 00000139 83 F9 0A CMP ECX,10
+ 158 0000013C 7E EB JLE L55
+ 159 0000013E L28:
+ 160 0000013E 83 C4 14 ADD ESP,20
+ 161 00000141 5B POP EBX
+ 162 00000142 5E POP ESI
+ 163 00000143 5F POP EDI
+ 164 00000144 5D POP EBP
+ 165 00000145 C3 RET
+ 166 00000146 L54:
+ 167 00000146 47 INC EDI
+ 168 00000147 83 C6 20 ADD ESI,32
+ 169 0000014A 83 45 E0 20 ADD DWORD [-32+EBP],32
+ 170 0000014E 3B 7D 10 CMP EDI,DWORD [16+EBP]
+ 171 00000151 7C C1 JL L56
+ 172 00000153 L44:
+ 173 00000153 31 C0 XOR EAX,EAX
+ 174 00000155 EB E7 JMP L28
+ 175 00000157 L64:
+ 176 00000157 83 F9 08 CMP ECX,8
+ 177 0000015A 7F 8D JG L39
+ 178 0000015C B9 00000008 MOV ECX,8
+ 179 00000161 EB 99 JMP L36
+ 180 00000163 GLOBAL _file_loadfile2
+ 181 00000163 _file_loadfile2:
+ 182 00000163 55 PUSH EBP
+ 183 00000164 89 E5 MOV EBP,ESP
+ 184 00000166 57 PUSH EDI
+ 185 00000167 56 PUSH ESI
+ 186 00000168 53 PUSH EBX
+ 187 00000169 52 PUSH EDX
+ 188 0000016A 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 189 0000016D 8B 00 MOV EAX,DWORD [EAX]
+ 190 0000016F 50 PUSH EAX
+ 191 00000170 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 192 00000173 68 003C0000 PUSH 3932160
+ 193 00000178 E8 [00000000] CALL _memman_alloc_4k
+ 194 0000017D 68 00103E00 PUSH 1064448
+ 195 00000182 FF 75 10 PUSH DWORD [16+EBP]
+ 196 00000185 50 PUSH EAX
+ 197 00000186 89 C7 MOV EDI,EAX
+ 198 00000188 FF 75 F0 PUSH DWORD [-16+EBP]
+ 199 0000018B FF 75 08 PUSH DWORD [8+EBP]
+ 200 0000018E E8 FFFFFEBF CALL _file_loadfile
+ 201 00000193 83 C4 1C ADD ESP,28
+ 202 00000196 83 7D F0 10 CMP DWORD [-16+EBP],16
+ 203 0000019A 7F 0A JG L68
+ 204 0000019C L66:
+ 205 0000019C 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 206 0000019F 89 F8 MOV EAX,EDI
+ 207 000001A1 5B POP EBX
+ 208 000001A2 5E POP ESI
+ 209 000001A3 5F POP EDI
+ 210 000001A4 5D POP EBP
+ 211 000001A5 C3 RET
+ 212 000001A6 L68:
+ 213 000001A6 57 PUSH EDI
+ 214 000001A7 E8 [00000000] CALL _tek_getsize
+ 215 000001AC 89 C6 MOV ESI,EAX
+ 216 000001AE 58 POP EAX
+ 217 000001AF 85 F6 TEST ESI,ESI
+ 218 000001B1 7E E9 JLE L66
+ 219 000001B3 56 PUSH ESI
+ 220 000001B4 68 003C0000 PUSH 3932160
+ 221 000001B9 E8 [00000000] CALL _memman_alloc_4k
+ 222 000001BE 56 PUSH ESI
+ 223 000001BF 89 C3 MOV EBX,EAX
+ 224 000001C1 50 PUSH EAX
+ 225 000001C2 57 PUSH EDI
+ 226 000001C3 E8 [00000000] CALL _tek_decomp
+ 227 000001C8 FF 75 F0 PUSH DWORD [-16+EBP]
+ 228 000001CB 57 PUSH EDI
+ 229 000001CC 89 DF MOV EDI,EBX
+ 230 000001CE 68 003C0000 PUSH 3932160
+ 231 000001D3 E8 [00000000] CALL _memman_free_4k
+ 232 000001D8 83 C4 20 ADD ESP,32
+ 233 000001DB 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 234 000001DE 89 30 MOV DWORD [EAX],ESI
+ 235 000001E0 EB BA JMP L66
--- /dev/null
+ .file "filesystem.cpp"
+ .intel_syntax noprefix
+ .section .debug_abbrev,"dr"
+Ldebug_abbrev0:
+ .section .debug_info,"dr"
+Ldebug_info0:
+ .section .debug_line,"dr"
+Ldebug_line0:
+ .text
+Ltext0:
+ .section .text$_ZdlPvS_,"x"
+ .linkonce discard
+.globl __ZdlPvS_
+ .def __ZdlPvS_; .scl 2; .type 32; .endef
+__ZdlPvS_:
+LFB11:
+ .file 1 "g:/mingw/bin/../lib/gcc/mingw32/4.5.0/include/c++/new"
+ .loc 1 107 0
+ push ebp
+LCFI0:
+ mov ebp, esp
+LCFI1:
+ .loc 1 107 0
+ leave
+LCFI2:
+ ret
+LFE11:
+ .section .text$_ZN10FileSystemnwEjPv,"x"
+ .linkonce discard
+.globl __ZN10FileSystemnwEjPv
+ .def __ZN10FileSystemnwEjPv; .scl 2; .type 32; .endef
+__ZN10FileSystemnwEjPv:
+LFB14:
+ .file 2 "filesystem.h"
+ .loc 2 17 0
+ push ebp
+LCFI3:
+ mov ebp, esp
+LCFI4:
+ .loc 2 17 0
+ mov eax, DWORD PTR [ebp+12]
+ leave
+LCFI5:
+ ret
+LFE14:
+ .section .text$_ZN6Screen4InstEv,"x"
+ .linkonce discard
+.globl __ZN6Screen4InstEv
+ .def __ZN6Screen4InstEv; .scl 2; .type 32; .endef
+__ZN6Screen4InstEv:
+LFB15:
+ .file 3 "screen.h"
+ .loc 3 8 0
+ push ebp
+LCFI6:
+ mov ebp, esp
+LCFI7:
+ .loc 3 9 0
+ mov eax, OFFSET FLAT:__ZN6Screen3bufE
+ .loc 3 10 0
+ leave
+LCFI8:
+ ret
+LFE15:
+.globl __ZN10FileSystem3bufE
+ .bss
+ .align 32
+__ZN10FileSystem3bufE:
+ .space 4104
+ .text
+ .align 2
+.globl __ZN10FileSystem4InitEP8BOOTINFO
+ .def __ZN10FileSystem4InitEP8BOOTINFO; .scl 2; .type 32; .endef
+__ZN10FileSystem4InitEP8BOOTINFO:
+LFB28:
+ .file 4 "filesystem.cpp"
+ .loc 4 9 0
+ push ebp
+LCFI9:
+ mov ebp, esp
+LCFI10:
+ push edi
+LCFI11:
+ push esi
+LCFI12:
+ push ebx
+LCFI13:
+ sub esp, 28
+LCFI14:
+ .loc 4 10 0
+ mov esi, OFFSET FLAT:__ZN10FileSystem3bufE
+ mov DWORD PTR [esp+4], esi
+ mov DWORD PTR [esp], 4104
+ call __ZN10FileSystemnwEjPv
+ mov ebx, eax
+ mov eax, ebx
+ mov edx, DWORD PTR [ebp+8]
+ mov DWORD PTR [esp+4], edx
+ mov DWORD PTR [esp], eax
+LEHB0:
+ call __ZN10FileSystemC1EP8BOOTINFO
+LEHE0:
+ .loc 4 11 0
+ jmp L7
+L6:
+ mov edi, eax
+ .loc 4 10 0
+ mov DWORD PTR [esp+4], esi
+ mov DWORD PTR [esp], ebx
+ call __ZdlPvS_
+ mov eax, edi
+ mov DWORD PTR [esp], eax
+LEHB1:
+ call __Unwind_Resume
+LEHE1:
+L7:
+ .loc 4 11 0
+ add esp, 28
+ pop ebx
+LCFI15:
+ pop esi
+LCFI16:
+ pop edi
+LCFI17:
+ leave
+LCFI18:
+ ret
+LFE28:
+ .def ___gxx_personality_v0; .scl 2; .type 32; .endef
+ .section .gcc_except_table,"w"
+LLSDA28:
+ .byte 0xff
+ .byte 0xff
+ .byte 0x1
+ .uleb128 LLSDACSE28-LLSDACSB28
+LLSDACSB28:
+ .uleb128 LEHB0-LFB28
+ .uleb128 LEHE0-LEHB0
+ .uleb128 L6-LFB28
+ .uleb128 0x0
+ .uleb128 LEHB1-LFB28
+ .uleb128 LEHE1-LEHB1
+ .uleb128 0x0
+ .uleb128 0x0
+LLSDACSE28:
+ .text
+ .section .rdata,"dr"
+LC0:
+ .ascii "Found %d devices\12\0"
+ .align 4
+LC1:
+ .ascii "ATA Read Sectors, LBA48, polling...\12\0"
+ .text
+ .align 2
+.globl __ZN10FileSystemC2EP8BOOTINFO
+ .def __ZN10FileSystemC2EP8BOOTINFO; .scl 2; .type 32; .endef
+__ZN10FileSystemC2EP8BOOTINFO:
+LFB30:
+ .loc 4 13 0
+ push ebp
+LCFI19:
+ mov ebp, esp
+LCFI20:
+ sub esp, 40
+LCFI21:
+LBB2:
+ .loc 4 13 0
+ mov eax, DWORD PTR [ebp+8]
+ mov edx, DWORD PTR [ebp+12]
+ mov DWORD PTR [eax], edx
+LBB3:
+ .loc 4 15 0
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [eax+4], 0
+ .loc 4 17 0
+ mov DWORD PTR _reg_buffer_size, 4096
+ .loc 4 20 0
+ mov DWORD PTR [esp+8], 0
+ mov DWORD PTR [esp+4], 1008
+ mov DWORD PTR [esp], 496
+ call __Z19pio_set_iobase_addrjjj
+ .loc 4 22 0
+ mov DWORD PTR [ebp-12], 0
+ .loc 4 24 0
+ call __Z10reg_configv
+ mov DWORD PTR [ebp-16], eax
+ .loc 4 26 0
+ call __ZN6Screen4InstEv
+ mov edx, DWORD PTR [ebp-16]
+ mov DWORD PTR [esp+8], edx
+ mov DWORD PTR [esp+4], OFFSET FLAT:LC0
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen6printfEPKcz
+ .loc 4 37 0
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+4]
+ mov DWORD PTR [esp+4], eax
+ mov DWORD PTR [esp], 0
+ call __Z9reg_resetii
+ mov DWORD PTR [ebp-12], eax
+ .loc 4 42 0
+ call __ZN6Screen4InstEv
+ mov DWORD PTR [esp+4], OFFSET FLAT:LC1
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen6printfEPKcz
+LBE3:
+LBE2:
+ .loc 4 44 0
+ leave
+LCFI22:
+ ret
+LFE30:
+.globl __ZN10FileSystemC1EP8BOOTINFO
+ .def __ZN10FileSystemC1EP8BOOTINFO; .scl 2; .type 32; .endef
+ .set __ZN10FileSystemC1EP8BOOTINFO,__ZN10FileSystemC2EP8BOOTINFO
+ .align 2
+.globl __ZN10FileSystemD2Ev
+ .def __ZN10FileSystemD2Ev; .scl 2; .type 32; .endef
+__ZN10FileSystemD2Ev:
+LFB33:
+ .loc 4 47 0
+ push ebp
+LCFI23:
+ mov ebp, esp
+LCFI24:
+ .loc 4 48 0
+ leave
+LCFI25:
+ ret
+LFE33:
+.globl __ZN10FileSystemD1Ev
+ .def __ZN10FileSystemD1Ev; .scl 2; .type 32; .endef
+ .set __ZN10FileSystemD1Ev,__ZN10FileSystemD2Ev
+ .align 2
+.globl __ZN10FileSystem10ClearTraceEv
+ .def __ZN10FileSystem10ClearTraceEv; .scl 2; .type 32; .endef
+__ZN10FileSystem10ClearTraceEv:
+LFB35:
+ .loc 4 51 0
+ push ebp
+LCFI26:
+ mov ebp, esp
+LCFI27:
+ sub esp, 8
+LCFI28:
+ .loc 4 53 0
+ call __Z13trc_cht_dump0v
+ .loc 4 54 0
+ call __Z13trc_llt_dump0v
+ .loc 4 55 0
+ leave
+LCFI29:
+ ret
+LFE35:
+ .align 2
+.globl __ZN10FileSystem5pauseEv
+ .def __ZN10FileSystem5pauseEv; .scl 2; .type 32; .endef
+__ZN10FileSystem5pauseEv:
+LFB36:
+ .loc 4 57 0
+ push ebp
+LCFI30:
+ mov ebp, esp
+LCFI31:
+ .loc 4 57 0
+ leave
+LCFI32:
+ ret
+LFE36:
+ .section .rdata,"dr"
+LC2:
+ .ascii "ERROR !\12\0"
+LC3:
+ .ascii "1 END\12\0"
+LC4:
+ .ascii "1 \0"
+LC5:
+ .ascii "\12\0"
+LC6:
+ .ascii "2 END\12\0"
+LC7:
+ .ascii "2 \0"
+LC8:
+ .ascii "3 END\12\0"
+LC9:
+ .ascii "3 \0"
+ .text
+ .align 2
+.globl __ZN10FileSystem7ShowAllEv
+ .def __ZN10FileSystem7ShowAllEv; .scl 2; .type 32; .endef
+__ZN10FileSystem7ShowAllEv:
+LFB37:
+ .loc 4 59 0
+ push ebp
+LCFI33:
+ mov ebp, esp
+LCFI34:
+ sub esp, 40
+LCFI35:
+LBB4:
+ .loc 4 60 0
+ mov DWORD PTR [ebp-12], 0
+ .loc 4 63 0
+ call __ZN6Screen4InstEv
+ mov DWORD PTR [esp+4], OFFSET FLAT:LC2
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen6printfEPKcz
+ .loc 4 66 0
+ call __Z13trc_err_dump1v
+L16:
+ .loc 4 68 0
+ inc DWORD PTR [ebp-12]
+ .loc 4 69 0
+ call __Z13trc_err_dump2v
+ mov DWORD PTR [ebp-16], eax
+ .loc 4 70 0
+ cmp DWORD PTR [ebp-16], 0
+ jne L14
+ .loc 4 76 0
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [esp], eax
+ call __ZN10FileSystem5pauseEv
+ .loc 4 77 0
+ call __ZN6Screen4InstEv
+ mov DWORD PTR [esp+4], OFFSET FLAT:LC3
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen6printfEPKcz
+ .loc 4 81 0
+ call __Z13trc_cht_dump1v
+ jmp L15
+L14:
+ .loc 4 72 0
+ call __ZN6Screen4InstEv
+ mov DWORD PTR [esp+4], OFFSET FLAT:LC4
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen4putsEPKc
+ .loc 4 73 0
+ call __ZN6Screen4InstEv
+ mov edx, DWORD PTR [ebp-16]
+ mov DWORD PTR [esp+4], edx
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen4putsEPKc
+ .loc 4 74 0
+ call __ZN6Screen4InstEv
+ mov DWORD PTR [esp+4], OFFSET FLAT:LC5
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen4putsEPKc
+ .loc 4 67 0
+ jmp L16
+L24:
+ .loc 4 82 0
+ nop
+L15:
+ .loc 4 84 0
+ call __Z13trc_cht_dump2v
+ mov DWORD PTR [ebp-16], eax
+ .loc 4 85 0
+ cmp DWORD PTR [ebp-16], 0
+ jne L17
+ .loc 4 94 0
+ call __ZN6Screen4InstEv
+ mov DWORD PTR [esp+4], OFFSET FLAT:LC6
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen6printfEPKcz
+ .loc 4 97 0
+ call __Z13trc_llt_dump1v
+ jmp L18
+L17:
+ .loc 4 87 0
+ call __ZN6Screen4InstEv
+ mov DWORD PTR [esp+4], OFFSET FLAT:LC7
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen4putsEPKc
+ .loc 4 88 0
+ call __ZN6Screen4InstEv
+ mov edx, DWORD PTR [ebp-16]
+ mov DWORD PTR [esp+4], edx
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen4putsEPKc
+ .loc 4 89 0
+ call __ZN6Screen4InstEv
+ mov DWORD PTR [esp+4], OFFSET FLAT:LC5
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen4putsEPKc
+ .loc 4 90 0
+ inc DWORD PTR [ebp-12]
+ .loc 4 91 0
+ mov eax, DWORD PTR [ebp-12]
+ and eax, 15
+ test eax, eax
+ jne L24
+ .loc 4 92 0
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [esp], eax
+ call __ZN10FileSystem5pauseEv
+ .loc 4 82 0
+ jmp L15
+L25:
+ .loc 4 98 0
+ nop
+L18:
+ .loc 4 100 0
+ call __Z13trc_llt_dump2v
+ mov DWORD PTR [ebp-16], eax
+ .loc 4 101 0
+ cmp DWORD PTR [ebp-16], 0
+ jne L20
+ .loc 4 110 0
+ call __ZN6Screen4InstEv
+ mov DWORD PTR [esp+4], OFFSET FLAT:LC8
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen6printfEPKcz
+ .loc 4 111 0
+ mov eax, DWORD PTR [ebp-12]
+ and eax, 15
+ test eax, eax
+ jne L21
+ jmp L13
+L20:
+ .loc 4 103 0
+ call __ZN6Screen4InstEv
+ mov DWORD PTR [esp+4], OFFSET FLAT:LC9
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen4putsEPKc
+ .loc 4 104 0
+ call __ZN6Screen4InstEv
+ mov edx, DWORD PTR [ebp-16]
+ mov DWORD PTR [esp+4], edx
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen4putsEPKc
+ .loc 4 105 0
+ call __ZN6Screen4InstEv
+ mov DWORD PTR [esp+4], OFFSET FLAT:LC5
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen4putsEPKc
+ .loc 4 106 0
+ inc DWORD PTR [ebp-12]
+ .loc 4 107 0
+ mov eax, DWORD PTR [ebp-12]
+ and eax, 15
+ test eax, eax
+ jne L25
+ .loc 4 108 0
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [esp], eax
+ call __ZN10FileSystem5pauseEv
+ .loc 4 98 0
+ jmp L18
+L21:
+ .loc 4 112 0
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [esp], eax
+ call __ZN10FileSystem5pauseEv
+L13:
+LBE4:
+ .loc 4 113 0
+ leave
+LCFI36:
+ ret
+LFE37:
+ .align 2
+.globl __ZN10FileSystem10ReadSectorEiiyPhii
+ .def __ZN10FileSystem10ReadSectorEiiyPhii; .scl 2; .type 32; .endef
+__ZN10FileSystem10ReadSectorEiiyPhii:
+LFB38:
+ .loc 4 116 0
+ push ebp
+LCFI37:
+ mov ebp, esp
+LCFI38:
+ push edi
+LCFI39:
+ push esi
+LCFI40:
+ push ebx
+LCFI41:
+ sub esp, 92
+LCFI42:
+ mov eax, DWORD PTR [ebp+20]
+ mov DWORD PTR [ebp-48], eax
+ mov eax, DWORD PTR [ebp+24]
+ mov DWORD PTR [ebp-44], eax
+LBB5:
+ .loc 4 117 0
+ mov eax, DWORD PTR [ebp+32]
+ mov DWORD PTR _reg_buffer_size, eax
+ .loc 4 119 0
+ mov eax, DWORD PTR [ebp+32]
+ mov DWORD PTR [esp+8], eax
+ mov DWORD PTR [esp+4], 0
+ mov eax, DWORD PTR [ebp+28]
+ mov DWORD PTR [esp], eax
+ call _memset
+ .loc 4 120 0
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [esp], eax
+ call __ZN10FileSystem10ClearTraceEv
+ .loc 4 124 0
+ mov edi, DWORD PTR [ebp+28]
+ mov ecx, DWORD PTR [ebp-48]
+ mov eax, DWORD PTR [ebp-48]
+ mov ebx, eax
+ and ebx, 0
+ mov eax, DWORD PTR [ebp-44]
+ movzx esi, ax
+ mov eax, ebx
+ mov edx, esi
+ mov eax, edx
+ xor edx, edx
+ mov edx, eax
+ mov eax, DWORD PTR [ebp+16]
+ mov DWORD PTR [esp+36], 0
+ mov ebx, DWORD PTR [ebp+36]
+ mov DWORD PTR [esp+32], ebx
+ mov DWORD PTR [esp+28], edi
+ mov DWORD PTR [esp+24], 0
+ mov DWORD PTR [esp+20], ecx
+ mov DWORD PTR [esp+16], edx
+ mov DWORD PTR [esp+12], eax
+ mov DWORD PTR [esp+8], 0
+ mov DWORD PTR [esp+4], 36
+ mov eax, DWORD PTR [ebp+12]
+ mov DWORD PTR [esp], eax
+ call __Z21reg_pio_data_in_lba48iijjmmjjli
+ mov DWORD PTR [ebp-28], eax
+ .loc 4 125 0
+ mov eax, DWORD PTR [ebp-28]
+LBE5:
+ .loc 4 133 0
+ add esp, 92
+ pop ebx
+LCFI43:
+ pop esi
+LCFI44:
+ pop edi
+LCFI45:
+ leave
+LCFI46:
+ ret
+LFE38:
+ .section .debug_frame,"dr"
+Lframe0:
+ .long LECIE0-LSCIE0
+LSCIE0:
+ .long 0xffffffff
+ .byte 0x1
+ .ascii "\0"
+ .uleb128 0x1
+ .sleb128 -4
+ .byte 0x8
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .byte 0x88
+ .uleb128 0x1
+ .align 4
+LECIE0:
+LSFDE0:
+ .long LEFDE0-LASFDE0
+LASFDE0:
+ .secrel32 Lframe0
+ .long LFB11
+ .long LFE11-LFB11
+ .byte 0x4
+ .long LCFI0-LFB11
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI1-LCFI0
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI2-LCFI1
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE0:
+LSFDE2:
+ .long LEFDE2-LASFDE2
+LASFDE2:
+ .secrel32 Lframe0
+ .long LFB14
+ .long LFE14-LFB14
+ .byte 0x4
+ .long LCFI3-LFB14
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI4-LCFI3
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI5-LCFI4
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE2:
+LSFDE4:
+ .long LEFDE4-LASFDE4
+LASFDE4:
+ .secrel32 Lframe0
+ .long LFB15
+ .long LFE15-LFB15
+ .byte 0x4
+ .long LCFI6-LFB15
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI7-LCFI6
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI8-LCFI7
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE4:
+LSFDE6:
+ .long LEFDE6-LASFDE6
+LASFDE6:
+ .secrel32 Lframe0
+ .long LFB28
+ .long LFE28-LFB28
+ .byte 0x4
+ .long LCFI9-LFB28
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI10-LCFI9
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI14-LCFI10
+ .byte 0x83
+ .uleb128 0x5
+ .byte 0x86
+ .uleb128 0x4
+ .byte 0x87
+ .uleb128 0x3
+ .byte 0x4
+ .long LCFI15-LCFI14
+ .byte 0xc3
+ .byte 0x4
+ .long LCFI16-LCFI15
+ .byte 0xc6
+ .byte 0x4
+ .long LCFI17-LCFI16
+ .byte 0xc7
+ .byte 0x4
+ .long LCFI18-LCFI17
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE6:
+LSFDE8:
+ .long LEFDE8-LASFDE8
+LASFDE8:
+ .secrel32 Lframe0
+ .long LFB30
+ .long LFE30-LFB30
+ .byte 0x4
+ .long LCFI19-LFB30
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI20-LCFI19
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI22-LCFI20
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE8:
+LSFDE10:
+ .long LEFDE10-LASFDE10
+LASFDE10:
+ .secrel32 Lframe0
+ .long LFB33
+ .long LFE33-LFB33
+ .byte 0x4
+ .long LCFI23-LFB33
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI24-LCFI23
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI25-LCFI24
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE10:
+LSFDE12:
+ .long LEFDE12-LASFDE12
+LASFDE12:
+ .secrel32 Lframe0
+ .long LFB35
+ .long LFE35-LFB35
+ .byte 0x4
+ .long LCFI26-LFB35
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI27-LCFI26
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI29-LCFI27
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE12:
+LSFDE14:
+ .long LEFDE14-LASFDE14
+LASFDE14:
+ .secrel32 Lframe0
+ .long LFB36
+ .long LFE36-LFB36
+ .byte 0x4
+ .long LCFI30-LFB36
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI31-LCFI30
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI32-LCFI31
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE14:
+LSFDE16:
+ .long LEFDE16-LASFDE16
+LASFDE16:
+ .secrel32 Lframe0
+ .long LFB37
+ .long LFE37-LFB37
+ .byte 0x4
+ .long LCFI33-LFB37
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI34-LCFI33
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI36-LCFI34
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE16:
+LSFDE18:
+ .long LEFDE18-LASFDE18
+LASFDE18:
+ .secrel32 Lframe0
+ .long LFB38
+ .long LFE38-LFB38
+ .byte 0x4
+ .long LCFI37-LFB38
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI38-LCFI37
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI42-LCFI38
+ .byte 0x83
+ .uleb128 0x5
+ .byte 0x86
+ .uleb128 0x4
+ .byte 0x87
+ .uleb128 0x3
+ .byte 0x4
+ .long LCFI43-LCFI42
+ .byte 0xc3
+ .byte 0x4
+ .long LCFI44-LCFI43
+ .byte 0xc6
+ .byte 0x4
+ .long LCFI45-LCFI44
+ .byte 0xc7
+ .byte 0x4
+ .long LCFI46-LCFI45
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE18:
+ .section .eh_frame,"w"
+Lframe1:
+ .long LECIE1-LSCIE1
+LSCIE1:
+ .long 0x0
+ .byte 0x1
+ .ascii "zPL\0"
+ .uleb128 0x1
+ .sleb128 -4
+ .byte 0x8
+ .uleb128 0x6
+ .byte 0x0
+ .long ___gxx_personality_v0
+ .byte 0x0
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .byte 0x88
+ .uleb128 0x1
+ .align 4
+LECIE1:
+LSFDE21:
+ .long LEFDE21-LASFDE21
+LASFDE21:
+ .long LASFDE21-Lframe1
+ .long LFB28
+ .long LFE28-LFB28
+ .uleb128 0x4
+ .long LLSDA28
+ .byte 0x4
+ .long LCFI9-LFB28
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI10-LCFI9
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI14-LCFI10
+ .byte 0x83
+ .uleb128 0x5
+ .byte 0x86
+ .uleb128 0x4
+ .byte 0x87
+ .uleb128 0x3
+ .byte 0x4
+ .long LCFI15-LCFI14
+ .byte 0xc3
+ .byte 0x4
+ .long LCFI16-LCFI15
+ .byte 0xc6
+ .byte 0x4
+ .long LCFI17-LCFI16
+ .byte 0xc7
+ .byte 0x4
+ .long LCFI18-LCFI17
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE21:
+LSFDE23:
+ .long LEFDE23-LASFDE23
+LASFDE23:
+ .long LASFDE23-Lframe1
+ .long LFB30
+ .long LFE30-LFB30
+ .uleb128 0x4
+ .long 0x0
+ .byte 0x4
+ .long LCFI19-LFB30
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI20-LCFI19
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI22-LCFI20
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE23:
+LSFDE25:
+ .long LEFDE25-LASFDE25
+LASFDE25:
+ .long LASFDE25-Lframe1
+ .long LFB35
+ .long LFE35-LFB35
+ .uleb128 0x4
+ .long 0x0
+ .byte 0x4
+ .long LCFI26-LFB35
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI27-LCFI26
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI29-LCFI27
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE25:
+LSFDE27:
+ .long LEFDE27-LASFDE27
+LASFDE27:
+ .long LASFDE27-Lframe1
+ .long LFB37
+ .long LFE37-LFB37
+ .uleb128 0x4
+ .long 0x0
+ .byte 0x4
+ .long LCFI33-LFB37
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI34-LCFI33
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI36-LCFI34
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE27:
+LSFDE29:
+ .long LEFDE29-LASFDE29
+LASFDE29:
+ .long LASFDE29-Lframe1
+ .long LFB38
+ .long LFE38-LFB38
+ .uleb128 0x4
+ .long 0x0
+ .byte 0x4
+ .long LCFI37-LFB38
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI38-LCFI37
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI42-LCFI38
+ .byte 0x83
+ .uleb128 0x5
+ .byte 0x86
+ .uleb128 0x4
+ .byte 0x87
+ .uleb128 0x3
+ .byte 0x4
+ .long LCFI43-LCFI42
+ .byte 0xc3
+ .byte 0x4
+ .long LCFI44-LCFI43
+ .byte 0xc6
+ .byte 0x4
+ .long LCFI45-LCFI44
+ .byte 0xc7
+ .byte 0x4
+ .long LCFI46-LCFI45
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE29:
+ .text
+Letext0:
+ .section .debug_loc,"dr"
+Ldebug_loc0:
+LLST0:
+ .long LFB11
+ .long LCFI0
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI0
+ .long LCFI1
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI1
+ .long LCFI2
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI2
+ .long LFE11
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST1:
+ .long LFB14
+ .long LCFI3
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI3
+ .long LCFI4
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI4
+ .long LCFI5
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI5
+ .long LFE14
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST2:
+ .long LFB15
+ .long LCFI6
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI6
+ .long LCFI7
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI7
+ .long LCFI8
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI8
+ .long LFE15
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST3:
+ .long LFB28
+ .long LCFI9
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI9
+ .long LCFI10
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI10
+ .long LCFI18
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI18
+ .long LFE28
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST4:
+ .long LFB30
+ .long LCFI19
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI19
+ .long LCFI20
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI20
+ .long LCFI22
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI22
+ .long LFE30
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST5:
+ .long LFB33
+ .long LCFI23
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI23
+ .long LCFI24
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI24
+ .long LCFI25
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI25
+ .long LFE33
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST6:
+ .long LFB35
+ .long LCFI26
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI26
+ .long LCFI27
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI27
+ .long LCFI29
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI29
+ .long LFE35
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST7:
+ .long LFB36
+ .long LCFI30
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI30
+ .long LCFI31
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI31
+ .long LCFI32
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI32
+ .long LFE36
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST8:
+ .long LFB37
+ .long LCFI33
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI33
+ .long LCFI34
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI34
+ .long LCFI36
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI36
+ .long LFE37
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST9:
+ .long LFB38
+ .long LCFI37
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI37
+ .long LCFI38
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI38
+ .long LCFI46
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI46
+ .long LFE38
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+ .file 5 "g:/mingw/bin/../lib/gcc/mingw32/4.5.0/include/c++/cstddef"
+ .file 6 "g:/mingw/bin/../lib/gcc/mingw32/4.5.0/include/stddef.h"
+ .file 7 "typedefs.h"
+ .file 8 "bootpack.h"
+ .file 9 "<built-in>"
+ .file 10 "ata/ataio.h"
+ .section .debug_info,"dr"
+ .long 0x767
+ .word 0x2
+ .secrel32 Ldebug_abbrev0
+ .byte 0x4
+ .uleb128 0x1
+ .ascii "GNU C++ 4.5.0\0"
+ .byte 0x4
+ .ascii "filesystem.cpp\0"
+ .ascii "G:\\c\\os\\harib27f\\haribote\0"
+ .long 0x0
+ .long 0x0
+ .secrel32 Ldebug_ranges0+0x0
+ .secrel32 Ldebug_line0
+ .uleb128 0x2
+ .byte 0x4
+ .byte 0x5
+ .ascii "int\0"
+ .uleb128 0x3
+ .ascii "size_t\0"
+ .byte 0x6
+ .byte 0xd3
+ .long 0x69
+ .uleb128 0x2
+ .byte 0x4
+ .byte 0x7
+ .ascii "unsigned int\0"
+ .uleb128 0x4
+ .ascii "std\0"
+ .byte 0x9
+ .byte 0x0
+ .long 0x93
+ .uleb128 0x5
+ .byte 0x5
+ .byte 0x33
+ .long 0x93
+ .uleb128 0x5
+ .byte 0x5
+ .byte 0x34
+ .long 0x96
+ .byte 0x0
+ .uleb128 0x6
+ .byte 0x4
+ .byte 0x5
+ .uleb128 0x6
+ .byte 0x4
+ .byte 0x7
+ .uleb128 0x3
+ .ascii "BYTE\0"
+ .byte 0x7
+ .byte 0x3
+ .long 0xa5
+ .uleb128 0x2
+ .byte 0x1
+ .byte 0x8
+ .ascii "unsigned char\0"
+ .uleb128 0x3
+ .ascii "WORD\0"
+ .byte 0x7
+ .byte 0x4
+ .long 0xc2
+ .uleb128 0x2
+ .byte 0x2
+ .byte 0x7
+ .ascii "short unsigned int\0"
+ .uleb128 0x3
+ .ascii "DWORD\0"
+ .byte 0x7
+ .byte 0x5
+ .long 0x69
+ .uleb128 0x3
+ .ascii "QWORD\0"
+ .byte 0x7
+ .byte 0x6
+ .long 0xf2
+ .uleb128 0x2
+ .byte 0x8
+ .byte 0x7
+ .ascii "long long unsigned int\0"
+ .uleb128 0x7
+ .ascii "BOOTINFO\0"
+ .byte 0xc
+ .byte 0x8
+ .byte 0x4
+ .long 0x196
+ .uleb128 0x8
+ .ascii "bootdrive\0"
+ .byte 0x8
+ .byte 0x5
+ .long 0x99
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x0
+ .uleb128 0x8
+ .ascii "leds\0"
+ .byte 0x8
+ .byte 0x6
+ .long 0x99
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x1
+ .uleb128 0x8
+ .ascii "vmode\0"
+ .byte 0x8
+ .byte 0x7
+ .long 0x99
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x2
+ .uleb128 0x8
+ .ascii "reserve\0"
+ .byte 0x8
+ .byte 0x8
+ .long 0x99
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x3
+ .uleb128 0x8
+ .ascii "screenx\0"
+ .byte 0x8
+ .byte 0x9
+ .long 0xb6
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x4
+ .uleb128 0x8
+ .ascii "screeny\0"
+ .byte 0x8
+ .byte 0x9
+ .long 0xb6
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x6
+ .uleb128 0x8
+ .ascii "vram\0"
+ .byte 0x8
+ .byte 0xa
+ .long 0x196
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x8
+ .byte 0x0
+ .uleb128 0x9
+ .byte 0x4
+ .long 0x99
+ .uleb128 0x2
+ .byte 0x4
+ .byte 0x5
+ .ascii "long int\0"
+ .uleb128 0x2
+ .byte 0x4
+ .byte 0x7
+ .ascii "long unsigned int\0"
+ .uleb128 0xa
+ .secrel32 LASF0
+ .word 0x1008
+ .byte 0x2
+ .byte 0x8
+ .long 0x42a
+ .uleb128 0xb
+ .ascii "buf\0"
+ .byte 0x2
+ .byte 0x10
+ .ascii "_ZN10FileSystem3bufE\0"
+ .long 0x42a
+ .byte 0x1
+ .byte 0x3
+ .byte 0x1
+ .uleb128 0xc
+ .ascii "binfo\0"
+ .byte 0x2
+ .byte 0x1b
+ .long 0x435
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x0
+ .byte 0x3
+ .uleb128 0xc
+ .ascii "m_drivenum\0"
+ .byte 0x2
+ .byte 0x1c
+ .long 0x54
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x4
+ .byte 0x3
+ .uleb128 0xd
+ .ascii "READBUFSIZE\0"
+ .byte 0x2
+ .byte 0x1d
+ .ascii "_ZN10FileSystem11READBUFSIZEE\0"
+ .long 0x43b
+ .byte 0x1
+ .byte 0x3
+ .byte 0x1
+ .word 0x1000
+ .uleb128 0xc
+ .ascii "readbuf\0"
+ .byte 0x2
+ .byte 0x1e
+ .long 0x440
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x8
+ .byte 0x3
+ .uleb128 0xe
+ .byte 0x1
+ .ascii "Init\0"
+ .byte 0x2
+ .byte 0xa
+ .ascii "_ZN10FileSystem4InitEP8BOOTINFO\0"
+ .byte 0x1
+ .long 0x291
+ .uleb128 0xf
+ .long 0x435
+ .byte 0x0
+ .uleb128 0x10
+ .byte 0x1
+ .ascii "Inst\0"
+ .byte 0x2
+ .byte 0xc
+ .ascii "_ZN10FileSystem4InstEv\0"
+ .long 0x454
+ .byte 0x1
+ .uleb128 0x11
+ .byte 0x1
+ .ascii "operator new\0"
+ .byte 0x2
+ .byte 0x11
+ .ascii "_ZN10FileSystemnwEjPv\0"
+ .long 0x456
+ .byte 0x3
+ .byte 0x1
+ .long 0x2f2
+ .uleb128 0xf
+ .long 0x5b
+ .uleb128 0xf
+ .long 0x456
+ .byte 0x0
+ .uleb128 0x12
+ .byte 0x1
+ .secrel32 LASF0
+ .byte 0x2
+ .byte 0x12
+ .byte 0x3
+ .byte 0x1
+ .long 0x30c
+ .uleb128 0x13
+ .long 0x458
+ .byte 0x1
+ .uleb128 0xf
+ .long 0x435
+ .byte 0x0
+ .uleb128 0x14
+ .byte 0x1
+ .ascii "~FileSystem\0"
+ .byte 0x2
+ .byte 0x13
+ .byte 0x3
+ .byte 0x1
+ .long 0x32f
+ .uleb128 0x13
+ .long 0x458
+ .byte 0x1
+ .uleb128 0x13
+ .long 0x54
+ .byte 0x1
+ .byte 0x0
+ .uleb128 0x15
+ .byte 0x1
+ .ascii "ClearTrace\0"
+ .byte 0x2
+ .byte 0x15
+ .ascii "_ZN10FileSystem10ClearTraceEv\0"
+ .byte 0x3
+ .byte 0x1
+ .long 0x369
+ .uleb128 0x13
+ .long 0x458
+ .byte 0x1
+ .byte 0x0
+ .uleb128 0x15
+ .byte 0x1
+ .ascii "pause\0"
+ .byte 0x2
+ .byte 0x16
+ .ascii "_ZN10FileSystem5pauseEv\0"
+ .byte 0x3
+ .byte 0x1
+ .long 0x398
+ .uleb128 0x13
+ .long 0x458
+ .byte 0x1
+ .byte 0x0
+ .uleb128 0x15
+ .byte 0x1
+ .ascii "ShowAll\0"
+ .byte 0x2
+ .byte 0x17
+ .ascii "_ZN10FileSystem7ShowAllEv\0"
+ .byte 0x3
+ .byte 0x1
+ .long 0x3cb
+ .uleb128 0x13
+ .long 0x458
+ .byte 0x1
+ .byte 0x0
+ .uleb128 0x16
+ .byte 0x1
+ .ascii "ReadSector\0"
+ .byte 0x2
+ .byte 0x19
+ .ascii "_ZN10FileSystem10ReadSectorEiiyPhii\0"
+ .long 0x54
+ .byte 0x3
+ .byte 0x1
+ .uleb128 0x13
+ .long 0x458
+ .byte 0x1
+ .uleb128 0xf
+ .long 0x54
+ .uleb128 0xf
+ .long 0x54
+ .uleb128 0xf
+ .long 0xe5
+ .uleb128 0xf
+ .long 0x196
+ .uleb128 0xf
+ .long 0x54
+ .uleb128 0xf
+ .long 0x54
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x17
+ .long 0xa5
+ .long 0x435
+ .uleb128 0x18
+ .byte 0x0
+ .uleb128 0x9
+ .byte 0x4
+ .long 0x10c
+ .uleb128 0x19
+ .long 0x54
+ .uleb128 0x17
+ .long 0xa5
+ .long 0x451
+ .uleb128 0x1a
+ .long 0x451
+ .word 0xfff
+ .byte 0x0
+ .uleb128 0x6
+ .byte 0x4
+ .byte 0x7
+ .uleb128 0x1b
+ .byte 0x4
+ .uleb128 0x1c
+ .byte 0x4
+ .uleb128 0x9
+ .byte 0x4
+ .long 0x1bd
+ .uleb128 0x1d
+ .ascii "Screen\0"
+ .byte 0x14
+ .byte 0x3
+ .byte 0x5
+ .long 0x48e
+ .uleb128 0x10
+ .byte 0x1
+ .ascii "Inst\0"
+ .byte 0x3
+ .byte 0x8
+ .ascii "_ZN6Screen4InstEv\0"
+ .long 0x48e
+ .byte 0x1
+ .byte 0x0
+ .uleb128 0x1b
+ .byte 0x4
+ .uleb128 0x2
+ .byte 0x1
+ .byte 0x6
+ .ascii "char\0"
+ .uleb128 0x1e
+ .byte 0x1
+ .ascii "operator delete\0"
+ .byte 0x1
+ .byte 0x6b
+ .ascii "_ZdlPvS_\0"
+ .long LFB11
+ .long LFE11
+ .secrel32 LLST0
+ .long 0x4d6
+ .uleb128 0x1f
+ .long 0x456
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .uleb128 0x1f
+ .long 0x456
+ .byte 0x2
+ .byte 0x91
+ .sleb128 4
+ .byte 0x0
+ .uleb128 0x20
+ .long 0x2b6
+ .long LFB14
+ .long LFE14
+ .secrel32 LLST1
+ .long 0x509
+ .uleb128 0x21
+ .ascii "size\0"
+ .byte 0x2
+ .byte 0x11
+ .long 0x5b
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .uleb128 0x21
+ .ascii "buf\0"
+ .byte 0x2
+ .byte 0x11
+ .long 0x456
+ .byte 0x2
+ .byte 0x91
+ .sleb128 4
+ .byte 0x0
+ .uleb128 0x22
+ .long 0x46d
+ .long LFB15
+ .long LFE15
+ .secrel32 LLST2
+ .uleb128 0x23
+ .long 0x25d
+ .byte 0x4
+ .byte 0x9
+ .long LFB28
+ .long LFE28
+ .secrel32 LLST3
+ .long 0x542
+ .uleb128 0x21
+ .ascii "binfo\0"
+ .byte 0x4
+ .byte 0x9
+ .long 0x435
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .byte 0x0
+ .uleb128 0x24
+ .long 0x2f2
+ .byte 0x4
+ .byte 0xd
+ .byte 0x0
+ .long 0x580
+ .uleb128 0x25
+ .secrel32 LASF1
+ .long 0x580
+ .byte 0x1
+ .uleb128 0x26
+ .ascii "binfo\0"
+ .byte 0x4
+ .byte 0xd
+ .long 0x435
+ .uleb128 0x27
+ .uleb128 0x28
+ .ascii "rc\0"
+ .byte 0x4
+ .byte 0x16
+ .long 0x54
+ .uleb128 0x28
+ .ascii "numDev\0"
+ .byte 0x4
+ .byte 0x18
+ .long 0x54
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x19
+ .long 0x458
+ .uleb128 0x29
+ .long 0x542
+ .long LFB30
+ .long LFE30
+ .secrel32 LLST4
+ .long 0x5c5
+ .uleb128 0x2a
+ .long 0x54e
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .uleb128 0x2a
+ .long 0x558
+ .byte 0x2
+ .byte 0x91
+ .sleb128 4
+ .uleb128 0x2b
+ .long LBB3
+ .long LBE3
+ .uleb128 0x2c
+ .long 0x566
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -20
+ .uleb128 0x2c
+ .long 0x570
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -24
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x24
+ .long 0x30c
+ .byte 0x4
+ .byte 0x2f
+ .byte 0x0
+ .long 0x5ec
+ .uleb128 0x25
+ .secrel32 LASF1
+ .long 0x580
+ .byte 0x1
+ .uleb128 0x2d
+ .ascii "__in_chrg\0"
+ .long 0x43b
+ .byte 0x1
+ .byte 0x0
+ .uleb128 0x29
+ .long 0x5c5
+ .long LFB33
+ .long LFE33
+ .secrel32 LLST5
+ .long 0x60a
+ .uleb128 0x2a
+ .long 0x5d1
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .byte 0x0
+ .uleb128 0x23
+ .long 0x32f
+ .byte 0x4
+ .byte 0x33
+ .long LFB35
+ .long LFE35
+ .secrel32 LLST6
+ .long 0x62f
+ .uleb128 0x2e
+ .secrel32 LASF1
+ .long 0x580
+ .byte 0x1
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .byte 0x0
+ .uleb128 0x23
+ .long 0x369
+ .byte 0x4
+ .byte 0x39
+ .long LFB36
+ .long LFE36
+ .secrel32 LLST7
+ .long 0x654
+ .uleb128 0x2e
+ .secrel32 LASF1
+ .long 0x580
+ .byte 0x1
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .byte 0x0
+ .uleb128 0x23
+ .long 0x398
+ .byte 0x4
+ .byte 0x3b
+ .long LFB37
+ .long LFE37
+ .secrel32 LLST8
+ .long 0x69d
+ .uleb128 0x2e
+ .secrel32 LASF1
+ .long 0x580
+ .byte 0x1
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .uleb128 0x2b
+ .long LBB4
+ .long LBE4
+ .uleb128 0x2f
+ .ascii "lc\0"
+ .byte 0x4
+ .byte 0x3c
+ .long 0x54
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -20
+ .uleb128 0x2f
+ .ascii "cp\0"
+ .byte 0x4
+ .byte 0x3d
+ .long 0x69d
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -24
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x9
+ .byte 0x4
+ .long 0x490
+ .uleb128 0x23
+ .long 0x3cb
+ .byte 0x4
+ .byte 0x74
+ .long LFB38
+ .long LFE38
+ .secrel32 LLST9
+ .long 0x743
+ .uleb128 0x2e
+ .secrel32 LASF1
+ .long 0x580
+ .byte 0x1
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .uleb128 0x21
+ .ascii "dev\0"
+ .byte 0x4
+ .byte 0x74
+ .long 0x54
+ .byte 0x2
+ .byte 0x91
+ .sleb128 4
+ .uleb128 0x21
+ .ascii "sectorcount\0"
+ .byte 0x4
+ .byte 0x74
+ .long 0x54
+ .byte 0x2
+ .byte 0x91
+ .sleb128 8
+ .uleb128 0x21
+ .ascii "lba\0"
+ .byte 0x4
+ .byte 0x74
+ .long 0xe5
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -56
+ .uleb128 0x21
+ .ascii "buf\0"
+ .byte 0x4
+ .byte 0x74
+ .long 0x196
+ .byte 0x2
+ .byte 0x91
+ .sleb128 20
+ .uleb128 0x21
+ .ascii "bufsize\0"
+ .byte 0x4
+ .byte 0x74
+ .long 0x54
+ .byte 0x2
+ .byte 0x91
+ .sleb128 24
+ .uleb128 0x21
+ .ascii "numsect\0"
+ .byte 0x4
+ .byte 0x74
+ .long 0x54
+ .byte 0x2
+ .byte 0x91
+ .sleb128 28
+ .uleb128 0x2b
+ .long LBB5
+ .long LBE5
+ .uleb128 0x2f
+ .ascii "rc\0"
+ .byte 0x4
+ .byte 0x79
+ .long 0x54
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -36
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x30
+ .ascii "reg_buffer_size\0"
+ .byte 0xa
+ .word 0x1a2
+ .long 0x19c
+ .byte 0x1
+ .byte 0x1
+ .uleb128 0x31
+ .long 0x1ca
+ .byte 0x4
+ .byte 0x7
+ .byte 0x5
+ .byte 0x3
+ .long __ZN10FileSystem3bufE
+ .byte 0x0
+ .section .debug_abbrev,"dr"
+ .uleb128 0x1
+ .uleb128 0x11
+ .byte 0x1
+ .uleb128 0x25
+ .uleb128 0x8
+ .uleb128 0x13
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x1b
+ .uleb128 0x8
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x52
+ .uleb128 0x1
+ .uleb128 0x55
+ .uleb128 0x6
+ .uleb128 0x10
+ .uleb128 0x6
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2
+ .uleb128 0x24
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3e
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0x8
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x16
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x4
+ .uleb128 0x39
+ .byte 0x1
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x5
+ .uleb128 0x8
+ .byte 0x0
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x18
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x6
+ .uleb128 0x24
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3e
+ .uleb128 0xb
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x7
+ .uleb128 0x13
+ .byte 0x1
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x8
+ .uleb128 0xd
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x38
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x9
+ .uleb128 0xf
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0xa
+ .uleb128 0x2
+ .byte 0x1
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0xb
+ .uleb128 0x5
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xd
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x2007
+ .uleb128 0x8
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x32
+ .uleb128 0xb
+ .uleb128 0x3c
+ .uleb128 0xc
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0xc
+ .uleb128 0xd
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x38
+ .uleb128 0xa
+ .uleb128 0x32
+ .uleb128 0xb
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0xd
+ .uleb128 0xd
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x2007
+ .uleb128 0x8
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x32
+ .uleb128 0xb
+ .uleb128 0x3c
+ .uleb128 0xc
+ .uleb128 0x1c
+ .uleb128 0x5
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0xe
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x2007
+ .uleb128 0x8
+ .uleb128 0x3c
+ .uleb128 0xc
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0xf
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x10
+ .uleb128 0x2e
+ .byte 0x0
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x2007
+ .uleb128 0x8
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x3c
+ .uleb128 0xc
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x11
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x2007
+ .uleb128 0x8
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x32
+ .uleb128 0xb
+ .uleb128 0x3c
+ .uleb128 0xc
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x12
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x32
+ .uleb128 0xb
+ .uleb128 0x3c
+ .uleb128 0xc
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x13
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x34
+ .uleb128 0xc
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x14
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x32
+ .uleb128 0xb
+ .uleb128 0x3c
+ .uleb128 0xc
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x15
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x2007
+ .uleb128 0x8
+ .uleb128 0x32
+ .uleb128 0xb
+ .uleb128 0x3c
+ .uleb128 0xc
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x16
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x2007
+ .uleb128 0x8
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x32
+ .uleb128 0xb
+ .uleb128 0x3c
+ .uleb128 0xc
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x17
+ .uleb128 0x1
+ .byte 0x1
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x18
+ .uleb128 0x21
+ .byte 0x0
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x19
+ .uleb128 0x26
+ .byte 0x0
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x1a
+ .uleb128 0x21
+ .byte 0x0
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x2f
+ .uleb128 0x5
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x1b
+ .uleb128 0x10
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x1c
+ .uleb128 0xf
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x1d
+ .uleb128 0x2
+ .byte 0x1
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x1e
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x2007
+ .uleb128 0x8
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x40
+ .uleb128 0x6
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x1f
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x2
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x20
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x47
+ .uleb128 0x13
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x40
+ .uleb128 0x6
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x21
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x2
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x22
+ .uleb128 0x2e
+ .byte 0x0
+ .uleb128 0x47
+ .uleb128 0x13
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x40
+ .uleb128 0x6
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x23
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x47
+ .uleb128 0x13
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x40
+ .uleb128 0x6
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x24
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x47
+ .uleb128 0x13
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x20
+ .uleb128 0xb
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x25
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x34
+ .uleb128 0xc
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x26
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x27
+ .uleb128 0xb
+ .byte 0x1
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x28
+ .uleb128 0x34
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x29
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x31
+ .uleb128 0x13
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x40
+ .uleb128 0x6
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2a
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x31
+ .uleb128 0x13
+ .uleb128 0x2
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2b
+ .uleb128 0xb
+ .byte 0x1
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2c
+ .uleb128 0x34
+ .byte 0x0
+ .uleb128 0x31
+ .uleb128 0x13
+ .uleb128 0x2
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2d
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x34
+ .uleb128 0xc
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2e
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x34
+ .uleb128 0xc
+ .uleb128 0x2
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2f
+ .uleb128 0x34
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x2
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x30
+ .uleb128 0x34
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0x5
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3c
+ .uleb128 0xc
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x31
+ .uleb128 0x34
+ .byte 0x0
+ .uleb128 0x47
+ .uleb128 0x13
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x2
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .byte 0x0
+ .section .debug_pubnames,"dr"
+ .long 0x114
+ .word 0x2
+ .secrel32 Ldebug_info0
+ .long 0x76b
+ .long 0x498
+ .ascii "operator delete\0"
+ .long 0x4d6
+ .ascii "FileSystem::operator new\0"
+ .long 0x509
+ .ascii "Screen::Inst\0"
+ .long 0x51a
+ .ascii "FileSystem::Init\0"
+ .long 0x585
+ .ascii "FileSystem::FileSystem\0"
+ .long 0x5ec
+ .ascii "FileSystem::~FileSystem\0"
+ .long 0x60a
+ .ascii "FileSystem::ClearTrace\0"
+ .long 0x62f
+ .ascii "FileSystem::pause\0"
+ .long 0x654
+ .ascii "FileSystem::ShowAll\0"
+ .long 0x6a3
+ .ascii "FileSystem::ReadSector\0"
+ .long 0x75d
+ .ascii "FileSystem::buf\0"
+ .long 0x0
+ .section .debug_pubtypes,"dr"
+ .long 0x66
+ .word 0x2
+ .secrel32 Ldebug_info0
+ .long 0x76b
+ .long 0x5b
+ .ascii "size_t\0"
+ .long 0x99
+ .ascii "BYTE\0"
+ .long 0xb6
+ .ascii "WORD\0"
+ .long 0xd8
+ .ascii "DWORD\0"
+ .long 0xe5
+ .ascii "QWORD\0"
+ .long 0x10c
+ .ascii "BOOTINFO\0"
+ .long 0x1bd
+ .ascii "FileSystem\0"
+ .long 0x45e
+ .ascii "Screen\0"
+ .long 0x0
+ .section .debug_aranges,"dr"
+ .long 0x34
+ .word 0x2
+ .secrel32 Ldebug_info0
+ .byte 0x4
+ .byte 0x0
+ .word 0x0
+ .word 0x0
+ .long Ltext0
+ .long Letext0-Ltext0
+ .long LFB11
+ .long LFE11-LFB11
+ .long LFB14
+ .long LFE14-LFB14
+ .long LFB15
+ .long LFE15-LFB15
+ .long 0x0
+ .long 0x0
+ .section .debug_ranges,"dr"
+Ldebug_ranges0:
+ .long Ltext0
+ .long Letext0
+ .long LFB11
+ .long LFE11
+ .long LFB14
+ .long LFE14
+ .long LFB15
+ .long LFE15
+ .long 0x0
+ .long 0x0
+ .section .debug_str,"dr"
+LASF1:
+ .ascii "this\0"
+LASF0:
+ .ascii "FileSystem\0"
+ .def __Unwind_Resume; .scl 2; .type 32; .endef
+ .def __Z19pio_set_iobase_addrjjj; .scl 2; .type 32; .endef
+ .def __Z10reg_configv; .scl 2; .type 32; .endef
+ .def __ZN6Screen6printfEPKcz; .scl 2; .type 32; .endef
+ .def __Z9reg_resetii; .scl 2; .type 32; .endef
+ .def __Z13trc_cht_dump0v; .scl 2; .type 32; .endef
+ .def __Z13trc_llt_dump0v; .scl 2; .type 32; .endef
+ .def __Z13trc_err_dump1v; .scl 2; .type 32; .endef
+ .def __Z13trc_err_dump2v; .scl 2; .type 32; .endef
+ .def __Z13trc_cht_dump1v; .scl 2; .type 32; .endef
+ .def __ZN6Screen4putsEPKc; .scl 2; .type 32; .endef
+ .def __Z13trc_cht_dump2v; .scl 2; .type 32; .endef
+ .def __Z13trc_llt_dump1v; .scl 2; .type 32; .endef
+ .def __Z13trc_llt_dump2v; .scl 2; .type 32; .endef
+ .def _memset; .scl 2; .type 32; .endef
+ .def __Z21reg_pio_data_in_lba48iijjmmjjli; .scl 2; .type 32; .endef
--- /dev/null
+#include "filesystem.h"
+#include "screen.h"
+#include "debug.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <boost/scoped_array.hpp>
+
+BYTE FileSystem::buf[sizeof(FileSystem)];
+
+void FileSystem::Init(BOOTINFO *binfo){
+ new ((void *)buf) FileSystem(binfo);
+}
+
+FileSystem::FileSystem(BOOTINFO *binfo):binfo(binfo){
+ //m_drivenum = binfo->bootdrive & ~0x80;
+ m_drivenum = 0;
+
+ //ClearTrace();
+ pio_set_iobase_addr(0x1f0, 0x3f0 , 0); // primary
+ //ShowAll();
+ int rc = 0;
+ //ClearTrace();
+ int numDev = reg_config();
+ //ShowAll();
+ debugprint("Found %d devices\n", numDev);
+
+ //---------- Try some commands in "polling" mode
+
+ //debugprint("Polling mode...\n" );
+
+ // do an ATA soft reset (SRST) and return the command block
+ // regs for device 0 in struct reg_cmd_info
+
+ //debugprint("Soft Reset...\n" );
+ ClearTrace();
+ rc = reg_reset(0, m_drivenum);
+ //debugprint("result:%d\n", rc);
+ //ShowAll();
+ if(rc){
+ debugprint("error! reg_reset failed\n");
+ ShowAll();
+ hung();
+ }
+ //\83p\81[\83e\83B\83V\83\87\83\93\83e\81[\83u\83\8b\82ð\93Ç\82Þ
+ if(ReadSector(m_drivenum, 1, 0, (BYTE *)&mbr, sizeof(mbr), 1)){
+ debugprint("error! ReadSector failed\n");
+ ShowAll();
+ hung();
+ }
+ /*for(int i = 0; i < 32; i++){
+ for(int j = 0; j < 16; j++){
+ debugprint("%02X ", ((BYTE *)&mbr)[i * 16 + j]);
+ }
+ debugprint("\n");
+ }*/
+
+ //debugprint("beginlba:0x%X\n", mbr.pt[pat_index].begin_lba);
+ if(ReadSector(m_drivenum, 1, mbr.pt[pat_index].begin_lba, readbuf, READBUFSIZE, 1)){
+ debugprint("error! ReadSector failed\n");
+ ShowAll();
+ hung();
+ }
+ memcpy(&bootsect, readbuf, sizeof(bootsect));
+
+ if(getclustersize() > READBUFSIZE){
+ debugprint("error! getclustersize()(%d) > READBUFSIZE(%d)\n", getclustersize(), READBUFSIZE);
+ ShowAll();
+ hung();
+ }
+
+ FileList(bootsect.BPB_RootClus);
+}
+
+//----------------------class FileSystem::File--------------------------//
+FileSystem::File::File(FileSystem *fs, const wchar_t *filename, DIRENT *ent, DWORD pos):fs(fs){
+ int len = wcslen(filename);
+ this->filename = new wchar_t [len + 1];
+ memcpy(this->filename, filename, (len + 1) * sizeof(wchar_t));
+ size = ent->DIR_FileSize;
+ curpos = pos;
+ startclus = ent->getfirstclus();
+ curclus = INVLID_CLUS;
+ //debugprint("ad:%d %p\n", fs->bootsect.BPB_BytsPerSec, &fs->bootsect.BPB_BytsPerSec);
+
+}
+
+int FileSystem::File::Seek(DWORD offset, SEEK_ORG seekorg){
+ DWORD newoffset = 0;
+
+
+ if(seekorg == SEEK_ORG::SET){
+ newoffset = offset;
+ }else if(seekorg == SEEK_ORG::CUR){
+ newoffset = curpos + offset;
+ }else if(seekorg == SEEK_ORG::END){
+ newoffset = size + offset;
+ }else{
+ debugprint("can not recognize seekorg:%d in %s\n", seekorg, __FUNCTION__);
+ return 1;
+ }
+
+ DWORD virtual_clus = fs->getclusindexbysize(newoffset);
+ DWORD virtual_cur_clus = fs->getclusindexbysize(curpos);
+ if(virtual_clus != virtual_cur_clus){
+ curclus = -1;
+ }
+ curpos = newoffset;
+ return 0;
+}
+
+int FileSystem::File::Read(BYTE *buf, int len){
+ if(size < (len + curpos)){
+ len = size - curpos;
+ }
+ //debugprint("c:%d %d %d\n", curpos, curclus, fs->getclustersize());
+
+ BYTE *oldbuf = buf;
+ reload_curclus();
+ DWORD readclus = ((size + len - 1) / fs->getclustersize()) - (size / fs->getclustersize()) + 1;
+ //debugprint("a:%d %d\n", curpos, curclus);
+
+
+ //\8dÅ\8f\89\82Ì\83N\83\89\83X\83^\82ð\93Ç\82Þ
+ DWORD firstremaind = fs->getclustersize() - curpos % fs->getclustersize();
+ DWORD firstreadbyte = firstremaind > len ? len : firstremaind;
+ fs->ReadCluster(curclus);
+ memcpy(buf, fs->readbuf + curpos % fs->getclustersize(), firstreadbyte);
+ buf += firstreadbyte;
+ curpos += firstreadbyte;
+ //debugprint("firstreadbyte:%d\n", firstreadbyte);
+ if(firstremaind <= len){
+ curclus = fs->GetNextCluster(curclus);
+ }
+
+ //debugprint("2:%d\n", (len - firstreadbyte) / fs->getclustersize());
+ //hung();
+
+ //\90^\82ñ\92\86\95Ó\82Ì\83N\83\89\83X\83^\82ð\93Ç\82Þ
+ for(int i = 0; i < (len - firstreadbyte) / fs->getclustersize(); i++){
+ fs->ReadCluster(curclus);
+ memcpy(buf, fs->readbuf, fs->getclustersize());
+ buf += fs->getclustersize();
+ curclus = fs->GetNextCluster(curclus);
+ curpos += fs->getclustersize();
+ }
+
+ //\8dÅ\8cã\82Ì\83N\83\89\83X\83^\82ð\93Ç\82Þ
+ int remaind = (oldbuf + len) - buf;
+ //debugprint("3:%d\n", remaind);
+
+ if(remaind){
+ fs->ReadCluster(curclus);
+ memcpy(buf, fs->readbuf, remaind);
+ curpos += remaind;
+ }
+ return len;
+}
+
+void FileSystem::File::reload_curclus(){
+ if(curclus == INVLID_CLUS){
+ curclus = startclus;
+
+ for(int i = 0; i < curpos / fs->getclustersize(); i++){
+ curclus = fs->GetNextCluster(curclus);
+ }
+ }
+}
+
+
+void FileSystem::ClearTrace( void ){
+ // clear the command history and low level traces
+ trc_cht_dump0(); // zero the command history
+ trc_llt_dump0(); // zero the low level trace
+}
+
+void FileSystem::pause(){}
+
+void FileSystem::ShowAll( void ){
+ int lc = 0;
+ char * cp;
+
+ debugprint( "ERROR !\n" );
+
+ // display the command error information
+ trc_err_dump1(); // start
+ while ( 1 ){
+ lc++;
+ cp = trc_err_dump2(); // get and display a line
+ if ( cp == NULL )
+ break;
+ Screen::Inst().puts("1 ");
+ Screen::Inst().puts(cp);
+ Screen::Inst().puts("\n");
+ }
+ pause();
+ debugprint("1 END\n");
+// for(;;);
+
+ // display the command history
+ trc_cht_dump1(); // start
+ while ( 1 )
+ {
+ cp = trc_cht_dump2(); // get and display a line
+ if ( cp == NULL )
+ break;
+ Screen::Inst().puts("2 ");
+ Screen::Inst().puts(cp);
+ Screen::Inst().puts("\n");
+ lc ++ ;
+ if ( ! ( lc & 0x000f ) )
+ pause();
+ }
+ debugprint("2 END\n");
+
+ // display the low level trace
+ trc_llt_dump1(); // start
+ while ( 1 )
+ {
+ cp = trc_llt_dump2(); // get and display a line
+ if ( cp == NULL )
+ break;
+ Screen::Inst().puts("3 ");
+ Screen::Inst().puts(cp);
+ Screen::Inst().puts("\n");
+ lc ++ ;
+ if ( ! ( lc & 0x000f ) )
+ pause();
+ }
+ debugprint("3 END\n");
+ if ( lc & 0x000f )
+ pause();
+}
+
+
+int FileSystem::ReadSector(int dev, int sectorcount, QWORD lba, BYTE *buf, int bufsize, int numsect){
+ reg_buffer_size = bufsize;
+
+ memset(buf, 0, bufsize);
+ ClearTrace();
+ int rc = reg_pio_data_in_lba48(dev, CMD_READ_SECTORS_EXT, 0, sectorcount,
+ (DWORD)((lba & 0xFFFF00000000LLU) >> 32), (DWORD)(lba & 0xFFFFFFFF),
+ 0, (int)buf, numsect, 0
+ );
+ return rc;
+ //ShowAll();
+}
+
+DWORD FileSystem::getclustersize()const{
+ //debugprint("getclustersize %d * %d", bootsect.BPB_BytsPerSec, bootsect.BPB_SecPerClus);
+ return bootsect.BPB_BytsPerSec * bootsect.BPB_SecPerClus;
+}
+
+DWORD FileSystem::firstdatasector()const{
+ //FirstDataSector = BPB_ResvdSecCnt + (BPB_NumFATs * FATSz) + RootDirSectors;
+ //RootDirSectors : always zero
+ return bootsect.BPB_RsvdSecCnt + (bootsect.BPB_NumFATs * bootsect.BPB_FATSz32) + mbr.pt[pat_index].begin_lba;
+}
+
+DWORD FileSystem::getsectorbyclus(DWORD clus)const{
+ return (clus - 2) * bootsect.BPB_SecPerClus + firstdatasector();
+}
+
+//size\82Ì\83f\81[\83^\82ð\8eû\82ß\82é\82Ì\82É\95K\97v\82È\83N\83\89\83X\83^\90\94
+DWORD FileSystem::getcluscountbysize(DWORD size)const{
+ return (size + getclustersize() - 1) / getclustersize();
+}
+
+//size\82Ì\8fê\8f\8a\82ª\8f\8a\91®\82·\82é\83N\83\89\83X\83^\82Ì\83C\83\93\83f\83b\83N\83X
+DWORD FileSystem::getclusindexbysize(DWORD size)const{
+ return (size / getclustersize());
+}
+
+//n\94Ô\96Ú\82ÌFAT\83N\83\89\83X\83^\83G\83\93\83g\83\8a\82Ì\83Z\83N\83^\81[
+DWORD FileSystem::getfatsector(DWORD n)const{
+ return bootsect.BPB_RsvdSecCnt + (n * bootsect.BPB_FATSz32) + mbr.pt[pat_index].begin_lba;
+}
+
+
+int FileSystem::ReadCluster(int clusternum){
+ DWORD clus = getsectorbyclus(clusternum);
+ if(ReadSector(m_drivenum, bootsect.BPB_SecPerClus
+ , clus, readbuf, getclustersize(), bootsect.BPB_SecPerClus)){
+ debugprint("error! ReadSector failed\n");
+ ShowAll();
+ hung();
+ }
+ return 1;
+}
+
+
+int FileSystem::FileList(DWORD dirclus){
+ ReadCluster(dirclus);
+ DIRENT *dirent = (DIRENT *)readbuf;
+
+ int i = 0;
+ for(i = 0; i < READBUFSIZE / sizeof(DIRENT); i++){
+ if(dirent[i].DIR_Name[0] == '\0'){
+ break;
+ }
+ char s[100] = "";
+ int p = 0;
+ for(int j = 0; j < 8; j++){
+ if(dirent[i].DIR_Name[j] == '\x20'){
+ break;
+ }
+
+ s[p++] = dirent[i].DIR_Name[j];
+ }
+ if(dirent[i].DIR_Name[8] != '\x20'){
+ s[p++] = '.';
+ }
+ for(int j = 8; j < 11; j++){
+ if(dirent[i].DIR_Name[j] == '\x20'){
+ break;
+ }
+ s[p++] = dirent[i].DIR_Name[j];
+ }
+ //debugprint("%s %d\n", s, dirent[i].DIR_FileSize);
+ }
+ //debugprint("ab:%d %p\n", bootsect.BPB_BytsPerSec, &bootsect.BPB_BytsPerSec);
+
+ return i;
+}
+
+
+
+FileSystem::File *FileSystem::CreateFile(
+ const wchar_t *filename,
+ DWORD dwAccess, // \83A\83N\83Z\83X\8ew\92è
+ DWORD dwShare, // \8b¤\97L\95û\96@
+ DWORD psa, // \83Z\83L\83\85\83\8a\83e\83B\91®\90«
+ DWORD dwCreateDisposition, // \93®\8dì\8ew\92è
+ DWORD dwFlagsAndAttributes, // \83t\83\89\83O\82Æ\91®\90«
+ HANDLE hTemplate // \83e\83\93\83v\83\8c\81[\83g\83t\83@\83C\83\8b
+){
+ //debugprint("test:%c %c %c\n", filename[1], filename[3], filename[4]);
+
+ if(iswalpha(filename[0]) && filename[1] == L':'){
+ //\90â\91Î\83p\83X\8ew\92è
+ if(towupper(filename[0]) == L'C'){
+ int pos = 3, prevpos = pos;
+ DWORD curclus = bootsect.BPB_RootClus;
+
+ //debugprint("finding:%p\n", wcslen(filename) + 1);
+ boost::scoped_array<wchar_t> finding(new wchar_t[wcslen(filename) + 1]);
+
+ while(1){
+ for(; filename[pos] != L'\\' && filename[pos] != L'/' && filename[pos] != L'\0'; pos++){
+ finding[pos - prevpos] = filename[pos];
+ }
+ finding[pos - prevpos] = L'\0';
+ pos++;
+ prevpos = pos;
+
+ bool found = false;
+ DIRENT ent;
+ if(!FindEnt(curclus, finding.get(), &ent)){
+ //\8c©\82Â\82©\82ç\82È\82©\82Á\82½
+ debugprint("not found %c %c %c\n", finding[0], finding[1], finding[2]);
+ return NULL;
+ }
+
+ if(filename[pos - 1] == L'\0'){
+ //\8dÅ\8cã\82Ì\83T\83u\83f\83B\83\8c\83N\83g\83\8a(\83t\83@\83C\83\8b)\82È\82ç
+
+ if(ent.DIR_Attr & ATTR_DIRECTORY){
+ debugprint("opening directory... not implemented\n");
+ hung();
+ }
+
+ return new File(this, filename, &ent, 0);
+ }
+ if((ent.DIR_Attr & ATTR_DIRECTORY) == 0){
+ //\8dÅ\8cã\82Ì\83T\83u\83f\83B\83\8c\83N\83g\83\8a(\83t\83@\83C\83\8b)\82¶\82á\82È\82¢\82Ì\82É\95\81\92Ê\82Ì\83t\83@\83C\83\8b\82¾\82Á\82½
+ //c:\dir\file.txt\dir \82Ý\82½\82¢\82È
+ return NULL;
+ }
+ curclus = ent.getfirstclus();
+ }
+ }else{
+ return 0;
+ }
+ }
+}
+
+
+
+void FileSystem::ConvertShortName(char *dest, const char *name){
+ int p = 0;
+ for(int j = 0; j < 8; j++){
+ if(name[j] == '\x20'){
+ break;
+ }
+ dest[p++] = name[j];
+ }
+ if(name[8] != '\x20'){
+ dest[p++] = '.';
+ }
+ for(int j = 8; j < 11; j++){
+ if(name[j] == '\x20'){
+ break;
+ }
+ dest[p++] = name[j];
+ }
+ dest[p] = '\0';
+}
+
+bool FileSystem::FindEnt(DWORD dirclus, const wchar_t *finding, DIRENT *fdirent){
+ char name[20];
+ bool found = false;
+ while(1){
+ dirclus &= 0x0FFFFFFF;
+ //\83N\83\89\83X\83^\83`\83F\81[\83\93\82Ì\8fI\97¹==\8dÅ\8cã\82Ì\83G\83\93\83g\83\8a\82Ü\82Å\92T\82µ\82½\82¯\82Ç\8c©\82Â\82©\82ç\82È\82©\82Á\82½
+ if(dirclus >= 0x0ffffff8){
+ break;
+ }
+
+ ReadCluster(dirclus);
+ DIRENT *dirent = (DIRENT *)readbuf;
+ int i = 0;
+ for(; i < getclustersize() / sizeof(DIRENT); i++){
+ if(dirent[i].DIR_Name[0] == 0xE5){//\96¢\8eg\97p\83G\83\93\83g\83\8a
+ continue;
+ }
+ if(dirent[i].DIR_Name[0] == 0x00){//\8dÅ\8fI\83G\83\93\83g\83\8a
+ break;
+ }
+ if(dirent[i].DIR_Attr & 0x0F){//long name \83G\83\93\83g\83\8a
+ continue;
+ }
+ ConvertShortName(name, dirent[i].DIR_Name);
+
+ //\83t\83@\83C\83\8b\96¼\82Ì\94ä\8ar
+ wchar_t wname[50];
+ mbstowcs(wname, name, sizeof(wname) / sizeof(wname[0]));
+ if(wcslen(wname) == wcslen(finding)){
+ if(wcsicmp(wname, finding) == 0){
+ found = true;
+ *fdirent = dirent[i];
+ break;
+ }
+ }
+ /*char test[300];
+ for(int j = 0; j < 300; j++){
+ if(!(test[j] = finding[j])){
+ break;
+ }
+ }*/
+ //debugprint("s:%s %s %d\n", name, test, found);
+
+ }
+ //\96Ú\93I\82Ì\83t\83@\83C\83\8b\82ª\8c©\82Â\82©\82Á\82½\82Ì\82Å\8e\9f\82Ì\83T\83u\83f\83B\83\8c\83N\83g\83\8a\92T\82µ\82Ö
+ if(found){
+ break;
+ }
+ //\82±\82Ì\83N\83\89\83X\83^\82Å\83f\83B\83\8c\83N\83g\83\8a\83G\83\93\83g\83\8a\82ª\8fI\82í\82Á\82Ä\82¢\82½
+ if(i != getclustersize() / sizeof(DIRENT)){
+ break;
+ }
+ dirclus = GetNextCluster(dirclus);
+ }
+ return found;
+}
+
+DWORD FileSystem::GetNextCluster(DWORD clus){
+ clus &= 0x0fffffff;
+
+ DWORD sector = getfatsector() + (clus * 4 / bootsect.BPB_BytsPerSec);
+ ReadSector(m_drivenum, 1, sector, readbuf, bootsect.BPB_BytsPerSec, 1);
+
+ DWORD next = ((DWORD *)readbuf)[clus % (bootsect.BPB_BytsPerSec / 4)];
+ //debugprint("n:%d -> %d\n", clus, next);
+
+ return next;
+}
--- /dev/null
+#pragma once
+#include <new>
+#include "bootpack.h"
+#include "ata/ataio.h"
+#include "typedefs.h"
+#include "fat32.h"
+
+class FileSystem{
+public:
+ static void Init(BOOTINFO *binfo);
+
+ static FileSystem &Inst(){
+ return *(FileSystem *)buf;
+ }
+
+ class File{
+ public:
+ File(FileSystem *fs, const wchar_t *filename, DIRENT *ent, DWORD pos);
+
+ enum class SEEK_ORG{
+ SET,CUR,END
+ };
+ int Seek(DWORD offset, SEEK_ORG seekorg);
+ int Read(BYTE *buf, int len);
+ DWORD Size(){
+ return size;
+ }
+ private:
+ DWORD size;
+ DWORD curpos;
+ DWORD curclus;
+ DWORD startclus;
+ wchar_t *filename;
+ static const DWORD INVLID_CLUS = 0xffffffff;
+
+ FileSystem *fs;
+ void reload_curclus();
+
+ };
+ DWORD getclustersize()const;
+ DWORD firstdatasector()const;
+ DWORD getsectorbyclus(DWORD clus)const;
+
+ DWORD getcluscountbysize(DWORD size)const;
+ DWORD getclusindexbysize(DWORD size)const;
+ DWORD getfatsector(DWORD n = 0)const;
+
+ File *CreateFile(
+ const wchar_t *filename,
+ DWORD dwAccess, // \83A\83N\83Z\83X\8ew\92è
+ DWORD dwShare, // \8b¤\97L\95û\96@
+ DWORD psa, // \83Z\83L\83\85\83\8a\83e\83B\91®\90«
+ DWORD dwCreateDisposition, // \93®\8dì\8ew\92è
+ DWORD dwFlagsAndAttributes, // \83t\83\89\83O\82Æ\91®\90«
+ HANDLE hTemplate // \83e\83\93\83v\83\8c\81[\83g\83t\83@\83C\83\8b
+ );
+private:
+ static BYTE buf[];
+ static void* operator new(size_t size, void* pbuf){ return pbuf; }
+ FileSystem(BOOTINFO *binfo);
+
+ void ClearTrace( void );
+ void pause();
+ void ShowAll( void );
+
+ int ReadSector(int dev, int sectorcount, QWORD lba, BYTE *buf, int bufsize, int numsect);
+
+ static const int pat_index = 0;
+ BOOTINFO *binfo;
+ int m_drivenum;
+ static const int READBUFSIZE = 4096;
+ BYTE readbuf[READBUFSIZE];
+ MBR_SECTOR mbr;
+
+ //----------------------FAT32------------------------
+ FAT32_BOOTSECTOR bootsect;
+ struct FILEHANDLE{
+ bool used;
+ wchar_t *filename;
+
+ };
+
+ int FileList(DWORD dirclus);
+ int ReadCluster(int clusternum);
+ static void ConvertShortName(char *dest, const char *name);
+ DWORD GetNextCluster(DWORD clus);
+
+ bool FindEnt(DWORD dirclus, const wchar_t *finding, DIRENT *fdirent);
+};
+
--- /dev/null
+/* \83O\83\89\83t\83B\83b\83N\8f\88\97\9d\8aÖ\8cW */
+
+#include "bootpack.h"
+
+void init_palette(void)
+{
+ static unsigned char table_rgb[16 * 3] = {
+ 0x00, 0x00, 0x00, /* 0:\8d\95 */
+ 0xff, 0x00, 0x00, /* 1:\96¾\82é\82¢\90Ô */
+ 0x00, 0xff, 0x00, /* 2:\96¾\82é\82¢\97Î */
+ 0xff, 0xff, 0x00, /* 3:\96¾\82é\82¢\89©\90F */
+ 0x00, 0x00, 0xff, /* 4:\96¾\82é\82¢\90Â */
+ 0xff, 0x00, 0xff, /* 5:\96¾\82é\82¢\8e\87 */
+ 0x00, 0xff, 0xff, /* 6:\96¾\82é\82¢\90\85\90F */
+ 0xff, 0xff, 0xff, /* 7:\94\92 */
+ 0xc6, 0xc6, 0xc6, /* 8:\96¾\82é\82¢\8aD\90F */
+ 0x84, 0x00, 0x00, /* 9:\88Ã\82¢\90Ô */
+ 0x00, 0x84, 0x00, /* 10:\88Ã\82¢\97Î */
+ 0x84, 0x84, 0x00, /* 11:\88Ã\82¢\89©\90F */
+ 0x00, 0x00, 0x84, /* 12:\88Ã\82¢\90Â */
+ 0x84, 0x00, 0x84, /* 13:\88Ã\82¢\8e\87 */
+ 0x00, 0x84, 0x84, /* 14:\88Ã\82¢\90\85\90F */
+ 0x84, 0x84, 0x84 /* 15:\88Ã\82¢\8aD\90F */
+ };
+ unsigned char table2[216 * 3];
+ int r, g, b;
+ set_palette(0, 15, table_rgb);
+ for (b = 0; b < 6; b++) {
+ for (g = 0; g < 6; g++) {
+ for (r = 0; r < 6; r++) {
+ table2[(r + g * 6 + b * 36) * 3 + 0] = r * 51;
+ table2[(r + g * 6 + b * 36) * 3 + 1] = g * 51;
+ table2[(r + g * 6 + b * 36) * 3 + 2] = b * 51;
+ }
+ }
+ }
+ set_palette(16, 231, table2);
+ return;
+}
+
+void set_palette(int start, int end, unsigned char *rgb)
+{
+ int i, eflags;
+ eflags = io_load_eflags(); /* \8a\84\82è\8d\9e\82Ý\8b\96\89Â\83t\83\89\83O\82Ì\92l\82ð\8bL\98^\82·\82é */
+ io_cli(); /* \8b\96\89Â\83t\83\89\83O\82ð0\82É\82µ\82Ä\8a\84\82è\8d\9e\82Ý\8bÖ\8e~\82É\82·\82é */
+ io_out8(0x03c8, start);
+ for (i = start; i <= end; i++) {
+ io_out8(0x03c9, rgb[0] / 4);
+ io_out8(0x03c9, rgb[1] / 4);
+ io_out8(0x03c9, rgb[2] / 4);
+ rgb += 3;
+ }
+ io_store_eflags(eflags); /* \8a\84\82è\8d\9e\82Ý\8b\96\89Â\83t\83\89\83O\82ð\8c³\82É\96ß\82· */
+ return;
+}
+
+void boxfill8(unsigned char *vram, int xsize, unsigned char c, int x0, int y0, int x1, int y1)
+{
+ int x, y;
+ for (y = y0; y <= y1; y++) {
+ for (x = x0; x <= x1; x++)
+ vram[y * xsize + x] = c;
+ }
+ return;
+}
+
+void init_screen8(char *vram, int x, int y)
+{
+ boxfill8(vram, x, COL8_008484, 0, 0, x - 1, y - 29);
+ boxfill8(vram, x, COL8_C6C6C6, 0, y - 28, x - 1, y - 28);
+ boxfill8(vram, x, COL8_FFFFFF, 0, y - 27, x - 1, y - 27);
+ boxfill8(vram, x, COL8_C6C6C6, 0, y - 26, x - 1, y - 1);
+
+ boxfill8(vram, x, COL8_FFFFFF, 3, y - 24, 59, y - 24);
+ boxfill8(vram, x, COL8_FFFFFF, 2, y - 24, 2, y - 4);
+ boxfill8(vram, x, COL8_848484, 3, y - 4, 59, y - 4);
+ boxfill8(vram, x, COL8_848484, 59, y - 23, 59, y - 5);
+ boxfill8(vram, x, COL8_000000, 2, y - 3, 59, y - 3);
+ boxfill8(vram, x, COL8_000000, 60, y - 24, 60, y - 3);
+
+ boxfill8(vram, x, COL8_848484, x - 47, y - 24, x - 4, y - 24);
+ boxfill8(vram, x, COL8_848484, x - 47, y - 23, x - 47, y - 4);
+ boxfill8(vram, x, COL8_FFFFFF, x - 47, y - 3, x - 4, y - 3);
+ boxfill8(vram, x, COL8_FFFFFF, x - 3, y - 24, x - 3, y - 3);
+ return;
+}
+
+void putfont8(char *vram, int xsize, int x, int y, char c, char *font)
+{
+ int i;
+ char *p, d /* data */;
+ for (i = 0; i < 16; i++) {
+ p = vram + (y + i) * xsize + x;
+ d = font[i];
+ if ((d & 0x80) != 0) { p[0] = c; }
+ if ((d & 0x40) != 0) { p[1] = c; }
+ if ((d & 0x20) != 0) { p[2] = c; }
+ if ((d & 0x10) != 0) { p[3] = c; }
+ if ((d & 0x08) != 0) { p[4] = c; }
+ if ((d & 0x04) != 0) { p[5] = c; }
+ if ((d & 0x02) != 0) { p[6] = c; }
+ if ((d & 0x01) != 0) { p[7] = c; }
+ }
+ return;
+}
+
+void putfonts8_asc(char *vram, int xsize, int x, int y, char c, unsigned char *s)
+{
+ extern char hankaku[4096];
+ struct TASK *task = task_now();
+ char *nihongo = (char *) *((int *) 0x0fe8), *font;
+ int k, t;
+
+ if (task->langmode == 0) {
+ for (; *s != 0x00; s++) {
+ putfont8(vram, xsize, x, y, c, hankaku + *s * 16);
+ x += 8;
+ }
+ }
+ if (task->langmode == 1) {
+ for (; *s != 0x00; s++) {
+ if (task->langbyte1 == 0) {
+ if ((0x81 <= *s && *s <= 0x9f) || (0xe0 <= *s && *s <= 0xfc)) {
+ task->langbyte1 = *s;
+ } else {
+ putfont8(vram, xsize, x, y, c, nihongo + *s * 16);
+ }
+ } else {
+ if (0x81 <= task->langbyte1 && task->langbyte1 <= 0x9f) {
+ k = (task->langbyte1 - 0x81) * 2;
+ } else {
+ k = (task->langbyte1 - 0xe0) * 2 + 62;
+ }
+ if (0x40 <= *s && *s <= 0x7e) {
+ t = *s - 0x40;
+ } else if (0x80 <= *s && *s <= 0x9e) {
+ t = *s - 0x80 + 63;
+ } else {
+ t = *s - 0x9f;
+ k++;
+ }
+ task->langbyte1 = 0;
+ font = nihongo + 256 * 16 + (k * 94 + t) * 32;
+ putfont8(vram, xsize, x - 8, y, c, font ); /* \8d¶\94¼\95ª */
+ putfont8(vram, xsize, x , y, c, font + 16); /* \89E\94¼\95ª */
+ }
+ x += 8;
+ }
+ }
+ if (task->langmode == 2) {
+ for (; *s != 0x00; s++) {
+ if (task->langbyte1 == 0) {
+ if (0x81 <= *s && *s <= 0xfe) {
+ task->langbyte1 = *s;
+ } else {
+ putfont8(vram, xsize, x, y, c, nihongo + *s * 16);
+ }
+ } else {
+ k = task->langbyte1 - 0xa1;
+ t = *s - 0xa1;
+ task->langbyte1 = 0;
+ font = nihongo + 256 * 16 + (k * 94 + t) * 32;
+ putfont8(vram, xsize, x - 8, y, c, font ); /* \8d¶\94¼\95ª */
+ putfont8(vram, xsize, x , y, c, font + 16); /* \89E\94¼\95ª */
+ }
+ x += 8;
+ }
+ }
+ return;
+}
+
+void init_mouse_cursor8(char *mouse, char bc)
+/* \83}\83E\83X\83J\81[\83\\83\8b\82ð\8f\80\94õ\81i16x16\81j */
+{
+ static char cursor[16][16] = {
+ "**************..",
+ "*OOOOOOOOOOO*...",
+ "*OOOOOOOOOO*....",
+ "*OOOOOOOOO*.....",
+ "*OOOOOOOO*......",
+ "*OOOOOOO*.......",
+ "*OOOOOOO*.......",
+ "*OOOOOOOO*......",
+ "*OOOO**OOO*.....",
+ "*OOO*..*OOO*....",
+ "*OO*....*OOO*...",
+ "*O*......*OOO*..",
+ "**........*OOO*.",
+ "*..........*OOO*",
+ "............*OO*",
+ ".............***"
+ };
+ int x, y;
+
+ for (y = 0; y < 16; y++) {
+ for (x = 0; x < 16; x++) {
+ if (cursor[y][x] == '*') {
+ mouse[y * 16 + x] = COL8_000000;
+ }
+ if (cursor[y][x] == 'O') {
+ mouse[y * 16 + x] = COL8_FFFFFF;
+ }
+ if (cursor[y][x] == '.') {
+ mouse[y * 16 + x] = bc;
+ }
+ }
+ }
+ return;
+}
+
+void putblock8_8(char *vram, int vxsize, int pxsize,
+ int pysize, int px0, int py0, char *buf, int bxsize)
+{
+ int x, y;
+ for (y = 0; y < pysize; y++) {
+ for (x = 0; x < pxsize; x++) {
+ vram[(py0 + y) * vxsize + (px0 + x)] = buf[y * bxsize + x];
+ }
+ }
+ return;
+}
--- /dev/null
+ 1 00000000 [FORMAT "WCOFF"]
+ 2 00000000 [INSTRSET "i486p"]
+ 3 00000000 [OPTIMIZE 1]
+ 4 00000000 [OPTION 1]
+ 5 00000000 [BITS 32]
+ 6 00000000 EXTERN _table_rgb.0
+ 7 00000000 EXTERN _io_load_eflags
+ 8 00000000 EXTERN _io_cli
+ 9 00000000 EXTERN _io_out8
+ 10 00000000 EXTERN _io_store_eflags
+ 11 00000000 EXTERN _task_now
+ 12 00000000 EXTERN _hankaku
+ 13 00000000 [FILE "graphic.c"]
+ 14 [SECTION .data]
+ 15 00000000 _table_rgb.0:
+ 16 00000000 00 DB 0
+ 17 00000001 00 DB 0
+ 18 00000002 00 DB 0
+ 19 00000003 FF DB -1
+ 20 00000004 00 DB 0
+ 21 00000005 00 DB 0
+ 22 00000006 00 DB 0
+ 23 00000007 FF DB -1
+ 24 00000008 00 DB 0
+ 25 00000009 FF DB -1
+ 26 0000000A FF DB -1
+ 27 0000000B 00 DB 0
+ 28 0000000C 00 DB 0
+ 29 0000000D 00 DB 0
+ 30 0000000E FF DB -1
+ 31 0000000F FF DB -1
+ 32 00000010 00 DB 0
+ 33 00000011 FF DB -1
+ 34 00000012 00 DB 0
+ 35 00000013 FF DB -1
+ 36 00000014 FF DB -1
+ 37 00000015 FF DB -1
+ 38 00000016 FF DB -1
+ 39 00000017 FF DB -1
+ 40 00000018 C6 DB -58
+ 41 00000019 C6 DB -58
+ 42 0000001A C6 DB -58
+ 43 0000001B 84 DB -124
+ 44 0000001C 00 DB 0
+ 45 0000001D 00 DB 0
+ 46 0000001E 00 DB 0
+ 47 0000001F 84 DB -124
+ 48 00000020 00 DB 0
+ 49 00000021 84 DB -124
+ 50 00000022 84 DB -124
+ 51 00000023 00 DB 0
+ 52 00000024 00 DB 0
+ 53 00000025 00 DB 0
+ 54 00000026 84 DB -124
+ 55 00000027 84 DB -124
+ 56 00000028 00 DB 0
+ 57 00000029 84 DB -124
+ 58 0000002A 00 DB 0
+ 59 0000002B 84 DB -124
+ 60 0000002C 84 DB -124
+ 61 0000002D 84 DB -124
+ 62 0000002E 84 DB -124
+ 63 0000002F 84 DB -124
+ 64 [SECTION .text]
+ 65 00000000 GLOBAL _init_palette
+ 66 00000000 _init_palette:
+ 67 00000000 55 PUSH EBP
+ 68 00000001 89 E5 MOV EBP,ESP
+ 69 00000003 57 PUSH EDI
+ 70 00000004 56 PUSH ESI
+ 71 00000005 53 PUSH EBX
+ 72 00000006 81 EC 000002A4 SUB ESP,676
+ 73 0000000C 68 [00000000] PUSH _table_rgb.0
+ 74 00000011 6A 0F PUSH 15
+ 75 00000013 6A 00 PUSH 0
+ 76 00000015 E8 000000B4 CALL _set_palette
+ 77 0000001A 83 C4 0C ADD ESP,12
+ 78 0000001D C7 85 FFFFFD60 00000000 MOV DWORD [-672+EBP],0
+ 79 00000027 C7 85 FFFFFD5C 00000000 MOV DWORD [-676+EBP],0
+ 80 00000031 C7 85 FFFFFD58 00000000 MOV DWORD [-680+EBP],0
+ 81 0000003B L16:
+ 82 0000003B 31 FF XOR EDI,EDI
+ 83 0000003D 31 F6 XOR ESI,ESI
+ 84 0000003F 31 DB XOR EBX,EBX
+ 85 00000041 L15:
+ 86 00000041 31 D2 XOR EDX,EDX
+ 87 00000043 C7 85 FFFFFD50 00000000 MOV DWORD [-688+EBP],0
+ 88 0000004D L14:
+ 89 0000004D 8B 85 FFFFFD58 MOV EAX,DWORD [-680+EBP]
+ 90 00000053 8A 8D FFFFFD50 MOV CL,BYTE [-688+EBP]
+ 91 00000059 01 D8 ADD EAX,EBX
+ 92 0000005B 01 D0 ADD EAX,EDX
+ 93 0000005D 42 INC EDX
+ 94 0000005E 6B C0 03 IMUL EAX,EAX,3
+ 95 00000061 88 8C 05 FFFFFD64 MOV BYTE [-668+EBP+EAX*1],CL
+ 96 00000068 89 F1 MOV ECX,ESI
+ 97 0000006A 88 8C 05 FFFFFD65 MOV BYTE [-667+EBP+EAX*1],CL
+ 98 00000071 8A 8D FFFFFD5C MOV CL,BYTE [-676+EBP]
+ 99 00000077 88 8C 05 FFFFFD66 MOV BYTE [-666+EBP+EAX*1],CL
+ 100 0000007E 83 85 FFFFFD50 33 ADD DWORD [-688+EBP],51
+ 101 00000085 83 FA 05 CMP EDX,5
+ 102 00000088 7E C3 JLE L14
+ 103 0000008A 47 INC EDI
+ 104 0000008B 83 C6 33 ADD ESI,51
+ 105 0000008E 83 C3 06 ADD EBX,6
+ 106 00000091 83 FF 05 CMP EDI,5
+ 107 00000094 7E AB JLE L15
+ 108 00000096 FF 85 FFFFFD60 INC DWORD [-672+EBP]
+ 109 0000009C 83 85 FFFFFD5C 33 ADD DWORD [-676+EBP],51
+ 110 000000A3 83 85 FFFFFD58 24 ADD DWORD [-680+EBP],36
+ 111 000000AA 83 BD FFFFFD60 05 CMP DWORD [-672+EBP],5
+ 112 000000B1 7E 88 JLE L16
+ 113 000000B3 8D 85 FFFFFD64 LEA EAX,DWORD [-668+EBP]
+ 114 000000B9 50 PUSH EAX
+ 115 000000BA 68 000000E7 PUSH 231
+ 116 000000BF 6A 10 PUSH 16
+ 117 000000C1 E8 00000008 CALL _set_palette
+ 118 000000C6 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 119 000000C9 5B POP EBX
+ 120 000000CA 5E POP ESI
+ 121 000000CB 5F POP EDI
+ 122 000000CC 5D POP EBP
+ 123 000000CD C3 RET
+ 124 000000CE GLOBAL _set_palette
+ 125 000000CE _set_palette:
+ 126 000000CE 55 PUSH EBP
+ 127 000000CF 89 E5 MOV EBP,ESP
+ 128 000000D1 57 PUSH EDI
+ 129 000000D2 56 PUSH ESI
+ 130 000000D3 53 PUSH EBX
+ 131 000000D4 51 PUSH ECX
+ 132 000000D5 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 133 000000D8 8B 7D 0C MOV EDI,DWORD [12+EBP]
+ 134 000000DB 8B 75 10 MOV ESI,DWORD [16+EBP]
+ 135 000000DE E8 [00000000] CALL _io_load_eflags
+ 136 000000E3 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 137 000000E6 E8 [00000000] CALL _io_cli
+ 138 000000EB 53 PUSH EBX
+ 139 000000EC 68 000003C8 PUSH 968
+ 140 000000F1 E8 [00000000] CALL _io_out8
+ 141 000000F6 39 FB CMP EBX,EDI
+ 142 000000F8 58 POP EAX
+ 143 000000F9 5A POP EDX
+ 144 000000FA 7E 12 JLE L28
+ 145 000000FC L30:
+ 146 000000FC 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 147 000000FF 89 45 08 MOV DWORD [8+EBP],EAX
+ 148 00000102 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 149 00000105 5B POP EBX
+ 150 00000106 5E POP ESI
+ 151 00000107 5F POP EDI
+ 152 00000108 5D POP EBP
+ 153 00000109 E9 [00000000] JMP _io_store_eflags
+ 154 0000010E L28:
+ 155 0000010E 8A 06 MOV AL,BYTE [ESI]
+ 156 00000110 43 INC EBX
+ 157 00000111 C0 E8 02 SHR AL,2
+ 158 00000114 0F B6 C0 MOVZX EAX,AL
+ 159 00000117 50 PUSH EAX
+ 160 00000118 68 000003C9 PUSH 969
+ 161 0000011D E8 [00000000] CALL _io_out8
+ 162 00000122 8A 46 01 MOV AL,BYTE [1+ESI]
+ 163 00000125 C0 E8 02 SHR AL,2
+ 164 00000128 0F B6 C0 MOVZX EAX,AL
+ 165 0000012B 50 PUSH EAX
+ 166 0000012C 68 000003C9 PUSH 969
+ 167 00000131 E8 [00000000] CALL _io_out8
+ 168 00000136 8A 46 02 MOV AL,BYTE [2+ESI]
+ 169 00000139 C0 E8 02 SHR AL,2
+ 170 0000013C 83 C6 03 ADD ESI,3
+ 171 0000013F 0F B6 C0 MOVZX EAX,AL
+ 172 00000142 50 PUSH EAX
+ 173 00000143 68 000003C9 PUSH 969
+ 174 00000148 E8 [00000000] CALL _io_out8
+ 175 0000014D 83 C4 18 ADD ESP,24
+ 176 00000150 39 FB CMP EBX,EDI
+ 177 00000152 7E BA JLE L28
+ 178 00000154 EB A6 JMP L30
+ 179 00000156 GLOBAL _boxfill8
+ 180 00000156 _boxfill8:
+ 181 00000156 55 PUSH EBP
+ 182 00000157 89 E5 MOV EBP,ESP
+ 183 00000159 57 PUSH EDI
+ 184 0000015A 56 PUSH ESI
+ 185 0000015B 53 PUSH EBX
+ 186 0000015C 57 PUSH EDI
+ 187 0000015D 57 PUSH EDI
+ 188 0000015E 8A 45 10 MOV AL,BYTE [16+EBP]
+ 189 00000161 8B 4D 18 MOV ECX,DWORD [24+EBP]
+ 190 00000164 8B 7D 1C MOV EDI,DWORD [28+EBP]
+ 191 00000167 88 45 F3 MOV BYTE [-13+EBP],AL
+ 192 0000016A 3B 4D 20 CMP ECX,DWORD [32+EBP]
+ 193 0000016D 7F 31 JG L43
+ 194 0000016F 8B 5D 0C MOV EBX,DWORD [12+EBP]
+ 195 00000172 0F AF D9 IMUL EBX,ECX
+ 196 00000175 L41:
+ 197 00000175 8B 55 14 MOV EDX,DWORD [20+EBP]
+ 198 00000178 39 FA CMP EDX,EDI
+ 199 0000017A 7F 1B JG L45
+ 200 0000017C 8B 75 08 MOV ESI,DWORD [8+EBP]
+ 201 0000017F 01 DE ADD ESI,EBX
+ 202 00000181 01 D6 ADD ESI,EDX
+ 203 00000183 89 75 EC MOV DWORD [-20+EBP],ESI
+ 204 00000186 L40:
+ 205 00000186 8B 75 EC MOV ESI,DWORD [-20+EBP]
+ 206 00000189 8A 45 F3 MOV AL,BYTE [-13+EBP]
+ 207 0000018C 42 INC EDX
+ 208 0000018D 88 06 MOV BYTE [ESI],AL
+ 209 0000018F 46 INC ESI
+ 210 00000190 89 75 EC MOV DWORD [-20+EBP],ESI
+ 211 00000193 39 FA CMP EDX,EDI
+ 212 00000195 7E EF JLE L40
+ 213 00000197 L45:
+ 214 00000197 41 INC ECX
+ 215 00000198 03 5D 0C ADD EBX,DWORD [12+EBP]
+ 216 0000019B 3B 4D 20 CMP ECX,DWORD [32+EBP]
+ 217 0000019E 7E D5 JLE L41
+ 218 000001A0 L43:
+ 219 000001A0 5B POP EBX
+ 220 000001A1 5E POP ESI
+ 221 000001A2 5B POP EBX
+ 222 000001A3 5E POP ESI
+ 223 000001A4 5F POP EDI
+ 224 000001A5 5D POP EBP
+ 225 000001A6 C3 RET
+ 226 000001A7 GLOBAL _init_screen8
+ 227 000001A7 _init_screen8:
+ 228 000001A7 55 PUSH EBP
+ 229 000001A8 89 E5 MOV EBP,ESP
+ 230 000001AA 57 PUSH EDI
+ 231 000001AB 56 PUSH ESI
+ 232 000001AC 53 PUSH EBX
+ 233 000001AD 83 EC 0C SUB ESP,12
+ 234 000001B0 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 235 000001B3 8B 7D 0C MOV EDI,DWORD [12+EBP]
+ 236 000001B6 83 E8 1D SUB EAX,29
+ 237 000001B9 4F DEC EDI
+ 238 000001BA 50 PUSH EAX
+ 239 000001BB 57 PUSH EDI
+ 240 000001BC 6A 00 PUSH 0
+ 241 000001BE 6A 00 PUSH 0
+ 242 000001C0 6A 0E PUSH 14
+ 243 000001C2 FF 75 0C PUSH DWORD [12+EBP]
+ 244 000001C5 FF 75 08 PUSH DWORD [8+EBP]
+ 245 000001C8 E8 FFFFFF89 CALL _boxfill8
+ 246 000001CD 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 247 000001D0 83 E8 1C SUB EAX,28
+ 248 000001D3 50 PUSH EAX
+ 249 000001D4 57 PUSH EDI
+ 250 000001D5 50 PUSH EAX
+ 251 000001D6 6A 00 PUSH 0
+ 252 000001D8 6A 08 PUSH 8
+ 253 000001DA FF 75 0C PUSH DWORD [12+EBP]
+ 254 000001DD FF 75 08 PUSH DWORD [8+EBP]
+ 255 000001E0 E8 FFFFFF71 CALL _boxfill8
+ 256 000001E5 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 257 000001E8 83 C4 38 ADD ESP,56
+ 258 000001EB 83 E8 1B SUB EAX,27
+ 259 000001EE 50 PUSH EAX
+ 260 000001EF 57 PUSH EDI
+ 261 000001F0 50 PUSH EAX
+ 262 000001F1 6A 00 PUSH 0
+ 263 000001F3 6A 07 PUSH 7
+ 264 000001F5 FF 75 0C PUSH DWORD [12+EBP]
+ 265 000001F8 FF 75 08 PUSH DWORD [8+EBP]
+ 266 000001FB E8 FFFFFF56 CALL _boxfill8
+ 267 00000200 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 268 00000203 48 DEC EAX
+ 269 00000204 50 PUSH EAX
+ 270 00000205 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 271 00000208 57 PUSH EDI
+ 272 00000209 83 E8 1A SUB EAX,26
+ 273 0000020C 50 PUSH EAX
+ 274 0000020D 6A 00 PUSH 0
+ 275 0000020F 6A 08 PUSH 8
+ 276 00000211 FF 75 0C PUSH DWORD [12+EBP]
+ 277 00000214 FF 75 08 PUSH DWORD [8+EBP]
+ 278 00000217 E8 FFFFFF3A CALL _boxfill8
+ 279 0000021C 8B 75 10 MOV ESI,DWORD [16+EBP]
+ 280 0000021F 83 C4 38 ADD ESP,56
+ 281 00000222 83 EE 18 SUB ESI,24
+ 282 00000225 56 PUSH ESI
+ 283 00000226 6A 3B PUSH 59
+ 284 00000228 56 PUSH ESI
+ 285 00000229 6A 03 PUSH 3
+ 286 0000022B 6A 07 PUSH 7
+ 287 0000022D FF 75 0C PUSH DWORD [12+EBP]
+ 288 00000230 FF 75 08 PUSH DWORD [8+EBP]
+ 289 00000233 E8 FFFFFF1E CALL _boxfill8
+ 290 00000238 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 291 0000023B 83 E8 04 SUB EAX,4
+ 292 0000023E 50 PUSH EAX
+ 293 0000023F 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 294 00000242 6A 02 PUSH 2
+ 295 00000244 56 PUSH ESI
+ 296 00000245 6A 02 PUSH 2
+ 297 00000247 6A 07 PUSH 7
+ 298 00000249 FF 75 0C PUSH DWORD [12+EBP]
+ 299 0000024C FF 75 08 PUSH DWORD [8+EBP]
+ 300 0000024F E8 FFFFFF02 CALL _boxfill8
+ 301 00000254 83 C4 38 ADD ESP,56
+ 302 00000257 FF 75 F0 PUSH DWORD [-16+EBP]
+ 303 0000025A 6A 3B PUSH 59
+ 304 0000025C FF 75 F0 PUSH DWORD [-16+EBP]
+ 305 0000025F 6A 03 PUSH 3
+ 306 00000261 6A 0F PUSH 15
+ 307 00000263 FF 75 0C PUSH DWORD [12+EBP]
+ 308 00000266 FF 75 08 PUSH DWORD [8+EBP]
+ 309 00000269 E8 FFFFFEE8 CALL _boxfill8
+ 310 0000026E 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 311 00000271 83 E8 05 SUB EAX,5
+ 312 00000274 50 PUSH EAX
+ 313 00000275 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 314 00000278 6A 3B PUSH 59
+ 315 0000027A 83 E8 17 SUB EAX,23
+ 316 0000027D 50 PUSH EAX
+ 317 0000027E 89 45 EC MOV DWORD [-20+EBP],EAX
+ 318 00000281 6A 3B PUSH 59
+ 319 00000283 6A 0F PUSH 15
+ 320 00000285 FF 75 0C PUSH DWORD [12+EBP]
+ 321 00000288 FF 75 08 PUSH DWORD [8+EBP]
+ 322 0000028B E8 FFFFFEC6 CALL _boxfill8
+ 323 00000290 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 324 00000293 83 C4 38 ADD ESP,56
+ 325 00000296 83 E8 03 SUB EAX,3
+ 326 00000299 89 45 E8 MOV DWORD [-24+EBP],EAX
+ 327 0000029C 50 PUSH EAX
+ 328 0000029D 6A 3B PUSH 59
+ 329 0000029F 50 PUSH EAX
+ 330 000002A0 6A 02 PUSH 2
+ 331 000002A2 6A 00 PUSH 0
+ 332 000002A4 FF 75 0C PUSH DWORD [12+EBP]
+ 333 000002A7 FF 75 08 PUSH DWORD [8+EBP]
+ 334 000002AA E8 FFFFFEA7 CALL _boxfill8
+ 335 000002AF FF 75 E8 PUSH DWORD [-24+EBP]
+ 336 000002B2 6A 3C PUSH 60
+ 337 000002B4 56 PUSH ESI
+ 338 000002B5 6A 3C PUSH 60
+ 339 000002B7 6A 00 PUSH 0
+ 340 000002B9 FF 75 0C PUSH DWORD [12+EBP]
+ 341 000002BC FF 75 08 PUSH DWORD [8+EBP]
+ 342 000002BF E8 FFFFFE92 CALL _boxfill8
+ 343 000002C4 8B 7D 0C MOV EDI,DWORD [12+EBP]
+ 344 000002C7 83 C4 38 ADD ESP,56
+ 345 000002CA 8B 5D 0C MOV EBX,DWORD [12+EBP]
+ 346 000002CD 83 EB 04 SUB EBX,4
+ 347 000002D0 83 EF 2F SUB EDI,47
+ 348 000002D3 56 PUSH ESI
+ 349 000002D4 53 PUSH EBX
+ 350 000002D5 56 PUSH ESI
+ 351 000002D6 57 PUSH EDI
+ 352 000002D7 6A 0F PUSH 15
+ 353 000002D9 FF 75 0C PUSH DWORD [12+EBP]
+ 354 000002DC FF 75 08 PUSH DWORD [8+EBP]
+ 355 000002DF E8 FFFFFE72 CALL _boxfill8
+ 356 000002E4 FF 75 F0 PUSH DWORD [-16+EBP]
+ 357 000002E7 57 PUSH EDI
+ 358 000002E8 FF 75 EC PUSH DWORD [-20+EBP]
+ 359 000002EB 57 PUSH EDI
+ 360 000002EC 6A 0F PUSH 15
+ 361 000002EE FF 75 0C PUSH DWORD [12+EBP]
+ 362 000002F1 FF 75 08 PUSH DWORD [8+EBP]
+ 363 000002F4 E8 FFFFFE5D CALL _boxfill8
+ 364 000002F9 83 C4 38 ADD ESP,56
+ 365 000002FC FF 75 E8 PUSH DWORD [-24+EBP]
+ 366 000002FF 53 PUSH EBX
+ 367 00000300 FF 75 E8 PUSH DWORD [-24+EBP]
+ 368 00000303 57 PUSH EDI
+ 369 00000304 6A 07 PUSH 7
+ 370 00000306 FF 75 0C PUSH DWORD [12+EBP]
+ 371 00000309 FF 75 08 PUSH DWORD [8+EBP]
+ 372 0000030C E8 FFFFFE45 CALL _boxfill8
+ 373 00000311 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 374 00000314 FF 75 E8 PUSH DWORD [-24+EBP]
+ 375 00000317 83 E8 03 SUB EAX,3
+ 376 0000031A 50 PUSH EAX
+ 377 0000031B 56 PUSH ESI
+ 378 0000031C 50 PUSH EAX
+ 379 0000031D 6A 07 PUSH 7
+ 380 0000031F FF 75 0C PUSH DWORD [12+EBP]
+ 381 00000322 FF 75 08 PUSH DWORD [8+EBP]
+ 382 00000325 E8 FFFFFE2C CALL _boxfill8
+ 383 0000032A 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 384 0000032D 5B POP EBX
+ 385 0000032E 5E POP ESI
+ 386 0000032F 5F POP EDI
+ 387 00000330 5D POP EBP
+ 388 00000331 C3 RET
+ 389 00000332 GLOBAL _putfont8
+ 390 00000332 _putfont8:
+ 391 00000332 55 PUSH EBP
+ 392 00000333 89 E5 MOV EBP,ESP
+ 393 00000335 57 PUSH EDI
+ 394 00000336 56 PUSH ESI
+ 395 00000337 31 F6 XOR ESI,ESI
+ 396 00000339 53 PUSH EBX
+ 397 0000033A 8B 7D 1C MOV EDI,DWORD [28+EBP]
+ 398 0000033D 8A 5D 18 MOV BL,BYTE [24+EBP]
+ 399 00000340 L60:
+ 400 00000340 8B 45 14 MOV EAX,DWORD [20+EBP]
+ 401 00000343 8B 55 10 MOV EDX,DWORD [16+EBP]
+ 402 00000346 01 F0 ADD EAX,ESI
+ 403 00000348 0F AF 45 0C IMUL EAX,DWORD [12+EBP]
+ 404 0000034C 03 45 08 ADD EAX,DWORD [8+EBP]
+ 405 0000034F 8D 0C 02 LEA ECX,DWORD [EDX+EAX*1]
+ 406 00000352 8A 14 3E MOV DL,BYTE [ESI+EDI*1]
+ 407 00000355 84 D2 TEST DL,DL
+ 408 00000357 79 02 JNS L52
+ 409 00000359 88 19 MOV BYTE [ECX],BL
+ 410 0000035B L52:
+ 411 0000035B 88 D0 MOV AL,DL
+ 412 0000035D 83 E0 40 AND EAX,64
+ 413 00000360 84 C0 TEST AL,AL
+ 414 00000362 74 03 JE L53
+ 415 00000364 88 59 01 MOV BYTE [1+ECX],BL
+ 416 00000367 L53:
+ 417 00000367 88 D0 MOV AL,DL
+ 418 00000369 83 E0 20 AND EAX,32
+ 419 0000036C 84 C0 TEST AL,AL
+ 420 0000036E 74 03 JE L54
+ 421 00000370 88 59 02 MOV BYTE [2+ECX],BL
+ 422 00000373 L54:
+ 423 00000373 88 D0 MOV AL,DL
+ 424 00000375 83 E0 10 AND EAX,16
+ 425 00000378 84 C0 TEST AL,AL
+ 426 0000037A 74 03 JE L55
+ 427 0000037C 88 59 03 MOV BYTE [3+ECX],BL
+ 428 0000037F L55:
+ 429 0000037F 88 D0 MOV AL,DL
+ 430 00000381 83 E0 08 AND EAX,8
+ 431 00000384 84 C0 TEST AL,AL
+ 432 00000386 74 03 JE L56
+ 433 00000388 88 59 04 MOV BYTE [4+ECX],BL
+ 434 0000038B L56:
+ 435 0000038B 88 D0 MOV AL,DL
+ 436 0000038D 83 E0 04 AND EAX,4
+ 437 00000390 84 C0 TEST AL,AL
+ 438 00000392 74 03 JE L57
+ 439 00000394 88 59 05 MOV BYTE [5+ECX],BL
+ 440 00000397 L57:
+ 441 00000397 88 D0 MOV AL,DL
+ 442 00000399 83 E0 02 AND EAX,2
+ 443 0000039C 84 C0 TEST AL,AL
+ 444 0000039E 74 03 JE L58
+ 445 000003A0 88 59 06 MOV BYTE [6+ECX],BL
+ 446 000003A3 L58:
+ 447 000003A3 83 E2 01 AND EDX,1
+ 448 000003A6 84 D2 TEST DL,DL
+ 449 000003A8 74 03 JE L50
+ 450 000003AA 88 59 07 MOV BYTE [7+ECX],BL
+ 451 000003AD L50:
+ 452 000003AD 46 INC ESI
+ 453 000003AE 83 FE 0F CMP ESI,15
+ 454 000003B1 7E 8D JLE L60
+ 455 000003B3 5B POP EBX
+ 456 000003B4 5E POP ESI
+ 457 000003B5 5F POP EDI
+ 458 000003B6 5D POP EBP
+ 459 000003B7 C3 RET
+ 460 000003B8 GLOBAL _putfonts8_asc
+ 461 000003B8 _putfonts8_asc:
+ 462 000003B8 55 PUSH EBP
+ 463 000003B9 89 E5 MOV EBP,ESP
+ 464 000003BB 57 PUSH EDI
+ 465 000003BC 56 PUSH ESI
+ 466 000003BD 53 PUSH EBX
+ 467 000003BE 83 EC 0C SUB ESP,12
+ 468 000003C1 8A 45 18 MOV AL,BYTE [24+EBP]
+ 469 000003C4 8B 7D 1C MOV EDI,DWORD [28+EBP]
+ 470 000003C7 88 45 F3 MOV BYTE [-13+EBP],AL
+ 471 000003CA E8 [00000000] CALL _task_now
+ 472 000003CF 8B 15 00000FE8 MOV EDX,DWORD [4072]
+ 473 000003D5 89 45 EC MOV DWORD [-20+EBP],EAX
+ 474 000003D8 89 55 E8 MOV DWORD [-24+EBP],EDX
+ 475 000003DB 80 B8 000000BC 00 CMP BYTE [188+EAX],0
+ 476 000003E2 75 09 JNE L64
+ 477 000003E4 80 3F 00 CMP BYTE [EDI],0
+ 478 000003E7 0F 85 000001E2 JNE L69
+ 479 000003ED L64:
+ 480 000003ED 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 481 000003F0 80 B8 000000BC 01 CMP BYTE [188+EAX],1
+ 482 000003F7 0F 84 000000CB JE L100
+ 483 000003FD L70:
+ 484 000003FD 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 485 00000400 80 B8 000000BC 02 CMP BYTE [188+EAX],2
+ 486 00000407 74 08 JE L101
+ 487 00000409 L63:
+ 488 00000409 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 489 0000040C 5B POP EBX
+ 490 0000040D 5E POP ESI
+ 491 0000040E 5F POP EDI
+ 492 0000040F 5D POP EBP
+ 493 00000410 C3 RET
+ 494 00000411 L101:
+ 495 00000411 80 3F 00 CMP BYTE [EDI],0
+ 496 00000414 74 F3 JE L63
+ 497 00000416 L96:
+ 498 00000416 8B 55 EC MOV EDX,DWORD [-20+EBP]
+ 499 00000419 8A 82 000000BD MOV AL,BYTE [189+EDX]
+ 500 0000041F 84 C0 TEST AL,AL
+ 501 00000421 75 43 JNE L92
+ 502 00000423 8A 17 MOV DL,BYTE [EDI]
+ 503 00000425 8D 42 7F LEA EAX,DWORD [127+EDX]
+ 504 00000428 3C 7D CMP AL,125
+ 505 0000042A 77 15 JA L93
+ 506 0000042C 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 507 0000042F 88 90 000000BD MOV BYTE [189+EAX],DL
+ 508 00000435 L95:
+ 509 00000435 83 45 10 08 ADD DWORD [16+EBP],8
+ 510 00000439 47 INC EDI
+ 511 0000043A 80 3F 00 CMP BYTE [EDI],0
+ 512 0000043D 75 D7 JNE L96
+ 513 0000043F EB C8 JMP L63
+ 514 00000441 L93:
+ 515 00000441 0F B6 C2 MOVZX EAX,DL
+ 516 00000444 C1 E0 04 SAL EAX,4
+ 517 00000447 03 45 E8 ADD EAX,DWORD [-24+EBP]
+ 518 0000044A 50 PUSH EAX
+ 519 0000044B 0F BE 45 F3 MOVSX EAX,BYTE [-13+EBP]
+ 520 0000044F 50 PUSH EAX
+ 521 00000450 FF 75 14 PUSH DWORD [20+EBP]
+ 522 00000453 FF 75 10 PUSH DWORD [16+EBP]
+ 523 00000456 FF 75 0C PUSH DWORD [12+EBP]
+ 524 00000459 FF 75 08 PUSH DWORD [8+EBP]
+ 525 0000045C E8 FFFFFED1 CALL _putfont8
+ 526 00000461 83 C4 18 ADD ESP,24
+ 527 00000464 EB CF JMP L95
+ 528 00000466 L92:
+ 529 00000466 0F B6 D8 MOVZX EBX,AL
+ 530 00000469 6B DB 5E IMUL EBX,EBX,94
+ 531 0000046C 0F B6 07 MOVZX EAX,BYTE [EDI]
+ 532 0000046F 8B 55 EC MOV EDX,DWORD [-20+EBP]
+ 533 00000472 8D 9C 18 FFFFC441 LEA EBX,DWORD [-15295+EAX+EBX*1]
+ 534 00000479 C6 82 000000BD 00 MOV BYTE [189+EDX],0
+ 535 00000480 C1 E3 05 SAL EBX,5
+ 536 00000483 03 5D E8 ADD EBX,DWORD [-24+EBP]
+ 537 00000486 0F BE 75 F3 MOVSX ESI,BYTE [-13+EBP]
+ 538 0000048A 8D 83 00001000 LEA EAX,DWORD [4096+EBX]
+ 539 00000490 81 C3 00001010 ADD EBX,4112
+ 540 00000496 50 PUSH EAX
+ 541 00000497 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 542 0000049A 56 PUSH ESI
+ 543 0000049B 83 E8 08 SUB EAX,8
+ 544 0000049E FF 75 14 PUSH DWORD [20+EBP]
+ 545 000004A1 50 PUSH EAX
+ 546 000004A2 FF 75 0C PUSH DWORD [12+EBP]
+ 547 000004A5 FF 75 08 PUSH DWORD [8+EBP]
+ 548 000004A8 E8 FFFFFE85 CALL _putfont8
+ 549 000004AD 53 PUSH EBX
+ 550 000004AE 56 PUSH ESI
+ 551 000004AF FF 75 14 PUSH DWORD [20+EBP]
+ 552 000004B2 FF 75 10 PUSH DWORD [16+EBP]
+ 553 000004B5 FF 75 0C PUSH DWORD [12+EBP]
+ 554 000004B8 FF 75 08 PUSH DWORD [8+EBP]
+ 555 000004BB E8 FFFFFE72 CALL _putfont8
+ 556 000004C0 83 C4 30 ADD ESP,48
+ 557 000004C3 E9 FFFFFF6D JMP L95
+ 558 000004C8 L100:
+ 559 000004C8 80 3F 00 CMP BYTE [EDI],0
+ 560 000004CB 0F 84 FFFFFF2C JE L70
+ 561 000004D1 L86:
+ 562 000004D1 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 563 000004D4 8A 90 000000BD MOV DL,BYTE [189+EAX]
+ 564 000004DA 84 D2 TEST DL,DL
+ 565 000004DC 75 4D JNE L75
+ 566 000004DE 8A 17 MOV DL,BYTE [EDI]
+ 567 000004E0 8D 42 7F LEA EAX,DWORD [127+EDX]
+ 568 000004E3 3C 1E CMP AL,30
+ 569 000004E5 76 07 JBE L77
+ 570 000004E7 8D 42 20 LEA EAX,DWORD [32+EDX]
+ 571 000004EA 3C 1C CMP AL,28
+ 572 000004EC 77 18 JA L76
+ 573 000004EE L77:
+ 574 000004EE 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 575 000004F1 88 90 000000BD MOV BYTE [189+EAX],DL
+ 576 000004F7 L79:
+ 577 000004F7 83 45 10 08 ADD DWORD [16+EBP],8
+ 578 000004FB 47 INC EDI
+ 579 000004FC 80 3F 00 CMP BYTE [EDI],0
+ 580 000004FF 75 D0 JNE L86
+ 581 00000501 E9 FFFFFEF7 JMP L70
+ 582 00000506 L76:
+ 583 00000506 0F B6 C2 MOVZX EAX,DL
+ 584 00000509 C1 E0 04 SAL EAX,4
+ 585 0000050C 03 45 E8 ADD EAX,DWORD [-24+EBP]
+ 586 0000050F 50 PUSH EAX
+ 587 00000510 0F BE 45 F3 MOVSX EAX,BYTE [-13+EBP]
+ 588 00000514 50 PUSH EAX
+ 589 00000515 FF 75 14 PUSH DWORD [20+EBP]
+ 590 00000518 FF 75 10 PUSH DWORD [16+EBP]
+ 591 0000051B FF 75 0C PUSH DWORD [12+EBP]
+ 592 0000051E FF 75 08 PUSH DWORD [8+EBP]
+ 593 00000521 E8 FFFFFE0C CALL _putfont8
+ 594 00000526 83 C4 18 ADD ESP,24
+ 595 00000529 EB CC JMP L79
+ 596 0000052B L75:
+ 597 0000052B 8D 42 7F LEA EAX,DWORD [127+EDX]
+ 598 0000052E 3C 1E CMP AL,30
+ 599 00000530 0F 87 0000008A JA L80
+ 600 00000536 0F B6 C2 MOVZX EAX,DL
+ 601 00000539 8D 8C 00 FFFFFEFE LEA ECX,DWORD [-258+EAX+EAX*1]
+ 602 00000540 L81:
+ 603 00000540 8A 17 MOV DL,BYTE [EDI]
+ 604 00000542 8D 42 C0 LEA EAX,DWORD [-64+EDX]
+ 605 00000545 3C 3E CMP AL,62
+ 606 00000547 77 5D JA L82
+ 607 00000549 0F B6 C2 MOVZX EAX,DL
+ 608 0000054C 83 E8 40 SUB EAX,64
+ 609 0000054F L83:
+ 610 0000054F 6B D9 5E IMUL EBX,ECX,94
+ 611 00000552 8B 55 EC MOV EDX,DWORD [-20+EBP]
+ 612 00000555 01 C3 ADD EBX,EAX
+ 613 00000557 C1 E3 05 SAL EBX,5
+ 614 0000055A C6 82 000000BD 00 MOV BYTE [189+EDX],0
+ 615 00000561 03 5D E8 ADD EBX,DWORD [-24+EBP]
+ 616 00000564 0F BE 75 F3 MOVSX ESI,BYTE [-13+EBP]
+ 617 00000568 8D 83 00001000 LEA EAX,DWORD [4096+EBX]
+ 618 0000056E 81 C3 00001010 ADD EBX,4112
+ 619 00000574 50 PUSH EAX
+ 620 00000575 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 621 00000578 56 PUSH ESI
+ 622 00000579 83 E8 08 SUB EAX,8
+ 623 0000057C FF 75 14 PUSH DWORD [20+EBP]
+ 624 0000057F 50 PUSH EAX
+ 625 00000580 FF 75 0C PUSH DWORD [12+EBP]
+ 626 00000583 FF 75 08 PUSH DWORD [8+EBP]
+ 627 00000586 E8 FFFFFDA7 CALL _putfont8
+ 628 0000058B 53 PUSH EBX
+ 629 0000058C 56 PUSH ESI
+ 630 0000058D FF 75 14 PUSH DWORD [20+EBP]
+ 631 00000590 FF 75 10 PUSH DWORD [16+EBP]
+ 632 00000593 FF 75 0C PUSH DWORD [12+EBP]
+ 633 00000596 FF 75 08 PUSH DWORD [8+EBP]
+ 634 00000599 E8 FFFFFD94 CALL _putfont8
+ 635 0000059E 83 C4 30 ADD ESP,48
+ 636 000005A1 E9 FFFFFF51 JMP L79
+ 637 000005A6 L82:
+ 638 000005A6 8D 42 80 LEA EAX,DWORD [-128+EDX]
+ 639 000005A9 3C 1E CMP AL,30
+ 640 000005AB 77 08 JA L84
+ 641 000005AD 0F B6 C2 MOVZX EAX,DL
+ 642 000005B0 83 E8 41 SUB EAX,65
+ 643 000005B3 EB 9A JMP L83
+ 644 000005B5 L84:
+ 645 000005B5 0F B6 C2 MOVZX EAX,DL
+ 646 000005B8 2D 0000009F SUB EAX,159
+ 647 000005BD 41 INC ECX
+ 648 000005BE EB 8F JMP L83
+ 649 000005C0 L80:
+ 650 000005C0 0F B6 C2 MOVZX EAX,DL
+ 651 000005C3 8D 8C 00 FFFFFE7E LEA ECX,DWORD [-386+EAX+EAX*1]
+ 652 000005CA E9 FFFFFF71 JMP L81
+ 653 000005CF L69:
+ 654 000005CF 0F B6 07 MOVZX EAX,BYTE [EDI]
+ 655 000005D2 C1 E0 04 SAL EAX,4
+ 656 000005D5 47 INC EDI
+ 657 000005D6 05 [00000000] ADD EAX,_hankaku
+ 658 000005DB 50 PUSH EAX
+ 659 000005DC 0F BE 45 F3 MOVSX EAX,BYTE [-13+EBP]
+ 660 000005E0 50 PUSH EAX
+ 661 000005E1 FF 75 14 PUSH DWORD [20+EBP]
+ 662 000005E4 FF 75 10 PUSH DWORD [16+EBP]
+ 663 000005E7 FF 75 0C PUSH DWORD [12+EBP]
+ 664 000005EA FF 75 08 PUSH DWORD [8+EBP]
+ 665 000005ED E8 FFFFFD40 CALL _putfont8
+ 666 000005F2 83 C4 18 ADD ESP,24
+ 667 000005F5 83 45 10 08 ADD DWORD [16+EBP],8
+ 668 000005F9 80 3F 00 CMP BYTE [EDI],0
+ 669 000005FC 75 D1 JNE L69
+ 670 000005FE E9 FFFFFDEA JMP L64
+ 671 [SECTION .data]
+ 672 00000030 _cursor.1:
+ 673 00000030 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DB "**************.."
+ 0000003A 2A 2A 2A 2A 2E 2E
+ 674 00000040 2A 4F 4F 4F 4F 4F 4F 4F 4F 4F DB "*OOOOOOOOOOO*..."
+ 0000004A 4F 4F 2A 2E 2E 2E
+ 675 00000050 2A 4F 4F 4F 4F 4F 4F 4F 4F 4F DB "*OOOOOOOOOO*...."
+ 0000005A 4F 2A 2E 2E 2E 2E
+ 676 00000060 2A 4F 4F 4F 4F 4F 4F 4F 4F 4F DB "*OOOOOOOOO*....."
+ 0000006A 2A 2E 2E 2E 2E 2E
+ 677 00000070 2A 4F 4F 4F 4F 4F 4F 4F 4F 2A DB "*OOOOOOOO*......"
+ 0000007A 2E 2E 2E 2E 2E 2E
+ 678 00000080 2A 4F 4F 4F 4F 4F 4F 4F 2A 2E DB "*OOOOOOO*......."
+ 0000008A 2E 2E 2E 2E 2E 2E
+ 679 00000090 2A 4F 4F 4F 4F 4F 4F 4F 2A 2E DB "*OOOOOOO*......."
+ 0000009A 2E 2E 2E 2E 2E 2E
+ 680 000000A0 2A 4F 4F 4F 4F 4F 4F 4F 4F 2A DB "*OOOOOOOO*......"
+ 000000AA 2E 2E 2E 2E 2E 2E
+ 681 000000B0 2A 4F 4F 4F 4F 2A 2A 4F 4F 4F DB "*OOOO**OOO*....."
+ 000000BA 2A 2E 2E 2E 2E 2E
+ 682 000000C0 2A 4F 4F 4F 2A 2E 2E 2A 4F 4F DB "*OOO*..*OOO*...."
+ 000000CA 4F 2A 2E 2E 2E 2E
+ 683 000000D0 2A 4F 4F 2A 2E 2E 2E 2E 2A 4F DB "*OO*....*OOO*..."
+ 000000DA 4F 4F 2A 2E 2E 2E
+ 684 000000E0 2A 4F 2A 2E 2E 2E 2E 2E 2E 2A DB "*O*......*OOO*.."
+ 000000EA 4F 4F 4F 2A 2E 2E
+ 685 000000F0 2A 2A 2E 2E 2E 2E 2E 2E 2E 2E DB "**........*OOO*."
+ 000000FA 2A 4F 4F 4F 2A 2E
+ 686 00000100 2A 2E 2E 2E 2E 2E 2E 2E 2E 2E DB "*..........*OOO*"
+ 0000010A 2E 2A 4F 4F 4F 2A
+ 687 00000110 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E DB "............*OO*"
+ 0000011A 2E 2E 2A 4F 4F 2A
+ 688 00000120 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E DB ".............***"
+ 0000012A 2E 2E 2E 2A 2A 2A
+ 689 [SECTION .text]
+ 690 00000603 GLOBAL _init_mouse_cursor8
+ 691 00000603 _init_mouse_cursor8:
+ 692 00000603 55 PUSH EBP
+ 693 00000604 89 E5 MOV EBP,ESP
+ 694 00000606 57 PUSH EDI
+ 695 00000607 56 PUSH ESI
+ 696 00000608 31 FF XOR EDI,EDI
+ 697 0000060A 53 PUSH EBX
+ 698 0000060B 31 DB XOR EBX,EBX
+ 699 0000060D 50 PUSH EAX
+ 700 0000060E 8A 45 0C MOV AL,BYTE [12+EBP]
+ 701 00000611 8B 75 08 MOV ESI,DWORD [8+EBP]
+ 702 00000614 88 45 F3 MOV BYTE [-13+EBP],AL
+ 703 00000617 L115:
+ 704 00000617 31 D2 XOR EDX,EDX
+ 705 00000619 L114:
+ 706 00000619 8D 04 3A LEA EAX,DWORD [EDX+EDI*1]
+ 707 0000061C 80 B8 [00000030] 2A CMP BYTE [_cursor.1+EAX],42
+ 708 00000623 74 35 JE L120
+ 709 00000625 L111:
+ 710 00000625 80 B8 [00000030] 4F CMP BYTE [_cursor.1+EAX],79
+ 711 0000062C 74 26 JE L121
+ 712 0000062E L112:
+ 713 0000062E 80 B8 [00000030] 2E CMP BYTE [_cursor.1+EAX],46
+ 714 00000635 74 15 JE L122
+ 715 00000637 L109:
+ 716 00000637 42 INC EDX
+ 717 00000638 83 FA 0F CMP EDX,15
+ 718 0000063B 7E DC JLE L114
+ 719 0000063D 43 INC EBX
+ 720 0000063E 83 C7 10 ADD EDI,16
+ 721 00000641 83 FB 0F CMP EBX,15
+ 722 00000644 7E D1 JLE L115
+ 723 00000646 58 POP EAX
+ 724 00000647 5B POP EBX
+ 725 00000648 5E POP ESI
+ 726 00000649 5F POP EDI
+ 727 0000064A 5D POP EBP
+ 728 0000064B C3 RET
+ 729 0000064C L122:
+ 730 0000064C 8A 4D F3 MOV CL,BYTE [-13+EBP]
+ 731 0000064F 88 0C 30 MOV BYTE [EAX+ESI*1],CL
+ 732 00000652 EB E3 JMP L109
+ 733 00000654 L121:
+ 734 00000654 C6 04 30 07 MOV BYTE [EAX+ESI*1],7
+ 735 00000658 EB D4 JMP L112
+ 736 0000065A L120:
+ 737 0000065A C6 04 30 00 MOV BYTE [EAX+ESI*1],0
+ 738 0000065E EB C5 JMP L111
+ 739 00000660 GLOBAL _putblock8_8
+ 740 00000660 _putblock8_8:
+ 741 00000660 55 PUSH EBP
+ 742 00000661 89 E5 MOV EBP,ESP
+ 743 00000663 57 PUSH EDI
+ 744 00000664 56 PUSH ESI
+ 745 00000665 31 F6 XOR ESI,ESI
+ 746 00000667 53 PUSH EBX
+ 747 00000668 83 EC 0C SUB ESP,12
+ 748 0000066B 3B 75 14 CMP ESI,DWORD [20+EBP]
+ 749 0000066E 7D 3E JGE L135
+ 750 00000670 31 FF XOR EDI,EDI
+ 751 00000672 L133:
+ 752 00000672 31 DB XOR EBX,EBX
+ 753 00000674 3B 5D 10 CMP EBX,DWORD [16+EBP]
+ 754 00000677 7D 2C JGE L137
+ 755 00000679 8B 45 20 MOV EAX,DWORD [32+EBP]
+ 756 0000067C 01 F8 ADD EAX,EDI
+ 757 0000067E 89 45 EC MOV DWORD [-20+EBP],EAX
+ 758 00000681 L132:
+ 759 00000681 8B 45 1C MOV EAX,DWORD [28+EBP]
+ 760 00000684 8B 55 18 MOV EDX,DWORD [24+EBP]
+ 761 00000687 01 F0 ADD EAX,ESI
+ 762 00000689 01 DA ADD EDX,EBX
+ 763 0000068B 0F AF 45 0C IMUL EAX,DWORD [12+EBP]
+ 764 0000068F 01 D0 ADD EAX,EDX
+ 765 00000691 8B 4D 08 MOV ECX,DWORD [8+EBP]
+ 766 00000694 8B 55 EC MOV EDX,DWORD [-20+EBP]
+ 767 00000697 43 INC EBX
+ 768 00000698 8A 12 MOV DL,BYTE [EDX]
+ 769 0000069A 88 14 08 MOV BYTE [EAX+ECX*1],DL
+ 770 0000069D FF 45 EC INC DWORD [-20+EBP]
+ 771 000006A0 3B 5D 10 CMP EBX,DWORD [16+EBP]
+ 772 000006A3 7C DC JL L132
+ 773 000006A5 L137:
+ 774 000006A5 46 INC ESI
+ 775 000006A6 03 7D 24 ADD EDI,DWORD [36+EBP]
+ 776 000006A9 3B 75 14 CMP ESI,DWORD [20+EBP]
+ 777 000006AC 7C C4 JL L133
+ 778 000006AE L135:
+ 779 000006AE 83 C4 0C ADD ESP,12
+ 780 000006B1 5B POP EBX
+ 781 000006B2 5E POP ESI
+ 782 000006B3 5F POP EDI
+ 783 000006B4 5D POP EBP
+ 784 000006B5 C3 RET
--- /dev/null
+BYTE hankakufont[256][16] = {
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x38, 0x44, 0x82, 0xAA, 0xAA, 0x82, 0x82, 0xAA, 0x92, 0x44, 0x38, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x38, 0x7C, 0xFE, 0xD6, 0xD6, 0xFE, 0xFE, 0xD6, 0xEE, 0x7C, 0x38, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x54, 0xFE, 0x54, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7C, 0xFE, 0xD6, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xC3, 0xC3, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x42, 0x42, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x99, 0xBD, 0xBD, 0x99, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+{0x00, 0x10, 0x38, 0x54, 0x92, 0x10, 0x10, 0x38, 0x44, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00},
+{0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x44, 0x38, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, 0x00, 0x00},
+{0x00, 0x00, 0x0C, 0x0E, 0x0B, 0x0B, 0x0A, 0x08, 0x08, 0x18, 0x78, 0xF8, 0x70, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x1F, 0x1F, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x77, 0xFF, 0x66, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x10, 0x54, 0x38, 0x28, 0x38, 0x54, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00},
+{0x00, 0x02, 0x06, 0x0E, 0x1E, 0x3E, 0x7E, 0xFE, 0x7E, 0x3E, 0x1E, 0x0E, 0x06, 0x02, 0x00, 0x00},
+{0x00, 0x00, 0x10, 0x38, 0x54, 0x92, 0x10, 0x10, 0x10, 0x92, 0x54, 0x38, 0x10, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00},
+{0x00, 0x3E, 0x4A, 0x8A, 0x8A, 0x8A, 0x8A, 0x4A, 0x3A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x00, 0x00},
+{0x7C, 0x82, 0x40, 0x20, 0x38, 0x44, 0x82, 0x82, 0x82, 0x44, 0x38, 0x08, 0x04, 0x82, 0x7C, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0x00, 0x00},
+{0x00, 0x00, 0x10, 0x38, 0x54, 0x92, 0x10, 0x10, 0x10, 0x92, 0x54, 0x38, 0x10, 0x7C, 0x00, 0x00},
+{0x00, 0x10, 0x38, 0x54, 0x92, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00},
+{0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x92, 0x54, 0x38, 0x10, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x04, 0xFE, 0x04, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x40, 0xFE, 0x40, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xFE, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x44, 0xFE, 0x44, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x38, 0x38, 0x7C, 0x7C, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x7C, 0x7C, 0x38, 0x38, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00},
+{0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x44, 0x44, 0x44, 0xFE, 0x44, 0x44, 0x44, 0x44, 0x44, 0xFE, 0x44, 0x44, 0x44, 0x00, 0x00},
+{0x10, 0x3A, 0x56, 0x92, 0x92, 0x90, 0x50, 0x38, 0x14, 0x12, 0x92, 0x92, 0xD4, 0xB8, 0x10, 0x10},
+{0x62, 0x92, 0x94, 0x94, 0x68, 0x08, 0x10, 0x10, 0x20, 0x2C, 0x52, 0x52, 0x92, 0x8C, 0x00, 0x00},
+{0x00, 0x70, 0x88, 0x88, 0x88, 0x90, 0x60, 0x47, 0xA2, 0x92, 0x8A, 0x84, 0x46, 0x39, 0x00, 0x00},
+{0x04, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x02, 0x04, 0x08, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x04, 0x02, 0x00},
+{0x80, 0x40, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x92, 0x54, 0x38, 0x54, 0x92, 0x10, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x08, 0x08, 0x10},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00},
+{0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80},
+{0x00, 0x18, 0x24, 0x24, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x24, 0x18, 0x00, 0x00},
+{0x00, 0x08, 0x18, 0x28, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x3E, 0x00, 0x00},
+{0x00, 0x18, 0x24, 0x42, 0x42, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x7E, 0x00, 0x00},
+{0x00, 0x18, 0x24, 0x42, 0x02, 0x02, 0x04, 0x18, 0x04, 0x02, 0x02, 0x42, 0x24, 0x18, 0x00, 0x00},
+{0x00, 0x0C, 0x0C, 0x0C, 0x14, 0x14, 0x14, 0x24, 0x24, 0x44, 0x7E, 0x04, 0x04, 0x1E, 0x00, 0x00},
+{0x00, 0x7C, 0x40, 0x40, 0x40, 0x58, 0x64, 0x02, 0x02, 0x02, 0x02, 0x42, 0x24, 0x18, 0x00, 0x00},
+{0x00, 0x18, 0x24, 0x42, 0x40, 0x58, 0x64, 0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18, 0x00, 0x00},
+{0x00, 0x7E, 0x42, 0x42, 0x04, 0x04, 0x08, 0x08, 0x08, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00},
+{0x00, 0x18, 0x24, 0x42, 0x42, 0x42, 0x24, 0x18, 0x24, 0x42, 0x42, 0x42, 0x24, 0x18, 0x00, 0x00},
+{0x00, 0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x42, 0x26, 0x1A, 0x02, 0x42, 0x24, 0x18, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x08, 0x08, 0x10},
+{0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00},
+{0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x04, 0x08, 0x10, 0x10, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00},
+{0x00, 0x38, 0x44, 0x82, 0x9A, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x9C, 0x80, 0x46, 0x38, 0x00, 0x00},
+{0x00, 0x18, 0x18, 0x18, 0x18, 0x24, 0x24, 0x24, 0x24, 0x7E, 0x42, 0x42, 0x42, 0xE7, 0x00, 0x00},
+{0x00, 0xF0, 0x48, 0x44, 0x44, 0x44, 0x48, 0x78, 0x44, 0x42, 0x42, 0x42, 0x44, 0xF8, 0x00, 0x00},
+{0x00, 0x3A, 0x46, 0x42, 0x82, 0x80, 0x80, 0x80, 0x80, 0x80, 0x82, 0x42, 0x44, 0x38, 0x00, 0x00},
+{0x00, 0xF8, 0x44, 0x44, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x44, 0x44, 0xF8, 0x00, 0x00},
+{0x00, 0xFE, 0x42, 0x42, 0x40, 0x40, 0x44, 0x7C, 0x44, 0x40, 0x40, 0x42, 0x42, 0xFE, 0x00, 0x00},
+{0x00, 0xFE, 0x42, 0x42, 0x40, 0x40, 0x44, 0x7C, 0x44, 0x44, 0x40, 0x40, 0x40, 0xF0, 0x00, 0x00},
+{0x00, 0x3A, 0x46, 0x42, 0x82, 0x80, 0x80, 0x9E, 0x82, 0x82, 0x82, 0x42, 0x46, 0x38, 0x00, 0x00},
+{0x00, 0xE7, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x42, 0x42, 0x42, 0xE7, 0x00, 0x00},
+{0x00, 0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00},
+{0x00, 0x1F, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x84, 0x48, 0x30, 0x00},
+{0x00, 0xE7, 0x42, 0x44, 0x48, 0x50, 0x50, 0x60, 0x50, 0x50, 0x48, 0x44, 0x42, 0xE7, 0x00, 0x00},
+{0x00, 0xF0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x42, 0x42, 0xFE, 0x00, 0x00},
+{0x00, 0xC3, 0x42, 0x66, 0x66, 0x66, 0x5A, 0x5A, 0x5A, 0x42, 0x42, 0x42, 0x42, 0xE7, 0x00, 0x00},
+{0x00, 0xC7, 0x42, 0x62, 0x62, 0x52, 0x52, 0x52, 0x4A, 0x4A, 0x4A, 0x46, 0x46, 0xE2, 0x00, 0x00},
+{0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00},
+{0x00, 0xF8, 0x44, 0x42, 0x42, 0x42, 0x44, 0x78, 0x40, 0x40, 0x40, 0x40, 0x40, 0xF0, 0x00, 0x00},
+{0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x92, 0x8A, 0x44, 0x3A, 0x00, 0x00},
+{0x00, 0xFC, 0x42, 0x42, 0x42, 0x42, 0x7C, 0x44, 0x42, 0x42, 0x42, 0x42, 0x42, 0xE7, 0x00, 0x00},
+{0x00, 0x3A, 0x46, 0x82, 0x82, 0x80, 0x40, 0x38, 0x04, 0x02, 0x82, 0x82, 0xC4, 0xB8, 0x00, 0x00},
+{0x00, 0xFE, 0x92, 0x92, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00},
+{0x00, 0xE7, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x3C, 0x00, 0x00},
+{0x00, 0xE7, 0x42, 0x42, 0x42, 0x42, 0x24, 0x24, 0x24, 0x24, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00},
+{0x00, 0xE7, 0x42, 0x42, 0x42, 0x5A, 0x5A, 0x5A, 0x5A, 0x24, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00},
+{0x00, 0xE7, 0x42, 0x42, 0x24, 0x24, 0x24, 0x18, 0x24, 0x24, 0x24, 0x42, 0x42, 0xE7, 0x00, 0x00},
+{0x00, 0xEE, 0x44, 0x44, 0x44, 0x28, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00},
+{0x00, 0xFE, 0x84, 0x84, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x42, 0x82, 0xFE, 0x00, 0x00},
+{0x00, 0x3E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3E, 0x00},
+{0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02},
+{0x00, 0x7C, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x7C, 0x00},
+{0x00, 0x10, 0x28, 0x44, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00},
+{0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x08, 0x04, 0x3C, 0x44, 0x84, 0x84, 0x8C, 0x76, 0x00, 0x00},
+{0xC0, 0x40, 0x40, 0x40, 0x40, 0x58, 0x64, 0x42, 0x42, 0x42, 0x42, 0x42, 0x64, 0x58, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x4C, 0x84, 0x84, 0x80, 0x80, 0x82, 0x44, 0x38, 0x00, 0x00},
+{0x0C, 0x04, 0x04, 0x04, 0x04, 0x34, 0x4C, 0x84, 0x84, 0x84, 0x84, 0x84, 0x4C, 0x36, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0xFC, 0x80, 0x82, 0x42, 0x3C, 0x00, 0x00},
+{0x0E, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x4C, 0x84, 0x84, 0x84, 0x84, 0x4C, 0x34, 0x04, 0x04, 0x78},
+{0xC0, 0x40, 0x40, 0x40, 0x40, 0x58, 0x64, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0xE3, 0x00, 0x00},
+{0x00, 0x10, 0x10, 0x00, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00},
+{0x00, 0x04, 0x04, 0x00, 0x00, 0x0C, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x08, 0x30},
+{0xC0, 0x40, 0x40, 0x40, 0x40, 0x4E, 0x44, 0x48, 0x50, 0x60, 0x50, 0x48, 0x44, 0xE6, 0x00, 0x00},
+{0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0xDB, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x64, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0xE3, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x64, 0x42, 0x42, 0x42, 0x42, 0x42, 0x64, 0x58, 0x40, 0xE0},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x4C, 0x84, 0x84, 0x84, 0x84, 0x84, 0x4C, 0x34, 0x04, 0x0E},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x62, 0x42, 0x40, 0x40, 0x40, 0x40, 0x40, 0xE0, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x86, 0x82, 0xC0, 0x38, 0x06, 0x82, 0xC2, 0xBC, 0x00, 0x00},
+{0x00, 0x00, 0x10, 0x10, 0x10, 0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0E, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3B, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x42, 0x42, 0x42, 0x24, 0x24, 0x24, 0x18, 0x18, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x42, 0x42, 0x5A, 0x5A, 0x5A, 0x24, 0x24, 0x24, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x44, 0x28, 0x28, 0x10, 0x28, 0x28, 0x44, 0xC6, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x42, 0x42, 0x24, 0x24, 0x24, 0x18, 0x18, 0x10, 0x10, 0x60},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x82, 0x84, 0x08, 0x10, 0x20, 0x42, 0x82, 0xFE, 0x00, 0x00},
+{0x00, 0x06, 0x08, 0x10, 0x10, 0x10, 0x10, 0x60, 0x10, 0x10, 0x10, 0x10, 0x08, 0x06, 0x00, 0x00},
+{0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+{0x00, 0x60, 0x10, 0x08, 0x08, 0x08, 0x08, 0x06, 0x08, 0x08, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00},
+{0x00, 0x72, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x10, 0x28, 0x44, 0x82, 0xFE, 0x82, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x38, 0x44, 0x82, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x82, 0x44, 0x38, 0x10, 0x20},
+{0x00, 0x00, 0x24, 0x24, 0x00, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x42, 0x3E, 0x00, 0x00},
+{0x0C, 0x08, 0x10, 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0xFE, 0x80, 0x82, 0x44, 0x38, 0x00, 0x00},
+{0x00, 0x10, 0x28, 0x44, 0x00, 0x78, 0x04, 0x04, 0x3C, 0x44, 0x84, 0x84, 0x44, 0x3E, 0x00, 0x00},
+{0x00, 0x00, 0x24, 0x24, 0x00, 0x78, 0x04, 0x04, 0x3C, 0x44, 0x84, 0x84, 0x44, 0x3E, 0x00, 0x00},
+{0x10, 0x08, 0x04, 0x00, 0x00, 0x78, 0x04, 0x04, 0x3C, 0x44, 0x84, 0x84, 0x44, 0x3E, 0x00, 0x00},
+{0x00, 0x18, 0x24, 0x18, 0x00, 0x78, 0x04, 0x04, 0x3C, 0x44, 0x84, 0x84, 0x44, 0x3E, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x42, 0x80, 0x80, 0x80, 0x80, 0x80, 0x42, 0x3C, 0x08, 0x10},
+{0x00, 0x10, 0x28, 0x44, 0x00, 0x38, 0x44, 0x82, 0x82, 0xFE, 0x80, 0x82, 0x44, 0x38, 0x00, 0x00},
+{0x00, 0x00, 0x24, 0x24, 0x00, 0x38, 0x44, 0x82, 0x82, 0xFE, 0x80, 0x82, 0x44, 0x38, 0x00, 0x00},
+{0x10, 0x08, 0x04, 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0xFE, 0x80, 0x82, 0x44, 0x38, 0x00, 0x00},
+{0x00, 0x00, 0x24, 0x24, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00},
+{0x00, 0x10, 0x28, 0x44, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00},
+{0x10, 0x08, 0x04, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00},
+{0x24, 0x24, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0xFE, 0x82, 0x82, 0x82, 0x82, 0x00, 0x00},
+{0x00, 0x38, 0x44, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0xFE, 0x82, 0x82, 0x82, 0x82, 0x00, 0x00},
+{0x0C, 0x08, 0x10, 0xFE, 0x80, 0x80, 0x80, 0x80, 0xF8, 0x80, 0x80, 0x80, 0x80, 0xFE, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x1C, 0x12, 0x72, 0x9E, 0x90, 0x90, 0x92, 0x6C, 0x00, 0x00},
+{0x0C, 0x10, 0x20, 0x28, 0x28, 0x28, 0xFE, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00},
+{0x00, 0x10, 0x28, 0x44, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00},
+{0x00, 0x00, 0x24, 0x24, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00},
+{0x10, 0x08, 0x04, 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00},
+{0x00, 0x10, 0x28, 0x44, 0x00, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x42, 0x3E, 0x00, 0x00},
+{0x10, 0x08, 0x04, 0x00, 0x00, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x42, 0x3E, 0x00, 0x00},
+{0x00, 0x00, 0x24, 0x24, 0x00, 0x82, 0x82, 0x44, 0x44, 0x28, 0x28, 0x10, 0x10, 0x20, 0x20, 0x40},
+{0x24, 0x24, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00},
+{0x24, 0x24, 0x00, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00},
+{0x00, 0x28, 0x28, 0x28, 0x3C, 0x6A, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0x6A, 0x3C, 0x28, 0x28, 0x28},
+{0x00, 0x0C, 0x12, 0x20, 0x20, 0x20, 0xFC, 0x20, 0x20, 0x20, 0x60, 0xA0, 0xB2, 0x4C, 0x00, 0x00},
+{0x00, 0x82, 0x82, 0x44, 0x28, 0x10, 0xFE, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00},
+{0x00, 0xE0, 0x90, 0x88, 0x88, 0x88, 0x94, 0xE4, 0x9F, 0x84, 0x84, 0x84, 0x84, 0x84, 0x00, 0x00},
+{0x00, 0x0C, 0x12, 0x10, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, 0x10, 0x10, 0x90, 0x60, 0x00, 0x00},
+{0x0C, 0x08, 0x10, 0x00, 0x00, 0x78, 0x04, 0x04, 0x3C, 0x44, 0x84, 0x84, 0x44, 0x3E, 0x00, 0x00},
+{0x0C, 0x08, 0x10, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00},
+{0x0C, 0x08, 0x10, 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00},
+{0x0C, 0x08, 0x10, 0x00, 0x00, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x42, 0x3E, 0x00, 0x00},
+{0x00, 0x12, 0x2A, 0x24, 0x00, 0xF8, 0x84, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x00, 0x00},
+{0x12, 0x2A, 0x24, 0x00, 0x82, 0xC2, 0xC2, 0xA2, 0x92, 0x92, 0x8A, 0x86, 0x86, 0x82, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x78, 0x04, 0x04, 0x3C, 0x44, 0x84, 0x84, 0x44, 0x3E, 0x00, 0xFE, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0xFE, 0x00, 0x00},
+{0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x20, 0x44, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x80, 0x80, 0x80, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x02, 0x02, 0x02, 0x00, 0x00},
+{0x00, 0x10, 0x30, 0x10, 0x10, 0x10, 0x00, 0xFE, 0x00, 0x78, 0x04, 0x38, 0x40, 0x7C, 0x00, 0x00},
+{0x00, 0x10, 0x30, 0x10, 0x10, 0x10, 0x00, 0xFE, 0x00, 0x18, 0x28, 0x48, 0x7C, 0x08, 0x00, 0x00},
+{0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x12, 0x24, 0x48, 0x90, 0x90, 0x48, 0x24, 0x12, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x90, 0x48, 0x24, 0x12, 0x12, 0x24, 0x48, 0x90, 0x00, 0x00, 0x00, 0x00},
+{0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44},
+{0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA},
+{0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD},
+{0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+{0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+{0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+{0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xF4, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, 0xF0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+{0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xF4, 0x04, 0xF4, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14},
+{0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x04, 0xF4, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14},
+{0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xF4, 0x04, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+{0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+{0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+{0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+{0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14},
+{0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x17, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14},
+{0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xF7, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14},
+{0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x10, 0x17, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xF7, 0x00, 0xF7, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14},
+{0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14},
+{0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14},
+{0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xF7, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14},
+{0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x10, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+{0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
+{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+{0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0},
+{0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F},
+{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
--- /dev/null
+use strict;
+use warnings;
+
+
+open(my $fh, "<", "hankaku.bin") or die("open error $!");
+
+print "char hankakufont[256][16] = {\n";
+for my $i(0..255){
+ my $buf;
+ read($fh, $buf, 16);
+ print "{";
+ for my $j(0..15){
+ print sprintf("0x%02X%s", ord(substr($buf, $j, 1)), $j == 15 ? "" : ", ");
+ }
+ print "}";
+ print "," if($i != 255);
+ print "\n";
+}
+print "};\n";
+
+close($fh);
+
--- /dev/null
+OSASK\82Ì\94¼\8ap\83t\83H\83\93\83g\82ð\97¬\97p
+
+char 0x00
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0x01
+........
+........
+..***...
+.*...*..
+*.....*.
+*.*.*.*.
+*.*.*.*.
+*.....*.
+*.....*.
+*.*.*.*.
+*..*..*.
+.*...*..
+..***...
+........
+........
+........
+
+char 0x02
+........
+........
+..***...
+.*****..
+*******.
+**.*.**.
+**.*.**.
+*******.
+*******.
+**.*.**.
+***.***.
+.*****..
+..***...
+........
+........
+........
+
+char 0x03
+........
+........
+........
+........
+.**.**..
+*******.
+*******.
+*******.
+.*****..
+..***...
+...*....
+........
+........
+........
+........
+........
+
+char 0x04
+........
+........
+........
+........
+...*....
+..***...
+.*****..
+*******.
+.*****..
+..***...
+...*....
+........
+........
+........
+........
+........
+
+char 0x05
+........
+........
+........
+........
+...*....
+..***...
+.*.*.*..
+*******.
+.*.*.*..
+...*....
+..***...
+........
+........
+........
+........
+........
+
+char 0x06
+........
+........
+........
+........
+...*....
+..***...
+.*****..
+*******.
+**.*.**.
+...*....
+..***...
+........
+........
+........
+........
+........
+
+char 0x07
+........
+........
+........
+........
+........
+........
+...**...
+..****..
+..****..
+...**...
+........
+........
+........
+........
+........
+........
+
+char 0x08
+********
+********
+********
+********
+********
+********
+***..***
+**....**
+**....**
+***..***
+********
+********
+********
+********
+********
+********
+
+char 0x09
+........
+........
+........
+........
+........
+..****..
+.**..**.
+.*....*.
+.*....*.
+.**..**.
+..****..
+........
+........
+........
+........
+........
+
+char 0x0a
+********
+********
+********
+********
+********
+**....**
+*..**..*
+*.****.*
+*.****.*
+*..**..*
+**....**
+********
+********
+********
+********
+********
+
+char 0x0b
+........
+...*....
+..***...
+.*.*.*..
+*..*..*.
+...*....
+...*....
+..***...
+.*...*..
+*.....*.
+*.....*.
+*.....*.
+.*...*..
+..***...
+........
+........
+
+char 0x0c
+........
+..***...
+.*...*..
+*.....*.
+*.....*.
+*.....*.
+.*...*..
+..***...
+...*....
+...*....
+*******.
+...*....
+...*....
+...*....
+........
+........
+
+char 0x0d
+........
+........
+....**..
+....***.
+....*.**
+....*.**
+....*.*.
+....*...
+....*...
+...**...
+.****...
+*****...
+.***....
+........
+........
+........
+
+char 0x0e
+........
+........
+...*****
+...*****
+...*...*
+...*...*
+...*...*
+...*...*
+...*...*
+...*...*
+.***.***
+********
+.**..**.
+........
+........
+........
+
+char 0x0f
+........
+........
+........
+........
+...*....
+.*.*.*..
+..***...
+..*.*...
+..***...
+.*.*.*..
+...*....
+........
+........
+........
+........
+........
+
+char 0x10
+........
+*.......
+**......
+***.....
+****....
+*****...
+******..
+*******.
+******..
+*****...
+****....
+***.....
+**......
+*.......
+........
+........
+
+char 0x11
+........
+......*.
+.....**.
+....***.
+...****.
+..*****.
+.******.
+*******.
+.******.
+..*****.
+...****.
+....***.
+.....**.
+......*.
+........
+........
+
+char 0x12
+........
+........
+...*....
+..***...
+.*.*.*..
+*..*..*.
+...*....
+...*....
+...*....
+*..*..*.
+.*.*.*..
+..***...
+...*....
+........
+........
+........
+
+char 0x13
+........
+........
+.*...*..
+.*...*..
+.*...*..
+.*...*..
+.*...*..
+.*...*..
+.*...*..
+.*...*..
+........
+........
+.*...*..
+.*...*..
+........
+........
+
+char 0x14
+........
+..*****.
+.*..*.*.
+*...*.*.
+*...*.*.
+*...*.*.
+*...*.*.
+.*..*.*.
+..***.*.
+....*.*.
+....*.*.
+....*.*.
+....*.*.
+....*.*.
+........
+........
+
+char 0x15
+.*****..
+*.....*.
+.*......
+..*.....
+..***...
+.*...*..
+*.....*.
+*.....*.
+*.....*.
+.*...*..
+..***...
+....*...
+.....*..
+*.....*.
+.*****..
+........
+
+char 0x16
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+*******.
+*******.
+*******.
+........
+........
+
+char 0x17
+........
+........
+...*....
+..***...
+.*.*.*..
+*..*..*.
+...*....
+...*....
+...*....
+*..*..*.
+.*.*.*..
+..***...
+...*....
+.*****..
+........
+........
+
+char 0x18
+........
+...*....
+..***...
+.*.*.*..
+*..*..*.
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+........
+........
+
+char 0x19
+........
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+*..*..*.
+.*.*.*..
+..***...
+...*....
+........
+........
+
+char 0x1a
+........
+........
+........
+........
+...*....
+....*...
+.....*..
+*******.
+.....*..
+....*...
+...*....
+........
+........
+........
+........
+........
+
+char 0x1b
+........
+........
+........
+........
+...*....
+..*.....
+.*......
+*******.
+.*......
+..*.....
+...*....
+........
+........
+........
+........
+........
+
+char 0x1c
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+*.......
+*.......
+*******.
+........
+........
+
+char 0x1d
+........
+........
+........
+........
+........
+..*.*...
+.*...*..
+*******.
+.*...*..
+..*.*...
+........
+........
+........
+........
+........
+........
+
+char 0x1e
+........
+........
+........
+........
+...*....
+...*....
+..***...
+..***...
+.*****..
+.*****..
+*******.
+*******.
+........
+........
+........
+........
+
+char 0x1f
+........
+........
+........
+........
+*******.
+*******.
+.*****..
+.*****..
+..***...
+..***...
+...*....
+...*....
+........
+........
+........
+........
+
+char 0x20
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0x21
+........
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+........
+........
+...*....
+...*....
+........
+........
+
+char 0x22
+..*.*...
+..*.*...
+..*.*...
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0x23
+........
+.*...*..
+.*...*..
+.*...*..
+*******.
+.*...*..
+.*...*..
+.*...*..
+.*...*..
+.*...*..
+*******.
+.*...*..
+.*...*..
+.*...*..
+........
+........
+
+char 0x24
+...*....
+..***.*.
+.*.*.**.
+*..*..*.
+*..*..*.
+*..*....
+.*.*....
+..***...
+...*.*..
+...*..*.
+*..*..*.
+*..*..*.
+**.*.*..
+*.***...
+...*....
+...*....
+
+char 0x25
+.**...*.
+*..*..*.
+*..*.*..
+*..*.*..
+.**.*...
+....*...
+...*....
+...*....
+..*.....
+..*.**..
+.*.*..*.
+.*.*..*.
+*..*..*.
+*...**..
+........
+........
+
+char 0x26
+........
+.***....
+*...*...
+*...*...
+*...*...
+*..*....
+.**.....
+.*...***
+*.*...*.
+*..*..*.
+*...*.*.
+*....*..
+.*...**.
+..***..*
+........
+........
+
+char 0x27
+.....*..
+....*...
+...*....
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0x28
+......*.
+.....*..
+....*...
+....*...
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+....*...
+....*...
+.....*..
+......*.
+........
+
+char 0x29
+*.......
+.*......
+..*.....
+..*.....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+..*.....
+..*.....
+.*......
+*.......
+........
+
+char 0x2a
+........
+........
+........
+........
+........
+...*....
+*..*..*.
+.*.*.*..
+..***...
+.*.*.*..
+*..*..*.
+...*....
+........
+........
+........
+........
+
+char 0x2b
+........
+........
+........
+........
+........
+...*....
+...*....
+...*....
+*******.
+...*....
+...*....
+...*....
+........
+........
+........
+........
+
+char 0x2c
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+...**...
+...**...
+....*...
+....*...
+...*....
+
+char 0x2d
+........
+........
+........
+........
+........
+........
+........
+........
+*******.
+........
+........
+........
+........
+........
+........
+........
+
+char 0x2e
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+...**...
+...**...
+........
+........
+
+char 0x2f
+......*.
+......*.
+.....*..
+.....*..
+....*...
+....*...
+....*...
+...*....
+...*....
+..*.....
+..*.....
+.*......
+.*......
+.*......
+*.......
+*.......
+
+char 0x30
+........
+...**...
+..*..*..
+..*..*..
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+..*..*..
+..*..*..
+...**...
+........
+........
+
+char 0x31
+........
+....*...
+...**...
+..*.*...
+....*...
+....*...
+....*...
+....*...
+....*...
+....*...
+....*...
+....*...
+....*...
+..*****.
+........
+........
+
+char 0x32
+........
+...**...
+..*..*..
+.*....*.
+.*....*.
+......*.
+.....*..
+....*...
+...*....
+..*.....
+..*.....
+.*......
+.*......
+.******.
+........
+........
+
+char 0x33
+........
+...**...
+..*..*..
+.*....*.
+......*.
+......*.
+.....*..
+...**...
+.....*..
+......*.
+......*.
+.*....*.
+..*..*..
+...**...
+........
+........
+
+char 0x34
+........
+....**..
+....**..
+....**..
+...*.*..
+...*.*..
+...*.*..
+..*..*..
+..*..*..
+.*...*..
+.******.
+.....*..
+.....*..
+...****.
+........
+........
+
+char 0x35
+........
+.*****..
+.*......
+.*......
+.*......
+.*.**...
+.**..*..
+......*.
+......*.
+......*.
+......*.
+.*....*.
+..*..*..
+...**...
+........
+........
+
+char 0x36
+........
+...**...
+..*..*..
+.*....*.
+.*......
+.*.**...
+.**..*..
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+..*..*..
+...**...
+........
+........
+
+char 0x37
+........
+.******.
+.*....*.
+.*....*.
+.....*..
+.....*..
+....*...
+....*...
+....*...
+...*....
+...*....
+...*....
+...*....
+..***...
+........
+........
+
+char 0x38
+........
+...**...
+..*..*..
+.*....*.
+.*....*.
+.*....*.
+..*..*..
+...**...
+..*..*..
+.*....*.
+.*....*.
+.*....*.
+..*..*..
+...**...
+........
+........
+
+char 0x39
+........
+...**...
+..*..*..
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+..*..**.
+...**.*.
+......*.
+.*....*.
+..*..*..
+...**...
+........
+........
+
+char 0x3a
+........
+........
+........
+........
+........
+...**...
+...**...
+........
+........
+........
+........
+........
+...**...
+...**...
+........
+........
+
+char 0x3b
+........
+........
+........
+........
+........
+...**...
+...**...
+........
+........
+........
+........
+...**...
+...**...
+....*...
+....*...
+...*....
+
+char 0x3c
+........
+......*.
+.....*..
+....*...
+...*....
+..*.....
+.*......
+*.......
+*.......
+.*......
+..*.....
+...*....
+....*...
+.....*..
+......*.
+........
+
+char 0x3d
+........
+........
+........
+........
+........
+........
+*******.
+........
+........
+*******.
+........
+........
+........
+........
+........
+........
+
+char 0x3e
+........
+*.......
+.*......
+..*.....
+...*....
+....*...
+.....*..
+......*.
+......*.
+.....*..
+....*...
+...*....
+..*.....
+.*......
+*.......
+........
+
+char 0x3f
+........
+..***...
+.*...*..
+*.....*.
+*.....*.
+*.....*.
+.....*..
+....*...
+...*....
+...*....
+........
+........
+...**...
+...**...
+........
+........
+
+char 0x40
+........
+..***...
+.*...*..
+*.....*.
+*..**.*.
+*.*.*.*.
+*.*.*.*.
+*.*.*.*.
+*.*.*.*.
+*.*.*.*.
+*..***..
+*.......
+.*...**.
+..***...
+........
+........
+
+char 0x41
+........
+...**...
+...**...
+...**...
+...**...
+..*..*..
+..*..*..
+..*..*..
+..*..*..
+.******.
+.*....*.
+.*....*.
+.*....*.
+***..***
+........
+........
+
+char 0x42
+........
+****....
+.*..*...
+.*...*..
+.*...*..
+.*...*..
+.*..*...
+.****...
+.*...*..
+.*....*.
+.*....*.
+.*....*.
+.*...*..
+*****...
+........
+........
+
+char 0x43
+........
+..***.*.
+.*...**.
+.*....*.
+*.....*.
+*.......
+*.......
+*.......
+*.......
+*.......
+*.....*.
+.*....*.
+.*...*..
+..***...
+........
+........
+
+char 0x44
+........
+*****...
+.*...*..
+.*...*..
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*...*..
+.*...*..
+*****...
+........
+........
+
+char 0x45
+........
+*******.
+.*....*.
+.*....*.
+.*......
+.*......
+.*...*..
+.*****..
+.*...*..
+.*......
+.*......
+.*....*.
+.*....*.
+*******.
+........
+........
+
+char 0x46
+........
+*******.
+.*....*.
+.*....*.
+.*......
+.*......
+.*...*..
+.*****..
+.*...*..
+.*...*..
+.*......
+.*......
+.*......
+****....
+........
+........
+
+char 0x47
+........
+..***.*.
+.*...**.
+.*....*.
+*.....*.
+*.......
+*.......
+*..****.
+*.....*.
+*.....*.
+*.....*.
+.*....*.
+.*...**.
+..***...
+........
+........
+
+char 0x48
+........
+***..***
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.******.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+***..***
+........
+........
+
+char 0x49
+........
+.*****..
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+.*****..
+........
+........
+
+char 0x4a
+........
+...*****
+.....*..
+.....*..
+.....*..
+.....*..
+.....*..
+.....*..
+.....*..
+.....*..
+.....*..
+.....*..
+*....*..
+.*..*...
+..**....
+........
+
+char 0x4b
+........
+***..***
+.*....*.
+.*...*..
+.*..*...
+.*.*....
+.*.*....
+.**.....
+.*.*....
+.*.*....
+.*..*...
+.*...*..
+.*....*.
+***..***
+........
+........
+
+char 0x4c
+........
+****....
+.*......
+.*......
+.*......
+.*......
+.*......
+.*......
+.*......
+.*......
+.*......
+.*....*.
+.*....*.
+*******.
+........
+........
+
+char 0x4d
+........
+**....**
+.*....*.
+.**..**.
+.**..**.
+.**..**.
+.*.**.*.
+.*.**.*.
+.*.**.*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+***..***
+........
+........
+
+char 0x4e
+........
+**...***
+.*....*.
+.**...*.
+.**...*.
+.*.*..*.
+.*.*..*.
+.*.*..*.
+.*..*.*.
+.*..*.*.
+.*..*.*.
+.*...**.
+.*...**.
+***...*.
+........
+........
+
+char 0x4f
+........
+..***...
+.*...*..
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+.*...*..
+..***...
+........
+........
+
+char 0x50
+........
+*****...
+.*...*..
+.*....*.
+.*....*.
+.*....*.
+.*...*..
+.****...
+.*......
+.*......
+.*......
+.*......
+.*......
+****....
+........
+........
+
+char 0x51
+........
+..***...
+.*...*..
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*..*..*.
+*...*.*.
+.*...*..
+..***.*.
+........
+........
+
+char 0x52
+........
+******..
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*****..
+.*...*..
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+***..***
+........
+........
+
+char 0x53
+........
+..***.*.
+.*...**.
+*.....*.
+*.....*.
+*.......
+.*......
+..***...
+.....*..
+......*.
+*.....*.
+*.....*.
+**...*..
+*.***...
+........
+........
+
+char 0x54
+........
+*******.
+*..*..*.
+*..*..*.
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+.*****..
+........
+........
+
+char 0x55
+........
+***..***
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+..*..*..
+..****..
+........
+........
+
+char 0x56
+........
+***..***
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+..*..*..
+..*..*..
+..*..*..
+..*..*..
+...**...
+...**...
+...**...
+...**...
+........
+........
+
+char 0x57
+........
+***..***
+.*....*.
+.*....*.
+.*....*.
+.*.**.*.
+.*.**.*.
+.*.**.*.
+.*.**.*.
+..*..*..
+..*..*..
+..*..*..
+..*..*..
+..*..*..
+........
+........
+
+char 0x58
+........
+***..***
+.*....*.
+.*....*.
+..*..*..
+..*..*..
+..*..*..
+...**...
+..*..*..
+..*..*..
+..*..*..
+.*....*.
+.*....*.
+***..***
+........
+........
+
+char 0x59
+........
+***.***.
+.*...*..
+.*...*..
+.*...*..
+..*.*...
+..*.*...
+..*.*...
+...*....
+...*....
+...*....
+...*....
+...*....
+.*****..
+........
+........
+
+char 0x5a
+........
+*******.
+*....*..
+*....*..
+....*...
+....*...
+...*....
+...*....
+..*.....
+..*.....
+.*......
+.*....*.
+*.....*.
+*******.
+........
+........
+
+char 0x5b
+........
+..*****.
+..*.....
+..*.....
+..*.....
+..*.....
+..*.....
+..*.....
+..*.....
+..*.....
+..*.....
+..*.....
+..*.....
+..*.....
+..*****.
+........
+
+char 0x5c
+*.......
+*.......
+.*......
+.*......
+..*.....
+..*.....
+..*.....
+...*....
+...*....
+....*...
+....*...
+.....*..
+.....*..
+.....*..
+......*.
+......*.
+
+char 0x5d
+........
+.*****..
+.....*..
+.....*..
+.....*..
+.....*..
+.....*..
+.....*..
+.....*..
+.....*..
+.....*..
+.....*..
+.....*..
+.....*..
+.*****..
+........
+
+char 0x5e
+........
+...*....
+..*.*...
+.*...*..
+*.....*.
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0x5f
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+*******.
+........
+
+char 0x60
+...*....
+....*...
+.....*..
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0x61
+........
+........
+........
+........
+........
+.***....
+....*...
+.....*..
+..****..
+.*...*..
+*....*..
+*....*..
+*...**..
+.***.**.
+........
+........
+
+char 0x62
+**......
+.*......
+.*......
+.*......
+.*......
+.*.**...
+.**..*..
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.**..*..
+.*.**...
+........
+........
+
+char 0x63
+........
+........
+........
+........
+........
+..**....
+.*..**..
+*....*..
+*....*..
+*.......
+*.......
+*.....*.
+.*...*..
+..***...
+........
+........
+
+char 0x64
+....**..
+.....*..
+.....*..
+.....*..
+.....*..
+..**.*..
+.*..**..
+*....*..
+*....*..
+*....*..
+*....*..
+*....*..
+.*..**..
+..**.**.
+........
+........
+
+char 0x65
+........
+........
+........
+........
+........
+..***...
+.*...*..
+*.....*.
+*.....*.
+******..
+*.......
+*.....*.
+.*....*.
+..****..
+........
+........
+
+char 0x66
+....***.
+...*....
+...*....
+...*....
+...*....
+.*****..
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+.*****..
+........
+........
+
+char 0x67
+........
+........
+........
+........
+........
+..**.**.
+.*..**..
+*....*..
+*....*..
+*....*..
+*....*..
+.*..**..
+..**.*..
+.....*..
+.....*..
+.****...
+
+char 0x68
+**......
+.*......
+.*......
+.*......
+.*......
+.*.**...
+.**..*..
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+***...**
+........
+........
+
+char 0x69
+........
+...*....
+...*....
+........
+........
+..**....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+..***...
+........
+........
+
+char 0x6a
+........
+.....*..
+.....*..
+........
+........
+....**..
+.....*..
+.....*..
+.....*..
+.....*..
+.....*..
+.....*..
+.....*..
+....*...
+....*...
+..**....
+
+char 0x6b
+**......
+.*......
+.*......
+.*......
+.*......
+.*..***.
+.*...*..
+.*..*...
+.*.*....
+.**.....
+.*.*....
+.*..*...
+.*...*..
+***..**.
+........
+........
+
+char 0x6c
+..**....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+..***...
+........
+........
+
+char 0x6d
+........
+........
+........
+........
+........
+****.**.
+.*..*..*
+.*..*..*
+.*..*..*
+.*..*..*
+.*..*..*
+.*..*..*
+.*..*..*
+**.**.**
+........
+........
+
+char 0x6e
+........
+........
+........
+........
+........
+**.**...
+.**..*..
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+***...**
+........
+........
+
+char 0x6f
+........
+........
+........
+........
+........
+..***...
+.*...*..
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+.*...*..
+..***...
+........
+........
+
+char 0x70
+........
+........
+........
+........
+........
+**.**...
+.**..*..
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.**..*..
+.*.**...
+.*......
+***.....
+
+char 0x71
+........
+........
+........
+........
+........
+..**.*..
+.*..**..
+*....*..
+*....*..
+*....*..
+*....*..
+*....*..
+.*..**..
+..**.*..
+.....*..
+....***.
+
+char 0x72
+........
+........
+........
+........
+........
+**.***..
+.**...*.
+.*....*.
+.*......
+.*......
+.*......
+.*......
+.*......
+***.....
+........
+........
+
+char 0x73
+........
+........
+........
+........
+........
+.****.*.
+*....**.
+*.....*.
+**......
+..***...
+.....**.
+*.....*.
+**....*.
+*.****..
+........
+........
+
+char 0x74
+........
+........
+...*....
+...*....
+...*....
+.*****..
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+....***.
+........
+........
+
+char 0x75
+........
+........
+........
+........
+........
+**...**.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*....*.
+.*...**.
+..***.**
+........
+........
+
+char 0x76
+........
+........
+........
+........
+........
+***..***
+.*....*.
+.*....*.
+.*....*.
+..*..*..
+..*..*..
+..*..*..
+...**...
+...**...
+........
+........
+
+char 0x77
+........
+........
+........
+........
+........
+***..***
+.*....*.
+.*....*.
+.*.**.*.
+.*.**.*.
+.*.**.*.
+..*..*..
+..*..*..
+..*..*..
+........
+........
+
+char 0x78
+........
+........
+........
+........
+........
+**...**.
+.*...*..
+..*.*...
+..*.*...
+...*....
+..*.*...
+..*.*...
+.*...*..
+**...**.
+........
+........
+
+char 0x79
+........
+........
+........
+........
+........
+***..***
+.*....*.
+.*....*.
+..*..*..
+..*..*..
+..*..*..
+...**...
+...**...
+...*....
+...*....
+.**.....
+
+char 0x7a
+........
+........
+........
+........
+........
+*******.
+*.....*.
+*....*..
+....*...
+...*....
+..*.....
+.*....*.
+*.....*.
+*******.
+........
+........
+
+char 0x7b
+........
+.....**.
+....*...
+...*....
+...*....
+...*....
+...*....
+.**.....
+...*....
+...*....
+...*....
+...*....
+....*...
+.....**.
+........
+........
+
+char 0x7c
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+
+char 0x7d
+........
+.**.....
+...*....
+....*...
+....*...
+....*...
+....*...
+.....**.
+....*...
+....*...
+....*...
+....*...
+...*....
+.**.....
+........
+........
+
+char 0x7e
+........
+.***..*.
+*...**..
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0x7f
+........
+........
+........
+........
+...*....
+..*.*...
+.*...*..
+*.....*.
+*******.
+*.....*.
+*******.
+........
+........
+........
+........
+........
+
+char 0x80
+........
+..***...
+.*...*..
+*.....*.
+*.......
+*.......
+*.......
+*.......
+*.......
+*.......
+*.......
+*.....*.
+.*...*..
+..***...
+...*....
+..*.....
+
+char 0x81
+........
+........
+..*..*..
+..*..*..
+........
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+.*....*.
+..*****.
+........
+........
+
+char 0x82
+....**..
+....*...
+...*....
+........
+........
+..***...
+.*...*..
+*.....*.
+*.....*.
+*******.
+*.......
+*.....*.
+.*...*..
+..***...
+........
+........
+
+char 0x83
+........
+...*....
+..*.*...
+.*...*..
+........
+.****...
+.....*..
+.....*..
+..****..
+.*...*..
+*....*..
+*....*..
+.*...*..
+..*****.
+........
+........
+
+char 0x84
+........
+........
+..*..*..
+..*..*..
+........
+.****...
+.....*..
+.....*..
+..****..
+.*...*..
+*....*..
+*....*..
+.*...*..
+..*****.
+........
+........
+
+char 0x85
+...*....
+....*...
+.....*..
+........
+........
+.****...
+.....*..
+.....*..
+..****..
+.*...*..
+*....*..
+*....*..
+.*...*..
+..*****.
+........
+........
+
+char 0x86
+........
+...**...
+..*..*..
+...**...
+........
+.****...
+.....*..
+.....*..
+..****..
+.*...*..
+*....*..
+*....*..
+.*...*..
+..*****.
+........
+........
+
+char 0x87
+........
+........
+........
+........
+........
+..****..
+.*....*.
+*.......
+*.......
+*.......
+*.......
+*.......
+.*....*.
+..****..
+....*...
+...*....
+
+char 0x88
+........
+...*....
+..*.*...
+.*...*..
+........
+..***...
+.*...*..
+*.....*.
+*.....*.
+*******.
+*.......
+*.....*.
+.*...*..
+..***...
+........
+........
+
+char 0x89
+........
+........
+..*..*..
+..*..*..
+........
+..***...
+.*...*..
+*.....*.
+*.....*.
+*******.
+*.......
+*.....*.
+.*...*..
+..***...
+........
+........
+
+char 0x8a
+...*....
+....*...
+.....*..
+........
+........
+..***...
+.*...*..
+*.....*.
+*.....*.
+*******.
+*.......
+*.....*.
+.*...*..
+..***...
+........
+........
+
+char 0x8b
+........
+........
+..*..*..
+..*..*..
+........
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+........
+........
+
+char 0x8c
+........
+...*....
+..*.*...
+.*...*..
+........
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+........
+........
+
+char 0x8d
+...*....
+....*...
+.....*..
+........
+........
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+........
+........
+
+char 0x8e
+..*..*..
+..*..*..
+........
+..***...
+.*...*..
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*******.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+........
+........
+
+char 0x8f
+........
+..***...
+.*...*..
+..***...
+.*...*..
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*******.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+........
+........
+
+char 0x90
+....**..
+....*...
+...*....
+*******.
+*.......
+*.......
+*.......
+*.......
+*****...
+*.......
+*.......
+*.......
+*.......
+*******.
+........
+........
+
+char 0x91
+........
+........
+........
+........
+........
+.**.....
+...***..
+...*..*.
+.***..*.
+*..****.
+*..*....
+*..*....
+*..*..*.
+.**.**..
+........
+........
+
+char 0x92
+....**..
+...*....
+..*.....
+..*.*...
+..*.*...
+..*.*...
+*******.
+..*.*...
+..*.*...
+..*.*...
+..*.*...
+..*.*...
+..*.*...
+..*.*...
+........
+........
+
+char 0x93
+........
+...*....
+..*.*...
+.*...*..
+........
+..***...
+.*...*..
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+.*...*..
+..***...
+........
+........
+
+char 0x94
+........
+........
+..*..*..
+..*..*..
+........
+..***...
+.*...*..
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+.*...*..
+..***...
+........
+........
+
+char 0x95
+...*....
+....*...
+.....*..
+........
+........
+..***...
+.*...*..
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+.*...*..
+..***...
+........
+........
+
+char 0x96
+........
+...*....
+..*.*...
+.*...*..
+........
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+.*....*.
+..*****.
+........
+........
+
+char 0x97
+...*....
+....*...
+.....*..
+........
+........
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+.*....*.
+..*****.
+........
+........
+
+char 0x98
+........
+........
+..*..*..
+..*..*..
+........
+*.....*.
+*.....*.
+.*...*..
+.*...*..
+..*.*...
+..*.*...
+...*....
+...*....
+..*.....
+..*.....
+.*......
+
+char 0x99
+..*..*..
+..*..*..
+........
+..***...
+.*...*..
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+.*...*..
+..***...
+........
+........
+
+char 0x9a
+..*..*..
+..*..*..
+........
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+.*...*..
+..***...
+........
+........
+
+char 0x9b
+........
+..*.*...
+..*.*...
+..*.*...
+..****..
+.**.*.*.
+*.*.*...
+*.*.*...
+*.*.*...
+*.*.*...
+*.*.*...
+.**.*.*.
+..****..
+..*.*...
+..*.*...
+..*.*...
+
+char 0x9c
+........
+....**..
+...*..*.
+..*.....
+..*.....
+..*.....
+******..
+..*.....
+..*.....
+..*.....
+.**.....
+*.*.....
+*.**..*.
+.*..**..
+........
+........
+
+char 0x9d
+........
+*.....*.
+*.....*.
+.*...*..
+..*.*...
+...*....
+*******.
+...*....
+...*....
+*******.
+...*....
+...*....
+...*....
+...*....
+........
+........
+
+char 0x9e
+........
+***.....
+*..*....
+*...*...
+*...*...
+*...*...
+*..*.*..
+***..*..
+*..*****
+*....*..
+*....*..
+*....*..
+*....*..
+*....*..
+........
+........
+
+char 0x9f
+........
+....**..
+...*..*.
+...*....
+...*....
+...*....
+*******.
+...*....
+...*....
+...*....
+...*....
+...*....
+*..*....
+.**.....
+........
+........
+
+char 0xa0
+....**..
+....*...
+...*....
+........
+........
+.****...
+.....*..
+.....*..
+..****..
+.*...*..
+*....*..
+*....*..
+.*...*..
+..*****.
+........
+........
+
+char 0xa1
+....**..
+....*...
+...*....
+........
+........
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+........
+........
+
+char 0xa2
+....**..
+....*...
+...*....
+........
+........
+..***...
+.*...*..
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+.*...*..
+..***...
+........
+........
+
+char 0xa3
+....**..
+....*...
+...*....
+........
+........
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+.*....*.
+..*****.
+........
+........
+
+char 0xa4
+........
+...*..*.
+..*.*.*.
+..*..*..
+........
+*****...
+*....*..
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+........
+........
+
+char 0xa5
+...*..*.
+..*.*.*.
+..*..*..
+........
+*.....*.
+**....*.
+**....*.
+*.*...*.
+*..*..*.
+*..*..*.
+*...*.*.
+*....**.
+*....**.
+*.....*.
+........
+........
+
+char 0xa6
+........
+........
+........
+.****...
+.....*..
+.....*..
+..****..
+.*...*..
+*....*..
+*....*..
+.*...*..
+..*****.
+........
+*******.
+........
+........
+
+char 0xa7
+........
+........
+........
+..***...
+.*...*..
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+*.....*.
+.*...*..
+..***...
+........
+*******.
+........
+........
+
+char 0xa8
+........
+...*....
+...*....
+........
+........
+...*....
+...*....
+..*.....
+.*...*..
+*.....*.
+*.....*.
+*.....*.
+.*...*..
+..***...
+........
+........
+
+char 0xa9
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+*******.
+*.......
+*.......
+*.......
+........
+........
+
+char 0xaa
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+*******.
+......*.
+......*.
+......*.
+........
+........
+
+char 0xab
+........
+...*....
+..**....
+...*....
+...*....
+...*....
+........
+*******.
+........
+.****...
+.....*..
+..***...
+.*......
+.*****..
+........
+........
+
+char 0xac
+........
+...*....
+..**....
+...*....
+...*....
+...*....
+........
+*******.
+........
+...**...
+..*.*...
+.*..*...
+.*****..
+....*...
+........
+........
+
+char 0xad
+........
+...*....
+...*....
+........
+........
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+........
+........
+
+char 0xae
+........
+........
+........
+........
+...*..*.
+..*..*..
+.*..*...
+*..*....
+*..*....
+.*..*...
+..*..*..
+...*..*.
+........
+........
+........
+........
+
+char 0xaf
+........
+........
+........
+........
+*..*....
+.*..*...
+..*..*..
+...*..*.
+...*..*.
+..*..*..
+.*..*...
+*..*....
+........
+........
+........
+........
+
+char 0xb0
+...*...*
+.*...*..
+...*...*
+.*...*..
+...*...*
+.*...*..
+...*...*
+.*...*..
+...*...*
+.*...*..
+...*...*
+.*...*..
+...*...*
+.*...*..
+...*...*
+.*...*..
+
+char 0xb1
+.*.*.*.*
+*.*.*.*.
+.*.*.*.*
+*.*.*.*.
+.*.*.*.*
+*.*.*.*.
+.*.*.*.*
+*.*.*.*.
+.*.*.*.*
+*.*.*.*.
+.*.*.*.*
+*.*.*.*.
+.*.*.*.*
+*.*.*.*.
+.*.*.*.*
+*.*.*.*.
+
+char 0xb2
+.***.***
+**.***.*
+.***.***
+**.***.*
+.***.***
+**.***.*
+.***.***
+**.***.*
+.***.***
+**.***.*
+.***.***
+**.***.*
+.***.***
+**.***.*
+.***.***
+**.***.*
+
+char 0xb3
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+
+char 0xb4
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+****....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+
+char 0xb5
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+****....
+...*....
+****....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+
+char 0xb6
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+****.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+
+char 0xb7
+........
+........
+........
+........
+........
+........
+........
+******..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+
+char 0xb8
+........
+........
+........
+........
+........
+........
+........
+****....
+...*....
+****....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+
+char 0xb9
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+****.*..
+.....*..
+****.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+
+char 0xba
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+
+char 0xbb
+........
+........
+........
+........
+........
+........
+........
+******..
+.....*..
+****.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+
+char 0xbc
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+****.*..
+.....*..
+******..
+........
+........
+........
+........
+........
+........
+
+char 0xbd
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+******..
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xbe
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+****....
+...*....
+****....
+........
+........
+........
+........
+........
+........
+
+char 0xbf
+........
+........
+........
+........
+........
+........
+........
+****....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+
+char 0xc0
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*****
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xc1
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+********
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xc2
+........
+........
+........
+........
+........
+........
+........
+********
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+
+char 0xc3
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*****
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+
+char 0xc4
+........
+........
+........
+........
+........
+........
+........
+********
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xc5
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+********
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+
+char 0xc6
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*****
+...*....
+...*****
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+
+char 0xc7
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.***
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+
+char 0xc8
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.***
+...*....
+...*****
+........
+........
+........
+........
+........
+........
+
+char 0xc9
+........
+........
+........
+........
+........
+........
+........
+...*****
+...*....
+...*.***
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+
+char 0xca
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+****.***
+........
+********
+........
+........
+........
+........
+........
+........
+
+char 0xcb
+........
+........
+........
+........
+........
+........
+........
+********
+........
+****.***
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+
+char 0xcc
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.***
+...*....
+...*.***
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+
+char 0xcd
+........
+........
+........
+........
+........
+........
+........
+********
+........
+********
+........
+........
+........
+........
+........
+........
+
+char 0xce
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+****.***
+........
+****.***
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+
+char 0xcf
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+********
+........
+********
+........
+........
+........
+........
+........
+........
+
+char 0xd0
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+********
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xd1
+........
+........
+........
+........
+........
+........
+........
+********
+........
+********
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+
+char 0xd2
+........
+........
+........
+........
+........
+........
+........
+********
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+
+char 0xd3
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*****
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xd4
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*****
+...*....
+...*****
+........
+........
+........
+........
+........
+........
+
+char 0xd5
+........
+........
+........
+........
+........
+........
+........
+...*****
+...*....
+...*****
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+
+char 0xd6
+........
+........
+........
+........
+........
+........
+........
+...*****
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+
+char 0xd7
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+****.***
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+...*.*..
+
+char 0xd8
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+********
+...*....
+********
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+
+char 0xd9
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+****....
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xda
+........
+........
+........
+........
+........
+........
+........
+...*****
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+...*....
+
+char 0xdb
+********
+********
+********
+********
+********
+********
+********
+********
+********
+********
+********
+********
+********
+********
+********
+********
+
+char 0xdc
+........
+........
+........
+........
+........
+........
+........
+........
+********
+********
+********
+********
+********
+********
+********
+********
+
+char 0xdd
+****....
+****....
+****....
+****....
+****....
+****....
+****....
+****....
+****....
+****....
+****....
+****....
+****....
+****....
+****....
+****....
+
+char 0xde
+....****
+....****
+....****
+....****
+....****
+....****
+....****
+....****
+....****
+....****
+....****
+....****
+....****
+....****
+....****
+....****
+
+char 0xdf
+********
+********
+********
+********
+********
+********
+********
+********
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xe0
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xe1
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xe2
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xe3
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xe4
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xe5
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xe6
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xe7
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xe8
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xe9
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xea
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xeb
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xec
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xed
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xee
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xef
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xf0
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xf1
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xf2
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xf3
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xf4
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xf5
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xf6
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xf7
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xf8
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xf9
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xfa
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xfb
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xfc
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xfd
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xfe
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+
+char 0xff
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
+........
--- /dev/null
+ 1 00000000 [FORMAT "WCOFF"]
+ 2 00000000 [INSTRSET "i486p"]
+ 3 00000000 [OPTIMIZE 1]
+ 4 00000000 [OPTION 1]
+ 5 00000000 [BITS 32]
+ 6 00000000 EXTERN _io_out8
+ 7 00000000 [FILE "int.c"]
+ 8 [SECTION .text]
+ 9 00000000 GLOBAL _init_pic
+ 10 00000000 _init_pic:
+ 11 00000000 55 PUSH EBP
+ 12 00000001 89 E5 MOV EBP,ESP
+ 13 00000003 68 000000FF PUSH 255
+ 14 00000008 6A 21 PUSH 33
+ 15 0000000A E8 [00000000] CALL _io_out8
+ 16 0000000F 68 000000FF PUSH 255
+ 17 00000014 68 000000A1 PUSH 161
+ 18 00000019 E8 [00000000] CALL _io_out8
+ 19 0000001E 6A 11 PUSH 17
+ 20 00000020 6A 20 PUSH 32
+ 21 00000022 E8 [00000000] CALL _io_out8
+ 22 00000027 6A 20 PUSH 32
+ 23 00000029 6A 21 PUSH 33
+ 24 0000002B E8 [00000000] CALL _io_out8
+ 25 00000030 83 C4 20 ADD ESP,32
+ 26 00000033 6A 04 PUSH 4
+ 27 00000035 6A 21 PUSH 33
+ 28 00000037 E8 [00000000] CALL _io_out8
+ 29 0000003C 6A 01 PUSH 1
+ 30 0000003E 6A 21 PUSH 33
+ 31 00000040 E8 [00000000] CALL _io_out8
+ 32 00000045 6A 11 PUSH 17
+ 33 00000047 68 000000A0 PUSH 160
+ 34 0000004C E8 [00000000] CALL _io_out8
+ 35 00000051 6A 28 PUSH 40
+ 36 00000053 68 000000A1 PUSH 161
+ 37 00000058 E8 [00000000] CALL _io_out8
+ 38 0000005D 83 C4 20 ADD ESP,32
+ 39 00000060 6A 02 PUSH 2
+ 40 00000062 68 000000A1 PUSH 161
+ 41 00000067 E8 [00000000] CALL _io_out8
+ 42 0000006C 6A 01 PUSH 1
+ 43 0000006E 68 000000A1 PUSH 161
+ 44 00000073 E8 [00000000] CALL _io_out8
+ 45 00000078 68 000000FB PUSH 251
+ 46 0000007D 6A 21 PUSH 33
+ 47 0000007F E8 [00000000] CALL _io_out8
+ 48 00000084 68 000000FF PUSH 255
+ 49 00000089 68 000000A1 PUSH 161
+ 50 0000008E E8 [00000000] CALL _io_out8
+ 51 00000093 C9 LEAVE
+ 52 00000094 C3 RET
--- /dev/null
+; haribote-ipl
+; TAB=4
+
+BASEADDR EQU 0x7c00
+DISKREADSTRUCT EQU 0x0800
+SYSADDR EQU 0xc200
+SYSSECTOR EQU 0x0040
+STACK EQU 0x7c00
+HARDDISK_CACHE EQU 0x8000
+
+PATNUM EQU 0
+PAT0_STARTSEC EQU 0x3f
+PAT0_SECNUM EQU 0x200
+
+DRIVENO EQU 0x0820
+
+MBR EQU 0x600
+PATTABLE EQU MBR + 446
+
+ ORG BASEADDR ; このプログラムがどこに読み込まれるのか
+
+ ;FAT32 BPB
+ jmp short entry
+ nop
+ db "MSDOS5.0" ; OEM Name
+ dw 0x0200 ; bytes per sec
+secperclus:
+ db 2 ; sec per clus
+reservedsec:
+ dw 0x40 ; rsvdseccnt
+fatnum:
+ db 2 ; num fat data structures
+ dw 0 ; root ent cnt (in fat32 must be zero)
+ dw 0 ; total sec 16 (in fat32 must be zero)
+media:
+ db 0xf8 ; media (non-removable:0xf8 removable:0xf0)usbメモリに0xf8を使っても問題ない模様
+ dw 0 ; fat sz 16 (in fat32 must be zero)
+ dw 0x003f ; sec per track
+ dw 0x00ff ; num heads
+hiddensec:
+ dd PAT0_STARTSEC ; hidden sec
+ dd PAT0_SECNUM ; total sec 32
+
+fatsize32:
+ dd 0x100 ; fat sz 32
+ dw 0 ; ext flags
+ dw 0x0000 ; fs ver (must be 0x0000)
+rootclus:
+ dd 0x02 ; root clus
+ dw 0x01 ; sector num of FSINFO
+ dw 0x06 ; Backup boot sec
+ resb 12 ; reserved
+ db 0x80 ; drive num (used from int 0x13)
+ db 0 ; reserved1
+ db 0x29 ; ext boot sig
+ dd 0xdebeefad ; Volume serial number (usually generated by date and time)
+ db "NO NAME " ; Volume label
+ db "FAT32 " ; File Sys Type
+entry:
+ xor eax, eax
+ mov ss, ax
+ mov ds, ax
+ mov es, ax
+ mov sp, STACK
+
+ mov [DRIVENO], dl
+
+ mov ebx, [hiddensec]
+ mov ax, [reservedsec]
+ ;movzx eax, ax ; この時点でeax上位16bitは0のはず
+ add ebx, eax
+ mov al, [fatnum]
+ movzx eax, al
+ mov ecx, [fatsize32]
+ mul ecx
+ add ebx, eax
+
+ ;fatのファイルデータの先頭からルートディレクトリの先頭クラスタへ
+ mov ecx, [rootclus]
+ dec ecx
+ dec ecx
+ mov eax, [secperclus]
+ mul ecx
+ add ebx, eax
+
+ ;まずはルートディレクトリの構造体からbootmgrのサイズを読む
+ push HARDDISK_CACHE >> 4
+ pop es
+ xor di, di
+
+ mov cl, [secperclus]
+ movzx cx, cl
+
+ call readhd
+
+ mov eax, [es:di + 0x1c] ; bootmgrファイルサイズ
+ add eax, 0x200 - 1
+ mov ecx, 0x200
+ xor edx, edx
+ div ecx
+ mov ecx, eax
+
+ mov al, [secperclus]
+ movzx eax, al
+ add ebx, eax
+
+ push SYSADDR >> 4
+ pop es
+ xor di,di
+
+ call readhd
+
+
+ jmp 0:SYSADDR
+
+
+readhd:
+;ebx : 読み込み開始セクタ
+;es:di : 読み込み先アドレス
+;cx : 読み込むセクタ数
+ ;読み込みのための構造体を設定
+ mov si, DISKREADSTRUCT
+ mov ax, 0x0010
+ mov [si], ax
+ mov ax, cx ; 読み込むセクタ数
+ mov [si+2], ax
+ mov ax, di
+ mov [si+4], ax
+ mov ax, es
+ mov [si+6], ax
+; mov ax, SYSSECTOR & 0xFFFF
+; mov [si+8], ax
+; mov ax, (SYSSECTOR >> 0x10) & 0xFFFF
+; mov [si+0x0a], ax
+ mov [si + 8], ebx
+ mov ax, 0
+ mov [si+0x0c], ax
+ mov [si+0x0e], ax
+
+ ; 拡張int 0x13を用いてHDDからブートセクションを読みこむ
+ mov ah, 0x42
+ mov dl, [DRIVENO]
+ mov al, 0
+
+ int 0x13
+ ret
+
+
+
+
+ RESB 0x1fe-($ - $$) ; 0x7dfeまでを0x00で埋める命令
+
+ DB 0x55, 0xaa
--- /dev/null
+ 1 ; haribote-ipl
+ 2 ; TAB=4
+ 3
+ 4 BASEADDR EQU 0x7c00
+ 5 DISKREADSTRUCT EQU 0x0800
+ 6 SYSADDR EQU 0xc200
+ 7 SYSSECTOR EQU 0x0040
+ 8 STACK EQU 0x7c00
+ 9 HARDDISK_CACHE EQU 0x8000
+ 10
+ 11 PATNUM EQU 0
+ 12 PAT0_STARTSEC EQU 0x3f
+ 13 PAT0_SECNUM EQU 0x200
+ 14
+ 15 DRIVENO EQU 0x0820
+ 16
+ 17 MBR EQU 0x600
+ 18 PATTABLE EQU MBR + 446
+ 19
+ 20 ORG BASEADDR ; このプログラムがどこに読み込まれるのか
+ 21
+ 22 ;FAT32 BPB
+ 23 00000000 EB58 jmp short entry
+ 24 00000002 90 nop
+ 25 00000003 4D53444F53352E30 db "MSDOS5.0" ; OEM Name
+ 26 0000000B 0002 dw 0x0200 ; bytes per sec
+ 27 secperclus:
+ 28 0000000D 02 db 2 ; sec per clus
+ 29 reservedsec:
+ 30 0000000E 4000 dw 0x40 ; rsvdseccnt
+ 31 fatnum:
+ 32 00000010 02 db 2 ; num fat data structures
+ 33 00000011 0000 dw 0 ; root ent cnt (in fat32 must be zero)
+ 34 00000013 0000 dw 0 ; total sec 16 (in fat32 must be zero)
+ 35 media:
+ 36 00000015 F8 db 0xf8 ; media (non-removable:0xf8 removable:0xf0)usbメモリに0xf8を使っても問題ない模様
+ 37 00000016 0000 dw 0 ; fat sz 16 (in fat32 must be zero)
+ 38 00000018 3F00 dw 0x003f ; sec per track
+ 39 0000001A FF00 dw 0x00ff ; num heads
+ 40 hiddensec:
+ 41 0000001C 3F000000 dd PAT0_STARTSEC ; hidden sec
+ 42 00000020 00020000 dd PAT0_SECNUM ; total sec 32
+ 43
+ 44 fatsize32:
+ 45 00000024 00010000 dd 0x100 ; fat sz 32
+ 46 00000028 0000 dw 0 ; ext flags
+ 47 0000002A 0000 dw 0x0000 ; fs ver (must be 0x0000)
+ 48 rootclus:
+ 49 0000002C 02000000 dd 0x02 ; root clus
+ 50 00000030 0100 dw 0x01 ; sector num of FSINFO
+ 51 00000032 0600 dw 0x06 ; Backup boot sec
+ 52 00000034 <res 0000000C> resb 12 ; reserved
+ 53 ****************** warning: uninitialized space declared in .text section: zeroing
+ 54 00000040 80 db 0x80 ; drive num (used from int 0x13)
+ 55 00000041 00 db 0 ; reserved1
+ 56 00000042 29 db 0x29 ; ext boot sig
+ 57 00000043 ADEFBEDE dd 0xdebeefad ; Volume serial number (usually generated by date and time)
+ 58 00000047 4E4F204E414D452020- db "NO NAME " ; Volume label
+ 59 00000050 2020
+ 60 00000052 4641543332202020 db "FAT32 " ; File Sys Type
+ 61 entry:
+ 62 0000005A 6631C0 xor eax, eax
+ 63 0000005D 8ED0 mov ss, ax
+ 64 0000005F 8ED8 mov ds, ax
+ 65 00000061 8EC0 mov es, ax
+ 66 00000063 BC007C mov sp, STACK
+ 67
+ 68 00000066 88162008 mov [DRIVENO], dl
+ 69
+ 70 0000006A 668B1E[1C00] mov ebx, [hiddensec]
+ 71 0000006F A1[0E00] mov ax, [reservedsec]
+ 72 ;movzx eax, ax ; この時点でeax上位16bitは0のはず
+ 73 00000072 6601C3 add ebx, eax
+ 74 00000075 A0[1000] mov al, [fatnum]
+ 75 00000078 660FB6C0 movzx eax, al
+ 76 0000007C 668B0E[2400] mov ecx, [fatsize32]
+ 77 00000081 66F7E1 mul ecx
+ 78 00000084 6601C3 add ebx, eax
+ 79
+ 80 ;fatのファイルデータの先頭からルートディレクトリの先頭クラスタへ
+ 81 00000087 668B0E[2C00] mov ecx, [rootclus]
+ 82 0000008C 6649 dec ecx
+ 83 0000008E 6649 dec ecx
+ 84 00000090 66A1[0D00] mov eax, [secperclus]
+ 85 00000094 66F7E1 mul ecx
+ 86 00000097 6601C3 add ebx, eax
+ 87
+ 88 ;まずはルートディレクトリの構造体からbootmgrのサイズを読む
+ 89 0000009A 680008 push HARDDISK_CACHE >> 4
+ 90 0000009D 07 pop es
+ 91 0000009E 31FF xor di, di
+ 92
+ 93 000000A0 8A0E[0D00] mov cl, [secperclus]
+ 94 000000A4 0FB6C9 movzx cx, cl
+ 95
+ 96 000000A7 E83200 call readhd
+ 97
+ 98 000000AA 26668B451C mov eax, [es:di + 0x1c] ; bootmgrファイルサイズ
+ 99 000000AF 6605FF010000 add eax, 0x200 - 1
+ 100 000000B5 66B900020000 mov ecx, 0x200
+ 101 000000BB 6631D2 xor edx, edx
+ 102 000000BE 66F7F1 div ecx
+ 103 000000C1 6689C1 mov ecx, eax
+ 104
+ 105 000000C4 A0[0D00] mov al, [secperclus]
+ 106 000000C7 660FB6C0 movzx eax, al
+ 107 000000CB 6601C3 add ebx, eax
+ 108
+ 109 000000CE 68200C push SYSADDR >> 4
+ 110 000000D1 07 pop es
+ 111 000000D2 31FF xor di,di
+ 112
+ 113 000000D4 E80500 call readhd
+ 114
+ 115
+ 116 000000D7 EA00C20000 jmp 0:SYSADDR
+ 117
+ 118
+ 119 readhd:
+ 120 ;ebx : 読み込み開始セクタ
+ 121 ;es:di : 読み込み先アドレス
+ 122 ;cx : 読み込むセクタ数
+ 123 ;読み込みのための構造体を設定
+ 124 000000DC BE0008 mov si, DISKREADSTRUCT
+ 125 000000DF B81000 mov ax, 0x0010
+ 126 000000E2 8904 mov [si], ax
+ 127 000000E4 89C8 mov ax, cx ; 読み込むセクタ数
+ 128 000000E6 894402 mov [si+2], ax
+ 129 000000E9 89F8 mov ax, di
+ 130 000000EB 894404 mov [si+4], ax
+ 131 000000EE 8CC0 mov ax, es
+ 132 000000F0 894406 mov [si+6], ax
+ 133 ; mov ax, SYSSECTOR & 0xFFFF
+ 134 ; mov [si+8], ax
+ 135 ; mov ax, (SYSSECTOR >> 0x10) & 0xFFFF
+ 136 ; mov [si+0x0a], ax
+ 137 000000F3 66895C08 mov [si + 8], ebx
+ 138 000000F7 B80000 mov ax, 0
+ 139 000000FA 89440C mov [si+0x0c], ax
+ 140 000000FD 89440E mov [si+0x0e], ax
+ 141
+ 142 ; 拡張int 0x13を用いてHDDからブートセクションを読みこむ
+ 143 00000100 B442 mov ah, 0x42
+ 144 00000102 8A162008 mov dl, [DRIVENO]
+ 145 00000106 B000 mov al, 0
+ 146
+ 147 00000108 CD13 int 0x13
+ 148 0000010A C3 ret
+ 149
+ 150
+ 151
+ 152
+ 153 0000010B <res 000000F3> RESB 0x1fe-($ - $$) ; 0x7dfeまでを0x00で埋める命令
+ 154 ****************** warning: uninitialized space declared in .text section: zeroing
+ 155
+ 156 000001FE 55AA DB 0x55, 0xaa
--- /dev/null
+/* \83L\81[\83{\81[\83h\8aÖ\8cW */
+
+#include "bootpack.h"
+
+struct FIFO32 *keyfifo;
+int keydata0;
+
+void inthandler21(int *esp)
+{
+ int data;
+ io_out8(PIC0_OCW2, 0x61); /* IRQ-01\8eó\95t\8a®\97¹\82ðPIC\82É\92Ê\92m */
+ data = io_in8(PORT_KEYDAT);
+ fifo32_put(keyfifo, data + keydata0);
+ return;
+}
+
+#define PORT_KEYSTA 0x0064
+#define KEYSTA_SEND_NOTREADY 0x02
+#define KEYCMD_WRITE_MODE 0x60
+#define KBC_MODE 0x47
+
+void wait_KBC_sendready(void)
+{
+ /* \83L\81[\83{\81[\83h\83R\83\93\83g\83\8d\81[\83\89\82ª\83f\81[\83^\91\97\90M\89Â\94\\82É\82È\82é\82Ì\82ð\91Ò\82Â */
+ for (;;) {
+ if ((io_in8(PORT_KEYSTA) & KEYSTA_SEND_NOTREADY) == 0) {
+ break;
+ }
+ }
+ return;
+}
+
+void init_keyboard(struct FIFO32 *fifo, int data0)
+{
+ /* \8f\91\82«\8d\9e\82Ý\90æ\82ÌFIFO\83o\83b\83t\83@\82ð\8bL\89¯ */
+ keyfifo = fifo;
+ keydata0 = data0;
+ /* \83L\81[\83{\81[\83h\83R\83\93\83g\83\8d\81[\83\89\82Ì\8f\89\8aú\89» */
+ wait_KBC_sendready();
+ io_out8(PORT_KEYCMD, KEYCMD_WRITE_MODE);
+ wait_KBC_sendready();
+ io_out8(PORT_KEYDAT, KBC_MODE);
+ return;
+}
--- /dev/null
+ 1 00000000 [FORMAT "WCOFF"]
+ 2 00000000 [INSTRSET "i486p"]
+ 3 00000000 [OPTIMIZE 1]
+ 4 00000000 [OPTION 1]
+ 5 00000000 [BITS 32]
+ 6 00000000 EXTERN _io_out8
+ 7 00000000 EXTERN _io_in8
+ 8 00000000 EXTERN _fifo32_put
+ 9 00000000 [FILE "keyboard.c"]
+ 10 [SECTION .text]
+ 11 00000000 GLOBAL _inthandler21
+ 12 00000000 _inthandler21:
+ 13 00000000 55 PUSH EBP
+ 14 00000001 89 E5 MOV EBP,ESP
+ 15 00000003 6A 61 PUSH 97
+ 16 00000005 6A 20 PUSH 32
+ 17 00000007 E8 [00000000] CALL _io_out8
+ 18 0000000C 6A 60 PUSH 96
+ 19 0000000E E8 [00000000] CALL _io_in8
+ 20 00000013 03 05 [00000004] ADD EAX,DWORD [_keydata0]
+ 21 00000019 50 PUSH EAX
+ 22 0000001A FF 35 [00000000] PUSH DWORD [_keyfifo]
+ 23 00000020 E8 [00000000] CALL _fifo32_put
+ 24 00000025 C9 LEAVE
+ 25 00000026 C3 RET
+ 26 00000027 GLOBAL _wait_KBC_sendready
+ 27 00000027 _wait_KBC_sendready:
+ 28 00000027 55 PUSH EBP
+ 29 00000028 89 E5 MOV EBP,ESP
+ 30 0000002A L3:
+ 31 0000002A 6A 64 PUSH 100
+ 32 0000002C E8 [00000000] CALL _io_in8
+ 33 00000031 5A POP EDX
+ 34 00000032 83 E0 02 AND EAX,2
+ 35 00000035 75 F3 JNE L3
+ 36 00000037 C9 LEAVE
+ 37 00000038 C3 RET
+ 38 00000039 GLOBAL _init_keyboard
+ 39 00000039 _init_keyboard:
+ 40 00000039 55 PUSH EBP
+ 41 0000003A 89 E5 MOV EBP,ESP
+ 42 0000003C 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 43 0000003F A3 [00000000] MOV DWORD [_keyfifo],EAX
+ 44 00000044 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 45 00000047 A3 [00000004] MOV DWORD [_keydata0],EAX
+ 46 0000004C E8 FFFFFFD6 CALL _wait_KBC_sendready
+ 47 00000051 6A 60 PUSH 96
+ 48 00000053 6A 64 PUSH 100
+ 49 00000055 E8 [00000000] CALL _io_out8
+ 50 0000005A E8 FFFFFFC8 CALL _wait_KBC_sendready
+ 51 0000005F 59 POP ECX
+ 52 00000060 58 POP EAX
+ 53 00000061 C7 45 0C 00000047 MOV DWORD [12+EBP],71
+ 54 00000068 C7 45 08 00000060 MOV DWORD [8+EBP],96
+ 55 0000006F C9 LEAVE
+ 56 00000070 E9 [00000000] JMP _io_out8
+ 57 00000075 GLOBAL _keyfifo
+ 58 [SECTION .data]
+ 59 00000000 ALIGNB 4
+ 60 00000000 _keyfifo:
+ 61 00000000 00 00 00 00 RESB 4
+ 62 00000004 GLOBAL _keydata0
+ 63 [SECTION .data]
+ 64 00000004 ALIGNB 4
+ 65 00000004 _keydata0:
+ 66 00000004 00 00 00 00 RESB 4
--- /dev/null
+; haribote-ipl
+; TAB=4
+
+LOADADDR EQU 0x7c00
+BASEADDR EQU 0x0600
+DISKREADSTRUCT EQU 0x0800
+
+PAT0_STARTSEC EQU 0x3f
+PAT0_SECNUM EQU 0x200
+
+ ORG 0x600 ; \82±\82Ì\83v\83\8d\83O\83\89\83\80\82ª\82Ç\82±\82É\93Ç\82Ý\8d\9e\82Ü\82ê\82é\82Ì\82©
+
+ ;mbr\82ð0x0600\82É\83R\83s\81[\82µ\82Ä\82»\82Á\82¿\82Å\8eÀ\8ds\82·\82é
+ xor ax, ax
+ mov ds, ax
+ mov si, LOADADDR
+ mov es, ax
+ mov di, BASEADDR
+ mov cx, 0x200 / 2
+ rep movsw
+ jmp 0:entry ; 0x0600\82É\83R\83s\81[\82µ\82½\95û\82Ì\83R\81[\83h\82Ö\88Ú\82é
+entry:
+ ;mov cs, ax
+ mov ss, ax
+ mov ds, ax
+ mov es, ax
+
+
+
+ ;\93Ç\82Ý\8d\9e\82Ý\82Ì\82½\82ß\82Ì\8d\\91¢\91Ì\82ð\90Ý\92è
+ mov si, DISKREADSTRUCT
+ mov ax, 0x0010
+ mov [si], ax
+ mov ax, 0x0001
+ mov [si+2], ax
+ mov ax, LOADADDR
+ mov [si+4], ax
+ mov ax, 0
+ mov [si+6], ax
+ mov ax, [pat0 + 8]
+ mov [si+8], ax
+ mov ax, [pat0 + 8 + 2]
+ mov [si+0x0a], ax
+ mov ax, 0
+ mov [si+0x0c], ax
+ mov [si+0x0e], ax
+
+ ; \8ag\92£int 0x13\82ð\97p\82¢\82ÄHDD\82©\82ç\83u\81[\83g\83Z\83N\83V\83\87\83\93\82ð\93Ç\82Ý\82±\82Þ
+ mov ah, 0x42
+ ;mov dl, todo ; \83h\83\89\83C\83u\94Ô\8d\86\82Ídl\82É\93ü\82Á\82Ä\82¢\82é\81E\81E\81E\81H
+ mov al, 0
+
+ int 0x13
+
+ jmp 0:LOADADDR
+
+
+; RESB BASEADDR+0x168000-$ ; 0x7dfe\82Ü\82Å\82ð0x00\82Å\96\84\82ß\82é\96½\97ß
+
+ RESB 0x1BE - ($ - $$)
+
+; struc pattable
+ ; boot_flag : resb 1
+ ; starting_h : resb 1
+ ; starting_s : resb 1
+ ; starting_c : resb 1
+ ; pattype : resb 1
+ ; ending_h : resb 1
+ ; ending_s : resb 1
+ ; ending_c : resb 1
+ ; begin_lba : resd 1
+ ; sector_num : resd 1
+; endstruc
+
+pat0:
+ db 0x80 ; boot flag
+ db 1,1,0 ;partition begin CHS
+ db 0x0B ; partition type:FAT32
+ db 0xfe,0xff,0xff; partition end CHS
+ dd 0x0000003f ;partition begin LBA
+ dd 0x00000302 ;partition size LBA(sector num)
+
+
+pat1:
+ db 0x00
+ db 0,0,0 ;partition begin CHS
+ db 0x00 ; partition type:FAT32
+ db 0x00,0x00,0x00; partition end CHS
+ dd 0x00000000 ;partition begin LBA
+ dd 0x00000000 ;partition size LBA(sector num)
+
+ resb 0x200-2-($ - $$)
+
+ ; db 0x00
+ ; db 1,1,0 ;partition begin CHS
+ ; db 0x0C ; partition type:FAT32
+ ; db 0xfe,0xff,0xff; partition end CHS
+ ; dd 0x0000003f ;partition begin LBA
+ ; dd 0x00000000 ;partition size LBA(sector num)
+
+ ; db 0x00
+ ; db 1,1,0 ;partition begin CHS
+ ; db 0x0C ; partition type:FAT32
+ ; db 0xfe,0xff,0xff; partition end CHS
+ ; dd 0x0000003f ;partition begin LBA
+ ; dd 0x00000000 ;partition size LBA(sector num)
+
+
+ db 0x55
+ db 0xAA
+
\ No newline at end of file
--- /dev/null
+ 1 ; haribote-ipl
+ 2 ; TAB=4
+ 3
+ 4 LOADADDR EQU 0x7c00
+ 5 BASEADDR EQU 0x0600
+ 6 DISKREADSTRUCT EQU 0x0800
+ 7
+ 8 PAT0_STARTSEC EQU 0x3f
+ 9 PAT0_SECNUM EQU 0x200
+ 10
+ 11 ORG 0x600 ; \82±\82Ì\83v\83\8d\83O\83\89\83\80\82ª\82Ç\82±\82É\93Ç\82Ý\8d\9e\82Ü\82ê\82é\82Ì\82©
+ 12
+ 13 ;mbr\82ð0x0600\82É\83R\83s\81[\82µ\82Ä\82»\82Á\82¿\82Å\8eÀ\8ds\82·\82é
+ 14 00000000 31C0 xor ax, ax
+ 15 00000002 8ED8 mov ds, ax
+ 16 00000004 BE007C mov si, LOADADDR
+ 17 00000007 8EC0 mov es, ax
+ 18 00000009 BF0006 mov di, BASEADDR
+ 19 0000000C B90001 mov cx, 0x200 / 2
+ 20 0000000F F3A5 rep movsw
+ 21 00000011 EA[1600]0000 jmp 0:entry ; 0x0600\82É\83R\83s\81[\82µ\82½\95û\82Ì\83R\81[\83h\82Ö\88Ú\82é
+ 22 entry:
+ 23 ;mov cs, ax
+ 24 00000016 8ED0 mov ss, ax
+ 25 00000018 8ED8 mov ds, ax
+ 26 0000001A 8EC0 mov es, ax
+ 27
+ 28
+ 29
+ 30 ;\93Ç\82Ý\8d\9e\82Ý\82Ì\82½\82ß\82Ì\8d\\91¢\91Ì\82ð\90Ý\92è
+ 31 0000001C BE0008 mov si, DISKREADSTRUCT
+ 32 0000001F B81000 mov ax, 0x0010
+ 33 00000022 8904 mov [si], ax
+ 34 00000024 B80100 mov ax, 0x0001
+ 35 00000027 894402 mov [si+2], ax
+ 36 0000002A B8007C mov ax, LOADADDR
+ 37 0000002D 894404 mov [si+4], ax
+ 38 00000030 B80000 mov ax, 0
+ 39 00000033 894406 mov [si+6], ax
+ 40 00000036 A1[C601] mov ax, [pat0 + 8]
+ 41 00000039 894408 mov [si+8], ax
+ 42 0000003C A1[C801] mov ax, [pat0 + 8 + 2]
+ 43 0000003F 89440A mov [si+0x0a], ax
+ 44 00000042 B80000 mov ax, 0
+ 45 00000045 89440C mov [si+0x0c], ax
+ 46 00000048 89440E mov [si+0x0e], ax
+ 47
+ 48 ; \8ag\92£int 0x13\82ð\97p\82¢\82ÄHDD\82©\82ç\83u\81[\83g\83Z\83N\83V\83\87\83\93\82ð\93Ç\82Ý\82±\82Þ
+ 49 0000004B B442 mov ah, 0x42
+ 50 ;mov dl, todo ; \83h\83\89\83C\83u\94Ô\8d\86\82Ídl\82É\93ü\82Á\82Ä\82¢\82é\81E\81E\81E\81H
+ 51 0000004D B000 mov al, 0
+ 52
+ 53 0000004F CD13 int 0x13
+ 54
+ 55 00000051 EA007C0000 jmp 0:LOADADDR
+ 56
+ 57
+ 58 ; RESB BASEADDR+0x168000-$ ; 0x7dfe\82Ü\82Å\82ð0x00\82Å\96\84\82ß\82é\96½\97ß
+ 59
+ 60 00000056 <res 00000168> RESB 0x1BE - ($ - $$)
+ 61 ****************** warning: uninitialized space declared in .text section: zeroing
+ 62
+ 63 ; struc pattable
+ 64 ; boot_flag : resb 1
+ 65 ; starting_h : resb 1
+ 66 ; starting_s : resb 1
+ 67 ; starting_c : resb 1
+ 68 ; pattype : resb 1
+ 69 ; ending_h : resb 1
+ 70 ; ending_s : resb 1
+ 71 ; ending_c : resb 1
+ 72 ; begin_lba : resd 1
+ 73 ; sector_num : resd 1
+ 74 ; endstruc
+ 75
+ 76 pat0:
+ 77 000001BE 80 db 0x80 ; boot flag
+ 78 000001BF 010100 db 1,1,0 ;partition begin CHS
+ 79 000001C2 0B db 0x0B ; partition type:FAT32
+ 80 000001C3 FEFFFF db 0xfe,0xff,0xff; partition end CHS
+ 81 000001C6 3F000000 dd 0x0000003f ;partition begin LBA
+ 82 000001CA 02030000 dd 0x00000302 ;partition size LBA(sector num)
+ 83
+ 84
+ 85 pat1:
+ 86 000001CE 00 db 0x00
+ 87 000001CF 000000 db 0,0,0 ;partition begin CHS
+ 88 000001D2 00 db 0x00 ; partition type:FAT32
+ 89 000001D3 000000 db 0x00,0x00,0x00; partition end CHS
+ 90 000001D6 00000000 dd 0x00000000 ;partition begin LBA
+ 91 000001DA 00000000 dd 0x00000000 ;partition size LBA(sector num)
+ 92
+ 93 000001DE <res 00000020> resb 0x200-2-($ - $$)
+ 94 ****************** warning: uninitialized space declared in .text section: zeroing
+ 95
+ 96 ; db 0x00
+ 97 ; db 1,1,0 ;partition begin CHS
+ 98 ; db 0x0C ; partition type:FAT32
+ 99 ; db 0xfe,0xff,0xff; partition end CHS
+ 100 ; dd 0x0000003f ;partition begin LBA
+ 101 ; dd 0x00000000 ;partition size LBA(sector num)
+ 102
+ 103 ; db 0x00
+ 104 ; db 1,1,0 ;partition begin CHS
+ 105 ; db 0x0C ; partition type:FAT32
+ 106 ; db 0xfe,0xff,0xff; partition end CHS
+ 107 ; dd 0x0000003f ;partition begin LBA
+ 108 ; dd 0x00000000 ;partition size LBA(sector num)
+ 109
+ 110
+ 111 000001FE 55 db 0x55
+ 112 000001FF AA db 0xAA
+ 113
--- /dev/null
+#$a = (0x168000 - (-s 'iplcd.bin'));for(1..($a/1000000)){print qq(\0)x1000000;}print qq(\0) x ($a % 1000000);
--- /dev/null
+/* \83\81\83\82\83\8a\8aÖ\8cW */
+
+#include "bootpack.h"
+
+#define EFLAGS_AC_BIT 0x00040000
+#define CR0_CACHE_DISABLE 0x60000000
+
+unsigned int memtest(unsigned int start, unsigned int end)
+{
+ char flg486 = 0;
+ unsigned int eflg, cr0, i;
+
+ /* 386\82©\81A486\88È\8d~\82È\82Ì\82©\82Ì\8am\94F */
+ eflg = io_load_eflags();
+ eflg |= EFLAGS_AC_BIT; /* AC-bit = 1 */
+ io_store_eflags(eflg);
+ eflg = io_load_eflags();
+ if ((eflg & EFLAGS_AC_BIT) != 0) { /* 386\82Å\82ÍAC=1\82É\82µ\82Ä\82à\8e©\93®\82Å0\82É\96ß\82Á\82Ä\82µ\82Ü\82¤ */
+ flg486 = 1;
+ }
+ eflg &= ~EFLAGS_AC_BIT; /* AC-bit = 0 */
+ io_store_eflags(eflg);
+
+ if (flg486 != 0) {
+ cr0 = load_cr0();
+ cr0 |= CR0_CACHE_DISABLE; /* \83L\83\83\83b\83V\83\85\8bÖ\8e~ */
+ store_cr0(cr0);
+ }
+
+ i = memtest_sub(start, end);
+
+ if (flg486 != 0) {
+ cr0 = load_cr0();
+ cr0 &= ~CR0_CACHE_DISABLE; /* \83L\83\83\83b\83V\83\85\8b\96\89Â */
+ store_cr0(cr0);
+ }
+
+ return i;
+}
+
+void memman_init(struct MEMMAN *man)
+{
+ man->frees = 0; /* \82 \82«\8fî\95ñ\82Ì\8cÂ\90\94 */
+ man->maxfrees = 0; /* \8fó\8bµ\8aÏ\8e@\97p\81Ffrees\82Ì\8dÅ\91å\92l */
+ man->lostsize = 0; /* \89ð\95ú\82É\8e¸\94s\82µ\82½\8d\87\8cv\83T\83C\83Y */
+ man->losts = 0; /* \89ð\95ú\82É\8e¸\94s\82µ\82½\89ñ\90\94 */
+ return;
+}
+
+unsigned int memman_total(struct MEMMAN *man)
+/* \82 \82«\83T\83C\83Y\82Ì\8d\87\8cv\82ð\95ñ\8d\90 */
+{
+ unsigned int i, t = 0;
+ for (i = 0; i < man->frees; i++) {
+ t += man->free[i].size;
+ }
+ return t;
+}
+
+unsigned int memman_alloc(struct MEMMAN *man, unsigned int size)
+/* \8am\95Û */
+{
+ unsigned int i, a;
+ for (i = 0; i < man->frees; i++) {
+ if (man->free[i].size >= size) {
+ /* \8f\\95ª\82È\8dL\82³\82Ì\82 \82«\82ð\94\8c© */
+ a = man->free[i].addr;
+ man->free[i].addr += size;
+ man->free[i].size -= size;
+ if (man->free[i].size == 0) {
+ /* free[i]\82ª\82È\82\82È\82Á\82½\82Ì\82Å\91O\82Ö\82Â\82ß\82é */
+ man->frees--;
+ for (; i < man->frees; i++) {
+ man->free[i] = man->free[i + 1]; /* \8d\\91¢\91Ì\82Ì\91ã\93ü */
+ }
+ }
+ return a;
+ }
+ }
+ return 0; /* \82 \82«\82ª\82È\82¢ */
+}
+
+int memman_free(struct MEMMAN *man, unsigned int addr, unsigned int size)
+/* \89ð\95ú */
+{
+ int i, j;
+ /* \82Ü\82Æ\82ß\82â\82·\82³\82ð\8dl\82¦\82é\82Æ\81Afree[]\82ªaddr\8f\87\82É\95À\82ñ\82Å\82¢\82é\82Ù\82¤\82ª\82¢\82¢ */
+ /* \82¾\82©\82ç\82Ü\82¸\81A\82Ç\82±\82É\93ü\82ê\82é\82×\82«\82©\82ð\8c\88\82ß\82é */
+ for (i = 0; i < man->frees; i++) {
+ if (man->free[i].addr > addr) {
+ break;
+ }
+ }
+ /* free[i - 1].addr < addr < free[i].addr */
+ if (i > 0) {
+ /* \91O\82ª\82 \82é */
+ if (man->free[i - 1].addr + man->free[i - 1].size == addr) {
+ /* \91O\82Ì\82 \82«\97Ì\88æ\82É\82Ü\82Æ\82ß\82ç\82ê\82é */
+ man->free[i - 1].size += size;
+ if (i < man->frees) {
+ /* \8cã\82ë\82à\82 \82é */
+ if (addr + size == man->free[i].addr) {
+ /* \82È\82ñ\82Æ\8cã\82ë\82Æ\82à\82Ü\82Æ\82ß\82ç\82ê\82é */
+ man->free[i - 1].size += man->free[i].size;
+ /* man->free[i]\82Ì\8dí\8f\9c */
+ /* free[i]\82ª\82È\82\82È\82Á\82½\82Ì\82Å\91O\82Ö\82Â\82ß\82é */
+ man->frees--;
+ for (; i < man->frees; i++) {
+ man->free[i] = man->free[i + 1]; /* \8d\\91¢\91Ì\82Ì\91ã\93ü */
+ }
+ }
+ }
+ return 0; /* \90¬\8c÷\8fI\97¹ */
+ }
+ }
+ /* \91O\82Æ\82Í\82Ü\82Æ\82ß\82ç\82ê\82È\82©\82Á\82½ */
+ if (i < man->frees) {
+ /* \8cã\82ë\82ª\82 \82é */
+ if (addr + size == man->free[i].addr) {
+ /* \8cã\82ë\82Æ\82Í\82Ü\82Æ\82ß\82ç\82ê\82é */
+ man->free[i].addr = addr;
+ man->free[i].size += size;
+ return 0; /* \90¬\8c÷\8fI\97¹ */
+ }
+ }
+ /* \91O\82É\82à\8cã\82ë\82É\82à\82Ü\82Æ\82ß\82ç\82ê\82È\82¢ */
+ if (man->frees < MEMMAN_FREES) {
+ /* free[i]\82æ\82è\8cã\82ë\82ð\81A\8cã\82ë\82Ö\82¸\82ç\82µ\82Ä\81A\82·\82«\82Ü\82ð\8dì\82é */
+ for (j = man->frees; j > i; j--) {
+ man->free[j] = man->free[j - 1];
+ }
+ man->frees++;
+ if (man->maxfrees < man->frees) {
+ man->maxfrees = man->frees; /* \8dÅ\91å\92l\82ð\8dX\90V */
+ }
+ man->free[i].addr = addr;
+ man->free[i].size = size;
+ return 0; /* \90¬\8c÷\8fI\97¹ */
+ }
+ /* \8cã\82ë\82É\82¸\82ç\82¹\82È\82©\82Á\82½ */
+ man->losts++;
+ man->lostsize += size;
+ return -1; /* \8e¸\94s\8fI\97¹ */
+}
+
+unsigned int memman_alloc_4k(struct MEMMAN *man, unsigned int size)
+{
+ unsigned int a;
+ size = (size + 0xfff) & 0xfffff000;
+ a = memman_alloc(man, size);
+ return a;
+}
+
+int memman_free_4k(struct MEMMAN *man, unsigned int addr, unsigned int size)
+{
+ int i;
+ size = (size + 0xfff) & 0xfffff000;
+ i = memman_free(man, addr, size);
+ return i;
+}
--- /dev/null
+ 1 00000000 [FORMAT "WCOFF"]
+ 2 00000000 [INSTRSET "i486p"]
+ 3 00000000 [OPTIMIZE 1]
+ 4 00000000 [OPTION 1]
+ 5 00000000 [BITS 32]
+ 6 00000000 EXTERN _io_load_eflags
+ 7 00000000 EXTERN _io_store_eflags
+ 8 00000000 EXTERN _memtest_sub
+ 9 00000000 EXTERN _load_cr0
+ 10 00000000 EXTERN _store_cr0
+ 11 00000000 [FILE "memory.c"]
+ 12 [SECTION .text]
+ 13 00000000 GLOBAL _memtest
+ 14 00000000 _memtest:
+ 15 00000000 55 PUSH EBP
+ 16 00000001 89 E5 MOV EBP,ESP
+ 17 00000003 56 PUSH ESI
+ 18 00000004 53 PUSH EBX
+ 19 00000005 31 F6 XOR ESI,ESI
+ 20 00000007 E8 [00000000] CALL _io_load_eflags
+ 21 0000000C 0D 00040000 OR EAX,262144
+ 22 00000011 50 PUSH EAX
+ 23 00000012 E8 [00000000] CALL _io_store_eflags
+ 24 00000017 E8 [00000000] CALL _io_load_eflags
+ 25 0000001C 5A POP EDX
+ 26 0000001D A9 00040000 TEST EAX,262144
+ 27 00000022 74 05 JE L2
+ 28 00000024 BE 00000001 MOV ESI,1
+ 29 00000029 L2:
+ 30 00000029 25 FFFBFFFF AND EAX,-262145
+ 31 0000002E 50 PUSH EAX
+ 32 0000002F E8 [00000000] CALL _io_store_eflags
+ 33 00000034 58 POP EAX
+ 34 00000035 89 F0 MOV EAX,ESI
+ 35 00000037 84 C0 TEST AL,AL
+ 36 00000039 75 31 JNE L5
+ 37 0000003B L3:
+ 38 0000003B FF 75 0C PUSH DWORD [12+EBP]
+ 39 0000003E FF 75 08 PUSH DWORD [8+EBP]
+ 40 00000041 E8 [00000000] CALL _memtest_sub
+ 41 00000046 5A POP EDX
+ 42 00000047 89 C3 MOV EBX,EAX
+ 43 00000049 59 POP ECX
+ 44 0000004A 89 F0 MOV EAX,ESI
+ 45 0000004C 84 C0 TEST AL,AL
+ 46 0000004E 75 09 JNE L6
+ 47 00000050 L4:
+ 48 00000050 8D 65 F8 LEA ESP,DWORD [-8+EBP]
+ 49 00000053 89 D8 MOV EAX,EBX
+ 50 00000055 5B POP EBX
+ 51 00000056 5E POP ESI
+ 52 00000057 5D POP EBP
+ 53 00000058 C3 RET
+ 54 00000059 L6:
+ 55 00000059 E8 [00000000] CALL _load_cr0
+ 56 0000005E 25 9FFFFFFF AND EAX,-1610612737
+ 57 00000063 50 PUSH EAX
+ 58 00000064 E8 [00000000] CALL _store_cr0
+ 59 00000069 58 POP EAX
+ 60 0000006A EB E4 JMP L4
+ 61 0000006C L5:
+ 62 0000006C E8 [00000000] CALL _load_cr0
+ 63 00000071 0D 60000000 OR EAX,1610612736
+ 64 00000076 50 PUSH EAX
+ 65 00000077 E8 [00000000] CALL _store_cr0
+ 66 0000007C 5B POP EBX
+ 67 0000007D EB BC JMP L3
+ 68 0000007F GLOBAL _memman_init
+ 69 0000007F _memman_init:
+ 70 0000007F 55 PUSH EBP
+ 71 00000080 89 E5 MOV EBP,ESP
+ 72 00000082 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 73 00000085 C7 00 00000000 MOV DWORD [EAX],0
+ 74 0000008B C7 40 04 00000000 MOV DWORD [4+EAX],0
+ 75 00000092 C7 40 08 00000000 MOV DWORD [8+EAX],0
+ 76 00000099 C7 40 0C 00000000 MOV DWORD [12+EAX],0
+ 77 000000A0 5D POP EBP
+ 78 000000A1 C3 RET
+ 79 000000A2 GLOBAL _memman_total
+ 80 000000A2 _memman_total:
+ 81 000000A2 55 PUSH EBP
+ 82 000000A3 31 C0 XOR EAX,EAX
+ 83 000000A5 89 E5 MOV EBP,ESP
+ 84 000000A7 31 D2 XOR EDX,EDX
+ 85 000000A9 53 PUSH EBX
+ 86 000000AA 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 87 000000AD 8B 0B MOV ECX,DWORD [EBX]
+ 88 000000AF 39 C8 CMP EAX,ECX
+ 89 000000B1 73 09 JAE L15
+ 90 000000B3 L13:
+ 91 000000B3 03 44 D3 14 ADD EAX,DWORD [20+EBX+EDX*8]
+ 92 000000B7 42 INC EDX
+ 93 000000B8 39 CA CMP EDX,ECX
+ 94 000000BA 72 F7 JB L13
+ 95 000000BC L15:
+ 96 000000BC 5B POP EBX
+ 97 000000BD 5D POP EBP
+ 98 000000BE C3 RET
+ 99 000000BF GLOBAL _memman_alloc
+ 100 000000BF _memman_alloc:
+ 101 000000BF 55 PUSH EBP
+ 102 000000C0 31 C9 XOR ECX,ECX
+ 103 000000C2 89 E5 MOV EBP,ESP
+ 104 000000C4 57 PUSH EDI
+ 105 000000C5 56 PUSH ESI
+ 106 000000C6 53 PUSH EBX
+ 107 000000C7 8B 75 0C MOV ESI,DWORD [12+EBP]
+ 108 000000CA 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 109 000000CD 8B 03 MOV EAX,DWORD [EBX]
+ 110 000000CF 39 C1 CMP ECX,EAX
+ 111 000000D1 73 0D JAE L30
+ 112 000000D3 L28:
+ 113 000000D3 8B 54 CB 14 MOV EDX,DWORD [20+EBX+ECX*8]
+ 114 000000D7 39 F2 CMP EDX,ESI
+ 115 000000D9 73 0C JAE L32
+ 116 000000DB 41 INC ECX
+ 117 000000DC 39 C1 CMP ECX,EAX
+ 118 000000DE 72 F3 JB L28
+ 119 000000E0 L30:
+ 120 000000E0 31 C0 XOR EAX,EAX
+ 121 000000E2 L16:
+ 122 000000E2 5B POP EBX
+ 123 000000E3 5E POP ESI
+ 124 000000E4 5F POP EDI
+ 125 000000E5 5D POP EBP
+ 126 000000E6 C3 RET
+ 127 000000E7 L32:
+ 128 000000E7 8B 7C CB 10 MOV EDI,DWORD [16+EBX+ECX*8]
+ 129 000000EB 8D 04 3E LEA EAX,DWORD [ESI+EDI*1]
+ 130 000000EE 89 44 CB 10 MOV DWORD [16+EBX+ECX*8],EAX
+ 131 000000F2 89 D0 MOV EAX,EDX
+ 132 000000F4 29 F0 SUB EAX,ESI
+ 133 000000F6 89 44 CB 14 MOV DWORD [20+EBX+ECX*8],EAX
+ 134 000000FA 85 C0 TEST EAX,EAX
+ 135 000000FC 75 20 JNE L22
+ 136 000000FE 8B 03 MOV EAX,DWORD [EBX]
+ 137 00000100 48 DEC EAX
+ 138 00000101 89 03 MOV DWORD [EBX],EAX
+ 139 00000103 39 C1 CMP ECX,EAX
+ 140 00000105 73 17 JAE L22
+ 141 00000107 89 C6 MOV ESI,EAX
+ 142 00000109 L27:
+ 143 00000109 8B 44 CB 18 MOV EAX,DWORD [24+EBX+ECX*8]
+ 144 0000010D 8B 54 CB 1C MOV EDX,DWORD [28+EBX+ECX*8]
+ 145 00000111 89 44 CB 10 MOV DWORD [16+EBX+ECX*8],EAX
+ 146 00000115 89 54 CB 14 MOV DWORD [20+EBX+ECX*8],EDX
+ 147 00000119 41 INC ECX
+ 148 0000011A 39 F1 CMP ECX,ESI
+ 149 0000011C 72 EB JB L27
+ 150 0000011E L22:
+ 151 0000011E 89 F8 MOV EAX,EDI
+ 152 00000120 EB C0 JMP L16
+ 153 00000122 GLOBAL _memman_free
+ 154 00000122 _memman_free:
+ 155 00000122 55 PUSH EBP
+ 156 00000123 89 E5 MOV EBP,ESP
+ 157 00000125 57 PUSH EDI
+ 158 00000126 56 PUSH ESI
+ 159 00000127 8B 75 08 MOV ESI,DWORD [8+EBP]
+ 160 0000012A 53 PUSH EBX
+ 161 0000012B 31 DB XOR EBX,EBX
+ 162 0000012D 8B 3E MOV EDI,DWORD [ESI]
+ 163 0000012F 39 FB CMP EBX,EDI
+ 164 00000131 7D 0E JGE L35
+ 165 00000133 L39:
+ 166 00000133 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 167 00000136 39 44 DE 10 CMP DWORD [16+ESI+EBX*8],EAX
+ 168 0000013A 77 05 JA L35
+ 169 0000013C 43 INC EBX
+ 170 0000013D 39 FB CMP EBX,EDI
+ 171 0000013F 7C F2 JL L39
+ 172 00000141 L35:
+ 173 00000141 85 DB TEST EBX,EBX
+ 174 00000143 7E 0F JLE L40
+ 175 00000145 8B 54 DE 0C MOV EDX,DWORD [12+ESI+EBX*8]
+ 176 00000149 8B 44 DE 08 MOV EAX,DWORD [8+ESI+EBX*8]
+ 177 0000014D 01 D0 ADD EAX,EDX
+ 178 0000014F 3B 45 0C CMP EAX,DWORD [12+EBP]
+ 179 00000152 74 73 JE L63
+ 180 00000154 L40:
+ 181 00000154 39 FB CMP EBX,EDI
+ 182 00000156 7D 0C JGE L49
+ 183 00000158 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 184 0000015B 03 45 10 ADD EAX,DWORD [16+EBP]
+ 185 0000015E 3B 44 DE 10 CMP EAX,DWORD [16+ESI+EBX*8]
+ 186 00000162 74 53 JE L64
+ 187 00000164 L49:
+ 188 00000164 81 FF 00000FF9 CMP EDI,4089
+ 189 0000016A 7F 3D JG L51
+ 190 0000016C 89 F9 MOV ECX,EDI
+ 191 0000016E 39 DF CMP EDI,EBX
+ 192 00000170 7E 15 JLE L61
+ 193 00000172 L56:
+ 194 00000172 8B 44 CE 08 MOV EAX,DWORD [8+ESI+ECX*8]
+ 195 00000176 8B 54 CE 0C MOV EDX,DWORD [12+ESI+ECX*8]
+ 196 0000017A 89 44 CE 10 MOV DWORD [16+ESI+ECX*8],EAX
+ 197 0000017E 89 54 CE 14 MOV DWORD [20+ESI+ECX*8],EDX
+ 198 00000182 49 DEC ECX
+ 199 00000183 39 D9 CMP ECX,EBX
+ 200 00000185 7F EB JG L56
+ 201 00000187 L61:
+ 202 00000187 8D 47 01 LEA EAX,DWORD [1+EDI]
+ 203 0000018A 89 06 MOV DWORD [ESI],EAX
+ 204 0000018C 39 46 04 CMP DWORD [4+ESI],EAX
+ 205 0000018F 7D 03 JGE L57
+ 206 00000191 89 46 04 MOV DWORD [4+ESI],EAX
+ 207 00000194 L57:
+ 208 00000194 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 209 00000197 89 44 DE 10 MOV DWORD [16+ESI+EBX*8],EAX
+ 210 0000019B 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 211 0000019E 89 44 DE 14 MOV DWORD [20+ESI+EBX*8],EAX
+ 212 000001A2 L62:
+ 213 000001A2 31 C0 XOR EAX,EAX
+ 214 000001A4 L33:
+ 215 000001A4 5B POP EBX
+ 216 000001A5 5E POP ESI
+ 217 000001A6 5F POP EDI
+ 218 000001A7 5D POP EBP
+ 219 000001A8 C3 RET
+ 220 000001A9 L51:
+ 221 000001A9 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 222 000001AC FF 46 0C INC DWORD [12+ESI]
+ 223 000001AF 01 46 08 ADD DWORD [8+ESI],EAX
+ 224 000001B2 83 C8 FF OR EAX,-1
+ 225 000001B5 EB ED JMP L33
+ 226 000001B7 L64:
+ 227 000001B7 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 228 000001BA 89 44 DE 10 MOV DWORD [16+ESI+EBX*8],EAX
+ 229 000001BE 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 230 000001C1 01 44 DE 14 ADD DWORD [20+ESI+EBX*8],EAX
+ 231 000001C5 EB DB JMP L62
+ 232 000001C7 L63:
+ 233 000001C7 03 55 10 ADD EDX,DWORD [16+EBP]
+ 234 000001CA 89 54 DE 0C MOV DWORD [12+ESI+EBX*8],EDX
+ 235 000001CE 3B 1E CMP EBX,DWORD [ESI]
+ 236 000001D0 7D D0 JGE L62
+ 237 000001D2 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 238 000001D5 03 45 10 ADD EAX,DWORD [16+EBP]
+ 239 000001D8 3B 44 DE 10 CMP EAX,DWORD [16+ESI+EBX*8]
+ 240 000001DC 75 C4 JNE L62
+ 241 000001DE 03 54 DE 14 ADD EDX,DWORD [20+ESI+EBX*8]
+ 242 000001E2 89 54 DE 0C MOV DWORD [12+ESI+EBX*8],EDX
+ 243 000001E6 8B 06 MOV EAX,DWORD [ESI]
+ 244 000001E8 48 DEC EAX
+ 245 000001E9 89 06 MOV DWORD [ESI],EAX
+ 246 000001EB 39 C3 CMP EBX,EAX
+ 247 000001ED 7D B3 JGE L62
+ 248 000001EF 89 C1 MOV ECX,EAX
+ 249 000001F1 L48:
+ 250 000001F1 8B 44 DE 18 MOV EAX,DWORD [24+ESI+EBX*8]
+ 251 000001F5 8B 54 DE 1C MOV EDX,DWORD [28+ESI+EBX*8]
+ 252 000001F9 89 44 DE 10 MOV DWORD [16+ESI+EBX*8],EAX
+ 253 000001FD 89 54 DE 14 MOV DWORD [20+ESI+EBX*8],EDX
+ 254 00000201 43 INC EBX
+ 255 00000202 39 CB CMP EBX,ECX
+ 256 00000204 7C EB JL L48
+ 257 00000206 EB 9A JMP L62
+ 258 00000208 GLOBAL _memman_alloc_4k
+ 259 00000208 _memman_alloc_4k:
+ 260 00000208 55 PUSH EBP
+ 261 00000209 89 E5 MOV EBP,ESP
+ 262 0000020B 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 263 0000020E 05 00000FFF ADD EAX,4095
+ 264 00000213 25 FFFFF000 AND EAX,-4096
+ 265 00000218 89 45 0C MOV DWORD [12+EBP],EAX
+ 266 0000021B 5D POP EBP
+ 267 0000021C E9 FFFFFE9E JMP _memman_alloc
+ 268 00000221 GLOBAL _memman_free_4k
+ 269 00000221 _memman_free_4k:
+ 270 00000221 55 PUSH EBP
+ 271 00000222 89 E5 MOV EBP,ESP
+ 272 00000224 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 273 00000227 05 00000FFF ADD EAX,4095
+ 274 0000022C 25 FFFFF000 AND EAX,-4096
+ 275 00000231 89 45 10 MOV DWORD [16+EBP],EAX
+ 276 00000234 5D POP EBP
+ 277 00000235 E9 FFFFFEE8 JMP _memman_free
--- /dev/null
+/* \83}\83E\83X\8aÖ\8cW */
+
+#include "bootpack.h"
+
+struct FIFO32 *mousefifo;
+int mousedata0;
+
+void inthandler2c(int *esp)
+/* PS/2\83}\83E\83X\82©\82ç\82Ì\8a\84\82è\8d\9e\82Ý */
+{
+ int data;
+ io_out8(PIC1_OCW2, 0x64); /* IRQ-12\8eó\95t\8a®\97¹\82ðPIC1\82É\92Ê\92m */
+ io_out8(PIC0_OCW2, 0x62); /* IRQ-02\8eó\95t\8a®\97¹\82ðPIC0\82É\92Ê\92m */
+ data = io_in8(PORT_KEYDAT);
+ fifo32_put(mousefifo, data + mousedata0);
+ return;
+}
+
+#define KEYCMD_SENDTO_MOUSE 0xd4
+#define MOUSECMD_ENABLE 0xf4
+
+void enable_mouse(struct FIFO32 *fifo, int data0, struct MOUSE_DEC *mdec)
+{
+ /* \8f\91\82«\8d\9e\82Ý\90æ\82ÌFIFO\83o\83b\83t\83@\82ð\8bL\89¯ */
+ mousefifo = fifo;
+ mousedata0 = data0;
+ /* \83}\83E\83X\97L\8cø */
+ wait_KBC_sendready();
+ io_out8(PORT_KEYCMD, KEYCMD_SENDTO_MOUSE);
+ wait_KBC_sendready();
+ io_out8(PORT_KEYDAT, MOUSECMD_ENABLE);
+ /* \82¤\82Ü\82\82¢\82\82ÆACK(0xfa)\82ª\91\97\90M\82³\82ê\82Ä\82\82é */
+ mdec->phase = 0; /* \83}\83E\83X\82Ì0xfa\82ð\91Ò\82Á\82Ä\82¢\82é\92i\8aK */
+ return;
+}
+
+int mouse_decode(struct MOUSE_DEC *mdec, unsigned char dat)
+{
+ if (mdec->phase == 0) {
+ /* \83}\83E\83X\82Ì0xfa\82ð\91Ò\82Á\82Ä\82¢\82é\92i\8aK */
+ if (dat == 0xfa) {
+ mdec->phase = 1;
+ }
+ return 0;
+ }
+ if (mdec->phase == 1) {
+ /* \83}\83E\83X\82Ì1\83o\83C\83g\96Ú\82ð\91Ò\82Á\82Ä\82¢\82é\92i\8aK */
+ if ((dat & 0xc8) == 0x08) {
+ /* \90³\82µ\82¢1\83o\83C\83g\96Ú\82¾\82Á\82½ */
+ mdec->buf[0] = dat;
+ mdec->phase = 2;
+ }
+ return 0;
+ }
+ if (mdec->phase == 2) {
+ /* \83}\83E\83X\82Ì2\83o\83C\83g\96Ú\82ð\91Ò\82Á\82Ä\82¢\82é\92i\8aK */
+ mdec->buf[1] = dat;
+ mdec->phase = 3;
+ return 0;
+ }
+ if (mdec->phase == 3) {
+ /* \83}\83E\83X\82Ì3\83o\83C\83g\96Ú\82ð\91Ò\82Á\82Ä\82¢\82é\92i\8aK */
+ mdec->buf[2] = dat;
+ mdec->phase = 1;
+ mdec->btn = mdec->buf[0] & 0x07;
+ mdec->x = mdec->buf[1];
+ mdec->y = mdec->buf[2];
+ if ((mdec->buf[0] & 0x10) != 0) {
+ mdec->x |= 0xffffff00;
+ }
+ if ((mdec->buf[0] & 0x20) != 0) {
+ mdec->y |= 0xffffff00;
+ }
+ mdec->y = - mdec->y; /* \83}\83E\83X\82Å\82Íy\95û\8cü\82Ì\95\84\8d\86\82ª\89æ\96Ê\82Æ\94½\91Î */
+ return 1;
+ }
+ return -1; /* \82±\82±\82É\97\88\82é\82±\82Æ\82Í\82È\82¢\82Í\82¸ */
+}
--- /dev/null
+ .file "mouse.c"
+ .text
+ .balign 2
+.globl _inthandler2c
+ .def _inthandler2c; .scl 2; .type 32; .endef
+_inthandler2c:
+ pushl %ebp
+ movl %esp, %ebp
+ pushl $100
+ pushl $160
+ call _io_out8
+ pushl $98
+ pushl $32
+ call _io_out8
+ pushl $96
+ call _io_in8
+ addl _mousedata0, %eax
+ pushl %eax
+ pushl _mousefifo
+ call _fifo32_put
+ leave
+ ret
+ .balign 2
+.globl _enable_mouse
+ .def _enable_mouse; .scl 2; .type 32; .endef
+_enable_mouse:
+ pushl %ebp
+ movl %esp, %ebp
+ movl 8(%ebp), %eax
+ movl %eax, _mousefifo
+ movl 12(%ebp), %eax
+ movl %eax, _mousedata0
+ call _wait_KBC_sendready
+ pushl $212
+ pushl $100
+ call _io_out8
+ call _wait_KBC_sendready
+ pushl $244
+ pushl $96
+ call _io_out8
+ movl 16(%ebp), %eax
+ movb $0, 3(%eax)
+ leave
+ ret
+ .balign 2
+.globl _mouse_decode
+ .def _mouse_decode; .scl 2; .type 32; .endef
+_mouse_decode:
+ pushl %ebp
+ movl %esp, %ebp
+ pushl %esi
+ pushl %ebx
+ movl 8(%ebp), %edx
+ movl 12(%ebp), %ecx
+ movl %ecx, %esi
+ movb 3(%edx), %al
+ testb %al, %al
+ jne L4
+ cmpb $-6, %cl
+ je L13
+L12:
+ xorl %eax, %eax
+L3:
+ popl %ebx
+ popl %esi
+ popl %ebp
+ ret
+L13:
+ movb $1, 3(%edx)
+ jmp L12
+L4:
+ cmpb $1, %al
+ je L14
+ cmpb $2, %al
+ je L15
+ cmpb $3, %al
+ je L16
+ orl $-1, %eax
+ jmp L3
+L16:
+ movb (%edx), %bl
+ andl $255, %esi
+ movl %ebx, %eax
+ movb %cl, 2(%edx)
+ andl $7, %eax
+ movl %esi, 8(%edx)
+ movl %eax, 12(%edx)
+ movb %bl, %al
+ movzbl 1(%edx), %ecx
+ andl $16, %eax
+ movl %ecx, 4(%edx)
+ movb $1, 3(%edx)
+ testb %al, %al
+ je L10
+ orl $-256, %ecx
+ movl %ecx, 4(%edx)
+L10:
+ andl $32, %ebx
+ testb %bl, %bl
+ je L11
+ orl $-256, 8(%edx)
+L11:
+ negl 8(%edx)
+ movl $1, %eax
+ jmp L3
+L15:
+ movb %cl, 1(%edx)
+ movb $3, 3(%edx)
+ jmp L12
+L14:
+ andl $-56, %esi
+ movl %esi, %eax
+ cmpb $8, %al
+ jne L12
+ movb %cl, (%edx)
+ movb $2, 3(%edx)
+ jmp L12
+.globl _mousefifo
+ .data
+ .balign 4
+_mousefifo:
+ .space 4
+.globl _mousedata0
+ .data
+ .balign 4
+_mousedata0:
+ .space 4
+ .def _wait_KBC_sendready; .scl 2; .type 32; .endef
+ .def _fifo32_put; .scl 2; .type 32; .endef
+ .def _io_in8; .scl 2; .type 32; .endef
+ .def _io_out8; .scl 2; .type 32; .endef
--- /dev/null
+ 1 00000000 [FORMAT "WCOFF"]
+ 2 00000000 [INSTRSET "i486p"]
+ 3 00000000 [OPTIMIZE 1]
+ 4 00000000 [OPTION 1]
+ 5 00000000 [BITS 32]
+ 6 00000000 EXTERN _io_out8
+ 7 00000000 EXTERN _io_in8
+ 8 00000000 EXTERN _fifo32_put
+ 9 00000000 EXTERN _wait_KBC_sendready
+ 10 00000000 [FILE "mouse.c"]
+ 11 [SECTION .text]
+ 12 00000000 GLOBAL _inthandler2c
+ 13 00000000 _inthandler2c:
+ 14 00000000 55 PUSH EBP
+ 15 00000001 89 E5 MOV EBP,ESP
+ 16 00000003 6A 64 PUSH 100
+ 17 00000005 68 000000A0 PUSH 160
+ 18 0000000A E8 [00000000] CALL _io_out8
+ 19 0000000F 6A 62 PUSH 98
+ 20 00000011 6A 20 PUSH 32
+ 21 00000013 E8 [00000000] CALL _io_out8
+ 22 00000018 6A 60 PUSH 96
+ 23 0000001A E8 [00000000] CALL _io_in8
+ 24 0000001F 03 05 [00000004] ADD EAX,DWORD [_mousedata0]
+ 25 00000025 50 PUSH EAX
+ 26 00000026 FF 35 [00000000] PUSH DWORD [_mousefifo]
+ 27 0000002C E8 [00000000] CALL _fifo32_put
+ 28 00000031 C9 LEAVE
+ 29 00000032 C3 RET
+ 30 00000033 GLOBAL _enable_mouse
+ 31 00000033 _enable_mouse:
+ 32 00000033 55 PUSH EBP
+ 33 00000034 89 E5 MOV EBP,ESP
+ 34 00000036 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 35 00000039 A3 [00000000] MOV DWORD [_mousefifo],EAX
+ 36 0000003E 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 37 00000041 A3 [00000004] MOV DWORD [_mousedata0],EAX
+ 38 00000046 E8 [00000000] CALL _wait_KBC_sendready
+ 39 0000004B 68 000000D4 PUSH 212
+ 40 00000050 6A 64 PUSH 100
+ 41 00000052 E8 [00000000] CALL _io_out8
+ 42 00000057 E8 [00000000] CALL _wait_KBC_sendready
+ 43 0000005C 68 000000F4 PUSH 244
+ 44 00000061 6A 60 PUSH 96
+ 45 00000063 E8 [00000000] CALL _io_out8
+ 46 00000068 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 47 0000006B C6 40 03 00 MOV BYTE [3+EAX],0
+ 48 0000006F C9 LEAVE
+ 49 00000070 C3 RET
+ 50 00000071 GLOBAL _mouse_decode
+ 51 00000071 _mouse_decode:
+ 52 00000071 55 PUSH EBP
+ 53 00000072 89 E5 MOV EBP,ESP
+ 54 00000074 56 PUSH ESI
+ 55 00000075 53 PUSH EBX
+ 56 00000076 8B 55 08 MOV EDX,DWORD [8+EBP]
+ 57 00000079 8B 4D 0C MOV ECX,DWORD [12+EBP]
+ 58 0000007C 89 CE MOV ESI,ECX
+ 59 0000007E 8A 42 03 MOV AL,BYTE [3+EDX]
+ 60 00000081 84 C0 TEST AL,AL
+ 61 00000083 75 11 JNE L4
+ 62 00000085 80 F9 FA CMP CL,-6
+ 63 00000088 74 06 JE L13
+ 64 0000008A L12:
+ 65 0000008A 31 C0 XOR EAX,EAX
+ 66 0000008C L3:
+ 67 0000008C 5B POP EBX
+ 68 0000008D 5E POP ESI
+ 69 0000008E 5D POP EBP
+ 70 0000008F C3 RET
+ 71 00000090 L13:
+ 72 00000090 C6 42 03 01 MOV BYTE [3+EDX],1
+ 73 00000094 EB F4 JMP L12
+ 74 00000096 L4:
+ 75 00000096 3C 01 CMP AL,1
+ 76 00000098 74 61 JE L14
+ 77 0000009A 3C 02 CMP AL,2
+ 78 0000009C 74 54 JE L15
+ 79 0000009E 3C 03 CMP AL,3
+ 80 000000A0 74 05 JE L16
+ 81 000000A2 83 C8 FF OR EAX,-1
+ 82 000000A5 EB E5 JMP L3
+ 83 000000A7 L16:
+ 84 000000A7 8A 1A MOV BL,BYTE [EDX]
+ 85 000000A9 81 E6 000000FF AND ESI,255
+ 86 000000AF 89 D8 MOV EAX,EBX
+ 87 000000B1 88 4A 02 MOV BYTE [2+EDX],CL
+ 88 000000B4 83 E0 07 AND EAX,7
+ 89 000000B7 89 72 08 MOV DWORD [8+EDX],ESI
+ 90 000000BA 89 42 0C MOV DWORD [12+EDX],EAX
+ 91 000000BD 88 D8 MOV AL,BL
+ 92 000000BF 0F B6 4A 01 MOVZX ECX,BYTE [1+EDX]
+ 93 000000C3 83 E0 10 AND EAX,16
+ 94 000000C6 89 4A 04 MOV DWORD [4+EDX],ECX
+ 95 000000C9 C6 42 03 01 MOV BYTE [3+EDX],1
+ 96 000000CD 84 C0 TEST AL,AL
+ 97 000000CF 74 09 JE L10
+ 98 000000D1 81 C9 FFFFFF00 OR ECX,-256
+ 99 000000D7 89 4A 04 MOV DWORD [4+EDX],ECX
+ 100 000000DA L10:
+ 101 000000DA 83 E3 20 AND EBX,32
+ 102 000000DD 84 DB TEST BL,BL
+ 103 000000DF 74 07 JE L11
+ 104 000000E1 81 4A 08 FFFFFF00 OR DWORD [8+EDX],-256
+ 105 000000E8 L11:
+ 106 000000E8 F7 5A 08 NEG DWORD [8+EDX]
+ 107 000000EB B8 00000001 MOV EAX,1
+ 108 000000F0 EB 9A JMP L3
+ 109 000000F2 L15:
+ 110 000000F2 88 4A 01 MOV BYTE [1+EDX],CL
+ 111 000000F5 C6 42 03 03 MOV BYTE [3+EDX],3
+ 112 000000F9 EB 8F JMP L12
+ 113 000000FB L14:
+ 114 000000FB 83 E6 C8 AND ESI,-56
+ 115 000000FE 89 F0 MOV EAX,ESI
+ 116 00000100 3C 08 CMP AL,8
+ 117 00000102 75 86 JNE L12
+ 118 00000104 88 0A MOV BYTE [EDX],CL
+ 119 00000106 C6 42 03 02 MOV BYTE [3+EDX],2
+ 120 0000010A E9 FFFFFF7B JMP L12
+ 121 0000010F GLOBAL _mousefifo
+ 122 [SECTION .data]
+ 123 00000000 ALIGNB 4
+ 124 00000000 _mousefifo:
+ 125 00000000 00 00 00 00 RESB 4
+ 126 00000004 GLOBAL _mousedata0
+ 127 [SECTION .data]
+ 128 00000004 ALIGNB 4
+ 129 00000004 _mousedata0:
+ 130 00000004 00 00 00 00 RESB 4
--- /dev/null
+/* \83}\83\8b\83`\83^\83X\83N\8aÖ\8cW */
+
+#include "bootpack.h"
+
+struct TASKCTL *taskctl;
+struct TIMER *task_timer;
+
+struct TASK *task_now(void)
+{
+ struct TASKLEVEL *tl = &taskctl->level[taskctl->now_lv];
+ return tl->tasks[tl->now];
+}
+
+void task_add(struct TASK *task)
+{
+ struct TASKLEVEL *tl = &taskctl->level[task->level];
+ tl->tasks[tl->running] = task;
+ tl->running++;
+ task->flags = 2; /* \93®\8dì\92\86 */
+ return;
+}
+
+void task_remove(struct TASK *task)
+{
+ int i;
+ struct TASKLEVEL *tl = &taskctl->level[task->level];
+
+ /* task\82ª\82Ç\82±\82É\82¢\82é\82©\82ð\92T\82· */
+ for (i = 0; i < tl->running; i++) {
+ if (tl->tasks[i] == task) {
+ /* \82±\82±\82É\82¢\82½ */
+ break;
+ }
+ }
+
+ tl->running--;
+ if (i < tl->now) {
+ tl->now--; /* \82¸\82ê\82é\82Ì\82Å\81A\82±\82ê\82à\82 \82í\82¹\82Ä\82¨\82 */
+ }
+ if (tl->now >= tl->running) {
+ /* now\82ª\82¨\82©\82µ\82È\92l\82É\82È\82Á\82Ä\82¢\82½\82ç\81A\8fC\90³\82·\82é */
+ tl->now = 0;
+ }
+ task->flags = 1; /* \83X\83\8a\81[\83v\92\86 */
+
+ /* \82¸\82ç\82µ */
+ for (; i < tl->running; i++) {
+ tl->tasks[i] = tl->tasks[i + 1];
+ }
+
+ return;
+}
+
+void task_switchsub(void)
+{
+ int i;
+ /* \88ê\94Ô\8fã\82Ì\83\8c\83x\83\8b\82ð\92T\82· */
+ for (i = 0; i < MAX_TASKLEVELS; i++) {
+ if (taskctl->level[i].running > 0) {
+ break; /* \8c©\82Â\82©\82Á\82½ */
+ }
+ }
+ taskctl->now_lv = i;
+ taskctl->lv_change = 0;
+ return;
+}
+
+void task_idle(void)
+{
+ for (;;) {
+ io_hlt();
+ }
+}
+
+struct TASK *task_init(struct MEMMAN *memman)
+{
+ int i;
+ struct TASK *task, *idle;
+ struct SEGMENT_DESCRIPTOR *gdt = (struct SEGMENT_DESCRIPTOR *) ADR_GDT;
+
+ taskctl = (struct TASKCTL *) memman_alloc_4k(memman, sizeof (struct TASKCTL));
+ for (i = 0; i < MAX_TASKS; i++) {
+ taskctl->tasks0[i].flags = 0;
+ taskctl->tasks0[i].sel = (TASK_GDT0 + i) * 8;
+ taskctl->tasks0[i].tss.ldtr = (TASK_GDT0 + MAX_TASKS + i) * 8;
+ set_segmdesc(gdt + TASK_GDT0 + i, 103, (int) &taskctl->tasks0[i].tss, AR_TSS32);
+ set_segmdesc(gdt + TASK_GDT0 + MAX_TASKS + i, 15, (int) taskctl->tasks0[i].ldt, AR_LDT);
+ }
+ for (i = 0; i < MAX_TASKLEVELS; i++) {
+ taskctl->level[i].running = 0;
+ taskctl->level[i].now = 0;
+ }
+
+ task = task_alloc();
+ task->flags = 2; /* \93®\8dì\92\86\83}\81[\83N */
+ task->priority = 2; /* 0.02\95b */
+ task->level = 0; /* \8dÅ\8d\82\83\8c\83x\83\8b */
+ task_add(task);
+ task_switchsub(); /* \83\8c\83x\83\8b\90Ý\92è */
+ load_tr(task->sel);
+ task_timer = timer_alloc();
+ timer_settime(task_timer, task->priority);
+
+ idle = task_alloc();
+ idle->tss.esp = memman_alloc_4k(memman, 64 * 1024) + 64 * 1024;
+ idle->tss.eip = (int) &task_idle;
+ idle->tss.es = 1 * 8;
+ idle->tss.cs = 2 * 8;
+ idle->tss.ss = 1 * 8;
+ idle->tss.ds = 1 * 8;
+ idle->tss.fs = 1 * 8;
+ idle->tss.gs = 1 * 8;
+ task_run(idle, MAX_TASKLEVELS - 1, 1);
+
+ return task;
+}
+
+struct TASK *task_alloc(void)
+{
+ int i;
+ struct TASK *task;
+ for (i = 0; i < MAX_TASKS; i++) {
+ if (taskctl->tasks0[i].flags == 0) {
+ task = &taskctl->tasks0[i];
+ task->flags = 1; /* \8eg\97p\92\86\83}\81[\83N */
+ task->tss.eflags = 0x00000202; /* IF = 1; */
+ task->tss.eax = 0; /* \82Æ\82è\82 \82¦\82¸0\82É\82µ\82Ä\82¨\82\82±\82Æ\82É\82·\82é */
+ task->tss.ecx = 0;
+ task->tss.edx = 0;
+ task->tss.ebx = 0;
+ task->tss.ebp = 0;
+ task->tss.esi = 0;
+ task->tss.edi = 0;
+ task->tss.es = 0;
+ task->tss.ds = 0;
+ task->tss.fs = 0;
+ task->tss.gs = 0;
+ task->tss.iomap = 0x40000000;
+ task->tss.ss0 = 0;
+ return task;
+ }
+ }
+ return 0; /* \82à\82¤\91S\95\94\8eg\97p\92\86 */
+}
+
+void task_run(struct TASK *task, int level, int priority)
+{
+ if (level < 0) {
+ level = task->level; /* \83\8c\83x\83\8b\82ð\95Ï\8dX\82µ\82È\82¢ */
+ }
+ if (priority > 0) {
+ task->priority = priority;
+ }
+
+ if (task->flags == 2 && task->level != level) { /* \93®\8dì\92\86\82Ì\83\8c\83x\83\8b\82Ì\95Ï\8dX */
+ task_remove(task); /* \82±\82ê\82ð\8eÀ\8ds\82·\82é\82Æflags\82Í1\82É\82È\82é\82Ì\82Å\89º\82Ìif\82à\8eÀ\8ds\82³\82ê\82é */
+ }
+ if (task->flags != 2) {
+ /* \83X\83\8a\81[\83v\82©\82ç\8bN\82±\82³\82ê\82é\8fê\8d\87 */
+ task->level = level;
+ task_add(task);
+ }
+
+ taskctl->lv_change = 1; /* \8e\9f\89ñ\83^\83X\83N\83X\83C\83b\83`\82Ì\82Æ\82«\82É\83\8c\83x\83\8b\82ð\8c©\92¼\82· */
+ return;
+}
+
+void task_sleep(struct TASK *task)
+{
+ struct TASK *now_task;
+ if (task->flags == 2) {
+ /* \93®\8dì\92\86\82¾\82Á\82½\82ç */
+ now_task = task_now();
+ task_remove(task); /* \82±\82ê\82ð\8eÀ\8ds\82·\82é\82Æflags\82Í1\82É\82È\82é */
+ if (task == now_task) {
+ /* \8e©\95ª\8e©\90g\82Ì\83X\83\8a\81[\83v\82¾\82Á\82½\82Ì\82Å\81A\83^\83X\83N\83X\83C\83b\83`\82ª\95K\97v */
+ task_switchsub();
+ now_task = task_now(); /* \90Ý\92è\8cã\82Å\82Ì\81A\81u\8c»\8dÝ\82Ì\83^\83X\83N\81v\82ð\8b³\82¦\82Ä\82à\82ç\82¤ */
+ farjmp(0, now_task->sel);
+ }
+ }
+ return;
+}
+
+void task_switch(void)
+{
+ struct TASKLEVEL *tl = &taskctl->level[taskctl->now_lv];
+ struct TASK *new_task, *now_task = tl->tasks[tl->now];
+ tl->now++;
+ if (tl->now == tl->running) {
+ tl->now = 0;
+ }
+ if (taskctl->lv_change != 0) {
+ task_switchsub();
+ tl = &taskctl->level[taskctl->now_lv];
+ }
+ new_task = tl->tasks[tl->now];
+ timer_settime(task_timer, new_task->priority);
+ if (new_task != now_task) {
+ farjmp(0, new_task->sel);
+ }
+ return;
+}
--- /dev/null
+ 1 00000000 [FORMAT "WCOFF"]
+ 2 00000000 [INSTRSET "i486p"]
+ 3 00000000 [OPTIMIZE 1]
+ 4 00000000 [OPTION 1]
+ 5 00000000 [BITS 32]
+ 6 00000000 EXTERN _io_hlt
+ 7 00000000 EXTERN _memman_alloc_4k
+ 8 00000000 EXTERN _set_segmdesc
+ 9 00000000 EXTERN _load_tr
+ 10 00000000 EXTERN _timer_alloc
+ 11 00000000 EXTERN _timer_settime
+ 12 00000000 EXTERN _farjmp
+ 13 00000000 [FILE "mtask.c"]
+ 14 [SECTION .text]
+ 15 00000000 GLOBAL _task_now
+ 16 00000000 _task_now:
+ 17 00000000 A1 [00000000] MOV EAX,DWORD [_taskctl]
+ 18 00000005 55 PUSH EBP
+ 19 00000006 89 E5 MOV EBP,ESP
+ 20 00000008 5D POP EBP
+ 21 00000009 8B 10 MOV EDX,DWORD [EAX]
+ 22 0000000B 69 D2 00000198 IMUL EDX,EDX,408
+ 23 00000011 8D 44 02 08 LEA EAX,DWORD [8+EDX+EAX*1]
+ 24 00000015 8B 50 04 MOV EDX,DWORD [4+EAX]
+ 25 00000018 8B 44 90 08 MOV EAX,DWORD [8+EAX+EDX*4]
+ 26 0000001C C3 RET
+ 27 0000001D GLOBAL _task_add
+ 28 0000001D _task_add:
+ 29 0000001D 55 PUSH EBP
+ 30 0000001E 89 E5 MOV EBP,ESP
+ 31 00000020 8B 4D 08 MOV ECX,DWORD [8+EBP]
+ 32 00000023 8B 51 08 MOV EDX,DWORD [8+ECX]
+ 33 00000026 69 D2 00000198 IMUL EDX,EDX,408
+ 34 0000002C 03 15 [00000000] ADD EDX,DWORD [_taskctl]
+ 35 00000032 8B 42 08 MOV EAX,DWORD [8+EDX]
+ 36 00000035 89 4C 82 10 MOV DWORD [16+EDX+EAX*4],ECX
+ 37 00000039 40 INC EAX
+ 38 0000003A 89 42 08 MOV DWORD [8+EDX],EAX
+ 39 0000003D C7 41 04 00000002 MOV DWORD [4+ECX],2
+ 40 00000044 5D POP EBP
+ 41 00000045 C3 RET
+ 42 00000046 GLOBAL _task_remove
+ 43 00000046 _task_remove:
+ 44 00000046 55 PUSH EBP
+ 45 00000047 31 C9 XOR ECX,ECX
+ 46 00000049 89 E5 MOV EBP,ESP
+ 47 0000004B 53 PUSH EBX
+ 48 0000004C 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 49 0000004F 8B 43 08 MOV EAX,DWORD [8+EBX]
+ 50 00000052 69 C0 00000198 IMUL EAX,EAX,408
+ 51 00000058 03 05 [00000000] ADD EAX,DWORD [_taskctl]
+ 52 0000005E 8D 50 08 LEA EDX,DWORD [8+EAX]
+ 53 00000061 3B 48 08 CMP ECX,DWORD [8+EAX]
+ 54 00000064 7D 0B JGE L5
+ 55 00000066 L9:
+ 56 00000066 39 5C 8A 08 CMP DWORD [8+EDX+ECX*4],EBX
+ 57 0000006A 74 05 JE L5
+ 58 0000006C 41 INC ECX
+ 59 0000006D 3B 0A CMP ECX,DWORD [EDX]
+ 60 0000006F 7C F5 JL L9
+ 61 00000071 L5:
+ 62 00000071 8B 42 04 MOV EAX,DWORD [4+EDX]
+ 63 00000074 FF 0A DEC DWORD [EDX]
+ 64 00000076 39 C1 CMP ECX,EAX
+ 65 00000078 7D 04 JGE L10
+ 66 0000007A 48 DEC EAX
+ 67 0000007B 89 42 04 MOV DWORD [4+EDX],EAX
+ 68 0000007E L10:
+ 69 0000007E 8B 02 MOV EAX,DWORD [EDX]
+ 70 00000080 39 42 04 CMP DWORD [4+EDX],EAX
+ 71 00000083 7C 07 JL L11
+ 72 00000085 C7 42 04 00000000 MOV DWORD [4+EDX],0
+ 73 0000008C L11:
+ 74 0000008C C7 43 04 00000001 MOV DWORD [4+EBX],1
+ 75 00000093 8B 1A MOV EBX,DWORD [EDX]
+ 76 00000095 39 D9 CMP ECX,EBX
+ 77 00000097 7D 0D JGE L19
+ 78 00000099 L16:
+ 79 00000099 8B 44 8A 0C MOV EAX,DWORD [12+EDX+ECX*4]
+ 80 0000009D 89 44 8A 08 MOV DWORD [8+EDX+ECX*4],EAX
+ 81 000000A1 41 INC ECX
+ 82 000000A2 39 D9 CMP ECX,EBX
+ 83 000000A4 7C F3 JL L16
+ 84 000000A6 L19:
+ 85 000000A6 5B POP EBX
+ 86 000000A7 5D POP EBP
+ 87 000000A8 C3 RET
+ 88 000000A9 GLOBAL _task_switchsub
+ 89 000000A9 _task_switchsub:
+ 90 000000A9 55 PUSH EBP
+ 91 000000AA 31 C9 XOR ECX,ECX
+ 92 000000AC 89 E5 MOV EBP,ESP
+ 93 000000AE A1 [00000000] MOV EAX,DWORD [_taskctl]
+ 94 000000B3 31 D2 XOR EDX,EDX
+ 95 000000B5 L26:
+ 96 000000B5 83 7C 10 08 00 CMP DWORD [8+EAX+EDX*1],0
+ 97 000000BA 7F 0C JG L22
+ 98 000000BC 41 INC ECX
+ 99 000000BD 81 C2 00000198 ADD EDX,408
+ 100 000000C3 83 F9 09 CMP ECX,9
+ 101 000000C6 7E ED JLE L26
+ 102 000000C8 L22:
+ 103 000000C8 89 08 MOV DWORD [EAX],ECX
+ 104 000000CA C6 40 04 00 MOV BYTE [4+EAX],0
+ 105 000000CE 5D POP EBP
+ 106 000000CF C3 RET
+ 107 000000D0 GLOBAL _task_idle
+ 108 000000D0 _task_idle:
+ 109 000000D0 55 PUSH EBP
+ 110 000000D1 89 E5 MOV EBP,ESP
+ 111 000000D3 L29:
+ 112 000000D3 E8 [00000000] CALL _io_hlt
+ 113 000000D8 EB F9 JMP L29
+ 114 000000DA GLOBAL _task_init
+ 115 000000DA _task_init:
+ 116 000000DA 55 PUSH EBP
+ 117 000000DB 89 E5 MOV EBP,ESP
+ 118 000000DD 57 PUSH EDI
+ 119 000000DE 56 PUSH ESI
+ 120 000000DF 31 FF XOR EDI,EDI
+ 121 000000E1 53 PUSH EBX
+ 122 000000E2 31 F6 XOR ESI,ESI
+ 123 000000E4 68 0002FDF8 PUSH 196088
+ 124 000000E9 BB 000003E7 MOV EBX,999
+ 125 000000EE FF 75 08 PUSH DWORD [8+EBP]
+ 126 000000F1 E8 [00000000] CALL _memman_alloc_4k
+ 127 000000F6 A3 [00000000] MOV DWORD [_taskctl],EAX
+ 128 000000FB 58 POP EAX
+ 129 000000FC 5A POP EDX
+ 130 000000FD L37:
+ 131 000000FD 89 FA MOV EDX,EDI
+ 132 000000FF 8D 46 18 LEA EAX,DWORD [24+ESI]
+ 133 00000102 03 15 [00000000] ADD EDX,DWORD [_taskctl]
+ 134 00000108 89 82 00000FF8 MOV DWORD [4088+EDX],EAX
+ 135 0000010E 8D 86 00001F58 LEA EAX,DWORD [8024+ESI]
+ 136 00000114 89 82 00001084 MOV DWORD [4228+EDX],EAX
+ 137 0000011A 8D 86 00270018 LEA EAX,DWORD [2555928+ESI]
+ 138 00000120 C7 82 00000FFC 00000000 MOV DWORD [4092+EDX],0
+ 139 0000012A 68 00000089 PUSH 137
+ 140 0000012F 81 C2 00001024 ADD EDX,4132
+ 141 00000135 52 PUSH EDX
+ 142 00000136 6A 67 PUSH 103
+ 143 00000138 50 PUSH EAX
+ 144 00000139 E8 [00000000] CALL _set_segmdesc
+ 145 0000013E A1 [00000000] MOV EAX,DWORD [_taskctl]
+ 146 00000143 01 F8 ADD EAX,EDI
+ 147 00000145 68 00000082 PUSH 130
+ 148 0000014A 05 0000108C ADD EAX,4236
+ 149 0000014F 81 C7 000000C0 ADD EDI,192
+ 150 00000155 50 PUSH EAX
+ 151 00000156 8D 86 00271F58 LEA EAX,DWORD [2563928+ESI]
+ 152 0000015C 6A 0F PUSH 15
+ 153 0000015E 83 C6 08 ADD ESI,8
+ 154 00000161 50 PUSH EAX
+ 155 00000162 E8 [00000000] CALL _set_segmdesc
+ 156 00000167 83 C4 20 ADD ESP,32
+ 157 0000016A 4B DEC EBX
+ 158 0000016B 79 90 JNS L37
+ 159 0000016D 8B 0D [00000000] MOV ECX,DWORD [_taskctl]
+ 160 00000173 31 D2 XOR EDX,EDX
+ 161 00000175 BB 00000009 MOV EBX,9
+ 162 0000017A L42:
+ 163 0000017A 8D 04 11 LEA EAX,DWORD [ECX+EDX*1]
+ 164 0000017D 81 C2 00000198 ADD EDX,408
+ 165 00000183 4B DEC EBX
+ 166 00000184 C7 40 08 00000000 MOV DWORD [8+EAX],0
+ 167 0000018B C7 40 0C 00000000 MOV DWORD [12+EAX],0
+ 168 00000192 79 E6 JNS L42
+ 169 00000194 E8 000000A6 CALL _task_alloc
+ 170 00000199 89 C6 MOV ESI,EAX
+ 171 0000019B C7 40 04 00000002 MOV DWORD [4+EAX],2
+ 172 000001A2 C7 40 0C 00000002 MOV DWORD [12+EAX],2
+ 173 000001A9 C7 40 08 00000000 MOV DWORD [8+EAX],0
+ 174 000001B0 50 PUSH EAX
+ 175 000001B1 E8 FFFFFE67 CALL _task_add
+ 176 000001B6 E8 FFFFFEEE CALL _task_switchsub
+ 177 000001BB FF 36 PUSH DWORD [ESI]
+ 178 000001BD E8 [00000000] CALL _load_tr
+ 179 000001C2 E8 [00000000] CALL _timer_alloc
+ 180 000001C7 FF 76 0C PUSH DWORD [12+ESI]
+ 181 000001CA 50 PUSH EAX
+ 182 000001CB A3 [00000004] MOV DWORD [_task_timer],EAX
+ 183 000001D0 E8 [00000000] CALL _timer_settime
+ 184 000001D5 E8 00000065 CALL _task_alloc
+ 185 000001DA 68 00010000 PUSH 65536
+ 186 000001DF FF 75 08 PUSH DWORD [8+EBP]
+ 187 000001E2 89 C3 MOV EBX,EAX
+ 188 000001E4 E8 [00000000] CALL _memman_alloc_4k
+ 189 000001E9 05 00010000 ADD EAX,65536
+ 190 000001EE 89 43 64 MOV DWORD [100+EBX],EAX
+ 191 000001F1 C7 43 4C [000000D0] MOV DWORD [76+EBX],_task_idle
+ 192 000001F8 C7 43 74 00000008 MOV DWORD [116+EBX],8
+ 193 000001FF C7 43 78 00000010 MOV DWORD [120+EBX],16
+ 194 00000206 C7 43 7C 00000008 MOV DWORD [124+EBX],8
+ 195 0000020D C7 83 00000080 00000008 MOV DWORD [128+EBX],8
+ 196 00000217 C7 83 00000084 00000008 MOV DWORD [132+EBX],8
+ 197 00000221 C7 83 00000088 00000008 MOV DWORD [136+EBX],8
+ 198 0000022B 6A 01 PUSH 1
+ 199 0000022D 6A 09 PUSH 9
+ 200 0000022F 53 PUSH EBX
+ 201 00000230 E8 000000B4 CALL _task_run
+ 202 00000235 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 203 00000238 5B POP EBX
+ 204 00000239 89 F0 MOV EAX,ESI
+ 205 0000023B 5E POP ESI
+ 206 0000023C 5F POP EDI
+ 207 0000023D 5D POP EBP
+ 208 0000023E C3 RET
+ 209 0000023F GLOBAL _task_alloc
+ 210 0000023F _task_alloc:
+ 211 0000023F 55 PUSH EBP
+ 212 00000240 31 C9 XOR ECX,ECX
+ 213 00000242 89 E5 MOV EBP,ESP
+ 214 00000244 31 D2 XOR EDX,EDX
+ 215 00000246 L53:
+ 216 00000246 89 D0 MOV EAX,EDX
+ 217 00000248 03 05 [00000000] ADD EAX,DWORD [_taskctl]
+ 218 0000024E 83 B8 00000FFC 00 CMP DWORD [4092+EAX],0
+ 219 00000255 74 13 JE L56
+ 220 00000257 41 INC ECX
+ 221 00000258 81 C2 000000C0 ADD EDX,192
+ 222 0000025E 81 F9 000003E7 CMP ECX,999
+ 223 00000264 7E E0 JLE L53
+ 224 00000266 31 C0 XOR EAX,EAX
+ 225 00000268 L47:
+ 226 00000268 5D POP EBP
+ 227 00000269 C3 RET
+ 228 0000026A L56:
+ 229 0000026A 05 00000FF8 ADD EAX,4088
+ 230 0000026F C7 40 04 00000001 MOV DWORD [4+EAX],1
+ 231 00000276 C7 40 50 00000202 MOV DWORD [80+EAX],514
+ 232 0000027D C7 40 54 00000000 MOV DWORD [84+EAX],0
+ 233 00000284 C7 40 58 00000000 MOV DWORD [88+EAX],0
+ 234 0000028B C7 40 5C 00000000 MOV DWORD [92+EAX],0
+ 235 00000292 C7 40 60 00000000 MOV DWORD [96+EAX],0
+ 236 00000299 C7 40 68 00000000 MOV DWORD [104+EAX],0
+ 237 000002A0 C7 40 6C 00000000 MOV DWORD [108+EAX],0
+ 238 000002A7 C7 40 70 00000000 MOV DWORD [112+EAX],0
+ 239 000002AE C7 40 74 00000000 MOV DWORD [116+EAX],0
+ 240 000002B5 C7 80 00000080 00000000 MOV DWORD [128+EAX],0
+ 241 000002BF C7 80 00000084 00000000 MOV DWORD [132+EAX],0
+ 242 000002C9 C7 80 00000088 00000000 MOV DWORD [136+EAX],0
+ 243 000002D3 C7 80 00000090 40000000 MOV DWORD [144+EAX],1073741824
+ 244 000002DD C7 40 34 00000000 MOV DWORD [52+EAX],0
+ 245 000002E4 E9 FFFFFF7F JMP L47
+ 246 000002E9 GLOBAL _task_run
+ 247 000002E9 _task_run:
+ 248 000002E9 55 PUSH EBP
+ 249 000002EA 89 E5 MOV EBP,ESP
+ 250 000002EC 56 PUSH ESI
+ 251 000002ED 53 PUSH EBX
+ 252 000002EE 8B 75 0C MOV ESI,DWORD [12+EBP]
+ 253 000002F1 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 254 000002F4 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 255 000002F7 85 F6 TEST ESI,ESI
+ 256 000002F9 78 3B JS L62
+ 257 000002FB L58:
+ 258 000002FB 85 C0 TEST EAX,EAX
+ 259 000002FD 7E 03 JLE L59
+ 260 000002FF 89 43 0C MOV DWORD [12+EBX],EAX
+ 261 00000302 L59:
+ 262 00000302 83 7B 04 02 CMP DWORD [4+EBX],2
+ 263 00000306 74 20 JE L63
+ 264 00000308 L60:
+ 265 00000308 83 7B 04 02 CMP DWORD [4+EBX],2
+ 266 0000030C 74 0A JE L61
+ 267 0000030E 89 73 08 MOV DWORD [8+EBX],ESI
+ 268 00000311 53 PUSH EBX
+ 269 00000312 E8 FFFFFD06 CALL _task_add
+ 270 00000317 59 POP ECX
+ 271 00000318 L61:
+ 272 00000318 A1 [00000000] MOV EAX,DWORD [_taskctl]
+ 273 0000031D C6 40 04 01 MOV BYTE [4+EAX],1
+ 274 00000321 8D 65 F8 LEA ESP,DWORD [-8+EBP]
+ 275 00000324 5B POP EBX
+ 276 00000325 5E POP ESI
+ 277 00000326 5D POP EBP
+ 278 00000327 C3 RET
+ 279 00000328 L63:
+ 280 00000328 39 73 08 CMP DWORD [8+EBX],ESI
+ 281 0000032B 74 DB JE L60
+ 282 0000032D 53 PUSH EBX
+ 283 0000032E E8 FFFFFD13 CALL _task_remove
+ 284 00000333 58 POP EAX
+ 285 00000334 EB D2 JMP L60
+ 286 00000336 L62:
+ 287 00000336 8B 73 08 MOV ESI,DWORD [8+EBX]
+ 288 00000339 EB C0 JMP L58
+ 289 0000033B GLOBAL _task_sleep
+ 290 0000033B _task_sleep:
+ 291 0000033B 55 PUSH EBP
+ 292 0000033C 89 E5 MOV EBP,ESP
+ 293 0000033E 56 PUSH ESI
+ 294 0000033F 53 PUSH EBX
+ 295 00000340 8B 75 08 MOV ESI,DWORD [8+EBP]
+ 296 00000343 83 7E 04 02 CMP DWORD [4+ESI],2
+ 297 00000347 74 07 JE L67
+ 298 00000349 L64:
+ 299 00000349 8D 65 F8 LEA ESP,DWORD [-8+EBP]
+ 300 0000034C 5B POP EBX
+ 301 0000034D 5E POP ESI
+ 302 0000034E 5D POP EBP
+ 303 0000034F C3 RET
+ 304 00000350 L67:
+ 305 00000350 E8 FFFFFCAB CALL _task_now
+ 306 00000355 56 PUSH ESI
+ 307 00000356 89 C3 MOV EBX,EAX
+ 308 00000358 E8 FFFFFCE9 CALL _task_remove
+ 309 0000035D 59 POP ECX
+ 310 0000035E 39 DE CMP ESI,EBX
+ 311 00000360 75 E7 JNE L64
+ 312 00000362 E8 FFFFFD42 CALL _task_switchsub
+ 313 00000367 E8 FFFFFC94 CALL _task_now
+ 314 0000036C FF 30 PUSH DWORD [EAX]
+ 315 0000036E 6A 00 PUSH 0
+ 316 00000370 E8 [00000000] CALL _farjmp
+ 317 00000375 58 POP EAX
+ 318 00000376 5A POP EDX
+ 319 00000377 EB D0 JMP L64
+ 320 00000379 GLOBAL _task_switch
+ 321 00000379 _task_switch:
+ 322 00000379 55 PUSH EBP
+ 323 0000037A 89 E5 MOV EBP,ESP
+ 324 0000037C 56 PUSH ESI
+ 325 0000037D 53 PUSH EBX
+ 326 0000037E 8B 1D [00000000] MOV EBX,DWORD [_taskctl]
+ 327 00000384 8B 13 MOV EDX,DWORD [EBX]
+ 328 00000386 69 D2 00000198 IMUL EDX,EDX,408
+ 329 0000038C 8D 14 1A LEA EDX,DWORD [EDX+EBX*1]
+ 330 0000038F 8D 4A 08 LEA ECX,DWORD [8+EDX]
+ 331 00000392 8B 41 04 MOV EAX,DWORD [4+ECX]
+ 332 00000395 8B 74 81 08 MOV ESI,DWORD [8+ECX+EAX*4]
+ 333 00000399 40 INC EAX
+ 334 0000039A 89 41 04 MOV DWORD [4+ECX],EAX
+ 335 0000039D 3B 42 08 CMP EAX,DWORD [8+EDX]
+ 336 000003A0 74 4C JE L72
+ 337 000003A2 L69:
+ 338 000003A2 80 7B 04 00 CMP BYTE [4+EBX],0
+ 339 000003A6 75 2D JNE L73
+ 340 000003A8 L70:
+ 341 000003A8 8B 41 04 MOV EAX,DWORD [4+ECX]
+ 342 000003AB 8B 5C 81 08 MOV EBX,DWORD [8+ECX+EAX*4]
+ 343 000003AF FF 73 0C PUSH DWORD [12+EBX]
+ 344 000003B2 FF 35 [00000004] PUSH DWORD [_task_timer]
+ 345 000003B8 E8 [00000000] CALL _timer_settime
+ 346 000003BD 39 F3 CMP EBX,ESI
+ 347 000003BF 58 POP EAX
+ 348 000003C0 5A POP EDX
+ 349 000003C1 74 0B JE L68
+ 350 000003C3 FF 33 PUSH DWORD [EBX]
+ 351 000003C5 6A 00 PUSH 0
+ 352 000003C7 E8 [00000000] CALL _farjmp
+ 353 000003CC 5B POP EBX
+ 354 000003CD 5E POP ESI
+ 355 000003CE L68:
+ 356 000003CE 8D 65 F8 LEA ESP,DWORD [-8+EBP]
+ 357 000003D1 5B POP EBX
+ 358 000003D2 5E POP ESI
+ 359 000003D3 5D POP EBP
+ 360 000003D4 C3 RET
+ 361 000003D5 L73:
+ 362 000003D5 E8 FFFFFCCF CALL _task_switchsub
+ 363 000003DA 8B 15 [00000000] MOV EDX,DWORD [_taskctl]
+ 364 000003E0 8B 02 MOV EAX,DWORD [EDX]
+ 365 000003E2 69 C0 00000198 IMUL EAX,EAX,408
+ 366 000003E8 8D 4C 10 08 LEA ECX,DWORD [8+EAX+EDX*1]
+ 367 000003EC EB BA JMP L70
+ 368 000003EE L72:
+ 369 000003EE C7 41 04 00000000 MOV DWORD [4+ECX],0
+ 370 000003F5 EB AB JMP L69
+ 371 000003F7 GLOBAL _taskctl
+ 372 [SECTION .data]
+ 373 00000000 ALIGNB 4
+ 374 00000000 _taskctl:
+ 375 00000000 00 00 00 00 RESB 4
+ 376 00000004 GLOBAL _task_timer
+ 377 [SECTION .data]
+ 378 00000004 ALIGNB 4
+ 379 00000004 _task_timer:
+ 380 00000004 00 00 00 00 RESB 4
--- /dev/null
+; naskfunc
+; TAB=4
+
+;[FORMAT "WCOFF"] ; \83I\83u\83W\83F\83N\83g\83t\83@\83C\83\8b\82ð\8dì\82é\83\82\81[\83h
+;[INSTRSET "i486p"] ; 486\82Ì\96½\97ß\82Ü\82Å\8eg\82¢\82½\82¢\82Æ\82¢\82¤\8bL\8fq
+[BITS 32] ; 32\83r\83b\83g\83\82\81[\83h\97p\82Ì\8b@\8aB\8cê\82ð\8dì\82ç\82¹\82é
+;[FILE "naskfunc.nas"] ; \83\\81[\83X\83t\83@\83C\83\8b\96¼\8fî\95ñ
+
+ GLOBAL _io_hlt, _io_cli, _io_sti, _io_stihlt
+ GLOBAL _io_in8, _io_in16, _io_in32
+ GLOBAL _io_out8, _io_out16, _io_out32
+ GLOBAL _io_load_eflags, _io_store_eflags
+ GLOBAL _load_gdtr, _load_idtr
+ GLOBAL _load_cr0, _store_cr0
+ GLOBAL _load_cr3, _store_cr3
+ GLOBAL _load_tr
+ GLOBAL _asm_inthandler20, _asm_inthandler21
+ GLOBAL _asm_inthandler2c, _asm_inthandler0c
+ GLOBAL _asm_inthandler0d, _asm_end_app
+ GLOBAL _asm_inthandler0e, _asm_inthandler0a, _asm_inthandler0b, _asm_inthandler00
+ GLOBAL _memtest_sub
+ GLOBAL _farjmp, _farcall
+ GLOBAL _asm_hrb_api, _start_app
+ EXTERN _inthandler20, _inthandler21
+ EXTERN _inthandler2c, _inthandler0d
+ EXTERN _inthandler0c, _inthandler0a, _inthandler0b, _inthandler00
+ EXTERN _inthandler0e
+ EXTERN _hrb_api
+ GLOBAL __Unwind_Resume, ___gxx_personality_v0
+ GLOBAL ___chkstk
+
+[SECTION .text]
+
+_io_hlt: ; void io_hlt(void);
+ HLT
+ RET
+
+_io_cli: ; void io_cli(void);
+ CLI
+ RET
+
+_io_sti: ; void io_sti(void);
+ STI
+ RET
+
+_io_stihlt: ; void io_stihlt(void);
+ STI
+ HLT
+ RET
+
+_io_in8: ; int io_in8(int port);
+ MOV EDX,[ESP+4] ; port
+ MOV EAX,0
+ IN AL,DX
+ RET
+
+_io_in16: ; int io_in16(int port);
+ MOV EDX,[ESP+4] ; port
+ MOV EAX,0
+ IN AX,DX
+ RET
+
+_io_in32: ; int io_in32(int port);
+ MOV EDX,[ESP+4] ; port
+ IN EAX,DX
+ RET
+
+_io_out8: ; void io_out8(int port, int data);
+ MOV EDX,[ESP+4] ; port
+ MOV AL,[ESP+8] ; data
+ OUT DX,AL
+ RET
+
+_io_out16: ; void io_out16(int port, int data);
+ MOV EDX,[ESP+4] ; port
+ MOV EAX,[ESP+8] ; data
+ OUT DX,AX
+ RET
+
+_io_out32: ; void io_out32(int port, int data);
+ MOV EDX,[ESP+4] ; port
+ MOV EAX,[ESP+8] ; data
+ OUT DX,EAX
+ RET
+
+_io_load_eflags: ; int io_load_eflags(void);
+ PUSHFD ; PUSH EFLAGS \82Æ\82¢\82¤\88Ó\96¡
+ POP EAX
+ RET
+
+_io_store_eflags: ; void io_store_eflags(int eflags);
+ MOV EAX,[ESP+4]
+ PUSH EAX
+ POPFD ; POP EFLAGS \82Æ\82¢\82¤\88Ó\96¡
+ RET
+
+_load_gdtr: ; void load_gdtr(int limit, int addr);
+ MOV AX,[ESP+4] ; limit
+ MOV [ESP+6],AX
+ LGDT [ESP+6]
+ RET
+
+_load_idtr: ; void load_idtr(int limit, int addr);
+ MOV AX,[ESP+4] ; limit
+ MOV [ESP+6],AX
+ LIDT [ESP+6]
+ RET
+
+_load_cr0: ; int load_cr0(void);
+ MOV EAX,CR0
+ RET
+
+_store_cr0: ; void store_cr0(int cr0);
+ MOV EAX,[ESP+4]
+ MOV CR0,EAX
+ RET
+
+_load_cr3: ; int load_cr3(void);
+ MOV EAX,CR0
+ RET
+
+_store_cr3: ; void store_cr3(int cr3);
+ MOV EAX,[ESP+4]
+ MOV CR0,EAX
+ RET
+
+_load_tr: ; void load_tr(int tr);
+ LTR [ESP+4] ; tr
+ RET
+
+_asm_inthandler20:
+ PUSH ES
+ PUSH DS
+ PUSHAD
+ MOV EAX,ESP
+ PUSH EAX
+ MOV AX,SS
+ MOV DS,AX
+ MOV ES,AX
+ CALL _inthandler20
+ POP EAX
+ POPAD
+ POP DS
+ POP ES
+ IRETD
+
+_asm_inthandler21:
+ PUSH ES
+ PUSH DS
+ PUSHAD
+ MOV EAX,ESP
+ PUSH EAX
+ MOV AX,SS
+ MOV DS,AX
+ MOV ES,AX
+ CALL _inthandler21
+ POP EAX
+ POPAD
+ POP DS
+ POP ES
+ IRETD
+
+_asm_inthandler2c:
+ PUSH ES
+ PUSH DS
+ PUSHAD
+ MOV EAX,ESP
+ PUSH EAX
+ MOV AX,SS
+ MOV DS,AX
+ MOV ES,AX
+ CALL _inthandler2c
+ POP EAX
+ POPAD
+ POP DS
+ POP ES
+ IRETD
+
+_asm_inthandler00:
+ PUSH ES
+ PUSH DS
+ PUSHAD
+ MOV EAX,ESP
+ PUSH EAX
+ MOV AX,SS
+ MOV DS,AX
+ MOV ES,AX
+ CALL _inthandler00
+ POP EAX
+ POPAD
+ POP DS
+ POP ES
+ IRETD
+
+_asm_inthandler0a:
+ STI
+ mov eax, esp
+ mov ecx, 0x01020304
+ PUSH ES
+ PUSH DS
+ PUSHAD
+ ;MOV EAX,ESP
+ PUSH EAX
+ MOV AX,SS
+ MOV DS,AX
+ MOV ES,AX
+ CALL _inthandler0a
+ CMP EAX,0
+ JNE _asm_end_app
+ POP EAX
+ POPAD
+ POP DS
+ POP ES
+ ADD ESP,4 ; INT 0x0c \82Å\82à\81A\82±\82ê\82ª\95K\97v
+ IRETD
+
+_asm_inthandler0b:
+ STI
+ PUSH ES
+ PUSH DS
+ PUSHAD
+ MOV EAX,ESP
+ PUSH EAX
+ MOV AX,SS
+ MOV DS,AX
+ MOV ES,AX
+ CALL _inthandler0b
+ CMP EAX,0
+ JNE _asm_end_app
+ POP EAX
+ POPAD
+ POP DS
+ POP ES
+ ADD ESP,4 ; INT 0x0c \82Å\82à\81A\82±\82ê\82ª\95K\97v
+ IRETD
+
+_asm_inthandler0c:
+ STI
+ PUSH ES
+ PUSH DS
+ PUSHAD
+ MOV EAX,ESP
+ PUSH EAX
+ MOV AX,SS
+ MOV DS,AX
+ MOV ES,AX
+ CALL _inthandler0c
+ CMP EAX,0
+ JNE _asm_end_app
+ POP EAX
+ POPAD
+ POP DS
+ POP ES
+ ADD ESP,4 ; INT 0x0c \82Å\82à\81A\82±\82ê\82ª\95K\97v
+ IRETD
+
+_asm_inthandler0d:
+ STI
+ PUSH ES
+ PUSH DS
+ PUSHAD
+ MOV EAX,ESP
+ PUSH EAX
+ MOV AX,SS
+ MOV DS,AX
+ MOV ES,AX
+ CALL _inthandler0d
+ CMP EAX,0 ; \82±\82±\82¾\82¯\88á\82¤
+ JNE _asm_end_app ; \82±\82±\82¾\82¯\88á\82¤
+ POP EAX
+ POPAD
+ POP DS
+ POP ES
+ ADD ESP,4 ; INT 0x0d \82Å\82Í\81A\82±\82ê\82ª\95K\97v
+ IRETD
+
+_asm_inthandler0e:
+ STI
+ PUSH ES
+ PUSH DS
+ PUSHAD
+ MOV EAX,ESP
+ PUSH EAX
+ MOV AX,SS
+ MOV DS,AX
+ MOV ES,AX
+ CALL _inthandler0e
+ CMP EAX,0
+ JNE _asm_end_app
+ POP EAX
+ POPAD
+ POP DS
+ POP ES
+ ADD ESP,4 ; INT 0x0c \82Å\82à\81A\82±\82ê\82ª\95K\97v
+ IRETD
+
+_memtest_sub: ; unsigned int memtest_sub(unsigned int start, unsigned int end)
+ PUSH EDI ; \81iEBX, ESI, EDI \82à\8eg\82¢\82½\82¢\82Ì\82Å\81j
+ PUSH ESI
+ PUSH EBX
+ MOV ESI,0xaa55aa55 ; pat0 = 0xaa55aa55;
+ MOV EDI,0x55aa55aa ; pat1 = 0x55aa55aa;
+ MOV EAX,[ESP+12+4] ; i = start;
+mts_loop:
+ MOV EBX,EAX
+ ADD EBX,0xffc ; p = i + 0xffc;
+ MOV EDX,[EBX] ; old = *p;
+ MOV [EBX],ESI ; *p = pat0;
+ XOR DWORD [EBX],0xffffffff ; *p ^= 0xffffffff;
+ CMP EDI,[EBX] ; if (*p != pat1) goto fin;
+ JNE mts_fin
+ XOR DWORD [EBX],0xffffffff ; *p ^= 0xffffffff;
+ CMP ESI,[EBX] ; if (*p != pat0) goto fin;
+ JNE mts_fin
+ MOV [EBX],EDX ; *p = old;
+ ADD EAX,0x1000 ; i += 0x1000;
+ CMP EAX,[ESP+12+8] ; if (i <= end) goto mts_loop;
+ JBE mts_loop
+ POP EBX
+ POP ESI
+ POP EDI
+ RET
+mts_fin:
+ MOV [EBX],EDX ; *p = old;
+ POP EBX
+ POP ESI
+ POP EDI
+ RET
+
+_farjmp: ; void farjmp(int eip, int cs);
+ JMP FAR [ESP+4] ; eip, cs
+ RET
+
+_farcall: ; void farcall(int eip, int cs);
+ CALL FAR [ESP+4] ; eip, cs
+ RET
+
+; _asm_hrb_api:
+ ; STI
+ ; PUSH DS
+ ; PUSH ES
+ ; PUSHAD ; \95Û\91¶\82Ì\82½\82ß\82ÌPUSH
+ ; PUSHAD ; hrb_api\82É\82í\82½\82·\82½\82ß\82ÌPUSH
+ ; MOV AX,SS
+ ; MOV DS,AX ; OS\97p\82Ì\83Z\83O\83\81\83\93\83g\82ðDS\82ÆES\82É\82à\93ü\82ê\82é
+ ; MOV ES,AX
+ ; CALL _hrb_api
+ ; CMP EAX,0 ; EAX\82ª0\82Å\82È\82¯\82ê\82Î\83A\83v\83\8a\8fI\97¹\8f\88\97\9d
+ ; JNE _asm_end_app
+ ; ADD ESP,32
+ ; POPAD
+ ; POP ES
+ ; POP DS
+ ; IRETD
+_asm_end_app:
+; EAX\82Ítss.esp0\82Ì\94Ô\92n
+ MOV ESP,[EAX]
+ MOV DWORD [EAX+4],0
+ POPAD
+ RET ; cmd_app\82Ö\8bA\82é
+
+_start_app: ; void start_app(int eip, int cs, int esp, int ds, int *tss_esp0);
+ PUSHAD ; 32\83r\83b\83g\83\8c\83W\83X\83^\82ð\91S\95\94\95Û\91¶\82µ\82Ä\82¨\82
+ MOV EAX,[ESP+36] ; \83A\83v\83\8a\97p\82ÌEIP
+ MOV ECX,[ESP+40] ; \83A\83v\83\8a\97p\82ÌCS
+ MOV EDX,[ESP+44] ; \83A\83v\83\8a\97p\82ÌESP
+ MOV EBX,[ESP+48] ; \83A\83v\83\8a\97p\82ÌDS/SS
+ MOV EBP,[ESP+52] ; tss.esp0\82Ì\94Ô\92n
+ MOV [EBP ],ESP ; OS\97p\82ÌESP\82ð\95Û\91¶
+ MOV [EBP+4],SS ; OS\97p\82ÌSS\82ð\95Û\91¶
+ MOV ES,BX
+ MOV DS,BX
+ MOV FS,BX
+ MOV GS,BX
+; \88È\89º\82ÍRETF\82Å\83A\83v\83\8a\82É\8ds\82©\82¹\82é\82½\82ß\82Ì\83X\83^\83b\83N\92²\90®
+ OR ECX,3 ; \83A\83v\83\8a\97p\82Ì\83Z\83O\83\81\83\93\83g\94Ô\8d\86\82É3\82ðOR\82·\82é
+ OR EBX,3 ; \83A\83v\83\8a\97p\82Ì\83Z\83O\83\81\83\93\83g\94Ô\8d\86\82É3\82ðOR\82·\82é
+ PUSH EBX ; \83A\83v\83\8a\82ÌSS
+ PUSH EDX ; \83A\83v\83\8a\82ÌESP
+ PUSH ECX ; \83A\83v\83\8a\82ÌCS
+ PUSH EAX ; \83A\83v\83\8a\82ÌEIP
+ RETF
+; \83A\83v\83\8a\82ª\8fI\97¹\82µ\82Ä\82à\82±\82±\82É\82Í\97\88\82È\82¢
+
+;\83R\83\93\83X\83g\83\89\83N\83^\82ð\8cÄ\82Ô\82Æ\82«\82Égcc\82ª\8f\9f\8eè\82É\82±\82ê\82ð\8cÄ\82Ñ\8fo\82·
+__Unwind_Resume:
+ ret
+___gxx_personality_v0:
+ dw 0
+___chkstk:
+ ret
+test:
\ No newline at end of file
--- /dev/null
+#pragma once
+
+extern "C"{
+
+void io_hlt(void);
+void io_cli(void);
+void io_sti(void);
+void io_stihlt(void);
+DWORD io_in8(DWORD port);
+void io_out8(DWORD port, DWORD data);
+DWORD io_load_eflags(void);
+void io_store_eflags(DWORD eflags);
+void load_gdtr(DWORD limit, DWORD addr);
+void load_idtr(DWORD limit, DWORD addr);
+DWORD load_cr0(void);
+void store_cr0(DWORD cr0);
+DWORD load_cr3(void);
+void store_cr3(DWORD cr3);
+void load_tr(DWORD tr);
+void asm_inthandler00(void);
+void asm_inthandler0a(void);
+void asm_inthandler0b(void);
+void asm_inthandler0c(void);
+void asm_inthandler0d(void);
+void asm_inthandler20(void);
+void asm_inthandler0e(void);
+void asm_inthandler21(void);
+void asm_inthandler2c(void);
+void farjmp(DWORD eip, DWORD cs);
+
+};
\ No newline at end of file
--- /dev/null
+ 1 ; naskfunc
+ 2 ; TAB=4
+ 3
+ 4 ;[FORMAT "WCOFF"] ; \83I\83u\83W\83F\83N\83g\83t\83@\83C\83\8b\82ð\8dì\82é\83\82\81[\83h
+ 5 ;[INSTRSET "i486p"] ; 486\82Ì\96½\97ß\82Ü\82Å\8eg\82¢\82½\82¢\82Æ\82¢\82¤\8bL\8fq
+ 6 [BITS 32] ; 32\83r\83b\83g\83\82\81[\83h\97p\82Ì\8b@\8aB\8cê\82ð\8dì\82ç\82¹\82é
+ 7 ;[FILE "naskfunc.nas"] ; \83\\81[\83X\83t\83@\83C\83\8b\96¼\8fî\95ñ
+ 8
+ 9 GLOBAL _io_hlt, _io_cli, _io_sti, _io_stihlt
+ 10 GLOBAL _io_in8, _io_in16, _io_in32
+ 11 GLOBAL _io_out8, _io_out16, _io_out32
+ 12 GLOBAL _io_load_eflags, _io_store_eflags
+ 13 GLOBAL _load_gdtr, _load_idtr
+ 14 GLOBAL _load_cr0, _store_cr0
+ 15 GLOBAL _load_tr
+ 16 GLOBAL _asm_inthandler20, _asm_inthandler21
+ 17 GLOBAL _asm_inthandler2c, _asm_inthandler0c
+ 18 GLOBAL _asm_inthandler0d, _asm_end_app
+ 19 GLOBAL _asm_inthandler0e, _asm_inthandler0a, _asm_inthandler0b, _asm_inthandler00
+ 20 GLOBAL _memtest_sub
+ 21 GLOBAL _farjmp, _farcall
+ 22 GLOBAL _asm_hrb_api, _start_app
+ 23 EXTERN _inthandler20, _inthandler21
+ 24 EXTERN _inthandler2c, _inthandler0d
+ 25 EXTERN _inthandler0c, _inthandler0a, _inthandler0b, _inthandler00
+ 26 EXTERN _inthandler0e
+ 27 EXTERN _hrb_api
+ 28 GLOBAL __Unwind_Resume, ___gxx_personality_v0
+ 29 GLOBAL ___chkstk
+ 30
+ 31 [SECTION .text]
+ 32
+ 33 _io_hlt: ; void io_hlt(void);
+ 34 00000000 F4 HLT
+ 35 00000001 C3 RET
+ 36
+ 37 _io_cli: ; void io_cli(void);
+ 38 00000002 FA CLI
+ 39 00000003 C3 RET
+ 40
+ 41 _io_sti: ; void io_sti(void);
+ 42 00000004 FB STI
+ 43 00000005 C3 RET
+ 44
+ 45 _io_stihlt: ; void io_stihlt(void);
+ 46 00000006 FB STI
+ 47 00000007 F4 HLT
+ 48 00000008 C3 RET
+ 49
+ 50 _io_in8: ; int io_in8(int port);
+ 51 00000009 8B542404 MOV EDX,[ESP+4] ; port
+ 52 0000000D B800000000 MOV EAX,0
+ 53 00000012 EC IN AL,DX
+ 54 00000013 C3 RET
+ 55
+ 56 _io_in16: ; int io_in16(int port);
+ 57 00000014 8B542404 MOV EDX,[ESP+4] ; port
+ 58 00000018 B800000000 MOV EAX,0
+ 59 0000001D 66ED IN AX,DX
+ 60 0000001F C3 RET
+ 61
+ 62 _io_in32: ; int io_in32(int port);
+ 63 00000020 8B542404 MOV EDX,[ESP+4] ; port
+ 64 00000024 ED IN EAX,DX
+ 65 00000025 C3 RET
+ 66
+ 67 _io_out8: ; void io_out8(int port, int data);
+ 68 00000026 8B542404 MOV EDX,[ESP+4] ; port
+ 69 0000002A 8A442408 MOV AL,[ESP+8] ; data
+ 70 0000002E EE OUT DX,AL
+ 71 0000002F C3 RET
+ 72
+ 73 _io_out16: ; void io_out16(int port, int data);
+ 74 00000030 8B542404 MOV EDX,[ESP+4] ; port
+ 75 00000034 8B442408 MOV EAX,[ESP+8] ; data
+ 76 00000038 66EF OUT DX,AX
+ 77 0000003A C3 RET
+ 78
+ 79 _io_out32: ; void io_out32(int port, int data);
+ 80 0000003B 8B542404 MOV EDX,[ESP+4] ; port
+ 81 0000003F 8B442408 MOV EAX,[ESP+8] ; data
+ 82 00000043 EF OUT DX,EAX
+ 83 00000044 C3 RET
+ 84
+ 85 _io_load_eflags: ; int io_load_eflags(void);
+ 86 00000045 9C PUSHFD ; PUSH EFLAGS \82Æ\82¢\82¤\88Ó\96¡
+ 87 00000046 58 POP EAX
+ 88 00000047 C3 RET
+ 89
+ 90 _io_store_eflags: ; void io_store_eflags(int eflags);
+ 91 00000048 8B442404 MOV EAX,[ESP+4]
+ 92 0000004C 50 PUSH EAX
+ 93 0000004D 9D POPFD ; POP EFLAGS \82Æ\82¢\82¤\88Ó\96¡
+ 94 0000004E C3 RET
+ 95
+ 96 _load_gdtr: ; void load_gdtr(int limit, int addr);
+ 97 0000004F 668B442404 MOV AX,[ESP+4] ; limit
+ 98 00000054 6689442406 MOV [ESP+6],AX
+ 99 00000059 0F01542406 LGDT [ESP+6]
+ 100 0000005E C3 RET
+ 101
+ 102 _load_idtr: ; void load_idtr(int limit, int addr);
+ 103 0000005F 668B442404 MOV AX,[ESP+4] ; limit
+ 104 00000064 6689442406 MOV [ESP+6],AX
+ 105 00000069 0F015C2406 LIDT [ESP+6]
+ 106 0000006E C3 RET
+ 107
+ 108 _load_cr0: ; int load_cr0(void);
+ 109 0000006F 0F20C0 MOV EAX,CR0
+ 110 00000072 C3 RET
+ 111
+ 112 _store_cr0: ; void store_cr0(int cr0);
+ 113 00000073 8B442404 MOV EAX,[ESP+4]
+ 114 00000077 0F22C0 MOV CR0,EAX
+ 115 0000007A C3 RET
+ 116
+ 117 _load_tr: ; void load_tr(int tr);
+ 118 0000007B 0F005C2404 LTR [ESP+4] ; tr
+ 119 00000080 C3 RET
+ 120
+ 121 _asm_inthandler20:
+ 122 00000081 06 PUSH ES
+ 123 00000082 1E PUSH DS
+ 124 00000083 60 PUSHAD
+ 125 00000084 89E0 MOV EAX,ESP
+ 126 00000086 50 PUSH EAX
+ 127 00000087 668CD0 MOV AX,SS
+ 128 0000008A 8ED8 MOV DS,AX
+ 129 0000008C 8EC0 MOV ES,AX
+ 130 0000008E E8(00000000) CALL _inthandler20
+ 131 00000093 58 POP EAX
+ 132 00000094 61 POPAD
+ 133 00000095 1F POP DS
+ 134 00000096 07 POP ES
+ 135 00000097 CF IRETD
+ 136
+ 137 _asm_inthandler21:
+ 138 00000098 06 PUSH ES
+ 139 00000099 1E PUSH DS
+ 140 0000009A 60 PUSHAD
+ 141 0000009B 89E0 MOV EAX,ESP
+ 142 0000009D 50 PUSH EAX
+ 143 0000009E 668CD0 MOV AX,SS
+ 144 000000A1 8ED8 MOV DS,AX
+ 145 000000A3 8EC0 MOV ES,AX
+ 146 000000A5 E8(00000000) CALL _inthandler21
+ 147 000000AA 58 POP EAX
+ 148 000000AB 61 POPAD
+ 149 000000AC 1F POP DS
+ 150 000000AD 07 POP ES
+ 151 000000AE CF IRETD
+ 152
+ 153 _asm_inthandler2c:
+ 154 000000AF 06 PUSH ES
+ 155 000000B0 1E PUSH DS
+ 156 000000B1 60 PUSHAD
+ 157 000000B2 89E0 MOV EAX,ESP
+ 158 000000B4 50 PUSH EAX
+ 159 000000B5 668CD0 MOV AX,SS
+ 160 000000B8 8ED8 MOV DS,AX
+ 161 000000BA 8EC0 MOV ES,AX
+ 162 000000BC E8(00000000) CALL _inthandler2c
+ 163 000000C1 58 POP EAX
+ 164 000000C2 61 POPAD
+ 165 000000C3 1F POP DS
+ 166 000000C4 07 POP ES
+ 167 000000C5 CF IRETD
+ 168
+ 169 _asm_inthandler00:
+ 170 000000C6 06 PUSH ES
+ 171 000000C7 1E PUSH DS
+ 172 000000C8 60 PUSHAD
+ 173 000000C9 89E0 MOV EAX,ESP
+ 174 000000CB 50 PUSH EAX
+ 175 000000CC 668CD0 MOV AX,SS
+ 176 000000CF 8ED8 MOV DS,AX
+ 177 000000D1 8EC0 MOV ES,AX
+ 178 000000D3 E8(00000000) CALL _inthandler00
+ 179 000000D8 58 POP EAX
+ 180 000000D9 61 POPAD
+ 181 000000DA 1F POP DS
+ 182 000000DB 07 POP ES
+ 183 000000DC CF IRETD
+ 184
+ 185 _asm_inthandler0a:
+ 186 000000DD FB STI
+ 187 000000DE 89E0 mov eax, esp
+ 188 000000E0 B904030201 mov ecx, 0x01020304
+ 189 000000E5 06 PUSH ES
+ 190 000000E6 1E PUSH DS
+ 191 000000E7 60 PUSHAD
+ 192 ;MOV EAX,ESP
+ 193 000000E8 50 PUSH EAX
+ 194 000000E9 668CD0 MOV AX,SS
+ 195 000000EC 8ED8 MOV DS,AX
+ 196 000000EE 8EC0 MOV ES,AX
+ 197 000000F0 E8(00000000) CALL _inthandler0a
+ 198 000000F5 3D00000000 CMP EAX,0
+ 199 000000FA 0F85FD000000 JNE _asm_end_app
+ 200 00000100 58 POP EAX
+ 201 00000101 61 POPAD
+ 202 00000102 1F POP DS
+ 203 00000103 07 POP ES
+ 204 00000104 81C404000000 ADD ESP,4 ; INT 0x0c \82Å\82à\81A\82±\82ê\82ª\95K\97v
+ 205 0000010A CF IRETD
+ 206
+ 207 _asm_inthandler0b:
+ 208 0000010B FB STI
+ 209 0000010C 06 PUSH ES
+ 210 0000010D 1E PUSH DS
+ 211 0000010E 60 PUSHAD
+ 212 0000010F 89E0 MOV EAX,ESP
+ 213 00000111 50 PUSH EAX
+ 214 00000112 668CD0 MOV AX,SS
+ 215 00000115 8ED8 MOV DS,AX
+ 216 00000117 8EC0 MOV ES,AX
+ 217 00000119 E8(00000000) CALL _inthandler0b
+ 218 0000011E 3D00000000 CMP EAX,0
+ 219 00000123 0F85D4000000 JNE _asm_end_app
+ 220 00000129 58 POP EAX
+ 221 0000012A 61 POPAD
+ 222 0000012B 1F POP DS
+ 223 0000012C 07 POP ES
+ 224 0000012D 81C404000000 ADD ESP,4 ; INT 0x0c \82Å\82à\81A\82±\82ê\82ª\95K\97v
+ 225 00000133 CF IRETD
+ 226
+ 227 _asm_inthandler0c:
+ 228 00000134 FB STI
+ 229 00000135 06 PUSH ES
+ 230 00000136 1E PUSH DS
+ 231 00000137 60 PUSHAD
+ 232 00000138 89E0 MOV EAX,ESP
+ 233 0000013A 50 PUSH EAX
+ 234 0000013B 668CD0 MOV AX,SS
+ 235 0000013E 8ED8 MOV DS,AX
+ 236 00000140 8EC0 MOV ES,AX
+ 237 00000142 E8(00000000) CALL _inthandler0c
+ 238 00000147 3D00000000 CMP EAX,0
+ 239 0000014C 0F85AB000000 JNE _asm_end_app
+ 240 00000152 58 POP EAX
+ 241 00000153 61 POPAD
+ 242 00000154 1F POP DS
+ 243 00000155 07 POP ES
+ 244 00000156 81C404000000 ADD ESP,4 ; INT 0x0c \82Å\82à\81A\82±\82ê\82ª\95K\97v
+ 245 0000015C CF IRETD
+ 246
+ 247 _asm_inthandler0d:
+ 248 0000015D FB STI
+ 249 0000015E 06 PUSH ES
+ 250 0000015F 1E PUSH DS
+ 251 00000160 60 PUSHAD
+ 252 00000161 89E0 MOV EAX,ESP
+ 253 00000163 50 PUSH EAX
+ 254 00000164 668CD0 MOV AX,SS
+ 255 00000167 8ED8 MOV DS,AX
+ 256 00000169 8EC0 MOV ES,AX
+ 257 0000016B E8(00000000) CALL _inthandler0d
+ 258 00000170 3D00000000 CMP EAX,0 ; \82±\82±\82¾\82¯\88á\82¤
+ 259 00000175 0F8582000000 JNE _asm_end_app ; \82±\82±\82¾\82¯\88á\82¤
+ 260 0000017B 58 POP EAX
+ 261 0000017C 61 POPAD
+ 262 0000017D 1F POP DS
+ 263 0000017E 07 POP ES
+ 264 0000017F 81C404000000 ADD ESP,4 ; INT 0x0d \82Å\82Í\81A\82±\82ê\82ª\95K\97v
+ 265 00000185 CF IRETD
+ 266
+ 267 _asm_inthandler0e:
+ 268 00000186 FB STI
+ 269 00000187 06 PUSH ES
+ 270 00000188 1E PUSH DS
+ 271 00000189 60 PUSHAD
+ 272 0000018A 89E0 MOV EAX,ESP
+ 273 0000018C 50 PUSH EAX
+ 274 0000018D 668CD0 MOV AX,SS
+ 275 00000190 8ED8 MOV DS,AX
+ 276 00000192 8EC0 MOV ES,AX
+ 277 00000194 E8(00000000) CALL _inthandler0e
+ 278 00000199 3D00000000 CMP EAX,0
+ 279 0000019E 755D JNE _asm_end_app
+ 280 000001A0 58 POP EAX
+ 281 000001A1 61 POPAD
+ 282 000001A2 1F POP DS
+ 283 000001A3 07 POP ES
+ 284 000001A4 81C404000000 ADD ESP,4 ; INT 0x0c \82Å\82à\81A\82±\82ê\82ª\95K\97v
+ 285 000001AA CF IRETD
+ 286
+ 287 _memtest_sub: ; unsigned int memtest_sub(unsigned int start, unsigned int end)
+ 288 000001AB 57 PUSH EDI ; \81iEBX, ESI, EDI \82à\8eg\82¢\82½\82¢\82Ì\82Å\81j
+ 289 000001AC 56 PUSH ESI
+ 290 000001AD 53 PUSH EBX
+ 291 000001AE BE55AA55AA MOV ESI,0xaa55aa55 ; pat0 = 0xaa55aa55;
+ 292 000001B3 BFAA55AA55 MOV EDI,0x55aa55aa ; pat1 = 0x55aa55aa;
+ 293 000001B8 8B442410 MOV EAX,[ESP+12+4] ; i = start;
+ 294 mts_loop:
+ 295 000001BC 89C3 MOV EBX,EAX
+ 296 000001BE 81C3FC0F0000 ADD EBX,0xffc ; p = i + 0xffc;
+ 297 000001C4 8B13 MOV EDX,[EBX] ; old = *p;
+ 298 000001C6 8933 MOV [EBX],ESI ; *p = pat0;
+ 299 000001C8 8133FFFFFFFF XOR DWORD [EBX],0xffffffff ; *p ^= 0xffffffff;
+ 300 000001CE 3B3B CMP EDI,[EBX] ; if (*p != pat1) goto fin;
+ 301 000001D0 751B JNE mts_fin
+ 302 000001D2 8133FFFFFFFF XOR DWORD [EBX],0xffffffff ; *p ^= 0xffffffff;
+ 303 000001D8 3B33 CMP ESI,[EBX] ; if (*p != pat0) goto fin;
+ 304 000001DA 7511 JNE mts_fin
+ 305 000001DC 8913 MOV [EBX],EDX ; *p = old;
+ 306 000001DE 0500100000 ADD EAX,0x1000 ; i += 0x1000;
+ 307 000001E3 3B442414 CMP EAX,[ESP+12+8] ; if (i <= end) goto mts_loop;
+ 308 000001E7 76D3 JBE mts_loop
+ 309 000001E9 5B POP EBX
+ 310 000001EA 5E POP ESI
+ 311 000001EB 5F POP EDI
+ 312 000001EC C3 RET
+ 313 mts_fin:
+ 314 000001ED 8913 MOV [EBX],EDX ; *p = old;
+ 315 000001EF 5B POP EBX
+ 316 000001F0 5E POP ESI
+ 317 000001F1 5F POP EDI
+ 318 000001F2 C3 RET
+ 319
+ 320 _farjmp: ; void farjmp(int eip, int cs);
+ 321 000001F3 FF6C2404 JMP FAR [ESP+4] ; eip, cs
+ 322 000001F7 C3 RET
+ 323
+ 324 _farcall: ; void farcall(int eip, int cs);
+ 325 000001F8 FF5C2404 CALL FAR [ESP+4] ; eip, cs
+ 326 000001FC C3 RET
+ 327
+ 328 ; _asm_hrb_api:
+ 329 ; STI
+ 330 ; PUSH DS
+ 331 ; PUSH ES
+ 332 ; PUSHAD ; \95Û\91¶\82Ì\82½\82ß\82ÌPUSH
+ 333 ; PUSHAD ; hrb_api\82É\82í\82½\82·\82½\82ß\82ÌPUSH
+ 334 ; MOV AX,SS
+ 335 ; MOV DS,AX ; OS\97p\82Ì\83Z\83O\83\81\83\93\83g\82ðDS\82ÆES\82É\82à\93ü\82ê\82é
+ 336 ; MOV ES,AX
+ 337 ; CALL _hrb_api
+ 338 ; CMP EAX,0 ; EAX\82ª0\82Å\82È\82¯\82ê\82Î\83A\83v\83\8a\8fI\97¹\8f\88\97\9d
+ 339 ; JNE _asm_end_app
+ 340 ; ADD ESP,32
+ 341 ; POPAD
+ 342 ; POP ES
+ 343 ; POP DS
+ 344 ; IRETD
+ 345 _asm_end_app:
+ 346 ; EAX\82Ítss.esp0\82Ì\94Ô\92n
+ 347 000001FD 8B20 MOV ESP,[EAX]
+ 348 000001FF C7400400000000 MOV DWORD [EAX+4],0
+ 349 00000206 61 POPAD
+ 350 00000207 C3 RET ; cmd_app\82Ö\8bA\82é
+ 351
+ 352 _start_app: ; void start_app(int eip, int cs, int esp, int ds, int *tss_esp0);
+ 353 00000208 60 PUSHAD ; 32\83r\83b\83g\83\8c\83W\83X\83^\82ð\91S\95\94\95Û\91¶\82µ\82Ä\82¨\82
+ 354 00000209 8B442424 MOV EAX,[ESP+36] ; \83A\83v\83\8a\97p\82ÌEIP
+ 355 0000020D 8B4C2428 MOV ECX,[ESP+40] ; \83A\83v\83\8a\97p\82ÌCS
+ 356 00000211 8B54242C MOV EDX,[ESP+44] ; \83A\83v\83\8a\97p\82ÌESP
+ 357 00000215 8B5C2430 MOV EBX,[ESP+48] ; \83A\83v\83\8a\97p\82ÌDS/SS
+ 358 00000219 8B6C2434 MOV EBP,[ESP+52] ; tss.esp0\82Ì\94Ô\92n
+ 359 0000021D 896500 MOV [EBP ],ESP ; OS\97p\82ÌESP\82ð\95Û\91¶
+ 360 00000220 8C5504 MOV [EBP+4],SS ; OS\97p\82ÌSS\82ð\95Û\91¶
+ 361 00000223 8EC3 MOV ES,BX
+ 362 00000225 8EDB MOV DS,BX
+ 363 00000227 8EE3 MOV FS,BX
+ 364 00000229 8EEB MOV GS,BX
+ 365 ; \88È\89º\82ÍRETF\82Å\83A\83v\83\8a\82É\8ds\82©\82¹\82é\82½\82ß\82Ì\83X\83^\83b\83N\92²\90®
+ 366 0000022B 81C903000000 OR ECX,3 ; \83A\83v\83\8a\97p\82Ì\83Z\83O\83\81\83\93\83g\94Ô\8d\86\82É3\82ðOR\82·\82é
+ 367 00000231 81CB03000000 OR EBX,3 ; \83A\83v\83\8a\97p\82Ì\83Z\83O\83\81\83\93\83g\94Ô\8d\86\82É3\82ðOR\82·\82é
+ 368 00000237 53 PUSH EBX ; \83A\83v\83\8a\82ÌSS
+ 369 00000238 52 PUSH EDX ; \83A\83v\83\8a\82ÌESP
+ 370 00000239 51 PUSH ECX ; \83A\83v\83\8a\82ÌCS
+ 371 0000023A 50 PUSH EAX ; \83A\83v\83\8a\82ÌEIP
+ 372 0000023B CB RETF
+ 373 ; \83A\83v\83\8a\82ª\8fI\97¹\82µ\82Ä\82à\82±\82±\82É\82Í\97\88\82È\82¢
+ 374
+ 375 ;\83R\83\93\83X\83g\83\89\83N\83^\82ð\8cÄ\82Ô\82Æ\82«\82Égcc\82ª\8f\9f\8eè\82É\82±\82ê\82ð\8cÄ\82Ñ\8fo\82·
+ 376 __Unwind_Resume:
+ 377 0000023C C3 ret
+ 378 ___gxx_personality_v0:
+ 379 0000023D 0000 dw 0
+ 380 ___chkstk:
+ 381 0000023F C3 ret
+ 382 test:
--- /dev/null
+123379200-1847296
+121531904
+
+perl -e "$k=(-s 'iplcd.bin');$a=0x168000-$k;for(1..($a/1000000)){print qq(\0)x1000000;}print qq(\0)x ($a % 1000000)" >> iplcd.bin
+
+gcc -nostdlib -static -L../../lib -Ttext=0x7c00 ipl09.obj -W,"T binary.lds" -o ipl09.bin
+
+ld -nostdlib -static -L../../lib -Ttext=0x7c00 ipl09.obj -T binary.lds -o ipl09.bin
+
+ld -nostdlib -static -L../../lib -Ttext=0x7c00 ipl09.obj -o ipl09.bin
+
+..\..\z_tools\nask.exe ipl09.nas ipl09.obj ipl09.lst
+
+ld -r -Ttext 0x0 -e _start -s -o bootsect.out bootsect.o
+
+(we use a relocatable '-r' link because a final link would add the
+__CTOR_LIST__ and __DTOR_LIST__ data in the text section; a relocatable link
+will resolve any stray relocs for us without adding those tables), followed by
+an objcopy like so:
+
+objcopy -O binary -j .text bootsect.out bootsect
+
+objcopy -O binary -j .text ipl09.bin ipl09.sec
+
+.\mkisofs -no-emul-boot -b iplcd.bin -o ../cd.iso ../cd
--- /dev/null
+/* \8a\84\82è\8d\9e\82Ý\8aÖ\8cW */
+
+#include "bootpack.h"
+#include "pic.h"
+#include "naskfunc.h"
+#include <stdio.h>
+
+void init_pic(void)
+/* PIC\82Ì\8f\89\8aú\89» */
+{
+ io_out8(PIC0_IMR, 0xff ); /* \91S\82Ä\82Ì\8a\84\82è\8d\9e\82Ý\82ð\8eó\82¯\95t\82¯\82È\82¢ */
+ io_out8(PIC1_IMR, 0xff ); /* \91S\82Ä\82Ì\8a\84\82è\8d\9e\82Ý\82ð\8eó\82¯\95t\82¯\82È\82¢ */
+
+ io_out8(PIC0_ICW1, 0x11 ); /* \83G\83b\83W\83g\83\8a\83K\83\82\81[\83h */
+ io_out8(PIC0_ICW2, 0x20 ); /* IRQ0-7\82Í\81AINT20-27\82Å\8eó\82¯\82é */
+ io_out8(PIC0_ICW3, 1 << 2); /* PIC1\82ÍIRQ2\82É\82Ä\90Ú\91± */
+ io_out8(PIC0_ICW4, 0x01 ); /* \83m\83\93\83o\83b\83t\83@\83\82\81[\83h */
+
+ io_out8(PIC1_ICW1, 0x11 ); /* \83G\83b\83W\83g\83\8a\83K\83\82\81[\83h */
+ io_out8(PIC1_ICW2, 0x28 ); /* IRQ8-15\82Í\81AINT28-2f\82Å\8eó\82¯\82é */
+ io_out8(PIC1_ICW3, 2 ); /* PIC1\82ÍIRQ2\82É\82Ä\90Ú\91± */
+ io_out8(PIC1_ICW4, 0x01 ); /* \83m\83\93\83o\83b\83t\83@\83\82\81[\83h */
+
+ io_out8(PIC0_IMR, 0xfb ); /* 11111011 PIC1\88È\8aO\82Í\91S\82Ä\8bÖ\8e~ */
+ io_out8(PIC1_IMR, 0xff ); /* 11111111 \91S\82Ä\82Ì\8a\84\82è\8d\9e\82Ý\82ð\8eó\82¯\95t\82¯\82È\82¢ */
+
+ return;
+}
--- /dev/null
+#pragma once
+
+void init_pic(void);
+#define PIC0_ICW1 0x0020
+#define PIC0_OCW2 0x0020
+#define PIC0_IMR 0x0021
+#define PIC0_ICW2 0x0021
+#define PIC0_ICW3 0x0021
+#define PIC0_ICW4 0x0021
+#define PIC1_ICW1 0x00a0
+#define PIC1_OCW2 0x00a0
+#define PIC1_IMR 0x00a1
+#define PIC1_ICW2 0x00a1
+#define PIC1_ICW3 0x00a1
+#define PIC1_ICW4 0x00a1
--- /dev/null
+#include "screen.h"
+#include "hankaku.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+
+BYTE Screen::buf[sizeof(Screen)];
+
+Screen::Screen(BOOTINFO *binfo):binfo(binfo), pt(binfo){
+ //printf("a");
+}
+
+void Screen::Init(BOOTINFO *binfo){
+ new ((void *)buf) Screen(binfo);
+}
+
+void Screen::printf(const char *format, ...){
+ va_list ap;
+
+ va_start(ap, format);
+ vprintf(format, ap);
+ va_end(ap);
+}
+
+void Screen::vprintf(const char *format, va_list ap){
+ char s[2048];
+ vsprintf(s, format, ap);
+ puts(s);
+}
+
+void Screen::puts(const char *s){
+ for(; *s; s++){
+ if(*s == '\n'){
+ if(pt.NewLine()){
+ Scroll();
+ }
+ }else{
+ for(int i = 0; i < fonth; i++){
+ BYTE b = hankakufont[*s][i];
+ for(int j = 0; j < fontw; j++){
+ if((b >> (7 - j)) & 1){
+ SetPixel(pt.getx() + j, pt.gety() + i, RGB(0xff,0xff,0xff));
+ }
+ }
+ }
+ if(pt.NextChar()){
+ Scroll();
+ }
+ }
+ }
+}
+
+void Screen::SetPixel(int x, int y, const Screen::RGB &rgb){
+ if(binfo->vmode == 8){
+ binfo->vram[y * binfo->screenx + x] = rgb.col8();
+ }else{
+ BYTE *p = &binfo->vram[(y * binfo->screenx + x) * 3];
+ p[0] = rgb.b;
+ p[1] = rgb.g;
+ p[2] = rgb.r;
+ }
+}
+
+void Screen::Scroll(){
+ unsigned int lines = binfo->screeny / fonth;
+ unsigned int stride = binfo->screenx * binfo->vmode / 8;
+ unsigned int cstride = stride * fonth;
+
+ //1\81`(lines - 1)\8ds\96Ú\82ð1\8ds\8fã\82Ö\82¸\82ç\82·
+ memmove(binfo->vram
+ , binfo->vram + cstride
+ , cstride * (lines - 1));
+
+ memset(binfo->vram + (lines - 1) * cstride, 0, cstride);
+}
--- /dev/null
+#pragma once
+#include <new>
+#include "ata/ataio.h"
+#include "bootpack.h"
+#include <stdarg.h>
+
+class Screen{
+public:
+ static void Init(BOOTINFO *binfo);
+ static Screen &Inst(){
+ return *(Screen *)buf;
+ }
+
+
+ static const int fontw = 8, fonth = 16;
+
+ void printf(const char *format, ...);
+ void vprintf(const char *format, va_list ap);
+ void puts(const char *s);
+
+ struct RGB;
+ void SetPixel(int x, int y, const RGB &rgb);
+
+ void Scroll();
+
+ class Pointer{
+ int px, py;
+ const int w, h;
+ public:
+ Pointer(BOOTINFO *binfo):px(0),py(0),w(binfo->screenx),h(binfo->screeny){
+ }
+ int getx(){return px;}
+ int gety(){return py;}
+ int NextChar(){
+ int oldpy = py;
+ px += Screen::fontw;
+ if(px + Screen::fontw > w){
+ px = 0;
+ py += Screen::fonth;
+ if(py + Screen::fonth > h){
+ px = 0;
+ py = oldpy;
+ return 1;
+ }
+ }
+ return 0;
+ }
+ int NewLine(){
+ px = 0;
+ py += Screen::fonth;
+ if(py + Screen::fonth > h){
+ px = 0;
+ py -= Screen::fonth;
+ return 1;
+ }
+ return 0;
+ }
+ }pt;
+
+ struct RGB{
+ BYTE r,g,b;
+ RGB(BYTE r, BYTE g, BYTE b):r(r),g(g),b(b){}
+ BYTE col8()const{
+ return (r & 0xE0) | ((g >> 3) & 0x1C) | ((b >> 6) & 0x03);
+ }
+ };
+private:
+ static BYTE buf[];
+ static void* operator new(size_t size, void* pbuf){ return pbuf; }
+ Screen(BOOTINFO *binfo);
+
+ BOOTINFO *binfo;
+ char aa[5000];
+ };
\ No newline at end of file
--- /dev/null
+ .file "screen.cpp"
+ .intel_syntax noprefix
+ .section .debug_abbrev,"dr"
+Ldebug_abbrev0:
+ .section .debug_info,"dr"
+Ldebug_info0:
+ .section .debug_line,"dr"
+Ldebug_line0:
+ .text
+Ltext0:
+ .section .text$_ZN6Screen4InstEv,"x"
+ .linkonce discard
+.globl __ZN6Screen4InstEv
+ .def __ZN6Screen4InstEv; .scl 2; .type 32; .endef
+__ZN6Screen4InstEv:
+LFB13:
+ .file 1 "screen.h"
+ .loc 1 8 0
+ push ebp
+LCFI0:
+ mov ebp, esp
+LCFI1:
+ .loc 1 9 0
+ mov eax, OFFSET FLAT:__ZN6Screen3bufE
+ .loc 1 10 0
+ leave
+LCFI2:
+ ret
+LFE13:
+ .section .text$_ZN6Screen7PointerC1EP8BOOTINFO,"x"
+ .linkonce discard
+ .align 2
+.globl __ZN6Screen7PointerC1EP8BOOTINFO
+ .def __ZN6Screen7PointerC1EP8BOOTINFO; .scl 2; .type 32; .endef
+__ZN6Screen7PointerC1EP8BOOTINFO:
+LFB16:
+ .loc 1 27 0
+ push ebp
+LCFI3:
+ mov ebp, esp
+LCFI4:
+LBB2:
+ .loc 1 27 0
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [eax], 0
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [eax+4], 0
+ mov eax, DWORD PTR [ebp+12]
+ mov ax, WORD PTR [eax+4]
+ movzx edx, ax
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [eax+8], edx
+ mov eax, DWORD PTR [ebp+12]
+ mov ax, WORD PTR [eax+6]
+ movzx edx, ax
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [eax+12], edx
+LBE2:
+ .loc 1 28 0
+ leave
+LCFI5:
+ ret
+LFE16:
+ .section .text$_ZN6Screen7Pointer4getxEv,"x"
+ .linkonce discard
+ .align 2
+.globl __ZN6Screen7Pointer4getxEv
+ .def __ZN6Screen7Pointer4getxEv; .scl 2; .type 32; .endef
+__ZN6Screen7Pointer4getxEv:
+LFB17:
+ .loc 1 29 0
+ push ebp
+LCFI6:
+ mov ebp, esp
+LCFI7:
+ .loc 1 29 0
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax]
+ leave
+LCFI8:
+ ret
+LFE17:
+ .section .text$_ZN6Screen7Pointer4getyEv,"x"
+ .linkonce discard
+ .align 2
+.globl __ZN6Screen7Pointer4getyEv
+ .def __ZN6Screen7Pointer4getyEv; .scl 2; .type 32; .endef
+__ZN6Screen7Pointer4getyEv:
+LFB18:
+ .loc 1 30 0
+ push ebp
+LCFI9:
+ mov ebp, esp
+LCFI10:
+ .loc 1 30 0
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+4]
+ leave
+LCFI11:
+ ret
+LFE18:
+ .section .text$_ZN6Screen7Pointer8NextCharEv,"x"
+ .linkonce discard
+ .align 2
+.globl __ZN6Screen7Pointer8NextCharEv
+ .def __ZN6Screen7Pointer8NextCharEv; .scl 2; .type 32; .endef
+__ZN6Screen7Pointer8NextCharEv:
+LFB19:
+ .loc 1 31 0
+ push ebp
+LCFI12:
+ mov ebp, esp
+LCFI13:
+ sub esp, 16
+LCFI14:
+LBB3:
+ .loc 1 32 0
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+4]
+ mov DWORD PTR [ebp-4], eax
+ .loc 1 33 0
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax]
+ lea edx, [eax+8]
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [eax], edx
+ .loc 1 34 0
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax]
+ lea edx, [eax+8]
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+8]
+ cmp edx, eax
+ jle L6
+ .loc 1 35 0
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [eax], 0
+ .loc 1 36 0
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+4]
+ lea edx, [eax+16]
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [eax+4], edx
+ .loc 1 37 0
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+4]
+ lea edx, [eax+16]
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+12]
+ cmp edx, eax
+ jle L6
+ .loc 1 38 0
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [eax], 0
+ .loc 1 39 0
+ mov eax, DWORD PTR [ebp+8]
+ mov edx, DWORD PTR [ebp-4]
+ mov DWORD PTR [eax+4], edx
+ .loc 1 40 0
+ mov eax, 1
+ jmp L8
+L6:
+ .loc 1 43 0
+ mov eax, 0
+L8:
+LBE3:
+ .loc 1 44 0
+ leave
+LCFI15:
+ ret
+LFE19:
+ .section .text$_ZN6Screen7Pointer7NewLineEv,"x"
+ .linkonce discard
+ .align 2
+.globl __ZN6Screen7Pointer7NewLineEv
+ .def __ZN6Screen7Pointer7NewLineEv; .scl 2; .type 32; .endef
+__ZN6Screen7Pointer7NewLineEv:
+LFB20:
+ .loc 1 45 0
+ push ebp
+LCFI16:
+ mov ebp, esp
+LCFI17:
+ .loc 1 46 0
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [eax], 0
+ .loc 1 47 0
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+4]
+ lea edx, [eax+16]
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [eax+4], edx
+ .loc 1 48 0
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+4]
+ lea edx, [eax+16]
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+12]
+ cmp edx, eax
+ jle L10
+ .loc 1 49 0
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [eax], 0
+ .loc 1 50 0
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+4]
+ lea edx, [eax-16]
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [eax+4], edx
+ .loc 1 51 0
+ mov eax, 1
+ jmp L11
+L10:
+ .loc 1 53 0
+ mov eax, 0
+L11:
+ .loc 1 54 0
+ leave
+LCFI18:
+ ret
+LFE20:
+ .section .text$_ZN6Screen3RGBC1Ehhh,"x"
+ .linkonce discard
+ .align 2
+.globl __ZN6Screen3RGBC1Ehhh
+ .def __ZN6Screen3RGBC1Ehhh; .scl 2; .type 32; .endef
+__ZN6Screen3RGBC1Ehhh:
+LFB23:
+ .loc 1 59 0
+ push ebp
+LCFI19:
+ mov ebp, esp
+LCFI20:
+ sub esp, 12
+LCFI21:
+ mov ecx, DWORD PTR [ebp+12]
+ mov edx, DWORD PTR [ebp+16]
+ mov eax, DWORD PTR [ebp+20]
+ mov BYTE PTR [ebp-4], cl
+ mov BYTE PTR [ebp-8], dl
+ mov BYTE PTR [ebp-12], al
+LBB4:
+ .loc 1 59 0
+ mov eax, DWORD PTR [ebp+8]
+ mov dl, BYTE PTR [ebp-4]
+ mov BYTE PTR [eax], dl
+ mov eax, DWORD PTR [ebp+8]
+ mov dl, BYTE PTR [ebp-8]
+ mov BYTE PTR [eax+1], dl
+ mov eax, DWORD PTR [ebp+8]
+ mov dl, BYTE PTR [ebp-12]
+ mov BYTE PTR [eax+2], dl
+LBE4:
+ leave
+LCFI22:
+ ret
+LFE23:
+ .section .text$_ZNK6Screen3RGB4col8Ev,"x"
+ .linkonce discard
+ .align 2
+.globl __ZNK6Screen3RGB4col8Ev
+ .def __ZNK6Screen3RGB4col8Ev; .scl 2; .type 32; .endef
+__ZNK6Screen3RGB4col8Ev:
+LFB24:
+ .loc 1 60 0
+ push ebp
+LCFI23:
+ mov ebp, esp
+LCFI24:
+ .loc 1 61 0
+ mov eax, DWORD PTR [ebp+8]
+ mov al, BYTE PTR [eax]
+ mov dl, al
+ and edx, -32
+ mov eax, DWORD PTR [ebp+8]
+ mov al, BYTE PTR [eax+1]
+ movzx eax, al
+ sar eax, 3
+ and eax, 28
+ or edx, eax
+ mov eax, DWORD PTR [ebp+8]
+ mov al, BYTE PTR [eax+2]
+ shr al, 6
+ or eax, edx
+ .loc 1 62 0
+ leave
+LCFI25:
+ ret
+LFE24:
+ .section .text$_ZN6ScreennwEjPv,"x"
+ .linkonce discard
+.globl __ZN6ScreennwEjPv
+ .def __ZN6ScreennwEjPv; .scl 2; .type 32; .endef
+__ZN6ScreennwEjPv:
+LFB25:
+ .loc 1 66 0
+ push ebp
+LCFI26:
+ mov ebp, esp
+LCFI27:
+ .loc 1 66 0
+ mov eax, DWORD PTR [ebp+12]
+ leave
+LCFI28:
+ ret
+LFE25:
+.globl _hankakufont
+ .data
+ .align 32
+_hankakufont:
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -86
+ .byte -86
+ .byte -126
+ .byte -126
+ .byte -86
+ .byte -110
+ .byte 68
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 56
+ .byte 124
+ .byte -2
+ .byte -42
+ .byte -42
+ .byte -2
+ .byte -2
+ .byte -42
+ .byte -18
+ .byte 124
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 108
+ .byte -2
+ .byte -2
+ .byte -2
+ .byte 124
+ .byte 56
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 56
+ .byte 124
+ .byte -2
+ .byte 124
+ .byte 56
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 56
+ .byte 84
+ .byte -2
+ .byte 84
+ .byte 16
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 56
+ .byte 124
+ .byte -2
+ .byte -42
+ .byte 16
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 24
+ .byte 60
+ .byte 60
+ .byte 24
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -25
+ .byte -61
+ .byte -61
+ .byte -25
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 60
+ .byte 102
+ .byte 66
+ .byte 66
+ .byte 102
+ .byte 60
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -61
+ .byte -103
+ .byte -67
+ .byte -67
+ .byte -103
+ .byte -61
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte 0
+ .byte 16
+ .byte 56
+ .byte 84
+ .byte -110
+ .byte 16
+ .byte 16
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 16
+ .byte 16
+ .byte -2
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 12
+ .byte 14
+ .byte 11
+ .byte 11
+ .byte 10
+ .byte 8
+ .byte 8
+ .byte 24
+ .byte 120
+ .byte -8
+ .byte 112
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 31
+ .byte 31
+ .byte 17
+ .byte 17
+ .byte 17
+ .byte 17
+ .byte 17
+ .byte 17
+ .byte 119
+ .byte -1
+ .byte 102
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 84
+ .byte 56
+ .byte 40
+ .byte 56
+ .byte 84
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -128
+ .byte -64
+ .byte -32
+ .byte -16
+ .byte -8
+ .byte -4
+ .byte -2
+ .byte -4
+ .byte -8
+ .byte -16
+ .byte -32
+ .byte -64
+ .byte -128
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 2
+ .byte 6
+ .byte 14
+ .byte 30
+ .byte 62
+ .byte 126
+ .byte -2
+ .byte 126
+ .byte 62
+ .byte 30
+ .byte 14
+ .byte 6
+ .byte 2
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 56
+ .byte 84
+ .byte -110
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte -110
+ .byte 84
+ .byte 56
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 68
+ .byte 68
+ .byte 68
+ .byte 68
+ .byte 68
+ .byte 68
+ .byte 68
+ .byte 68
+ .byte 0
+ .byte 0
+ .byte 68
+ .byte 68
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 62
+ .byte 74
+ .byte -118
+ .byte -118
+ .byte -118
+ .byte -118
+ .byte 74
+ .byte 58
+ .byte 10
+ .byte 10
+ .byte 10
+ .byte 10
+ .byte 10
+ .byte 0
+ .byte 0
+ .byte 124
+ .byte -126
+ .byte 64
+ .byte 32
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 8
+ .byte 4
+ .byte -126
+ .byte 124
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -2
+ .byte -2
+ .byte -2
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 56
+ .byte 84
+ .byte -110
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte -110
+ .byte 84
+ .byte 56
+ .byte 16
+ .byte 124
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 56
+ .byte 84
+ .byte -110
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte -110
+ .byte 84
+ .byte 56
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 8
+ .byte 4
+ .byte -2
+ .byte 4
+ .byte 8
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 32
+ .byte 64
+ .byte -2
+ .byte 64
+ .byte 32
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -128
+ .byte -128
+ .byte -2
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 40
+ .byte 68
+ .byte -2
+ .byte 68
+ .byte 40
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 56
+ .byte 56
+ .byte 124
+ .byte 124
+ .byte -2
+ .byte -2
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -2
+ .byte -2
+ .byte 124
+ .byte 124
+ .byte 56
+ .byte 56
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 40
+ .byte 40
+ .byte 40
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 68
+ .byte 68
+ .byte 68
+ .byte -2
+ .byte 68
+ .byte 68
+ .byte 68
+ .byte 68
+ .byte 68
+ .byte -2
+ .byte 68
+ .byte 68
+ .byte 68
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 58
+ .byte 86
+ .byte -110
+ .byte -110
+ .byte -112
+ .byte 80
+ .byte 56
+ .byte 20
+ .byte 18
+ .byte -110
+ .byte -110
+ .byte -44
+ .byte -72
+ .byte 16
+ .byte 16
+ .byte 98
+ .byte -110
+ .byte -108
+ .byte -108
+ .byte 104
+ .byte 8
+ .byte 16
+ .byte 16
+ .byte 32
+ .byte 44
+ .byte 82
+ .byte 82
+ .byte -110
+ .byte -116
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 112
+ .byte -120
+ .byte -120
+ .byte -120
+ .byte -112
+ .byte 96
+ .byte 71
+ .byte -94
+ .byte -110
+ .byte -118
+ .byte -124
+ .byte 70
+ .byte 57
+ .byte 0
+ .byte 0
+ .byte 4
+ .byte 8
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 2
+ .byte 4
+ .byte 8
+ .byte 8
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 8
+ .byte 8
+ .byte 4
+ .byte 2
+ .byte 0
+ .byte -128
+ .byte 64
+ .byte 32
+ .byte 32
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 32
+ .byte 32
+ .byte 64
+ .byte -128
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte -110
+ .byte 84
+ .byte 56
+ .byte 84
+ .byte -110
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte -2
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 24
+ .byte 24
+ .byte 8
+ .byte 8
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -2
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 24
+ .byte 24
+ .byte 0
+ .byte 0
+ .byte 2
+ .byte 2
+ .byte 4
+ .byte 4
+ .byte 8
+ .byte 8
+ .byte 8
+ .byte 16
+ .byte 16
+ .byte 32
+ .byte 32
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte -128
+ .byte -128
+ .byte 0
+ .byte 24
+ .byte 36
+ .byte 36
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 36
+ .byte 36
+ .byte 24
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 8
+ .byte 24
+ .byte 40
+ .byte 8
+ .byte 8
+ .byte 8
+ .byte 8
+ .byte 8
+ .byte 8
+ .byte 8
+ .byte 8
+ .byte 8
+ .byte 62
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 24
+ .byte 36
+ .byte 66
+ .byte 66
+ .byte 2
+ .byte 4
+ .byte 8
+ .byte 16
+ .byte 32
+ .byte 32
+ .byte 64
+ .byte 64
+ .byte 126
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 24
+ .byte 36
+ .byte 66
+ .byte 2
+ .byte 2
+ .byte 4
+ .byte 24
+ .byte 4
+ .byte 2
+ .byte 2
+ .byte 66
+ .byte 36
+ .byte 24
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 12
+ .byte 12
+ .byte 12
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 36
+ .byte 36
+ .byte 68
+ .byte 126
+ .byte 4
+ .byte 4
+ .byte 30
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 124
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte 88
+ .byte 100
+ .byte 2
+ .byte 2
+ .byte 2
+ .byte 2
+ .byte 66
+ .byte 36
+ .byte 24
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 24
+ .byte 36
+ .byte 66
+ .byte 64
+ .byte 88
+ .byte 100
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 36
+ .byte 24
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 126
+ .byte 66
+ .byte 66
+ .byte 4
+ .byte 4
+ .byte 8
+ .byte 8
+ .byte 8
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 24
+ .byte 36
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 36
+ .byte 24
+ .byte 36
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 36
+ .byte 24
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 24
+ .byte 36
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 38
+ .byte 26
+ .byte 2
+ .byte 66
+ .byte 36
+ .byte 24
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 24
+ .byte 24
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 24
+ .byte 24
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 24
+ .byte 24
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 24
+ .byte 24
+ .byte 8
+ .byte 8
+ .byte 16
+ .byte 0
+ .byte 2
+ .byte 4
+ .byte 8
+ .byte 16
+ .byte 32
+ .byte 64
+ .byte -128
+ .byte -128
+ .byte 64
+ .byte 32
+ .byte 16
+ .byte 8
+ .byte 4
+ .byte 2
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -2
+ .byte 0
+ .byte 0
+ .byte -2
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -128
+ .byte 64
+ .byte 32
+ .byte 16
+ .byte 8
+ .byte 4
+ .byte 2
+ .byte 2
+ .byte 4
+ .byte 8
+ .byte 16
+ .byte 32
+ .byte 64
+ .byte -128
+ .byte 0
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 4
+ .byte 8
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 24
+ .byte 24
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -102
+ .byte -86
+ .byte -86
+ .byte -86
+ .byte -86
+ .byte -86
+ .byte -100
+ .byte -128
+ .byte 70
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 24
+ .byte 24
+ .byte 24
+ .byte 24
+ .byte 36
+ .byte 36
+ .byte 36
+ .byte 36
+ .byte 126
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte -25
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -16
+ .byte 72
+ .byte 68
+ .byte 68
+ .byte 68
+ .byte 72
+ .byte 120
+ .byte 68
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 68
+ .byte -8
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 58
+ .byte 70
+ .byte 66
+ .byte -126
+ .byte -128
+ .byte -128
+ .byte -128
+ .byte -128
+ .byte -128
+ .byte -126
+ .byte 66
+ .byte 68
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -8
+ .byte 68
+ .byte 68
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 68
+ .byte 68
+ .byte -8
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -2
+ .byte 66
+ .byte 66
+ .byte 64
+ .byte 64
+ .byte 68
+ .byte 124
+ .byte 68
+ .byte 64
+ .byte 64
+ .byte 66
+ .byte 66
+ .byte -2
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -2
+ .byte 66
+ .byte 66
+ .byte 64
+ .byte 64
+ .byte 68
+ .byte 124
+ .byte 68
+ .byte 68
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte -16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 58
+ .byte 70
+ .byte 66
+ .byte -126
+ .byte -128
+ .byte -128
+ .byte -98
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 66
+ .byte 70
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -25
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 126
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte -25
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 124
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 124
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 31
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte -124
+ .byte 72
+ .byte 48
+ .byte 0
+ .byte 0
+ .byte -25
+ .byte 66
+ .byte 68
+ .byte 72
+ .byte 80
+ .byte 80
+ .byte 96
+ .byte 80
+ .byte 80
+ .byte 72
+ .byte 68
+ .byte 66
+ .byte -25
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -16
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte 66
+ .byte 66
+ .byte -2
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -61
+ .byte 66
+ .byte 102
+ .byte 102
+ .byte 102
+ .byte 90
+ .byte 90
+ .byte 90
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte -25
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -57
+ .byte 66
+ .byte 98
+ .byte 98
+ .byte 82
+ .byte 82
+ .byte 82
+ .byte 74
+ .byte 74
+ .byte 74
+ .byte 70
+ .byte 70
+ .byte -30
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -8
+ .byte 68
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 68
+ .byte 120
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte -16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -110
+ .byte -118
+ .byte 68
+ .byte 58
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -4
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 124
+ .byte 68
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte -25
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 58
+ .byte 70
+ .byte -126
+ .byte -126
+ .byte -128
+ .byte 64
+ .byte 56
+ .byte 4
+ .byte 2
+ .byte -126
+ .byte -126
+ .byte -60
+ .byte -72
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -2
+ .byte -110
+ .byte -110
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 124
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -25
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 36
+ .byte 60
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -25
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 36
+ .byte 36
+ .byte 36
+ .byte 36
+ .byte 24
+ .byte 24
+ .byte 24
+ .byte 24
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -25
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 90
+ .byte 90
+ .byte 90
+ .byte 90
+ .byte 36
+ .byte 36
+ .byte 36
+ .byte 36
+ .byte 36
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -25
+ .byte 66
+ .byte 66
+ .byte 36
+ .byte 36
+ .byte 36
+ .byte 24
+ .byte 36
+ .byte 36
+ .byte 36
+ .byte 66
+ .byte 66
+ .byte -25
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -18
+ .byte 68
+ .byte 68
+ .byte 68
+ .byte 40
+ .byte 40
+ .byte 40
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 124
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -2
+ .byte -124
+ .byte -124
+ .byte 8
+ .byte 8
+ .byte 16
+ .byte 16
+ .byte 32
+ .byte 32
+ .byte 64
+ .byte 66
+ .byte -126
+ .byte -2
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 62
+ .byte 32
+ .byte 32
+ .byte 32
+ .byte 32
+ .byte 32
+ .byte 32
+ .byte 32
+ .byte 32
+ .byte 32
+ .byte 32
+ .byte 32
+ .byte 32
+ .byte 62
+ .byte 0
+ .byte -128
+ .byte -128
+ .byte 64
+ .byte 64
+ .byte 32
+ .byte 32
+ .byte 32
+ .byte 16
+ .byte 16
+ .byte 8
+ .byte 8
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 2
+ .byte 2
+ .byte 0
+ .byte 124
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 124
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 40
+ .byte 68
+ .byte -126
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -2
+ .byte 0
+ .byte 16
+ .byte 8
+ .byte 4
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 112
+ .byte 8
+ .byte 4
+ .byte 60
+ .byte 68
+ .byte -124
+ .byte -124
+ .byte -116
+ .byte 118
+ .byte 0
+ .byte 0
+ .byte -64
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte 88
+ .byte 100
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 100
+ .byte 88
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 48
+ .byte 76
+ .byte -124
+ .byte -124
+ .byte -128
+ .byte -128
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 12
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 52
+ .byte 76
+ .byte -124
+ .byte -124
+ .byte -124
+ .byte -124
+ .byte -124
+ .byte 76
+ .byte 54
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -4
+ .byte -128
+ .byte -126
+ .byte 66
+ .byte 60
+ .byte 0
+ .byte 0
+ .byte 14
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 124
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 124
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 54
+ .byte 76
+ .byte -124
+ .byte -124
+ .byte -124
+ .byte -124
+ .byte 76
+ .byte 52
+ .byte 4
+ .byte 4
+ .byte 120
+ .byte -64
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte 88
+ .byte 100
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte -29
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 48
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 4
+ .byte 4
+ .byte 0
+ .byte 0
+ .byte 12
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 4
+ .byte 8
+ .byte 8
+ .byte 48
+ .byte -64
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte 78
+ .byte 68
+ .byte 72
+ .byte 80
+ .byte 96
+ .byte 80
+ .byte 72
+ .byte 68
+ .byte -26
+ .byte 0
+ .byte 0
+ .byte 48
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -10
+ .byte 73
+ .byte 73
+ .byte 73
+ .byte 73
+ .byte 73
+ .byte 73
+ .byte 73
+ .byte -37
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -40
+ .byte 100
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte -29
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -40
+ .byte 100
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 100
+ .byte 88
+ .byte 64
+ .byte -32
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 52
+ .byte 76
+ .byte -124
+ .byte -124
+ .byte -124
+ .byte -124
+ .byte -124
+ .byte 76
+ .byte 52
+ .byte 4
+ .byte 14
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -36
+ .byte 98
+ .byte 66
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte 64
+ .byte -32
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 122
+ .byte -122
+ .byte -126
+ .byte -64
+ .byte 56
+ .byte 6
+ .byte -126
+ .byte -62
+ .byte -68
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 124
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 14
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -58
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 70
+ .byte 59
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -25
+ .byte 66
+ .byte 66
+ .byte 66
+ .byte 36
+ .byte 36
+ .byte 36
+ .byte 24
+ .byte 24
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -25
+ .byte 66
+ .byte 66
+ .byte 90
+ .byte 90
+ .byte 90
+ .byte 36
+ .byte 36
+ .byte 36
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -58
+ .byte 68
+ .byte 40
+ .byte 40
+ .byte 16
+ .byte 40
+ .byte 40
+ .byte 68
+ .byte -58
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -25
+ .byte 66
+ .byte 66
+ .byte 36
+ .byte 36
+ .byte 36
+ .byte 24
+ .byte 24
+ .byte 16
+ .byte 16
+ .byte 96
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -2
+ .byte -126
+ .byte -124
+ .byte 8
+ .byte 16
+ .byte 32
+ .byte 66
+ .byte -126
+ .byte -2
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 6
+ .byte 8
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 96
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 8
+ .byte 6
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 96
+ .byte 16
+ .byte 8
+ .byte 8
+ .byte 8
+ .byte 8
+ .byte 6
+ .byte 8
+ .byte 8
+ .byte 8
+ .byte 8
+ .byte 16
+ .byte 96
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 114
+ .byte -116
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 40
+ .byte 68
+ .byte -126
+ .byte -2
+ .byte -126
+ .byte -2
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -128
+ .byte -128
+ .byte -128
+ .byte -128
+ .byte -128
+ .byte -128
+ .byte -128
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 16
+ .byte 32
+ .byte 0
+ .byte 0
+ .byte 36
+ .byte 36
+ .byte 0
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 66
+ .byte 62
+ .byte 0
+ .byte 0
+ .byte 12
+ .byte 8
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -2
+ .byte -128
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 40
+ .byte 68
+ .byte 0
+ .byte 120
+ .byte 4
+ .byte 4
+ .byte 60
+ .byte 68
+ .byte -124
+ .byte -124
+ .byte 68
+ .byte 62
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 36
+ .byte 36
+ .byte 0
+ .byte 120
+ .byte 4
+ .byte 4
+ .byte 60
+ .byte 68
+ .byte -124
+ .byte -124
+ .byte 68
+ .byte 62
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 8
+ .byte 4
+ .byte 0
+ .byte 0
+ .byte 120
+ .byte 4
+ .byte 4
+ .byte 60
+ .byte 68
+ .byte -124
+ .byte -124
+ .byte 68
+ .byte 62
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 24
+ .byte 36
+ .byte 24
+ .byte 0
+ .byte 120
+ .byte 4
+ .byte 4
+ .byte 60
+ .byte 68
+ .byte -124
+ .byte -124
+ .byte 68
+ .byte 62
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 60
+ .byte 66
+ .byte -128
+ .byte -128
+ .byte -128
+ .byte -128
+ .byte -128
+ .byte 66
+ .byte 60
+ .byte 8
+ .byte 16
+ .byte 0
+ .byte 16
+ .byte 40
+ .byte 68
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -2
+ .byte -128
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 36
+ .byte 36
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -2
+ .byte -128
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 8
+ .byte 4
+ .byte 0
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -2
+ .byte -128
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 36
+ .byte 36
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 40
+ .byte 68
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 8
+ .byte 4
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 36
+ .byte 36
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -2
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -2
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 0
+ .byte 0
+ .byte 12
+ .byte 8
+ .byte 16
+ .byte -2
+ .byte -128
+ .byte -128
+ .byte -128
+ .byte -128
+ .byte -8
+ .byte -128
+ .byte -128
+ .byte -128
+ .byte -128
+ .byte -2
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 96
+ .byte 28
+ .byte 18
+ .byte 114
+ .byte -98
+ .byte -112
+ .byte -112
+ .byte -110
+ .byte 108
+ .byte 0
+ .byte 0
+ .byte 12
+ .byte 16
+ .byte 32
+ .byte 40
+ .byte 40
+ .byte 40
+ .byte -2
+ .byte 40
+ .byte 40
+ .byte 40
+ .byte 40
+ .byte 40
+ .byte 40
+ .byte 40
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 40
+ .byte 68
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 36
+ .byte 36
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 8
+ .byte 4
+ .byte 0
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 40
+ .byte 68
+ .byte 0
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 66
+ .byte 62
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 8
+ .byte 4
+ .byte 0
+ .byte 0
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 66
+ .byte 62
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 36
+ .byte 36
+ .byte 0
+ .byte -126
+ .byte -126
+ .byte 68
+ .byte 68
+ .byte 40
+ .byte 40
+ .byte 16
+ .byte 16
+ .byte 32
+ .byte 32
+ .byte 64
+ .byte 36
+ .byte 36
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 36
+ .byte 36
+ .byte 0
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 40
+ .byte 40
+ .byte 40
+ .byte 60
+ .byte 106
+ .byte -88
+ .byte -88
+ .byte -88
+ .byte -88
+ .byte -88
+ .byte 106
+ .byte 60
+ .byte 40
+ .byte 40
+ .byte 40
+ .byte 0
+ .byte 12
+ .byte 18
+ .byte 32
+ .byte 32
+ .byte 32
+ .byte -4
+ .byte 32
+ .byte 32
+ .byte 32
+ .byte 96
+ .byte -96
+ .byte -78
+ .byte 76
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -126
+ .byte -126
+ .byte 68
+ .byte 40
+ .byte 16
+ .byte -2
+ .byte 16
+ .byte 16
+ .byte -2
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -32
+ .byte -112
+ .byte -120
+ .byte -120
+ .byte -120
+ .byte -108
+ .byte -28
+ .byte -97
+ .byte -124
+ .byte -124
+ .byte -124
+ .byte -124
+ .byte -124
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 12
+ .byte 18
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte -2
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte -112
+ .byte 96
+ .byte 0
+ .byte 0
+ .byte 12
+ .byte 8
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 120
+ .byte 4
+ .byte 4
+ .byte 60
+ .byte 68
+ .byte -124
+ .byte -124
+ .byte 68
+ .byte 62
+ .byte 0
+ .byte 0
+ .byte 12
+ .byte 8
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 12
+ .byte 8
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 12
+ .byte 8
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 66
+ .byte 62
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 18
+ .byte 42
+ .byte 36
+ .byte 0
+ .byte -8
+ .byte -124
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 0
+ .byte 0
+ .byte 18
+ .byte 42
+ .byte 36
+ .byte 0
+ .byte -126
+ .byte -62
+ .byte -62
+ .byte -94
+ .byte -110
+ .byte -110
+ .byte -118
+ .byte -122
+ .byte -122
+ .byte -126
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 120
+ .byte 4
+ .byte 4
+ .byte 60
+ .byte 68
+ .byte -124
+ .byte -124
+ .byte 68
+ .byte 62
+ .byte 0
+ .byte -2
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 56
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 0
+ .byte -2
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 32
+ .byte 68
+ .byte -126
+ .byte -126
+ .byte -126
+ .byte 68
+ .byte 56
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -2
+ .byte -128
+ .byte -128
+ .byte -128
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -2
+ .byte 2
+ .byte 2
+ .byte 2
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 48
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte -2
+ .byte 0
+ .byte 120
+ .byte 4
+ .byte 56
+ .byte 64
+ .byte 124
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 48
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte -2
+ .byte 0
+ .byte 24
+ .byte 40
+ .byte 72
+ .byte 124
+ .byte 8
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 18
+ .byte 36
+ .byte 72
+ .byte -112
+ .byte -112
+ .byte 72
+ .byte 36
+ .byte 18
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -112
+ .byte 72
+ .byte 36
+ .byte 18
+ .byte 18
+ .byte 36
+ .byte 72
+ .byte -112
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 17
+ .byte 68
+ .byte 17
+ .byte 68
+ .byte 17
+ .byte 68
+ .byte 17
+ .byte 68
+ .byte 17
+ .byte 68
+ .byte 17
+ .byte 68
+ .byte 17
+ .byte 68
+ .byte 17
+ .byte 68
+ .byte 85
+ .byte -86
+ .byte 85
+ .byte -86
+ .byte 85
+ .byte -86
+ .byte 85
+ .byte -86
+ .byte 85
+ .byte -86
+ .byte 85
+ .byte -86
+ .byte 85
+ .byte -86
+ .byte 85
+ .byte -86
+ .byte 119
+ .byte -35
+ .byte 119
+ .byte -35
+ .byte 119
+ .byte -35
+ .byte 119
+ .byte -35
+ .byte 119
+ .byte -35
+ .byte 119
+ .byte -35
+ .byte 119
+ .byte -35
+ .byte 119
+ .byte -35
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte -16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte -16
+ .byte 16
+ .byte -16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte -12
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -4
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -16
+ .byte 16
+ .byte -16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte -12
+ .byte 4
+ .byte -12
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -4
+ .byte 4
+ .byte -12
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte -12
+ .byte 4
+ .byte -4
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte -4
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte -16
+ .byte 16
+ .byte -16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 31
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte -1
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -1
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 31
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -1
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte -1
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 31
+ .byte 16
+ .byte 31
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 23
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 23
+ .byte 16
+ .byte 31
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 31
+ .byte 16
+ .byte 23
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte -9
+ .byte 0
+ .byte -1
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -1
+ .byte 0
+ .byte -9
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 23
+ .byte 16
+ .byte 23
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -1
+ .byte 0
+ .byte -1
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte -9
+ .byte 0
+ .byte -9
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte -1
+ .byte 0
+ .byte -1
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte -1
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -1
+ .byte 0
+ .byte -1
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -1
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 31
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 31
+ .byte 16
+ .byte 31
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 31
+ .byte 16
+ .byte 31
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 31
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte -9
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 20
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte -1
+ .byte 16
+ .byte -1
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte -16
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 31
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte 16
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -16
+ .byte -16
+ .byte -16
+ .byte -16
+ .byte -16
+ .byte -16
+ .byte -16
+ .byte -16
+ .byte -16
+ .byte -16
+ .byte -16
+ .byte -16
+ .byte -16
+ .byte -16
+ .byte -16
+ .byte -16
+ .byte 15
+ .byte 15
+ .byte 15
+ .byte 15
+ .byte 15
+ .byte 15
+ .byte 15
+ .byte 15
+ .byte 15
+ .byte 15
+ .byte 15
+ .byte 15
+ .byte 15
+ .byte 15
+ .byte 15
+ .byte 15
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte -1
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+.globl __ZN6Screen3bufE
+ .bss
+__ZN6Screen3bufE:
+ .space 20
+ .text
+.globl _debugprint
+ .def _debugprint; .scl 2; .type 32; .endef
+_debugprint:
+LFB26:
+ .file 2 "screen.cpp"
+ .loc 2 9 0
+ push ebp
+LCFI29:
+ mov ebp, esp
+LCFI30:
+ sub esp, 2088
+LCFI31:
+LBB5:
+ .loc 2 14 0
+ lea eax, [ebp+12]
+ mov DWORD PTR [ebp-16], eax
+ .loc 2 15 0
+ mov eax, DWORD PTR [ebp-16]
+ mov DWORD PTR [esp+8], eax
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [esp+4], eax
+ lea eax, [ebp-2064]
+ mov DWORD PTR [esp], eax
+ call _vsprintf
+ mov DWORD PTR [ebp-12], eax
+ .loc 2 18 0
+ call __ZN6Screen4InstEv
+ lea edx, [ebp-2064]
+ mov DWORD PTR [esp+4], edx
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen4putsEPKc
+LBE5:
+ .loc 2 19 0
+ leave
+LCFI32:
+ ret
+LFE26:
+ .align 2
+.globl __ZN6ScreenC2EP8BOOTINFO
+ .def __ZN6ScreenC2EP8BOOTINFO; .scl 2; .type 32; .endef
+__ZN6ScreenC2EP8BOOTINFO:
+LFB28:
+ .loc 2 21 0
+ push ebp
+LCFI33:
+ mov ebp, esp
+LCFI34:
+ sub esp, 8
+LCFI35:
+LBB6:
+ .loc 2 21 0
+ mov eax, DWORD PTR [ebp+8]
+ mov edx, DWORD PTR [ebp+12]
+ mov DWORD PTR [esp+4], edx
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen7PointerC1EP8BOOTINFO
+ mov eax, DWORD PTR [ebp+8]
+ mov edx, DWORD PTR [ebp+12]
+ mov DWORD PTR [eax+16], edx
+LBE6:
+ .loc 2 22 0
+ leave
+LCFI36:
+ ret
+LFE28:
+.globl __ZN6ScreenC1EP8BOOTINFO
+ .def __ZN6ScreenC1EP8BOOTINFO; .scl 2; .type 32; .endef
+ .set __ZN6ScreenC1EP8BOOTINFO,__ZN6ScreenC2EP8BOOTINFO
+ .align 2
+.globl __ZN6Screen4InitEP8BOOTINFO
+ .def __ZN6Screen4InitEP8BOOTINFO; .scl 2; .type 32; .endef
+__ZN6Screen4InitEP8BOOTINFO:
+LFB30:
+ .loc 2 24 0
+ push ebp
+LCFI37:
+ mov ebp, esp
+LCFI38:
+ sub esp, 8
+LCFI39:
+ .loc 2 25 0
+ mov eax, OFFSET FLAT:__ZN6Screen3bufE
+ mov DWORD PTR [esp+4], eax
+ mov DWORD PTR [esp], 20
+ call __ZN6ScreennwEjPv
+ mov edx, DWORD PTR [ebp+8]
+ mov DWORD PTR [esp+4], edx
+ mov DWORD PTR [esp], eax
+ call __ZN6ScreenC1EP8BOOTINFO
+ .loc 2 26 0
+ leave
+LCFI40:
+ ret
+LFE30:
+ .align 2
+.globl __ZN6Screen6printfEPKcz
+ .def __ZN6Screen6printfEPKcz; .scl 2; .type 32; .endef
+__ZN6Screen6printfEPKcz:
+LFB31:
+ .loc 2 28 0
+ push ebp
+LCFI41:
+ mov ebp, esp
+LCFI42:
+ sub esp, 2088
+LCFI43:
+LBB7:
+ .loc 2 33 0
+ lea eax, [ebp+16]
+ mov DWORD PTR [ebp-16], eax
+ .loc 2 34 0
+ mov eax, DWORD PTR [ebp-16]
+ mov DWORD PTR [esp+8], eax
+ mov eax, DWORD PTR [ebp+12]
+ mov DWORD PTR [esp+4], eax
+ lea eax, [ebp-2064]
+ mov DWORD PTR [esp], eax
+ call _vsprintf
+ mov DWORD PTR [ebp-12], eax
+ .loc 2 37 0
+ lea eax, [ebp-2064]
+ mov DWORD PTR [esp+4], eax
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen4putsEPKc
+LBE7:
+ .loc 2 38 0
+ leave
+LCFI44:
+ ret
+LFE31:
+ .align 2
+.globl __ZN6Screen4putsEPKc
+ .def __ZN6Screen4putsEPKc; .scl 2; .type 32; .endef
+__ZN6Screen4putsEPKc:
+LFB32:
+ .loc 2 40 0
+ push ebp
+LCFI45:
+ mov ebp, esp
+LCFI46:
+ push ebx
+LCFI47:
+ sub esp, 36
+LCFI48:
+LBB8:
+LBB9:
+ .loc 2 41 0
+ jmp L20
+L29:
+LBB10:
+LBB11:
+ .loc 2 42 0
+ mov eax, DWORD PTR [ebp+12]
+ mov al, BYTE PTR [eax]
+ cmp al, 10
+ jne L21
+ .loc 2 43 0
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen7Pointer7NewLineEv
+ test eax, eax
+ setne al
+ test al, al
+ je L30
+ .loc 2 44 0
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen6ScrollEv
+ jmp L23
+L21:
+LBB12:
+LBB13:
+ .loc 2 47 0
+ mov DWORD PTR [ebp-12], 0
+ jmp L24
+L28:
+LBB14:
+ .loc 2 48 0
+ mov eax, DWORD PTR [ebp+12]
+ mov al, BYTE PTR [eax]
+ movsx eax, al
+ sal eax, 4
+ add eax, DWORD PTR [ebp-12]
+ add eax, OFFSET FLAT:_hankakufont
+ mov al, BYTE PTR [eax]
+ mov BYTE PTR [ebp-17], al
+LBB15:
+ .loc 2 49 0
+ mov DWORD PTR [ebp-16], 0
+ jmp L25
+L27:
+ .loc 2 50 0
+ movzx edx, BYTE PTR [ebp-17]
+ mov eax, 7
+ sub eax, DWORD PTR [ebp-16]
+ mov ebx, edx
+ mov cl, al
+ sar ebx, cl
+ mov eax, ebx
+ and eax, 1
+ test al, al
+ je L26
+ .loc 2 51 0
+ mov DWORD PTR [esp+12], 255
+ mov DWORD PTR [esp+8], 255
+ mov DWORD PTR [esp+4], 255
+ lea eax, [ebp-20]
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen3RGBC1Ehhh
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen7Pointer4getyEv
+ mov ebx, eax
+ add ebx, DWORD PTR [ebp-12]
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen7Pointer4getxEv
+ add eax, DWORD PTR [ebp-16]
+ lea edx, [ebp-20]
+ mov DWORD PTR [esp+12], edx
+ mov DWORD PTR [esp+8], ebx
+ mov DWORD PTR [esp+4], eax
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen8SetPixelEiiRKNS_3RGBE
+L26:
+ .loc 2 49 0
+ inc DWORD PTR [ebp-16]
+L25:
+ .loc 2 49 0 is_stmt 0 discriminator 1
+ cmp DWORD PTR [ebp-16], 7
+ setle al
+ test al, al
+ jne L27
+LBE15:
+LBE14:
+ .loc 2 47 0 is_stmt 1
+ inc DWORD PTR [ebp-12]
+L24:
+ .loc 2 47 0 is_stmt 0 discriminator 1
+ cmp DWORD PTR [ebp-12], 15
+ setle al
+ test al, al
+ jne L28
+LBE13:
+ .loc 2 55 0 is_stmt 1
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen7Pointer8NextCharEv
+ test eax, eax
+ setne al
+ test al, al
+ je L23
+ .loc 2 56 0
+ mov eax, DWORD PTR [ebp+8]
+ mov DWORD PTR [esp], eax
+ call __ZN6Screen6ScrollEv
+ jmp L23
+L30:
+LBE12:
+ .loc 2 44 0
+ nop
+L23:
+LBE11:
+LBE10:
+ .loc 2 41 0
+ inc DWORD PTR [ebp+12]
+L20:
+ .loc 2 41 0 is_stmt 0 discriminator 1
+ mov eax, DWORD PTR [ebp+12]
+ mov al, BYTE PTR [eax]
+ test al, al
+ setne al
+ test al, al
+ jne L29
+LBE9:
+LBE8:
+ .loc 2 60 0 is_stmt 1
+ add esp, 36
+ pop ebx
+LCFI49:
+ leave
+LCFI50:
+ ret
+LFE32:
+ .align 2
+.globl __ZN6Screen8SetPixelEiiRKNS_3RGBE
+ .def __ZN6Screen8SetPixelEiiRKNS_3RGBE; .scl 2; .type 32; .endef
+__ZN6Screen8SetPixelEiiRKNS_3RGBE:
+LFB33:
+ .loc 2 62 0
+ push ebp
+LCFI51:
+ mov ebp, esp
+LCFI52:
+ push ebx
+LCFI53:
+ sub esp, 20
+LCFI54:
+LBB16:
+LBB17:
+ .loc 2 63 0
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+16]
+ mov al, BYTE PTR [eax+2]
+ cmp al, 8
+ jne L32
+ .loc 2 64 0
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+16]
+ mov edx, DWORD PTR [eax+8]
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+16]
+ mov ax, WORD PTR [eax+4]
+ movzx eax, ax
+ imul eax, DWORD PTR [ebp+16]
+ add eax, DWORD PTR [ebp+12]
+ lea ebx, [edx+eax]
+ mov eax, DWORD PTR [ebp+20]
+ mov DWORD PTR [esp], eax
+ call __ZNK6Screen3RGB4col8Ev
+ mov BYTE PTR [ebx], al
+ jmp L31
+L32:
+LBB18:
+ .loc 2 66 0
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+16]
+ mov ecx, DWORD PTR [eax+8]
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+16]
+ mov ax, WORD PTR [eax+4]
+ movzx eax, ax
+ imul eax, DWORD PTR [ebp+16]
+ mov edx, eax
+ add edx, DWORD PTR [ebp+12]
+ mov eax, edx
+ sal eax
+ add eax, edx
+ lea eax, [ecx+eax]
+ mov DWORD PTR [ebp-8], eax
+ .loc 2 67 0
+ mov eax, DWORD PTR [ebp+20]
+ mov dl, BYTE PTR [eax+2]
+ mov eax, DWORD PTR [ebp-8]
+ mov BYTE PTR [eax], dl
+ .loc 2 68 0
+ mov eax, DWORD PTR [ebp-8]
+ lea edx, [eax+1]
+ mov eax, DWORD PTR [ebp+20]
+ mov al, BYTE PTR [eax+1]
+ mov BYTE PTR [edx], al
+ .loc 2 69 0
+ mov eax, DWORD PTR [ebp-8]
+ lea edx, [eax+2]
+ mov eax, DWORD PTR [ebp+20]
+ mov al, BYTE PTR [eax]
+ mov BYTE PTR [edx], al
+L31:
+LBE18:
+LBE17:
+LBE16:
+ .loc 2 71 0
+ add esp, 20
+ pop ebx
+LCFI55:
+ leave
+LCFI56:
+ ret
+LFE33:
+ .align 2
+.globl __ZN6Screen6ScrollEv
+ .def __ZN6Screen6ScrollEv; .scl 2; .type 32; .endef
+__ZN6Screen6ScrollEv:
+LFB34:
+ .loc 2 73 0
+ push ebp
+LCFI57:
+ mov ebp, esp
+LCFI58:
+ sub esp, 40
+LCFI59:
+LBB19:
+ .loc 2 74 0
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+16]
+ mov ax, WORD PTR [eax+6]
+ shr ax, 4
+ movzx eax, ax
+ mov DWORD PTR [ebp-12], eax
+ .loc 2 75 0
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+16]
+ mov ax, WORD PTR [eax+4]
+ movzx edx, ax
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+16]
+ mov al, BYTE PTR [eax+2]
+ movzx eax, al
+ imul eax, edx
+ test eax, eax
+ jns L35
+ add eax, 7
+L35:
+ sar eax, 3
+ mov DWORD PTR [ebp-16], eax
+ .loc 2 76 0
+ mov eax, DWORD PTR [ebp-16]
+ sal eax, 4
+ mov DWORD PTR [ebp-20], eax
+ .loc 2 81 0
+ mov eax, DWORD PTR [ebp-12]
+ dec eax
+ mov ecx, eax
+ imul ecx, DWORD PTR [ebp-20]
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+16]
+ mov eax, DWORD PTR [eax+8]
+ mov edx, eax
+ add edx, DWORD PTR [ebp-20]
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+16]
+ mov eax, DWORD PTR [eax+8]
+ mov DWORD PTR [esp+8], ecx
+ mov DWORD PTR [esp+4], edx
+ mov DWORD PTR [esp], eax
+ call _memmove
+ .loc 2 83 0
+ mov eax, DWORD PTR [ebp+8]
+ mov eax, DWORD PTR [eax+16]
+ mov edx, DWORD PTR [eax+8]
+ mov eax, DWORD PTR [ebp-12]
+ dec eax
+ imul eax, DWORD PTR [ebp-20]
+ add edx, eax
+ mov eax, DWORD PTR [ebp-20]
+ mov DWORD PTR [esp+8], eax
+ mov DWORD PTR [esp+4], 0
+ mov DWORD PTR [esp], edx
+ call _memset
+LBE19:
+ .loc 2 84 0
+ leave
+LCFI60:
+ ret
+LFE34:
+ .section .debug_frame,"dr"
+Lframe0:
+ .long LECIE0-LSCIE0
+LSCIE0:
+ .long 0xffffffff
+ .byte 0x1
+ .ascii "\0"
+ .uleb128 0x1
+ .sleb128 -4
+ .byte 0x8
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .byte 0x88
+ .uleb128 0x1
+ .align 4
+LECIE0:
+LSFDE0:
+ .long LEFDE0-LASFDE0
+LASFDE0:
+ .secrel32 Lframe0
+ .long LFB13
+ .long LFE13-LFB13
+ .byte 0x4
+ .long LCFI0-LFB13
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI1-LCFI0
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI2-LCFI1
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE0:
+LSFDE2:
+ .long LEFDE2-LASFDE2
+LASFDE2:
+ .secrel32 Lframe0
+ .long LFB16
+ .long LFE16-LFB16
+ .byte 0x4
+ .long LCFI3-LFB16
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI4-LCFI3
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI5-LCFI4
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE2:
+LSFDE4:
+ .long LEFDE4-LASFDE4
+LASFDE4:
+ .secrel32 Lframe0
+ .long LFB17
+ .long LFE17-LFB17
+ .byte 0x4
+ .long LCFI6-LFB17
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI7-LCFI6
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI8-LCFI7
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE4:
+LSFDE6:
+ .long LEFDE6-LASFDE6
+LASFDE6:
+ .secrel32 Lframe0
+ .long LFB18
+ .long LFE18-LFB18
+ .byte 0x4
+ .long LCFI9-LFB18
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI10-LCFI9
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI11-LCFI10
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE6:
+LSFDE8:
+ .long LEFDE8-LASFDE8
+LASFDE8:
+ .secrel32 Lframe0
+ .long LFB19
+ .long LFE19-LFB19
+ .byte 0x4
+ .long LCFI12-LFB19
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI13-LCFI12
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI15-LCFI13
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE8:
+LSFDE10:
+ .long LEFDE10-LASFDE10
+LASFDE10:
+ .secrel32 Lframe0
+ .long LFB20
+ .long LFE20-LFB20
+ .byte 0x4
+ .long LCFI16-LFB20
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI17-LCFI16
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI18-LCFI17
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE10:
+LSFDE12:
+ .long LEFDE12-LASFDE12
+LASFDE12:
+ .secrel32 Lframe0
+ .long LFB23
+ .long LFE23-LFB23
+ .byte 0x4
+ .long LCFI19-LFB23
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI20-LCFI19
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI22-LCFI20
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE12:
+LSFDE14:
+ .long LEFDE14-LASFDE14
+LASFDE14:
+ .secrel32 Lframe0
+ .long LFB24
+ .long LFE24-LFB24
+ .byte 0x4
+ .long LCFI23-LFB24
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI24-LCFI23
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI25-LCFI24
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE14:
+LSFDE16:
+ .long LEFDE16-LASFDE16
+LASFDE16:
+ .secrel32 Lframe0
+ .long LFB25
+ .long LFE25-LFB25
+ .byte 0x4
+ .long LCFI26-LFB25
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI27-LCFI26
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI28-LCFI27
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE16:
+LSFDE18:
+ .long LEFDE18-LASFDE18
+LASFDE18:
+ .secrel32 Lframe0
+ .long LFB26
+ .long LFE26-LFB26
+ .byte 0x4
+ .long LCFI29-LFB26
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI30-LCFI29
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI32-LCFI30
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE18:
+LSFDE20:
+ .long LEFDE20-LASFDE20
+LASFDE20:
+ .secrel32 Lframe0
+ .long LFB28
+ .long LFE28-LFB28
+ .byte 0x4
+ .long LCFI33-LFB28
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI34-LCFI33
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI36-LCFI34
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE20:
+LSFDE22:
+ .long LEFDE22-LASFDE22
+LASFDE22:
+ .secrel32 Lframe0
+ .long LFB30
+ .long LFE30-LFB30
+ .byte 0x4
+ .long LCFI37-LFB30
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI38-LCFI37
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI40-LCFI38
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE22:
+LSFDE24:
+ .long LEFDE24-LASFDE24
+LASFDE24:
+ .secrel32 Lframe0
+ .long LFB31
+ .long LFE31-LFB31
+ .byte 0x4
+ .long LCFI41-LFB31
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI42-LCFI41
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI44-LCFI42
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE24:
+LSFDE26:
+ .long LEFDE26-LASFDE26
+LASFDE26:
+ .secrel32 Lframe0
+ .long LFB32
+ .long LFE32-LFB32
+ .byte 0x4
+ .long LCFI45-LFB32
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI46-LCFI45
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI48-LCFI46
+ .byte 0x83
+ .uleb128 0x3
+ .byte 0x4
+ .long LCFI49-LCFI48
+ .byte 0xc3
+ .byte 0x4
+ .long LCFI50-LCFI49
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE26:
+LSFDE28:
+ .long LEFDE28-LASFDE28
+LASFDE28:
+ .secrel32 Lframe0
+ .long LFB33
+ .long LFE33-LFB33
+ .byte 0x4
+ .long LCFI51-LFB33
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI52-LCFI51
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI54-LCFI52
+ .byte 0x83
+ .uleb128 0x3
+ .byte 0x4
+ .long LCFI55-LCFI54
+ .byte 0xc3
+ .byte 0x4
+ .long LCFI56-LCFI55
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE28:
+LSFDE30:
+ .long LEFDE30-LASFDE30
+LASFDE30:
+ .secrel32 Lframe0
+ .long LFB34
+ .long LFE34-LFB34
+ .byte 0x4
+ .long LCFI57-LFB34
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI58-LCFI57
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI60-LCFI58
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE30:
+ .section .eh_frame,"w"
+Lframe1:
+ .long LECIE1-LSCIE1
+LSCIE1:
+ .long 0x0
+ .byte 0x1
+ .ascii "\0"
+ .uleb128 0x1
+ .sleb128 -4
+ .byte 0x8
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .byte 0x88
+ .uleb128 0x1
+ .align 4
+LECIE1:
+LSFDE33:
+ .long LEFDE33-LASFDE33
+LASFDE33:
+ .long LASFDE33-Lframe1
+ .long LFB26
+ .long LFE26-LFB26
+ .byte 0x4
+ .long LCFI29-LFB26
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI30-LCFI29
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI32-LCFI30
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE33:
+LSFDE35:
+ .long LEFDE35-LASFDE35
+LASFDE35:
+ .long LASFDE35-Lframe1
+ .long LFB31
+ .long LFE31-LFB31
+ .byte 0x4
+ .long LCFI41-LFB31
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x85
+ .uleb128 0x2
+ .byte 0x4
+ .long LCFI42-LCFI41
+ .byte 0xd
+ .uleb128 0x5
+ .byte 0x4
+ .long LCFI44-LCFI42
+ .byte 0xc5
+ .byte 0xc
+ .uleb128 0x4
+ .uleb128 0x4
+ .align 4
+LEFDE35:
+ .text
+Letext0:
+ .section .debug_loc,"dr"
+Ldebug_loc0:
+LLST0:
+ .long LFB13
+ .long LCFI0
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI0
+ .long LCFI1
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI1
+ .long LCFI2
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI2
+ .long LFE13
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST1:
+ .long LFB16
+ .long LCFI3
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI3
+ .long LCFI4
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI4
+ .long LCFI5
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI5
+ .long LFE16
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST2:
+ .long LFB17
+ .long LCFI6
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI6
+ .long LCFI7
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI7
+ .long LCFI8
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI8
+ .long LFE17
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST3:
+ .long LFB18
+ .long LCFI9
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI9
+ .long LCFI10
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI10
+ .long LCFI11
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI11
+ .long LFE18
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST4:
+ .long LFB19
+ .long LCFI12
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI12
+ .long LCFI13
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI13
+ .long LCFI15
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI15
+ .long LFE19
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST5:
+ .long LFB20
+ .long LCFI16
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI16
+ .long LCFI17
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI17
+ .long LCFI18
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI18
+ .long LFE20
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST6:
+ .long LFB23
+ .long LCFI19
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI19
+ .long LCFI20
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI20
+ .long LCFI22
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI22
+ .long LFE23
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST7:
+ .long LFB24
+ .long LCFI23
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI23
+ .long LCFI24
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI24
+ .long LCFI25
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI25
+ .long LFE24
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST8:
+ .long LFB25
+ .long LCFI26
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI26
+ .long LCFI27
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI27
+ .long LCFI28
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI28
+ .long LFE25
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST9:
+ .long LFB26
+ .long LCFI29
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI29
+ .long LCFI30
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI30
+ .long LCFI32
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI32
+ .long LFE26
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST10:
+ .long LFB28
+ .long LCFI33
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI33
+ .long LCFI34
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI34
+ .long LCFI36
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI36
+ .long LFE28
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST11:
+ .long LFB30
+ .long LCFI37
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI37
+ .long LCFI38
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI38
+ .long LCFI40
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI40
+ .long LFE30
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST12:
+ .long LFB31
+ .long LCFI41
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI41
+ .long LCFI42
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI42
+ .long LCFI44
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI44
+ .long LFE31
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST13:
+ .long LFB32
+ .long LCFI45
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI45
+ .long LCFI46
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI46
+ .long LCFI50
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI50
+ .long LFE32
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST14:
+ .long LFB33
+ .long LCFI51
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI51
+ .long LCFI52
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI52
+ .long LCFI56
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI56
+ .long LFE33
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+LLST15:
+ .long LFB34
+ .long LCFI57
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long LCFI57
+ .long LCFI58
+ .word 0x2
+ .byte 0x74
+ .sleb128 8
+ .long LCFI58
+ .long LCFI60
+ .word 0x2
+ .byte 0x75
+ .sleb128 8
+ .long LCFI60
+ .long LFE34
+ .word 0x2
+ .byte 0x74
+ .sleb128 4
+ .long 0x0
+ .long 0x0
+ .file 3 "g:/mingw/bin/../lib/gcc/mingw32/4.5.0/include/c++/cstddef"
+ .file 4 "g:/mingw/bin/../lib/gcc/mingw32/4.5.0/include/stddef.h"
+ .file 5 "typedefs.h"
+ .file 6 "bootpack.h"
+ .file 7 "<built-in>"
+ .file 8 "hankaku.h"
+ .section .debug_info,"dr"
+ .long 0xa30
+ .word 0x2
+ .secrel32 Ldebug_abbrev0
+ .byte 0x4
+ .uleb128 0x1
+ .ascii "GNU C++ 4.5.0\0"
+ .byte 0x4
+ .ascii "screen.cpp\0"
+ .ascii "G:\\c\\os\\harib27f\\haribote\0"
+ .long 0x0
+ .long 0x0
+ .secrel32 Ldebug_ranges0+0x0
+ .secrel32 Ldebug_line0
+ .uleb128 0x2
+ .byte 0x4
+ .byte 0x5
+ .ascii "int\0"
+ .uleb128 0x3
+ .ascii "size_t\0"
+ .byte 0x4
+ .byte 0xd3
+ .long 0x65
+ .uleb128 0x2
+ .byte 0x4
+ .byte 0x7
+ .ascii "unsigned int\0"
+ .uleb128 0x4
+ .ascii "std\0"
+ .byte 0x7
+ .byte 0x0
+ .long 0x8f
+ .uleb128 0x5
+ .byte 0x3
+ .byte 0x33
+ .long 0x8f
+ .uleb128 0x5
+ .byte 0x3
+ .byte 0x34
+ .long 0x92
+ .byte 0x0
+ .uleb128 0x6
+ .byte 0x4
+ .byte 0x5
+ .uleb128 0x6
+ .byte 0x4
+ .byte 0x7
+ .uleb128 0x3
+ .ascii "BYTE\0"
+ .byte 0x5
+ .byte 0x3
+ .long 0xa1
+ .uleb128 0x2
+ .byte 0x1
+ .byte 0x8
+ .ascii "unsigned char\0"
+ .uleb128 0x3
+ .ascii "WORD\0"
+ .byte 0x5
+ .byte 0x4
+ .long 0xbe
+ .uleb128 0x2
+ .byte 0x2
+ .byte 0x7
+ .ascii "short unsigned int\0"
+ .uleb128 0x2
+ .byte 0x8
+ .byte 0x7
+ .ascii "long long unsigned int\0"
+ .uleb128 0x7
+ .ascii "BOOTINFO\0"
+ .byte 0xc
+ .byte 0x6
+ .byte 0x4
+ .long 0x178
+ .uleb128 0x8
+ .ascii "bootdrive\0"
+ .byte 0x6
+ .byte 0x5
+ .long 0x95
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x0
+ .uleb128 0x8
+ .ascii "leds\0"
+ .byte 0x6
+ .byte 0x6
+ .long 0x95
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x1
+ .uleb128 0x8
+ .ascii "vmode\0"
+ .byte 0x6
+ .byte 0x7
+ .long 0x95
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x2
+ .uleb128 0x8
+ .ascii "reserve\0"
+ .byte 0x6
+ .byte 0x8
+ .long 0x95
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x3
+ .uleb128 0x8
+ .ascii "screenx\0"
+ .byte 0x6
+ .byte 0x9
+ .long 0xb2
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x4
+ .uleb128 0x8
+ .ascii "screeny\0"
+ .byte 0x6
+ .byte 0x9
+ .long 0xb2
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x6
+ .uleb128 0x8
+ .ascii "vram\0"
+ .byte 0x6
+ .byte 0xa
+ .long 0x178
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x8
+ .byte 0x0
+ .uleb128 0x9
+ .byte 0x4
+ .long 0x95
+ .uleb128 0xa
+ .ascii "Screen\0"
+ .byte 0x14
+ .byte 0x1
+ .byte 0x5
+ .long 0x53b
+ .uleb128 0xa
+ .ascii "Pointer\0"
+ .byte 0x10
+ .byte 0x1
+ .byte 0x17
+ .long 0x2c7
+ .uleb128 0xb
+ .ascii "px\0"
+ .byte 0x1
+ .byte 0x18
+ .long 0x50
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x0
+ .byte 0x3
+ .uleb128 0xb
+ .ascii "py\0"
+ .byte 0x1
+ .byte 0x18
+ .long 0x50
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x4
+ .byte 0x3
+ .uleb128 0xb
+ .ascii "w\0"
+ .byte 0x1
+ .byte 0x19
+ .long 0x53b
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x8
+ .byte 0x3
+ .uleb128 0xb
+ .ascii "h\0"
+ .byte 0x1
+ .byte 0x19
+ .long 0x53b
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0xc
+ .byte 0x3
+ .uleb128 0xc
+ .byte 0x1
+ .ascii "Pointer\0"
+ .byte 0x1
+ .byte 0x1b
+ .byte 0x1
+ .long 0x1f0
+ .uleb128 0xd
+ .long 0x540
+ .byte 0x1
+ .uleb128 0xe
+ .long 0x546
+ .byte 0x0
+ .uleb128 0xf
+ .byte 0x1
+ .ascii "getx\0"
+ .byte 0x1
+ .byte 0x1d
+ .ascii "_ZN6Screen7Pointer4getxEv\0"
+ .long 0x50
+ .byte 0x1
+ .long 0x223
+ .uleb128 0xd
+ .long 0x540
+ .byte 0x1
+ .byte 0x0
+ .uleb128 0xf
+ .byte 0x1
+ .ascii "gety\0"
+ .byte 0x1
+ .byte 0x1e
+ .ascii "_ZN6Screen7Pointer4getyEv\0"
+ .long 0x50
+ .byte 0x1
+ .long 0x256
+ .uleb128 0xd
+ .long 0x540
+ .byte 0x1
+ .byte 0x0
+ .uleb128 0xf
+ .byte 0x1
+ .ascii "NextChar\0"
+ .byte 0x1
+ .byte 0x1f
+ .ascii "_ZN6Screen7Pointer8NextCharEv\0"
+ .long 0x50
+ .byte 0x1
+ .long 0x291
+ .uleb128 0xd
+ .long 0x540
+ .byte 0x1
+ .byte 0x0
+ .uleb128 0x10
+ .byte 0x1
+ .ascii "NewLine\0"
+ .byte 0x1
+ .byte 0x2d
+ .ascii "_ZN6Screen7Pointer7NewLineEv\0"
+ .long 0x50
+ .byte 0x1
+ .uleb128 0xd
+ .long 0x540
+ .byte 0x1
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x7
+ .ascii "RGB\0"
+ .byte 0x3
+ .byte 0x1
+ .byte 0x39
+ .long 0x347
+ .uleb128 0x8
+ .ascii "r\0"
+ .byte 0x1
+ .byte 0x3a
+ .long 0x95
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x0
+ .uleb128 0x8
+ .ascii "g\0"
+ .byte 0x1
+ .byte 0x3a
+ .long 0x95
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x1
+ .uleb128 0x8
+ .ascii "b\0"
+ .byte 0x1
+ .byte 0x3a
+ .long 0x95
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x2
+ .uleb128 0xc
+ .byte 0x1
+ .ascii "RGB\0"
+ .byte 0x1
+ .byte 0x3b
+ .byte 0x1
+ .long 0x31a
+ .uleb128 0xd
+ .long 0x54c
+ .byte 0x1
+ .uleb128 0xe
+ .long 0x95
+ .uleb128 0xe
+ .long 0x95
+ .uleb128 0xe
+ .long 0x95
+ .byte 0x0
+ .uleb128 0x10
+ .byte 0x1
+ .ascii "col8\0"
+ .byte 0x1
+ .byte 0x3c
+ .ascii "_ZNK6Screen3RGB4col8Ev\0"
+ .long 0x95
+ .byte 0x1
+ .uleb128 0xd
+ .long 0x552
+ .byte 0x1
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x11
+ .ascii "fontw\0"
+ .byte 0x1
+ .byte 0xd
+ .ascii "_ZN6Screen5fontwE\0"
+ .long 0x53b
+ .byte 0x1
+ .byte 0x1
+ .byte 0x8
+ .uleb128 0x11
+ .ascii "fonth\0"
+ .byte 0x1
+ .byte 0xd
+ .ascii "_ZN6Screen5fonthE\0"
+ .long 0x53b
+ .byte 0x1
+ .byte 0x1
+ .byte 0x10
+ .uleb128 0x8
+ .ascii "pt\0"
+ .byte 0x1
+ .byte 0x37
+ .long 0x18d
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x0
+ .uleb128 0x12
+ .ascii "buf\0"
+ .byte 0x1
+ .byte 0x41
+ .ascii "_ZN6Screen3bufE\0"
+ .long 0x55d
+ .byte 0x1
+ .byte 0x3
+ .byte 0x1
+ .uleb128 0x13
+ .secrel32 LASF0
+ .byte 0x1
+ .byte 0x45
+ .long 0x546
+ .byte 0x2
+ .byte 0x23
+ .uleb128 0x10
+ .byte 0x3
+ .uleb128 0x14
+ .byte 0x1
+ .ascii "Init\0"
+ .byte 0x1
+ .byte 0x7
+ .ascii "_ZN6Screen4InitEP8BOOTINFO\0"
+ .byte 0x1
+ .long 0x3f4
+ .uleb128 0xe
+ .long 0x546
+ .byte 0x0
+ .uleb128 0x15
+ .byte 0x1
+ .ascii "Inst\0"
+ .byte 0x1
+ .byte 0x8
+ .ascii "_ZN6Screen4InstEv\0"
+ .long 0x568
+ .byte 0x1
+ .uleb128 0x14
+ .byte 0x1
+ .ascii "printf\0"
+ .byte 0x1
+ .byte 0xf
+ .ascii "_ZN6Screen6printfEPKcz\0"
+ .byte 0x1
+ .long 0x448
+ .uleb128 0xd
+ .long 0x56a
+ .byte 0x1
+ .uleb128 0xe
+ .long 0x570
+ .uleb128 0x16
+ .byte 0x0
+ .uleb128 0x14
+ .byte 0x1
+ .ascii "puts\0"
+ .byte 0x1
+ .byte 0x10
+ .ascii "_ZN6Screen4putsEPKc\0"
+ .byte 0x1
+ .long 0x476
+ .uleb128 0xd
+ .long 0x56a
+ .byte 0x1
+ .uleb128 0xe
+ .long 0x570
+ .byte 0x0
+ .uleb128 0x14
+ .byte 0x1
+ .ascii "SetPixel\0"
+ .byte 0x1
+ .byte 0x13
+ .ascii "_ZN6Screen8SetPixelEiiRKNS_3RGBE\0"
+ .byte 0x1
+ .long 0x4bf
+ .uleb128 0xd
+ .long 0x56a
+ .byte 0x1
+ .uleb128 0xe
+ .long 0x50
+ .uleb128 0xe
+ .long 0x50
+ .uleb128 0xe
+ .long 0x583
+ .byte 0x0
+ .uleb128 0x14
+ .byte 0x1
+ .ascii "Scroll\0"
+ .byte 0x1
+ .byte 0x15
+ .ascii "_ZN6Screen6ScrollEv\0"
+ .byte 0x1
+ .long 0x4ea
+ .uleb128 0xd
+ .long 0x56a
+ .byte 0x1
+ .byte 0x0
+ .uleb128 0x17
+ .byte 0x1
+ .ascii "operator new\0"
+ .byte 0x1
+ .byte 0x42
+ .ascii "_ZN6ScreennwEjPv\0"
+ .long 0x589
+ .byte 0x3
+ .byte 0x1
+ .long 0x521
+ .uleb128 0xe
+ .long 0x57
+ .uleb128 0xe
+ .long 0x589
+ .byte 0x0
+ .uleb128 0x18
+ .byte 0x1
+ .ascii "Screen\0"
+ .byte 0x1
+ .byte 0x43
+ .byte 0x3
+ .byte 0x1
+ .uleb128 0xd
+ .long 0x56a
+ .byte 0x1
+ .uleb128 0xe
+ .long 0x546
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x19
+ .long 0x50
+ .uleb128 0x9
+ .byte 0x4
+ .long 0x18d
+ .uleb128 0x9
+ .byte 0x4
+ .long 0xee
+ .uleb128 0x9
+ .byte 0x4
+ .long 0x2c7
+ .uleb128 0x9
+ .byte 0x4
+ .long 0x558
+ .uleb128 0x19
+ .long 0x2c7
+ .uleb128 0x1a
+ .long 0xa1
+ .long 0x568
+ .uleb128 0x1b
+ .byte 0x0
+ .uleb128 0x1c
+ .byte 0x4
+ .uleb128 0x9
+ .byte 0x4
+ .long 0x17e
+ .uleb128 0x9
+ .byte 0x4
+ .long 0x576
+ .uleb128 0x19
+ .long 0x57b
+ .uleb128 0x2
+ .byte 0x1
+ .byte 0x6
+ .ascii "char\0"
+ .uleb128 0x1d
+ .byte 0x4
+ .long 0x558
+ .uleb128 0x1e
+ .byte 0x4
+ .uleb128 0x1f
+ .long 0x3f4
+ .long LFB13
+ .long LFE13
+ .secrel32 LLST0
+ .uleb128 0x20
+ .long 0x1d3
+ .byte 0x2
+ .long 0x5bc
+ .uleb128 0x21
+ .secrel32 LASF1
+ .long 0x5bc
+ .byte 0x1
+ .uleb128 0x22
+ .secrel32 LASF0
+ .byte 0x1
+ .byte 0x1b
+ .long 0x546
+ .byte 0x0
+ .uleb128 0x19
+ .long 0x540
+ .uleb128 0x23
+ .long 0x59c
+ .long LFB16
+ .long LFE16
+ .secrel32 LLST1
+ .long 0x5e7
+ .uleb128 0x24
+ .long 0x5a6
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .uleb128 0x24
+ .long 0x5b0
+ .byte 0x2
+ .byte 0x91
+ .sleb128 4
+ .byte 0x0
+ .uleb128 0x25
+ .long 0x1f0
+ .long LFB17
+ .long LFE17
+ .secrel32 LLST2
+ .long 0x60a
+ .uleb128 0x26
+ .secrel32 LASF1
+ .long 0x5bc
+ .byte 0x1
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .byte 0x0
+ .uleb128 0x25
+ .long 0x223
+ .long LFB18
+ .long LFE18
+ .secrel32 LLST3
+ .long 0x62d
+ .uleb128 0x26
+ .secrel32 LASF1
+ .long 0x5bc
+ .byte 0x1
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .byte 0x0
+ .uleb128 0x25
+ .long 0x256
+ .long LFB19
+ .long LFE19
+ .secrel32 LLST4
+ .long 0x66a
+ .uleb128 0x26
+ .secrel32 LASF1
+ .long 0x5bc
+ .byte 0x1
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .uleb128 0x27
+ .long LBB3
+ .long LBE3
+ .uleb128 0x28
+ .ascii "oldpy\0"
+ .byte 0x1
+ .byte 0x20
+ .long 0x50
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -12
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x25
+ .long 0x291
+ .long LFB20
+ .long LFE20
+ .secrel32 LLST5
+ .long 0x68d
+ .uleb128 0x26
+ .secrel32 LASF1
+ .long 0x5bc
+ .byte 0x1
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .byte 0x0
+ .uleb128 0x20
+ .long 0x2f7
+ .byte 0x2
+ .long 0x6bd
+ .uleb128 0x21
+ .secrel32 LASF1
+ .long 0x6bd
+ .byte 0x1
+ .uleb128 0x29
+ .ascii "r\0"
+ .byte 0x1
+ .byte 0x3b
+ .long 0x95
+ .uleb128 0x29
+ .ascii "g\0"
+ .byte 0x1
+ .byte 0x3b
+ .long 0x95
+ .uleb128 0x29
+ .ascii "b\0"
+ .byte 0x1
+ .byte 0x3b
+ .long 0x95
+ .byte 0x0
+ .uleb128 0x19
+ .long 0x54c
+ .uleb128 0x23
+ .long 0x68d
+ .long LFB23
+ .long LFE23
+ .secrel32 LLST6
+ .long 0x6f8
+ .uleb128 0x24
+ .long 0x697
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .uleb128 0x24
+ .long 0x6a1
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -12
+ .uleb128 0x24
+ .long 0x6aa
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -16
+ .uleb128 0x24
+ .long 0x6b3
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -20
+ .byte 0x0
+ .uleb128 0x25
+ .long 0x31a
+ .long LFB24
+ .long LFE24
+ .secrel32 LLST7
+ .long 0x71b
+ .uleb128 0x26
+ .secrel32 LASF1
+ .long 0x71b
+ .byte 0x1
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .byte 0x0
+ .uleb128 0x19
+ .long 0x552
+ .uleb128 0x25
+ .long 0x4ea
+ .long LFB25
+ .long LFE25
+ .secrel32 LLST8
+ .long 0x753
+ .uleb128 0x2a
+ .ascii "size\0"
+ .byte 0x1
+ .byte 0x42
+ .long 0x57
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .uleb128 0x2a
+ .ascii "buf\0"
+ .byte 0x1
+ .byte 0x42
+ .long 0x589
+ .byte 0x2
+ .byte 0x91
+ .sleb128 4
+ .byte 0x0
+ .uleb128 0x2b
+ .byte 0x1
+ .ascii "debugprint\0"
+ .byte 0x2
+ .byte 0x9
+ .long LFB26
+ .long LFE26
+ .secrel32 LLST9
+ .long 0x7b5
+ .uleb128 0x2a
+ .ascii "format\0"
+ .byte 0x2
+ .byte 0x9
+ .long 0x570
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .uleb128 0x16
+ .uleb128 0x27
+ .long LBB5
+ .long LBE5
+ .uleb128 0x28
+ .ascii "i\0"
+ .byte 0x2
+ .byte 0xa
+ .long 0x50
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -20
+ .uleb128 0x28
+ .ascii "s\0"
+ .byte 0x2
+ .byte 0xb
+ .long 0x7b5
+ .byte 0x3
+ .byte 0x91
+ .sleb128 -2072
+ .uleb128 0x28
+ .ascii "ap\0"
+ .byte 0x2
+ .byte 0xc
+ .long 0x7c9
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -24
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x1a
+ .long 0x57b
+ .long 0x7c6
+ .uleb128 0x2c
+ .long 0x7c6
+ .word 0x7ff
+ .byte 0x0
+ .uleb128 0x6
+ .byte 0x4
+ .byte 0x7
+ .uleb128 0x2d
+ .byte 0x4
+ .ascii "__builtin_va_list\0"
+ .long 0x57b
+ .uleb128 0x2e
+ .long 0x521
+ .byte 0x2
+ .byte 0x15
+ .byte 0x0
+ .long 0x803
+ .uleb128 0x21
+ .secrel32 LASF1
+ .long 0x803
+ .byte 0x1
+ .uleb128 0x22
+ .secrel32 LASF0
+ .byte 0x2
+ .byte 0x15
+ .long 0x546
+ .byte 0x0
+ .uleb128 0x19
+ .long 0x56a
+ .uleb128 0x23
+ .long 0x7e1
+ .long LFB28
+ .long LFE28
+ .secrel32 LLST10
+ .long 0x82e
+ .uleb128 0x24
+ .long 0x7ed
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .uleb128 0x24
+ .long 0x7f7
+ .byte 0x2
+ .byte 0x91
+ .sleb128 4
+ .byte 0x0
+ .uleb128 0x2f
+ .long 0x3c5
+ .byte 0x2
+ .byte 0x18
+ .long LFB30
+ .long LFE30
+ .secrel32 LLST11
+ .long 0x854
+ .uleb128 0x30
+ .secrel32 LASF0
+ .byte 0x2
+ .byte 0x18
+ .long 0x546
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .byte 0x0
+ .uleb128 0x2f
+ .long 0x414
+ .byte 0x2
+ .byte 0x1c
+ .long LFB31
+ .long LFE31
+ .secrel32 LLST12
+ .long 0x8bb
+ .uleb128 0x26
+ .secrel32 LASF1
+ .long 0x803
+ .byte 0x1
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .uleb128 0x2a
+ .ascii "format\0"
+ .byte 0x2
+ .byte 0x1c
+ .long 0x570
+ .byte 0x2
+ .byte 0x91
+ .sleb128 4
+ .uleb128 0x16
+ .uleb128 0x27
+ .long LBB7
+ .long LBE7
+ .uleb128 0x28
+ .ascii "i\0"
+ .byte 0x2
+ .byte 0x1d
+ .long 0x50
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -20
+ .uleb128 0x28
+ .ascii "s\0"
+ .byte 0x2
+ .byte 0x1e
+ .long 0x7b5
+ .byte 0x3
+ .byte 0x91
+ .sleb128 -2072
+ .uleb128 0x28
+ .ascii "ap\0"
+ .byte 0x2
+ .byte 0x1f
+ .long 0x7c9
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -24
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2f
+ .long 0x448
+ .byte 0x2
+ .byte 0x28
+ .long LFB32
+ .long LFE32
+ .secrel32 LLST13
+ .long 0x92e
+ .uleb128 0x26
+ .secrel32 LASF1
+ .long 0x803
+ .byte 0x1
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .uleb128 0x2a
+ .ascii "s\0"
+ .byte 0x2
+ .byte 0x28
+ .long 0x570
+ .byte 0x2
+ .byte 0x91
+ .sleb128 4
+ .uleb128 0x27
+ .long LBB13
+ .long LBE13
+ .uleb128 0x28
+ .ascii "i\0"
+ .byte 0x2
+ .byte 0x2f
+ .long 0x50
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -20
+ .uleb128 0x27
+ .long LBB14
+ .long LBE14
+ .uleb128 0x28
+ .ascii "b\0"
+ .byte 0x2
+ .byte 0x30
+ .long 0x95
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -25
+ .uleb128 0x27
+ .long LBB15
+ .long LBE15
+ .uleb128 0x28
+ .ascii "j\0"
+ .byte 0x2
+ .byte 0x31
+ .long 0x50
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -24
+ .byte 0x0
+ .byte 0x0
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2f
+ .long 0x476
+ .byte 0x2
+ .byte 0x3e
+ .long LFB33
+ .long LFE33
+ .secrel32 LLST14
+ .long 0x98f
+ .uleb128 0x26
+ .secrel32 LASF1
+ .long 0x803
+ .byte 0x1
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .uleb128 0x2a
+ .ascii "x\0"
+ .byte 0x2
+ .byte 0x3e
+ .long 0x50
+ .byte 0x2
+ .byte 0x91
+ .sleb128 4
+ .uleb128 0x2a
+ .ascii "y\0"
+ .byte 0x2
+ .byte 0x3e
+ .long 0x50
+ .byte 0x2
+ .byte 0x91
+ .sleb128 8
+ .uleb128 0x2a
+ .ascii "rgb\0"
+ .byte 0x2
+ .byte 0x3e
+ .long 0x98f
+ .byte 0x2
+ .byte 0x91
+ .sleb128 12
+ .uleb128 0x27
+ .long LBB18
+ .long LBE18
+ .uleb128 0x28
+ .ascii "p\0"
+ .byte 0x2
+ .byte 0x42
+ .long 0x178
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -16
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x19
+ .long 0x583
+ .uleb128 0x2f
+ .long 0x4bf
+ .byte 0x2
+ .byte 0x49
+ .long LFB34
+ .long LFE34
+ .secrel32 LLST15
+ .long 0x9f6
+ .uleb128 0x26
+ .secrel32 LASF1
+ .long 0x803
+ .byte 0x1
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .uleb128 0x27
+ .long LBB19
+ .long LBE19
+ .uleb128 0x28
+ .ascii "lines\0"
+ .byte 0x2
+ .byte 0x4a
+ .long 0x65
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -20
+ .uleb128 0x28
+ .ascii "stride\0"
+ .byte 0x2
+ .byte 0x4b
+ .long 0x65
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -24
+ .uleb128 0x28
+ .ascii "cstride\0"
+ .byte 0x2
+ .byte 0x4c
+ .long 0x65
+ .byte 0x2
+ .byte 0x91
+ .sleb128 -28
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x1a
+ .long 0x57b
+ .long 0xa0c
+ .uleb128 0x31
+ .long 0x7c6
+ .byte 0xff
+ .uleb128 0x31
+ .long 0x7c6
+ .byte 0xf
+ .byte 0x0
+ .uleb128 0x32
+ .ascii "hankakufont\0"
+ .byte 0x8
+ .byte 0x1
+ .long 0x9f6
+ .byte 0x1
+ .byte 0x5
+ .byte 0x3
+ .long _hankakufont
+ .uleb128 0x33
+ .long 0x398
+ .byte 0x2
+ .byte 0x7
+ .byte 0x5
+ .byte 0x3
+ .long __ZN6Screen3bufE
+ .byte 0x0
+ .section .debug_abbrev,"dr"
+ .uleb128 0x1
+ .uleb128 0x11
+ .byte 0x1
+ .uleb128 0x25
+ .uleb128 0x8
+ .uleb128 0x13
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x1b
+ .uleb128 0x8
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x52
+ .uleb128 0x1
+ .uleb128 0x55
+ .uleb128 0x6
+ .uleb128 0x10
+ .uleb128 0x6
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2
+ .uleb128 0x24
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3e
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0x8
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x16
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x4
+ .uleb128 0x39
+ .byte 0x1
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x5
+ .uleb128 0x8
+ .byte 0x0
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x18
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x6
+ .uleb128 0x24
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3e
+ .uleb128 0xb
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x7
+ .uleb128 0x13
+ .byte 0x1
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x8
+ .uleb128 0xd
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x38
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x9
+ .uleb128 0xf
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0xa
+ .uleb128 0x2
+ .byte 0x1
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xd
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x38
+ .uleb128 0xa
+ .uleb128 0x32
+ .uleb128 0xb
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0xc
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x3c
+ .uleb128 0xc
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0xd
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x34
+ .uleb128 0xc
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0xe
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0xf
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x2007
+ .uleb128 0x8
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x3c
+ .uleb128 0xc
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x10
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x2007
+ .uleb128 0x8
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x3c
+ .uleb128 0xc
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x11
+ .uleb128 0xd
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x2007
+ .uleb128 0x8
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3c
+ .uleb128 0xc
+ .uleb128 0x1c
+ .uleb128 0xb
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x12
+ .uleb128 0xd
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x2007
+ .uleb128 0x8
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x32
+ .uleb128 0xb
+ .uleb128 0x3c
+ .uleb128 0xc
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x13
+ .uleb128 0xd
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x38
+ .uleb128 0xa
+ .uleb128 0x32
+ .uleb128 0xb
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x14
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x2007
+ .uleb128 0x8
+ .uleb128 0x3c
+ .uleb128 0xc
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x15
+ .uleb128 0x2e
+ .byte 0x0
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x2007
+ .uleb128 0x8
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x3c
+ .uleb128 0xc
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x16
+ .uleb128 0x18
+ .byte 0x0
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x17
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x2007
+ .uleb128 0x8
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x32
+ .uleb128 0xb
+ .uleb128 0x3c
+ .uleb128 0xc
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x18
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x32
+ .uleb128 0xb
+ .uleb128 0x3c
+ .uleb128 0xc
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x19
+ .uleb128 0x26
+ .byte 0x0
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x1a
+ .uleb128 0x1
+ .byte 0x1
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x1b
+ .uleb128 0x21
+ .byte 0x0
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x1c
+ .uleb128 0x10
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x1d
+ .uleb128 0x10
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x1e
+ .uleb128 0xf
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x1f
+ .uleb128 0x2e
+ .byte 0x0
+ .uleb128 0x47
+ .uleb128 0x13
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x40
+ .uleb128 0x6
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x20
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x47
+ .uleb128 0x13
+ .uleb128 0x20
+ .uleb128 0xb
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x21
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x34
+ .uleb128 0xc
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x22
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x23
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x31
+ .uleb128 0x13
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x40
+ .uleb128 0x6
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x24
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x31
+ .uleb128 0x13
+ .uleb128 0x2
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x25
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x47
+ .uleb128 0x13
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x40
+ .uleb128 0x6
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x26
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x34
+ .uleb128 0xc
+ .uleb128 0x2
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x27
+ .uleb128 0xb
+ .byte 0x1
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x28
+ .uleb128 0x34
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x2
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x29
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2a
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x2
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2b
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x40
+ .uleb128 0x6
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2c
+ .uleb128 0x21
+ .byte 0x0
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x2f
+ .uleb128 0x5
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2d
+ .uleb128 0xf
+ .byte 0x0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2e
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x47
+ .uleb128 0x13
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x20
+ .uleb128 0xb
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2f
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x47
+ .uleb128 0x13
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x40
+ .uleb128 0x6
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x30
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x2
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x31
+ .uleb128 0x21
+ .byte 0x0
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x2f
+ .uleb128 0xb
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x32
+ .uleb128 0x34
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x2
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x33
+ .uleb128 0x34
+ .byte 0x0
+ .uleb128 0x47
+ .uleb128 0x13
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x2
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .byte 0x0
+ .section .debug_pubnames,"dr"
+ .long 0x18e
+ .word 0x2
+ .secrel32 Ldebug_info0
+ .long 0xa34
+ .long 0x58b
+ .ascii "Screen::Inst\0"
+ .long 0x5c1
+ .ascii "Screen::Pointer::Pointer\0"
+ .long 0x5e7
+ .ascii "Screen::Pointer::getx\0"
+ .long 0x60a
+ .ascii "Screen::Pointer::gety\0"
+ .long 0x62d
+ .ascii "Screen::Pointer::NextChar\0"
+ .long 0x66a
+ .ascii "Screen::Pointer::NewLine\0"
+ .long 0x6c2
+ .ascii "Screen::RGB::RGB\0"
+ .long 0x6f8
+ .ascii "Screen::RGB::col8\0"
+ .long 0x720
+ .ascii "Screen::operator new\0"
+ .long 0x753
+ .ascii "debugprint\0"
+ .long 0x808
+ .ascii "Screen::Screen\0"
+ .long 0x82e
+ .ascii "Screen::Init\0"
+ .long 0x854
+ .ascii "Screen::printf\0"
+ .long 0x8bb
+ .ascii "Screen::puts\0"
+ .long 0x92e
+ .ascii "Screen::SetPixel\0"
+ .long 0x994
+ .ascii "Screen::Scroll\0"
+ .long 0xa0c
+ .ascii "hankakufont\0"
+ .long 0xa26
+ .ascii "Screen::buf\0"
+ .long 0x0
+ .section .debug_pubtypes,"dr"
+ .long 0x43
+ .word 0x2
+ .secrel32 Ldebug_info0
+ .long 0xa34
+ .long 0x57
+ .ascii "size_t\0"
+ .long 0x95
+ .ascii "BYTE\0"
+ .long 0xb2
+ .ascii "WORD\0"
+ .long 0xee
+ .ascii "BOOTINFO\0"
+ .long 0x17e
+ .ascii "Screen\0"
+ .long 0x0
+ .section .debug_aranges,"dr"
+ .long 0x64
+ .word 0x2
+ .secrel32 Ldebug_info0
+ .byte 0x4
+ .byte 0x0
+ .word 0x0
+ .word 0x0
+ .long Ltext0
+ .long Letext0-Ltext0
+ .long LFB13
+ .long LFE13-LFB13
+ .long LFB16
+ .long LFE16-LFB16
+ .long LFB17
+ .long LFE17-LFB17
+ .long LFB18
+ .long LFE18-LFB18
+ .long LFB19
+ .long LFE19-LFB19
+ .long LFB20
+ .long LFE20-LFB20
+ .long LFB23
+ .long LFE23-LFB23
+ .long LFB24
+ .long LFE24-LFB24
+ .long LFB25
+ .long LFE25-LFB25
+ .long 0x0
+ .long 0x0
+ .section .debug_ranges,"dr"
+Ldebug_ranges0:
+ .long Ltext0
+ .long Letext0
+ .long LFB13
+ .long LFE13
+ .long LFB16
+ .long LFE16
+ .long LFB17
+ .long LFE17
+ .long LFB18
+ .long LFE18
+ .long LFB19
+ .long LFE19
+ .long LFB20
+ .long LFE20
+ .long LFB23
+ .long LFE23
+ .long LFB24
+ .long LFE24
+ .long LFB25
+ .long LFE25
+ .long 0x0
+ .long 0x0
+ .section .debug_str,"dr"
+LASF0:
+ .ascii "binfo\0"
+LASF1:
+ .ascii "this\0"
+ .def _vsprintf; .scl 2; .type 32; .endef
+ .def _memmove; .scl 2; .type 32; .endef
+ .def _memset; .scl 2; .type 32; .endef
--- /dev/null
+/* \83}\83E\83X\82â\83E\83B\83\93\83h\83E\82Ì\8fd\82Ë\8d\87\82í\82¹\8f\88\97\9d */
+
+#include "bootpack.h"
+
+#define SHEET_USE 1
+
+struct SHTCTL *shtctl_init(struct MEMMAN *memman, unsigned char *vram, int xsize, int ysize)
+{
+ struct SHTCTL *ctl;
+ int i;
+ ctl = (struct SHTCTL *) memman_alloc_4k(memman, sizeof (struct SHTCTL));
+ if (ctl == 0) {
+ goto err;
+ }
+ ctl->map = (unsigned char *) memman_alloc_4k(memman, xsize * ysize);
+ if (ctl->map == 0) {
+ memman_free_4k(memman, (int) ctl, sizeof (struct SHTCTL));
+ goto err;
+ }
+ ctl->vram = vram;
+ ctl->xsize = xsize;
+ ctl->ysize = ysize;
+ ctl->top = -1; /* \83V\81[\83g\82Í\88ê\96\87\82à\82È\82¢ */
+ for (i = 0; i < MAX_SHEETS; i++) {
+ ctl->sheets0[i].flags = 0; /* \96¢\8eg\97p\83}\81[\83N */
+ ctl->sheets0[i].ctl = ctl; /* \8f\8a\91®\82ð\8bL\98^ */
+ }
+err:
+ return ctl;
+}
+
+struct SHEET *sheet_alloc(struct SHTCTL *ctl)
+{
+ struct SHEET *sht;
+ int i;
+ for (i = 0; i < MAX_SHEETS; i++) {
+ if (ctl->sheets0[i].flags == 0) {
+ sht = &ctl->sheets0[i];
+ sht->flags = SHEET_USE; /* \8eg\97p\92\86\83}\81[\83N */
+ sht->height = -1; /* \94ñ\95\\8e¦\92\86 */
+ sht->task = 0; /* \8e©\93®\82Å\95Â\82¶\82é\8b@\94\\82ð\8eg\82í\82È\82¢ */
+ return sht;
+ }
+ }
+ return 0; /* \91S\82Ä\82Ì\83V\81[\83g\82ª\8eg\97p\92\86\82¾\82Á\82½ */
+}
+
+void sheet_setbuf(struct SHEET *sht, unsigned char *buf, int xsize, int ysize, int col_inv)
+{
+ sht->buf = buf;
+ sht->bxsize = xsize;
+ sht->bysize = ysize;
+ sht->col_inv = col_inv;
+ return;
+}
+
+void sheet_refreshmap(struct SHTCTL *ctl, int vx0, int vy0, int vx1, int vy1, int h0)
+{
+ int h, bx, by, vx, vy, bx0, by0, bx1, by1, sid4, *p;
+ unsigned char *buf, sid, *map = ctl->map;
+ struct SHEET *sht;
+ if (vx0 < 0) { vx0 = 0; }
+ if (vy0 < 0) { vy0 = 0; }
+ if (vx1 > ctl->xsize) { vx1 = ctl->xsize; }
+ if (vy1 > ctl->ysize) { vy1 = ctl->ysize; }
+ for (h = h0; h <= ctl->top; h++) {
+ sht = ctl->sheets[h];
+ sid = sht - ctl->sheets0; /* \94Ô\92n\82ð\88ø\82«\8eZ\82µ\82Ä\82»\82ê\82ð\89º\82¶\82«\94Ô\8d\86\82Æ\82µ\82Ä\97\98\97p */
+ buf = sht->buf;
+ bx0 = vx0 - sht->vx0;
+ by0 = vy0 - sht->vy0;
+ bx1 = vx1 - sht->vx0;
+ by1 = vy1 - sht->vy0;
+ if (bx0 < 0) { bx0 = 0; }
+ if (by0 < 0) { by0 = 0; }
+ if (bx1 > sht->bxsize) { bx1 = sht->bxsize; }
+ if (by1 > sht->bysize) { by1 = sht->bysize; }
+ if (sht->col_inv == -1) {
+ if ((sht->vx0 & 3) == 0 && (bx0 & 3) == 0 && (bx1 & 3) == 0) {
+ /* \93§\96¾\90F\82È\82µ\90ê\97p\82Ì\8d\82\91¬\94Å\81i4\83o\83C\83g\8c^\81j */
+ bx1 = (bx1 - bx0) / 4; /* MOV\89ñ\90\94 */
+ sid4 = sid | sid << 8 | sid << 16 | sid << 24;
+ for (by = by0; by < by1; by++) {
+ vy = sht->vy0 + by;
+ vx = sht->vx0 + bx0;
+ p = (int *) &map[vy * ctl->xsize + vx];
+ for (bx = 0; bx < bx1; bx++) {
+ p[bx] = sid4;
+ }
+ }
+ } else {
+ /* \93§\96¾\90F\82È\82µ\90ê\97p\82Ì\8d\82\91¬\94Å\81i1\83o\83C\83g\8c^\81j */
+ for (by = by0; by < by1; by++) {
+ vy = sht->vy0 + by;
+ for (bx = bx0; bx < bx1; bx++) {
+ vx = sht->vx0 + bx;
+ map[vy * ctl->xsize + vx] = sid;
+ }
+ }
+ }
+ } else {
+ /* \93§\96¾\90F\82 \82è\82Ì\88ê\94Ê\94Å */
+ for (by = by0; by < by1; by++) {
+ vy = sht->vy0 + by;
+ for (bx = bx0; bx < bx1; bx++) {
+ vx = sht->vx0 + bx;
+ if (buf[by * sht->bxsize + bx] != sht->col_inv) {
+ map[vy * ctl->xsize + vx] = sid;
+ }
+ }
+ }
+ }
+ }
+ return;
+}
+
+void sheet_refreshsub(struct SHTCTL *ctl, int vx0, int vy0, int vx1, int vy1, int h0, int h1)
+{
+ int h, bx, by, vx, vy, bx0, by0, bx1, by1, bx2, sid4, i, i1, *p, *q, *r;
+ unsigned char *buf, *vram = ctl->vram, *map = ctl->map, sid;
+ struct SHEET *sht;
+ /* refresh\94Í\88Í\82ª\89æ\96Ê\8aO\82É\82Í\82Ý\8fo\82µ\82Ä\82¢\82½\82ç\95â\90³ */
+ if (vx0 < 0) { vx0 = 0; }
+ if (vy0 < 0) { vy0 = 0; }
+ if (vx1 > ctl->xsize) { vx1 = ctl->xsize; }
+ if (vy1 > ctl->ysize) { vy1 = ctl->ysize; }
+ for (h = h0; h <= h1; h++) {
+ sht = ctl->sheets[h];
+ buf = sht->buf;
+ sid = sht - ctl->sheets0;
+ /* vx0\81`vy1\82ð\8eg\82Á\82Ä\81Abx0\81`by1\82ð\8bt\8eZ\82·\82é */
+ bx0 = vx0 - sht->vx0;
+ by0 = vy0 - sht->vy0;
+ bx1 = vx1 - sht->vx0;
+ by1 = vy1 - sht->vy0;
+ if (bx0 < 0) { bx0 = 0; }
+ if (by0 < 0) { by0 = 0; }
+ if (bx1 > sht->bxsize) { bx1 = sht->bxsize; }
+ if (by1 > sht->bysize) { by1 = sht->bysize; }
+ if ((sht->vx0 & 3) == 0) {
+ /* 4\83o\83C\83g\8c^ */
+ i = (bx0 + 3) / 4; /* bx0\82ð4\82Å\8a\84\82Á\82½\82à\82Ì\81i\92[\90\94\90Ø\82è\8fã\82°\81j */
+ i1 = bx1 / 4; /* bx1\82ð4\82Å\8a\84\82Á\82½\82à\82Ì\81i\92[\90\94\90Ø\82è\8eÌ\82Ä\81j */
+ i1 = i1 - i;
+ sid4 = sid | sid << 8 | sid << 16 | sid << 24;
+ for (by = by0; by < by1; by++) {
+ vy = sht->vy0 + by;
+ for (bx = bx0; bx < bx1 && (bx & 3) != 0; bx++) { /* \91O\82Ì\92[\90\94\82ð1\83o\83C\83g\82¸\82Â */
+ vx = sht->vx0 + bx;
+ if (map[vy * ctl->xsize + vx] == sid) {
+ vram[vy * ctl->xsize + vx] = buf[by * sht->bxsize + bx];
+ }
+ }
+ vx = sht->vx0 + bx;
+ p = (int *) &map[vy * ctl->xsize + vx];
+ q = (int *) &vram[vy * ctl->xsize + vx];
+ r = (int *) &buf[by * sht->bxsize + bx];
+ for (i = 0; i < i1; i++) { /* 4\82Ì\94{\90\94\95\94\95ª */
+ if (p[i] == sid4) {
+ q[i] = r[i];
+ } else {
+ bx2 = bx + i * 4;
+ vx = sht->vx0 + bx2;
+ if (map[vy * ctl->xsize + vx + 0] == sid) {
+ vram[vy * ctl->xsize + vx + 0] = buf[by * sht->bxsize + bx2 + 0];
+ }
+ if (map[vy * ctl->xsize + vx + 1] == sid) {
+ vram[vy * ctl->xsize + vx + 1] = buf[by * sht->bxsize + bx2 + 1];
+ }
+ if (map[vy * ctl->xsize + vx + 2] == sid) {
+ vram[vy * ctl->xsize + vx + 2] = buf[by * sht->bxsize + bx2 + 2];
+ }
+ if (map[vy * ctl->xsize + vx + 3] == sid) {
+ vram[vy * ctl->xsize + vx + 3] = buf[by * sht->bxsize + bx2 + 3];
+ }
+ }
+ }
+ for (bx += i1 * 4; bx < bx1; bx++) { /* \8cã\82ë\82Ì\92[\90\94\82ð1\83o\83C\83g\82¸\82Â */
+ vx = sht->vx0 + bx;
+ if (map[vy * ctl->xsize + vx] == sid) {
+ vram[vy * ctl->xsize + vx] = buf[by * sht->bxsize + bx];
+ }
+ }
+ }
+ } else {
+ /* 1\83o\83C\83g\8c^ */
+ for (by = by0; by < by1; by++) {
+ vy = sht->vy0 + by;
+ for (bx = bx0; bx < bx1; bx++) {
+ vx = sht->vx0 + bx;
+ if (map[vy * ctl->xsize + vx] == sid) {
+ vram[vy * ctl->xsize + vx] = buf[by * sht->bxsize + bx];
+ }
+ }
+ }
+ }
+ }
+ return;
+}
+
+void sheet_updown(struct SHEET *sht, int height)
+{
+ struct SHTCTL *ctl = sht->ctl;
+ int h, old = sht->height; /* \90Ý\92è\91O\82Ì\8d\82\82³\82ð\8bL\89¯\82·\82é */
+
+ /* \8ew\92è\82ª\92á\82·\82¬\82â\8d\82\82·\82¬\82¾\82Á\82½\82ç\81A\8fC\90³\82·\82é */
+ if (height > ctl->top + 1) {
+ height = ctl->top + 1;
+ }
+ if (height < -1) {
+ height = -1;
+ }
+ sht->height = height; /* \8d\82\82³\82ð\90Ý\92è */
+
+ /* \88È\89º\82Í\8eå\82Ésheets[]\82Ì\95À\82×\91Ö\82¦ */
+ if (old > height) { /* \88È\91O\82æ\82è\82à\92á\82\82È\82é */
+ if (height >= 0) {
+ /* \8aÔ\82Ì\82à\82Ì\82ð\88ø\82«\8fã\82°\82é */
+ for (h = old; h > height; h--) {
+ ctl->sheets[h] = ctl->sheets[h - 1];
+ ctl->sheets[h]->height = h;
+ }
+ ctl->sheets[height] = sht;
+ sheet_refreshmap(ctl, sht->vx0, sht->vy0, sht->vx0 + sht->bxsize, sht->vy0 + sht->bysize, height + 1);
+ sheet_refreshsub(ctl, sht->vx0, sht->vy0, sht->vx0 + sht->bxsize, sht->vy0 + sht->bysize, height + 1, old);
+ } else { /* \94ñ\95\\8e¦\89» */
+ if (ctl->top > old) {
+ /* \8fã\82É\82È\82Á\82Ä\82¢\82é\82à\82Ì\82ð\82¨\82ë\82· */
+ for (h = old; h < ctl->top; h++) {
+ ctl->sheets[h] = ctl->sheets[h + 1];
+ ctl->sheets[h]->height = h;
+ }
+ }
+ ctl->top--; /* \95\\8e¦\92\86\82Ì\89º\82¶\82«\82ª\88ê\82Â\8c¸\82é\82Ì\82Å\81A\88ê\94Ô\8fã\82Ì\8d\82\82³\82ª\8c¸\82é */
+ sheet_refreshmap(ctl, sht->vx0, sht->vy0, sht->vx0 + sht->bxsize, sht->vy0 + sht->bysize, 0);
+ sheet_refreshsub(ctl, sht->vx0, sht->vy0, sht->vx0 + sht->bxsize, sht->vy0 + sht->bysize, 0, old - 1);
+ }
+ } else if (old < height) { /* \88È\91O\82æ\82è\82à\8d\82\82\82È\82é */
+ if (old >= 0) {
+ /* \8aÔ\82Ì\82à\82Ì\82ð\89\9f\82µ\89º\82°\82é */
+ for (h = old; h < height; h++) {
+ ctl->sheets[h] = ctl->sheets[h + 1];
+ ctl->sheets[h]->height = h;
+ }
+ ctl->sheets[height] = sht;
+ } else { /* \94ñ\95\\8e¦\8fó\91Ô\82©\82ç\95\\8e¦\8fó\91Ô\82Ö */
+ /* \8fã\82É\82È\82é\82à\82Ì\82ð\8e\9d\82¿\8fã\82°\82é */
+ for (h = ctl->top; h >= height; h--) {
+ ctl->sheets[h + 1] = ctl->sheets[h];
+ ctl->sheets[h + 1]->height = h + 1;
+ }
+ ctl->sheets[height] = sht;
+ ctl->top++; /* \95\\8e¦\92\86\82Ì\89º\82¶\82«\82ª\88ê\82Â\91\9d\82¦\82é\82Ì\82Å\81A\88ê\94Ô\8fã\82Ì\8d\82\82³\82ª\91\9d\82¦\82é */
+ }
+ sheet_refreshmap(ctl, sht->vx0, sht->vy0, sht->vx0 + sht->bxsize, sht->vy0 + sht->bysize, height);
+ sheet_refreshsub(ctl, sht->vx0, sht->vy0, sht->vx0 + sht->bxsize, sht->vy0 + sht->bysize, height, height);
+ }
+ return;
+}
+
+void sheet_refresh(struct SHEET *sht, int bx0, int by0, int bx1, int by1)
+{
+ if (sht->height >= 0) { /* \82à\82µ\82à\95\\8e¦\92\86\82È\82ç\81A\90V\82µ\82¢\89º\82¶\82«\82Ì\8fî\95ñ\82É\89\88\82Á\82Ä\89æ\96Ê\82ð\95`\82«\92¼\82· */
+ sheet_refreshsub(sht->ctl, sht->vx0 + bx0, sht->vy0 + by0, sht->vx0 + bx1, sht->vy0 + by1, sht->height, sht->height);
+ }
+ return;
+}
+
+void sheet_slide(struct SHEET *sht, int vx0, int vy0)
+{
+ struct SHTCTL *ctl = sht->ctl;
+ int old_vx0 = sht->vx0, old_vy0 = sht->vy0;
+ sht->vx0 = vx0;
+ sht->vy0 = vy0;
+ if (sht->height >= 0) { /* \82à\82µ\82à\95\\8e¦\92\86\82È\82ç\81A\90V\82µ\82¢\89º\82¶\82«\82Ì\8fî\95ñ\82É\89\88\82Á\82Ä\89æ\96Ê\82ð\95`\82«\92¼\82· */
+ sheet_refreshmap(ctl, old_vx0, old_vy0, old_vx0 + sht->bxsize, old_vy0 + sht->bysize, 0);
+ sheet_refreshmap(ctl, vx0, vy0, vx0 + sht->bxsize, vy0 + sht->bysize, sht->height);
+ sheet_refreshsub(ctl, old_vx0, old_vy0, old_vx0 + sht->bxsize, old_vy0 + sht->bysize, 0, sht->height - 1);
+ sheet_refreshsub(ctl, vx0, vy0, vx0 + sht->bxsize, vy0 + sht->bysize, sht->height, sht->height);
+ }
+ return;
+}
+
+void sheet_free(struct SHEET *sht)
+{
+ if (sht->height >= 0) {
+ sheet_updown(sht, -1); /* \95\\8e¦\92\86\82È\82ç\82Ü\82¸\94ñ\95\\8e¦\82É\82·\82é */
+ }
+ sht->flags = 0; /* \96¢\8eg\97p\83}\81[\83N */
+ return;
+}
--- /dev/null
+ 1 00000000 [FORMAT "WCOFF"]
+ 2 00000000 [INSTRSET "i486p"]
+ 3 00000000 [OPTIMIZE 1]
+ 4 00000000 [OPTION 1]
+ 5 00000000 [BITS 32]
+ 6 00000000 EXTERN _memman_alloc_4k
+ 7 00000000 EXTERN _memman_free_4k
+ 8 00000000 [FILE "sheet.c"]
+ 9 [SECTION .text]
+ 10 00000000 GLOBAL _shtctl_init
+ 11 00000000 _shtctl_init:
+ 12 00000000 55 PUSH EBP
+ 13 00000001 89 E5 MOV EBP,ESP
+ 14 00000003 57 PUSH EDI
+ 15 00000004 56 PUSH ESI
+ 16 00000005 53 PUSH EBX
+ 17 00000006 8B 75 08 MOV ESI,DWORD [8+EBP]
+ 18 00000009 68 00002C14 PUSH 11284
+ 19 0000000E 8B 7D 10 MOV EDI,DWORD [16+EBP]
+ 20 00000011 56 PUSH ESI
+ 21 00000012 E8 [00000000] CALL _memman_alloc_4k
+ 22 00000017 89 C3 MOV EBX,EAX
+ 23 00000019 58 POP EAX
+ 24 0000001A 5A POP EDX
+ 25 0000001B 85 DB TEST EBX,EBX
+ 26 0000001D 74 4A JE L3
+ 27 0000001F 8B 45 14 MOV EAX,DWORD [20+EBP]
+ 28 00000022 0F AF C7 IMUL EAX,EDI
+ 29 00000025 50 PUSH EAX
+ 30 00000026 56 PUSH ESI
+ 31 00000027 E8 [00000000] CALL _memman_alloc_4k
+ 32 0000002C 85 C0 TEST EAX,EAX
+ 33 0000002E 89 43 04 MOV DWORD [4+EBX],EAX
+ 34 00000031 5A POP EDX
+ 35 00000032 59 POP ECX
+ 36 00000033 74 3E JE L11
+ 37 00000035 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 38 00000038 89 7B 08 MOV DWORD [8+EBX],EDI
+ 39 0000003B 89 03 MOV DWORD [EBX],EAX
+ 40 0000003D 8D 93 000027D8 LEA EDX,DWORD [10200+EBX]
+ 41 00000043 8B 45 14 MOV EAX,DWORD [20+EBP]
+ 42 00000046 89 43 0C MOV DWORD [12+EBX],EAX
+ 43 00000049 89 D8 MOV EAX,EBX
+ 44 0000004B C7 43 10 FFFFFFFF MOV DWORD [16+EBX],-1
+ 45 00000052 L9:
+ 46 00000052 C7 80 00000430 00000000 MOV DWORD [1072+EAX],0
+ 47 0000005C 89 98 00000434 MOV DWORD [1076+EAX],EBX
+ 48 00000062 83 C0 28 ADD EAX,40
+ 49 00000065 39 D0 CMP EAX,EDX
+ 50 00000067 7E E9 JLE L9
+ 51 00000069 L3:
+ 52 00000069 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 53 0000006C 89 D8 MOV EAX,EBX
+ 54 0000006E 5B POP EBX
+ 55 0000006F 5E POP ESI
+ 56 00000070 5F POP EDI
+ 57 00000071 5D POP EBP
+ 58 00000072 C3 RET
+ 59 00000073 L11:
+ 60 00000073 68 00002C14 PUSH 11284
+ 61 00000078 53 PUSH EBX
+ 62 00000079 56 PUSH ESI
+ 63 0000007A E8 [00000000] CALL _memman_free_4k
+ 64 0000007F 83 C4 0C ADD ESP,12
+ 65 00000082 EB E5 JMP L3
+ 66 00000084 GLOBAL _sheet_alloc
+ 67 00000084 _sheet_alloc:
+ 68 00000084 55 PUSH EBP
+ 69 00000085 31 D2 XOR EDX,EDX
+ 70 00000087 89 E5 MOV EBP,ESP
+ 71 00000089 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 72 0000008C 05 00000414 ADD EAX,1044
+ 73 00000091 L18:
+ 74 00000091 83 78 1C 00 CMP DWORD [28+EAX],0
+ 75 00000095 74 10 JE L21
+ 76 00000097 42 INC EDX
+ 77 00000098 83 C0 28 ADD EAX,40
+ 78 0000009B 81 FA 000000FF CMP EDX,255
+ 79 000000A1 7E EE JLE L18
+ 80 000000A3 31 C0 XOR EAX,EAX
+ 81 000000A5 L12:
+ 82 000000A5 5D POP EBP
+ 83 000000A6 C3 RET
+ 84 000000A7 L21:
+ 85 000000A7 C7 40 1C 00000001 MOV DWORD [28+EAX],1
+ 86 000000AE C7 40 18 FFFFFFFF MOV DWORD [24+EAX],-1
+ 87 000000B5 C7 40 24 00000000 MOV DWORD [36+EAX],0
+ 88 000000BC EB E7 JMP L12
+ 89 000000BE GLOBAL _sheet_setbuf
+ 90 000000BE _sheet_setbuf:
+ 91 000000BE 55 PUSH EBP
+ 92 000000BF 89 E5 MOV EBP,ESP
+ 93 000000C1 8B 55 08 MOV EDX,DWORD [8+EBP]
+ 94 000000C4 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 95 000000C7 89 02 MOV DWORD [EDX],EAX
+ 96 000000C9 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 97 000000CC 89 42 04 MOV DWORD [4+EDX],EAX
+ 98 000000CF 8B 45 14 MOV EAX,DWORD [20+EBP]
+ 99 000000D2 89 42 08 MOV DWORD [8+EDX],EAX
+ 100 000000D5 8B 45 18 MOV EAX,DWORD [24+EBP]
+ 101 000000D8 89 42 14 MOV DWORD [20+EDX],EAX
+ 102 000000DB 5D POP EBP
+ 103 000000DC C3 RET
+ 104 000000DD GLOBAL _sheet_refreshmap
+ 105 000000DD _sheet_refreshmap:
+ 106 000000DD 55 PUSH EBP
+ 107 000000DE 89 E5 MOV EBP,ESP
+ 108 000000E0 57 PUSH EDI
+ 109 000000E1 56 PUSH ESI
+ 110 000000E2 53 PUSH EBX
+ 111 000000E3 83 EC 30 SUB ESP,48
+ 112 000000E6 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 113 000000E9 83 7D 0C 00 CMP DWORD [12+EBP],0
+ 114 000000ED 8B 40 04 MOV EAX,DWORD [4+EAX]
+ 115 000000F0 89 45 D4 MOV DWORD [-44+EBP],EAX
+ 116 000000F3 0F 88 00000203 JS L83
+ 117 000000F9 L24:
+ 118 000000F9 83 7D 10 00 CMP DWORD [16+EBP],0
+ 119 000000FD 0F 88 000001ED JS L84
+ 120 00000103 L25:
+ 121 00000103 8B 55 08 MOV EDX,DWORD [8+EBP]
+ 122 00000106 8B 42 08 MOV EAX,DWORD [8+EDX]
+ 123 00000109 39 45 14 CMP DWORD [20+EBP],EAX
+ 124 0000010C 7E 03 JLE L26
+ 125 0000010E 89 45 14 MOV DWORD [20+EBP],EAX
+ 126 00000111 L26:
+ 127 00000111 8B 4D 08 MOV ECX,DWORD [8+EBP]
+ 128 00000114 8B 41 0C MOV EAX,DWORD [12+ECX]
+ 129 00000117 39 45 18 CMP DWORD [24+EBP],EAX
+ 130 0000011A 7E 03 JLE L27
+ 131 0000011C 89 45 18 MOV DWORD [24+EBP],EAX
+ 132 0000011F L27:
+ 133 0000011F 8B 75 08 MOV ESI,DWORD [8+EBP]
+ 134 00000122 8B 5D 1C MOV EBX,DWORD [28+EBP]
+ 135 00000125 89 5D F0 MOV DWORD [-16+EBP],EBX
+ 136 00000128 3B 5E 10 CMP EBX,DWORD [16+ESI]
+ 137 0000012B 0F 8F 000000DA JG L73
+ 138 00000131 L71:
+ 139 00000131 8B 55 08 MOV EDX,DWORD [8+EBP]
+ 140 00000134 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 141 00000137 8B 75 18 MOV ESI,DWORD [24+EBP]
+ 142 0000013A 8B 5D 14 MOV EBX,DWORD [20+EBP]
+ 143 0000013D 8B 7C 82 14 MOV EDI,DWORD [20+EDX+EAX*4]
+ 144 00000141 89 F8 MOV EAX,EDI
+ 145 00000143 29 D0 SUB EAX,EDX
+ 146 00000145 8B 0F MOV ECX,DWORD [EDI]
+ 147 00000147 2D 00000414 SUB EAX,1044
+ 148 0000014C 89 4D DC MOV DWORD [-36+EBP],ECX
+ 149 0000014F C1 F8 03 SAR EAX,3
+ 150 00000152 8B 4D 10 MOV ECX,DWORD [16+EBP]
+ 151 00000155 69 C0 CCCCCCCD IMUL EAX,EAX,-858993459
+ 152 0000015B 88 45 DB MOV BYTE [-37+EBP],AL
+ 153 0000015E 8B 57 0C MOV EDX,DWORD [12+EDI]
+ 154 00000161 8B 47 10 MOV EAX,DWORD [16+EDI]
+ 155 00000164 29 D3 SUB EBX,EDX
+ 156 00000166 29 C6 SUB ESI,EAX
+ 157 00000168 29 C1 SUB ECX,EAX
+ 158 0000016A 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 159 0000016D 89 5D E8 MOV DWORD [-24+EBP],EBX
+ 160 00000170 29 D0 SUB EAX,EDX
+ 161 00000172 89 75 E4 MOV DWORD [-28+EBP],ESI
+ 162 00000175 89 45 EC MOV DWORD [-20+EBP],EAX
+ 163 00000178 0F 88 00000166 JS L85
+ 164 0000017E L32:
+ 165 0000017E 85 C9 TEST ECX,ECX
+ 166 00000180 0F 88 00000157 JS L86
+ 167 00000186 L33:
+ 168 00000186 8B 47 04 MOV EAX,DWORD [4+EDI]
+ 169 00000189 39 45 E8 CMP DWORD [-24+EBP],EAX
+ 170 0000018C 7E 03 JLE L34
+ 171 0000018E 89 45 E8 MOV DWORD [-24+EBP],EAX
+ 172 00000191 L34:
+ 173 00000191 8B 47 08 MOV EAX,DWORD [8+EDI]
+ 174 00000194 39 45 E4 CMP DWORD [-28+EBP],EAX
+ 175 00000197 7E 03 JLE L35
+ 176 00000199 89 45 E4 MOV DWORD [-28+EBP],EAX
+ 177 0000019C L35:
+ 178 0000019C 83 7F 14 FF CMP DWORD [20+EDI],-1
+ 179 000001A0 74 71 JE L87
+ 180 000001A2 89 CA MOV EDX,ECX
+ 181 000001A4 3B 4D E4 CMP ECX,DWORD [-28+EBP]
+ 182 000001A7 7D 50 JGE L30
+ 183 000001A9 L70:
+ 184 000001A9 8B 47 10 MOV EAX,DWORD [16+EDI]
+ 185 000001AC 8B 4D EC MOV ECX,DWORD [-20+EBP]
+ 186 000001AF 01 D0 ADD EAX,EDX
+ 187 000001B1 3B 4D E8 CMP ECX,DWORD [-24+EBP]
+ 188 000001B4 89 45 C4 MOV DWORD [-60+EBP],EAX
+ 189 000001B7 7D 3A JGE L82
+ 190 000001B9 L69:
+ 191 000001B9 89 D0 MOV EAX,EDX
+ 192 000001BB 8B 5F 0C MOV EBX,DWORD [12+EDI]
+ 193 000001BE 0F AF 47 04 IMUL EAX,DWORD [4+EDI]
+ 194 000001C2 01 CB ADD EBX,ECX
+ 195 000001C4 8B 75 DC MOV ESI,DWORD [-36+EBP]
+ 196 000001C7 01 C8 ADD EAX,ECX
+ 197 000001C9 89 5D C8 MOV DWORD [-56+EBP],EBX
+ 198 000001CC 0F B6 34 30 MOVZX ESI,BYTE [EAX+ESI*1]
+ 199 000001D0 3B 77 14 CMP ESI,DWORD [20+EDI]
+ 200 000001D3 74 18 JE L66
+ 201 000001D5 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 202 000001D8 8B 5D C4 MOV EBX,DWORD [-60+EBP]
+ 203 000001DB 8B 75 C8 MOV ESI,DWORD [-56+EBP]
+ 204 000001DE 0F AF 58 08 IMUL EBX,DWORD [8+EAX]
+ 205 000001E2 01 DE ADD ESI,EBX
+ 206 000001E4 8A 45 DB MOV AL,BYTE [-37+EBP]
+ 207 000001E7 8B 5D D4 MOV EBX,DWORD [-44+EBP]
+ 208 000001EA 88 04 1E MOV BYTE [ESI+EBX*1],AL
+ 209 000001ED L66:
+ 210 000001ED 41 INC ECX
+ 211 000001EE 3B 4D E8 CMP ECX,DWORD [-24+EBP]
+ 212 000001F1 7C C6 JL L69
+ 213 000001F3 L82:
+ 214 000001F3 42 INC EDX
+ 215 000001F4 3B 55 E4 CMP EDX,DWORD [-28+EBP]
+ 216 000001F7 7C B0 JL L70
+ 217 000001F9 L30:
+ 218 000001F9 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 219 000001FC FF 45 F0 INC DWORD [-16+EBP]
+ 220 000001FF 8B 75 F0 MOV ESI,DWORD [-16+EBP]
+ 221 00000202 3B 70 10 CMP ESI,DWORD [16+EAX]
+ 222 00000205 0F 8E FFFFFF26 JLE L71
+ 223 0000020B L73:
+ 224 0000020B 83 C4 30 ADD ESP,48
+ 225 0000020E 5B POP EBX
+ 226 0000020F 5E POP ESI
+ 227 00000210 5F POP EDI
+ 228 00000211 5D POP EBP
+ 229 00000212 C3 RET
+ 230 00000213 L87:
+ 231 00000213 83 E2 03 AND EDX,3
+ 232 00000216 75 7F JNE L37
+ 233 00000218 F7 45 EC 00000003 TEST DWORD [-20+EBP],3
+ 234 0000021F 75 76 JNE L37
+ 235 00000221 F7 45 E8 00000003 TEST DWORD [-24+EBP],3
+ 236 00000228 75 6D JNE L37
+ 237 0000022A 8B 55 EC MOV EDX,DWORD [-20+EBP]
+ 238 0000022D 29 55 E8 SUB DWORD [-24+EBP],EDX
+ 239 00000230 BA 00000004 MOV EDX,4
+ 240 00000235 89 D3 MOV EBX,EDX
+ 241 00000237 8B 45 E8 MOV EAX,DWORD [-24+EBP]
+ 242 0000023A 99 CDQ
+ 243 0000023B F7 FB IDIV EBX
+ 244 0000023D 89 45 D0 MOV DWORD [-48+EBP],EAX
+ 245 00000240 89 CA MOV EDX,ECX
+ 246 00000242 0F B6 45 DB MOVZX EAX,BYTE [-37+EBP]
+ 247 00000246 89 C6 MOV ESI,EAX
+ 248 00000248 C1 E6 08 SAL ESI,8
+ 249 0000024B 09 C6 OR ESI,EAX
+ 250 0000024D C1 E0 10 SAL EAX,16
+ 251 00000250 09 C6 OR ESI,EAX
+ 252 00000252 C1 E0 08 SAL EAX,8
+ 253 00000255 09 C6 OR ESI,EAX
+ 254 00000257 3B 4D E4 CMP ECX,DWORD [-28+EBP]
+ 255 0000025A 89 75 E0 MOV DWORD [-32+EBP],ESI
+ 256 0000025D 7D 9A JGE L30
+ 257 0000025F L47:
+ 258 0000025F 8B 47 10 MOV EAX,DWORD [16+EDI]
+ 259 00000262 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 260 00000265 01 D0 ADD EAX,EDX
+ 261 00000267 8B 4D EC MOV ECX,DWORD [-20+EBP]
+ 262 0000026A 0F AF 43 08 IMUL EAX,DWORD [8+EBX]
+ 263 0000026E 03 4F 0C ADD ECX,DWORD [12+EDI]
+ 264 00000271 89 45 C4 MOV DWORD [-60+EBP],EAX
+ 265 00000274 01 C8 ADD EAX,ECX
+ 266 00000276 31 C9 XOR ECX,ECX
+ 267 00000278 03 45 D4 ADD EAX,DWORD [-44+EBP]
+ 268 0000027B 3B 4D D0 CMP ECX,DWORD [-48+EBP]
+ 269 0000027E 7D 0C JGE L76
+ 270 00000280 L46:
+ 271 00000280 8B 75 E0 MOV ESI,DWORD [-32+EBP]
+ 272 00000283 89 34 88 MOV DWORD [EAX+ECX*4],ESI
+ 273 00000286 41 INC ECX
+ 274 00000287 3B 4D D0 CMP ECX,DWORD [-48+EBP]
+ 275 0000028A 7C F4 JL L46
+ 276 0000028C L76:
+ 277 0000028C 42 INC EDX
+ 278 0000028D 3B 55 E4 CMP EDX,DWORD [-28+EBP]
+ 279 00000290 7C CD JL L47
+ 280 00000292 E9 FFFFFF62 JMP L30
+ 281 00000297 L37:
+ 282 00000297 89 CA MOV EDX,ECX
+ 283 00000299 3B 4D E4 CMP ECX,DWORD [-28+EBP]
+ 284 0000029C 0F 8D FFFFFF57 JGE L30
+ 285 000002A2 L58:
+ 286 000002A2 8B 47 10 MOV EAX,DWORD [16+EDI]
+ 287 000002A5 8B 4D EC MOV ECX,DWORD [-20+EBP]
+ 288 000002A8 01 D0 ADD EAX,EDX
+ 289 000002AA 3B 4D E8 CMP ECX,DWORD [-24+EBP]
+ 290 000002AD 89 45 C4 MOV DWORD [-60+EBP],EAX
+ 291 000002B0 7D 20 JGE L79
+ 292 000002B2 L57:
+ 293 000002B2 8B 75 08 MOV ESI,DWORD [8+EBP]
+ 294 000002B5 8B 45 C4 MOV EAX,DWORD [-60+EBP]
+ 295 000002B8 8B 5F 0C MOV EBX,DWORD [12+EDI]
+ 296 000002BB 0F AF 46 08 IMUL EAX,DWORD [8+ESI]
+ 297 000002BF 01 CB ADD EBX,ECX
+ 298 000002C1 8B 75 D4 MOV ESI,DWORD [-44+EBP]
+ 299 000002C4 01 C3 ADD EBX,EAX
+ 300 000002C6 41 INC ECX
+ 301 000002C7 8A 45 DB MOV AL,BYTE [-37+EBP]
+ 302 000002CA 88 04 33 MOV BYTE [EBX+ESI*1],AL
+ 303 000002CD 3B 4D E8 CMP ECX,DWORD [-24+EBP]
+ 304 000002D0 7C E0 JL L57
+ 305 000002D2 L79:
+ 306 000002D2 42 INC EDX
+ 307 000002D3 3B 55 E4 CMP EDX,DWORD [-28+EBP]
+ 308 000002D6 7C CA JL L58
+ 309 000002D8 E9 FFFFFF1C JMP L30
+ 310 000002DD L86:
+ 311 000002DD 31 C9 XOR ECX,ECX
+ 312 000002DF E9 FFFFFEA2 JMP L33
+ 313 000002E4 L85:
+ 314 000002E4 C7 45 EC 00000000 MOV DWORD [-20+EBP],0
+ 315 000002EB E9 FFFFFE8E JMP L32
+ 316 000002F0 L84:
+ 317 000002F0 C7 45 10 00000000 MOV DWORD [16+EBP],0
+ 318 000002F7 E9 FFFFFE07 JMP L25
+ 319 000002FC L83:
+ 320 000002FC C7 45 0C 00000000 MOV DWORD [12+EBP],0
+ 321 00000303 E9 FFFFFDF1 JMP L24
+ 322 00000308 GLOBAL _sheet_refreshsub
+ 323 00000308 _sheet_refreshsub:
+ 324 00000308 55 PUSH EBP
+ 325 00000309 89 E5 MOV EBP,ESP
+ 326 0000030B 57 PUSH EDI
+ 327 0000030C 56 PUSH ESI
+ 328 0000030D 53 PUSH EBX
+ 329 0000030E 83 EC 54 SUB ESP,84
+ 330 00000311 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 331 00000314 8B 55 08 MOV EDX,DWORD [8+EBP]
+ 332 00000317 83 7D 0C 00 CMP DWORD [12+EBP],0
+ 333 0000031B 8B 00 MOV EAX,DWORD [EAX]
+ 334 0000031D 8B 52 04 MOV EDX,DWORD [4+EDX]
+ 335 00000320 89 45 C4 MOV DWORD [-60+EBP],EAX
+ 336 00000323 89 55 C0 MOV DWORD [-64+EBP],EDX
+ 337 00000326 0F 88 000003B2 JS L155
+ 338 0000032C L89:
+ 339 0000032C 83 7D 10 00 CMP DWORD [16+EBP],0
+ 340 00000330 0F 88 0000039C JS L156
+ 341 00000336 L90:
+ 342 00000336 8B 4D 08 MOV ECX,DWORD [8+EBP]
+ 343 00000339 8B 41 08 MOV EAX,DWORD [8+ECX]
+ 344 0000033C 39 45 14 CMP DWORD [20+EBP],EAX
+ 345 0000033F 7E 03 JLE L91
+ 346 00000341 89 45 14 MOV DWORD [20+EBP],EAX
+ 347 00000344 L91:
+ 348 00000344 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 349 00000347 8B 43 0C MOV EAX,DWORD [12+EBX]
+ 350 0000034A 39 45 18 CMP DWORD [24+EBP],EAX
+ 351 0000034D 7E 03 JLE L92
+ 352 0000034F 89 45 18 MOV DWORD [24+EBP],EAX
+ 353 00000352 L92:
+ 354 00000352 8B 75 1C MOV ESI,DWORD [28+EBP]
+ 355 00000355 8B 45 20 MOV EAX,DWORD [32+EBP]
+ 356 00000358 89 75 F0 MOV DWORD [-16+EBP],ESI
+ 357 0000035B 39 C6 CMP ESI,EAX
+ 358 0000035D 0F 8F 0000023B JG L145
+ 359 00000363 L143:
+ 360 00000363 8B 4D 08 MOV ECX,DWORD [8+EBP]
+ 361 00000366 8B 55 F0 MOV EDX,DWORD [-16+EBP]
+ 362 00000369 8B 75 14 MOV ESI,DWORD [20+EBP]
+ 363 0000036C 8B 7C 91 14 MOV EDI,DWORD [20+ECX+EDX*4]
+ 364 00000370 89 F8 MOV EAX,EDI
+ 365 00000372 29 C8 SUB EAX,ECX
+ 366 00000374 8B 57 0C MOV EDX,DWORD [12+EDI]
+ 367 00000377 2D 00000414 SUB EAX,1044
+ 368 0000037C 29 D6 SUB ESI,EDX
+ 369 0000037E C1 F8 03 SAR EAX,3
+ 370 00000381 8B 1F MOV EBX,DWORD [EDI]
+ 371 00000383 69 C0 CCCCCCCD IMUL EAX,EAX,-858993459
+ 372 00000389 89 5D C8 MOV DWORD [-56+EBP],EBX
+ 373 0000038C 8B 4D 10 MOV ECX,DWORD [16+EBP]
+ 374 0000038F 88 45 BF MOV BYTE [-65+EBP],AL
+ 375 00000392 89 75 E4 MOV DWORD [-28+EBP],ESI
+ 376 00000395 8B 47 10 MOV EAX,DWORD [16+EDI]
+ 377 00000398 8B 5D 18 MOV EBX,DWORD [24+EBP]
+ 378 0000039B 8B 75 0C MOV ESI,DWORD [12+EBP]
+ 379 0000039E 29 C3 SUB EBX,EAX
+ 380 000003A0 29 C1 SUB ECX,EAX
+ 381 000003A2 89 5D E0 MOV DWORD [-32+EBP],EBX
+ 382 000003A5 29 D6 SUB ESI,EDX
+ 383 000003A7 89 75 E8 MOV DWORD [-24+EBP],ESI
+ 384 000003AA 0F 88 00000316 JS L157
+ 385 000003B0 L97:
+ 386 000003B0 85 C9 TEST ECX,ECX
+ 387 000003B2 0F 88 00000307 JS L158
+ 388 000003B8 L98:
+ 389 000003B8 8B 47 04 MOV EAX,DWORD [4+EDI]
+ 390 000003BB 39 45 E4 CMP DWORD [-28+EBP],EAX
+ 391 000003BE 7E 03 JLE L99
+ 392 000003C0 89 45 E4 MOV DWORD [-28+EBP],EAX
+ 393 000003C3 L99:
+ 394 000003C3 8B 47 08 MOV EAX,DWORD [8+EDI]
+ 395 000003C6 39 45 E0 CMP DWORD [-32+EBP],EAX
+ 396 000003C9 7E 03 JLE L100
+ 397 000003CB 89 45 E0 MOV DWORD [-32+EBP],EAX
+ 398 000003CE L100:
+ 399 000003CE 83 E2 03 AND EDX,3
+ 400 000003D1 0F 85 00000286 JNE L101
+ 401 000003D7 8B 55 E8 MOV EDX,DWORD [-24+EBP]
+ 402 000003DA BB 00000004 MOV EBX,4
+ 403 000003DF 83 C2 03 ADD EDX,3
+ 404 000003E2 89 D0 MOV EAX,EDX
+ 405 000003E4 99 CDQ
+ 406 000003E5 F7 FB IDIV EBX
+ 407 000003E7 89 45 A4 MOV DWORD [-92+EBP],EAX
+ 408 000003EA 8B 45 E4 MOV EAX,DWORD [-28+EBP]
+ 409 000003ED 99 CDQ
+ 410 000003EE F7 FB IDIV EBX
+ 411 000003F0 8B 55 A4 MOV EDX,DWORD [-92+EBP]
+ 412 000003F3 29 D0 SUB EAX,EDX
+ 413 000003F5 89 45 D8 MOV DWORD [-40+EBP],EAX
+ 414 000003F8 0F B6 45 BF MOVZX EAX,BYTE [-65+EBP]
+ 415 000003FC 89 C3 MOV EBX,EAX
+ 416 000003FE C1 E3 08 SAL EBX,8
+ 417 00000401 09 C3 OR EBX,EAX
+ 418 00000403 C1 E0 10 SAL EAX,16
+ 419 00000406 09 C3 OR EBX,EAX
+ 420 00000408 C1 E0 08 SAL EAX,8
+ 421 0000040B 09 C3 OR EBX,EAX
+ 422 0000040D 3B 4D E0 CMP ECX,DWORD [-32+EBP]
+ 423 00000410 89 5D DC MOV DWORD [-36+EBP],EBX
+ 424 00000413 89 CB MOV EBX,ECX
+ 425 00000415 0F 8D 00000174 JGE L95
+ 426 0000041B L130:
+ 427 0000041B 8B 77 10 MOV ESI,DWORD [16+EDI]
+ 428 0000041E 8B 55 E8 MOV EDX,DWORD [-24+EBP]
+ 429 00000421 01 DE ADD ESI,EBX
+ 430 00000423 3B 55 E4 CMP EDX,DWORD [-28+EBP]
+ 431 00000426 89 75 EC MOV DWORD [-20+EBP],ESI
+ 432 00000429 7D 3D JGE L107
+ 433 0000042B F7 C2 00000003 TEST EDX,3
+ 434 00000431 74 35 JE L107
+ 435 00000433 L112:
+ 436 00000433 8B 47 0C MOV EAX,DWORD [12+EDI]
+ 437 00000436 8B 4D 08 MOV ECX,DWORD [8+EBP]
+ 438 00000439 01 D0 ADD EAX,EDX
+ 439 0000043B 89 45 A8 MOV DWORD [-88+EBP],EAX
+ 440 0000043E 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 441 00000441 0F AF 41 08 IMUL EAX,DWORD [8+ECX]
+ 442 00000445 8B 75 A8 MOV ESI,DWORD [-88+EBP]
+ 443 00000448 8D 0C 06 LEA ECX,DWORD [ESI+EAX*1]
+ 444 0000044B 8B 75 C0 MOV ESI,DWORD [-64+EBP]
+ 445 0000044E 8A 45 BF MOV AL,BYTE [-65+EBP]
+ 446 00000451 38 04 31 CMP BYTE [ECX+ESI*1],AL
+ 447 00000454 0F 84 000001EA JE L159
+ 448 0000045A L108:
+ 449 0000045A 42 INC EDX
+ 450 0000045B 3B 55 E4 CMP EDX,DWORD [-28+EBP]
+ 451 0000045E 7D 08 JGE L107
+ 452 00000460 F7 C2 00000003 TEST EDX,3
+ 453 00000466 75 CB JNE L112
+ 454 00000468 L107:
+ 455 00000468 8B 47 0C MOV EAX,DWORD [12+EDI]
+ 456 0000046B 8B 4D 08 MOV ECX,DWORD [8+EBP]
+ 457 0000046E 01 D0 ADD EAX,EDX
+ 458 00000470 8B 75 C0 MOV ESI,DWORD [-64+EBP]
+ 459 00000473 89 45 A8 MOV DWORD [-88+EBP],EAX
+ 460 00000476 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 461 00000479 0F AF 41 08 IMUL EAX,DWORD [8+ECX]
+ 462 0000047D 03 45 A8 ADD EAX,DWORD [-88+EBP]
+ 463 00000480 01 C6 ADD ESI,EAX
+ 464 00000482 03 45 C4 ADD EAX,DWORD [-60+EBP]
+ 465 00000485 89 75 D4 MOV DWORD [-44+EBP],ESI
+ 466 00000488 89 45 D0 MOV DWORD [-48+EBP],EAX
+ 467 0000048B 89 D8 MOV EAX,EBX
+ 468 0000048D 0F AF 47 04 IMUL EAX,DWORD [4+EDI]
+ 469 00000491 01 D0 ADD EAX,EDX
+ 470 00000493 03 45 C8 ADD EAX,DWORD [-56+EBP]
+ 471 00000496 C7 45 A4 00000000 MOV DWORD [-92+EBP],0
+ 472 0000049D 89 45 CC MOV DWORD [-52+EBP],EAX
+ 473 000004A0 8B 45 D8 MOV EAX,DWORD [-40+EBP]
+ 474 000004A3 39 45 A4 CMP DWORD [-92+EBP],EAX
+ 475 000004A6 0F 8D 000000AB JGE L149
+ 476 000004AC 89 55 AC MOV DWORD [-84+EBP],EDX
+ 477 000004AF L123:
+ 478 000004AF 8B 4D A4 MOV ECX,DWORD [-92+EBP]
+ 479 000004B2 8B 75 D4 MOV ESI,DWORD [-44+EBP]
+ 480 000004B5 8B 45 DC MOV EAX,DWORD [-36+EBP]
+ 481 000004B8 39 04 8E CMP DWORD [ESI+ECX*4],EAX
+ 482 000004BB 0F 84 00000172 JE L160
+ 483 000004C1 8B 4D 08 MOV ECX,DWORD [8+EBP]
+ 484 000004C4 8B 75 EC MOV ESI,DWORD [-20+EBP]
+ 485 000004C7 8B 45 AC MOV EAX,DWORD [-84+EBP]
+ 486 000004CA 0F AF 71 08 IMUL ESI,DWORD [8+ECX]
+ 487 000004CE 03 47 0C ADD EAX,DWORD [12+EDI]
+ 488 000004D1 8B 4D C0 MOV ECX,DWORD [-64+EBP]
+ 489 000004D4 01 C6 ADD ESI,EAX
+ 490 000004D6 89 45 A8 MOV DWORD [-88+EBP],EAX
+ 491 000004D9 89 75 B8 MOV DWORD [-72+EBP],ESI
+ 492 000004DC 8A 45 BF MOV AL,BYTE [-65+EBP]
+ 493 000004DF 38 04 0E CMP BYTE [ESI+ECX*1],AL
+ 494 000004E2 0F 84 0000012E JE L161
+ 495 000004E8 L119:
+ 496 000004E8 8B 4D 08 MOV ECX,DWORD [8+EBP]
+ 497 000004EB 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 498 000004EE 8B 75 C0 MOV ESI,DWORD [-64+EBP]
+ 499 000004F1 0F AF 41 08 IMUL EAX,DWORD [8+ECX]
+ 500 000004F5 03 45 A8 ADD EAX,DWORD [-88+EBP]
+ 501 000004F8 8A 4D BF MOV CL,BYTE [-65+EBP]
+ 502 000004FB 89 45 B4 MOV DWORD [-76+EBP],EAX
+ 503 000004FE 38 4C 30 01 CMP BYTE [1+EAX+ESI*1],CL
+ 504 00000502 0F 84 000000EF JE L162
+ 505 00000508 L120:
+ 506 00000508 8B 75 08 MOV ESI,DWORD [8+EBP]
+ 507 0000050B 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 508 0000050E 8A 4D BF MOV CL,BYTE [-65+EBP]
+ 509 00000511 0F AF 46 08 IMUL EAX,DWORD [8+ESI]
+ 510 00000515 03 45 A8 ADD EAX,DWORD [-88+EBP]
+ 511 00000518 8B 75 C0 MOV ESI,DWORD [-64+EBP]
+ 512 0000051B 89 45 B0 MOV DWORD [-80+EBP],EAX
+ 513 0000051E 38 4C 30 02 CMP BYTE [2+EAX+ESI*1],CL
+ 514 00000522 0F 84 000000B0 JE L163
+ 515 00000528 L121:
+ 516 00000528 8B 75 08 MOV ESI,DWORD [8+EBP]
+ 517 0000052B 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 518 0000052E 0F AF 46 08 IMUL EAX,DWORD [8+ESI]
+ 519 00000532 8B 75 A8 MOV ESI,DWORD [-88+EBP]
+ 520 00000535 8D 0C 06 LEA ECX,DWORD [ESI+EAX*1]
+ 521 00000538 8B 75 C0 MOV ESI,DWORD [-64+EBP]
+ 522 0000053B 8A 45 BF MOV AL,BYTE [-65+EBP]
+ 523 0000053E 38 44 31 03 CMP BYTE [3+ECX+ESI*1],AL
+ 524 00000542 74 78 JE L164
+ 525 00000544 L115:
+ 526 00000544 8B 45 D8 MOV EAX,DWORD [-40+EBP]
+ 527 00000547 FF 45 A4 INC DWORD [-92+EBP]
+ 528 0000054A 83 45 AC 04 ADD DWORD [-84+EBP],4
+ 529 0000054E 39 45 A4 CMP DWORD [-92+EBP],EAX
+ 530 00000551 0F 8C FFFFFF58 JL L123
+ 531 00000557 L149:
+ 532 00000557 8B 4D D8 MOV ECX,DWORD [-40+EBP]
+ 533 0000055A 8D 14 8A LEA EDX,DWORD [EDX+ECX*4]
+ 534 0000055D 3B 55 E4 CMP EDX,DWORD [-28+EBP]
+ 535 00000560 7D 23 JGE L151
+ 536 00000562 L129:
+ 537 00000562 8B 4D 08 MOV ECX,DWORD [8+EBP]
+ 538 00000565 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 539 00000568 8B 77 0C MOV ESI,DWORD [12+EDI]
+ 540 0000056B 0F AF 41 08 IMUL EAX,DWORD [8+ECX]
+ 541 0000056F 01 D6 ADD ESI,EDX
+ 542 00000571 8D 0C 06 LEA ECX,DWORD [ESI+EAX*1]
+ 543 00000574 8B 75 C0 MOV ESI,DWORD [-64+EBP]
+ 544 00000577 8A 45 BF MOV AL,BYTE [-65+EBP]
+ 545 0000057A 38 04 31 CMP BYTE [ECX+ESI*1],AL
+ 546 0000057D 74 27 JE L165
+ 547 0000057F L126:
+ 548 0000057F 42 INC EDX
+ 549 00000580 3B 55 E4 CMP EDX,DWORD [-28+EBP]
+ 550 00000583 7C DD JL L129
+ 551 00000585 L151:
+ 552 00000585 43 INC EBX
+ 553 00000586 3B 5D E0 CMP EBX,DWORD [-32+EBP]
+ 554 00000589 0F 8C FFFFFE8C JL L130
+ 555 0000058F L95:
+ 556 0000058F 8B 45 20 MOV EAX,DWORD [32+EBP]
+ 557 00000592 FF 45 F0 INC DWORD [-16+EBP]
+ 558 00000595 39 45 F0 CMP DWORD [-16+EBP],EAX
+ 559 00000598 0F 8E FFFFFDC5 JLE L143
+ 560 0000059E L145:
+ 561 0000059E 83 C4 54 ADD ESP,84
+ 562 000005A1 5B POP EBX
+ 563 000005A2 5E POP ESI
+ 564 000005A3 5F POP EDI
+ 565 000005A4 5D POP EBP
+ 566 000005A5 C3 RET
+ 567 000005A6 L165:
+ 568 000005A6 89 D8 MOV EAX,EBX
+ 569 000005A8 8B 75 C8 MOV ESI,DWORD [-56+EBP]
+ 570 000005AB 0F AF 47 04 IMUL EAX,DWORD [4+EDI]
+ 571 000005AF 01 D0 ADD EAX,EDX
+ 572 000005B1 8A 04 30 MOV AL,BYTE [EAX+ESI*1]
+ 573 000005B4 8B 75 C4 MOV ESI,DWORD [-60+EBP]
+ 574 000005B7 88 04 31 MOV BYTE [ECX+ESI*1],AL
+ 575 000005BA EB C3 JMP L126
+ 576 000005BC L164:
+ 577 000005BC 89 D8 MOV EAX,EBX
+ 578 000005BE 8B 75 C8 MOV ESI,DWORD [-56+EBP]
+ 579 000005C1 0F AF 47 04 IMUL EAX,DWORD [4+EDI]
+ 580 000005C5 03 45 AC ADD EAX,DWORD [-84+EBP]
+ 581 000005C8 8A 44 30 03 MOV AL,BYTE [3+EAX+ESI*1]
+ 582 000005CC 8B 75 C4 MOV ESI,DWORD [-60+EBP]
+ 583 000005CF 88 44 31 03 MOV BYTE [3+ECX+ESI*1],AL
+ 584 000005D3 E9 FFFFFF6C JMP L115
+ 585 000005D8 L163:
+ 586 000005D8 89 D8 MOV EAX,EBX
+ 587 000005DA 8B 4D C8 MOV ECX,DWORD [-56+EBP]
+ 588 000005DD 0F AF 47 04 IMUL EAX,DWORD [4+EDI]
+ 589 000005E1 03 45 AC ADD EAX,DWORD [-84+EBP]
+ 590 000005E4 8B 75 C4 MOV ESI,DWORD [-60+EBP]
+ 591 000005E7 8A 44 08 02 MOV AL,BYTE [2+EAX+ECX*1]
+ 592 000005EB 8B 4D B0 MOV ECX,DWORD [-80+EBP]
+ 593 000005EE 88 44 31 02 MOV BYTE [2+ECX+ESI*1],AL
+ 594 000005F2 E9 FFFFFF31 JMP L121
+ 595 000005F7 L162:
+ 596 000005F7 89 D8 MOV EAX,EBX
+ 597 000005F9 8B 4D C8 MOV ECX,DWORD [-56+EBP]
+ 598 000005FC 0F AF 47 04 IMUL EAX,DWORD [4+EDI]
+ 599 00000600 03 45 AC ADD EAX,DWORD [-84+EBP]
+ 600 00000603 8B 75 C4 MOV ESI,DWORD [-60+EBP]
+ 601 00000606 8A 44 08 01 MOV AL,BYTE [1+EAX+ECX*1]
+ 602 0000060A 8B 4D B4 MOV ECX,DWORD [-76+EBP]
+ 603 0000060D 88 44 31 01 MOV BYTE [1+ECX+ESI*1],AL
+ 604 00000611 E9 FFFFFEF2 JMP L120
+ 605 00000616 L161:
+ 606 00000616 89 D8 MOV EAX,EBX
+ 607 00000618 8B 75 C8 MOV ESI,DWORD [-56+EBP]
+ 608 0000061B 0F AF 47 04 IMUL EAX,DWORD [4+EDI]
+ 609 0000061F 03 45 AC ADD EAX,DWORD [-84+EBP]
+ 610 00000622 8B 4D C4 MOV ECX,DWORD [-60+EBP]
+ 611 00000625 8A 04 30 MOV AL,BYTE [EAX+ESI*1]
+ 612 00000628 8B 75 B8 MOV ESI,DWORD [-72+EBP]
+ 613 0000062B 88 04 0E MOV BYTE [ESI+ECX*1],AL
+ 614 0000062E E9 FFFFFEB5 JMP L119
+ 615 00000633 L160:
+ 616 00000633 8B 75 CC MOV ESI,DWORD [-52+EBP]
+ 617 00000636 8B 04 8E MOV EAX,DWORD [ESI+ECX*4]
+ 618 00000639 8B 75 D0 MOV ESI,DWORD [-48+EBP]
+ 619 0000063C 89 04 8E MOV DWORD [ESI+ECX*4],EAX
+ 620 0000063F E9 FFFFFF00 JMP L115
+ 621 00000644 L159:
+ 622 00000644 89 D8 MOV EAX,EBX
+ 623 00000646 8B 75 C8 MOV ESI,DWORD [-56+EBP]
+ 624 00000649 0F AF 47 04 IMUL EAX,DWORD [4+EDI]
+ 625 0000064D 01 D0 ADD EAX,EDX
+ 626 0000064F 8A 04 30 MOV AL,BYTE [EAX+ESI*1]
+ 627 00000652 8B 75 C4 MOV ESI,DWORD [-60+EBP]
+ 628 00000655 88 04 31 MOV BYTE [ECX+ESI*1],AL
+ 629 00000658 E9 FFFFFDFD JMP L108
+ 630 0000065D L101:
+ 631 0000065D 89 CB MOV EBX,ECX
+ 632 0000065F 3B 4D E0 CMP ECX,DWORD [-32+EBP]
+ 633 00000662 0F 8D FFFFFF27 JGE L95
+ 634 00000668 L142:
+ 635 00000668 8B 47 10 MOV EAX,DWORD [16+EDI]
+ 636 0000066B 8B 55 E8 MOV EDX,DWORD [-24+EBP]
+ 637 0000066E 01 D8 ADD EAX,EBX
+ 638 00000670 3B 55 E4 CMP EDX,DWORD [-28+EBP]
+ 639 00000673 89 45 EC MOV DWORD [-20+EBP],EAX
+ 640 00000676 7D 26 JGE L154
+ 641 00000678 L141:
+ 642 00000678 8B 75 08 MOV ESI,DWORD [8+EBP]
+ 643 0000067B 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 644 0000067E 8B 4F 0C MOV ECX,DWORD [12+EDI]
+ 645 00000681 0F AF 46 08 IMUL EAX,DWORD [8+ESI]
+ 646 00000685 01 D1 ADD ECX,EDX
+ 647 00000687 8B 75 C0 MOV ESI,DWORD [-64+EBP]
+ 648 0000068A 89 4D A8 MOV DWORD [-88+EBP],ECX
+ 649 0000068D 8D 0C 01 LEA ECX,DWORD [ECX+EAX*1]
+ 650 00000690 8A 45 BF MOV AL,BYTE [-65+EBP]
+ 651 00000693 38 04 31 CMP BYTE [ECX+ESI*1],AL
+ 652 00000696 74 11 JE L166
+ 653 00000698 L138:
+ 654 00000698 42 INC EDX
+ 655 00000699 3B 55 E4 CMP EDX,DWORD [-28+EBP]
+ 656 0000069C 7C DA JL L141
+ 657 0000069E L154:
+ 658 0000069E 43 INC EBX
+ 659 0000069F 3B 5D E0 CMP EBX,DWORD [-32+EBP]
+ 660 000006A2 7C C4 JL L142
+ 661 000006A4 E9 FFFFFEE6 JMP L95
+ 662 000006A9 L166:
+ 663 000006A9 89 D8 MOV EAX,EBX
+ 664 000006AB 8B 75 C8 MOV ESI,DWORD [-56+EBP]
+ 665 000006AE 0F AF 47 04 IMUL EAX,DWORD [4+EDI]
+ 666 000006B2 01 D0 ADD EAX,EDX
+ 667 000006B4 8A 04 30 MOV AL,BYTE [EAX+ESI*1]
+ 668 000006B7 8B 75 C4 MOV ESI,DWORD [-60+EBP]
+ 669 000006BA 88 04 31 MOV BYTE [ECX+ESI*1],AL
+ 670 000006BD EB D9 JMP L138
+ 671 000006BF L158:
+ 672 000006BF 31 C9 XOR ECX,ECX
+ 673 000006C1 E9 FFFFFCF2 JMP L98
+ 674 000006C6 L157:
+ 675 000006C6 C7 45 E8 00000000 MOV DWORD [-24+EBP],0
+ 676 000006CD E9 FFFFFCDE JMP L97
+ 677 000006D2 L156:
+ 678 000006D2 C7 45 10 00000000 MOV DWORD [16+EBP],0
+ 679 000006D9 E9 FFFFFC58 JMP L90
+ 680 000006DE L155:
+ 681 000006DE C7 45 0C 00000000 MOV DWORD [12+EBP],0
+ 682 000006E5 E9 FFFFFC42 JMP L89
+ 683 000006EA GLOBAL _sheet_updown
+ 684 000006EA _sheet_updown:
+ 685 000006EA 55 PUSH EBP
+ 686 000006EB 89 E5 MOV EBP,ESP
+ 687 000006ED 57 PUSH EDI
+ 688 000006EE 56 PUSH ESI
+ 689 000006EF 53 PUSH EBX
+ 690 000006F0 51 PUSH ECX
+ 691 000006F1 8B 7D 08 MOV EDI,DWORD [8+EBP]
+ 692 000006F4 8B 5D 0C MOV EBX,DWORD [12+EBP]
+ 693 000006F7 8B 77 20 MOV ESI,DWORD [32+EDI]
+ 694 000006FA 8B 47 18 MOV EAX,DWORD [24+EDI]
+ 695 000006FD 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 696 00000700 8B 46 10 MOV EAX,DWORD [16+ESI]
+ 697 00000703 40 INC EAX
+ 698 00000704 39 C3 CMP EBX,EAX
+ 699 00000706 7E 02 JLE L168
+ 700 00000708 89 C3 MOV EBX,EAX
+ 701 0000070A L168:
+ 702 0000070A 83 FB FF CMP EBX,-1
+ 703 0000070D 7D 03 JGE L169
+ 704 0000070F 83 CB FF OR EBX,-1
+ 705 00000712 L169:
+ 706 00000712 89 5F 18 MOV DWORD [24+EDI],EBX
+ 707 00000715 39 5D F0 CMP DWORD [-16+EBP],EBX
+ 708 00000718 0F 8E 000000A8 JLE L170
+ 709 0000071E 85 DB TEST EBX,EBX
+ 710 00000720 78 5C JS L171
+ 711 00000722 8B 4D F0 MOV ECX,DWORD [-16+EBP]
+ 712 00000725 L176:
+ 713 00000725 8B 44 8E 10 MOV EAX,DWORD [16+ESI+ECX*4]
+ 714 00000729 89 44 8E 14 MOV DWORD [20+ESI+ECX*4],EAX
+ 715 0000072D 89 48 18 MOV DWORD [24+EAX],ECX
+ 716 00000730 49 DEC ECX
+ 717 00000731 39 D9 CMP ECX,EBX
+ 718 00000733 7F F0 JG L176
+ 719 00000735 89 7C 9E 14 MOV DWORD [20+ESI+EBX*4],EDI
+ 720 00000739 43 INC EBX
+ 721 0000073A 53 PUSH EBX
+ 722 0000073B 8B 4F 10 MOV ECX,DWORD [16+EDI]
+ 723 0000073E 89 C8 MOV EAX,ECX
+ 724 00000740 03 47 08 ADD EAX,DWORD [8+EDI]
+ 725 00000743 50 PUSH EAX
+ 726 00000744 8B 57 0C MOV EDX,DWORD [12+EDI]
+ 727 00000747 89 D0 MOV EAX,EDX
+ 728 00000749 03 47 04 ADD EAX,DWORD [4+EDI]
+ 729 0000074C 50 PUSH EAX
+ 730 0000074D 51 PUSH ECX
+ 731 0000074E 52 PUSH EDX
+ 732 0000074F 56 PUSH ESI
+ 733 00000750 E8 FFFFF988 CALL _sheet_refreshmap
+ 734 00000755 FF 75 F0 PUSH DWORD [-16+EBP]
+ 735 00000758 L206:
+ 736 00000758 53 PUSH EBX
+ 737 00000759 L205:
+ 738 00000759 8B 4F 10 MOV ECX,DWORD [16+EDI]
+ 739 0000075C 89 C8 MOV EAX,ECX
+ 740 0000075E 03 47 08 ADD EAX,DWORD [8+EDI]
+ 741 00000761 50 PUSH EAX
+ 742 00000762 8B 57 0C MOV EDX,DWORD [12+EDI]
+ 743 00000765 89 D0 MOV EAX,EDX
+ 744 00000767 03 47 04 ADD EAX,DWORD [4+EDI]
+ 745 0000076A 50 PUSH EAX
+ 746 0000076B 51 PUSH ECX
+ 747 0000076C 52 PUSH EDX
+ 748 0000076D 56 PUSH ESI
+ 749 0000076E E8 FFFFFB95 CALL _sheet_refreshsub
+ 750 00000773 83 C4 34 ADD ESP,52
+ 751 00000776 L167:
+ 752 00000776 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 753 00000779 5B POP EBX
+ 754 0000077A 5E POP ESI
+ 755 0000077B 5F POP EDI
+ 756 0000077C 5D POP EBP
+ 757 0000077D C3 RET
+ 758 0000077E L171:
+ 759 0000077E 8B 46 10 MOV EAX,DWORD [16+ESI]
+ 760 00000781 3B 45 F0 CMP EAX,DWORD [-16+EBP]
+ 761 00000784 7E 18 JLE L178
+ 762 00000786 8B 4D F0 MOV ECX,DWORD [-16+EBP]
+ 763 00000789 39 C1 CMP ECX,EAX
+ 764 0000078B 7D 11 JGE L178
+ 765 0000078D L183:
+ 766 0000078D 8B 44 8E 18 MOV EAX,DWORD [24+ESI+ECX*4]
+ 767 00000791 89 44 8E 14 MOV DWORD [20+ESI+ECX*4],EAX
+ 768 00000795 89 48 18 MOV DWORD [24+EAX],ECX
+ 769 00000798 41 INC ECX
+ 770 00000799 3B 4E 10 CMP ECX,DWORD [16+ESI]
+ 771 0000079C 7C EF JL L183
+ 772 0000079E L178:
+ 773 0000079E FF 4E 10 DEC DWORD [16+ESI]
+ 774 000007A1 6A 00 PUSH 0
+ 775 000007A3 8B 4F 10 MOV ECX,DWORD [16+EDI]
+ 776 000007A6 89 C8 MOV EAX,ECX
+ 777 000007A8 03 47 08 ADD EAX,DWORD [8+EDI]
+ 778 000007AB 50 PUSH EAX
+ 779 000007AC 8B 57 0C MOV EDX,DWORD [12+EDI]
+ 780 000007AF 89 D0 MOV EAX,EDX
+ 781 000007B1 03 47 04 ADD EAX,DWORD [4+EDI]
+ 782 000007B4 50 PUSH EAX
+ 783 000007B5 51 PUSH ECX
+ 784 000007B6 52 PUSH EDX
+ 785 000007B7 56 PUSH ESI
+ 786 000007B8 E8 FFFFF920 CALL _sheet_refreshmap
+ 787 000007BD 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 788 000007C0 48 DEC EAX
+ 789 000007C1 50 PUSH EAX
+ 790 000007C2 6A 00 PUSH 0
+ 791 000007C4 EB 93 JMP L205
+ 792 000007C6 L170:
+ 793 000007C6 39 5D F0 CMP DWORD [-16+EBP],EBX
+ 794 000007C9 7D AB JGE L167
+ 795 000007CB 83 7D F0 00 CMP DWORD [-16+EBP],0
+ 796 000007CF 78 3C JS L186
+ 797 000007D1 8B 4D F0 MOV ECX,DWORD [-16+EBP]
+ 798 000007D4 39 D9 CMP ECX,EBX
+ 799 000007D6 7D 10 JGE L202
+ 800 000007D8 L191:
+ 801 000007D8 8B 44 8E 18 MOV EAX,DWORD [24+ESI+ECX*4]
+ 802 000007DC 89 44 8E 14 MOV DWORD [20+ESI+ECX*4],EAX
+ 803 000007E0 89 48 18 MOV DWORD [24+EAX],ECX
+ 804 000007E3 41 INC ECX
+ 805 000007E4 39 D9 CMP ECX,EBX
+ 806 000007E6 7C F0 JL L191
+ 807 000007E8 L202:
+ 808 000007E8 89 7C 9E 14 MOV DWORD [20+ESI+EBX*4],EDI
+ 809 000007EC L192:
+ 810 000007EC 53 PUSH EBX
+ 811 000007ED 8B 4F 10 MOV ECX,DWORD [16+EDI]
+ 812 000007F0 89 C8 MOV EAX,ECX
+ 813 000007F2 03 47 08 ADD EAX,DWORD [8+EDI]
+ 814 000007F5 50 PUSH EAX
+ 815 000007F6 8B 57 0C MOV EDX,DWORD [12+EDI]
+ 816 000007F9 89 D0 MOV EAX,EDX
+ 817 000007FB 03 47 04 ADD EAX,DWORD [4+EDI]
+ 818 000007FE 50 PUSH EAX
+ 819 000007FF 51 PUSH ECX
+ 820 00000800 52 PUSH EDX
+ 821 00000801 56 PUSH ESI
+ 822 00000802 E8 FFFFF8D6 CALL _sheet_refreshmap
+ 823 00000807 53 PUSH EBX
+ 824 00000808 E9 FFFFFF4B JMP L206
+ 825 0000080D L186:
+ 826 0000080D 8B 4E 10 MOV ECX,DWORD [16+ESI]
+ 827 00000810 39 D9 CMP ECX,EBX
+ 828 00000812 7C 13 JL L204
+ 829 00000814 L197:
+ 830 00000814 8B 54 8E 14 MOV EDX,DWORD [20+ESI+ECX*4]
+ 831 00000818 8D 41 01 LEA EAX,DWORD [1+ECX]
+ 832 0000081B 89 54 8E 18 MOV DWORD [24+ESI+ECX*4],EDX
+ 833 0000081F 49 DEC ECX
+ 834 00000820 89 42 18 MOV DWORD [24+EDX],EAX
+ 835 00000823 39 D9 CMP ECX,EBX
+ 836 00000825 7D ED JGE L197
+ 837 00000827 L204:
+ 838 00000827 89 7C 9E 14 MOV DWORD [20+ESI+EBX*4],EDI
+ 839 0000082B FF 46 10 INC DWORD [16+ESI]
+ 840 0000082E EB BC JMP L192
+ 841 00000830 GLOBAL _sheet_refresh
+ 842 00000830 _sheet_refresh:
+ 843 00000830 55 PUSH EBP
+ 844 00000831 89 E5 MOV EBP,ESP
+ 845 00000833 53 PUSH EBX
+ 846 00000834 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 847 00000837 8B 43 18 MOV EAX,DWORD [24+EBX]
+ 848 0000083A 85 C0 TEST EAX,EAX
+ 849 0000083C 78 27 JS L207
+ 850 0000083E 50 PUSH EAX
+ 851 0000083F 50 PUSH EAX
+ 852 00000840 8B 4B 10 MOV ECX,DWORD [16+EBX]
+ 853 00000843 89 C8 MOV EAX,ECX
+ 854 00000845 03 4D 10 ADD ECX,DWORD [16+EBP]
+ 855 00000848 03 45 18 ADD EAX,DWORD [24+EBP]
+ 856 0000084B 50 PUSH EAX
+ 857 0000084C 8B 53 0C MOV EDX,DWORD [12+EBX]
+ 858 0000084F 89 D0 MOV EAX,EDX
+ 859 00000851 03 55 0C ADD EDX,DWORD [12+EBP]
+ 860 00000854 03 45 14 ADD EAX,DWORD [20+EBP]
+ 861 00000857 50 PUSH EAX
+ 862 00000858 51 PUSH ECX
+ 863 00000859 52 PUSH EDX
+ 864 0000085A FF 73 20 PUSH DWORD [32+EBX]
+ 865 0000085D E8 FFFFFAA6 CALL _sheet_refreshsub
+ 866 00000862 83 C4 1C ADD ESP,28
+ 867 00000865 L207:
+ 868 00000865 8B 5D FC MOV EBX,DWORD [-4+EBP]
+ 869 00000868 C9 LEAVE
+ 870 00000869 C3 RET
+ 871 0000086A GLOBAL _sheet_slide
+ 872 0000086A _sheet_slide:
+ 873 0000086A 55 PUSH EBP
+ 874 0000086B 89 E5 MOV EBP,ESP
+ 875 0000086D 57 PUSH EDI
+ 876 0000086E 56 PUSH ESI
+ 877 0000086F 53 PUSH EBX
+ 878 00000870 53 PUSH EBX
+ 879 00000871 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 880 00000874 8B 43 20 MOV EAX,DWORD [32+EBX]
+ 881 00000877 8B 7B 0C MOV EDI,DWORD [12+EBX]
+ 882 0000087A 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 883 0000087D 8B 73 10 MOV ESI,DWORD [16+EBX]
+ 884 00000880 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 885 00000883 89 43 0C MOV DWORD [12+EBX],EAX
+ 886 00000886 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 887 00000889 89 43 10 MOV DWORD [16+EBX],EAX
+ 888 0000088C 83 7B 18 00 CMP DWORD [24+EBX],0
+ 889 00000890 78 7C JS L209
+ 890 00000892 6A 00 PUSH 0
+ 891 00000894 89 F0 MOV EAX,ESI
+ 892 00000896 03 43 08 ADD EAX,DWORD [8+EBX]
+ 893 00000899 50 PUSH EAX
+ 894 0000089A 89 F8 MOV EAX,EDI
+ 895 0000089C 03 43 04 ADD EAX,DWORD [4+EBX]
+ 896 0000089F 50 PUSH EAX
+ 897 000008A0 56 PUSH ESI
+ 898 000008A1 57 PUSH EDI
+ 899 000008A2 FF 75 F0 PUSH DWORD [-16+EBP]
+ 900 000008A5 E8 FFFFF833 CALL _sheet_refreshmap
+ 901 000008AA 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 902 000008AD FF 73 18 PUSH DWORD [24+EBX]
+ 903 000008B0 03 43 08 ADD EAX,DWORD [8+EBX]
+ 904 000008B3 50 PUSH EAX
+ 905 000008B4 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 906 000008B7 03 43 04 ADD EAX,DWORD [4+EBX]
+ 907 000008BA 50 PUSH EAX
+ 908 000008BB FF 75 10 PUSH DWORD [16+EBP]
+ 909 000008BE FF 75 0C PUSH DWORD [12+EBP]
+ 910 000008C1 FF 75 F0 PUSH DWORD [-16+EBP]
+ 911 000008C4 E8 FFFFF814 CALL _sheet_refreshmap
+ 912 000008C9 8B 43 18 MOV EAX,DWORD [24+EBX]
+ 913 000008CC 83 C4 30 ADD ESP,48
+ 914 000008CF 48 DEC EAX
+ 915 000008D0 50 PUSH EAX
+ 916 000008D1 89 F0 MOV EAX,ESI
+ 917 000008D3 6A 00 PUSH 0
+ 918 000008D5 03 43 08 ADD EAX,DWORD [8+EBX]
+ 919 000008D8 50 PUSH EAX
+ 920 000008D9 89 F8 MOV EAX,EDI
+ 921 000008DB 03 43 04 ADD EAX,DWORD [4+EBX]
+ 922 000008DE 50 PUSH EAX
+ 923 000008DF 56 PUSH ESI
+ 924 000008E0 57 PUSH EDI
+ 925 000008E1 FF 75 F0 PUSH DWORD [-16+EBP]
+ 926 000008E4 E8 FFFFFA1F CALL _sheet_refreshsub
+ 927 000008E9 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 928 000008EC FF 73 18 PUSH DWORD [24+EBX]
+ 929 000008EF FF 73 18 PUSH DWORD [24+EBX]
+ 930 000008F2 03 43 08 ADD EAX,DWORD [8+EBX]
+ 931 000008F5 50 PUSH EAX
+ 932 000008F6 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 933 000008F9 03 43 04 ADD EAX,DWORD [4+EBX]
+ 934 000008FC 50 PUSH EAX
+ 935 000008FD FF 75 10 PUSH DWORD [16+EBP]
+ 936 00000900 FF 75 0C PUSH DWORD [12+EBP]
+ 937 00000903 FF 75 F0 PUSH DWORD [-16+EBP]
+ 938 00000906 E8 FFFFF9FD CALL _sheet_refreshsub
+ 939 0000090B 83 C4 38 ADD ESP,56
+ 940 0000090E L209:
+ 941 0000090E 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 942 00000911 5B POP EBX
+ 943 00000912 5E POP ESI
+ 944 00000913 5F POP EDI
+ 945 00000914 5D POP EBP
+ 946 00000915 C3 RET
+ 947 00000916 GLOBAL _sheet_free
+ 948 00000916 _sheet_free:
+ 949 00000916 55 PUSH EBP
+ 950 00000917 89 E5 MOV EBP,ESP
+ 951 00000919 53 PUSH EBX
+ 952 0000091A 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 953 0000091D 83 7B 18 00 CMP DWORD [24+EBX],0
+ 954 00000921 78 0A JS L212
+ 955 00000923 6A FF PUSH -1
+ 956 00000925 53 PUSH EBX
+ 957 00000926 E8 FFFFFDBF CALL _sheet_updown
+ 958 0000092B 58 POP EAX
+ 959 0000092C 5A POP EDX
+ 960 0000092D L212:
+ 961 0000092D C7 43 1C 00000000 MOV DWORD [28+EBX],0
+ 962 00000934 8B 5D FC MOV EBX,DWORD [-4+EBP]
+ 963 00000937 C9 LEAVE
+ 964 00000938 C3 RET
--- /dev/null
+//\8eQ\8dlURL\r//http://wiki.monaos.org/pukiwiki.php?%B5%C4%CF%C0%2Fstatic%CA%D1%BF%F4%A4%CE%BD%E9%B4%FC%B2%BD\r#include <stdio.h>\r#include "typedefs.h"\r\rtypedef void (*PFV)(void);\r\r#ifdef __cplusplus\rextern "C" {\r#endif\rextern PFV __CTOR_LIST__[];\rextern PFV __DTOR_LIST__[];\r#ifdef __cplusplus\r}\r#endif\r\rextern "C" int _main(int,char*[],char*[]);\r\rstatic void __finit(const PFV *list) {\r DWORD cnt;\r\r cnt = (DWORD)list[0];\r list++;\r list = (PFV *)((((DWORD)list) + 3) & (~3)); // align bug?\r if (cnt == -1) {\r while(*list != NULL) {\r (**list++)();\r }\r }\r else {\r while(cnt) {\r cnt--;\r (**list++)();\r }\r }\r}\r\rextern "C" int user_start(void) {\r int r;\r\r //memmng_initialize(0xC0000000, 8 * 1024 * 1024);\r //__fsio_initialize();\r //makearg();\r __finit(__CTOR_LIST__);\r r = _main(0, 0, 0);\r __finit(__DTOR_LIST__);\r //free(__argv);\r //memmng_deinitialize();\r //syscall_kill();\r return(r);\r}
\ No newline at end of file
--- /dev/null
+int kansuu(){
+ static char s[] = {1,2,3,4,5,0};
+ return 0;
+}
\ No newline at end of file
--- /dev/null
+ .file "t.c"
+ .data
+_s.0:
+ .byte 1
+ .byte 2
+ .byte 3
+ .byte 4
+ .byte 5
+ .byte 0
+ .text
+ .balign 2
+.globl _kansuu
+ .def _kansuu; .scl 2; .type 32; .endef
+_kansuu:
+ pushl %ebp
+ xorl %eax, %eax
+ movl %esp, %ebp
+ popl %ebp
+ ret
--- /dev/null
+#include "bootpack.h"
+#include <setjmp.h>
+#include <string.h>
+#define NULL 0
+
+typedef unsigned char UCHAR;
+typedef unsigned int UINT32;
+typedef UINT32 tek_TPRB;
+
+static int tek_decode1(int siz, UCHAR *p, UCHAR *q);
+static int tek_decode2(int siz, UCHAR *p, UCHAR *q);
+static int tek_decode5(int siz, UCHAR *p, UCHAR *q);
+
+static unsigned int tek_getnum_s7s(UCHAR **pp)
+/* \82±\82ê\82Í\95K\82¸big-endian */
+/* \89º\91Ê\82ª\82È\82¢\82Ì\82Å\92\86\90g\82ð\82¢\82¶\82è\82â\82·\82¢ */
+{
+ unsigned int s = 0;
+ UCHAR *p = *pp;
+ do {
+ s = s << 7 | *p++;
+ } while ((s & 1) == 0);
+ s >>= 1;
+ *pp = p;
+ return s;
+}
+
+int tek_getsize(unsigned char *p)
+{
+ static char header[15] = {
+ 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x4f, 0x53, 0x41, 0x53, 0x4b, 0x43, 0x4d, 0x50
+ };
+ int size = -1;
+ if (memcmp(p + 1, header, 15) == 0 && (*p == 0x83 || *p == 0x85 || *p == 0x89)) {
+ p += 16;
+ size = tek_getnum_s7s(&p);
+ }
+ return size;
+} /* \81i\92\90\81jmemcmp\82Ístrncmp\82Ì\92\87\8aÔ\82Å\81A\95¶\8e\9a\97ñ\92\86\82É0\82ª\82 \82Á\82Ä\82à\8ew\92è\82³\82ê\82½15\95¶\8e\9a\82Ü\82Å\94ä\8ar\82·\82é\8aÖ\90\94 */
+
+int tek_decomp(unsigned char *p, char *q, int size)
+{
+ int err = -1;
+ if (*p == 0x83) {
+ err = tek_decode1(size, p, q);
+ } else if (*p == 0x85) {
+ err = tek_decode2(size, p, q);
+ } else if (*p == 0x89) {
+ err = tek_decode5(size, p, q);
+ }
+ if (err != 0) {
+ return -1; /* \8e¸\94s */
+ }
+ return 0; /* \90¬\8c÷ */
+}
+
+static int tek_lzrestore_stk1(int srcsiz, UCHAR *src, int outsiz, UCHAR *q)
+{
+ int by, lz, cp, ds;
+ UCHAR *q1 = q + outsiz, *s7ptr = src, *q0 = q;
+ do {
+ if ((by = (lz = *s7ptr++) & 0x0f) == 0)
+ by = tek_getnum_s7s(&s7ptr);
+ if ((lz >>= 4) == 0)
+ lz = tek_getnum_s7s(&s7ptr);
+ do {
+ *q++ = *s7ptr++;
+ } while (--by);
+ if (q >= q1)
+ break;
+ do {
+ ds = (cp = *s7ptr++) & 0x0f;
+ if ((ds & 1) == 0) {
+ do {
+ ds = ds << 7 | *s7ptr++;
+ } while ((ds & 1) == 0);
+ }
+ ds = ~(ds >> 1);
+ if ((cp >>= 4) == 0) {
+ do {
+ cp = cp << 7 | *s7ptr++;
+ } while ((cp & 1) == 0);
+ cp >>= 1;
+ } /* 0\82ª\82±\82È\82¢\82±\82Æ\82ð\82 \82Ä\82É\82·\82é */
+ cp++;
+ if (q + ds < q0)
+ goto err;
+ if (q + cp > q1)
+ cp = q1 - q;
+ do {
+ *q = *(q + ds);
+ q++;
+ } while (--cp);
+ } while (--lz);
+ } while (q < q1);
+ return 0;
+err:
+ return 1;
+}
+
+static int tek_decode1(int siz, UCHAR *p, UCHAR *q)
+{
+ int dsiz, hed, bsiz;
+ UCHAR *p1 = p + siz;
+ p += 16;
+ if ((dsiz = tek_getnum_s7s(&p)) > 0) {
+ hed = tek_getnum_s7s(&p);
+ bsiz = 1 << (((hed >> 1) & 0x0f) + 8);
+ if (dsiz > bsiz || (hed & 0x21) != 0x01)
+ return 1;
+ if (hed & 0x40)
+ tek_getnum_s7s(&p); /* \83I\83v\83V\83\87\83\93\8fî\95ñ\82Ö\82Ì\83|\83C\83\93\83^\82ð\93Ç\82Ý\94ò\82Î\82· */
+ if (tek_getnum_s7s(&p) != 0)
+ return 1; /* \95â\8f\95\83o\83b\83t\83@\8eg\97p */
+ return tek_lzrestore_stk1(p1 - p, p, dsiz, q);
+ }
+ return 0;
+}
+
+static unsigned int tek_getnum_s7(UCHAR **pp)
+/* \82±\82ê\82Í\95K\82¸big-endian */
+{
+ unsigned int s = 0, b = 0, a = 1;
+ UCHAR *p = *pp;
+ for (;;) {
+ s = s << 7 | *p++;
+ if (s & 1)
+ break;
+ a <<= 7;
+ b += a;
+ }
+ s >>= 1;
+ *pp = p;
+ return s + b;
+}
+
+static int tek_lzrestore_stk2(int srcsiz, UCHAR *src, int outsiz, UCHAR *q)
+{
+ int cp, ds, repdis[4], i, j;
+ UCHAR *q1 = q + outsiz, *s7ptr = src, *q0 = q, bylz, cbylz;
+ for (j = 0; j < 4; j++)
+ repdis[j] = -1 - j;
+ bylz = cbylz = 0;
+ if (outsiz) {
+ if (tek_getnum_s7s(&s7ptr))
+ return 1;
+ do {
+ /* by\83t\83F\81[\83Y */
+ j = 0;
+ do {
+ j++;
+ if (j >= 17) {
+ j += tek_getnum_s7s(&s7ptr);
+ break;
+ }
+ if (cbylz == 0) {
+ cbylz = 8;
+ bylz = *s7ptr++;
+ }
+ cbylz--;
+ i = bylz & 1;
+ bylz >>= 1;
+ } while (i == 0);
+ do {
+ *q++ = *s7ptr++;
+ } while (--j);
+ if (q >= q1)
+ break;
+
+ /* lz\83t\83F\81[\83Y */
+ j = 0;
+ do {
+ j++;
+ if (j >= 17) {
+ j += tek_getnum_s7s(&s7ptr);
+ break;
+ }
+ if (cbylz == 0) {
+ cbylz = 8;
+ bylz = *s7ptr++;
+ }
+ cbylz--;
+ i = bylz & 1;
+ bylz >>= 1;
+ } while (i == 0);
+ do {
+ i = *s7ptr++;
+ cp = i >> 4;
+ i &= 0x0f;
+ if ((i & 1) == 0)
+ i |= (tek_getnum_s7(&s7ptr) + 1) << 4;
+ i >>= 1;
+ ds = ~(i - 6);
+ if (i < 4)
+ ds = repdis[i];
+ if (i == 4)
+ ds = repdis[0] - tek_getnum_s7(&s7ptr) - 1;
+ if (i == 5)
+ ds = repdis[0] + tek_getnum_s7(&s7ptr) + 1;
+ if (cp == 0)
+ cp = tek_getnum_s7(&s7ptr) + 16;
+ cp++;
+ if (i > 0) {
+ if (i > 1) {
+ if (i > 2)
+ repdis[3] = repdis[2];
+ repdis[2] = repdis[1];
+ }
+ repdis[1] = repdis[0];
+ repdis[0] = ds;
+ }
+ if (q + ds < q0)
+ goto err;
+ if (q + cp > q1)
+ cp = q1 - q;
+ do {
+ *q = *(q + ds);
+ q++;
+ } while (--cp);
+ } while (--j);
+ } while (q < q1);
+ }
+ return 0;
+err:
+ return 1;
+}
+
+static int tek_decode2(int siz, UCHAR *p, UCHAR *q)
+{
+ UCHAR *p1 = p + siz;
+ int dsiz, hed, bsiz, st = 0;
+ p += 16;
+ if ((dsiz = tek_getnum_s7s(&p)) > 0) {
+ hed = tek_getnum_s7s(&p);
+ bsiz = 1 << (((hed >> 1) & 0x0f) + 8);
+ if (dsiz > bsiz || (hed & 0x21) != 0x01)
+ return 1;
+ if (hed & 0x40)
+ tek_getnum_s7s(&p); /* \83I\83v\83V\83\87\83\93\8fî\95ñ\82Ö\82Ì\83|\83C\83\93\83^\82ð\93Ç\82Ý\94ò\82Î\82· */
+ st = tek_lzrestore_stk2(p1 - p, p, dsiz, q);
+ }
+ return st;
+}
+
+static int tek_decmain5(int *work, UCHAR *src, int osiz, UCHAR *q, int lc, int pb, int lp, int flags);
+
+static int tek_lzrestore_tek5(int srcsiz, UCHAR *src, int outsiz, UCHAR *outbuf)
+{
+ int wrksiz, lc, lp, pb, flags, *work, prop0, fl;
+
+ if ((fl = (prop0 = *src) & 0x0f) == 0x01) /* 0001 */
+ flags |= -1;
+ else if (fl == 0x05)
+ flags = -2;
+ else if (fl == 0x09)
+ flags &= 0;
+ else
+ return 1;
+ src++;
+ prop0 >>= 4;
+ if (prop0 == 0)
+ prop0 = *src++;
+ else {
+ static UCHAR prop0_table[] = { 0x5d, 0x00 }, prop1_table[] = { 0x00 };
+ if (flags == -1) {
+ if (prop0 >= 3)
+ return 1;
+ prop0 = prop0_table[prop0 - 1];
+ } else {
+ if (prop0 >= 2)
+ return 1;
+ prop0 = prop1_table[prop0 - 1];
+ }
+ }
+ lp = prop0 / (9 * 5);
+ prop0 %= 9 * 5;
+ pb = prop0 / 9;
+ lc = prop0 % 9;
+ if (flags == 0) /* tek5:z2 */
+ flags = *src++;
+ if (flags == -1) { /* stk5 */
+ wrksiz = lp;
+ lp = pb;
+ pb = wrksiz;
+ }
+ wrksiz = 0x180 * sizeof (UINT32) + (0x840 + (0x300 << (lc + lp))) * sizeof (tek_TPRB); /* \8dÅ\92á15KB, lc+lp=3\82È\82ç\81A36KB */
+ work = (int *) memman_alloc_4k((struct MEMMAN *) MEMMAN_ADDR, wrksiz);
+ if (work == NULL)
+ return -1;
+ flags = tek_decmain5(work, src, outsiz, outbuf, lc, pb, lp, flags);
+ memman_free_4k((struct MEMMAN *) MEMMAN_ADDR, (int) work, wrksiz);
+ return flags;
+}
+
+struct tek_STR_BITMODEL {
+ UCHAR t, m, s, dmy;
+ UINT32 prb0, prb1, tmsk, ntm, lt, lt0, dmy4;
+};
+
+struct tek_STR_PRB {
+ struct tek_STR_PRB_PB {
+ struct tek_STR_PRB_PBST {
+ tek_TPRB mch, rep0l1;
+ } st[12];
+ tek_TPRB lenlow[2][8], lenmid[2][8];
+ } pb[16];
+ struct tek_STR_PRB_ST {
+ tek_TPRB rep, repg0, repg1, repg2;
+ } st[12];
+ tek_TPRB lensel[2][2], lenhigh[2][256], pslot[4][64], algn[64];
+ tek_TPRB spdis[2][2+4+8+16+32], lenext[2+4+8+16+32];
+ tek_TPRB repg3, fchgprm[2 * 32], tbmt[16], tbmm[16], fchglt;
+ tek_TPRB lit[1];
+};
+
+struct tek_STR_RNGDEC {
+ UCHAR *p;
+ UINT32 range, code, rmsk;
+ jmp_buf errjmp;
+ struct tek_STR_BITMODEL bm[32], *ptbm[16];
+ struct tek_STR_PRB probs;
+};
+
+static void tek_setbm5(struct tek_STR_BITMODEL *bm, int t, int m)
+{
+ bm->t = t;
+ bm->m = m;
+ bm->prb1 = -1 << (m + t);
+ bm->prb0 = ~bm->prb1;
+ bm->prb1 |= 1 << t;
+ bm->tmsk = (-1 << t) & 0xffff;
+ bm->prb0 &= bm->tmsk;
+ bm->prb1 &= bm->tmsk;
+ bm->ntm = ~bm->tmsk;
+ return;
+}
+
+static int tek_rdget0(struct tek_STR_RNGDEC *rd, int n, int i)
+{
+ do {
+ while (rd->range < (UINT32) (1 << 24)) {
+ rd->range <<= 8;
+ rd->code = rd->code << 8 | *rd->p++;
+ }
+ rd->range >>= 1;
+ i += i;
+ if (rd->code >= rd->range) {
+ rd->code -= rd->range;
+ i |= 1;
+ }
+ } while (--n);
+ return ~i;
+}
+
+static int tek_rdget1(struct tek_STR_RNGDEC *rd, tek_TPRB *prob0, int n, int j, struct tek_STR_BITMODEL *bm)
+{
+ UINT32 p, i, *prob, nm = n >> 4;
+ n &= 0x0f;
+ prob0 -= j;
+ do {
+ p = *(prob = prob0 + j);
+ if (bm->lt > 0) {
+ if (--bm->lt == 0) {
+ /* \8eõ\96½\90Ø\82ê */
+ if (tek_rdget1(rd, &rd->probs.fchglt, 0x71, 0, &rd->bm[3]) == 0) {
+ /* \8eõ\96½\95Ï\8dX\82Í\82Ü\82¾\83T\83|\81[\83g\82µ\82Ä\82È\82¢ */
+err:
+ longjmp(rd->errjmp, 1);
+ }
+ i = bm - rd->bm;
+ if ((bm->s = tek_rdget1(rd, &rd->probs.fchgprm[i * 2 + bm->s], 0x71, 0, &rd->bm[1])) == 0) {
+ i = tek_rdget1(rd, rd->probs.tbmt, 0x74, 1, &rd->bm[2]) & 15;
+ if (i == 15)
+ goto err;
+ tek_setbm5(bm, i, ((tek_rdget1(rd, rd->probs.tbmm, 0x74, 1, &rd->bm[2]) - 1) & 15) + 1);
+ }
+ bm->lt = bm->lt0;
+ }
+ if (p < bm->prb0) {
+ p = bm->prb0;
+ goto fixprob;
+ }
+ if (p > bm->prb1) {
+ p = bm->prb1;
+ goto fixprob;
+ }
+ if (p & bm->ntm) {
+ p &= bm->tmsk;
+ fixprob:
+ *prob = p;
+ }
+ }
+
+ while (rd->range < (UINT32) (1 << 24)) {
+ rd->range <<= 8;
+ rd->code = rd->code << 8 | *rd->p++;
+ }
+ j += j;
+ i = ((unsigned long long) (rd->range & rd->rmsk) * p) >> 16;
+ if (rd->code < i) {
+ j |= 1;
+ rd->range = i;
+ *prob += ((0x10000 - p) >> bm->m) & bm->tmsk;
+ } else {
+ rd->range -= i;
+ rd->code -= i;
+ *prob -= (p >> bm->m) & bm->tmsk;
+ }
+ --n;
+ if ((n & nm) == 0)
+ bm++;
+ } while (n);
+ return j;
+}
+
+static UINT32 tek_revbit(UINT32 data, int len)
+{
+ UINT32 rev = 0;
+ do {
+ rev += rev + (data & 1);
+ data >>= 1;
+ } while (--len);
+ return rev;
+}
+
+static int tek_getlen5(struct tek_STR_RNGDEC *rd, int m, int s_pos, int stk)
+{
+ int i;
+ if (tek_rdget1(rd, &rd->probs.lensel[m][0], 0x71, 0, rd->ptbm[3]) ^ stk) /* low */
+ i = tek_rdget1(rd, rd->probs.pb[s_pos].lenlow[m], 0x73, 1, rd->ptbm[4]) & 7;
+ else if (tek_rdget1(rd, &rd->probs.lensel[m][1], 0x71, 0, rd->ptbm[3]) ^ stk) /* mid */
+ i = tek_rdget1(rd, rd->probs.pb[s_pos].lenmid[m], 0x73, 1, rd->ptbm[5]);
+ else {
+ /* high */
+ i = tek_rdget1(rd, rd->probs.lenhigh[m], 0x78, 1, rd->ptbm[6]) - (256 + 256 - 8);
+ if (i > 0) {
+ if (i < 6 && stk == 0)
+ i = tek_rdget1(rd, &rd->probs.lenext[(1 << i) - 2], i | 0x70, 1, rd->ptbm[7]) - 1;
+ else
+ i = tek_rdget0(rd, i, ~1) - 1;
+ i = tek_rdget0(rd, i, ~1) - 1;
+ }
+ i += 256 - 8 + 16;
+ }
+ return i;
+}
+
+static int tek_decmain5(int *work, UCHAR *src, int osiz, UCHAR *q, int lc, int pb, int lp, int flags)
+{
+ static int state_table[] = { 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5 };
+ int i, j, k, pmch, rep[4], s, pos, m_pos = (1 << pb) - 1, m_lp = (1 << lp) - 1;
+ int stk = (flags == -1), lcr = 8 - lc, s_pos, lit0cntmsk = 0x78;
+ UINT32 *lit1;
+ struct tek_STR_RNGDEC *rd = (struct tek_STR_RNGDEC *) work;
+ struct tek_STR_PRB *prb = &rd->probs;
+
+ rd->p = &src[4];
+ rd->range |= -1;
+ rd->code = src[0] << 24 | src[1] << 16 | src[2] << 8 | src[3];
+ for (i = 0; i < 4; i++)
+ rep[i] = ~i;
+ if (setjmp(rd->errjmp))
+ goto err;
+ for (i = sizeof (struct tek_STR_PRB) / sizeof (tek_TPRB) + (0x300 << (lc + lp)) - 2; i >= 0; i--)
+ ((tek_TPRB *) prb)[i] = 1 << 15;
+ for (i = 0; i < 32; i++) {
+ rd->bm[i].lt = (i >= 4); /* 0..3\82Í\8eõ\96½\82È\82µ */
+ rd->bm[i].lt0 = (i < 24) ? 16 * 1024 : 8 * 1024;
+ rd->bm[i].s &= 0;
+ rd->bm[i].t = rd->bm[i].m = 5;
+ }
+ lit1 = prb->lit + ((256 << (lc + lp)) - 2);
+ if (stk) {
+ rd->rmsk = -1 << 11;
+ for (i = 0; i < 32; i++)
+ rd->bm[i].lt = 0; /* \91S\82Ä\8eõ\96½\82È\82µ */
+ for (i = 0; i < 14; i++)
+ rd->ptbm[i] = &rd->bm[0];
+ } else {
+ UCHAR pt[14];
+ static UCHAR pt1[14] = {
+ 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 18, 18, 18, 8
+ };
+ static UCHAR pt2[14] = {
+ 8, 8, 10, 11, 12, 12, 14, 15,
+ 16, 16, 18, 18, 20, 21
+ };
+ /*
+ 0- 7:mch, mch, lit1, lensel, lenlow, lenmid, lenhigh, lenext
+ 8-15:pslot, pslot, sdis, sdis, align, rep-repg2
+ */
+ rd->rmsk |= -1;
+ rd->bm[1].t = 5; rd->bm[1].m = 3; /* for fchgprm */
+ rd->bm[2].t = 9; rd->bm[2].m = 2; /* for tbmt, tbmm */
+ if (flags & 0x40) { /* lt-flag */
+ rd->bm[3].t = 0; rd->bm[3].m = 1;
+ prb->fchglt = 0xffff;
+ }
+ rd->bm[22].t = 0; rd->bm[22].m = 1;
+ prb->repg3 = 0xffff;
+ if (flags == -2) { /* z1 */
+ rd->bm[22].lt = 0; /* repg3\82Ìlt\82ð0\82É */
+ for (i = 0; i < 14; i++)
+ pt[i] = pt1[i];
+ } else {
+ for (i = 0; i < 14; i++)
+ pt[i] = pt2[i];
+ lit0cntmsk = (7 >> (flags & 3)) << 4 | 8;
+ pt[ 1] = 8 + ((flags & 0x04) != 0); /* mch */
+ pt[ 5] = 12 + ((flags & 0x08) != 0); /* llm */
+ pt[ 9] = 16 + ((flags & 0x10) != 0); /* pst */
+ pt[11] = 18 + ((flags & 0x20) != 0); /* sds */
+ }
+ for (i = 0; i < 14; i++)
+ rd->ptbm[i] = &rd->bm[pt[i]];
+ }
+ for (i = 0; i < 32; i++)
+ tek_setbm5(&rd->bm[i], rd->bm[i].t, rd->bm[i].m);
+
+ if ((tek_rdget1(rd, &prb->pb[0].st[0].mch, 0x71, 0, rd->ptbm[0]) ^ stk) == 0)
+ goto err;
+ *q++ = tek_rdget1(rd, prb->lit, lit0cntmsk, 1, &rd->bm[24]) & 0xff;
+ pmch &= 0; s &= 0; pos = 1;
+ while (pos < osiz) {
+ s_pos = pos & m_pos;
+ if (tek_rdget1(rd, &prb->pb[s_pos].st[s].mch, 0x71, 0, rd->ptbm[s > 0]) ^ stk) { /* \94ñlz */
+ i = (q[-1] >> lcr | (pos & m_lp) << lc) << 8;
+ s = state_table[s];
+ if (pmch == 0)
+ *q = tek_rdget1(rd, &prb->lit[i], lit0cntmsk, 1, &rd->bm[24]) & 0xff;
+ else {
+ struct tek_STR_BITMODEL *bm = &rd->bm[24];
+ j = 1; /* lit1\82Í\8dÅ\8f\89\82©\82ç2\82ð\8c¸\82¶\82Ä\82 \82é */
+ k = 8;
+ pmch = q[rep[0]];
+ do {
+ j += j + tek_rdget1(rd, &lit1[(i + j) << 1 | pmch >> 7], 0x71, 0, rd->ptbm[2]);
+ k--;
+ if ((k & (lit0cntmsk >> 4)) == 0)
+ bm++;
+ if ((((pmch >> 7) ^ j) & 1) != 0 && k != 0) {
+ j = tek_rdget1(rd, &prb->lit[i + j - 1], k | (lit0cntmsk & 0x70), j, bm);
+ break;
+ }
+ pmch <<= 1;
+ } while (k);
+ *q = j & 0xff;
+ pmch &= 0;
+ }
+ pos++;
+ q++;
+ } else { /* lz */
+ pmch |= 1;
+ if (tek_rdget1(rd, &prb->st[s].rep, 0x71, 0, rd->ptbm[13]) ^ stk) { /* len/dis */
+ rep[3] = rep[2];
+ rep[2] = rep[1];
+ rep[1] = rep[0];
+ j = i = tek_getlen5(rd, 0, s_pos, stk);
+ s = s < 7 ? 7 : 10;
+ if (j >= 4)
+ j = 3;
+ rep[0] = j = tek_rdget1(rd, prb->pslot[j], 0x76, 1, rd->ptbm[8 + (j == 3)]) & 0x3f;
+ if (j >= 4) {
+ k = (j >> 1) - 1; /* k = [1, 30] */
+ rep[0] = (2 | (j & 1)) << k;
+ if (j < 14) /* k < 6 */
+ rep[0] |= tek_revbit(tek_rdget1(rd, &prb->spdis[j & 1][(1 << k) - 2], k | 0x70, 1, rd->ptbm[10 + (k >= 4)]), k);
+ else {
+ if (stk == 0) {
+ if (k -= 6)
+ rep[0] |= tek_rdget0(rd, k, ~0) << 6;
+ rep[0] |= tek_revbit(tek_rdget1(rd, prb->algn, 0x76, 1, rd->ptbm[12]), 6);
+ } else {
+ rep[0] |= tek_rdget0(rd, k - 4, ~0) << 4;
+ rep[0] |= tek_revbit(tek_rdget1(rd, prb->algn, 0x74, 1, rd->ptbm[12]), 4);
+ }
+ }
+ }
+ rep[0] = ~rep[0];
+ } else { /* repeat-dis */
+ if (tek_rdget1(rd, &prb->st[s].repg0, 0x71, 0, rd->ptbm[13]) ^ stk) { /* rep0 */
+ i |= -1;
+ if (tek_rdget1(rd, &prb->pb[s_pos].st[s].rep0l1, 0x71, 0, rd->ptbm[13]) == 0) {
+ s = s < 7 ? 9 : 11;
+ goto skip;
+ }
+ } else {
+ if (tek_rdget1(rd, &prb->st[s].repg1, 0x71, 0, rd->ptbm[13]) ^ stk) /* rep1 */
+ i = rep[1];
+ else {
+ if (tek_rdget1(rd, &prb->st[s].repg2, 0x71, 0, rd->ptbm[13]) ^ stk) /* rep2 */
+ i = rep[2];
+ else {
+ if (stk == 0) {
+ if (tek_rdget1(rd, &prb->repg3, 0x71, 0, &rd->bm[22]) == 0)
+ goto err;
+ }
+ i = rep[3]; /* rep3 */
+ rep[3] = rep[2];
+ }
+ rep[2] = rep[1];
+ }
+ rep[1] = rep[0];
+ rep[0] = i;
+ }
+ i = tek_getlen5(rd, 1, s_pos, stk);
+ s = s < 7 ? 8 : 11;
+ }
+skip:
+ i += 2;
+ if (pos + rep[0] < 0)
+ goto err;
+ if (pos + i > osiz)
+ i = osiz - pos;
+ pos += i;
+ do {
+ *q = q[rep[0]];
+ q++;
+ } while (--i);
+ }
+ }
+ return 0;
+err:
+ return 1;
+}
+
+static int tek_decode5(int siz, UCHAR *p, UCHAR *q)
+{
+ UCHAR *p1 = p + siz;
+ int dsiz, hed, bsiz, st = 0;
+ p += 16;
+ if ((dsiz = tek_getnum_s7s(&p)) > 0) {
+ hed = tek_getnum_s7s(&p);
+ if ((hed & 1) == 0)
+ st = tek_lzrestore_tek5(p1 - p + 1, p - 1, dsiz, q);
+ else {
+ bsiz = 1 << (((hed >> 1) & 0x0f) + 8);
+ if (hed & 0x20)
+ return 1;
+ if (bsiz == 256)
+ st = tek_lzrestore_tek5(p1 - p, p, dsiz, q);
+ else {
+ if (dsiz > bsiz)
+ return 1;
+ if (hed & 0x40)
+ tek_getnum_s7s(&p); /* \83I\83v\83V\83\87\83\93\8fî\95ñ\82Ö\82Ì\83|\83C\83\93\83^\82ð\93Ç\82Ý\94ò\82Î\82· */
+ st = tek_lzrestore_tek5(p1 - p, p, dsiz, q);
+ }
+ }
+ }
+ return st;
+}
--- /dev/null
+ 1 00000000 [FORMAT "WCOFF"]
+ 2 00000000 [INSTRSET "i486p"]
+ 3 00000000 [OPTIMIZE 1]
+ 4 00000000 [OPTION 1]
+ 5 00000000 [BITS 32]
+ 6 00000000 EXTERN _memman_alloc_4k
+ 7 00000000 EXTERN _memman_free_4k
+ 8 00000000 [FILE "tek.c"]
+ 9 [SECTION .text]
+ 10 00000000 _tek_getnum_s7s:
+ 11 00000000 55 PUSH EBP
+ 12 00000001 31 C9 XOR ECX,ECX
+ 13 00000003 89 E5 MOV EBP,ESP
+ 14 00000005 53 PUSH EBX
+ 15 00000006 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 16 00000009 8B 13 MOV EDX,DWORD [EBX]
+ 17 0000000B L2:
+ 18 0000000B C1 E1 07 SAL ECX,7
+ 19 0000000E 0F B6 02 MOVZX EAX,BYTE [EDX]
+ 20 00000011 09 C1 OR ECX,EAX
+ 21 00000013 42 INC EDX
+ 22 00000014 F7 C1 00000001 TEST ECX,1
+ 23 0000001A 74 EF JE L2
+ 24 0000001C D1 E9 SHR ECX,1
+ 25 0000001E 89 13 MOV DWORD [EBX],EDX
+ 26 00000020 5B POP EBX
+ 27 00000021 89 C8 MOV EAX,ECX
+ 28 00000023 5D POP EBP
+ 29 00000024 C3 RET
+ 30 [SECTION .data]
+ 31 00000000 _header.0:
+ 32 00000000 FF DB -1
+ 33 00000001 FF DB -1
+ 34 00000002 FF DB -1
+ 35 00000003 01 DB 1
+ 36 00000004 00 DB 0
+ 37 00000005 00 DB 0
+ 38 00000006 00 DB 0
+ 39 00000007 4F DB 79
+ 40 00000008 53 DB 83
+ 41 00000009 41 DB 65
+ 42 0000000A 53 DB 83
+ 43 0000000B 4B DB 75
+ 44 0000000C 43 DB 67
+ 45 0000000D 4D DB 77
+ 46 0000000E 50 DB 80
+ 47 [SECTION .text]
+ 48 00000025 GLOBAL _tek_getsize
+ 49 00000025 _tek_getsize:
+ 50 00000025 55 PUSH EBP
+ 51 00000026 89 E5 MOV EBP,ESP
+ 52 00000028 57 PUSH EDI
+ 53 00000029 56 PUSH ESI
+ 54 0000002A BF [00000000] MOV EDI,_header.0
+ 55 0000002F 53 PUSH EBX
+ 56 00000030 83 CB FF OR EBX,-1
+ 57 00000033 52 PUSH EDX
+ 58 00000034 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 59 00000037 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 60 0000003A 89 C6 MOV ESI,EAX
+ 61 0000003C FC CLD
+ 62 0000003D B8 0000000F MOV EAX,15
+ 63 00000042 46 INC ESI
+ 64 00000043 89 C1 MOV ECX,EAX
+ 65 00000045 F3 REPE
+ 66 00000046 A6 CMPSB
+ 67 00000047 75 11 JNE L7
+ 68 00000049 8B 55 F0 MOV EDX,DWORD [-16+EBP]
+ 69 0000004C 8A 02 MOV AL,BYTE [EDX]
+ 70 0000004E 3C 83 CMP AL,-125
+ 71 00000050 74 12 JE L8
+ 72 00000052 3C 85 CMP AL,-123
+ 73 00000054 74 0E JE L8
+ 74 00000056 3C 89 CMP AL,-119
+ 75 00000058 74 0A JE L8
+ 76 0000005A L7:
+ 77 0000005A 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 78 0000005D 89 D8 MOV EAX,EBX
+ 79 0000005F 5B POP EBX
+ 80 00000060 5E POP ESI
+ 81 00000061 5F POP EDI
+ 82 00000062 5D POP EBP
+ 83 00000063 C3 RET
+ 84 00000064 L8:
+ 85 00000064 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 86 00000067 83 C0 10 ADD EAX,16
+ 87 0000006A 89 45 08 MOV DWORD [8+EBP],EAX
+ 88 0000006D 8D 45 08 LEA EAX,DWORD [8+EBP]
+ 89 00000070 50 PUSH EAX
+ 90 00000071 E8 FFFFFF8A CALL _tek_getnum_s7s
+ 91 00000076 89 C3 MOV EBX,EAX
+ 92 00000078 58 POP EAX
+ 93 00000079 EB DF JMP L7
+ 94 0000007B GLOBAL _tek_decomp
+ 95 0000007B _tek_decomp:
+ 96 0000007B 55 PUSH EBP
+ 97 0000007C 89 E5 MOV EBP,ESP
+ 98 0000007E 56 PUSH ESI
+ 99 0000007F 53 PUSH EBX
+ 100 00000080 83 CB FF OR EBX,-1
+ 101 00000083 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 102 00000086 8B 4D 0C MOV ECX,DWORD [12+EBP]
+ 103 00000089 8B 75 10 MOV ESI,DWORD [16+EBP]
+ 104 0000008C 8A 10 MOV DL,BYTE [EAX]
+ 105 0000008E 80 FA 83 CMP DL,-125
+ 106 00000091 74 32 JE L17
+ 107 00000093 80 FA 85 CMP DL,-123
+ 108 00000096 74 23 JE L18
+ 109 00000098 80 FA 89 CMP DL,-119
+ 110 0000009B 74 0F JE L19
+ 111 0000009D L11:
+ 112 0000009D 31 C0 XOR EAX,EAX
+ 113 0000009F 85 DB TEST EBX,EBX
+ 114 000000A1 0F 94 C0 SETE AL
+ 115 000000A4 8D 65 F8 LEA ESP,DWORD [-8+EBP]
+ 116 000000A7 48 DEC EAX
+ 117 000000A8 5B POP EBX
+ 118 000000A9 5E POP ESI
+ 119 000000AA 5D POP EBP
+ 120 000000AB C3 RET
+ 121 000000AC L19:
+ 122 000000AC 51 PUSH ECX
+ 123 000000AD 50 PUSH EAX
+ 124 000000AE 56 PUSH ESI
+ 125 000000AF E8 00001208 CALL _tek_decode5
+ 126 000000B4 L16:
+ 127 000000B4 89 C3 MOV EBX,EAX
+ 128 000000B6 83 C4 0C ADD ESP,12
+ 129 000000B9 EB E2 JMP L11
+ 130 000000BB L18:
+ 131 000000BB 51 PUSH ECX
+ 132 000000BC 50 PUSH EAX
+ 133 000000BD 56 PUSH ESI
+ 134 000000BE E8 000003EE CALL _tek_decode2
+ 135 000000C3 EB EF JMP L16
+ 136 000000C5 L17:
+ 137 000000C5 51 PUSH ECX
+ 138 000000C6 50 PUSH EAX
+ 139 000000C7 56 PUSH ESI
+ 140 000000C8 E8 000000FF CALL _tek_decode1
+ 141 000000CD EB E5 JMP L16
+ 142 000000CF _tek_lzrestore_stk1:
+ 143 000000CF 55 PUSH EBP
+ 144 000000D0 89 E5 MOV EBP,ESP
+ 145 000000D2 57 PUSH EDI
+ 146 000000D3 56 PUSH ESI
+ 147 000000D4 53 PUSH EBX
+ 148 000000D5 83 EC 0C SUB ESP,12
+ 149 000000D8 8B 75 14 MOV ESI,DWORD [20+EBP]
+ 150 000000DB 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 151 000000DE 01 F0 ADD EAX,ESI
+ 152 000000E0 89 75 E8 MOV DWORD [-24+EBP],ESI
+ 153 000000E3 89 45 EC MOV DWORD [-20+EBP],EAX
+ 154 000000E6 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 155 000000E9 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 156 000000EC L21:
+ 157 000000EC 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 158 000000EF 0F B6 38 MOVZX EDI,BYTE [EAX]
+ 159 000000F2 89 FB MOV EBX,EDI
+ 160 000000F4 40 INC EAX
+ 161 000000F5 83 E3 0F AND EBX,15
+ 162 000000F8 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 163 000000FB 0F 84 000000BA JE L53
+ 164 00000101 L24:
+ 165 00000101 C1 FF 04 SAR EDI,4
+ 166 00000104 0F 84 000000A0 JE L54
+ 167 0000010A L26:
+ 168 0000010A 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 169 0000010D 8A 10 MOV DL,BYTE [EAX]
+ 170 0000010F 40 INC EAX
+ 171 00000110 88 16 MOV BYTE [ESI],DL
+ 172 00000112 46 INC ESI
+ 173 00000113 4B DEC EBX
+ 174 00000114 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 175 00000117 75 F1 JNE L26
+ 176 00000119 3B 75 EC CMP ESI,DWORD [-20+EBP]
+ 177 0000011C 73 7B JAE L22
+ 178 0000011E L31:
+ 179 0000011E 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 180 00000121 0F B6 08 MOVZX ECX,BYTE [EAX]
+ 181 00000124 89 CB MOV EBX,ECX
+ 182 00000126 40 INC EAX
+ 183 00000127 83 E3 0F AND EBX,15
+ 184 0000012A 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 185 0000012D F7 C1 00000001 TEST ECX,1
+ 186 00000133 75 17 JNE L34
+ 187 00000135 L35:
+ 188 00000135 C1 E3 07 SAL EBX,7
+ 189 00000138 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 190 0000013B 0F B6 10 MOVZX EDX,BYTE [EAX]
+ 191 0000013E 09 D3 OR EBX,EDX
+ 192 00000140 40 INC EAX
+ 193 00000141 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 194 00000144 F7 C3 00000001 TEST EBX,1
+ 195 0000014A 74 E9 JE L35
+ 196 0000014C L34:
+ 197 0000014C D1 FB SAR EBX,1
+ 198 0000014E C1 F9 04 SAR ECX,4
+ 199 00000151 F7 D3 NOT EBX
+ 200 00000153 75 19 JNE L39
+ 201 00000155 L40:
+ 202 00000155 C1 E1 07 SAL ECX,7
+ 203 00000158 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 204 0000015B 0F B6 10 MOVZX EDX,BYTE [EAX]
+ 205 0000015E 09 D1 OR ECX,EDX
+ 206 00000160 40 INC EAX
+ 207 00000161 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 208 00000164 F7 C1 00000001 TEST ECX,1
+ 209 0000016A 74 E9 JE L40
+ 210 0000016C D1 F9 SAR ECX,1
+ 211 0000016E L39:
+ 212 0000016E 8D 04 33 LEA EAX,DWORD [EBX+ESI*1]
+ 213 00000171 41 INC ECX
+ 214 00000172 3B 45 E8 CMP EAX,DWORD [-24+EBP]
+ 215 00000175 72 2C JB L45
+ 216 00000177 8D 04 31 LEA EAX,DWORD [ECX+ESI*1]
+ 217 0000017A 3B 45 EC CMP EAX,DWORD [-20+EBP]
+ 218 0000017D 76 05 JBE L47
+ 219 0000017F 8B 4D EC MOV ECX,DWORD [-20+EBP]
+ 220 00000182 29 F1 SUB ECX,ESI
+ 221 00000184 L47:
+ 222 00000184 8A 04 33 MOV AL,BYTE [EBX+ESI*1]
+ 223 00000187 88 06 MOV BYTE [ESI],AL
+ 224 00000189 46 INC ESI
+ 225 0000018A 49 DEC ECX
+ 226 0000018B 75 F7 JNE L47
+ 227 0000018D 4F DEC EDI
+ 228 0000018E 75 8E JNE L31
+ 229 00000190 3B 75 EC CMP ESI,DWORD [-20+EBP]
+ 230 00000193 0F 82 FFFFFF53 JB L21
+ 231 00000199 L22:
+ 232 00000199 31 C0 XOR EAX,EAX
+ 233 0000019B L20:
+ 234 0000019B 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 235 0000019E 5B POP EBX
+ 236 0000019F 5E POP ESI
+ 237 000001A0 5F POP EDI
+ 238 000001A1 5D POP EBP
+ 239 000001A2 C3 RET
+ 240 000001A3 L45:
+ 241 000001A3 B8 00000001 MOV EAX,1
+ 242 000001A8 EB F1 JMP L20
+ 243 000001AA L54:
+ 244 000001AA 8D 45 F0 LEA EAX,DWORD [-16+EBP]
+ 245 000001AD 50 PUSH EAX
+ 246 000001AE E8 FFFFFE4D CALL _tek_getnum_s7s
+ 247 000001B3 59 POP ECX
+ 248 000001B4 89 C7 MOV EDI,EAX
+ 249 000001B6 E9 FFFFFF4F JMP L26
+ 250 000001BB L53:
+ 251 000001BB 8D 45 F0 LEA EAX,DWORD [-16+EBP]
+ 252 000001BE 50 PUSH EAX
+ 253 000001BF E8 FFFFFE3C CALL _tek_getnum_s7s
+ 254 000001C4 89 C3 MOV EBX,EAX
+ 255 000001C6 58 POP EAX
+ 256 000001C7 E9 FFFFFF35 JMP L24
+ 257 000001CC _tek_decode1:
+ 258 000001CC 55 PUSH EBP
+ 259 000001CD 89 E5 MOV EBP,ESP
+ 260 000001CF 57 PUSH EDI
+ 261 000001D0 56 PUSH ESI
+ 262 000001D1 53 PUSH EBX
+ 263 000001D2 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 264 000001D5 8D 75 0C LEA ESI,DWORD [12+EBP]
+ 265 000001D8 89 C7 MOV EDI,EAX
+ 266 000001DA 56 PUSH ESI
+ 267 000001DB 83 C0 10 ADD EAX,16
+ 268 000001DE 03 7D 08 ADD EDI,DWORD [8+EBP]
+ 269 000001E1 89 45 0C MOV DWORD [12+EBP],EAX
+ 270 000001E4 E8 FFFFFE17 CALL _tek_getnum_s7s
+ 271 000001E9 89 C3 MOV EBX,EAX
+ 272 000001EB 58 POP EAX
+ 273 000001EC 85 DB TEST EBX,EBX
+ 274 000001EE 7E 67 JLE L56
+ 275 000001F0 56 PUSH ESI
+ 276 000001F1 E8 FFFFFE0A CALL _tek_getnum_s7s
+ 277 000001F6 89 C1 MOV ECX,EAX
+ 278 000001F8 89 C2 MOV EDX,EAX
+ 279 000001FA D1 F9 SAR ECX,1
+ 280 000001FC B8 00000001 MOV EAX,1
+ 281 00000201 83 E1 0F AND ECX,15
+ 282 00000204 83 C1 08 ADD ECX,8
+ 283 00000207 D3 E0 SAL EAX,CL
+ 284 00000209 39 C3 CMP EBX,EAX
+ 285 0000020B 59 POP ECX
+ 286 0000020C 7F 08 JG L58
+ 287 0000020E 89 D0 MOV EAX,EDX
+ 288 00000210 83 E0 21 AND EAX,33
+ 289 00000213 48 DEC EAX
+ 290 00000214 74 0F JE L57
+ 291 00000216 L58:
+ 292 00000216 BA 00000001 MOV EDX,1
+ 293 0000021B L55:
+ 294 0000021B 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 295 0000021E 89 D0 MOV EAX,EDX
+ 296 00000220 5B POP EBX
+ 297 00000221 5E POP ESI
+ 298 00000222 5F POP EDI
+ 299 00000223 5D POP EBP
+ 300 00000224 C3 RET
+ 301 00000225 L57:
+ 302 00000225 83 E2 40 AND EDX,64
+ 303 00000228 75 24 JNE L61
+ 304 0000022A L59:
+ 305 0000022A 56 PUSH ESI
+ 306 0000022B E8 FFFFFDD0 CALL _tek_getnum_s7s
+ 307 00000230 5A POP EDX
+ 308 00000231 85 C0 TEST EAX,EAX
+ 309 00000233 BA 00000001 MOV EDX,1
+ 310 00000238 75 E1 JNE L55
+ 311 0000023A FF 75 10 PUSH DWORD [16+EBP]
+ 312 0000023D 53 PUSH EBX
+ 313 0000023E 2B 7D 0C SUB EDI,DWORD [12+EBP]
+ 314 00000241 FF 75 0C PUSH DWORD [12+EBP]
+ 315 00000244 57 PUSH EDI
+ 316 00000245 E8 FFFFFE85 CALL _tek_lzrestore_stk1
+ 317 0000024A 89 C2 MOV EDX,EAX
+ 318 0000024C EB CD JMP L55
+ 319 0000024E L61:
+ 320 0000024E 56 PUSH ESI
+ 321 0000024F E8 FFFFFDAC CALL _tek_getnum_s7s
+ 322 00000254 59 POP ECX
+ 323 00000255 EB D3 JMP L59
+ 324 00000257 L56:
+ 325 00000257 31 D2 XOR EDX,EDX
+ 326 00000259 EB C0 JMP L55
+ 327 0000025B _tek_getnum_s7:
+ 328 0000025B 55 PUSH EBP
+ 329 0000025C 31 C9 XOR ECX,ECX
+ 330 0000025E 89 E5 MOV EBP,ESP
+ 331 00000260 57 PUSH EDI
+ 332 00000261 56 PUSH ESI
+ 333 00000262 31 F6 XOR ESI,ESI
+ 334 00000264 8B 7D 08 MOV EDI,DWORD [8+EBP]
+ 335 00000267 53 PUSH EBX
+ 336 00000268 BB 00000001 MOV EBX,1
+ 337 0000026D 8B 17 MOV EDX,DWORD [EDI]
+ 338 0000026F L63:
+ 339 0000026F C1 E1 07 SAL ECX,7
+ 340 00000272 0F B6 02 MOVZX EAX,BYTE [EDX]
+ 341 00000275 09 C1 OR ECX,EAX
+ 342 00000277 42 INC EDX
+ 343 00000278 F7 C1 00000001 TEST ECX,1
+ 344 0000027E 75 07 JNE L64
+ 345 00000280 C1 E3 07 SAL EBX,7
+ 346 00000283 01 DE ADD ESI,EBX
+ 347 00000285 EB E8 JMP L63
+ 348 00000287 L64:
+ 349 00000287 D1 E9 SHR ECX,1
+ 350 00000289 89 17 MOV DWORD [EDI],EDX
+ 351 0000028B 5B POP EBX
+ 352 0000028C 8D 04 0E LEA EAX,DWORD [ESI+ECX*1]
+ 353 0000028F 5E POP ESI
+ 354 00000290 5F POP EDI
+ 355 00000291 5D POP EBP
+ 356 00000292 C3 RET
+ 357 00000293 _tek_lzrestore_stk2:
+ 358 00000293 55 PUSH EBP
+ 359 00000294 89 E5 MOV EBP,ESP
+ 360 00000296 57 PUSH EDI
+ 361 00000297 56 PUSH ESI
+ 362 00000298 53 PUSH EBX
+ 363 00000299 83 EC 24 SUB ESP,36
+ 364 0000029C 8B 55 10 MOV EDX,DWORD [16+EBP]
+ 365 0000029F 8B 45 14 MOV EAX,DWORD [20+EBP]
+ 366 000002A2 01 D0 ADD EAX,EDX
+ 367 000002A4 8B 4D 14 MOV ECX,DWORD [20+EBP]
+ 368 000002A7 89 45 D8 MOV DWORD [-40+EBP],EAX
+ 369 000002AA 89 4D D4 MOV DWORD [-44+EBP],ECX
+ 370 000002AD 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 371 000002B0 89 45 E0 MOV DWORD [-32+EBP],EAX
+ 372 000002B3 C7 45 DC 00000000 MOV DWORD [-36+EBP],0
+ 373 000002BA L72:
+ 374 000002BA 8B 4D DC MOV ECX,DWORD [-36+EBP]
+ 375 000002BD 8B 45 DC MOV EAX,DWORD [-36+EBP]
+ 376 000002C0 F7 D0 NOT EAX
+ 377 000002C2 89 44 8D E4 MOV DWORD [-28+EBP+ECX*4],EAX
+ 378 000002C6 41 INC ECX
+ 379 000002C7 89 4D DC MOV DWORD [-36+EBP],ECX
+ 380 000002CA 83 F9 03 CMP ECX,3
+ 381 000002CD 7E EB JLE L72
+ 382 000002CF C6 45 D2 00 MOV BYTE [-46+EBP],0
+ 383 000002D3 C6 45 D3 00 MOV BYTE [-45+EBP],0
+ 384 000002D7 85 D2 TEST EDX,EDX
+ 385 000002D9 75 0C JNE L117
+ 386 000002DB L73:
+ 387 000002DB 31 D2 XOR EDX,EDX
+ 388 000002DD L67:
+ 389 000002DD 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 390 000002E0 89 D0 MOV EAX,EDX
+ 391 000002E2 5B POP EBX
+ 392 000002E3 5E POP ESI
+ 393 000002E4 5F POP EDI
+ 394 000002E5 5D POP EBP
+ 395 000002E6 C3 RET
+ 396 000002E7 L117:
+ 397 000002E7 8D 45 E0 LEA EAX,DWORD [-32+EBP]
+ 398 000002EA 50 PUSH EAX
+ 399 000002EB E8 FFFFFD10 CALL _tek_getnum_s7s
+ 400 000002F0 BA 00000001 MOV EDX,1
+ 401 000002F5 59 POP ECX
+ 402 000002F6 85 C0 TEST EAX,EAX
+ 403 000002F8 75 E3 JNE L67
+ 404 000002FA L75:
+ 405 000002FA C7 45 DC 00000000 MOV DWORD [-36+EBP],0
+ 406 00000301 L78:
+ 407 00000301 FF 45 DC INC DWORD [-36+EBP]
+ 408 00000304 83 7D DC 10 CMP DWORD [-36+EBP],16
+ 409 00000308 0F 8F 00000191 JG L118
+ 410 0000030E 80 7D D2 00 CMP BYTE [-46+EBP],0
+ 411 00000312 75 10 JNE L82
+ 412 00000314 8B 45 E0 MOV EAX,DWORD [-32+EBP]
+ 413 00000317 C6 45 D2 08 MOV BYTE [-46+EBP],8
+ 414 0000031B 8A 10 MOV DL,BYTE [EAX]
+ 415 0000031D 40 INC EAX
+ 416 0000031E 88 55 D3 MOV BYTE [-45+EBP],DL
+ 417 00000321 89 45 E0 MOV DWORD [-32+EBP],EAX
+ 418 00000324 L82:
+ 419 00000324 8A 45 D3 MOV AL,BYTE [-45+EBP]
+ 420 00000327 FE 4D D2 DEC BYTE [-46+EBP]
+ 421 0000032A 83 E0 01 AND EAX,1
+ 422 0000032D D0 6D D3 SHR BYTE [-45+EBP],1
+ 423 00000330 83 E0 01 AND EAX,1
+ 424 00000333 74 CC JE L78
+ 425 00000335 L84:
+ 426 00000335 8B 45 E0 MOV EAX,DWORD [-32+EBP]
+ 427 00000338 8B 4D 14 MOV ECX,DWORD [20+EBP]
+ 428 0000033B 8A 10 MOV DL,BYTE [EAX]
+ 429 0000033D 40 INC EAX
+ 430 0000033E 88 11 MOV BYTE [ECX],DL
+ 431 00000340 41 INC ECX
+ 432 00000341 FF 4D DC DEC DWORD [-36+EBP]
+ 433 00000344 89 45 E0 MOV DWORD [-32+EBP],EAX
+ 434 00000347 89 4D 14 MOV DWORD [20+EBP],ECX
+ 435 0000034A 75 E9 JNE L84
+ 436 0000034C 8B 45 D8 MOV EAX,DWORD [-40+EBP]
+ 437 0000034F 39 C1 CMP ECX,EAX
+ 438 00000351 73 88 JAE L73
+ 439 00000353 L89:
+ 440 00000353 FF 45 DC INC DWORD [-36+EBP]
+ 441 00000356 83 7D DC 10 CMP DWORD [-36+EBP],16
+ 442 0000035A 0F 8F 0000012D JG L119
+ 443 00000360 80 7D D2 00 CMP BYTE [-46+EBP],0
+ 444 00000364 75 10 JNE L93
+ 445 00000366 8B 45 E0 MOV EAX,DWORD [-32+EBP]
+ 446 00000369 C6 45 D2 08 MOV BYTE [-46+EBP],8
+ 447 0000036D 8A 10 MOV DL,BYTE [EAX]
+ 448 0000036F 40 INC EAX
+ 449 00000370 88 55 D3 MOV BYTE [-45+EBP],DL
+ 450 00000373 89 45 E0 MOV DWORD [-32+EBP],EAX
+ 451 00000376 L93:
+ 452 00000376 8A 45 D3 MOV AL,BYTE [-45+EBP]
+ 453 00000379 FE 4D D2 DEC BYTE [-46+EBP]
+ 454 0000037C 83 E0 01 AND EAX,1
+ 455 0000037F D0 6D D3 SHR BYTE [-45+EBP],1
+ 456 00000382 83 E0 01 AND EAX,1
+ 457 00000385 74 CC JE L89
+ 458 00000387 L95:
+ 459 00000387 8B 45 E0 MOV EAX,DWORD [-32+EBP]
+ 460 0000038A 0F B6 18 MOVZX EBX,BYTE [EAX]
+ 461 0000038D 89 DF MOV EDI,EBX
+ 462 0000038F 40 INC EAX
+ 463 00000390 C1 FF 04 SAR EDI,4
+ 464 00000393 83 E3 0F AND EBX,15
+ 465 00000396 89 45 E0 MOV DWORD [-32+EBP],EAX
+ 466 00000399 F7 C3 00000001 TEST EBX,1
+ 467 0000039F 0F 84 000000D3 JE L120
+ 468 000003A5 L98:
+ 469 000003A5 D1 FB SAR EBX,1
+ 470 000003A7 83 FB 03 CMP EBX,3
+ 471 000003AA 8D 73 FA LEA ESI,DWORD [-6+EBX]
+ 472 000003AD F7 D6 NOT ESI
+ 473 000003AF 7F 04 JG L99
+ 474 000003B1 8B 74 9D E4 MOV ESI,DWORD [-28+EBP+EBX*4]
+ 475 000003B5 L99:
+ 476 000003B5 83 FB 04 CMP EBX,4
+ 477 000003B8 0F 84 000000A4 JE L121
+ 478 000003BE L100:
+ 479 000003BE 83 FB 05 CMP EBX,5
+ 480 000003C1 0F 84 00000086 JE L122
+ 481 000003C7 L101:
+ 482 000003C7 85 FF TEST EDI,EDI
+ 483 000003C9 74 70 JE L123
+ 484 000003CB L102:
+ 485 000003CB 47 INC EDI
+ 486 000003CC 85 DB TEST EBX,EBX
+ 487 000003CE 7E 1F JLE L103
+ 488 000003D0 83 FB 01 CMP EBX,1
+ 489 000003D3 7E 11 JLE L104
+ 490 000003D5 83 FB 02 CMP EBX,2
+ 491 000003D8 7E 06 JLE L105
+ 492 000003DA 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 493 000003DD 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 494 000003E0 L105:
+ 495 000003E0 8B 45 E8 MOV EAX,DWORD [-24+EBP]
+ 496 000003E3 89 45 EC MOV DWORD [-20+EBP],EAX
+ 497 000003E6 L104:
+ 498 000003E6 8B 45 E4 MOV EAX,DWORD [-28+EBP]
+ 499 000003E9 89 75 E4 MOV DWORD [-28+EBP],ESI
+ 500 000003EC 89 45 E8 MOV DWORD [-24+EBP],EAX
+ 501 000003EF L103:
+ 502 000003EF 8B 45 14 MOV EAX,DWORD [20+EBP]
+ 503 000003F2 01 F0 ADD EAX,ESI
+ 504 000003F4 3B 45 D4 CMP EAX,DWORD [-44+EBP]
+ 505 000003F7 72 38 JB L107
+ 506 000003F9 8B 45 14 MOV EAX,DWORD [20+EBP]
+ 507 000003FC 01 F8 ADD EAX,EDI
+ 508 000003FE 3B 45 D8 CMP EAX,DWORD [-40+EBP]
+ 509 00000401 76 06 JBE L109
+ 510 00000403 8B 7D D8 MOV EDI,DWORD [-40+EBP]
+ 511 00000406 2B 7D 14 SUB EDI,DWORD [20+EBP]
+ 512 00000409 L109:
+ 513 00000409 8B 4D 14 MOV ECX,DWORD [20+EBP]
+ 514 0000040C 8A 04 0E MOV AL,BYTE [ESI+ECX*1]
+ 515 0000040F 88 01 MOV BYTE [ECX],AL
+ 516 00000411 41 INC ECX
+ 517 00000412 4F DEC EDI
+ 518 00000413 89 4D 14 MOV DWORD [20+EBP],ECX
+ 519 00000416 75 F1 JNE L109
+ 520 00000418 FF 4D DC DEC DWORD [-36+EBP]
+ 521 0000041B 0F 85 FFFFFF66 JNE L95
+ 522 00000421 8B 45 D8 MOV EAX,DWORD [-40+EBP]
+ 523 00000424 39 C1 CMP ECX,EAX
+ 524 00000426 0F 82 FFFFFECE JB L75
+ 525 0000042C E9 FFFFFEAA JMP L73
+ 526 00000431 L107:
+ 527 00000431 BA 00000001 MOV EDX,1
+ 528 00000436 E9 FFFFFEA2 JMP L67
+ 529 0000043B L123:
+ 530 0000043B 8D 45 E0 LEA EAX,DWORD [-32+EBP]
+ 531 0000043E 50 PUSH EAX
+ 532 0000043F E8 FFFFFE17 CALL _tek_getnum_s7
+ 533 00000444 8D 78 10 LEA EDI,DWORD [16+EAX]
+ 534 00000447 58 POP EAX
+ 535 00000448 E9 FFFFFF7E JMP L102
+ 536 0000044D L122:
+ 537 0000044D 8D 45 E0 LEA EAX,DWORD [-32+EBP]
+ 538 00000450 50 PUSH EAX
+ 539 00000451 E8 FFFFFE05 CALL _tek_getnum_s7
+ 540 00000456 03 45 E4 ADD EAX,DWORD [-28+EBP]
+ 541 00000459 8D 70 01 LEA ESI,DWORD [1+EAX]
+ 542 0000045C 58 POP EAX
+ 543 0000045D E9 FFFFFF65 JMP L101
+ 544 00000462 L121:
+ 545 00000462 8D 45 E0 LEA EAX,DWORD [-32+EBP]
+ 546 00000465 50 PUSH EAX
+ 547 00000466 E8 FFFFFDF0 CALL _tek_getnum_s7
+ 548 0000046B 89 C6 MOV ESI,EAX
+ 549 0000046D 58 POP EAX
+ 550 0000046E F7 D6 NOT ESI
+ 551 00000470 03 75 E4 ADD ESI,DWORD [-28+EBP]
+ 552 00000473 E9 FFFFFF46 JMP L100
+ 553 00000478 L120:
+ 554 00000478 8D 45 E0 LEA EAX,DWORD [-32+EBP]
+ 555 0000047B 50 PUSH EAX
+ 556 0000047C E8 FFFFFDDA CALL _tek_getnum_s7
+ 557 00000481 40 INC EAX
+ 558 00000482 C1 E0 04 SAL EAX,4
+ 559 00000485 09 C3 OR EBX,EAX
+ 560 00000487 58 POP EAX
+ 561 00000488 E9 FFFFFF18 JMP L98
+ 562 0000048D L119:
+ 563 0000048D 8D 45 E0 LEA EAX,DWORD [-32+EBP]
+ 564 00000490 50 PUSH EAX
+ 565 00000491 E8 FFFFFB6A CALL _tek_getnum_s7s
+ 566 00000496 01 45 DC ADD DWORD [-36+EBP],EAX
+ 567 00000499 58 POP EAX
+ 568 0000049A E9 FFFFFEE8 JMP L95
+ 569 0000049F L118:
+ 570 0000049F 8D 45 E0 LEA EAX,DWORD [-32+EBP]
+ 571 000004A2 50 PUSH EAX
+ 572 000004A3 E8 FFFFFB58 CALL _tek_getnum_s7s
+ 573 000004A8 5A POP EDX
+ 574 000004A9 01 45 DC ADD DWORD [-36+EBP],EAX
+ 575 000004AC E9 FFFFFE84 JMP L84
+ 576 000004B1 _tek_decode2:
+ 577 000004B1 55 PUSH EBP
+ 578 000004B2 89 E5 MOV EBP,ESP
+ 579 000004B4 57 PUSH EDI
+ 580 000004B5 56 PUSH ESI
+ 581 000004B6 53 PUSH EBX
+ 582 000004B7 8D 7D 0C LEA EDI,DWORD [12+EBP]
+ 583 000004BA 50 PUSH EAX
+ 584 000004BB 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 585 000004BE 57 PUSH EDI
+ 586 000004BF 89 C6 MOV ESI,EAX
+ 587 000004C1 83 C0 10 ADD EAX,16
+ 588 000004C4 03 75 08 ADD ESI,DWORD [8+EBP]
+ 589 000004C7 89 45 0C MOV DWORD [12+EBP],EAX
+ 590 000004CA C7 45 F0 00000000 MOV DWORD [-16+EBP],0
+ 591 000004D1 E8 FFFFFB2A CALL _tek_getnum_s7s
+ 592 000004D6 89 C3 MOV EBX,EAX
+ 593 000004D8 58 POP EAX
+ 594 000004D9 85 DB TEST EBX,EBX
+ 595 000004DB 7E 4E JLE L125
+ 596 000004DD 57 PUSH EDI
+ 597 000004DE E8 FFFFFB1D CALL _tek_getnum_s7s
+ 598 000004E3 89 C1 MOV ECX,EAX
+ 599 000004E5 89 C2 MOV EDX,EAX
+ 600 000004E7 D1 F9 SAR ECX,1
+ 601 000004E9 B8 00000001 MOV EAX,1
+ 602 000004EE 83 E1 0F AND ECX,15
+ 603 000004F1 83 C1 08 ADD ECX,8
+ 604 000004F4 D3 E0 SAL EAX,CL
+ 605 000004F6 39 C3 CMP EBX,EAX
+ 606 000004F8 59 POP ECX
+ 607 000004F9 7F 08 JG L127
+ 608 000004FB 89 D0 MOV EAX,EDX
+ 609 000004FD 83 E0 21 AND EAX,33
+ 610 00000500 48 DEC EAX
+ 611 00000501 74 0D JE L126
+ 612 00000503 L127:
+ 613 00000503 B8 00000001 MOV EAX,1
+ 614 00000508 L124:
+ 615 00000508 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 616 0000050B 5B POP EBX
+ 617 0000050C 5E POP ESI
+ 618 0000050D 5F POP EDI
+ 619 0000050E 5D POP EBP
+ 620 0000050F C3 RET
+ 621 00000510 L126:
+ 622 00000510 83 E2 40 AND EDX,64
+ 623 00000513 75 1B JNE L129
+ 624 00000515 L128:
+ 625 00000515 FF 75 10 PUSH DWORD [16+EBP]
+ 626 00000518 53 PUSH EBX
+ 627 00000519 2B 75 0C SUB ESI,DWORD [12+EBP]
+ 628 0000051C FF 75 0C PUSH DWORD [12+EBP]
+ 629 0000051F 56 PUSH ESI
+ 630 00000520 E8 FFFFFD6E CALL _tek_lzrestore_stk2
+ 631 00000525 83 C4 10 ADD ESP,16
+ 632 00000528 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 633 0000052B L125:
+ 634 0000052B 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 635 0000052E EB D8 JMP L124
+ 636 00000530 L129:
+ 637 00000530 57 PUSH EDI
+ 638 00000531 E8 FFFFFACA CALL _tek_getnum_s7s
+ 639 00000536 5F POP EDI
+ 640 00000537 EB DC JMP L128
+ 641 [SECTION .data]
+ 642 0000000F _prop0_table.1:
+ 643 0000000F 5D DB 93
+ 644 00000010 00 DB 0
+ 645 00000011 _prop1_table.2:
+ 646 00000011 00 DB 0
+ 647 [SECTION .text]
+ 648 00000539 _tek_lzrestore_tek5:
+ 649 00000539 55 PUSH EBP
+ 650 0000053A 89 E5 MOV EBP,ESP
+ 651 0000053C 57 PUSH EDI
+ 652 0000053D 56 PUSH ESI
+ 653 0000053E 53 PUSH EBX
+ 654 0000053F 83 EC 10 SUB ESP,16
+ 655 00000542 8B 5D 0C MOV EBX,DWORD [12+EBP]
+ 656 00000545 0F B6 0B MOVZX ECX,BYTE [EBX]
+ 657 00000548 89 C8 MOV EAX,ECX
+ 658 0000054A 83 E0 0F AND EAX,15
+ 659 0000054D C7 45 E8 FFFFFFFF MOV DWORD [-24+EBP],-1
+ 660 00000554 83 F8 01 CMP EAX,1
+ 661 00000557 74 25 JE L132
+ 662 00000559 C7 45 E8 FFFFFFFE MOV DWORD [-24+EBP],-2
+ 663 00000560 83 F8 05 CMP EAX,5
+ 664 00000563 74 19 JE L132
+ 665 00000565 C7 45 E8 00000000 MOV DWORD [-24+EBP],0
+ 666 0000056C 83 F8 09 CMP EAX,9
+ 667 0000056F 74 0D JE L132
+ 668 00000571 B8 00000001 MOV EAX,1
+ 669 00000576 L130:
+ 670 00000576 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 671 00000579 5B POP EBX
+ 672 0000057A 5E POP ESI
+ 673 0000057B 5F POP EDI
+ 674 0000057C 5D POP EBP
+ 675 0000057D C3 RET
+ 676 0000057E L132:
+ 677 0000057E 43 INC EBX
+ 678 0000057F C1 F9 04 SAR ECX,4
+ 679 00000582 0F 85 0000009E JNE L137
+ 680 00000588 0F B6 0B MOVZX ECX,BYTE [EBX]
+ 681 0000058B 43 INC EBX
+ 682 0000058C L138:
+ 683 0000058C 89 C8 MOV EAX,ECX
+ 684 0000058E BE 0000002D MOV ESI,45
+ 685 00000593 99 CDQ
+ 686 00000594 F7 FE IDIV ESI
+ 687 00000596 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 688 00000599 BE 00000009 MOV ESI,9
+ 689 0000059E 89 D0 MOV EAX,EDX
+ 690 000005A0 99 CDQ
+ 691 000005A1 F7 FE IDIV ESI
+ 692 000005A3 83 7D E8 00 CMP DWORD [-24+EBP],0
+ 693 000005A7 89 55 E4 MOV DWORD [-28+EBP],EDX
+ 694 000005AA 89 45 EC MOV DWORD [-20+EBP],EAX
+ 695 000005AD 75 07 JNE L143
+ 696 000005AF 0F B6 03 MOVZX EAX,BYTE [EBX]
+ 697 000005B2 89 45 E8 MOV DWORD [-24+EBP],EAX
+ 698 000005B5 43 INC EBX
+ 699 000005B6 L143:
+ 700 000005B6 83 7D E8 FF CMP DWORD [-24+EBP],-1
+ 701 000005BA 74 5C JE L146
+ 702 000005BC L144:
+ 703 000005BC 8B 4D E4 MOV ECX,DWORD [-28+EBP]
+ 704 000005BF B8 00000C00 MOV EAX,3072
+ 705 000005C4 03 4D F0 ADD ECX,DWORD [-16+EBP]
+ 706 000005C7 D3 E0 SAL EAX,CL
+ 707 000005C9 8D B8 00002700 LEA EDI,DWORD [9984+EAX]
+ 708 000005CF 57 PUSH EDI
+ 709 000005D0 68 003C0000 PUSH 3932160
+ 710 000005D5 E8 [00000000] CALL _memman_alloc_4k
+ 711 000005DA 89 C6 MOV ESI,EAX
+ 712 000005DC 58 POP EAX
+ 713 000005DD 5A POP EDX
+ 714 000005DE 83 C8 FF OR EAX,-1
+ 715 000005E1 85 F6 TEST ESI,ESI
+ 716 000005E3 74 91 JE L130
+ 717 000005E5 FF 75 E8 PUSH DWORD [-24+EBP]
+ 718 000005E8 FF 75 F0 PUSH DWORD [-16+EBP]
+ 719 000005EB FF 75 EC PUSH DWORD [-20+EBP]
+ 720 000005EE FF 75 E4 PUSH DWORD [-28+EBP]
+ 721 000005F1 FF 75 14 PUSH DWORD [20+EBP]
+ 722 000005F4 FF 75 10 PUSH DWORD [16+EBP]
+ 723 000005F7 53 PUSH EBX
+ 724 000005F8 56 PUSH ESI
+ 725 000005F9 E8 00000471 CALL _tek_decmain5
+ 726 000005FE 83 C4 20 ADD ESP,32
+ 727 00000601 57 PUSH EDI
+ 728 00000602 89 45 E8 MOV DWORD [-24+EBP],EAX
+ 729 00000605 56 PUSH ESI
+ 730 00000606 68 003C0000 PUSH 3932160
+ 731 0000060B E8 [00000000] CALL _memman_free_4k
+ 732 00000610 8B 45 E8 MOV EAX,DWORD [-24+EBP]
+ 733 00000613 E9 FFFFFF5E JMP L130
+ 734 00000618 L146:
+ 735 00000618 8B 7D F0 MOV EDI,DWORD [-16+EBP]
+ 736 0000061B 8B 55 EC MOV EDX,DWORD [-20+EBP]
+ 737 0000061E 89 55 F0 MOV DWORD [-16+EBP],EDX
+ 738 00000621 89 7D EC MOV DWORD [-20+EBP],EDI
+ 739 00000624 EB 96 JMP L144
+ 740 00000626 L137:
+ 741 00000626 83 7D E8 FF CMP DWORD [-24+EBP],-1
+ 742 0000062A 74 1A JE L147
+ 743 0000062C B8 00000001 MOV EAX,1
+ 744 00000631 83 F9 01 CMP ECX,1
+ 745 00000634 0F 8F FFFFFF3C JG L130
+ 746 0000063A 0F B6 89 [00000010] MOVZX ECX,BYTE [_prop1_table.2-1+ECX]
+ 747 00000641 E9 FFFFFF46 JMP L138
+ 748 00000646 L147:
+ 749 00000646 B8 00000001 MOV EAX,1
+ 750 0000064B 83 F9 02 CMP ECX,2
+ 751 0000064E 0F 8F FFFFFF22 JG L130
+ 752 00000654 0F B6 89 [0000000E] MOVZX ECX,BYTE [_prop0_table.1-1+ECX]
+ 753 0000065B E9 FFFFFF2C JMP L138
+ 754 00000660 _tek_setbm5:
+ 755 00000660 55 PUSH EBP
+ 756 00000661 83 C8 FF OR EAX,-1
+ 757 00000664 89 E5 MOV EBP,ESP
+ 758 00000666 BA 00000001 MOV EDX,1
+ 759 0000066B 57 PUSH EDI
+ 760 0000066C 89 C7 MOV EDI,EAX
+ 761 0000066E 56 PUSH ESI
+ 762 0000066F 8B 4D 10 MOV ECX,DWORD [16+EBP]
+ 763 00000672 8B 75 08 MOV ESI,DWORD [8+EBP]
+ 764 00000675 53 PUSH EBX
+ 765 00000676 8B 5D 0C MOV EBX,DWORD [12+EBP]
+ 766 00000679 88 4E 01 MOV BYTE [1+ESI],CL
+ 767 0000067C 88 1E MOV BYTE [ESI],BL
+ 768 0000067E 01 D9 ADD ECX,EBX
+ 769 00000680 D3 E7 SAL EDI,CL
+ 770 00000682 88 D9 MOV CL,BL
+ 771 00000684 D3 E2 SAL EDX,CL
+ 772 00000686 D3 E0 SAL EAX,CL
+ 773 00000688 25 0000FFFF AND EAX,65535
+ 774 0000068D 09 FA OR EDX,EDI
+ 775 0000068F F7 D7 NOT EDI
+ 776 00000691 89 46 0C MOV DWORD [12+ESI],EAX
+ 777 00000694 21 C7 AND EDI,EAX
+ 778 00000696 21 C2 AND EDX,EAX
+ 779 00000698 89 7E 04 MOV DWORD [4+ESI],EDI
+ 780 0000069B F7 D0 NOT EAX
+ 781 0000069D 89 56 08 MOV DWORD [8+ESI],EDX
+ 782 000006A0 89 46 10 MOV DWORD [16+ESI],EAX
+ 783 000006A3 5B POP EBX
+ 784 000006A4 5E POP ESI
+ 785 000006A5 5F POP EDI
+ 786 000006A6 5D POP EBP
+ 787 000006A7 C3 RET
+ 788 000006A8 _tek_rdget0:
+ 789 000006A8 55 PUSH EBP
+ 790 000006A9 89 E5 MOV EBP,ESP
+ 791 000006AB 57 PUSH EDI
+ 792 000006AC 56 PUSH ESI
+ 793 000006AD 53 PUSH EBX
+ 794 000006AE 8B 7D 08 MOV EDI,DWORD [8+EBP]
+ 795 000006B1 8B 75 10 MOV ESI,DWORD [16+EBP]
+ 796 000006B4 L150:
+ 797 000006B4 8B 47 04 MOV EAX,DWORD [4+EDI]
+ 798 000006B7 3D 00FFFFFF CMP EAX,16777215
+ 799 000006BC 77 25 JA L160
+ 800 000006BE L156:
+ 801 000006BE 89 C3 MOV EBX,EAX
+ 802 000006C0 8B 4F 08 MOV ECX,DWORD [8+EDI]
+ 803 000006C3 C1 E3 08 SAL EBX,8
+ 804 000006C6 8B 07 MOV EAX,DWORD [EDI]
+ 805 000006C8 C1 E1 08 SAL ECX,8
+ 806 000006CB 89 5F 04 MOV DWORD [4+EDI],EBX
+ 807 000006CE 0F B6 10 MOVZX EDX,BYTE [EAX]
+ 808 000006D1 09 D1 OR ECX,EDX
+ 809 000006D3 40 INC EAX
+ 810 000006D4 89 07 MOV DWORD [EDI],EAX
+ 811 000006D6 89 4F 08 MOV DWORD [8+EDI],ECX
+ 812 000006D9 89 D8 MOV EAX,EBX
+ 813 000006DB 81 FB 00FFFFFF CMP EBX,16777215
+ 814 000006E1 76 DB JBE L156
+ 815 000006E3 L160:
+ 816 000006E3 8B 57 04 MOV EDX,DWORD [4+EDI]
+ 817 000006E6 8B 47 08 MOV EAX,DWORD [8+EDI]
+ 818 000006E9 D1 EA SHR EDX,1
+ 819 000006EB 01 F6 ADD ESI,ESI
+ 820 000006ED 89 57 04 MOV DWORD [4+EDI],EDX
+ 821 000006F0 39 D0 CMP EAX,EDX
+ 822 000006F2 72 08 JB L152
+ 823 000006F4 29 D0 SUB EAX,EDX
+ 824 000006F6 83 CE 01 OR ESI,1
+ 825 000006F9 89 47 08 MOV DWORD [8+EDI],EAX
+ 826 000006FC L152:
+ 827 000006FC FF 4D 0C DEC DWORD [12+EBP]
+ 828 000006FF 75 B3 JNE L150
+ 829 00000701 F7 D6 NOT ESI
+ 830 00000703 5B POP EBX
+ 831 00000704 89 F0 MOV EAX,ESI
+ 832 00000706 5E POP ESI
+ 833 00000707 5F POP EDI
+ 834 00000708 5D POP EBP
+ 835 00000709 C3 RET
+ 836 0000070A _tek_rdget1:
+ 837 0000070A 55 PUSH EBP
+ 838 0000070B 89 E5 MOV EBP,ESP
+ 839 0000070D 57 PUSH EDI
+ 840 0000070E 56 PUSH ESI
+ 841 0000070F 53 PUSH EBX
+ 842 00000710 83 EC 14 SUB ESP,20
+ 843 00000713 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 844 00000716 8B 7D 18 MOV EDI,DWORD [24+EBP]
+ 845 00000719 C1 F8 04 SAR EAX,4
+ 846 0000071C 89 45 E8 MOV DWORD [-24+EBP],EAX
+ 847 0000071F 8B 45 14 MOV EAX,DWORD [20+EBP]
+ 848 00000722 C1 E0 02 SAL EAX,2
+ 849 00000725 83 65 10 0F AND DWORD [16+EBP],15
+ 850 00000729 29 45 0C SUB DWORD [12+EBP],EAX
+ 851 0000072C L162:
+ 852 0000072C 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 853 0000072F 8B 55 14 MOV EDX,DWORD [20+EBP]
+ 854 00000732 8D 14 90 LEA EDX,DWORD [EAX+EDX*4]
+ 855 00000735 89 55 EC MOV DWORD [-20+EBP],EDX
+ 856 00000738 8B 02 MOV EAX,DWORD [EDX]
+ 857 0000073A 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 858 0000073D 8B 47 14 MOV EAX,DWORD [20+EDI]
+ 859 00000740 85 C0 TEST EAX,EAX
+ 860 00000742 74 2B JE L165
+ 861 00000744 48 DEC EAX
+ 862 00000745 89 47 14 MOV DWORD [20+EDI],EAX
+ 863 00000748 85 C0 TEST EAX,EAX
+ 864 0000074A 0F 84 00000103 JE L187
+ 865 00000750 L166:
+ 866 00000750 8B 47 04 MOV EAX,DWORD [4+EDI]
+ 867 00000753 39 45 F0 CMP DWORD [-16+EBP],EAX
+ 868 00000756 72 0C JB L186
+ 869 00000758 8B 47 08 MOV EAX,DWORD [8+EDI]
+ 870 0000075B 39 45 F0 CMP DWORD [-16+EBP],EAX
+ 871 0000075E 0F 86 000000D6 JBE L174
+ 872 00000764 L186:
+ 873 00000764 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 874 00000767 L173:
+ 875 00000767 8B 55 EC MOV EDX,DWORD [-20+EBP]
+ 876 0000076A 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 877 0000076D 89 02 MOV DWORD [EDX],EAX
+ 878 0000076F L165:
+ 879 0000076F 8B 55 08 MOV EDX,DWORD [8+EBP]
+ 880 00000772 8B 42 04 MOV EAX,DWORD [4+EDX]
+ 881 00000775 3D 00FFFFFF CMP EAX,16777215
+ 882 0000077A 77 2B JA L185
+ 883 0000077C L179:
+ 884 0000077C 89 C3 MOV EBX,EAX
+ 885 0000077E 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 886 00000781 C1 E3 08 SAL EBX,8
+ 887 00000784 8B 48 08 MOV ECX,DWORD [8+EAX]
+ 888 00000787 89 58 04 MOV DWORD [4+EAX],EBX
+ 889 0000078A C1 E1 08 SAL ECX,8
+ 890 0000078D 8B 00 MOV EAX,DWORD [EAX]
+ 891 0000078F 0F B6 10 MOVZX EDX,BYTE [EAX]
+ 892 00000792 09 D1 OR ECX,EDX
+ 893 00000794 40 INC EAX
+ 894 00000795 8B 55 08 MOV EDX,DWORD [8+EBP]
+ 895 00000798 81 FB 00FFFFFF CMP EBX,16777215
+ 896 0000079E 89 02 MOV DWORD [EDX],EAX
+ 897 000007A0 89 4A 08 MOV DWORD [8+EDX],ECX
+ 898 000007A3 89 D8 MOV EAX,EBX
+ 899 000007A5 76 D5 JBE L179
+ 900 000007A7 L185:
+ 901 000007A7 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 902 000007AA D1 65 14 SAL DWORD [20+EBP],1
+ 903 000007AD 8B 70 04 MOV ESI,DWORD [4+EAX]
+ 904 000007B0 89 F1 MOV ECX,ESI
+ 905 000007B2 23 48 0C AND ECX,DWORD [12+EAX]
+ 906 000007B5 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 907 000007B8 F7 E1 MUL ECX
+ 908 000007BA 0F AC D0 10 SHRD EAX,EDX,16
+ 909 000007BE C1 EA 10 SHR EDX,16
+ 910 000007C1 89 45 E0 MOV DWORD [-32+EBP],EAX
+ 911 000007C4 89 55 E4 MOV DWORD [-28+EBP],EDX
+ 912 000007C7 89 C3 MOV EBX,EAX
+ 913 000007C9 8B 55 08 MOV EDX,DWORD [8+EBP]
+ 914 000007CC 8B 4A 08 MOV ECX,DWORD [8+EDX]
+ 915 000007CF 39 C1 CMP ECX,EAX
+ 916 000007D1 73 43 JAE L180
+ 917 000007D3 8B 45 E0 MOV EAX,DWORD [-32+EBP]
+ 918 000007D6 83 4D 14 01 OR DWORD [20+EBP],1
+ 919 000007DA 89 42 04 MOV DWORD [4+EDX],EAX
+ 920 000007DD 8B 55 EC MOV EDX,DWORD [-20+EBP]
+ 921 000007E0 B8 00010000 MOV EAX,65536
+ 922 000007E5 2B 45 F0 SUB EAX,DWORD [-16+EBP]
+ 923 000007E8 0F B6 4F 01 MOVZX ECX,BYTE [1+EDI]
+ 924 000007EC D3 E8 SHR EAX,CL
+ 925 000007EE 23 47 0C AND EAX,DWORD [12+EDI]
+ 926 000007F1 01 02 ADD DWORD [EDX],EAX
+ 927 000007F3 L181:
+ 928 000007F3 8B 45 E8 MOV EAX,DWORD [-24+EBP]
+ 929 000007F6 FF 4D 10 DEC DWORD [16+EBP]
+ 930 000007F9 85 45 10 TEST DWORD [16+EBP],EAX
+ 931 000007FC 75 03 JNE L164
+ 932 000007FE 83 C7 20 ADD EDI,32
+ 933 00000801 L164:
+ 934 00000801 83 7D 10 00 CMP DWORD [16+EBP],0
+ 935 00000805 0F 85 FFFFFF21 JNE L162
+ 936 0000080B 8B 45 14 MOV EAX,DWORD [20+EBP]
+ 937 0000080E 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 938 00000811 5B POP EBX
+ 939 00000812 5E POP ESI
+ 940 00000813 5F POP EDI
+ 941 00000814 5D POP EBP
+ 942 00000815 C3 RET
+ 943 00000816 L180:
+ 944 00000816 29 C6 SUB ESI,EAX
+ 945 00000818 29 D9 SUB ECX,EBX
+ 946 0000081A 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 947 0000081D 89 70 04 MOV DWORD [4+EAX],ESI
+ 948 00000820 89 48 08 MOV DWORD [8+EAX],ECX
+ 949 00000823 0F B6 4F 01 MOVZX ECX,BYTE [1+EDI]
+ 950 00000827 D3 6D F0 SHR DWORD [-16+EBP],CL
+ 951 0000082A 8B 57 0C MOV EDX,DWORD [12+EDI]
+ 952 0000082D 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 953 00000830 21 55 F0 AND DWORD [-16+EBP],EDX
+ 954 00000833 8B 55 F0 MOV EDX,DWORD [-16+EBP]
+ 955 00000836 29 10 SUB DWORD [EAX],EDX
+ 956 00000838 EB B9 JMP L181
+ 957 0000083A L174:
+ 958 0000083A 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 959 0000083D 23 47 10 AND EAX,DWORD [16+EDI]
+ 960 00000840 85 C0 TEST EAX,EAX
+ 961 00000842 0F 84 FFFFFF27 JE L165
+ 962 00000848 8B 47 0C MOV EAX,DWORD [12+EDI]
+ 963 0000084B 21 45 F0 AND DWORD [-16+EBP],EAX
+ 964 0000084E E9 FFFFFF14 JMP L173
+ 965 00000853 L187:
+ 966 00000853 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 967 00000856 83 C0 7C ADD EAX,124
+ 968 00000859 50 PUSH EAX
+ 969 0000085A 6A 00 PUSH 0
+ 970 0000085C 6A 71 PUSH 113
+ 971 0000085E 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 972 00000861 05 00002498 ADD EAX,9368
+ 973 00000866 50 PUSH EAX
+ 974 00000867 FF 75 08 PUSH DWORD [8+EBP]
+ 975 0000086A E8 FFFFFE9B CALL _tek_rdget1
+ 976 0000086F 83 C4 14 ADD ESP,20
+ 977 00000872 85 C0 TEST EAX,EAX
+ 978 00000874 0F 84 00000097 JE L169
+ 979 0000087A 8B 55 08 MOV EDX,DWORD [8+EBP]
+ 980 0000087D 89 F8 MOV EAX,EDI
+ 981 0000087F 83 C2 3C ADD EDX,60
+ 982 00000882 2B 45 08 SUB EAX,DWORD [8+EBP]
+ 983 00000885 52 PUSH EDX
+ 984 00000886 6A 00 PUSH 0
+ 985 00000888 83 E8 1C SUB EAX,28
+ 986 0000088B C1 F8 05 SAR EAX,5
+ 987 0000088E 6A 71 PUSH 113
+ 988 00000890 0F B6 57 02 MOVZX EDX,BYTE [2+EDI]
+ 989 00000894 8D 04 42 LEA EAX,DWORD [EDX+EAX*2]
+ 990 00000897 8B 55 08 MOV EDX,DWORD [8+EBP]
+ 991 0000089A 8D 84 82 00002318 LEA EAX,DWORD [8984+EDX+EAX*4]
+ 992 000008A1 50 PUSH EAX
+ 993 000008A2 52 PUSH EDX
+ 994 000008A3 E8 FFFFFE62 CALL _tek_rdget1
+ 995 000008A8 83 C4 14 ADD ESP,20
+ 996 000008AB 84 C0 TEST AL,AL
+ 997 000008AD 88 47 02 MOV BYTE [2+EDI],AL
+ 998 000008B0 74 0B JE L188
+ 999 000008B2 L170:
+ 1000 000008B2 8B 47 18 MOV EAX,DWORD [24+EDI]
+ 1001 000008B5 89 47 14 MOV DWORD [20+EDI],EAX
+ 1002 000008B8 E9 FFFFFE93 JMP L166
+ 1003 000008BD L188:
+ 1004 000008BD 8B 75 08 MOV ESI,DWORD [8+EBP]
+ 1005 000008C0 83 C6 5C ADD ESI,92
+ 1006 000008C3 56 PUSH ESI
+ 1007 000008C4 6A 01 PUSH 1
+ 1008 000008C6 6A 74 PUSH 116
+ 1009 000008C8 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 1010 000008CB 05 00002418 ADD EAX,9240
+ 1011 000008D0 50 PUSH EAX
+ 1012 000008D1 FF 75 08 PUSH DWORD [8+EBP]
+ 1013 000008D4 E8 FFFFFE31 CALL _tek_rdget1
+ 1014 000008D9 83 C4 14 ADD ESP,20
+ 1015 000008DC 89 C3 MOV EBX,EAX
+ 1016 000008DE 83 E3 0F AND EBX,15
+ 1017 000008E1 83 FB 0F CMP EBX,15
+ 1018 000008E4 74 2B JE L169
+ 1019 000008E6 56 PUSH ESI
+ 1020 000008E7 6A 01 PUSH 1
+ 1021 000008E9 6A 74 PUSH 116
+ 1022 000008EB 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 1023 000008EE 05 00002458 ADD EAX,9304
+ 1024 000008F3 50 PUSH EAX
+ 1025 000008F4 FF 75 08 PUSH DWORD [8+EBP]
+ 1026 000008F7 E8 FFFFFE0E CALL _tek_rdget1
+ 1027 000008FC 83 C4 14 ADD ESP,20
+ 1028 000008FF 48 DEC EAX
+ 1029 00000900 83 E0 0F AND EAX,15
+ 1030 00000903 40 INC EAX
+ 1031 00000904 50 PUSH EAX
+ 1032 00000905 53 PUSH EBX
+ 1033 00000906 57 PUSH EDI
+ 1034 00000907 E8 FFFFFD54 CALL _tek_setbm5
+ 1035 0000090C 83 C4 0C ADD ESP,12
+ 1036 0000090F EB A1 JMP L170
+ 1037 00000911 L169:
+ 1038 00000911 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 1039 00000914 8B 55 08 MOV EDX,DWORD [8+EBP]
+ 1040 00000917 83 C0 10 ADD EAX,16
+ 1041 0000091A 8B 6A 10 MOV EBP,DWORD [16+EDX]
+ 1042 0000091D 8B 60 08 MOV ESP,DWORD [8+EAX]
+ 1043 00000920 FF 60 04 JMP DWORD [4+EAX]
+ 1044 00000923 _tek_revbit:
+ 1045 00000923 55 PUSH EBP
+ 1046 00000924 89 E5 MOV EBP,ESP
+ 1047 00000926 53 PUSH EBX
+ 1048 00000927 31 DB XOR EBX,EBX
+ 1049 00000929 8B 4D 08 MOV ECX,DWORD [8+EBP]
+ 1050 0000092C 8B 55 0C MOV EDX,DWORD [12+EBP]
+ 1051 0000092F L190:
+ 1052 0000092F 89 C8 MOV EAX,ECX
+ 1053 00000931 D1 E9 SHR ECX,1
+ 1054 00000933 83 E0 01 AND EAX,1
+ 1055 00000936 4A DEC EDX
+ 1056 00000937 8D 1C 58 LEA EBX,DWORD [EAX+EBX*2]
+ 1057 0000093A 75 F3 JNE L190
+ 1058 0000093C 89 D8 MOV EAX,EBX
+ 1059 0000093E 5B POP EBX
+ 1060 0000093F 5D POP EBP
+ 1061 00000940 C3 RET
+ 1062 00000941 _tek_getlen5:
+ 1063 00000941 55 PUSH EBP
+ 1064 00000942 89 E5 MOV EBP,ESP
+ 1065 00000944 57 PUSH EDI
+ 1066 00000945 56 PUSH ESI
+ 1067 00000946 53 PUSH EBX
+ 1068 00000947 8B 75 0C MOV ESI,DWORD [12+EBP]
+ 1069 0000094A 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 1070 0000094D FF B3 00000428 PUSH DWORD [1064+EBX]
+ 1071 00000953 8D 3C F3 LEA EDI,DWORD [EBX+ESI*8]
+ 1072 00000956 6A 00 PUSH 0
+ 1073 00000958 6A 71 PUSH 113
+ 1074 0000095A 8D 87 0000131C LEA EAX,DWORD [4892+EDI]
+ 1075 00000960 50 PUSH EAX
+ 1076 00000961 53 PUSH EBX
+ 1077 00000962 E8 FFFFFDA3 CALL _tek_rdget1
+ 1078 00000967 83 C4 14 ADD ESP,20
+ 1079 0000096A 3B 45 14 CMP EAX,DWORD [20+EBP]
+ 1080 0000096D 74 33 JE L195
+ 1081 0000096F 6B 45 10 07 IMUL EAX,DWORD [16+EBP],7
+ 1082 00000973 01 F0 ADD EAX,ESI
+ 1083 00000975 FF B3 0000042C PUSH DWORD [1068+EBX]
+ 1084 0000097B C1 E0 05 SAL EAX,5
+ 1085 0000097E 6A 01 PUSH 1
+ 1086 00000980 6A 73 PUSH 115
+ 1087 00000982 8D 84 03 000004BC LEA EAX,DWORD [1212+EBX+EAX*1]
+ 1088 00000989 50 PUSH EAX
+ 1089 0000098A 53 PUSH EBX
+ 1090 0000098B E8 FFFFFD7A CALL _tek_rdget1
+ 1091 00000990 89 C2 MOV EDX,EAX
+ 1092 00000992 83 E2 07 AND EDX,7
+ 1093 00000995 L202:
+ 1094 00000995 83 C4 14 ADD ESP,20
+ 1095 00000998 L196:
+ 1096 00000998 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 1097 0000099B 89 D0 MOV EAX,EDX
+ 1098 0000099D 5B POP EBX
+ 1099 0000099E 5E POP ESI
+ 1100 0000099F 5F POP EDI
+ 1101 000009A0 5D POP EBP
+ 1102 000009A1 C3 RET
+ 1103 000009A2 L195:
+ 1104 000009A2 FF B3 00000428 PUSH DWORD [1064+EBX]
+ 1105 000009A8 6A 00 PUSH 0
+ 1106 000009AA 8D 87 00001320 LEA EAX,DWORD [4896+EDI]
+ 1107 000009B0 6A 71 PUSH 113
+ 1108 000009B2 50 PUSH EAX
+ 1109 000009B3 53 PUSH EBX
+ 1110 000009B4 E8 FFFFFD51 CALL _tek_rdget1
+ 1111 000009B9 83 C4 14 ADD ESP,20
+ 1112 000009BC 3B 45 14 CMP EAX,DWORD [20+EBP]
+ 1113 000009BF 74 25 JE L197
+ 1114 000009C1 6B 45 10 07 IMUL EAX,DWORD [16+EBP],7
+ 1115 000009C5 01 F0 ADD EAX,ESI
+ 1116 000009C7 FF B3 00000430 PUSH DWORD [1072+EBX]
+ 1117 000009CD C1 E0 05 SAL EAX,5
+ 1118 000009D0 6A 01 PUSH 1
+ 1119 000009D2 6A 73 PUSH 115
+ 1120 000009D4 8D 84 03 000004FC LEA EAX,DWORD [1276+EBX+EAX*1]
+ 1121 000009DB 50 PUSH EAX
+ 1122 000009DC 53 PUSH EBX
+ 1123 000009DD E8 FFFFFD28 CALL _tek_rdget1
+ 1124 000009E2 89 C2 MOV EDX,EAX
+ 1125 000009E4 EB AF JMP L202
+ 1126 000009E6 L197:
+ 1127 000009E6 FF B3 00000434 PUSH DWORD [1076+EBX]
+ 1128 000009EC C1 E6 0A SAL ESI,10
+ 1129 000009EF 6A 01 PUSH 1
+ 1130 000009F1 6A 78 PUSH 120
+ 1131 000009F3 8D 84 1E 0000132C LEA EAX,DWORD [4908+ESI+EBX*1]
+ 1132 000009FA 50 PUSH EAX
+ 1133 000009FB 53 PUSH EBX
+ 1134 000009FC E8 FFFFFD09 CALL _tek_rdget1
+ 1135 00000A01 83 C4 14 ADD ESP,20
+ 1136 00000A04 8D 90 FFFFFE08 LEA EDX,DWORD [-504+EAX]
+ 1137 00000A0A 85 D2 TEST EDX,EDX
+ 1138 00000A0C 7E 29 JLE L199
+ 1139 00000A0E 83 FA 05 CMP EDX,5
+ 1140 00000A11 7F 06 JG L200
+ 1141 00000A13 83 7D 14 00 CMP DWORD [20+EBP],0
+ 1142 00000A17 74 29 JE L203
+ 1143 00000A19 L200:
+ 1144 00000A19 6A FE PUSH -2
+ 1145 00000A1B 52 PUSH EDX
+ 1146 00000A1C 53 PUSH EBX
+ 1147 00000A1D E8 FFFFFC86 CALL _tek_rdget0
+ 1148 00000A22 83 C4 0C ADD ESP,12
+ 1149 00000A25 8D 50 FF LEA EDX,DWORD [-1+EAX]
+ 1150 00000A28 L201:
+ 1151 00000A28 6A FE PUSH -2
+ 1152 00000A2A 52 PUSH EDX
+ 1153 00000A2B 53 PUSH EBX
+ 1154 00000A2C E8 FFFFFC77 CALL _tek_rdget0
+ 1155 00000A31 83 C4 0C ADD ESP,12
+ 1156 00000A34 8D 50 FF LEA EDX,DWORD [-1+EAX]
+ 1157 00000A37 L199:
+ 1158 00000A37 81 C2 00000108 ADD EDX,264
+ 1159 00000A3D E9 FFFFFF56 JMP L196
+ 1160 00000A42 L203:
+ 1161 00000A42 FF B3 00000438 PUSH DWORD [1080+EBX]
+ 1162 00000A48 89 D0 MOV EAX,EDX
+ 1163 00000A4A 6A 01 PUSH 1
+ 1164 00000A4C 83 C8 70 OR EAX,112
+ 1165 00000A4F 88 D1 MOV CL,DL
+ 1166 00000A51 50 PUSH EAX
+ 1167 00000A52 B8 00000004 MOV EAX,4
+ 1168 00000A57 D3 E0 SAL EAX,CL
+ 1169 00000A59 8D 84 18 00002214 LEA EAX,DWORD [8724+EAX+EBX*1]
+ 1170 00000A60 50 PUSH EAX
+ 1171 00000A61 53 PUSH EBX
+ 1172 00000A62 E8 FFFFFCA3 CALL _tek_rdget1
+ 1173 00000A67 83 C4 14 ADD ESP,20
+ 1174 00000A6A 8D 50 FF LEA EDX,DWORD [-1+EAX]
+ 1175 00000A6D EB B9 JMP L201
+ 1176 [SECTION .data]
+ 1177 00000012 _state_table.3:
+ 1178 00000012 00000000 DD 0
+ 1179 00000016 00000000 DD 0
+ 1180 0000001A 00000000 DD 0
+ 1181 0000001E 00000000 DD 0
+ 1182 00000022 00000001 DD 1
+ 1183 00000026 00000002 DD 2
+ 1184 0000002A 00000003 DD 3
+ 1185 0000002E 00000004 DD 4
+ 1186 00000032 00000005 DD 5
+ 1187 00000036 00000006 DD 6
+ 1188 0000003A 00000004 DD 4
+ 1189 0000003E 00000005 DD 5
+ 1190 00000042 _pt1.4:
+ 1191 00000042 08 DB 8
+ 1192 00000043 08 DB 8
+ 1193 00000044 08 DB 8
+ 1194 00000045 08 DB 8
+ 1195 00000046 08 DB 8
+ 1196 00000047 08 DB 8
+ 1197 00000048 08 DB 8
+ 1198 00000049 08 DB 8
+ 1199 0000004A 08 DB 8
+ 1200 0000004B 08 DB 8
+ 1201 0000004C 12 DB 18
+ 1202 0000004D 12 DB 18
+ 1203 0000004E 12 DB 18
+ 1204 0000004F 08 DB 8
+ 1205 00000050 _pt2.5:
+ 1206 00000050 08 DB 8
+ 1207 00000051 08 DB 8
+ 1208 00000052 0A DB 10
+ 1209 00000053 0B DB 11
+ 1210 00000054 0C DB 12
+ 1211 00000055 0C DB 12
+ 1212 00000056 0E DB 14
+ 1213 00000057 0F DB 15
+ 1214 00000058 10 DB 16
+ 1215 00000059 10 DB 16
+ 1216 0000005A 12 DB 18
+ 1217 0000005B 12 DB 18
+ 1218 0000005C 14 DB 20
+ 1219 0000005D 15 DB 21
+ 1220 [SECTION .text]
+ 1221 00000A6F _tek_decmain5:
+ 1222 00000A6F 55 PUSH EBP
+ 1223 00000A70 B8 00000001 MOV EAX,1
+ 1224 00000A75 89 E5 MOV EBP,ESP
+ 1225 00000A77 89 C2 MOV EDX,EAX
+ 1226 00000A79 57 PUSH EDI
+ 1227 00000A7A 56 PUSH ESI
+ 1228 00000A7B 53 PUSH EBX
+ 1229 00000A7C 83 EC 74 SUB ESP,116
+ 1230 00000A7F 8B 4D 1C MOV ECX,DWORD [28+EBP]
+ 1231 00000A82 8B 5D 0C MOV EBX,DWORD [12+EBP]
+ 1232 00000A85 D3 E2 SAL EDX,CL
+ 1233 00000A87 89 D1 MOV ECX,EDX
+ 1234 00000A89 8B 55 08 MOV EDX,DWORD [8+EBP]
+ 1235 00000A8C 49 DEC ECX
+ 1236 00000A8D 89 55 9C MOV DWORD [-100+EBP],EDX
+ 1237 00000A90 89 4D B8 MOV DWORD [-72+EBP],ECX
+ 1238 00000A93 8A 4D 20 MOV CL,BYTE [32+EBP]
+ 1239 00000A96 D3 E0 SAL EAX,CL
+ 1240 00000A98 48 DEC EAX
+ 1241 00000A99 8B 4D 9C MOV ECX,DWORD [-100+EBP]
+ 1242 00000A9C 89 45 B4 MOV DWORD [-76+EBP],EAX
+ 1243 00000A9F 31 C0 XOR EAX,EAX
+ 1244 00000AA1 83 7D 24 FF CMP DWORD [36+EBP],-1
+ 1245 00000AA5 0F 94 C0 SETE AL
+ 1246 00000AA8 89 45 B0 MOV DWORD [-80+EBP],EAX
+ 1247 00000AAB 81 C2 0000045C ADD EDX,1116
+ 1248 00000AB1 C7 45 AC 00000008 MOV DWORD [-84+EBP],8
+ 1249 00000AB8 8B 45 18 MOV EAX,DWORD [24+EBP]
+ 1250 00000ABB 89 55 98 MOV DWORD [-104+EBP],EDX
+ 1251 00000ABE 29 45 AC SUB DWORD [-84+EBP],EAX
+ 1252 00000AC1 8D 43 04 LEA EAX,DWORD [4+EBX]
+ 1253 00000AC4 89 01 MOV DWORD [ECX],EAX
+ 1254 00000AC6 C7 45 A4 00000078 MOV DWORD [-92+EBP],120
+ 1255 00000ACD C7 41 04 FFFFFFFF MOV DWORD [4+ECX],-1
+ 1256 00000AD4 0F B6 13 MOVZX EDX,BYTE [EBX]
+ 1257 00000AD7 0F B6 43 01 MOVZX EAX,BYTE [1+EBX]
+ 1258 00000ADB C1 E0 10 SAL EAX,16
+ 1259 00000ADE C1 E2 18 SAL EDX,24
+ 1260 00000AE1 09 C2 OR EDX,EAX
+ 1261 00000AE3 0F B6 43 02 MOVZX EAX,BYTE [2+EBX]
+ 1262 00000AE7 C1 E0 08 SAL EAX,8
+ 1263 00000AEA 09 C2 OR EDX,EAX
+ 1264 00000AEC 0F B6 43 03 MOVZX EAX,BYTE [3+EBX]
+ 1265 00000AF0 09 C2 OR EDX,EAX
+ 1266 00000AF2 89 51 08 MOV DWORD [8+ECX],EDX
+ 1267 00000AF5 C7 45 D0 00000000 MOV DWORD [-48+EBP],0
+ 1268 00000AFC L209:
+ 1269 00000AFC 8B 55 D0 MOV EDX,DWORD [-48+EBP]
+ 1270 00000AFF 8B 45 D0 MOV EAX,DWORD [-48+EBP]
+ 1271 00000B02 F7 D0 NOT EAX
+ 1272 00000B04 89 44 95 E4 MOV DWORD [-28+EBP+EDX*4],EAX
+ 1273 00000B08 42 INC EDX
+ 1274 00000B09 89 55 D0 MOV DWORD [-48+EBP],EDX
+ 1275 00000B0C 83 FA 03 CMP EDX,3
+ 1276 00000B0F 7E EB JLE L209
+ 1277 00000B11 8B 45 9C MOV EAX,DWORD [-100+EBP]
+ 1278 00000B14 8B 4D 9C MOV ECX,DWORD [-100+EBP]
+ 1279 00000B17 83 C0 10 ADD EAX,16
+ 1280 00000B1A 8D 55 F4 LEA EDX,DWORD [-12+EBP]
+ 1281 00000B1D 89 51 10 MOV DWORD [16+ECX],EDX
+ 1282 00000B20 C7 40 04 [000012AF] MOV DWORD [4+EAX],L211
+ 1283 00000B27 89 60 08 MOV DWORD [8+EAX],ESP
+ 1284 00000B2A 31 C0 XOR EAX,EAX
+ 1285 00000B2C L212:
+ 1286 00000B2C 85 C0 TEST EAX,EAX
+ 1287 00000B2E 0F 85 0000048C JNE L213
+ 1288 00000B34 8B 4D 18 MOV ECX,DWORD [24+EBP]
+ 1289 00000B37 B8 00000300 MOV EAX,768
+ 1290 00000B3C 03 4D 20 ADD ECX,DWORD [32+EBP]
+ 1291 00000B3F D3 E0 SAL EAX,CL
+ 1292 00000B41 05 0000080F ADD EAX,2063
+ 1293 00000B46 89 45 D0 MOV DWORD [-48+EBP],EAX
+ 1294 00000B49 78 13 JS L330
+ 1295 00000B4B L218:
+ 1296 00000B4B 8B 4D D0 MOV ECX,DWORD [-48+EBP]
+ 1297 00000B4E 8B 45 98 MOV EAX,DWORD [-104+EBP]
+ 1298 00000B51 C7 04 88 00008000 MOV DWORD [EAX+ECX*4],32768
+ 1299 00000B58 49 DEC ECX
+ 1300 00000B59 89 4D D0 MOV DWORD [-48+EBP],ECX
+ 1301 00000B5C 79 ED JNS L218
+ 1302 00000B5E L330:
+ 1303 00000B5E C7 45 D0 00000000 MOV DWORD [-48+EBP],0
+ 1304 00000B65 8B 55 9C MOV EDX,DWORD [-100+EBP]
+ 1305 00000B68 L225:
+ 1306 00000B68 31 C0 XOR EAX,EAX
+ 1307 00000B6A 83 7D D0 03 CMP DWORD [-48+EBP],3
+ 1308 00000B6E 0F 9F C0 SETG AL
+ 1309 00000B71 89 42 30 MOV DWORD [48+EDX],EAX
+ 1310 00000B74 B8 00004000 MOV EAX,16384
+ 1311 00000B79 83 7D D0 17 CMP DWORD [-48+EBP],23
+ 1312 00000B7D 7E 05 JLE L224
+ 1313 00000B7F B8 00002000 MOV EAX,8192
+ 1314 00000B84 L224:
+ 1315 00000B84 C6 42 1E 00 MOV BYTE [30+EDX],0
+ 1316 00000B88 C6 42 1D 05 MOV BYTE [29+EDX],5
+ 1317 00000B8C C6 42 1C 05 MOV BYTE [28+EDX],5
+ 1318 00000B90 FF 45 D0 INC DWORD [-48+EBP]
+ 1319 00000B93 89 42 34 MOV DWORD [52+EDX],EAX
+ 1320 00000B96 83 C2 20 ADD EDX,32
+ 1321 00000B99 83 7D D0 1F CMP DWORD [-48+EBP],31
+ 1322 00000B9D 7E C9 JLE L225
+ 1323 00000B9F 8B 4D 18 MOV ECX,DWORD [24+EBP]
+ 1324 00000BA2 B8 00000400 MOV EAX,1024
+ 1325 00000BA7 03 4D 20 ADD ECX,DWORD [32+EBP]
+ 1326 00000BAA 8B 55 98 MOV EDX,DWORD [-104+EBP]
+ 1327 00000BAD D3 E0 SAL EAX,CL
+ 1328 00000BAF 83 7D B0 00 CMP DWORD [-80+EBP],0
+ 1329 00000BB3 8D 84 10 00002038 LEA EAX,DWORD [8248+EAX+EDX*1]
+ 1330 00000BBA 89 45 A0 MOV DWORD [-96+EBP],EAX
+ 1331 00000BBD 0F 84 000005BC JE L226
+ 1332 00000BC3 8B 4D 9C MOV ECX,DWORD [-100+EBP]
+ 1333 00000BC6 89 C8 MOV EAX,ECX
+ 1334 00000BC8 C7 41 0C FFFFF800 MOV DWORD [12+ECX],-2048
+ 1335 00000BCF 83 C0 30 ADD EAX,48
+ 1336 00000BD2 C7 45 D0 0000001F MOV DWORD [-48+EBP],31
+ 1337 00000BD9 L231:
+ 1338 00000BD9 C7 00 00000000 MOV DWORD [EAX],0
+ 1339 00000BDF 83 C0 20 ADD EAX,32
+ 1340 00000BE2 FF 4D D0 DEC DWORD [-48+EBP]
+ 1341 00000BE5 79 F2 JNS L231
+ 1342 00000BE7 C7 45 D0 00000000 MOV DWORD [-48+EBP],0
+ 1343 00000BEE L236:
+ 1344 00000BEE 8B 55 D0 MOV EDX,DWORD [-48+EBP]
+ 1345 00000BF1 8B 45 9C MOV EAX,DWORD [-100+EBP]
+ 1346 00000BF4 8B 4D 9C MOV ECX,DWORD [-100+EBP]
+ 1347 00000BF7 83 C0 1C ADD EAX,28
+ 1348 00000BFA 89 84 91 0000041C MOV DWORD [1052+ECX+EDX*4],EAX
+ 1349 00000C01 42 INC EDX
+ 1350 00000C02 89 55 D0 MOV DWORD [-48+EBP],EDX
+ 1351 00000C05 83 FA 0D CMP EDX,13
+ 1352 00000C08 7E E4 JLE L236
+ 1353 00000C0A L237:
+ 1354 00000C0A 8B 45 9C MOV EAX,DWORD [-100+EBP]
+ 1355 00000C0D 89 45 80 MOV DWORD [-128+EBP],EAX
+ 1356 00000C10 C7 45 D0 0000001F MOV DWORD [-48+EBP],31
+ 1357 00000C17 L268:
+ 1358 00000C17 8B 55 80 MOV EDX,DWORD [-128+EBP]
+ 1359 00000C1A 0F B6 42 1D MOVZX EAX,BYTE [29+EDX]
+ 1360 00000C1E 50 PUSH EAX
+ 1361 00000C1F 0F B6 42 1C MOVZX EAX,BYTE [28+EDX]
+ 1362 00000C23 50 PUSH EAX
+ 1363 00000C24 89 D0 MOV EAX,EDX
+ 1364 00000C26 83 C0 1C ADD EAX,28
+ 1365 00000C29 50 PUSH EAX
+ 1366 00000C2A E8 FFFFFA31 CALL _tek_setbm5
+ 1367 00000C2F 83 C4 0C ADD ESP,12
+ 1368 00000C32 83 45 80 20 ADD DWORD [-128+EBP],32
+ 1369 00000C36 FF 4D D0 DEC DWORD [-48+EBP]
+ 1370 00000C39 79 DC JNS L268
+ 1371 00000C3B 8B 4D 9C MOV ECX,DWORD [-100+EBP]
+ 1372 00000C3E FF B1 0000041C PUSH DWORD [1052+ECX]
+ 1373 00000C44 6A 00 PUSH 0
+ 1374 00000C46 6A 71 PUSH 113
+ 1375 00000C48 FF 75 98 PUSH DWORD [-104+EBP]
+ 1376 00000C4B 51 PUSH ECX
+ 1377 00000C4C E8 FFFFFAB9 CALL _tek_rdget1
+ 1378 00000C51 83 C4 14 ADD ESP,20
+ 1379 00000C54 3B 45 B0 CMP EAX,DWORD [-80+EBP]
+ 1380 00000C57 0F 84 00000363 JE L213
+ 1381 00000C5D 8B 45 14 MOV EAX,DWORD [20+EBP]
+ 1382 00000C60 FF 45 14 INC DWORD [20+EBP]
+ 1383 00000C63 89 45 94 MOV DWORD [-108+EBP],EAX
+ 1384 00000C66 8B 45 9C MOV EAX,DWORD [-100+EBP]
+ 1385 00000C69 05 0000031C ADD EAX,796
+ 1386 00000C6E 50 PUSH EAX
+ 1387 00000C6F 8B 45 98 MOV EAX,DWORD [-104+EBP]
+ 1388 00000C72 6A 01 PUSH 1
+ 1389 00000C74 05 00002040 ADD EAX,8256
+ 1390 00000C79 FF 75 A4 PUSH DWORD [-92+EBP]
+ 1391 00000C7C 50 PUSH EAX
+ 1392 00000C7D FF 75 9C PUSH DWORD [-100+EBP]
+ 1393 00000C80 E8 FFFFFA85 CALL _tek_rdget1
+ 1394 00000C85 8B 55 94 MOV EDX,DWORD [-108+EBP]
+ 1395 00000C88 83 C4 14 ADD ESP,20
+ 1396 00000C8B 88 02 MOV BYTE [EDX],AL
+ 1397 00000C8D 8B 4D 10 MOV ECX,DWORD [16+EBP]
+ 1398 00000C90 C7 45 BC 00000001 MOV DWORD [-68+EBP],1
+ 1399 00000C97 C7 45 C4 00000000 MOV DWORD [-60+EBP],0
+ 1400 00000C9E C7 45 C0 00000000 MOV DWORD [-64+EBP],0
+ 1401 00000CA5 39 4D BC CMP DWORD [-68+EBP],ECX
+ 1402 00000CA8 0F 8D 0000012D JGE L343
+ 1403 00000CAE L326:
+ 1404 00000CAE 8B 45 BC MOV EAX,DWORD [-68+EBP]
+ 1405 00000CB1 8B 55 9C MOV EDX,DWORD [-100+EBP]
+ 1406 00000CB4 23 45 B8 AND EAX,DWORD [-72+EBP]
+ 1407 00000CB7 8B 4D 98 MOV ECX,DWORD [-104+EBP]
+ 1408 00000CBA 89 45 A8 MOV DWORD [-88+EBP],EAX
+ 1409 00000CBD 31 C0 XOR EAX,EAX
+ 1410 00000CBF 83 7D C0 00 CMP DWORD [-64+EBP],0
+ 1411 00000CC3 0F 9F C0 SETG AL
+ 1412 00000CC6 FF B4 82 0000041C PUSH DWORD [1052+EDX+EAX*4]
+ 1413 00000CCD 6B 45 A8 1C IMUL EAX,DWORD [-88+EBP],28
+ 1414 00000CD1 03 45 C0 ADD EAX,DWORD [-64+EBP]
+ 1415 00000CD4 6A 00 PUSH 0
+ 1416 00000CD6 6A 71 PUSH 113
+ 1417 00000CD8 8D 04 C1 LEA EAX,DWORD [ECX+EAX*8]
+ 1418 00000CDB 50 PUSH EAX
+ 1419 00000CDC 89 45 90 MOV DWORD [-112+EBP],EAX
+ 1420 00000CDF 52 PUSH EDX
+ 1421 00000CE0 E8 FFFFFA25 CALL _tek_rdget1
+ 1422 00000CE5 83 C4 14 ADD ESP,20
+ 1423 00000CE8 3B 45 B0 CMP EAX,DWORD [-80+EBP]
+ 1424 00000CEB 0F 84 00000155 JE L273
+ 1425 00000CF1 8B 45 14 MOV EAX,DWORD [20+EBP]
+ 1426 00000CF4 8A 4D AC MOV CL,BYTE [-84+EBP]
+ 1427 00000CF7 0F B6 50 FF MOVZX EDX,BYTE [-1+EAX]
+ 1428 00000CFB 8B 45 BC MOV EAX,DWORD [-68+EBP]
+ 1429 00000CFE 23 45 B4 AND EAX,DWORD [-76+EBP]
+ 1430 00000D01 D3 FA SAR EDX,CL
+ 1431 00000D03 8A 4D 18 MOV CL,BYTE [24+EBP]
+ 1432 00000D06 D3 E0 SAL EAX,CL
+ 1433 00000D08 09 C2 OR EDX,EAX
+ 1434 00000D0A 8B 4D C0 MOV ECX,DWORD [-64+EBP]
+ 1435 00000D0D 89 D0 MOV EAX,EDX
+ 1436 00000D0F C1 E0 08 SAL EAX,8
+ 1437 00000D12 8B 0C 8D [00000012] MOV ECX,DWORD [_state_table.3+ECX*4]
+ 1438 00000D19 89 45 D0 MOV DWORD [-48+EBP],EAX
+ 1439 00000D1C 89 4D C0 MOV DWORD [-64+EBP],ECX
+ 1440 00000D1F 83 7D C4 00 CMP DWORD [-60+EBP],0
+ 1441 00000D23 0F 84 000000EF JE L349
+ 1442 00000D29 8B 45 9C MOV EAX,DWORD [-100+EBP]
+ 1443 00000D2C 8B 55 14 MOV EDX,DWORD [20+EBP]
+ 1444 00000D2F 05 0000031C ADD EAX,796
+ 1445 00000D34 89 45 8C MOV DWORD [-116+EBP],EAX
+ 1446 00000D37 8B 45 E4 MOV EAX,DWORD [-28+EBP]
+ 1447 00000D3A C7 45 CC 00000001 MOV DWORD [-52+EBP],1
+ 1448 00000D41 C7 45 C8 00000008 MOV DWORD [-56+EBP],8
+ 1449 00000D48 0F B6 04 10 MOVZX EAX,BYTE [EAX+EDX*1]
+ 1450 00000D4C 89 45 C4 MOV DWORD [-60+EBP],EAX
+ 1451 00000D4F L280:
+ 1452 00000D4F 8B 45 D0 MOV EAX,DWORD [-48+EBP]
+ 1453 00000D52 8B 4D 9C MOV ECX,DWORD [-100+EBP]
+ 1454 00000D55 03 45 CC ADD EAX,DWORD [-52+EBP]
+ 1455 00000D58 8B 55 C4 MOV EDX,DWORD [-60+EBP]
+ 1456 00000D5B C1 FA 07 SAR EDX,7
+ 1457 00000D5E 01 C0 ADD EAX,EAX
+ 1458 00000D60 89 55 88 MOV DWORD [-120+EBP],EDX
+ 1459 00000D63 FF B1 00000424 PUSH DWORD [1060+ECX]
+ 1460 00000D69 09 D0 OR EAX,EDX
+ 1461 00000D6B 8B 4D A0 MOV ECX,DWORD [-96+EBP]
+ 1462 00000D6E 6A 00 PUSH 0
+ 1463 00000D70 6A 71 PUSH 113
+ 1464 00000D72 8D 04 81 LEA EAX,DWORD [ECX+EAX*4]
+ 1465 00000D75 50 PUSH EAX
+ 1466 00000D76 FF 75 9C PUSH DWORD [-100+EBP]
+ 1467 00000D79 E8 FFFFF98C CALL _tek_rdget1
+ 1468 00000D7E 8B 55 CC MOV EDX,DWORD [-52+EBP]
+ 1469 00000D81 FF 4D C8 DEC DWORD [-56+EBP]
+ 1470 00000D84 83 C4 14 ADD ESP,20
+ 1471 00000D87 8D 04 50 LEA EAX,DWORD [EAX+EDX*2]
+ 1472 00000D8A 89 45 CC MOV DWORD [-52+EBP],EAX
+ 1473 00000D8D 8B 45 A4 MOV EAX,DWORD [-92+EBP]
+ 1474 00000D90 C1 F8 04 SAR EAX,4
+ 1475 00000D93 85 45 C8 TEST DWORD [-56+EBP],EAX
+ 1476 00000D96 75 04 JNE L283
+ 1477 00000D98 83 45 8C 20 ADD DWORD [-116+EBP],32
+ 1478 00000D9C L283:
+ 1479 00000D9C 8B 4D CC MOV ECX,DWORD [-52+EBP]
+ 1480 00000D9F 31 4D 88 XOR DWORD [-120+EBP],ECX
+ 1481 00000DA2 F7 45 88 00000001 TEST DWORD [-120+EBP],1
+ 1482 00000DA9 74 06 JE L284
+ 1483 00000DAB 83 7D C8 00 CMP DWORD [-56+EBP],0
+ 1484 00000DAF 75 34 JNE L344
+ 1485 00000DB1 L284:
+ 1486 00000DB1 D1 65 C4 SAL DWORD [-60+EBP],1
+ 1487 00000DB4 83 7D C8 00 CMP DWORD [-56+EBP],0
+ 1488 00000DB8 75 95 JNE L280
+ 1489 00000DBA L281:
+ 1490 00000DBA 8B 55 14 MOV EDX,DWORD [20+EBP]
+ 1491 00000DBD 8A 45 CC MOV AL,BYTE [-52+EBP]
+ 1492 00000DC0 88 02 MOV BYTE [EDX],AL
+ 1493 00000DC2 C7 45 C4 00000000 MOV DWORD [-60+EBP],0
+ 1494 00000DC9 L279:
+ 1495 00000DC9 FF 45 BC INC DWORD [-68+EBP]
+ 1496 00000DCC FF 45 14 INC DWORD [20+EBP]
+ 1497 00000DCF L270:
+ 1498 00000DCF 8B 4D 10 MOV ECX,DWORD [16+EBP]
+ 1499 00000DD2 39 4D BC CMP DWORD [-68+EBP],ECX
+ 1500 00000DD5 0F 8C FFFFFED3 JL L326
+ 1501 00000DDB L343:
+ 1502 00000DDB 31 C0 XOR EAX,EAX
+ 1503 00000DDD L204:
+ 1504 00000DDD 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 1505 00000DE0 5B POP EBX
+ 1506 00000DE1 5E POP ESI
+ 1507 00000DE2 5F POP EDI
+ 1508 00000DE3 5D POP EBP
+ 1509 00000DE4 C3 RET
+ 1510 00000DE5 L344:
+ 1511 00000DE5 8B 45 A4 MOV EAX,DWORD [-92+EBP]
+ 1512 00000DE8 8B 4D 98 MOV ECX,DWORD [-104+EBP]
+ 1513 00000DEB 83 E0 70 AND EAX,112
+ 1514 00000DEE 09 45 C8 OR DWORD [-56+EBP],EAX
+ 1515 00000DF1 8B 45 D0 MOV EAX,DWORD [-48+EBP]
+ 1516 00000DF4 03 45 CC ADD EAX,DWORD [-52+EBP]
+ 1517 00000DF7 FF 75 8C PUSH DWORD [-116+EBP]
+ 1518 00000DFA FF 75 CC PUSH DWORD [-52+EBP]
+ 1519 00000DFD FF 75 C8 PUSH DWORD [-56+EBP]
+ 1520 00000E00 8D 84 81 0000203C LEA EAX,DWORD [8252+ECX+EAX*4]
+ 1521 00000E07 50 PUSH EAX
+ 1522 00000E08 FF 75 9C PUSH DWORD [-100+EBP]
+ 1523 00000E0B E8 FFFFF8FA CALL _tek_rdget1
+ 1524 00000E10 83 C4 14 ADD ESP,20
+ 1525 00000E13 89 45 CC MOV DWORD [-52+EBP],EAX
+ 1526 00000E16 EB A2 JMP L281
+ 1527 00000E18 L349:
+ 1528 00000E18 C1 E2 0A SAL EDX,10
+ 1529 00000E1B 8B 45 9C MOV EAX,DWORD [-100+EBP]
+ 1530 00000E1E 05 0000031C ADD EAX,796
+ 1531 00000E23 8B 4D 98 MOV ECX,DWORD [-104+EBP]
+ 1532 00000E26 50 PUSH EAX
+ 1533 00000E27 6A 01 PUSH 1
+ 1534 00000E29 8D 84 0A 00002040 LEA EAX,DWORD [8256+EDX+ECX*1]
+ 1535 00000E30 FF 75 A4 PUSH DWORD [-92+EBP]
+ 1536 00000E33 50 PUSH EAX
+ 1537 00000E34 FF 75 9C PUSH DWORD [-100+EBP]
+ 1538 00000E37 E8 FFFFF8CE CALL _tek_rdget1
+ 1539 00000E3C 8B 55 14 MOV EDX,DWORD [20+EBP]
+ 1540 00000E3F 83 C4 14 ADD ESP,20
+ 1541 00000E42 88 02 MOV BYTE [EDX],AL
+ 1542 00000E44 EB 83 JMP L279
+ 1543 00000E46 L273:
+ 1544 00000E46 8B 4D 9C MOV ECX,DWORD [-100+EBP]
+ 1545 00000E49 8B 45 C0 MOV EAX,DWORD [-64+EBP]
+ 1546 00000E4C C1 E0 04 SAL EAX,4
+ 1547 00000E4F FF B1 00000450 PUSH DWORD [1104+ECX]
+ 1548 00000E55 03 45 98 ADD EAX,DWORD [-104+EBP]
+ 1549 00000E58 6A 00 PUSH 0
+ 1550 00000E5A 6A 71 PUSH 113
+ 1551 00000E5C 89 45 84 MOV DWORD [-124+EBP],EAX
+ 1552 00000E5F 05 00000E00 ADD EAX,3584
+ 1553 00000E64 50 PUSH EAX
+ 1554 00000E65 51 PUSH ECX
+ 1555 00000E66 83 4D C4 01 OR DWORD [-60+EBP],1
+ 1556 00000E6A E8 FFFFF89B CALL _tek_rdget1
+ 1557 00000E6F 83 C4 14 ADD ESP,20
+ 1558 00000E72 3B 45 B0 CMP EAX,DWORD [-80+EBP]
+ 1559 00000E75 0F 84 000001D2 JE L287
+ 1560 00000E7B FF 75 B0 PUSH DWORD [-80+EBP]
+ 1561 00000E7E 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 1562 00000E81 FF 75 A8 PUSH DWORD [-88+EBP]
+ 1563 00000E84 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 1564 00000E87 6A 00 PUSH 0
+ 1565 00000E89 8B 45 E8 MOV EAX,DWORD [-24+EBP]
+ 1566 00000E8C 89 45 EC MOV DWORD [-20+EBP],EAX
+ 1567 00000E8F 8B 45 E4 MOV EAX,DWORD [-28+EBP]
+ 1568 00000E92 FF 75 9C PUSH DWORD [-100+EBP]
+ 1569 00000E95 89 45 E8 MOV DWORD [-24+EBP],EAX
+ 1570 00000E98 E8 FFFFFAA4 CALL _tek_getlen5
+ 1571 00000E9D 89 45 D0 MOV DWORD [-48+EBP],EAX
+ 1572 00000EA0 89 45 CC MOV DWORD [-52+EBP],EAX
+ 1573 00000EA3 83 C4 10 ADD ESP,16
+ 1574 00000EA6 31 C0 XOR EAX,EAX
+ 1575 00000EA8 83 7D C0 06 CMP DWORD [-64+EBP],6
+ 1576 00000EAC 0F 9F C0 SETG AL
+ 1577 00000EAF 83 7D D0 03 CMP DWORD [-48+EBP],3
+ 1578 00000EB3 8D 44 40 07 LEA EAX,DWORD [7+EAX+EAX*2]
+ 1579 00000EB7 89 45 C0 MOV DWORD [-64+EBP],EAX
+ 1580 00000EBA 7E 07 JLE L290
+ 1581 00000EBC C7 45 CC 00000003 MOV DWORD [-52+EBP],3
+ 1582 00000EC3 L290:
+ 1583 00000EC3 31 C0 XOR EAX,EAX
+ 1584 00000EC5 8B 55 9C MOV EDX,DWORD [-100+EBP]
+ 1585 00000EC8 83 7D CC 03 CMP DWORD [-52+EBP],3
+ 1586 00000ECC 0F 94 C0 SETE AL
+ 1587 00000ECF C1 65 CC 08 SAL DWORD [-52+EBP],8
+ 1588 00000ED3 FF B4 82 0000043C PUSH DWORD [1084+EDX+EAX*4]
+ 1589 00000EDA 8B 4D 98 MOV ECX,DWORD [-104+EBP]
+ 1590 00000EDD 8B 55 CC MOV EDX,DWORD [-52+EBP]
+ 1591 00000EE0 6A 01 PUSH 1
+ 1592 00000EE2 6A 76 PUSH 118
+ 1593 00000EE4 8D 84 0A 000016D0 LEA EAX,DWORD [5840+EDX+ECX*1]
+ 1594 00000EEB 50 PUSH EAX
+ 1595 00000EEC FF 75 9C PUSH DWORD [-100+EBP]
+ 1596 00000EEF E8 FFFFF816 CALL _tek_rdget1
+ 1597 00000EF4 89 C1 MOV ECX,EAX
+ 1598 00000EF6 83 C4 14 ADD ESP,20
+ 1599 00000EF9 83 E1 3F AND ECX,63
+ 1600 00000EFC 89 4D CC MOV DWORD [-52+EBP],ECX
+ 1601 00000EFF 89 4D E4 MOV DWORD [-28+EBP],ECX
+ 1602 00000F02 83 F9 03 CMP ECX,3
+ 1603 00000F05 7E 77 JLE L295
+ 1604 00000F07 89 CA MOV EDX,ECX
+ 1605 00000F09 89 C3 MOV EBX,EAX
+ 1606 00000F0B D1 FA SAR EDX,1
+ 1607 00000F0D 83 E3 01 AND EBX,1
+ 1608 00000F10 89 D8 MOV EAX,EBX
+ 1609 00000F12 8D 4A FF LEA ECX,DWORD [-1+EDX]
+ 1610 00000F15 83 C8 02 OR EAX,2
+ 1611 00000F18 D3 E0 SAL EAX,CL
+ 1612 00000F1A 89 4D C8 MOV DWORD [-56+EBP],ECX
+ 1613 00000F1D 89 45 E4 MOV DWORD [-28+EBP],EAX
+ 1614 00000F20 83 7D CC 0D CMP DWORD [-52+EBP],13
+ 1615 00000F24 0F 8E 000000E6 JLE L350
+ 1616 00000F2A 83 7D B0 00 CMP DWORD [-80+EBP],0
+ 1617 00000F2E 0F 85 00000096 JNE L302
+ 1618 00000F34 83 EA 07 SUB EDX,7
+ 1619 00000F37 89 55 C8 MOV DWORD [-56+EBP],EDX
+ 1620 00000F3A 74 14 JE L303
+ 1621 00000F3C 6A FF PUSH -1
+ 1622 00000F3E 52 PUSH EDX
+ 1623 00000F3F FF 75 9C PUSH DWORD [-100+EBP]
+ 1624 00000F42 E8 FFFFF761 CALL _tek_rdget0
+ 1625 00000F47 C1 E0 06 SAL EAX,6
+ 1626 00000F4A 83 C4 0C ADD ESP,12
+ 1627 00000F4D 09 45 E4 OR DWORD [-28+EBP],EAX
+ 1628 00000F50 L303:
+ 1629 00000F50 8B 45 9C MOV EAX,DWORD [-100+EBP]
+ 1630 00000F53 6A 06 PUSH 6
+ 1631 00000F55 FF B0 0000044C PUSH DWORD [1100+EAX]
+ 1632 00000F5B 6A 01 PUSH 1
+ 1633 00000F5D 8B 45 98 MOV EAX,DWORD [-104+EBP]
+ 1634 00000F60 6A 76 PUSH 118
+ 1635 00000F62 05 00001AD0 ADD EAX,6864
+ 1636 00000F67 50 PUSH EAX
+ 1637 00000F68 L348:
+ 1638 00000F68 FF 75 9C PUSH DWORD [-100+EBP]
+ 1639 00000F6B E8 FFFFF79A CALL _tek_rdget1
+ 1640 00000F70 83 C4 14 ADD ESP,20
+ 1641 00000F73 50 PUSH EAX
+ 1642 00000F74 E8 FFFFF9AA CALL _tek_revbit
+ 1643 00000F79 59 POP ECX
+ 1644 00000F7A 09 45 E4 OR DWORD [-28+EBP],EAX
+ 1645 00000F7D 5B POP EBX
+ 1646 00000F7E L295:
+ 1647 00000F7E F7 55 E4 NOT DWORD [-28+EBP]
+ 1648 00000F81 L310:
+ 1649 00000F81 8B 55 BC MOV EDX,DWORD [-68+EBP]
+ 1650 00000F84 83 45 D0 02 ADD DWORD [-48+EBP],2
+ 1651 00000F88 03 55 E4 ADD EDX,DWORD [-28+EBP]
+ 1652 00000F8B 78 33 JS L213
+ 1653 00000F8D 8B 45 BC MOV EAX,DWORD [-68+EBP]
+ 1654 00000F90 03 45 D0 ADD EAX,DWORD [-48+EBP]
+ 1655 00000F93 3B 45 10 CMP EAX,DWORD [16+EBP]
+ 1656 00000F96 7E 09 JLE L321
+ 1657 00000F98 8B 4D 10 MOV ECX,DWORD [16+EBP]
+ 1658 00000F9B 2B 4D BC SUB ECX,DWORD [-68+EBP]
+ 1659 00000F9E 89 4D D0 MOV DWORD [-48+EBP],ECX
+ 1660 00000FA1 L321:
+ 1661 00000FA1 8B 45 D0 MOV EAX,DWORD [-48+EBP]
+ 1662 00000FA4 01 45 BC ADD DWORD [-68+EBP],EAX
+ 1663 00000FA7 L322:
+ 1664 00000FA7 8B 55 14 MOV EDX,DWORD [20+EBP]
+ 1665 00000FAA 8B 45 E4 MOV EAX,DWORD [-28+EBP]
+ 1666 00000FAD 8A 04 10 MOV AL,BYTE [EAX+EDX*1]
+ 1667 00000FB0 88 02 MOV BYTE [EDX],AL
+ 1668 00000FB2 42 INC EDX
+ 1669 00000FB3 FF 4D D0 DEC DWORD [-48+EBP]
+ 1670 00000FB6 89 55 14 MOV DWORD [20+EBP],EDX
+ 1671 00000FB9 75 EC JNE L322
+ 1672 00000FBB E9 FFFFFE0F JMP L270
+ 1673 00000FC0 L213:
+ 1674 00000FC0 B8 00000001 MOV EAX,1
+ 1675 00000FC5 E9 FFFFFE13 JMP L204
+ 1676 00000FCA L302:
+ 1677 00000FCA 6A FF PUSH -1
+ 1678 00000FCC 8D 42 FB LEA EAX,DWORD [-5+EDX]
+ 1679 00000FCF 50 PUSH EAX
+ 1680 00000FD0 FF 75 9C PUSH DWORD [-100+EBP]
+ 1681 00000FD3 E8 FFFFF6D0 CALL _tek_rdget0
+ 1682 00000FD8 C1 E0 04 SAL EAX,4
+ 1683 00000FDB 8B 55 9C MOV EDX,DWORD [-100+EBP]
+ 1684 00000FDE 6A 04 PUSH 4
+ 1685 00000FE0 09 45 E4 OR DWORD [-28+EBP],EAX
+ 1686 00000FE3 8B 45 98 MOV EAX,DWORD [-104+EBP]
+ 1687 00000FE6 05 00001AD0 ADD EAX,6864
+ 1688 00000FEB FF B2 0000044C PUSH DWORD [1100+EDX]
+ 1689 00000FF1 6A 01 PUSH 1
+ 1690 00000FF3 6A 74 PUSH 116
+ 1691 00000FF5 50 PUSH EAX
+ 1692 00000FF6 52 PUSH EDX
+ 1693 00000FF7 E8 FFFFF70E CALL _tek_rdget1
+ 1694 00000FFC 83 C4 14 ADD ESP,20
+ 1695 00000FFF 50 PUSH EAX
+ 1696 00001000 E8 FFFFF91E CALL _tek_revbit
+ 1697 00001005 09 45 E4 OR DWORD [-28+EBP],EAX
+ 1698 00001008 83 C4 14 ADD ESP,20
+ 1699 0000100B E9 FFFFFF6E JMP L295
+ 1700 00001010 L350:
+ 1701 00001010 31 C0 XOR EAX,EAX
+ 1702 00001012 8B 55 9C MOV EDX,DWORD [-100+EBP]
+ 1703 00001015 83 F9 04 CMP ECX,4
+ 1704 00001018 51 PUSH ECX
+ 1705 00001019 0F 9D C0 SETGE AL
+ 1706 0000101C 69 DB 000000F8 IMUL EBX,EBX,248
+ 1707 00001022 FF B4 82 00000444 PUSH DWORD [1092+EDX+EAX*4]
+ 1708 00001029 89 C8 MOV EAX,ECX
+ 1709 0000102B 6A 01 PUSH 1
+ 1710 0000102D 83 C8 70 OR EAX,112
+ 1711 00001030 8B 55 98 MOV EDX,DWORD [-104+EBP]
+ 1712 00001033 50 PUSH EAX
+ 1713 00001034 8A 4D C8 MOV CL,BYTE [-56+EBP]
+ 1714 00001037 B8 00000004 MOV EAX,4
+ 1715 0000103C 01 DA ADD EDX,EBX
+ 1716 0000103E D3 E0 SAL EAX,CL
+ 1717 00001040 8D 94 10 00001BC8 LEA EDX,DWORD [7112+EAX+EDX*1]
+ 1718 00001047 52 PUSH EDX
+ 1719 00001048 E9 FFFFFF1B JMP L348
+ 1720 0000104D L287:
+ 1721 0000104D 8B 4D 9C MOV ECX,DWORD [-100+EBP]
+ 1722 00001050 8B 45 84 MOV EAX,DWORD [-124+EBP]
+ 1723 00001053 05 00000E04 ADD EAX,3588
+ 1724 00001058 FF B1 00000450 PUSH DWORD [1104+ECX]
+ 1725 0000105E 6A 00 PUSH 0
+ 1726 00001060 6A 71 PUSH 113
+ 1727 00001062 50 PUSH EAX
+ 1728 00001063 51 PUSH ECX
+ 1729 00001064 E8 FFFFF6A1 CALL _tek_rdget1
+ 1730 00001069 83 C4 14 ADD ESP,20
+ 1731 0000106C 3B 45 B0 CMP EAX,DWORD [-80+EBP]
+ 1732 0000106F 74 64 JE L306
+ 1733 00001071 8B 45 9C MOV EAX,DWORD [-100+EBP]
+ 1734 00001074 C7 45 D0 FFFFFFFF MOV DWORD [-48+EBP],-1
+ 1735 0000107B FF B0 00000450 PUSH DWORD [1104+EAX]
+ 1736 00001081 6A 00 PUSH 0
+ 1737 00001083 8B 45 90 MOV EAX,DWORD [-112+EBP]
+ 1738 00001086 6A 71 PUSH 113
+ 1739 00001088 83 C0 04 ADD EAX,4
+ 1740 0000108B 50 PUSH EAX
+ 1741 0000108C FF 75 9C PUSH DWORD [-100+EBP]
+ 1742 0000108F E8 FFFFF676 CALL _tek_rdget1
+ 1743 00001094 83 C4 14 ADD ESP,20
+ 1744 00001097 85 C0 TEST EAX,EAX
+ 1745 00001099 75 15 JNE L311
+ 1746 0000109B 31 C0 XOR EAX,EAX
+ 1747 0000109D 83 7D C0 06 CMP DWORD [-64+EBP],6
+ 1748 000010A1 0F 9F C0 SETG AL
+ 1749 000010A4 8D 44 00 09 LEA EAX,DWORD [9+EAX+EAX*1]
+ 1750 000010A8 L346:
+ 1751 000010A8 89 45 C0 MOV DWORD [-64+EBP],EAX
+ 1752 000010AB E9 FFFFFED1 JMP L310
+ 1753 000010B0 L311:
+ 1754 000010B0 FF 75 B0 PUSH DWORD [-80+EBP]
+ 1755 000010B3 FF 75 A8 PUSH DWORD [-88+EBP]
+ 1756 000010B6 6A 01 PUSH 1
+ 1757 000010B8 FF 75 9C PUSH DWORD [-100+EBP]
+ 1758 000010BB E8 FFFFF881 CALL _tek_getlen5
+ 1759 000010C0 89 45 D0 MOV DWORD [-48+EBP],EAX
+ 1760 000010C3 83 C4 10 ADD ESP,16
+ 1761 000010C6 31 C0 XOR EAX,EAX
+ 1762 000010C8 83 7D C0 06 CMP DWORD [-64+EBP],6
+ 1763 000010CC 0F 9F C0 SETG AL
+ 1764 000010CF 8D 44 40 08 LEA EAX,DWORD [8+EAX+EAX*2]
+ 1765 000010D3 EB D3 JMP L346
+ 1766 000010D5 L306:
+ 1767 000010D5 8B 55 9C MOV EDX,DWORD [-100+EBP]
+ 1768 000010D8 8B 45 84 MOV EAX,DWORD [-124+EBP]
+ 1769 000010DB 05 00000E08 ADD EAX,3592
+ 1770 000010E0 FF B2 00000450 PUSH DWORD [1104+EDX]
+ 1771 000010E6 6A 00 PUSH 0
+ 1772 000010E8 6A 71 PUSH 113
+ 1773 000010EA 50 PUSH EAX
+ 1774 000010EB 52 PUSH EDX
+ 1775 000010EC E8 FFFFF619 CALL _tek_rdget1
+ 1776 000010F1 83 C4 14 ADD ESP,20
+ 1777 000010F4 3B 45 B0 CMP EAX,DWORD [-80+EBP]
+ 1778 000010F7 74 14 JE L312
+ 1779 000010F9 8B 4D E8 MOV ECX,DWORD [-24+EBP]
+ 1780 000010FC 89 4D D0 MOV DWORD [-48+EBP],ECX
+ 1781 000010FF L313:
+ 1782 000010FF 8B 45 E4 MOV EAX,DWORD [-28+EBP]
+ 1783 00001102 89 45 E8 MOV DWORD [-24+EBP],EAX
+ 1784 00001105 8B 45 D0 MOV EAX,DWORD [-48+EBP]
+ 1785 00001108 89 45 E4 MOV DWORD [-28+EBP],EAX
+ 1786 0000110B EB A3 JMP L311
+ 1787 0000110D L312:
+ 1788 0000110D 8B 45 9C MOV EAX,DWORD [-100+EBP]
+ 1789 00001110 FF B0 00000450 PUSH DWORD [1104+EAX]
+ 1790 00001116 6A 00 PUSH 0
+ 1791 00001118 8B 45 84 MOV EAX,DWORD [-124+EBP]
+ 1792 0000111B 6A 71 PUSH 113
+ 1793 0000111D 05 00000E0C ADD EAX,3596
+ 1794 00001122 50 PUSH EAX
+ 1795 00001123 FF 75 9C PUSH DWORD [-100+EBP]
+ 1796 00001126 E8 FFFFF5DF CALL _tek_rdget1
+ 1797 0000112B 83 C4 14 ADD ESP,20
+ 1798 0000112E 3B 45 B0 CMP EAX,DWORD [-80+EBP]
+ 1799 00001131 74 0E JE L314
+ 1800 00001133 8B 55 EC MOV EDX,DWORD [-20+EBP]
+ 1801 00001136 89 55 D0 MOV DWORD [-48+EBP],EDX
+ 1802 00001139 L315:
+ 1803 00001139 8B 45 E8 MOV EAX,DWORD [-24+EBP]
+ 1804 0000113C 89 45 EC MOV DWORD [-20+EBP],EAX
+ 1805 0000113F EB BE JMP L313
+ 1806 00001141 L314:
+ 1807 00001141 83 7D B0 00 CMP DWORD [-80+EBP],0
+ 1808 00001145 74 0E JE L351
+ 1809 00001147 L316:
+ 1810 00001147 8B 4D F0 MOV ECX,DWORD [-16+EBP]
+ 1811 0000114A 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 1812 0000114D 89 4D D0 MOV DWORD [-48+EBP],ECX
+ 1813 00001150 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 1814 00001153 EB E4 JMP L315
+ 1815 00001155 L351:
+ 1816 00001155 8B 45 9C MOV EAX,DWORD [-100+EBP]
+ 1817 00001158 05 000002DC ADD EAX,732
+ 1818 0000115D 50 PUSH EAX
+ 1819 0000115E 8B 45 98 MOV EAX,DWORD [-104+EBP]
+ 1820 00001161 6A 00 PUSH 0
+ 1821 00001163 05 00001EB8 ADD EAX,7864
+ 1822 00001168 6A 71 PUSH 113
+ 1823 0000116A 50 PUSH EAX
+ 1824 0000116B FF 75 9C PUSH DWORD [-100+EBP]
+ 1825 0000116E E8 FFFFF597 CALL _tek_rdget1
+ 1826 00001173 83 C4 14 ADD ESP,20
+ 1827 00001176 85 C0 TEST EAX,EAX
+ 1828 00001178 75 CD JNE L316
+ 1829 0000117A E9 FFFFFE41 JMP L213
+ 1830 0000117F L226:
+ 1831 0000117F 8B 45 9C MOV EAX,DWORD [-100+EBP]
+ 1832 00001182 C6 40 3C 05 MOV BYTE [60+EAX],5
+ 1833 00001186 C6 40 3D 03 MOV BYTE [61+EAX],3
+ 1834 0000118A C6 40 5C 09 MOV BYTE [92+EAX],9
+ 1835 0000118E C6 40 5D 02 MOV BYTE [93+EAX],2
+ 1836 00001192 C7 40 0C FFFFFFFF MOV DWORD [12+EAX],-1
+ 1837 00001199 F7 45 24 00000040 TEST DWORD [36+EBP],64
+ 1838 000011A0 74 15 JE L238
+ 1839 000011A2 C6 40 7C 00 MOV BYTE [124+EAX],0
+ 1840 000011A6 C6 40 7D 01 MOV BYTE [125+EAX],1
+ 1841 000011AA 8B 55 98 MOV EDX,DWORD [-104+EBP]
+ 1842 000011AD C7 82 0000203C 0000FFFF MOV DWORD [8252+EDX],65535
+ 1843 000011B7 L238:
+ 1844 000011B7 8B 4D 9C MOV ECX,DWORD [-100+EBP]
+ 1845 000011BA C6 81 000002DC 00 MOV BYTE [732+ECX],0
+ 1846 000011C1 C6 81 000002DD 01 MOV BYTE [733+ECX],1
+ 1847 000011C8 8B 45 98 MOV EAX,DWORD [-104+EBP]
+ 1848 000011CB 83 7D 24 FE CMP DWORD [36+EBP],-2
+ 1849 000011CF C7 80 00001EB8 0000FFFF MOV DWORD [7864+EAX],65535
+ 1850 000011D9 0F 84 000000A7 JE L352
+ 1851 000011DF C7 45 D0 00000000 MOV DWORD [-48+EBP],0
+ 1852 000011E6 L250:
+ 1853 000011E6 8B 4D D0 MOV ECX,DWORD [-48+EBP]
+ 1854 000011E9 8A 81 [00000050] MOV AL,BYTE [_pt2.5+ECX]
+ 1855 000011EF 88 44 0D D4 MOV BYTE [-44+EBP+ECX*1],AL
+ 1856 000011F3 41 INC ECX
+ 1857 000011F4 89 4D D0 MOV DWORD [-48+EBP],ECX
+ 1858 000011F7 83 F9 0D CMP ECX,13
+ 1859 000011FA 7E EA JLE L250
+ 1860 000011FC 8B 4D 24 MOV ECX,DWORD [36+EBP]
+ 1861 000011FF B0 09 MOV AL,9
+ 1862 00001201 C7 45 A4 00000007 MOV DWORD [-92+EBP],7
+ 1863 00001208 83 E1 03 AND ECX,3
+ 1864 0000120B D3 7D A4 SAR DWORD [-92+EBP],CL
+ 1865 0000120E C1 65 A4 04 SAL DWORD [-92+EBP],4
+ 1866 00001212 83 4D A4 08 OR DWORD [-92+EBP],8
+ 1867 00001216 F7 45 24 00000004 TEST DWORD [36+EBP],4
+ 1868 0000121D 0F 94 C2 SETE DL
+ 1869 00001220 28 D0 SUB AL,DL
+ 1870 00001222 F7 45 24 00000008 TEST DWORD [36+EBP],8
+ 1871 00001229 88 45 D5 MOV BYTE [-43+EBP],AL
+ 1872 0000122C B0 0D MOV AL,13
+ 1873 0000122E 0F 94 C2 SETE DL
+ 1874 00001231 28 D0 SUB AL,DL
+ 1875 00001233 F7 45 24 00000010 TEST DWORD [36+EBP],16
+ 1876 0000123A 88 45 D9 MOV BYTE [-39+EBP],AL
+ 1877 0000123D B0 11 MOV AL,17
+ 1878 0000123F 0F 94 C2 SETE DL
+ 1879 00001242 28 D0 SUB AL,DL
+ 1880 00001244 F7 45 24 00000020 TEST DWORD [36+EBP],32
+ 1881 0000124B 88 45 DD MOV BYTE [-35+EBP],AL
+ 1882 0000124E B0 13 MOV AL,19
+ 1883 00001250 0F 94 C2 SETE DL
+ 1884 00001253 28 D0 SUB AL,DL
+ 1885 00001255 88 45 DF MOV BYTE [-33+EBP],AL
+ 1886 00001258 L245:
+ 1887 00001258 C7 45 D0 00000000 MOV DWORD [-48+EBP],0
+ 1888 0000125F L263:
+ 1889 0000125F 8B 55 D0 MOV EDX,DWORD [-48+EBP]
+ 1890 00001262 8B 4D 9C MOV ECX,DWORD [-100+EBP]
+ 1891 00001265 0F B6 44 15 D4 MOVZX EAX,BYTE [-44+EBP+EDX*1]
+ 1892 0000126A C1 E0 05 SAL EAX,5
+ 1893 0000126D 8D 44 08 1C LEA EAX,DWORD [28+EAX+ECX*1]
+ 1894 00001271 89 84 91 0000041C MOV DWORD [1052+ECX+EDX*4],EAX
+ 1895 00001278 42 INC EDX
+ 1896 00001279 89 55 D0 MOV DWORD [-48+EBP],EDX
+ 1897 0000127C 83 FA 0D CMP EDX,13
+ 1898 0000127F 7E DE JLE L263
+ 1899 00001281 E9 FFFFF984 JMP L237
+ 1900 00001286 L352:
+ 1901 00001286 C7 81 000002F0 00000000 MOV DWORD [752+ECX],0
+ 1902 00001290 C7 45 D0 00000000 MOV DWORD [-48+EBP],0
+ 1903 00001297 L244:
+ 1904 00001297 8B 55 D0 MOV EDX,DWORD [-48+EBP]
+ 1905 0000129A 8A 82 [00000042] MOV AL,BYTE [_pt1.4+EDX]
+ 1906 000012A0 88 44 15 D4 MOV BYTE [-44+EBP+EDX*1],AL
+ 1907 000012A4 42 INC EDX
+ 1908 000012A5 89 55 D0 MOV DWORD [-48+EBP],EDX
+ 1909 000012A8 83 FA 0D CMP EDX,13
+ 1910 000012AB 7E EA JLE L244
+ 1911 000012AD EB A9 JMP L245
+ 1912 000012AF L211:
+ 1913 000012AF 83 C5 0C ADD EBP,12
+ 1914 000012B2 B8 00000001 MOV EAX,1
+ 1915 000012B7 E9 FFFFF870 JMP L212
+ 1916 000012BC _tek_decode5:
+ 1917 000012BC 55 PUSH EBP
+ 1918 000012BD 89 E5 MOV EBP,ESP
+ 1919 000012BF 57 PUSH EDI
+ 1920 000012C0 56 PUSH ESI
+ 1921 000012C1 31 FF XOR EDI,EDI
+ 1922 000012C3 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 1923 000012C6 53 PUSH EBX
+ 1924 000012C7 89 C3 MOV EBX,EAX
+ 1925 000012C9 83 C0 10 ADD EAX,16
+ 1926 000012CC 89 45 0C MOV DWORD [12+EBP],EAX
+ 1927 000012CF 03 5D 08 ADD EBX,DWORD [8+EBP]
+ 1928 000012D2 8D 45 0C LEA EAX,DWORD [12+EBP]
+ 1929 000012D5 50 PUSH EAX
+ 1930 000012D6 E8 FFFFED25 CALL _tek_getnum_s7s
+ 1931 000012DB 59 POP ECX
+ 1932 000012DC 89 C6 MOV ESI,EAX
+ 1933 000012DE 85 C0 TEST EAX,EAX
+ 1934 000012E0 7E 59 JLE L354
+ 1935 000012E2 8D 45 0C LEA EAX,DWORD [12+EBP]
+ 1936 000012E5 50 PUSH EAX
+ 1937 000012E6 E8 FFFFED15 CALL _tek_getnum_s7s
+ 1938 000012EB 5A POP EDX
+ 1939 000012EC A9 00000001 TEST EAX,1
+ 1940 000012F1 74 60 JE L363
+ 1941 000012F3 89 C1 MOV ECX,EAX
+ 1942 000012F5 BA 00000001 MOV EDX,1
+ 1943 000012FA D1 F9 SAR ECX,1
+ 1944 000012FC 83 E1 0F AND ECX,15
+ 1945 000012FF 83 C1 08 ADD ECX,8
+ 1946 00001302 D3 E2 SAL EDX,CL
+ 1947 00001304 B9 00000001 MOV ECX,1
+ 1948 00001309 A9 00000020 TEST EAX,32
+ 1949 0000130E 75 2D JNE L353
+ 1950 00001310 81 FA 00000100 CMP EDX,256
+ 1951 00001316 74 0E JE L361
+ 1952 00001318 B9 00000001 MOV ECX,1
+ 1953 0000131D 39 D6 CMP ESI,EDX
+ 1954 0000131F 7F 1C JG L353
+ 1955 00001321 83 E0 40 AND EAX,64
+ 1956 00001324 75 21 JNE L364
+ 1957 00001326 L361:
+ 1958 00001326 FF 75 10 PUSH DWORD [16+EBP]
+ 1959 00001329 56 PUSH ESI
+ 1960 0000132A 2B 5D 0C SUB EBX,DWORD [12+EBP]
+ 1961 0000132D FF 75 0C PUSH DWORD [12+EBP]
+ 1962 00001330 53 PUSH EBX
+ 1963 00001331 L362:
+ 1964 00001331 E8 FFFFF203 CALL _tek_lzrestore_tek5
+ 1965 00001336 83 C4 10 ADD ESP,16
+ 1966 00001339 89 C7 MOV EDI,EAX
+ 1967 0000133B L354:
+ 1968 0000133B 89 F9 MOV ECX,EDI
+ 1969 0000133D L353:
+ 1970 0000133D 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 1971 00001340 89 C8 MOV EAX,ECX
+ 1972 00001342 5B POP EBX
+ 1973 00001343 5E POP ESI
+ 1974 00001344 5F POP EDI
+ 1975 00001345 5D POP EBP
+ 1976 00001346 C3 RET
+ 1977 00001347 L364:
+ 1978 00001347 8D 45 0C LEA EAX,DWORD [12+EBP]
+ 1979 0000134A 50 PUSH EAX
+ 1980 0000134B E8 FFFFECB0 CALL _tek_getnum_s7s
+ 1981 00001350 5F POP EDI
+ 1982 00001351 EB D3 JMP L361
+ 1983 00001353 L363:
+ 1984 00001353 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 1985 00001356 FF 75 10 PUSH DWORD [16+EBP]
+ 1986 00001359 29 C3 SUB EBX,EAX
+ 1987 0000135B 56 PUSH ESI
+ 1988 0000135C 8D 50 FF LEA EDX,DWORD [-1+EAX]
+ 1989 0000135F 52 PUSH EDX
+ 1990 00001360 8D 43 01 LEA EAX,DWORD [1+EBX]
+ 1991 00001363 50 PUSH EAX
+ 1992 00001364 EB CB JMP L362
--- /dev/null
+[FORMAT "WCOFF"]
+[INSTRSET "i486p"]
+[OPTIMIZE 1]
+[OPTION 1]
+[BITS 32]
+ EXTERN _memman_alloc_4k
+ EXTERN _memman_free_4k
+[FILE "tek.c"]
+[SECTION .text]
+_tek_getnum_s7s:
+ PUSH EBP
+ XOR ECX,ECX
+ MOV EBP,ESP
+ PUSH EBX
+ MOV EBX,DWORD [8+EBP]
+ MOV EDX,DWORD [EBX]
+L2:
+ SAL ECX,7
+ MOVZX EAX,BYTE [EDX]
+ OR ECX,EAX
+ INC EDX
+ TEST ECX,1
+ JE L2
+ SHR ECX,1
+ MOV DWORD [EBX],EDX
+ POP EBX
+ MOV EAX,ECX
+ POP EBP
+ RET
+[SECTION .data]
+_header.0:
+ DB -1
+ DB -1
+ DB -1
+ DB 1
+ DB 0
+ DB 0
+ DB 0
+ DB 79
+ DB 83
+ DB 65
+ DB 83
+ DB 75
+ DB 67
+ DB 77
+ DB 80
+[SECTION .text]
+ GLOBAL _tek_getsize
+_tek_getsize:
+ PUSH EBP
+ MOV EBP,ESP
+ PUSH EDI
+ PUSH ESI
+ MOV EDI,_header.0
+ PUSH EBX
+ OR EBX,-1
+ PUSH EDX
+ MOV EAX,DWORD [8+EBP]
+ MOV DWORD [-16+EBP],EAX
+ MOV ESI,EAX
+ CLD
+ MOV EAX,15
+ INC ESI
+ MOV ECX,EAX
+ REPE
+ CMPSB
+ JNE L7
+ MOV EDX,DWORD [-16+EBP]
+ MOV AL,BYTE [EDX]
+ CMP AL,-125
+ JE L8
+ CMP AL,-123
+ JE L8
+ CMP AL,-119
+ JE L8
+L7:
+ LEA ESP,DWORD [-12+EBP]
+ MOV EAX,EBX
+ POP EBX
+ POP ESI
+ POP EDI
+ POP EBP
+ RET
+L8:
+ MOV EAX,DWORD [-16+EBP]
+ ADD EAX,16
+ MOV DWORD [8+EBP],EAX
+ LEA EAX,DWORD [8+EBP]
+ PUSH EAX
+ CALL _tek_getnum_s7s
+ MOV EBX,EAX
+ POP EAX
+ JMP L7
+ GLOBAL _tek_decomp
+_tek_decomp:
+ PUSH EBP
+ MOV EBP,ESP
+ PUSH ESI
+ PUSH EBX
+ OR EBX,-1
+ MOV EAX,DWORD [8+EBP]
+ MOV ECX,DWORD [12+EBP]
+ MOV ESI,DWORD [16+EBP]
+ MOV DL,BYTE [EAX]
+ CMP DL,-125
+ JE L17
+ CMP DL,-123
+ JE L18
+ CMP DL,-119
+ JE L19
+L11:
+ XOR EAX,EAX
+ TEST EBX,EBX
+ SETE AL
+ LEA ESP,DWORD [-8+EBP]
+ DEC EAX
+ POP EBX
+ POP ESI
+ POP EBP
+ RET
+L19:
+ PUSH ECX
+ PUSH EAX
+ PUSH ESI
+ CALL _tek_decode5
+L16:
+ MOV EBX,EAX
+ ADD ESP,12
+ JMP L11
+L18:
+ PUSH ECX
+ PUSH EAX
+ PUSH ESI
+ CALL _tek_decode2
+ JMP L16
+L17:
+ PUSH ECX
+ PUSH EAX
+ PUSH ESI
+ CALL _tek_decode1
+ JMP L16
+_tek_lzrestore_stk1:
+ PUSH EBP
+ MOV EBP,ESP
+ PUSH EDI
+ PUSH ESI
+ PUSH EBX
+ SUB ESP,12
+ MOV ESI,DWORD [20+EBP]
+ MOV EAX,DWORD [16+EBP]
+ ADD EAX,ESI
+ MOV DWORD [-24+EBP],ESI
+ MOV DWORD [-20+EBP],EAX
+ MOV EAX,DWORD [12+EBP]
+ MOV DWORD [-16+EBP],EAX
+L21:
+ MOV EAX,DWORD [-16+EBP]
+ MOVZX EDI,BYTE [EAX]
+ MOV EBX,EDI
+ INC EAX
+ AND EBX,15
+ MOV DWORD [-16+EBP],EAX
+ JE L53
+L24:
+ SAR EDI,4
+ JE L54
+L26:
+ MOV EAX,DWORD [-16+EBP]
+ MOV DL,BYTE [EAX]
+ INC EAX
+ MOV BYTE [ESI],DL
+ INC ESI
+ DEC EBX
+ MOV DWORD [-16+EBP],EAX
+ JNE L26
+ CMP ESI,DWORD [-20+EBP]
+ JAE L22
+L31:
+ MOV EAX,DWORD [-16+EBP]
+ MOVZX ECX,BYTE [EAX]
+ MOV EBX,ECX
+ INC EAX
+ AND EBX,15
+ MOV DWORD [-16+EBP],EAX
+ TEST ECX,1
+ JNE L34
+L35:
+ SAL EBX,7
+ MOV EAX,DWORD [-16+EBP]
+ MOVZX EDX,BYTE [EAX]
+ OR EBX,EDX
+ INC EAX
+ MOV DWORD [-16+EBP],EAX
+ TEST EBX,1
+ JE L35
+L34:
+ SAR EBX,1
+ SAR ECX,4
+ NOT EBX
+ JNE L39
+L40:
+ SAL ECX,7
+ MOV EAX,DWORD [-16+EBP]
+ MOVZX EDX,BYTE [EAX]
+ OR ECX,EDX
+ INC EAX
+ MOV DWORD [-16+EBP],EAX
+ TEST ECX,1
+ JE L40
+ SAR ECX,1
+L39:
+ LEA EAX,DWORD [EBX+ESI*1]
+ INC ECX
+ CMP EAX,DWORD [-24+EBP]
+ JB L45
+ LEA EAX,DWORD [ECX+ESI*1]
+ CMP EAX,DWORD [-20+EBP]
+ JBE L47
+ MOV ECX,DWORD [-20+EBP]
+ SUB ECX,ESI
+L47:
+ MOV AL,BYTE [EBX+ESI*1]
+ MOV BYTE [ESI],AL
+ INC ESI
+ DEC ECX
+ JNE L47
+ DEC EDI
+ JNE L31
+ CMP ESI,DWORD [-20+EBP]
+ JB L21
+L22:
+ XOR EAX,EAX
+L20:
+ LEA ESP,DWORD [-12+EBP]
+ POP EBX
+ POP ESI
+ POP EDI
+ POP EBP
+ RET
+L45:
+ MOV EAX,1
+ JMP L20
+L54:
+ LEA EAX,DWORD [-16+EBP]
+ PUSH EAX
+ CALL _tek_getnum_s7s
+ POP ECX
+ MOV EDI,EAX
+ JMP L26
+L53:
+ LEA EAX,DWORD [-16+EBP]
+ PUSH EAX
+ CALL _tek_getnum_s7s
+ MOV EBX,EAX
+ POP EAX
+ JMP L24
+_tek_decode1:
+ PUSH EBP
+ MOV EBP,ESP
+ PUSH EDI
+ PUSH ESI
+ PUSH EBX
+ MOV EAX,DWORD [12+EBP]
+ LEA ESI,DWORD [12+EBP]
+ MOV EDI,EAX
+ PUSH ESI
+ ADD EAX,16
+ ADD EDI,DWORD [8+EBP]
+ MOV DWORD [12+EBP],EAX
+ CALL _tek_getnum_s7s
+ MOV EBX,EAX
+ POP EAX
+ TEST EBX,EBX
+ JLE L56
+ PUSH ESI
+ CALL _tek_getnum_s7s
+ MOV ECX,EAX
+ MOV EDX,EAX
+ SAR ECX,1
+ MOV EAX,1
+ AND ECX,15
+ ADD ECX,8
+ SAL EAX,CL
+ CMP EBX,EAX
+ POP ECX
+ JG L58
+ MOV EAX,EDX
+ AND EAX,33
+ DEC EAX
+ JE L57
+L58:
+ MOV EDX,1
+L55:
+ LEA ESP,DWORD [-12+EBP]
+ MOV EAX,EDX
+ POP EBX
+ POP ESI
+ POP EDI
+ POP EBP
+ RET
+L57:
+ AND EDX,64
+ JNE L61
+L59:
+ PUSH ESI
+ CALL _tek_getnum_s7s
+ POP EDX
+ TEST EAX,EAX
+ MOV EDX,1
+ JNE L55
+ PUSH DWORD [16+EBP]
+ PUSH EBX
+ SUB EDI,DWORD [12+EBP]
+ PUSH DWORD [12+EBP]
+ PUSH EDI
+ CALL _tek_lzrestore_stk1
+ MOV EDX,EAX
+ JMP L55
+L61:
+ PUSH ESI
+ CALL _tek_getnum_s7s
+ POP ECX
+ JMP L59
+L56:
+ XOR EDX,EDX
+ JMP L55
+_tek_getnum_s7:
+ PUSH EBP
+ XOR ECX,ECX
+ MOV EBP,ESP
+ PUSH EDI
+ PUSH ESI
+ XOR ESI,ESI
+ MOV EDI,DWORD [8+EBP]
+ PUSH EBX
+ MOV EBX,1
+ MOV EDX,DWORD [EDI]
+L63:
+ SAL ECX,7
+ MOVZX EAX,BYTE [EDX]
+ OR ECX,EAX
+ INC EDX
+ TEST ECX,1
+ JNE L64
+ SAL EBX,7
+ ADD ESI,EBX
+ JMP L63
+L64:
+ SHR ECX,1
+ MOV DWORD [EDI],EDX
+ POP EBX
+ LEA EAX,DWORD [ESI+ECX*1]
+ POP ESI
+ POP EDI
+ POP EBP
+ RET
+_tek_lzrestore_stk2:
+ PUSH EBP
+ MOV EBP,ESP
+ PUSH EDI
+ PUSH ESI
+ PUSH EBX
+ SUB ESP,36
+ MOV EDX,DWORD [16+EBP]
+ MOV EAX,DWORD [20+EBP]
+ ADD EAX,EDX
+ MOV ECX,DWORD [20+EBP]
+ MOV DWORD [-40+EBP],EAX
+ MOV DWORD [-44+EBP],ECX
+ MOV EAX,DWORD [12+EBP]
+ MOV DWORD [-32+EBP],EAX
+ MOV DWORD [-36+EBP],0
+L72:
+ MOV ECX,DWORD [-36+EBP]
+ MOV EAX,DWORD [-36+EBP]
+ NOT EAX
+ MOV DWORD [-28+EBP+ECX*4],EAX
+ INC ECX
+ MOV DWORD [-36+EBP],ECX
+ CMP ECX,3
+ JLE L72
+ MOV BYTE [-46+EBP],0
+ MOV BYTE [-45+EBP],0
+ TEST EDX,EDX
+ JNE L117
+L73:
+ XOR EDX,EDX
+L67:
+ LEA ESP,DWORD [-12+EBP]
+ MOV EAX,EDX
+ POP EBX
+ POP ESI
+ POP EDI
+ POP EBP
+ RET
+L117:
+ LEA EAX,DWORD [-32+EBP]
+ PUSH EAX
+ CALL _tek_getnum_s7s
+ MOV EDX,1
+ POP ECX
+ TEST EAX,EAX
+ JNE L67
+L75:
+ MOV DWORD [-36+EBP],0
+L78:
+ INC DWORD [-36+EBP]
+ CMP DWORD [-36+EBP],16
+ JG L118
+ CMP BYTE [-46+EBP],0
+ JNE L82
+ MOV EAX,DWORD [-32+EBP]
+ MOV BYTE [-46+EBP],8
+ MOV DL,BYTE [EAX]
+ INC EAX
+ MOV BYTE [-45+EBP],DL
+ MOV DWORD [-32+EBP],EAX
+L82:
+ MOV AL,BYTE [-45+EBP]
+ DEC BYTE [-46+EBP]
+ AND EAX,1
+ SHR BYTE [-45+EBP],1
+ AND EAX,1
+ JE L78
+L84:
+ MOV EAX,DWORD [-32+EBP]
+ MOV ECX,DWORD [20+EBP]
+ MOV DL,BYTE [EAX]
+ INC EAX
+ MOV BYTE [ECX],DL
+ INC ECX
+ DEC DWORD [-36+EBP]
+ MOV DWORD [-32+EBP],EAX
+ MOV DWORD [20+EBP],ECX
+ JNE L84
+ MOV EAX,DWORD [-40+EBP]
+ CMP ECX,EAX
+ JAE L73
+L89:
+ INC DWORD [-36+EBP]
+ CMP DWORD [-36+EBP],16
+ JG L119
+ CMP BYTE [-46+EBP],0
+ JNE L93
+ MOV EAX,DWORD [-32+EBP]
+ MOV BYTE [-46+EBP],8
+ MOV DL,BYTE [EAX]
+ INC EAX
+ MOV BYTE [-45+EBP],DL
+ MOV DWORD [-32+EBP],EAX
+L93:
+ MOV AL,BYTE [-45+EBP]
+ DEC BYTE [-46+EBP]
+ AND EAX,1
+ SHR BYTE [-45+EBP],1
+ AND EAX,1
+ JE L89
+L95:
+ MOV EAX,DWORD [-32+EBP]
+ MOVZX EBX,BYTE [EAX]
+ MOV EDI,EBX
+ INC EAX
+ SAR EDI,4
+ AND EBX,15
+ MOV DWORD [-32+EBP],EAX
+ TEST EBX,1
+ JE L120
+L98:
+ SAR EBX,1
+ CMP EBX,3
+ LEA ESI,DWORD [-6+EBX]
+ NOT ESI
+ JG L99
+ MOV ESI,DWORD [-28+EBP+EBX*4]
+L99:
+ CMP EBX,4
+ JE L121
+L100:
+ CMP EBX,5
+ JE L122
+L101:
+ TEST EDI,EDI
+ JE L123
+L102:
+ INC EDI
+ TEST EBX,EBX
+ JLE L103
+ CMP EBX,1
+ JLE L104
+ CMP EBX,2
+ JLE L105
+ MOV EAX,DWORD [-20+EBP]
+ MOV DWORD [-16+EBP],EAX
+L105:
+ MOV EAX,DWORD [-24+EBP]
+ MOV DWORD [-20+EBP],EAX
+L104:
+ MOV EAX,DWORD [-28+EBP]
+ MOV DWORD [-28+EBP],ESI
+ MOV DWORD [-24+EBP],EAX
+L103:
+ MOV EAX,DWORD [20+EBP]
+ ADD EAX,ESI
+ CMP EAX,DWORD [-44+EBP]
+ JB L107
+ MOV EAX,DWORD [20+EBP]
+ ADD EAX,EDI
+ CMP EAX,DWORD [-40+EBP]
+ JBE L109
+ MOV EDI,DWORD [-40+EBP]
+ SUB EDI,DWORD [20+EBP]
+L109:
+ MOV ECX,DWORD [20+EBP]
+ MOV AL,BYTE [ESI+ECX*1]
+ MOV BYTE [ECX],AL
+ INC ECX
+ DEC EDI
+ MOV DWORD [20+EBP],ECX
+ JNE L109
+ DEC DWORD [-36+EBP]
+ JNE L95
+ MOV EAX,DWORD [-40+EBP]
+ CMP ECX,EAX
+ JB L75
+ JMP L73
+L107:
+ MOV EDX,1
+ JMP L67
+L123:
+ LEA EAX,DWORD [-32+EBP]
+ PUSH EAX
+ CALL _tek_getnum_s7
+ LEA EDI,DWORD [16+EAX]
+ POP EAX
+ JMP L102
+L122:
+ LEA EAX,DWORD [-32+EBP]
+ PUSH EAX
+ CALL _tek_getnum_s7
+ ADD EAX,DWORD [-28+EBP]
+ LEA ESI,DWORD [1+EAX]
+ POP EAX
+ JMP L101
+L121:
+ LEA EAX,DWORD [-32+EBP]
+ PUSH EAX
+ CALL _tek_getnum_s7
+ MOV ESI,EAX
+ POP EAX
+ NOT ESI
+ ADD ESI,DWORD [-28+EBP]
+ JMP L100
+L120:
+ LEA EAX,DWORD [-32+EBP]
+ PUSH EAX
+ CALL _tek_getnum_s7
+ INC EAX
+ SAL EAX,4
+ OR EBX,EAX
+ POP EAX
+ JMP L98
+L119:
+ LEA EAX,DWORD [-32+EBP]
+ PUSH EAX
+ CALL _tek_getnum_s7s
+ ADD DWORD [-36+EBP],EAX
+ POP EAX
+ JMP L95
+L118:
+ LEA EAX,DWORD [-32+EBP]
+ PUSH EAX
+ CALL _tek_getnum_s7s
+ POP EDX
+ ADD DWORD [-36+EBP],EAX
+ JMP L84
+_tek_decode2:
+ PUSH EBP
+ MOV EBP,ESP
+ PUSH EDI
+ PUSH ESI
+ PUSH EBX
+ LEA EDI,DWORD [12+EBP]
+ PUSH EAX
+ MOV EAX,DWORD [12+EBP]
+ PUSH EDI
+ MOV ESI,EAX
+ ADD EAX,16
+ ADD ESI,DWORD [8+EBP]
+ MOV DWORD [12+EBP],EAX
+ MOV DWORD [-16+EBP],0
+ CALL _tek_getnum_s7s
+ MOV EBX,EAX
+ POP EAX
+ TEST EBX,EBX
+ JLE L125
+ PUSH EDI
+ CALL _tek_getnum_s7s
+ MOV ECX,EAX
+ MOV EDX,EAX
+ SAR ECX,1
+ MOV EAX,1
+ AND ECX,15
+ ADD ECX,8
+ SAL EAX,CL
+ CMP EBX,EAX
+ POP ECX
+ JG L127
+ MOV EAX,EDX
+ AND EAX,33
+ DEC EAX
+ JE L126
+L127:
+ MOV EAX,1
+L124:
+ LEA ESP,DWORD [-12+EBP]
+ POP EBX
+ POP ESI
+ POP EDI
+ POP EBP
+ RET
+L126:
+ AND EDX,64
+ JNE L129
+L128:
+ PUSH DWORD [16+EBP]
+ PUSH EBX
+ SUB ESI,DWORD [12+EBP]
+ PUSH DWORD [12+EBP]
+ PUSH ESI
+ CALL _tek_lzrestore_stk2
+ ADD ESP,16
+ MOV DWORD [-16+EBP],EAX
+L125:
+ MOV EAX,DWORD [-16+EBP]
+ JMP L124
+L129:
+ PUSH EDI
+ CALL _tek_getnum_s7s
+ POP EDI
+ JMP L128
+[SECTION .data]
+_prop0_table.1:
+ DB 93
+ DB 0
+_prop1_table.2:
+ DB 0
+[SECTION .text]
+_tek_lzrestore_tek5:
+ PUSH EBP
+ MOV EBP,ESP
+ PUSH EDI
+ PUSH ESI
+ PUSH EBX
+ SUB ESP,16
+ MOV EBX,DWORD [12+EBP]
+ MOVZX ECX,BYTE [EBX]
+ MOV EAX,ECX
+ AND EAX,15
+ MOV DWORD [-24+EBP],-1
+ CMP EAX,1
+ JE L132
+ MOV DWORD [-24+EBP],-2
+ CMP EAX,5
+ JE L132
+ MOV DWORD [-24+EBP],0
+ CMP EAX,9
+ JE L132
+ MOV EAX,1
+L130:
+ LEA ESP,DWORD [-12+EBP]
+ POP EBX
+ POP ESI
+ POP EDI
+ POP EBP
+ RET
+L132:
+ INC EBX
+ SAR ECX,4
+ JNE L137
+ MOVZX ECX,BYTE [EBX]
+ INC EBX
+L138:
+ MOV EAX,ECX
+ MOV ESI,45
+ CDQ
+ IDIV ESI
+ MOV DWORD [-16+EBP],EAX
+ MOV ESI,9
+ MOV EAX,EDX
+ CDQ
+ IDIV ESI
+ CMP DWORD [-24+EBP],0
+ MOV DWORD [-28+EBP],EDX
+ MOV DWORD [-20+EBP],EAX
+ JNE L143
+ MOVZX EAX,BYTE [EBX]
+ MOV DWORD [-24+EBP],EAX
+ INC EBX
+L143:
+ CMP DWORD [-24+EBP],-1
+ JE L146
+L144:
+ MOV ECX,DWORD [-28+EBP]
+ MOV EAX,3072
+ ADD ECX,DWORD [-16+EBP]
+ SAL EAX,CL
+ LEA EDI,DWORD [9984+EAX]
+ PUSH EDI
+ PUSH 3932160
+ CALL _memman_alloc_4k
+ MOV ESI,EAX
+ POP EAX
+ POP EDX
+ OR EAX,-1
+ TEST ESI,ESI
+ JE L130
+ PUSH DWORD [-24+EBP]
+ PUSH DWORD [-16+EBP]
+ PUSH DWORD [-20+EBP]
+ PUSH DWORD [-28+EBP]
+ PUSH DWORD [20+EBP]
+ PUSH DWORD [16+EBP]
+ PUSH EBX
+ PUSH ESI
+ CALL _tek_decmain5
+ ADD ESP,32
+ PUSH EDI
+ MOV DWORD [-24+EBP],EAX
+ PUSH ESI
+ PUSH 3932160
+ CALL _memman_free_4k
+ MOV EAX,DWORD [-24+EBP]
+ JMP L130
+L146:
+ MOV EDI,DWORD [-16+EBP]
+ MOV EDX,DWORD [-20+EBP]
+ MOV DWORD [-16+EBP],EDX
+ MOV DWORD [-20+EBP],EDI
+ JMP L144
+L137:
+ CMP DWORD [-24+EBP],-1
+ JE L147
+ MOV EAX,1
+ CMP ECX,1
+ JG L130
+ MOVZX ECX,BYTE [_prop1_table.2-1+ECX]
+ JMP L138
+L147:
+ MOV EAX,1
+ CMP ECX,2
+ JG L130
+ MOVZX ECX,BYTE [_prop0_table.1-1+ECX]
+ JMP L138
+_tek_setbm5:
+ PUSH EBP
+ OR EAX,-1
+ MOV EBP,ESP
+ MOV EDX,1
+ PUSH EDI
+ MOV EDI,EAX
+ PUSH ESI
+ MOV ECX,DWORD [16+EBP]
+ MOV ESI,DWORD [8+EBP]
+ PUSH EBX
+ MOV EBX,DWORD [12+EBP]
+ MOV BYTE [1+ESI],CL
+ MOV BYTE [ESI],BL
+ ADD ECX,EBX
+ SAL EDI,CL
+ MOV CL,BL
+ SAL EDX,CL
+ SAL EAX,CL
+ AND EAX,65535
+ OR EDX,EDI
+ NOT EDI
+ MOV DWORD [12+ESI],EAX
+ AND EDI,EAX
+ AND EDX,EAX
+ MOV DWORD [4+ESI],EDI
+ NOT EAX
+ MOV DWORD [8+ESI],EDX
+ MOV DWORD [16+ESI],EAX
+ POP EBX
+ POP ESI
+ POP EDI
+ POP EBP
+ RET
+_tek_rdget0:
+ PUSH EBP
+ MOV EBP,ESP
+ PUSH EDI
+ PUSH ESI
+ PUSH EBX
+ MOV EDI,DWORD [8+EBP]
+ MOV ESI,DWORD [16+EBP]
+L150:
+ MOV EAX,DWORD [4+EDI]
+ CMP EAX,16777215
+ JA L160
+L156:
+ MOV EBX,EAX
+ MOV ECX,DWORD [8+EDI]
+ SAL EBX,8
+ MOV EAX,DWORD [EDI]
+ SAL ECX,8
+ MOV DWORD [4+EDI],EBX
+ MOVZX EDX,BYTE [EAX]
+ OR ECX,EDX
+ INC EAX
+ MOV DWORD [EDI],EAX
+ MOV DWORD [8+EDI],ECX
+ MOV EAX,EBX
+ CMP EBX,16777215
+ JBE L156
+L160:
+ MOV EDX,DWORD [4+EDI]
+ MOV EAX,DWORD [8+EDI]
+ SHR EDX,1
+ ADD ESI,ESI
+ MOV DWORD [4+EDI],EDX
+ CMP EAX,EDX
+ JB L152
+ SUB EAX,EDX
+ OR ESI,1
+ MOV DWORD [8+EDI],EAX
+L152:
+ DEC DWORD [12+EBP]
+ JNE L150
+ NOT ESI
+ POP EBX
+ MOV EAX,ESI
+ POP ESI
+ POP EDI
+ POP EBP
+ RET
+_tek_rdget1:
+ PUSH EBP
+ MOV EBP,ESP
+ PUSH EDI
+ PUSH ESI
+ PUSH EBX
+ SUB ESP,20
+ MOV EAX,DWORD [16+EBP]
+ MOV EDI,DWORD [24+EBP]
+ SAR EAX,4
+ MOV DWORD [-24+EBP],EAX
+ MOV EAX,DWORD [20+EBP]
+ SAL EAX,2
+ AND DWORD [16+EBP],15
+ SUB DWORD [12+EBP],EAX
+L162:
+ MOV EAX,DWORD [12+EBP]
+ MOV EDX,DWORD [20+EBP]
+ LEA EDX,DWORD [EAX+EDX*4]
+ MOV DWORD [-20+EBP],EDX
+ MOV EAX,DWORD [EDX]
+ MOV DWORD [-16+EBP],EAX
+ MOV EAX,DWORD [20+EDI]
+ TEST EAX,EAX
+ JE L165
+ DEC EAX
+ MOV DWORD [20+EDI],EAX
+ TEST EAX,EAX
+ JE L187
+L166:
+ MOV EAX,DWORD [4+EDI]
+ CMP DWORD [-16+EBP],EAX
+ JB L186
+ MOV EAX,DWORD [8+EDI]
+ CMP DWORD [-16+EBP],EAX
+ JBE L174
+L186:
+ MOV DWORD [-16+EBP],EAX
+L173:
+ MOV EDX,DWORD [-20+EBP]
+ MOV EAX,DWORD [-16+EBP]
+ MOV DWORD [EDX],EAX
+L165:
+ MOV EDX,DWORD [8+EBP]
+ MOV EAX,DWORD [4+EDX]
+ CMP EAX,16777215
+ JA L185
+L179:
+ MOV EBX,EAX
+ MOV EAX,DWORD [8+EBP]
+ SAL EBX,8
+ MOV ECX,DWORD [8+EAX]
+ MOV DWORD [4+EAX],EBX
+ SAL ECX,8
+ MOV EAX,DWORD [EAX]
+ MOVZX EDX,BYTE [EAX]
+ OR ECX,EDX
+ INC EAX
+ MOV EDX,DWORD [8+EBP]
+ CMP EBX,16777215
+ MOV DWORD [EDX],EAX
+ MOV DWORD [8+EDX],ECX
+ MOV EAX,EBX
+ JBE L179
+L185:
+ MOV EAX,DWORD [8+EBP]
+ SAL DWORD [20+EBP],1
+ MOV ESI,DWORD [4+EAX]
+ MOV ECX,ESI
+ AND ECX,DWORD [12+EAX]
+ MOV EAX,DWORD [-16+EBP]
+ MUL ECX
+ SHRD EAX,EDX,16
+ SHR EDX,16
+ MOV DWORD [-32+EBP],EAX
+ MOV DWORD [-28+EBP],EDX
+ MOV EBX,EAX
+ MOV EDX,DWORD [8+EBP]
+ MOV ECX,DWORD [8+EDX]
+ CMP ECX,EAX
+ JAE L180
+ MOV EAX,DWORD [-32+EBP]
+ OR DWORD [20+EBP],1
+ MOV DWORD [4+EDX],EAX
+ MOV EDX,DWORD [-20+EBP]
+ MOV EAX,65536
+ SUB EAX,DWORD [-16+EBP]
+ MOVZX ECX,BYTE [1+EDI]
+ SHR EAX,CL
+ AND EAX,DWORD [12+EDI]
+ ADD DWORD [EDX],EAX
+L181:
+ MOV EAX,DWORD [-24+EBP]
+ DEC DWORD [16+EBP]
+ TEST DWORD [16+EBP],EAX
+ JNE L164
+ ADD EDI,32
+L164:
+ CMP DWORD [16+EBP],0
+ JNE L162
+ MOV EAX,DWORD [20+EBP]
+ LEA ESP,DWORD [-12+EBP]
+ POP EBX
+ POP ESI
+ POP EDI
+ POP EBP
+ RET
+L180:
+ SUB ESI,EAX
+ SUB ECX,EBX
+ MOV EAX,DWORD [8+EBP]
+ MOV DWORD [4+EAX],ESI
+ MOV DWORD [8+EAX],ECX
+ MOVZX ECX,BYTE [1+EDI]
+ SHR DWORD [-16+EBP],CL
+ MOV EDX,DWORD [12+EDI]
+ MOV EAX,DWORD [-20+EBP]
+ AND DWORD [-16+EBP],EDX
+ MOV EDX,DWORD [-16+EBP]
+ SUB DWORD [EAX],EDX
+ JMP L181
+L174:
+ MOV EAX,DWORD [-16+EBP]
+ AND EAX,DWORD [16+EDI]
+ TEST EAX,EAX
+ JE L165
+ MOV EAX,DWORD [12+EDI]
+ AND DWORD [-16+EBP],EAX
+ JMP L173
+L187:
+ MOV EAX,DWORD [8+EBP]
+ ADD EAX,124
+ PUSH EAX
+ PUSH 0
+ PUSH 113
+ MOV EAX,DWORD [8+EBP]
+ ADD EAX,9368
+ PUSH EAX
+ PUSH DWORD [8+EBP]
+ CALL _tek_rdget1
+ ADD ESP,20
+ TEST EAX,EAX
+ JE L169
+ MOV EDX,DWORD [8+EBP]
+ MOV EAX,EDI
+ ADD EDX,60
+ SUB EAX,DWORD [8+EBP]
+ PUSH EDX
+ PUSH 0
+ SUB EAX,28
+ SAR EAX,5
+ PUSH 113
+ MOVZX EDX,BYTE [2+EDI]
+ LEA EAX,DWORD [EDX+EAX*2]
+ MOV EDX,DWORD [8+EBP]
+ LEA EAX,DWORD [8984+EDX+EAX*4]
+ PUSH EAX
+ PUSH EDX
+ CALL _tek_rdget1
+ ADD ESP,20
+ TEST AL,AL
+ MOV BYTE [2+EDI],AL
+ JE L188
+L170:
+ MOV EAX,DWORD [24+EDI]
+ MOV DWORD [20+EDI],EAX
+ JMP L166
+L188:
+ MOV ESI,DWORD [8+EBP]
+ ADD ESI,92
+ PUSH ESI
+ PUSH 1
+ PUSH 116
+ MOV EAX,DWORD [8+EBP]
+ ADD EAX,9240
+ PUSH EAX
+ PUSH DWORD [8+EBP]
+ CALL _tek_rdget1
+ ADD ESP,20
+ MOV EBX,EAX
+ AND EBX,15
+ CMP EBX,15
+ JE L169
+ PUSH ESI
+ PUSH 1
+ PUSH 116
+ MOV EAX,DWORD [8+EBP]
+ ADD EAX,9304
+ PUSH EAX
+ PUSH DWORD [8+EBP]
+ CALL _tek_rdget1
+ ADD ESP,20
+ DEC EAX
+ AND EAX,15
+ INC EAX
+ PUSH EAX
+ PUSH EBX
+ PUSH EDI
+ CALL _tek_setbm5
+ ADD ESP,12
+ JMP L170
+L169:
+ MOV EAX,DWORD [8+EBP]
+ MOV EDX,DWORD [8+EBP]
+ ADD EAX,16
+ MOV EBP,DWORD [16+EDX]
+ MOV ESP,DWORD [8+EAX]
+ JMP DWORD [4+EAX]
+_tek_revbit:
+ PUSH EBP
+ MOV EBP,ESP
+ PUSH EBX
+ XOR EBX,EBX
+ MOV ECX,DWORD [8+EBP]
+ MOV EDX,DWORD [12+EBP]
+L190:
+ MOV EAX,ECX
+ SHR ECX,1
+ AND EAX,1
+ DEC EDX
+ LEA EBX,DWORD [EAX+EBX*2]
+ JNE L190
+ MOV EAX,EBX
+ POP EBX
+ POP EBP
+ RET
+_tek_getlen5:
+ PUSH EBP
+ MOV EBP,ESP
+ PUSH EDI
+ PUSH ESI
+ PUSH EBX
+ MOV ESI,DWORD [12+EBP]
+ MOV EBX,DWORD [8+EBP]
+ PUSH DWORD [1064+EBX]
+ LEA EDI,DWORD [EBX+ESI*8]
+ PUSH 0
+ PUSH 113
+ LEA EAX,DWORD [4892+EDI]
+ PUSH EAX
+ PUSH EBX
+ CALL _tek_rdget1
+ ADD ESP,20
+ CMP EAX,DWORD [20+EBP]
+ JE L195
+ IMUL EAX,DWORD [16+EBP],7
+ ADD EAX,ESI
+ PUSH DWORD [1068+EBX]
+ SAL EAX,5
+ PUSH 1
+ PUSH 115
+ LEA EAX,DWORD [1212+EBX+EAX*1]
+ PUSH EAX
+ PUSH EBX
+ CALL _tek_rdget1
+ MOV EDX,EAX
+ AND EDX,7
+L202:
+ ADD ESP,20
+L196:
+ LEA ESP,DWORD [-12+EBP]
+ MOV EAX,EDX
+ POP EBX
+ POP ESI
+ POP EDI
+ POP EBP
+ RET
+L195:
+ PUSH DWORD [1064+EBX]
+ PUSH 0
+ LEA EAX,DWORD [4896+EDI]
+ PUSH 113
+ PUSH EAX
+ PUSH EBX
+ CALL _tek_rdget1
+ ADD ESP,20
+ CMP EAX,DWORD [20+EBP]
+ JE L197
+ IMUL EAX,DWORD [16+EBP],7
+ ADD EAX,ESI
+ PUSH DWORD [1072+EBX]
+ SAL EAX,5
+ PUSH 1
+ PUSH 115
+ LEA EAX,DWORD [1276+EBX+EAX*1]
+ PUSH EAX
+ PUSH EBX
+ CALL _tek_rdget1
+ MOV EDX,EAX
+ JMP L202
+L197:
+ PUSH DWORD [1076+EBX]
+ SAL ESI,10
+ PUSH 1
+ PUSH 120
+ LEA EAX,DWORD [4908+ESI+EBX*1]
+ PUSH EAX
+ PUSH EBX
+ CALL _tek_rdget1
+ ADD ESP,20
+ LEA EDX,DWORD [-504+EAX]
+ TEST EDX,EDX
+ JLE L199
+ CMP EDX,5
+ JG L200
+ CMP DWORD [20+EBP],0
+ JE L203
+L200:
+ PUSH -2
+ PUSH EDX
+ PUSH EBX
+ CALL _tek_rdget0
+ ADD ESP,12
+ LEA EDX,DWORD [-1+EAX]
+L201:
+ PUSH -2
+ PUSH EDX
+ PUSH EBX
+ CALL _tek_rdget0
+ ADD ESP,12
+ LEA EDX,DWORD [-1+EAX]
+L199:
+ ADD EDX,264
+ JMP L196
+L203:
+ PUSH DWORD [1080+EBX]
+ MOV EAX,EDX
+ PUSH 1
+ OR EAX,112
+ MOV CL,DL
+ PUSH EAX
+ MOV EAX,4
+ SAL EAX,CL
+ LEA EAX,DWORD [8724+EAX+EBX*1]
+ PUSH EAX
+ PUSH EBX
+ CALL _tek_rdget1
+ ADD ESP,20
+ LEA EDX,DWORD [-1+EAX]
+ JMP L201
+[SECTION .data]
+_state_table.3:
+ DD 0
+ DD 0
+ DD 0
+ DD 0
+ DD 1
+ DD 2
+ DD 3
+ DD 4
+ DD 5
+ DD 6
+ DD 4
+ DD 5
+_pt1.4:
+ DB 8
+ DB 8
+ DB 8
+ DB 8
+ DB 8
+ DB 8
+ DB 8
+ DB 8
+ DB 8
+ DB 8
+ DB 18
+ DB 18
+ DB 18
+ DB 8
+_pt2.5:
+ DB 8
+ DB 8
+ DB 10
+ DB 11
+ DB 12
+ DB 12
+ DB 14
+ DB 15
+ DB 16
+ DB 16
+ DB 18
+ DB 18
+ DB 20
+ DB 21
+[SECTION .text]
+_tek_decmain5:
+ PUSH EBP
+ MOV EAX,1
+ MOV EBP,ESP
+ MOV EDX,EAX
+ PUSH EDI
+ PUSH ESI
+ PUSH EBX
+ SUB ESP,116
+ MOV ECX,DWORD [28+EBP]
+ MOV EBX,DWORD [12+EBP]
+ SAL EDX,CL
+ MOV ECX,EDX
+ MOV EDX,DWORD [8+EBP]
+ DEC ECX
+ MOV DWORD [-100+EBP],EDX
+ MOV DWORD [-72+EBP],ECX
+ MOV CL,BYTE [32+EBP]
+ SAL EAX,CL
+ DEC EAX
+ MOV ECX,DWORD [-100+EBP]
+ MOV DWORD [-76+EBP],EAX
+ XOR EAX,EAX
+ CMP DWORD [36+EBP],-1
+ SETE AL
+ MOV DWORD [-80+EBP],EAX
+ ADD EDX,1116
+ MOV DWORD [-84+EBP],8
+ MOV EAX,DWORD [24+EBP]
+ MOV DWORD [-104+EBP],EDX
+ SUB DWORD [-84+EBP],EAX
+ LEA EAX,DWORD [4+EBX]
+ MOV DWORD [ECX],EAX
+ MOV DWORD [-92+EBP],120
+ MOV DWORD [4+ECX],-1
+ MOVZX EDX,BYTE [EBX]
+ MOVZX EAX,BYTE [1+EBX]
+ SAL EAX,16
+ SAL EDX,24
+ OR EDX,EAX
+ MOVZX EAX,BYTE [2+EBX]
+ SAL EAX,8
+ OR EDX,EAX
+ MOVZX EAX,BYTE [3+EBX]
+ OR EDX,EAX
+ MOV DWORD [8+ECX],EDX
+ MOV DWORD [-48+EBP],0
+L209:
+ MOV EDX,DWORD [-48+EBP]
+ MOV EAX,DWORD [-48+EBP]
+ NOT EAX
+ MOV DWORD [-28+EBP+EDX*4],EAX
+ INC EDX
+ MOV DWORD [-48+EBP],EDX
+ CMP EDX,3
+ JLE L209
+ MOV EAX,DWORD [-100+EBP]
+ MOV ECX,DWORD [-100+EBP]
+ ADD EAX,16
+ LEA EDX,DWORD [-12+EBP]
+ MOV DWORD [16+ECX],EDX
+ MOV DWORD [4+EAX],L211
+ MOV DWORD [8+EAX],ESP
+ XOR EAX,EAX
+L212:
+ TEST EAX,EAX
+ JNE L213
+ MOV ECX,DWORD [24+EBP]
+ MOV EAX,768
+ ADD ECX,DWORD [32+EBP]
+ SAL EAX,CL
+ ADD EAX,2063
+ MOV DWORD [-48+EBP],EAX
+ JS L330
+L218:
+ MOV ECX,DWORD [-48+EBP]
+ MOV EAX,DWORD [-104+EBP]
+ MOV DWORD [EAX+ECX*4],32768
+ DEC ECX
+ MOV DWORD [-48+EBP],ECX
+ JNS L218
+L330:
+ MOV DWORD [-48+EBP],0
+ MOV EDX,DWORD [-100+EBP]
+L225:
+ XOR EAX,EAX
+ CMP DWORD [-48+EBP],3
+ SETG AL
+ MOV DWORD [48+EDX],EAX
+ MOV EAX,16384
+ CMP DWORD [-48+EBP],23
+ JLE L224
+ MOV EAX,8192
+L224:
+ MOV BYTE [30+EDX],0
+ MOV BYTE [29+EDX],5
+ MOV BYTE [28+EDX],5
+ INC DWORD [-48+EBP]
+ MOV DWORD [52+EDX],EAX
+ ADD EDX,32
+ CMP DWORD [-48+EBP],31
+ JLE L225
+ MOV ECX,DWORD [24+EBP]
+ MOV EAX,1024
+ ADD ECX,DWORD [32+EBP]
+ MOV EDX,DWORD [-104+EBP]
+ SAL EAX,CL
+ CMP DWORD [-80+EBP],0
+ LEA EAX,DWORD [8248+EAX+EDX*1]
+ MOV DWORD [-96+EBP],EAX
+ JE L226
+ MOV ECX,DWORD [-100+EBP]
+ MOV EAX,ECX
+ MOV DWORD [12+ECX],-2048
+ ADD EAX,48
+ MOV DWORD [-48+EBP],31
+L231:
+ MOV DWORD [EAX],0
+ ADD EAX,32
+ DEC DWORD [-48+EBP]
+ JNS L231
+ MOV DWORD [-48+EBP],0
+L236:
+ MOV EDX,DWORD [-48+EBP]
+ MOV EAX,DWORD [-100+EBP]
+ MOV ECX,DWORD [-100+EBP]
+ ADD EAX,28
+ MOV DWORD [1052+ECX+EDX*4],EAX
+ INC EDX
+ MOV DWORD [-48+EBP],EDX
+ CMP EDX,13
+ JLE L236
+L237:
+ MOV EAX,DWORD [-100+EBP]
+ MOV DWORD [-128+EBP],EAX
+ MOV DWORD [-48+EBP],31
+L268:
+ MOV EDX,DWORD [-128+EBP]
+ MOVZX EAX,BYTE [29+EDX]
+ PUSH EAX
+ MOVZX EAX,BYTE [28+EDX]
+ PUSH EAX
+ MOV EAX,EDX
+ ADD EAX,28
+ PUSH EAX
+ CALL _tek_setbm5
+ ADD ESP,12
+ ADD DWORD [-128+EBP],32
+ DEC DWORD [-48+EBP]
+ JNS L268
+ MOV ECX,DWORD [-100+EBP]
+ PUSH DWORD [1052+ECX]
+ PUSH 0
+ PUSH 113
+ PUSH DWORD [-104+EBP]
+ PUSH ECX
+ CALL _tek_rdget1
+ ADD ESP,20
+ CMP EAX,DWORD [-80+EBP]
+ JE L213
+ MOV EAX,DWORD [20+EBP]
+ INC DWORD [20+EBP]
+ MOV DWORD [-108+EBP],EAX
+ MOV EAX,DWORD [-100+EBP]
+ ADD EAX,796
+ PUSH EAX
+ MOV EAX,DWORD [-104+EBP]
+ PUSH 1
+ ADD EAX,8256
+ PUSH DWORD [-92+EBP]
+ PUSH EAX
+ PUSH DWORD [-100+EBP]
+ CALL _tek_rdget1
+ MOV EDX,DWORD [-108+EBP]
+ ADD ESP,20
+ MOV BYTE [EDX],AL
+ MOV ECX,DWORD [16+EBP]
+ MOV DWORD [-68+EBP],1
+ MOV DWORD [-60+EBP],0
+ MOV DWORD [-64+EBP],0
+ CMP DWORD [-68+EBP],ECX
+ JGE L343
+L326:
+ MOV EAX,DWORD [-68+EBP]
+ MOV EDX,DWORD [-100+EBP]
+ AND EAX,DWORD [-72+EBP]
+ MOV ECX,DWORD [-104+EBP]
+ MOV DWORD [-88+EBP],EAX
+ XOR EAX,EAX
+ CMP DWORD [-64+EBP],0
+ SETG AL
+ PUSH DWORD [1052+EDX+EAX*4]
+ IMUL EAX,DWORD [-88+EBP],28
+ ADD EAX,DWORD [-64+EBP]
+ PUSH 0
+ PUSH 113
+ LEA EAX,DWORD [ECX+EAX*8]
+ PUSH EAX
+ MOV DWORD [-112+EBP],EAX
+ PUSH EDX
+ CALL _tek_rdget1
+ ADD ESP,20
+ CMP EAX,DWORD [-80+EBP]
+ JE L273
+ MOV EAX,DWORD [20+EBP]
+ MOV CL,BYTE [-84+EBP]
+ MOVZX EDX,BYTE [-1+EAX]
+ MOV EAX,DWORD [-68+EBP]
+ AND EAX,DWORD [-76+EBP]
+ SAR EDX,CL
+ MOV CL,BYTE [24+EBP]
+ SAL EAX,CL
+ OR EDX,EAX
+ MOV ECX,DWORD [-64+EBP]
+ MOV EAX,EDX
+ SAL EAX,8
+ MOV ECX,DWORD [_state_table.3+ECX*4]
+ MOV DWORD [-48+EBP],EAX
+ MOV DWORD [-64+EBP],ECX
+ CMP DWORD [-60+EBP],0
+ JE L349
+ MOV EAX,DWORD [-100+EBP]
+ MOV EDX,DWORD [20+EBP]
+ ADD EAX,796
+ MOV DWORD [-116+EBP],EAX
+ MOV EAX,DWORD [-28+EBP]
+ MOV DWORD [-52+EBP],1
+ MOV DWORD [-56+EBP],8
+ MOVZX EAX,BYTE [EAX+EDX*1]
+ MOV DWORD [-60+EBP],EAX
+L280:
+ MOV EAX,DWORD [-48+EBP]
+ MOV ECX,DWORD [-100+EBP]
+ ADD EAX,DWORD [-52+EBP]
+ MOV EDX,DWORD [-60+EBP]
+ SAR EDX,7
+ ADD EAX,EAX
+ MOV DWORD [-120+EBP],EDX
+ PUSH DWORD [1060+ECX]
+ OR EAX,EDX
+ MOV ECX,DWORD [-96+EBP]
+ PUSH 0
+ PUSH 113
+ LEA EAX,DWORD [ECX+EAX*4]
+ PUSH EAX
+ PUSH DWORD [-100+EBP]
+ CALL _tek_rdget1
+ MOV EDX,DWORD [-52+EBP]
+ DEC DWORD [-56+EBP]
+ ADD ESP,20
+ LEA EAX,DWORD [EAX+EDX*2]
+ MOV DWORD [-52+EBP],EAX
+ MOV EAX,DWORD [-92+EBP]
+ SAR EAX,4
+ TEST DWORD [-56+EBP],EAX
+ JNE L283
+ ADD DWORD [-116+EBP],32
+L283:
+ MOV ECX,DWORD [-52+EBP]
+ XOR DWORD [-120+EBP],ECX
+ TEST DWORD [-120+EBP],1
+ JE L284
+ CMP DWORD [-56+EBP],0
+ JNE L344
+L284:
+ SAL DWORD [-60+EBP],1
+ CMP DWORD [-56+EBP],0
+ JNE L280
+L281:
+ MOV EDX,DWORD [20+EBP]
+ MOV AL,BYTE [-52+EBP]
+ MOV BYTE [EDX],AL
+ MOV DWORD [-60+EBP],0
+L279:
+ INC DWORD [-68+EBP]
+ INC DWORD [20+EBP]
+L270:
+ MOV ECX,DWORD [16+EBP]
+ CMP DWORD [-68+EBP],ECX
+ JL L326
+L343:
+ XOR EAX,EAX
+L204:
+ LEA ESP,DWORD [-12+EBP]
+ POP EBX
+ POP ESI
+ POP EDI
+ POP EBP
+ RET
+L344:
+ MOV EAX,DWORD [-92+EBP]
+ MOV ECX,DWORD [-104+EBP]
+ AND EAX,112
+ OR DWORD [-56+EBP],EAX
+ MOV EAX,DWORD [-48+EBP]
+ ADD EAX,DWORD [-52+EBP]
+ PUSH DWORD [-116+EBP]
+ PUSH DWORD [-52+EBP]
+ PUSH DWORD [-56+EBP]
+ LEA EAX,DWORD [8252+ECX+EAX*4]
+ PUSH EAX
+ PUSH DWORD [-100+EBP]
+ CALL _tek_rdget1
+ ADD ESP,20
+ MOV DWORD [-52+EBP],EAX
+ JMP L281
+L349:
+ SAL EDX,10
+ MOV EAX,DWORD [-100+EBP]
+ ADD EAX,796
+ MOV ECX,DWORD [-104+EBP]
+ PUSH EAX
+ PUSH 1
+ LEA EAX,DWORD [8256+EDX+ECX*1]
+ PUSH DWORD [-92+EBP]
+ PUSH EAX
+ PUSH DWORD [-100+EBP]
+ CALL _tek_rdget1
+ MOV EDX,DWORD [20+EBP]
+ ADD ESP,20
+ MOV BYTE [EDX],AL
+ JMP L279
+L273:
+ MOV ECX,DWORD [-100+EBP]
+ MOV EAX,DWORD [-64+EBP]
+ SAL EAX,4
+ PUSH DWORD [1104+ECX]
+ ADD EAX,DWORD [-104+EBP]
+ PUSH 0
+ PUSH 113
+ MOV DWORD [-124+EBP],EAX
+ ADD EAX,3584
+ PUSH EAX
+ PUSH ECX
+ OR DWORD [-60+EBP],1
+ CALL _tek_rdget1
+ ADD ESP,20
+ CMP EAX,DWORD [-80+EBP]
+ JE L287
+ PUSH DWORD [-80+EBP]
+ MOV EAX,DWORD [-20+EBP]
+ PUSH DWORD [-88+EBP]
+ MOV DWORD [-16+EBP],EAX
+ PUSH 0
+ MOV EAX,DWORD [-24+EBP]
+ MOV DWORD [-20+EBP],EAX
+ MOV EAX,DWORD [-28+EBP]
+ PUSH DWORD [-100+EBP]
+ MOV DWORD [-24+EBP],EAX
+ CALL _tek_getlen5
+ MOV DWORD [-48+EBP],EAX
+ MOV DWORD [-52+EBP],EAX
+ ADD ESP,16
+ XOR EAX,EAX
+ CMP DWORD [-64+EBP],6
+ SETG AL
+ CMP DWORD [-48+EBP],3
+ LEA EAX,DWORD [7+EAX+EAX*2]
+ MOV DWORD [-64+EBP],EAX
+ JLE L290
+ MOV DWORD [-52+EBP],3
+L290:
+ XOR EAX,EAX
+ MOV EDX,DWORD [-100+EBP]
+ CMP DWORD [-52+EBP],3
+ SETE AL
+ SAL DWORD [-52+EBP],8
+ PUSH DWORD [1084+EDX+EAX*4]
+ MOV ECX,DWORD [-104+EBP]
+ MOV EDX,DWORD [-52+EBP]
+ PUSH 1
+ PUSH 118
+ LEA EAX,DWORD [5840+EDX+ECX*1]
+ PUSH EAX
+ PUSH DWORD [-100+EBP]
+ CALL _tek_rdget1
+ MOV ECX,EAX
+ ADD ESP,20
+ AND ECX,63
+ MOV DWORD [-52+EBP],ECX
+ MOV DWORD [-28+EBP],ECX
+ CMP ECX,3
+ JLE L295
+ MOV EDX,ECX
+ MOV EBX,EAX
+ SAR EDX,1
+ AND EBX,1
+ MOV EAX,EBX
+ LEA ECX,DWORD [-1+EDX]
+ OR EAX,2
+ SAL EAX,CL
+ MOV DWORD [-56+EBP],ECX
+ MOV DWORD [-28+EBP],EAX
+ CMP DWORD [-52+EBP],13
+ JLE L350
+ CMP DWORD [-80+EBP],0
+ JNE L302
+ SUB EDX,7
+ MOV DWORD [-56+EBP],EDX
+ JE L303
+ PUSH -1
+ PUSH EDX
+ PUSH DWORD [-100+EBP]
+ CALL _tek_rdget0
+ SAL EAX,6
+ ADD ESP,12
+ OR DWORD [-28+EBP],EAX
+L303:
+ MOV EAX,DWORD [-100+EBP]
+ PUSH 6
+ PUSH DWORD [1100+EAX]
+ PUSH 1
+ MOV EAX,DWORD [-104+EBP]
+ PUSH 118
+ ADD EAX,6864
+ PUSH EAX
+L348:
+ PUSH DWORD [-100+EBP]
+ CALL _tek_rdget1
+ ADD ESP,20
+ PUSH EAX
+ CALL _tek_revbit
+ POP ECX
+ OR DWORD [-28+EBP],EAX
+ POP EBX
+L295:
+ NOT DWORD [-28+EBP]
+L310:
+ MOV EDX,DWORD [-68+EBP]
+ ADD DWORD [-48+EBP],2
+ ADD EDX,DWORD [-28+EBP]
+ JS L213
+ MOV EAX,DWORD [-68+EBP]
+ ADD EAX,DWORD [-48+EBP]
+ CMP EAX,DWORD [16+EBP]
+ JLE L321
+ MOV ECX,DWORD [16+EBP]
+ SUB ECX,DWORD [-68+EBP]
+ MOV DWORD [-48+EBP],ECX
+L321:
+ MOV EAX,DWORD [-48+EBP]
+ ADD DWORD [-68+EBP],EAX
+L322:
+ MOV EDX,DWORD [20+EBP]
+ MOV EAX,DWORD [-28+EBP]
+ MOV AL,BYTE [EAX+EDX*1]
+ MOV BYTE [EDX],AL
+ INC EDX
+ DEC DWORD [-48+EBP]
+ MOV DWORD [20+EBP],EDX
+ JNE L322
+ JMP L270
+L213:
+ MOV EAX,1
+ JMP L204
+L302:
+ PUSH -1
+ LEA EAX,DWORD [-5+EDX]
+ PUSH EAX
+ PUSH DWORD [-100+EBP]
+ CALL _tek_rdget0
+ SAL EAX,4
+ MOV EDX,DWORD [-100+EBP]
+ PUSH 4
+ OR DWORD [-28+EBP],EAX
+ MOV EAX,DWORD [-104+EBP]
+ ADD EAX,6864
+ PUSH DWORD [1100+EDX]
+ PUSH 1
+ PUSH 116
+ PUSH EAX
+ PUSH EDX
+ CALL _tek_rdget1
+ ADD ESP,20
+ PUSH EAX
+ CALL _tek_revbit
+ OR DWORD [-28+EBP],EAX
+ ADD ESP,20
+ JMP L295
+L350:
+ XOR EAX,EAX
+ MOV EDX,DWORD [-100+EBP]
+ CMP ECX,4
+ PUSH ECX
+ SETGE AL
+ IMUL EBX,EBX,248
+ PUSH DWORD [1092+EDX+EAX*4]
+ MOV EAX,ECX
+ PUSH 1
+ OR EAX,112
+ MOV EDX,DWORD [-104+EBP]
+ PUSH EAX
+ MOV CL,BYTE [-56+EBP]
+ MOV EAX,4
+ ADD EDX,EBX
+ SAL EAX,CL
+ LEA EDX,DWORD [7112+EAX+EDX*1]
+ PUSH EDX
+ JMP L348
+L287:
+ MOV ECX,DWORD [-100+EBP]
+ MOV EAX,DWORD [-124+EBP]
+ ADD EAX,3588
+ PUSH DWORD [1104+ECX]
+ PUSH 0
+ PUSH 113
+ PUSH EAX
+ PUSH ECX
+ CALL _tek_rdget1
+ ADD ESP,20
+ CMP EAX,DWORD [-80+EBP]
+ JE L306
+ MOV EAX,DWORD [-100+EBP]
+ MOV DWORD [-48+EBP],-1
+ PUSH DWORD [1104+EAX]
+ PUSH 0
+ MOV EAX,DWORD [-112+EBP]
+ PUSH 113
+ ADD EAX,4
+ PUSH EAX
+ PUSH DWORD [-100+EBP]
+ CALL _tek_rdget1
+ ADD ESP,20
+ TEST EAX,EAX
+ JNE L311
+ XOR EAX,EAX
+ CMP DWORD [-64+EBP],6
+ SETG AL
+ LEA EAX,DWORD [9+EAX+EAX*1]
+L346:
+ MOV DWORD [-64+EBP],EAX
+ JMP L310
+L311:
+ PUSH DWORD [-80+EBP]
+ PUSH DWORD [-88+EBP]
+ PUSH 1
+ PUSH DWORD [-100+EBP]
+ CALL _tek_getlen5
+ MOV DWORD [-48+EBP],EAX
+ ADD ESP,16
+ XOR EAX,EAX
+ CMP DWORD [-64+EBP],6
+ SETG AL
+ LEA EAX,DWORD [8+EAX+EAX*2]
+ JMP L346
+L306:
+ MOV EDX,DWORD [-100+EBP]
+ MOV EAX,DWORD [-124+EBP]
+ ADD EAX,3592
+ PUSH DWORD [1104+EDX]
+ PUSH 0
+ PUSH 113
+ PUSH EAX
+ PUSH EDX
+ CALL _tek_rdget1
+ ADD ESP,20
+ CMP EAX,DWORD [-80+EBP]
+ JE L312
+ MOV ECX,DWORD [-24+EBP]
+ MOV DWORD [-48+EBP],ECX
+L313:
+ MOV EAX,DWORD [-28+EBP]
+ MOV DWORD [-24+EBP],EAX
+ MOV EAX,DWORD [-48+EBP]
+ MOV DWORD [-28+EBP],EAX
+ JMP L311
+L312:
+ MOV EAX,DWORD [-100+EBP]
+ PUSH DWORD [1104+EAX]
+ PUSH 0
+ MOV EAX,DWORD [-124+EBP]
+ PUSH 113
+ ADD EAX,3596
+ PUSH EAX
+ PUSH DWORD [-100+EBP]
+ CALL _tek_rdget1
+ ADD ESP,20
+ CMP EAX,DWORD [-80+EBP]
+ JE L314
+ MOV EDX,DWORD [-20+EBP]
+ MOV DWORD [-48+EBP],EDX
+L315:
+ MOV EAX,DWORD [-24+EBP]
+ MOV DWORD [-20+EBP],EAX
+ JMP L313
+L314:
+ CMP DWORD [-80+EBP],0
+ JE L351
+L316:
+ MOV ECX,DWORD [-16+EBP]
+ MOV EAX,DWORD [-20+EBP]
+ MOV DWORD [-48+EBP],ECX
+ MOV DWORD [-16+EBP],EAX
+ JMP L315
+L351:
+ MOV EAX,DWORD [-100+EBP]
+ ADD EAX,732
+ PUSH EAX
+ MOV EAX,DWORD [-104+EBP]
+ PUSH 0
+ ADD EAX,7864
+ PUSH 113
+ PUSH EAX
+ PUSH DWORD [-100+EBP]
+ CALL _tek_rdget1
+ ADD ESP,20
+ TEST EAX,EAX
+ JNE L316
+ JMP L213
+L226:
+ MOV EAX,DWORD [-100+EBP]
+ MOV BYTE [60+EAX],5
+ MOV BYTE [61+EAX],3
+ MOV BYTE [92+EAX],9
+ MOV BYTE [93+EAX],2
+ MOV DWORD [12+EAX],-1
+ TEST DWORD [36+EBP],64
+ JE L238
+ MOV BYTE [124+EAX],0
+ MOV BYTE [125+EAX],1
+ MOV EDX,DWORD [-104+EBP]
+ MOV DWORD [8252+EDX],65535
+L238:
+ MOV ECX,DWORD [-100+EBP]
+ MOV BYTE [732+ECX],0
+ MOV BYTE [733+ECX],1
+ MOV EAX,DWORD [-104+EBP]
+ CMP DWORD [36+EBP],-2
+ MOV DWORD [7864+EAX],65535
+ JE L352
+ MOV DWORD [-48+EBP],0
+L250:
+ MOV ECX,DWORD [-48+EBP]
+ MOV AL,BYTE [_pt2.5+ECX]
+ MOV BYTE [-44+EBP+ECX*1],AL
+ INC ECX
+ MOV DWORD [-48+EBP],ECX
+ CMP ECX,13
+ JLE L250
+ MOV ECX,DWORD [36+EBP]
+ MOV AL,9
+ MOV DWORD [-92+EBP],7
+ AND ECX,3
+ SAR DWORD [-92+EBP],CL
+ SAL DWORD [-92+EBP],4
+ OR DWORD [-92+EBP],8
+ TEST DWORD [36+EBP],4
+ SETE DL
+ SUB AL,DL
+ TEST DWORD [36+EBP],8
+ MOV BYTE [-43+EBP],AL
+ MOV AL,13
+ SETE DL
+ SUB AL,DL
+ TEST DWORD [36+EBP],16
+ MOV BYTE [-39+EBP],AL
+ MOV AL,17
+ SETE DL
+ SUB AL,DL
+ TEST DWORD [36+EBP],32
+ MOV BYTE [-35+EBP],AL
+ MOV AL,19
+ SETE DL
+ SUB AL,DL
+ MOV BYTE [-33+EBP],AL
+L245:
+ MOV DWORD [-48+EBP],0
+L263:
+ MOV EDX,DWORD [-48+EBP]
+ MOV ECX,DWORD [-100+EBP]
+ MOVZX EAX,BYTE [-44+EBP+EDX*1]
+ SAL EAX,5
+ LEA EAX,DWORD [28+EAX+ECX*1]
+ MOV DWORD [1052+ECX+EDX*4],EAX
+ INC EDX
+ MOV DWORD [-48+EBP],EDX
+ CMP EDX,13
+ JLE L263
+ JMP L237
+L352:
+ MOV DWORD [752+ECX],0
+ MOV DWORD [-48+EBP],0
+L244:
+ MOV EDX,DWORD [-48+EBP]
+ MOV AL,BYTE [_pt1.4+EDX]
+ MOV BYTE [-44+EBP+EDX*1],AL
+ INC EDX
+ MOV DWORD [-48+EBP],EDX
+ CMP EDX,13
+ JLE L244
+ JMP L245
+L211:
+ ADD EBP,12
+ MOV EAX,1
+ JMP L212
+_tek_decode5:
+ PUSH EBP
+ MOV EBP,ESP
+ PUSH EDI
+ PUSH ESI
+ XOR EDI,EDI
+ MOV EAX,DWORD [12+EBP]
+ PUSH EBX
+ MOV EBX,EAX
+ ADD EAX,16
+ MOV DWORD [12+EBP],EAX
+ ADD EBX,DWORD [8+EBP]
+ LEA EAX,DWORD [12+EBP]
+ PUSH EAX
+ CALL _tek_getnum_s7s
+ POP ECX
+ MOV ESI,EAX
+ TEST EAX,EAX
+ JLE L354
+ LEA EAX,DWORD [12+EBP]
+ PUSH EAX
+ CALL _tek_getnum_s7s
+ POP EDX
+ TEST EAX,1
+ JE L363
+ MOV ECX,EAX
+ MOV EDX,1
+ SAR ECX,1
+ AND ECX,15
+ ADD ECX,8
+ SAL EDX,CL
+ MOV ECX,1
+ TEST EAX,32
+ JNE L353
+ CMP EDX,256
+ JE L361
+ MOV ECX,1
+ CMP ESI,EDX
+ JG L353
+ AND EAX,64
+ JNE L364
+L361:
+ PUSH DWORD [16+EBP]
+ PUSH ESI
+ SUB EBX,DWORD [12+EBP]
+ PUSH DWORD [12+EBP]
+ PUSH EBX
+L362:
+ CALL _tek_lzrestore_tek5
+ ADD ESP,16
+ MOV EDI,EAX
+L354:
+ MOV ECX,EDI
+L353:
+ LEA ESP,DWORD [-12+EBP]
+ MOV EAX,ECX
+ POP EBX
+ POP ESI
+ POP EDI
+ POP EBP
+ RET
+L364:
+ LEA EAX,DWORD [12+EBP]
+ PUSH EAX
+ CALL _tek_getnum_s7s
+ POP EDI
+ JMP L361
+L363:
+ MOV EAX,DWORD [12+EBP]
+ PUSH DWORD [16+EBP]
+ SUB EBX,EAX
+ PUSH ESI
+ LEA EDX,DWORD [-1+EAX]
+ PUSH EDX
+ LEA EAX,DWORD [1+EBX]
+ PUSH EAX
+ JMP L362
--- /dev/null
+/* \83^\83C\83}\8aÖ\8cW */
+
+#include "bootpack.h"
+#include "timer.h"
+#include "naskfunc.h"
+#include "pic.h"
+#include "screen.h"
+#include "ThreadMan.h"
+#define PIT_CTRL 0x0043
+#define PIT_CNT0 0x0040
+
+TIMERCTL timerctl;
+
+void init_pit(void)
+{
+ io_out8(PIT_CTRL, 0x34);
+
+ //0x04A9\82Å\96ñ1ms\82É\88ê\89ñint0x20\82ª\94\8ds\82³\82ê\82é
+ //\82ªqemu\82Å\82Í10ms\88È\89º\82Ì\8eü\8aú\82É\90Ý\92è\82Å\82«\82È\82¢\82ç\82µ\82¢
+ io_out8(PIT_CNT0, 0xA9);
+ io_out8(PIT_CNT0, 0x04);
+ //io_out8(PIT_CNT0, 0x0);
+ //io_out8(PIT_CNT0, 0x0);
+ timerctl.count = 0;
+ timerctl.subcount = 0;
+ return;
+}
+
+extern "C" void inthandler20(int *esp)
+{
+ io_out8(PIC0_OCW2, 0x60); /* IRQ-00\8eó\95t\8a®\97¹\82ðPIC\82É\92Ê\92m */
+ timerctl.subcount++;
+ if(timerctl.subcount >= 55){
+ timerctl.subcount = 0;
+ timerctl.count++;
+ //Screen::Inst().printf("t, %d\n", timerctl.count);
+
+ if(timerctl.count == 50){
+ WORD tr = 2;
+ asm("str [eax]": :"a"(&tr));
+ Screen::Inst().printf("test, %d\n", tr);
+ ThreadMan::Inst().SwitchThread();
+ }
+ }
+ return;
+}
+
+unsigned long long timer_getbiostimer(){
+ return timerctl.count;//\96ñ55sm\82²\82Æ\82É\91\9d\82â\82¹\82Î\82æ\82¢
+}
--- /dev/null
+#pragma once
+
+void init_pit(void);
+unsigned long long timer_getbiostimer();
+
+struct TIMERCTL{
+ unsigned long count;
+ unsigned long subcount;
+};
--- /dev/null
+ 1 00000000 [FORMAT "WCOFF"]
+ 2 00000000 [INSTRSET "i486p"]
+ 3 00000000 [OPTIMIZE 1]
+ 4 00000000 [OPTION 1]
+ 5 00000000 [BITS 32]
+ 6 00000000 EXTERN _io_out8
+ 7 00000000 EXTERN _io_load_eflags
+ 8 00000000 EXTERN _io_cli
+ 9 00000000 EXTERN _io_store_eflags
+ 10 00000000 EXTERN _task_timer
+ 11 00000000 EXTERN _fifo32_put
+ 12 00000000 EXTERN _task_switch
+ 13 00000000 [FILE "timer.c"]
+ 14 [SECTION .text]
+ 15 00000000 GLOBAL _init_pit
+ 16 00000000 _init_pit:
+ 17 00000000 55 PUSH EBP
+ 18 00000001 89 E5 MOV EBP,ESP
+ 19 00000003 6A 34 PUSH 52
+ 20 00000005 6A 43 PUSH 67
+ 21 00000007 E8 [00000000] CALL _io_out8
+ 22 0000000C 68 0000009C PUSH 156
+ 23 00000011 6A 40 PUSH 64
+ 24 00000013 E8 [00000000] CALL _io_out8
+ 25 00000018 6A 2E PUSH 46
+ 26 0000001A 6A 40 PUSH 64
+ 27 0000001C E8 [00000000] CALL _io_out8
+ 28 00000021 BA [00002710] MOV EDX,_timerctl+10000
+ 29 00000026 C7 05 [00000000] 00000000 MOV DWORD [_timerctl],0
+ 30 00000030 83 C4 18 ADD ESP,24
+ 31 00000033 B8 [00000014] MOV EAX,_timerctl+20
+ 32 00000038 L6:
+ 33 00000038 C6 00 00 MOV BYTE [EAX],0
+ 34 0000003B 83 C0 14 ADD EAX,20
+ 35 0000003E 39 D0 CMP EAX,EDX
+ 36 00000040 7E F6 JLE L6
+ 37 00000042 E8 00000022 CALL _timer_alloc
+ 38 00000047 C6 40 08 02 MOV BYTE [8+EAX],2
+ 39 0000004B C7 40 04 FFFFFFFF MOV DWORD [4+EAX],-1
+ 40 00000052 C7 00 00000000 MOV DWORD [EAX],0
+ 41 00000058 A3 [00000008] MOV DWORD [_timerctl+8],EAX
+ 42 0000005D C7 05 [00000004] FFFFFFFF MOV DWORD [_timerctl+4],-1
+ 43 00000067 C9 LEAVE
+ 44 00000068 C3 RET
+ 45 00000069 GLOBAL _timer_alloc
+ 46 00000069 _timer_alloc:
+ 47 00000069 55 PUSH EBP
+ 48 0000006A 31 D2 XOR EDX,EDX
+ 49 0000006C 89 E5 MOV EBP,ESP
+ 50 0000006E B8 [0000000C] MOV EAX,_timerctl+12
+ 51 00000073 L15:
+ 52 00000073 80 78 08 00 CMP BYTE [8+EAX],0
+ 53 00000077 74 10 JE L18
+ 54 00000079 42 INC EDX
+ 55 0000007A 83 C0 14 ADD EAX,20
+ 56 0000007D 81 FA 000001F3 CMP EDX,499
+ 57 00000083 7E EE JLE L15
+ 58 00000085 31 C0 XOR EAX,EAX
+ 59 00000087 L9:
+ 60 00000087 5D POP EBP
+ 61 00000088 C3 RET
+ 62 00000089 L18:
+ 63 00000089 C6 40 08 01 MOV BYTE [8+EAX],1
+ 64 0000008D C6 40 09 00 MOV BYTE [9+EAX],0
+ 65 00000091 EB F4 JMP L9
+ 66 00000093 GLOBAL _timer_free
+ 67 00000093 _timer_free:
+ 68 00000093 55 PUSH EBP
+ 69 00000094 89 E5 MOV EBP,ESP
+ 70 00000096 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 71 00000099 C6 40 08 00 MOV BYTE [8+EAX],0
+ 72 0000009D 5D POP EBP
+ 73 0000009E C3 RET
+ 74 0000009F GLOBAL _timer_init
+ 75 0000009F _timer_init:
+ 76 0000009F 55 PUSH EBP
+ 77 000000A0 89 E5 MOV EBP,ESP
+ 78 000000A2 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 79 000000A5 8B 55 0C MOV EDX,DWORD [12+EBP]
+ 80 000000A8 89 50 0C MOV DWORD [12+EAX],EDX
+ 81 000000AB 8B 55 10 MOV EDX,DWORD [16+EBP]
+ 82 000000AE 89 50 10 MOV DWORD [16+EAX],EDX
+ 83 000000B1 5D POP EBP
+ 84 000000B2 C3 RET
+ 85 000000B3 GLOBAL _timer_settime
+ 86 000000B3 _timer_settime:
+ 87 000000B3 55 PUSH EBP
+ 88 000000B4 A1 [00000000] MOV EAX,DWORD [_timerctl]
+ 89 000000B9 89 E5 MOV EBP,ESP
+ 90 000000BB 56 PUSH ESI
+ 91 000000BC 53 PUSH EBX
+ 92 000000BD 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 93 000000C0 03 45 0C ADD EAX,DWORD [12+EBP]
+ 94 000000C3 C6 43 08 02 MOV BYTE [8+EBX],2
+ 95 000000C7 89 43 04 MOV DWORD [4+EBX],EAX
+ 96 000000CA E8 [00000000] CALL _io_load_eflags
+ 97 000000CF 89 C6 MOV ESI,EAX
+ 98 000000D1 E8 [00000000] CALL _io_cli
+ 99 000000D6 A1 [00000008] MOV EAX,DWORD [_timerctl+8]
+ 100 000000DB 8B 53 04 MOV EDX,DWORD [4+EBX]
+ 101 000000DE 3B 50 04 CMP EDX,DWORD [4+EAX]
+ 102 000000E1 76 18 JBE L28
+ 103 000000E3 L23:
+ 104 000000E3 89 C1 MOV ECX,EAX
+ 105 000000E5 8B 00 MOV EAX,DWORD [EAX]
+ 106 000000E7 3B 50 04 CMP EDX,DWORD [4+EAX]
+ 107 000000EA 77 F7 JA L23
+ 108 000000EC 89 19 MOV DWORD [ECX],EBX
+ 109 000000EE 89 03 MOV DWORD [EBX],EAX
+ 110 000000F0 L27:
+ 111 000000F0 89 75 08 MOV DWORD [8+EBP],ESI
+ 112 000000F3 5B POP EBX
+ 113 000000F4 5E POP ESI
+ 114 000000F5 5D POP EBP
+ 115 000000F6 E9 [00000000] JMP _io_store_eflags
+ 116 000000FB L28:
+ 117 000000FB 89 1D [00000008] MOV DWORD [_timerctl+8],EBX
+ 118 00000101 89 15 [00000004] MOV DWORD [_timerctl+4],EDX
+ 119 00000107 89 03 MOV DWORD [EBX],EAX
+ 120 00000109 EB E5 JMP L27
+ 121 0000010B GLOBAL _inthandler20
+ 122 0000010B _inthandler20:
+ 123 0000010B 55 PUSH EBP
+ 124 0000010C 89 E5 MOV EBP,ESP
+ 125 0000010E 56 PUSH ESI
+ 126 0000010F 53 PUSH EBX
+ 127 00000110 31 F6 XOR ESI,ESI
+ 128 00000112 6A 60 PUSH 96
+ 129 00000114 6A 20 PUSH 32
+ 130 00000116 E8 [00000000] CALL _io_out8
+ 131 0000011B A1 [00000000] MOV EAX,DWORD [_timerctl]
+ 132 00000120 40 INC EAX
+ 133 00000121 A3 [00000000] MOV DWORD [_timerctl],EAX
+ 134 00000126 39 05 [00000004] CMP DWORD [_timerctl+4],EAX
+ 135 0000012C 59 POP ECX
+ 136 0000012D 5B POP EBX
+ 137 0000012E 77 46 JA L29
+ 138 00000130 8B 1D [00000008] MOV EBX,DWORD [_timerctl+8]
+ 139 00000136 L31:
+ 140 00000136 8B 43 04 MOV EAX,DWORD [4+EBX]
+ 141 00000139 3B 05 [00000000] CMP EAX,DWORD [_timerctl]
+ 142 0000013F 77 24 JA L32
+ 143 00000141 C6 43 08 01 MOV BYTE [8+EBX],1
+ 144 00000145 3B 1D [00000000] CMP EBX,DWORD [_task_timer]
+ 145 0000014B 74 11 JE L35
+ 146 0000014D FF 73 10 PUSH DWORD [16+EBX]
+ 147 00000150 FF 73 0C PUSH DWORD [12+EBX]
+ 148 00000153 E8 [00000000] CALL _fifo32_put
+ 149 00000158 58 POP EAX
+ 150 00000159 5A POP EDX
+ 151 0000015A L36:
+ 152 0000015A 8B 1B MOV EBX,DWORD [EBX]
+ 153 0000015C EB D8 JMP L31
+ 154 0000015E L35:
+ 155 0000015E BE 00000001 MOV ESI,1
+ 156 00000163 EB F5 JMP L36
+ 157 00000165 L32:
+ 158 00000165 A3 [00000004] MOV DWORD [_timerctl+4],EAX
+ 159 0000016A 89 1D [00000008] MOV DWORD [_timerctl+8],EBX
+ 160 00000170 89 F0 MOV EAX,ESI
+ 161 00000172 84 C0 TEST AL,AL
+ 162 00000174 75 07 JNE L38
+ 163 00000176 L29:
+ 164 00000176 8D 65 F8 LEA ESP,DWORD [-8+EBP]
+ 165 00000179 5B POP EBX
+ 166 0000017A 5E POP ESI
+ 167 0000017B 5D POP EBP
+ 168 0000017C C3 RET
+ 169 0000017D L38:
+ 170 0000017D 8D 65 F8 LEA ESP,DWORD [-8+EBP]
+ 171 00000180 5B POP EBX
+ 172 00000181 5E POP ESI
+ 173 00000182 5D POP EBP
+ 174 00000183 E9 [00000000] JMP _task_switch
+ 175 00000188 GLOBAL _timer_cancel
+ 176 00000188 _timer_cancel:
+ 177 00000188 55 PUSH EBP
+ 178 00000189 89 E5 MOV EBP,ESP
+ 179 0000018B 56 PUSH ESI
+ 180 0000018C 53 PUSH EBX
+ 181 0000018D 8B 5D 08 MOV EBX,DWORD [8+EBP]
+ 182 00000190 E8 [00000000] CALL _io_load_eflags
+ 183 00000195 89 C6 MOV ESI,EAX
+ 184 00000197 E8 [00000000] CALL _io_cli
+ 185 0000019C 80 7B 08 02 CMP BYTE [8+EBX],2
+ 186 000001A0 74 0F JE L47
+ 187 000001A2 56 PUSH ESI
+ 188 000001A3 E8 [00000000] CALL _io_store_eflags
+ 189 000001A8 31 C0 XOR EAX,EAX
+ 190 000001AA L39:
+ 191 000001AA 8D 65 F8 LEA ESP,DWORD [-8+EBP]
+ 192 000001AD 5B POP EBX
+ 193 000001AE 5E POP ESI
+ 194 000001AF 5D POP EBP
+ 195 000001B0 C3 RET
+ 196 000001B1 L47:
+ 197 000001B1 A1 [00000008] MOV EAX,DWORD [_timerctl+8]
+ 198 000001B6 39 C3 CMP EBX,EAX
+ 199 000001B8 74 1D JE L48
+ 200 000001BA L41:
+ 201 000001BA 89 C2 MOV EDX,EAX
+ 202 000001BC 8B 00 MOV EAX,DWORD [EAX]
+ 203 000001BE 39 D8 CMP EAX,EBX
+ 204 000001C0 75 F8 JNE L41
+ 205 000001C2 8B 03 MOV EAX,DWORD [EBX]
+ 206 000001C4 89 02 MOV DWORD [EDX],EAX
+ 207 000001C6 L42:
+ 208 000001C6 C6 43 08 01 MOV BYTE [8+EBX],1
+ 209 000001CA 56 PUSH ESI
+ 210 000001CB E8 [00000000] CALL _io_store_eflags
+ 211 000001D0 B8 00000001 MOV EAX,1
+ 212 000001D5 EB D3 JMP L39
+ 213 000001D7 L48:
+ 214 000001D7 8B 13 MOV EDX,DWORD [EBX]
+ 215 000001D9 89 15 [00000008] MOV DWORD [_timerctl+8],EDX
+ 216 000001DF 8B 42 04 MOV EAX,DWORD [4+EDX]
+ 217 000001E2 A3 [00000004] MOV DWORD [_timerctl+4],EAX
+ 218 000001E7 EB DD JMP L42
+ 219 000001E9 GLOBAL _timer_cancelall
+ 220 000001E9 _timer_cancelall:
+ 221 000001E9 55 PUSH EBP
+ 222 000001EA 89 E5 MOV EBP,ESP
+ 223 000001EC 57 PUSH EDI
+ 224 000001ED 56 PUSH ESI
+ 225 000001EE 53 PUSH EBX
+ 226 000001EF BB [0000000C] MOV EBX,_timerctl+12
+ 227 000001F4 8B 7D 08 MOV EDI,DWORD [8+EBP]
+ 228 000001F7 E8 [00000000] CALL _io_load_eflags
+ 229 000001FC 89 C6 MOV ESI,EAX
+ 230 000001FE E8 [00000000] CALL _io_cli
+ 231 00000203 L55:
+ 232 00000203 80 7B 08 00 CMP BYTE [8+EBX],0
+ 233 00000207 74 0B JE L52
+ 234 00000209 80 7B 09 00 CMP BYTE [9+EBX],0
+ 235 0000020D 74 05 JE L52
+ 236 0000020F 39 7B 0C CMP DWORD [12+EBX],EDI
+ 237 00000212 74 1A JE L58
+ 238 00000214 L52:
+ 239 00000214 83 C3 14 ADD EBX,20
+ 240 00000217 81 FB [00002708] CMP EBX,_timerctl+9992
+ 241 0000021D 7E E4 JLE L55
+ 242 0000021F 89 75 08 MOV DWORD [8+EBP],ESI
+ 243 00000222 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 244 00000225 5B POP EBX
+ 245 00000226 5E POP ESI
+ 246 00000227 5F POP EDI
+ 247 00000228 5D POP EBP
+ 248 00000229 E9 [00000000] JMP _io_store_eflags
+ 249 0000022E L58:
+ 250 0000022E 53 PUSH EBX
+ 251 0000022F E8 FFFFFF54 CALL _timer_cancel
+ 252 00000234 53 PUSH EBX
+ 253 00000235 E8 FFFFFE59 CALL _timer_free
+ 254 0000023A 58 POP EAX
+ 255 0000023B 5A POP EDX
+ 256 0000023C EB D6 JMP L52
+ 257 0000023E GLOBAL _timerctl
+ 258 [SECTION .data]
+ 259 00000000 ALIGNB 16
+ 260 00000000 _timerctl:
+ 261 00000000 00 00 00 00 00 00 00 00 00 00 RESB 10012
+ 0000000A 00 00 00 00 00 00 00 00 00 00
+ 00000014 00 00 00 00 00 00 00 00 00 00
+ 0000001E 00 00 00 00 00 00 00 00 00 00
+ 00000028 00 00 00 00 00 00 00 00 00 00
+ 00000032 00 00 00 00 00 00 00 00 00 00
+ 0000003C 00 00 00 00 00 00 00 00 00 00
+ 00000046 00 00 00 00 00 00 00 00 00 00
+ 00000050 00 00 00 00 00 00 00 00 00 00
+ 0000005A 00 00 00 00 00 00 00 00 00 00
+ 00000064 00 00 00 00 00 00 00 00 00 00
+ 0000006E 00 00 00 00 00 00 00 00 00 00
+ 00000078 00 00 00 00 00 00 00 00 00 00
+ 00000082 00 00 00 00 00 00 00 00 00 00
+ 0000008C 00 00 00 00 00 00 00 00 00 00
+ 00000096 00 00 00 00 00 00 00 00 00 00
+ 000000A0 00 00 00 00 00 00 00 00 00 00
+ 000000AA 00 00 00 00 00 00 00 00 00 00
+ 000000B4 00 00 00 00 00 00 00 00 00 00
+ 000000BE 00 00 00 00 00 00 00 00 00 00
+ 000000C8 00 00 00 00 00 00 00 00 00 00
+ 000000D2 00 00 00 00 00 00 00 00 00 00
+ 000000DC 00 00 00 00 00 00 00 00 00 00
+ 000000E6 00 00 00 00 00 00 00 00 00 00
+ 000000F0 00 00 00 00 00 00 00 00 00 00
+ 000000FA 00 00 00 00 00 00 00 00 00 00
+ 00000104 00 00 00 00 00 00 00 00 00 00
+ 0000010E 00 00 00 00 00 00 00 00 00 00
+ 00000118 00 00 00 00 00 00 00 00 00 00
+ 00000122 00 00 00 00 00 00 00 00 00 00
+ 0000012C 00 00 00 00 00 00 00 00 00 00
+ 00000136 00 00 00 00 00 00 00 00 00 00
+ 00000140 00 00 00 00 00 00 00 00 00 00
+ 0000014A 00 00 00 00 00 00 00 00 00 00
+ 00000154 00 00 00 00 00 00 00 00 00 00
+ 0000015E 00 00 00 00 00 00 00 00 00 00
+ 00000168 00 00 00 00 00 00 00 00 00 00
+ 00000172 00 00 00 00 00 00 00 00 00 00
+ 0000017C 00 00 00 00 00 00 00 00 00 00
+ 00000186 00 00 00 00 00 00 00 00 00 00
+ 00000190 00 00 00 00 00 00 00 00 00 00
+ 0000019A 00 00 00 00 00 00 00 00 00 00
+ 000001A4 00 00 00 00 00 00 00 00 00 00
+ 000001AE 00 00 00 00 00 00 00 00 00 00
+ 000001B8 00 00 00 00 00 00 00 00 00 00
+ 000001C2 00 00 00 00 00 00 00 00 00 00
+ 000001CC 00 00 00 00 00 00 00 00 00 00
+ 000001D6 00 00 00 00 00 00 00 00 00 00
+ 000001E0 00 00 00 00 00 00 00 00 00 00
+ 000001EA 00 00 00 00 00 00 00 00 00 00
+ 000001F4 00 00 00 00 00 00 00 00 00 00
+ 000001FE 00 00 00 00 00 00 00 00 00 00
+ 00000208 00 00 00 00 00 00 00 00 00 00
+ 00000212 00 00 00 00 00 00 00 00 00 00
+ 0000021C 00 00 00 00 00 00 00 00 00 00
+ 00000226 00 00 00 00 00 00 00 00 00 00
+ 00000230 00 00 00 00 00 00 00 00 00 00
+ 0000023A 00 00 00 00 00 00 00 00 00 00
+ 00000244 00 00 00 00 00 00 00 00 00 00
+ 0000024E 00 00 00 00 00 00 00 00 00 00
+ 00000258 00 00 00 00 00 00 00 00 00 00
+ 00000262 00 00 00 00 00 00 00 00 00 00
+ 0000026C 00 00 00 00 00 00 00 00 00 00
+ 00000276 00 00 00 00 00 00 00 00 00 00
+ 00000280 00 00 00 00 00 00 00 00 00 00
+ 0000028A 00 00 00 00 00 00 00 00 00 00
+ 00000294 00 00 00 00 00 00 00 00 00 00
+ 0000029E 00 00 00 00 00 00 00 00 00 00
+ 000002A8 00 00 00 00 00 00 00 00 00 00
+ 000002B2 00 00 00 00 00 00 00 00 00 00
+ 000002BC 00 00 00 00 00 00 00 00 00 00
+ 000002C6 00 00 00 00 00 00 00 00 00 00
+ 000002D0 00 00 00 00 00 00 00 00 00 00
+ 000002DA 00 00 00 00 00 00 00 00 00 00
+ 000002E4 00 00 00 00 00 00 00 00 00 00
+ 000002EE 00 00 00 00 00 00 00 00 00 00
+ 000002F8 00 00 00 00 00 00 00 00 00 00
+ 00000302 00 00 00 00 00 00 00 00 00 00
+ 0000030C 00 00 00 00 00 00 00 00 00 00
+ 00000316 00 00 00 00 00 00 00 00 00 00
+ 00000320 00 00 00 00 00 00 00 00 00 00
+ 0000032A 00 00 00 00 00 00 00 00 00 00
+ 00000334 00 00 00 00 00 00 00 00 00 00
+ 0000033E 00 00 00 00 00 00 00 00 00 00
+ 00000348 00 00 00 00 00 00 00 00 00 00
+ 00000352 00 00 00 00 00 00 00 00 00 00
+ 0000035C 00 00 00 00 00 00 00 00 00 00
+ 00000366 00 00 00 00 00 00 00 00 00 00
+ 00000370 00 00 00 00 00 00 00 00 00 00
+ 0000037A 00 00 00 00 00 00 00 00 00 00
+ 00000384 00 00 00 00 00 00 00 00 00 00
+ 0000038E 00 00 00 00 00 00 00 00 00 00
+ 00000398 00 00 00 00 00 00 00 00 00 00
+ 000003A2 00 00 00 00 00 00 00 00 00 00
+ 000003AC 00 00 00 00 00 00 00 00 00 00
+ 000003B6 00 00 00 00 00 00 00 00 00 00
+ 000003C0 00 00 00 00 00 00 00 00 00 00
+ 000003CA 00 00 00 00 00 00 00 00 00 00
+ 000003D4 00 00 00 00 00 00 00 00 00 00
+ 000003DE 00 00 00 00 00 00 00 00 00 00
+ 000003E8 00 00 00 00 00 00 00 00 00 00
+ 000003F2 00 00 00 00 00 00 00 00 00 00
+ 000003FC 00 00 00 00 00 00 00 00 00 00
+ 00000406 00 00 00 00 00 00 00 00 00 00
+ 00000410 00 00 00 00 00 00 00 00 00 00
+ 0000041A 00 00 00 00 00 00 00 00 00 00
+ 00000424 00 00 00 00 00 00 00 00 00 00
+ 0000042E 00 00 00 00 00 00 00 00 00 00
+ 00000438 00 00 00 00 00 00 00 00 00 00
+ 00000442 00 00 00 00 00 00 00 00 00 00
+ 0000044C 00 00 00 00 00 00 00 00 00 00
+ 00000456 00 00 00 00 00 00 00 00 00 00
+ 00000460 00 00 00 00 00 00 00 00 00 00
+ 0000046A 00 00 00 00 00 00 00 00 00 00
+ 00000474 00 00 00 00 00 00 00 00 00 00
+ 0000047E 00 00 00 00 00 00 00 00 00 00
+ 00000488 00 00 00 00 00 00 00 00 00 00
+ 00000492 00 00 00 00 00 00 00 00 00 00
+ 0000049C 00 00 00 00 00 00 00 00 00 00
+ 000004A6 00 00 00 00 00 00 00 00 00 00
+ 000004B0 00 00 00 00 00 00 00 00 00 00
+ 000004BA 00 00 00 00 00 00 00 00 00 00
+ 000004C4 00 00 00 00 00 00 00 00 00 00
+ 000004CE 00 00 00 00 00 00 00 00 00 00
+ 000004D8 00 00 00 00 00 00 00 00 00 00
+ 000004E2 00 00 00 00 00 00 00 00 00 00
+ 000004EC 00 00 00 00 00 00 00 00 00 00
+ 000004F6 00 00 00 00 00 00 00 00 00 00
+ 00000500 00 00 00 00 00 00 00 00 00 00
+ 0000050A 00 00 00 00 00 00 00 00 00 00
+ 00000514 00 00 00 00 00 00 00 00 00 00
+ 0000051E 00 00 00 00 00 00 00 00 00 00
+ 00000528 00 00 00 00 00 00 00 00 00 00
+ 00000532 00 00 00 00 00 00 00 00 00 00
+ 0000053C 00 00 00 00 00 00 00 00 00 00
+ 00000546 00 00 00 00 00 00 00 00 00 00
+ 00000550 00 00 00 00 00 00 00 00 00 00
+ 0000055A 00 00 00 00 00 00 00 00 00 00
+ 00000564 00 00 00 00 00 00 00 00 00 00
+ 0000056E 00 00 00 00 00 00 00 00 00 00
+ 00000578 00 00 00 00 00 00 00 00 00 00
+ 00000582 00 00 00 00 00 00 00 00 00 00
+ 0000058C 00 00 00 00 00 00 00 00 00 00
+ 00000596 00 00 00 00 00 00 00 00 00 00
+ 000005A0 00 00 00 00 00 00 00 00 00 00
+ 000005AA 00 00 00 00 00 00 00 00 00 00
+ 000005B4 00 00 00 00 00 00 00 00 00 00
+ 000005BE 00 00 00 00 00 00 00 00 00 00
+ 000005C8 00 00 00 00 00 00 00 00 00 00
+ 000005D2 00 00 00 00 00 00 00 00 00 00
+ 000005DC 00 00 00 00 00 00 00 00 00 00
+ 000005E6 00 00 00 00 00 00 00 00 00 00
+ 000005F0 00 00 00 00 00 00 00 00 00 00
+ 000005FA 00 00 00 00 00 00 00 00 00 00
+ 00000604 00 00 00 00 00 00 00 00 00 00
+ 0000060E 00 00 00 00 00 00 00 00 00 00
+ 00000618 00 00 00 00 00 00 00 00 00 00
+ 00000622 00 00 00 00 00 00 00 00 00 00
+ 0000062C 00 00 00 00 00 00 00 00 00 00
+ 00000636 00 00 00 00 00 00 00 00 00 00
+ 00000640 00 00 00 00 00 00 00 00 00 00
+ 0000064A 00 00 00 00 00 00 00 00 00 00
+ 00000654 00 00 00 00 00 00 00 00 00 00
+ 0000065E 00 00 00 00 00 00 00 00 00 00
+ 00000668 00 00 00 00 00 00 00 00 00 00
+ 00000672 00 00 00 00 00 00 00 00 00 00
+ 0000067C 00 00 00 00 00 00 00 00 00 00
+ 00000686 00 00 00 00 00 00 00 00 00 00
+ 00000690 00 00 00 00 00 00 00 00 00 00
+ 0000069A 00 00 00 00 00 00 00 00 00 00
+ 000006A4 00 00 00 00 00 00 00 00 00 00
+ 000006AE 00 00 00 00 00 00 00 00 00 00
+ 000006B8 00 00 00 00 00 00 00 00 00 00
+ 000006C2 00 00 00 00 00 00 00 00 00 00
+ 000006CC 00 00 00 00 00 00 00 00 00 00
+ 000006D6 00 00 00 00 00 00 00 00 00 00
+ 000006E0 00 00 00 00 00 00 00 00 00 00
+ 000006EA 00 00 00 00 00 00 00 00 00 00
+ 000006F4 00 00 00 00 00 00 00 00 00 00
+ 000006FE 00 00 00 00 00 00 00 00 00 00
+ 00000708 00 00 00 00 00 00 00 00 00 00
+ 00000712 00 00 00 00 00 00 00 00 00 00
+ 0000071C 00 00 00 00 00 00 00 00 00 00
+ 00000726 00 00 00 00 00 00 00 00 00 00
+ 00000730 00 00 00 00 00 00 00 00 00 00
+ 0000073A 00 00 00 00 00 00 00 00 00 00
+ 00000744 00 00 00 00 00 00 00 00 00 00
+ 0000074E 00 00 00 00 00 00 00 00 00 00
+ 00000758 00 00 00 00 00 00 00 00 00 00
+ 00000762 00 00 00 00 00 00 00 00 00 00
+ 0000076C 00 00 00 00 00 00 00 00 00 00
+ 00000776 00 00 00 00 00 00 00 00 00 00
+ 00000780 00 00 00 00 00 00 00 00 00 00
+ 0000078A 00 00 00 00 00 00 00 00 00 00
+ 00000794 00 00 00 00 00 00 00 00 00 00
+ 0000079E 00 00 00 00 00 00 00 00 00 00
+ 000007A8 00 00 00 00 00 00 00 00 00 00
+ 000007B2 00 00 00 00 00 00 00 00 00 00
+ 000007BC 00 00 00 00 00 00 00 00 00 00
+ 000007C6 00 00 00 00 00 00 00 00 00 00
+ 000007D0 00 00 00 00 00 00 00 00 00 00
+ 000007DA 00 00 00 00 00 00 00 00 00 00
+ 000007E4 00 00 00 00 00 00 00 00 00 00
+ 000007EE 00 00 00 00 00 00 00 00 00 00
+ 000007F8 00 00 00 00 00 00 00 00 00 00
+ 00000802 00 00 00 00 00 00 00 00 00 00
+ 0000080C 00 00 00 00 00 00 00 00 00 00
+ 00000816 00 00 00 00 00 00 00 00 00 00
+ 00000820 00 00 00 00 00 00 00 00 00 00
+ 0000082A 00 00 00 00 00 00 00 00 00 00
+ 00000834 00 00 00 00 00 00 00 00 00 00
+ 0000083E 00 00 00 00 00 00 00 00 00 00
+ 00000848 00 00 00 00 00 00 00 00 00 00
+ 00000852 00 00 00 00 00 00 00 00 00 00
+ 0000085C 00 00 00 00 00 00 00 00 00 00
+ 00000866 00 00 00 00 00 00 00 00 00 00
+ 00000870 00 00 00 00 00 00 00 00 00 00
+ 0000087A 00 00 00 00 00 00 00 00 00 00
+ 00000884 00 00 00 00 00 00 00 00 00 00
+ 0000088E 00 00 00 00 00 00 00 00 00 00
+ 00000898 00 00 00 00 00 00 00 00 00 00
+ 000008A2 00 00 00 00 00 00 00 00 00 00
+ 000008AC 00 00 00 00 00 00 00 00 00 00
+ 000008B6 00 00 00 00 00 00 00 00 00 00
+ 000008C0 00 00 00 00 00 00 00 00 00 00
+ 000008CA 00 00 00 00 00 00 00 00 00 00
+ 000008D4 00 00 00 00 00 00 00 00 00 00
+ 000008DE 00 00 00 00 00 00 00 00 00 00
+ 000008E8 00 00 00 00 00 00 00 00 00 00
+ 000008F2 00 00 00 00 00 00 00 00 00 00
+ 000008FC 00 00 00 00 00 00 00 00 00 00
+ 00000906 00 00 00 00 00 00 00 00 00 00
+ 00000910 00 00 00 00 00 00 00 00 00 00
+ 0000091A 00 00 00 00 00 00 00 00 00 00
+ 00000924 00 00 00 00 00 00 00 00 00 00
+ 0000092E 00 00 00 00 00 00 00 00 00 00
+ 00000938 00 00 00 00 00 00 00 00 00 00
+ 00000942 00 00 00 00 00 00 00 00 00 00
+ 0000094C 00 00 00 00 00 00 00 00 00 00
+ 00000956 00 00 00 00 00 00 00 00 00 00
+ 00000960 00 00 00 00 00 00 00 00 00 00
+ 0000096A 00 00 00 00 00 00 00 00 00 00
+ 00000974 00 00 00 00 00 00 00 00 00 00
+ 0000097E 00 00 00 00 00 00 00 00 00 00
+ 00000988 00 00 00 00 00 00 00 00 00 00
+ 00000992 00 00 00 00 00 00 00 00 00 00
+ 0000099C 00 00 00 00 00 00 00 00 00 00
+ 000009A6 00 00 00 00 00 00 00 00 00 00
+ 000009B0 00 00 00 00 00 00 00 00 00 00
+ 000009BA 00 00 00 00 00 00 00 00 00 00
+ 000009C4 00 00 00 00 00 00 00 00 00 00
+ 000009CE 00 00 00 00 00 00 00 00 00 00
+ 000009D8 00 00 00 00 00 00 00 00 00 00
+ 000009E2 00 00 00 00 00 00 00 00 00 00
+ 000009EC 00 00 00 00 00 00 00 00 00 00
+ 000009F6 00 00 00 00 00 00 00 00 00 00
+ 00000A00 00 00 00 00 00 00 00 00 00 00
+ 00000A0A 00 00 00 00 00 00 00 00 00 00
+ 00000A14 00 00 00 00 00 00 00 00 00 00
+ 00000A1E 00 00 00 00 00 00 00 00 00 00
+ 00000A28 00 00 00 00 00 00 00 00 00 00
+ 00000A32 00 00 00 00 00 00 00 00 00 00
+ 00000A3C 00 00 00 00 00 00 00 00 00 00
+ 00000A46 00 00 00 00 00 00 00 00 00 00
+ 00000A50 00 00 00 00 00 00 00 00 00 00
+ 00000A5A 00 00 00 00 00 00 00 00 00 00
+ 00000A64 00 00 00 00 00 00 00 00 00 00
+ 00000A6E 00 00 00 00 00 00 00 00 00 00
+ 00000A78 00 00 00 00 00 00 00 00 00 00
+ 00000A82 00 00 00 00 00 00 00 00 00 00
+ 00000A8C 00 00 00 00 00 00 00 00 00 00
+ 00000A96 00 00 00 00 00 00 00 00 00 00
+ 00000AA0 00 00 00 00 00 00 00 00 00 00
+ 00000AAA 00 00 00 00 00 00 00 00 00 00
+ 00000AB4 00 00 00 00 00 00 00 00 00 00
+ 00000ABE 00 00 00 00 00 00 00 00 00 00
+ 00000AC8 00 00 00 00 00 00 00 00 00 00
+ 00000AD2 00 00 00 00 00 00 00 00 00 00
+ 00000ADC 00 00 00 00 00 00 00 00 00 00
+ 00000AE6 00 00 00 00 00 00 00 00 00 00
+ 00000AF0 00 00 00 00 00 00 00 00 00 00
+ 00000AFA 00 00 00 00 00 00 00 00 00 00
+ 00000B04 00 00 00 00 00 00 00 00 00 00
+ 00000B0E 00 00 00 00 00 00 00 00 00 00
+ 00000B18 00 00 00 00 00 00 00 00 00 00
+ 00000B22 00 00 00 00 00 00 00 00 00 00
+ 00000B2C 00 00 00 00 00 00 00 00 00 00
+ 00000B36 00 00 00 00 00 00 00 00 00 00
+ 00000B40 00 00 00 00 00 00 00 00 00 00
+ 00000B4A 00 00 00 00 00 00 00 00 00 00
+ 00000B54 00 00 00 00 00 00 00 00 00 00
+ 00000B5E 00 00 00 00 00 00 00 00 00 00
+ 00000B68 00 00 00 00 00 00 00 00 00 00
+ 00000B72 00 00 00 00 00 00 00 00 00 00
+ 00000B7C 00 00 00 00 00 00 00 00 00 00
+ 00000B86 00 00 00 00 00 00 00 00 00 00
+ 00000B90 00 00 00 00 00 00 00 00 00 00
+ 00000B9A 00 00 00 00 00 00 00 00 00 00
+ 00000BA4 00 00 00 00 00 00 00 00 00 00
+ 00000BAE 00 00 00 00 00 00 00 00 00 00
+ 00000BB8 00 00 00 00 00 00 00 00 00 00
+ 00000BC2 00 00 00 00 00 00 00 00 00 00
+ 00000BCC 00 00 00 00 00 00 00 00 00 00
+ 00000BD6 00 00 00 00 00 00 00 00 00 00
+ 00000BE0 00 00 00 00 00 00 00 00 00 00
+ 00000BEA 00 00 00 00 00 00 00 00 00 00
+ 00000BF4 00 00 00 00 00 00 00 00 00 00
+ 00000BFE 00 00 00 00 00 00 00 00 00 00
+ 00000C08 00 00 00 00 00 00 00 00 00 00
+ 00000C12 00 00 00 00 00 00 00 00 00 00
+ 00000C1C 00 00 00 00 00 00 00 00 00 00
+ 00000C26 00 00 00 00 00 00 00 00 00 00
+ 00000C30 00 00 00 00 00 00 00 00 00 00
+ 00000C3A 00 00 00 00 00 00 00 00 00 00
+ 00000C44 00 00 00 00 00 00 00 00 00 00
+ 00000C4E 00 00 00 00 00 00 00 00 00 00
+ 00000C58 00 00 00 00 00 00 00 00 00 00
+ 00000C62 00 00 00 00 00 00 00 00 00 00
+ 00000C6C 00 00 00 00 00 00 00 00 00 00
+ 00000C76 00 00 00 00 00 00 00 00 00 00
+ 00000C80 00 00 00 00 00 00 00 00 00 00
+ 00000C8A 00 00 00 00 00 00 00 00 00 00
+ 00000C94 00 00 00 00 00 00 00 00 00 00
+ 00000C9E 00 00 00 00 00 00 00 00 00 00
+ 00000CA8 00 00 00 00 00 00 00 00 00 00
+ 00000CB2 00 00 00 00 00 00 00 00 00 00
+ 00000CBC 00 00 00 00 00 00 00 00 00 00
+ 00000CC6 00 00 00 00 00 00 00 00 00 00
+ 00000CD0 00 00 00 00 00 00 00 00 00 00
+ 00000CDA 00 00 00 00 00 00 00 00 00 00
+ 00000CE4 00 00 00 00 00 00 00 00 00 00
+ 00000CEE 00 00 00 00 00 00 00 00 00 00
+ 00000CF8 00 00 00 00 00 00 00 00 00 00
+ 00000D02 00 00 00 00 00 00 00 00 00 00
+ 00000D0C 00 00 00 00 00 00 00 00 00 00
+ 00000D16 00 00 00 00 00 00 00 00 00 00
+ 00000D20 00 00 00 00 00 00 00 00 00 00
+ 00000D2A 00 00 00 00 00 00 00 00 00 00
+ 00000D34 00 00 00 00 00 00 00 00 00 00
+ 00000D3E 00 00 00 00 00 00 00 00 00 00
+ 00000D48 00 00 00 00 00 00 00 00 00 00
+ 00000D52 00 00 00 00 00 00 00 00 00 00
+ 00000D5C 00 00 00 00 00 00 00 00 00 00
+ 00000D66 00 00 00 00 00 00 00 00 00 00
+ 00000D70 00 00 00 00 00 00 00 00 00 00
+ 00000D7A 00 00 00 00 00 00 00 00 00 00
+ 00000D84 00 00 00 00 00 00 00 00 00 00
+ 00000D8E 00 00 00 00 00 00 00 00 00 00
+ 00000D98 00 00 00 00 00 00 00 00 00 00
+ 00000DA2 00 00 00 00 00 00 00 00 00 00
+ 00000DAC 00 00 00 00 00 00 00 00 00 00
+ 00000DB6 00 00 00 00 00 00 00 00 00 00
+ 00000DC0 00 00 00 00 00 00 00 00 00 00
+ 00000DCA 00 00 00 00 00 00 00 00 00 00
+ 00000DD4 00 00 00 00 00 00 00 00 00 00
+ 00000DDE 00 00 00 00 00 00 00 00 00 00
+ 00000DE8 00 00 00 00 00 00 00 00 00 00
+ 00000DF2 00 00 00 00 00 00 00 00 00 00
+ 00000DFC 00 00 00 00 00 00 00 00 00 00
+ 00000E06 00 00 00 00 00 00 00 00 00 00
+ 00000E10 00 00 00 00 00 00 00 00 00 00
+ 00000E1A 00 00 00 00 00 00 00 00 00 00
+ 00000E24 00 00 00 00 00 00 00 00 00 00
+ 00000E2E 00 00 00 00 00 00 00 00 00 00
+ 00000E38 00 00 00 00 00 00 00 00 00 00
+ 00000E42 00 00 00 00 00 00 00 00 00 00
+ 00000E4C 00 00 00 00 00 00 00 00 00 00
+ 00000E56 00 00 00 00 00 00 00 00 00 00
+ 00000E60 00 00 00 00 00 00 00 00 00 00
+ 00000E6A 00 00 00 00 00 00 00 00 00 00
+ 00000E74 00 00 00 00 00 00 00 00 00 00
+ 00000E7E 00 00 00 00 00 00 00 00 00 00
+ 00000E88 00 00 00 00 00 00 00 00 00 00
+ 00000E92 00 00 00 00 00 00 00 00 00 00
+ 00000E9C 00 00 00 00 00 00 00 00 00 00
+ 00000EA6 00 00 00 00 00 00 00 00 00 00
+ 00000EB0 00 00 00 00 00 00 00 00 00 00
+ 00000EBA 00 00 00 00 00 00 00 00 00 00
+ 00000EC4 00 00 00 00 00 00 00 00 00 00
+ 00000ECE 00 00 00 00 00 00 00 00 00 00
+ 00000ED8 00 00 00 00 00 00 00 00 00 00
+ 00000EE2 00 00 00 00 00 00 00 00 00 00
+ 00000EEC 00 00 00 00 00 00 00 00 00 00
+ 00000EF6 00 00 00 00 00 00 00 00 00 00
+ 00000F00 00 00 00 00 00 00 00 00 00 00
+ 00000F0A 00 00 00 00 00 00 00 00 00 00
+ 00000F14 00 00 00 00 00 00 00 00 00 00
+ 00000F1E 00 00 00 00 00 00 00 00 00 00
+ 00000F28 00 00 00 00 00 00 00 00 00 00
+ 00000F32 00 00 00 00 00 00 00 00 00 00
+ 00000F3C 00 00 00 00 00 00 00 00 00 00
+ 00000F46 00 00 00 00 00 00 00 00 00 00
+ 00000F50 00 00 00 00 00 00 00 00 00 00
+ 00000F5A 00 00 00 00 00 00 00 00 00 00
+ 00000F64 00 00 00 00 00 00 00 00 00 00
+ 00000F6E 00 00 00 00 00 00 00 00 00 00
+ 00000F78 00 00 00 00 00 00 00 00 00 00
+ 00000F82 00 00 00 00 00 00 00 00 00 00
+ 00000F8C 00 00 00 00 00 00 00 00 00 00
+ 00000F96 00 00 00 00 00 00 00 00 00 00
+ 00000FA0 00 00 00 00 00 00 00 00 00 00
+ 00000FAA 00 00 00 00 00 00 00 00 00 00
+ 00000FB4 00 00 00 00 00 00 00 00 00 00
+ 00000FBE 00 00 00 00 00 00 00 00 00 00
+ 00000FC8 00 00 00 00 00 00 00 00 00 00
+ 00000FD2 00 00 00 00 00 00 00 00 00 00
+ 00000FDC 00 00 00 00 00 00 00 00 00 00
+ 00000FE6 00 00 00 00 00 00 00 00 00 00
+ 00000FF0 00 00 00 00 00 00 00 00 00 00
+ 00000FFA 00 00 00 00 00 00 00 00 00 00
+ 00001004 00 00 00 00 00 00 00 00 00 00
+ 0000100E 00 00 00 00 00 00 00 00 00 00
+ 00001018 00 00 00 00 00 00 00 00 00 00
+ 00001022 00 00 00 00 00 00 00 00 00 00
+ 0000102C 00 00 00 00 00 00 00 00 00 00
+ 00001036 00 00 00 00 00 00 00 00 00 00
+ 00001040 00 00 00 00 00 00 00 00 00 00
+ 0000104A 00 00 00 00 00 00 00 00 00 00
+ 00001054 00 00 00 00 00 00 00 00 00 00
+ 0000105E 00 00 00 00 00 00 00 00 00 00
+ 00001068 00 00 00 00 00 00 00 00 00 00
+ 00001072 00 00 00 00 00 00 00 00 00 00
+ 0000107C 00 00 00 00 00 00 00 00 00 00
+ 00001086 00 00 00 00 00 00 00 00 00 00
+ 00001090 00 00 00 00 00 00 00 00 00 00
+ 0000109A 00 00 00 00 00 00 00 00 00 00
+ 000010A4 00 00 00 00 00 00 00 00 00 00
+ 000010AE 00 00 00 00 00 00 00 00 00 00
+ 000010B8 00 00 00 00 00 00 00 00 00 00
+ 000010C2 00 00 00 00 00 00 00 00 00 00
+ 000010CC 00 00 00 00 00 00 00 00 00 00
+ 000010D6 00 00 00 00 00 00 00 00 00 00
+ 000010E0 00 00 00 00 00 00 00 00 00 00
+ 000010EA 00 00 00 00 00 00 00 00 00 00
+ 000010F4 00 00 00 00 00 00 00 00 00 00
+ 000010FE 00 00 00 00 00 00 00 00 00 00
+ 00001108 00 00 00 00 00 00 00 00 00 00
+ 00001112 00 00 00 00 00 00 00 00 00 00
+ 0000111C 00 00 00 00 00 00 00 00 00 00
+ 00001126 00 00 00 00 00 00 00 00 00 00
+ 00001130 00 00 00 00 00 00 00 00 00 00
+ 0000113A 00 00 00 00 00 00 00 00 00 00
+ 00001144 00 00 00 00 00 00 00 00 00 00
+ 0000114E 00 00 00 00 00 00 00 00 00 00
+ 00001158 00 00 00 00 00 00 00 00 00 00
+ 00001162 00 00 00 00 00 00 00 00 00 00
+ 0000116C 00 00 00 00 00 00 00 00 00 00
+ 00001176 00 00 00 00 00 00 00 00 00 00
+ 00001180 00 00 00 00 00 00 00 00 00 00
+ 0000118A 00 00 00 00 00 00 00 00 00 00
+ 00001194 00 00 00 00 00 00 00 00 00 00
+ 0000119E 00 00 00 00 00 00 00 00 00 00
+ 000011A8 00 00 00 00 00 00 00 00 00 00
+ 000011B2 00 00 00 00 00 00 00 00 00 00
+ 000011BC 00 00 00 00 00 00 00 00 00 00
+ 000011C6 00 00 00 00 00 00 00 00 00 00
+ 000011D0 00 00 00 00 00 00 00 00 00 00
+ 000011DA 00 00 00 00 00 00 00 00 00 00
+ 000011E4 00 00 00 00 00 00 00 00 00 00
+ 000011EE 00 00 00 00 00 00 00 00 00 00
+ 000011F8 00 00 00 00 00 00 00 00 00 00
+ 00001202 00 00 00 00 00 00 00 00 00 00
+ 0000120C 00 00 00 00 00 00 00 00 00 00
+ 00001216 00 00 00 00 00 00 00 00 00 00
+ 00001220 00 00 00 00 00 00 00 00 00 00
+ 0000122A 00 00 00 00 00 00 00 00 00 00
+ 00001234 00 00 00 00 00 00 00 00 00 00
+ 0000123E 00 00 00 00 00 00 00 00 00 00
+ 00001248 00 00 00 00 00 00 00 00 00 00
+ 00001252 00 00 00 00 00 00 00 00 00 00
+ 0000125C 00 00 00 00 00 00 00 00 00 00
+ 00001266 00 00 00 00 00 00 00 00 00 00
+ 00001270 00 00 00 00 00 00 00 00 00 00
+ 0000127A 00 00 00 00 00 00 00 00 00 00
+ 00001284 00 00 00 00 00 00 00 00 00 00
+ 0000128E 00 00 00 00 00 00 00 00 00 00
+ 00001298 00 00 00 00 00 00 00 00 00 00
+ 000012A2 00 00 00 00 00 00 00 00 00 00
+ 000012AC 00 00 00 00 00 00 00 00 00 00
+ 000012B6 00 00 00 00 00 00 00 00 00 00
+ 000012C0 00 00 00 00 00 00 00 00 00 00
+ 000012CA 00 00 00 00 00 00 00 00 00 00
+ 000012D4 00 00 00 00 00 00 00 00 00 00
+ 000012DE 00 00 00 00 00 00 00 00 00 00
+ 000012E8 00 00 00 00 00 00 00 00 00 00
+ 000012F2 00 00 00 00 00 00 00 00 00 00
+ 000012FC 00 00 00 00 00 00 00 00 00 00
+ 00001306 00 00 00 00 00 00 00 00 00 00
+ 00001310 00 00 00 00 00 00 00 00 00 00
+ 0000131A 00 00 00 00 00 00 00 00 00 00
+ 00001324 00 00 00 00 00 00 00 00 00 00
+ 0000132E 00 00 00 00 00 00 00 00 00 00
+ 00001338 00 00 00 00 00 00 00 00 00 00
+ 00001342 00 00 00 00 00 00 00 00 00 00
+ 0000134C 00 00 00 00 00 00 00 00 00 00
+ 00001356 00 00 00 00 00 00 00 00 00 00
+ 00001360 00 00 00 00 00 00 00 00 00 00
+ 0000136A 00 00 00 00 00 00 00 00 00 00
+ 00001374 00 00 00 00 00 00 00 00 00 00
+ 0000137E 00 00 00 00 00 00 00 00 00 00
+ 00001388 00 00 00 00 00 00 00 00 00 00
+ 00001392 00 00 00 00 00 00 00 00 00 00
+ 0000139C 00 00 00 00 00 00 00 00 00 00
+ 000013A6 00 00 00 00 00 00 00 00 00 00
+ 000013B0 00 00 00 00 00 00 00 00 00 00
+ 000013BA 00 00 00 00 00 00 00 00 00 00
+ 000013C4 00 00 00 00 00 00 00 00 00 00
+ 000013CE 00 00 00 00 00 00 00 00 00 00
+ 000013D8 00 00 00 00 00 00 00 00 00 00
+ 000013E2 00 00 00 00 00 00 00 00 00 00
+ 000013EC 00 00 00 00 00 00 00 00 00 00
+ 000013F6 00 00 00 00 00 00 00 00 00 00
+ 00001400 00 00 00 00 00 00 00 00 00 00
+ 0000140A 00 00 00 00 00 00 00 00 00 00
+ 00001414 00 00 00 00 00 00 00 00 00 00
+ 0000141E 00 00 00 00 00 00 00 00 00 00
+ 00001428 00 00 00 00 00 00 00 00 00 00
+ 00001432 00 00 00 00 00 00 00 00 00 00
+ 0000143C 00 00 00 00 00 00 00 00 00 00
+ 00001446 00 00 00 00 00 00 00 00 00 00
+ 00001450 00 00 00 00 00 00 00 00 00 00
+ 0000145A 00 00 00 00 00 00 00 00 00 00
+ 00001464 00 00 00 00 00 00 00 00 00 00
+ 0000146E 00 00 00 00 00 00 00 00 00 00
+ 00001478 00 00 00 00 00 00 00 00 00 00
+ 00001482 00 00 00 00 00 00 00 00 00 00
+ 0000148C 00 00 00 00 00 00 00 00 00 00
+ 00001496 00 00 00 00 00 00 00 00 00 00
+ 000014A0 00 00 00 00 00 00 00 00 00 00
+ 000014AA 00 00 00 00 00 00 00 00 00 00
+ 000014B4 00 00 00 00 00 00 00 00 00 00
+ 000014BE 00 00 00 00 00 00 00 00 00 00
+ 000014C8 00 00 00 00 00 00 00 00 00 00
+ 000014D2 00 00 00 00 00 00 00 00 00 00
+ 000014DC 00 00 00 00 00 00 00 00 00 00
+ 000014E6 00 00 00 00 00 00 00 00 00 00
+ 000014F0 00 00 00 00 00 00 00 00 00 00
+ 000014FA 00 00 00 00 00 00 00 00 00 00
+ 00001504 00 00 00 00 00 00 00 00 00 00
+ 0000150E 00 00 00 00 00 00 00 00 00 00
+ 00001518 00 00 00 00 00 00 00 00 00 00
+ 00001522 00 00 00 00 00 00 00 00 00 00
+ 0000152C 00 00 00 00 00 00 00 00 00 00
+ 00001536 00 00 00 00 00 00 00 00 00 00
+ 00001540 00 00 00 00 00 00 00 00 00 00
+ 0000154A 00 00 00 00 00 00 00 00 00 00
+ 00001554 00 00 00 00 00 00 00 00 00 00
+ 0000155E 00 00 00 00 00 00 00 00 00 00
+ 00001568 00 00 00 00 00 00 00 00 00 00
+ 00001572 00 00 00 00 00 00 00 00 00 00
+ 0000157C 00 00 00 00 00 00 00 00 00 00
+ 00001586 00 00 00 00 00 00 00 00 00 00
+ 00001590 00 00 00 00 00 00 00 00 00 00
+ 0000159A 00 00 00 00 00 00 00 00 00 00
+ 000015A4 00 00 00 00 00 00 00 00 00 00
+ 000015AE 00 00 00 00 00 00 00 00 00 00
+ 000015B8 00 00 00 00 00 00 00 00 00 00
+ 000015C2 00 00 00 00 00 00 00 00 00 00
+ 000015CC 00 00 00 00 00 00 00 00 00 00
+ 000015D6 00 00 00 00 00 00 00 00 00 00
+ 000015E0 00 00 00 00 00 00 00 00 00 00
+ 000015EA 00 00 00 00 00 00 00 00 00 00
+ 000015F4 00 00 00 00 00 00 00 00 00 00
+ 000015FE 00 00 00 00 00 00 00 00 00 00
+ 00001608 00 00 00 00 00 00 00 00 00 00
+ 00001612 00 00 00 00 00 00 00 00 00 00
+ 0000161C 00 00 00 00 00 00 00 00 00 00
+ 00001626 00 00 00 00 00 00 00 00 00 00
+ 00001630 00 00 00 00 00 00 00 00 00 00
+ 0000163A 00 00 00 00 00 00 00 00 00 00
+ 00001644 00 00 00 00 00 00 00 00 00 00
+ 0000164E 00 00 00 00 00 00 00 00 00 00
+ 00001658 00 00 00 00 00 00 00 00 00 00
+ 00001662 00 00 00 00 00 00 00 00 00 00
+ 0000166C 00 00 00 00 00 00 00 00 00 00
+ 00001676 00 00 00 00 00 00 00 00 00 00
+ 00001680 00 00 00 00 00 00 00 00 00 00
+ 0000168A 00 00 00 00 00 00 00 00 00 00
+ 00001694 00 00 00 00 00 00 00 00 00 00
+ 0000169E 00 00 00 00 00 00 00 00 00 00
+ 000016A8 00 00 00 00 00 00 00 00 00 00
+ 000016B2 00 00 00 00 00 00 00 00 00 00
+ 000016BC 00 00 00 00 00 00 00 00 00 00
+ 000016C6 00 00 00 00 00 00 00 00 00 00
+ 000016D0 00 00 00 00 00 00 00 00 00 00
+ 000016DA 00 00 00 00 00 00 00 00 00 00
+ 000016E4 00 00 00 00 00 00 00 00 00 00
+ 000016EE 00 00 00 00 00 00 00 00 00 00
+ 000016F8 00 00 00 00 00 00 00 00 00 00
+ 00001702 00 00 00 00 00 00 00 00 00 00
+ 0000170C 00 00 00 00 00 00 00 00 00 00
+ 00001716 00 00 00 00 00 00 00 00 00 00
+ 00001720 00 00 00 00 00 00 00 00 00 00
+ 0000172A 00 00 00 00 00 00 00 00 00 00
+ 00001734 00 00 00 00 00 00 00 00 00 00
+ 0000173E 00 00 00 00 00 00 00 00 00 00
+ 00001748 00 00 00 00 00 00 00 00 00 00
+ 00001752 00 00 00 00 00 00 00 00 00 00
+ 0000175C 00 00 00 00 00 00 00 00 00 00
+ 00001766 00 00 00 00 00 00 00 00 00 00
+ 00001770 00 00 00 00 00 00 00 00 00 00
+ 0000177A 00 00 00 00 00 00 00 00 00 00
+ 00001784 00 00 00 00 00 00 00 00 00 00
+ 0000178E 00 00 00 00 00 00 00 00 00 00
+ 00001798 00 00 00 00 00 00 00 00 00 00
+ 000017A2 00 00 00 00 00 00 00 00 00 00
+ 000017AC 00 00 00 00 00 00 00 00 00 00
+ 000017B6 00 00 00 00 00 00 00 00 00 00
+ 000017C0 00 00 00 00 00 00 00 00 00 00
+ 000017CA 00 00 00 00 00 00 00 00 00 00
+ 000017D4 00 00 00 00 00 00 00 00 00 00
+ 000017DE 00 00 00 00 00 00 00 00 00 00
+ 000017E8 00 00 00 00 00 00 00 00 00 00
+ 000017F2 00 00 00 00 00 00 00 00 00 00
+ 000017FC 00 00 00 00 00 00 00 00 00 00
+ 00001806 00 00 00 00 00 00 00 00 00 00
+ 00001810 00 00 00 00 00 00 00 00 00 00
+ 0000181A 00 00 00 00 00 00 00 00 00 00
+ 00001824 00 00 00 00 00 00 00 00 00 00
+ 0000182E 00 00 00 00 00 00 00 00 00 00
+ 00001838 00 00 00 00 00 00 00 00 00 00
+ 00001842 00 00 00 00 00 00 00 00 00 00
+ 0000184C 00 00 00 00 00 00 00 00 00 00
+ 00001856 00 00 00 00 00 00 00 00 00 00
+ 00001860 00 00 00 00 00 00 00 00 00 00
+ 0000186A 00 00 00 00 00 00 00 00 00 00
+ 00001874 00 00 00 00 00 00 00 00 00 00
+ 0000187E 00 00 00 00 00 00 00 00 00 00
+ 00001888 00 00 00 00 00 00 00 00 00 00
+ 00001892 00 00 00 00 00 00 00 00 00 00
+ 0000189C 00 00 00 00 00 00 00 00 00 00
+ 000018A6 00 00 00 00 00 00 00 00 00 00
+ 000018B0 00 00 00 00 00 00 00 00 00 00
+ 000018BA 00 00 00 00 00 00 00 00 00 00
+ 000018C4 00 00 00 00 00 00 00 00 00 00
+ 000018CE 00 00 00 00 00 00 00 00 00 00
+ 000018D8 00 00 00 00 00 00 00 00 00 00
+ 000018E2 00 00 00 00 00 00 00 00 00 00
+ 000018EC 00 00 00 00 00 00 00 00 00 00
+ 000018F6 00 00 00 00 00 00 00 00 00 00
+ 00001900 00 00 00 00 00 00 00 00 00 00
+ 0000190A 00 00 00 00 00 00 00 00 00 00
+ 00001914 00 00 00 00 00 00 00 00 00 00
+ 0000191E 00 00 00 00 00 00 00 00 00 00
+ 00001928 00 00 00 00 00 00 00 00 00 00
+ 00001932 00 00 00 00 00 00 00 00 00 00
+ 0000193C 00 00 00 00 00 00 00 00 00 00
+ 00001946 00 00 00 00 00 00 00 00 00 00
+ 00001950 00 00 00 00 00 00 00 00 00 00
+ 0000195A 00 00 00 00 00 00 00 00 00 00
+ 00001964 00 00 00 00 00 00 00 00 00 00
+ 0000196E 00 00 00 00 00 00 00 00 00 00
+ 00001978 00 00 00 00 00 00 00 00 00 00
+ 00001982 00 00 00 00 00 00 00 00 00 00
+ 0000198C 00 00 00 00 00 00 00 00 00 00
+ 00001996 00 00 00 00 00 00 00 00 00 00
+ 000019A0 00 00 00 00 00 00 00 00 00 00
+ 000019AA 00 00 00 00 00 00 00 00 00 00
+ 000019B4 00 00 00 00 00 00 00 00 00 00
+ 000019BE 00 00 00 00 00 00 00 00 00 00
+ 000019C8 00 00 00 00 00 00 00 00 00 00
+ 000019D2 00 00 00 00 00 00 00 00 00 00
+ 000019DC 00 00 00 00 00 00 00 00 00 00
+ 000019E6 00 00 00 00 00 00 00 00 00 00
+ 000019F0 00 00 00 00 00 00 00 00 00 00
+ 000019FA 00 00 00 00 00 00 00 00 00 00
+ 00001A04 00 00 00 00 00 00 00 00 00 00
+ 00001A0E 00 00 00 00 00 00 00 00 00 00
+ 00001A18 00 00 00 00 00 00 00 00 00 00
+ 00001A22 00 00 00 00 00 00 00 00 00 00
+ 00001A2C 00 00 00 00 00 00 00 00 00 00
+ 00001A36 00 00 00 00 00 00 00 00 00 00
+ 00001A40 00 00 00 00 00 00 00 00 00 00
+ 00001A4A 00 00 00 00 00 00 00 00 00 00
+ 00001A54 00 00 00 00 00 00 00 00 00 00
+ 00001A5E 00 00 00 00 00 00 00 00 00 00
+ 00001A68 00 00 00 00 00 00 00 00 00 00
+ 00001A72 00 00 00 00 00 00 00 00 00 00
+ 00001A7C 00 00 00 00 00 00 00 00 00 00
+ 00001A86 00 00 00 00 00 00 00 00 00 00
+ 00001A90 00 00 00 00 00 00 00 00 00 00
+ 00001A9A 00 00 00 00 00 00 00 00 00 00
+ 00001AA4 00 00 00 00 00 00 00 00 00 00
+ 00001AAE 00 00 00 00 00 00 00 00 00 00
+ 00001AB8 00 00 00 00 00 00 00 00 00 00
+ 00001AC2 00 00 00 00 00 00 00 00 00 00
+ 00001ACC 00 00 00 00 00 00 00 00 00 00
+ 00001AD6 00 00 00 00 00 00 00 00 00 00
+ 00001AE0 00 00 00 00 00 00 00 00 00 00
+ 00001AEA 00 00 00 00 00 00 00 00 00 00
+ 00001AF4 00 00 00 00 00 00 00 00 00 00
+ 00001AFE 00 00 00 00 00 00 00 00 00 00
+ 00001B08 00 00 00 00 00 00 00 00 00 00
+ 00001B12 00 00 00 00 00 00 00 00 00 00
+ 00001B1C 00 00 00 00 00 00 00 00 00 00
+ 00001B26 00 00 00 00 00 00 00 00 00 00
+ 00001B30 00 00 00 00 00 00 00 00 00 00
+ 00001B3A 00 00 00 00 00 00 00 00 00 00
+ 00001B44 00 00 00 00 00 00 00 00 00 00
+ 00001B4E 00 00 00 00 00 00 00 00 00 00
+ 00001B58 00 00 00 00 00 00 00 00 00 00
+ 00001B62 00 00 00 00 00 00 00 00 00 00
+ 00001B6C 00 00 00 00 00 00 00 00 00 00
+ 00001B76 00 00 00 00 00 00 00 00 00 00
+ 00001B80 00 00 00 00 00 00 00 00 00 00
+ 00001B8A 00 00 00 00 00 00 00 00 00 00
+ 00001B94 00 00 00 00 00 00 00 00 00 00
+ 00001B9E 00 00 00 00 00 00 00 00 00 00
+ 00001BA8 00 00 00 00 00 00 00 00 00 00
+ 00001BB2 00 00 00 00 00 00 00 00 00 00
+ 00001BBC 00 00 00 00 00 00 00 00 00 00
+ 00001BC6 00 00 00 00 00 00 00 00 00 00
+ 00001BD0 00 00 00 00 00 00 00 00 00 00
+ 00001BDA 00 00 00 00 00 00 00 00 00 00
+ 00001BE4 00 00 00 00 00 00 00 00 00 00
+ 00001BEE 00 00 00 00 00 00 00 00 00 00
+ 00001BF8 00 00 00 00 00 00 00 00 00 00
+ 00001C02 00 00 00 00 00 00 00 00 00 00
+ 00001C0C 00 00 00 00 00 00 00 00 00 00
+ 00001C16 00 00 00 00 00 00 00 00 00 00
+ 00001C20 00 00 00 00 00 00 00 00 00 00
+ 00001C2A 00 00 00 00 00 00 00 00 00 00
+ 00001C34 00 00 00 00 00 00 00 00 00 00
+ 00001C3E 00 00 00 00 00 00 00 00 00 00
+ 00001C48 00 00 00 00 00 00 00 00 00 00
+ 00001C52 00 00 00 00 00 00 00 00 00 00
+ 00001C5C 00 00 00 00 00 00 00 00 00 00
+ 00001C66 00 00 00 00 00 00 00 00 00 00
+ 00001C70 00 00 00 00 00 00 00 00 00 00
+ 00001C7A 00 00 00 00 00 00 00 00 00 00
+ 00001C84 00 00 00 00 00 00 00 00 00 00
+ 00001C8E 00 00 00 00 00 00 00 00 00 00
+ 00001C98 00 00 00 00 00 00 00 00 00 00
+ 00001CA2 00 00 00 00 00 00 00 00 00 00
+ 00001CAC 00 00 00 00 00 00 00 00 00 00
+ 00001CB6 00 00 00 00 00 00 00 00 00 00
+ 00001CC0 00 00 00 00 00 00 00 00 00 00
+ 00001CCA 00 00 00 00 00 00 00 00 00 00
+ 00001CD4 00 00 00 00 00 00 00 00 00 00
+ 00001CDE 00 00 00 00 00 00 00 00 00 00
+ 00001CE8 00 00 00 00 00 00 00 00 00 00
+ 00001CF2 00 00 00 00 00 00 00 00 00 00
+ 00001CFC 00 00 00 00 00 00 00 00 00 00
+ 00001D06 00 00 00 00 00 00 00 00 00 00
+ 00001D10 00 00 00 00 00 00 00 00 00 00
+ 00001D1A 00 00 00 00 00 00 00 00 00 00
+ 00001D24 00 00 00 00 00 00 00 00 00 00
+ 00001D2E 00 00 00 00 00 00 00 00 00 00
+ 00001D38 00 00 00 00 00 00 00 00 00 00
+ 00001D42 00 00 00 00 00 00 00 00 00 00
+ 00001D4C 00 00 00 00 00 00 00 00 00 00
+ 00001D56 00 00 00 00 00 00 00 00 00 00
+ 00001D60 00 00 00 00 00 00 00 00 00 00
+ 00001D6A 00 00 00 00 00 00 00 00 00 00
+ 00001D74 00 00 00 00 00 00 00 00 00 00
+ 00001D7E 00 00 00 00 00 00 00 00 00 00
+ 00001D88 00 00 00 00 00 00 00 00 00 00
+ 00001D92 00 00 00 00 00 00 00 00 00 00
+ 00001D9C 00 00 00 00 00 00 00 00 00 00
+ 00001DA6 00 00 00 00 00 00 00 00 00 00
+ 00001DB0 00 00 00 00 00 00 00 00 00 00
+ 00001DBA 00 00 00 00 00 00 00 00 00 00
+ 00001DC4 00 00 00 00 00 00 00 00 00 00
+ 00001DCE 00 00 00 00 00 00 00 00 00 00
+ 00001DD8 00 00 00 00 00 00 00 00 00 00
+ 00001DE2 00 00 00 00 00 00 00 00 00 00
+ 00001DEC 00 00 00 00 00 00 00 00 00 00
+ 00001DF6 00 00 00 00 00 00 00 00 00 00
+ 00001E00 00 00 00 00 00 00 00 00 00 00
+ 00001E0A 00 00 00 00 00 00 00 00 00 00
+ 00001E14 00 00 00 00 00 00 00 00 00 00
+ 00001E1E 00 00 00 00 00 00 00 00 00 00
+ 00001E28 00 00 00 00 00 00 00 00 00 00
+ 00001E32 00 00 00 00 00 00 00 00 00 00
+ 00001E3C 00 00 00 00 00 00 00 00 00 00
+ 00001E46 00 00 00 00 00 00 00 00 00 00
+ 00001E50 00 00 00 00 00 00 00 00 00 00
+ 00001E5A 00 00 00 00 00 00 00 00 00 00
+ 00001E64 00 00 00 00 00 00 00 00 00 00
+ 00001E6E 00 00 00 00 00 00 00 00 00 00
+ 00001E78 00 00 00 00 00 00 00 00 00 00
+ 00001E82 00 00 00 00 00 00 00 00 00 00
+ 00001E8C 00 00 00 00 00 00 00 00 00 00
+ 00001E96 00 00 00 00 00 00 00 00 00 00
+ 00001EA0 00 00 00 00 00 00 00 00 00 00
+ 00001EAA 00 00 00 00 00 00 00 00 00 00
+ 00001EB4 00 00 00 00 00 00 00 00 00 00
+ 00001EBE 00 00 00 00 00 00 00 00 00 00
+ 00001EC8 00 00 00 00 00 00 00 00 00 00
+ 00001ED2 00 00 00 00 00 00 00 00 00 00
+ 00001EDC 00 00 00 00 00 00 00 00 00 00
+ 00001EE6 00 00 00 00 00 00 00 00 00 00
+ 00001EF0 00 00 00 00 00 00 00 00 00 00
+ 00001EFA 00 00 00 00 00 00 00 00 00 00
+ 00001F04 00 00 00 00 00 00 00 00 00 00
+ 00001F0E 00 00 00 00 00 00 00 00 00 00
+ 00001F18 00 00 00 00 00 00 00 00 00 00
+ 00001F22 00 00 00 00 00 00 00 00 00 00
+ 00001F2C 00 00 00 00 00 00 00 00 00 00
+ 00001F36 00 00 00 00 00 00 00 00 00 00
+ 00001F40 00 00 00 00 00 00 00 00 00 00
+ 00001F4A 00 00 00 00 00 00 00 00 00 00
+ 00001F54 00 00 00 00 00 00 00 00 00 00
+ 00001F5E 00 00 00 00 00 00 00 00 00 00
+ 00001F68 00 00 00 00 00 00 00 00 00 00
+ 00001F72 00 00 00 00 00 00 00 00 00 00
+ 00001F7C 00 00 00 00 00 00 00 00 00 00
+ 00001F86 00 00 00 00 00 00 00 00 00 00
+ 00001F90 00 00 00 00 00 00 00 00 00 00
+ 00001F9A 00 00 00 00 00 00 00 00 00 00
+ 00001FA4 00 00 00 00 00 00 00 00 00 00
+ 00001FAE 00 00 00 00 00 00 00 00 00 00
+ 00001FB8 00 00 00 00 00 00 00 00 00 00
+ 00001FC2 00 00 00 00 00 00 00 00 00 00
+ 00001FCC 00 00 00 00 00 00 00 00 00 00
+ 00001FD6 00 00 00 00 00 00 00 00 00 00
+ 00001FE0 00 00 00 00 00 00 00 00 00 00
+ 00001FEA 00 00 00 00 00 00 00 00 00 00
+ 00001FF4 00 00 00 00 00 00 00 00 00 00
+ 00001FFE 00 00 00 00 00 00 00 00 00 00
+ 00002008 00 00 00 00 00 00 00 00 00 00
+ 00002012 00 00 00 00 00 00 00 00 00 00
+ 0000201C 00 00 00 00 00 00 00 00 00 00
+ 00002026 00 00 00 00 00 00 00 00 00 00
+ 00002030 00 00 00 00 00 00 00 00 00 00
+ 0000203A 00 00 00 00 00 00 00 00 00 00
+ 00002044 00 00 00 00 00 00 00 00 00 00
+ 0000204E 00 00 00 00 00 00 00 00 00 00
+ 00002058 00 00 00 00 00 00 00 00 00 00
+ 00002062 00 00 00 00 00 00 00 00 00 00
+ 0000206C 00 00 00 00 00 00 00 00 00 00
+ 00002076 00 00 00 00 00 00 00 00 00 00
+ 00002080 00 00 00 00 00 00 00 00 00 00
+ 0000208A 00 00 00 00 00 00 00 00 00 00
+ 00002094 00 00 00 00 00 00 00 00 00 00
+ 0000209E 00 00 00 00 00 00 00 00 00 00
+ 000020A8 00 00 00 00 00 00 00 00 00 00
+ 000020B2 00 00 00 00 00 00 00 00 00 00
+ 000020BC 00 00 00 00 00 00 00 00 00 00
+ 000020C6 00 00 00 00 00 00 00 00 00 00
+ 000020D0 00 00 00 00 00 00 00 00 00 00
+ 000020DA 00 00 00 00 00 00 00 00 00 00
+ 000020E4 00 00 00 00 00 00 00 00 00 00
+ 000020EE 00 00 00 00 00 00 00 00 00 00
+ 000020F8 00 00 00 00 00 00 00 00 00 00
+ 00002102 00 00 00 00 00 00 00 00 00 00
+ 0000210C 00 00 00 00 00 00 00 00 00 00
+ 00002116 00 00 00 00 00 00 00 00 00 00
+ 00002120 00 00 00 00 00 00 00 00 00 00
+ 0000212A 00 00 00 00 00 00 00 00 00 00
+ 00002134 00 00 00 00 00 00 00 00 00 00
+ 0000213E 00 00 00 00 00 00 00 00 00 00
+ 00002148 00 00 00 00 00 00 00 00 00 00
+ 00002152 00 00 00 00 00 00 00 00 00 00
+ 0000215C 00 00 00 00 00 00 00 00 00 00
+ 00002166 00 00 00 00 00 00 00 00 00 00
+ 00002170 00 00 00 00 00 00 00 00 00 00
+ 0000217A 00 00 00 00 00 00 00 00 00 00
+ 00002184 00 00 00 00 00 00 00 00 00 00
+ 0000218E 00 00 00 00 00 00 00 00 00 00
+ 00002198 00 00 00 00 00 00 00 00 00 00
+ 000021A2 00 00 00 00 00 00 00 00 00 00
+ 000021AC 00 00 00 00 00 00 00 00 00 00
+ 000021B6 00 00 00 00 00 00 00 00 00 00
+ 000021C0 00 00 00 00 00 00 00 00 00 00
+ 000021CA 00 00 00 00 00 00 00 00 00 00
+ 000021D4 00 00 00 00 00 00 00 00 00 00
+ 000021DE 00 00 00 00 00 00 00 00 00 00
+ 000021E8 00 00 00 00 00 00 00 00 00 00
+ 000021F2 00 00 00 00 00 00 00 00 00 00
+ 000021FC 00 00 00 00 00 00 00 00 00 00
+ 00002206 00 00 00 00 00 00 00 00 00 00
+ 00002210 00 00 00 00 00 00 00 00 00 00
+ 0000221A 00 00 00 00 00 00 00 00 00 00
+ 00002224 00 00 00 00 00 00 00 00 00 00
+ 0000222E 00 00 00 00 00 00 00 00 00 00
+ 00002238 00 00 00 00 00 00 00 00 00 00
+ 00002242 00 00 00 00 00 00 00 00 00 00
+ 0000224C 00 00 00 00 00 00 00 00 00 00
+ 00002256 00 00 00 00 00 00 00 00 00 00
+ 00002260 00 00 00 00 00 00 00 00 00 00
+ 0000226A 00 00 00 00 00 00 00 00 00 00
+ 00002274 00 00 00 00 00 00 00 00 00 00
+ 0000227E 00 00 00 00 00 00 00 00 00 00
+ 00002288 00 00 00 00 00 00 00 00 00 00
+ 00002292 00 00 00 00 00 00 00 00 00 00
+ 0000229C 00 00 00 00 00 00 00 00 00 00
+ 000022A6 00 00 00 00 00 00 00 00 00 00
+ 000022B0 00 00 00 00 00 00 00 00 00 00
+ 000022BA 00 00 00 00 00 00 00 00 00 00
+ 000022C4 00 00 00 00 00 00 00 00 00 00
+ 000022CE 00 00 00 00 00 00 00 00 00 00
+ 000022D8 00 00 00 00 00 00 00 00 00 00
+ 000022E2 00 00 00 00 00 00 00 00 00 00
+ 000022EC 00 00 00 00 00 00 00 00 00 00
+ 000022F6 00 00 00 00 00 00 00 00 00 00
+ 00002300 00 00 00 00 00 00 00 00 00 00
+ 0000230A 00 00 00 00 00 00 00 00 00 00
+ 00002314 00 00 00 00 00 00 00 00 00 00
+ 0000231E 00 00 00 00 00 00 00 00 00 00
+ 00002328 00 00 00 00 00 00 00 00 00 00
+ 00002332 00 00 00 00 00 00 00 00 00 00
+ 0000233C 00 00 00 00 00 00 00 00 00 00
+ 00002346 00 00 00 00 00 00 00 00 00 00
+ 00002350 00 00 00 00 00 00 00 00 00 00
+ 0000235A 00 00 00 00 00 00 00 00 00 00
+ 00002364 00 00 00 00 00 00 00 00 00 00
+ 0000236E 00 00 00 00 00 00 00 00 00 00
+ 00002378 00 00 00 00 00 00 00 00 00 00
+ 00002382 00 00 00 00 00 00 00 00 00 00
+ 0000238C 00 00 00 00 00 00 00 00 00 00
+ 00002396 00 00 00 00 00 00 00 00 00 00
+ 000023A0 00 00 00 00 00 00 00 00 00 00
+ 000023AA 00 00 00 00 00 00 00 00 00 00
+ 000023B4 00 00 00 00 00 00 00 00 00 00
+ 000023BE 00 00 00 00 00 00 00 00 00 00
+ 000023C8 00 00 00 00 00 00 00 00 00 00
+ 000023D2 00 00 00 00 00 00 00 00 00 00
+ 000023DC 00 00 00 00 00 00 00 00 00 00
+ 000023E6 00 00 00 00 00 00 00 00 00 00
+ 000023F0 00 00 00 00 00 00 00 00 00 00
+ 000023FA 00 00 00 00 00 00 00 00 00 00
+ 00002404 00 00 00 00 00 00 00 00 00 00
+ 0000240E 00 00 00 00 00 00 00 00 00 00
+ 00002418 00 00 00 00 00 00 00 00 00 00
+ 00002422 00 00 00 00 00 00 00 00 00 00
+ 0000242C 00 00 00 00 00 00 00 00 00 00
+ 00002436 00 00 00 00 00 00 00 00 00 00
+ 00002440 00 00 00 00 00 00 00 00 00 00
+ 0000244A 00 00 00 00 00 00 00 00 00 00
+ 00002454 00 00 00 00 00 00 00 00 00 00
+ 0000245E 00 00 00 00 00 00 00 00 00 00
+ 00002468 00 00 00 00 00 00 00 00 00 00
+ 00002472 00 00 00 00 00 00 00 00 00 00
+ 0000247C 00 00 00 00 00 00 00 00 00 00
+ 00002486 00 00 00 00 00 00 00 00 00 00
+ 00002490 00 00 00 00 00 00 00 00 00 00
+ 0000249A 00 00 00 00 00 00 00 00 00 00
+ 000024A4 00 00 00 00 00 00 00 00 00 00
+ 000024AE 00 00 00 00 00 00 00 00 00 00
+ 000024B8 00 00 00 00 00 00 00 00 00 00
+ 000024C2 00 00 00 00 00 00 00 00 00 00
+ 000024CC 00 00 00 00 00 00 00 00 00 00
+ 000024D6 00 00 00 00 00 00 00 00 00 00
+ 000024E0 00 00 00 00 00 00 00 00 00 00
+ 000024EA 00 00 00 00 00 00 00 00 00 00
+ 000024F4 00 00 00 00 00 00 00 00 00 00
+ 000024FE 00 00 00 00 00 00 00 00 00 00
+ 00002508 00 00 00 00 00 00 00 00 00 00
+ 00002512 00 00 00 00 00 00 00 00 00 00
+ 0000251C 00 00 00 00 00 00 00 00 00 00
+ 00002526 00 00 00 00 00 00 00 00 00 00
+ 00002530 00 00 00 00 00 00 00 00 00 00
+ 0000253A 00 00 00 00 00 00 00 00 00 00
+ 00002544 00 00 00 00 00 00 00 00 00 00
+ 0000254E 00 00 00 00 00 00 00 00 00 00
+ 00002558 00 00 00 00 00 00 00 00 00 00
+ 00002562 00 00 00 00 00 00 00 00 00 00
+ 0000256C 00 00 00 00 00 00 00 00 00 00
+ 00002576 00 00 00 00 00 00 00 00 00 00
+ 00002580 00 00 00 00 00 00 00 00 00 00
+ 0000258A 00 00 00 00 00 00 00 00 00 00
+ 00002594 00 00 00 00 00 00 00 00 00 00
+ 0000259E 00 00 00 00 00 00 00 00 00 00
+ 000025A8 00 00 00 00 00 00 00 00 00 00
+ 000025B2 00 00 00 00 00 00 00 00 00 00
+ 000025BC 00 00 00 00 00 00 00 00 00 00
+ 000025C6 00 00 00 00 00 00 00 00 00 00
+ 000025D0 00 00 00 00 00 00 00 00 00 00
+ 000025DA 00 00 00 00 00 00 00 00 00 00
+ 000025E4 00 00 00 00 00 00 00 00 00 00
+ 000025EE 00 00 00 00 00 00 00 00 00 00
+ 000025F8 00 00 00 00 00 00 00 00 00 00
+ 00002602 00 00 00 00 00 00 00 00 00 00
+ 0000260C 00 00 00 00 00 00 00 00 00 00
+ 00002616 00 00 00 00 00 00 00 00 00 00
+ 00002620 00 00 00 00 00 00 00 00 00 00
+ 0000262A 00 00 00 00 00 00 00 00 00 00
+ 00002634 00 00 00 00 00 00 00 00 00 00
+ 0000263E 00 00 00 00 00 00 00 00 00 00
+ 00002648 00 00 00 00 00 00 00 00 00 00
+ 00002652 00 00 00 00 00 00 00 00 00 00
+ 0000265C 00 00 00 00 00 00 00 00 00 00
+ 00002666 00 00 00 00 00 00 00 00 00 00
+ 00002670 00 00 00 00 00 00 00 00 00 00
+ 0000267A 00 00 00 00 00 00 00 00 00 00
+ 00002684 00 00 00 00 00 00 00 00 00 00
+ 0000268E 00 00 00 00 00 00 00 00 00 00
+ 00002698 00 00 00 00 00 00 00 00 00 00
+ 000026A2 00 00 00 00 00 00 00 00 00 00
+ 000026AC 00 00 00 00 00 00 00 00 00 00
+ 000026B6 00 00 00 00 00 00 00 00 00 00
+ 000026C0 00 00 00 00 00 00 00 00 00 00
+ 000026CA 00 00 00 00 00 00 00 00 00 00
+ 000026D4 00 00 00 00 00 00 00 00 00 00
+ 000026DE 00 00 00 00 00 00 00 00 00 00
+ 000026E8 00 00 00 00 00 00 00 00 00 00
+ 000026F2 00 00 00 00 00 00 00 00 00 00
+ 000026FC 00 00 00 00 00 00 00 00 00 00
+ 00002706 00 00 00 00 00 00 00 00 00 00
+ 00002710 00 00 00 00 00 00 00 00 00 00
+ 0000271A 00 00
--- /dev/null
+#pragma once
+
+typedef unsigned char BYTE;
+typedef unsigned short WORD;
+typedef unsigned int DWORD;
+typedef unsigned long long QWORD;
+
+typedef long LONG;
+
+typedef DWORD HANDLE;
+
+const DWORD PAGE_SIZE = 0x1000;
+
+#define INVALID_HANDLE_VALUE ((DWORD)-1)
+#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
+#define IMAGE_SIZEOF_SHORT_NAME 8
+
+#define IMAGE_DIRECTORY_ENTRY_EXPORT 0
+#define IMAGE_DIRECTORY_ENTRY_IMPORT 1
+#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2
+#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
+#define IMAGE_DIRECTORY_ENTRY_SECURITY 4
+#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
+#define IMAGE_DIRECTORY_ENTRY_DEBUG 6
+#define IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7
+#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7
+#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8
+#define IMAGE_DIRECTORY_ENTRY_TLS 9
+#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
+#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11
+#define IMAGE_DIRECTORY_ENTRY_IAT 12
+#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13
+#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14
+
+#pragma pack(push,1)
+typedef struct _IMAGE_DOS_HEADER {
+ WORD e_magic;
+ WORD e_cblp;
+ WORD e_cp;
+ WORD e_crlc;
+ WORD e_cparhdr;
+ WORD e_minalloc;
+ WORD e_maxalloc;
+ WORD e_ss;
+ WORD e_sp;
+ WORD e_csum;
+ WORD e_ip;
+ WORD e_cs;
+ WORD e_lfarlc;
+ WORD e_ovno;
+ WORD e_res[4];
+ WORD e_oemid;
+ WORD e_oeminfo;
+ WORD e_res2[10];
+ LONG e_lfanew;
+} IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;
+
+typedef struct _IMAGE_FILE_HEADER {
+ WORD Machine;
+ WORD NumberOfSections;
+ DWORD TimeDateStamp;
+ DWORD PointerToSymbolTable;
+ DWORD NumberOfSymbols;
+ WORD SizeOfOptionalHeader;
+ WORD Characteristics;
+} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
+
+typedef struct _IMAGE_DATA_DIRECTORY {
+ DWORD VirtualAddress;
+ DWORD Size;
+} IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
+
+typedef struct _IMAGE_OPTIONAL_HEADER {
+ WORD Magic;
+ BYTE MajorLinkerVersion;
+ BYTE MinorLinkerVersion;
+ DWORD SizeOfCode;
+ DWORD SizeOfInitializedData;
+ DWORD SizeOfUninitializedData;
+ DWORD AddressOfEntryPoint;
+ DWORD BaseOfCode;
+ DWORD BaseOfData;
+ DWORD ImageBase;
+ DWORD SectionAlignment;
+ DWORD FileAlignment;
+ WORD MajorOperatingSystemVersion;
+ WORD MinorOperatingSystemVersion;
+ WORD MajorImageVersion;
+ WORD MinorImageVersion;
+ WORD MajorSubsystemVersion;
+ WORD MinorSubsystemVersion;
+ DWORD Win32VersionValue;
+ DWORD SizeOfImage;
+ DWORD SizeOfHeaders;
+ DWORD CheckSum;
+ WORD Subsystem;
+ WORD DllCharacteristics;
+ DWORD SizeOfStackReserve;
+ DWORD SizeOfStackCommit;
+ DWORD SizeOfHeapReserve;
+ DWORD SizeOfHeapCommit;
+ DWORD LoaderFlags;
+ DWORD NumberOfRvaAndSizes;
+ IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
+} IMAGE_OPTIONAL_HEADER32,*PIMAGE_OPTIONAL_HEADER32;
+typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER;
+typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER;
+
+typedef struct _IMAGE_NT_HEADERS {
+ DWORD Signature;
+ IMAGE_FILE_HEADER FileHeader;
+ IMAGE_OPTIONAL_HEADER OptionalHeader;
+} IMAGE_NT_HEADERS32,*PIMAGE_NT_HEADERS32;
+typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS;
+typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
+
+
+typedef struct _IMAGE_SECTION_HEADER {
+ BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
+ union {
+ DWORD PhysicalAddress;
+ DWORD VirtualSize;
+ } Misc;
+ DWORD VirtualAddress;
+ DWORD SizeOfRawData;
+ DWORD PointerToRawData;
+ DWORD PointerToRelocations;
+ DWORD PointerToLinenumbers;
+ WORD NumberOfRelocations;
+ WORD NumberOfLinenumbers;
+ DWORD Characteristics;
+} IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;
+
+
+
+typedef struct _IMAGE_EXPORT_DIRECTORY {
+ DWORD Characteristics;
+ DWORD TimeDateStamp;
+ WORD MajorVersion;
+ WORD MinorVersion;
+ DWORD Name;
+ DWORD Base;
+ DWORD NumberOfFunctions;
+ DWORD NumberOfNames;
+ DWORD AddressOfFunctions;
+ DWORD AddressOfNames;
+ DWORD AddressOfNameOrdinals;
+} IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;
+
+typedef struct tagBITMAPFILEHEADER {
+ WORD bfType;
+ DWORD bfSize;
+ WORD bfReserved1;
+ WORD bfReserved2;
+ DWORD bfOffBits;
+} BITMAPFILEHEADER, *PBITMAPFILEHEADER;
+typedef struct tagBITMAPINFOHEADER {
+ DWORD biSize;
+ LONG biWidth;
+ LONG biHeight;
+ WORD biPlanes;
+ WORD biBitCount;
+ DWORD biCompression;
+ DWORD biSizeImage;
+ LONG biXPelsPerMeter;
+ LONG biYPelsPerMeter;
+ DWORD biClrUsed;
+ DWORD biClrImportant;
+} BITMAPINFOHEADER;
+
+#pragma pack(pop)
\ No newline at end of file
--- /dev/null
+/* \83E\83B\83\93\83h\83E\8aÖ\8cW */
+
+#include "bootpack.h"
+
+void make_window8(unsigned char *buf, int xsize, int ysize, char *title, char act)
+{
+ boxfill8(buf, xsize, COL8_C6C6C6, 0, 0, xsize - 1, 0 );
+ boxfill8(buf, xsize, COL8_FFFFFF, 1, 1, xsize - 2, 1 );
+ boxfill8(buf, xsize, COL8_C6C6C6, 0, 0, 0, ysize - 1);
+ boxfill8(buf, xsize, COL8_FFFFFF, 1, 1, 1, ysize - 2);
+ boxfill8(buf, xsize, COL8_848484, xsize - 2, 1, xsize - 2, ysize - 2);
+ boxfill8(buf, xsize, COL8_000000, xsize - 1, 0, xsize - 1, ysize - 1);
+ boxfill8(buf, xsize, COL8_C6C6C6, 2, 2, xsize - 3, ysize - 3);
+ boxfill8(buf, xsize, COL8_848484, 1, ysize - 2, xsize - 2, ysize - 2);
+ boxfill8(buf, xsize, COL8_000000, 0, ysize - 1, xsize - 1, ysize - 1);
+ make_wtitle8(buf, xsize, title, act);
+ return;
+}
+
+void make_wtitle8(unsigned char *buf, int xsize, char *title, char act)
+{
+ static char closebtn[14][16] = {
+ "OOOOOOOOOOOOOOO@",
+ "OQQQQQQQQQQQQQ$@",
+ "OQQQQQQQQQQQQQ$@",
+ "OQQQ@@QQQQ@@QQ$@",
+ "OQQQQ@@QQ@@QQQ$@",
+ "OQQQQQ@@@@QQQQ$@",
+ "OQQQQQQ@@QQQQQ$@",
+ "OQQQQQ@@@@QQQQ$@",
+ "OQQQQ@@QQ@@QQQ$@",
+ "OQQQ@@QQQQ@@QQ$@",
+ "OQQQQQQQQQQQQQ$@",
+ "OQQQQQQQQQQQQQ$@",
+ "O$$$$$$$$$$$$$$@",
+ "@@@@@@@@@@@@@@@@"
+ };
+ int x, y;
+ char c, tc, tbc;
+ if (act != 0) {
+ tc = COL8_FFFFFF;
+ tbc = COL8_000084;
+ } else {
+ tc = COL8_C6C6C6;
+ tbc = COL8_848484;
+ }
+ boxfill8(buf, xsize, tbc, 3, 3, xsize - 4, 20);
+ putfonts8_asc(buf, xsize, 24, 4, tc, title);
+ for (y = 0; y < 14; y++) {
+ for (x = 0; x < 16; x++) {
+ c = closebtn[y][x];
+ if (c == '@') {
+ c = COL8_000000;
+ } else if (c == '$') {
+ c = COL8_848484;
+ } else if (c == 'Q') {
+ c = COL8_C6C6C6;
+ } else {
+ c = COL8_FFFFFF;
+ }
+ buf[(5 + y) * xsize + (xsize - 21 + x)] = c;
+ }
+ }
+ return;
+}
+
+void putfonts8_asc_sht(struct SHEET *sht, int x, int y, int c, int b, char *s, int l)
+{
+ struct TASK *task = task_now();
+ boxfill8(sht->buf, sht->bxsize, b, x, y, x + l * 8 - 1, y + 15);
+ if (task->langmode != 0 && task->langbyte1 != 0) {
+ putfonts8_asc(sht->buf, sht->bxsize, x, y, c, s);
+ sheet_refresh(sht, x - 8, y, x + l * 8, y + 16);
+ } else {
+ putfonts8_asc(sht->buf, sht->bxsize, x, y, c, s);
+ sheet_refresh(sht, x, y, x + l * 8, y + 16);
+ }
+ return;
+}
+
+void make_textbox8(struct SHEET *sht, int x0, int y0, int sx, int sy, int c)
+{
+ int x1 = x0 + sx, y1 = y0 + sy;
+ boxfill8(sht->buf, sht->bxsize, COL8_848484, x0 - 2, y0 - 3, x1 + 1, y0 - 3);
+ boxfill8(sht->buf, sht->bxsize, COL8_848484, x0 - 3, y0 - 3, x0 - 3, y1 + 1);
+ boxfill8(sht->buf, sht->bxsize, COL8_FFFFFF, x0 - 3, y1 + 2, x1 + 1, y1 + 2);
+ boxfill8(sht->buf, sht->bxsize, COL8_FFFFFF, x1 + 2, y0 - 3, x1 + 2, y1 + 2);
+ boxfill8(sht->buf, sht->bxsize, COL8_000000, x0 - 1, y0 - 2, x1 + 0, y0 - 2);
+ boxfill8(sht->buf, sht->bxsize, COL8_000000, x0 - 2, y0 - 2, x0 - 2, y1 + 0);
+ boxfill8(sht->buf, sht->bxsize, COL8_C6C6C6, x0 - 2, y1 + 1, x1 + 0, y1 + 1);
+ boxfill8(sht->buf, sht->bxsize, COL8_C6C6C6, x1 + 1, y0 - 2, x1 + 1, y1 + 1);
+ boxfill8(sht->buf, sht->bxsize, c, x0 - 1, y0 - 1, x1 + 0, y1 + 0);
+ return;
+}
+
+void change_wtitle8(struct SHEET *sht, char act)
+{
+ int x, y, xsize = sht->bxsize;
+ char c, tc_new, tbc_new, tc_old, tbc_old, *buf = sht->buf;
+ if (act != 0) {
+ tc_new = COL8_FFFFFF;
+ tbc_new = COL8_000084;
+ tc_old = COL8_C6C6C6;
+ tbc_old = COL8_848484;
+ } else {
+ tc_new = COL8_C6C6C6;
+ tbc_new = COL8_848484;
+ tc_old = COL8_FFFFFF;
+ tbc_old = COL8_000084;
+ }
+ for (y = 3; y <= 20; y++) {
+ for (x = 3; x <= xsize - 4; x++) {
+ c = buf[y * xsize + x];
+ if (c == tc_old && x <= xsize - 22) {
+ c = tc_new;
+ } else if (c == tbc_old) {
+ c = tbc_new;
+ }
+ buf[y * xsize + x] = c;
+ }
+ }
+ sheet_refresh(sht, 3, 3, xsize, 21);
+ return;
+}
--- /dev/null
+ 1 00000000 [FORMAT "WCOFF"]
+ 2 00000000 [INSTRSET "i486p"]
+ 3 00000000 [OPTIMIZE 1]
+ 4 00000000 [OPTION 1]
+ 5 00000000 [BITS 32]
+ 6 00000000 EXTERN _boxfill8
+ 7 00000000 EXTERN _putfonts8_asc
+ 8 00000000 EXTERN _task_now
+ 9 00000000 EXTERN _sheet_refresh
+ 10 00000000 [FILE "window.c"]
+ 11 [SECTION .text]
+ 12 00000000 GLOBAL _make_window8
+ 13 00000000 _make_window8:
+ 14 00000000 55 PUSH EBP
+ 15 00000001 89 E5 MOV EBP,ESP
+ 16 00000003 57 PUSH EDI
+ 17 00000004 56 PUSH ESI
+ 18 00000005 53 PUSH EBX
+ 19 00000006 83 EC 18 SUB ESP,24
+ 20 00000009 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 21 0000000C 8B 5D 0C MOV EBX,DWORD [12+EBP]
+ 22 0000000F 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 23 00000012 8B 75 08 MOV ESI,DWORD [8+EBP]
+ 24 00000015 8B 45 14 MOV EAX,DWORD [20+EBP]
+ 25 00000018 89 45 EC MOV DWORD [-20+EBP],EAX
+ 26 0000001B 0F BE 45 18 MOVSX EAX,BYTE [24+EBP]
+ 27 0000001F 89 45 E8 MOV DWORD [-24+EBP],EAX
+ 28 00000022 8D 43 FF LEA EAX,DWORD [-1+EBX]
+ 29 00000025 6A 00 PUSH 0
+ 30 00000027 89 45 E4 MOV DWORD [-28+EBP],EAX
+ 31 0000002A 50 PUSH EAX
+ 32 0000002B 6A 00 PUSH 0
+ 33 0000002D 6A 00 PUSH 0
+ 34 0000002F 6A 08 PUSH 8
+ 35 00000031 53 PUSH EBX
+ 36 00000032 56 PUSH ESI
+ 37 00000033 E8 [00000000] CALL _boxfill8
+ 38 00000038 8D 43 FE LEA EAX,DWORD [-2+EBX]
+ 39 0000003B 6A 01 PUSH 1
+ 40 0000003D 89 45 E0 MOV DWORD [-32+EBP],EAX
+ 41 00000040 50 PUSH EAX
+ 42 00000041 6A 01 PUSH 1
+ 43 00000043 6A 01 PUSH 1
+ 44 00000045 6A 07 PUSH 7
+ 45 00000047 53 PUSH EBX
+ 46 00000048 56 PUSH ESI
+ 47 00000049 E8 [00000000] CALL _boxfill8
+ 48 0000004E 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 49 00000051 83 C4 38 ADD ESP,56
+ 50 00000054 48 DEC EAX
+ 51 00000055 89 45 DC MOV DWORD [-36+EBP],EAX
+ 52 00000058 50 PUSH EAX
+ 53 00000059 6A 00 PUSH 0
+ 54 0000005B 6A 00 PUSH 0
+ 55 0000005D 6A 00 PUSH 0
+ 56 0000005F 6A 08 PUSH 8
+ 57 00000061 53 PUSH EBX
+ 58 00000062 56 PUSH ESI
+ 59 00000063 E8 [00000000] CALL _boxfill8
+ 60 00000068 8B 7D F0 MOV EDI,DWORD [-16+EBP]
+ 61 0000006B 83 EF 02 SUB EDI,2
+ 62 0000006E 57 PUSH EDI
+ 63 0000006F 6A 01 PUSH 1
+ 64 00000071 6A 01 PUSH 1
+ 65 00000073 6A 01 PUSH 1
+ 66 00000075 6A 07 PUSH 7
+ 67 00000077 53 PUSH EBX
+ 68 00000078 56 PUSH ESI
+ 69 00000079 E8 [00000000] CALL _boxfill8
+ 70 0000007E 83 C4 38 ADD ESP,56
+ 71 00000081 57 PUSH EDI
+ 72 00000082 FF 75 E0 PUSH DWORD [-32+EBP]
+ 73 00000085 6A 01 PUSH 1
+ 74 00000087 FF 75 E0 PUSH DWORD [-32+EBP]
+ 75 0000008A 6A 0F PUSH 15
+ 76 0000008C 53 PUSH EBX
+ 77 0000008D 56 PUSH ESI
+ 78 0000008E E8 [00000000] CALL _boxfill8
+ 79 00000093 FF 75 DC PUSH DWORD [-36+EBP]
+ 80 00000096 FF 75 E4 PUSH DWORD [-28+EBP]
+ 81 00000099 6A 00 PUSH 0
+ 82 0000009B FF 75 E4 PUSH DWORD [-28+EBP]
+ 83 0000009E 6A 00 PUSH 0
+ 84 000000A0 53 PUSH EBX
+ 85 000000A1 56 PUSH ESI
+ 86 000000A2 E8 [00000000] CALL _boxfill8
+ 87 000000A7 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 88 000000AA 83 C4 38 ADD ESP,56
+ 89 000000AD 83 E8 03 SUB EAX,3
+ 90 000000B0 50 PUSH EAX
+ 91 000000B1 8D 43 FD LEA EAX,DWORD [-3+EBX]
+ 92 000000B4 50 PUSH EAX
+ 93 000000B5 6A 02 PUSH 2
+ 94 000000B7 6A 02 PUSH 2
+ 95 000000B9 6A 08 PUSH 8
+ 96 000000BB 53 PUSH EBX
+ 97 000000BC 56 PUSH ESI
+ 98 000000BD E8 [00000000] CALL _boxfill8
+ 99 000000C2 57 PUSH EDI
+ 100 000000C3 FF 75 E0 PUSH DWORD [-32+EBP]
+ 101 000000C6 57 PUSH EDI
+ 102 000000C7 6A 01 PUSH 1
+ 103 000000C9 6A 0F PUSH 15
+ 104 000000CB 53 PUSH EBX
+ 105 000000CC 56 PUSH ESI
+ 106 000000CD E8 [00000000] CALL _boxfill8
+ 107 000000D2 83 C4 38 ADD ESP,56
+ 108 000000D5 FF 75 DC PUSH DWORD [-36+EBP]
+ 109 000000D8 FF 75 E4 PUSH DWORD [-28+EBP]
+ 110 000000DB FF 75 DC PUSH DWORD [-36+EBP]
+ 111 000000DE 6A 00 PUSH 0
+ 112 000000E0 6A 00 PUSH 0
+ 113 000000E2 53 PUSH EBX
+ 114 000000E3 56 PUSH ESI
+ 115 000000E4 E8 [00000000] CALL _boxfill8
+ 116 000000E9 89 75 08 MOV DWORD [8+EBP],ESI
+ 117 000000EC 8B 45 E8 MOV EAX,DWORD [-24+EBP]
+ 118 000000EF 89 5D 0C MOV DWORD [12+EBP],EBX
+ 119 000000F2 89 45 14 MOV DWORD [20+EBP],EAX
+ 120 000000F5 83 C4 1C ADD ESP,28
+ 121 000000F8 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 122 000000FB 89 45 10 MOV DWORD [16+EBP],EAX
+ 123 000000FE 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 124 00000101 5B POP EBX
+ 125 00000102 5E POP ESI
+ 126 00000103 5F POP EDI
+ 127 00000104 5D POP EBP
+ 128 00000105 EB 00 JMP _make_wtitle8
+ 129 [SECTION .data]
+ 130 00000000 _closebtn.0:
+ 131 00000000 4F 4F 4F 4F 4F 4F 4F 4F 4F 4F DB "OOOOOOOOOOOOOOO@"
+ 0000000A 4F 4F 4F 4F 4F 40
+ 132 00000010 4F 51 51 51 51 51 51 51 51 51 DB "OQQQQQQQQQQQQQ$@"
+ 0000001A 51 51 51 51 24 40
+ 133 00000020 4F 51 51 51 51 51 51 51 51 51 DB "OQQQQQQQQQQQQQ$@"
+ 0000002A 51 51 51 51 24 40
+ 134 00000030 4F 51 51 51 40 40 51 51 51 51 DB "OQQQ@@QQQQ@@QQ$@"
+ 0000003A 40 40 51 51 24 40
+ 135 00000040 4F 51 51 51 51 40 40 51 51 40 DB "OQQQQ@@QQ@@QQQ$@"
+ 0000004A 40 51 51 51 24 40
+ 136 00000050 4F 51 51 51 51 51 40 40 40 40 DB "OQQQQQ@@@@QQQQ$@"
+ 0000005A 51 51 51 51 24 40
+ 137 00000060 4F 51 51 51 51 51 51 40 40 51 DB "OQQQQQQ@@QQQQQ$@"
+ 0000006A 51 51 51 51 24 40
+ 138 00000070 4F 51 51 51 51 51 40 40 40 40 DB "OQQQQQ@@@@QQQQ$@"
+ 0000007A 51 51 51 51 24 40
+ 139 00000080 4F 51 51 51 51 40 40 51 51 40 DB "OQQQQ@@QQ@@QQQ$@"
+ 0000008A 40 51 51 51 24 40
+ 140 00000090 4F 51 51 51 40 40 51 51 51 51 DB "OQQQ@@QQQQ@@QQ$@"
+ 0000009A 40 40 51 51 24 40
+ 141 000000A0 4F 51 51 51 51 51 51 51 51 51 DB "OQQQQQQQQQQQQQ$@"
+ 000000AA 51 51 51 51 24 40
+ 142 000000B0 4F 51 51 51 51 51 51 51 51 51 DB "OQQQQQQQQQQQQQ$@"
+ 000000BA 51 51 51 51 24 40
+ 143 000000C0 4F 24 24 24 24 24 24 24 24 24 DB "O$$$$$$$$$$$$$$@"
+ 000000CA 24 24 24 24 24 40
+ 144 000000D0 40 40 40 40 40 40 40 40 40 40 DB "@@@@@@@@@@@@@@@@"
+ 000000DA 40 40 40 40 40 40
+ 145 [SECTION .text]
+ 146 00000107 GLOBAL _make_wtitle8
+ 147 00000107 _make_wtitle8:
+ 148 00000107 55 PUSH EBP
+ 149 00000108 89 E5 MOV EBP,ESP
+ 150 0000010A 57 PUSH EDI
+ 151 0000010B 56 PUSH ESI
+ 152 0000010C 53 PUSH EBX
+ 153 0000010D 50 PUSH EAX
+ 154 0000010E 80 7D 14 00 CMP BYTE [20+EBP],0
+ 155 00000112 0F 84 00000097 JE L3
+ 156 00000118 B3 07 MOV BL,7
+ 157 0000011A B2 0C MOV DL,12
+ 158 0000011C L4:
+ 159 0000011C 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 160 0000011F 6A 14 PUSH 20
+ 161 00000121 83 E8 04 SUB EAX,4
+ 162 00000124 31 FF XOR EDI,EDI
+ 163 00000126 50 PUSH EAX
+ 164 00000127 6A 03 PUSH 3
+ 165 00000129 6A 03 PUSH 3
+ 166 0000012B 0F B6 C2 MOVZX EAX,DL
+ 167 0000012E 50 PUSH EAX
+ 168 0000012F FF 75 0C PUSH DWORD [12+EBP]
+ 169 00000132 FF 75 08 PUSH DWORD [8+EBP]
+ 170 00000135 E8 [00000000] CALL _boxfill8
+ 171 0000013A FF 75 10 PUSH DWORD [16+EBP]
+ 172 0000013D 0F BE C3 MOVSX EAX,BL
+ 173 00000140 50 PUSH EAX
+ 174 00000141 6A 04 PUSH 4
+ 175 00000143 6A 18 PUSH 24
+ 176 00000145 FF 75 0C PUSH DWORD [12+EBP]
+ 177 00000148 FF 75 08 PUSH DWORD [8+EBP]
+ 178 0000014B E8 [00000000] CALL _putfonts8_asc
+ 179 00000150 83 C4 34 ADD ESP,52
+ 180 00000153 6B 5D 0C 05 IMUL EBX,DWORD [12+EBP],5
+ 181 00000157 C7 45 F0 00000000 MOV DWORD [-16+EBP],0
+ 182 0000015E L20:
+ 183 0000015E 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 184 00000161 8B 55 08 MOV EDX,DWORD [8+EBP]
+ 185 00000164 01 D8 ADD EAX,EBX
+ 186 00000166 31 F6 XOR ESI,ESI
+ 187 00000168 8D 4C 02 EB LEA ECX,DWORD [-21+EDX+EAX*1]
+ 188 0000016C L19:
+ 189 0000016C 8A 94 3E [00000000] MOV DL,BYTE [_closebtn.0+ESI+EDI*1]
+ 190 00000173 80 FA 40 CMP DL,64
+ 191 00000176 74 33 JE L25
+ 192 00000178 80 FA 24 CMP DL,36
+ 193 0000017B 74 2A JE L26
+ 194 0000017D 80 FA 51 CMP DL,81
+ 195 00000180 B2 08 MOV DL,8
+ 196 00000182 0F 95 C0 SETNE AL
+ 197 00000185 28 C2 SUB DL,AL
+ 198 00000187 L14:
+ 199 00000187 46 INC ESI
+ 200 00000188 88 11 MOV BYTE [ECX],DL
+ 201 0000018A 41 INC ECX
+ 202 0000018B 83 FE 0F CMP ESI,15
+ 203 0000018E 7E DC JLE L19
+ 204 00000190 FF 45 F0 INC DWORD [-16+EBP]
+ 205 00000193 83 C7 10 ADD EDI,16
+ 206 00000196 03 5D 0C ADD EBX,DWORD [12+EBP]
+ 207 00000199 83 7D F0 0D CMP DWORD [-16+EBP],13
+ 208 0000019D 7E BF JLE L20
+ 209 0000019F 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 210 000001A2 5B POP EBX
+ 211 000001A3 5E POP ESI
+ 212 000001A4 5F POP EDI
+ 213 000001A5 5D POP EBP
+ 214 000001A6 C3 RET
+ 215 000001A7 L26:
+ 216 000001A7 B2 0F MOV DL,15
+ 217 000001A9 EB DC JMP L14
+ 218 000001AB L25:
+ 219 000001AB 31 D2 XOR EDX,EDX
+ 220 000001AD EB D8 JMP L14
+ 221 000001AF L3:
+ 222 000001AF B3 08 MOV BL,8
+ 223 000001B1 B2 0F MOV DL,15
+ 224 000001B3 E9 FFFFFF64 JMP L4
+ 225 000001B8 GLOBAL _putfonts8_asc_sht
+ 226 000001B8 _putfonts8_asc_sht:
+ 227 000001B8 55 PUSH EBP
+ 228 000001B9 89 E5 MOV EBP,ESP
+ 229 000001BB 57 PUSH EDI
+ 230 000001BC 56 PUSH ESI
+ 231 000001BD 53 PUSH EBX
+ 232 000001BE 83 EC 18 SUB ESP,24
+ 233 000001C1 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 234 000001C4 8B 55 14 MOV EDX,DWORD [20+EBP]
+ 235 000001C7 8B 4D 1C MOV ECX,DWORD [28+EBP]
+ 236 000001CA 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 237 000001CD 8B 45 20 MOV EAX,DWORD [32+EBP]
+ 238 000001D0 89 55 EC MOV DWORD [-20+EBP],EDX
+ 239 000001D3 89 4D E8 MOV DWORD [-24+EBP],ECX
+ 240 000001D6 89 45 E4 MOV DWORD [-28+EBP],EAX
+ 241 000001D9 8B 7D 08 MOV EDI,DWORD [8+EBP]
+ 242 000001DC 8B 75 10 MOV ESI,DWORD [16+EBP]
+ 243 000001DF 8B 5D 18 MOV EBX,DWORD [24+EBP]
+ 244 000001E2 E8 [00000000] CALL _task_now
+ 245 000001E7 0F B6 DB MOVZX EBX,BL
+ 246 000001EA 89 45 E0 MOV DWORD [-32+EBP],EAX
+ 247 000001ED 8D 46 0F LEA EAX,DWORD [15+ESI]
+ 248 000001F0 50 PUSH EAX
+ 249 000001F1 8B 4D F0 MOV ECX,DWORD [-16+EBP]
+ 250 000001F4 8B 55 E4 MOV EDX,DWORD [-28+EBP]
+ 251 000001F7 8D 14 D1 LEA EDX,DWORD [ECX+EDX*8]
+ 252 000001FA 89 D0 MOV EAX,EDX
+ 253 000001FC 89 55 DC MOV DWORD [-36+EBP],EDX
+ 254 000001FF 48 DEC EAX
+ 255 00000200 50 PUSH EAX
+ 256 00000201 56 PUSH ESI
+ 257 00000202 51 PUSH ECX
+ 258 00000203 53 PUSH EBX
+ 259 00000204 FF 77 04 PUSH DWORD [4+EDI]
+ 260 00000207 FF 37 PUSH DWORD [EDI]
+ 261 00000209 E8 [00000000] CALL _boxfill8
+ 262 0000020E 8B 4D E0 MOV ECX,DWORD [-32+EBP]
+ 263 00000211 83 C4 1C ADD ESP,28
+ 264 00000214 80 B9 000000BC 00 CMP BYTE [188+ECX],0
+ 265 0000021B 74 09 JE L28
+ 266 0000021D 80 B9 000000BD 00 CMP BYTE [189+ECX],0
+ 267 00000224 75 40 JNE L31
+ 268 00000226 L28:
+ 269 00000226 FF 75 E8 PUSH DWORD [-24+EBP]
+ 270 00000229 0F BE 45 EC MOVSX EAX,BYTE [-20+EBP]
+ 271 0000022D 50 PUSH EAX
+ 272 0000022E 56 PUSH ESI
+ 273 0000022F FF 75 F0 PUSH DWORD [-16+EBP]
+ 274 00000232 FF 77 04 PUSH DWORD [4+EDI]
+ 275 00000235 FF 37 PUSH DWORD [EDI]
+ 276 00000237 E8 [00000000] CALL _putfonts8_asc
+ 277 0000023C 89 75 10 MOV DWORD [16+EBP],ESI
+ 278 0000023F 8B 4D F0 MOV ECX,DWORD [-16+EBP]
+ 279 00000242 8B 55 E4 MOV EDX,DWORD [-28+EBP]
+ 280 00000245 8D 46 10 LEA EAX,DWORD [16+ESI]
+ 281 00000248 83 C4 18 ADD ESP,24
+ 282 0000024B 89 45 18 MOV DWORD [24+EBP],EAX
+ 283 0000024E 89 4D 0C MOV DWORD [12+EBP],ECX
+ 284 00000251 8D 04 D1 LEA EAX,DWORD [ECX+EDX*8]
+ 285 00000254 89 45 14 MOV DWORD [20+EBP],EAX
+ 286 00000257 L30:
+ 287 00000257 89 7D 08 MOV DWORD [8+EBP],EDI
+ 288 0000025A 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 289 0000025D 5B POP EBX
+ 290 0000025E 5E POP ESI
+ 291 0000025F 5F POP EDI
+ 292 00000260 5D POP EBP
+ 293 00000261 E9 [00000000] JMP _sheet_refresh
+ 294 00000266 L31:
+ 295 00000266 FF 75 E8 PUSH DWORD [-24+EBP]
+ 296 00000269 0F BE 45 EC MOVSX EAX,BYTE [-20+EBP]
+ 297 0000026D 50 PUSH EAX
+ 298 0000026E 56 PUSH ESI
+ 299 0000026F FF 75 F0 PUSH DWORD [-16+EBP]
+ 300 00000272 FF 77 04 PUSH DWORD [4+EDI]
+ 301 00000275 FF 37 PUSH DWORD [EDI]
+ 302 00000277 E8 [00000000] CALL _putfonts8_asc
+ 303 0000027C 89 75 10 MOV DWORD [16+EBP],ESI
+ 304 0000027F 8D 46 10 LEA EAX,DWORD [16+ESI]
+ 305 00000282 83 C4 18 ADD ESP,24
+ 306 00000285 89 45 18 MOV DWORD [24+EBP],EAX
+ 307 00000288 8B 45 DC MOV EAX,DWORD [-36+EBP]
+ 308 0000028B 89 45 14 MOV DWORD [20+EBP],EAX
+ 309 0000028E 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 310 00000291 83 E8 08 SUB EAX,8
+ 311 00000294 89 45 0C MOV DWORD [12+EBP],EAX
+ 312 00000297 EB BE JMP L30
+ 313 00000299 GLOBAL _make_textbox8
+ 314 00000299 _make_textbox8:
+ 315 00000299 55 PUSH EBP
+ 316 0000029A 89 E5 MOV EBP,ESP
+ 317 0000029C 57 PUSH EDI
+ 318 0000029D 56 PUSH ESI
+ 319 0000029E 53 PUSH EBX
+ 320 0000029F 83 EC 14 SUB ESP,20
+ 321 000002A2 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 322 000002A5 8B 75 10 MOV ESI,DWORD [16+EBP]
+ 323 000002A8 03 45 14 ADD EAX,DWORD [20+EBP]
+ 324 000002AB 83 EE 03 SUB ESI,3
+ 325 000002AE 56 PUSH ESI
+ 326 000002AF 89 45 F0 MOV DWORD [-16+EBP],EAX
+ 327 000002B2 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 328 000002B5 03 45 18 ADD EAX,DWORD [24+EBP]
+ 329 000002B8 89 45 EC MOV DWORD [-20+EBP],EAX
+ 330 000002BB 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 331 000002BE 40 INC EAX
+ 332 000002BF 50 PUSH EAX
+ 333 000002C0 89 45 E8 MOV DWORD [-24+EBP],EAX
+ 334 000002C3 8B 45 0C MOV EAX,DWORD [12+EBP]
+ 335 000002C6 56 PUSH ESI
+ 336 000002C7 83 E8 02 SUB EAX,2
+ 337 000002CA 50 PUSH EAX
+ 338 000002CB 89 45 E4 MOV DWORD [-28+EBP],EAX
+ 339 000002CE 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 340 000002D1 6A 0F PUSH 15
+ 341 000002D3 FF 70 04 PUSH DWORD [4+EAX]
+ 342 000002D6 FF 30 PUSH DWORD [EAX]
+ 343 000002D8 E8 [00000000] CALL _boxfill8
+ 344 000002DD 8B 7D 0C MOV EDI,DWORD [12+EBP]
+ 345 000002E0 8B 45 EC MOV EAX,DWORD [-20+EBP]
+ 346 000002E3 83 EF 03 SUB EDI,3
+ 347 000002E6 40 INC EAX
+ 348 000002E7 50 PUSH EAX
+ 349 000002E8 89 45 E0 MOV DWORD [-32+EBP],EAX
+ 350 000002EB 57 PUSH EDI
+ 351 000002EC 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 352 000002EF 56 PUSH ESI
+ 353 000002F0 57 PUSH EDI
+ 354 000002F1 6A 0F PUSH 15
+ 355 000002F3 FF 70 04 PUSH DWORD [4+EAX]
+ 356 000002F6 FF 30 PUSH DWORD [EAX]
+ 357 000002F8 E8 [00000000] CALL _boxfill8
+ 358 000002FD 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 359 00000300 83 C4 38 ADD ESP,56
+ 360 00000303 8B 5D EC MOV EBX,DWORD [-20+EBP]
+ 361 00000306 83 C3 02 ADD EBX,2
+ 362 00000309 53 PUSH EBX
+ 363 0000030A FF 75 E8 PUSH DWORD [-24+EBP]
+ 364 0000030D 53 PUSH EBX
+ 365 0000030E 57 PUSH EDI
+ 366 0000030F 6A 07 PUSH 7
+ 367 00000311 FF 70 04 PUSH DWORD [4+EAX]
+ 368 00000314 FF 30 PUSH DWORD [EAX]
+ 369 00000316 E8 [00000000] CALL _boxfill8
+ 370 0000031B 8B 45 F0 MOV EAX,DWORD [-16+EBP]
+ 371 0000031E 53 PUSH EBX
+ 372 0000031F 83 C0 02 ADD EAX,2
+ 373 00000322 50 PUSH EAX
+ 374 00000323 56 PUSH ESI
+ 375 00000324 50 PUSH EAX
+ 376 00000325 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 377 00000328 6A 07 PUSH 7
+ 378 0000032A FF 70 04 PUSH DWORD [4+EAX]
+ 379 0000032D FF 30 PUSH DWORD [EAX]
+ 380 0000032F E8 [00000000] CALL _boxfill8
+ 381 00000334 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 382 00000337 83 C4 38 ADD ESP,56
+ 383 0000033A 8B 5D 10 MOV EBX,DWORD [16+EBP]
+ 384 0000033D 83 EB 02 SUB EBX,2
+ 385 00000340 8B 7D 0C MOV EDI,DWORD [12+EBP]
+ 386 00000343 53 PUSH EBX
+ 387 00000344 4F DEC EDI
+ 388 00000345 FF 75 F0 PUSH DWORD [-16+EBP]
+ 389 00000348 53 PUSH EBX
+ 390 00000349 57 PUSH EDI
+ 391 0000034A 6A 00 PUSH 0
+ 392 0000034C FF 70 04 PUSH DWORD [4+EAX]
+ 393 0000034F FF 30 PUSH DWORD [EAX]
+ 394 00000351 E8 [00000000] CALL _boxfill8
+ 395 00000356 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 396 00000359 FF 75 EC PUSH DWORD [-20+EBP]
+ 397 0000035C FF 75 E4 PUSH DWORD [-28+EBP]
+ 398 0000035F 53 PUSH EBX
+ 399 00000360 FF 75 E4 PUSH DWORD [-28+EBP]
+ 400 00000363 6A 00 PUSH 0
+ 401 00000365 FF 70 04 PUSH DWORD [4+EAX]
+ 402 00000368 FF 30 PUSH DWORD [EAX]
+ 403 0000036A E8 [00000000] CALL _boxfill8
+ 404 0000036F 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 405 00000372 83 C4 38 ADD ESP,56
+ 406 00000375 FF 75 E0 PUSH DWORD [-32+EBP]
+ 407 00000378 FF 75 F0 PUSH DWORD [-16+EBP]
+ 408 0000037B FF 75 E0 PUSH DWORD [-32+EBP]
+ 409 0000037E FF 75 E4 PUSH DWORD [-28+EBP]
+ 410 00000381 6A 08 PUSH 8
+ 411 00000383 FF 70 04 PUSH DWORD [4+EAX]
+ 412 00000386 FF 30 PUSH DWORD [EAX]
+ 413 00000388 E8 [00000000] CALL _boxfill8
+ 414 0000038D 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 415 00000390 FF 75 E0 PUSH DWORD [-32+EBP]
+ 416 00000393 FF 75 E8 PUSH DWORD [-24+EBP]
+ 417 00000396 53 PUSH EBX
+ 418 00000397 FF 75 E8 PUSH DWORD [-24+EBP]
+ 419 0000039A 6A 08 PUSH 8
+ 420 0000039C FF 70 04 PUSH DWORD [4+EAX]
+ 421 0000039F FF 30 PUSH DWORD [EAX]
+ 422 000003A1 E8 [00000000] CALL _boxfill8
+ 423 000003A6 8B 45 10 MOV EAX,DWORD [16+EBP]
+ 424 000003A9 83 C4 38 ADD ESP,56
+ 425 000003AC 48 DEC EAX
+ 426 000003AD FF 75 EC PUSH DWORD [-20+EBP]
+ 427 000003B0 FF 75 F0 PUSH DWORD [-16+EBP]
+ 428 000003B3 50 PUSH EAX
+ 429 000003B4 57 PUSH EDI
+ 430 000003B5 0F B6 45 1C MOVZX EAX,BYTE [28+EBP]
+ 431 000003B9 50 PUSH EAX
+ 432 000003BA 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 433 000003BD FF 70 04 PUSH DWORD [4+EAX]
+ 434 000003C0 FF 30 PUSH DWORD [EAX]
+ 435 000003C2 E8 [00000000] CALL _boxfill8
+ 436 000003C7 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 437 000003CA 5B POP EBX
+ 438 000003CB 5E POP ESI
+ 439 000003CC 5F POP EDI
+ 440 000003CD 5D POP EBP
+ 441 000003CE C3 RET
+ 442 000003CF GLOBAL _change_wtitle8
+ 443 000003CF _change_wtitle8:
+ 444 000003CF 55 PUSH EBP
+ 445 000003D0 89 E5 MOV EBP,ESP
+ 446 000003D2 57 PUSH EDI
+ 447 000003D3 56 PUSH ESI
+ 448 000003D4 53 PUSH EBX
+ 449 000003D5 83 EC 14 SUB ESP,20
+ 450 000003D8 8B 45 08 MOV EAX,DWORD [8+EBP]
+ 451 000003DB 80 7D 0C 00 CMP BYTE [12+EBP],0
+ 452 000003DF 8B 10 MOV EDX,DWORD [EAX]
+ 453 000003E1 8B 48 04 MOV ECX,DWORD [4+EAX]
+ 454 000003E4 89 55 E4 MOV DWORD [-28+EBP],EDX
+ 455 000003E7 0F 84 00000088 JE L34
+ 456 000003ED C6 45 EB 07 MOV BYTE [-21+EBP],7
+ 457 000003F1 C6 45 EA 0C MOV BYTE [-22+EBP],12
+ 458 000003F5 C6 45 E9 08 MOV BYTE [-23+EBP],8
+ 459 000003F9 C6 45 E8 0F MOV BYTE [-24+EBP],15
+ 460 000003FD L35:
+ 461 000003FD 6B F9 03 IMUL EDI,ECX,3
+ 462 00000400 C7 45 EC 00000011 MOV DWORD [-20+EBP],17
+ 463 00000407 89 7D E0 MOV DWORD [-32+EBP],EDI
+ 464 0000040A L48:
+ 465 0000040A C7 45 F0 00000003 MOV DWORD [-16+EBP],3
+ 466 00000411 8D 41 FC LEA EAX,DWORD [-4+ECX]
+ 467 00000414 39 45 F0 CMP DWORD [-16+EBP],EAX
+ 468 00000417 7F 29 JG L52
+ 469 00000419 8B 45 E4 MOV EAX,DWORD [-28+EBP]
+ 470 0000041C 8B 55 E0 MOV EDX,DWORD [-32+EBP]
+ 471 0000041F 8D 74 38 03 LEA ESI,DWORD [3+EAX+EDI*1]
+ 472 00000423 8D 5C 10 03 LEA EBX,DWORD [3+EAX+EDX*1]
+ 473 00000427 L47:
+ 474 00000427 8A 13 MOV DL,BYTE [EBX]
+ 475 00000429 3A 55 E9 CMP DL,BYTE [-23+EBP]
+ 476 0000042C 74 3A JE L53
+ 477 0000042E L44:
+ 478 0000042E 3A 55 E8 CMP DL,BYTE [-24+EBP]
+ 479 00000431 74 30 JE L54
+ 480 00000433 L45:
+ 481 00000433 88 16 MOV BYTE [ESI],DL
+ 482 00000435 8D 41 FC LEA EAX,DWORD [-4+ECX]
+ 483 00000438 FF 45 F0 INC DWORD [-16+EBP]
+ 484 0000043B 46 INC ESI
+ 485 0000043C 43 INC EBX
+ 486 0000043D 39 45 F0 CMP DWORD [-16+EBP],EAX
+ 487 00000440 7E E5 JLE L47
+ 488 00000442 L52:
+ 489 00000442 01 CF ADD EDI,ECX
+ 490 00000444 01 4D E0 ADD DWORD [-32+EBP],ECX
+ 491 00000447 FF 4D EC DEC DWORD [-20+EBP]
+ 492 0000044A 79 BE JNS L48
+ 493 0000044C 6A 15 PUSH 21
+ 494 0000044E 51 PUSH ECX
+ 495 0000044F 6A 03 PUSH 3
+ 496 00000451 6A 03 PUSH 3
+ 497 00000453 FF 75 08 PUSH DWORD [8+EBP]
+ 498 00000456 E8 [00000000] CALL _sheet_refresh
+ 499 0000045B 8D 65 F4 LEA ESP,DWORD [-12+EBP]
+ 500 0000045E 5B POP EBX
+ 501 0000045F 5E POP ESI
+ 502 00000460 5F POP EDI
+ 503 00000461 5D POP EBP
+ 504 00000462 C3 RET
+ 505 00000463 L54:
+ 506 00000463 8A 55 EA MOV DL,BYTE [-22+EBP]
+ 507 00000466 EB CB JMP L45
+ 508 00000468 L53:
+ 509 00000468 8D 41 EA LEA EAX,DWORD [-22+ECX]
+ 510 0000046B 39 45 F0 CMP DWORD [-16+EBP],EAX
+ 511 0000046E 7F BE JG L44
+ 512 00000470 8A 55 EB MOV DL,BYTE [-21+EBP]
+ 513 00000473 EB BE JMP L45
+ 514 00000475 L34:
+ 515 00000475 C6 45 EB 08 MOV BYTE [-21+EBP],8
+ 516 00000479 C6 45 EA 0F MOV BYTE [-22+EBP],15
+ 517 0000047D C6 45 E9 07 MOV BYTE [-23+EBP],7
+ 518 00000481 C6 45 E8 0C MOV BYTE [-24+EBP],12
+ 519 00000485 E9 FFFFFF73 JMP L35
--- /dev/null
+"G:\Program Files\Oracle\VirtualBox\VBoxManage" internalcommands converthd -srcformat RAW -dstformat VHD haribote.img haribote.vhd
--- /dev/null
+#
+# Name: cp932 to Unicode table
+# Unicode version: 2.0
+# Table version: 2.01
+# Table format: Format A
+# Date: 04/15/98
+#
+# Contact: Shawn.Steele@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
+0xE47E 0x8264 #CJK UNIFIED IDEOGRAPH
+0xE480 0x8262 #CJK UNIFIED IDEOGRAPH
+0xE481 0x8268 #CJK UNIFIED IDEOGRAPH
+0xE482 0x826A #CJK UNIFIED IDEOGRAPH
+0xE483 0x826B #CJK UNIFIED IDEOGRAPH
+0xE484 0x822E #CJK UNIFIED IDEOGRAPH
+0xE485 0x8271 #CJK UNIFIED IDEOGRAPH
+0xE486 0x8277 #CJK UNIFIED IDEOGRAPH
+0xE487 0x8278 #CJK UNIFIED IDEOGRAPH
+0xE488 0x827E #CJK UNIFIED IDEOGRAPH
+0xE489 0x828D #CJK UNIFIED IDEOGRAPH
+0xE48A 0x8292 #CJK UNIFIED IDEOGRAPH
+0xE48B 0x82AB #CJK UNIFIED IDEOGRAPH
+0xE48C 0x829F #CJK UNIFIED IDEOGRAPH
+0xE48D 0x82BB #CJK UNIFIED IDEOGRAPH
+0xE48E 0x82AC #CJK UNIFIED IDEOGRAPH
+0xE48F 0x82E1 #CJK UNIFIED IDEOGRAPH
+0xE490 0x82E3 #CJK UNIFIED IDEOGRAPH
+0xE491 0x82DF #CJK UNIFIED IDEOGRAPH
+0xE492 0x82D2 #CJK UNIFIED IDEOGRAPH
+0xE493 0x82F4 #CJK UNIFIED IDEOGRAPH
+0xE494 0x82F3 #CJK UNIFIED IDEOGRAPH
+0xE495 0x82FA #CJK UNIFIED IDEOGRAPH
+0xE496 0x8393 #CJK UNIFIED IDEOGRAPH
+0xE497 0x8303 #CJK UNIFIED IDEOGRAPH
+0xE498 0x82FB #CJK UNIFIED IDEOGRAPH
+0xE499 0x82F9 #CJK UNIFIED IDEOGRAPH
+0xE49A 0x82DE #CJK UNIFIED IDEOGRAPH
+0xE49B 0x8306 #CJK UNIFIED IDEOGRAPH
+0xE49C 0x82DC #CJK UNIFIED IDEOGRAPH
+0xE49D 0x8309 #CJK UNIFIED IDEOGRAPH
+0xE49E 0x82D9 #CJK UNIFIED IDEOGRAPH
+0xE49F 0x8335 #CJK UNIFIED IDEOGRAPH
+0xE4A0 0x8334 #CJK UNIFIED IDEOGRAPH
+0xE4A1 0x8316 #CJK UNIFIED IDEOGRAPH
+0xE4A2 0x8332 #CJK UNIFIED IDEOGRAPH
+0xE4A3 0x8331 #CJK UNIFIED IDEOGRAPH
+0xE4A4 0x8340 #CJK UNIFIED IDEOGRAPH
+0xE4A5 0x8339 #CJK UNIFIED IDEOGRAPH
+0xE4A6 0x8350 #CJK UNIFIED IDEOGRAPH
+0xE4A7 0x8345 #CJK UNIFIED IDEOGRAPH
+0xE4A8 0x832F #CJK UNIFIED IDEOGRAPH
+0xE4A9 0x832B #CJK UNIFIED IDEOGRAPH
+0xE4AA 0x8317 #CJK UNIFIED IDEOGRAPH
+0xE4AB 0x8318 #CJK UNIFIED IDEOGRAPH
+0xE4AC 0x8385 #CJK UNIFIED IDEOGRAPH
+0xE4AD 0x839A #CJK UNIFIED IDEOGRAPH
+0xE4AE 0x83AA #CJK UNIFIED IDEOGRAPH
+0xE4AF 0x839F #CJK UNIFIED IDEOGRAPH
+0xE4B0 0x83A2 #CJK UNIFIED IDEOGRAPH
+0xE4B1 0x8396 #CJK UNIFIED IDEOGRAPH
+0xE4B2 0x8323 #CJK UNIFIED IDEOGRAPH
+0xE4B3 0x838E #CJK UNIFIED IDEOGRAPH
+0xE4B4 0x8387 #CJK UNIFIED IDEOGRAPH
+0xE4B5 0x838A #CJK UNIFIED IDEOGRAPH
+0xE4B6 0x837C #CJK UNIFIED IDEOGRAPH
+0xE4B7 0x83B5 #CJK UNIFIED IDEOGRAPH
+0xE4B8 0x8373 #CJK UNIFIED IDEOGRAPH
+0xE4B9 0x8375 #CJK UNIFIED IDEOGRAPH
+0xE4BA 0x83A0 #CJK UNIFIED IDEOGRAPH
+0xE4BB 0x8389 #CJK UNIFIED IDEOGRAPH
+0xE4BC 0x83A8 #CJK UNIFIED IDEOGRAPH
+0xE4BD 0x83F4 #CJK UNIFIED IDEOGRAPH
+0xE4BE 0x8413 #CJK UNIFIED IDEOGRAPH
+0xE4BF 0x83EB #CJK UNIFIED IDEOGRAPH
+0xE4C0 0x83CE #CJK UNIFIED IDEOGRAPH
+0xE4C1 0x83FD #CJK UNIFIED IDEOGRAPH
+0xE4C2 0x8403 #CJK UNIFIED IDEOGRAPH
+0xE4C3 0x83D8 #CJK UNIFIED IDEOGRAPH
+0xE4C4 0x840B #CJK UNIFIED IDEOGRAPH
+0xE4C5 0x83C1 #CJK UNIFIED IDEOGRAPH
+0xE4C6 0x83F7 #CJK UNIFIED IDEOGRAPH
+0xE4C7 0x8407 #CJK UNIFIED IDEOGRAPH
+0xE4C8 0x83E0 #CJK UNIFIED IDEOGRAPH
+0xE4C9 0x83F2 #CJK UNIFIED IDEOGRAPH
+0xE4CA 0x840D #CJK UNIFIED IDEOGRAPH
+0xE4CB 0x8422 #CJK UNIFIED IDEOGRAPH
+0xE4CC 0x8420 #CJK UNIFIED IDEOGRAPH
+0xE4CD 0x83BD #CJK UNIFIED IDEOGRAPH
+0xE4CE 0x8438 #CJK UNIFIED IDEOGRAPH
+0xE4CF 0x8506 #CJK UNIFIED IDEOGRAPH
+0xE4D0 0x83FB #CJK UNIFIED IDEOGRAPH
+0xE4D1 0x846D #CJK UNIFIED IDEOGRAPH
+0xE4D2 0x842A #CJK UNIFIED IDEOGRAPH
+0xE4D3 0x843C #CJK UNIFIED IDEOGRAPH
+0xE4D4 0x855A #CJK UNIFIED IDEOGRAPH
+0xE4D5 0x8484 #CJK UNIFIED IDEOGRAPH
+0xE4D6 0x8477 #CJK UNIFIED IDEOGRAPH
+0xE4D7 0x846B #CJK UNIFIED IDEOGRAPH
+0xE4D8 0x84AD #CJK UNIFIED IDEOGRAPH
+0xE4D9 0x846E #CJK UNIFIED IDEOGRAPH
+0xE4DA 0x8482 #CJK UNIFIED IDEOGRAPH
+0xE4DB 0x8469 #CJK UNIFIED IDEOGRAPH
+0xE4DC 0x8446 #CJK UNIFIED IDEOGRAPH
+0xE4DD 0x842C #CJK UNIFIED IDEOGRAPH
+0xE4DE 0x846F #CJK UNIFIED IDEOGRAPH
+0xE4DF 0x8479 #CJK UNIFIED IDEOGRAPH
+0xE4E0 0x8435 #CJK UNIFIED IDEOGRAPH
+0xE4E1 0x84CA #CJK UNIFIED IDEOGRAPH
+0xE4E2 0x8462 #CJK UNIFIED IDEOGRAPH
+0xE4E3 0x84B9 #CJK UNIFIED IDEOGRAPH
+0xE4E4 0x84BF #CJK UNIFIED IDEOGRAPH
+0xE4E5 0x849F #CJK UNIFIED IDEOGRAPH
+0xE4E6 0x84D9 #CJK UNIFIED IDEOGRAPH
+0xE4E7 0x84CD #CJK UNIFIED IDEOGRAPH
+0xE4E8 0x84BB #CJK UNIFIED IDEOGRAPH
+0xE4E9 0x84DA #CJK UNIFIED IDEOGRAPH
+0xE4EA 0x84D0 #CJK UNIFIED IDEOGRAPH
+0xE4EB 0x84C1 #CJK UNIFIED IDEOGRAPH
+0xE4EC 0x84C6 #CJK UNIFIED IDEOGRAPH
+0xE4ED 0x84D6 #CJK UNIFIED IDEOGRAPH
+0xE4EE 0x84A1 #CJK UNIFIED IDEOGRAPH
+0xE4EF 0x8521 #CJK UNIFIED IDEOGRAPH
+0xE4F0 0x84FF #CJK UNIFIED IDEOGRAPH
+0xE4F1 0x84F4 #CJK UNIFIED IDEOGRAPH
+0xE4F2 0x8517 #CJK UNIFIED IDEOGRAPH
+0xE4F3 0x8518 #CJK UNIFIED IDEOGRAPH
+0xE4F4 0x852C #CJK UNIFIED IDEOGRAPH
+0xE4F5 0x851F #CJK UNIFIED IDEOGRAPH
+0xE4F6 0x8515 #CJK UNIFIED IDEOGRAPH
+0xE4F7 0x8514 #CJK UNIFIED IDEOGRAPH
+0xE4F8 0x84FC #CJK UNIFIED IDEOGRAPH
+0xE4F9 0x8540 #CJK UNIFIED IDEOGRAPH
+0xE4FA 0x8563 #CJK UNIFIED IDEOGRAPH
+0xE4FB 0x8558 #CJK UNIFIED IDEOGRAPH
+0xE4FC 0x8548 #CJK UNIFIED IDEOGRAPH
+0xE540 0x8541 #CJK UNIFIED IDEOGRAPH
+0xE541 0x8602 #CJK UNIFIED IDEOGRAPH
+0xE542 0x854B #CJK UNIFIED IDEOGRAPH
+0xE543 0x8555 #CJK UNIFIED IDEOGRAPH
+0xE544 0x8580 #CJK UNIFIED IDEOGRAPH
+0xE545 0x85A4 #CJK UNIFIED IDEOGRAPH
+0xE546 0x8588 #CJK UNIFIED IDEOGRAPH
+0xE547 0x8591 #CJK UNIFIED IDEOGRAPH
+0xE548 0x858A #CJK UNIFIED IDEOGRAPH
+0xE549 0x85A8 #CJK UNIFIED IDEOGRAPH
+0xE54A 0x856D #CJK UNIFIED IDEOGRAPH
+0xE54B 0x8594 #CJK UNIFIED IDEOGRAPH
+0xE54C 0x859B #CJK UNIFIED IDEOGRAPH
+0xE54D 0x85EA #CJK UNIFIED IDEOGRAPH
+0xE54E 0x8587 #CJK UNIFIED IDEOGRAPH
+0xE54F 0x859C #CJK UNIFIED IDEOGRAPH
+0xE550 0x8577 #CJK UNIFIED IDEOGRAPH
+0xE551 0x857E #CJK UNIFIED IDEOGRAPH
+0xE552 0x8590 #CJK UNIFIED IDEOGRAPH
+0xE553 0x85C9 #CJK UNIFIED IDEOGRAPH
+0xE554 0x85BA #CJK UNIFIED IDEOGRAPH
+0xE555 0x85CF #CJK UNIFIED IDEOGRAPH
+0xE556 0x85B9 #CJK UNIFIED IDEOGRAPH
+0xE557 0x85D0 #CJK UNIFIED IDEOGRAPH
+0xE558 0x85D5 #CJK UNIFIED IDEOGRAPH
+0xE559 0x85DD #CJK UNIFIED IDEOGRAPH
+0xE55A 0x85E5 #CJK UNIFIED IDEOGRAPH
+0xE55B 0x85DC #CJK UNIFIED IDEOGRAPH
+0xE55C 0x85F9 #CJK UNIFIED IDEOGRAPH
+0xE55D 0x860A #CJK UNIFIED IDEOGRAPH
+0xE55E 0x8613 #CJK UNIFIED IDEOGRAPH
+0xE55F 0x860B #CJK UNIFIED IDEOGRAPH
+0xE560 0x85FE #CJK UNIFIED IDEOGRAPH
+0xE561 0x85FA #CJK UNIFIED IDEOGRAPH
+0xE562 0x8606 #CJK UNIFIED IDEOGRAPH
+0xE563 0x8622 #CJK UNIFIED IDEOGRAPH
+0xE564 0x861A #CJK UNIFIED IDEOGRAPH
+0xE565 0x8630 #CJK UNIFIED IDEOGRAPH
+0xE566 0x863F #CJK UNIFIED IDEOGRAPH
+0xE567 0x864D #CJK UNIFIED IDEOGRAPH
+0xE568 0x4E55 #CJK UNIFIED IDEOGRAPH
+0xE569 0x8654 #CJK UNIFIED IDEOGRAPH
+0xE56A 0x865F #CJK UNIFIED IDEOGRAPH
+0xE56B 0x8667 #CJK UNIFIED IDEOGRAPH
+0xE56C 0x8671 #CJK UNIFIED IDEOGRAPH
+0xE56D 0x8693 #CJK UNIFIED IDEOGRAPH
+0xE56E 0x86A3 #CJK UNIFIED IDEOGRAPH
+0xE56F 0x86A9 #CJK UNIFIED IDEOGRAPH
+0xE570 0x86AA #CJK UNIFIED IDEOGRAPH
+0xE571 0x868B #CJK UNIFIED IDEOGRAPH
+0xE572 0x868C #CJK UNIFIED IDEOGRAPH
+0xE573 0x86B6 #CJK UNIFIED IDEOGRAPH
+0xE574 0x86AF #CJK UNIFIED IDEOGRAPH
+0xE575 0x86C4 #CJK UNIFIED IDEOGRAPH
+0xE576 0x86C6 #CJK UNIFIED IDEOGRAPH
+0xE577 0x86B0 #CJK UNIFIED IDEOGRAPH
+0xE578 0x86C9 #CJK UNIFIED IDEOGRAPH
+0xE579 0x8823 #CJK UNIFIED IDEOGRAPH
+0xE57A 0x86AB #CJK UNIFIED IDEOGRAPH
+0xE57B 0x86D4 #CJK UNIFIED IDEOGRAPH
+0xE57C 0x86DE #CJK UNIFIED IDEOGRAPH
+0xE57D 0x86E9 #CJK UNIFIED IDEOGRAPH
+0xE57E 0x86EC #CJK UNIFIED IDEOGRAPH
+0xE580 0x86DF #CJK UNIFIED IDEOGRAPH
+0xE581 0x86DB #CJK UNIFIED IDEOGRAPH
+0xE582 0x86EF #CJK UNIFIED IDEOGRAPH
+0xE583 0x8712 #CJK UNIFIED IDEOGRAPH
+0xE584 0x8706 #CJK UNIFIED IDEOGRAPH
+0xE585 0x8708 #CJK UNIFIED IDEOGRAPH
+0xE586 0x8700 #CJK UNIFIED IDEOGRAPH
+0xE587 0x8703 #CJK UNIFIED IDEOGRAPH
+0xE588 0x86FB #CJK UNIFIED IDEOGRAPH
+0xE589 0x8711 #CJK UNIFIED IDEOGRAPH
+0xE58A 0x8709 #CJK UNIFIED IDEOGRAPH
+0xE58B 0x870D #CJK UNIFIED IDEOGRAPH
+0xE58C 0x86F9 #CJK UNIFIED IDEOGRAPH
+0xE58D 0x870A #CJK UNIFIED IDEOGRAPH
+0xE58E 0x8734 #CJK UNIFIED IDEOGRAPH
+0xE58F 0x873F #CJK UNIFIED IDEOGRAPH
+0xE590 0x8737 #CJK UNIFIED IDEOGRAPH
+0xE591 0x873B #CJK UNIFIED IDEOGRAPH
+0xE592 0x8725 #CJK UNIFIED IDEOGRAPH
+0xE593 0x8729 #CJK UNIFIED IDEOGRAPH
+0xE594 0x871A #CJK UNIFIED IDEOGRAPH
+0xE595 0x8760 #CJK UNIFIED IDEOGRAPH
+0xE596 0x875F #CJK UNIFIED IDEOGRAPH
+0xE597 0x8778 #CJK UNIFIED IDEOGRAPH
+0xE598 0x874C #CJK UNIFIED IDEOGRAPH
+0xE599 0x874E #CJK UNIFIED IDEOGRAPH
+0xE59A 0x8774 #CJK UNIFIED IDEOGRAPH
+0xE59B 0x8757 #CJK UNIFIED IDEOGRAPH
+0xE59C 0x8768 #CJK UNIFIED IDEOGRAPH
+0xE59D 0x876E #CJK UNIFIED IDEOGRAPH
+0xE59E 0x8759 #CJK UNIFIED IDEOGRAPH
+0xE59F 0x8753 #CJK UNIFIED IDEOGRAPH
+0xE5A0 0x8763 #CJK UNIFIED IDEOGRAPH
+0xE5A1 0x876A #CJK UNIFIED IDEOGRAPH
+0xE5A2 0x8805 #CJK UNIFIED IDEOGRAPH
+0xE5A3 0x87A2 #CJK UNIFIED IDEOGRAPH
+0xE5A4 0x879F #CJK UNIFIED IDEOGRAPH
+0xE5A5 0x8782 #CJK UNIFIED IDEOGRAPH
+0xE5A6 0x87AF #CJK UNIFIED IDEOGRAPH
+0xE5A7 0x87CB #CJK UNIFIED IDEOGRAPH
+0xE5A8 0x87BD #CJK UNIFIED IDEOGRAPH
+0xE5A9 0x87C0 #CJK UNIFIED IDEOGRAPH
+0xE5AA 0x87D0 #CJK UNIFIED IDEOGRAPH
+0xE5AB 0x96D6 #CJK UNIFIED IDEOGRAPH
+0xE5AC 0x87AB #CJK UNIFIED IDEOGRAPH
+0xE5AD 0x87C4 #CJK UNIFIED IDEOGRAPH
+0xE5AE 0x87B3 #CJK UNIFIED IDEOGRAPH
+0xE5AF 0x87C7 #CJK UNIFIED IDEOGRAPH
+0xE5B0 0x87C6 #CJK UNIFIED IDEOGRAPH
+0xE5B1 0x87BB #CJK UNIFIED IDEOGRAPH
+0xE5B2 0x87EF #CJK UNIFIED IDEOGRAPH
+0xE5B3 0x87F2 #CJK UNIFIED IDEOGRAPH
+0xE5B4 0x87E0 #CJK UNIFIED IDEOGRAPH
+0xE5B5 0x880F #CJK UNIFIED IDEOGRAPH
+0xE5B6 0x880D #CJK UNIFIED IDEOGRAPH
+0xE5B7 0x87FE #CJK UNIFIED IDEOGRAPH
+0xE5B8 0x87F6 #CJK UNIFIED IDEOGRAPH
+0xE5B9 0x87F7 #CJK UNIFIED IDEOGRAPH
+0xE5BA 0x880E #CJK UNIFIED IDEOGRAPH
+0xE5BB 0x87D2 #CJK UNIFIED IDEOGRAPH
+0xE5BC 0x8811 #CJK UNIFIED IDEOGRAPH
+0xE5BD 0x8816 #CJK UNIFIED IDEOGRAPH
+0xE5BE 0x8815 #CJK UNIFIED IDEOGRAPH
+0xE5BF 0x8822 #CJK UNIFIED IDEOGRAPH
+0xE5C0 0x8821 #CJK UNIFIED IDEOGRAPH
+0xE5C1 0x8831 #CJK UNIFIED IDEOGRAPH
+0xE5C2 0x8836 #CJK UNIFIED IDEOGRAPH
+0xE5C3 0x8839 #CJK UNIFIED IDEOGRAPH
+0xE5C4 0x8827 #CJK UNIFIED IDEOGRAPH
+0xE5C5 0x883B #CJK UNIFIED IDEOGRAPH
+0xE5C6 0x8844 #CJK UNIFIED IDEOGRAPH
+0xE5C7 0x8842 #CJK UNIFIED IDEOGRAPH
+0xE5C8 0x8852 #CJK UNIFIED IDEOGRAPH
+0xE5C9 0x8859 #CJK UNIFIED IDEOGRAPH
+0xE5CA 0x885E #CJK UNIFIED IDEOGRAPH
+0xE5CB 0x8862 #CJK UNIFIED IDEOGRAPH
+0xE5CC 0x886B #CJK UNIFIED IDEOGRAPH
+0xE5CD 0x8881 #CJK UNIFIED IDEOGRAPH
+0xE5CE 0x887E #CJK UNIFIED IDEOGRAPH
+0xE5CF 0x889E #CJK UNIFIED IDEOGRAPH
+0xE5D0 0x8875 #CJK UNIFIED IDEOGRAPH
+0xE5D1 0x887D #CJK UNIFIED IDEOGRAPH
+0xE5D2 0x88B5 #CJK UNIFIED IDEOGRAPH
+0xE5D3 0x8872 #CJK UNIFIED IDEOGRAPH
+0xE5D4 0x8882 #CJK UNIFIED IDEOGRAPH
+0xE5D5 0x8897 #CJK UNIFIED IDEOGRAPH
+0xE5D6 0x8892 #CJK UNIFIED IDEOGRAPH
+0xE5D7 0x88AE #CJK UNIFIED IDEOGRAPH
+0xE5D8 0x8899 #CJK UNIFIED IDEOGRAPH
+0xE5D9 0x88A2 #CJK UNIFIED IDEOGRAPH
+0xE5DA 0x888D #CJK UNIFIED IDEOGRAPH
+0xE5DB 0x88A4 #CJK UNIFIED IDEOGRAPH
+0xE5DC 0x88B0 #CJK UNIFIED IDEOGRAPH
+0xE5DD 0x88BF #CJK UNIFIED IDEOGRAPH
+0xE5DE 0x88B1 #CJK UNIFIED IDEOGRAPH
+0xE5DF 0x88C3 #CJK UNIFIED IDEOGRAPH
+0xE5E0 0x88C4 #CJK UNIFIED IDEOGRAPH
+0xE5E1 0x88D4 #CJK UNIFIED IDEOGRAPH
+0xE5E2 0x88D8 #CJK UNIFIED IDEOGRAPH
+0xE5E3 0x88D9 #CJK UNIFIED IDEOGRAPH
+0xE5E4 0x88DD #CJK UNIFIED IDEOGRAPH
+0xE5E5 0x88F9 #CJK UNIFIED IDEOGRAPH
+0xE5E6 0x8902 #CJK UNIFIED IDEOGRAPH
+0xE5E7 0x88FC #CJK UNIFIED IDEOGRAPH
+0xE5E8 0x88F4 #CJK UNIFIED IDEOGRAPH
+0xE5E9 0x88E8 #CJK UNIFIED IDEOGRAPH
+0xE5EA 0x88F2 #CJK UNIFIED IDEOGRAPH
+0xE5EB 0x8904 #CJK UNIFIED IDEOGRAPH
+0xE5EC 0x890C #CJK UNIFIED IDEOGRAPH
+0xE5ED 0x890A #CJK UNIFIED IDEOGRAPH
+0xE5EE 0x8913 #CJK UNIFIED IDEOGRAPH
+0xE5EF 0x8943 #CJK UNIFIED IDEOGRAPH
+0xE5F0 0x891E #CJK UNIFIED IDEOGRAPH
+0xE5F1 0x8925 #CJK UNIFIED IDEOGRAPH
+0xE5F2 0x892A #CJK UNIFIED IDEOGRAPH
+0xE5F3 0x892B #CJK UNIFIED IDEOGRAPH
+0xE5F4 0x8941 #CJK UNIFIED IDEOGRAPH
+0xE5F5 0x8944 #CJK UNIFIED IDEOGRAPH
+0xE5F6 0x893B #CJK UNIFIED IDEOGRAPH
+0xE5F7 0x8936 #CJK UNIFIED IDEOGRAPH
+0xE5F8 0x8938 #CJK UNIFIED IDEOGRAPH
+0xE5F9 0x894C #CJK UNIFIED IDEOGRAPH
+0xE5FA 0x891D #CJK UNIFIED IDEOGRAPH
+0xE5FB 0x8960 #CJK UNIFIED IDEOGRAPH
+0xE5FC 0x895E #CJK UNIFIED IDEOGRAPH
+0xE640 0x8966 #CJK UNIFIED IDEOGRAPH
+0xE641 0x8964 #CJK UNIFIED IDEOGRAPH
+0xE642 0x896D #CJK UNIFIED IDEOGRAPH
+0xE643 0x896A #CJK UNIFIED IDEOGRAPH
+0xE644 0x896F #CJK UNIFIED IDEOGRAPH
+0xE645 0x8974 #CJK UNIFIED IDEOGRAPH
+0xE646 0x8977 #CJK UNIFIED IDEOGRAPH
+0xE647 0x897E #CJK UNIFIED IDEOGRAPH
+0xE648 0x8983 #CJK UNIFIED IDEOGRAPH
+0xE649 0x8988 #CJK UNIFIED IDEOGRAPH
+0xE64A 0x898A #CJK UNIFIED IDEOGRAPH
+0xE64B 0x8993 #CJK UNIFIED IDEOGRAPH
+0xE64C 0x8998 #CJK UNIFIED IDEOGRAPH
+0xE64D 0x89A1 #CJK UNIFIED IDEOGRAPH
+0xE64E 0x89A9 #CJK UNIFIED IDEOGRAPH
+0xE64F 0x89A6 #CJK UNIFIED IDEOGRAPH
+0xE650 0x89AC #CJK UNIFIED IDEOGRAPH
+0xE651 0x89AF #CJK UNIFIED IDEOGRAPH
+0xE652 0x89B2 #CJK UNIFIED IDEOGRAPH
+0xE653 0x89BA #CJK UNIFIED IDEOGRAPH
+0xE654 0x89BD #CJK UNIFIED IDEOGRAPH
+0xE655 0x89BF #CJK UNIFIED IDEOGRAPH
+0xE656 0x89C0 #CJK UNIFIED IDEOGRAPH
+0xE657 0x89DA #CJK UNIFIED IDEOGRAPH
+0xE658 0x89DC #CJK UNIFIED IDEOGRAPH
+0xE659 0x89DD #CJK UNIFIED IDEOGRAPH
+0xE65A 0x89E7 #CJK UNIFIED IDEOGRAPH
+0xE65B 0x89F4 #CJK UNIFIED IDEOGRAPH
+0xE65C 0x89F8 #CJK UNIFIED IDEOGRAPH
+0xE65D 0x8A03 #CJK UNIFIED IDEOGRAPH
+0xE65E 0x8A16 #CJK UNIFIED IDEOGRAPH
+0xE65F 0x8A10 #CJK UNIFIED IDEOGRAPH
+0xE660 0x8A0C #CJK UNIFIED IDEOGRAPH
+0xE661 0x8A1B #CJK UNIFIED IDEOGRAPH
+0xE662 0x8A1D #CJK UNIFIED IDEOGRAPH
+0xE663 0x8A25 #CJK UNIFIED IDEOGRAPH
+0xE664 0x8A36 #CJK UNIFIED IDEOGRAPH
+0xE665 0x8A41 #CJK UNIFIED IDEOGRAPH
+0xE666 0x8A5B #CJK UNIFIED IDEOGRAPH
+0xE667 0x8A52 #CJK UNIFIED IDEOGRAPH
+0xE668 0x8A46 #CJK UNIFIED IDEOGRAPH
+0xE669 0x8A48 #CJK UNIFIED IDEOGRAPH
+0xE66A 0x8A7C #CJK UNIFIED IDEOGRAPH
+0xE66B 0x8A6D #CJK UNIFIED IDEOGRAPH
+0xE66C 0x8A6C #CJK UNIFIED IDEOGRAPH
+0xE66D 0x8A62 #CJK UNIFIED IDEOGRAPH
+0xE66E 0x8A85 #CJK UNIFIED IDEOGRAPH
+0xE66F 0x8A82 #CJK UNIFIED IDEOGRAPH
+0xE670 0x8A84 #CJK UNIFIED IDEOGRAPH
+0xE671 0x8AA8 #CJK UNIFIED IDEOGRAPH
+0xE672 0x8AA1 #CJK UNIFIED IDEOGRAPH
+0xE673 0x8A91 #CJK UNIFIED IDEOGRAPH
+0xE674 0x8AA5 #CJK UNIFIED IDEOGRAPH
+0xE675 0x8AA6 #CJK UNIFIED IDEOGRAPH
+0xE676 0x8A9A #CJK UNIFIED IDEOGRAPH
+0xE677 0x8AA3 #CJK UNIFIED IDEOGRAPH
+0xE678 0x8AC4 #CJK UNIFIED IDEOGRAPH
+0xE679 0x8ACD #CJK UNIFIED IDEOGRAPH
+0xE67A 0x8AC2 #CJK UNIFIED IDEOGRAPH
+0xE67B 0x8ADA #CJK UNIFIED IDEOGRAPH
+0xE67C 0x8AEB #CJK UNIFIED IDEOGRAPH
+0xE67D 0x8AF3 #CJK UNIFIED IDEOGRAPH
+0xE67E 0x8AE7 #CJK UNIFIED IDEOGRAPH
+0xE680 0x8AE4 #CJK UNIFIED IDEOGRAPH
+0xE681 0x8AF1 #CJK UNIFIED IDEOGRAPH
+0xE682 0x8B14 #CJK UNIFIED IDEOGRAPH
+0xE683 0x8AE0 #CJK UNIFIED IDEOGRAPH
+0xE684 0x8AE2 #CJK UNIFIED IDEOGRAPH
+0xE685 0x8AF7 #CJK UNIFIED IDEOGRAPH
+0xE686 0x8ADE #CJK UNIFIED IDEOGRAPH
+0xE687 0x8ADB #CJK UNIFIED IDEOGRAPH
+0xE688 0x8B0C #CJK UNIFIED IDEOGRAPH
+0xE689 0x8B07 #CJK UNIFIED IDEOGRAPH
+0xE68A 0x8B1A #CJK UNIFIED IDEOGRAPH
+0xE68B 0x8AE1 #CJK UNIFIED IDEOGRAPH
+0xE68C 0x8B16 #CJK UNIFIED IDEOGRAPH
+0xE68D 0x8B10 #CJK UNIFIED IDEOGRAPH
+0xE68E 0x8B17 #CJK UNIFIED IDEOGRAPH
+0xE68F 0x8B20 #CJK UNIFIED IDEOGRAPH
+0xE690 0x8B33 #CJK UNIFIED IDEOGRAPH
+0xE691 0x97AB #CJK UNIFIED IDEOGRAPH
+0xE692 0x8B26 #CJK UNIFIED IDEOGRAPH
+0xE693 0x8B2B #CJK UNIFIED IDEOGRAPH
+0xE694 0x8B3E #CJK UNIFIED IDEOGRAPH
+0xE695 0x8B28 #CJK UNIFIED IDEOGRAPH
+0xE696 0x8B41 #CJK UNIFIED IDEOGRAPH
+0xE697 0x8B4C #CJK UNIFIED IDEOGRAPH
+0xE698 0x8B4F #CJK UNIFIED IDEOGRAPH
+0xE699 0x8B4E #CJK UNIFIED IDEOGRAPH
+0xE69A 0x8B49 #CJK UNIFIED IDEOGRAPH
+0xE69B 0x8B56 #CJK UNIFIED IDEOGRAPH
+0xE69C 0x8B5B #CJK UNIFIED IDEOGRAPH
+0xE69D 0x8B5A #CJK UNIFIED IDEOGRAPH
+0xE69E 0x8B6B #CJK UNIFIED IDEOGRAPH
+0xE69F 0x8B5F #CJK UNIFIED IDEOGRAPH
+0xE6A0 0x8B6C #CJK UNIFIED IDEOGRAPH
+0xE6A1 0x8B6F #CJK UNIFIED IDEOGRAPH
+0xE6A2 0x8B74 #CJK UNIFIED IDEOGRAPH
+0xE6A3 0x8B7D #CJK UNIFIED IDEOGRAPH
+0xE6A4 0x8B80 #CJK UNIFIED IDEOGRAPH
+0xE6A5 0x8B8C #CJK UNIFIED IDEOGRAPH
+0xE6A6 0x8B8E #CJK UNIFIED IDEOGRAPH
+0xE6A7 0x8B92 #CJK UNIFIED IDEOGRAPH
+0xE6A8 0x8B93 #CJK UNIFIED IDEOGRAPH
+0xE6A9 0x8B96 #CJK UNIFIED IDEOGRAPH
+0xE6AA 0x8B99 #CJK UNIFIED IDEOGRAPH
+0xE6AB 0x8B9A #CJK UNIFIED IDEOGRAPH
+0xE6AC 0x8C3A #CJK UNIFIED IDEOGRAPH
+0xE6AD 0x8C41 #CJK UNIFIED IDEOGRAPH
+0xE6AE 0x8C3F #CJK UNIFIED IDEOGRAPH
+0xE6AF 0x8C48 #CJK UNIFIED IDEOGRAPH
+0xE6B0 0x8C4C #CJK UNIFIED IDEOGRAPH
+0xE6B1 0x8C4E #CJK UNIFIED IDEOGRAPH
+0xE6B2 0x8C50 #CJK UNIFIED IDEOGRAPH
+0xE6B3 0x8C55 #CJK UNIFIED IDEOGRAPH
+0xE6B4 0x8C62 #CJK UNIFIED IDEOGRAPH
+0xE6B5 0x8C6C #CJK UNIFIED IDEOGRAPH
+0xE6B6 0x8C78 #CJK UNIFIED IDEOGRAPH
+0xE6B7 0x8C7A #CJK UNIFIED IDEOGRAPH
+0xE6B8 0x8C82 #CJK UNIFIED IDEOGRAPH
+0xE6B9 0x8C89 #CJK UNIFIED IDEOGRAPH
+0xE6BA 0x8C85 #CJK UNIFIED IDEOGRAPH
+0xE6BB 0x8C8A #CJK UNIFIED IDEOGRAPH
+0xE6BC 0x8C8D #CJK UNIFIED IDEOGRAPH
+0xE6BD 0x8C8E #CJK UNIFIED IDEOGRAPH
+0xE6BE 0x8C94 #CJK UNIFIED IDEOGRAPH
+0xE6BF 0x8C7C #CJK UNIFIED IDEOGRAPH
+0xE6C0 0x8C98 #CJK UNIFIED IDEOGRAPH
+0xE6C1 0x621D #CJK UNIFIED IDEOGRAPH
+0xE6C2 0x8CAD #CJK UNIFIED IDEOGRAPH
+0xE6C3 0x8CAA #CJK UNIFIED IDEOGRAPH
+0xE6C4 0x8CBD #CJK UNIFIED IDEOGRAPH
+0xE6C5 0x8CB2 #CJK UNIFIED IDEOGRAPH
+0xE6C6 0x8CB3 #CJK UNIFIED IDEOGRAPH
+0xE6C7 0x8CAE #CJK UNIFIED IDEOGRAPH
+0xE6C8 0x8CB6 #CJK UNIFIED IDEOGRAPH
+0xE6C9 0x8CC8 #CJK UNIFIED IDEOGRAPH
+0xE6CA 0x8CC1 #CJK UNIFIED IDEOGRAPH
+0xE6CB 0x8CE4 #CJK UNIFIED IDEOGRAPH
+0xE6CC 0x8CE3 #CJK UNIFIED IDEOGRAPH
+0xE6CD 0x8CDA #CJK UNIFIED IDEOGRAPH
+0xE6CE 0x8CFD #CJK UNIFIED IDEOGRAPH
+0xE6CF 0x8CFA #CJK UNIFIED IDEOGRAPH
+0xE6D0 0x8CFB #CJK UNIFIED IDEOGRAPH
+0xE6D1 0x8D04 #CJK UNIFIED IDEOGRAPH
+0xE6D2 0x8D05 #CJK UNIFIED IDEOGRAPH
+0xE6D3 0x8D0A #CJK UNIFIED IDEOGRAPH
+0xE6D4 0x8D07 #CJK UNIFIED IDEOGRAPH
+0xE6D5 0x8D0F #CJK UNIFIED IDEOGRAPH
+0xE6D6 0x8D0D #CJK UNIFIED IDEOGRAPH
+0xE6D7 0x8D10 #CJK UNIFIED IDEOGRAPH
+0xE6D8 0x9F4E #CJK UNIFIED IDEOGRAPH
+0xE6D9 0x8D13 #CJK UNIFIED IDEOGRAPH
+0xE6DA 0x8CCD #CJK UNIFIED IDEOGRAPH
+0xE6DB 0x8D14 #CJK UNIFIED IDEOGRAPH
+0xE6DC 0x8D16 #CJK UNIFIED IDEOGRAPH
+0xE6DD 0x8D67 #CJK UNIFIED IDEOGRAPH
+0xE6DE 0x8D6D #CJK UNIFIED IDEOGRAPH
+0xE6DF 0x8D71 #CJK UNIFIED IDEOGRAPH
+0xE6E0 0x8D73 #CJK UNIFIED IDEOGRAPH
+0xE6E1 0x8D81 #CJK UNIFIED IDEOGRAPH
+0xE6E2 0x8D99 #CJK UNIFIED IDEOGRAPH
+0xE6E3 0x8DC2 #CJK UNIFIED IDEOGRAPH
+0xE6E4 0x8DBE #CJK UNIFIED IDEOGRAPH
+0xE6E5 0x8DBA #CJK UNIFIED IDEOGRAPH
+0xE6E6 0x8DCF #CJK UNIFIED IDEOGRAPH
+0xE6E7 0x8DDA #CJK UNIFIED IDEOGRAPH
+0xE6E8 0x8DD6 #CJK UNIFIED IDEOGRAPH
+0xE6E9 0x8DCC #CJK UNIFIED IDEOGRAPH
+0xE6EA 0x8DDB #CJK UNIFIED IDEOGRAPH
+0xE6EB 0x8DCB #CJK UNIFIED IDEOGRAPH
+0xE6EC 0x8DEA #CJK UNIFIED IDEOGRAPH
+0xE6ED 0x8DEB #CJK UNIFIED IDEOGRAPH
+0xE6EE 0x8DDF #CJK UNIFIED IDEOGRAPH
+0xE6EF 0x8DE3 #CJK UNIFIED IDEOGRAPH
+0xE6F0 0x8DFC #CJK UNIFIED IDEOGRAPH
+0xE6F1 0x8E08 #CJK UNIFIED IDEOGRAPH
+0xE6F2 0x8E09 #CJK UNIFIED IDEOGRAPH
+0xE6F3 0x8DFF #CJK UNIFIED IDEOGRAPH
+0xE6F4 0x8E1D #CJK UNIFIED IDEOGRAPH
+0xE6F5 0x8E1E #CJK UNIFIED IDEOGRAPH
+0xE6F6 0x8E10 #CJK UNIFIED IDEOGRAPH
+0xE6F7 0x8E1F #CJK UNIFIED IDEOGRAPH
+0xE6F8 0x8E42 #CJK UNIFIED IDEOGRAPH
+0xE6F9 0x8E35 #CJK UNIFIED IDEOGRAPH
+0xE6FA 0x8E30 #CJK UNIFIED IDEOGRAPH
+0xE6FB 0x8E34 #CJK UNIFIED IDEOGRAPH
+0xE6FC 0x8E4A #CJK UNIFIED IDEOGRAPH
+0xE740 0x8E47 #CJK UNIFIED IDEOGRAPH
+0xE741 0x8E49 #CJK UNIFIED IDEOGRAPH
+0xE742 0x8E4C #CJK UNIFIED IDEOGRAPH
+0xE743 0x8E50 #CJK UNIFIED IDEOGRAPH
+0xE744 0x8E48 #CJK UNIFIED IDEOGRAPH
+0xE745 0x8E59 #CJK UNIFIED IDEOGRAPH
+0xE746 0x8E64 #CJK UNIFIED IDEOGRAPH
+0xE747 0x8E60 #CJK UNIFIED IDEOGRAPH
+0xE748 0x8E2A #CJK UNIFIED IDEOGRAPH
+0xE749 0x8E63 #CJK UNIFIED IDEOGRAPH
+0xE74A 0x8E55 #CJK UNIFIED IDEOGRAPH
+0xE74B 0x8E76 #CJK UNIFIED IDEOGRAPH
+0xE74C 0x8E72 #CJK UNIFIED IDEOGRAPH
+0xE74D 0x8E7C #CJK UNIFIED IDEOGRAPH
+0xE74E 0x8E81 #CJK UNIFIED IDEOGRAPH
+0xE74F 0x8E87 #CJK UNIFIED IDEOGRAPH
+0xE750 0x8E85 #CJK UNIFIED IDEOGRAPH
+0xE751 0x8E84 #CJK UNIFIED IDEOGRAPH
+0xE752 0x8E8B #CJK UNIFIED IDEOGRAPH
+0xE753 0x8E8A #CJK UNIFIED IDEOGRAPH
+0xE754 0x8E93 #CJK UNIFIED IDEOGRAPH
+0xE755 0x8E91 #CJK UNIFIED IDEOGRAPH
+0xE756 0x8E94 #CJK UNIFIED IDEOGRAPH
+0xE757 0x8E99 #CJK UNIFIED IDEOGRAPH
+0xE758 0x8EAA #CJK UNIFIED IDEOGRAPH
+0xE759 0x8EA1 #CJK UNIFIED IDEOGRAPH
+0xE75A 0x8EAC #CJK UNIFIED IDEOGRAPH
+0xE75B 0x8EB0 #CJK UNIFIED IDEOGRAPH
+0xE75C 0x8EC6 #CJK UNIFIED IDEOGRAPH
+0xE75D 0x8EB1 #CJK UNIFIED IDEOGRAPH
+0xE75E 0x8EBE #CJK UNIFIED IDEOGRAPH
+0xE75F 0x8EC5 #CJK UNIFIED IDEOGRAPH
+0xE760 0x8EC8 #CJK UNIFIED IDEOGRAPH
+0xE761 0x8ECB #CJK UNIFIED IDEOGRAPH
+0xE762 0x8EDB #CJK UNIFIED IDEOGRAPH
+0xE763 0x8EE3 #CJK UNIFIED IDEOGRAPH
+0xE764 0x8EFC #CJK UNIFIED IDEOGRAPH
+0xE765 0x8EFB #CJK UNIFIED IDEOGRAPH
+0xE766 0x8EEB #CJK UNIFIED IDEOGRAPH
+0xE767 0x8EFE #CJK UNIFIED IDEOGRAPH
+0xE768 0x8F0A #CJK UNIFIED IDEOGRAPH
+0xE769 0x8F05 #CJK UNIFIED IDEOGRAPH
+0xE76A 0x8F15 #CJK UNIFIED IDEOGRAPH
+0xE76B 0x8F12 #CJK UNIFIED IDEOGRAPH
+0xE76C 0x8F19 #CJK UNIFIED IDEOGRAPH
+0xE76D 0x8F13 #CJK UNIFIED IDEOGRAPH
+0xE76E 0x8F1C #CJK UNIFIED IDEOGRAPH
+0xE76F 0x8F1F #CJK UNIFIED IDEOGRAPH
+0xE770 0x8F1B #CJK UNIFIED IDEOGRAPH
+0xE771 0x8F0C #CJK UNIFIED IDEOGRAPH
+0xE772 0x8F26 #CJK UNIFIED IDEOGRAPH
+0xE773 0x8F33 #CJK UNIFIED IDEOGRAPH
+0xE774 0x8F3B #CJK UNIFIED IDEOGRAPH
+0xE775 0x8F39 #CJK UNIFIED IDEOGRAPH
+0xE776 0x8F45 #CJK UNIFIED IDEOGRAPH
+0xE777 0x8F42 #CJK UNIFIED IDEOGRAPH
+0xE778 0x8F3E #CJK UNIFIED IDEOGRAPH
+0xE779 0x8F4C #CJK UNIFIED IDEOGRAPH
+0xE77A 0x8F49 #CJK UNIFIED IDEOGRAPH
+0xE77B 0x8F46 #CJK UNIFIED IDEOGRAPH
+0xE77C 0x8F4E #CJK UNIFIED IDEOGRAPH
+0xE77D 0x8F57 #CJK UNIFIED IDEOGRAPH
+0xE77E 0x8F5C #CJK UNIFIED IDEOGRAPH
+0xE780 0x8F62 #CJK UNIFIED IDEOGRAPH
+0xE781 0x8F63 #CJK UNIFIED IDEOGRAPH
+0xE782 0x8F64 #CJK UNIFIED IDEOGRAPH
+0xE783 0x8F9C #CJK UNIFIED IDEOGRAPH
+0xE784 0x8F9F #CJK UNIFIED IDEOGRAPH
+0xE785 0x8FA3 #CJK UNIFIED IDEOGRAPH
+0xE786 0x8FAD #CJK UNIFIED IDEOGRAPH
+0xE787 0x8FAF #CJK UNIFIED IDEOGRAPH
+0xE788 0x8FB7 #CJK UNIFIED IDEOGRAPH
+0xE789 0x8FDA #CJK UNIFIED IDEOGRAPH
+0xE78A 0x8FE5 #CJK UNIFIED IDEOGRAPH
+0xE78B 0x8FE2 #CJK UNIFIED IDEOGRAPH
+0xE78C 0x8FEA #CJK UNIFIED IDEOGRAPH
+0xE78D 0x8FEF #CJK UNIFIED IDEOGRAPH
+0xE78E 0x9087 #CJK UNIFIED IDEOGRAPH
+0xE78F 0x8FF4 #CJK UNIFIED IDEOGRAPH
+0xE790 0x9005 #CJK UNIFIED IDEOGRAPH
+0xE791 0x8FF9 #CJK UNIFIED IDEOGRAPH
+0xE792 0x8FFA #CJK UNIFIED IDEOGRAPH
+0xE793 0x9011 #CJK UNIFIED IDEOGRAPH
+0xE794 0x9015 #CJK UNIFIED IDEOGRAPH
+0xE795 0x9021 #CJK UNIFIED IDEOGRAPH
+0xE796 0x900D #CJK UNIFIED IDEOGRAPH
+0xE797 0x901E #CJK UNIFIED IDEOGRAPH
+0xE798 0x9016 #CJK UNIFIED IDEOGRAPH
+0xE799 0x900B #CJK UNIFIED IDEOGRAPH
+0xE79A 0x9027 #CJK UNIFIED IDEOGRAPH
+0xE79B 0x9036 #CJK UNIFIED IDEOGRAPH
+0xE79C 0x9035 #CJK UNIFIED IDEOGRAPH
+0xE79D 0x9039 #CJK UNIFIED IDEOGRAPH
+0xE79E 0x8FF8 #CJK UNIFIED IDEOGRAPH
+0xE79F 0x904F #CJK UNIFIED IDEOGRAPH
+0xE7A0 0x9050 #CJK UNIFIED IDEOGRAPH
+0xE7A1 0x9051 #CJK UNIFIED IDEOGRAPH
+0xE7A2 0x9052 #CJK UNIFIED IDEOGRAPH
+0xE7A3 0x900E #CJK UNIFIED IDEOGRAPH
+0xE7A4 0x9049 #CJK UNIFIED IDEOGRAPH
+0xE7A5 0x903E #CJK UNIFIED IDEOGRAPH
+0xE7A6 0x9056 #CJK UNIFIED IDEOGRAPH
+0xE7A7 0x9058 #CJK UNIFIED IDEOGRAPH
+0xE7A8 0x905E #CJK UNIFIED IDEOGRAPH
+0xE7A9 0x9068 #CJK UNIFIED IDEOGRAPH
+0xE7AA 0x906F #CJK UNIFIED IDEOGRAPH
+0xE7AB 0x9076 #CJK UNIFIED IDEOGRAPH
+0xE7AC 0x96A8 #CJK UNIFIED IDEOGRAPH
+0xE7AD 0x9072 #CJK UNIFIED IDEOGRAPH
+0xE7AE 0x9082 #CJK UNIFIED IDEOGRAPH
+0xE7AF 0x907D #CJK UNIFIED IDEOGRAPH
+0xE7B0 0x9081 #CJK UNIFIED IDEOGRAPH
+0xE7B1 0x9080 #CJK UNIFIED IDEOGRAPH
+0xE7B2 0x908A #CJK UNIFIED IDEOGRAPH
+0xE7B3 0x9089 #CJK UNIFIED IDEOGRAPH
+0xE7B4 0x908F #CJK UNIFIED IDEOGRAPH
+0xE7B5 0x90A8 #CJK UNIFIED IDEOGRAPH
+0xE7B6 0x90AF #CJK UNIFIED IDEOGRAPH
+0xE7B7 0x90B1 #CJK UNIFIED IDEOGRAPH
+0xE7B8 0x90B5 #CJK UNIFIED IDEOGRAPH
+0xE7B9 0x90E2 #CJK UNIFIED IDEOGRAPH
+0xE7BA 0x90E4 #CJK UNIFIED IDEOGRAPH
+0xE7BB 0x6248 #CJK UNIFIED IDEOGRAPH
+0xE7BC 0x90DB #CJK UNIFIED IDEOGRAPH
+0xE7BD 0x9102 #CJK UNIFIED IDEOGRAPH
+0xE7BE 0x9112 #CJK UNIFIED IDEOGRAPH
+0xE7BF 0x9119 #CJK UNIFIED IDEOGRAPH
+0xE7C0 0x9132 #CJK UNIFIED IDEOGRAPH
+0xE7C1 0x9130 #CJK UNIFIED IDEOGRAPH
+0xE7C2 0x914A #CJK UNIFIED IDEOGRAPH
+0xE7C3 0x9156 #CJK UNIFIED IDEOGRAPH
+0xE7C4 0x9158 #CJK UNIFIED IDEOGRAPH
+0xE7C5 0x9163 #CJK UNIFIED IDEOGRAPH
+0xE7C6 0x9165 #CJK UNIFIED IDEOGRAPH
+0xE7C7 0x9169 #CJK UNIFIED IDEOGRAPH
+0xE7C8 0x9173 #CJK UNIFIED IDEOGRAPH
+0xE7C9 0x9172 #CJK UNIFIED IDEOGRAPH
+0xE7CA 0x918B #CJK UNIFIED IDEOGRAPH
+0xE7CB 0x9189 #CJK UNIFIED IDEOGRAPH
+0xE7CC 0x9182 #CJK UNIFIED IDEOGRAPH
+0xE7CD 0x91A2 #CJK UNIFIED IDEOGRAPH
+0xE7CE 0x91AB #CJK UNIFIED IDEOGRAPH
+0xE7CF 0x91AF #CJK UNIFIED IDEOGRAPH
+0xE7D0 0x91AA #CJK UNIFIED IDEOGRAPH
+0xE7D1 0x91B5 #CJK UNIFIED IDEOGRAPH
+0xE7D2 0x91B4 #CJK UNIFIED IDEOGRAPH
+0xE7D3 0x91BA #CJK UNIFIED IDEOGRAPH
+0xE7D4 0x91C0 #CJK UNIFIED IDEOGRAPH
+0xE7D5 0x91C1 #CJK UNIFIED IDEOGRAPH
+0xE7D6 0x91C9 #CJK UNIFIED IDEOGRAPH
+0xE7D7 0x91CB #CJK UNIFIED IDEOGRAPH
+0xE7D8 0x91D0 #CJK UNIFIED IDEOGRAPH
+0xE7D9 0x91D6 #CJK UNIFIED IDEOGRAPH
+0xE7DA 0x91DF #CJK UNIFIED IDEOGRAPH
+0xE7DB 0x91E1 #CJK UNIFIED IDEOGRAPH
+0xE7DC 0x91DB #CJK UNIFIED IDEOGRAPH
+0xE7DD 0x91FC #CJK UNIFIED IDEOGRAPH
+0xE7DE 0x91F5 #CJK UNIFIED IDEOGRAPH
+0xE7DF 0x91F6 #CJK UNIFIED IDEOGRAPH
+0xE7E0 0x921E #CJK UNIFIED IDEOGRAPH
+0xE7E1 0x91FF #CJK UNIFIED IDEOGRAPH
+0xE7E2 0x9214 #CJK UNIFIED IDEOGRAPH
+0xE7E3 0x922C #CJK UNIFIED IDEOGRAPH
+0xE7E4 0x9215 #CJK UNIFIED IDEOGRAPH
+0xE7E5 0x9211 #CJK UNIFIED IDEOGRAPH
+0xE7E6 0x925E #CJK UNIFIED IDEOGRAPH
+0xE7E7 0x9257 #CJK UNIFIED IDEOGRAPH
+0xE7E8 0x9245 #CJK UNIFIED IDEOGRAPH
+0xE7E9 0x9249 #CJK UNIFIED IDEOGRAPH
+0xE7EA 0x9264 #CJK UNIFIED IDEOGRAPH
+0xE7EB 0x9248 #CJK UNIFIED IDEOGRAPH
+0xE7EC 0x9295 #CJK UNIFIED IDEOGRAPH
+0xE7ED 0x923F #CJK UNIFIED IDEOGRAPH
+0xE7EE 0x924B #CJK UNIFIED IDEOGRAPH
+0xE7EF 0x9250 #CJK UNIFIED IDEOGRAPH
+0xE7F0 0x929C #CJK UNIFIED IDEOGRAPH
+0xE7F1 0x9296 #CJK UNIFIED IDEOGRAPH
+0xE7F2 0x9293 #CJK UNIFIED IDEOGRAPH
+0xE7F3 0x929B #CJK UNIFIED IDEOGRAPH
+0xE7F4 0x925A #CJK UNIFIED IDEOGRAPH
+0xE7F5 0x92CF #CJK UNIFIED IDEOGRAPH
+0xE7F6 0x92B9 #CJK UNIFIED IDEOGRAPH
+0xE7F7 0x92B7 #CJK UNIFIED IDEOGRAPH
+0xE7F8 0x92E9 #CJK UNIFIED IDEOGRAPH
+0xE7F9 0x930F #CJK UNIFIED IDEOGRAPH
+0xE7FA 0x92FA #CJK UNIFIED IDEOGRAPH
+0xE7FB 0x9344 #CJK UNIFIED IDEOGRAPH
+0xE7FC 0x932E #CJK UNIFIED IDEOGRAPH
+0xE840 0x9319 #CJK UNIFIED IDEOGRAPH
+0xE841 0x9322 #CJK UNIFIED IDEOGRAPH
+0xE842 0x931A #CJK UNIFIED IDEOGRAPH
+0xE843 0x9323 #CJK UNIFIED IDEOGRAPH
+0xE844 0x933A #CJK UNIFIED IDEOGRAPH
+0xE845 0x9335 #CJK UNIFIED IDEOGRAPH
+0xE846 0x933B #CJK UNIFIED IDEOGRAPH
+0xE847 0x935C #CJK UNIFIED IDEOGRAPH
+0xE848 0x9360 #CJK UNIFIED IDEOGRAPH
+0xE849 0x937C #CJK UNIFIED IDEOGRAPH
+0xE84A 0x936E #CJK UNIFIED IDEOGRAPH
+0xE84B 0x9356 #CJK UNIFIED IDEOGRAPH
+0xE84C 0x93B0 #CJK UNIFIED IDEOGRAPH
+0xE84D 0x93AC #CJK UNIFIED IDEOGRAPH
+0xE84E 0x93AD #CJK UNIFIED IDEOGRAPH
+0xE84F 0x9394 #CJK UNIFIED IDEOGRAPH
+0xE850 0x93B9 #CJK UNIFIED IDEOGRAPH
+0xE851 0x93D6 #CJK UNIFIED IDEOGRAPH
+0xE852 0x93D7 #CJK UNIFIED IDEOGRAPH
+0xE853 0x93E8 #CJK UNIFIED IDEOGRAPH
+0xE854 0x93E5 #CJK UNIFIED IDEOGRAPH
+0xE855 0x93D8 #CJK UNIFIED IDEOGRAPH
+0xE856 0x93C3 #CJK UNIFIED IDEOGRAPH
+0xE857 0x93DD #CJK UNIFIED IDEOGRAPH
+0xE858 0x93D0 #CJK UNIFIED IDEOGRAPH
+0xE859 0x93C8 #CJK UNIFIED IDEOGRAPH
+0xE85A 0x93E4 #CJK UNIFIED IDEOGRAPH
+0xE85B 0x941A #CJK UNIFIED IDEOGRAPH
+0xE85C 0x9414 #CJK UNIFIED IDEOGRAPH
+0xE85D 0x9413 #CJK UNIFIED IDEOGRAPH
+0xE85E 0x9403 #CJK UNIFIED IDEOGRAPH
+0xE85F 0x9407 #CJK UNIFIED IDEOGRAPH
+0xE860 0x9410 #CJK UNIFIED IDEOGRAPH
+0xE861 0x9436 #CJK UNIFIED IDEOGRAPH
+0xE862 0x942B #CJK UNIFIED IDEOGRAPH
+0xE863 0x9435 #CJK UNIFIED IDEOGRAPH
+0xE864 0x9421 #CJK UNIFIED IDEOGRAPH
+0xE865 0x943A #CJK UNIFIED IDEOGRAPH
+0xE866 0x9441 #CJK UNIFIED IDEOGRAPH
+0xE867 0x9452 #CJK UNIFIED IDEOGRAPH
+0xE868 0x9444 #CJK UNIFIED IDEOGRAPH
+0xE869 0x945B #CJK UNIFIED IDEOGRAPH
+0xE86A 0x9460 #CJK UNIFIED IDEOGRAPH
+0xE86B 0x9462 #CJK UNIFIED IDEOGRAPH
+0xE86C 0x945E #CJK UNIFIED IDEOGRAPH
+0xE86D 0x946A #CJK UNIFIED IDEOGRAPH
+0xE86E 0x9229 #CJK UNIFIED IDEOGRAPH
+0xE86F 0x9470 #CJK UNIFIED IDEOGRAPH
+0xE870 0x9475 #CJK UNIFIED IDEOGRAPH
+0xE871 0x9477 #CJK UNIFIED IDEOGRAPH
+0xE872 0x947D #CJK UNIFIED IDEOGRAPH
+0xE873 0x945A #CJK UNIFIED IDEOGRAPH
+0xE874 0x947C #CJK UNIFIED IDEOGRAPH
+0xE875 0x947E #CJK UNIFIED IDEOGRAPH
+0xE876 0x9481 #CJK UNIFIED IDEOGRAPH
+0xE877 0x947F #CJK UNIFIED IDEOGRAPH
+0xE878 0x9582 #CJK UNIFIED IDEOGRAPH
+0xE879 0x9587 #CJK UNIFIED IDEOGRAPH
+0xE87A 0x958A #CJK UNIFIED IDEOGRAPH
+0xE87B 0x9594 #CJK UNIFIED IDEOGRAPH
+0xE87C 0x9596 #CJK UNIFIED IDEOGRAPH
+0xE87D 0x9598 #CJK UNIFIED IDEOGRAPH
+0xE87E 0x9599 #CJK UNIFIED IDEOGRAPH
+0xE880 0x95A0 #CJK UNIFIED IDEOGRAPH
+0xE881 0x95A8 #CJK UNIFIED IDEOGRAPH
+0xE882 0x95A7 #CJK UNIFIED IDEOGRAPH
+0xE883 0x95AD #CJK UNIFIED IDEOGRAPH
+0xE884 0x95BC #CJK UNIFIED IDEOGRAPH
+0xE885 0x95BB #CJK UNIFIED IDEOGRAPH
+0xE886 0x95B9 #CJK UNIFIED IDEOGRAPH
+0xE887 0x95BE #CJK UNIFIED IDEOGRAPH
+0xE888 0x95CA #CJK UNIFIED IDEOGRAPH
+0xE889 0x6FF6 #CJK UNIFIED IDEOGRAPH
+0xE88A 0x95C3 #CJK UNIFIED IDEOGRAPH
+0xE88B 0x95CD #CJK UNIFIED IDEOGRAPH
+0xE88C 0x95CC #CJK UNIFIED IDEOGRAPH
+0xE88D 0x95D5 #CJK UNIFIED IDEOGRAPH
+0xE88E 0x95D4 #CJK UNIFIED IDEOGRAPH
+0xE88F 0x95D6 #CJK UNIFIED IDEOGRAPH
+0xE890 0x95DC #CJK UNIFIED IDEOGRAPH
+0xE891 0x95E1 #CJK UNIFIED IDEOGRAPH
+0xE892 0x95E5 #CJK UNIFIED IDEOGRAPH
+0xE893 0x95E2 #CJK UNIFIED IDEOGRAPH
+0xE894 0x9621 #CJK UNIFIED IDEOGRAPH
+0xE895 0x9628 #CJK UNIFIED IDEOGRAPH
+0xE896 0x962E #CJK UNIFIED IDEOGRAPH
+0xE897 0x962F #CJK UNIFIED IDEOGRAPH
+0xE898 0x9642 #CJK UNIFIED IDEOGRAPH
+0xE899 0x964C #CJK UNIFIED IDEOGRAPH
+0xE89A 0x964F #CJK UNIFIED IDEOGRAPH
+0xE89B 0x964B #CJK UNIFIED IDEOGRAPH
+0xE89C 0x9677 #CJK UNIFIED IDEOGRAPH
+0xE89D 0x965C #CJK UNIFIED IDEOGRAPH
+0xE89E 0x965E #CJK UNIFIED IDEOGRAPH
+0xE89F 0x965D #CJK UNIFIED IDEOGRAPH
+0xE8A0 0x965F #CJK UNIFIED IDEOGRAPH
+0xE8A1 0x9666 #CJK UNIFIED IDEOGRAPH
+0xE8A2 0x9672 #CJK UNIFIED IDEOGRAPH
+0xE8A3 0x966C #CJK UNIFIED IDEOGRAPH
+0xE8A4 0x968D #CJK UNIFIED IDEOGRAPH
+0xE8A5 0x9698 #CJK UNIFIED IDEOGRAPH
+0xE8A6 0x9695 #CJK UNIFIED IDEOGRAPH
+0xE8A7 0x9697 #CJK UNIFIED IDEOGRAPH
+0xE8A8 0x96AA #CJK UNIFIED IDEOGRAPH
+0xE8A9 0x96A7 #CJK UNIFIED IDEOGRAPH
+0xE8AA 0x96B1 #CJK UNIFIED IDEOGRAPH
+0xE8AB 0x96B2 #CJK UNIFIED IDEOGRAPH
+0xE8AC 0x96B0 #CJK UNIFIED IDEOGRAPH
+0xE8AD 0x96B4 #CJK UNIFIED IDEOGRAPH
+0xE8AE 0x96B6 #CJK UNIFIED IDEOGRAPH
+0xE8AF 0x96B8 #CJK UNIFIED IDEOGRAPH
+0xE8B0 0x96B9 #CJK UNIFIED IDEOGRAPH
+0xE8B1 0x96CE #CJK UNIFIED IDEOGRAPH
+0xE8B2 0x96CB #CJK UNIFIED IDEOGRAPH
+0xE8B3 0x96C9 #CJK UNIFIED IDEOGRAPH
+0xE8B4 0x96CD #CJK UNIFIED IDEOGRAPH
+0xE8B5 0x894D #CJK UNIFIED IDEOGRAPH
+0xE8B6 0x96DC #CJK UNIFIED IDEOGRAPH
+0xE8B7 0x970D #CJK UNIFIED IDEOGRAPH
+0xE8B8 0x96D5 #CJK UNIFIED IDEOGRAPH
+0xE8B9 0x96F9 #CJK UNIFIED IDEOGRAPH
+0xE8BA 0x9704 #CJK UNIFIED IDEOGRAPH
+0xE8BB 0x9706 #CJK UNIFIED IDEOGRAPH
+0xE8BC 0x9708 #CJK UNIFIED IDEOGRAPH
+0xE8BD 0x9713 #CJK UNIFIED IDEOGRAPH
+0xE8BE 0x970E #CJK UNIFIED IDEOGRAPH
+0xE8BF 0x9711 #CJK UNIFIED IDEOGRAPH
+0xE8C0 0x970F #CJK UNIFIED IDEOGRAPH
+0xE8C1 0x9716 #CJK UNIFIED IDEOGRAPH
+0xE8C2 0x9719 #CJK UNIFIED IDEOGRAPH
+0xE8C3 0x9724 #CJK UNIFIED IDEOGRAPH
+0xE8C4 0x972A #CJK UNIFIED IDEOGRAPH
+0xE8C5 0x9730 #CJK UNIFIED IDEOGRAPH
+0xE8C6 0x9739 #CJK UNIFIED IDEOGRAPH
+0xE8C7 0x973D #CJK UNIFIED IDEOGRAPH
+0xE8C8 0x973E #CJK UNIFIED IDEOGRAPH
+0xE8C9 0x9744 #CJK UNIFIED IDEOGRAPH
+0xE8CA 0x9746 #CJK UNIFIED IDEOGRAPH
+0xE8CB 0x9748 #CJK UNIFIED IDEOGRAPH
+0xE8CC 0x9742 #CJK UNIFIED IDEOGRAPH
+0xE8CD 0x9749 #CJK UNIFIED IDEOGRAPH
+0xE8CE 0x975C #CJK UNIFIED IDEOGRAPH
+0xE8CF 0x9760 #CJK UNIFIED IDEOGRAPH
+0xE8D0 0x9764 #CJK UNIFIED IDEOGRAPH
+0xE8D1 0x9766 #CJK UNIFIED IDEOGRAPH
+0xE8D2 0x9768 #CJK UNIFIED IDEOGRAPH
+0xE8D3 0x52D2 #CJK UNIFIED IDEOGRAPH
+0xE8D4 0x976B #CJK UNIFIED IDEOGRAPH
+0xE8D5 0x9771 #CJK UNIFIED IDEOGRAPH
+0xE8D6 0x9779 #CJK UNIFIED IDEOGRAPH
+0xE8D7 0x9785 #CJK UNIFIED IDEOGRAPH
+0xE8D8 0x977C #CJK UNIFIED IDEOGRAPH
+0xE8D9 0x9781 #CJK UNIFIED IDEOGRAPH
+0xE8DA 0x977A #CJK UNIFIED IDEOGRAPH
+0xE8DB 0x9786 #CJK UNIFIED IDEOGRAPH
+0xE8DC 0x978B #CJK UNIFIED IDEOGRAPH
+0xE8DD 0x978F #CJK UNIFIED IDEOGRAPH
+0xE8DE 0x9790 #CJK UNIFIED IDEOGRAPH
+0xE8DF 0x979C #CJK UNIFIED IDEOGRAPH
+0xE8E0 0x97A8 #CJK UNIFIED IDEOGRAPH
+0xE8E1 0x97A6 #CJK UNIFIED IDEOGRAPH
+0xE8E2 0x97A3 #CJK UNIFIED IDEOGRAPH
+0xE8E3 0x97B3 #CJK UNIFIED IDEOGRAPH
+0xE8E4 0x97B4 #CJK UNIFIED IDEOGRAPH
+0xE8E5 0x97C3 #CJK UNIFIED IDEOGRAPH
+0xE8E6 0x97C6 #CJK UNIFIED IDEOGRAPH
+0xE8E7 0x97C8 #CJK UNIFIED IDEOGRAPH
+0xE8E8 0x97CB #CJK UNIFIED IDEOGRAPH
+0xE8E9 0x97DC #CJK UNIFIED IDEOGRAPH
+0xE8EA 0x97ED #CJK UNIFIED IDEOGRAPH
+0xE8EB 0x9F4F #CJK UNIFIED IDEOGRAPH
+0xE8EC 0x97F2 #CJK UNIFIED IDEOGRAPH
+0xE8ED 0x7ADF #CJK UNIFIED IDEOGRAPH
+0xE8EE 0x97F6 #CJK UNIFIED IDEOGRAPH
+0xE8EF 0x97F5 #CJK UNIFIED IDEOGRAPH
+0xE8F0 0x980F #CJK UNIFIED IDEOGRAPH
+0xE8F1 0x980C #CJK UNIFIED IDEOGRAPH
+0xE8F2 0x9838 #CJK UNIFIED IDEOGRAPH
+0xE8F3 0x9824 #CJK UNIFIED IDEOGRAPH
+0xE8F4 0x9821 #CJK UNIFIED IDEOGRAPH
+0xE8F5 0x9837 #CJK UNIFIED IDEOGRAPH
+0xE8F6 0x983D #CJK UNIFIED IDEOGRAPH
+0xE8F7 0x9846 #CJK UNIFIED IDEOGRAPH
+0xE8F8 0x984F #CJK UNIFIED IDEOGRAPH
+0xE8F9 0x984B #CJK UNIFIED IDEOGRAPH
+0xE8FA 0x986B #CJK UNIFIED IDEOGRAPH
+0xE8FB 0x986F #CJK UNIFIED IDEOGRAPH
+0xE8FC 0x9870 #CJK UNIFIED IDEOGRAPH
+0xE940 0x9871 #CJK UNIFIED IDEOGRAPH
+0xE941 0x9874 #CJK UNIFIED IDEOGRAPH
+0xE942 0x9873 #CJK UNIFIED IDEOGRAPH
+0xE943 0x98AA #CJK UNIFIED IDEOGRAPH
+0xE944 0x98AF #CJK UNIFIED IDEOGRAPH
+0xE945 0x98B1 #CJK UNIFIED IDEOGRAPH
+0xE946 0x98B6 #CJK UNIFIED IDEOGRAPH
+0xE947 0x98C4 #CJK UNIFIED IDEOGRAPH
+0xE948 0x98C3 #CJK UNIFIED IDEOGRAPH
+0xE949 0x98C6 #CJK UNIFIED IDEOGRAPH
+0xE94A 0x98E9 #CJK UNIFIED IDEOGRAPH
+0xE94B 0x98EB #CJK UNIFIED IDEOGRAPH
+0xE94C 0x9903 #CJK UNIFIED IDEOGRAPH
+0xE94D 0x9909 #CJK UNIFIED IDEOGRAPH
+0xE94E 0x9912 #CJK UNIFIED IDEOGRAPH
+0xE94F 0x9914 #CJK UNIFIED IDEOGRAPH
+0xE950 0x9918 #CJK UNIFIED IDEOGRAPH
+0xE951 0x9921 #CJK UNIFIED IDEOGRAPH
+0xE952 0x991D #CJK UNIFIED IDEOGRAPH
+0xE953 0x991E #CJK UNIFIED IDEOGRAPH
+0xE954 0x9924 #CJK UNIFIED IDEOGRAPH
+0xE955 0x9920 #CJK UNIFIED IDEOGRAPH
+0xE956 0x992C #CJK UNIFIED IDEOGRAPH
+0xE957 0x992E #CJK UNIFIED IDEOGRAPH
+0xE958 0x993D #CJK UNIFIED IDEOGRAPH
+0xE959 0x993E #CJK UNIFIED IDEOGRAPH
+0xE95A 0x9942 #CJK UNIFIED IDEOGRAPH
+0xE95B 0x9949 #CJK UNIFIED IDEOGRAPH
+0xE95C 0x9945 #CJK UNIFIED IDEOGRAPH
+0xE95D 0x9950 #CJK UNIFIED IDEOGRAPH
+0xE95E 0x994B #CJK UNIFIED IDEOGRAPH
+0xE95F 0x9951 #CJK UNIFIED IDEOGRAPH
+0xE960 0x9952 #CJK UNIFIED IDEOGRAPH
+0xE961 0x994C #CJK UNIFIED IDEOGRAPH
+0xE962 0x9955 #CJK UNIFIED IDEOGRAPH
+0xE963 0x9997 #CJK UNIFIED IDEOGRAPH
+0xE964 0x9998 #CJK UNIFIED IDEOGRAPH
+0xE965 0x99A5 #CJK UNIFIED IDEOGRAPH
+0xE966 0x99AD #CJK UNIFIED IDEOGRAPH
+0xE967 0x99AE #CJK UNIFIED IDEOGRAPH
+0xE968 0x99BC #CJK UNIFIED IDEOGRAPH
+0xE969 0x99DF #CJK UNIFIED IDEOGRAPH
+0xE96A 0x99DB #CJK UNIFIED IDEOGRAPH
+0xE96B 0x99DD #CJK UNIFIED IDEOGRAPH
+0xE96C 0x99D8 #CJK UNIFIED IDEOGRAPH
+0xE96D 0x99D1 #CJK UNIFIED IDEOGRAPH
+0xE96E 0x99ED #CJK UNIFIED IDEOGRAPH
+0xE96F 0x99EE #CJK UNIFIED IDEOGRAPH
+0xE970 0x99F1 #CJK UNIFIED IDEOGRAPH
+0xE971 0x99F2 #CJK UNIFIED IDEOGRAPH
+0xE972 0x99FB #CJK UNIFIED IDEOGRAPH
+0xE973 0x99F8 #CJK UNIFIED IDEOGRAPH
+0xE974 0x9A01 #CJK UNIFIED IDEOGRAPH
+0xE975 0x9A0F #CJK UNIFIED IDEOGRAPH
+0xE976 0x9A05 #CJK UNIFIED IDEOGRAPH
+0xE977 0x99E2 #CJK UNIFIED IDEOGRAPH
+0xE978 0x9A19 #CJK UNIFIED IDEOGRAPH
+0xE979 0x9A2B #CJK UNIFIED IDEOGRAPH
+0xE97A 0x9A37 #CJK UNIFIED IDEOGRAPH
+0xE97B 0x9A45 #CJK UNIFIED IDEOGRAPH
+0xE97C 0x9A42 #CJK UNIFIED IDEOGRAPH
+0xE97D 0x9A40 #CJK UNIFIED IDEOGRAPH
+0xE97E 0x9A43 #CJK UNIFIED IDEOGRAPH
+0xE980 0x9A3E #CJK UNIFIED IDEOGRAPH
+0xE981 0x9A55 #CJK UNIFIED IDEOGRAPH
+0xE982 0x9A4D #CJK UNIFIED IDEOGRAPH
+0xE983 0x9A5B #CJK UNIFIED IDEOGRAPH
+0xE984 0x9A57 #CJK UNIFIED IDEOGRAPH
+0xE985 0x9A5F #CJK UNIFIED IDEOGRAPH
+0xE986 0x9A62 #CJK UNIFIED IDEOGRAPH
+0xE987 0x9A65 #CJK UNIFIED IDEOGRAPH
+0xE988 0x9A64 #CJK UNIFIED IDEOGRAPH
+0xE989 0x9A69 #CJK UNIFIED IDEOGRAPH
+0xE98A 0x9A6B #CJK UNIFIED IDEOGRAPH
+0xE98B 0x9A6A #CJK UNIFIED IDEOGRAPH
+0xE98C 0x9AAD #CJK UNIFIED IDEOGRAPH
+0xE98D 0x9AB0 #CJK UNIFIED IDEOGRAPH
+0xE98E 0x9ABC #CJK UNIFIED IDEOGRAPH
+0xE98F 0x9AC0 #CJK UNIFIED IDEOGRAPH
+0xE990 0x9ACF #CJK UNIFIED IDEOGRAPH
+0xE991 0x9AD1 #CJK UNIFIED IDEOGRAPH
+0xE992 0x9AD3 #CJK UNIFIED IDEOGRAPH
+0xE993 0x9AD4 #CJK UNIFIED IDEOGRAPH
+0xE994 0x9ADE #CJK UNIFIED IDEOGRAPH
+0xE995 0x9ADF #CJK UNIFIED IDEOGRAPH
+0xE996 0x9AE2 #CJK UNIFIED IDEOGRAPH
+0xE997 0x9AE3 #CJK UNIFIED IDEOGRAPH
+0xE998 0x9AE6 #CJK UNIFIED IDEOGRAPH
+0xE999 0x9AEF #CJK UNIFIED IDEOGRAPH
+0xE99A 0x9AEB #CJK UNIFIED IDEOGRAPH
+0xE99B 0x9AEE #CJK UNIFIED IDEOGRAPH
+0xE99C 0x9AF4 #CJK UNIFIED IDEOGRAPH
+0xE99D 0x9AF1 #CJK UNIFIED IDEOGRAPH
+0xE99E 0x9AF7 #CJK UNIFIED IDEOGRAPH
+0xE99F 0x9AFB #CJK UNIFIED IDEOGRAPH
+0xE9A0 0x9B06 #CJK UNIFIED IDEOGRAPH
+0xE9A1 0x9B18 #CJK UNIFIED IDEOGRAPH
+0xE9A2 0x9B1A #CJK UNIFIED IDEOGRAPH
+0xE9A3 0x9B1F #CJK UNIFIED IDEOGRAPH
+0xE9A4 0x9B22 #CJK UNIFIED IDEOGRAPH
+0xE9A5 0x9B23 #CJK UNIFIED IDEOGRAPH
+0xE9A6 0x9B25 #CJK UNIFIED IDEOGRAPH
+0xE9A7 0x9B27 #CJK UNIFIED IDEOGRAPH
+0xE9A8 0x9B28 #CJK UNIFIED IDEOGRAPH
+0xE9A9 0x9B29 #CJK UNIFIED IDEOGRAPH
+0xE9AA 0x9B2A #CJK UNIFIED IDEOGRAPH
+0xE9AB 0x9B2E #CJK UNIFIED IDEOGRAPH
+0xE9AC 0x9B2F #CJK UNIFIED IDEOGRAPH
+0xE9AD 0x9B32 #CJK UNIFIED IDEOGRAPH
+0xE9AE 0x9B44 #CJK UNIFIED IDEOGRAPH
+0xE9AF 0x9B43 #CJK UNIFIED IDEOGRAPH
+0xE9B0 0x9B4F #CJK UNIFIED IDEOGRAPH
+0xE9B1 0x9B4D #CJK UNIFIED IDEOGRAPH
+0xE9B2 0x9B4E #CJK UNIFIED IDEOGRAPH
+0xE9B3 0x9B51 #CJK UNIFIED IDEOGRAPH
+0xE9B4 0x9B58 #CJK UNIFIED IDEOGRAPH
+0xE9B5 0x9B74 #CJK UNIFIED IDEOGRAPH
+0xE9B6 0x9B93 #CJK UNIFIED IDEOGRAPH
+0xE9B7 0x9B83 #CJK UNIFIED IDEOGRAPH
+0xE9B8 0x9B91 #CJK UNIFIED IDEOGRAPH
+0xE9B9 0x9B96 #CJK UNIFIED IDEOGRAPH
+0xE9BA 0x9B97 #CJK UNIFIED IDEOGRAPH
+0xE9BB 0x9B9F #CJK UNIFIED IDEOGRAPH
+0xE9BC 0x9BA0 #CJK UNIFIED IDEOGRAPH
+0xE9BD 0x9BA8 #CJK UNIFIED IDEOGRAPH
+0xE9BE 0x9BB4 #CJK UNIFIED IDEOGRAPH
+0xE9BF 0x9BC0 #CJK UNIFIED IDEOGRAPH
+0xE9C0 0x9BCA #CJK UNIFIED IDEOGRAPH
+0xE9C1 0x9BB9 #CJK UNIFIED IDEOGRAPH
+0xE9C2 0x9BC6 #CJK UNIFIED IDEOGRAPH
+0xE9C3 0x9BCF #CJK UNIFIED IDEOGRAPH
+0xE9C4 0x9BD1 #CJK UNIFIED IDEOGRAPH
+0xE9C5 0x9BD2 #CJK UNIFIED IDEOGRAPH
+0xE9C6 0x9BE3 #CJK UNIFIED IDEOGRAPH
+0xE9C7 0x9BE2 #CJK UNIFIED IDEOGRAPH
+0xE9C8 0x9BE4 #CJK UNIFIED IDEOGRAPH
+0xE9C9 0x9BD4 #CJK UNIFIED IDEOGRAPH
+0xE9CA 0x9BE1 #CJK UNIFIED IDEOGRAPH
+0xE9CB 0x9C3A #CJK UNIFIED IDEOGRAPH
+0xE9CC 0x9BF2 #CJK UNIFIED IDEOGRAPH
+0xE9CD 0x9BF1 #CJK UNIFIED IDEOGRAPH
+0xE9CE 0x9BF0 #CJK UNIFIED IDEOGRAPH
+0xE9CF 0x9C15 #CJK UNIFIED IDEOGRAPH
+0xE9D0 0x9C14 #CJK UNIFIED IDEOGRAPH
+0xE9D1 0x9C09 #CJK UNIFIED IDEOGRAPH
+0xE9D2 0x9C13 #CJK UNIFIED IDEOGRAPH
+0xE9D3 0x9C0C #CJK UNIFIED IDEOGRAPH
+0xE9D4 0x9C06 #CJK UNIFIED IDEOGRAPH
+0xE9D5 0x9C08 #CJK UNIFIED IDEOGRAPH
+0xE9D6 0x9C12 #CJK UNIFIED IDEOGRAPH
+0xE9D7 0x9C0A #CJK UNIFIED IDEOGRAPH
+0xE9D8 0x9C04 #CJK UNIFIED IDEOGRAPH
+0xE9D9 0x9C2E #CJK UNIFIED IDEOGRAPH
+0xE9DA 0x9C1B #CJK UNIFIED IDEOGRAPH
+0xE9DB 0x9C25 #CJK UNIFIED IDEOGRAPH
+0xE9DC 0x9C24 #CJK UNIFIED IDEOGRAPH
+0xE9DD 0x9C21 #CJK UNIFIED IDEOGRAPH
+0xE9DE 0x9C30 #CJK UNIFIED IDEOGRAPH
+0xE9DF 0x9C47 #CJK UNIFIED IDEOGRAPH
+0xE9E0 0x9C32 #CJK UNIFIED IDEOGRAPH
+0xE9E1 0x9C46 #CJK UNIFIED IDEOGRAPH
+0xE9E2 0x9C3E #CJK UNIFIED IDEOGRAPH
+0xE9E3 0x9C5A #CJK UNIFIED IDEOGRAPH
+0xE9E4 0x9C60 #CJK UNIFIED IDEOGRAPH
+0xE9E5 0x9C67 #CJK UNIFIED IDEOGRAPH
+0xE9E6 0x9C76 #CJK UNIFIED IDEOGRAPH
+0xE9E7 0x9C78 #CJK UNIFIED IDEOGRAPH
+0xE9E8 0x9CE7 #CJK UNIFIED IDEOGRAPH
+0xE9E9 0x9CEC #CJK UNIFIED IDEOGRAPH
+0xE9EA 0x9CF0 #CJK UNIFIED IDEOGRAPH
+0xE9EB 0x9D09 #CJK UNIFIED IDEOGRAPH
+0xE9EC 0x9D08 #CJK UNIFIED IDEOGRAPH
+0xE9ED 0x9CEB #CJK UNIFIED IDEOGRAPH
+0xE9EE 0x9D03 #CJK UNIFIED IDEOGRAPH
+0xE9EF 0x9D06 #CJK UNIFIED IDEOGRAPH
+0xE9F0 0x9D2A #CJK UNIFIED IDEOGRAPH
+0xE9F1 0x9D26 #CJK UNIFIED IDEOGRAPH
+0xE9F2 0x9DAF #CJK UNIFIED IDEOGRAPH
+0xE9F3 0x9D23 #CJK UNIFIED IDEOGRAPH
+0xE9F4 0x9D1F #CJK UNIFIED IDEOGRAPH
+0xE9F5 0x9D44 #CJK UNIFIED IDEOGRAPH
+0xE9F6 0x9D15 #CJK UNIFIED IDEOGRAPH
+0xE9F7 0x9D12 #CJK UNIFIED IDEOGRAPH
+0xE9F8 0x9D41 #CJK UNIFIED IDEOGRAPH
+0xE9F9 0x9D3F #CJK UNIFIED IDEOGRAPH
+0xE9FA 0x9D3E #CJK UNIFIED IDEOGRAPH
+0xE9FB 0x9D46 #CJK UNIFIED IDEOGRAPH
+0xE9FC 0x9D48 #CJK UNIFIED IDEOGRAPH
+0xEA40 0x9D5D #CJK UNIFIED IDEOGRAPH
+0xEA41 0x9D5E #CJK UNIFIED IDEOGRAPH
+0xEA42 0x9D64 #CJK UNIFIED IDEOGRAPH
+0xEA43 0x9D51 #CJK UNIFIED IDEOGRAPH
+0xEA44 0x9D50 #CJK UNIFIED IDEOGRAPH
+0xEA45 0x9D59 #CJK UNIFIED IDEOGRAPH
+0xEA46 0x9D72 #CJK UNIFIED IDEOGRAPH
+0xEA47 0x9D89 #CJK UNIFIED IDEOGRAPH
+0xEA48 0x9D87 #CJK UNIFIED IDEOGRAPH
+0xEA49 0x9DAB #CJK UNIFIED IDEOGRAPH
+0xEA4A 0x9D6F #CJK UNIFIED IDEOGRAPH
+0xEA4B 0x9D7A #CJK UNIFIED IDEOGRAPH
+0xEA4C 0x9D9A #CJK UNIFIED IDEOGRAPH
+0xEA4D 0x9DA4 #CJK UNIFIED IDEOGRAPH
+0xEA4E 0x9DA9 #CJK UNIFIED IDEOGRAPH
+0xEA4F 0x9DB2 #CJK UNIFIED IDEOGRAPH
+0xEA50 0x9DC4 #CJK UNIFIED IDEOGRAPH
+0xEA51 0x9DC1 #CJK UNIFIED IDEOGRAPH
+0xEA52 0x9DBB #CJK UNIFIED IDEOGRAPH
+0xEA53 0x9DB8 #CJK UNIFIED IDEOGRAPH
+0xEA54 0x9DBA #CJK UNIFIED IDEOGRAPH
+0xEA55 0x9DC6 #CJK UNIFIED IDEOGRAPH
+0xEA56 0x9DCF #CJK UNIFIED IDEOGRAPH
+0xEA57 0x9DC2 #CJK UNIFIED IDEOGRAPH
+0xEA58 0x9DD9 #CJK UNIFIED IDEOGRAPH
+0xEA59 0x9DD3 #CJK UNIFIED IDEOGRAPH
+0xEA5A 0x9DF8 #CJK UNIFIED IDEOGRAPH
+0xEA5B 0x9DE6 #CJK UNIFIED IDEOGRAPH
+0xEA5C 0x9DED #CJK UNIFIED IDEOGRAPH
+0xEA5D 0x9DEF #CJK UNIFIED IDEOGRAPH
+0xEA5E 0x9DFD #CJK UNIFIED IDEOGRAPH
+0xEA5F 0x9E1A #CJK UNIFIED IDEOGRAPH
+0xEA60 0x9E1B #CJK UNIFIED IDEOGRAPH
+0xEA61 0x9E1E #CJK UNIFIED IDEOGRAPH
+0xEA62 0x9E75 #CJK UNIFIED IDEOGRAPH
+0xEA63 0x9E79 #CJK UNIFIED IDEOGRAPH
+0xEA64 0x9E7D #CJK UNIFIED IDEOGRAPH
+0xEA65 0x9E81 #CJK UNIFIED IDEOGRAPH
+0xEA66 0x9E88 #CJK UNIFIED IDEOGRAPH
+0xEA67 0x9E8B #CJK UNIFIED IDEOGRAPH
+0xEA68 0x9E8C #CJK UNIFIED IDEOGRAPH
+0xEA69 0x9E92 #CJK UNIFIED IDEOGRAPH
+0xEA6A 0x9E95 #CJK UNIFIED IDEOGRAPH
+0xEA6B 0x9E91 #CJK UNIFIED IDEOGRAPH
+0xEA6C 0x9E9D #CJK UNIFIED IDEOGRAPH
+0xEA6D 0x9EA5 #CJK UNIFIED IDEOGRAPH
+0xEA6E 0x9EA9 #CJK UNIFIED IDEOGRAPH
+0xEA6F 0x9EB8 #CJK UNIFIED IDEOGRAPH
+0xEA70 0x9EAA #CJK UNIFIED IDEOGRAPH
+0xEA71 0x9EAD #CJK UNIFIED IDEOGRAPH
+0xEA72 0x9761 #CJK UNIFIED IDEOGRAPH
+0xEA73 0x9ECC #CJK UNIFIED IDEOGRAPH
+0xEA74 0x9ECE #CJK UNIFIED IDEOGRAPH
+0xEA75 0x9ECF #CJK UNIFIED IDEOGRAPH
+0xEA76 0x9ED0 #CJK UNIFIED IDEOGRAPH
+0xEA77 0x9ED4 #CJK UNIFIED IDEOGRAPH
+0xEA78 0x9EDC #CJK UNIFIED IDEOGRAPH
+0xEA79 0x9EDE #CJK UNIFIED IDEOGRAPH
+0xEA7A 0x9EDD #CJK UNIFIED IDEOGRAPH
+0xEA7B 0x9EE0 #CJK UNIFIED IDEOGRAPH
+0xEA7C 0x9EE5 #CJK UNIFIED IDEOGRAPH
+0xEA7D 0x9EE8 #CJK UNIFIED IDEOGRAPH
+0xEA7E 0x9EEF #CJK UNIFIED IDEOGRAPH
+0xEA80 0x9EF4 #CJK UNIFIED IDEOGRAPH
+0xEA81 0x9EF6 #CJK UNIFIED IDEOGRAPH
+0xEA82 0x9EF7 #CJK UNIFIED IDEOGRAPH
+0xEA83 0x9EF9 #CJK UNIFIED IDEOGRAPH
+0xEA84 0x9EFB #CJK UNIFIED IDEOGRAPH
+0xEA85 0x9EFC #CJK UNIFIED IDEOGRAPH
+0xEA86 0x9EFD #CJK UNIFIED IDEOGRAPH
+0xEA87 0x9F07 #CJK UNIFIED IDEOGRAPH
+0xEA88 0x9F08 #CJK UNIFIED IDEOGRAPH
+0xEA89 0x76B7 #CJK UNIFIED IDEOGRAPH
+0xEA8A 0x9F15 #CJK UNIFIED IDEOGRAPH
+0xEA8B 0x9F21 #CJK UNIFIED IDEOGRAPH
+0xEA8C 0x9F2C #CJK UNIFIED IDEOGRAPH
+0xEA8D 0x9F3E #CJK UNIFIED IDEOGRAPH
+0xEA8E 0x9F4A #CJK UNIFIED IDEOGRAPH
+0xEA8F 0x9F52 #CJK UNIFIED IDEOGRAPH
+0xEA90 0x9F54 #CJK UNIFIED IDEOGRAPH
+0xEA91 0x9F63 #CJK UNIFIED IDEOGRAPH
+0xEA92 0x9F5F #CJK UNIFIED IDEOGRAPH
+0xEA93 0x9F60 #CJK UNIFIED IDEOGRAPH
+0xEA94 0x9F61 #CJK UNIFIED IDEOGRAPH
+0xEA95 0x9F66 #CJK UNIFIED IDEOGRAPH
+0xEA96 0x9F67 #CJK UNIFIED IDEOGRAPH
+0xEA97 0x9F6C #CJK UNIFIED IDEOGRAPH
+0xEA98 0x9F6A #CJK UNIFIED IDEOGRAPH
+0xEA99 0x9F77 #CJK UNIFIED IDEOGRAPH
+0xEA9A 0x9F72 #CJK UNIFIED IDEOGRAPH
+0xEA9B 0x9F76 #CJK UNIFIED IDEOGRAPH
+0xEA9C 0x9F95 #CJK UNIFIED IDEOGRAPH
+0xEA9D 0x9F9C #CJK UNIFIED IDEOGRAPH
+0xEA9E 0x9FA0 #CJK UNIFIED IDEOGRAPH
+0xEA9F 0x582F #CJK UNIFIED IDEOGRAPH
+0xEAA0 0x69C7 #CJK UNIFIED IDEOGRAPH
+0xEAA1 0x9059 #CJK UNIFIED IDEOGRAPH
+0xEAA2 0x7464 #CJK UNIFIED IDEOGRAPH
+0xEAA3 0x51DC #CJK UNIFIED IDEOGRAPH
+0xEAA4 0x7199 #CJK UNIFIED IDEOGRAPH
+0xED40 0x7E8A #CJK UNIFIED IDEOGRAPH
+0xED41 0x891C #CJK UNIFIED IDEOGRAPH
+0xED42 0x9348 #CJK UNIFIED IDEOGRAPH
+0xED43 0x9288 #CJK UNIFIED IDEOGRAPH
+0xED44 0x84DC #CJK UNIFIED IDEOGRAPH
+0xED45 0x4FC9 #CJK UNIFIED IDEOGRAPH
+0xED46 0x70BB #CJK UNIFIED IDEOGRAPH
+0xED47 0x6631 #CJK UNIFIED IDEOGRAPH
+0xED48 0x68C8 #CJK UNIFIED IDEOGRAPH
+0xED49 0x92F9 #CJK UNIFIED IDEOGRAPH
+0xED4A 0x66FB #CJK UNIFIED IDEOGRAPH
+0xED4B 0x5F45 #CJK UNIFIED IDEOGRAPH
+0xED4C 0x4E28 #CJK UNIFIED IDEOGRAPH
+0xED4D 0x4EE1 #CJK UNIFIED IDEOGRAPH
+0xED4E 0x4EFC #CJK UNIFIED IDEOGRAPH
+0xED4F 0x4F00 #CJK UNIFIED IDEOGRAPH
+0xED50 0x4F03 #CJK UNIFIED IDEOGRAPH
+0xED51 0x4F39 #CJK UNIFIED IDEOGRAPH
+0xED52 0x4F56 #CJK UNIFIED IDEOGRAPH
+0xED53 0x4F92 #CJK UNIFIED IDEOGRAPH
+0xED54 0x4F8A #CJK UNIFIED IDEOGRAPH
+0xED55 0x4F9A #CJK UNIFIED IDEOGRAPH
+0xED56 0x4F94 #CJK UNIFIED IDEOGRAPH
+0xED57 0x4FCD #CJK UNIFIED IDEOGRAPH
+0xED58 0x5040 #CJK UNIFIED IDEOGRAPH
+0xED59 0x5022 #CJK UNIFIED IDEOGRAPH
+0xED5A 0x4FFF #CJK UNIFIED IDEOGRAPH
+0xED5B 0x501E #CJK UNIFIED IDEOGRAPH
+0xED5C 0x5046 #CJK UNIFIED IDEOGRAPH
+0xED5D 0x5070 #CJK UNIFIED IDEOGRAPH
+0xED5E 0x5042 #CJK UNIFIED IDEOGRAPH
+0xED5F 0x5094 #CJK UNIFIED IDEOGRAPH
+0xED60 0x50F4 #CJK UNIFIED IDEOGRAPH
+0xED61 0x50D8 #CJK UNIFIED IDEOGRAPH
+0xED62 0x514A #CJK UNIFIED IDEOGRAPH
+0xED63 0x5164 #CJK UNIFIED IDEOGRAPH
+0xED64 0x519D #CJK UNIFIED IDEOGRAPH
+0xED65 0x51BE #CJK UNIFIED IDEOGRAPH
+0xED66 0x51EC #CJK UNIFIED IDEOGRAPH
+0xED67 0x5215 #CJK UNIFIED IDEOGRAPH
+0xED68 0x529C #CJK UNIFIED IDEOGRAPH
+0xED69 0x52A6 #CJK UNIFIED IDEOGRAPH
+0xED6A 0x52C0 #CJK UNIFIED IDEOGRAPH
+0xED6B 0x52DB #CJK UNIFIED IDEOGRAPH
+0xED6C 0x5300 #CJK UNIFIED IDEOGRAPH
+0xED6D 0x5307 #CJK UNIFIED IDEOGRAPH
+0xED6E 0x5324 #CJK UNIFIED IDEOGRAPH
+0xED6F 0x5372 #CJK UNIFIED IDEOGRAPH
+0xED70 0x5393 #CJK UNIFIED IDEOGRAPH
+0xED71 0x53B2 #CJK UNIFIED IDEOGRAPH
+0xED72 0x53DD #CJK UNIFIED IDEOGRAPH
+0xED73 0xFA0E #CJK COMPATIBILITY IDEOGRAPH
+0xED74 0x549C #CJK UNIFIED IDEOGRAPH
+0xED75 0x548A #CJK UNIFIED IDEOGRAPH
+0xED76 0x54A9 #CJK UNIFIED IDEOGRAPH
+0xED77 0x54FF #CJK UNIFIED IDEOGRAPH
+0xED78 0x5586 #CJK UNIFIED IDEOGRAPH
+0xED79 0x5759 #CJK UNIFIED IDEOGRAPH
+0xED7A 0x5765 #CJK UNIFIED IDEOGRAPH
+0xED7B 0x57AC #CJK UNIFIED IDEOGRAPH
+0xED7C 0x57C8 #CJK UNIFIED IDEOGRAPH
+0xED7D 0x57C7 #CJK UNIFIED IDEOGRAPH
+0xED7E 0xFA0F #CJK COMPATIBILITY IDEOGRAPH
+0xED80 0xFA10 #CJK COMPATIBILITY IDEOGRAPH
+0xED81 0x589E #CJK UNIFIED IDEOGRAPH
+0xED82 0x58B2 #CJK UNIFIED IDEOGRAPH
+0xED83 0x590B #CJK UNIFIED IDEOGRAPH
+0xED84 0x5953 #CJK UNIFIED IDEOGRAPH
+0xED85 0x595B #CJK UNIFIED IDEOGRAPH
+0xED86 0x595D #CJK UNIFIED IDEOGRAPH
+0xED87 0x5963 #CJK UNIFIED IDEOGRAPH
+0xED88 0x59A4 #CJK UNIFIED IDEOGRAPH
+0xED89 0x59BA #CJK UNIFIED IDEOGRAPH
+0xED8A 0x5B56 #CJK UNIFIED IDEOGRAPH
+0xED8B 0x5BC0 #CJK UNIFIED IDEOGRAPH
+0xED8C 0x752F #CJK UNIFIED IDEOGRAPH
+0xED8D 0x5BD8 #CJK UNIFIED IDEOGRAPH
+0xED8E 0x5BEC #CJK UNIFIED IDEOGRAPH
+0xED8F 0x5C1E #CJK UNIFIED IDEOGRAPH
+0xED90 0x5CA6 #CJK UNIFIED IDEOGRAPH
+0xED91 0x5CBA #CJK UNIFIED IDEOGRAPH
+0xED92 0x5CF5 #CJK UNIFIED IDEOGRAPH
+0xED93 0x5D27 #CJK UNIFIED IDEOGRAPH
+0xED94 0x5D53 #CJK UNIFIED IDEOGRAPH
+0xED95 0xFA11 #CJK COMPATIBILITY IDEOGRAPH
+0xED96 0x5D42 #CJK UNIFIED IDEOGRAPH
+0xED97 0x5D6D #CJK UNIFIED IDEOGRAPH
+0xED98 0x5DB8 #CJK UNIFIED IDEOGRAPH
+0xED99 0x5DB9 #CJK UNIFIED IDEOGRAPH
+0xED9A 0x5DD0 #CJK UNIFIED IDEOGRAPH
+0xED9B 0x5F21 #CJK UNIFIED IDEOGRAPH
+0xED9C 0x5F34 #CJK UNIFIED IDEOGRAPH
+0xED9D 0x5F67 #CJK UNIFIED IDEOGRAPH
+0xED9E 0x5FB7 #CJK UNIFIED IDEOGRAPH
+0xED9F 0x5FDE #CJK UNIFIED IDEOGRAPH
+0xEDA0 0x605D #CJK UNIFIED IDEOGRAPH
+0xEDA1 0x6085 #CJK UNIFIED IDEOGRAPH
+0xEDA2 0x608A #CJK UNIFIED IDEOGRAPH
+0xEDA3 0x60DE #CJK UNIFIED IDEOGRAPH
+0xEDA4 0x60D5 #CJK UNIFIED IDEOGRAPH
+0xEDA5 0x6120 #CJK UNIFIED IDEOGRAPH
+0xEDA6 0x60F2 #CJK UNIFIED IDEOGRAPH
+0xEDA7 0x6111 #CJK UNIFIED IDEOGRAPH
+0xEDA8 0x6137 #CJK UNIFIED IDEOGRAPH
+0xEDA9 0x6130 #CJK UNIFIED IDEOGRAPH
+0xEDAA 0x6198 #CJK UNIFIED IDEOGRAPH
+0xEDAB 0x6213 #CJK UNIFIED IDEOGRAPH
+0xEDAC 0x62A6 #CJK UNIFIED IDEOGRAPH
+0xEDAD 0x63F5 #CJK UNIFIED IDEOGRAPH
+0xEDAE 0x6460 #CJK UNIFIED IDEOGRAPH
+0xEDAF 0x649D #CJK UNIFIED IDEOGRAPH
+0xEDB0 0x64CE #CJK UNIFIED IDEOGRAPH
+0xEDB1 0x654E #CJK UNIFIED IDEOGRAPH
+0xEDB2 0x6600 #CJK UNIFIED IDEOGRAPH
+0xEDB3 0x6615 #CJK UNIFIED IDEOGRAPH
+0xEDB4 0x663B #CJK UNIFIED IDEOGRAPH
+0xEDB5 0x6609 #CJK UNIFIED IDEOGRAPH
+0xEDB6 0x662E #CJK UNIFIED IDEOGRAPH
+0xEDB7 0x661E #CJK UNIFIED IDEOGRAPH
+0xEDB8 0x6624 #CJK UNIFIED IDEOGRAPH
+0xEDB9 0x6665 #CJK UNIFIED IDEOGRAPH
+0xEDBA 0x6657 #CJK UNIFIED IDEOGRAPH
+0xEDBB 0x6659 #CJK UNIFIED IDEOGRAPH
+0xEDBC 0xFA12 #CJK COMPATIBILITY IDEOGRAPH
+0xEDBD 0x6673 #CJK UNIFIED IDEOGRAPH
+0xEDBE 0x6699 #CJK UNIFIED IDEOGRAPH
+0xEDBF 0x66A0 #CJK UNIFIED IDEOGRAPH
+0xEDC0 0x66B2 #CJK UNIFIED IDEOGRAPH
+0xEDC1 0x66BF #CJK UNIFIED IDEOGRAPH
+0xEDC2 0x66FA #CJK UNIFIED IDEOGRAPH
+0xEDC3 0x670E #CJK UNIFIED IDEOGRAPH
+0xEDC4 0xF929 #CJK COMPATIBILITY IDEOGRAPH
+0xEDC5 0x6766 #CJK UNIFIED IDEOGRAPH
+0xEDC6 0x67BB #CJK UNIFIED IDEOGRAPH
+0xEDC7 0x6852 #CJK UNIFIED IDEOGRAPH
+0xEDC8 0x67C0 #CJK UNIFIED IDEOGRAPH
+0xEDC9 0x6801 #CJK UNIFIED IDEOGRAPH
+0xEDCA 0x6844 #CJK UNIFIED IDEOGRAPH
+0xEDCB 0x68CF #CJK UNIFIED IDEOGRAPH
+0xEDCC 0xFA13 #CJK COMPATIBILITY IDEOGRAPH
+0xEDCD 0x6968 #CJK UNIFIED IDEOGRAPH
+0xEDCE 0xFA14 #CJK COMPATIBILITY IDEOGRAPH
+0xEDCF 0x6998 #CJK UNIFIED IDEOGRAPH
+0xEDD0 0x69E2 #CJK UNIFIED IDEOGRAPH
+0xEDD1 0x6A30 #CJK UNIFIED IDEOGRAPH
+0xEDD2 0x6A6B #CJK UNIFIED IDEOGRAPH
+0xEDD3 0x6A46 #CJK UNIFIED IDEOGRAPH
+0xEDD4 0x6A73 #CJK UNIFIED IDEOGRAPH
+0xEDD5 0x6A7E #CJK UNIFIED IDEOGRAPH
+0xEDD6 0x6AE2 #CJK UNIFIED IDEOGRAPH
+0xEDD7 0x6AE4 #CJK UNIFIED IDEOGRAPH
+0xEDD8 0x6BD6 #CJK UNIFIED IDEOGRAPH
+0xEDD9 0x6C3F #CJK UNIFIED IDEOGRAPH
+0xEDDA 0x6C5C #CJK UNIFIED IDEOGRAPH
+0xEDDB 0x6C86 #CJK UNIFIED IDEOGRAPH
+0xEDDC 0x6C6F #CJK UNIFIED IDEOGRAPH
+0xEDDD 0x6CDA #CJK UNIFIED IDEOGRAPH
+0xEDDE 0x6D04 #CJK UNIFIED IDEOGRAPH
+0xEDDF 0x6D87 #CJK UNIFIED IDEOGRAPH
+0xEDE0 0x6D6F #CJK UNIFIED IDEOGRAPH
+0xEDE1 0x6D96 #CJK UNIFIED IDEOGRAPH
+0xEDE2 0x6DAC #CJK UNIFIED IDEOGRAPH
+0xEDE3 0x6DCF #CJK UNIFIED IDEOGRAPH
+0xEDE4 0x6DF8 #CJK UNIFIED IDEOGRAPH
+0xEDE5 0x6DF2 #CJK UNIFIED IDEOGRAPH
+0xEDE6 0x6DFC #CJK UNIFIED IDEOGRAPH
+0xEDE7 0x6E39 #CJK UNIFIED IDEOGRAPH
+0xEDE8 0x6E5C #CJK UNIFIED IDEOGRAPH
+0xEDE9 0x6E27 #CJK UNIFIED IDEOGRAPH
+0xEDEA 0x6E3C #CJK UNIFIED IDEOGRAPH
+0xEDEB 0x6EBF #CJK UNIFIED IDEOGRAPH
+0xEDEC 0x6F88 #CJK UNIFIED IDEOGRAPH
+0xEDED 0x6FB5 #CJK UNIFIED IDEOGRAPH
+0xEDEE 0x6FF5 #CJK UNIFIED IDEOGRAPH
+0xEDEF 0x7005 #CJK UNIFIED IDEOGRAPH
+0xEDF0 0x7007 #CJK UNIFIED IDEOGRAPH
+0xEDF1 0x7028 #CJK UNIFIED IDEOGRAPH
+0xEDF2 0x7085 #CJK UNIFIED IDEOGRAPH
+0xEDF3 0x70AB #CJK UNIFIED IDEOGRAPH
+0xEDF4 0x710F #CJK UNIFIED IDEOGRAPH
+0xEDF5 0x7104 #CJK UNIFIED IDEOGRAPH
+0xEDF6 0x715C #CJK UNIFIED IDEOGRAPH
+0xEDF7 0x7146 #CJK UNIFIED IDEOGRAPH
+0xEDF8 0x7147 #CJK UNIFIED IDEOGRAPH
+0xEDF9 0xFA15 #CJK COMPATIBILITY IDEOGRAPH
+0xEDFA 0x71C1 #CJK UNIFIED IDEOGRAPH
+0xEDFB 0x71FE #CJK UNIFIED IDEOGRAPH
+0xEDFC 0x72B1 #CJK UNIFIED IDEOGRAPH
+0xEE40 0x72BE #CJK UNIFIED IDEOGRAPH
+0xEE41 0x7324 #CJK UNIFIED IDEOGRAPH
+0xEE42 0xFA16 #CJK COMPATIBILITY IDEOGRAPH
+0xEE43 0x7377 #CJK UNIFIED IDEOGRAPH
+0xEE44 0x73BD #CJK UNIFIED IDEOGRAPH
+0xEE45 0x73C9 #CJK UNIFIED IDEOGRAPH
+0xEE46 0x73D6 #CJK UNIFIED IDEOGRAPH
+0xEE47 0x73E3 #CJK UNIFIED IDEOGRAPH
+0xEE48 0x73D2 #CJK UNIFIED IDEOGRAPH
+0xEE49 0x7407 #CJK UNIFIED IDEOGRAPH
+0xEE4A 0x73F5 #CJK UNIFIED IDEOGRAPH
+0xEE4B 0x7426 #CJK UNIFIED IDEOGRAPH
+0xEE4C 0x742A #CJK UNIFIED IDEOGRAPH
+0xEE4D 0x7429 #CJK UNIFIED IDEOGRAPH
+0xEE4E 0x742E #CJK UNIFIED IDEOGRAPH
+0xEE4F 0x7462 #CJK UNIFIED IDEOGRAPH
+0xEE50 0x7489 #CJK UNIFIED IDEOGRAPH
+0xEE51 0x749F #CJK UNIFIED IDEOGRAPH
+0xEE52 0x7501 #CJK UNIFIED IDEOGRAPH
+0xEE53 0x756F #CJK UNIFIED IDEOGRAPH
+0xEE54 0x7682 #CJK UNIFIED IDEOGRAPH
+0xEE55 0x769C #CJK UNIFIED IDEOGRAPH
+0xEE56 0x769E #CJK UNIFIED IDEOGRAPH
+0xEE57 0x769B #CJK UNIFIED IDEOGRAPH
+0xEE58 0x76A6 #CJK UNIFIED IDEOGRAPH
+0xEE59 0xFA17 #CJK COMPATIBILITY IDEOGRAPH
+0xEE5A 0x7746 #CJK UNIFIED IDEOGRAPH
+0xEE5B 0x52AF #CJK UNIFIED IDEOGRAPH
+0xEE5C 0x7821 #CJK UNIFIED IDEOGRAPH
+0xEE5D 0x784E #CJK UNIFIED IDEOGRAPH
+0xEE5E 0x7864 #CJK UNIFIED IDEOGRAPH
+0xEE5F 0x787A #CJK UNIFIED IDEOGRAPH
+0xEE60 0x7930 #CJK UNIFIED IDEOGRAPH
+0xEE61 0xFA18 #CJK COMPATIBILITY IDEOGRAPH
+0xEE62 0xFA19 #CJK COMPATIBILITY IDEOGRAPH
+0xEE63 0xFA1A #CJK COMPATIBILITY IDEOGRAPH
+0xEE64 0x7994 #CJK UNIFIED IDEOGRAPH
+0xEE65 0xFA1B #CJK COMPATIBILITY IDEOGRAPH
+0xEE66 0x799B #CJK UNIFIED IDEOGRAPH
+0xEE67 0x7AD1 #CJK UNIFIED IDEOGRAPH
+0xEE68 0x7AE7 #CJK UNIFIED IDEOGRAPH
+0xEE69 0xFA1C #CJK COMPATIBILITY IDEOGRAPH
+0xEE6A 0x7AEB #CJK UNIFIED IDEOGRAPH
+0xEE6B 0x7B9E #CJK UNIFIED IDEOGRAPH
+0xEE6C 0xFA1D #CJK COMPATIBILITY IDEOGRAPH
+0xEE6D 0x7D48 #CJK UNIFIED IDEOGRAPH
+0xEE6E 0x7D5C #CJK UNIFIED IDEOGRAPH
+0xEE6F 0x7DB7 #CJK UNIFIED IDEOGRAPH
+0xEE70 0x7DA0 #CJK UNIFIED IDEOGRAPH
+0xEE71 0x7DD6 #CJK UNIFIED IDEOGRAPH
+0xEE72 0x7E52 #CJK UNIFIED IDEOGRAPH
+0xEE73 0x7F47 #CJK UNIFIED IDEOGRAPH
+0xEE74 0x7FA1 #CJK UNIFIED IDEOGRAPH
+0xEE75 0xFA1E #CJK COMPATIBILITY IDEOGRAPH
+0xEE76 0x8301 #CJK UNIFIED IDEOGRAPH
+0xEE77 0x8362 #CJK UNIFIED IDEOGRAPH
+0xEE78 0x837F #CJK UNIFIED IDEOGRAPH
+0xEE79 0x83C7 #CJK UNIFIED IDEOGRAPH
+0xEE7A 0x83F6 #CJK UNIFIED IDEOGRAPH
+0xEE7B 0x8448 #CJK UNIFIED IDEOGRAPH
+0xEE7C 0x84B4 #CJK UNIFIED IDEOGRAPH
+0xEE7D 0x8553 #CJK UNIFIED IDEOGRAPH
+0xEE7E 0x8559 #CJK UNIFIED IDEOGRAPH
+0xEE80 0x856B #CJK UNIFIED IDEOGRAPH
+0xEE81 0xFA1F #CJK COMPATIBILITY IDEOGRAPH
+0xEE82 0x85B0 #CJK UNIFIED IDEOGRAPH
+0xEE83 0xFA20 #CJK COMPATIBILITY IDEOGRAPH
+0xEE84 0xFA21 #CJK COMPATIBILITY IDEOGRAPH
+0xEE85 0x8807 #CJK UNIFIED IDEOGRAPH
+0xEE86 0x88F5 #CJK UNIFIED IDEOGRAPH
+0xEE87 0x8A12 #CJK UNIFIED IDEOGRAPH
+0xEE88 0x8A37 #CJK UNIFIED IDEOGRAPH
+0xEE89 0x8A79 #CJK UNIFIED IDEOGRAPH
+0xEE8A 0x8AA7 #CJK UNIFIED IDEOGRAPH
+0xEE8B 0x8ABE #CJK UNIFIED IDEOGRAPH
+0xEE8C 0x8ADF #CJK UNIFIED IDEOGRAPH
+0xEE8D 0xFA22 #CJK COMPATIBILITY IDEOGRAPH
+0xEE8E 0x8AF6 #CJK UNIFIED IDEOGRAPH
+0xEE8F 0x8B53 #CJK UNIFIED IDEOGRAPH
+0xEE90 0x8B7F #CJK UNIFIED IDEOGRAPH
+0xEE91 0x8CF0 #CJK UNIFIED IDEOGRAPH
+0xEE92 0x8CF4 #CJK UNIFIED IDEOGRAPH
+0xEE93 0x8D12 #CJK UNIFIED IDEOGRAPH
+0xEE94 0x8D76 #CJK UNIFIED IDEOGRAPH
+0xEE95 0xFA23 #CJK COMPATIBILITY IDEOGRAPH
+0xEE96 0x8ECF #CJK UNIFIED IDEOGRAPH
+0xEE97 0xFA24 #CJK COMPATIBILITY IDEOGRAPH
+0xEE98 0xFA25 #CJK COMPATIBILITY IDEOGRAPH
+0xEE99 0x9067 #CJK UNIFIED IDEOGRAPH
+0xEE9A 0x90DE #CJK UNIFIED IDEOGRAPH
+0xEE9B 0xFA26 #CJK COMPATIBILITY IDEOGRAPH
+0xEE9C 0x9115 #CJK UNIFIED IDEOGRAPH
+0xEE9D 0x9127 #CJK UNIFIED IDEOGRAPH
+0xEE9E 0x91DA #CJK UNIFIED IDEOGRAPH
+0xEE9F 0x91D7 #CJK UNIFIED IDEOGRAPH
+0xEEA0 0x91DE #CJK UNIFIED IDEOGRAPH
+0xEEA1 0x91ED #CJK UNIFIED IDEOGRAPH
+0xEEA2 0x91EE #CJK UNIFIED IDEOGRAPH
+0xEEA3 0x91E4 #CJK UNIFIED IDEOGRAPH
+0xEEA4 0x91E5 #CJK UNIFIED IDEOGRAPH
+0xEEA5 0x9206 #CJK UNIFIED IDEOGRAPH
+0xEEA6 0x9210 #CJK UNIFIED IDEOGRAPH
+0xEEA7 0x920A #CJK UNIFIED IDEOGRAPH
+0xEEA8 0x923A #CJK UNIFIED IDEOGRAPH
+0xEEA9 0x9240 #CJK UNIFIED IDEOGRAPH
+0xEEAA 0x923C #CJK UNIFIED IDEOGRAPH
+0xEEAB 0x924E #CJK UNIFIED IDEOGRAPH
+0xEEAC 0x9259 #CJK UNIFIED IDEOGRAPH
+0xEEAD 0x9251 #CJK UNIFIED IDEOGRAPH
+0xEEAE 0x9239 #CJK UNIFIED IDEOGRAPH
+0xEEAF 0x9267 #CJK UNIFIED IDEOGRAPH
+0xEEB0 0x92A7 #CJK UNIFIED IDEOGRAPH
+0xEEB1 0x9277 #CJK UNIFIED IDEOGRAPH
+0xEEB2 0x9278 #CJK UNIFIED IDEOGRAPH
+0xEEB3 0x92E7 #CJK UNIFIED IDEOGRAPH
+0xEEB4 0x92D7 #CJK UNIFIED IDEOGRAPH
+0xEEB5 0x92D9 #CJK UNIFIED IDEOGRAPH
+0xEEB6 0x92D0 #CJK UNIFIED IDEOGRAPH
+0xEEB7 0xFA27 #CJK COMPATIBILITY IDEOGRAPH
+0xEEB8 0x92D5 #CJK UNIFIED IDEOGRAPH
+0xEEB9 0x92E0 #CJK UNIFIED IDEOGRAPH
+0xEEBA 0x92D3 #CJK UNIFIED IDEOGRAPH
+0xEEBB 0x9325 #CJK UNIFIED IDEOGRAPH
+0xEEBC 0x9321 #CJK UNIFIED IDEOGRAPH
+0xEEBD 0x92FB #CJK UNIFIED IDEOGRAPH
+0xEEBE 0xFA28 #CJK COMPATIBILITY IDEOGRAPH
+0xEEBF 0x931E #CJK UNIFIED IDEOGRAPH
+0xEEC0 0x92FF #CJK UNIFIED IDEOGRAPH
+0xEEC1 0x931D #CJK UNIFIED IDEOGRAPH
+0xEEC2 0x9302 #CJK UNIFIED IDEOGRAPH
+0xEEC3 0x9370 #CJK UNIFIED IDEOGRAPH
+0xEEC4 0x9357 #CJK UNIFIED IDEOGRAPH
+0xEEC5 0x93A4 #CJK UNIFIED IDEOGRAPH
+0xEEC6 0x93C6 #CJK UNIFIED IDEOGRAPH
+0xEEC7 0x93DE #CJK UNIFIED IDEOGRAPH
+0xEEC8 0x93F8 #CJK UNIFIED IDEOGRAPH
+0xEEC9 0x9431 #CJK UNIFIED IDEOGRAPH
+0xEECA 0x9445 #CJK UNIFIED IDEOGRAPH
+0xEECB 0x9448 #CJK UNIFIED IDEOGRAPH
+0xEECC 0x9592 #CJK UNIFIED IDEOGRAPH
+0xEECD 0xF9DC #CJK COMPATIBILITY IDEOGRAPH
+0xEECE 0xFA29 #CJK COMPATIBILITY IDEOGRAPH
+0xEECF 0x969D #CJK UNIFIED IDEOGRAPH
+0xEED0 0x96AF #CJK UNIFIED IDEOGRAPH
+0xEED1 0x9733 #CJK UNIFIED IDEOGRAPH
+0xEED2 0x973B #CJK UNIFIED IDEOGRAPH
+0xEED3 0x9743 #CJK UNIFIED IDEOGRAPH
+0xEED4 0x974D #CJK UNIFIED IDEOGRAPH
+0xEED5 0x974F #CJK UNIFIED IDEOGRAPH
+0xEED6 0x9751 #CJK UNIFIED IDEOGRAPH
+0xEED7 0x9755 #CJK UNIFIED IDEOGRAPH
+0xEED8 0x9857 #CJK UNIFIED IDEOGRAPH
+0xEED9 0x9865 #CJK UNIFIED IDEOGRAPH
+0xEEDA 0xFA2A #CJK COMPATIBILITY IDEOGRAPH
+0xEEDB 0xFA2B #CJK COMPATIBILITY IDEOGRAPH
+0xEEDC 0x9927 #CJK UNIFIED IDEOGRAPH
+0xEEDD 0xFA2C #CJK COMPATIBILITY IDEOGRAPH
+0xEEDE 0x999E #CJK UNIFIED IDEOGRAPH
+0xEEDF 0x9A4E #CJK UNIFIED IDEOGRAPH
+0xEEE0 0x9AD9 #CJK UNIFIED IDEOGRAPH
+0xEEE1 0x9ADC #CJK UNIFIED IDEOGRAPH
+0xEEE2 0x9B75 #CJK UNIFIED IDEOGRAPH
+0xEEE3 0x9B72 #CJK UNIFIED IDEOGRAPH
+0xEEE4 0x9B8F #CJK UNIFIED IDEOGRAPH
+0xEEE5 0x9BB1 #CJK UNIFIED IDEOGRAPH
+0xEEE6 0x9BBB #CJK UNIFIED IDEOGRAPH
+0xEEE7 0x9C00 #CJK UNIFIED IDEOGRAPH
+0xEEE8 0x9D70 #CJK UNIFIED IDEOGRAPH
+0xEEE9 0x9D6B #CJK UNIFIED IDEOGRAPH
+0xEEEA 0xFA2D #CJK COMPATIBILITY IDEOGRAPH
+0xEEEB 0x9E19 #CJK UNIFIED IDEOGRAPH
+0xEEEC 0x9ED1 #CJK UNIFIED IDEOGRAPH
+0xEEEF 0x2170 #SMALL ROMAN NUMERAL ONE
+0xEEF0 0x2171 #SMALL ROMAN NUMERAL TWO
+0xEEF1 0x2172 #SMALL ROMAN NUMERAL THREE
+0xEEF2 0x2173 #SMALL ROMAN NUMERAL FOUR
+0xEEF3 0x2174 #SMALL ROMAN NUMERAL FIVE
+0xEEF4 0x2175 #SMALL ROMAN NUMERAL SIX
+0xEEF5 0x2176 #SMALL ROMAN NUMERAL SEVEN
+0xEEF6 0x2177 #SMALL ROMAN NUMERAL EIGHT
+0xEEF7 0x2178 #SMALL ROMAN NUMERAL NINE
+0xEEF8 0x2179 #SMALL ROMAN NUMERAL TEN
+0xEEF9 0xFFE2 #FULLWIDTH NOT SIGN
+0xEEFA 0xFFE4 #FULLWIDTH BROKEN BAR
+0xEEFB 0xFF07 #FULLWIDTH APOSTROPHE
+0xEEFC 0xFF02 #FULLWIDTH QUOTATION MARK
+0xFA40 0x2170 #SMALL ROMAN NUMERAL ONE
+0xFA41 0x2171 #SMALL ROMAN NUMERAL TWO
+0xFA42 0x2172 #SMALL ROMAN NUMERAL THREE
+0xFA43 0x2173 #SMALL ROMAN NUMERAL FOUR
+0xFA44 0x2174 #SMALL ROMAN NUMERAL FIVE
+0xFA45 0x2175 #SMALL ROMAN NUMERAL SIX
+0xFA46 0x2176 #SMALL ROMAN NUMERAL SEVEN
+0xFA47 0x2177 #SMALL ROMAN NUMERAL EIGHT
+0xFA48 0x2178 #SMALL ROMAN NUMERAL NINE
+0xFA49 0x2179 #SMALL ROMAN NUMERAL TEN
+0xFA4A 0x2160 #ROMAN NUMERAL ONE
+0xFA4B 0x2161 #ROMAN NUMERAL TWO
+0xFA4C 0x2162 #ROMAN NUMERAL THREE
+0xFA4D 0x2163 #ROMAN NUMERAL FOUR
+0xFA4E 0x2164 #ROMAN NUMERAL FIVE
+0xFA4F 0x2165 #ROMAN NUMERAL SIX
+0xFA50 0x2166 #ROMAN NUMERAL SEVEN
+0xFA51 0x2167 #ROMAN NUMERAL EIGHT
+0xFA52 0x2168 #ROMAN NUMERAL NINE
+0xFA53 0x2169 #ROMAN NUMERAL TEN
+0xFA54 0xFFE2 #FULLWIDTH NOT SIGN
+0xFA55 0xFFE4 #FULLWIDTH BROKEN BAR
+0xFA56 0xFF07 #FULLWIDTH APOSTROPHE
+0xFA57 0xFF02 #FULLWIDTH QUOTATION MARK
+0xFA58 0x3231 #PARENTHESIZED IDEOGRAPH STOCK
+0xFA59 0x2116 #NUMERO SIGN
+0xFA5A 0x2121 #TELEPHONE SIGN
+0xFA5B 0x2235 #BECAUSE
+0xFA5C 0x7E8A #CJK UNIFIED IDEOGRAPH
+0xFA5D 0x891C #CJK UNIFIED IDEOGRAPH
+0xFA5E 0x9348 #CJK UNIFIED IDEOGRAPH
+0xFA5F 0x9288 #CJK UNIFIED IDEOGRAPH
+0xFA60 0x84DC #CJK UNIFIED IDEOGRAPH
+0xFA61 0x4FC9 #CJK UNIFIED IDEOGRAPH
+0xFA62 0x70BB #CJK UNIFIED IDEOGRAPH
+0xFA63 0x6631 #CJK UNIFIED IDEOGRAPH
+0xFA64 0x68C8 #CJK UNIFIED IDEOGRAPH
+0xFA65 0x92F9 #CJK UNIFIED IDEOGRAPH
+0xFA66 0x66FB #CJK UNIFIED IDEOGRAPH
+0xFA67 0x5F45 #CJK UNIFIED IDEOGRAPH
+0xFA68 0x4E28 #CJK UNIFIED IDEOGRAPH
+0xFA69 0x4EE1 #CJK UNIFIED IDEOGRAPH
+0xFA6A 0x4EFC #CJK UNIFIED IDEOGRAPH
+0xFA6B 0x4F00 #CJK UNIFIED IDEOGRAPH
+0xFA6C 0x4F03 #CJK UNIFIED IDEOGRAPH
+0xFA6D 0x4F39 #CJK UNIFIED IDEOGRAPH
+0xFA6E 0x4F56 #CJK UNIFIED IDEOGRAPH
+0xFA6F 0x4F92 #CJK UNIFIED IDEOGRAPH
+0xFA70 0x4F8A #CJK UNIFIED IDEOGRAPH
+0xFA71 0x4F9A #CJK UNIFIED IDEOGRAPH
+0xFA72 0x4F94 #CJK UNIFIED IDEOGRAPH
+0xFA73 0x4FCD #CJK UNIFIED IDEOGRAPH
+0xFA74 0x5040 #CJK UNIFIED IDEOGRAPH
+0xFA75 0x5022 #CJK UNIFIED IDEOGRAPH
+0xFA76 0x4FFF #CJK UNIFIED IDEOGRAPH
+0xFA77 0x501E #CJK UNIFIED IDEOGRAPH
+0xFA78 0x5046 #CJK UNIFIED IDEOGRAPH
+0xFA79 0x5070 #CJK UNIFIED IDEOGRAPH
+0xFA7A 0x5042 #CJK UNIFIED IDEOGRAPH
+0xFA7B 0x5094 #CJK UNIFIED IDEOGRAPH
+0xFA7C 0x50F4 #CJK UNIFIED IDEOGRAPH
+0xFA7D 0x50D8 #CJK UNIFIED IDEOGRAPH
+0xFA7E 0x514A #CJK UNIFIED IDEOGRAPH
+0xFA80 0x5164 #CJK UNIFIED IDEOGRAPH
+0xFA81 0x519D #CJK UNIFIED IDEOGRAPH
+0xFA82 0x51BE #CJK UNIFIED IDEOGRAPH
+0xFA83 0x51EC #CJK UNIFIED IDEOGRAPH
+0xFA84 0x5215 #CJK UNIFIED IDEOGRAPH
+0xFA85 0x529C #CJK UNIFIED IDEOGRAPH
+0xFA86 0x52A6 #CJK UNIFIED IDEOGRAPH
+0xFA87 0x52C0 #CJK UNIFIED IDEOGRAPH
+0xFA88 0x52DB #CJK UNIFIED IDEOGRAPH
+0xFA89 0x5300 #CJK UNIFIED IDEOGRAPH
+0xFA8A 0x5307 #CJK UNIFIED IDEOGRAPH
+0xFA8B 0x5324 #CJK UNIFIED IDEOGRAPH
+0xFA8C 0x5372 #CJK UNIFIED IDEOGRAPH
+0xFA8D 0x5393 #CJK UNIFIED IDEOGRAPH
+0xFA8E 0x53B2 #CJK UNIFIED IDEOGRAPH
+0xFA8F 0x53DD #CJK UNIFIED IDEOGRAPH
+0xFA90 0xFA0E #CJK COMPATIBILITY IDEOGRAPH
+0xFA91 0x549C #CJK UNIFIED IDEOGRAPH
+0xFA92 0x548A #CJK UNIFIED IDEOGRAPH
+0xFA93 0x54A9 #CJK UNIFIED IDEOGRAPH
+0xFA94 0x54FF #CJK UNIFIED IDEOGRAPH
+0xFA95 0x5586 #CJK UNIFIED IDEOGRAPH
+0xFA96 0x5759 #CJK UNIFIED IDEOGRAPH
+0xFA97 0x5765 #CJK UNIFIED IDEOGRAPH
+0xFA98 0x57AC #CJK UNIFIED IDEOGRAPH
+0xFA99 0x57C8 #CJK UNIFIED IDEOGRAPH
+0xFA9A 0x57C7 #CJK UNIFIED IDEOGRAPH
+0xFA9B 0xFA0F #CJK COMPATIBILITY IDEOGRAPH
+0xFA9C 0xFA10 #CJK COMPATIBILITY IDEOGRAPH
+0xFA9D 0x589E #CJK UNIFIED IDEOGRAPH
+0xFA9E 0x58B2 #CJK UNIFIED IDEOGRAPH
+0xFA9F 0x590B #CJK UNIFIED IDEOGRAPH
+0xFAA0 0x5953 #CJK UNIFIED IDEOGRAPH
+0xFAA1 0x595B #CJK UNIFIED IDEOGRAPH
+0xFAA2 0x595D #CJK UNIFIED IDEOGRAPH
+0xFAA3 0x5963 #CJK UNIFIED IDEOGRAPH
+0xFAA4 0x59A4 #CJK UNIFIED IDEOGRAPH
+0xFAA5 0x59BA #CJK UNIFIED IDEOGRAPH
+0xFAA6 0x5B56 #CJK UNIFIED IDEOGRAPH
+0xFAA7 0x5BC0 #CJK UNIFIED IDEOGRAPH
+0xFAA8 0x752F #CJK UNIFIED IDEOGRAPH
+0xFAA9 0x5BD8 #CJK UNIFIED IDEOGRAPH
+0xFAAA 0x5BEC #CJK UNIFIED IDEOGRAPH
+0xFAAB 0x5C1E #CJK UNIFIED IDEOGRAPH
+0xFAAC 0x5CA6 #CJK UNIFIED IDEOGRAPH
+0xFAAD 0x5CBA #CJK UNIFIED IDEOGRAPH
+0xFAAE 0x5CF5 #CJK UNIFIED IDEOGRAPH
+0xFAAF 0x5D27 #CJK UNIFIED IDEOGRAPH
+0xFAB0 0x5D53 #CJK UNIFIED IDEOGRAPH
+0xFAB1 0xFA11 #CJK COMPATIBILITY IDEOGRAPH
+0xFAB2 0x5D42 #CJK UNIFIED IDEOGRAPH
+0xFAB3 0x5D6D #CJK UNIFIED IDEOGRAPH
+0xFAB4 0x5DB8 #CJK UNIFIED IDEOGRAPH
+0xFAB5 0x5DB9 #CJK UNIFIED IDEOGRAPH
+0xFAB6 0x5DD0 #CJK UNIFIED IDEOGRAPH
+0xFAB7 0x5F21 #CJK UNIFIED IDEOGRAPH
+0xFAB8 0x5F34 #CJK UNIFIED IDEOGRAPH
+0xFAB9 0x5F67 #CJK UNIFIED IDEOGRAPH
+0xFABA 0x5FB7 #CJK UNIFIED IDEOGRAPH
+0xFABB 0x5FDE #CJK UNIFIED IDEOGRAPH
+0xFABC 0x605D #CJK UNIFIED IDEOGRAPH
+0xFABD 0x6085 #CJK UNIFIED IDEOGRAPH
+0xFABE 0x608A #CJK UNIFIED IDEOGRAPH
+0xFABF 0x60DE #CJK UNIFIED IDEOGRAPH
+0xFAC0 0x60D5 #CJK UNIFIED IDEOGRAPH
+0xFAC1 0x6120 #CJK UNIFIED IDEOGRAPH
+0xFAC2 0x60F2 #CJK UNIFIED IDEOGRAPH
+0xFAC3 0x6111 #CJK UNIFIED IDEOGRAPH
+0xFAC4 0x6137 #CJK UNIFIED IDEOGRAPH
+0xFAC5 0x6130 #CJK UNIFIED IDEOGRAPH
+0xFAC6 0x6198 #CJK UNIFIED IDEOGRAPH
+0xFAC7 0x6213 #CJK UNIFIED IDEOGRAPH
+0xFAC8 0x62A6 #CJK UNIFIED IDEOGRAPH
+0xFAC9 0x63F5 #CJK UNIFIED IDEOGRAPH
+0xFACA 0x6460 #CJK UNIFIED IDEOGRAPH
+0xFACB 0x649D #CJK UNIFIED IDEOGRAPH
+0xFACC 0x64CE #CJK UNIFIED IDEOGRAPH
+0xFACD 0x654E #CJK UNIFIED IDEOGRAPH
+0xFACE 0x6600 #CJK UNIFIED IDEOGRAPH
+0xFACF 0x6615 #CJK UNIFIED IDEOGRAPH
+0xFAD0 0x663B #CJK UNIFIED IDEOGRAPH
+0xFAD1 0x6609 #CJK UNIFIED IDEOGRAPH
+0xFAD2 0x662E #CJK UNIFIED IDEOGRAPH
+0xFAD3 0x661E #CJK UNIFIED IDEOGRAPH
+0xFAD4 0x6624 #CJK UNIFIED IDEOGRAPH
+0xFAD5 0x6665 #CJK UNIFIED IDEOGRAPH
+0xFAD6 0x6657 #CJK UNIFIED IDEOGRAPH
+0xFAD7 0x6659 #CJK UNIFIED IDEOGRAPH
+0xFAD8 0xFA12 #CJK COMPATIBILITY IDEOGRAPH
+0xFAD9 0x6673 #CJK UNIFIED IDEOGRAPH
+0xFADA 0x6699 #CJK UNIFIED IDEOGRAPH
+0xFADB 0x66A0 #CJK UNIFIED IDEOGRAPH
+0xFADC 0x66B2 #CJK UNIFIED IDEOGRAPH
+0xFADD 0x66BF #CJK UNIFIED IDEOGRAPH
+0xFADE 0x66FA #CJK UNIFIED IDEOGRAPH
+0xFADF 0x670E #CJK UNIFIED IDEOGRAPH
+0xFAE0 0xF929 #CJK COMPATIBILITY IDEOGRAPH
+0xFAE1 0x6766 #CJK UNIFIED IDEOGRAPH
+0xFAE2 0x67BB #CJK UNIFIED IDEOGRAPH
+0xFAE3 0x6852 #CJK UNIFIED IDEOGRAPH
+0xFAE4 0x67C0 #CJK UNIFIED IDEOGRAPH
+0xFAE5 0x6801 #CJK UNIFIED IDEOGRAPH
+0xFAE6 0x6844 #CJK UNIFIED IDEOGRAPH
+0xFAE7 0x68CF #CJK UNIFIED IDEOGRAPH
+0xFAE8 0xFA13 #CJK COMPATIBILITY IDEOGRAPH
+0xFAE9 0x6968 #CJK UNIFIED IDEOGRAPH
+0xFAEA 0xFA14 #CJK COMPATIBILITY IDEOGRAPH
+0xFAEB 0x6998 #CJK UNIFIED IDEOGRAPH
+0xFAEC 0x69E2 #CJK UNIFIED IDEOGRAPH
+0xFAED 0x6A30 #CJK UNIFIED IDEOGRAPH
+0xFAEE 0x6A6B #CJK UNIFIED IDEOGRAPH
+0xFAEF 0x6A46 #CJK UNIFIED IDEOGRAPH
+0xFAF0 0x6A73 #CJK UNIFIED IDEOGRAPH
+0xFAF1 0x6A7E #CJK UNIFIED IDEOGRAPH
+0xFAF2 0x6AE2 #CJK UNIFIED IDEOGRAPH
+0xFAF3 0x6AE4 #CJK UNIFIED IDEOGRAPH
+0xFAF4 0x6BD6 #CJK UNIFIED IDEOGRAPH
+0xFAF5 0x6C3F #CJK UNIFIED IDEOGRAPH
+0xFAF6 0x6C5C #CJK UNIFIED IDEOGRAPH
+0xFAF7 0x6C86 #CJK UNIFIED IDEOGRAPH
+0xFAF8 0x6C6F #CJK UNIFIED IDEOGRAPH
+0xFAF9 0x6CDA #CJK UNIFIED IDEOGRAPH
+0xFAFA 0x6D04 #CJK UNIFIED IDEOGRAPH
+0xFAFB 0x6D87 #CJK UNIFIED IDEOGRAPH
+0xFAFC 0x6D6F #CJK UNIFIED IDEOGRAPH
+0xFB40 0x6D96 #CJK UNIFIED IDEOGRAPH
+0xFB41 0x6DAC #CJK UNIFIED IDEOGRAPH
+0xFB42 0x6DCF #CJK UNIFIED IDEOGRAPH
+0xFB43 0x6DF8 #CJK UNIFIED IDEOGRAPH
+0xFB44 0x6DF2 #CJK UNIFIED IDEOGRAPH
+0xFB45 0x6DFC #CJK UNIFIED IDEOGRAPH
+0xFB46 0x6E39 #CJK UNIFIED IDEOGRAPH
+0xFB47 0x6E5C #CJK UNIFIED IDEOGRAPH
+0xFB48 0x6E27 #CJK UNIFIED IDEOGRAPH
+0xFB49 0x6E3C #CJK UNIFIED IDEOGRAPH
+0xFB4A 0x6EBF #CJK UNIFIED IDEOGRAPH
+0xFB4B 0x6F88 #CJK UNIFIED IDEOGRAPH
+0xFB4C 0x6FB5 #CJK UNIFIED IDEOGRAPH
+0xFB4D 0x6FF5 #CJK UNIFIED IDEOGRAPH
+0xFB4E 0x7005 #CJK UNIFIED IDEOGRAPH
+0xFB4F 0x7007 #CJK UNIFIED IDEOGRAPH
+0xFB50 0x7028 #CJK UNIFIED IDEOGRAPH
+0xFB51 0x7085 #CJK UNIFIED IDEOGRAPH
+0xFB52 0x70AB #CJK UNIFIED IDEOGRAPH
+0xFB53 0x710F #CJK UNIFIED IDEOGRAPH
+0xFB54 0x7104 #CJK UNIFIED IDEOGRAPH
+0xFB55 0x715C #CJK UNIFIED IDEOGRAPH
+0xFB56 0x7146 #CJK UNIFIED IDEOGRAPH
+0xFB57 0x7147 #CJK UNIFIED IDEOGRAPH
+0xFB58 0xFA15 #CJK COMPATIBILITY IDEOGRAPH
+0xFB59 0x71C1 #CJK UNIFIED IDEOGRAPH
+0xFB5A 0x71FE #CJK UNIFIED IDEOGRAPH
+0xFB5B 0x72B1 #CJK UNIFIED IDEOGRAPH
+0xFB5C 0x72BE #CJK UNIFIED IDEOGRAPH
+0xFB5D 0x7324 #CJK UNIFIED IDEOGRAPH
+0xFB5E 0xFA16 #CJK COMPATIBILITY IDEOGRAPH
+0xFB5F 0x7377 #CJK UNIFIED IDEOGRAPH
+0xFB60 0x73BD #CJK UNIFIED IDEOGRAPH
+0xFB61 0x73C9 #CJK UNIFIED IDEOGRAPH
+0xFB62 0x73D6 #CJK UNIFIED IDEOGRAPH
+0xFB63 0x73E3 #CJK UNIFIED IDEOGRAPH
+0xFB64 0x73D2 #CJK UNIFIED IDEOGRAPH
+0xFB65 0x7407 #CJK UNIFIED IDEOGRAPH
+0xFB66 0x73F5 #CJK UNIFIED IDEOGRAPH
+0xFB67 0x7426 #CJK UNIFIED IDEOGRAPH
+0xFB68 0x742A #CJK UNIFIED IDEOGRAPH
+0xFB69 0x7429 #CJK UNIFIED IDEOGRAPH
+0xFB6A 0x742E #CJK UNIFIED IDEOGRAPH
+0xFB6B 0x7462 #CJK UNIFIED IDEOGRAPH
+0xFB6C 0x7489 #CJK UNIFIED IDEOGRAPH
+0xFB6D 0x749F #CJK UNIFIED IDEOGRAPH
+0xFB6E 0x7501 #CJK UNIFIED IDEOGRAPH
+0xFB6F 0x756F #CJK UNIFIED IDEOGRAPH
+0xFB70 0x7682 #CJK UNIFIED IDEOGRAPH
+0xFB71 0x769C #CJK UNIFIED IDEOGRAPH
+0xFB72 0x769E #CJK UNIFIED IDEOGRAPH
+0xFB73 0x769B #CJK UNIFIED IDEOGRAPH
+0xFB74 0x76A6 #CJK UNIFIED IDEOGRAPH
+0xFB75 0xFA17 #CJK COMPATIBILITY IDEOGRAPH
+0xFB76 0x7746 #CJK UNIFIED IDEOGRAPH
+0xFB77 0x52AF #CJK UNIFIED IDEOGRAPH
+0xFB78 0x7821 #CJK UNIFIED IDEOGRAPH
+0xFB79 0x784E #CJK UNIFIED IDEOGRAPH
+0xFB7A 0x7864 #CJK UNIFIED IDEOGRAPH
+0xFB7B 0x787A #CJK UNIFIED IDEOGRAPH
+0xFB7C 0x7930 #CJK UNIFIED IDEOGRAPH
+0xFB7D 0xFA18 #CJK COMPATIBILITY IDEOGRAPH
+0xFB7E 0xFA19 #CJK COMPATIBILITY IDEOGRAPH
+0xFB80 0xFA1A #CJK COMPATIBILITY IDEOGRAPH
+0xFB81 0x7994 #CJK UNIFIED IDEOGRAPH
+0xFB82 0xFA1B #CJK COMPATIBILITY IDEOGRAPH
+0xFB83 0x799B #CJK UNIFIED IDEOGRAPH
+0xFB84 0x7AD1 #CJK UNIFIED IDEOGRAPH
+0xFB85 0x7AE7 #CJK UNIFIED IDEOGRAPH
+0xFB86 0xFA1C #CJK COMPATIBILITY IDEOGRAPH
+0xFB87 0x7AEB #CJK UNIFIED IDEOGRAPH
+0xFB88 0x7B9E #CJK UNIFIED IDEOGRAPH
+0xFB89 0xFA1D #CJK COMPATIBILITY IDEOGRAPH
+0xFB8A 0x7D48 #CJK UNIFIED IDEOGRAPH
+0xFB8B 0x7D5C #CJK UNIFIED IDEOGRAPH
+0xFB8C 0x7DB7 #CJK UNIFIED IDEOGRAPH
+0xFB8D 0x7DA0 #CJK UNIFIED IDEOGRAPH
+0xFB8E 0x7DD6 #CJK UNIFIED IDEOGRAPH
+0xFB8F 0x7E52 #CJK UNIFIED IDEOGRAPH
+0xFB90 0x7F47 #CJK UNIFIED IDEOGRAPH
+0xFB91 0x7FA1 #CJK UNIFIED IDEOGRAPH
+0xFB92 0xFA1E #CJK COMPATIBILITY IDEOGRAPH
+0xFB93 0x8301 #CJK UNIFIED IDEOGRAPH
+0xFB94 0x8362 #CJK UNIFIED IDEOGRAPH
+0xFB95 0x837F #CJK UNIFIED IDEOGRAPH
+0xFB96 0x83C7 #CJK UNIFIED IDEOGRAPH
+0xFB97 0x83F6 #CJK UNIFIED IDEOGRAPH
+0xFB98 0x8448 #CJK UNIFIED IDEOGRAPH
+0xFB99 0x84B4 #CJK UNIFIED IDEOGRAPH
+0xFB9A 0x8553 #CJK UNIFIED IDEOGRAPH
+0xFB9B 0x8559 #CJK UNIFIED IDEOGRAPH
+0xFB9C 0x856B #CJK UNIFIED IDEOGRAPH
+0xFB9D 0xFA1F #CJK COMPATIBILITY IDEOGRAPH
+0xFB9E 0x85B0 #CJK UNIFIED IDEOGRAPH
+0xFB9F 0xFA20 #CJK COMPATIBILITY IDEOGRAPH
+0xFBA0 0xFA21 #CJK COMPATIBILITY IDEOGRAPH
+0xFBA1 0x8807 #CJK UNIFIED IDEOGRAPH
+0xFBA2 0x88F5 #CJK UNIFIED IDEOGRAPH
+0xFBA3 0x8A12 #CJK UNIFIED IDEOGRAPH
+0xFBA4 0x8A37 #CJK UNIFIED IDEOGRAPH
+0xFBA5 0x8A79 #CJK UNIFIED IDEOGRAPH
+0xFBA6 0x8AA7 #CJK UNIFIED IDEOGRAPH
+0xFBA7 0x8ABE #CJK UNIFIED IDEOGRAPH
+0xFBA8 0x8ADF #CJK UNIFIED IDEOGRAPH
+0xFBA9 0xFA22 #CJK COMPATIBILITY IDEOGRAPH
+0xFBAA 0x8AF6 #CJK UNIFIED IDEOGRAPH
+0xFBAB 0x8B53 #CJK UNIFIED IDEOGRAPH
+0xFBAC 0x8B7F #CJK UNIFIED IDEOGRAPH
+0xFBAD 0x8CF0 #CJK UNIFIED IDEOGRAPH
+0xFBAE 0x8CF4 #CJK UNIFIED IDEOGRAPH
+0xFBAF 0x8D12 #CJK UNIFIED IDEOGRAPH
+0xFBB0 0x8D76 #CJK UNIFIED IDEOGRAPH
+0xFBB1 0xFA23 #CJK COMPATIBILITY IDEOGRAPH
+0xFBB2 0x8ECF #CJK UNIFIED IDEOGRAPH
+0xFBB3 0xFA24 #CJK COMPATIBILITY IDEOGRAPH
+0xFBB4 0xFA25 #CJK COMPATIBILITY IDEOGRAPH
+0xFBB5 0x9067 #CJK UNIFIED IDEOGRAPH
+0xFBB6 0x90DE #CJK UNIFIED IDEOGRAPH
+0xFBB7 0xFA26 #CJK COMPATIBILITY IDEOGRAPH
+0xFBB8 0x9115 #CJK UNIFIED IDEOGRAPH
+0xFBB9 0x9127 #CJK UNIFIED IDEOGRAPH
+0xFBBA 0x91DA #CJK UNIFIED IDEOGRAPH
+0xFBBB 0x91D7 #CJK UNIFIED IDEOGRAPH
+0xFBBC 0x91DE #CJK UNIFIED IDEOGRAPH
+0xFBBD 0x91ED #CJK UNIFIED IDEOGRAPH
+0xFBBE 0x91EE #CJK UNIFIED IDEOGRAPH
+0xFBBF 0x91E4 #CJK UNIFIED IDEOGRAPH
+0xFBC0 0x91E5 #CJK UNIFIED IDEOGRAPH
+0xFBC1 0x9206 #CJK UNIFIED IDEOGRAPH
+0xFBC2 0x9210 #CJK UNIFIED IDEOGRAPH
+0xFBC3 0x920A #CJK UNIFIED IDEOGRAPH
+0xFBC4 0x923A #CJK UNIFIED IDEOGRAPH
+0xFBC5 0x9240 #CJK UNIFIED IDEOGRAPH
+0xFBC6 0x923C #CJK UNIFIED IDEOGRAPH
+0xFBC7 0x924E #CJK UNIFIED IDEOGRAPH
+0xFBC8 0x9259 #CJK UNIFIED IDEOGRAPH
+0xFBC9 0x9251 #CJK UNIFIED IDEOGRAPH
+0xFBCA 0x9239 #CJK UNIFIED IDEOGRAPH
+0xFBCB 0x9267 #CJK UNIFIED IDEOGRAPH
+0xFBCC 0x92A7 #CJK UNIFIED IDEOGRAPH
+0xFBCD 0x9277 #CJK UNIFIED IDEOGRAPH
+0xFBCE 0x9278 #CJK UNIFIED IDEOGRAPH
+0xFBCF 0x92E7 #CJK UNIFIED IDEOGRAPH
+0xFBD0 0x92D7 #CJK UNIFIED IDEOGRAPH
+0xFBD1 0x92D9 #CJK UNIFIED IDEOGRAPH
+0xFBD2 0x92D0 #CJK UNIFIED IDEOGRAPH
+0xFBD3 0xFA27 #CJK COMPATIBILITY IDEOGRAPH
+0xFBD4 0x92D5 #CJK UNIFIED IDEOGRAPH
+0xFBD5 0x92E0 #CJK UNIFIED IDEOGRAPH
+0xFBD6 0x92D3 #CJK UNIFIED IDEOGRAPH
+0xFBD7 0x9325 #CJK UNIFIED IDEOGRAPH
+0xFBD8 0x9321 #CJK UNIFIED IDEOGRAPH
+0xFBD9 0x92FB #CJK UNIFIED IDEOGRAPH
+0xFBDA 0xFA28 #CJK COMPATIBILITY IDEOGRAPH
+0xFBDB 0x931E #CJK UNIFIED IDEOGRAPH
+0xFBDC 0x92FF #CJK UNIFIED IDEOGRAPH
+0xFBDD 0x931D #CJK UNIFIED IDEOGRAPH
+0xFBDE 0x9302 #CJK UNIFIED IDEOGRAPH
+0xFBDF 0x9370 #CJK UNIFIED IDEOGRAPH
+0xFBE0 0x9357 #CJK UNIFIED IDEOGRAPH
+0xFBE1 0x93A4 #CJK UNIFIED IDEOGRAPH
+0xFBE2 0x93C6 #CJK UNIFIED IDEOGRAPH
+0xFBE3 0x93DE #CJK UNIFIED IDEOGRAPH
+0xFBE4 0x93F8 #CJK UNIFIED IDEOGRAPH
+0xFBE5 0x9431 #CJK UNIFIED IDEOGRAPH
+0xFBE6 0x9445 #CJK UNIFIED IDEOGRAPH
+0xFBE7 0x9448 #CJK UNIFIED IDEOGRAPH
+0xFBE8 0x9592 #CJK UNIFIED IDEOGRAPH
+0xFBE9 0xF9DC #CJK COMPATIBILITY IDEOGRAPH
+0xFBEA 0xFA29 #CJK COMPATIBILITY IDEOGRAPH
+0xFBEB 0x969D #CJK UNIFIED IDEOGRAPH
+0xFBEC 0x96AF #CJK UNIFIED IDEOGRAPH
+0xFBED 0x9733 #CJK UNIFIED IDEOGRAPH
+0xFBEE 0x973B #CJK UNIFIED IDEOGRAPH
+0xFBEF 0x9743 #CJK UNIFIED IDEOGRAPH
+0xFBF0 0x974D #CJK UNIFIED IDEOGRAPH
+0xFBF1 0x974F #CJK UNIFIED IDEOGRAPH
+0xFBF2 0x9751 #CJK UNIFIED IDEOGRAPH
+0xFBF3 0x9755 #CJK UNIFIED IDEOGRAPH
+0xFBF4 0x9857 #CJK UNIFIED IDEOGRAPH
+0xFBF5 0x9865 #CJK UNIFIED IDEOGRAPH
+0xFBF6 0xFA2A #CJK COMPATIBILITY IDEOGRAPH
+0xFBF7 0xFA2B #CJK COMPATIBILITY IDEOGRAPH
+0xFBF8 0x9927 #CJK UNIFIED IDEOGRAPH
+0xFBF9 0xFA2C #CJK COMPATIBILITY IDEOGRAPH
+0xFBFA 0x999E #CJK UNIFIED IDEOGRAPH
+0xFBFB 0x9A4E #CJK UNIFIED IDEOGRAPH
+0xFBFC 0x9AD9 #CJK UNIFIED IDEOGRAPH
+0xFC40 0x9ADC #CJK UNIFIED IDEOGRAPH
+0xFC41 0x9B75 #CJK UNIFIED IDEOGRAPH
+0xFC42 0x9B72 #CJK UNIFIED IDEOGRAPH
+0xFC43 0x9B8F #CJK UNIFIED IDEOGRAPH
+0xFC44 0x9BB1 #CJK UNIFIED IDEOGRAPH
+0xFC45 0x9BBB #CJK UNIFIED IDEOGRAPH
+0xFC46 0x9C00 #CJK UNIFIED IDEOGRAPH
+0xFC47 0x9D70 #CJK UNIFIED IDEOGRAPH
+0xFC48 0x9D6B #CJK UNIFIED IDEOGRAPH
+0xFC49 0xFA2D #CJK COMPATIBILITY IDEOGRAPH
+0xFC4A 0x9E19 #CJK UNIFIED IDEOGRAPH
+0xFC4B 0x9ED1 #CJK UNIFIED IDEOGRAPH
--- /dev/null
+//#
+//#,Name:, cp932 to Unicode table
+//#,Unicode, version: 2.0
+//#,Table, version: 2.01
+//#,Table, format: Format A
+//#,Date:, 04/15/98
+//#
+//#,Contact:, Shawn.Steele@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
+//#
+struct conv_pair{
+ wchar_t cp932;
+ wchar_t unicode;
+};
+struct conv_pair cp932_unicode[]={
+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,0x0000,//#UNDEFINED,
+0x81,0x0000,//#DBCS, LEAD BYTE
+0x82,0x0000,//#DBCS, LEAD BYTE
+0x83,0x0000,//#DBCS, LEAD BYTE
+0x84,0x0000,//#DBCS, LEAD BYTE
+0x85,0x0000,//#DBCS, LEAD BYTE
+0x86,0x0000,//#DBCS, LEAD BYTE
+0x87,0x0000,//#DBCS, LEAD BYTE
+0x88,0x0000,//#DBCS, LEAD BYTE
+0x89,0x0000,//#DBCS, LEAD BYTE
+0x8A,0x0000,//#DBCS, LEAD BYTE
+0x8B,0x0000,//#DBCS, LEAD BYTE
+0x8C,0x0000,//#DBCS, LEAD BYTE
+0x8D,0x0000,//#DBCS, LEAD BYTE
+0x8E,0x0000,//#DBCS, LEAD BYTE
+0x8F,0x0000,//#DBCS, LEAD BYTE
+0x90,0x0000,//#DBCS, LEAD BYTE
+0x91,0x0000,//#DBCS, LEAD BYTE
+0x92,0x0000,//#DBCS, LEAD BYTE
+0x93,0x0000,//#DBCS, LEAD BYTE
+0x94,0x0000,//#DBCS, LEAD BYTE
+0x95,0x0000,//#DBCS, LEAD BYTE
+0x96,0x0000,//#DBCS, LEAD BYTE
+0x97,0x0000,//#DBCS, LEAD BYTE
+0x98,0x0000,//#DBCS, LEAD BYTE
+0x99,0x0000,//#DBCS, LEAD BYTE
+0x9A,0x0000,//#DBCS, LEAD BYTE
+0x9B,0x0000,//#DBCS, LEAD BYTE
+0x9C,0x0000,//#DBCS, LEAD BYTE
+0x9D,0x0000,//#DBCS, LEAD BYTE
+0x9E,0x0000,//#DBCS, LEAD BYTE
+0x9F,0x0000,//#DBCS, LEAD BYTE
+0xA0,0x0000,//#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,0x0000,//#DBCS, LEAD BYTE
+0xE1,0x0000,//#DBCS, LEAD BYTE
+0xE2,0x0000,//#DBCS, LEAD BYTE
+0xE3,0x0000,//#DBCS, LEAD BYTE
+0xE4,0x0000,//#DBCS, LEAD BYTE
+0xE5,0x0000,//#DBCS, LEAD BYTE
+0xE6,0x0000,//#DBCS, LEAD BYTE
+0xE7,0x0000,//#DBCS, LEAD BYTE
+0xE8,0x0000,//#DBCS, LEAD BYTE
+0xE9,0x0000,//#DBCS, LEAD BYTE
+0xEA,0x0000,//#DBCS, LEAD BYTE
+0xEB,0x0000,//#DBCS, LEAD BYTE
+0xEC,0x0000,//#DBCS, LEAD BYTE
+0xED,0x0000,//#DBCS, LEAD BYTE
+0xEE,0x0000,//#DBCS, LEAD BYTE
+0xEF,0x0000,//#DBCS, LEAD BYTE
+0xF0,0x0000,//#DBCS, LEAD BYTE
+0xF1,0x0000,//#DBCS, LEAD BYTE
+0xF2,0x0000,//#DBCS, LEAD BYTE
+0xF3,0x0000,//#DBCS, LEAD BYTE
+0xF4,0x0000,//#DBCS, LEAD BYTE
+0xF5,0x0000,//#DBCS, LEAD BYTE
+0xF6,0x0000,//#DBCS, LEAD BYTE
+0xF7,0x0000,//#DBCS, LEAD BYTE
+0xF8,0x0000,//#DBCS, LEAD BYTE
+0xF9,0x0000,//#DBCS, LEAD BYTE
+0xFA,0x0000,//#DBCS, LEAD BYTE
+0xFB,0x0000,//#DBCS, LEAD BYTE
+0xFC,0x0000,//#DBCS, LEAD BYTE
+0xFD,0x0000,//#UNDEFINED,
+0xFE,0x0000,//#UNDEFINED,
+0xFF,0x0000,//#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
+0xE47E,0x8264, //#CJK UNIFIED IDEOGRAPH
+0xE480,0x8262, //#CJK UNIFIED IDEOGRAPH
+0xE481,0x8268, //#CJK UNIFIED IDEOGRAPH
+0xE482,0x826A, //#CJK UNIFIED IDEOGRAPH
+0xE483,0x826B, //#CJK UNIFIED IDEOGRAPH
+0xE484,0x822E, //#CJK UNIFIED IDEOGRAPH
+0xE485,0x8271, //#CJK UNIFIED IDEOGRAPH
+0xE486,0x8277, //#CJK UNIFIED IDEOGRAPH
+0xE487,0x8278, //#CJK UNIFIED IDEOGRAPH
+0xE488,0x827E, //#CJK UNIFIED IDEOGRAPH
+0xE489,0x828D, //#CJK UNIFIED IDEOGRAPH
+0xE48A,0x8292, //#CJK UNIFIED IDEOGRAPH
+0xE48B,0x82AB, //#CJK UNIFIED IDEOGRAPH
+0xE48C,0x829F, //#CJK UNIFIED IDEOGRAPH
+0xE48D,0x82BB, //#CJK UNIFIED IDEOGRAPH
+0xE48E,0x82AC, //#CJK UNIFIED IDEOGRAPH
+0xE48F,0x82E1, //#CJK UNIFIED IDEOGRAPH
+0xE490,0x82E3, //#CJK UNIFIED IDEOGRAPH
+0xE491,0x82DF, //#CJK UNIFIED IDEOGRAPH
+0xE492,0x82D2, //#CJK UNIFIED IDEOGRAPH
+0xE493,0x82F4, //#CJK UNIFIED IDEOGRAPH
+0xE494,0x82F3, //#CJK UNIFIED IDEOGRAPH
+0xE495,0x82FA, //#CJK UNIFIED IDEOGRAPH
+0xE496,0x8393, //#CJK UNIFIED IDEOGRAPH
+0xE497,0x8303, //#CJK UNIFIED IDEOGRAPH
+0xE498,0x82FB, //#CJK UNIFIED IDEOGRAPH
+0xE499,0x82F9, //#CJK UNIFIED IDEOGRAPH
+0xE49A,0x82DE, //#CJK UNIFIED IDEOGRAPH
+0xE49B,0x8306, //#CJK UNIFIED IDEOGRAPH
+0xE49C,0x82DC, //#CJK UNIFIED IDEOGRAPH
+0xE49D,0x8309, //#CJK UNIFIED IDEOGRAPH
+0xE49E,0x82D9, //#CJK UNIFIED IDEOGRAPH
+0xE49F,0x8335, //#CJK UNIFIED IDEOGRAPH
+0xE4A0,0x8334, //#CJK UNIFIED IDEOGRAPH
+0xE4A1,0x8316, //#CJK UNIFIED IDEOGRAPH
+0xE4A2,0x8332, //#CJK UNIFIED IDEOGRAPH
+0xE4A3,0x8331, //#CJK UNIFIED IDEOGRAPH
+0xE4A4,0x8340, //#CJK UNIFIED IDEOGRAPH
+0xE4A5,0x8339, //#CJK UNIFIED IDEOGRAPH
+0xE4A6,0x8350, //#CJK UNIFIED IDEOGRAPH
+0xE4A7,0x8345, //#CJK UNIFIED IDEOGRAPH
+0xE4A8,0x832F, //#CJK UNIFIED IDEOGRAPH
+0xE4A9,0x832B, //#CJK UNIFIED IDEOGRAPH
+0xE4AA,0x8317, //#CJK UNIFIED IDEOGRAPH
+0xE4AB,0x8318, //#CJK UNIFIED IDEOGRAPH
+0xE4AC,0x8385, //#CJK UNIFIED IDEOGRAPH
+0xE4AD,0x839A, //#CJK UNIFIED IDEOGRAPH
+0xE4AE,0x83AA, //#CJK UNIFIED IDEOGRAPH
+0xE4AF,0x839F, //#CJK UNIFIED IDEOGRAPH
+0xE4B0,0x83A2, //#CJK UNIFIED IDEOGRAPH
+0xE4B1,0x8396, //#CJK UNIFIED IDEOGRAPH
+0xE4B2,0x8323, //#CJK UNIFIED IDEOGRAPH
+0xE4B3,0x838E, //#CJK UNIFIED IDEOGRAPH
+0xE4B4,0x8387, //#CJK UNIFIED IDEOGRAPH
+0xE4B5,0x838A, //#CJK UNIFIED IDEOGRAPH
+0xE4B6,0x837C, //#CJK UNIFIED IDEOGRAPH
+0xE4B7,0x83B5, //#CJK UNIFIED IDEOGRAPH
+0xE4B8,0x8373, //#CJK UNIFIED IDEOGRAPH
+0xE4B9,0x8375, //#CJK UNIFIED IDEOGRAPH
+0xE4BA,0x83A0, //#CJK UNIFIED IDEOGRAPH
+0xE4BB,0x8389, //#CJK UNIFIED IDEOGRAPH
+0xE4BC,0x83A8, //#CJK UNIFIED IDEOGRAPH
+0xE4BD,0x83F4, //#CJK UNIFIED IDEOGRAPH
+0xE4BE,0x8413, //#CJK UNIFIED IDEOGRAPH
+0xE4BF,0x83EB, //#CJK UNIFIED IDEOGRAPH
+0xE4C0,0x83CE, //#CJK UNIFIED IDEOGRAPH
+0xE4C1,0x83FD, //#CJK UNIFIED IDEOGRAPH
+0xE4C2,0x8403, //#CJK UNIFIED IDEOGRAPH
+0xE4C3,0x83D8, //#CJK UNIFIED IDEOGRAPH
+0xE4C4,0x840B, //#CJK UNIFIED IDEOGRAPH
+0xE4C5,0x83C1, //#CJK UNIFIED IDEOGRAPH
+0xE4C6,0x83F7, //#CJK UNIFIED IDEOGRAPH
+0xE4C7,0x8407, //#CJK UNIFIED IDEOGRAPH
+0xE4C8,0x83E0, //#CJK UNIFIED IDEOGRAPH
+0xE4C9,0x83F2, //#CJK UNIFIED IDEOGRAPH
+0xE4CA,0x840D, //#CJK UNIFIED IDEOGRAPH
+0xE4CB,0x8422, //#CJK UNIFIED IDEOGRAPH
+0xE4CC,0x8420, //#CJK UNIFIED IDEOGRAPH
+0xE4CD,0x83BD, //#CJK UNIFIED IDEOGRAPH
+0xE4CE,0x8438, //#CJK UNIFIED IDEOGRAPH
+0xE4CF,0x8506, //#CJK UNIFIED IDEOGRAPH
+0xE4D0,0x83FB, //#CJK UNIFIED IDEOGRAPH
+0xE4D1,0x846D, //#CJK UNIFIED IDEOGRAPH
+0xE4D2,0x842A, //#CJK UNIFIED IDEOGRAPH
+0xE4D3,0x843C, //#CJK UNIFIED IDEOGRAPH
+0xE4D4,0x855A, //#CJK UNIFIED IDEOGRAPH
+0xE4D5,0x8484, //#CJK UNIFIED IDEOGRAPH
+0xE4D6,0x8477, //#CJK UNIFIED IDEOGRAPH
+0xE4D7,0x846B, //#CJK UNIFIED IDEOGRAPH
+0xE4D8,0x84AD, //#CJK UNIFIED IDEOGRAPH
+0xE4D9,0x846E, //#CJK UNIFIED IDEOGRAPH
+0xE4DA,0x8482, //#CJK UNIFIED IDEOGRAPH
+0xE4DB,0x8469, //#CJK UNIFIED IDEOGRAPH
+0xE4DC,0x8446, //#CJK UNIFIED IDEOGRAPH
+0xE4DD,0x842C, //#CJK UNIFIED IDEOGRAPH
+0xE4DE,0x846F, //#CJK UNIFIED IDEOGRAPH
+0xE4DF,0x8479, //#CJK UNIFIED IDEOGRAPH
+0xE4E0,0x8435, //#CJK UNIFIED IDEOGRAPH
+0xE4E1,0x84CA, //#CJK UNIFIED IDEOGRAPH
+0xE4E2,0x8462, //#CJK UNIFIED IDEOGRAPH
+0xE4E3,0x84B9, //#CJK UNIFIED IDEOGRAPH
+0xE4E4,0x84BF, //#CJK UNIFIED IDEOGRAPH
+0xE4E5,0x849F, //#CJK UNIFIED IDEOGRAPH
+0xE4E6,0x84D9, //#CJK UNIFIED IDEOGRAPH
+0xE4E7,0x84CD, //#CJK UNIFIED IDEOGRAPH
+0xE4E8,0x84BB, //#CJK UNIFIED IDEOGRAPH
+0xE4E9,0x84DA, //#CJK UNIFIED IDEOGRAPH
+0xE4EA,0x84D0, //#CJK UNIFIED IDEOGRAPH
+0xE4EB,0x84C1, //#CJK UNIFIED IDEOGRAPH
+0xE4EC,0x84C6, //#CJK UNIFIED IDEOGRAPH
+0xE4ED,0x84D6, //#CJK UNIFIED IDEOGRAPH
+0xE4EE,0x84A1, //#CJK UNIFIED IDEOGRAPH
+0xE4EF,0x8521, //#CJK UNIFIED IDEOGRAPH
+0xE4F0,0x84FF, //#CJK UNIFIED IDEOGRAPH
+0xE4F1,0x84F4, //#CJK UNIFIED IDEOGRAPH
+0xE4F2,0x8517, //#CJK UNIFIED IDEOGRAPH
+0xE4F3,0x8518, //#CJK UNIFIED IDEOGRAPH
+0xE4F4,0x852C, //#CJK UNIFIED IDEOGRAPH
+0xE4F5,0x851F, //#CJK UNIFIED IDEOGRAPH
+0xE4F6,0x8515, //#CJK UNIFIED IDEOGRAPH
+0xE4F7,0x8514, //#CJK UNIFIED IDEOGRAPH
+0xE4F8,0x84FC, //#CJK UNIFIED IDEOGRAPH
+0xE4F9,0x8540, //#CJK UNIFIED IDEOGRAPH
+0xE4FA,0x8563, //#CJK UNIFIED IDEOGRAPH
+0xE4FB,0x8558, //#CJK UNIFIED IDEOGRAPH
+0xE4FC,0x8548, //#CJK UNIFIED IDEOGRAPH
+0xE540,0x8541, //#CJK UNIFIED IDEOGRAPH
+0xE541,0x8602, //#CJK UNIFIED IDEOGRAPH
+0xE542,0x854B, //#CJK UNIFIED IDEOGRAPH
+0xE543,0x8555, //#CJK UNIFIED IDEOGRAPH
+0xE544,0x8580, //#CJK UNIFIED IDEOGRAPH
+0xE545,0x85A4, //#CJK UNIFIED IDEOGRAPH
+0xE546,0x8588, //#CJK UNIFIED IDEOGRAPH
+0xE547,0x8591, //#CJK UNIFIED IDEOGRAPH
+0xE548,0x858A, //#CJK UNIFIED IDEOGRAPH
+0xE549,0x85A8, //#CJK UNIFIED IDEOGRAPH
+0xE54A,0x856D, //#CJK UNIFIED IDEOGRAPH
+0xE54B,0x8594, //#CJK UNIFIED IDEOGRAPH
+0xE54C,0x859B, //#CJK UNIFIED IDEOGRAPH
+0xE54D,0x85EA, //#CJK UNIFIED IDEOGRAPH
+0xE54E,0x8587, //#CJK UNIFIED IDEOGRAPH
+0xE54F,0x859C, //#CJK UNIFIED IDEOGRAPH
+0xE550,0x8577, //#CJK UNIFIED IDEOGRAPH
+0xE551,0x857E, //#CJK UNIFIED IDEOGRAPH
+0xE552,0x8590, //#CJK UNIFIED IDEOGRAPH
+0xE553,0x85C9, //#CJK UNIFIED IDEOGRAPH
+0xE554,0x85BA, //#CJK UNIFIED IDEOGRAPH
+0xE555,0x85CF, //#CJK UNIFIED IDEOGRAPH
+0xE556,0x85B9, //#CJK UNIFIED IDEOGRAPH
+0xE557,0x85D0, //#CJK UNIFIED IDEOGRAPH
+0xE558,0x85D5, //#CJK UNIFIED IDEOGRAPH
+0xE559,0x85DD, //#CJK UNIFIED IDEOGRAPH
+0xE55A,0x85E5, //#CJK UNIFIED IDEOGRAPH
+0xE55B,0x85DC, //#CJK UNIFIED IDEOGRAPH
+0xE55C,0x85F9, //#CJK UNIFIED IDEOGRAPH
+0xE55D,0x860A, //#CJK UNIFIED IDEOGRAPH
+0xE55E,0x8613, //#CJK UNIFIED IDEOGRAPH
+0xE55F,0x860B, //#CJK UNIFIED IDEOGRAPH
+0xE560,0x85FE, //#CJK UNIFIED IDEOGRAPH
+0xE561,0x85FA, //#CJK UNIFIED IDEOGRAPH
+0xE562,0x8606, //#CJK UNIFIED IDEOGRAPH
+0xE563,0x8622, //#CJK UNIFIED IDEOGRAPH
+0xE564,0x861A, //#CJK UNIFIED IDEOGRAPH
+0xE565,0x8630, //#CJK UNIFIED IDEOGRAPH
+0xE566,0x863F, //#CJK UNIFIED IDEOGRAPH
+0xE567,0x864D, //#CJK UNIFIED IDEOGRAPH
+0xE568,0x4E55, //#CJK UNIFIED IDEOGRAPH
+0xE569,0x8654, //#CJK UNIFIED IDEOGRAPH
+0xE56A,0x865F, //#CJK UNIFIED IDEOGRAPH
+0xE56B,0x8667, //#CJK UNIFIED IDEOGRAPH
+0xE56C,0x8671, //#CJK UNIFIED IDEOGRAPH
+0xE56D,0x8693, //#CJK UNIFIED IDEOGRAPH
+0xE56E,0x86A3, //#CJK UNIFIED IDEOGRAPH
+0xE56F,0x86A9, //#CJK UNIFIED IDEOGRAPH
+0xE570,0x86AA, //#CJK UNIFIED IDEOGRAPH
+0xE571,0x868B, //#CJK UNIFIED IDEOGRAPH
+0xE572,0x868C, //#CJK UNIFIED IDEOGRAPH
+0xE573,0x86B6, //#CJK UNIFIED IDEOGRAPH
+0xE574,0x86AF, //#CJK UNIFIED IDEOGRAPH
+0xE575,0x86C4, //#CJK UNIFIED IDEOGRAPH
+0xE576,0x86C6, //#CJK UNIFIED IDEOGRAPH
+0xE577,0x86B0, //#CJK UNIFIED IDEOGRAPH
+0xE578,0x86C9, //#CJK UNIFIED IDEOGRAPH
+0xE579,0x8823, //#CJK UNIFIED IDEOGRAPH
+0xE57A,0x86AB, //#CJK UNIFIED IDEOGRAPH
+0xE57B,0x86D4, //#CJK UNIFIED IDEOGRAPH
+0xE57C,0x86DE, //#CJK UNIFIED IDEOGRAPH
+0xE57D,0x86E9, //#CJK UNIFIED IDEOGRAPH
+0xE57E,0x86EC, //#CJK UNIFIED IDEOGRAPH
+0xE580,0x86DF, //#CJK UNIFIED IDEOGRAPH
+0xE581,0x86DB, //#CJK UNIFIED IDEOGRAPH
+0xE582,0x86EF, //#CJK UNIFIED IDEOGRAPH
+0xE583,0x8712, //#CJK UNIFIED IDEOGRAPH
+0xE584,0x8706, //#CJK UNIFIED IDEOGRAPH
+0xE585,0x8708, //#CJK UNIFIED IDEOGRAPH
+0xE586,0x8700, //#CJK UNIFIED IDEOGRAPH
+0xE587,0x8703, //#CJK UNIFIED IDEOGRAPH
+0xE588,0x86FB, //#CJK UNIFIED IDEOGRAPH
+0xE589,0x8711, //#CJK UNIFIED IDEOGRAPH
+0xE58A,0x8709, //#CJK UNIFIED IDEOGRAPH
+0xE58B,0x870D, //#CJK UNIFIED IDEOGRAPH
+0xE58C,0x86F9, //#CJK UNIFIED IDEOGRAPH
+0xE58D,0x870A, //#CJK UNIFIED IDEOGRAPH
+0xE58E,0x8734, //#CJK UNIFIED IDEOGRAPH
+0xE58F,0x873F, //#CJK UNIFIED IDEOGRAPH
+0xE590,0x8737, //#CJK UNIFIED IDEOGRAPH
+0xE591,0x873B, //#CJK UNIFIED IDEOGRAPH
+0xE592,0x8725, //#CJK UNIFIED IDEOGRAPH
+0xE593,0x8729, //#CJK UNIFIED IDEOGRAPH
+0xE594,0x871A, //#CJK UNIFIED IDEOGRAPH
+0xE595,0x8760, //#CJK UNIFIED IDEOGRAPH
+0xE596,0x875F, //#CJK UNIFIED IDEOGRAPH
+0xE597,0x8778, //#CJK UNIFIED IDEOGRAPH
+0xE598,0x874C, //#CJK UNIFIED IDEOGRAPH
+0xE599,0x874E, //#CJK UNIFIED IDEOGRAPH
+0xE59A,0x8774, //#CJK UNIFIED IDEOGRAPH
+0xE59B,0x8757, //#CJK UNIFIED IDEOGRAPH
+0xE59C,0x8768, //#CJK UNIFIED IDEOGRAPH
+0xE59D,0x876E, //#CJK UNIFIED IDEOGRAPH
+0xE59E,0x8759, //#CJK UNIFIED IDEOGRAPH
+0xE59F,0x8753, //#CJK UNIFIED IDEOGRAPH
+0xE5A0,0x8763, //#CJK UNIFIED IDEOGRAPH
+0xE5A1,0x876A, //#CJK UNIFIED IDEOGRAPH
+0xE5A2,0x8805, //#CJK UNIFIED IDEOGRAPH
+0xE5A3,0x87A2, //#CJK UNIFIED IDEOGRAPH
+0xE5A4,0x879F, //#CJK UNIFIED IDEOGRAPH
+0xE5A5,0x8782, //#CJK UNIFIED IDEOGRAPH
+0xE5A6,0x87AF, //#CJK UNIFIED IDEOGRAPH
+0xE5A7,0x87CB, //#CJK UNIFIED IDEOGRAPH
+0xE5A8,0x87BD, //#CJK UNIFIED IDEOGRAPH
+0xE5A9,0x87C0, //#CJK UNIFIED IDEOGRAPH
+0xE5AA,0x87D0, //#CJK UNIFIED IDEOGRAPH
+0xE5AB,0x96D6, //#CJK UNIFIED IDEOGRAPH
+0xE5AC,0x87AB, //#CJK UNIFIED IDEOGRAPH
+0xE5AD,0x87C4, //#CJK UNIFIED IDEOGRAPH
+0xE5AE,0x87B3, //#CJK UNIFIED IDEOGRAPH
+0xE5AF,0x87C7, //#CJK UNIFIED IDEOGRAPH
+0xE5B0,0x87C6, //#CJK UNIFIED IDEOGRAPH
+0xE5B1,0x87BB, //#CJK UNIFIED IDEOGRAPH
+0xE5B2,0x87EF, //#CJK UNIFIED IDEOGRAPH
+0xE5B3,0x87F2, //#CJK UNIFIED IDEOGRAPH
+0xE5B4,0x87E0, //#CJK UNIFIED IDEOGRAPH
+0xE5B5,0x880F, //#CJK UNIFIED IDEOGRAPH
+0xE5B6,0x880D, //#CJK UNIFIED IDEOGRAPH
+0xE5B7,0x87FE, //#CJK UNIFIED IDEOGRAPH
+0xE5B8,0x87F6, //#CJK UNIFIED IDEOGRAPH
+0xE5B9,0x87F7, //#CJK UNIFIED IDEOGRAPH
+0xE5BA,0x880E, //#CJK UNIFIED IDEOGRAPH
+0xE5BB,0x87D2, //#CJK UNIFIED IDEOGRAPH
+0xE5BC,0x8811, //#CJK UNIFIED IDEOGRAPH
+0xE5BD,0x8816, //#CJK UNIFIED IDEOGRAPH
+0xE5BE,0x8815, //#CJK UNIFIED IDEOGRAPH
+0xE5BF,0x8822, //#CJK UNIFIED IDEOGRAPH
+0xE5C0,0x8821, //#CJK UNIFIED IDEOGRAPH
+0xE5C1,0x8831, //#CJK UNIFIED IDEOGRAPH
+0xE5C2,0x8836, //#CJK UNIFIED IDEOGRAPH
+0xE5C3,0x8839, //#CJK UNIFIED IDEOGRAPH
+0xE5C4,0x8827, //#CJK UNIFIED IDEOGRAPH
+0xE5C5,0x883B, //#CJK UNIFIED IDEOGRAPH
+0xE5C6,0x8844, //#CJK UNIFIED IDEOGRAPH
+0xE5C7,0x8842, //#CJK UNIFIED IDEOGRAPH
+0xE5C8,0x8852, //#CJK UNIFIED IDEOGRAPH
+0xE5C9,0x8859, //#CJK UNIFIED IDEOGRAPH
+0xE5CA,0x885E, //#CJK UNIFIED IDEOGRAPH
+0xE5CB,0x8862, //#CJK UNIFIED IDEOGRAPH
+0xE5CC,0x886B, //#CJK UNIFIED IDEOGRAPH
+0xE5CD,0x8881, //#CJK UNIFIED IDEOGRAPH
+0xE5CE,0x887E, //#CJK UNIFIED IDEOGRAPH
+0xE5CF,0x889E, //#CJK UNIFIED IDEOGRAPH
+0xE5D0,0x8875, //#CJK UNIFIED IDEOGRAPH
+0xE5D1,0x887D, //#CJK UNIFIED IDEOGRAPH
+0xE5D2,0x88B5, //#CJK UNIFIED IDEOGRAPH
+0xE5D3,0x8872, //#CJK UNIFIED IDEOGRAPH
+0xE5D4,0x8882, //#CJK UNIFIED IDEOGRAPH
+0xE5D5,0x8897, //#CJK UNIFIED IDEOGRAPH
+0xE5D6,0x8892, //#CJK UNIFIED IDEOGRAPH
+0xE5D7,0x88AE, //#CJK UNIFIED IDEOGRAPH
+0xE5D8,0x8899, //#CJK UNIFIED IDEOGRAPH
+0xE5D9,0x88A2, //#CJK UNIFIED IDEOGRAPH
+0xE5DA,0x888D, //#CJK UNIFIED IDEOGRAPH
+0xE5DB,0x88A4, //#CJK UNIFIED IDEOGRAPH
+0xE5DC,0x88B0, //#CJK UNIFIED IDEOGRAPH
+0xE5DD,0x88BF, //#CJK UNIFIED IDEOGRAPH
+0xE5DE,0x88B1, //#CJK UNIFIED IDEOGRAPH
+0xE5DF,0x88C3, //#CJK UNIFIED IDEOGRAPH
+0xE5E0,0x88C4, //#CJK UNIFIED IDEOGRAPH
+0xE5E1,0x88D4, //#CJK UNIFIED IDEOGRAPH
+0xE5E2,0x88D8, //#CJK UNIFIED IDEOGRAPH
+0xE5E3,0x88D9, //#CJK UNIFIED IDEOGRAPH
+0xE5E4,0x88DD, //#CJK UNIFIED IDEOGRAPH
+0xE5E5,0x88F9, //#CJK UNIFIED IDEOGRAPH
+0xE5E6,0x8902, //#CJK UNIFIED IDEOGRAPH
+0xE5E7,0x88FC, //#CJK UNIFIED IDEOGRAPH
+0xE5E8,0x88F4, //#CJK UNIFIED IDEOGRAPH
+0xE5E9,0x88E8, //#CJK UNIFIED IDEOGRAPH
+0xE5EA,0x88F2, //#CJK UNIFIED IDEOGRAPH
+0xE5EB,0x8904, //#CJK UNIFIED IDEOGRAPH
+0xE5EC,0x890C, //#CJK UNIFIED IDEOGRAPH
+0xE5ED,0x890A, //#CJK UNIFIED IDEOGRAPH
+0xE5EE,0x8913, //#CJK UNIFIED IDEOGRAPH
+0xE5EF,0x8943, //#CJK UNIFIED IDEOGRAPH
+0xE5F0,0x891E, //#CJK UNIFIED IDEOGRAPH
+0xE5F1,0x8925, //#CJK UNIFIED IDEOGRAPH
+0xE5F2,0x892A, //#CJK UNIFIED IDEOGRAPH
+0xE5F3,0x892B, //#CJK UNIFIED IDEOGRAPH
+0xE5F4,0x8941, //#CJK UNIFIED IDEOGRAPH
+0xE5F5,0x8944, //#CJK UNIFIED IDEOGRAPH
+0xE5F6,0x893B, //#CJK UNIFIED IDEOGRAPH
+0xE5F7,0x8936, //#CJK UNIFIED IDEOGRAPH
+0xE5F8,0x8938, //#CJK UNIFIED IDEOGRAPH
+0xE5F9,0x894C, //#CJK UNIFIED IDEOGRAPH
+0xE5FA,0x891D, //#CJK UNIFIED IDEOGRAPH
+0xE5FB,0x8960, //#CJK UNIFIED IDEOGRAPH
+0xE5FC,0x895E, //#CJK UNIFIED IDEOGRAPH
+0xE640,0x8966, //#CJK UNIFIED IDEOGRAPH
+0xE641,0x8964, //#CJK UNIFIED IDEOGRAPH
+0xE642,0x896D, //#CJK UNIFIED IDEOGRAPH
+0xE643,0x896A, //#CJK UNIFIED IDEOGRAPH
+0xE644,0x896F, //#CJK UNIFIED IDEOGRAPH
+0xE645,0x8974, //#CJK UNIFIED IDEOGRAPH
+0xE646,0x8977, //#CJK UNIFIED IDEOGRAPH
+0xE647,0x897E, //#CJK UNIFIED IDEOGRAPH
+0xE648,0x8983, //#CJK UNIFIED IDEOGRAPH
+0xE649,0x8988, //#CJK UNIFIED IDEOGRAPH
+0xE64A,0x898A, //#CJK UNIFIED IDEOGRAPH
+0xE64B,0x8993, //#CJK UNIFIED IDEOGRAPH
+0xE64C,0x8998, //#CJK UNIFIED IDEOGRAPH
+0xE64D,0x89A1, //#CJK UNIFIED IDEOGRAPH
+0xE64E,0x89A9, //#CJK UNIFIED IDEOGRAPH
+0xE64F,0x89A6, //#CJK UNIFIED IDEOGRAPH
+0xE650,0x89AC, //#CJK UNIFIED IDEOGRAPH
+0xE651,0x89AF, //#CJK UNIFIED IDEOGRAPH
+0xE652,0x89B2, //#CJK UNIFIED IDEOGRAPH
+0xE653,0x89BA, //#CJK UNIFIED IDEOGRAPH
+0xE654,0x89BD, //#CJK UNIFIED IDEOGRAPH
+0xE655,0x89BF, //#CJK UNIFIED IDEOGRAPH
+0xE656,0x89C0, //#CJK UNIFIED IDEOGRAPH
+0xE657,0x89DA, //#CJK UNIFIED IDEOGRAPH
+0xE658,0x89DC, //#CJK UNIFIED IDEOGRAPH
+0xE659,0x89DD, //#CJK UNIFIED IDEOGRAPH
+0xE65A,0x89E7, //#CJK UNIFIED IDEOGRAPH
+0xE65B,0x89F4, //#CJK UNIFIED IDEOGRAPH
+0xE65C,0x89F8, //#CJK UNIFIED IDEOGRAPH
+0xE65D,0x8A03, //#CJK UNIFIED IDEOGRAPH
+0xE65E,0x8A16, //#CJK UNIFIED IDEOGRAPH
+0xE65F,0x8A10, //#CJK UNIFIED IDEOGRAPH
+0xE660,0x8A0C, //#CJK UNIFIED IDEOGRAPH
+0xE661,0x8A1B, //#CJK UNIFIED IDEOGRAPH
+0xE662,0x8A1D, //#CJK UNIFIED IDEOGRAPH
+0xE663,0x8A25, //#CJK UNIFIED IDEOGRAPH
+0xE664,0x8A36, //#CJK UNIFIED IDEOGRAPH
+0xE665,0x8A41, //#CJK UNIFIED IDEOGRAPH
+0xE666,0x8A5B, //#CJK UNIFIED IDEOGRAPH
+0xE667,0x8A52, //#CJK UNIFIED IDEOGRAPH
+0xE668,0x8A46, //#CJK UNIFIED IDEOGRAPH
+0xE669,0x8A48, //#CJK UNIFIED IDEOGRAPH
+0xE66A,0x8A7C, //#CJK UNIFIED IDEOGRAPH
+0xE66B,0x8A6D, //#CJK UNIFIED IDEOGRAPH
+0xE66C,0x8A6C, //#CJK UNIFIED IDEOGRAPH
+0xE66D,0x8A62, //#CJK UNIFIED IDEOGRAPH
+0xE66E,0x8A85, //#CJK UNIFIED IDEOGRAPH
+0xE66F,0x8A82, //#CJK UNIFIED IDEOGRAPH
+0xE670,0x8A84, //#CJK UNIFIED IDEOGRAPH
+0xE671,0x8AA8, //#CJK UNIFIED IDEOGRAPH
+0xE672,0x8AA1, //#CJK UNIFIED IDEOGRAPH
+0xE673,0x8A91, //#CJK UNIFIED IDEOGRAPH
+0xE674,0x8AA5, //#CJK UNIFIED IDEOGRAPH
+0xE675,0x8AA6, //#CJK UNIFIED IDEOGRAPH
+0xE676,0x8A9A, //#CJK UNIFIED IDEOGRAPH
+0xE677,0x8AA3, //#CJK UNIFIED IDEOGRAPH
+0xE678,0x8AC4, //#CJK UNIFIED IDEOGRAPH
+0xE679,0x8ACD, //#CJK UNIFIED IDEOGRAPH
+0xE67A,0x8AC2, //#CJK UNIFIED IDEOGRAPH
+0xE67B,0x8ADA, //#CJK UNIFIED IDEOGRAPH
+0xE67C,0x8AEB, //#CJK UNIFIED IDEOGRAPH
+0xE67D,0x8AF3, //#CJK UNIFIED IDEOGRAPH
+0xE67E,0x8AE7, //#CJK UNIFIED IDEOGRAPH
+0xE680,0x8AE4, //#CJK UNIFIED IDEOGRAPH
+0xE681,0x8AF1, //#CJK UNIFIED IDEOGRAPH
+0xE682,0x8B14, //#CJK UNIFIED IDEOGRAPH
+0xE683,0x8AE0, //#CJK UNIFIED IDEOGRAPH
+0xE684,0x8AE2, //#CJK UNIFIED IDEOGRAPH
+0xE685,0x8AF7, //#CJK UNIFIED IDEOGRAPH
+0xE686,0x8ADE, //#CJK UNIFIED IDEOGRAPH
+0xE687,0x8ADB, //#CJK UNIFIED IDEOGRAPH
+0xE688,0x8B0C, //#CJK UNIFIED IDEOGRAPH
+0xE689,0x8B07, //#CJK UNIFIED IDEOGRAPH
+0xE68A,0x8B1A, //#CJK UNIFIED IDEOGRAPH
+0xE68B,0x8AE1, //#CJK UNIFIED IDEOGRAPH
+0xE68C,0x8B16, //#CJK UNIFIED IDEOGRAPH
+0xE68D,0x8B10, //#CJK UNIFIED IDEOGRAPH
+0xE68E,0x8B17, //#CJK UNIFIED IDEOGRAPH
+0xE68F,0x8B20, //#CJK UNIFIED IDEOGRAPH
+0xE690,0x8B33, //#CJK UNIFIED IDEOGRAPH
+0xE691,0x97AB, //#CJK UNIFIED IDEOGRAPH
+0xE692,0x8B26, //#CJK UNIFIED IDEOGRAPH
+0xE693,0x8B2B, //#CJK UNIFIED IDEOGRAPH
+0xE694,0x8B3E, //#CJK UNIFIED IDEOGRAPH
+0xE695,0x8B28, //#CJK UNIFIED IDEOGRAPH
+0xE696,0x8B41, //#CJK UNIFIED IDEOGRAPH
+0xE697,0x8B4C, //#CJK UNIFIED IDEOGRAPH
+0xE698,0x8B4F, //#CJK UNIFIED IDEOGRAPH
+0xE699,0x8B4E, //#CJK UNIFIED IDEOGRAPH
+0xE69A,0x8B49, //#CJK UNIFIED IDEOGRAPH
+0xE69B,0x8B56, //#CJK UNIFIED IDEOGRAPH
+0xE69C,0x8B5B, //#CJK UNIFIED IDEOGRAPH
+0xE69D,0x8B5A, //#CJK UNIFIED IDEOGRAPH
+0xE69E,0x8B6B, //#CJK UNIFIED IDEOGRAPH
+0xE69F,0x8B5F, //#CJK UNIFIED IDEOGRAPH
+0xE6A0,0x8B6C, //#CJK UNIFIED IDEOGRAPH
+0xE6A1,0x8B6F, //#CJK UNIFIED IDEOGRAPH
+0xE6A2,0x8B74, //#CJK UNIFIED IDEOGRAPH
+0xE6A3,0x8B7D, //#CJK UNIFIED IDEOGRAPH
+0xE6A4,0x8B80, //#CJK UNIFIED IDEOGRAPH
+0xE6A5,0x8B8C, //#CJK UNIFIED IDEOGRAPH
+0xE6A6,0x8B8E, //#CJK UNIFIED IDEOGRAPH
+0xE6A7,0x8B92, //#CJK UNIFIED IDEOGRAPH
+0xE6A8,0x8B93, //#CJK UNIFIED IDEOGRAPH
+0xE6A9,0x8B96, //#CJK UNIFIED IDEOGRAPH
+0xE6AA,0x8B99, //#CJK UNIFIED IDEOGRAPH
+0xE6AB,0x8B9A, //#CJK UNIFIED IDEOGRAPH
+0xE6AC,0x8C3A, //#CJK UNIFIED IDEOGRAPH
+0xE6AD,0x8C41, //#CJK UNIFIED IDEOGRAPH
+0xE6AE,0x8C3F, //#CJK UNIFIED IDEOGRAPH
+0xE6AF,0x8C48, //#CJK UNIFIED IDEOGRAPH
+0xE6B0,0x8C4C, //#CJK UNIFIED IDEOGRAPH
+0xE6B1,0x8C4E, //#CJK UNIFIED IDEOGRAPH
+0xE6B2,0x8C50, //#CJK UNIFIED IDEOGRAPH
+0xE6B3,0x8C55, //#CJK UNIFIED IDEOGRAPH
+0xE6B4,0x8C62, //#CJK UNIFIED IDEOGRAPH
+0xE6B5,0x8C6C, //#CJK UNIFIED IDEOGRAPH
+0xE6B6,0x8C78, //#CJK UNIFIED IDEOGRAPH
+0xE6B7,0x8C7A, //#CJK UNIFIED IDEOGRAPH
+0xE6B8,0x8C82, //#CJK UNIFIED IDEOGRAPH
+0xE6B9,0x8C89, //#CJK UNIFIED IDEOGRAPH
+0xE6BA,0x8C85, //#CJK UNIFIED IDEOGRAPH
+0xE6BB,0x8C8A, //#CJK UNIFIED IDEOGRAPH
+0xE6BC,0x8C8D, //#CJK UNIFIED IDEOGRAPH
+0xE6BD,0x8C8E, //#CJK UNIFIED IDEOGRAPH
+0xE6BE,0x8C94, //#CJK UNIFIED IDEOGRAPH
+0xE6BF,0x8C7C, //#CJK UNIFIED IDEOGRAPH
+0xE6C0,0x8C98, //#CJK UNIFIED IDEOGRAPH
+0xE6C1,0x621D, //#CJK UNIFIED IDEOGRAPH
+0xE6C2,0x8CAD, //#CJK UNIFIED IDEOGRAPH
+0xE6C3,0x8CAA, //#CJK UNIFIED IDEOGRAPH
+0xE6C4,0x8CBD, //#CJK UNIFIED IDEOGRAPH
+0xE6C5,0x8CB2, //#CJK UNIFIED IDEOGRAPH
+0xE6C6,0x8CB3, //#CJK UNIFIED IDEOGRAPH
+0xE6C7,0x8CAE, //#CJK UNIFIED IDEOGRAPH
+0xE6C8,0x8CB6, //#CJK UNIFIED IDEOGRAPH
+0xE6C9,0x8CC8, //#CJK UNIFIED IDEOGRAPH
+0xE6CA,0x8CC1, //#CJK UNIFIED IDEOGRAPH
+0xE6CB,0x8CE4, //#CJK UNIFIED IDEOGRAPH
+0xE6CC,0x8CE3, //#CJK UNIFIED IDEOGRAPH
+0xE6CD,0x8CDA, //#CJK UNIFIED IDEOGRAPH
+0xE6CE,0x8CFD, //#CJK UNIFIED IDEOGRAPH
+0xE6CF,0x8CFA, //#CJK UNIFIED IDEOGRAPH
+0xE6D0,0x8CFB, //#CJK UNIFIED IDEOGRAPH
+0xE6D1,0x8D04, //#CJK UNIFIED IDEOGRAPH
+0xE6D2,0x8D05, //#CJK UNIFIED IDEOGRAPH
+0xE6D3,0x8D0A, //#CJK UNIFIED IDEOGRAPH
+0xE6D4,0x8D07, //#CJK UNIFIED IDEOGRAPH
+0xE6D5,0x8D0F, //#CJK UNIFIED IDEOGRAPH
+0xE6D6,0x8D0D, //#CJK UNIFIED IDEOGRAPH
+0xE6D7,0x8D10, //#CJK UNIFIED IDEOGRAPH
+0xE6D8,0x9F4E, //#CJK UNIFIED IDEOGRAPH
+0xE6D9,0x8D13, //#CJK UNIFIED IDEOGRAPH
+0xE6DA,0x8CCD, //#CJK UNIFIED IDEOGRAPH
+0xE6DB,0x8D14, //#CJK UNIFIED IDEOGRAPH
+0xE6DC,0x8D16, //#CJK UNIFIED IDEOGRAPH
+0xE6DD,0x8D67, //#CJK UNIFIED IDEOGRAPH
+0xE6DE,0x8D6D, //#CJK UNIFIED IDEOGRAPH
+0xE6DF,0x8D71, //#CJK UNIFIED IDEOGRAPH
+0xE6E0,0x8D73, //#CJK UNIFIED IDEOGRAPH
+0xE6E1,0x8D81, //#CJK UNIFIED IDEOGRAPH
+0xE6E2,0x8D99, //#CJK UNIFIED IDEOGRAPH
+0xE6E3,0x8DC2, //#CJK UNIFIED IDEOGRAPH
+0xE6E4,0x8DBE, //#CJK UNIFIED IDEOGRAPH
+0xE6E5,0x8DBA, //#CJK UNIFIED IDEOGRAPH
+0xE6E6,0x8DCF, //#CJK UNIFIED IDEOGRAPH
+0xE6E7,0x8DDA, //#CJK UNIFIED IDEOGRAPH
+0xE6E8,0x8DD6, //#CJK UNIFIED IDEOGRAPH
+0xE6E9,0x8DCC, //#CJK UNIFIED IDEOGRAPH
+0xE6EA,0x8DDB, //#CJK UNIFIED IDEOGRAPH
+0xE6EB,0x8DCB, //#CJK UNIFIED IDEOGRAPH
+0xE6EC,0x8DEA, //#CJK UNIFIED IDEOGRAPH
+0xE6ED,0x8DEB, //#CJK UNIFIED IDEOGRAPH
+0xE6EE,0x8DDF, //#CJK UNIFIED IDEOGRAPH
+0xE6EF,0x8DE3, //#CJK UNIFIED IDEOGRAPH
+0xE6F0,0x8DFC, //#CJK UNIFIED IDEOGRAPH
+0xE6F1,0x8E08, //#CJK UNIFIED IDEOGRAPH
+0xE6F2,0x8E09, //#CJK UNIFIED IDEOGRAPH
+0xE6F3,0x8DFF, //#CJK UNIFIED IDEOGRAPH
+0xE6F4,0x8E1D, //#CJK UNIFIED IDEOGRAPH
+0xE6F5,0x8E1E, //#CJK UNIFIED IDEOGRAPH
+0xE6F6,0x8E10, //#CJK UNIFIED IDEOGRAPH
+0xE6F7,0x8E1F, //#CJK UNIFIED IDEOGRAPH
+0xE6F8,0x8E42, //#CJK UNIFIED IDEOGRAPH
+0xE6F9,0x8E35, //#CJK UNIFIED IDEOGRAPH
+0xE6FA,0x8E30, //#CJK UNIFIED IDEOGRAPH
+0xE6FB,0x8E34, //#CJK UNIFIED IDEOGRAPH
+0xE6FC,0x8E4A, //#CJK UNIFIED IDEOGRAPH
+0xE740,0x8E47, //#CJK UNIFIED IDEOGRAPH
+0xE741,0x8E49, //#CJK UNIFIED IDEOGRAPH
+0xE742,0x8E4C, //#CJK UNIFIED IDEOGRAPH
+0xE743,0x8E50, //#CJK UNIFIED IDEOGRAPH
+0xE744,0x8E48, //#CJK UNIFIED IDEOGRAPH
+0xE745,0x8E59, //#CJK UNIFIED IDEOGRAPH
+0xE746,0x8E64, //#CJK UNIFIED IDEOGRAPH
+0xE747,0x8E60, //#CJK UNIFIED IDEOGRAPH
+0xE748,0x8E2A, //#CJK UNIFIED IDEOGRAPH
+0xE749,0x8E63, //#CJK UNIFIED IDEOGRAPH
+0xE74A,0x8E55, //#CJK UNIFIED IDEOGRAPH
+0xE74B,0x8E76, //#CJK UNIFIED IDEOGRAPH
+0xE74C,0x8E72, //#CJK UNIFIED IDEOGRAPH
+0xE74D,0x8E7C, //#CJK UNIFIED IDEOGRAPH
+0xE74E,0x8E81, //#CJK UNIFIED IDEOGRAPH
+0xE74F,0x8E87, //#CJK UNIFIED IDEOGRAPH
+0xE750,0x8E85, //#CJK UNIFIED IDEOGRAPH
+0xE751,0x8E84, //#CJK UNIFIED IDEOGRAPH
+0xE752,0x8E8B, //#CJK UNIFIED IDEOGRAPH
+0xE753,0x8E8A, //#CJK UNIFIED IDEOGRAPH
+0xE754,0x8E93, //#CJK UNIFIED IDEOGRAPH
+0xE755,0x8E91, //#CJK UNIFIED IDEOGRAPH
+0xE756,0x8E94, //#CJK UNIFIED IDEOGRAPH
+0xE757,0x8E99, //#CJK UNIFIED IDEOGRAPH
+0xE758,0x8EAA, //#CJK UNIFIED IDEOGRAPH
+0xE759,0x8EA1, //#CJK UNIFIED IDEOGRAPH
+0xE75A,0x8EAC, //#CJK UNIFIED IDEOGRAPH
+0xE75B,0x8EB0, //#CJK UNIFIED IDEOGRAPH
+0xE75C,0x8EC6, //#CJK UNIFIED IDEOGRAPH
+0xE75D,0x8EB1, //#CJK UNIFIED IDEOGRAPH
+0xE75E,0x8EBE, //#CJK UNIFIED IDEOGRAPH
+0xE75F,0x8EC5, //#CJK UNIFIED IDEOGRAPH
+0xE760,0x8EC8, //#CJK UNIFIED IDEOGRAPH
+0xE761,0x8ECB, //#CJK UNIFIED IDEOGRAPH
+0xE762,0x8EDB, //#CJK UNIFIED IDEOGRAPH
+0xE763,0x8EE3, //#CJK UNIFIED IDEOGRAPH
+0xE764,0x8EFC, //#CJK UNIFIED IDEOGRAPH
+0xE765,0x8EFB, //#CJK UNIFIED IDEOGRAPH
+0xE766,0x8EEB, //#CJK UNIFIED IDEOGRAPH
+0xE767,0x8EFE, //#CJK UNIFIED IDEOGRAPH
+0xE768,0x8F0A, //#CJK UNIFIED IDEOGRAPH
+0xE769,0x8F05, //#CJK UNIFIED IDEOGRAPH
+0xE76A,0x8F15, //#CJK UNIFIED IDEOGRAPH
+0xE76B,0x8F12, //#CJK UNIFIED IDEOGRAPH
+0xE76C,0x8F19, //#CJK UNIFIED IDEOGRAPH
+0xE76D,0x8F13, //#CJK UNIFIED IDEOGRAPH
+0xE76E,0x8F1C, //#CJK UNIFIED IDEOGRAPH
+0xE76F,0x8F1F, //#CJK UNIFIED IDEOGRAPH
+0xE770,0x8F1B, //#CJK UNIFIED IDEOGRAPH
+0xE771,0x8F0C, //#CJK UNIFIED IDEOGRAPH
+0xE772,0x8F26, //#CJK UNIFIED IDEOGRAPH
+0xE773,0x8F33, //#CJK UNIFIED IDEOGRAPH
+0xE774,0x8F3B, //#CJK UNIFIED IDEOGRAPH
+0xE775,0x8F39, //#CJK UNIFIED IDEOGRAPH
+0xE776,0x8F45, //#CJK UNIFIED IDEOGRAPH
+0xE777,0x8F42, //#CJK UNIFIED IDEOGRAPH
+0xE778,0x8F3E, //#CJK UNIFIED IDEOGRAPH
+0xE779,0x8F4C, //#CJK UNIFIED IDEOGRAPH
+0xE77A,0x8F49, //#CJK UNIFIED IDEOGRAPH
+0xE77B,0x8F46, //#CJK UNIFIED IDEOGRAPH
+0xE77C,0x8F4E, //#CJK UNIFIED IDEOGRAPH
+0xE77D,0x8F57, //#CJK UNIFIED IDEOGRAPH
+0xE77E,0x8F5C, //#CJK UNIFIED IDEOGRAPH
+0xE780,0x8F62, //#CJK UNIFIED IDEOGRAPH
+0xE781,0x8F63, //#CJK UNIFIED IDEOGRAPH
+0xE782,0x8F64, //#CJK UNIFIED IDEOGRAPH
+0xE783,0x8F9C, //#CJK UNIFIED IDEOGRAPH
+0xE784,0x8F9F, //#CJK UNIFIED IDEOGRAPH
+0xE785,0x8FA3, //#CJK UNIFIED IDEOGRAPH
+0xE786,0x8FAD, //#CJK UNIFIED IDEOGRAPH
+0xE787,0x8FAF, //#CJK UNIFIED IDEOGRAPH
+0xE788,0x8FB7, //#CJK UNIFIED IDEOGRAPH
+0xE789,0x8FDA, //#CJK UNIFIED IDEOGRAPH
+0xE78A,0x8FE5, //#CJK UNIFIED IDEOGRAPH
+0xE78B,0x8FE2, //#CJK UNIFIED IDEOGRAPH
+0xE78C,0x8FEA, //#CJK UNIFIED IDEOGRAPH
+0xE78D,0x8FEF, //#CJK UNIFIED IDEOGRAPH
+0xE78E,0x9087, //#CJK UNIFIED IDEOGRAPH
+0xE78F,0x8FF4, //#CJK UNIFIED IDEOGRAPH
+0xE790,0x9005, //#CJK UNIFIED IDEOGRAPH
+0xE791,0x8FF9, //#CJK UNIFIED IDEOGRAPH
+0xE792,0x8FFA, //#CJK UNIFIED IDEOGRAPH
+0xE793,0x9011, //#CJK UNIFIED IDEOGRAPH
+0xE794,0x9015, //#CJK UNIFIED IDEOGRAPH
+0xE795,0x9021, //#CJK UNIFIED IDEOGRAPH
+0xE796,0x900D, //#CJK UNIFIED IDEOGRAPH
+0xE797,0x901E, //#CJK UNIFIED IDEOGRAPH
+0xE798,0x9016, //#CJK UNIFIED IDEOGRAPH
+0xE799,0x900B, //#CJK UNIFIED IDEOGRAPH
+0xE79A,0x9027, //#CJK UNIFIED IDEOGRAPH
+0xE79B,0x9036, //#CJK UNIFIED IDEOGRAPH
+0xE79C,0x9035, //#CJK UNIFIED IDEOGRAPH
+0xE79D,0x9039, //#CJK UNIFIED IDEOGRAPH
+0xE79E,0x8FF8, //#CJK UNIFIED IDEOGRAPH
+0xE79F,0x904F, //#CJK UNIFIED IDEOGRAPH
+0xE7A0,0x9050, //#CJK UNIFIED IDEOGRAPH
+0xE7A1,0x9051, //#CJK UNIFIED IDEOGRAPH
+0xE7A2,0x9052, //#CJK UNIFIED IDEOGRAPH
+0xE7A3,0x900E, //#CJK UNIFIED IDEOGRAPH
+0xE7A4,0x9049, //#CJK UNIFIED IDEOGRAPH
+0xE7A5,0x903E, //#CJK UNIFIED IDEOGRAPH
+0xE7A6,0x9056, //#CJK UNIFIED IDEOGRAPH
+0xE7A7,0x9058, //#CJK UNIFIED IDEOGRAPH
+0xE7A8,0x905E, //#CJK UNIFIED IDEOGRAPH
+0xE7A9,0x9068, //#CJK UNIFIED IDEOGRAPH
+0xE7AA,0x906F, //#CJK UNIFIED IDEOGRAPH
+0xE7AB,0x9076, //#CJK UNIFIED IDEOGRAPH
+0xE7AC,0x96A8, //#CJK UNIFIED IDEOGRAPH
+0xE7AD,0x9072, //#CJK UNIFIED IDEOGRAPH
+0xE7AE,0x9082, //#CJK UNIFIED IDEOGRAPH
+0xE7AF,0x907D, //#CJK UNIFIED IDEOGRAPH
+0xE7B0,0x9081, //#CJK UNIFIED IDEOGRAPH
+0xE7B1,0x9080, //#CJK UNIFIED IDEOGRAPH
+0xE7B2,0x908A, //#CJK UNIFIED IDEOGRAPH
+0xE7B3,0x9089, //#CJK UNIFIED IDEOGRAPH
+0xE7B4,0x908F, //#CJK UNIFIED IDEOGRAPH
+0xE7B5,0x90A8, //#CJK UNIFIED IDEOGRAPH
+0xE7B6,0x90AF, //#CJK UNIFIED IDEOGRAPH
+0xE7B7,0x90B1, //#CJK UNIFIED IDEOGRAPH
+0xE7B8,0x90B5, //#CJK UNIFIED IDEOGRAPH
+0xE7B9,0x90E2, //#CJK UNIFIED IDEOGRAPH
+0xE7BA,0x90E4, //#CJK UNIFIED IDEOGRAPH
+0xE7BB,0x6248, //#CJK UNIFIED IDEOGRAPH
+0xE7BC,0x90DB, //#CJK UNIFIED IDEOGRAPH
+0xE7BD,0x9102, //#CJK UNIFIED IDEOGRAPH
+0xE7BE,0x9112, //#CJK UNIFIED IDEOGRAPH
+0xE7BF,0x9119, //#CJK UNIFIED IDEOGRAPH
+0xE7C0,0x9132, //#CJK UNIFIED IDEOGRAPH
+0xE7C1,0x9130, //#CJK UNIFIED IDEOGRAPH
+0xE7C2,0x914A, //#CJK UNIFIED IDEOGRAPH
+0xE7C3,0x9156, //#CJK UNIFIED IDEOGRAPH
+0xE7C4,0x9158, //#CJK UNIFIED IDEOGRAPH
+0xE7C5,0x9163, //#CJK UNIFIED IDEOGRAPH
+0xE7C6,0x9165, //#CJK UNIFIED IDEOGRAPH
+0xE7C7,0x9169, //#CJK UNIFIED IDEOGRAPH
+0xE7C8,0x9173, //#CJK UNIFIED IDEOGRAPH
+0xE7C9,0x9172, //#CJK UNIFIED IDEOGRAPH
+0xE7CA,0x918B, //#CJK UNIFIED IDEOGRAPH
+0xE7CB,0x9189, //#CJK UNIFIED IDEOGRAPH
+0xE7CC,0x9182, //#CJK UNIFIED IDEOGRAPH
+0xE7CD,0x91A2, //#CJK UNIFIED IDEOGRAPH
+0xE7CE,0x91AB, //#CJK UNIFIED IDEOGRAPH
+0xE7CF,0x91AF, //#CJK UNIFIED IDEOGRAPH
+0xE7D0,0x91AA, //#CJK UNIFIED IDEOGRAPH
+0xE7D1,0x91B5, //#CJK UNIFIED IDEOGRAPH
+0xE7D2,0x91B4, //#CJK UNIFIED IDEOGRAPH
+0xE7D3,0x91BA, //#CJK UNIFIED IDEOGRAPH
+0xE7D4,0x91C0, //#CJK UNIFIED IDEOGRAPH
+0xE7D5,0x91C1, //#CJK UNIFIED IDEOGRAPH
+0xE7D6,0x91C9, //#CJK UNIFIED IDEOGRAPH
+0xE7D7,0x91CB, //#CJK UNIFIED IDEOGRAPH
+0xE7D8,0x91D0, //#CJK UNIFIED IDEOGRAPH
+0xE7D9,0x91D6, //#CJK UNIFIED IDEOGRAPH
+0xE7DA,0x91DF, //#CJK UNIFIED IDEOGRAPH
+0xE7DB,0x91E1, //#CJK UNIFIED IDEOGRAPH
+0xE7DC,0x91DB, //#CJK UNIFIED IDEOGRAPH
+0xE7DD,0x91FC, //#CJK UNIFIED IDEOGRAPH
+0xE7DE,0x91F5, //#CJK UNIFIED IDEOGRAPH
+0xE7DF,0x91F6, //#CJK UNIFIED IDEOGRAPH
+0xE7E0,0x921E, //#CJK UNIFIED IDEOGRAPH
+0xE7E1,0x91FF, //#CJK UNIFIED IDEOGRAPH
+0xE7E2,0x9214, //#CJK UNIFIED IDEOGRAPH
+0xE7E3,0x922C, //#CJK UNIFIED IDEOGRAPH
+0xE7E4,0x9215, //#CJK UNIFIED IDEOGRAPH
+0xE7E5,0x9211, //#CJK UNIFIED IDEOGRAPH
+0xE7E6,0x925E, //#CJK UNIFIED IDEOGRAPH
+0xE7E7,0x9257, //#CJK UNIFIED IDEOGRAPH
+0xE7E8,0x9245, //#CJK UNIFIED IDEOGRAPH
+0xE7E9,0x9249, //#CJK UNIFIED IDEOGRAPH
+0xE7EA,0x9264, //#CJK UNIFIED IDEOGRAPH
+0xE7EB,0x9248, //#CJK UNIFIED IDEOGRAPH
+0xE7EC,0x9295, //#CJK UNIFIED IDEOGRAPH
+0xE7ED,0x923F, //#CJK UNIFIED IDEOGRAPH
+0xE7EE,0x924B, //#CJK UNIFIED IDEOGRAPH
+0xE7EF,0x9250, //#CJK UNIFIED IDEOGRAPH
+0xE7F0,0x929C, //#CJK UNIFIED IDEOGRAPH
+0xE7F1,0x9296, //#CJK UNIFIED IDEOGRAPH
+0xE7F2,0x9293, //#CJK UNIFIED IDEOGRAPH
+0xE7F3,0x929B, //#CJK UNIFIED IDEOGRAPH
+0xE7F4,0x925A, //#CJK UNIFIED IDEOGRAPH
+0xE7F5,0x92CF, //#CJK UNIFIED IDEOGRAPH
+0xE7F6,0x92B9, //#CJK UNIFIED IDEOGRAPH
+0xE7F7,0x92B7, //#CJK UNIFIED IDEOGRAPH
+0xE7F8,0x92E9, //#CJK UNIFIED IDEOGRAPH
+0xE7F9,0x930F, //#CJK UNIFIED IDEOGRAPH
+0xE7FA,0x92FA, //#CJK UNIFIED IDEOGRAPH
+0xE7FB,0x9344, //#CJK UNIFIED IDEOGRAPH
+0xE7FC,0x932E, //#CJK UNIFIED IDEOGRAPH
+0xE840,0x9319, //#CJK UNIFIED IDEOGRAPH
+0xE841,0x9322, //#CJK UNIFIED IDEOGRAPH
+0xE842,0x931A, //#CJK UNIFIED IDEOGRAPH
+0xE843,0x9323, //#CJK UNIFIED IDEOGRAPH
+0xE844,0x933A, //#CJK UNIFIED IDEOGRAPH
+0xE845,0x9335, //#CJK UNIFIED IDEOGRAPH
+0xE846,0x933B, //#CJK UNIFIED IDEOGRAPH
+0xE847,0x935C, //#CJK UNIFIED IDEOGRAPH
+0xE848,0x9360, //#CJK UNIFIED IDEOGRAPH
+0xE849,0x937C, //#CJK UNIFIED IDEOGRAPH
+0xE84A,0x936E, //#CJK UNIFIED IDEOGRAPH
+0xE84B,0x9356, //#CJK UNIFIED IDEOGRAPH
+0xE84C,0x93B0, //#CJK UNIFIED IDEOGRAPH
+0xE84D,0x93AC, //#CJK UNIFIED IDEOGRAPH
+0xE84E,0x93AD, //#CJK UNIFIED IDEOGRAPH
+0xE84F,0x9394, //#CJK UNIFIED IDEOGRAPH
+0xE850,0x93B9, //#CJK UNIFIED IDEOGRAPH
+0xE851,0x93D6, //#CJK UNIFIED IDEOGRAPH
+0xE852,0x93D7, //#CJK UNIFIED IDEOGRAPH
+0xE853,0x93E8, //#CJK UNIFIED IDEOGRAPH
+0xE854,0x93E5, //#CJK UNIFIED IDEOGRAPH
+0xE855,0x93D8, //#CJK UNIFIED IDEOGRAPH
+0xE856,0x93C3, //#CJK UNIFIED IDEOGRAPH
+0xE857,0x93DD, //#CJK UNIFIED IDEOGRAPH
+0xE858,0x93D0, //#CJK UNIFIED IDEOGRAPH
+0xE859,0x93C8, //#CJK UNIFIED IDEOGRAPH
+0xE85A,0x93E4, //#CJK UNIFIED IDEOGRAPH
+0xE85B,0x941A, //#CJK UNIFIED IDEOGRAPH
+0xE85C,0x9414, //#CJK UNIFIED IDEOGRAPH
+0xE85D,0x9413, //#CJK UNIFIED IDEOGRAPH
+0xE85E,0x9403, //#CJK UNIFIED IDEOGRAPH
+0xE85F,0x9407, //#CJK UNIFIED IDEOGRAPH
+0xE860,0x9410, //#CJK UNIFIED IDEOGRAPH
+0xE861,0x9436, //#CJK UNIFIED IDEOGRAPH
+0xE862,0x942B, //#CJK UNIFIED IDEOGRAPH
+0xE863,0x9435, //#CJK UNIFIED IDEOGRAPH
+0xE864,0x9421, //#CJK UNIFIED IDEOGRAPH
+0xE865,0x943A, //#CJK UNIFIED IDEOGRAPH
+0xE866,0x9441, //#CJK UNIFIED IDEOGRAPH
+0xE867,0x9452, //#CJK UNIFIED IDEOGRAPH
+0xE868,0x9444, //#CJK UNIFIED IDEOGRAPH
+0xE869,0x945B, //#CJK UNIFIED IDEOGRAPH
+0xE86A,0x9460, //#CJK UNIFIED IDEOGRAPH
+0xE86B,0x9462, //#CJK UNIFIED IDEOGRAPH
+0xE86C,0x945E, //#CJK UNIFIED IDEOGRAPH
+0xE86D,0x946A, //#CJK UNIFIED IDEOGRAPH
+0xE86E,0x9229, //#CJK UNIFIED IDEOGRAPH
+0xE86F,0x9470, //#CJK UNIFIED IDEOGRAPH
+0xE870,0x9475, //#CJK UNIFIED IDEOGRAPH
+0xE871,0x9477, //#CJK UNIFIED IDEOGRAPH
+0xE872,0x947D, //#CJK UNIFIED IDEOGRAPH
+0xE873,0x945A, //#CJK UNIFIED IDEOGRAPH
+0xE874,0x947C, //#CJK UNIFIED IDEOGRAPH
+0xE875,0x947E, //#CJK UNIFIED IDEOGRAPH
+0xE876,0x9481, //#CJK UNIFIED IDEOGRAPH
+0xE877,0x947F, //#CJK UNIFIED IDEOGRAPH
+0xE878,0x9582, //#CJK UNIFIED IDEOGRAPH
+0xE879,0x9587, //#CJK UNIFIED IDEOGRAPH
+0xE87A,0x958A, //#CJK UNIFIED IDEOGRAPH
+0xE87B,0x9594, //#CJK UNIFIED IDEOGRAPH
+0xE87C,0x9596, //#CJK UNIFIED IDEOGRAPH
+0xE87D,0x9598, //#CJK UNIFIED IDEOGRAPH
+0xE87E,0x9599, //#CJK UNIFIED IDEOGRAPH
+0xE880,0x95A0, //#CJK UNIFIED IDEOGRAPH
+0xE881,0x95A8, //#CJK UNIFIED IDEOGRAPH
+0xE882,0x95A7, //#CJK UNIFIED IDEOGRAPH
+0xE883,0x95AD, //#CJK UNIFIED IDEOGRAPH
+0xE884,0x95BC, //#CJK UNIFIED IDEOGRAPH
+0xE885,0x95BB, //#CJK UNIFIED IDEOGRAPH
+0xE886,0x95B9, //#CJK UNIFIED IDEOGRAPH
+0xE887,0x95BE, //#CJK UNIFIED IDEOGRAPH
+0xE888,0x95CA, //#CJK UNIFIED IDEOGRAPH
+0xE889,0x6FF6, //#CJK UNIFIED IDEOGRAPH
+0xE88A,0x95C3, //#CJK UNIFIED IDEOGRAPH
+0xE88B,0x95CD, //#CJK UNIFIED IDEOGRAPH
+0xE88C,0x95CC, //#CJK UNIFIED IDEOGRAPH
+0xE88D,0x95D5, //#CJK UNIFIED IDEOGRAPH
+0xE88E,0x95D4, //#CJK UNIFIED IDEOGRAPH
+0xE88F,0x95D6, //#CJK UNIFIED IDEOGRAPH
+0xE890,0x95DC, //#CJK UNIFIED IDEOGRAPH
+0xE891,0x95E1, //#CJK UNIFIED IDEOGRAPH
+0xE892,0x95E5, //#CJK UNIFIED IDEOGRAPH
+0xE893,0x95E2, //#CJK UNIFIED IDEOGRAPH
+0xE894,0x9621, //#CJK UNIFIED IDEOGRAPH
+0xE895,0x9628, //#CJK UNIFIED IDEOGRAPH
+0xE896,0x962E, //#CJK UNIFIED IDEOGRAPH
+0xE897,0x962F, //#CJK UNIFIED IDEOGRAPH
+0xE898,0x9642, //#CJK UNIFIED IDEOGRAPH
+0xE899,0x964C, //#CJK UNIFIED IDEOGRAPH
+0xE89A,0x964F, //#CJK UNIFIED IDEOGRAPH
+0xE89B,0x964B, //#CJK UNIFIED IDEOGRAPH
+0xE89C,0x9677, //#CJK UNIFIED IDEOGRAPH
+0xE89D,0x965C, //#CJK UNIFIED IDEOGRAPH
+0xE89E,0x965E, //#CJK UNIFIED IDEOGRAPH
+0xE89F,0x965D, //#CJK UNIFIED IDEOGRAPH
+0xE8A0,0x965F, //#CJK UNIFIED IDEOGRAPH
+0xE8A1,0x9666, //#CJK UNIFIED IDEOGRAPH
+0xE8A2,0x9672, //#CJK UNIFIED IDEOGRAPH
+0xE8A3,0x966C, //#CJK UNIFIED IDEOGRAPH
+0xE8A4,0x968D, //#CJK UNIFIED IDEOGRAPH
+0xE8A5,0x9698, //#CJK UNIFIED IDEOGRAPH
+0xE8A6,0x9695, //#CJK UNIFIED IDEOGRAPH
+0xE8A7,0x9697, //#CJK UNIFIED IDEOGRAPH
+0xE8A8,0x96AA, //#CJK UNIFIED IDEOGRAPH
+0xE8A9,0x96A7, //#CJK UNIFIED IDEOGRAPH
+0xE8AA,0x96B1, //#CJK UNIFIED IDEOGRAPH
+0xE8AB,0x96B2, //#CJK UNIFIED IDEOGRAPH
+0xE8AC,0x96B0, //#CJK UNIFIED IDEOGRAPH
+0xE8AD,0x96B4, //#CJK UNIFIED IDEOGRAPH
+0xE8AE,0x96B6, //#CJK UNIFIED IDEOGRAPH
+0xE8AF,0x96B8, //#CJK UNIFIED IDEOGRAPH
+0xE8B0,0x96B9, //#CJK UNIFIED IDEOGRAPH
+0xE8B1,0x96CE, //#CJK UNIFIED IDEOGRAPH
+0xE8B2,0x96CB, //#CJK UNIFIED IDEOGRAPH
+0xE8B3,0x96C9, //#CJK UNIFIED IDEOGRAPH
+0xE8B4,0x96CD, //#CJK UNIFIED IDEOGRAPH
+0xE8B5,0x894D, //#CJK UNIFIED IDEOGRAPH
+0xE8B6,0x96DC, //#CJK UNIFIED IDEOGRAPH
+0xE8B7,0x970D, //#CJK UNIFIED IDEOGRAPH
+0xE8B8,0x96D5, //#CJK UNIFIED IDEOGRAPH
+0xE8B9,0x96F9, //#CJK UNIFIED IDEOGRAPH
+0xE8BA,0x9704, //#CJK UNIFIED IDEOGRAPH
+0xE8BB,0x9706, //#CJK UNIFIED IDEOGRAPH
+0xE8BC,0x9708, //#CJK UNIFIED IDEOGRAPH
+0xE8BD,0x9713, //#CJK UNIFIED IDEOGRAPH
+0xE8BE,0x970E, //#CJK UNIFIED IDEOGRAPH
+0xE8BF,0x9711, //#CJK UNIFIED IDEOGRAPH
+0xE8C0,0x970F, //#CJK UNIFIED IDEOGRAPH
+0xE8C1,0x9716, //#CJK UNIFIED IDEOGRAPH
+0xE8C2,0x9719, //#CJK UNIFIED IDEOGRAPH
+0xE8C3,0x9724, //#CJK UNIFIED IDEOGRAPH
+0xE8C4,0x972A, //#CJK UNIFIED IDEOGRAPH
+0xE8C5,0x9730, //#CJK UNIFIED IDEOGRAPH
+0xE8C6,0x9739, //#CJK UNIFIED IDEOGRAPH
+0xE8C7,0x973D, //#CJK UNIFIED IDEOGRAPH
+0xE8C8,0x973E, //#CJK UNIFIED IDEOGRAPH
+0xE8C9,0x9744, //#CJK UNIFIED IDEOGRAPH
+0xE8CA,0x9746, //#CJK UNIFIED IDEOGRAPH
+0xE8CB,0x9748, //#CJK UNIFIED IDEOGRAPH
+0xE8CC,0x9742, //#CJK UNIFIED IDEOGRAPH
+0xE8CD,0x9749, //#CJK UNIFIED IDEOGRAPH
+0xE8CE,0x975C, //#CJK UNIFIED IDEOGRAPH
+0xE8CF,0x9760, //#CJK UNIFIED IDEOGRAPH
+0xE8D0,0x9764, //#CJK UNIFIED IDEOGRAPH
+0xE8D1,0x9766, //#CJK UNIFIED IDEOGRAPH
+0xE8D2,0x9768, //#CJK UNIFIED IDEOGRAPH
+0xE8D3,0x52D2, //#CJK UNIFIED IDEOGRAPH
+0xE8D4,0x976B, //#CJK UNIFIED IDEOGRAPH
+0xE8D5,0x9771, //#CJK UNIFIED IDEOGRAPH
+0xE8D6,0x9779, //#CJK UNIFIED IDEOGRAPH
+0xE8D7,0x9785, //#CJK UNIFIED IDEOGRAPH
+0xE8D8,0x977C, //#CJK UNIFIED IDEOGRAPH
+0xE8D9,0x9781, //#CJK UNIFIED IDEOGRAPH
+0xE8DA,0x977A, //#CJK UNIFIED IDEOGRAPH
+0xE8DB,0x9786, //#CJK UNIFIED IDEOGRAPH
+0xE8DC,0x978B, //#CJK UNIFIED IDEOGRAPH
+0xE8DD,0x978F, //#CJK UNIFIED IDEOGRAPH
+0xE8DE,0x9790, //#CJK UNIFIED IDEOGRAPH
+0xE8DF,0x979C, //#CJK UNIFIED IDEOGRAPH
+0xE8E0,0x97A8, //#CJK UNIFIED IDEOGRAPH
+0xE8E1,0x97A6, //#CJK UNIFIED IDEOGRAPH
+0xE8E2,0x97A3, //#CJK UNIFIED IDEOGRAPH
+0xE8E3,0x97B3, //#CJK UNIFIED IDEOGRAPH
+0xE8E4,0x97B4, //#CJK UNIFIED IDEOGRAPH
+0xE8E5,0x97C3, //#CJK UNIFIED IDEOGRAPH
+0xE8E6,0x97C6, //#CJK UNIFIED IDEOGRAPH
+0xE8E7,0x97C8, //#CJK UNIFIED IDEOGRAPH
+0xE8E8,0x97CB, //#CJK UNIFIED IDEOGRAPH
+0xE8E9,0x97DC, //#CJK UNIFIED IDEOGRAPH
+0xE8EA,0x97ED, //#CJK UNIFIED IDEOGRAPH
+0xE8EB,0x9F4F, //#CJK UNIFIED IDEOGRAPH
+0xE8EC,0x97F2, //#CJK UNIFIED IDEOGRAPH
+0xE8ED,0x7ADF, //#CJK UNIFIED IDEOGRAPH
+0xE8EE,0x97F6, //#CJK UNIFIED IDEOGRAPH
+0xE8EF,0x97F5, //#CJK UNIFIED IDEOGRAPH
+0xE8F0,0x980F, //#CJK UNIFIED IDEOGRAPH
+0xE8F1,0x980C, //#CJK UNIFIED IDEOGRAPH
+0xE8F2,0x9838, //#CJK UNIFIED IDEOGRAPH
+0xE8F3,0x9824, //#CJK UNIFIED IDEOGRAPH
+0xE8F4,0x9821, //#CJK UNIFIED IDEOGRAPH
+0xE8F5,0x9837, //#CJK UNIFIED IDEOGRAPH
+0xE8F6,0x983D, //#CJK UNIFIED IDEOGRAPH
+0xE8F7,0x9846, //#CJK UNIFIED IDEOGRAPH
+0xE8F8,0x984F, //#CJK UNIFIED IDEOGRAPH
+0xE8F9,0x984B, //#CJK UNIFIED IDEOGRAPH
+0xE8FA,0x986B, //#CJK UNIFIED IDEOGRAPH
+0xE8FB,0x986F, //#CJK UNIFIED IDEOGRAPH
+0xE8FC,0x9870, //#CJK UNIFIED IDEOGRAPH
+0xE940,0x9871, //#CJK UNIFIED IDEOGRAPH
+0xE941,0x9874, //#CJK UNIFIED IDEOGRAPH
+0xE942,0x9873, //#CJK UNIFIED IDEOGRAPH
+0xE943,0x98AA, //#CJK UNIFIED IDEOGRAPH
+0xE944,0x98AF, //#CJK UNIFIED IDEOGRAPH
+0xE945,0x98B1, //#CJK UNIFIED IDEOGRAPH
+0xE946,0x98B6, //#CJK UNIFIED IDEOGRAPH
+0xE947,0x98C4, //#CJK UNIFIED IDEOGRAPH
+0xE948,0x98C3, //#CJK UNIFIED IDEOGRAPH
+0xE949,0x98C6, //#CJK UNIFIED IDEOGRAPH
+0xE94A,0x98E9, //#CJK UNIFIED IDEOGRAPH
+0xE94B,0x98EB, //#CJK UNIFIED IDEOGRAPH
+0xE94C,0x9903, //#CJK UNIFIED IDEOGRAPH
+0xE94D,0x9909, //#CJK UNIFIED IDEOGRAPH
+0xE94E,0x9912, //#CJK UNIFIED IDEOGRAPH
+0xE94F,0x9914, //#CJK UNIFIED IDEOGRAPH
+0xE950,0x9918, //#CJK UNIFIED IDEOGRAPH
+0xE951,0x9921, //#CJK UNIFIED IDEOGRAPH
+0xE952,0x991D, //#CJK UNIFIED IDEOGRAPH
+0xE953,0x991E, //#CJK UNIFIED IDEOGRAPH
+0xE954,0x9924, //#CJK UNIFIED IDEOGRAPH
+0xE955,0x9920, //#CJK UNIFIED IDEOGRAPH
+0xE956,0x992C, //#CJK UNIFIED IDEOGRAPH
+0xE957,0x992E, //#CJK UNIFIED IDEOGRAPH
+0xE958,0x993D, //#CJK UNIFIED IDEOGRAPH
+0xE959,0x993E, //#CJK UNIFIED IDEOGRAPH
+0xE95A,0x9942, //#CJK UNIFIED IDEOGRAPH
+0xE95B,0x9949, //#CJK UNIFIED IDEOGRAPH
+0xE95C,0x9945, //#CJK UNIFIED IDEOGRAPH
+0xE95D,0x9950, //#CJK UNIFIED IDEOGRAPH
+0xE95E,0x994B, //#CJK UNIFIED IDEOGRAPH
+0xE95F,0x9951, //#CJK UNIFIED IDEOGRAPH
+0xE960,0x9952, //#CJK UNIFIED IDEOGRAPH
+0xE961,0x994C, //#CJK UNIFIED IDEOGRAPH
+0xE962,0x9955, //#CJK UNIFIED IDEOGRAPH
+0xE963,0x9997, //#CJK UNIFIED IDEOGRAPH
+0xE964,0x9998, //#CJK UNIFIED IDEOGRAPH
+0xE965,0x99A5, //#CJK UNIFIED IDEOGRAPH
+0xE966,0x99AD, //#CJK UNIFIED IDEOGRAPH
+0xE967,0x99AE, //#CJK UNIFIED IDEOGRAPH
+0xE968,0x99BC, //#CJK UNIFIED IDEOGRAPH
+0xE969,0x99DF, //#CJK UNIFIED IDEOGRAPH
+0xE96A,0x99DB, //#CJK UNIFIED IDEOGRAPH
+0xE96B,0x99DD, //#CJK UNIFIED IDEOGRAPH
+0xE96C,0x99D8, //#CJK UNIFIED IDEOGRAPH
+0xE96D,0x99D1, //#CJK UNIFIED IDEOGRAPH
+0xE96E,0x99ED, //#CJK UNIFIED IDEOGRAPH
+0xE96F,0x99EE, //#CJK UNIFIED IDEOGRAPH
+0xE970,0x99F1, //#CJK UNIFIED IDEOGRAPH
+0xE971,0x99F2, //#CJK UNIFIED IDEOGRAPH
+0xE972,0x99FB, //#CJK UNIFIED IDEOGRAPH
+0xE973,0x99F8, //#CJK UNIFIED IDEOGRAPH
+0xE974,0x9A01, //#CJK UNIFIED IDEOGRAPH
+0xE975,0x9A0F, //#CJK UNIFIED IDEOGRAPH
+0xE976,0x9A05, //#CJK UNIFIED IDEOGRAPH
+0xE977,0x99E2, //#CJK UNIFIED IDEOGRAPH
+0xE978,0x9A19, //#CJK UNIFIED IDEOGRAPH
+0xE979,0x9A2B, //#CJK UNIFIED IDEOGRAPH
+0xE97A,0x9A37, //#CJK UNIFIED IDEOGRAPH
+0xE97B,0x9A45, //#CJK UNIFIED IDEOGRAPH
+0xE97C,0x9A42, //#CJK UNIFIED IDEOGRAPH
+0xE97D,0x9A40, //#CJK UNIFIED IDEOGRAPH
+0xE97E,0x9A43, //#CJK UNIFIED IDEOGRAPH
+0xE980,0x9A3E, //#CJK UNIFIED IDEOGRAPH
+0xE981,0x9A55, //#CJK UNIFIED IDEOGRAPH
+0xE982,0x9A4D, //#CJK UNIFIED IDEOGRAPH
+0xE983,0x9A5B, //#CJK UNIFIED IDEOGRAPH
+0xE984,0x9A57, //#CJK UNIFIED IDEOGRAPH
+0xE985,0x9A5F, //#CJK UNIFIED IDEOGRAPH
+0xE986,0x9A62, //#CJK UNIFIED IDEOGRAPH
+0xE987,0x9A65, //#CJK UNIFIED IDEOGRAPH
+0xE988,0x9A64, //#CJK UNIFIED IDEOGRAPH
+0xE989,0x9A69, //#CJK UNIFIED IDEOGRAPH
+0xE98A,0x9A6B, //#CJK UNIFIED IDEOGRAPH
+0xE98B,0x9A6A, //#CJK UNIFIED IDEOGRAPH
+0xE98C,0x9AAD, //#CJK UNIFIED IDEOGRAPH
+0xE98D,0x9AB0, //#CJK UNIFIED IDEOGRAPH
+0xE98E,0x9ABC, //#CJK UNIFIED IDEOGRAPH
+0xE98F,0x9AC0, //#CJK UNIFIED IDEOGRAPH
+0xE990,0x9ACF, //#CJK UNIFIED IDEOGRAPH
+0xE991,0x9AD1, //#CJK UNIFIED IDEOGRAPH
+0xE992,0x9AD3, //#CJK UNIFIED IDEOGRAPH
+0xE993,0x9AD4, //#CJK UNIFIED IDEOGRAPH
+0xE994,0x9ADE, //#CJK UNIFIED IDEOGRAPH
+0xE995,0x9ADF, //#CJK UNIFIED IDEOGRAPH
+0xE996,0x9AE2, //#CJK UNIFIED IDEOGRAPH
+0xE997,0x9AE3, //#CJK UNIFIED IDEOGRAPH
+0xE998,0x9AE6, //#CJK UNIFIED IDEOGRAPH
+0xE999,0x9AEF, //#CJK UNIFIED IDEOGRAPH
+0xE99A,0x9AEB, //#CJK UNIFIED IDEOGRAPH
+0xE99B,0x9AEE, //#CJK UNIFIED IDEOGRAPH
+0xE99C,0x9AF4, //#CJK UNIFIED IDEOGRAPH
+0xE99D,0x9AF1, //#CJK UNIFIED IDEOGRAPH
+0xE99E,0x9AF7, //#CJK UNIFIED IDEOGRAPH
+0xE99F,0x9AFB, //#CJK UNIFIED IDEOGRAPH
+0xE9A0,0x9B06, //#CJK UNIFIED IDEOGRAPH
+0xE9A1,0x9B18, //#CJK UNIFIED IDEOGRAPH
+0xE9A2,0x9B1A, //#CJK UNIFIED IDEOGRAPH
+0xE9A3,0x9B1F, //#CJK UNIFIED IDEOGRAPH
+0xE9A4,0x9B22, //#CJK UNIFIED IDEOGRAPH
+0xE9A5,0x9B23, //#CJK UNIFIED IDEOGRAPH
+0xE9A6,0x9B25, //#CJK UNIFIED IDEOGRAPH
+0xE9A7,0x9B27, //#CJK UNIFIED IDEOGRAPH
+0xE9A8,0x9B28, //#CJK UNIFIED IDEOGRAPH
+0xE9A9,0x9B29, //#CJK UNIFIED IDEOGRAPH
+0xE9AA,0x9B2A, //#CJK UNIFIED IDEOGRAPH
+0xE9AB,0x9B2E, //#CJK UNIFIED IDEOGRAPH
+0xE9AC,0x9B2F, //#CJK UNIFIED IDEOGRAPH
+0xE9AD,0x9B32, //#CJK UNIFIED IDEOGRAPH
+0xE9AE,0x9B44, //#CJK UNIFIED IDEOGRAPH
+0xE9AF,0x9B43, //#CJK UNIFIED IDEOGRAPH
+0xE9B0,0x9B4F, //#CJK UNIFIED IDEOGRAPH
+0xE9B1,0x9B4D, //#CJK UNIFIED IDEOGRAPH
+0xE9B2,0x9B4E, //#CJK UNIFIED IDEOGRAPH
+0xE9B3,0x9B51, //#CJK UNIFIED IDEOGRAPH
+0xE9B4,0x9B58, //#CJK UNIFIED IDEOGRAPH
+0xE9B5,0x9B74, //#CJK UNIFIED IDEOGRAPH
+0xE9B6,0x9B93, //#CJK UNIFIED IDEOGRAPH
+0xE9B7,0x9B83, //#CJK UNIFIED IDEOGRAPH
+0xE9B8,0x9B91, //#CJK UNIFIED IDEOGRAPH
+0xE9B9,0x9B96, //#CJK UNIFIED IDEOGRAPH
+0xE9BA,0x9B97, //#CJK UNIFIED IDEOGRAPH
+0xE9BB,0x9B9F, //#CJK UNIFIED IDEOGRAPH
+0xE9BC,0x9BA0, //#CJK UNIFIED IDEOGRAPH
+0xE9BD,0x9BA8, //#CJK UNIFIED IDEOGRAPH
+0xE9BE,0x9BB4, //#CJK UNIFIED IDEOGRAPH
+0xE9BF,0x9BC0, //#CJK UNIFIED IDEOGRAPH
+0xE9C0,0x9BCA, //#CJK UNIFIED IDEOGRAPH
+0xE9C1,0x9BB9, //#CJK UNIFIED IDEOGRAPH
+0xE9C2,0x9BC6, //#CJK UNIFIED IDEOGRAPH
+0xE9C3,0x9BCF, //#CJK UNIFIED IDEOGRAPH
+0xE9C4,0x9BD1, //#CJK UNIFIED IDEOGRAPH
+0xE9C5,0x9BD2, //#CJK UNIFIED IDEOGRAPH
+0xE9C6,0x9BE3, //#CJK UNIFIED IDEOGRAPH
+0xE9C7,0x9BE2, //#CJK UNIFIED IDEOGRAPH
+0xE9C8,0x9BE4, //#CJK UNIFIED IDEOGRAPH
+0xE9C9,0x9BD4, //#CJK UNIFIED IDEOGRAPH
+0xE9CA,0x9BE1, //#CJK UNIFIED IDEOGRAPH
+0xE9CB,0x9C3A, //#CJK UNIFIED IDEOGRAPH
+0xE9CC,0x9BF2, //#CJK UNIFIED IDEOGRAPH
+0xE9CD,0x9BF1, //#CJK UNIFIED IDEOGRAPH
+0xE9CE,0x9BF0, //#CJK UNIFIED IDEOGRAPH
+0xE9CF,0x9C15, //#CJK UNIFIED IDEOGRAPH
+0xE9D0,0x9C14, //#CJK UNIFIED IDEOGRAPH
+0xE9D1,0x9C09, //#CJK UNIFIED IDEOGRAPH
+0xE9D2,0x9C13, //#CJK UNIFIED IDEOGRAPH
+0xE9D3,0x9C0C, //#CJK UNIFIED IDEOGRAPH
+0xE9D4,0x9C06, //#CJK UNIFIED IDEOGRAPH
+0xE9D5,0x9C08, //#CJK UNIFIED IDEOGRAPH
+0xE9D6,0x9C12, //#CJK UNIFIED IDEOGRAPH
+0xE9D7,0x9C0A, //#CJK UNIFIED IDEOGRAPH
+0xE9D8,0x9C04, //#CJK UNIFIED IDEOGRAPH
+0xE9D9,0x9C2E, //#CJK UNIFIED IDEOGRAPH
+0xE9DA,0x9C1B, //#CJK UNIFIED IDEOGRAPH
+0xE9DB,0x9C25, //#CJK UNIFIED IDEOGRAPH
+0xE9DC,0x9C24, //#CJK UNIFIED IDEOGRAPH
+0xE9DD,0x9C21, //#CJK UNIFIED IDEOGRAPH
+0xE9DE,0x9C30, //#CJK UNIFIED IDEOGRAPH
+0xE9DF,0x9C47, //#CJK UNIFIED IDEOGRAPH
+0xE9E0,0x9C32, //#CJK UNIFIED IDEOGRAPH
+0xE9E1,0x9C46, //#CJK UNIFIED IDEOGRAPH
+0xE9E2,0x9C3E, //#CJK UNIFIED IDEOGRAPH
+0xE9E3,0x9C5A, //#CJK UNIFIED IDEOGRAPH
+0xE9E4,0x9C60, //#CJK UNIFIED IDEOGRAPH
+0xE9E5,0x9C67, //#CJK UNIFIED IDEOGRAPH
+0xE9E6,0x9C76, //#CJK UNIFIED IDEOGRAPH
+0xE9E7,0x9C78, //#CJK UNIFIED IDEOGRAPH
+0xE9E8,0x9CE7, //#CJK UNIFIED IDEOGRAPH
+0xE9E9,0x9CEC, //#CJK UNIFIED IDEOGRAPH
+0xE9EA,0x9CF0, //#CJK UNIFIED IDEOGRAPH
+0xE9EB,0x9D09, //#CJK UNIFIED IDEOGRAPH
+0xE9EC,0x9D08, //#CJK UNIFIED IDEOGRAPH
+0xE9ED,0x9CEB, //#CJK UNIFIED IDEOGRAPH
+0xE9EE,0x9D03, //#CJK UNIFIED IDEOGRAPH
+0xE9EF,0x9D06, //#CJK UNIFIED IDEOGRAPH
+0xE9F0,0x9D2A, //#CJK UNIFIED IDEOGRAPH
+0xE9F1,0x9D26, //#CJK UNIFIED IDEOGRAPH
+0xE9F2,0x9DAF, //#CJK UNIFIED IDEOGRAPH
+0xE9F3,0x9D23, //#CJK UNIFIED IDEOGRAPH
+0xE9F4,0x9D1F, //#CJK UNIFIED IDEOGRAPH
+0xE9F5,0x9D44, //#CJK UNIFIED IDEOGRAPH
+0xE9F6,0x9D15, //#CJK UNIFIED IDEOGRAPH
+0xE9F7,0x9D12, //#CJK UNIFIED IDEOGRAPH
+0xE9F8,0x9D41, //#CJK UNIFIED IDEOGRAPH
+0xE9F9,0x9D3F, //#CJK UNIFIED IDEOGRAPH
+0xE9FA,0x9D3E, //#CJK UNIFIED IDEOGRAPH
+0xE9FB,0x9D46, //#CJK UNIFIED IDEOGRAPH
+0xE9FC,0x9D48, //#CJK UNIFIED IDEOGRAPH
+0xEA40,0x9D5D, //#CJK UNIFIED IDEOGRAPH
+0xEA41,0x9D5E, //#CJK UNIFIED IDEOGRAPH
+0xEA42,0x9D64, //#CJK UNIFIED IDEOGRAPH
+0xEA43,0x9D51, //#CJK UNIFIED IDEOGRAPH
+0xEA44,0x9D50, //#CJK UNIFIED IDEOGRAPH
+0xEA45,0x9D59, //#CJK UNIFIED IDEOGRAPH
+0xEA46,0x9D72, //#CJK UNIFIED IDEOGRAPH
+0xEA47,0x9D89, //#CJK UNIFIED IDEOGRAPH
+0xEA48,0x9D87, //#CJK UNIFIED IDEOGRAPH
+0xEA49,0x9DAB, //#CJK UNIFIED IDEOGRAPH
+0xEA4A,0x9D6F, //#CJK UNIFIED IDEOGRAPH
+0xEA4B,0x9D7A, //#CJK UNIFIED IDEOGRAPH
+0xEA4C,0x9D9A, //#CJK UNIFIED IDEOGRAPH
+0xEA4D,0x9DA4, //#CJK UNIFIED IDEOGRAPH
+0xEA4E,0x9DA9, //#CJK UNIFIED IDEOGRAPH
+0xEA4F,0x9DB2, //#CJK UNIFIED IDEOGRAPH
+0xEA50,0x9DC4, //#CJK UNIFIED IDEOGRAPH
+0xEA51,0x9DC1, //#CJK UNIFIED IDEOGRAPH
+0xEA52,0x9DBB, //#CJK UNIFIED IDEOGRAPH
+0xEA53,0x9DB8, //#CJK UNIFIED IDEOGRAPH
+0xEA54,0x9DBA, //#CJK UNIFIED IDEOGRAPH
+0xEA55,0x9DC6, //#CJK UNIFIED IDEOGRAPH
+0xEA56,0x9DCF, //#CJK UNIFIED IDEOGRAPH
+0xEA57,0x9DC2, //#CJK UNIFIED IDEOGRAPH
+0xEA58,0x9DD9, //#CJK UNIFIED IDEOGRAPH
+0xEA59,0x9DD3, //#CJK UNIFIED IDEOGRAPH
+0xEA5A,0x9DF8, //#CJK UNIFIED IDEOGRAPH
+0xEA5B,0x9DE6, //#CJK UNIFIED IDEOGRAPH
+0xEA5C,0x9DED, //#CJK UNIFIED IDEOGRAPH
+0xEA5D,0x9DEF, //#CJK UNIFIED IDEOGRAPH
+0xEA5E,0x9DFD, //#CJK UNIFIED IDEOGRAPH
+0xEA5F,0x9E1A, //#CJK UNIFIED IDEOGRAPH
+0xEA60,0x9E1B, //#CJK UNIFIED IDEOGRAPH
+0xEA61,0x9E1E, //#CJK UNIFIED IDEOGRAPH
+0xEA62,0x9E75, //#CJK UNIFIED IDEOGRAPH
+0xEA63,0x9E79, //#CJK UNIFIED IDEOGRAPH
+0xEA64,0x9E7D, //#CJK UNIFIED IDEOGRAPH
+0xEA65,0x9E81, //#CJK UNIFIED IDEOGRAPH
+0xEA66,0x9E88, //#CJK UNIFIED IDEOGRAPH
+0xEA67,0x9E8B, //#CJK UNIFIED IDEOGRAPH
+0xEA68,0x9E8C, //#CJK UNIFIED IDEOGRAPH
+0xEA69,0x9E92, //#CJK UNIFIED IDEOGRAPH
+0xEA6A,0x9E95, //#CJK UNIFIED IDEOGRAPH
+0xEA6B,0x9E91, //#CJK UNIFIED IDEOGRAPH
+0xEA6C,0x9E9D, //#CJK UNIFIED IDEOGRAPH
+0xEA6D,0x9EA5, //#CJK UNIFIED IDEOGRAPH
+0xEA6E,0x9EA9, //#CJK UNIFIED IDEOGRAPH
+0xEA6F,0x9EB8, //#CJK UNIFIED IDEOGRAPH
+0xEA70,0x9EAA, //#CJK UNIFIED IDEOGRAPH
+0xEA71,0x9EAD, //#CJK UNIFIED IDEOGRAPH
+0xEA72,0x9761, //#CJK UNIFIED IDEOGRAPH
+0xEA73,0x9ECC, //#CJK UNIFIED IDEOGRAPH
+0xEA74,0x9ECE, //#CJK UNIFIED IDEOGRAPH
+0xEA75,0x9ECF, //#CJK UNIFIED IDEOGRAPH
+0xEA76,0x9ED0, //#CJK UNIFIED IDEOGRAPH
+0xEA77,0x9ED4, //#CJK UNIFIED IDEOGRAPH
+0xEA78,0x9EDC, //#CJK UNIFIED IDEOGRAPH
+0xEA79,0x9EDE, //#CJK UNIFIED IDEOGRAPH
+0xEA7A,0x9EDD, //#CJK UNIFIED IDEOGRAPH
+0xEA7B,0x9EE0, //#CJK UNIFIED IDEOGRAPH
+0xEA7C,0x9EE5, //#CJK UNIFIED IDEOGRAPH
+0xEA7D,0x9EE8, //#CJK UNIFIED IDEOGRAPH
+0xEA7E,0x9EEF, //#CJK UNIFIED IDEOGRAPH
+0xEA80,0x9EF4, //#CJK UNIFIED IDEOGRAPH
+0xEA81,0x9EF6, //#CJK UNIFIED IDEOGRAPH
+0xEA82,0x9EF7, //#CJK UNIFIED IDEOGRAPH
+0xEA83,0x9EF9, //#CJK UNIFIED IDEOGRAPH
+0xEA84,0x9EFB, //#CJK UNIFIED IDEOGRAPH
+0xEA85,0x9EFC, //#CJK UNIFIED IDEOGRAPH
+0xEA86,0x9EFD, //#CJK UNIFIED IDEOGRAPH
+0xEA87,0x9F07, //#CJK UNIFIED IDEOGRAPH
+0xEA88,0x9F08, //#CJK UNIFIED IDEOGRAPH
+0xEA89,0x76B7, //#CJK UNIFIED IDEOGRAPH
+0xEA8A,0x9F15, //#CJK UNIFIED IDEOGRAPH
+0xEA8B,0x9F21, //#CJK UNIFIED IDEOGRAPH
+0xEA8C,0x9F2C, //#CJK UNIFIED IDEOGRAPH
+0xEA8D,0x9F3E, //#CJK UNIFIED IDEOGRAPH
+0xEA8E,0x9F4A, //#CJK UNIFIED IDEOGRAPH
+0xEA8F,0x9F52, //#CJK UNIFIED IDEOGRAPH
+0xEA90,0x9F54, //#CJK UNIFIED IDEOGRAPH
+0xEA91,0x9F63, //#CJK UNIFIED IDEOGRAPH
+0xEA92,0x9F5F, //#CJK UNIFIED IDEOGRAPH
+0xEA93,0x9F60, //#CJK UNIFIED IDEOGRAPH
+0xEA94,0x9F61, //#CJK UNIFIED IDEOGRAPH
+0xEA95,0x9F66, //#CJK UNIFIED IDEOGRAPH
+0xEA96,0x9F67, //#CJK UNIFIED IDEOGRAPH
+0xEA97,0x9F6C, //#CJK UNIFIED IDEOGRAPH
+0xEA98,0x9F6A, //#CJK UNIFIED IDEOGRAPH
+0xEA99,0x9F77, //#CJK UNIFIED IDEOGRAPH
+0xEA9A,0x9F72, //#CJK UNIFIED IDEOGRAPH
+0xEA9B,0x9F76, //#CJK UNIFIED IDEOGRAPH
+0xEA9C,0x9F95, //#CJK UNIFIED IDEOGRAPH
+0xEA9D,0x9F9C, //#CJK UNIFIED IDEOGRAPH
+0xEA9E,0x9FA0, //#CJK UNIFIED IDEOGRAPH
+0xEA9F,0x582F, //#CJK UNIFIED IDEOGRAPH
+0xEAA0,0x69C7, //#CJK UNIFIED IDEOGRAPH
+0xEAA1,0x9059, //#CJK UNIFIED IDEOGRAPH
+0xEAA2,0x7464, //#CJK UNIFIED IDEOGRAPH
+0xEAA3,0x51DC, //#CJK UNIFIED IDEOGRAPH
+0xEAA4,0x7199, //#CJK UNIFIED IDEOGRAPH
+0xED40,0x7E8A, //#CJK UNIFIED IDEOGRAPH
+0xED41,0x891C, //#CJK UNIFIED IDEOGRAPH
+0xED42,0x9348, //#CJK UNIFIED IDEOGRAPH
+0xED43,0x9288, //#CJK UNIFIED IDEOGRAPH
+0xED44,0x84DC, //#CJK UNIFIED IDEOGRAPH
+0xED45,0x4FC9, //#CJK UNIFIED IDEOGRAPH
+0xED46,0x70BB, //#CJK UNIFIED IDEOGRAPH
+0xED47,0x6631, //#CJK UNIFIED IDEOGRAPH
+0xED48,0x68C8, //#CJK UNIFIED IDEOGRAPH
+0xED49,0x92F9, //#CJK UNIFIED IDEOGRAPH
+0xED4A,0x66FB, //#CJK UNIFIED IDEOGRAPH
+0xED4B,0x5F45, //#CJK UNIFIED IDEOGRAPH
+0xED4C,0x4E28, //#CJK UNIFIED IDEOGRAPH
+0xED4D,0x4EE1, //#CJK UNIFIED IDEOGRAPH
+0xED4E,0x4EFC, //#CJK UNIFIED IDEOGRAPH
+0xED4F,0x4F00, //#CJK UNIFIED IDEOGRAPH
+0xED50,0x4F03, //#CJK UNIFIED IDEOGRAPH
+0xED51,0x4F39, //#CJK UNIFIED IDEOGRAPH
+0xED52,0x4F56, //#CJK UNIFIED IDEOGRAPH
+0xED53,0x4F92, //#CJK UNIFIED IDEOGRAPH
+0xED54,0x4F8A, //#CJK UNIFIED IDEOGRAPH
+0xED55,0x4F9A, //#CJK UNIFIED IDEOGRAPH
+0xED56,0x4F94, //#CJK UNIFIED IDEOGRAPH
+0xED57,0x4FCD, //#CJK UNIFIED IDEOGRAPH
+0xED58,0x5040, //#CJK UNIFIED IDEOGRAPH
+0xED59,0x5022, //#CJK UNIFIED IDEOGRAPH
+0xED5A,0x4FFF, //#CJK UNIFIED IDEOGRAPH
+0xED5B,0x501E, //#CJK UNIFIED IDEOGRAPH
+0xED5C,0x5046, //#CJK UNIFIED IDEOGRAPH
+0xED5D,0x5070, //#CJK UNIFIED IDEOGRAPH
+0xED5E,0x5042, //#CJK UNIFIED IDEOGRAPH
+0xED5F,0x5094, //#CJK UNIFIED IDEOGRAPH
+0xED60,0x50F4, //#CJK UNIFIED IDEOGRAPH
+0xED61,0x50D8, //#CJK UNIFIED IDEOGRAPH
+0xED62,0x514A, //#CJK UNIFIED IDEOGRAPH
+0xED63,0x5164, //#CJK UNIFIED IDEOGRAPH
+0xED64,0x519D, //#CJK UNIFIED IDEOGRAPH
+0xED65,0x51BE, //#CJK UNIFIED IDEOGRAPH
+0xED66,0x51EC, //#CJK UNIFIED IDEOGRAPH
+0xED67,0x5215, //#CJK UNIFIED IDEOGRAPH
+0xED68,0x529C, //#CJK UNIFIED IDEOGRAPH
+0xED69,0x52A6, //#CJK UNIFIED IDEOGRAPH
+0xED6A,0x52C0, //#CJK UNIFIED IDEOGRAPH
+0xED6B,0x52DB, //#CJK UNIFIED IDEOGRAPH
+0xED6C,0x5300, //#CJK UNIFIED IDEOGRAPH
+0xED6D,0x5307, //#CJK UNIFIED IDEOGRAPH
+0xED6E,0x5324, //#CJK UNIFIED IDEOGRAPH
+0xED6F,0x5372, //#CJK UNIFIED IDEOGRAPH
+0xED70,0x5393, //#CJK UNIFIED IDEOGRAPH
+0xED71,0x53B2, //#CJK UNIFIED IDEOGRAPH
+0xED72,0x53DD, //#CJK UNIFIED IDEOGRAPH
+0xED73,0xFA0E, //#CJK COMPATIBILITY IDEOGRAPH
+0xED74,0x549C, //#CJK UNIFIED IDEOGRAPH
+0xED75,0x548A, //#CJK UNIFIED IDEOGRAPH
+0xED76,0x54A9, //#CJK UNIFIED IDEOGRAPH
+0xED77,0x54FF, //#CJK UNIFIED IDEOGRAPH
+0xED78,0x5586, //#CJK UNIFIED IDEOGRAPH
+0xED79,0x5759, //#CJK UNIFIED IDEOGRAPH
+0xED7A,0x5765, //#CJK UNIFIED IDEOGRAPH
+0xED7B,0x57AC, //#CJK UNIFIED IDEOGRAPH
+0xED7C,0x57C8, //#CJK UNIFIED IDEOGRAPH
+0xED7D,0x57C7, //#CJK UNIFIED IDEOGRAPH
+0xED7E,0xFA0F, //#CJK COMPATIBILITY IDEOGRAPH
+0xED80,0xFA10, //#CJK COMPATIBILITY IDEOGRAPH
+0xED81,0x589E, //#CJK UNIFIED IDEOGRAPH
+0xED82,0x58B2, //#CJK UNIFIED IDEOGRAPH
+0xED83,0x590B, //#CJK UNIFIED IDEOGRAPH
+0xED84,0x5953, //#CJK UNIFIED IDEOGRAPH
+0xED85,0x595B, //#CJK UNIFIED IDEOGRAPH
+0xED86,0x595D, //#CJK UNIFIED IDEOGRAPH
+0xED87,0x5963, //#CJK UNIFIED IDEOGRAPH
+0xED88,0x59A4, //#CJK UNIFIED IDEOGRAPH
+0xED89,0x59BA, //#CJK UNIFIED IDEOGRAPH
+0xED8A,0x5B56, //#CJK UNIFIED IDEOGRAPH
+0xED8B,0x5BC0, //#CJK UNIFIED IDEOGRAPH
+0xED8C,0x752F, //#CJK UNIFIED IDEOGRAPH
+0xED8D,0x5BD8, //#CJK UNIFIED IDEOGRAPH
+0xED8E,0x5BEC, //#CJK UNIFIED IDEOGRAPH
+0xED8F,0x5C1E, //#CJK UNIFIED IDEOGRAPH
+0xED90,0x5CA6, //#CJK UNIFIED IDEOGRAPH
+0xED91,0x5CBA, //#CJK UNIFIED IDEOGRAPH
+0xED92,0x5CF5, //#CJK UNIFIED IDEOGRAPH
+0xED93,0x5D27, //#CJK UNIFIED IDEOGRAPH
+0xED94,0x5D53, //#CJK UNIFIED IDEOGRAPH
+0xED95,0xFA11, //#CJK COMPATIBILITY IDEOGRAPH
+0xED96,0x5D42, //#CJK UNIFIED IDEOGRAPH
+0xED97,0x5D6D, //#CJK UNIFIED IDEOGRAPH
+0xED98,0x5DB8, //#CJK UNIFIED IDEOGRAPH
+0xED99,0x5DB9, //#CJK UNIFIED IDEOGRAPH
+0xED9A,0x5DD0, //#CJK UNIFIED IDEOGRAPH
+0xED9B,0x5F21, //#CJK UNIFIED IDEOGRAPH
+0xED9C,0x5F34, //#CJK UNIFIED IDEOGRAPH
+0xED9D,0x5F67, //#CJK UNIFIED IDEOGRAPH
+0xED9E,0x5FB7, //#CJK UNIFIED IDEOGRAPH
+0xED9F,0x5FDE, //#CJK UNIFIED IDEOGRAPH
+0xEDA0,0x605D, //#CJK UNIFIED IDEOGRAPH
+0xEDA1,0x6085, //#CJK UNIFIED IDEOGRAPH
+0xEDA2,0x608A, //#CJK UNIFIED IDEOGRAPH
+0xEDA3,0x60DE, //#CJK UNIFIED IDEOGRAPH
+0xEDA4,0x60D5, //#CJK UNIFIED IDEOGRAPH
+0xEDA5,0x6120, //#CJK UNIFIED IDEOGRAPH
+0xEDA6,0x60F2, //#CJK UNIFIED IDEOGRAPH
+0xEDA7,0x6111, //#CJK UNIFIED IDEOGRAPH
+0xEDA8,0x6137, //#CJK UNIFIED IDEOGRAPH
+0xEDA9,0x6130, //#CJK UNIFIED IDEOGRAPH
+0xEDAA,0x6198, //#CJK UNIFIED IDEOGRAPH
+0xEDAB,0x6213, //#CJK UNIFIED IDEOGRAPH
+0xEDAC,0x62A6, //#CJK UNIFIED IDEOGRAPH
+0xEDAD,0x63F5, //#CJK UNIFIED IDEOGRAPH
+0xEDAE,0x6460, //#CJK UNIFIED IDEOGRAPH
+0xEDAF,0x649D, //#CJK UNIFIED IDEOGRAPH
+0xEDB0,0x64CE, //#CJK UNIFIED IDEOGRAPH
+0xEDB1,0x654E, //#CJK UNIFIED IDEOGRAPH
+0xEDB2,0x6600, //#CJK UNIFIED IDEOGRAPH
+0xEDB3,0x6615, //#CJK UNIFIED IDEOGRAPH
+0xEDB4,0x663B, //#CJK UNIFIED IDEOGRAPH
+0xEDB5,0x6609, //#CJK UNIFIED IDEOGRAPH
+0xEDB6,0x662E, //#CJK UNIFIED IDEOGRAPH
+0xEDB7,0x661E, //#CJK UNIFIED IDEOGRAPH
+0xEDB8,0x6624, //#CJK UNIFIED IDEOGRAPH
+0xEDB9,0x6665, //#CJK UNIFIED IDEOGRAPH
+0xEDBA,0x6657, //#CJK UNIFIED IDEOGRAPH
+0xEDBB,0x6659, //#CJK UNIFIED IDEOGRAPH
+0xEDBC,0xFA12, //#CJK COMPATIBILITY IDEOGRAPH
+0xEDBD,0x6673, //#CJK UNIFIED IDEOGRAPH
+0xEDBE,0x6699, //#CJK UNIFIED IDEOGRAPH
+0xEDBF,0x66A0, //#CJK UNIFIED IDEOGRAPH
+0xEDC0,0x66B2, //#CJK UNIFIED IDEOGRAPH
+0xEDC1,0x66BF, //#CJK UNIFIED IDEOGRAPH
+0xEDC2,0x66FA, //#CJK UNIFIED IDEOGRAPH
+0xEDC3,0x670E, //#CJK UNIFIED IDEOGRAPH
+0xEDC4,0xF929, //#CJK COMPATIBILITY IDEOGRAPH
+0xEDC5,0x6766, //#CJK UNIFIED IDEOGRAPH
+0xEDC6,0x67BB, //#CJK UNIFIED IDEOGRAPH
+0xEDC7,0x6852, //#CJK UNIFIED IDEOGRAPH
+0xEDC8,0x67C0, //#CJK UNIFIED IDEOGRAPH
+0xEDC9,0x6801, //#CJK UNIFIED IDEOGRAPH
+0xEDCA,0x6844, //#CJK UNIFIED IDEOGRAPH
+0xEDCB,0x68CF, //#CJK UNIFIED IDEOGRAPH
+0xEDCC,0xFA13, //#CJK COMPATIBILITY IDEOGRAPH
+0xEDCD,0x6968, //#CJK UNIFIED IDEOGRAPH
+0xEDCE,0xFA14, //#CJK COMPATIBILITY IDEOGRAPH
+0xEDCF,0x6998, //#CJK UNIFIED IDEOGRAPH
+0xEDD0,0x69E2, //#CJK UNIFIED IDEOGRAPH
+0xEDD1,0x6A30, //#CJK UNIFIED IDEOGRAPH
+0xEDD2,0x6A6B, //#CJK UNIFIED IDEOGRAPH
+0xEDD3,0x6A46, //#CJK UNIFIED IDEOGRAPH
+0xEDD4,0x6A73, //#CJK UNIFIED IDEOGRAPH
+0xEDD5,0x6A7E, //#CJK UNIFIED IDEOGRAPH
+0xEDD6,0x6AE2, //#CJK UNIFIED IDEOGRAPH
+0xEDD7,0x6AE4, //#CJK UNIFIED IDEOGRAPH
+0xEDD8,0x6BD6, //#CJK UNIFIED IDEOGRAPH
+0xEDD9,0x6C3F, //#CJK UNIFIED IDEOGRAPH
+0xEDDA,0x6C5C, //#CJK UNIFIED IDEOGRAPH
+0xEDDB,0x6C86, //#CJK UNIFIED IDEOGRAPH
+0xEDDC,0x6C6F, //#CJK UNIFIED IDEOGRAPH
+0xEDDD,0x6CDA, //#CJK UNIFIED IDEOGRAPH
+0xEDDE,0x6D04, //#CJK UNIFIED IDEOGRAPH
+0xEDDF,0x6D87, //#CJK UNIFIED IDEOGRAPH
+0xEDE0,0x6D6F, //#CJK UNIFIED IDEOGRAPH
+0xEDE1,0x6D96, //#CJK UNIFIED IDEOGRAPH
+0xEDE2,0x6DAC, //#CJK UNIFIED IDEOGRAPH
+0xEDE3,0x6DCF, //#CJK UNIFIED IDEOGRAPH
+0xEDE4,0x6DF8, //#CJK UNIFIED IDEOGRAPH
+0xEDE5,0x6DF2, //#CJK UNIFIED IDEOGRAPH
+0xEDE6,0x6DFC, //#CJK UNIFIED IDEOGRAPH
+0xEDE7,0x6E39, //#CJK UNIFIED IDEOGRAPH
+0xEDE8,0x6E5C, //#CJK UNIFIED IDEOGRAPH
+0xEDE9,0x6E27, //#CJK UNIFIED IDEOGRAPH
+0xEDEA,0x6E3C, //#CJK UNIFIED IDEOGRAPH
+0xEDEB,0x6EBF, //#CJK UNIFIED IDEOGRAPH
+0xEDEC,0x6F88, //#CJK UNIFIED IDEOGRAPH
+0xEDED,0x6FB5, //#CJK UNIFIED IDEOGRAPH
+0xEDEE,0x6FF5, //#CJK UNIFIED IDEOGRAPH
+0xEDEF,0x7005, //#CJK UNIFIED IDEOGRAPH
+0xEDF0,0x7007, //#CJK UNIFIED IDEOGRAPH
+0xEDF1,0x7028, //#CJK UNIFIED IDEOGRAPH
+0xEDF2,0x7085, //#CJK UNIFIED IDEOGRAPH
+0xEDF3,0x70AB, //#CJK UNIFIED IDEOGRAPH
+0xEDF4,0x710F, //#CJK UNIFIED IDEOGRAPH
+0xEDF5,0x7104, //#CJK UNIFIED IDEOGRAPH
+0xEDF6,0x715C, //#CJK UNIFIED IDEOGRAPH
+0xEDF7,0x7146, //#CJK UNIFIED IDEOGRAPH
+0xEDF8,0x7147, //#CJK UNIFIED IDEOGRAPH
+0xEDF9,0xFA15, //#CJK COMPATIBILITY IDEOGRAPH
+0xEDFA,0x71C1, //#CJK UNIFIED IDEOGRAPH
+0xEDFB,0x71FE, //#CJK UNIFIED IDEOGRAPH
+0xEDFC,0x72B1, //#CJK UNIFIED IDEOGRAPH
+0xEE40,0x72BE, //#CJK UNIFIED IDEOGRAPH
+0xEE41,0x7324, //#CJK UNIFIED IDEOGRAPH
+0xEE42,0xFA16, //#CJK COMPATIBILITY IDEOGRAPH
+0xEE43,0x7377, //#CJK UNIFIED IDEOGRAPH
+0xEE44,0x73BD, //#CJK UNIFIED IDEOGRAPH
+0xEE45,0x73C9, //#CJK UNIFIED IDEOGRAPH
+0xEE46,0x73D6, //#CJK UNIFIED IDEOGRAPH
+0xEE47,0x73E3, //#CJK UNIFIED IDEOGRAPH
+0xEE48,0x73D2, //#CJK UNIFIED IDEOGRAPH
+0xEE49,0x7407, //#CJK UNIFIED IDEOGRAPH
+0xEE4A,0x73F5, //#CJK UNIFIED IDEOGRAPH
+0xEE4B,0x7426, //#CJK UNIFIED IDEOGRAPH
+0xEE4C,0x742A, //#CJK UNIFIED IDEOGRAPH
+0xEE4D,0x7429, //#CJK UNIFIED IDEOGRAPH
+0xEE4E,0x742E, //#CJK UNIFIED IDEOGRAPH
+0xEE4F,0x7462, //#CJK UNIFIED IDEOGRAPH
+0xEE50,0x7489, //#CJK UNIFIED IDEOGRAPH
+0xEE51,0x749F, //#CJK UNIFIED IDEOGRAPH
+0xEE52,0x7501, //#CJK UNIFIED IDEOGRAPH
+0xEE53,0x756F, //#CJK UNIFIED IDEOGRAPH
+0xEE54,0x7682, //#CJK UNIFIED IDEOGRAPH
+0xEE55,0x769C, //#CJK UNIFIED IDEOGRAPH
+0xEE56,0x769E, //#CJK UNIFIED IDEOGRAPH
+0xEE57,0x769B, //#CJK UNIFIED IDEOGRAPH
+0xEE58,0x76A6, //#CJK UNIFIED IDEOGRAPH
+0xEE59,0xFA17, //#CJK COMPATIBILITY IDEOGRAPH
+0xEE5A,0x7746, //#CJK UNIFIED IDEOGRAPH
+0xEE5B,0x52AF, //#CJK UNIFIED IDEOGRAPH
+0xEE5C,0x7821, //#CJK UNIFIED IDEOGRAPH
+0xEE5D,0x784E, //#CJK UNIFIED IDEOGRAPH
+0xEE5E,0x7864, //#CJK UNIFIED IDEOGRAPH
+0xEE5F,0x787A, //#CJK UNIFIED IDEOGRAPH
+0xEE60,0x7930, //#CJK UNIFIED IDEOGRAPH
+0xEE61,0xFA18, //#CJK COMPATIBILITY IDEOGRAPH
+0xEE62,0xFA19, //#CJK COMPATIBILITY IDEOGRAPH
+0xEE63,0xFA1A, //#CJK COMPATIBILITY IDEOGRAPH
+0xEE64,0x7994, //#CJK UNIFIED IDEOGRAPH
+0xEE65,0xFA1B, //#CJK COMPATIBILITY IDEOGRAPH
+0xEE66,0x799B, //#CJK UNIFIED IDEOGRAPH
+0xEE67,0x7AD1, //#CJK UNIFIED IDEOGRAPH
+0xEE68,0x7AE7, //#CJK UNIFIED IDEOGRAPH
+0xEE69,0xFA1C, //#CJK COMPATIBILITY IDEOGRAPH
+0xEE6A,0x7AEB, //#CJK UNIFIED IDEOGRAPH
+0xEE6B,0x7B9E, //#CJK UNIFIED IDEOGRAPH
+0xEE6C,0xFA1D, //#CJK COMPATIBILITY IDEOGRAPH
+0xEE6D,0x7D48, //#CJK UNIFIED IDEOGRAPH
+0xEE6E,0x7D5C, //#CJK UNIFIED IDEOGRAPH
+0xEE6F,0x7DB7, //#CJK UNIFIED IDEOGRAPH
+0xEE70,0x7DA0, //#CJK UNIFIED IDEOGRAPH
+0xEE71,0x7DD6, //#CJK UNIFIED IDEOGRAPH
+0xEE72,0x7E52, //#CJK UNIFIED IDEOGRAPH
+0xEE73,0x7F47, //#CJK UNIFIED IDEOGRAPH
+0xEE74,0x7FA1, //#CJK UNIFIED IDEOGRAPH
+0xEE75,0xFA1E, //#CJK COMPATIBILITY IDEOGRAPH
+0xEE76,0x8301, //#CJK UNIFIED IDEOGRAPH
+0xEE77,0x8362, //#CJK UNIFIED IDEOGRAPH
+0xEE78,0x837F, //#CJK UNIFIED IDEOGRAPH
+0xEE79,0x83C7, //#CJK UNIFIED IDEOGRAPH
+0xEE7A,0x83F6, //#CJK UNIFIED IDEOGRAPH
+0xEE7B,0x8448, //#CJK UNIFIED IDEOGRAPH
+0xEE7C,0x84B4, //#CJK UNIFIED IDEOGRAPH
+0xEE7D,0x8553, //#CJK UNIFIED IDEOGRAPH
+0xEE7E,0x8559, //#CJK UNIFIED IDEOGRAPH
+0xEE80,0x856B, //#CJK UNIFIED IDEOGRAPH
+0xEE81,0xFA1F, //#CJK COMPATIBILITY IDEOGRAPH
+0xEE82,0x85B0, //#CJK UNIFIED IDEOGRAPH
+0xEE83,0xFA20, //#CJK COMPATIBILITY IDEOGRAPH
+0xEE84,0xFA21, //#CJK COMPATIBILITY IDEOGRAPH
+0xEE85,0x8807, //#CJK UNIFIED IDEOGRAPH
+0xEE86,0x88F5, //#CJK UNIFIED IDEOGRAPH
+0xEE87,0x8A12, //#CJK UNIFIED IDEOGRAPH
+0xEE88,0x8A37, //#CJK UNIFIED IDEOGRAPH
+0xEE89,0x8A79, //#CJK UNIFIED IDEOGRAPH
+0xEE8A,0x8AA7, //#CJK UNIFIED IDEOGRAPH
+0xEE8B,0x8ABE, //#CJK UNIFIED IDEOGRAPH
+0xEE8C,0x8ADF, //#CJK UNIFIED IDEOGRAPH
+0xEE8D,0xFA22, //#CJK COMPATIBILITY IDEOGRAPH
+0xEE8E,0x8AF6, //#CJK UNIFIED IDEOGRAPH
+0xEE8F,0x8B53, //#CJK UNIFIED IDEOGRAPH
+0xEE90,0x8B7F, //#CJK UNIFIED IDEOGRAPH
+0xEE91,0x8CF0, //#CJK UNIFIED IDEOGRAPH
+0xEE92,0x8CF4, //#CJK UNIFIED IDEOGRAPH
+0xEE93,0x8D12, //#CJK UNIFIED IDEOGRAPH
+0xEE94,0x8D76, //#CJK UNIFIED IDEOGRAPH
+0xEE95,0xFA23, //#CJK COMPATIBILITY IDEOGRAPH
+0xEE96,0x8ECF, //#CJK UNIFIED IDEOGRAPH
+0xEE97,0xFA24, //#CJK COMPATIBILITY IDEOGRAPH
+0xEE98,0xFA25, //#CJK COMPATIBILITY IDEOGRAPH
+0xEE99,0x9067, //#CJK UNIFIED IDEOGRAPH
+0xEE9A,0x90DE, //#CJK UNIFIED IDEOGRAPH
+0xEE9B,0xFA26, //#CJK COMPATIBILITY IDEOGRAPH
+0xEE9C,0x9115, //#CJK UNIFIED IDEOGRAPH
+0xEE9D,0x9127, //#CJK UNIFIED IDEOGRAPH
+0xEE9E,0x91DA, //#CJK UNIFIED IDEOGRAPH
+0xEE9F,0x91D7, //#CJK UNIFIED IDEOGRAPH
+0xEEA0,0x91DE, //#CJK UNIFIED IDEOGRAPH
+0xEEA1,0x91ED, //#CJK UNIFIED IDEOGRAPH
+0xEEA2,0x91EE, //#CJK UNIFIED IDEOGRAPH
+0xEEA3,0x91E4, //#CJK UNIFIED IDEOGRAPH
+0xEEA4,0x91E5, //#CJK UNIFIED IDEOGRAPH
+0xEEA5,0x9206, //#CJK UNIFIED IDEOGRAPH
+0xEEA6,0x9210, //#CJK UNIFIED IDEOGRAPH
+0xEEA7,0x920A, //#CJK UNIFIED IDEOGRAPH
+0xEEA8,0x923A, //#CJK UNIFIED IDEOGRAPH
+0xEEA9,0x9240, //#CJK UNIFIED IDEOGRAPH
+0xEEAA,0x923C, //#CJK UNIFIED IDEOGRAPH
+0xEEAB,0x924E, //#CJK UNIFIED IDEOGRAPH
+0xEEAC,0x9259, //#CJK UNIFIED IDEOGRAPH
+0xEEAD,0x9251, //#CJK UNIFIED IDEOGRAPH
+0xEEAE,0x9239, //#CJK UNIFIED IDEOGRAPH
+0xEEAF,0x9267, //#CJK UNIFIED IDEOGRAPH
+0xEEB0,0x92A7, //#CJK UNIFIED IDEOGRAPH
+0xEEB1,0x9277, //#CJK UNIFIED IDEOGRAPH
+0xEEB2,0x9278, //#CJK UNIFIED IDEOGRAPH
+0xEEB3,0x92E7, //#CJK UNIFIED IDEOGRAPH
+0xEEB4,0x92D7, //#CJK UNIFIED IDEOGRAPH
+0xEEB5,0x92D9, //#CJK UNIFIED IDEOGRAPH
+0xEEB6,0x92D0, //#CJK UNIFIED IDEOGRAPH
+0xEEB7,0xFA27, //#CJK COMPATIBILITY IDEOGRAPH
+0xEEB8,0x92D5, //#CJK UNIFIED IDEOGRAPH
+0xEEB9,0x92E0, //#CJK UNIFIED IDEOGRAPH
+0xEEBA,0x92D3, //#CJK UNIFIED IDEOGRAPH
+0xEEBB,0x9325, //#CJK UNIFIED IDEOGRAPH
+0xEEBC,0x9321, //#CJK UNIFIED IDEOGRAPH
+0xEEBD,0x92FB, //#CJK UNIFIED IDEOGRAPH
+0xEEBE,0xFA28, //#CJK COMPATIBILITY IDEOGRAPH
+0xEEBF,0x931E, //#CJK UNIFIED IDEOGRAPH
+0xEEC0,0x92FF, //#CJK UNIFIED IDEOGRAPH
+0xEEC1,0x931D, //#CJK UNIFIED IDEOGRAPH
+0xEEC2,0x9302, //#CJK UNIFIED IDEOGRAPH
+0xEEC3,0x9370, //#CJK UNIFIED IDEOGRAPH
+0xEEC4,0x9357, //#CJK UNIFIED IDEOGRAPH
+0xEEC5,0x93A4, //#CJK UNIFIED IDEOGRAPH
+0xEEC6,0x93C6, //#CJK UNIFIED IDEOGRAPH
+0xEEC7,0x93DE, //#CJK UNIFIED IDEOGRAPH
+0xEEC8,0x93F8, //#CJK UNIFIED IDEOGRAPH
+0xEEC9,0x9431, //#CJK UNIFIED IDEOGRAPH
+0xEECA,0x9445, //#CJK UNIFIED IDEOGRAPH
+0xEECB,0x9448, //#CJK UNIFIED IDEOGRAPH
+0xEECC,0x9592, //#CJK UNIFIED IDEOGRAPH
+0xEECD,0xF9DC, //#CJK COMPATIBILITY IDEOGRAPH
+0xEECE,0xFA29, //#CJK COMPATIBILITY IDEOGRAPH
+0xEECF,0x969D, //#CJK UNIFIED IDEOGRAPH
+0xEED0,0x96AF, //#CJK UNIFIED IDEOGRAPH
+0xEED1,0x9733, //#CJK UNIFIED IDEOGRAPH
+0xEED2,0x973B, //#CJK UNIFIED IDEOGRAPH
+0xEED3,0x9743, //#CJK UNIFIED IDEOGRAPH
+0xEED4,0x974D, //#CJK UNIFIED IDEOGRAPH
+0xEED5,0x974F, //#CJK UNIFIED IDEOGRAPH
+0xEED6,0x9751, //#CJK UNIFIED IDEOGRAPH
+0xEED7,0x9755, //#CJK UNIFIED IDEOGRAPH
+0xEED8,0x9857, //#CJK UNIFIED IDEOGRAPH
+0xEED9,0x9865, //#CJK UNIFIED IDEOGRAPH
+0xEEDA,0xFA2A, //#CJK COMPATIBILITY IDEOGRAPH
+0xEEDB,0xFA2B, //#CJK COMPATIBILITY IDEOGRAPH
+0xEEDC,0x9927, //#CJK UNIFIED IDEOGRAPH
+0xEEDD,0xFA2C, //#CJK COMPATIBILITY IDEOGRAPH
+0xEEDE,0x999E, //#CJK UNIFIED IDEOGRAPH
+0xEEDF,0x9A4E, //#CJK UNIFIED IDEOGRAPH
+0xEEE0,0x9AD9, //#CJK UNIFIED IDEOGRAPH
+0xEEE1,0x9ADC, //#CJK UNIFIED IDEOGRAPH
+0xEEE2,0x9B75, //#CJK UNIFIED IDEOGRAPH
+0xEEE3,0x9B72, //#CJK UNIFIED IDEOGRAPH
+0xEEE4,0x9B8F, //#CJK UNIFIED IDEOGRAPH
+0xEEE5,0x9BB1, //#CJK UNIFIED IDEOGRAPH
+0xEEE6,0x9BBB, //#CJK UNIFIED IDEOGRAPH
+0xEEE7,0x9C00, //#CJK UNIFIED IDEOGRAPH
+0xEEE8,0x9D70, //#CJK UNIFIED IDEOGRAPH
+0xEEE9,0x9D6B, //#CJK UNIFIED IDEOGRAPH
+0xEEEA,0xFA2D, //#CJK COMPATIBILITY IDEOGRAPH
+0xEEEB,0x9E19, //#CJK UNIFIED IDEOGRAPH
+0xEEEC,0x9ED1, //#CJK UNIFIED IDEOGRAPH
+0xEEEF,0x2170, //#SMALL ROMAN NUMERAL ONE
+0xEEF0,0x2171, //#SMALL ROMAN NUMERAL TWO
+0xEEF1,0x2172, //#SMALL ROMAN NUMERAL THREE
+0xEEF2,0x2173, //#SMALL ROMAN NUMERAL FOUR
+0xEEF3,0x2174, //#SMALL ROMAN NUMERAL FIVE
+0xEEF4,0x2175, //#SMALL ROMAN NUMERAL SIX
+0xEEF5,0x2176, //#SMALL ROMAN NUMERAL SEVEN
+0xEEF6,0x2177, //#SMALL ROMAN NUMERAL EIGHT
+0xEEF7,0x2178, //#SMALL ROMAN NUMERAL NINE
+0xEEF8,0x2179, //#SMALL ROMAN NUMERAL TEN
+0xEEF9,0xFFE2, //#FULLWIDTH NOT SIGN
+0xEEFA,0xFFE4, //#FULLWIDTH BROKEN BAR
+0xEEFB,0xFF07, //#FULLWIDTH APOSTROPHE
+0xEEFC,0xFF02, //#FULLWIDTH QUOTATION MARK
+0xFA40,0x2170, //#SMALL ROMAN NUMERAL ONE
+0xFA41,0x2171, //#SMALL ROMAN NUMERAL TWO
+0xFA42,0x2172, //#SMALL ROMAN NUMERAL THREE
+0xFA43,0x2173, //#SMALL ROMAN NUMERAL FOUR
+0xFA44,0x2174, //#SMALL ROMAN NUMERAL FIVE
+0xFA45,0x2175, //#SMALL ROMAN NUMERAL SIX
+0xFA46,0x2176, //#SMALL ROMAN NUMERAL SEVEN
+0xFA47,0x2177, //#SMALL ROMAN NUMERAL EIGHT
+0xFA48,0x2178, //#SMALL ROMAN NUMERAL NINE
+0xFA49,0x2179, //#SMALL ROMAN NUMERAL TEN
+0xFA4A,0x2160, //#ROMAN NUMERAL ONE
+0xFA4B,0x2161, //#ROMAN NUMERAL TWO
+0xFA4C,0x2162, //#ROMAN NUMERAL THREE
+0xFA4D,0x2163, //#ROMAN NUMERAL FOUR
+0xFA4E,0x2164, //#ROMAN NUMERAL FIVE
+0xFA4F,0x2165, //#ROMAN NUMERAL SIX
+0xFA50,0x2166, //#ROMAN NUMERAL SEVEN
+0xFA51,0x2167, //#ROMAN NUMERAL EIGHT
+0xFA52,0x2168, //#ROMAN NUMERAL NINE
+0xFA53,0x2169, //#ROMAN NUMERAL TEN
+0xFA54,0xFFE2, //#FULLWIDTH NOT SIGN
+0xFA55,0xFFE4, //#FULLWIDTH BROKEN BAR
+0xFA56,0xFF07, //#FULLWIDTH APOSTROPHE
+0xFA57,0xFF02, //#FULLWIDTH QUOTATION MARK
+0xFA58,0x3231, //#PARENTHESIZED IDEOGRAPH STOCK
+0xFA59,0x2116, //#NUMERO SIGN
+0xFA5A,0x2121, //#TELEPHONE SIGN
+0xFA5B,0x2235, //#BECAUSE
+0xFA5C,0x7E8A, //#CJK UNIFIED IDEOGRAPH
+0xFA5D,0x891C, //#CJK UNIFIED IDEOGRAPH
+0xFA5E,0x9348, //#CJK UNIFIED IDEOGRAPH
+0xFA5F,0x9288, //#CJK UNIFIED IDEOGRAPH
+0xFA60,0x84DC, //#CJK UNIFIED IDEOGRAPH
+0xFA61,0x4FC9, //#CJK UNIFIED IDEOGRAPH
+0xFA62,0x70BB, //#CJK UNIFIED IDEOGRAPH
+0xFA63,0x6631, //#CJK UNIFIED IDEOGRAPH
+0xFA64,0x68C8, //#CJK UNIFIED IDEOGRAPH
+0xFA65,0x92F9, //#CJK UNIFIED IDEOGRAPH
+0xFA66,0x66FB, //#CJK UNIFIED IDEOGRAPH
+0xFA67,0x5F45, //#CJK UNIFIED IDEOGRAPH
+0xFA68,0x4E28, //#CJK UNIFIED IDEOGRAPH
+0xFA69,0x4EE1, //#CJK UNIFIED IDEOGRAPH
+0xFA6A,0x4EFC, //#CJK UNIFIED IDEOGRAPH
+0xFA6B,0x4F00, //#CJK UNIFIED IDEOGRAPH
+0xFA6C,0x4F03, //#CJK UNIFIED IDEOGRAPH
+0xFA6D,0x4F39, //#CJK UNIFIED IDEOGRAPH
+0xFA6E,0x4F56, //#CJK UNIFIED IDEOGRAPH
+0xFA6F,0x4F92, //#CJK UNIFIED IDEOGRAPH
+0xFA70,0x4F8A, //#CJK UNIFIED IDEOGRAPH
+0xFA71,0x4F9A, //#CJK UNIFIED IDEOGRAPH
+0xFA72,0x4F94, //#CJK UNIFIED IDEOGRAPH
+0xFA73,0x4FCD, //#CJK UNIFIED IDEOGRAPH
+0xFA74,0x5040, //#CJK UNIFIED IDEOGRAPH
+0xFA75,0x5022, //#CJK UNIFIED IDEOGRAPH
+0xFA76,0x4FFF, //#CJK UNIFIED IDEOGRAPH
+0xFA77,0x501E, //#CJK UNIFIED IDEOGRAPH
+0xFA78,0x5046, //#CJK UNIFIED IDEOGRAPH
+0xFA79,0x5070, //#CJK UNIFIED IDEOGRAPH
+0xFA7A,0x5042, //#CJK UNIFIED IDEOGRAPH
+0xFA7B,0x5094, //#CJK UNIFIED IDEOGRAPH
+0xFA7C,0x50F4, //#CJK UNIFIED IDEOGRAPH
+0xFA7D,0x50D8, //#CJK UNIFIED IDEOGRAPH
+0xFA7E,0x514A, //#CJK UNIFIED IDEOGRAPH
+0xFA80,0x5164, //#CJK UNIFIED IDEOGRAPH
+0xFA81,0x519D, //#CJK UNIFIED IDEOGRAPH
+0xFA82,0x51BE, //#CJK UNIFIED IDEOGRAPH
+0xFA83,0x51EC, //#CJK UNIFIED IDEOGRAPH
+0xFA84,0x5215, //#CJK UNIFIED IDEOGRAPH
+0xFA85,0x529C, //#CJK UNIFIED IDEOGRAPH
+0xFA86,0x52A6, //#CJK UNIFIED IDEOGRAPH
+0xFA87,0x52C0, //#CJK UNIFIED IDEOGRAPH
+0xFA88,0x52DB, //#CJK UNIFIED IDEOGRAPH
+0xFA89,0x5300, //#CJK UNIFIED IDEOGRAPH
+0xFA8A,0x5307, //#CJK UNIFIED IDEOGRAPH
+0xFA8B,0x5324, //#CJK UNIFIED IDEOGRAPH
+0xFA8C,0x5372, //#CJK UNIFIED IDEOGRAPH
+0xFA8D,0x5393, //#CJK UNIFIED IDEOGRAPH
+0xFA8E,0x53B2, //#CJK UNIFIED IDEOGRAPH
+0xFA8F,0x53DD, //#CJK UNIFIED IDEOGRAPH
+0xFA90,0xFA0E, //#CJK COMPATIBILITY IDEOGRAPH
+0xFA91,0x549C, //#CJK UNIFIED IDEOGRAPH
+0xFA92,0x548A, //#CJK UNIFIED IDEOGRAPH
+0xFA93,0x54A9, //#CJK UNIFIED IDEOGRAPH
+0xFA94,0x54FF, //#CJK UNIFIED IDEOGRAPH
+0xFA95,0x5586, //#CJK UNIFIED IDEOGRAPH
+0xFA96,0x5759, //#CJK UNIFIED IDEOGRAPH
+0xFA97,0x5765, //#CJK UNIFIED IDEOGRAPH
+0xFA98,0x57AC, //#CJK UNIFIED IDEOGRAPH
+0xFA99,0x57C8, //#CJK UNIFIED IDEOGRAPH
+0xFA9A,0x57C7, //#CJK UNIFIED IDEOGRAPH
+0xFA9B,0xFA0F, //#CJK COMPATIBILITY IDEOGRAPH
+0xFA9C,0xFA10, //#CJK COMPATIBILITY IDEOGRAPH
+0xFA9D,0x589E, //#CJK UNIFIED IDEOGRAPH
+0xFA9E,0x58B2, //#CJK UNIFIED IDEOGRAPH
+0xFA9F,0x590B, //#CJK UNIFIED IDEOGRAPH
+0xFAA0,0x5953, //#CJK UNIFIED IDEOGRAPH
+0xFAA1,0x595B, //#CJK UNIFIED IDEOGRAPH
+0xFAA2,0x595D, //#CJK UNIFIED IDEOGRAPH
+0xFAA3,0x5963, //#CJK UNIFIED IDEOGRAPH
+0xFAA4,0x59A4, //#CJK UNIFIED IDEOGRAPH
+0xFAA5,0x59BA, //#CJK UNIFIED IDEOGRAPH
+0xFAA6,0x5B56, //#CJK UNIFIED IDEOGRAPH
+0xFAA7,0x5BC0, //#CJK UNIFIED IDEOGRAPH
+0xFAA8,0x752F, //#CJK UNIFIED IDEOGRAPH
+0xFAA9,0x5BD8, //#CJK UNIFIED IDEOGRAPH
+0xFAAA,0x5BEC, //#CJK UNIFIED IDEOGRAPH
+0xFAAB,0x5C1E, //#CJK UNIFIED IDEOGRAPH
+0xFAAC,0x5CA6, //#CJK UNIFIED IDEOGRAPH
+0xFAAD,0x5CBA, //#CJK UNIFIED IDEOGRAPH
+0xFAAE,0x5CF5, //#CJK UNIFIED IDEOGRAPH
+0xFAAF,0x5D27, //#CJK UNIFIED IDEOGRAPH
+0xFAB0,0x5D53, //#CJK UNIFIED IDEOGRAPH
+0xFAB1,0xFA11, //#CJK COMPATIBILITY IDEOGRAPH
+0xFAB2,0x5D42, //#CJK UNIFIED IDEOGRAPH
+0xFAB3,0x5D6D, //#CJK UNIFIED IDEOGRAPH
+0xFAB4,0x5DB8, //#CJK UNIFIED IDEOGRAPH
+0xFAB5,0x5DB9, //#CJK UNIFIED IDEOGRAPH
+0xFAB6,0x5DD0, //#CJK UNIFIED IDEOGRAPH
+0xFAB7,0x5F21, //#CJK UNIFIED IDEOGRAPH
+0xFAB8,0x5F34, //#CJK UNIFIED IDEOGRAPH
+0xFAB9,0x5F67, //#CJK UNIFIED IDEOGRAPH
+0xFABA,0x5FB7, //#CJK UNIFIED IDEOGRAPH
+0xFABB,0x5FDE, //#CJK UNIFIED IDEOGRAPH
+0xFABC,0x605D, //#CJK UNIFIED IDEOGRAPH
+0xFABD,0x6085, //#CJK UNIFIED IDEOGRAPH
+0xFABE,0x608A, //#CJK UNIFIED IDEOGRAPH
+0xFABF,0x60DE, //#CJK UNIFIED IDEOGRAPH
+0xFAC0,0x60D5, //#CJK UNIFIED IDEOGRAPH
+0xFAC1,0x6120, //#CJK UNIFIED IDEOGRAPH
+0xFAC2,0x60F2, //#CJK UNIFIED IDEOGRAPH
+0xFAC3,0x6111, //#CJK UNIFIED IDEOGRAPH
+0xFAC4,0x6137, //#CJK UNIFIED IDEOGRAPH
+0xFAC5,0x6130, //#CJK UNIFIED IDEOGRAPH
+0xFAC6,0x6198, //#CJK UNIFIED IDEOGRAPH
+0xFAC7,0x6213, //#CJK UNIFIED IDEOGRAPH
+0xFAC8,0x62A6, //#CJK UNIFIED IDEOGRAPH
+0xFAC9,0x63F5, //#CJK UNIFIED IDEOGRAPH
+0xFACA,0x6460, //#CJK UNIFIED IDEOGRAPH
+0xFACB,0x649D, //#CJK UNIFIED IDEOGRAPH
+0xFACC,0x64CE, //#CJK UNIFIED IDEOGRAPH
+0xFACD,0x654E, //#CJK UNIFIED IDEOGRAPH
+0xFACE,0x6600, //#CJK UNIFIED IDEOGRAPH
+0xFACF,0x6615, //#CJK UNIFIED IDEOGRAPH
+0xFAD0,0x663B, //#CJK UNIFIED IDEOGRAPH
+0xFAD1,0x6609, //#CJK UNIFIED IDEOGRAPH
+0xFAD2,0x662E, //#CJK UNIFIED IDEOGRAPH
+0xFAD3,0x661E, //#CJK UNIFIED IDEOGRAPH
+0xFAD4,0x6624, //#CJK UNIFIED IDEOGRAPH
+0xFAD5,0x6665, //#CJK UNIFIED IDEOGRAPH
+0xFAD6,0x6657, //#CJK UNIFIED IDEOGRAPH
+0xFAD7,0x6659, //#CJK UNIFIED IDEOGRAPH
+0xFAD8,0xFA12, //#CJK COMPATIBILITY IDEOGRAPH
+0xFAD9,0x6673, //#CJK UNIFIED IDEOGRAPH
+0xFADA,0x6699, //#CJK UNIFIED IDEOGRAPH
+0xFADB,0x66A0, //#CJK UNIFIED IDEOGRAPH
+0xFADC,0x66B2, //#CJK UNIFIED IDEOGRAPH
+0xFADD,0x66BF, //#CJK UNIFIED IDEOGRAPH
+0xFADE,0x66FA, //#CJK UNIFIED IDEOGRAPH
+0xFADF,0x670E, //#CJK UNIFIED IDEOGRAPH
+0xFAE0,0xF929, //#CJK COMPATIBILITY IDEOGRAPH
+0xFAE1,0x6766, //#CJK UNIFIED IDEOGRAPH
+0xFAE2,0x67BB, //#CJK UNIFIED IDEOGRAPH
+0xFAE3,0x6852, //#CJK UNIFIED IDEOGRAPH
+0xFAE4,0x67C0, //#CJK UNIFIED IDEOGRAPH
+0xFAE5,0x6801, //#CJK UNIFIED IDEOGRAPH
+0xFAE6,0x6844, //#CJK UNIFIED IDEOGRAPH
+0xFAE7,0x68CF, //#CJK UNIFIED IDEOGRAPH
+0xFAE8,0xFA13, //#CJK COMPATIBILITY IDEOGRAPH
+0xFAE9,0x6968, //#CJK UNIFIED IDEOGRAPH
+0xFAEA,0xFA14, //#CJK COMPATIBILITY IDEOGRAPH
+0xFAEB,0x6998, //#CJK UNIFIED IDEOGRAPH
+0xFAEC,0x69E2, //#CJK UNIFIED IDEOGRAPH
+0xFAED,0x6A30, //#CJK UNIFIED IDEOGRAPH
+0xFAEE,0x6A6B, //#CJK UNIFIED IDEOGRAPH
+0xFAEF,0x6A46, //#CJK UNIFIED IDEOGRAPH
+0xFAF0,0x6A73, //#CJK UNIFIED IDEOGRAPH
+0xFAF1,0x6A7E, //#CJK UNIFIED IDEOGRAPH
+0xFAF2,0x6AE2, //#CJK UNIFIED IDEOGRAPH
+0xFAF3,0x6AE4, //#CJK UNIFIED IDEOGRAPH
+0xFAF4,0x6BD6, //#CJK UNIFIED IDEOGRAPH
+0xFAF5,0x6C3F, //#CJK UNIFIED IDEOGRAPH
+0xFAF6,0x6C5C, //#CJK UNIFIED IDEOGRAPH
+0xFAF7,0x6C86, //#CJK UNIFIED IDEOGRAPH
+0xFAF8,0x6C6F, //#CJK UNIFIED IDEOGRAPH
+0xFAF9,0x6CDA, //#CJK UNIFIED IDEOGRAPH
+0xFAFA,0x6D04, //#CJK UNIFIED IDEOGRAPH
+0xFAFB,0x6D87, //#CJK UNIFIED IDEOGRAPH
+0xFAFC,0x6D6F, //#CJK UNIFIED IDEOGRAPH
+0xFB40,0x6D96, //#CJK UNIFIED IDEOGRAPH
+0xFB41,0x6DAC, //#CJK UNIFIED IDEOGRAPH
+0xFB42,0x6DCF, //#CJK UNIFIED IDEOGRAPH
+0xFB43,0x6DF8, //#CJK UNIFIED IDEOGRAPH
+0xFB44,0x6DF2, //#CJK UNIFIED IDEOGRAPH
+0xFB45,0x6DFC, //#CJK UNIFIED IDEOGRAPH
+0xFB46,0x6E39, //#CJK UNIFIED IDEOGRAPH
+0xFB47,0x6E5C, //#CJK UNIFIED IDEOGRAPH
+0xFB48,0x6E27, //#CJK UNIFIED IDEOGRAPH
+0xFB49,0x6E3C, //#CJK UNIFIED IDEOGRAPH
+0xFB4A,0x6EBF, //#CJK UNIFIED IDEOGRAPH
+0xFB4B,0x6F88, //#CJK UNIFIED IDEOGRAPH
+0xFB4C,0x6FB5, //#CJK UNIFIED IDEOGRAPH
+0xFB4D,0x6FF5, //#CJK UNIFIED IDEOGRAPH
+0xFB4E,0x7005, //#CJK UNIFIED IDEOGRAPH
+0xFB4F,0x7007, //#CJK UNIFIED IDEOGRAPH
+0xFB50,0x7028, //#CJK UNIFIED IDEOGRAPH
+0xFB51,0x7085, //#CJK UNIFIED IDEOGRAPH
+0xFB52,0x70AB, //#CJK UNIFIED IDEOGRAPH
+0xFB53,0x710F, //#CJK UNIFIED IDEOGRAPH
+0xFB54,0x7104, //#CJK UNIFIED IDEOGRAPH
+0xFB55,0x715C, //#CJK UNIFIED IDEOGRAPH
+0xFB56,0x7146, //#CJK UNIFIED IDEOGRAPH
+0xFB57,0x7147, //#CJK UNIFIED IDEOGRAPH
+0xFB58,0xFA15, //#CJK COMPATIBILITY IDEOGRAPH
+0xFB59,0x71C1, //#CJK UNIFIED IDEOGRAPH
+0xFB5A,0x71FE, //#CJK UNIFIED IDEOGRAPH
+0xFB5B,0x72B1, //#CJK UNIFIED IDEOGRAPH
+0xFB5C,0x72BE, //#CJK UNIFIED IDEOGRAPH
+0xFB5D,0x7324, //#CJK UNIFIED IDEOGRAPH
+0xFB5E,0xFA16, //#CJK COMPATIBILITY IDEOGRAPH
+0xFB5F,0x7377, //#CJK UNIFIED IDEOGRAPH
+0xFB60,0x73BD, //#CJK UNIFIED IDEOGRAPH
+0xFB61,0x73C9, //#CJK UNIFIED IDEOGRAPH
+0xFB62,0x73D6, //#CJK UNIFIED IDEOGRAPH
+0xFB63,0x73E3, //#CJK UNIFIED IDEOGRAPH
+0xFB64,0x73D2, //#CJK UNIFIED IDEOGRAPH
+0xFB65,0x7407, //#CJK UNIFIED IDEOGRAPH
+0xFB66,0x73F5, //#CJK UNIFIED IDEOGRAPH
+0xFB67,0x7426, //#CJK UNIFIED IDEOGRAPH
+0xFB68,0x742A, //#CJK UNIFIED IDEOGRAPH
+0xFB69,0x7429, //#CJK UNIFIED IDEOGRAPH
+0xFB6A,0x742E, //#CJK UNIFIED IDEOGRAPH
+0xFB6B,0x7462, //#CJK UNIFIED IDEOGRAPH
+0xFB6C,0x7489, //#CJK UNIFIED IDEOGRAPH
+0xFB6D,0x749F, //#CJK UNIFIED IDEOGRAPH
+0xFB6E,0x7501, //#CJK UNIFIED IDEOGRAPH
+0xFB6F,0x756F, //#CJK UNIFIED IDEOGRAPH
+0xFB70,0x7682, //#CJK UNIFIED IDEOGRAPH
+0xFB71,0x769C, //#CJK UNIFIED IDEOGRAPH
+0xFB72,0x769E, //#CJK UNIFIED IDEOGRAPH
+0xFB73,0x769B, //#CJK UNIFIED IDEOGRAPH
+0xFB74,0x76A6, //#CJK UNIFIED IDEOGRAPH
+0xFB75,0xFA17, //#CJK COMPATIBILITY IDEOGRAPH
+0xFB76,0x7746, //#CJK UNIFIED IDEOGRAPH
+0xFB77,0x52AF, //#CJK UNIFIED IDEOGRAPH
+0xFB78,0x7821, //#CJK UNIFIED IDEOGRAPH
+0xFB79,0x784E, //#CJK UNIFIED IDEOGRAPH
+0xFB7A,0x7864, //#CJK UNIFIED IDEOGRAPH
+0xFB7B,0x787A, //#CJK UNIFIED IDEOGRAPH
+0xFB7C,0x7930, //#CJK UNIFIED IDEOGRAPH
+0xFB7D,0xFA18, //#CJK COMPATIBILITY IDEOGRAPH
+0xFB7E,0xFA19, //#CJK COMPATIBILITY IDEOGRAPH
+0xFB80,0xFA1A, //#CJK COMPATIBILITY IDEOGRAPH
+0xFB81,0x7994, //#CJK UNIFIED IDEOGRAPH
+0xFB82,0xFA1B, //#CJK COMPATIBILITY IDEOGRAPH
+0xFB83,0x799B, //#CJK UNIFIED IDEOGRAPH
+0xFB84,0x7AD1, //#CJK UNIFIED IDEOGRAPH
+0xFB85,0x7AE7, //#CJK UNIFIED IDEOGRAPH
+0xFB86,0xFA1C, //#CJK COMPATIBILITY IDEOGRAPH
+0xFB87,0x7AEB, //#CJK UNIFIED IDEOGRAPH
+0xFB88,0x7B9E, //#CJK UNIFIED IDEOGRAPH
+0xFB89,0xFA1D, //#CJK COMPATIBILITY IDEOGRAPH
+0xFB8A,0x7D48, //#CJK UNIFIED IDEOGRAPH
+0xFB8B,0x7D5C, //#CJK UNIFIED IDEOGRAPH
+0xFB8C,0x7DB7, //#CJK UNIFIED IDEOGRAPH
+0xFB8D,0x7DA0, //#CJK UNIFIED IDEOGRAPH
+0xFB8E,0x7DD6, //#CJK UNIFIED IDEOGRAPH
+0xFB8F,0x7E52, //#CJK UNIFIED IDEOGRAPH
+0xFB90,0x7F47, //#CJK UNIFIED IDEOGRAPH
+0xFB91,0x7FA1, //#CJK UNIFIED IDEOGRAPH
+0xFB92,0xFA1E, //#CJK COMPATIBILITY IDEOGRAPH
+0xFB93,0x8301, //#CJK UNIFIED IDEOGRAPH
+0xFB94,0x8362, //#CJK UNIFIED IDEOGRAPH
+0xFB95,0x837F, //#CJK UNIFIED IDEOGRAPH
+0xFB96,0x83C7, //#CJK UNIFIED IDEOGRAPH
+0xFB97,0x83F6, //#CJK UNIFIED IDEOGRAPH
+0xFB98,0x8448, //#CJK UNIFIED IDEOGRAPH
+0xFB99,0x84B4, //#CJK UNIFIED IDEOGRAPH
+0xFB9A,0x8553, //#CJK UNIFIED IDEOGRAPH
+0xFB9B,0x8559, //#CJK UNIFIED IDEOGRAPH
+0xFB9C,0x856B, //#CJK UNIFIED IDEOGRAPH
+0xFB9D,0xFA1F, //#CJK COMPATIBILITY IDEOGRAPH
+0xFB9E,0x85B0, //#CJK UNIFIED IDEOGRAPH
+0xFB9F,0xFA20, //#CJK COMPATIBILITY IDEOGRAPH
+0xFBA0,0xFA21, //#CJK COMPATIBILITY IDEOGRAPH
+0xFBA1,0x8807, //#CJK UNIFIED IDEOGRAPH
+0xFBA2,0x88F5, //#CJK UNIFIED IDEOGRAPH
+0xFBA3,0x8A12, //#CJK UNIFIED IDEOGRAPH
+0xFBA4,0x8A37, //#CJK UNIFIED IDEOGRAPH
+0xFBA5,0x8A79, //#CJK UNIFIED IDEOGRAPH
+0xFBA6,0x8AA7, //#CJK UNIFIED IDEOGRAPH
+0xFBA7,0x8ABE, //#CJK UNIFIED IDEOGRAPH
+0xFBA8,0x8ADF, //#CJK UNIFIED IDEOGRAPH
+0xFBA9,0xFA22, //#CJK COMPATIBILITY IDEOGRAPH
+0xFBAA,0x8AF6, //#CJK UNIFIED IDEOGRAPH
+0xFBAB,0x8B53, //#CJK UNIFIED IDEOGRAPH
+0xFBAC,0x8B7F, //#CJK UNIFIED IDEOGRAPH
+0xFBAD,0x8CF0, //#CJK UNIFIED IDEOGRAPH
+0xFBAE,0x8CF4, //#CJK UNIFIED IDEOGRAPH
+0xFBAF,0x8D12, //#CJK UNIFIED IDEOGRAPH
+0xFBB0,0x8D76, //#CJK UNIFIED IDEOGRAPH
+0xFBB1,0xFA23, //#CJK COMPATIBILITY IDEOGRAPH
+0xFBB2,0x8ECF, //#CJK UNIFIED IDEOGRAPH
+0xFBB3,0xFA24, //#CJK COMPATIBILITY IDEOGRAPH
+0xFBB4,0xFA25, //#CJK COMPATIBILITY IDEOGRAPH
+0xFBB5,0x9067, //#CJK UNIFIED IDEOGRAPH
+0xFBB6,0x90DE, //#CJK UNIFIED IDEOGRAPH
+0xFBB7,0xFA26, //#CJK COMPATIBILITY IDEOGRAPH
+0xFBB8,0x9115, //#CJK UNIFIED IDEOGRAPH
+0xFBB9,0x9127, //#CJK UNIFIED IDEOGRAPH
+0xFBBA,0x91DA, //#CJK UNIFIED IDEOGRAPH
+0xFBBB,0x91D7, //#CJK UNIFIED IDEOGRAPH
+0xFBBC,0x91DE, //#CJK UNIFIED IDEOGRAPH
+0xFBBD,0x91ED, //#CJK UNIFIED IDEOGRAPH
+0xFBBE,0x91EE, //#CJK UNIFIED IDEOGRAPH
+0xFBBF,0x91E4, //#CJK UNIFIED IDEOGRAPH
+0xFBC0,0x91E5, //#CJK UNIFIED IDEOGRAPH
+0xFBC1,0x9206, //#CJK UNIFIED IDEOGRAPH
+0xFBC2,0x9210, //#CJK UNIFIED IDEOGRAPH
+0xFBC3,0x920A, //#CJK UNIFIED IDEOGRAPH
+0xFBC4,0x923A, //#CJK UNIFIED IDEOGRAPH
+0xFBC5,0x9240, //#CJK UNIFIED IDEOGRAPH
+0xFBC6,0x923C, //#CJK UNIFIED IDEOGRAPH
+0xFBC7,0x924E, //#CJK UNIFIED IDEOGRAPH
+0xFBC8,0x9259, //#CJK UNIFIED IDEOGRAPH
+0xFBC9,0x9251, //#CJK UNIFIED IDEOGRAPH
+0xFBCA,0x9239, //#CJK UNIFIED IDEOGRAPH
+0xFBCB,0x9267, //#CJK UNIFIED IDEOGRAPH
+0xFBCC,0x92A7, //#CJK UNIFIED IDEOGRAPH
+0xFBCD,0x9277, //#CJK UNIFIED IDEOGRAPH
+0xFBCE,0x9278, //#CJK UNIFIED IDEOGRAPH
+0xFBCF,0x92E7, //#CJK UNIFIED IDEOGRAPH
+0xFBD0,0x92D7, //#CJK UNIFIED IDEOGRAPH
+0xFBD1,0x92D9, //#CJK UNIFIED IDEOGRAPH
+0xFBD2,0x92D0, //#CJK UNIFIED IDEOGRAPH
+0xFBD3,0xFA27, //#CJK COMPATIBILITY IDEOGRAPH
+0xFBD4,0x92D5, //#CJK UNIFIED IDEOGRAPH
+0xFBD5,0x92E0, //#CJK UNIFIED IDEOGRAPH
+0xFBD6,0x92D3, //#CJK UNIFIED IDEOGRAPH
+0xFBD7,0x9325, //#CJK UNIFIED IDEOGRAPH
+0xFBD8,0x9321, //#CJK UNIFIED IDEOGRAPH
+0xFBD9,0x92FB, //#CJK UNIFIED IDEOGRAPH
+0xFBDA,0xFA28, //#CJK COMPATIBILITY IDEOGRAPH
+0xFBDB,0x931E, //#CJK UNIFIED IDEOGRAPH
+0xFBDC,0x92FF, //#CJK UNIFIED IDEOGRAPH
+0xFBDD,0x931D, //#CJK UNIFIED IDEOGRAPH
+0xFBDE,0x9302, //#CJK UNIFIED IDEOGRAPH
+0xFBDF,0x9370, //#CJK UNIFIED IDEOGRAPH
+0xFBE0,0x9357, //#CJK UNIFIED IDEOGRAPH
+0xFBE1,0x93A4, //#CJK UNIFIED IDEOGRAPH
+0xFBE2,0x93C6, //#CJK UNIFIED IDEOGRAPH
+0xFBE3,0x93DE, //#CJK UNIFIED IDEOGRAPH
+0xFBE4,0x93F8, //#CJK UNIFIED IDEOGRAPH
+0xFBE5,0x9431, //#CJK UNIFIED IDEOGRAPH
+0xFBE6,0x9445, //#CJK UNIFIED IDEOGRAPH
+0xFBE7,0x9448, //#CJK UNIFIED IDEOGRAPH
+0xFBE8,0x9592, //#CJK UNIFIED IDEOGRAPH
+0xFBE9,0xF9DC, //#CJK COMPATIBILITY IDEOGRAPH
+0xFBEA,0xFA29, //#CJK COMPATIBILITY IDEOGRAPH
+0xFBEB,0x969D, //#CJK UNIFIED IDEOGRAPH
+0xFBEC,0x96AF, //#CJK UNIFIED IDEOGRAPH
+0xFBED,0x9733, //#CJK UNIFIED IDEOGRAPH
+0xFBEE,0x973B, //#CJK UNIFIED IDEOGRAPH
+0xFBEF,0x9743, //#CJK UNIFIED IDEOGRAPH
+0xFBF0,0x974D, //#CJK UNIFIED IDEOGRAPH
+0xFBF1,0x974F, //#CJK UNIFIED IDEOGRAPH
+0xFBF2,0x9751, //#CJK UNIFIED IDEOGRAPH
+0xFBF3,0x9755, //#CJK UNIFIED IDEOGRAPH
+0xFBF4,0x9857, //#CJK UNIFIED IDEOGRAPH
+0xFBF5,0x9865, //#CJK UNIFIED IDEOGRAPH
+0xFBF6,0xFA2A, //#CJK COMPATIBILITY IDEOGRAPH
+0xFBF7,0xFA2B, //#CJK COMPATIBILITY IDEOGRAPH
+0xFBF8,0x9927, //#CJK UNIFIED IDEOGRAPH
+0xFBF9,0xFA2C, //#CJK COMPATIBILITY IDEOGRAPH
+0xFBFA,0x999E, //#CJK UNIFIED IDEOGRAPH
+0xFBFB,0x9A4E, //#CJK UNIFIED IDEOGRAPH
+0xFBFC,0x9AD9, //#CJK UNIFIED IDEOGRAPH
+0xFC40,0x9ADC, //#CJK UNIFIED IDEOGRAPH
+0xFC41,0x9B75, //#CJK UNIFIED IDEOGRAPH
+0xFC42,0x9B72, //#CJK UNIFIED IDEOGRAPH
+0xFC43,0x9B8F, //#CJK UNIFIED IDEOGRAPH
+0xFC44,0x9BB1, //#CJK UNIFIED IDEOGRAPH
+0xFC45,0x9BBB, //#CJK UNIFIED IDEOGRAPH
+0xFC46,0x9C00, //#CJK UNIFIED IDEOGRAPH
+0xFC47,0x9D70, //#CJK UNIFIED IDEOGRAPH
+0xFC48,0x9D6B, //#CJK UNIFIED IDEOGRAPH
+0xFC49,0xFA2D, //#CJK COMPATIBILITY IDEOGRAPH
+0xFC4A,0x9E19, //#CJK UNIFIED IDEOGRAPH
+0xFC4B,0x9ED1 //#CJK UNIFIED IDEOGRAPH
+};
--- /dev/null
+#pragma once
+#define assert(a)
--- /dev/null
+#pragma once
+
+#include <ctype.h>
+
+namespace std{
+ typedef ::size_t size_t;
+ typedef ::ptrdiff_t ptrdiff_t;
+
+}
\ No newline at end of file
--- /dev/null
+#pragma once
+
+typedef unsigned int size_t;
+typedef unsigned int ptrdiff_t;
+//ascii
+inline int isdigit(int c){
+ return '0' <= c && c <= '9';
+}
+
+inline int isupper(int c){
+ return ('A' <= c && c <= 'Z');
+}
+
+inline int islower(int c){
+ return ('a' <= c && c <= 'z');
+}
+
+inline int isalpha(int c){
+ return isupper(c) || islower(c);
+}
+
+
+inline int isalnum(int c){
+ return isalpha(c) || isdigit(c);
+}
+
+inline int toupper(int c){
+ return islower(c) ? c - 0x20 : c;
+}
+
+inline int tolower(int c){
+ return isupper(c) ? c + 0x20 : c;
+}
+
+//unicode
+inline int iswdigit(wchar_t c){
+ return L'0' <= c && c <= L'9';
+}
+
+inline int iswupper(wchar_t c){
+ return L'A' <= c && c <= L'Z';
+}
+
+inline int iswlower(wchar_t c){
+ return L'a' <= c && c <= L'z';
+}
+
+inline int iswalpha(wchar_t c){
+ return iswupper(c) || iswlower(c);
+}
+
+inline int iswalnum(wchar_t c){
+ return iswalpha(c) || iswdigit(c);
+}
+
+
+
+inline wchar_t towupper(wchar_t c){
+ return iswlower(c) ? c - 0x20 : c;
+}
+
+inline wchar_t towlower(wchar_t c){
+ return iswupper(c) ? c + 0x20 : c;
+}
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#if (!defined(ERRNO_H))
+
+#define ERRNO_H 1
+
+#if (defined(__cplusplus))
+ extern "C" {
+#endif
+
+extern int errno;
+
+#define ENOENT 2 /* No such file or directory */
+#define ERANGE 34 /* Result too large (or too small) */
+
+#if (defined(__cplusplus))
+ }
+#endif
+
+#endif
--- /dev/null
+#pragma once
+
+namespace std{
+
+ class exception{
+ public:
+ exception(){}
+ virtual ~exception(){}
+ };
+ class bad_cast: public exception{
+ public:
+ virtual ~bad_cast(){}
+ };
+
+ struct nothrow_t{};
+}
\ No newline at end of file
--- /dev/null
+/* copyright(C) 2002 H.Kawai (under KL-01). */
+
+#if (!defined(FLOAT_H))
+
+#define FLOAT_H 1
+
+#define FLT_RADIX 2
+#define FLT_ROUNDS 1 /* nearest */
+#define FLT_DIG 6
+#define FLT_EPSILON 1.19209290e-07F
+#define FLT_MANT_DIG 24
+#define FLT_MAX 3.40282347e+38F
+#define FLT_MAX_EXP (+128)
+#define FLT_MIN 1.17549435e-38F
+#define FLT_MIN_EXP (-125)
+
+#define DBL_DIG 15
+#define DBL_EPSILON 2.2204460492503131e-16
+#define DBL_MANT_DIG 53
+#define DBL_MAX 1.7976931348623157e+308
+#define DBL_MAX_EXP 1024
+#define DBL_MIN 2.2250738585072014e-308
+#define DBL_MIN_EXP (-1021)
+
+#endif
+
--- /dev/null
+#pragma once
+
+namespace std{
+ template <class T>
+ class less{
+ public:
+ less(){
+ }
+ bool operator()(const T &a, const T &b)const{
+ return a < b;
+ }
+ };
+}
\ No newline at end of file
--- /dev/null
+format:
+ /* \82±\82Ì\83Z\83N\83V\83\87\83\93\82Å\83\8a\83\93\83N\82Ì\95û\90j\82ð\8bL\8fq */
+ code(align:1, logic:0x24, file:0x24);
+ data(align:4, logic:stack_end, file:code_end);
+
+file:
+ /* \82±\82Ì\83Z\83N\83V\83\87\83\93\82Å\83R\83}\83\93\83h\83\89\83C\83\93\82É\8f\91\82«\82«\82ê\82È\82©\82Á\82½
+ .obj\83t\83@\83C\83\8b\81A.lib\83t\83@\83C\83\8b\82ð\8bL\8dÚ */
+ /* \82È\82¨\81A\82±\82Ì\83Z\83N\83V\83\87\83\93\82Í\83t\83\8b\83p\83X\82Å\8f\91\82¢\82Ä\82à\82æ\82¢\81B */
+ /* \97á\81F c:/osask/gg00libc.lib; */
+ ../z_tools/haribote/harilibc.lib;
+ ../z_tools/haribote/golibc.lib;
+
+label:
+ /* \95K\82¸\83\8a\83\93\83N\82µ\82È\82¯\82ê\82Î\82¢\82¯\82È\82¢\83\89\83x\83\8b\82ð\8ew\92è */
+ /* \83G\83\93\83g\83\8a\83|\83C\83\93\83g\82ð\8ew\92è\82·\82ê\82Î\82¢\82¢\82Æ\8ev\82Á\82Ä\82\82¾\82³\82¢ */
+ _HariStartup;
+
+ /* \8fã\8bL3\83Z\83N\83V\83\87\83\93\82Ì\8f\87\8f\98\82Í\93ü\82ê\91Ö\82¦\82Ä\82Í\82¢\82¯\82Ü\82¹\82ñ! */
--- /dev/null
+/* copyright(C) 2002 H.Kawai (under KL-01). */
+
+#if (!defined(LIMITS_H))
+
+#define LIMITS_H 1
+
+#define CHAR_BIT 8
+#define CHAR_MAX (+127)
+#define CHAR_MIN 0
+#define INT_MAX (+0x7fffffff)
+#define INT_MIN (-0x7fffffff)
+#define LONG_MAX INT_MAX
+#define LONG_MIN INT_MIN
+#define SCHAR_MAX (+127)
+#define SCHAR_MIN (-127)
+#define SHRT_MAX (+0x7fff)
+#define SHRT_MIN (-0x7fff)
+#define UCHAR_MAX (+0xff)
+#define UINT_MAX (+0xffffffff)
+#define ULONG_MAX UINT_MAX
+#define USHRT_MAX (+0xffff)
+
+#endif
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#if (!defined(MATH_H))
+
+#define MATH_H 1
+
+#if (defined(__cplusplus))
+ extern "C" {
+#endif
+
+double sin(double);
+double cos(double);
+double sqrt(double);
+double ldexp(double x, int n);
+double frexp(double x, int *exp);
+
+extern __inline__ double sin(double x)
+{
+ double res;
+ __asm__ ("fsin" : "=t" (res) : "0" (x));
+ return res;
+}
+
+extern __inline__ double cos(double x)
+{
+ double res;
+ __asm__ ("fcos" : "=t" (res) : "0" (x));
+ return res;
+}
+
+extern __inline__ double sqrt(double x)
+{
+ double res;
+ __asm__ ("fsqrt" : "=t" (res) : "0" (x));
+ return res;
+}
+
+#if (defined(__cplusplus))
+ }
+#endif
+
+#endif
--- /dev/null
+#pragma once
+
+#include <cctype>
+#include <exception>
+
+
+namespace std{
+ class bad_alloc: public exception{
+ public:
+ virtual ~bad_alloc(){}
+ };
+};
+
+
+
+void* operator new(std::size_t) ;
+void* operator new[](std::size_t) ;
+void operator delete(void*) throw();
+void operator delete[](void*) throw();
+void* operator new(std::size_t, const std::nothrow_t&) throw();
+void* operator new[](std::size_t, const std::nothrow_t&) throw();
+void operator delete(void*, const std::nothrow_t&) throw();
+void operator delete[](void*, const std::nothrow_t&) throw();
+
+// Default placement versions of operator new.
+inline void* operator new(std::size_t, void* __p) throw() { return __p; }
+inline void* operator new[](std::size_t, void* __p) throw() { return __p; }
+
+// Default placement versions of operator delete.
+inline void operator delete (void*, void*) throw() { }
+inline void operator delete[](void*, void*) throw() { }
+
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#if (!defined(SETJMP_H))
+
+#define SETJMP_H 1
+
+#if (defined(__cplusplus))
+ extern "C" {
+#endif
+
+typedef int jmp_buf[3]; /* EBP, EIP, ESP */
+
+#define setjmp(env) __builtin_setjmp(env)
+#define longjmp(env, val) __builtin_longjmp(env, val)
+
+#if (defined(__cplusplus))
+ }
+#endif
+
+#endif
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#if (!defined(STDARG_H))
+
+#define STDARG_H 1
+
+#if (defined(__cplusplus))
+ extern "C" {
+#endif
+
+#define va_start(v,l) __builtin_va_start((v),l)
+#define va_end __builtin_va_end
+#define va_arg __builtin_va_arg
+#define va_copy(d,s) __builtin_va_copy((d),(s))
+#define va_list __builtin_va_list
+
+#if (defined(__cplusplus))
+ }
+#endif
+
+#endif
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#if (!defined(STDDEF_H))
+
+#define STDDEF_H 1
+
+#if (defined(__cplusplus))
+ extern "C" {
+#endif
+
+typedef unsigned int size_t;
+typedef unsigned int ptrdiff_t;
+#if (defined(__cplusplus))
+ }
+#endif
+
+#endif
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#if (!defined(STDIO_H))
+
+#define STDIO_H 1
+
+#if (defined(__cplusplus))
+ extern "C" {
+#endif
+
+#if (defined(__cplusplus))
+ #define NULL 0
+#else
+#if (!defined(NULL))
+ #define NULL ((void *) 0)
+#endif
+#endif
+
+#include <stdarg.h>
+
+int sprintf(char *s, const char *format, ...);
+int vsprintf(char *s, const char *format, va_list arg);
+
+#if (defined(__cplusplus))
+ }
+#endif
+
+#endif
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#if (!defined(STDLIB_H))
+
+#define STDLIB_H 1
+
+#if (defined(__cplusplus))
+extern "C" {
+#endif
+
+#include <stddef.h> /* size_t */
+#include <stdio.h> /* NULL */
+
+#define RAND_MAX 0x7fff
+#define srand(seed) (void) (rand_seed = (seed))
+
+#define EXIT_SUCCESS 0
+#define EXIT_FAILURE 1
+
+int abs(int n);
+double atof(const char *s);
+int atoi(const char *s);
+void qsort(void *base, size_t n, size_t size,
+ int (*cmp)(const void *, const void *));
+int rand(void);
+extern unsigned int rand_seed;
+double strtod(const char *s, const char **endp);
+long strtol(const char *s, const char **endp, int base);
+unsigned long strtoul(const char *s, const char **endp, int base);
+
+/* for strdup() */
+void *malloc(unsigned int nbytes);
+void free(void *ap);
+
+int cp932towcs(const char *p1, int n, wchar_t *unicode);
+size_t mbstowcs(wchar_t *dest, const char *src, size_t n);
+
+#if (defined(__cplusplus))
+}
+#endif
+
+#endif
--- /dev/null
+/* copyright(C) 2003 H.Kawai (under KL-01). */
+
+#if (!defined(STRING_H))
+
+#define STRING_H 1
+
+#if (defined(__cplusplus))
+ extern "C" {
+#endif
+
+#include <stddef.h> /* size_t */
+
+char *strcpy(char *s, const char *ct);
+char *strncpy(char *s, const char *ct, size_t n);
+char *strcat(char *s, const char *ct);
+char *strncat(char *s, const char *ct, size_t n);
+int strcmp(const char *cs, const char *ct);
+int strncmp(const char *cs, const char *ct, size_t n);
+char *strchr(const char *cs, int c);
+char *strrchr(const char *cs, int c);
+size_t strspn(const char *s, const char *accept);
+size_t strcspn(const char *s, const char *reject);
+char *strpbrk(const char *s, const char *accept);
+char *strstr(const char *cs, const char *ct);
+size_t strlen(const char *cs);
+
+void *memcpy(void *s, const void *ct, size_t n);
+void *memmove(void *s, const void *ct, size_t n);
+int memcmp(const void *cs, const void *ct, size_t n);
+void *memchr(const void *cs, int c, size_t n);
+void *memset(void *s, int c, size_t n);
+char *strdup(const char *s);
+
+
+int wcslen(const wchar_t *p);
+
+wchar_t *wcsncpy(wchar_t *dest, const wchar_t *src, int n);
+
+int wcsicmp(const wchar_t *s1, const wchar_t *s2);
+
+#if (defined(__cplusplus))
+ }
+#endif
+
+#endif
--- /dev/null
+#pragma once
+
+namespace std{
+ template <class T>
+ inline void swap(T &a, T& b){
+ T tmp = b;
+ b = a;
+ a = tmp;
+ }
+}
--- /dev/null
+\8a\84\8d\9e\90Ý\92è\83\81\83\82
+
+\83^\83C\83}\81[\8a\84\82è\8d\9e\82Ý int0x20 timer.cpp
+
--- /dev/null
+use strict;
+use warnings;
+
+print "BOOTMGR ";
+print "\x20"; #flag
+print "\x00\x50\x69\x98\x16\x3d\x16\x3d";
+print "\x00\x00"; # cluster hi
+print "\xe0\x94\xed\x3a";
+print "\x03\x00"; # cluster lo
+print pack("L", -s "haribote/haribote.sys");
--- /dev/null
+fat size : 3c8
+rsvd sec cnt : 0x1870
+tot : 0x3e780
+FirstDataSector = BPB_ResvdSecCnt + (BPB_NumFATs * FATSz) + RootDirSectors;
+FirstDataSector = 0x1870 + 2 * 0x3c8 + 0x80 == 0x2080
+
+FirstSectorofCluster = ((N – 2) * BPB_SecPerClus) + FirstDataSector;
+(0x17a-2)*2 + 0x2080 = 0x2370
+
+DataSec = TotSec - (BPB_ResvdSecCnt + (BPB_NumFATs * FATSz) + RootDirSectors);
+datasec = 0x3e780 - (0x1870 + 2 * 0x3c8 + 0) = 0x3c780
+3c780
+CountofClusters = DataSec / BPB_SecPerClus = 0x3c780 / 2
+
+0x0000017a
+0x017a3d16
+(0x017a-2)*2 + 0x2080 = 0x2370
+
+first fat?: 0x1870 + 0x80 = 0x18f0 = 6384
+31E000
+
+totsec32:0x3e780
+
+(0xf9e - 2)*2 + 0x2080 = 003FB8 = 0016312
+
+0x00- : mbr
+0x3f - ??: pat0 fat32
+0x3f : boot sect
+ 0x00 - 0x3f : reserved sect
+ 0x40 - 0x13f : fat 1
+ 0x140 - 0x23f : fat 2
+ 0x240 - : root dir (clus 2-2 (1クラスタのみ使用))
+ 0x242: bootmgr(clus3- 断片化しないように入れておく)
+
\ No newline at end of file
--- /dev/null
+
+*.tlog
+*.obj
+*.pdb
+*.idb
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+ <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
+ <security>
+ <requestedPrivileges>
+ <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
+ </requestedPrivileges>
+ </security>
+ </trustInfo>
+</assembly>
\ No newline at end of file
--- /dev/null
+<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
+<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
+ <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
+ <security>
+ <requestedPrivileges>
+ <requestedExecutionLevel level='asInvoker' uiAccess='false' />
+ </requestedPrivileges>
+ </security>
+ </trustInfo>
+</assembly>
--- /dev/null
+#v4.0:v100
+Debug|Win32|G:\c\os\winexe-harib\haribote\|
--- /dev/null
+========================================================================
+ ダイナミック リンク ライブラリ: ntdll プロジェクトの概要
+========================================================================
+
+この ntdll DLL は、AppWizard により作成されました。
+
+このファイルには、ntdll
+アプリケーションを構成する各ファイルの内容の概要が含まれています。
+
+
+ntdll.vcxproj
+ これは、アプリケーション ウィザードを使用して生成された VC++
+ プロジェクトのメイン プロジェクト ファイルです。
+ ファイルを生成した Visual C++ のバージョンに関する情報と、アプリケーション
+ ウィザードで選択されたプラットフォーム、
+ 構成、およびプロジェクト機能に関する情報が含まれています。
+
+ntdll.vcxproj.filters
+ これは、アプリケーション ウィザードで生成された VC++ プロジェクトのフィルター
+ ファイルです。
+ このファイルには、プロジェクト内のファイルとフィルターとの間の関連付けに関する
+ 情報が含まれています。 この関連付けは、特定のノー
+ ドで同様の拡張子を持つファイルのグループ化を
+ 示すために IDE で使用されます (たとえば、".cpp" ファイルは "ソース ファイル"
+ フィルターに関連付けられています)。
+
+ntdll.cpp
+ これは、メインの DLL ソース ファイルです。
+
+ この DLL の作成時には、シンボルがエクスポートされません。 このため、ビルド時に
+ .lib ファイルが生成されません。
+ このプロジェクトを他のプロジェクトの依存関係に追加する場合は、
+ コードを追加して DLL からシンボルをエクスポートし、エクスポート
+ ライブラリが生成されるようにするか、またはプロジェクトの [プロパティ ページ]
+ ダイアログ ボックスにある [リンカー] フォルダーの[全般] プロパティ
+ ページで、"インポート ライブラリの無視" プロパティを[はい] に設定します。
+
+/////////////////////////////////////////////////////////////////////////////
+その他の標準ファイル :
+
+StdAfx.h、StdAfx.cpp
+ これらのファイルは、ntdll.pch
+ という名前のプリコンパイル済みヘッダー (PCH) ファイルと、StdAfx.obj
+ という名前のプリコンパイル済みの型ファイルを構築するために使用されます。
+
+/////////////////////////////////////////////////////////////////////////////
+その他のメモ :
+
+AppWizard では "TODO:"
+コメントを使用して、ユーザーが追加またはカスタマイズする必要のあるソース
+コードを示します。
+
+/////////////////////////////////////////////////////////////////////////////
--- /dev/null
+// dllmain.cpp : DLL \83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Ì\83G\83\93\83g\83\8a \83|\83C\83\93\83g\82ð\92è\8b`\82µ\82Ü\82·\81B
+#include "stdafx.h"
+
+BOOL APIENTRY DllMain( HMODULE hModule,
+ DWORD ul_reason_for_call,
+ LPVOID lpReserved
+ )
+{
+ switch (ul_reason_for_call)
+ {
+ case DLL_PROCESS_ATTACH:
+ case DLL_THREAD_ATTACH:
+ case DLL_THREAD_DETACH:
+ case DLL_PROCESS_DETACH:
+ break;
+ }
+ return TRUE;
+}
+
--- /dev/null
+// ntdll.cpp : DLL \83A\83v\83\8a\83P\81[\83V\83\87\83\93\97p\82É\83G\83N\83X\83|\81[\83g\82³\82ê\82é\8aÖ\90\94\82ð\92è\8b`\82µ\82Ü\82·\81B
+//
+
+#include "stdafx.h"
+
+static void __stdcall entry(DWORD eip, DWORD cr3, DWORD dt){
+ __asm{
+
+
+ }
+}
\ No newline at end of file
--- /dev/null
+LIBRARY ntdll
+EXPORTS
+ entry @1
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{5C782ED0-884E-41DC-8E9D-BD3E13972D38}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>ntdll</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;NTDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ModuleDefinitionFile>ntdll.def</ModuleDefinitionFile>
+ <BaseAddress>0x7e000000</BaseAddress>
+ </Link>
+ <PostBuildEvent>
+ <Command>copy "$(TargetPath)" "G:\c\os\harib27f"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;NTDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <ModuleDefinitionFile>ntdll.def</ModuleDefinitionFile>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <None Include="ntdll.def" />
+ <None Include="ReadMe.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="stdafx.h" />
+ <ClInclude Include="targetver.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="dllmain.cpp">
+ <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</CompileAsManaged>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ </PrecompiledHeader>
+ <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</CompileAsManaged>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ </PrecompiledHeader>
+ </ClCompile>
+ <ClCompile Include="ntdll.cpp" />
+ <ClCompile Include="stdafx.cpp">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+ </ClCompile>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file
--- /dev/null
+// stdafx.cpp : \95W\8f\80\83C\83\93\83N\83\8b\81[\83h ntdll.pch \82Ì\82Ý\82ð
+// \8aÜ\82Þ\83\\81[\83X \83t\83@\83C\83\8b\82Í\81A\83v\83\8a\83R\83\93\83p\83C\83\8b\8dÏ\82Ý\83w\83b\83_\81[\82É\82È\82è\82Ü\82·\81B
+// stdafx.obj \82É\82Í\83v\83\8a\83R\83\93\83p\83C\83\8b\8dÏ\82Ý\8c^\8fî\95ñ\82ª\8aÜ\82Ü\82ê\82Ü\82·\81B
+
+#include "stdafx.h"
+
+// TODO: \82±\82Ì\83t\83@\83C\83\8b\82Å\82Í\82È\82\81ASTDAFX.H \82Å\95K\97v\82È
+// \92Ç\89Á\83w\83b\83_\81[\82ð\8eQ\8fÆ\82µ\82Ä\82\82¾\82³\82¢\81B
--- /dev/null
+// stdafx.h : \95W\8f\80\82Ì\83V\83X\83e\83\80 \83C\83\93\83N\83\8b\81[\83h \83t\83@\83C\83\8b\82Ì\83C\83\93\83N\83\8b\81[\83h \83t\83@\83C\83\8b\81A\82Ü\82½\82Í
+// \8eQ\8fÆ\89ñ\90\94\82ª\91½\82\81A\82©\82Â\82 \82Ü\82è\95Ï\8dX\82³\82ê\82È\82¢\81A\83v\83\8d\83W\83F\83N\83g\90ê\97p\82Ì\83C\83\93\83N\83\8b\81[\83h \83t\83@\83C\83\8b
+// \82ð\8bL\8fq\82µ\82Ü\82·\81B
+//
+
+#pragma once
+
+#include "targetver.h"
+
+#define WIN32_LEAN_AND_MEAN // Windows \83w\83b\83_\81[\82©\82ç\8eg\97p\82³\82ê\82Ä\82¢\82È\82¢\95\94\95ª\82ð\8f\9c\8aO\82µ\82Ü\82·\81B
+// Windows \83w\83b\83_\81[ \83t\83@\83C\83\8b:
+#include <windows.h>
+
+
+
+// TODO: \83v\83\8d\83O\83\89\83\80\82É\95K\97v\82È\92Ç\89Á\83w\83b\83_\81[\82ð\82±\82±\82Å\8eQ\8fÆ\82µ\82Ä\82\82¾\82³\82¢\81B
--- /dev/null
+#pragma once
+
+// SDKDDKVer.h \82ð\83C\83\93\83N\83\8b\81[\83h\82·\82é\82Æ\81A\97\98\97p\82Å\82«\82é\8dÅ\82à\8fã\88Ê\82Ì Windows \83v\83\89\83b\83g\83t\83H\81[\83\80\82ª\92è\8b`\82³\82ê\82Ü\82·\81B
+
+// \88È\91O\82Ì Windows \83v\83\89\83b\83g\83t\83H\81[\83\80\97p\82É\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\83r\83\8b\83h\82·\82é\8fê\8d\87\82Í\81AWinSDKVer.h \82ð\83C\83\93\83N\83\8b\81[\83h\82µ\81A
+// SDKDDKVer.h \82ð\83C\83\93\83N\83\8b\81[\83h\82·\82é\91O\82É\81A\83T\83|\81[\83g\91Î\8fÛ\82Æ\82·\82é\83v\83\89\83b\83g\83t\83H\81[\83\80\82ð\8e¦\82·\82æ\82¤\82É _WIN32_WINNT \83}\83N\83\8d\82ð\90Ý\92è\82µ\82Ü\82·\81B
+
+#include <SDKDDKVer.h>
--- /dev/null
+#include <windows.h>
+#pragma comment(linker,"/subsystem:windows")
+#pragma comment(linker,"/NODEFAULTLIB")
+
+void WinMainCRTStartup()
+{
+ MessageBox(NULL,"MINIEXE!","mini",MB_OK);
+}
--- /dev/null
+#include <windows.h>
+#ifdef MSC_VER
+#include <afxdb.h>
+#include <atlstr.h>
+#include <commctrl.h>
+#endif
+#include <stdio.h>
+#include <algorithm>
+#include <string>
+#include <vector>
+#include <map>
+#include <assert.h>
+#include <time.h>
+#include <iostream>
+
+#pragma comment(lib, "ws2_32.lib")
+#pragma comment(lib, "user32.lib")
+#pragma comment(lib, "strmiids.lib")
+#pragma comment(lib, "Ole32.lib")
+#pragma comment(lib, "gdi32.lib")
+#pragma comment(lib, "ddraw.lib")
+#pragma comment(lib, "dxguid.lib")
+#pragma comment(lib, "shell32.lib")
+using namespace std;
+
+
+#include <stdio.h>
+
+
+#include <windows.h>
+
+struct PAT_TABLE{
+ BYTE flag;
+ BYTE begin_chs[3];
+ BYTE type;
+ BYTE end_chs[3];
+ DWORD begin_lba;
+ DWORD size_lba;
+};
+
+int main(void)
+{
+ HANDLE hDrive;
+ char drivename[30];
+ unsigned char buf[512];
+ unsigned long readsize;
+ PAT_TABLE *pt;
+
+
+ sprintf(drivename, "\\\\.\\physicaldrive0");
+ hDrive= CreateFile(drivename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+
+
+ // \94F\8e¯\82Å\82«\82é\83h\83\89\83C\83u\82ª\82È\82¯\82ê\82Î\8fI\97¹
+ if (hDrive == INVALID_HANDLE_VALUE){
+ printf("cant open");
+ return 0;
+ }
+
+
+ // buf\82É\93Ç\82Ý\8d\9e\82Þ
+ ReadFile(hDrive, buf, sizeof(buf), &readsize, NULL);
+ //buf[readsize]= '\0';
+
+ pt = (PAT_TABLE *)(buf + 0x200 - 2 - sizeof(PAT_TABLE) * 4);
+ for(int i = 0; i < 4; i++){
+ printf("%d:%p-%p\n", i, pt[i].begin_lba, pt[i].size_lba);
+ }
+ memset(&pt[1], 0, sizeof(PAT_TABLE));
+
+ //SetFilePointer(hDrive, s, 0, 0);
+
+ HANDLE hf = CreateFile("g:\\win7_32bit_back.img", GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
+ if(hf == (HANDLE)0xffffffff){
+ printf("create file error %d", GetLastError());
+ return 0;
+ }
+ WriteFile(hf, buf, sizeof(buf), &readsize, NULL);
+
+ //3BF F04C \83Z\83N\83^\93Ç\82Þ
+ DWORD bufsize = 0x10000000;
+ BYTE *tmp = new BYTE [bufsize];//0x80000\83Z\83N\83^
+ for(int i = 0; i < 0x78; i++){
+ ReadFile(hDrive, tmp, bufsize, &readsize, NULL);
+ WriteFile(hf, tmp, bufsize, &readsize, NULL);
+ printf("%d/0x78\n", i);
+ }
+
+ CloseHandle(hf);
+
+ // \83h\83\89\83C\83u\93Ç\82Ý\8eæ\82è\83n\83\93\83h\83\8b\82ð\95Â\82¶\82é
+ CloseHandle(hDrive);
+
+
+
+
+ return 0;
+}
\ No newline at end of file
--- /dev/null
+#include <windows.h>
+#ifdef MSC_VER
+#include <afxdb.h>
+#include <atlstr.h>
+#include <commctrl.h>
+#endif
+#include <stdio.h>
+#include <algorithm>
+#include <string>
+#include <vector>
+#include <map>
+#include <assert.h>
+#include <time.h>
+#include <iostream>
+#include <stdlib.h>
+#pragma comment(lib, "ws2_32.lib")
+#pragma comment(lib, "user32.lib")
+#pragma comment(lib, "strmiids.lib")
+#pragma comment(lib, "Ole32.lib")
+#pragma comment(lib, "gdi32.lib")
+#pragma comment(lib, "ddraw.lib")
+#pragma comment(lib, "dxguid.lib")
+#pragma comment(lib, "shell32.lib")
+using namespace std;
+
+
+#include <stdio.h>
+
+int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR lpCmdLine, int){
+ HWND hWnd = FindWindow("SDL_app", "QEMU [Stopped]");
+ if(hWnd == NULL){
+ hWnd = FindWindow("SDL_app", "QEMU");
+ }
+ SendMessage(hWnd, WM_CLOSE, 0, 0);
+
+ SetCurrentDirectory("G:\\c\\os\\z_tools\\qemu\\");
+ system("G:\\c\\os\\z_tools\\qemu\\qemu-aa.bat");
+}
--- /dev/null
+#include <stdio.h>
+#include <windows.h>
+#define MAX_DRIVE 10
+
+
+
+int main(void)
+{
+ HANDLE hDrive;
+ int i,j;
+ char drivename[30];
+ unsigned char buf[512*20];
+ unsigned char buf2[512*20];
+ unsigned long readsize;
+
+
+
+ // \95¨\97\9d\83h\83\89\83C\83u\\.\physicaldrive0\82©\82ç\8f\87\82É\93Ç\82Ý\8eæ\82é
+ for (i=0; i<=MAX_DRIVE; i++){
+
+
+ sprintf(drivename, "\\\\.\\physicaldrive%d", i);
+ hDrive= CreateFile(drivename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+
+
+ // \94F\8e¯\82Å\82«\82é\83h\83\89\83C\83u\82ª\82È\82¯\82ê\82Î\8fI\97¹
+ if (hDrive == INVALID_HANDLE_VALUE) break;
+
+
+ printf("Drive%d reading...\n", i);
+
+
+ // buf\82É\93Ç\82Ý\8d\9e\82Þ
+ ReadFile(hDrive, buf, sizeof(buf), &readsize, NULL);
+ //buf[readsize]= '\0';
+
+ int s = *(int *)(buf + 0x1c6);
+
+ SetFilePointer(hDrive, s, 0, 0);
+
+ ReadFile(hDrive, buf2, sizeof(buf2), &readsize, NULL);
+
+ // \83h\83\89\83C\83u\93Ç\82Ý\8eæ\82è\83n\83\93\83h\83\8b\82ð\95Â\82¶\82é
+ CloseHandle(hDrive);
+
+
+
+ char fname[200];
+ sprintf(fname, "mbr%d", i);
+ FILE *fp = fopen(fname, "wb");
+ fwrite(buf, sizeof(buf), 1, fp);
+ fclose(fp);
+
+ sprintf(fname, "mbr%d_1", i);
+ fp = fopen(fname, "wb");
+ fwrite(buf2, sizeof(buf2), 1, fp);
+ fclose(fp);
+
+ // \82P\82U\90i\83_\83\93\83v\95û\8e®\82Å\95\\8e¦
+ for (j=0; j<readsize; j++){
+ if (j % 16 == 0) printf("%04X", j);
+ printf(" %02X", buf[j]);
+ if (j % 16 == 15) putchar('\n');
+ }
+ putchar('\n');
+ }
+
+
+ return 0;
+}
\ No newline at end of file