ELF2 for PowerPC64

(MacOS temporarily disabled)
	modified:   ../misc/testsuite/upx_testsuite_1-expected_sha256sums.sh
	modified:   p_lx_elf.cpp
	modified:   stub/Makefile
	modified:   stub/src/arch/powerpc/64/macros.S
	modified:   stub/src/arch/powerpc/64le/bxx.S
	modified:   stub/src/arch/powerpc/64le/macros.S
	modified:   stub/src/arch/powerpc/64le/ppc_regs.h
	new file:   stub/src/dollar-dollar.sed
	modified:   stub/src/powerpc64-linux.elf-entry.S
	modified:   stub/src/powerpc64-linux.elf-fold.S
	modified:   stub/src/powerpc64-linux.elf-fold.lds
	modified:   stub/src/powerpc64le-linux.elf-entry.S
	modified:   stub/src/powerpc64le-linux.elf-fold.S
	modified:   stub/src/powerpc64le-linux.elf-fold.lds
	modified:   stub/src/powerpc64le-linux.kernel.vmlinux.S
           plus generated *.h *.map *.dump
This commit is contained in:
John Reiser
2024-06-29 19:50:59 -07:00
parent 35fca2062e
commit 146c105961
23 changed files with 3731 additions and 2737 deletions
+7 -7
View File
@@ -66,7 +66,7 @@ e7bfe2365ce83121ef757f8be47aa158da537e8992c3b2082e08a0fc4512708b *mips-linux.elf
fcbd8b4709ee324eb772e5de45a85bac5b8e560460fb1d50d0958f2ce568be97 *mipsel-linux.elf/upx-3.95
16b0df199ae2055fb98ddf8cf77a0ee2ea3fa9a386e9cc6dd940647532130c2f *powerpc-linux.elf/upx-3.91
1561a7e36653475eeabe33f65890e9a25e9e00b69ffcfa7928f68d4c0f6b2179 *powerpc-linux.elf/upx-3.95
d74c348bad0c1f3e776cf78282141492a58746c601f3f4288c9e675b7b425f82 *powerpc64le-linux.elf/upx-3.95
cf9174c4302d0670debde60baef584277dac91b8334a6440adfc295e1a24351b *powerpc64le-linux.elf/upx-3.95
"
expected_sha256sums__t120_compress_ucl_nrv2d_3_no_filter="\
84328c2e1cf60ede2d14f4146f6894a5f88bfd027ffccdcad411a05f4b11c6c4 *amd64-linux.elf/upx-3.91
@@ -89,7 +89,7 @@ ee769694227b4f2e6195852ce6cbd899fc0c3308f978dcb85c9fc768d21ce37f *mipsel-linux.e
73c3d6cee83136438b884e8dd3af19c9cb8298401e295bf0428616c75589090b *mipsel-linux.elf/upx-3.95
d05786b4b729f13a9b325322c2ea41ca7db6f60fee9f82c58874a25ee7eca086 *powerpc-linux.elf/upx-3.91
5068e792280ded5f51eb7003807514bdb7fce8739170952fa3ec631d9743bb69 *powerpc-linux.elf/upx-3.95
c4888e9ed7c587163b53246c2c0cb2c6118122feacfc5248f371d8f6c8783abd *powerpc64le-linux.elf/upx-3.95
c643acd0fbea82520dd9e659e3b246f1069d66baf13bce030c2523488ff151a3 *powerpc64le-linux.elf/upx-3.95
"
expected_sha256sums__t130_compress_ucl_nrv2e_3_no_filter="\
24f1c2077016095f0cdebcef1546777e39fd1a76b39ce0ef9be2f11bb5e4a49f *amd64-linux.elf/upx-3.91
@@ -112,7 +112,7 @@ d18aa30ba7a8bc500517b8dcdd16976806c88c5a49e721f8a54d216fb7f7b230 *mipsel-linux.e
fa3be8f93006a88c7ad3d9fd13f600c4f69745859eb76f7eab317a5b87d256ea *mipsel-linux.elf/upx-3.95
1eaa5a0165d9d7cd6c0dd1f6c223f60cb5c213ff8f74af78764b075a7202f334 *powerpc-linux.elf/upx-3.91
39133844ee0264df192e96e2447f5383e7cef42dbf08e9dd5b8928328894f62b *powerpc-linux.elf/upx-3.95
cf8c7d3616c00e6709eea0ae335cc3959a8debdac3623076541f51724649a6cc *powerpc64le-linux.elf/upx-3.95
aaeb2c121f815cad87d3a9b0c784894ae15e8c689d47cb934f433edc57d2928c *powerpc64le-linux.elf/upx-3.95
"
expected_sha256sums__t140_compress_lzma_2_no_filter="\
5e382e35684d069e54b1c3e06065049f604c6c63a326008fc5a8b07dfe580a09 *amd64-linux.elf/upx-3.91
@@ -135,7 +135,7 @@ bfbcb18537081e3393c6d144101675bfe935192390405c3072449fbfa3b38069 *mipsel-linux.e
c8b1cbc45bc1c34f481bdf535bb21ea62d2a6a7ce8bcfb1460cb8c5de85e3c43 *mipsel-linux.elf/upx-3.95
d2ee5c94812125bcc8970f42dd363ebe0f0fd9b3bdfe8973214e956978bc1dad *powerpc-linux.elf/upx-3.91
a214c035d403c1dc7b5d80d6cfd8e00e2278f8600332875f2e53e1c61648fdc2 *powerpc-linux.elf/upx-3.95
e614e62b002d3f8e900099d1683d17a932e8879c53de6b9a9d4a064f551afa8d *powerpc64le-linux.elf/upx-3.95
cc619c9dd1375c13acd41e8627fc7f441987b8d5c779e0815d4eda707fe1a94e *powerpc64le-linux.elf/upx-3.95
"
expected_sha256sums__t150_compress_ucl_2_all_filters="\
352c29b1409142882f937699929b7b5dc06bba8838f5bf3ca1395bc5ae182f48 *amd64-linux.elf/upx-3.91
@@ -158,7 +158,7 @@ c30fa4adac1d1b0838e452e7f6591d433352ed719d32b161e6383828927e9b13 *mipsel-linux.e
b5ece56b5e674b8ba1a6bdd488ad41495d52a8a9e594bd84651e1d7f393d5e23 *mipsel-linux.elf/upx-3.95
e3825daa7fb8d509590c1db347a8403dbd899da453fb43850ebf1d31abbe0cba *powerpc-linux.elf/upx-3.91
20e2b5270c00b18770cc7fd9b2c4d523b2a33b215d354fb00d129d35219094f0 *powerpc-linux.elf/upx-3.95
3b246002f2dff8e44cf3c2cd2c64701514a1354c27b616c9a704f542df30e04f *powerpc64le-linux.elf/upx-3.95
b5c35549d81261e8cba45acb9a622421e26953aeb09355a2aeb46915c15cef5f *powerpc64le-linux.elf/upx-3.95
"
expected_sha256sums__t160_compress_all_methods_1_no_filter="\
095796a3c7949b8f7776a87983fe74f70e61dd47254bd3f1834234b11ae4f6bf *amd64-linux.elf/upx-3.91
@@ -181,7 +181,7 @@ c4cf58843905b62b0fe50266b926f46041a7329ca1f8237a5743fc54a6daed68 *mipsel-linux.e
558047321b8771a5445bd56741334a954f1d722d9e70764ca13a1075ad139378 *mipsel-linux.elf/upx-3.95
4a57ba95ab87a2710d2e3f93a344b3f56cae08043c5b3f2ce55965a59d13762e *powerpc-linux.elf/upx-3.91
c37806b0d68697276cdd208ab37c92e01055bfbab73c6bbdf054c95fe9cef3b9 *powerpc-linux.elf/upx-3.95
bdd174f8e00e1364fba1f821b56e0083fb9993d2bab9e3a93fced8f66ccc84c7 *powerpc64le-linux.elf/upx-3.95
90cc5c0105a941e4dd72d5a44557639618440cd4ef339b7c181d90541348d207 *powerpc64le-linux.elf/upx-3.95
"
expected_sha256sums__t170_compress_all_methods_no_lzma_5_no_filter="\
9c0cbd5abc56d506be45a411613883079adbf3e5ff7f5652fd6cc2808bc4212a *amd64-linux.elf/upx-3.91
@@ -204,6 +204,6 @@ eb01b6f27798690115cabb88314551579da509455232bbaa3276eddc25106d0d *i386-win32.pe/
b34e08324b5f078b1f7408afcf72f7b6fb7f2a25e76332459aa30c020124f04c *mipsel-linux.elf/upx-3.95
1c0fde4880d16710cba3d2d285d8af01aff2b50bd8f0203afcd3a338a8a0b0b1 *powerpc-linux.elf/upx-3.91
60f7c8153f3e0ae5d793645b88b6323630fd1b8caf40511a26836835aa99228d *powerpc-linux.elf/upx-3.95
c0d47dc46b0731adb4797d32ff9a004658a6ccd7e00254fd96f4dcc43d78590d *powerpc64le-linux.elf/upx-3.95
ee0faaac156f1111862566023e1b5d662bbe8c256d027504976d74bb148b8c66 *powerpc64le-linux.elf/upx-3.95
"
########## end .sha256sums.recreate
+3 -3
View File
@@ -1652,7 +1652,7 @@ PackLinuxElf64::buildLinuxLoader(
else if (0
|| this->e_machine==Elf64_Ehdr::EM_X86_64
|| this->e_machine==Elf64_Ehdr::EM_AARCH64
//ELF2 NYI || this->e_machine==Elf64_Ehdr::EM_PPC64
|| this->e_machine==Elf64_Ehdr::EM_PPC64
) { // main program with ELF2 de-compressor
initLoader(fold, szfold);
char sec[120]; memset(sec, 0, sizeof(sec)); // debug convenience
@@ -1720,7 +1720,7 @@ PackLinuxElf64::buildLinuxLoader(
&& (0
|| this->e_machine==Elf64_Ehdr::EM_X86_64
|| this->e_machine==Elf64_Ehdr::EM_AARCH64
//ELF2 NYI || this->e_machine==Elf64_Ehdr::EM_PPC64
|| this->e_machine==Elf64_Ehdr::EM_PPC64
)
) {
addLoader("ELFMAINX,ELFMAINZ,FOLDEXEC,IDENTSTR");
@@ -1728,7 +1728,7 @@ PackLinuxElf64::buildLinuxLoader(
else if (0
|| this->e_machine==Elf64_Ehdr::EM_X86_64
|| this->e_machine==Elf64_Ehdr::EM_AARCH64
//ELF2 NYI || this->e_machine==Elf64_Ehdr::EM_PPC64
|| this->e_machine==Elf64_Ehdr::EM_PPC64
) { // main program with ELF2 de-compressor
addLoader("ELFMAINX,ELFMAINZ,FOLDEXEC,IDENTSTR");
if (this->e_machine==Elf64_Ehdr::EM_PPC64
+87 -31
View File
@@ -138,9 +138,9 @@ STUBS += powerpc64le-linux.elf-entry.h
STUBS += powerpc64le-linux.elf-fold.h
STUBS += powerpc64le-linux.kernel.vmlinux-head.h
STUBS += powerpc64le-linux.kernel.vmlinux.h
STUBS += powerpc64-darwin.dylib-entry.h
STUBS += powerpc64-darwin.macho-entry.h
STUBS += powerpc64-darwin.macho-fold.h
#STUBS += powerpc64-darwin.dylib-entry.h
#STUBS += powerpc64-darwin.macho-entry.h
#STUBS += powerpc64-darwin.macho-fold.h
STUBS += powerpc64-linux.elf-entry.h
STUBS += powerpc64-linux.elf-fold.h
#STUBS += powerpc64-linux.kernel.vmlinux-head.h
@@ -388,6 +388,10 @@ amd64-darwin.macho-entry.h : $(srcdir)/src/$$T.S
$(call tc,f-embed_objinfo,tmp/$T.bin)
$(call tc,bin2h) tmp/$T.bin $@
# multiarch-ld-2.17 -b elf64-x86-64 --no-warn-mismatch --strip-all --oformat binary \
# -Map tmp/amd64-darwin.macho-fold.map \
# tmp/amd64-darwin.macho-fold.o tmp/amd64-darwin.macho-main.o \
# -o tmp/amd64-darwin.macho-fold.bin
amd64-darwin.macho-fold.h : tmp/$$T.o tmp/amd64-darwin.macho-main.o
$(call tc,ld) --no-warn-mismatch --strip-all --oformat binary -Map tmp/$T.map $(filter %.o,$^) -o tmp/$T.bin
chmod a-x tmp/$T.bin
@@ -1675,7 +1679,6 @@ tmp/powerpc64-darwin.macho-fold.o : $(srcdir)/src/$$T.S
# Besides, PowerPC has 31.5 registers (r0 cannot index), which is plenty.
tmp/powerpc64-darwin.macho-main.o : $(srcdir)/src/$$T.c
$(call tc,gcc) -c -O $< -o $@
$(call tc,f-objstrip,$@)
# /***********************************************************************
@@ -1685,10 +1688,12 @@ tmp/powerpc64-darwin.macho-main.o : $(srcdir)/src/$$T.c
powerpc64le-linux.elf%.h : tc_list = powerpc64le-linux.elf default
powerpc64le-linux.elf%.h : tc_bfdname = elf64-powerpcle
tc.powerpc64le-linux.elf.gcc = powerpc64-linux-gcc-4.9.2 -m64 -mlittle-endian -nostdinc -MMD -MT $@
tc.powerpc64le-linux.elf.gcc = powerpc64-linux-gcc-4.9.2 -m64 -mlittle-endian -DBIG_ENDIAN=0 -nostdinc -MMD -MT $@
tc.powerpc64le-linux.elf.gcc += -fno-exceptions -fno-asynchronous-unwind-tables -fno-stack-protector
tc.powerpc64le-linux.elf.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototypes -Wwrite-strings -Werror
tc.powerpc64le-linux.elf.as = powerpc64-linux-gcc-4.9.2 -m64 -mlittle-endian -DBIG_ENDIAN=0 -nostdinc -MMD -MT -c $@
tc.powerpc64le-linux.elf.ld = powerpc64-linux-ld-2.25 -b $(tc_bfdname)
tc.powerpc64le-linux.elf.objcopy = multiarch-objcopy-2.27 -F $(tc_bfdname)
tc.powerpc64le-linux.elf.objdump = multiarch-objdump-2.27 -b $(tc_bfdname)
@@ -1698,29 +1703,53 @@ powerpc64le-linux.elf-entry.h : $(srcdir)/src/$$T.S
$(call tc,f-embed_objinfo,tmp/$T.bin)
$(call tc,bin2h) tmp/$T.bin $@
powerpc64le-linux.elf-fold.h : tmp/$$T.o tmp/powerpc64le-linux.elf-main.o $(srcdir)/src/$$T.lds
$(call tc,ld) --strip-all -T $(srcdir)/src/$T.lds -Map tmp/$T.map $(filter %.o,$^) -o tmp/$T.bin
$(call tc,f-objstrip,tmp/$T.bin)
$(call tc,sstrip) tmp/$T.bin
powerpc64le-linux.elf-fold.h : $(srcdir)/src/$$T.lds \
$(srcdir)/src/$$T.S \
tmp/powerpc64le-linux.elf-main2.s \
src/powerpc64le-expand.S
cat > tmp/powerpc64le-linux.elf-fold-2.S \
src/powerpc64le-linux.elf-fold.S \
tmp/powerpc64le-linux.elf-main2.s \
src/powerpc64le-expand.S
(cd tmp; ln -sf ../src/arch arch)
# /lib/cpp: process the #define and #include in *.S hand-written assunbler.
# sed: Remove 64-bit calling conventions from already-compiled *.s
# by deleting .toc, and keeping just the label from:
# .section ".opd","aw"
# .align 3
#auxv_up:
# .quad .L7L.auxv_up,.TOC.@tocbase
# .previous
/lib/cpp -DBIG_ENDIAN=0 \
tmp/powerpc64le-linux.elf-fold-2.S \
| > tmp/powerpc64le-linux.elf-fold-3.S \
sed -e '/\.section\s*"\.toc","aw"/d' \
-e '/\.section\s*"\.opd","aw"/,/\.previous/{ /:/P ; d }'
$(call tc,gcc) -c tmp/powerpc64le-linux.elf-fold-3.S -o tmp/$T.o
$(call tc,objdump) -Dr $(tc_objdump_disasm_options) tmp/$T.o > tmp/$@.disasm
$(call tc,gpp_mkdep) --mode=c --MMD=$@ --MF=tmp/$T.d $(srcdir)/src/$T.S
$(call tc,ld) -r -T $(srcdir)/src/$T.lds -Map tmp/$T.map -o tmp/$T.bin \
tmp/$T.o
$(call tc,f-embed_objinfo_without_xstrip_keep_dot_text,tmp/$T.bin)
# "unrecognized program segment header size" $(call tc,sstrip) tmp/$T.bin
$(call tc,bin2h) tmp/$T.bin $@
tmp/powerpc64le-linux.elf-fold.o : $(srcdir)/src/$$T.S
$(call tc,gcc) -c $< -o $@
$(call tc,f-objstrip,$@)
tmp/powerpc64le-linux.elf-main.o : $(srcdir)/src/$$T.c
$(call tc,gcc) -c -Os $< -o $@
$(call tc,f-objstrip,$@)
tmp/powerpc64le-linux.elf-main2.s: $(srcdir)/src/$$T.c $(srcdir)/src/amd64-linux.elf-main2.c
$(call tc,gcc) -S -O $< -o - \
| sed -e '/^\t\.file\t/d' \
-e 's/L[0-9]*/L7&/g' \
-e $$(cat src/dollar-dollar.sed) \
-e 's/ j[ ][ ]*$$L/ b $$L/' \
-e 's/ jal[ ][ ]*\([^\$$]\)/ bal \1/' \
>$@
powerpc64-linux.elf%.h : tc_list = powerpc64-linux.elf default
powerpc64-linux.elf%.h : tc_bfdname = elf64-powerpc
tc.powerpc64-linux.elf.gcc = powerpc64-linux-gcc-4.9.2 -m64 -mbig-endian -nostdinc -MMD -MT $@
tc.powerpc64-linux.elf.gcc = powerpc64-linux-gcc-4.9.2 -m64 -mbig-endian -DBIG_ENDIAN=1 -DUSE_TOC=1 -nostdinc -MMD -MT $@
tc.powerpc64-linux.elf.gcc += -fno-exceptions -fno-asynchronous-unwind-tables -fno-stack-protector
tc.powerpc64-linux.elf.gcc += -mno-longcall -mno-toc
tc.powerpc64-linux.elf.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototypes -Wwrite-strings -Werror
tc.powerpc64-linux.elf.ld = powerpc64-linux-ld-2.25 -b $(tc_bfdname)
tc.powerpc64-linux.elf.objcopy = multiarch-objcopy-2.27 -F $(tc_bfdname)
tc.powerpc64-linux.elf.objdump = multiarch-objdump-2.27 -b $(tc_bfdname)
@@ -1730,21 +1759,48 @@ powerpc64-linux.elf-entry.h : $(srcdir)/src/$$T.S
$(call tc,f-embed_objinfo,tmp/$T.bin)
$(call tc,bin2h) tmp/$T.bin $@
powerpc64-linux.elf-fold.h : tmp/$$T.o tmp/powerpc64-linux.elf-main.o $(srcdir)/src/$$T.lds
$(call tc,ld) --strip-all -T $(srcdir)/src/$T.lds -Map tmp/$T.map $(filter %.o,$^) -o tmp/$T.bin
$(call tc,f-objstrip,tmp/$T.bin)
$(call tc,sstrip) tmp/$T.bin
powerpc64-linux.elf-fold.h : $(srcdir)/src/$$T.lds \
$(srcdir)/src/$$T.S \
tmp/powerpc64-linux.elf-main2.s \
src/powerpc64-expand.S
cat > tmp/powerpc64-linux.elf-fold-2.S \
src/powerpc64-linux.elf-fold.S \
tmp/powerpc64-linux.elf-main2.s \
src/powerpc64-expand.S
(cd tmp; ln -sf ../src/arch arch)
# /lib/cpp: process the #define and #include in *.S hand-written assunbler.
# sed: Remove 64-bit calling conventions from already-compiled *.s
# by deleting .toc, and keeping just the label from:
# .section ".opd","aw"
# .align 3
#auxv_up:
# .quad .L7L.auxv_up,.TOC.@tocbase
# .previous
/lib/cpp -DBIG_ENDIAN=1 -DUSE_TOC=1 \
tmp/powerpc64-linux.elf-fold-2.S \
| > tmp/powerpc64-linux.elf-fold-3.S \
sed -e '/\.section\s*"\.toc","aw"/d' \
-e '/\.section\s*"\.opd","aw"/,/\.previous/{ /:/P ; d }'
$(call tc,gcc) -c tmp/powerpc64-linux.elf-fold-3.S -o tmp/$T.o
$(call tc,objdump) -Dr $(tc_objdump_disasm_options) tmp/$T.o > tmp/$@.disasm
$(call tc,gpp_mkdep) --mode=c --MMD=$@ --MF=tmp/$T.d $(srcdir)/src/$T.S
$(call tc,ld) -r -T $(srcdir)/src/$T.lds -Map tmp/$T.map -o tmp/$T.bin \
tmp/$T.o
$(call tc,f-embed_objinfo_without_xstrip_keep_dot_text,tmp/$T.bin)
# "unrecognized program segment header size" $(call tc,sstrip) tmp/$T.bin
$(call tc,bin2h) tmp/$T.bin $@
tmp/powerpc64-linux.elf-fold.o : $(srcdir)/src/$$T.S
$(call tc,gcc) -c $< -o $@
$(call tc,f-objstrip,$@)
tmp/powerpc64-linux.elf-main.o : $(srcdir)/src/$$T.c
$(call tc,gcc) -c -Os $< -o $@
$(call tc,f-objstrip,$@)
tmp/powerpc64-linux.elf-main2.s: $(srcdir)/src/$$T.c $(srcdir)/src/amd64-linux.elf-main2.c
$(call tc,gcc) -S -O $< -o - \
| sed -e '/^\t\.file\t/d' \
-e 's/L[0-9]*/L7&/g' \
-e $$(cat src/dollar-dollar.sed) \
-e 's/ j[ ][ ]*$$L/ b $$L/' \
-e 's/ jal[ ][ ]*\([^\$$]\)/ bal \1/' \
>$@
# /***********************************************************************
# // powerpc64le-linux.kernel.vmlinux
# /***********************************************************************
# // powerpc64le-linux.kernel.vmlinux
# // powerpc64le-linux.kernel.vmlinux-head
+129 -655
View File
@@ -1,5 +1,5 @@
/* powerpc64-linux.elf-entry.h
created from powerpc64-linux.elf-entry.bin, 10464 (0x28e0) bytes
created from powerpc64-linux.elf-entry.bin, 2046 (0x7fe) bytes
This file is part of the UPX executable compressor.
@@ -32,663 +32,137 @@
/* clang-format off */
#define STUB_POWERPC64_LINUX_ELF_ENTRY_SIZE 10464
#define STUB_POWERPC64_LINUX_ELF_ENTRY_ADLER32 0x27a1e6a0
#define STUB_POWERPC64_LINUX_ELF_ENTRY_CRC32 0xd4850dc9
#define STUB_POWERPC64_LINUX_ELF_ENTRY_SIZE 2046
#define STUB_POWERPC64_LINUX_ELF_ENTRY_ADLER32 0x963d2937
#define STUB_POWERPC64_LINUX_ELF_ENTRY_CRC32 0xb90f3189
unsigned char stub_powerpc64_linux_elf_entry[10464] = {
unsigned char stub_powerpc64_linux_elf_entry[2046] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 0, 1, 0, 21, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 8,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 24,
/* 0x0030 */ 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0,
/* 0x0040 */ 72, 0, 0, 1,124, 0, 41,236,125,168, 2,166, 40, 7, 0, 8,
/* 0x0050 */ 64,130, 1, 72,248,166, 0, 0,124,132, 26, 20, 60, 0,128, 0,
/* 0x0040 */ 72, 0, 0, 1,124, 0, 41,236,125,168, 2,166, 40, 7, 0, 2,
/* 0x0050 */ 64,130, 0,236,248,166, 0, 0,124,132, 26, 20, 60, 0,128, 0,
/* 0x0060 */ 120, 0, 7,198,124, 9, 3,120, 56, 99,255,255, 56,165,255,255,
/* 0x0070 */ 57, 64,255,255, 72, 0, 1, 20, 57, 32, 0, 1,125, 41, 28, 44,
/* 0x0080 */ 56, 99, 0, 4,125, 41, 73, 20,121, 41,248, 36,124, 41, 0, 64,
/* 0x0090 */ 125, 41, 72, 20, 78,128, 0, 32,141, 3, 0, 1,157, 5, 0, 1,
/* 0x00a0 */ 124, 41, 0, 64,125, 41, 72, 20, 65,194,255,209, 65,225,255,236,
/* 0x00b0 */ 56,224, 0, 1, 72, 0, 0, 20, 56,231,255,255,125, 41, 72, 21,
/* 0x00c0 */ 65,194,255,185,124,231, 57, 20,125, 41, 72, 21, 65,194,255,173,
/* 0x00d0 */ 124,231, 57, 20,124, 41, 0, 64,125, 41, 72, 20, 65,194,255,157,
/* 0x00e0 */ 65,192,255,216, 52,231,255,253, 57, 0, 0, 0, 65,192, 0, 40,
/* 0x00f0 */ 141, 99, 0, 1,120,231, 69,198,124,231, 6,118,124,234, 88,249,
/* 0x0100 */ 125, 74, 14,116, 65,194, 0, 0,113,107, 0, 1, 65,226, 0, 80,
/* 0x0110 */ 72, 0, 0, 20,124, 41, 0, 64,125, 41, 72, 20, 65,194,255, 93,
/* 0x0120 */ 65,225, 0, 60, 57, 0, 0, 1,124, 41, 0, 64,125, 41, 72, 20,
/* 0x0130 */ 65,194,255, 73, 65,225, 0, 40,125, 41, 72, 21, 65,194,255, 61,
/* 0x0140 */ 125, 8, 65, 20,124, 41, 0, 64,125, 41, 72, 20, 65,194,255, 45,
/* 0x0150 */ 65,192,255,232, 57, 8, 0, 2, 72, 0, 0, 16,125, 41, 72, 21,
/* 0x0160 */ 65,194,255, 25,125, 8, 65, 20, 33,106,250,255, 57, 8, 0, 2,
/* 0x0170 */ 125, 8, 1,148,124,234, 42, 20,125, 9, 3,166,141,103, 0, 1,
/* 0x0180 */ 157,101, 0, 1, 67, 32,255,248, 56,224, 1, 0,124, 7, 41,236,
/* 0x0190 */ 124, 7, 26, 44, 75,255,255, 12,124, 0, 41,236,125,168, 2,166,
/* 0x01a0 */ 40, 7, 0, 5, 64,130, 1, 48,248,166, 0, 0,124,132, 26, 20,
/* 0x01b0 */ 60, 0,128, 0,120, 0, 7,198, 61, 32,128, 0,121, 41, 7,198,
/* 0x01c0 */ 56, 99,255,255, 56,165,255,255, 57, 64,255,255, 72, 0, 0,248,
/* 0x01d0 */ 57, 32, 0, 1,125, 41, 28, 44, 56, 99, 0, 4,125, 41, 73, 20,
/* 0x01e0 */ 121, 41,248, 36,124, 41, 0, 64,125, 41, 72, 20, 78,128, 0, 32,
/* 0x01f0 */ 141, 3, 0, 1,157, 5, 0, 1,124, 41, 0, 64,125, 41, 72, 20,
/* 0x0200 */ 65,194,255,209, 65,225,255,236, 56,224, 0, 1, 72, 0, 0, 20,
/* 0x0210 */ 56,231,255,255,125, 41, 72, 21, 65,194,255,185,124,231, 57, 21,
/* 0x0220 */ 125, 41, 72, 21, 65,194,255,173,124,231, 57, 21,124, 41, 0, 64,
/* 0x0230 */ 125, 41, 72, 20, 65,194,255,157, 65,192,255,216, 57, 0, 0, 0,
/* 0x0240 */ 52,231,255,253, 84,231, 64, 46, 65,192, 0, 28,141, 99, 0, 1,
/* 0x0250 */ 124,234, 88,249,125, 74, 14,112, 44, 42, 0, 0, 65,194, 0, 0,
/* 0x0260 */ 72, 0, 0, 12,125, 41, 72, 21, 65,194,255,105,125, 8, 65, 21,
/* 0x0270 */ 125, 41, 72, 21, 65,194,255, 93,125, 8, 65, 21, 64,130, 0, 40,
/* 0x0280 */ 57, 0, 0, 1,125, 41, 72, 21, 65,194,255, 73,125, 8, 65, 21,
/* 0x0290 */ 124, 41, 0, 64,125, 41, 72, 20, 65,194,255, 57, 65,192,255,232,
/* 0x02a0 */ 57, 8, 0, 2, 32,234,250,255, 57, 8, 0, 1,125, 8, 1,148,
/* 0x02b0 */ 124,234, 42, 20,125, 9, 3,166,141, 7, 0, 1,157, 5, 0, 1,
/* 0x02c0 */ 67, 32,255,248, 56,224, 1, 0,124, 7, 41,236,124, 7, 26, 44,
/* 0x02d0 */ 75,255,255, 40,124, 0, 41,236,125,168, 2,166, 40, 7, 0, 2,
/* 0x02e0 */ 64,130, 0,236,248,166, 0, 0,124,132, 26, 20, 60, 0,128, 0,
/* 0x02f0 */ 120, 0, 7,198,124, 9, 3,120, 56, 99,255,255, 56,165,255,255,
/* 0x0300 */ 57, 64,255,255, 72, 0, 0,184,125, 41, 73, 20,121, 41,248, 36,
/* 0x0310 */ 124, 41, 0, 64,125, 41, 72, 20, 76,226, 0, 32, 57, 32, 0, 1,
/* 0x0320 */ 125, 41, 28, 44, 56, 99, 0, 4, 75,255,255,224,141, 3, 0, 1,
/* 0x0330 */ 157, 5, 0, 1, 75,255,255,221, 65,225,255,244, 56,224, 0, 1,
/* 0x0340 */ 75,255,255,209,124,231, 57, 21, 75,255,255,201, 65,192,255,244,
/* 0x0350 */ 52,231,255,253, 57, 0, 0, 0, 65,192, 0, 24,141, 99, 0, 1,
/* 0x0360 */ 84,231, 64, 46,124,234, 88,248, 85, 75, 0, 63, 65,194, 0, 0,
/* 0x0370 */ 75,255,255,161,125, 8, 65, 21, 75,255,255,153,125, 8, 65, 21,
/* 0x0380 */ 56,224, 0, 1, 64,194, 0, 28, 56,224, 0, 3, 57, 0, 0, 1,
/* 0x0390 */ 75,255,255,129,125, 8, 65, 21, 75,255,255,121, 65,192,255,244,
/* 0x03a0 */ 33,106,242,255,125, 8, 57, 20,124,234, 42, 20,125, 9, 3,166,
/* 0x03b0 */ 141, 7, 0, 1,157, 5, 0, 1, 67, 32,255,248, 56,224, 1, 0,
/* 0x03c0 */ 124, 7, 41,236,124, 7, 26, 44, 75,255,255,108, 40, 7, 0, 14,
/* 0x03d0 */ 64,130, 0, 0,248, 33,255,145,124, 8, 2,166, 57, 38, 0, 4,
/* 0x03e0 */ 129, 6, 0, 4,124,167, 43,120, 56,164,255,254, 56,131, 0, 2,
/* 0x03f0 */ 137,131, 0, 0,248, 1, 0, 16,121,139,232,194,121,140, 7, 96,
/* 0x0400 */ 56, 96,250, 0,124, 99, 88, 54, 56, 99,241,100,124, 38, 11,120,
/* 0x0410 */ 124, 33, 26, 20,120, 33, 6,100, 56, 0, 0, 0,124,195, 51,120,
/* 0x0420 */ 144, 9, 0, 0,248, 3,255,249,124, 33, 24, 64, 65,128,255,248,
/* 0x0430 */ 248,193, 0, 0,136, 4,255,255, 56,193, 0, 36, 56, 97, 0, 40,
/* 0x0440 */ 153,131, 0, 2,248,225, 0, 16,249, 33, 0, 24,120, 11,225, 2,
/* 0x0450 */ 120, 0, 7, 32,153, 99, 0, 1,152, 3, 0, 0,248, 33,255,145,
/* 0x0460 */ 56, 33, 0,112,232,161, 0, 24,232,225, 0, 16,128,165, 0, 0,
/* 0x0470 */ 232, 33, 0, 0,124,165, 58, 20,232, 1, 0, 16, 56,165,255,255,
/* 0x0480 */ 232, 33, 0, 0,124, 8, 3,166, 72, 0, 0, 9, 72, 0, 11,188,
/* 0x0490 */ 124, 8, 2,166, 57, 64, 0, 1, 72, 0, 0, 1, 59, 99, 0, 4,
/* 0x04a0 */ 59,227, 0, 2, 56, 0, 4, 0,137, 99, 0, 2,125, 75, 88, 48,
/* 0x04b0 */ 57,107,255,255,121,107, 0, 32,249, 97,255, 96,137, 99, 0, 1,
/* 0x04c0 */ 125, 74, 88, 48, 57, 96, 0, 0, 57, 74,255,255,121, 74, 0, 32,
/* 0x04d0 */ 249, 65,255,104,137, 67, 0, 0,145,102, 0, 0,145,105, 0, 0,
/* 0x04e0 */ 125, 85, 7,180,137, 99, 0, 1,125, 75, 82, 20, 57, 96, 3, 0,
/* 0x04f0 */ 125,106, 80, 48, 57, 74, 7, 54,121, 74, 0, 32, 47,138, 0, 0,
/* 0x0500 */ 57,106, 0, 1, 64,254, 0, 8, 57, 96, 0, 1, 53,107,255,255,
/* 0x0510 */ 65,130, 0, 12,180, 31, 0, 2, 75,255,255,244, 56, 0, 0, 5,
/* 0x0520 */ 124,164, 42, 20,124, 9, 3,166, 57,100, 0, 5,124,159, 35,120,
/* 0x0530 */ 57, 64, 0, 0,127,191, 40, 64, 64,158, 0, 12, 56, 96, 0, 1,
/* 0x0540 */ 72, 0, 10, 88, 59,255, 0, 1,136, 31,255,255, 85, 74, 64, 46,
/* 0x0550 */ 124, 10, 83,120,121, 74, 0, 32, 66, 0,255,220, 56, 0,255,255,
/* 0x0560 */ 63, 32, 0,255,120, 0, 0, 32, 58,192, 0, 1, 59, 0, 0, 1,
/* 0x0570 */ 58,224, 0, 1, 58, 64, 0, 1, 57,128, 0, 0, 59,192, 0, 0,
/* 0x0580 */ 59, 64, 0, 0, 99, 57,255,255, 58,128, 0, 1, 34,117, 0, 8,
/* 0x0590 */ 127,154, 64, 64, 64,156, 9,216,235,161,255, 96,127,128,200, 64,
/* 0x05a0 */ 127, 95,232, 56, 85,157, 32, 54,127,252, 7,180,127,189, 7,180,
/* 0x05b0 */ 127,188,234, 20,123,189, 15,164, 65,157, 0, 36,127,171, 40, 64,
/* 0x05c0 */ 65,158,255,124,139,139, 0, 0, 85, 74, 64, 46,120, 0, 64, 40,
/* 0x05d0 */ 57,107, 0, 1,127,138, 83,120,121, 74, 0, 32,125,251,234, 46,
/* 0x05e0 */ 84, 16,170,254,126, 16,121,214,127,138,128, 64,122, 28, 0, 32,
/* 0x05f0 */ 64,156, 1,228, 32, 15, 8, 0,235,225,255,104,127,222,158, 48,
/* 0x0600 */ 124, 0, 46,112,125,224,122, 20,127, 64,248, 56,125,251,235, 46,
/* 0x0610 */ 124, 29,168, 48, 47,140, 0, 6,127,190,234, 20, 31,189, 3, 0,
/* 0x0620 */ 123,189, 0, 32, 59,189, 7, 54,123,189, 15,164,127,187,234, 20,
/* 0x0630 */ 65,157, 0, 16, 59,192, 0, 1,127,128,227,120, 72, 0, 1, 12,
/* 0x0640 */ 124, 18,208, 80, 59,192, 0, 1,120, 0, 0, 32,125,231, 0,174,
/* 0x0650 */ 85,255, 8, 60,127,239, 7,180, 87,255, 5,238,127,156,200, 64,
/* 0x0660 */ 127,255, 7,180, 58, 63, 1, 0,126, 49,242, 20,122, 49, 15,164,
/* 0x0670 */ 65,157, 0, 36,127,171, 40, 64, 65,158,254,196,136, 11, 0, 0,
/* 0x0680 */ 85, 74, 64, 46,123,156, 64, 40, 57,107, 0, 1,124, 10, 83,120,
/* 0x0690 */ 121, 74, 0, 32,126, 29,138, 46, 87,128,170,254, 87,222, 8, 60,
/* 0x06a0 */ 124, 0,129,214,127, 10, 0, 64,120, 14, 0, 32, 47,191, 0, 0,
/* 0x06b0 */ 64,152, 0, 36, 32, 16, 8, 0,127,222, 7,180,124, 0, 46,112,
/* 0x06c0 */ 126, 0,130, 20,125,220,115,120,126, 29,139, 46, 65,158, 0, 48,
/* 0x06d0 */ 75,255,255,104,127,128,224, 80,125, 64, 80, 80, 86, 0,217,126,
/* 0x06e0 */ 126, 0,128, 80, 59,222, 0, 1,123,156, 0, 32,121, 74, 0, 32,
/* 0x06f0 */ 126, 29,139, 46,127,222, 7,180, 65,158,255, 64, 47,158, 0,255,
/* 0x0700 */ 64,157,255, 80, 75,255,255, 52,127,128,200, 64,123,208, 15,164,
/* 0x0710 */ 64,157, 0, 68,127,157,130, 46, 84, 31,170,254, 87,222, 8, 60,
/* 0x0720 */ 127,255,225,214,127,138,248, 64,123,241, 0, 32, 64,156, 0, 76,
/* 0x0730 */ 32, 28, 8, 0,127,222, 7,180,124, 0, 46,112,127,128,226, 20,
/* 0x0740 */ 127,157,131, 46,126, 32,139,120, 47,158, 0,255, 64,157,255,188,
/* 0x0750 */ 72, 0, 0, 80,127,171, 40, 64, 65,158,253,228,139,235, 0, 0,
/* 0x0760 */ 85, 74, 64, 46,120, 0, 64, 40, 57,107, 0, 1,127,234, 83,120,
/* 0x0770 */ 121, 74, 0, 32, 75,255,255,160,124, 31, 0, 80,125, 95, 80, 80,
/* 0x0780 */ 87,159,217,126,127,159,224, 80, 59,222, 0, 1,121, 74, 0, 32,
/* 0x0790 */ 127,157,131, 46,127,222, 7,180,120, 17, 0, 32, 75,255,255,168,
/* 0x07a0 */ 123,222, 6, 32, 59,250, 0, 1, 47,140, 0, 3,123,255, 0, 32,
/* 0x07b0 */ 127,199,209,174, 64,157, 7,172, 47,140, 0, 9, 65,157, 0, 12,
/* 0x07c0 */ 57,140,255,253, 72, 0, 0, 8, 57,140,255,250,125,140, 7,180,
/* 0x07d0 */ 72, 0, 7,148,124, 16, 0, 80, 85,254,217,126,126, 16, 80, 80,
/* 0x07e0 */ 125,254,120, 80, 59,140, 0,192,127,128,200, 64,125,251,235, 46,
/* 0x07f0 */ 120, 17, 0, 32,122, 10, 0, 32,123,156, 15,164, 65,157, 0, 36,
/* 0x0800 */ 127,171, 40, 64, 65,158,253, 56,137, 75, 0, 0, 86, 16, 64, 46,
/* 0x0810 */ 120, 17, 64, 40, 57,107, 0, 1,125, 74,131,120,121, 74, 0, 32,
/* 0x0820 */ 126, 27,226, 46, 86, 32,170,254,124, 0,129,214,127,138, 0, 64,
/* 0x0830 */ 120, 30, 0, 32, 64,156, 0, 68, 47,140, 0, 7, 32, 16, 8, 0,
/* 0x0840 */ 125,144, 16, 38, 85,140,239,254,124, 0, 46,112,126, 0,130, 20,
/* 0x0850 */ 127, 22,195,120,125,140, 0,208,126,248,187,120,126, 27,227, 46,
/* 0x0860 */ 121,140,240, 66, 59,163, 6,104,121,140, 16, 0,126, 87,147,120,
/* 0x0870 */ 57,140, 0, 3, 72, 0, 2,124,127,192,136, 80, 86, 15,217,126,
/* 0x0880 */ 126, 15,128, 80,124, 0, 80, 80,127,158,200, 64,126, 27,227, 46,
/* 0x0890 */ 123,209, 0, 32,120, 10, 0, 32, 58, 28, 0, 24, 65,157, 0, 36,
/* 0x08a0 */ 127,171, 40, 64, 65,158,252,152,137, 75, 0, 0, 84, 0, 64, 46,
/* 0x08b0 */ 123,209, 64, 40, 57,107, 0, 1,125, 74, 3,120,121, 74, 0, 32,
/* 0x08c0 */ 125,251,130, 46, 86, 32,170,254,124, 0,121,214,127,138, 0, 64,
/* 0x08d0 */ 120, 30, 0, 32, 64,156, 0,208, 35,143, 8, 0,127,128,200, 64,
/* 0x08e0 */ 127,156, 46,112,125,252,122, 20, 59,189, 1,224,125,251,131, 46,
/* 0x08f0 */ 65,157, 0, 36,127,171, 40, 64, 65,158,252, 68,120, 30, 64, 40,
/* 0x0900 */ 136, 11, 0, 0, 85, 74, 64, 46, 57,107, 0, 1,124, 10, 83,120,
/* 0x0910 */ 121, 74, 0, 32,126, 59,234, 46, 87,220,170,254,127,156,137,214,
/* 0x0920 */ 127,138,224, 64,123,128, 0, 32, 64,156, 0, 80, 35,241, 8, 0,
/* 0x0930 */ 47,186, 0, 0,127,255, 46,112,126, 63,138, 20,126, 59,235, 46,
/* 0x0940 */ 65,158,251,252, 47,140, 0, 7,127,242,208, 80,125,144, 16, 38,
/* 0x0950 */ 85,140,239,254,123,255, 0, 32,125,140, 0,208,127,199,248,174,
/* 0x0960 */ 121,140, 7,164, 59,250, 0, 1, 57,140, 0, 11,123,255, 0, 32,
/* 0x0970 */ 127,199,209,174, 72, 0, 5,240, 86, 32,217,126,124, 0,136, 80,
/* 0x0980 */ 127,220,240, 80,125, 92, 80, 80,124, 27,235, 46,123,222, 0, 32,
/* 0x0990 */ 127, 0,195,120,121, 74, 0, 32,126, 88,147,120,126,242,187,120,
/* 0x09a0 */ 72, 0, 0,124,126, 32,136, 80, 85,254,217,126,124, 0, 80, 80,
/* 0x09b0 */ 125,254,120, 80,127,145,200, 64,125,251,131, 46,122, 61, 0, 32,
/* 0x09c0 */ 120, 10, 0, 32, 58, 28, 0, 48, 65,157, 0, 36,127,171, 40, 64,
/* 0x09d0 */ 65,158,251,108,137, 75, 0, 0, 84, 0, 64, 46,122, 61, 64, 40,
/* 0x09e0 */ 57,107, 0, 1,125, 74, 3,120,121, 74, 0, 32,126, 59,130, 46,
/* 0x09f0 */ 87,160,170,254,124, 0,137,214,127,138, 0, 64,120, 30, 0, 32,
/* 0x0a00 */ 64,156, 0, 36, 32, 17, 8, 0,124, 0, 46,112,126, 32,138, 20,
/* 0x0a10 */ 127, 0,195,120,126, 59,131, 46,126,248,187,120,124, 23, 3,120,
/* 0x0a20 */ 72, 0, 0,160,127,160,232, 80, 86, 62,217,126,124, 0, 80, 80,
/* 0x0a30 */ 126, 62,136, 80,127,157,200, 64,123,175, 0, 32,126, 59,131, 46,
/* 0x0a40 */ 120, 10, 0, 32, 59,156, 0, 72, 65,157, 0, 36,127,171, 40, 64,
/* 0x0a50 */ 65,158,250,236,137, 75, 0, 0, 84, 0, 64, 46,123,175, 64, 40,
/* 0x0a60 */ 57,107, 0, 1,125, 74, 3,120,121, 74, 0, 32,127,187,226, 46,
/* 0x0a70 */ 85,224,170,254,124, 0,233,214,127,138, 0, 64,120, 30, 0, 32,
/* 0x0a80 */ 64,156, 0, 24, 32, 29, 8, 0,124, 0, 46,112,124, 0,234, 20,
/* 0x0a90 */ 124, 27,227, 46, 72, 0, 0, 44,127,192,120, 80,125, 64, 80, 80,
/* 0x0aa0 */ 87,160,217,126,124, 0,232, 80,121, 74, 0, 32,124, 27,227, 46,
/* 0x0ab0 */ 127, 0,195,120,123,222, 0, 32,126,216,179,120,124, 22, 3,120,
/* 0x0ac0 */ 47,140, 0, 7,126, 64,147,120,125,144, 16, 38, 85,140,239,254,
/* 0x0ad0 */ 127, 18,195,120, 59,163, 10,108,126,248,187,120,124, 23, 3,120,
/* 0x0ae0 */ 125,140, 0,208,121,140,240, 66,121,140, 16, 0, 57,140, 0, 11,
/* 0x0af0 */ 127,158,200, 64, 65,157, 0, 36,127,171, 40, 64, 65,158,250, 64,
/* 0x0b00 */ 136, 11, 0, 0, 85, 74, 64, 46,123,222, 64, 40, 57,107, 0, 1,
/* 0x0b10 */ 124, 10, 83,120,121, 74, 0, 32,161,253, 0, 0, 87,220,170,254,
/* 0x0b20 */ 127,156,121,214,127,138,224, 64,123,128, 0, 32, 64,156, 0, 48,
/* 0x0b30 */ 87,255, 24, 56, 34, 47, 8, 0,127,255, 7,180,126, 49, 46,112,
/* 0x0b40 */ 59,255, 0, 2,126, 49,122, 20,123,255, 15,164,178, 61, 0, 0,
/* 0x0b50 */ 58, 0, 0, 0,127,189,250, 20, 72, 0, 0,136,127,220,240, 80,
/* 0x0b60 */ 85,241,217,126,127,156, 80, 80,126, 49,120, 80,127,158,200, 64,
/* 0x0b70 */ 123,208, 0, 32,178, 61, 0, 0,123,138, 0, 32, 65,157, 0, 36,
/* 0x0b80 */ 127,171, 40, 64, 65,158,249,184,137, 75, 0, 0, 87,156, 64, 46,
/* 0x0b90 */ 123,208, 64, 40, 57,107, 0, 1,125, 74,227,120,121, 74, 0, 32,
/* 0x0ba0 */ 163,157, 0, 2, 86, 30,170,254,127,222,225,214,127,138,240, 64,
/* 0x0bb0 */ 123,192, 0, 32, 64,156, 0, 52, 87,255, 24, 56, 35,220, 8, 0,
/* 0x0bc0 */ 127,255, 7,180,127,222, 46,112, 59,255, 0,130,127,158,226, 20,
/* 0x0bd0 */ 123,255, 15,164,179,157, 0, 2, 58, 0, 0, 8,127,189,250, 20,
/* 0x0be0 */ 58, 32, 0, 3, 72, 0, 0, 44, 87,159,217,126,124, 30,128, 80,
/* 0x0bf0 */ 125, 94, 80, 80,127,255,224, 80,121, 74, 0, 32,179,253, 0, 2,
/* 0x0c00 */ 120, 0, 0, 32, 59,189, 2, 4, 58, 0, 0, 16, 58, 32, 0, 8,
/* 0x0c10 */ 59,241,255,255, 59,192, 0, 1,123,255, 0, 32, 59,255, 0, 1,
/* 0x0c20 */ 127,233, 3,166,123,220, 15,164,127,128,200, 64,127,157,226, 20,
/* 0x0c30 */ 65,157, 0, 36,127,171, 40, 64, 65,158,249, 4,139,235, 0, 0,
/* 0x0c40 */ 85, 74, 64, 46,120, 0, 64, 40, 57,107, 0, 1,127,234, 83,120,
/* 0x0c50 */ 121, 74, 0, 32,161,252, 0, 0, 84, 31,170,254, 87,222, 8, 60,
/* 0x0c60 */ 127,255,121,214,127,138,248, 64,123,238, 0, 32, 64,156, 0, 32,
/* 0x0c70 */ 32, 15, 8, 0,127,222, 7,180,124, 0, 46,112,125,224,122, 20,
/* 0x0c80 */ 125,192,115,120,177,252, 0, 0, 72, 0, 0, 40,124, 31, 0, 80,
/* 0x0c90 */ 125, 95, 80, 80, 85,255,217,126,125,255,120, 80, 59,222, 0, 1,
/* 0x0ca0 */ 177,252, 0, 0,120, 0, 0, 32,121, 74, 0, 32,127,222, 7,180,
/* 0x0cb0 */ 66, 0,255,116,126,145,136, 48, 47,140, 0, 3,126, 49,128, 80,
/* 0x0cc0 */ 127,145,242, 20, 65,157, 2, 80, 47,156, 0, 3,127,158,227,120,
/* 0x0cd0 */ 64,157, 0, 8, 59,192, 0, 3, 87,222, 48, 50,127,222, 7,180,
/* 0x0ce0 */ 59,160, 0, 6, 59,222, 1,176,127,169, 3,166,123,222, 15,164,
/* 0x0cf0 */ 59,224, 0, 1,123,241, 15,164,127,128,200, 64,126, 49,242, 20,
/* 0x0d00 */ 65,157, 0, 36,127,171, 40, 64, 65,158,248, 52,139,171, 0, 0,
/* 0x0d10 */ 85, 74, 64, 46,120, 0, 64, 40, 57,107, 0, 1,127,170, 83,120,
/* 0x0d20 */ 121, 74, 0, 32,126, 91,138, 46, 84, 29,170,254, 87,255, 8, 60,
/* 0x0d30 */ 127,189,145,214,127,138,232, 64,123,176, 0, 32, 64,156, 0, 32,
/* 0x0d40 */ 32, 18, 8, 0,127,255, 7,180,124, 0, 46,112,126, 64,146, 20,
/* 0x0d50 */ 126, 0,131,120,126, 91,139, 46, 72, 0, 0, 40,124, 29, 0, 80,
/* 0x0d60 */ 125, 93, 80, 80, 86, 93,217,126,126, 93,144, 80, 59,255, 0, 1,
/* 0x0d70 */ 126, 91,139, 46,120, 0, 0, 32,121, 74, 0, 32,127,255, 7,180,
/* 0x0d80 */ 66, 0,255,116, 59,255,255,192, 47,159, 0, 3,127,242, 7,180,
/* 0x0d90 */ 64,157, 1,108, 87,241, 7,254, 47,159, 0, 13, 98, 49, 0, 2,
/* 0x0da0 */ 127,254, 14,112,122, 61, 0, 32, 65,157, 0, 40, 59,254,255,255,
/* 0x0db0 */ 35,210, 2,176,127,253, 7,180,126, 63,248, 48,127,222,250, 20,
/* 0x0dc0 */ 123,222, 15,164, 59,222,255,254,127,219,242, 20, 72, 0, 0,116,
/* 0x0dd0 */ 59,222,255,250,123,222, 0, 32, 59,222, 0, 1,127,201, 3,166,
/* 0x0de0 */ 127,128,200, 64, 65,157, 0, 36,127,171, 40, 64, 65,158,247, 80,
/* 0x0df0 */ 139,235, 0, 0, 85, 74, 64, 46,120, 0, 64, 40, 57,107, 0, 1,
/* 0x0e00 */ 127,234, 83,120,121, 74, 0, 32, 84, 30,248,126, 87,191, 8, 60,
/* 0x0e10 */ 127,138,240, 64,123,192, 0, 32,123,253, 0, 32, 65,156, 0, 20,
/* 0x0e20 */ 125, 94, 80, 80, 99,255, 0, 1,121, 74, 0, 32,123,253, 0, 32,
/* 0x0e30 */ 66, 0,255,176,123,191, 32, 40, 59,195, 6, 72, 59,160, 0, 4,
/* 0x0e40 */ 59,189,255,255, 58, 64, 0, 1,123,189, 0, 32, 58, 32, 0, 1,
/* 0x0e50 */ 59,189, 0, 1,127,169, 3,166,122, 80, 15,164,127,128,200, 64,
/* 0x0e60 */ 126, 30,130, 20, 65,157, 0, 36,127,171, 40, 64, 65,158,246,208,
/* 0x0e70 */ 139,171, 0, 0, 85, 74, 64, 46,120, 0, 64, 40, 57,107, 0, 1,
/* 0x0e80 */ 127,170, 83,120,121, 74, 0, 32,161,240, 0, 0, 84, 29,170,254,
/* 0x0e90 */ 86, 82, 8, 60,127,189,121,214,127,138,232, 64,123,174, 0, 32,
/* 0x0ea0 */ 64,156, 0, 32, 32, 15, 8, 0,126, 82, 7,180,124, 0, 46,112,
/* 0x0eb0 */ 125,224,122, 20,125,192,115,120,177,240, 0, 0, 72, 0, 0, 48,
/* 0x0ec0 */ 124, 29, 0, 80,125, 93, 80, 80, 85,253,217,126,125,253,120, 80,
/* 0x0ed0 */ 58, 82, 0, 1,177,240, 0, 0,126, 63,251,120,120, 0, 0, 32,
/* 0x0ee0 */ 121, 74, 0, 32,126, 82, 7,180,123,255, 0, 32, 86, 49, 8, 60,
/* 0x0ef0 */ 126, 49, 7,180, 66, 0,255,100, 72, 0, 0, 8,123,255, 0, 32,
/* 0x0f00 */ 59,255, 0, 1,123,242, 0, 33, 65,130, 0,100, 57,140, 0, 7,
/* 0x0f10 */ 125,140, 7,180, 59,220, 0, 2,127,146,208, 64,127,222, 7,180,
/* 0x0f20 */ 65,157,246, 28, 59,222,255,255,123,222, 0, 32, 59,222, 0, 1,
/* 0x0f30 */ 127,201, 3,166,127,242,208, 80, 59,186, 0, 1,123,255, 0, 32,
/* 0x0f40 */ 127,199,248,174,123,191, 0, 32,127,199,209,174, 66, 64, 0, 24,
/* 0x0f50 */ 127,157, 64, 64,127,250,251,120, 65,156,255,220, 72, 0, 0, 8,
/* 0x0f60 */ 57,128, 0, 0,127,250,251,120, 75,255,246, 40, 61, 64, 0,255,
/* 0x0f70 */ 97, 74,255,255,127,128, 80, 64, 65,157, 0, 16,127,171, 40, 64,
/* 0x0f80 */ 65,158,245,188, 57,107, 0, 1,124,132, 88, 80, 56, 96, 0, 0,
/* 0x0f90 */ 144,134, 0, 0,147, 73, 0, 0, 72, 0, 0, 0,249,193,255,112,
/* 0x0fa0 */ 249,225,255,120,250, 1,255,128,250, 33,255,136,250, 65,255,144,
/* 0x0fb0 */ 250, 97,255,152,250,129,255,160,250,161,255,168,250,193,255,176,
/* 0x0fc0 */ 250,225,255,184,251, 1,255,192,251, 33,255,200,251, 65,255,208,
/* 0x0fd0 */ 251, 97,255,216,251,129,255,224,251,161,255,232,251,193,255,240,
/* 0x0fe0 */ 251,225,255,248,248, 1, 0, 16, 78,128, 0, 32,233,193,255,112,
/* 0x0ff0 */ 233,225,255,120,234, 1,255,128,234, 33,255,136,234, 65,255,144,
/* 0x1000 */ 234, 97,255,152,234,129,255,160,234,161,255,168,234,193,255,176,
/* 0x1010 */ 234,225,255,184,235, 1,255,192,235, 33,255,200,235, 65,255,208,
/* 0x1020 */ 235, 97,255,216,235,129,255,224,232, 1, 0, 16,235,161,255,232,
/* 0x1030 */ 124, 8, 3,166,235,193,255,240,235,225,255,248, 78,128, 0, 32,
/* 0x1040 */ 0, 0, 0, 0, 0, 0, 0, 1, 72, 0, 0, 9, 72, 0, 12,112,
/* 0x1050 */ 249,225,255,120,249,193,255,112, 56, 0, 0, 0, 57, 96, 0, 1,
/* 0x1060 */ 250, 97,255,152,250, 65,255,144, 58, 99, 0, 4,251,225,255,248,
/* 0x1070 */ 251,193,255,240, 59,227, 0, 2,250, 1,255,128,250, 33,255,136,
/* 0x1080 */ 250,129,255,160,250,161,255,168,250,193,255,176,250,225,255,184,
/* 0x1090 */ 251, 1,255,192,251, 33,255,200,251, 65,255,208,251, 97,255,216,
/* 0x10a0 */ 251,129,255,224,251,161,255,232,137, 67, 0, 0,138, 67, 0, 1,
/* 0x10b0 */ 138, 35, 0, 2,144, 6, 0, 0,144, 9, 0, 0,125, 79, 7,180,
/* 0x10c0 */ 125,113,136, 48,125,107,144, 48, 58, 49,255,255, 57,107,255,255,
/* 0x10d0 */ 122, 49, 0, 32,121,114, 0, 32,137, 99, 0, 1,125,107, 82, 20,
/* 0x10e0 */ 57, 64, 3, 0,125, 74, 88, 48, 57, 74, 7, 54,121, 75, 0, 33,
/* 0x10f0 */ 65,130, 0, 40, 57, 75,255,255, 57, 96, 4, 0,121, 74, 0, 32,
/* 0x1100 */ 57, 74, 0, 1,125, 73, 3,166, 96, 0, 0, 0, 96, 0, 0, 0,
/* 0x1110 */ 181,127, 0, 2, 66, 0,255,252,124,164, 42, 20,127,164, 40, 64,
/* 0x1120 */ 65,158, 2,240, 59,224, 0, 4,137, 68, 0, 0, 57,100, 0, 1,
/* 0x1130 */ 127,233, 3,166, 57,132, 0, 5,127,171, 40, 64, 85, 74, 64, 46,
/* 0x1140 */ 57,107, 0, 1, 65,158, 2,204,136, 11,255,255,124, 10, 83,120,
/* 0x1150 */ 121, 74, 0, 32, 66, 0,255,228, 47,168, 0, 0, 65,158, 11, 80,
/* 0x1160 */ 56, 0, 0, 1, 57, 96, 0, 1,248, 1,255, 96,249, 97,255, 88,
/* 0x1170 */ 32, 15, 0, 8, 59,224,255,255,144, 1,255, 84, 63, 32, 0,255,
/* 0x1180 */ 123,255, 0, 32, 57,192, 0, 1, 58, 0, 0, 1, 58,160, 0, 0,
/* 0x1190 */ 57, 96, 0, 0, 58,192, 0, 0, 99, 57,255,255,126,221,136, 56,
/* 0x11a0 */ 86,160, 32, 54,127,190, 7,180,124, 0, 7,180,127,222, 2, 20,
/* 0x11b0 */ 127,159,200, 64,123,222, 15,164, 65,157, 0, 36,127,172, 40, 64,
/* 0x11c0 */ 65,158, 2, 80,136, 12, 0, 0, 85, 74, 64, 46,123,255, 64, 40,
/* 0x11d0 */ 57,140, 0, 1,124, 10, 83,120,121, 74, 0, 32,127,147,242, 46,
/* 0x11e0 */ 87,251,170,254,127,123,225,214,127,138,216, 64,123, 96, 0, 32,
/* 0x11f0 */ 64,156, 2,112,131,225,255, 84,126,221,144, 56, 47,149, 0, 6,
/* 0x1200 */ 127,189,120, 48,125,107,254, 48, 35,252, 8, 0,127,255, 46,112,
/* 0x1210 */ 127,255,226, 20,125,107,234, 20,127,243,243, 46, 85,125, 64, 46,
/* 0x1220 */ 85,107, 80, 42,127,189, 88, 80, 57, 96, 0, 1,123,189, 0, 32,
/* 0x1230 */ 59,189, 7, 54,123,189, 15,164,127,179,234, 20, 64,157, 1, 40,
/* 0x1240 */ 127,240,176, 80, 57, 96, 0, 1,123,255, 0, 32,127, 71,248,174,
/* 0x1250 */ 72, 0, 0, 40, 96, 0, 0, 0, 96, 0, 0, 0, 96, 0, 0, 0,
/* 0x1260 */ 127,125,243, 46,125,107, 7,180,127,224,251,120, 64,130, 0,172,
/* 0x1270 */ 47,139, 0,255, 65,157, 0,172, 87, 90, 8, 60, 87, 95, 5,238,
/* 0x1280 */ 85,120, 8, 60,127,255, 7,180, 59,223, 1, 0, 44, 63, 0, 0,
/* 0x1290 */ 127,222, 90, 20,127, 0,200, 64, 79,128, 0, 0,127, 11,195,120,
/* 0x12a0 */ 124,172, 40, 64, 59, 24, 0, 1, 85, 95, 64, 46,123,222, 15,164,
/* 0x12b0 */ 127, 90, 7,180, 65,153, 0, 28, 65,134, 1, 88,137, 76, 0, 0,
/* 0x12c0 */ 120, 0, 64, 40, 57,140, 0, 1,125, 74,251,120,121, 74, 0, 32,
/* 0x12d0 */ 127,157,242, 46, 84, 27,170,254,127,251,225,214, 35,124, 8, 0,
/* 0x12e0 */ 87,151,217,126,127,123, 46,112,127, 10,248, 64,127,123,226, 20,
/* 0x12f0 */ 124, 31, 0, 80,126,159, 80, 80,127,151,224, 80,123,255, 0, 32,
/* 0x1300 */ 65,152,255, 96,127,157,243, 46,127, 11, 7,180,120, 0, 0, 32,
/* 0x1310 */ 122,138, 0, 32, 64,158,255, 92, 47,139, 0,255, 64,253, 0, 72,
/* 0x1320 */ 121,107, 6, 32, 59,214, 0, 1,125,103,177,174,124, 31, 3,120,
/* 0x1330 */ 123,214, 0, 32, 47,149, 0, 9, 65,157, 8,104, 58,181,255,253,
/* 0x1340 */ 126,181, 7,180, 72, 0, 6, 84, 96, 0, 0, 0, 96, 0, 0, 0,
/* 0x1350 */ 127,107, 7,180, 47,139, 0,255,127,221,227, 46,127, 64,211,120,
/* 0x1360 */ 65,157, 0,136, 85,123, 8, 60,127,128,200, 64,127, 44, 40, 64,
/* 0x1370 */ 127,120,219,120, 85, 95, 64, 46,121,124, 15,164, 65,157, 0, 28,
/* 0x1380 */ 65,154, 0,144,137, 76, 0, 0,120, 0, 64, 40, 57,140, 0, 1,
/* 0x1390 */ 125, 74,251,120,121, 74, 0, 32,127, 93,226, 46, 84, 31,170,254,
/* 0x13a0 */ 57,120, 0, 1,127,255,209,214, 35,218, 8, 0, 87, 88,217,126,
/* 0x13b0 */ 127,222, 46,112,127,138,248, 64,127, 24,208, 80,127,222,210, 20,
/* 0x13c0 */ 123,250, 0, 32, 65,156,255,140,125,107, 7,180,124, 31, 0, 80,
/* 0x13d0 */ 125, 95, 80, 80,127, 29,227, 46, 47,139, 0,255,120, 0, 0, 32,
/* 0x13e0 */ 121, 74, 0, 32, 64,157,255,128, 59,214, 0, 1,121,107, 6, 32,
/* 0x13f0 */ 123,222, 0, 32, 47,149, 0, 3,125,103,177,174,124, 31, 3,120,
/* 0x1400 */ 127,214,243,120, 65,157,255, 48, 58,160, 0, 0, 72, 0, 5,140,
/* 0x1410 */ 56, 96, 0, 1,233,193,255,112,233,225,255,120,234, 1,255,128,
/* 0x1420 */ 234, 33,255,136,234, 65,255,144,234, 97,255,152,234,129,255,160,
/* 0x1430 */ 234,161,255,168,234,193,255,176,234,225,255,184,235, 1,255,192,
/* 0x1440 */ 235, 33,255,200,235, 65,255,208,235, 97,255,216,235,129,255,224,
/* 0x1450 */ 235,161,255,232,235,193,255,240,235,225,255,248, 78,128, 0, 32,
/* 0x1460 */ 124, 27,248, 80, 87,159,217,126,127,123, 80, 80,127,255,224, 80,
/* 0x1470 */ 57,117, 0,192,127,128,200, 64,127,243,243, 46,120, 26, 0, 32,
/* 0x1480 */ 123,106, 0, 32,121,107, 15,164, 65,157, 0, 36,127,172, 40, 64,
/* 0x1490 */ 65,158,255,128,137, 76, 0, 0, 87,123, 64, 46,120, 26, 64, 40,
/* 0x14a0 */ 57,140, 0, 1,125, 74,219,120,121, 74, 0, 32,127,115, 90, 46,
/* 0x14b0 */ 87, 64,170,254,124, 0,217,214,127,138, 0, 64,120, 28, 0, 32,
/* 0x14c0 */ 64,156, 3, 16, 32, 27, 8, 0,250, 1,255,104, 47,149, 0, 7,
/* 0x14d0 */ 124, 0, 46,112,127, 96,218, 20, 59, 3, 6,104,127,115, 91, 46,
/* 0x14e0 */ 126,176, 16, 38, 86,181,239,254,126,181, 0,208,122,181,240, 66,
/* 0x14f0 */ 122,181, 16, 0, 58,181, 0, 3,127,156,200, 64, 65,157, 0, 36,
/* 0x1500 */ 127,172, 40, 64, 65,158,255, 12,137,108, 0, 0, 85, 74, 64, 46,
/* 0x1510 */ 123,156, 64, 40, 57,140, 0, 1,125,106, 83,120,121, 74, 0, 32,
/* 0x1520 */ 160, 24, 0, 0, 87,139,170,254,125,107, 1,214,127,138, 88, 64,
/* 0x1530 */ 121,127, 0, 32, 64,156, 4,156, 87,171, 24, 56, 35,192, 8, 0,
/* 0x1540 */ 125,107, 7,180,127,222, 46,112, 57,107, 0, 2,124, 30, 2, 20,
/* 0x1550 */ 121,107, 15,164,176, 24, 0, 0, 58,128, 0, 0,127, 24, 90, 20,
/* 0x1560 */ 58,224, 0, 3, 57,119,255,255, 56, 0, 0, 1,121,107, 0, 32,
/* 0x1570 */ 57,107, 0, 1,125,105, 3,166, 96, 0, 0, 0, 96, 0, 0, 0,
/* 0x1580 */ 120, 28, 15,164, 84, 26, 8, 60,127,159,200, 64,127, 44, 40, 64,
/* 0x1590 */ 127, 93,211,120, 85, 75, 64, 46,127,152,226, 20, 65,157, 0, 28,
/* 0x15a0 */ 65,154,254,112,137, 76, 0, 0,123,255, 64, 40, 57,140, 0, 1,
/* 0x15b0 */ 125, 74, 91,120,121, 74, 0, 32,163,220, 0, 0, 87,235,170,254,
/* 0x15c0 */ 56, 29, 0, 1,125,107,241,214, 35,190, 8, 0, 87,219,217,126,
/* 0x15d0 */ 127,189, 46,112,127,138, 88, 64,127,123,240, 80,127,221,242, 20,
/* 0x15e0 */ 121,125, 0, 32, 64,156, 2,236,127, 64, 7,180,179,220, 0, 0,
/* 0x15f0 */ 127,191,235,120, 66, 0,255,140, 57, 96, 0, 1, 47,149, 0, 3,
/* 0x1600 */ 125,119,184, 48,126,247,160, 80,126,247, 2, 20,146,225,255, 80,
/* 0x1610 */ 65,157, 3, 24, 47,151, 0, 3,122,235, 0, 32, 65,157, 5,148,
/* 0x1620 */ 85,120, 48, 50,127, 24, 7,180, 56, 0, 0, 6, 59, 24, 1,176,
/* 0x1630 */ 124, 9, 3,166,123, 24, 15,164, 57, 96, 0, 1, 96, 0, 0, 0,
/* 0x1640 */ 121,124, 15,164, 85,119, 8, 60,127,159,200, 64,127, 44, 40, 64,
/* 0x1650 */ 126,235,187,120, 85, 64, 64, 46,127,156,194, 20, 65,157, 0, 28,
/* 0x1660 */ 65,154,253,176,137, 76, 0, 0,123,255, 64, 40, 57,140, 0, 1,
/* 0x1670 */ 125, 74, 3,120,121, 74, 0, 32,127,211,226, 46, 87,224,170,254,
/* 0x1680 */ 57,107, 0, 1,124, 0,241,214, 35,190, 8, 0, 87,219,217,126,
/* 0x1690 */ 127,189, 46,112,127,138, 0, 64,127,123,240, 80,127,221,242, 20,
/* 0x16a0 */ 120, 29, 0, 32, 64,156, 2, 76,126,235, 7,180,127,211,227, 46,
/* 0x16b0 */ 127,191,235,120, 66, 0,255,140, 57,107,255,192, 47,139, 0, 3,
/* 0x16c0 */ 125,126, 7,180, 64,157, 2, 76, 85,122, 7,254, 47,139, 0, 13,
/* 0x16d0 */ 99, 90, 0, 2,125,107, 14,112,123, 64, 0, 32, 65,157, 5, 48,
/* 0x16e0 */ 57,107,255,255, 34, 30, 2,176,127, 90, 88, 48,125,107, 7,180,
/* 0x16f0 */ 126, 16,210, 20,122, 16, 15,164, 58, 16,255,254,126, 19,130, 20,
/* 0x1700 */ 57,107,255,255, 59,192, 0, 1,121,107, 0, 32, 59,128, 0, 1,
/* 0x1710 */ 57,107, 0, 1,125,105, 3,166, 72, 0, 0, 32, 96, 0, 0, 0,
/* 0x1720 */ 176, 27, 0, 0,126,254, 7,180,127,191,235,120, 87,156, 8, 60,
/* 0x1730 */ 127,156, 7,180, 66, 64, 1,224,123,219, 15,164, 87,215, 8, 60,
/* 0x1740 */ 127,159,200, 64,127, 44, 40, 64,126,254,187,120, 85, 75, 64, 46,
/* 0x1750 */ 127,112,218, 20, 65,157, 0, 28, 65,154,252,184,137, 76, 0, 0,
/* 0x1760 */ 123,255, 64, 40, 57,140, 0, 1,125, 74, 91,120,121, 74, 0, 32,
/* 0x1770 */ 160, 27, 0, 0, 87,235,170,254,127,148,211,120,125,107, 1,214,
/* 0x1780 */ 35,160, 8, 0, 84, 24,217,126,127,189, 46,112,127,138, 88, 64,
/* 0x1790 */ 127, 24, 0, 80,124, 29, 2, 20,121,125, 0, 32, 65,156,255,132,
/* 0x17a0 */ 127,235,248, 80,125, 75, 80, 80,179, 27, 0, 0, 59,222, 0, 1,
/* 0x17b0 */ 123,255, 0, 32,121, 74, 0, 32,127,222, 7,180,122,154, 0, 32,
/* 0x17c0 */ 75,255,255,108, 96, 0, 0, 0, 96, 0, 0, 0, 96, 0, 0, 0,
/* 0x17d0 */ 127,224,208, 80, 87,124,217,126,127,124,216, 80,124, 0, 80, 80,
/* 0x17e0 */ 127,159,200, 64,123,250, 0, 32,127,115, 91, 46,120, 10, 0, 32,
/* 0x17f0 */ 59,139, 0, 24, 65,157, 0, 36,127,172, 40, 64, 65,158,252, 20,
/* 0x1800 */ 137, 76, 0, 0, 84, 0, 64, 46,123,250, 64, 40, 57,140, 0, 1,
/* 0x1810 */ 125, 74, 3,120,121, 74, 0, 32,127,243,226, 46, 87, 64,170,254,
/* 0x1820 */ 124, 0,249,214,127,138, 0, 64,120, 27, 0, 32, 64,156, 2, 52,
/* 0x1830 */ 33,127, 8, 0,127,128,200, 64,125,107, 46,112,127,235,250, 20,
/* 0x1840 */ 59,222, 1,224,127,243,227, 46, 65,157, 0, 36,127,172, 40, 64,
/* 0x1850 */ 65,158,251,192,137,108, 0, 0, 85, 74, 64, 46,120, 27, 64, 40,
/* 0x1860 */ 57,140, 0, 1,125,106, 83,120,121, 74, 0, 32,124, 19,242, 46,
/* 0x1870 */ 87,107,170,254,125,107, 1,214,127,138, 88, 64,121,127, 0, 32,
/* 0x1880 */ 64,156, 3, 56, 33, 96, 8, 0, 47,182, 0, 0,125,107, 46,112,
/* 0x1890 */ 124, 11, 2, 20,124, 19,243, 46, 65,158,251,120, 47,149, 0, 7,
/* 0x18a0 */ 125,112,176, 80,126,176, 16, 38, 86,181,239,254,121,107, 0, 32,
/* 0x18b0 */ 56, 22, 0, 1,126,181, 0,208,122,181, 7,164,125,103, 88,174,
/* 0x18c0 */ 125,103,177,174, 58,181, 0, 11,120, 22, 0, 32, 72, 0, 0,204,
/* 0x18d0 */ 127,235,248, 80,125, 75, 80, 80,179,124, 0, 0,123,255, 0, 32,
/* 0x18e0 */ 121, 74, 0, 32,124, 0, 7,180, 66, 0,252,152, 75,255,253, 12,
/* 0x18f0 */ 127,224,248, 80,125, 64, 80, 80,127,115,227, 46,123,255, 0, 32,
/* 0x1900 */ 121, 74, 0, 32,125,107, 7,180, 66, 0,253, 56, 75,255,253,172,
/* 0x1910 */ 121,122, 0, 32, 59, 90, 0, 1,123, 80, 0, 33, 65,130, 0,132,
/* 0x1920 */ 58,181, 0, 7,126,181, 7,180,127,144,176, 64, 65,157,250,228,
/* 0x1930 */ 128, 1,255, 80, 59,182, 0, 1,127,208,176, 80,123,222, 0, 32,
/* 0x1940 */ 126,220,179,120,125,125, 2, 20,125,112, 88, 80,125,126, 88, 80,
/* 0x1950 */ 121,107, 0, 32, 57,107, 0, 1,125,105, 3,166, 72, 0, 0, 20,
/* 0x1960 */ 126,220,179,120,123,222, 0, 32, 64,157, 0, 56, 59,182, 0, 1,
/* 0x1970 */ 125,103,240,174,127,136,232, 64, 59,222, 0, 1,123,182, 0, 32,
/* 0x1980 */ 125,103,225,174, 66, 0,255,220,232, 1,255,104,249,193,255, 96,
/* 0x1990 */ 233,193,255, 88,248, 1,255, 88,127,136,176, 64, 65,253,248, 0,
/* 0x19a0 */ 61, 64, 0,255, 97, 74,255,255,127,159, 80, 64, 65,157, 0, 16,
/* 0x19b0 */ 127,172, 40, 64, 65,158,250, 92, 57,140, 0, 1,124,132, 96, 80,
/* 0x19c0 */ 56, 96, 0, 0,144,134, 0, 0,146,201, 0, 0, 75,255,250, 72,
/* 0x19d0 */ 127,139,224, 80, 84, 31,217,126,125,107, 80, 80,124, 31, 0, 80,
/* 0x19e0 */ 127,156,200, 64,123,158, 0, 32,176, 24, 0, 0,121,106, 0, 32,
/* 0x19f0 */ 65,157, 0, 36,127,172, 40, 64, 65,158,250, 24,137, 76, 0, 0,
/* 0x1a00 */ 85,107, 64, 46,123,158, 64, 40, 57,140, 0, 1,125, 74, 91,120,
/* 0x1a10 */ 121, 74, 0, 32,160, 24, 0, 2, 87,203,170,254,125,107, 1,214,
/* 0x1a20 */ 127,138, 88, 64,121,127, 0, 32, 64,156, 1, 72, 87,171, 24, 56,
/* 0x1a30 */ 35,192, 8, 0,125,107, 7,180,127,222, 46,112, 57,107, 0,130,
/* 0x1a40 */ 124, 30, 2, 20,121,107, 15,164,176, 24, 0, 2, 58,128, 0, 8,
/* 0x1a50 */ 127, 24, 90, 20, 58,224, 0, 3, 75,255,251, 12, 96, 0, 0, 0,
/* 0x1a60 */ 127, 64,208, 80, 87,251,217,126,127,192, 80, 80,127,251,248, 80,
/* 0x1a70 */ 127,154,200, 64,127,243,227, 46,123, 64, 0, 32,123,202, 0, 32,
/* 0x1a80 */ 59,235, 0, 48, 65,157, 0, 36,127,172, 40, 64, 65,158,249,132,
/* 0x1a90 */ 137, 76, 0, 0, 87,192, 64, 46, 57,140, 0, 1,125, 74, 3,120,
/* 0x1aa0 */ 123, 64, 64, 40,121, 74, 0, 32,127,115,250, 46, 84, 30,170,254,
/* 0x1ab0 */ 127,222,217,214,127,138,240, 64,123,220, 0, 32, 65,156, 1, 44,
/* 0x1ac0 */ 124, 30, 0, 80, 87,124,217,126,127,222, 80, 80,127,156,216, 80,
/* 0x1ad0 */ 127,128,200, 64,120, 26, 0, 32,127,147,251, 46,123,202, 0, 32,
/* 0x1ae0 */ 57,107, 0, 72, 65,157, 0, 36,127,172, 40, 64, 65,158,249, 36,
/* 0x1af0 */ 137, 76, 0, 0, 87,222, 64, 46,120, 26, 64, 40, 57,140, 0, 1,
/* 0x1b00 */ 125, 74,243,120,121, 74, 0, 32,127,243, 90, 46, 87, 64,170,254,
/* 0x1b10 */ 124, 0,249,214,127,138, 0, 64,120, 28, 0, 32, 64,156, 1,104,
/* 0x1b20 */ 32, 31, 8, 0,250, 1,255,104,125,208,115,120,233,193,255, 96,
/* 0x1b30 */ 124, 0, 46,112,127,224,250, 20,127,243, 91, 46, 96, 0, 0, 0,
/* 0x1b40 */ 47,149, 0, 7, 59, 3, 10,108,126,176, 16, 38, 86,181,239,254,
/* 0x1b50 */ 126,181, 0,208,122,181,240, 66,122,181, 16, 0, 58,181, 0, 11,
/* 0x1b60 */ 75,255,249,152, 96, 0, 0, 0, 96, 0, 0, 0, 96, 0, 0, 0,
/* 0x1b70 */ 84, 31,217,126,124, 31, 0, 80,125, 75, 80, 80,127,235,240, 80,
/* 0x1b80 */ 176, 24, 0, 2,121, 74, 0, 32, 59, 24, 2, 4,123,255, 0, 32,
/* 0x1b90 */ 58,128, 0, 16, 58,224, 0, 8, 75,255,249,204, 96, 0, 0, 0,
/* 0x1ba0 */ 58,181,255,250,126,181, 7,180, 75,255,253,240, 96, 0, 0, 0,
/* 0x1bb0 */ 57, 96, 0, 3, 75,255,250,108, 84, 31,217,126,127,139,216, 80,
/* 0x1bc0 */ 125, 75, 80, 80,233, 97,255, 88,249,193,255, 88,124, 31, 0, 80,
/* 0x1bd0 */ 249, 97,255,104,123,156, 0, 32,233,193,255, 96,121, 74, 0, 32,
/* 0x1be0 */ 124, 19,243, 46, 75,255,255, 92, 33,123, 8, 0,250, 1,255,104,
/* 0x1bf0 */ 234, 1,255, 88,125,107, 46,112,127,107,218, 20,249,193,255, 88,
/* 0x1c00 */ 233,193,255, 96,127,115,251, 46, 75,255,255, 56, 57,107,255,250,
/* 0x1c10 */ 121,107, 0, 32, 57,107, 0, 1,125,105, 3,166, 96, 0, 0, 0,
/* 0x1c20 */ 127,159,200, 64, 84, 26, 8, 60,127, 44, 40, 64, 85, 75, 64, 46,
/* 0x1c30 */ 65,157, 0, 28, 65,154,247,220,137, 76, 0, 0,123,255, 64, 40,
/* 0x1c40 */ 57,140, 0, 1,125, 74, 91,120,121, 74, 0, 32, 87,235,248,126,
/* 0x1c50 */ 127,138, 88, 64,123, 64, 0, 32,121,127, 0, 32, 65,156, 0, 20,
/* 0x1c60 */ 125, 75, 80, 80, 99, 90, 0, 1,121, 74, 0, 32,123, 64, 0, 32,
/* 0x1c70 */ 66, 0,255,176, 58, 3, 6, 72,120, 26, 32, 40, 57, 96, 0, 4,
/* 0x1c80 */ 75,255,250,128, 87,254,217,126,127,254,248, 80,127,128,208, 80,
/* 0x1c90 */ 250, 1,255,104,234, 1,255, 96,125, 64, 80, 80,127,243, 91, 46,
/* 0x1ca0 */ 123,156, 0, 32,121, 74, 0, 32, 75,255,254,152, 58,192, 0, 0,
/* 0x1cb0 */ 75,255,253, 12, 0, 0, 0, 0, 0, 0, 0, 0,232,230, 0, 0,
/* 0x1cc0 */ 125,168, 3,166,124,100, 24, 80,124,135, 40, 80, 56, 99, 0, 1,
/* 0x1cd0 */ 56,132, 0, 1,248,134, 0, 0, 96,231, 0, 31,124, 0, 56,108,
/* 0x1ce0 */ 124, 39, 40, 64,124, 0, 63,172, 56,231, 0, 32, 65,128,255,240,
/* 0x1cf0 */ 124, 0, 4,172, 76, 0, 1, 44, 78,128, 0, 32, 72, 0, 0, 1,
/* 0x1d00 */ 109,109, 97,112, 32,102, 97,105,108,101,100, 46, 10, 0, 0, 0,
/* 0x1d10 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x1d20 */ 0, 0, 0, 0, 0, 0, 0, 0, 56,160, 0, 14,124,136, 2,166,
/* 0x1d30 */ 56, 96, 0, 2, 56, 0, 0, 4, 68, 0, 0, 2, 56, 96, 0,127,
/* 0x1d40 */ 56, 0, 0, 1, 68, 0, 0, 2,126,200, 2,166,128, 31,255,248,
/* 0x1d50 */ 59, 63,255,248,127, 32,200, 80, 56,224,255,255,130,182, 0, 4,
/* 0x1d60 */ 56,192, 0, 34, 56, 96, 0, 0,126,164,171,120,124,156, 35,120,
/* 0x1d70 */ 72, 0, 0, 93,124,125, 27,120,130,118, 0, 0, 86,115, 0, 58,
/* 0x1d80 */ 127,233, 3,166,136,246, 0, 12,250,161, 1,136, 56,193, 1,136,
/* 0x1d90 */ 127,165,235,120,128,150, 0, 8, 56,118, 0, 16, 78,128, 4, 33,
/* 0x1da0 */ 251,221, 0, 8, 56,160, 0, 5,127,132,227,120,127,163,235,120,
/* 0x1db0 */ 56, 0, 0,125, 68, 0, 0, 2,130,255,255,248,127,169, 3,166,
/* 0x1dc0 */ 127, 25,154, 20, 56, 0, 0, 50, 78,128, 4, 32, 57, 0, 0, 0,
/* 0x1dd0 */ 56,160, 0, 3, 56, 0, 0, 90, 68, 0, 0, 2, 64,131, 0, 8,
/* 0x1de0 */ 124,128, 0, 8, 78,128, 0, 32,232, 3, 0, 0, 56, 99, 0, 8,
/* 0x1df0 */ 44, 32, 0, 0, 64,226,255,244, 78,128, 0, 32,248, 33,254,113,
/* 0x1e00 */ 248, 65, 0,152,248, 97, 0,160,248,129, 0,168,248,161, 0,176,
/* 0x1e10 */ 248,193, 0,184,248,225, 0,192,249, 1, 0,200,249, 33, 0,208,
/* 0x1e20 */ 249, 65, 0,216,249, 97, 0,224,249,129, 0,232,249,161, 0,240,
/* 0x1e30 */ 249,193, 0,248,249,225, 1, 0,250, 1, 1, 8,250, 33, 1, 16,
/* 0x1e40 */ 250, 65, 1, 24,250, 97, 1, 32,250,129, 1, 40,250,161, 1, 48,
/* 0x1e50 */ 250,193, 1, 56,250,225, 1, 64,251, 1, 1, 72,251, 33, 1, 80,
/* 0x1e60 */ 251, 65, 1, 88,251, 97, 1, 96,251,129, 1,104,251,161, 1,112,
/* 0x1e70 */ 251,193, 1,120,251,225, 1,128,127,232, 2,166, 56, 97, 1,152,
/* 0x1e80 */ 75,255,255,105, 75,255,255,101,124,122, 27,120,232, 3, 0, 0,
/* 0x1e90 */ 232,131, 0, 8, 56, 99, 0, 16, 44, 32, 0, 6, 65,194, 0, 16,
/* 0x1ea0 */ 44, 32, 0, 0, 64,226,255,232, 60,128, 0, 1,127,196, 0,208,
/* 0x1eb0 */ 75,255,254,153, 0, 0, 0, 0,102,105,108,101, 32,102,111,114,
/* 0x1ec0 */ 109, 97,116, 32,101,108,102, 54, 52, 45,112,111,119,101,114,112,
/* 0x1ed0 */ 99, 10, 10, 83,101, 99,116,105,111,110,115, 58, 10, 73,100,120,
/* 0x1ee0 */ 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,
/* 0x1ef0 */ 105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32,
/* 0x1f00 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32,
/* 0x1f10 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70,105,108,
/* 0x1f20 */ 101, 32,111,102,102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,
/* 0x1f30 */ 103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32,
/* 0x1f40 */ 32, 32, 32, 32, 32, 48, 52, 32, 32, 48, 32, 32, 48, 32, 32, 48,
/* 0x1f50 */ 52, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x1f60 */ 84, 83, 10, 32, 32, 49, 32, 78, 82, 86, 95, 72, 69, 65, 68, 32,
/* 0x1f70 */ 32, 32, 32, 32, 32, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48, 52,
/* 0x1f80 */ 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x1f90 */ 83, 10, 32, 32, 50, 32, 78, 82, 86, 50, 69, 32, 32, 32, 32, 32,
/* 0x1fa0 */ 32, 32, 32, 32, 48, 49, 53, 52, 32, 32, 48, 32, 32, 48, 32, 32,
/* 0x1fb0 */ 48, 52, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69,
/* 0x1fc0 */ 78, 84, 83, 10, 32, 32, 51, 32, 78, 82, 86, 50, 68, 32, 32, 32,
/* 0x1fd0 */ 32, 32, 32, 32, 32, 32, 48, 49, 51, 99, 32, 32, 48, 32, 32, 48,
/* 0x1fe0 */ 32, 32, 48, 49, 57, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79,
/* 0x1ff0 */ 78, 84, 69, 78, 84, 83, 10, 32, 32, 52, 32, 78, 82, 86, 50, 66,
/* 0x2000 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 48,102, 56, 32, 32, 48, 32,
/* 0x2010 */ 32, 48, 32, 32, 48, 50,100, 52, 32, 32, 50, 42, 42, 48, 32, 32,
/* 0x2020 */ 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 53, 32, 76, 90, 77,
/* 0x2030 */ 65, 95, 69, 76, 70, 48, 48, 32, 32, 32, 32, 48, 57, 52, 32, 32,
/* 0x2040 */ 48, 32, 32, 48, 32, 32, 48, 51, 99, 99, 32, 32, 50, 42, 42, 48,
/* 0x2050 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 54, 32, 76,
/* 0x2060 */ 90, 77, 65, 95, 68, 69, 67, 51, 48, 32, 32, 32, 32, 48, 50, 56,
/* 0x2070 */ 32, 32, 48, 32, 32, 48, 32, 32, 48, 52, 54, 48, 32, 32, 50, 42,
/* 0x2080 */ 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 55,
/* 0x2090 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32, 32, 32, 32, 48,
/* 0x20a0 */ 98, 99, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48, 52, 56, 56, 32,
/* 0x20b0 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10,
/* 0x20c0 */ 32, 32, 56, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 32, 32,
/* 0x20d0 */ 32, 32, 48, 99, 55, 52, 32, 32, 48, 32, 32, 48, 32, 32, 48, 49,
/* 0x20e0 */ 48, 52, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69,
/* 0x20f0 */ 78, 84, 83, 10, 32, 32, 57, 32, 78, 82, 86, 95, 84, 65, 73, 76,
/* 0x2100 */ 32, 32, 32, 32, 32, 32, 48, 49, 99, 32, 32, 48, 32, 32, 48, 32,
/* 0x2110 */ 32, 48, 49, 99, 98, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79,
/* 0x2120 */ 78, 84, 69, 78, 84, 83, 10, 32, 49, 48, 32, 67, 70, 76, 85, 83,
/* 0x2130 */ 72, 32, 32, 32, 32, 32, 32, 32, 32, 48, 50, 52, 32, 32, 48, 32,
/* 0x2140 */ 32, 48, 32, 32, 48, 49, 99,100, 56, 32, 32, 50, 42, 42, 48, 32,
/* 0x2150 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 49, 49, 32, 69, 76,
/* 0x2160 */ 70, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32, 32, 48, 49, 50, 32,
/* 0x2170 */ 32, 48, 32, 32, 48, 32, 32, 48, 49, 99,102, 99, 32, 32, 50, 42,
/* 0x2180 */ 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 49, 50,
/* 0x2190 */ 32, 69, 76, 70, 77, 65, 73, 78, 90,101, 32, 32, 32, 32, 32, 48,
/* 0x21a0 */ 49, 56, 32, 32, 48, 32, 32, 48, 32, 32, 48, 49,100, 49, 48, 32,
/* 0x21b0 */ 32, 50, 42, 42, 51, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10,
/* 0x21c0 */ 32, 49, 51, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32, 32, 32,
/* 0x21d0 */ 32, 32, 48, 49, 57, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48, 49,
/* 0x21e0 */ 100, 50, 56, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69,
/* 0x21f0 */ 78, 84, 83, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69,
/* 0x2200 */ 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2210 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95,
/* 0x2220 */ 68, 69, 67, 51, 48, 32, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x2230 */ 51, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2240 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95,
/* 0x2250 */ 84, 65, 73, 76, 32, 48, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10,
/* 0x2260 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2270 */ 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78,
/* 0x2280 */ 90, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48,
/* 0x2290 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32,
/* 0x22a0 */ 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48,
/* 0x22b0 */ 32, 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48,
/* 0x22c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,
/* 0x22d0 */ 100, 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 32, 48, 32, 78, 82,
/* 0x22e0 */ 86, 95, 72, 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x22f0 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x2300 */ 78, 82, 86, 50, 69, 32, 48, 32, 78, 82, 86, 50, 69, 10, 48, 48,
/* 0x2310 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108,
/* 0x2320 */ 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 68, 32, 48, 32, 78,
/* 0x2330 */ 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2340 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82,
/* 0x2350 */ 86, 50, 66, 32, 48, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48,
/* 0x2360 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32,
/* 0x2370 */ 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 32,
/* 0x2380 */ 48, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 10, 48, 48, 48,
/* 0x2390 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32,
/* 0x23a0 */ 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48,
/* 0x23b0 */ 32, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48,
/* 0x23c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108,
/* 0x23d0 */ 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50,
/* 0x23e0 */ 48, 32, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48,
/* 0x23f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x2400 */ 108, 32, 32, 32, 32,100, 32, 32, 67, 70, 76, 85, 83, 72, 32, 48,
/* 0x2410 */ 32, 67, 70, 76, 85, 83, 72, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2420 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32,
/* 0x2430 */ 32, 69, 76, 70, 77, 65, 73, 78, 89, 32, 48, 32, 69, 76, 70, 77,
/* 0x2440 */ 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2450 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76,
/* 0x2460 */ 70, 77, 65, 73, 78, 90,101, 32, 48, 32, 69, 76, 70, 77, 65, 73,
/* 0x2470 */ 78, 90,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2480 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70,
/* 0x2490 */ 77, 65, 73, 78, 88, 32, 48, 32, 95,115,116, 97,114,116, 10, 48,
/* 0x24a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x24b0 */ 103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90,
/* 0x24c0 */ 101, 32, 48, 32,101,110,116,114,121, 95,100,101,115, 99,114, 10,
/* 0x24d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x24e0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48,
/* 0x24f0 */ 32, 79, 95, 66, 73, 78, 70, 79, 10, 10, 82, 69, 76, 79, 67, 65,
/* 0x2500 */ 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82,
/* 0x2510 */ 32, 91, 69, 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70,
/* 0x2520 */ 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89,
/* 0x2530 */ 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2540 */ 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2550 */ 48, 48, 48, 48, 48, 48, 32, 82, 95, 80, 80, 67, 54, 52, 95, 82,
/* 0x2560 */ 69, 76, 50, 52, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78,
/* 0x2570 */ 90, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2580 */ 48, 48,100, 52, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78,
/* 0x2590 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82,
/* 0x25a0 */ 86, 50, 69, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32,
/* 0x25b0 */ 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32,
/* 0x25c0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48,
/* 0x25d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 99, 48, 32,
/* 0x25e0 */ 82, 95, 80, 80, 67, 54, 52, 95, 82, 69, 76, 49, 52, 32, 32, 32,
/* 0x25f0 */ 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, 10, 82, 69, 76, 79,
/* 0x2600 */ 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70,
/* 0x2610 */ 79, 82, 32, 91, 78, 82, 86, 50, 68, 93, 58, 10, 79, 70, 70, 83,
/* 0x2620 */ 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80,
/* 0x2630 */ 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86,
/* 0x2640 */ 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2650 */ 48, 48, 48, 99, 52, 32, 82, 95, 80, 80, 67, 54, 52, 95, 82, 69,
/* 0x2660 */ 76, 49, 52, 32, 32, 32, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76,
/* 0x2670 */ 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67,
/* 0x2680 */ 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 66, 93,
/* 0x2690 */ 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x26a0 */ 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x26b0 */ 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48,
/* 0x26c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 57, 56, 32, 82, 95, 80, 80,
/* 0x26d0 */ 67, 54, 52, 95, 82, 69, 76, 49, 52, 32, 32, 32, 32, 32, 78, 82,
/* 0x26e0 */ 86, 95, 84, 65, 73, 76, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73,
/* 0x26f0 */ 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91,
/* 0x2700 */ 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 93, 58, 10, 79, 70, 70,
/* 0x2710 */ 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89,
/* 0x2720 */ 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2730 */ 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2740 */ 48, 48, 48, 48, 48, 52, 32, 82, 95, 80, 80, 67, 54, 52, 95, 82,
/* 0x2750 */ 69, 76, 49, 52, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69,
/* 0x2760 */ 67, 51, 48, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2770 */ 48, 48, 48, 48, 50, 56, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73,
/* 0x2780 */ 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91,
/* 0x2790 */ 69, 76, 70, 77, 65, 73, 78, 89, 93, 58, 10, 79, 70, 70, 83, 69,
/* 0x27a0 */ 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69,
/* 0x27b0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65,
/* 0x27c0 */ 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x27d0 */ 48, 48, 48, 48, 32, 82, 95, 80, 80, 67, 54, 52, 95, 82, 69, 76,
/* 0x27e0 */ 50, 52, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10,
/* 0x27f0 */ 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79,
/* 0x2800 */ 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78,
/* 0x2810 */ 90,101, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32,
/* 0x2820 */ 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32,
/* 0x2830 */ 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48,
/* 0x2840 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 82,
/* 0x2850 */ 95, 80, 80, 67, 54, 52, 95, 65, 68, 68, 82, 54, 52, 32, 32, 32,
/* 0x2860 */ 32, 95,115,116, 97,114,116, 10, 10, 82, 69, 76, 79, 67, 65, 84,
/* 0x2870 */ 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32,
/* 0x2880 */ 91, 69, 76, 70, 77, 65, 73, 78, 90, 93, 58, 10, 79, 70, 70, 83,
/* 0x2890 */ 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80,
/* 0x28a0 */ 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86,
/* 0x28b0 */ 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x28c0 */ 48, 48, 49, 56, 99, 32, 82, 95, 80, 80, 67, 54, 52, 95, 65, 68,
/* 0x28d0 */ 68, 82, 51, 50, 32, 32, 32, 32, 79, 95, 66, 73, 78, 70, 79, 10
/* 0x0070 */ 57, 64,255,255, 72, 0, 0,184,125, 41, 73, 20,121, 41,248, 36,
/* 0x0080 */ 124, 41, 0, 64,125, 41, 72, 20, 76,226, 0, 32, 57, 32, 0, 1,
/* 0x0090 */ 125, 41, 28, 44, 56, 99, 0, 4, 75,255,255,224,141, 3, 0, 1,
/* 0x00a0 */ 157, 5, 0, 1, 75,255,255,221, 65,225,255,244, 56,224, 0, 1,
/* 0x00b0 */ 75,255,255,209,124,231, 57, 21, 75,255,255,201, 65,192,255,244,
/* 0x00c0 */ 52,231,255,253, 57, 0, 0, 0, 65,192, 0, 24,141, 99, 0, 1,
/* 0x00d0 */ 84,231, 64, 46,124,234, 88,248, 85, 75, 0, 63, 65,194, 0, 96,
/* 0x00e0 */ 75,255,255,161,125, 8, 65, 21, 75,255,255,153,125, 8, 65, 21,
/* 0x00f0 */ 56,224, 0, 1, 64,194, 0, 28, 56,224, 0, 3, 57, 0, 0, 1,
/* 0x0100 */ 75,255,255,129,125, 8, 65, 21, 75,255,255,121, 65,192,255,244,
/* 0x0110 */ 33,106,242,255,125, 8, 57, 20,124,234, 42, 20,125, 9, 3,166,
/* 0x0120 */ 141, 7, 0, 1,157, 5, 0, 1, 67, 32,255,248, 56,224, 1, 0,
/* 0x0130 */ 124, 7, 41,236,124, 7, 26, 44, 75,255,255,108,232,230, 0, 0,
/* 0x0140 */ 125,168, 3,166,124,100, 24, 80,124,135, 40, 80, 56, 99, 0, 1,
/* 0x0150 */ 56,132, 0, 1,248,134, 0, 0, 96,231, 0, 31,124, 0, 56,108,
/* 0x0160 */ 124, 39, 40, 64,124, 0, 63,172, 56,231, 0, 32, 65,128,255,240,
/* 0x0170 */ 124, 0, 4,172, 76, 0, 1, 44, 78,128, 0, 32, 72, 0, 0, 1,
/* 0x0180 */ 109,109, 97,112, 32,102, 97,105,108,101,100, 46, 10, 0, 0, 0,
/* 0x0190 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x01a0 */ 0, 0, 0, 0, 0, 0, 0, 0, 56,160, 0, 14,124,136, 2,166,
/* 0x01b0 */ 56, 96, 0, 2, 56, 0, 0, 4, 68, 0, 0, 2, 56, 96, 0,127,
/* 0x01c0 */ 56, 0, 0, 1, 68, 0, 0, 2,126,200, 2,166,128, 31,255,248,
/* 0x01d0 */ 59, 63,255,248,127, 32,200, 80,131,150, 0, 4, 72, 0, 0, 9,
/* 0x01e0 */ 117,112,120, 0,124,104, 2,166, 56,128, 0, 0, 56, 0, 1,104,
/* 0x01f0 */ 68, 0, 0, 2, 64,227, 0, 8,124,128, 0, 8,124,123, 27,120,
/* 0x0200 */ 124, 52, 11,120, 56, 0,255,224,124, 60, 8, 80,124, 33, 0, 56,
/* 0x0210 */ 130,118, 0, 0,127,233, 3,166,136,246, 0, 12,251,148, 1,136,
/* 0x0220 */ 56,212, 1,136,124, 37, 11,120,128,150, 0, 8, 56,118, 0, 16,
/* 0x0230 */ 78,128, 4, 33,251,193, 0, 0,127, 99,219,120,124, 36, 11,120,
/* 0x0240 */ 127,133,227,120, 56, 0, 0, 4, 68, 0, 0, 2, 64,227, 0, 8,
/* 0x0250 */ 124,128, 0, 8,126,129,163,120, 57, 0, 0, 0,127,103,219,120,
/* 0x0260 */ 56,192, 0, 2, 56,160, 0, 5,127,132,227,120, 56, 96, 0, 0,
/* 0x0270 */ 56, 0, 0, 90, 68, 0, 0, 2, 64,227, 0, 8,124,128, 0, 8,
/* 0x0280 */ 124,125, 27,120,127, 99,219,120, 56, 0, 0, 6, 68, 0, 0, 2,
/* 0x0290 */ 64,227, 0, 8,124,128, 0, 8, 56, 29, 0, 16,127, 25,154, 20,
/* 0x02a0 */ 124, 9, 3,166,130,255,255,248, 78,128, 4, 32,232, 3, 0, 0,
/* 0x02b0 */ 56, 99, 0, 8, 47,160, 0, 0, 64,254,255,244, 78,128, 0, 32,
/* 0x02c0 */ 248, 33,254,113,248, 65, 0,152,248, 97, 0,160,248,129, 0,168,
/* 0x02d0 */ 248,161, 0,176,248,193, 0,184,248,225, 0,192,249, 1, 0,200,
/* 0x02e0 */ 249, 33, 0,208,249, 65, 0,216,249, 97, 0,224,249,129, 0,232,
/* 0x02f0 */ 249,161, 0,240,249,193, 0,248,249,225, 1, 0,250, 1, 1, 8,
/* 0x0300 */ 250, 33, 1, 16,250, 65, 1, 24,250, 97, 1, 32,250,129, 1, 40,
/* 0x0310 */ 250,161, 1, 48,250,193, 1, 56,250,225, 1, 64,251, 1, 1, 72,
/* 0x0320 */ 251, 33, 1, 80,251, 65, 1, 88,251, 97, 1, 96,251,129, 1,104,
/* 0x0330 */ 251,161, 1,112,251,193, 1,120,251,225, 1,128,127,232, 2,166,
/* 0x0340 */ 56, 97, 1,152, 75,255,255,105, 75,255,255,101,124,122, 27,120,
/* 0x0350 */ 232, 3, 0, 0,232,131, 0, 8, 56, 99, 0, 16, 47,160, 0, 6,
/* 0x0360 */ 65,222, 0, 16, 44, 32, 0, 0, 64,226,255,232, 60,128, 0, 1,
/* 0x0370 */ 127,196, 0,208, 75,255,254, 85, 0, 0, 0, 0,102,105,108,101,
/* 0x0380 */ 32,102,111,114,109, 97,116, 32,101,108,102, 54, 52, 45,112,111,
/* 0x0390 */ 119,101,114,112, 99, 10, 10, 83,101, 99,116,105,111,110,115, 58,
/* 0x03a0 */ 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32,
/* 0x03b0 */ 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65,
/* 0x03c0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76,
/* 0x03d0 */ 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x03e0 */ 32, 70,105,108,101, 32,111,102,102, 32, 32, 65,108,103,110, 32,
/* 0x03f0 */ 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77, 65,
/* 0x0400 */ 73, 78, 88, 32, 32, 32, 32, 32, 32, 48, 49, 51, 99, 32, 32, 48,
/* 0x0410 */ 32, 32, 48, 32, 32, 48, 52, 48, 32, 32, 50, 42, 42, 48, 32, 32,
/* 0x0420 */ 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 49, 32, 69, 76, 70,
/* 0x0430 */ 77, 65, 73, 78, 89, 32, 32, 32, 32, 32, 32, 48, 49, 50, 32, 32,
/* 0x0440 */ 48, 32, 32, 48, 32, 32, 48, 49, 55, 99, 32, 32, 50, 42, 42, 48,
/* 0x0450 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 50, 32, 69,
/* 0x0460 */ 76, 70, 77, 65, 73, 78, 90,101, 32, 32, 32, 32, 32, 48, 49, 56,
/* 0x0470 */ 32, 32, 48, 32, 32, 48, 32, 32, 48, 49, 57, 48, 32, 32, 50, 42,
/* 0x0480 */ 42, 51, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 51,
/* 0x0490 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 32, 48,
/* 0x04a0 */ 49,100, 52, 32, 32, 48, 32, 32, 48, 32, 32, 48, 49, 97, 56, 32,
/* 0x04b0 */ 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10,
/* 0x04c0 */ 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48,
/* 0x04d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108,
/* 0x04e0 */ 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32,
/* 0x04f0 */ 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48,
/* 0x0500 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x0510 */ 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32, 69,
/* 0x0520 */ 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0530 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32,
/* 0x0540 */ 32, 69, 76, 70, 77, 65, 73, 78, 89, 32, 48, 32, 69, 76, 70, 77,
/* 0x0550 */ 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0560 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76,
/* 0x0570 */ 70, 77, 65, 73, 78, 90,101, 32, 48, 32, 69, 76, 70, 77, 65, 73,
/* 0x0580 */ 78, 90,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0590 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70,
/* 0x05a0 */ 77, 65, 73, 78, 88, 32, 48, 32, 95,115,116, 97,114,116, 10, 48,
/* 0x05b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x05c0 */ 103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90,
/* 0x05d0 */ 101, 32, 48, 32,101,110,116,114,121, 95,100,101,115, 99,114, 10,
/* 0x05e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x05f0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48,
/* 0x0600 */ 32, 79, 95, 66, 73, 78, 70, 79, 10, 10, 82, 69, 76, 79, 67, 65,
/* 0x0610 */ 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82,
/* 0x0620 */ 32, 91, 69, 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70,
/* 0x0630 */ 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89,
/* 0x0640 */ 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0650 */ 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0660 */ 48, 48, 48, 48, 48, 48, 32, 82, 95, 80, 80, 67, 54, 52, 95, 82,
/* 0x0670 */ 69, 76, 50, 52, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78,
/* 0x0680 */ 90, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0690 */ 48, 49, 49, 56, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78,
/* 0x06a0 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76,
/* 0x06b0 */ 70, 77, 65, 73, 78, 89, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32,
/* 0x06c0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32,
/* 0x06d0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85,
/* 0x06e0 */ 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x06f0 */ 48, 48, 32, 82, 95, 80, 80, 67, 54, 52, 95, 82, 69, 76, 50, 52,
/* 0x0700 */ 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 10, 82,
/* 0x0710 */ 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68,
/* 0x0720 */ 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 90,101,
/* 0x0730 */ 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32,
/* 0x0740 */ 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0750 */ 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48,
/* 0x0760 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 82, 95, 80,
/* 0x0770 */ 80, 67, 54, 52, 95, 65, 68, 68, 82, 54, 52, 32, 32, 32, 32, 95,
/* 0x0780 */ 115,116, 97,114,116, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79,
/* 0x0790 */ 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69,
/* 0x07a0 */ 76, 70, 77, 65, 73, 78, 90, 93, 58, 10, 79, 70, 70, 83, 69, 84,
/* 0x07b0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32,
/* 0x07c0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76,
/* 0x07d0 */ 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x07e0 */ 49,100, 48, 32, 82, 95, 80, 80, 67, 54, 52, 95, 65, 68, 68, 82,
/* 0x07f0 */ 51, 50, 32, 32, 32, 32, 79, 95, 66, 73, 78, 70, 79, 10
};
+1219 -232
View File
File diff suppressed because it is too large Load Diff
+111 -637
View File
@@ -1,5 +1,5 @@
/* powerpc64le-linux.elf-entry.h
created from powerpc64le-linux.elf-entry.bin, 10167 (0x27b7) bytes
created from powerpc64le-linux.elf-entry.bin, 1758 (0x6de) bytes
This file is part of the UPX executable compressor.
@@ -32,645 +32,119 @@
/* clang-format off */
#define STUB_POWERPC64LE_LINUX_ELF_ENTRY_SIZE 10167
#define STUB_POWERPC64LE_LINUX_ELF_ENTRY_ADLER32 0xb867a8cc
#define STUB_POWERPC64LE_LINUX_ELF_ENTRY_CRC32 0x9b0e3570
#define STUB_POWERPC64LE_LINUX_ELF_ENTRY_SIZE 1758
#define STUB_POWERPC64LE_LINUX_ELF_ENTRY_ADLER32 0xe4eaed72
#define STUB_POWERPC64LE_LINUX_ELF_ENTRY_CRC32 0x04e3b193
unsigned char stub_powerpc64le_linux_elf_entry[10167] = {
unsigned char stub_powerpc64le_linux_elf_entry[1758] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0, 21, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0,128, 33, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0,152, 4, 0, 0, 0, 0, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
/* 0x0040 */ 1, 0, 0, 72,236, 41, 0,124,166, 2,168,125, 8, 0, 7, 40,
/* 0x0050 */ 72, 1,130, 64, 0, 0,166,248, 20, 26,132,124, 0,128, 0, 60,
/* 0x0040 */ 1, 0, 0, 72,236, 41, 0,124,166, 2,168,125, 2, 0, 7, 40,
/* 0x0050 */ 236, 0,130, 64, 0, 0,166,248, 20, 26,132,124, 0,128, 0, 60,
/* 0x0060 */ 198, 7, 0,120,120, 3, 9,124,255,255, 99, 56,255,255,165, 56,
/* 0x0070 */ 255,255, 64, 57, 20, 1, 0, 72, 1, 0, 32, 57, 46, 24, 41,125,
/* 0x0080 */ 4, 0, 99, 56, 20, 73, 41,125, 36,248, 41,121, 64, 0, 41,124,
/* 0x0090 */ 20, 72, 41,125, 32, 0,128, 78, 1, 0, 3,141, 1, 0, 5,157,
/* 0x00a0 */ 64, 0, 41,124, 20, 72, 41,125,209,255,194, 65,236,255,225, 65,
/* 0x00b0 */ 1, 0,224, 56, 20, 0, 0, 72,255,255,231, 56, 21, 72, 41,125,
/* 0x00c0 */ 185,255,194, 65, 20, 57,231,124, 21, 72, 41,125,173,255,194, 65,
/* 0x00d0 */ 20, 57,231,124, 64, 0, 41,124, 20, 72, 41,125,157,255,194, 65,
/* 0x00e0 */ 216,255,192, 65,253,255,231, 52, 0, 0, 0, 57, 40, 0,192, 65,
/* 0x00f0 */ 1, 0, 99,141,198, 69,231,120,118, 6,231,124,249, 88,234,124,
/* 0x0100 */ 116, 14, 74,125, 0, 0,194, 65, 1, 0,107,113, 80, 0,226, 65,
/* 0x0110 */ 20, 0, 0, 72, 64, 0, 41,124, 20, 72, 41,125, 93,255,194, 65,
/* 0x0120 */ 60, 0,225, 65, 1, 0, 0, 57, 64, 0, 41,124, 20, 72, 41,125,
/* 0x0130 */ 73,255,194, 65, 40, 0,225, 65, 21, 72, 41,125, 61,255,194, 65,
/* 0x0140 */ 20, 65, 8,125, 64, 0, 41,124, 20, 72, 41,125, 45,255,194, 65,
/* 0x0150 */ 232,255,192, 65, 2, 0, 8, 57, 16, 0, 0, 72, 21, 72, 41,125,
/* 0x0160 */ 25,255,194, 65, 20, 65, 8,125,255,250,106, 33, 2, 0, 8, 57,
/* 0x0170 */ 148, 1, 8,125, 20, 42,234,124,166, 3, 9,125, 1, 0,103,141,
/* 0x0180 */ 1, 0,101,157,248,255, 32, 67, 0, 1,224, 56,236, 41, 7,124,
/* 0x0190 */ 44, 26, 7,124, 12,255,255, 75,236, 41, 0,124,166, 2,168,125,
/* 0x01a0 */ 5, 0, 7, 40, 48, 1,130, 64, 0, 0,166,248, 20, 26,132,124,
/* 0x01b0 */ 0,128, 0, 60,198, 7, 0,120, 0,128, 32, 61,198, 7, 41,121,
/* 0x01c0 */ 255,255, 99, 56,255,255,165, 56,255,255, 64, 57,248, 0, 0, 72,
/* 0x01d0 */ 1, 0, 32, 57, 46, 24, 41,125, 4, 0, 99, 56, 20, 73, 41,125,
/* 0x01e0 */ 36,248, 41,121, 64, 0, 41,124, 20, 72, 41,125, 32, 0,128, 78,
/* 0x01f0 */ 1, 0, 3,141, 1, 0, 5,157, 64, 0, 41,124, 20, 72, 41,125,
/* 0x0200 */ 209,255,194, 65,236,255,225, 65, 1, 0,224, 56, 20, 0, 0, 72,
/* 0x0210 */ 255,255,231, 56, 21, 72, 41,125,185,255,194, 65, 21, 57,231,124,
/* 0x0220 */ 21, 72, 41,125,173,255,194, 65, 21, 57,231,124, 64, 0, 41,124,
/* 0x0230 */ 20, 72, 41,125,157,255,194, 65,216,255,192, 65, 0, 0, 0, 57,
/* 0x0240 */ 253,255,231, 52, 46, 64,231, 84, 28, 0,192, 65, 1, 0, 99,141,
/* 0x0250 */ 249, 88,234,124,112, 14, 74,125, 0, 0, 42, 44, 0, 0,194, 65,
/* 0x0260 */ 12, 0, 0, 72, 21, 72, 41,125,105,255,194, 65, 21, 65, 8,125,
/* 0x0270 */ 21, 72, 41,125, 93,255,194, 65, 21, 65, 8,125, 40, 0,130, 64,
/* 0x0280 */ 1, 0, 0, 57, 21, 72, 41,125, 73,255,194, 65, 21, 65, 8,125,
/* 0x0290 */ 64, 0, 41,124, 20, 72, 41,125, 57,255,194, 65,232,255,192, 65,
/* 0x02a0 */ 2, 0, 8, 57,255,250,234, 32, 1, 0, 8, 57,148, 1, 8,125,
/* 0x02b0 */ 20, 42,234,124,166, 3, 9,125, 1, 0, 7,141, 1, 0, 5,157,
/* 0x02c0 */ 248,255, 32, 67, 0, 1,224, 56,236, 41, 7,124, 44, 26, 7,124,
/* 0x02d0 */ 40,255,255, 75,236, 41, 0,124,166, 2,168,125, 2, 0, 7, 40,
/* 0x02e0 */ 236, 0,130, 64, 0, 0,166,248, 20, 26,132,124, 0,128, 0, 60,
/* 0x02f0 */ 198, 7, 0,120,120, 3, 9,124,255,255, 99, 56,255,255,165, 56,
/* 0x0300 */ 255,255, 64, 57,184, 0, 0, 72, 20, 73, 41,125, 36,248, 41,121,
/* 0x0310 */ 64, 0, 41,124, 20, 72, 41,125, 32, 0,226, 76, 1, 0, 32, 57,
/* 0x0320 */ 46, 24, 41,125, 4, 0, 99, 56,224,255,255, 75, 1, 0, 3,141,
/* 0x0330 */ 1, 0, 5,157,221,255,255, 75,244,255,225, 65, 1, 0,224, 56,
/* 0x0340 */ 209,255,255, 75, 21, 57,231,124,201,255,255, 75,244,255,192, 65,
/* 0x0350 */ 253,255,231, 52, 0, 0, 0, 57, 24, 0,192, 65, 1, 0, 99,141,
/* 0x0360 */ 46, 64,231, 84,248, 88,234,124, 63, 0, 75, 85, 0, 0,194, 65,
/* 0x0370 */ 161,255,255, 75, 21, 65, 8,125,153,255,255, 75, 21, 65, 8,125,
/* 0x0380 */ 1, 0,224, 56, 28, 0,194, 64, 3, 0,224, 56, 1, 0, 0, 57,
/* 0x0390 */ 129,255,255, 75, 21, 65, 8,125,121,255,255, 75,244,255,192, 65,
/* 0x03a0 */ 255,242,106, 33, 20, 57, 8,125, 20, 42,234,124,166, 3, 9,125,
/* 0x03b0 */ 1, 0, 7,141, 1, 0, 5,157,248,255, 32, 67, 0, 1,224, 56,
/* 0x03c0 */ 236, 41, 7,124, 44, 26, 7,124,108,255,255, 75, 14, 0, 7, 40,
/* 0x03d0 */ 0, 0,130, 64,145,255, 33,248,166, 2, 8,124, 0, 0, 38, 57,
/* 0x03e0 */ 0, 0, 6,129,120, 43,167,124,254,255,164, 56, 2, 0,131, 56,
/* 0x03f0 */ 0, 0,131,137, 16, 0, 1,248,194,232,139,121, 96, 7,140,121,
/* 0x0400 */ 0,250, 96, 56, 54, 88, 99,124,100,241, 99, 56,120, 11, 38,124,
/* 0x0410 */ 20, 26, 33,124,100, 6, 33,120, 0, 0, 0, 56,120, 51,195,124,
/* 0x0420 */ 0, 0, 9,144,249,255, 3,248, 64, 24, 33,124,248,255,128, 65,
/* 0x0430 */ 0, 0,193,248,255,255, 4,136, 32, 0,193, 56, 40, 0, 97, 56,
/* 0x0440 */ 2, 0,131,153, 16, 0,225,248, 24, 0, 33,249, 2,225, 11,120,
/* 0x0450 */ 32, 7, 0,120, 1, 0, 99,153, 0, 0, 3,152,145,255, 33,248,
/* 0x0460 */ 112, 0, 33, 56, 24, 0,161,232, 16, 0,225,232, 0, 0,165,128,
/* 0x0470 */ 0, 0, 33,232, 20, 58,165,124, 16, 0, 1,232,255,255,165, 56,
/* 0x0480 */ 0, 0, 33,232,166, 3, 8,124,166, 2, 8,124, 1, 0, 64, 57,
/* 0x0490 */ 1, 0, 0, 72, 4, 0, 99, 59, 2, 0,227, 59, 0, 4, 0, 56,
/* 0x04a0 */ 2, 0, 99,137, 48, 88, 75,125,255,255,107, 57, 32, 0,107,121,
/* 0x04b0 */ 96,255, 97,249, 1, 0, 99,137, 48, 88, 74,125, 0, 0, 96, 57,
/* 0x04c0 */ 255,255, 74, 57, 32, 0, 74,121,104,255, 65,249, 0, 0, 67,137,
/* 0x04d0 */ 0, 0,102,145, 0, 0,105,145,180, 7, 85,125, 1, 0, 99,137,
/* 0x04e0 */ 20, 82, 75,125, 0, 3, 96, 57, 48, 80,106,125, 54, 7, 74, 57,
/* 0x04f0 */ 32, 0, 74,121, 0, 0,138, 47, 1, 0,106, 57, 8, 0,254, 64,
/* 0x0500 */ 1, 0, 96, 57,255,255,107, 53, 12, 0,130, 65, 2, 0, 31,180,
/* 0x0510 */ 244,255,255, 75, 5, 0, 0, 56, 20, 42,164,124,166, 3, 9,124,
/* 0x0520 */ 5, 0,100, 57,120, 35,159,124, 0, 0, 64, 57, 64, 40,191,127,
/* 0x0530 */ 12, 0,158, 64, 1, 0, 96, 56, 88, 10, 0, 72, 1, 0,255, 59,
/* 0x0540 */ 255,255, 31,136, 46, 64, 74, 85,120, 83, 10,124, 32, 0, 74,121,
/* 0x0550 */ 220,255, 0, 66,255,255, 0, 56,255, 0, 32, 63, 32, 0, 0,120,
/* 0x0560 */ 1, 0,192, 58, 1, 0, 0, 59, 1, 0,224, 58, 1, 0, 64, 58,
/* 0x0570 */ 0, 0,128, 57, 0, 0,192, 59, 0, 0, 64, 59,255,255, 57, 99,
/* 0x0580 */ 1, 0,128, 58, 8, 0,117, 34, 64, 64,154,127,216, 9,156, 64,
/* 0x0590 */ 96,255,161,235, 64,200,128,127, 56,232, 95,127, 54, 32,157, 85,
/* 0x05a0 */ 180, 7,252,127,180, 7,189,127, 20,234,188,127,164, 15,189,123,
/* 0x05b0 */ 36, 0,157, 65, 64, 40,171,127,124,255,158, 65, 0, 0,139,139,
/* 0x05c0 */ 46, 64, 74, 85, 40, 64, 0,120, 1, 0,107, 57,120, 83,138,127,
/* 0x05d0 */ 32, 0, 74,121, 46,234,251,125,254,170, 16, 84,214,121, 16,126,
/* 0x05e0 */ 64,128,138,127, 32, 0, 28,122,228, 1,156, 64, 0, 8, 15, 32,
/* 0x05f0 */ 104,255,225,235, 48,158,222,127,112, 46, 0,124, 20,122,224,125,
/* 0x0600 */ 56,248, 64,127, 46,235,251,125, 48,168, 29,124, 6, 0,140, 47,
/* 0x0610 */ 20,234,190,127, 0, 3,189, 31, 32, 0,189,123, 54, 7,189, 59,
/* 0x0620 */ 164, 15,189,123, 20,234,187,127, 16, 0,157, 65, 1, 0,192, 59,
/* 0x0630 */ 120,227,128,127, 12, 1, 0, 72, 80,208, 18,124, 1, 0,192, 59,
/* 0x0640 */ 32, 0, 0,120,174, 0,231,125, 60, 8,255, 85,180, 7,239,127,
/* 0x0650 */ 238, 5,255, 87, 64,200,156,127,180, 7,255,127, 0, 1, 63, 58,
/* 0x0660 */ 20,242, 49,126,164, 15, 49,122, 36, 0,157, 65, 64, 40,171,127,
/* 0x0670 */ 196,254,158, 65, 0, 0, 11,136, 46, 64, 74, 85, 40, 64,156,123,
/* 0x0680 */ 1, 0,107, 57,120, 83, 10,124, 32, 0, 74,121, 46,138, 29,126,
/* 0x0690 */ 254,170,128, 87, 60, 8,222, 87,214,129, 0,124, 64, 0, 10,127,
/* 0x06a0 */ 32, 0, 14,120, 0, 0,191, 47, 36, 0,152, 64, 0, 8, 16, 32,
/* 0x06b0 */ 180, 7,222,127,112, 46, 0,124, 20,130, 0,126,120,115,220,125,
/* 0x06c0 */ 46,139, 29,126, 48, 0,158, 65,104,255,255, 75, 80,224,128,127,
/* 0x06d0 */ 80, 80, 64,125,126,217, 0, 86, 80,128, 0,126, 1, 0,222, 59,
/* 0x06e0 */ 32, 0,156,123, 32, 0, 74,121, 46,139, 29,126,180, 7,222,127,
/* 0x06f0 */ 64,255,158, 65,255, 0,158, 47, 80,255,157, 64, 52,255,255, 75,
/* 0x0700 */ 64,200,128,127,164, 15,208,123, 68, 0,157, 64, 46,130,157,127,
/* 0x0710 */ 254,170, 31, 84, 60, 8,222, 87,214,225,255,127, 64,248,138,127,
/* 0x0720 */ 32, 0,241,123, 76, 0,156, 64, 0, 8, 28, 32,180, 7,222,127,
/* 0x0730 */ 112, 46, 0,124, 20,226,128,127, 46,131,157,127,120,139, 32,126,
/* 0x0740 */ 255, 0,158, 47,188,255,157, 64, 80, 0, 0, 72, 64, 40,171,127,
/* 0x0750 */ 228,253,158, 65, 0, 0,235,139, 46, 64, 74, 85, 40, 64, 0,120,
/* 0x0760 */ 1, 0,107, 57,120, 83,234,127, 32, 0, 74,121,160,255,255, 75,
/* 0x0770 */ 80, 0, 31,124, 80, 80, 95,125,126,217,159, 87, 80,224,159,127,
/* 0x0780 */ 1, 0,222, 59, 32, 0, 74,121, 46,131,157,127,180, 7,222,127,
/* 0x0790 */ 32, 0, 17,120,168,255,255, 75, 32, 6,222,123, 1, 0,250, 59,
/* 0x07a0 */ 3, 0,140, 47, 32, 0,255,123,174,209,199,127,172, 7,157, 64,
/* 0x07b0 */ 9, 0,140, 47, 12, 0,157, 65,253,255,140, 57, 8, 0, 0, 72,
/* 0x07c0 */ 250,255,140, 57,180, 7,140,125,148, 7, 0, 72, 80, 0, 16,124,
/* 0x07d0 */ 126,217,254, 85, 80, 80, 16,126, 80,120,254,125,192, 0,140, 59,
/* 0x07e0 */ 64,200,128,127, 46,235,251,125, 32, 0, 17,120, 32, 0, 10,122,
/* 0x07f0 */ 164, 15,156,123, 36, 0,157, 65, 64, 40,171,127, 56,253,158, 65,
/* 0x0800 */ 0, 0, 75,137, 46, 64, 16, 86, 40, 64, 17,120, 1, 0,107, 57,
/* 0x0810 */ 120,131, 74,125, 32, 0, 74,121, 46,226, 27,126,254,170, 32, 86,
/* 0x0820 */ 214,129, 0,124, 64, 0,138,127, 32, 0, 30,120, 68, 0,156, 64,
/* 0x0830 */ 7, 0,140, 47, 0, 8, 16, 32, 38, 16,144,125,254,239,140, 85,
/* 0x0840 */ 112, 46, 0,124, 20,130, 0,126,120,195, 22,127,208, 0,140,125,
/* 0x0850 */ 120,187,248,126, 46,227, 27,126, 66,240,140,121,104, 6,163, 59,
/* 0x0860 */ 0, 16,140,121,120,147, 87,126, 3, 0,140, 57,124, 2, 0, 72,
/* 0x0870 */ 80,136,192,127,126,217, 15, 86, 80,128, 15,126, 80, 80, 0,124,
/* 0x0880 */ 64,200,158,127, 46,227, 27,126, 32, 0,209,123, 32, 0, 10,120,
/* 0x0890 */ 24, 0, 28, 58, 36, 0,157, 65, 64, 40,171,127,152,252,158, 65,
/* 0x08a0 */ 0, 0, 75,137, 46, 64, 0, 84, 40, 64,209,123, 1, 0,107, 57,
/* 0x08b0 */ 120, 3, 74,125, 32, 0, 74,121, 46,130,251,125,254,170, 32, 86,
/* 0x08c0 */ 214,121, 0,124, 64, 0,138,127, 32, 0, 30,120,208, 0,156, 64,
/* 0x08d0 */ 0, 8,143, 35, 64,200,128,127,112, 46,156,127, 20,122,252,125,
/* 0x08e0 */ 224, 1,189, 59, 46,131,251,125, 36, 0,157, 65, 64, 40,171,127,
/* 0x08f0 */ 68,252,158, 65, 40, 64, 30,120, 0, 0, 11,136, 46, 64, 74, 85,
/* 0x0900 */ 1, 0,107, 57,120, 83, 10,124, 32, 0, 74,121, 46,234, 59,126,
/* 0x0910 */ 254,170,220, 87,214,137,156,127, 64,224,138,127, 32, 0,128,123,
/* 0x0920 */ 80, 0,156, 64, 0, 8,241, 35, 0, 0,186, 47,112, 46,255,127,
/* 0x0930 */ 20,138, 63,126, 46,235, 59,126,252,251,158, 65, 7, 0,140, 47,
/* 0x0940 */ 80,208,242,127, 38, 16,144,125,254,239,140, 85, 32, 0,255,123,
/* 0x0950 */ 208, 0,140,125,174,248,199,127,164, 7,140,121, 1, 0,250, 59,
/* 0x0960 */ 11, 0,140, 57, 32, 0,255,123,174,209,199,127,240, 5, 0, 72,
/* 0x0970 */ 126,217, 32, 86, 80,136, 0,124, 80,240,220,127, 80, 80, 92,125,
/* 0x0980 */ 46,235, 27,124, 32, 0,222,123,120,195, 0,127, 32, 0, 74,121,
/* 0x0990 */ 120,147, 88,126,120,187,242,126,124, 0, 0, 72, 80,136, 32,126,
/* 0x09a0 */ 126,217,254, 85, 80, 80, 0,124, 80,120,254,125, 64,200,145,127,
/* 0x09b0 */ 46,131,251,125, 32, 0, 61,122, 32, 0, 10,120, 48, 0, 28, 58,
/* 0x09c0 */ 36, 0,157, 65, 64, 40,171,127,108,251,158, 65, 0, 0, 75,137,
/* 0x09d0 */ 46, 64, 0, 84, 40, 64, 61,122, 1, 0,107, 57,120, 3, 74,125,
/* 0x09e0 */ 32, 0, 74,121, 46,130, 59,126,254,170,160, 87,214,137, 0,124,
/* 0x09f0 */ 64, 0,138,127, 32, 0, 30,120, 36, 0,156, 64, 0, 8, 17, 32,
/* 0x0a00 */ 112, 46, 0,124, 20,138, 32,126,120,195, 0,127, 46,131, 59,126,
/* 0x0a10 */ 120,187,248,126,120, 3, 23,124,160, 0, 0, 72, 80,232,160,127,
/* 0x0a20 */ 126,217, 62, 86, 80, 80, 0,124, 80,136, 62,126, 64,200,157,127,
/* 0x0a30 */ 32, 0,175,123, 46,131, 59,126, 32, 0, 10,120, 72, 0,156, 59,
/* 0x0a40 */ 36, 0,157, 65, 64, 40,171,127,236,250,158, 65, 0, 0, 75,137,
/* 0x0a50 */ 46, 64, 0, 84, 40, 64,175,123, 1, 0,107, 57,120, 3, 74,125,
/* 0x0a60 */ 32, 0, 74,121, 46,226,187,127,254,170,224, 85,214,233, 0,124,
/* 0x0a70 */ 64, 0,138,127, 32, 0, 30,120, 24, 0,156, 64, 0, 8, 29, 32,
/* 0x0a80 */ 112, 46, 0,124, 20,234, 0,124, 46,227, 27,124, 44, 0, 0, 72,
/* 0x0a90 */ 80,120,192,127, 80, 80, 64,125,126,217,160, 87, 80,232, 0,124,
/* 0x0aa0 */ 32, 0, 74,121, 46,227, 27,124,120,195, 0,127, 32, 0,222,123,
/* 0x0ab0 */ 120,179,216,126,120, 3, 22,124, 7, 0,140, 47,120,147, 64,126,
/* 0x0ac0 */ 38, 16,144,125,254,239,140, 85,120,195, 18,127,108, 10,163, 59,
/* 0x0ad0 */ 120,187,248,126,120, 3, 23,124,208, 0,140,125, 66,240,140,121,
/* 0x0ae0 */ 0, 16,140,121, 11, 0,140, 57, 64,200,158,127, 36, 0,157, 65,
/* 0x0af0 */ 64, 40,171,127, 64,250,158, 65, 0, 0, 11,136, 46, 64, 74, 85,
/* 0x0b00 */ 40, 64,222,123, 1, 0,107, 57,120, 83, 10,124, 32, 0, 74,121,
/* 0x0b10 */ 0, 0,253,161,254,170,220, 87,214,121,156,127, 64,224,138,127,
/* 0x0b20 */ 32, 0,128,123, 48, 0,156, 64, 56, 24,255, 87, 0, 8, 47, 34,
/* 0x0b30 */ 180, 7,255,127,112, 46, 49,126, 2, 0,255, 59, 20,122, 49,126,
/* 0x0b40 */ 164, 15,255,123, 0, 0, 61,178, 0, 0, 0, 58, 20,250,189,127,
/* 0x0b50 */ 136, 0, 0, 72, 80,240,220,127,126,217,241, 85, 80, 80,156,127,
/* 0x0b60 */ 80,120, 49,126, 64,200,158,127, 32, 0,208,123, 0, 0, 61,178,
/* 0x0b70 */ 32, 0,138,123, 36, 0,157, 65, 64, 40,171,127,184,249,158, 65,
/* 0x0b80 */ 0, 0, 75,137, 46, 64,156, 87, 40, 64,208,123, 1, 0,107, 57,
/* 0x0b90 */ 120,227, 74,125, 32, 0, 74,121, 2, 0,157,163,254,170, 30, 86,
/* 0x0ba0 */ 214,225,222,127, 64,240,138,127, 32, 0,192,123, 52, 0,156, 64,
/* 0x0bb0 */ 56, 24,255, 87, 0, 8,220, 35,180, 7,255,127,112, 46,222,127,
/* 0x0bc0 */ 130, 0,255, 59, 20,226,158,127,164, 15,255,123, 2, 0,157,179,
/* 0x0bd0 */ 8, 0, 0, 58, 20,250,189,127, 3, 0, 32, 58, 44, 0, 0, 72,
/* 0x0be0 */ 126,217,159, 87, 80,128, 30,124, 80, 80, 94,125, 80,224,255,127,
/* 0x0bf0 */ 32, 0, 74,121, 2, 0,253,179, 32, 0, 0,120, 4, 2,189, 59,
/* 0x0c00 */ 16, 0, 0, 58, 8, 0, 32, 58,255,255,241, 59, 1, 0,192, 59,
/* 0x0c10 */ 32, 0,255,123, 1, 0,255, 59,166, 3,233,127,164, 15,220,123,
/* 0x0c20 */ 64,200,128,127, 20,226,157,127, 36, 0,157, 65, 64, 40,171,127,
/* 0x0c30 */ 4,249,158, 65, 0, 0,235,139, 46, 64, 74, 85, 40, 64, 0,120,
/* 0x0c40 */ 1, 0,107, 57,120, 83,234,127, 32, 0, 74,121, 0, 0,252,161,
/* 0x0c50 */ 254,170, 31, 84, 60, 8,222, 87,214,121,255,127, 64,248,138,127,
/* 0x0c60 */ 32, 0,238,123, 32, 0,156, 64, 0, 8, 15, 32,180, 7,222,127,
/* 0x0c70 */ 112, 46, 0,124, 20,122,224,125,120,115,192,125, 0, 0,252,177,
/* 0x0c80 */ 40, 0, 0, 72, 80, 0, 31,124, 80, 80, 95,125,126,217,255, 85,
/* 0x0c90 */ 80,120,255,125, 1, 0,222, 59, 0, 0,252,177, 32, 0, 0,120,
/* 0x0ca0 */ 32, 0, 74,121,180, 7,222,127,116,255, 0, 66, 48,136,145,126,
/* 0x0cb0 */ 3, 0,140, 47, 80,128, 49,126, 20,242,145,127, 80, 2,157, 65,
/* 0x0cc0 */ 3, 0,156, 47,120,227,158,127, 8, 0,157, 64, 3, 0,192, 59,
/* 0x0cd0 */ 50, 48,222, 87,180, 7,222,127, 6, 0,160, 59,176, 1,222, 59,
/* 0x0ce0 */ 166, 3,169,127,164, 15,222,123, 1, 0,224, 59,164, 15,241,123,
/* 0x0cf0 */ 64,200,128,127, 20,242, 49,126, 36, 0,157, 65, 64, 40,171,127,
/* 0x0d00 */ 52,248,158, 65, 0, 0,171,139, 46, 64, 74, 85, 40, 64, 0,120,
/* 0x0d10 */ 1, 0,107, 57,120, 83,170,127, 32, 0, 74,121, 46,138, 91,126,
/* 0x0d20 */ 254,170, 29, 84, 60, 8,255, 87,214,145,189,127, 64,232,138,127,
/* 0x0d30 */ 32, 0,176,123, 32, 0,156, 64, 0, 8, 18, 32,180, 7,255,127,
/* 0x0d40 */ 112, 46, 0,124, 20,146, 64,126,120,131, 0,126, 46,139, 91,126,
/* 0x0d50 */ 40, 0, 0, 72, 80, 0, 29,124, 80, 80, 93,125,126,217, 93, 86,
/* 0x0d60 */ 80,144, 93,126, 1, 0,255, 59, 46,139, 91,126, 32, 0, 0,120,
/* 0x0d70 */ 32, 0, 74,121,180, 7,255,127,116,255, 0, 66,192,255,255, 59,
/* 0x0d80 */ 3, 0,159, 47,180, 7,242,127,108, 1,157, 64,254, 7,241, 87,
/* 0x0d90 */ 13, 0,159, 47, 2, 0, 49, 98,112, 14,254,127, 32, 0, 61,122,
/* 0x0da0 */ 40, 0,157, 65,255,255,254, 59,176, 2,210, 35,180, 7,253,127,
/* 0x0db0 */ 48,248, 63,126, 20,250,222,127,164, 15,222,123,254,255,222, 59,
/* 0x0dc0 */ 20,242,219,127,116, 0, 0, 72,250,255,222, 59, 32, 0,222,123,
/* 0x0dd0 */ 1, 0,222, 59,166, 3,201,127, 64,200,128,127, 36, 0,157, 65,
/* 0x0de0 */ 64, 40,171,127, 80,247,158, 65, 0, 0,235,139, 46, 64, 74, 85,
/* 0x0df0 */ 40, 64, 0,120, 1, 0,107, 57,120, 83,234,127, 32, 0, 74,121,
/* 0x0e00 */ 126,248, 30, 84, 60, 8,191, 87, 64,240,138,127, 32, 0,192,123,
/* 0x0e10 */ 32, 0,253,123, 20, 0,156, 65, 80, 80, 94,125, 1, 0,255, 99,
/* 0x0e20 */ 32, 0, 74,121, 32, 0,253,123,176,255, 0, 66, 40, 32,191,123,
/* 0x0e30 */ 72, 6,195, 59, 4, 0,160, 59,255,255,189, 59, 1, 0, 64, 58,
/* 0x0e40 */ 32, 0,189,123, 1, 0, 32, 58, 1, 0,189, 59,166, 3,169,127,
/* 0x0e50 */ 164, 15, 80,122, 64,200,128,127, 20,130, 30,126, 36, 0,157, 65,
/* 0x0e60 */ 64, 40,171,127,208,246,158, 65, 0, 0,171,139, 46, 64, 74, 85,
/* 0x0e70 */ 40, 64, 0,120, 1, 0,107, 57,120, 83,170,127, 32, 0, 74,121,
/* 0x0e80 */ 0, 0,240,161,254,170, 29, 84, 60, 8, 82, 86,214,121,189,127,
/* 0x0e90 */ 64,232,138,127, 32, 0,174,123, 32, 0,156, 64, 0, 8, 15, 32,
/* 0x0ea0 */ 180, 7, 82,126,112, 46, 0,124, 20,122,224,125,120,115,192,125,
/* 0x0eb0 */ 0, 0,240,177, 48, 0, 0, 72, 80, 0, 29,124, 80, 80, 93,125,
/* 0x0ec0 */ 126,217,253, 85, 80,120,253,125, 1, 0, 82, 58, 0, 0,240,177,
/* 0x0ed0 */ 120,251, 63,126, 32, 0, 0,120, 32, 0, 74,121,180, 7, 82,126,
/* 0x0ee0 */ 32, 0,255,123, 60, 8, 49, 86,180, 7, 49,126,100,255, 0, 66,
/* 0x0ef0 */ 8, 0, 0, 72, 32, 0,255,123, 1, 0,255, 59, 33, 0,242,123,
/* 0x0f00 */ 100, 0,130, 65, 7, 0,140, 57,180, 7,140,125, 2, 0,220, 59,
/* 0x0f10 */ 64,208,146,127,180, 7,222,127, 28,246,157, 65,255,255,222, 59,
/* 0x0f20 */ 32, 0,222,123, 1, 0,222, 59,166, 3,201,127, 80,208,242,127,
/* 0x0f30 */ 1, 0,186, 59, 32, 0,255,123,174,248,199,127, 32, 0,191,123,
/* 0x0f40 */ 174,209,199,127, 24, 0, 64, 66, 64, 64,157,127,120,251,250,127,
/* 0x0f50 */ 220,255,156, 65, 8, 0, 0, 72, 0, 0,128, 57,120,251,250,127,
/* 0x0f60 */ 40,246,255, 75,255, 0, 64, 61,255,255, 74, 97, 64, 80,128,127,
/* 0x0f70 */ 16, 0,157, 65, 64, 40,171,127,188,245,158, 65, 1, 0,107, 57,
/* 0x0f80 */ 80, 88,132,124, 0, 0, 96, 56, 0, 0,134,144, 0, 0, 73,147,
/* 0x0f90 */ 0, 0, 0, 72,112,255,193,249,120,255,225,249,128,255, 1,250,
/* 0x0fa0 */ 136,255, 33,250,144,255, 65,250,152,255, 97,250,160,255,129,250,
/* 0x0fb0 */ 168,255,161,250,176,255,193,250,184,255,225,250,192,255, 1,251,
/* 0x0fc0 */ 200,255, 33,251,208,255, 65,251,216,255, 97,251,224,255,129,251,
/* 0x0fd0 */ 232,255,161,251,240,255,193,251,248,255,225,251, 16, 0, 1,248,
/* 0x0fe0 */ 32, 0,128, 78,112,255,193,233,120,255,225,233,128,255, 1,234,
/* 0x0ff0 */ 136,255, 33,234,144,255, 65,234,152,255, 97,234,160,255,129,234,
/* 0x1000 */ 168,255,161,234,176,255,193,234,184,255,225,234,192,255, 1,235,
/* 0x1010 */ 200,255, 33,235,208,255, 65,235,216,255, 97,235,224,255,129,235,
/* 0x1020 */ 16, 0, 1,232,232,255,161,235,166, 3, 8,124,240,255,193,235,
/* 0x1030 */ 248,255,225,235, 32, 0,128, 78, 0, 0, 0, 0, 0, 0, 0, 1,
/* 0x1040 */ 9, 0, 0, 72,112, 12, 0, 72,120,255,225,249,112,255,193,249,
/* 0x1050 */ 0, 0, 0, 56, 1, 0, 96, 57,152,255, 97,250,144,255, 65,250,
/* 0x1060 */ 4, 0, 99, 58,248,255,225,251,240,255,193,251, 2, 0,227, 59,
/* 0x1070 */ 128,255, 1,250,136,255, 33,250,160,255,129,250,168,255,161,250,
/* 0x1080 */ 176,255,193,250,184,255,225,250,192,255, 1,251,200,255, 33,251,
/* 0x1090 */ 208,255, 65,251,216,255, 97,251,224,255,129,251,232,255,161,251,
/* 0x10a0 */ 0, 0, 67,137, 1, 0, 67,138, 2, 0, 35,138, 0, 0, 6,144,
/* 0x10b0 */ 0, 0, 9,144,180, 7, 79,125, 48,136,113,125, 48,144,107,125,
/* 0x10c0 */ 255,255, 49, 58,255,255,107, 57, 32, 0, 49,122, 32, 0,114,121,
/* 0x10d0 */ 1, 0, 99,137, 20, 82,107,125, 0, 3, 64, 57, 48, 88, 74,125,
/* 0x10e0 */ 54, 7, 74, 57, 33, 0, 75,121, 40, 0,130, 65,255,255, 75, 57,
/* 0x10f0 */ 0, 4, 96, 57, 32, 0, 74,121, 1, 0, 74, 57,166, 3, 73,125,
/* 0x1100 */ 0, 0, 0, 96, 0, 0, 0, 96, 2, 0,127,181,252,255, 0, 66,
/* 0x1110 */ 20, 42,164,124, 64, 40,164,127,240, 2,158, 65, 4, 0,224, 59,
/* 0x1120 */ 0, 0, 68,137, 1, 0,100, 57,166, 3,233,127, 5, 0,132, 57,
/* 0x1130 */ 64, 40,171,127, 46, 64, 74, 85, 1, 0,107, 57,204, 2,158, 65,
/* 0x1140 */ 255,255, 11,136,120, 83, 10,124, 32, 0, 74,121,228,255, 0, 66,
/* 0x1150 */ 0, 0,168, 47, 80, 11,158, 65, 1, 0, 0, 56, 1, 0, 96, 57,
/* 0x1160 */ 96,255, 1,248, 88,255, 97,249, 8, 0, 15, 32,255,255,224, 59,
/* 0x1170 */ 84,255, 1,144,255, 0, 32, 63, 32, 0,255,123, 1, 0,192, 57,
/* 0x1180 */ 1, 0, 0, 58, 0, 0,160, 58, 0, 0, 96, 57, 0, 0,192, 58,
/* 0x1190 */ 255,255, 57, 99, 56,136,221,126, 54, 32,160, 86,180, 7,190,127,
/* 0x11a0 */ 180, 7, 0,124, 20, 2,222,127, 64,200,159,127,164, 15,222,123,
/* 0x11b0 */ 36, 0,157, 65, 64, 40,172,127, 80, 2,158, 65, 0, 0, 12,136,
/* 0x11c0 */ 46, 64, 74, 85, 40, 64,255,123, 1, 0,140, 57,120, 83, 10,124,
/* 0x11d0 */ 32, 0, 74,121, 46,242,147,127,254,170,251, 87,214,225,123,127,
/* 0x11e0 */ 64,216,138,127, 32, 0, 96,123,112, 2,156, 64, 84,255,225,131,
/* 0x11f0 */ 56,144,221,126, 6, 0,149, 47, 48,120,189,127, 48,254,107,125,
/* 0x1200 */ 0, 8,252, 35,112, 46,255,127, 20,226,255,127, 20,234,107,125,
/* 0x1210 */ 46,243,243,127, 46, 64,125, 85, 42, 80,107, 85, 80, 88,189,127,
/* 0x1220 */ 1, 0, 96, 57, 32, 0,189,123, 54, 7,189, 59,164, 15,189,123,
/* 0x1230 */ 20,234,179,127, 40, 1,157, 64, 80,176,240,127, 1, 0, 96, 57,
/* 0x1240 */ 32, 0,255,123,174,248, 71,127, 40, 0, 0, 72, 0, 0, 0, 96,
/* 0x1250 */ 0, 0, 0, 96, 0, 0, 0, 96, 46,243,125,127,180, 7,107,125,
/* 0x1260 */ 120,251,224,127,172, 0,130, 64,255, 0,139, 47,172, 0,157, 65,
/* 0x1270 */ 60, 8, 90, 87,238, 5, 95, 87, 60, 8,120, 85,180, 7,255,127,
/* 0x1280 */ 0, 1,223, 59, 0, 0, 63, 44, 20, 90,222,127, 64,200, 0,127,
/* 0x1290 */ 0, 0,128, 79,120,195, 11,127, 64, 40,172,124, 1, 0, 24, 59,
/* 0x12a0 */ 46, 64, 95, 85,164, 15,222,123,180, 7, 90,127, 28, 0,153, 65,
/* 0x12b0 */ 88, 1,134, 65, 0, 0, 76,137, 40, 64, 0,120, 1, 0,140, 57,
/* 0x12c0 */ 120,251, 74,125, 32, 0, 74,121, 46,242,157,127,254,170, 27, 84,
/* 0x12d0 */ 214,225,251,127, 0, 8,124, 35,126,217,151, 87,112, 46,123,127,
/* 0x12e0 */ 64,248, 10,127, 20,226,123,127, 80, 0, 31,124, 80, 80,159,126,
/* 0x12f0 */ 80,224,151,127, 32, 0,255,123, 96,255,152, 65, 46,243,157,127,
/* 0x1300 */ 180, 7, 11,127, 32, 0, 0,120, 32, 0,138,122, 92,255,158, 64,
/* 0x1310 */ 255, 0,139, 47, 72, 0,253, 64, 32, 6,107,121, 1, 0,214, 59,
/* 0x1320 */ 174,177,103,125,120, 3, 31,124, 32, 0,214,123, 9, 0,149, 47,
/* 0x1330 */ 104, 8,157, 65,253,255,181, 58,180, 7,181,126, 84, 6, 0, 72,
/* 0x1340 */ 0, 0, 0, 96, 0, 0, 0, 96,180, 7,107,127,255, 0,139, 47,
/* 0x1350 */ 46,227,221,127,120,211, 64,127,136, 0,157, 65, 60, 8,123, 85,
/* 0x1360 */ 64,200,128,127, 64, 40, 44,127,120,219,120,127, 46, 64, 95, 85,
/* 0x1370 */ 164, 15,124,121, 28, 0,157, 65,144, 0,154, 65, 0, 0, 76,137,
/* 0x1380 */ 40, 64, 0,120, 1, 0,140, 57,120,251, 74,125, 32, 0, 74,121,
/* 0x1390 */ 46,226, 93,127,254,170, 31, 84, 1, 0,120, 57,214,209,255,127,
/* 0x13a0 */ 0, 8,218, 35,126,217, 88, 87,112, 46,222,127, 64,248,138,127,
/* 0x13b0 */ 80,208, 24,127, 20,210,222,127, 32, 0,250,123,140,255,156, 65,
/* 0x13c0 */ 180, 7,107,125, 80, 0, 31,124, 80, 80, 95,125, 46,227, 29,127,
/* 0x13d0 */ 255, 0,139, 47, 32, 0, 0,120, 32, 0, 74,121,128,255,157, 64,
/* 0x13e0 */ 1, 0,214, 59, 32, 6,107,121, 32, 0,222,123, 3, 0,149, 47,
/* 0x13f0 */ 174,177,103,125,120, 3, 31,124,120,243,214,127, 48,255,157, 65,
/* 0x1400 */ 0, 0,160, 58,140, 5, 0, 72, 1, 0, 96, 56,112,255,193,233,
/* 0x1410 */ 120,255,225,233,128,255, 1,234,136,255, 33,234,144,255, 65,234,
/* 0x1420 */ 152,255, 97,234,160,255,129,234,168,255,161,234,176,255,193,234,
/* 0x1430 */ 184,255,225,234,192,255, 1,235,200,255, 33,235,208,255, 65,235,
/* 0x1440 */ 216,255, 97,235,224,255,129,235,232,255,161,235,240,255,193,235,
/* 0x1450 */ 248,255,225,235, 32, 0,128, 78, 80,248, 27,124,126,217,159, 87,
/* 0x1460 */ 80, 80,123,127, 80,224,255,127,192, 0,117, 57, 64,200,128,127,
/* 0x1470 */ 46,243,243,127, 32, 0, 26,120, 32, 0,106,123,164, 15,107,121,
/* 0x1480 */ 36, 0,157, 65, 64, 40,172,127,128,255,158, 65, 0, 0, 76,137,
/* 0x1490 */ 46, 64,123, 87, 40, 64, 26,120, 1, 0,140, 57,120,219, 74,125,
/* 0x14a0 */ 32, 0, 74,121, 46, 90,115,127,254,170, 64, 87,214,217, 0,124,
/* 0x14b0 */ 64, 0,138,127, 32, 0, 28,120, 16, 3,156, 64, 0, 8, 27, 32,
/* 0x14c0 */ 104,255, 1,250, 7, 0,149, 47,112, 46, 0,124, 20,218, 96,127,
/* 0x14d0 */ 104, 6, 3, 59, 46, 91,115,127, 38, 16,176,126,254,239,181, 86,
/* 0x14e0 */ 208, 0,181,126, 66,240,181,122, 0, 16,181,122, 3, 0,181, 58,
/* 0x14f0 */ 64,200,156,127, 36, 0,157, 65, 64, 40,172,127, 12,255,158, 65,
/* 0x1500 */ 0, 0,108,137, 46, 64, 74, 85, 40, 64,156,123, 1, 0,140, 57,
/* 0x1510 */ 120, 83,106,125, 32, 0, 74,121, 0, 0, 24,160,254,170,139, 87,
/* 0x1520 */ 214, 1,107,125, 64, 88,138,127, 32, 0,127,121,156, 4,156, 64,
/* 0x1530 */ 56, 24,171, 87, 0, 8,192, 35,180, 7,107,125,112, 46,222,127,
/* 0x1540 */ 2, 0,107, 57, 20, 2, 30,124,164, 15,107,121, 0, 0, 24,176,
/* 0x1550 */ 0, 0,128, 58, 20, 90, 24,127, 3, 0,224, 58,255,255,119, 57,
/* 0x1560 */ 1, 0, 0, 56, 32, 0,107,121, 1, 0,107, 57,166, 3,105,125,
/* 0x1570 */ 0, 0, 0, 96, 0, 0, 0, 96,164, 15, 28,120, 60, 8, 26, 84,
/* 0x1580 */ 64,200,159,127, 64, 40, 44,127,120,211, 93,127, 46, 64, 75, 85,
/* 0x1590 */ 20,226,152,127, 28, 0,157, 65,112,254,154, 65, 0, 0, 76,137,
/* 0x15a0 */ 40, 64,255,123, 1, 0,140, 57,120, 91, 74,125, 32, 0, 74,121,
/* 0x15b0 */ 0, 0,220,163,254,170,235, 87, 1, 0, 29, 56,214,241,107,125,
/* 0x15c0 */ 0, 8,190, 35,126,217,219, 87,112, 46,189,127, 64, 88,138,127,
/* 0x15d0 */ 80,240,123,127, 20,242,221,127, 32, 0,125,121,236, 2,156, 64,
/* 0x15e0 */ 180, 7, 64,127, 0, 0,220,179,120,235,191,127,140,255, 0, 66,
/* 0x15f0 */ 1, 0, 96, 57, 3, 0,149, 47, 48,184,119,125, 80,160,247,126,
/* 0x1600 */ 20, 2,247,126, 80,255,225,146, 24, 3,157, 65, 3, 0,151, 47,
/* 0x1610 */ 32, 0,235,122,148, 5,157, 65, 50, 48,120, 85,180, 7, 24,127,
/* 0x1620 */ 6, 0, 0, 56,176, 1, 24, 59,166, 3, 9,124,164, 15, 24,123,
/* 0x1630 */ 1, 0, 96, 57, 0, 0, 0, 96,164, 15,124,121, 60, 8,119, 85,
/* 0x1640 */ 64,200,159,127, 64, 40, 44,127,120,187,235,126, 46, 64, 64, 85,
/* 0x1650 */ 20,194,156,127, 28, 0,157, 65,176,253,154, 65, 0, 0, 76,137,
/* 0x1660 */ 40, 64,255,123, 1, 0,140, 57,120, 3, 74,125, 32, 0, 74,121,
/* 0x1670 */ 46,226,211,127,254,170,224, 87, 1, 0,107, 57,214,241, 0,124,
/* 0x1680 */ 0, 8,190, 35,126,217,219, 87,112, 46,189,127, 64, 0,138,127,
/* 0x1690 */ 80,240,123,127, 20,242,221,127, 32, 0, 29,120, 76, 2,156, 64,
/* 0x16a0 */ 180, 7,235,126, 46,227,211,127,120,235,191,127,140,255, 0, 66,
/* 0x16b0 */ 192,255,107, 57, 3, 0,139, 47,180, 7,126,125, 76, 2,157, 64,
/* 0x16c0 */ 254, 7,122, 85, 13, 0,139, 47, 2, 0, 90, 99,112, 14,107,125,
/* 0x16d0 */ 32, 0, 64,123, 48, 5,157, 65,255,255,107, 57,176, 2, 30, 34,
/* 0x16e0 */ 48, 88, 90,127,180, 7,107,125, 20,210, 16,126,164, 15, 16,122,
/* 0x16f0 */ 254,255, 16, 58, 20,130, 19,126,255,255,107, 57, 1, 0,192, 59,
/* 0x1700 */ 32, 0,107,121, 1, 0,128, 59, 1, 0,107, 57,166, 3,105,125,
/* 0x1710 */ 32, 0, 0, 72, 0, 0, 0, 96, 0, 0, 27,176,180, 7,254,126,
/* 0x1720 */ 120,235,191,127, 60, 8,156, 87,180, 7,156,127,224, 1, 64, 66,
/* 0x1730 */ 164, 15,219,123, 60, 8,215, 87, 64,200,159,127, 64, 40, 44,127,
/* 0x1740 */ 120,187,254,126, 46, 64, 75, 85, 20,218,112,127, 28, 0,157, 65,
/* 0x1750 */ 184,252,154, 65, 0, 0, 76,137, 40, 64,255,123, 1, 0,140, 57,
/* 0x1760 */ 120, 91, 74,125, 32, 0, 74,121, 0, 0, 27,160,254,170,235, 87,
/* 0x1770 */ 120,211,148,127,214, 1,107,125, 0, 8,160, 35,126,217, 24, 84,
/* 0x1780 */ 112, 46,189,127, 64, 88,138,127, 80, 0, 24,127, 20, 2, 29,124,
/* 0x1790 */ 32, 0,125,121,132,255,156, 65, 80,248,235,127, 80, 80, 75,125,
/* 0x17a0 */ 0, 0, 27,179, 1, 0,222, 59, 32, 0,255,123, 32, 0, 74,121,
/* 0x17b0 */ 180, 7,222,127, 32, 0,154,122,108,255,255, 75, 0, 0, 0, 96,
/* 0x17c0 */ 0, 0, 0, 96, 0, 0, 0, 96, 80,208,224,127,126,217,124, 87,
/* 0x17d0 */ 80,216,124,127, 80, 80, 0,124, 64,200,159,127, 32, 0,250,123,
/* 0x17e0 */ 46, 91,115,127, 32, 0, 10,120, 24, 0,139, 59, 36, 0,157, 65,
/* 0x17f0 */ 64, 40,172,127, 20,252,158, 65, 0, 0, 76,137, 46, 64, 0, 84,
/* 0x1800 */ 40, 64,250,123, 1, 0,140, 57,120, 3, 74,125, 32, 0, 74,121,
/* 0x1810 */ 46,226,243,127,254,170, 64, 87,214,249, 0,124, 64, 0,138,127,
/* 0x1820 */ 32, 0, 27,120, 52, 2,156, 64, 0, 8,127, 33, 64,200,128,127,
/* 0x1830 */ 112, 46,107,125, 20,250,235,127,224, 1,222, 59, 46,227,243,127,
/* 0x1840 */ 36, 0,157, 65, 64, 40,172,127,192,251,158, 65, 0, 0,108,137,
/* 0x1850 */ 46, 64, 74, 85, 40, 64, 27,120, 1, 0,140, 57,120, 83,106,125,
/* 0x1860 */ 32, 0, 74,121, 46,242, 19,124,254,170,107, 87,214, 1,107,125,
/* 0x1870 */ 64, 88,138,127, 32, 0,127,121, 56, 3,156, 64, 0, 8, 96, 33,
/* 0x1880 */ 0, 0,182, 47,112, 46,107,125, 20, 2, 11,124, 46,243, 19,124,
/* 0x1890 */ 120,251,158, 65, 7, 0,149, 47, 80,176,112,125, 38, 16,176,126,
/* 0x18a0 */ 254,239,181, 86, 32, 0,107,121, 1, 0, 22, 56,208, 0,181,126,
/* 0x18b0 */ 164, 7,181,122,174, 88,103,125,174,177,103,125, 11, 0,181, 58,
/* 0x18c0 */ 32, 0, 22,120,204, 0, 0, 72, 80,248,235,127, 80, 80, 75,125,
/* 0x18d0 */ 0, 0,124,179, 32, 0,255,123, 32, 0, 74,121,180, 7, 0,124,
/* 0x18e0 */ 152,252, 0, 66, 12,253,255, 75, 80,248,224,127, 80, 80, 64,125,
/* 0x18f0 */ 46,227,115,127, 32, 0,255,123, 32, 0, 74,121,180, 7,107,125,
/* 0x1900 */ 56,253, 0, 66,172,253,255, 75, 32, 0,122,121, 1, 0, 90, 59,
/* 0x1910 */ 33, 0, 80,123,132, 0,130, 65, 7, 0,181, 58,180, 7,181,126,
/* 0x1920 */ 64,176,144,127,228,250,157, 65, 80,255, 1,128, 1, 0,182, 59,
/* 0x1930 */ 80,176,208,127, 32, 0,222,123,120,179,220,126, 20, 2,125,125,
/* 0x1940 */ 80, 88,112,125, 80, 88,126,125, 32, 0,107,121, 1, 0,107, 57,
/* 0x1950 */ 166, 3,105,125, 20, 0, 0, 72,120,179,220,126, 32, 0,222,123,
/* 0x1960 */ 56, 0,157, 64, 1, 0,182, 59,174,240,103,125, 64,232,136,127,
/* 0x1970 */ 1, 0,222, 59, 32, 0,182,123,174,225,103,125,220,255, 0, 66,
/* 0x1980 */ 104,255, 1,232, 96,255,193,249, 88,255,193,233, 88,255, 1,248,
/* 0x1990 */ 64,176,136,127, 0,248,253, 65,255, 0, 64, 61,255,255, 74, 97,
/* 0x19a0 */ 64, 80,159,127, 16, 0,157, 65, 64, 40,172,127, 92,250,158, 65,
/* 0x19b0 */ 1, 0,140, 57, 80, 96,132,124, 0, 0, 96, 56, 0, 0,134,144,
/* 0x19c0 */ 0, 0,201,146, 72,250,255, 75, 80,224,139,127,126,217, 31, 84,
/* 0x19d0 */ 80, 80,107,125, 80, 0, 31,124, 64,200,156,127, 32, 0,158,123,
/* 0x19e0 */ 0, 0, 24,176, 32, 0,106,121, 36, 0,157, 65, 64, 40,172,127,
/* 0x19f0 */ 24,250,158, 65, 0, 0, 76,137, 46, 64,107, 85, 40, 64,158,123,
/* 0x1a00 */ 1, 0,140, 57,120, 91, 74,125, 32, 0, 74,121, 2, 0, 24,160,
/* 0x1a10 */ 254,170,203, 87,214, 1,107,125, 64, 88,138,127, 32, 0,127,121,
/* 0x1a20 */ 72, 1,156, 64, 56, 24,171, 87, 0, 8,192, 35,180, 7,107,125,
/* 0x1a30 */ 112, 46,222,127,130, 0,107, 57, 20, 2, 30,124,164, 15,107,121,
/* 0x1a40 */ 2, 0, 24,176, 8, 0,128, 58, 20, 90, 24,127, 3, 0,224, 58,
/* 0x1a50 */ 12,251,255, 75, 0, 0, 0, 96, 80,208, 64,127,126,217,251, 87,
/* 0x1a60 */ 80, 80,192,127, 80,248,251,127, 64,200,154,127, 46,227,243,127,
/* 0x1a70 */ 32, 0, 64,123, 32, 0,202,123, 48, 0,235, 59, 36, 0,157, 65,
/* 0x1a80 */ 64, 40,172,127,132,249,158, 65, 0, 0, 76,137, 46, 64,192, 87,
/* 0x1a90 */ 1, 0,140, 57,120, 3, 74,125, 40, 64, 64,123, 32, 0, 74,121,
/* 0x1aa0 */ 46,250,115,127,254,170, 30, 84,214,217,222,127, 64,240,138,127,
/* 0x1ab0 */ 32, 0,220,123, 44, 1,156, 65, 80, 0, 30,124,126,217,124, 87,
/* 0x1ac0 */ 80, 80,222,127, 80,216,156,127, 64,200,128,127, 32, 0, 26,120,
/* 0x1ad0 */ 46,251,147,127, 32, 0,202,123, 72, 0,107, 57, 36, 0,157, 65,
/* 0x1ae0 */ 64, 40,172,127, 36,249,158, 65, 0, 0, 76,137, 46, 64,222, 87,
/* 0x1af0 */ 40, 64, 26,120, 1, 0,140, 57,120,243, 74,125, 32, 0, 74,121,
/* 0x1b00 */ 46, 90,243,127,254,170, 64, 87,214,249, 0,124, 64, 0,138,127,
/* 0x1b10 */ 32, 0, 28,120,104, 1,156, 64, 0, 8, 31, 32,104,255, 1,250,
/* 0x1b20 */ 120,115,208,125, 96,255,193,233,112, 46, 0,124, 20,250,224,127,
/* 0x1b30 */ 46, 91,243,127, 0, 0, 0, 96, 7, 0,149, 47,108, 10, 3, 59,
/* 0x1b40 */ 38, 16,176,126,254,239,181, 86,208, 0,181,126, 66,240,181,122,
/* 0x1b50 */ 0, 16,181,122, 11, 0,181, 58,152,249,255, 75, 0, 0, 0, 96,
/* 0x1b60 */ 0, 0, 0, 96, 0, 0, 0, 96,126,217, 31, 84, 80, 0, 31,124,
/* 0x1b70 */ 80, 80, 75,125, 80,240,235,127, 2, 0, 24,176, 32, 0, 74,121,
/* 0x1b80 */ 4, 2, 24, 59, 32, 0,255,123, 16, 0,128, 58, 8, 0,224, 58,
/* 0x1b90 */ 204,249,255, 75, 0, 0, 0, 96,250,255,181, 58,180, 7,181,126,
/* 0x1ba0 */ 240,253,255, 75, 0, 0, 0, 96, 3, 0, 96, 57,108,250,255, 75,
/* 0x1bb0 */ 126,217, 31, 84, 80,216,139,127, 80, 80, 75,125, 88,255, 97,233,
/* 0x1bc0 */ 88,255,193,249, 80, 0, 31,124,104,255, 97,249, 32, 0,156,123,
/* 0x1bd0 */ 96,255,193,233, 32, 0, 74,121, 46,243, 19,124, 92,255,255, 75,
/* 0x1be0 */ 0, 8,123, 33,104,255, 1,250, 88,255, 1,234,112, 46,107,125,
/* 0x1bf0 */ 20,218,107,127, 88,255,193,249, 96,255,193,233, 46,251,115,127,
/* 0x1c00 */ 56,255,255, 75,250,255,107, 57, 32, 0,107,121, 1, 0,107, 57,
/* 0x1c10 */ 166, 3,105,125, 0, 0, 0, 96, 64,200,159,127, 60, 8, 26, 84,
/* 0x1c20 */ 64, 40, 44,127, 46, 64, 75, 85, 28, 0,157, 65,220,247,154, 65,
/* 0x1c30 */ 0, 0, 76,137, 40, 64,255,123, 1, 0,140, 57,120, 91, 74,125,
/* 0x1c40 */ 32, 0, 74,121,126,248,235, 87, 64, 88,138,127, 32, 0, 64,123,
/* 0x1c50 */ 32, 0,127,121, 20, 0,156, 65, 80, 80, 75,125, 1, 0, 90, 99,
/* 0x1c60 */ 32, 0, 74,121, 32, 0, 64,123,176,255, 0, 66, 72, 6, 3, 58,
/* 0x1c70 */ 40, 32, 26,120, 4, 0, 96, 57,128,250,255, 75,126,217,254, 87,
/* 0x1c80 */ 80,248,254,127, 80,208,128,127,104,255, 1,250, 96,255, 1,234,
/* 0x1c90 */ 80, 80, 64,125, 46, 91,243,127, 32, 0,156,123, 32, 0, 74,121,
/* 0x1ca0 */ 152,254,255, 75, 0, 0,192, 58, 12,253,255, 75, 0, 0, 0, 0,
/* 0x1cb0 */ 0, 0, 0, 0, 0, 0,230,232,166, 3,168,125, 80, 24,100,124,
/* 0x1cc0 */ 80, 40,135,124, 1, 0, 99, 56, 1, 0,132, 56, 0, 0,134,248,
/* 0x1cd0 */ 31, 0,231, 96,108, 56, 0,124, 64, 40, 39,124,172, 63, 0,124,
/* 0x1ce0 */ 32, 0,231, 56,240,255,128, 65,172, 4, 0,124, 44, 1, 0, 76,
/* 0x1cf0 */ 32, 0,128, 78, 1, 0, 0, 72,109,109, 97,112, 32,102, 97,105,
/* 0x1d00 */ 108,101,100, 46, 10, 0, 0, 0, 14, 0,160, 56,166, 2,136,124,
/* 0x1d10 */ 2, 0, 96, 56, 4, 0, 0, 56, 2, 0, 0, 68,127, 0, 96, 56,
/* 0x1d20 */ 1, 0, 0, 56, 2, 0, 0, 68,166, 2,200,126,248,255, 31,128,
/* 0x1d30 */ 248,255, 63, 59, 80,200, 32,127,255,255,224, 56, 4, 0,182,130,
/* 0x1d40 */ 34, 0,192, 56, 0, 0, 96, 56,120,171,164,126,120, 35,156,124,
/* 0x1d50 */ 93, 0, 0, 72,120, 27,125,124, 0, 0,118,130, 58, 0,115, 86,
/* 0x1d60 */ 166, 3,233,127, 12, 0,246,136,136, 1,161,250,136, 1,193, 56,
/* 0x1d70 */ 120,235,165,127, 8, 0,150,128, 16, 0,118, 56, 33, 4,128, 78,
/* 0x1d80 */ 8, 0,221,251, 5, 0,160, 56,120,227,132,127,120,235,163,127,
/* 0x1d90 */ 125, 0, 0, 56, 2, 0, 0, 68,248,255,255,130,166, 3,169,127,
/* 0x1da0 */ 20,154, 25,127, 50, 0, 0, 56, 32, 4,128, 78, 0, 0, 0, 57,
/* 0x1db0 */ 3, 0,160, 56, 90, 0, 0, 56, 2, 0, 0, 68, 8, 0,131, 64,
/* 0x1dc0 */ 8, 0,128,124, 32, 0,128, 78, 0, 0, 3,232, 8, 0, 99, 56,
/* 0x1dd0 */ 0, 0, 32, 44,244,255,226, 64, 32, 0,128, 78,113,254, 33,248,
/* 0x1de0 */ 152, 0, 65,248,160, 0, 97,248,168, 0,129,248,176, 0,161,248,
/* 0x1df0 */ 184, 0,193,248,192, 0,225,248,200, 0, 1,249,208, 0, 33,249,
/* 0x1e00 */ 216, 0, 65,249,224, 0, 97,249,232, 0,129,249,240, 0,161,249,
/* 0x1e10 */ 248, 0,193,249, 0, 1,225,249, 8, 1, 1,250, 16, 1, 33,250,
/* 0x1e20 */ 24, 1, 65,250, 32, 1, 97,250, 40, 1,129,250, 48, 1,161,250,
/* 0x1e30 */ 56, 1,193,250, 64, 1,225,250, 72, 1, 1,251, 80, 1, 33,251,
/* 0x1e40 */ 88, 1, 65,251, 96, 1, 97,251,104, 1,129,251,112, 1,161,251,
/* 0x1e50 */ 120, 1,193,251,128, 1,225,251,166, 2,232,127,152, 1, 97, 56,
/* 0x1e60 */ 105,255,255, 75,101,255,255, 75,120, 27,122,124, 0, 0, 3,232,
/* 0x1e70 */ 8, 0,131,232, 16, 0, 99, 56, 6, 0, 32, 44, 16, 0,194, 65,
/* 0x1e80 */ 0, 0, 32, 44,232,255,226, 64, 1, 0,128, 60,208, 0,196,127,
/* 0x1e90 */ 153,254,255, 75, 0, 0, 0, 0,102,105,108,101, 32,102,111,114,
/* 0x1ea0 */ 109, 97,116, 32,101,108,102, 54, 52, 45,112,111,119,101,114,112,
/* 0x1eb0 */ 99,108,101, 10, 10, 83,101, 99,116,105,111,110,115, 58, 10, 73,
/* 0x1ec0 */ 100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1ed0 */ 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32,
/* 0x1ee0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65,
/* 0x1ef0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70,
/* 0x1f00 */ 105,108,101, 32,111,102,102, 32, 32, 65,108,103,110, 32, 32, 70,
/* 0x1f10 */ 108, 97,103,115, 10, 32, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78,
/* 0x1f20 */ 88, 32, 32, 32, 32, 32, 32, 48, 52, 32, 32, 48, 32, 32, 48, 32,
/* 0x1f30 */ 32, 48, 52, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84,
/* 0x1f40 */ 69, 78, 84, 83, 10, 32, 32, 49, 32, 78, 82, 86, 95, 72, 69, 65,
/* 0x1f50 */ 68, 32, 32, 32, 32, 32, 32, 48, 32, 32, 48, 32, 32, 48, 32, 32,
/* 0x1f60 */ 48, 52, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69,
/* 0x1f70 */ 78, 84, 83, 10, 32, 32, 50, 32, 78, 82, 86, 50, 69, 32, 32, 32,
/* 0x1f80 */ 32, 32, 32, 32, 32, 32, 48, 49, 53, 52, 32, 32, 48, 32, 32, 48,
/* 0x1f90 */ 32, 32, 48, 52, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78,
/* 0x1fa0 */ 84, 69, 78, 84, 83, 10, 32, 32, 51, 32, 78, 82, 86, 50, 68, 32,
/* 0x1fb0 */ 32, 32, 32, 32, 32, 32, 32, 32, 48, 49, 51, 99, 32, 32, 48, 32,
/* 0x1fc0 */ 32, 48, 32, 32, 48, 49, 57, 56, 32, 32, 50, 42, 42, 48, 32, 32,
/* 0x1fd0 */ 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 52, 32, 78, 82, 86,
/* 0x1fe0 */ 50, 66, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48,102, 56, 32, 32,
/* 0x1ff0 */ 48, 32, 32, 48, 32, 32, 48, 50,100, 52, 32, 32, 50, 42, 42, 48,
/* 0x2000 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 53, 32, 76,
/* 0x2010 */ 90, 77, 65, 95, 69, 76, 70, 48, 48, 32, 32, 32, 32, 48, 57, 52,
/* 0x2020 */ 32, 32, 48, 32, 32, 48, 32, 32, 48, 51, 99, 99, 32, 32, 50, 42,
/* 0x2030 */ 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 32, 54,
/* 0x2040 */ 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 32, 32, 32, 32, 48,
/* 0x2050 */ 50, 56, 32, 32, 48, 32, 32, 48, 32, 32, 48, 52, 54, 48, 32, 32,
/* 0x2060 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32,
/* 0x2070 */ 32, 55, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32, 32, 32,
/* 0x2080 */ 32, 48, 98, 98, 56, 32, 32, 48, 32, 32, 48, 32, 32, 48, 52, 56,
/* 0x2090 */ 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x20a0 */ 83, 10, 32, 32, 56, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48,
/* 0x20b0 */ 32, 32, 32, 32, 48, 99, 55, 52, 32, 32, 48, 32, 32, 48, 32, 32,
/* 0x20c0 */ 48, 49, 48, 52, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78,
/* 0x20d0 */ 84, 69, 78, 84, 83, 10, 32, 32, 57, 32, 78, 82, 86, 95, 84, 65,
/* 0x20e0 */ 73, 76, 32, 32, 32, 32, 32, 32, 48, 49, 99, 32, 32, 48, 32, 32,
/* 0x20f0 */ 48, 32, 32, 48, 49, 99, 98, 52, 32, 32, 50, 42, 42, 48, 32, 32,
/* 0x2100 */ 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 49, 48, 32, 67, 70, 76,
/* 0x2110 */ 85, 83, 72, 32, 32, 32, 32, 32, 32, 32, 32, 48, 50, 52, 32, 32,
/* 0x2120 */ 48, 32, 32, 48, 32, 32, 48, 49, 99,100, 48, 32, 32, 50, 42, 42,
/* 0x2130 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32, 49, 49, 32,
/* 0x2140 */ 69, 76, 70, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32, 32, 48, 49,
/* 0x2150 */ 50, 32, 32, 48, 32, 32, 48, 32, 32, 48, 49, 99,102, 52, 32, 32,
/* 0x2160 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 10, 32,
/* 0x2170 */ 49, 50, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32,
/* 0x2180 */ 32, 48, 49, 57, 48, 32, 32, 48, 32, 32, 48, 32, 32, 48, 49,100,
/* 0x2190 */ 48, 56, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x21a0 */ 84, 83, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58,
/* 0x21b0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x21c0 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68,
/* 0x21d0 */ 69, 67, 51, 48, 32, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51,
/* 0x21e0 */ 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x21f0 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 84,
/* 0x2200 */ 65, 73, 76, 32, 48, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, 48,
/* 0x2210 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x2220 */ 108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90,
/* 0x2230 */ 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48,
/* 0x2240 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32,
/* 0x2250 */ 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48, 32,
/* 0x2260 */ 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x2270 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100,
/* 0x2280 */ 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 32, 48, 32, 78, 82, 86,
/* 0x2290 */ 95, 72, 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x22a0 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78,
/* 0x22b0 */ 82, 86, 50, 69, 32, 48, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48,
/* 0x22c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32,
/* 0x22d0 */ 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 68, 32, 48, 32, 78, 82,
/* 0x22e0 */ 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x22f0 */ 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86,
/* 0x2300 */ 50, 66, 32, 48, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48,
/* 0x2310 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x2320 */ 32,100, 32, 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 32, 48,
/* 0x2330 */ 32, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 10, 48, 48, 48, 48,
/* 0x2340 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32,
/* 0x2350 */ 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32,
/* 0x2360 */ 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 10, 48, 48, 48,
/* 0x2370 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32,
/* 0x2380 */ 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48,
/* 0x2390 */ 32, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 10, 48, 48,
/* 0x23a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108,
/* 0x23b0 */ 32, 32, 32, 32,100, 32, 32, 67, 70, 76, 85, 83, 72, 32, 48, 32,
/* 0x23c0 */ 67, 70, 76, 85, 83, 72, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x23d0 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x23e0 */ 69, 76, 70, 77, 65, 73, 78, 89, 32, 48, 32, 69, 76, 70, 77, 65,
/* 0x23f0 */ 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2400 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70,
/* 0x2410 */ 77, 65, 73, 78, 88, 32, 48, 32, 95,115,116, 97,114,116, 10, 48,
/* 0x2420 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x2430 */ 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 32, 48, 32,
/* 0x2440 */ 79, 95, 66, 73, 78, 70, 79, 10, 10, 82, 69, 76, 79, 67, 65, 84,
/* 0x2450 */ 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32,
/* 0x2460 */ 91, 69, 76, 70, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83,
/* 0x2470 */ 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80,
/* 0x2480 */ 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86,
/* 0x2490 */ 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x24a0 */ 48, 48, 48, 48, 48, 32, 82, 95, 80, 80, 67, 54, 52, 95, 82, 69,
/* 0x24b0 */ 76, 50, 52, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90,
/* 0x24c0 */ 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x24d0 */ 48,100, 52, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32,
/* 0x24e0 */ 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86,
/* 0x24f0 */ 50, 69, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32,
/* 0x2500 */ 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32,
/* 0x2510 */ 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48,
/* 0x2520 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 99, 48, 32, 82,
/* 0x2530 */ 95, 80, 80, 67, 54, 52, 95, 82, 69, 76, 49, 52, 32, 32, 32, 32,
/* 0x2540 */ 32, 78, 82, 86, 95, 84, 65, 73, 76, 10, 10, 82, 69, 76, 79, 67,
/* 0x2550 */ 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79,
/* 0x2560 */ 82, 32, 91, 78, 82, 86, 50, 68, 93, 58, 10, 79, 70, 70, 83, 69,
/* 0x2570 */ 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69,
/* 0x2580 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65,
/* 0x2590 */ 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x25a0 */ 48, 48, 99, 52, 32, 82, 95, 80, 80, 67, 54, 52, 95, 82, 69, 76,
/* 0x25b0 */ 49, 52, 32, 32, 32, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 10,
/* 0x25c0 */ 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79,
/* 0x25d0 */ 82, 68, 83, 32, 70, 79, 82, 32, 91, 78, 82, 86, 50, 66, 93, 58,
/* 0x25e0 */ 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x25f0 */ 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2600 */ 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48,
/* 0x2610 */ 48, 48, 48, 48, 48, 48, 48, 48, 57, 56, 32, 82, 95, 80, 80, 67,
/* 0x2620 */ 54, 52, 95, 82, 69, 76, 49, 52, 32, 32, 32, 32, 32, 78, 82, 86,
/* 0x2630 */ 95, 84, 65, 73, 76, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79,
/* 0x2640 */ 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 76,
/* 0x2650 */ 90, 77, 65, 95, 69, 76, 70, 48, 48, 93, 58, 10, 79, 70, 70, 83,
/* 0x2660 */ 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80,
/* 0x2670 */ 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86,
/* 0x2680 */ 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2690 */ 48, 48, 48, 48, 52, 32, 82, 95, 80, 80, 67, 54, 52, 95, 82, 69,
/* 0x26a0 */ 76, 49, 52, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x26b0 */ 51, 48, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x26c0 */ 48, 48, 48, 50, 56, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79,
/* 0x26d0 */ 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69,
/* 0x26e0 */ 76, 70, 77, 65, 73, 78, 89, 93, 58, 10, 79, 70, 70, 83, 69, 84,
/* 0x26f0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32,
/* 0x2700 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76,
/* 0x2710 */ 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2720 */ 48, 48, 48, 32, 82, 95, 80, 80, 67, 54, 52, 95, 82, 69, 76, 50,
/* 0x2730 */ 52, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 10,
/* 0x2740 */ 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82,
/* 0x2750 */ 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 90,
/* 0x2760 */ 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32,
/* 0x2770 */ 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2780 */ 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48,
/* 0x2790 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 56, 99, 32, 82, 95, 80,
/* 0x27a0 */ 80, 67, 54, 52, 95, 65, 68, 68, 82, 51, 50, 32, 32, 32, 32, 79,
/* 0x27b0 */ 95, 66, 73, 78, 70, 79, 10
/* 0x0070 */ 255,255, 64, 57,184, 0, 0, 72, 20, 73, 41,125, 36,248, 41,121,
/* 0x0080 */ 64, 0, 41,124, 20, 72, 41,125, 32, 0,226, 76, 1, 0, 32, 57,
/* 0x0090 */ 46, 24, 41,125, 4, 0, 99, 56,224,255,255, 75, 1, 0, 3,141,
/* 0x00a0 */ 1, 0, 5,157,221,255,255, 75,244,255,225, 65, 1, 0,224, 56,
/* 0x00b0 */ 209,255,255, 75, 21, 57,231,124,201,255,255, 75,244,255,192, 65,
/* 0x00c0 */ 253,255,231, 52, 0, 0, 0, 57, 24, 0,192, 65, 1, 0, 99,141,
/* 0x00d0 */ 46, 64,231, 84,248, 88,234,124, 63, 0, 75, 85, 96, 0,194, 65,
/* 0x00e0 */ 161,255,255, 75, 21, 65, 8,125,153,255,255, 75, 21, 65, 8,125,
/* 0x00f0 */ 1, 0,224, 56, 28, 0,194, 64, 3, 0,224, 56, 1, 0, 0, 57,
/* 0x0100 */ 129,255,255, 75, 21, 65, 8,125,121,255,255, 75,244,255,192, 65,
/* 0x0110 */ 255,242,106, 33, 20, 57, 8,125, 20, 42,234,124,166, 3, 9,125,
/* 0x0120 */ 1, 0, 7,141, 1, 0, 5,157,248,255, 32, 67, 0, 1,224, 56,
/* 0x0130 */ 236, 41, 7,124, 44, 26, 7,124,108,255,255, 75, 0, 0,230,232,
/* 0x0140 */ 166, 3,168,125, 80, 24,100,124, 80, 40,135,124, 1, 0, 99, 56,
/* 0x0150 */ 1, 0,132, 56, 0, 0,134,248, 31, 0,231, 96,108, 56, 0,124,
/* 0x0160 */ 64, 40, 39,124,172, 63, 0,124, 32, 0,231, 56,240,255,128, 65,
/* 0x0170 */ 172, 4, 0,124, 44, 1, 0, 76, 32, 0,128, 78, 1, 0, 0, 72,
/* 0x0180 */ 109,109, 97,112, 32,102, 97,105,108,101,100, 46, 10, 0, 0, 0,
/* 0x0190 */ 14, 0,160, 56,166, 2,136,124, 2, 0, 96, 56, 4, 0, 0, 56,
/* 0x01a0 */ 2, 0, 0, 68,127, 0, 96, 56, 1, 0, 0, 56, 2, 0, 0, 68,
/* 0x01b0 */ 166, 2,200,126,248,255, 31,128,248,255, 63, 59, 80,200, 32,127,
/* 0x01c0 */ 4, 0,150,131, 9, 0, 0, 72,117,112,120, 0,166, 2,104,124,
/* 0x01d0 */ 0, 0,128, 56,104, 1, 0, 56, 2, 0, 0, 68, 8, 0,227, 64,
/* 0x01e0 */ 8, 0,128,124,120, 27,123,124,120, 11, 52,124,224,255, 0, 56,
/* 0x01f0 */ 80, 8, 60,124, 56, 0, 33,124, 0, 0,118,130,166, 3,233,127,
/* 0x0200 */ 12, 0,246,136,136, 1,148,251,136, 1,212, 56,120, 11, 37,124,
/* 0x0210 */ 8, 0,150,128, 16, 0,118, 56, 33, 4,128, 78, 0, 0,193,251,
/* 0x0220 */ 120,219, 99,127,120, 11, 36,124,120,227,133,127, 4, 0, 0, 56,
/* 0x0230 */ 2, 0, 0, 68, 8, 0,227, 64, 8, 0,128,124,120,163,129,126,
/* 0x0240 */ 0, 0, 0, 57,120,219,103,127, 2, 0,192, 56, 5, 0,160, 56,
/* 0x0250 */ 120,227,132,127, 0, 0, 96, 56, 90, 0, 0, 56, 2, 0, 0, 68,
/* 0x0260 */ 8, 0,227, 64, 8, 0,128,124,120, 27,125,124,120,219, 99,127,
/* 0x0270 */ 6, 0, 0, 56, 2, 0, 0, 68, 8, 0,227, 64, 8, 0,128,124,
/* 0x0280 */ 16, 0, 29, 56, 20,154, 25,127,166, 3, 9,124,248,255,255,130,
/* 0x0290 */ 32, 4,128, 78, 0, 0, 3,232, 8, 0, 99, 56, 0, 0,160, 47,
/* 0x02a0 */ 244,255,254, 64, 32, 0,128, 78,113,254, 33,248,152, 0, 65,248,
/* 0x02b0 */ 160, 0, 97,248,168, 0,129,248,176, 0,161,248,184, 0,193,248,
/* 0x02c0 */ 192, 0,225,248,200, 0, 1,249,208, 0, 33,249,216, 0, 65,249,
/* 0x02d0 */ 224, 0, 97,249,232, 0,129,249,240, 0,161,249,248, 0,193,249,
/* 0x02e0 */ 0, 1,225,249, 8, 1, 1,250, 16, 1, 33,250, 24, 1, 65,250,
/* 0x02f0 */ 32, 1, 97,250, 40, 1,129,250, 48, 1,161,250, 56, 1,193,250,
/* 0x0300 */ 64, 1,225,250, 72, 1, 1,251, 80, 1, 33,251, 88, 1, 65,251,
/* 0x0310 */ 96, 1, 97,251,104, 1,129,251,112, 1,161,251,120, 1,193,251,
/* 0x0320 */ 128, 1,225,251,166, 2,232,127,152, 1, 97, 56,105,255,255, 75,
/* 0x0330 */ 101,255,255, 75,120, 27,122,124, 0, 0, 3,232, 8, 0,131,232,
/* 0x0340 */ 16, 0, 99, 56, 6, 0,160, 47, 16, 0,222, 65, 0, 0, 32, 44,
/* 0x0350 */ 232,255,226, 64, 1, 0,128, 60,208, 0,196,127, 85,254,255, 75,
/* 0x0360 */ 0, 0, 0, 0,102,105,108,101, 32,102,111,114,109, 97,116, 32,
/* 0x0370 */ 101,108,102, 54, 52, 45,112,111,119,101,114,112, 99,108,101, 10,
/* 0x0380 */ 10, 83,101, 99,116,105,111,110,115, 58, 10, 73,100,120, 32, 78,
/* 0x0390 */ 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,
/* 0x03a0 */ 101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32,
/* 0x03b0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32,
/* 0x03c0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,
/* 0x03d0 */ 111,102,102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,103,115,
/* 0x03e0 */ 10, 32, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 32, 32,
/* 0x03f0 */ 32, 32, 32, 48, 49, 51, 99, 32, 32, 48, 32, 32, 48, 32, 32, 48,
/* 0x0400 */ 52, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x0410 */ 84, 83, 10, 32, 32, 49, 32, 69, 76, 70, 77, 65, 73, 78, 89, 32,
/* 0x0420 */ 32, 32, 32, 32, 32, 48, 49, 50, 32, 32, 48, 32, 32, 48, 32, 32,
/* 0x0430 */ 48, 49, 55, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84,
/* 0x0440 */ 69, 78, 84, 83, 10, 32, 32, 50, 32, 69, 76, 70, 77, 65, 73, 78,
/* 0x0450 */ 90, 32, 32, 32, 32, 32, 32, 48, 49,100, 52, 32, 32, 48, 32, 32,
/* 0x0460 */ 48, 32, 32, 48, 49, 57, 48, 32, 32, 50, 42, 42, 50, 32, 32, 67,
/* 0x0470 */ 79, 78, 84, 69, 78, 84, 83, 10, 83, 89, 77, 66, 79, 76, 32, 84,
/* 0x0480 */ 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0490 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69,
/* 0x04a0 */ 76, 70, 77, 65, 73, 78, 90, 32, 48, 32, 69, 76, 70, 77, 65, 73,
/* 0x04b0 */ 78, 90, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x04c0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77,
/* 0x04d0 */ 65, 73, 78, 88, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 10,
/* 0x04e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x04f0 */ 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78,
/* 0x0500 */ 89, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 10, 48, 48, 48,
/* 0x0510 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32,
/* 0x0520 */ 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 48,
/* 0x0530 */ 32, 95,115,116, 97,114,116, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0540 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0550 */ 32, 42, 85, 78, 68, 42, 32, 48, 32, 79, 95, 66, 73, 78, 70, 79,
/* 0x0560 */ 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67,
/* 0x0570 */ 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73,
/* 0x0580 */ 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32,
/* 0x0590 */ 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32,
/* 0x05a0 */ 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48,
/* 0x05b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 82,
/* 0x05c0 */ 95, 80, 80, 67, 54, 52, 95, 82, 69, 76, 50, 52, 32, 32, 32, 32,
/* 0x05d0 */ 32, 69, 76, 70, 77, 65, 73, 78, 90, 43, 48,120, 48, 48, 48, 48,
/* 0x05e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 56, 10, 10, 82, 69,
/* 0x05f0 */ 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83,
/* 0x0600 */ 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 89, 93, 58,
/* 0x0610 */ 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0620 */ 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0630 */ 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48,
/* 0x0640 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 82, 95, 80, 80, 67,
/* 0x0650 */ 54, 52, 95, 82, 69, 76, 50, 52, 32, 32, 32, 32, 32, 69, 76, 70,
/* 0x0660 */ 77, 65, 73, 78, 90, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79,
/* 0x0670 */ 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69,
/* 0x0680 */ 76, 70, 77, 65, 73, 78, 90, 93, 58, 10, 79, 70, 70, 83, 69, 84,
/* 0x0690 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32,
/* 0x06a0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76,
/* 0x06b0 */ 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x06c0 */ 49,100, 48, 32, 82, 95, 80, 80, 67, 54, 52, 95, 65, 68, 68, 82,
/* 0x06d0 */ 51, 50, 32, 32, 32, 32, 79, 95, 66, 73, 78, 70, 79, 10
};
+1221 -231
View File
File diff suppressed because it is too large Load Diff
+42 -1
View File
@@ -1 +1,42 @@
#include "../64le/macros.S"
#ifndef __ppc64macros__
#define __ppc64macros__ 1
.macro section name
.section \name
.endm
.macro PUSH4 p1,p2,p3,p4
stdu \p1,-4*NBPW(sp)
std \p2, 1*NBPW(sp)
std \p3, 2*NBPW(sp)
std \p4, 3*NBPW(sp)
.endm
.macro POP4 p1,p2,p3,p4
ld \p1, 0*NBPW(sp)
ld \p2, 1*NBPW(sp)
ld \p3, 2*NBPW(sp)
ld \p4, 3*NBPW(sp)
addi sp,sp,4*NBPW
.endm
.macro PUSH3 p1,p2,p3
stdu \p1,-3*NBPW(sp)
std \p2, 1*NBPW(sp)
std \p3, 2*NBPW(sp)
.endm
.macro POP3 p1,p2,p3
ld \p1, 0*NBPW(sp)
ld \p2, 1*NBPW(sp)
ld \p3, 2*NBPW(sp)
addi sp,sp,3*NBPW
.endm
.macro POP2 p1,p2
ld \p1, 0*NBPW(sp)
ld \p2, 1*NBPW(sp)
addi sp,sp,2*NBPW
.endm
.macro POP1 p1
ld \p1, 0*NBPW(sp)
addi sp,sp,1*NBPW
.endm
#endif
+4
View File
@@ -1,3 +1,5 @@
#ifndef __ppc64le_bxx__
#define __ppc64le_bxx__
/* ppc_bxx.S -- PowerPC Branch Trick unfilter
This file is part of the UPX executable compressor.
@@ -67,3 +69,5 @@ L20:
#undef cto8
#undef len
#undef ptr
#endif
+7 -35
View File
@@ -1,36 +1,8 @@
/*
; macros.S --
;
; This file is part of the UPX executable compressor.
;
; Copyright (C) 1996-2024 Markus Franz Xaver Johannes Oberhumer
; Copyright (C) 1996-2024 Laszlo Molnar
; All Rights Reserved.
;
; UPX and the UCL library are free software; you can redistribute them
; and/or modify them under the terms of the GNU General Public License as
; published by the Free Software Foundation; either version 2 of
; the License, or (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; see the file COPYING.
; If not, write to the Free Software Foundation, Inc.,
; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
;
; Markus F.X.J. Oberhumer Laszlo Molnar
; <markus@oberhumer.com> <ezerotven+github@gmail.com>
;
*/
#ifndef __ppc64le_macros__ //{
#define __ppc64le_macros__
#if !defined(BIG_ENDIAN) || BIG_ENDIAN
#error must "#define BIG_ENDIAN 0" for powerpc64le
#endif
//.altmacro
.macro section name
.section \name
.endm
// vi:ts=8:et:nowrap
#include "../64/macros.S"
#endif //}
+44 -44
View File
@@ -1,41 +1,41 @@
#ifndef __PPC_REGS__ /*{*/
#define __PPC_REGS__ 1
#define r0 0
#define r1 1
#define r2 2
#define r3 3
#define r4 4
#define r5 5
#define r6 6
#define r7 7
#define r8 8
#define r9 9
#define r10 10
#define r11 11
#define r12 12
#define r13 13
#define r14 14
#define r15 15
#define r16 16
#define r17 17
#define r18 18
#define r19 19
#define r20 20
#define r21 21
#define r22 22
#define r23 23
#define r24 24
#define r25 25
#define r26 26
#define r27 27
#define r28 28
#define r29 29
#define r30 30
#define r31 31
r0= 0
r1= 1
r2= 2
r3= 3
r4= 4
r5= 5
r6= 6
r7= 7
r8= 8
r9= 9
r10= 10
r11= 11
r12= 12
r13= 13
r14= 14
r15= 15
r16= 16
r17= 17
r18= 18
r19= 19
r20= 20
r21= 21
r22= 22
r23= 23
r24= 24
r25= 25
r26= 26
r27= 27
r28= 28
r29= 29
r30= 30
r31= 31
/* Stack pointer */
#define sp 1
sp= 1
SZ_FRAME= 6*8 + 8*8 // (sp,cr,lr, tmp.xlc,tmp.ld,save.toc) + spill area for a0-a7
F_TOC= SZ_FRAME // where is the fake TOC
SZ_FRAME= SZ_FRAME + 2*2*8 // space for 2 [short] TOC entries
@@ -57,19 +57,19 @@ SZ_FRAME= SZ_FRAME + 2*2*8 // space for 2 [short] TOC entries
// CR5-CR7 Volatile condition code register fields
/* Subroutine arguments; not saved by callee */
#define a0 3
#define a1 4
#define a2 5
#define a3 6
#define a4 7
#define a5 8
#define a6 9
#define a7 10
a0= r3
a1= r4
a2= r5
a3= r6
a4= r7
a5= r8
a6= r9
a7= r10
/* Scratch (temporary) registers; not saved by callee */
#define t1 11
#define t2 12
#define t3 13
t1= r11
t2= r12
t3= r13
/* branch and link */
#define call bl
+1
View File
@@ -0,0 +1 @@
s/$\$/$/g
+303 -2
View File
@@ -1,2 +1,303 @@
#define BIG_ENDIAN 1
#include "powerpc64le-linux.elf-entry.S"
/* powerpc64le-linux.elf-entry.S -- Linux program entry point & decompressor (Elf binary)
*
* This file is part of the UPX executable compressor.
*
* Copyright (C) 1996-2023 Markus Franz Xaver Johannes Oberhumer
* Copyright (C) 1996-2023 Laszlo Molnar
* Copyright (C) 2000-2023 John F. Reiser
* All Rights Reserved.
*
* UPX and the UCL library are free software; you can redistribute them
* and/or modify them under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING.
* If not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* Markus F.X.J. Oberhumer Laszlo Molnar
* <markus@oberhumer.com> <ezerotven+github@gmail.com>
*
* John F. Reiser
* <jreiser@users.sourceforge.net>
*/
#ifndef BIG_ENDIAN
#error BIG_ENDIAN must be #define as 0 or 1
#endif
NBPW= 8 // Number of Bytes Per Word
#include "arch/powerpc/64/macros.S"
#include "arch/powerpc/64/ppc_regs.h"
sz_b_info= 12
sz_unc= 0
sz_cpr= 4
b_method= 8
AT_NULL= 0 // <elf.h>
AT_PAGESZ= 6
a_type= 0
a_val= NBPW
sz_auxv= 2*NBPW
O_RDONLY= 0
PROT_READ= 1
PROT_WRITE= 2
PROT_EXEC= 4
MAP_PRIVATE= 2
MAP_FIXED= 0x10
MAP_ANONYMOUS= 0x20
PAGE_SHIFT= 16 // 64KiB PAGE_SIZE
PAGE_SIZE = -(~0<<PAGE_SHIFT)
CACHELINE=32
/* /usr/include/asm-ppc/unistd.h */
__NR_exit = 1
__NR_memfd_create= 360
__NR_mmap = 90
__NR_mprotect = 125
__NR_munmap = 91
__NR_open = 5
__NR_write = 4
section ELFMAINX
sz_pack2= .-4
_start: .globl _start
//// teq r0,r0 // DEBUG
call main // link_register= &f_exp (&decompress)
f_exp:
/* Returns 0 on success; non-zero on failure. */
decompress: // (uchar const *src, size_t lsrc, uchar *dst, size_t &ldst, uint method)
SZ_DLINE=128 # size of data cache line in Apple G5
/* PowerPC has no 'cmplis': compare logical [unsigned] immediate shifted [by 16] */
#define hibit r0 /* holds 0x80000000 during decompress */
#define src a0
#define lsrc a1
#define dst a2
#define ldst a3 /* Out: actually a reference: &len_dst */
#define meth a4
#define off a4
#define len a5
#define bits a6
#define disp a7
#include "arch/powerpc/64le/nrv2b_d.S"
eof_nrv:
#define dst0 a4
#define tmp a1
ld dst0,0(ldst) // original dst
mtlr t3 // return address
subf a0,lsrc,src
subf tmp,dst0,dst // -1+ dst length
addi a0,a0,1 // return 0: good; else: bad [+1: correct for lbzu]
addi tmp,tmp,1 // dst length
std tmp,0(ldst)
#undef tmp
// CACHELINE=32 is the observed minimum line size of any cache.
// Some caches may have larger lines, but it is cumbersome to lookup
// {AT_DCACHEBSIZE, AT_ICACHEBSIZE, AT_UCACHEBSIZE: /usr/include/elf.h},
// then save the correct size in a variable {where to put it?}, or to modify
// the two instructions here. If a cache has larger lines, then we expect
// that the second dcbst (or icbi) on a the same line will be fast.
// If not, then too bad.
ori dst0,dst0,-1+ CACHELINE // highest addr on cache line
cfl_nrv:
dcbst 0,dst0 // initiate store (modified) cacheline to memory
cmpld cr0,dst0,dst // did we cover the highest-addressed byte?
icbi 0,dst0 // discard instructions from cacheline
addi dst0,dst0,CACHELINE // highest addr on next line
blt cr0,cfl_nrv // not done yet
#undef dst0
sync // wait for all memory operations to finish
isync // discard prefetched instructions (if any)
cfl_ret:
ret
section ELFMAINY
msg_SELinux:
call L72
L70:
.asciz "mmap failed.\n"
L71:
// IDENTSTR goes here
#if BIG_ENDIAN //{
section ELFMAINZe
.balign 8
.globl entry_descr
entry_descr: // Elf64_Ehdr.e_entry points here (big endian only)
.quad _start,0,0
#endif //}
section ELFMAINZ
.balign 4
L72:
li a2,L71 - L70 // length
mflr a1 // message text
li a0,2 // fd stderr
li 0,__NR_write; sc
die:
li a0,127
li 0,__NR_exit; sc
r_exp= 31
r_PMASK= 30
r_ADRU= 29
r_LENU= 28
r_fd= 27
r_auxv= 26
r_elf= 25
r_ADRX= 24
r_LENX= 23
r_FLD= 22
r_szuf= 21
r_fp= 20
r_obinf= 19
/* Decompress the rest of this loader, and jump to it. */
unfold: // IN: r_auxv, r_PMASK
mflr r_FLD // LrFLD
//Reserve enough space to decompress the folded code of the stub
lwz r0, sz_pack2 - f_exp(r_exp)
la r_elf,sz_pack2 - f_exp(r_exp)
sub r_elf,r_elf,r0 // r_elf=&Elf32_Ehdr of stub
lwz r_LENU, sz_unc + LBINFO - LrFLD(r_FLD) // sz_unc of fold
call 0f; .asciz "upx"; 0:
mflr a0
li a1,0
SYS_memfd_create= 360
li r0,SYS_memfd_create; sc; bns+ 0f; teq r0,r0; 0:
mr r_fd,a0
mr r_fp,sp
li r0,-CACHELINE
// alloca
sub sp,sp,r_LENU
and sp,sp,r0
lwz r_obinf, LOBINFO - LrFLD(r_FLD) // O_BINFO
// Decompress folded code
mtctr r_exp
lbz meth,b_method + LBINFO - LrFLD(r_FLD)
std r_LENU,SZ_FRAME+31*NBPW(r_fp) // lzma uses for EOF
la ldst, SZ_FRAME+31*NBPW(r_fp) // &slot on stack
mr dst,sp // dst for unfolding
lwz lsrc,sz_cpr + LBINFO - LrFLD(r_FLD)
la src,sz_b_info + LBINFO - LrFLD(r_FLD) // folded code
bctrl // f_exp (decompress)
std r_PMASK,0(sp) // forward the actual PAGE_MASK
mr a0,r_fd
mr a1,sp
mr a2,r_LENU
SYS_write= 4
li r0,SYS_write; sc; bns+ 0f; teq r0,r0; 0:
mr sp,r_fp
li a5,0
mr a4,r_fd
li a3,MAP_PRIVATE
li a2,PROT_EXEC|PROT_READ // PROT_WRITE: DEBUG only
mr a1,r_LENU
li a0,0
SYS_mmap= 90
li r0,SYS_mmap; sc; bns+ 0f; teq r0,r0; 0:
mr r_ADRU,a0
mr a0,r_fd
SYS_close= 6
li r0,SYS_close; sc; bns+ 0f; teq r0,r0; 0:
// Use the unfolded code
addi r0,r_ADRU,2*NBPW // skip page_mask, other word
add r_ADRX,r_elf,r_obinf // compressed data
mtctr r0
lwz r_LENX, sz_pack2 - f_exp(r_exp)
bctr
zfind:
ld r0,0(a0); addi a0,a0,NBPW
cmpdi cr7,r0,0; bne+ cr7,zfind
ret
main:
//// teq r0,r0 // debugging
stdu r1,-(SZ_FRAME + 32*NBPW)(sp) // FR_00 allocate space (keeping 0 mod 16), save r1
// stmd r2,SZ_FRAME+(-1+ 2)*NBPW(sp) // save registers r2 thru r31
std 2,SZ_FRAME+(-1+ 2)*NBPW(sp)
std 3,SZ_FRAME+(-1+ 3)*NBPW(sp)
std 4,SZ_FRAME+(-1+ 4)*NBPW(sp)
std 5,SZ_FRAME+(-1+ 5)*NBPW(sp)
std 6,SZ_FRAME+(-1+ 6)*NBPW(sp)
std 7,SZ_FRAME+(-1+ 7)*NBPW(sp)
std 8,SZ_FRAME+(-1+ 8)*NBPW(sp)
std 9,SZ_FRAME+(-1+ 9)*NBPW(sp)
std 10,SZ_FRAME+(-1+ 10)*NBPW(sp)
std 11,SZ_FRAME+(-1+ 11)*NBPW(sp)
std 12,SZ_FRAME+(-1+ 12)*NBPW(sp)
std 13,SZ_FRAME+(-1+ 13)*NBPW(sp)
std 14,SZ_FRAME+(-1+ 14)*NBPW(sp)
std 15,SZ_FRAME+(-1+ 15)*NBPW(sp)
std 16,SZ_FRAME+(-1+ 16)*NBPW(sp)
std 17,SZ_FRAME+(-1+ 17)*NBPW(sp)
std 18,SZ_FRAME+(-1+ 18)*NBPW(sp)
std 19,SZ_FRAME+(-1+ 19)*NBPW(sp)
std 20,SZ_FRAME+(-1+ 20)*NBPW(sp)
std 21,SZ_FRAME+(-1+ 21)*NBPW(sp)
std 22,SZ_FRAME+(-1+ 22)*NBPW(sp)
std 23,SZ_FRAME+(-1+ 23)*NBPW(sp)
std 24,SZ_FRAME+(-1+ 24)*NBPW(sp)
std 25,SZ_FRAME+(-1+ 25)*NBPW(sp)
std 26,SZ_FRAME+(-1+ 26)*NBPW(sp)
std 27,SZ_FRAME+(-1+ 27)*NBPW(sp)
std 28,SZ_FRAME+(-1+ 28)*NBPW(sp)
std 29,SZ_FRAME+(-1+ 29)*NBPW(sp)
std 30,SZ_FRAME+(-1+ 30)*NBPW(sp)
std 31,SZ_FRAME+(-1+ 31)*NBPW(sp)
mflr r_exp // &f_exp (decompress)
la a0,SZ_FRAME+32*NBPW +NBPW(sp) // &argv (argc might be zero!)
call zfind // a0= envp
call zfind // a0= &Elf64_auxv
mr r_auxv,a0 // save for folded code
// set r_PMASK by finding actual page size in Elf64_auxv_t
1:
ld r0,a_type(a0); ld a1,a_val(a0); addi a0,a0,sz_auxv
cmpdi cr7,r0,AT_PAGESZ; beq- cr7,2f
cmpdi cr0,r0,AT_NULL; bne+ cr0,1b
lis a1,PAGE_SIZE>>16 // not found; use default
2:
neg r_PMASK,a1 // save for folded code
call unfold
LrFLD:
LOBINFO:
.long O_BINFO // .int4
LBINFO:
/* { b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...} */
/* vim:set ts=8 sw=8 et: */
+410 -2
View File
@@ -1,2 +1,410 @@
#define BIG_ENDIAN 1
#include "powerpc64le-linux.elf-fold.S"
/* powerpc64le-linux.elf-fold.S -- linkage to C code to process ELF binary
*
* This file is part of the UPX executable compressor.
*
* Copyright (C) 1996-2023 Markus Franz Xaver Johannes Oberhumer
* Copyright (C) 1996-2023 Laszlo Molnar
* Copyright (C) 2000-2023 John F. Reiser
* All Rights Reserved.
*
* UPX and the UCL library are free software; you can redistribute them
* and/or modify them under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING.
* If not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* Markus F.X.J. Oberhumer Laszlo Molnar
* <markus@oberhumer.com> <ezerotven+github@gmail.com>
*
* John F. Reiser
* <jreiser@users.sourceforge.net>
*/
#if !defined(BIG_ENDIAN)
#error BIG_ENDIAN must be defined as 0 or 1
#endif
// check consistency of BIG_ENDIAN: IBM convention for calling external subroutine
#if BIG_ENDIAN && (!defined(USE_TOC) || !USE_TOC)
#error BIG_ENDIAN && (!defined(USE_TOC) || !USE_TOC)
#endif
// check consistency of !BIG_ENDIAN: Linux convention for calling external subroutine
#if !BIG_ENDIAN && defined(USE_TOC) && USE_TOC
#error !BIG_ENDIAN && defined(USE_TOC) && USE_TOC
#endif
NBPW= 8 //Number of Bytes Per Word
AL_STK= 0x10 // stack alignment
#include "arch/powerpc/64/ppc_regs.h"
#include "arch/powerpc/64/macros.S"
PATH_MAX= 4096 // /usr/include/linux/limits.h
szElf64_Ehdr= 0x40
szElf64_Phdr= 0x38
e_phnum= 56
AT_NULL= 0
sz_b_info= 12
sz_unc= 0
sz_cpr= 4
sz_l_info= 12
sz_p_info= 12
MAP_PRIVATE= 0x02
MAP_FIXED= 0x10
PROT_READ= 0x1
O_RDONLY= 0
OVERHEAD= 2048
// http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html#REG
// r0 Volatile register used in function prologs
// r1 Stack frame pointer
// r2 TOC pointer
// r3 Volatile parameter and return value register
// r4-r10 Volatile registers used for function parameters
// r11 Volatile register used in calls by pointer and as an
// environment pointer for languages which require one
// r12 Volatile register used for exception handling and glink code
// r13 Reserved for use as system thread ID
// r14-r31 Nonvolatile registers used for local variables
//
// CR0-CR1 Volatile condition code register fields (CR0 '.' int; CR1 '.' floating)
// CR2-CR4 Nonvolatile condition code register fields
// CR5-CR7 Volatile condition code register fields
// http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html#STACK
//SZ_LINK= 6*8 // (sp,cr,lr, tmp.xlc,tmp.ld,save.toc)
//SZ_PSAV= 8*8 // for arg9, arg10, ...; and for spilling a0-a7 if necessary
// The parameter save area shall be allocated by the caller.
// It shall be doubleword aligned, and shall be at least 8 doublewords in length.
// In:
r_exp= 31 // f_exp == &decompress
r_PMASK= 30 // PAGE_MASK
r_ADRU= 29 // &base to unmap
r_LENU= 28 // length to unmap
r_fd= 27 // open fd of /proc/self/exe
r_auxv= 26
r_elfa= 25 // original &Elf64_Ehdr of stub
r_ADRX= 24 // compressed input
r_LENX= 23 // total size
r_FLD= 22
// Local:
r_pse= 22 // &"/proc/self/exe"
av_hi= 21
av_len= 20
cblk= 19
r_buf= 18
PAGE_MASK: .quad ~0<<16 // default
.quad 0 // something else?
b fold_begin
get_page_mask: .globl get_page_mask
mflr r0
bl 0f; 0:
mtctr r0
mflr r3
ld r3,PAGE_MASK - 0b(r3)
bctr
fold_begin:
//// teq r0,r0 // debugging
mtctr r0 // # words of stuff FIXME
lwz r0,0(r_FLD) // O_BINFO | is_ptinterp | unmap_all_pages
slwi r0,r0,3*4
mtcrf 0x8,r0 // cr4.eq = unmap_all_pages
call L90
L90a:
L_PFX= 4 // strlen(" =")
L_pse= L90a + L_PFX
.asciz " =/proc/self/exe"
.balign 4
L90:
mflr r_pse; addi r_pse,r_pse,4 // L_pse
// slide {<<stuff>>,argc,argv,0,env,0,auxv} down with maximum room before strings
la a1,-NBPW(sp) // src ready for ldu
beq cr4,no_buf
li r0,L_PFX + PATH_MAX
sub sp,sp,r0
clrrdi sp,sp,4 // round down to multiple of (1<<4)
no_buf:
0: // copy stuff (upto auxv)
la a0,-NBPW(sp) // dst ready for stdu
la r_auxv,-NBPW(r_auxv) // &end ready for ldu
0: // copy upto auxv
ldu r0,NBPW(a1); cmpld cr7,a1,r_auxv
stdu r0,NBPW(a0); blt cr7,0b
la r_auxv,2*NBPW(a0) // new &auxv
stdu r0,NBPW(a0) // new env_terminator
0: // copy auxv
ld r0,NBPW(a1); cmpldi cr7,r0,AT_NULL
std r0,NBPW(a0)
ldu r0,2*NBPW(a1)
stdu r0,2*NBPW(a0); bne cr7,0b
la av_hi,NBPW(a0) // tmp end of auxv
beq cr4,no_pse_env
subf av_len,r_auxv,av_hi // length of auxv
lwz r0,L90a - L_pse(r_pse) // " ="
la cblk,NBPW(a1) // original &strings
stwu r0,NBPW(a0)
la r_buf,L_PFX(a0) // buffer
// r_fd = open("/proc/self/exe", O_RDONLY)
li a1,O_RDONLY
mr a0,r_pse // "/proc/self/exe"
call open; mr r_fd,a0
// readlink("/proc/self/exe", buffer, -1+ PATH_MAX)
li a2,-1+ PATH_MAX
movr a1,r_buf // buffer
movr a0,r_pse // "/proc/self/exe"
call readlink; la a2,-L_PFX(r_buf) // a0= len; a2= buffer
cmpdi a0,0; bgt 0f // success
la a2,L90a - L_pse(r_pse) // " =/proc/self/exe"
li a0,L90 - (NBPW+ L90a) // round_up(NBPW, strlen("/proc/self/exe"))
0:
addi a0,a0,L_PFX // len += strlen(" =");
add a1,a2,a0 // beyond end of path
mtctr a0
movr a0,cblk // old &strings
li a2,0
stbu a2,-1(a0) // NUL terminate
0: // slide path up
lbzu r0,-1(a1)
stbu r0,-1(a0); bdnz 0b
std a0,-2*NBPW(r_auxv) // &" =<<path>>" for env
clrrdi a0,a0,3 // word align
xor r0,sp,a1 // parity of length
xor r0,r0,a0 // length vs destination
clrldi r0,r0,-4+ 8*NBPW // keep bottom 4 bits
sub a0,a0,r0
// slide the rest of the stack up; leave room for fake TOC of .e_entry
movr a1,av_hi
li r0,0; stdu r0,-NBPW(a0); stdu r0,-NBPW(a0)
movr av_hi,a0 // remember location
sub r_auxv,a0,av_len
0:
ldu r0,-NBPW(a1); cmpld cr7,a1,sp
stdu r0,-NBPW(a0); bgt+ cr7,0b
movr sp,a0 // FR_02
no_pse_env:
r_reloc= 32 - 1 # used slot in register save area
la a6,SZ_FRAME + r_reloc*NBPW(sp) // &reloc [adjacent to argc]
std r_elfa,0(a6) // elfaddr
stdu sp,-(SZ_FRAME+OVERHEAD)(sp) // FR_01 allocate this frame
mr a0,r_ADRX // &b_info
mr a1,r_LENX // total_size
la a2,SZ_FRAME(sp) // &Elf64_Ehdr temporary space
mr a3,r_auxv // &Elf64_auxv_t
la a4,SZ_FRAME+OVERHEAD + SZ_FRAME+(r_reloc * NBPW)(sp) // &p_reloc
std r_elfa,0(a4)
call upx_main // Out: a0= entry
// entry= upx_main(b_info *a0, total_size a1, Elf64_Ehdr *a2, ELf32_auxv_t *a3,
// Elf64_Addr *p_reloc)
la sp,SZ_FRAME+OVERHEAD(sp) // FR_01 deallocate this frame
#if USE_TOC //{
// Sometimes the "entry TOC" is not a TOC, particularly with musl.
movr r2,av_hi // default fake TOC
andi. r0,a0,7; bne cr0,noTOC // align(TOC) < 8; [heuristic]
lwz r0,0(a0); cmplwi r0,0; bne noTOC // 4GiB <= .func; an instruction?
ld r0, SZ_FRAME+(r_reloc * NBPW)(sp) // base for TOC (incl. PT_INTERP)
ld r2,NBPW(r3); add r2,r2,r0 // toc
ld r3, 0(r3); add r3,r3,r0 // .func NOTE: r3 === a0
noTOC:
std r3,0(av_hi) // .func for .e_entry
#endif //}
mr r_exp,a0 // save &entry (.entry when BIG_ENDIAN)
p_memsz= 4+4+ 4*NBPW
// Discard pages of compressed data (includes [ADRX,+LENX) )
//lhz r0,e_type(r_elfa); cmpwi r0,ET_EXEC; bne 1f // only ET_EXEC
movr a0,r_elfa; call brk // also set the brk
1:
ld a1,p_memsz+szElf64_Phdr+szElf64_Ehdr(r_elfa) // Phdr[C_TEXT= 1].p_memsz
movr a0,r_elfa; call munmap # discard C_TEXT compressed data
beq cr4,no_map_pse
// first page of /proc/self/exe, to preserve it despite munmap(ADRU, LENU)
li a5,0 // offset
movr a4,r_fd
cmpwi a4,0; blt no_map_pse
li a3,MAP_PRIVATE
li a2,PROT_READ
neg a1,r_PMASK // PAGE_SIZE
li a0,0 // kernel chooses where
call mmap
// close /proc/self/exe
movr a0,r_fd
call close
no_map_pse:
AT_NULL= 0 // <elf.h>
a_type= 0
a_val= NBPW
sz_auxv= 2*NBPW
ld r0,-NBPW(av_hi) // &hatch
mtctr r0
ld r0,0(av_hi) // entry address
std r0,SZ_FRAME + (-1+ 31)*NBPW(sp) // hatch: "movr r12,r31" for musl 1.1.16
mr a0,r_ADRU
mr a1,r_LENU
li r0,SYS_munmap
mtlr r_exp // entry address
// BIG_ENDIAN: r2 (TOC) already is live (set after return from upx_main)
// LITTLE_ENDIAN: r2 never is touched
// ld 2,SZ_FRAME + (-1+ 2)*NBPW(sp)
// r3,r4 are a0,a1 which are parameters to munmap()
// ld 3,SZ_FRAME + (-1+ 3)*NBPW(sp)
// ld 4,SZ_FRAME + (-1+ 4)*NBPW(sp)
ld 5,SZ_FRAME + (-1+ 5)*NBPW(sp)
ld 6,SZ_FRAME + (-1+ 6)*NBPW(sp)
ld 7,SZ_FRAME + (-1+ 7)*NBPW(sp)
ld 8,SZ_FRAME + (-1+ 8)*NBPW(sp)
ld 9,SZ_FRAME + (-1+ 9)*NBPW(sp)
ld 10,SZ_FRAME + (-1+ 10)*NBPW(sp)
ld 11,SZ_FRAME + (-1+ 11)*NBPW(sp)
ld 12,SZ_FRAME + (-1+ 12)*NBPW(sp)
ld 13,SZ_FRAME + (-1+ 13)*NBPW(sp)
ld 14,SZ_FRAME + (-1+ 14)*NBPW(sp)
ld 15,SZ_FRAME + (-1+ 15)*NBPW(sp)
ld 16,SZ_FRAME + (-1+ 16)*NBPW(sp)
ld 17,SZ_FRAME + (-1+ 17)*NBPW(sp)
ld 18,SZ_FRAME + (-1+ 18)*NBPW(sp)
ld 19,SZ_FRAME + (-1+ 19)*NBPW(sp)
ld 20,SZ_FRAME + (-1+ 20)*NBPW(sp)
ld 21,SZ_FRAME + (-1+ 21)*NBPW(sp)
ld 22,SZ_FRAME + (-1+ 22)*NBPW(sp)
ld 23,SZ_FRAME + (-1+ 23)*NBPW(sp)
ld 24,SZ_FRAME + (-1+ 24)*NBPW(sp)
ld 25,SZ_FRAME + (-1+ 25)*NBPW(sp)
ld 26,SZ_FRAME + (-1+ 26)*NBPW(sp)
ld 27,SZ_FRAME + (-1+ 27)*NBPW(sp)
ld 28,SZ_FRAME + (-1+ 28)*NBPW(sp)
ld 29,SZ_FRAME + (-1+ 29)*NBPW(sp)
ld 30,SZ_FRAME + (-1+ 30)*NBPW(sp)
ld 31,SZ_FRAME + (-1+ 31)*NBPW(sp)
la sp,SZ_FRAME + 32 *NBPW(sp) // FR_00 deallocate outer frame
bctr // goto escape hatch
section SYSCALLS
SYS_exit= 1
SYS_fork= 2
SYS_read= 3
SYS_write= 4
SYS_open= 5
SYS_close= 6
SYS_brk= 45
SYS_readlink= 85
SYS_mmap= 90
SYS_munmap= 91
SYS_ftruncate= 93
SYS_mprotect= 125
SYS_memfd_create= 360
Pmap: .globl Pmap
li r0, 0xfff // ~PAGE_MASK (FIXME: probably use 4th arg)
and r0,a0,r0
sub a0,a0,r0
add a1,a1,r0
mmap: .globl mmap
clrldi a4,a4,32 // truncate fd to 32 bits; kernel is picky?
li 0,SYS_mmap
sysgo:
sc
bns+ no_fail // 'bns': branch if No Summary[Overflow]
li a0,-1 // failure; IGNORE errno
no_fail:
ret
Pprotect: .globl Pprotect
mprotect: .globl mprotect
li r0, 0xfff // ~PAGE_MASK (FIXME: probably use 4th arg)
and r0,a0,r0
sub a0,a0,r0
add a1,a1,r0
li r0,SYS_mprotect; 5: b 5f
Punmap: .globl Punmap
li r0, 0xfff // ~PAGE_MASK (FIXME: probably use 4th arg)
and r0,a0,r0
sub a0,a0,r0
add a1,a1,r0
munmap: .globl munmap
li r0,SYS_munmap; 5: b sysgo
memfd_create: .globl memfd_create
li r0,SYS_memfd_create; 5: b 5f
ftruncate: .globl ftruncate
li r0,SYS_ftruncate;5: b 5f
exit: .globl exit
li r0,SYS_exit; 5: b 5f
brk: .globl brk
li r0,SYS_brk; 5: b 5f
readlink: .globl readlink
li r0,SYS_readlink; 5: b 5f
write: .globl write
li r0,SYS_write; 5: b 5f
read: .globl read
li r0,SYS_read; 5: b 5f
open: .globl open
li r0,SYS_open; 5: b 5f
close: .globl close
li r0,SYS_close; 5: b sysgo
upxfd_create: .globl upxfd_create // (char *tag, unsigned flags)
0: // try memfd_create
li r0,SYS_memfd_create; sc; bns+ ok_memfd
cmpwi a2,0; beq no_memfd // memfd_create failed twice
li a2,0; b 0b // try again without MFD_EXEC
no_memfd: // so try /dev/shm
O_RDWR= 2
O_DIRECTORY= 0200000 // 0x010000
O_TMPFILE= 020000000 // 0x400000
mflr r6; bl 0f; .asciz "/dev/shm"; .balign 4;
0: mflr a1; mtlr r6
li a2,0700
lis a3,(O_DIRECTORY|O_TMPFILE)>>16
ori a3,a3,O_RDWR
li r0,SYS_open; sc; bns+ ok_memfd; teq r0,r0
ok_memfd:
ret
memcpy: .globl memcpy // FIXME: opcodes!
mtctr a2
subi a0,a0,1
subi a1,a1,1
L999:
lbzu r0,1(a1)
stbu r0,1(a0)
bdnz L999
blr
my_bkpt: .globl my_bkpt
teq r0,r0 // my_bkpt
blr
/* vim:set ts=8 sw=8 et: */
@@ -38,7 +38,6 @@ PHDRS
}
SECTIONS
{
. = 0x00100000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
.text : {
*(.text)
*(.data)
+4 -306
View File
@@ -1,307 +1,5 @@
/* powerpc64le-linux.elf-entry.S -- Linux program entry point & decompressor (Elf binary)
*
* This file is part of the UPX executable compressor.
*
* Copyright (C) 1996-2024 Markus Franz Xaver Johannes Oberhumer
* Copyright (C) 1996-2024 Laszlo Molnar
* Copyright (C) 2000-2024 John F. Reiser
* All Rights Reserved.
*
* UPX and the UCL library are free software; you can redistribute them
* and/or modify them under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING.
* If not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* Markus F.X.J. Oberhumer Laszlo Molnar
* <markus@oberhumer.com> <ezerotven+github@gmail.com>
*
* John F. Reiser
* <jreiser@users.sourceforge.net>
*/
#if !defined(BIG_ENDIAN) || BIG_ENDIAN
#error must "#define BIG_ENDIAN 0" for powerpc64le
#endif
#ifndef BIG_ENDIAN //{
#define BIG_ENDIAN 0
#endif //}
NBPW= 8 // Number of Bytes Per Word
#include "arch/powerpc/64le/macros.S"
#include "arch/powerpc/64le/ppc_regs.h"
sz_b_info= 12
sz_unc= 0
sz_cpr= 4
b_method= 8
AT_NULL= 0 // <elf.h>
AT_PAGESZ= 6
a_type= 0
a_val= NBPW
sz_auxv= 2*NBPW
O_RDONLY= 0
PROT_READ= 1
PROT_WRITE= 2
PROT_EXEC= 4
MAP_PRIVATE= 2
MAP_FIXED= 0x10
MAP_ANONYMOUS= 0x20
PAGE_SHIFT= 16 // 64KiB PAGE_SIZE
PAGE_SIZE = -(~0<<PAGE_SHIFT)
/* /usr/include/asm-ppc/unistd.h */
__NR_exit = 1
__NR_mmap = 90
__NR_mprotect = 125
__NR_munmap = 91
__NR_open = 5
__NR_write = 4
section ELFMAINX
sz_pack2= .-4
_start: .globl _start
//// teq 0,0 // DEBUG
call main // link_register= &f_exp (&decompress)
/* Returns 0 on success; non-zero on failure. */
f_exp: // (uchar const *src, size_t lsrc, uchar *dst, size_t &ldst, uint method)
section NRV_HEAD
SZ_DLINE=128 # size of data cache line in Apple G5
/* PowerPC has no 'cmplis': compare logical [unsigned] immediate shifted [by 16] */
#define hibit r0 /* holds 0x80000000 during decompress */
#define src a0
#define lsrc a1
#define dst a2
#define ldst a3 /* Out: actually a reference: &len_dst */
#define meth a4
#define off a4
#define len a5
#define bits a6
#define disp a7
section NRV2E
#include "arch/powerpc/64le/nrv2e_d.S"
section NRV2D
#include "arch/powerpc/64le/nrv2d_d.S"
section NRV2B
#include "arch/powerpc/64le/nrv2b_d.S"
// lzma decoder is pre-assembled and endian-dependent
#if BIG_ENDIAN //{
#include "arch/powerpc/64/lzma_d.S"
#else //}{
#include "arch/powerpc/64le/lzma_d.S"
#endif //}
section NRV_TAIL
eof_nrv:
#define dst0 a4
#define tmp a1
ld dst0,0(ldst) // original dst
mtlr t3 // return address
subf a0,lsrc,src
subf tmp,dst0,dst // -1+ dst length
addi a0,a0,1 // return 0: good; else: bad [+1: correct for lbzu]
addi tmp,tmp,1 // dst length
std tmp,0(ldst)
#undef tmp
// CACHELINE=32 is the observed minimum line size of any cache.
// Some caches may have larger lines, but it is cumbersome to lookup
// {AT_DCACHEBSIZE, AT_ICACHEBSIZE, AT_UCACHEBSIZE: /usr/include/elf.h},
// then save the correct size in a variable {where to put it?}, or to modify
// the two instructions here. If a cache has larger lines, then we expect
// that the second dcbst (or icbi) on a the same line will be fast.
// If not, then too bad.
section CFLUSH // In: a2=dst= &highest stored byte; a4=dst0= &lowest stored byte
CACHELINE=32
ori dst0,dst0,-1+ CACHELINE // highest addr on cache line
cfl_nrv:
dcbst 0,dst0 // initiate store (modified) cacheline to memory
cmpld cr0,dst0,dst // did we cover the highest-addressed byte?
icbi 0,dst0 // discard instructions from cacheline
addi dst0,dst0,CACHELINE // highest addr on next line
blt cr0,cfl_nrv // not done yet
#undef dst0
sync // wait for all memory operations to finish
isync // discard prefetched instructions (if any)
cfl_ret:
ret
section ELFMAINY
msg_SELinux:
call L72
L70:
.asciz "mmap failed.\n"
L71:
// IDENTSTR goes here
#if BIG_ENDIAN //{
section ELFMAINZe
.balign 8
.globl entry_descr
entry_descr: // Elf64_Ehdr.e_entry points here (big endian only)
.quad _start,0,0
#endif //}
section ELFMAINZ
.balign 4
L72:
li a2,L71 - L70 // length
mflr a1 // message text
li a0,2 // fd stderr
li 0,__NR_write; sc
die:
li a0,127
li 0,__NR_exit; sc
r_exp= 31
r_PMASK= 30
r_ADRU= 29
r_LENU= 28
r_fd= 27
r_auxv= 26
r_elfa= 25
r_ADRX= 24
r_LENX= 23
r_FLD= 22
r_szuf= 21
r_relo= 20
r_obinf= 19
/* Decompress the rest of this loader, and jump to it. */
unfold: // IN: r_exp, r_auxv, r_PMASK
mflr r_FLD // LrFLD
//Reserve enough space to decompress the folded code onto r_FLD.
lwz r0, sz_pack2 - f_exp(r_exp)
la r_elfa,sz_pack2 - f_exp(r_exp)
sub r_elfa,r_elfa,r0 // r_elfa= &Elf64_Ehdr of stub
li a4,-1
lwz r_szuf, sz_unc + LBINFO - LrFLD(r_FLD) // sz_unc of fold
li a3,MAP_PRIVATE|MAP_ANONYMOUS
li a0,0 // kernel chooses addr
mr a1,r_szuf // length needed
mr r_LENU,a1
call mmapRW0 // fills in a5, a2
mr r_ADRU,a0
lwz r_obinf, LOBINFO - LrFLD(r_FLD) // O_BINFO
clrrwi r_obinf,r_obinf,2 // clear is_ptinterp | unmap_all_pages
// Decompress folded code
mtctr r_exp
lbz meth,b_method + LBINFO - LrFLD(r_FLD)
std r_szuf,SZ_FRAME+31*NBPW(sp) // lzma uses for EOF
la ldst, SZ_FRAME+31*NBPW(sp) // &slot on stack
mr dst,r_ADRU // dst for unfolding
lwz lsrc,sz_cpr + LBINFO - LrFLD(r_FLD)
la src,sz_b_info + LBINFO - LrFLD(r_FLD) // old folded code
bctrl // decompress it
// Generate code to compute PAGE_MASK.
std r_PMASK,2*4(r_ADRU) // page_mask in powerpc64le-linux.elf-fold.S
// PROT_EXEC
li a2,PROT_EXEC|PROT_READ
mr a1,r_LENU // length
mr a0,r_ADRU // base
li r0,__NR_mprotect; sc
// Use the unfolded code
lwz r_LENX, sz_pack2 - f_exp(r_exp)
mtctr r_ADRU
add r_ADRX,r_elfa,r_obinf // compressed data
li r0,(SZ_FRAME+32*NBPW)/NBPW // words before &argc
bctr
mmapRW0:
li a5,0 // offset
mmapRW:
li a2,PROT_READ|PROT_WRITE
mmap:
li r0,__NR_mmap; sc; bns 0f; teq r0,r0; 0: // bad mmap
ret
zfind:
ld r0,0(a0); addi a0,a0,NBPW
cmpdi cr0,r0,0; bne+ cr0,zfind
ret
main:
//// teq r0,r0 // debugging
stdu r1,-(SZ_FRAME + 32*NBPW)(sp) // FR_00 allocate space (keeping 0 mod 16), save r1
// stmd r2,SZ_FRAME+(-1+ 2)*NBPW(sp) // save registers r2 thru r31
std 2,SZ_FRAME+(-1+ 2)*NBPW(sp)
std 3,SZ_FRAME+(-1+ 3)*NBPW(sp)
std 4,SZ_FRAME+(-1+ 4)*NBPW(sp)
std 5,SZ_FRAME+(-1+ 5)*NBPW(sp)
std 6,SZ_FRAME+(-1+ 6)*NBPW(sp)
std 7,SZ_FRAME+(-1+ 7)*NBPW(sp)
std 8,SZ_FRAME+(-1+ 8)*NBPW(sp)
std 9,SZ_FRAME+(-1+ 9)*NBPW(sp)
std 10,SZ_FRAME+(-1+ 10)*NBPW(sp)
std 11,SZ_FRAME+(-1+ 11)*NBPW(sp)
std 12,SZ_FRAME+(-1+ 12)*NBPW(sp)
std 13,SZ_FRAME+(-1+ 13)*NBPW(sp)
std 14,SZ_FRAME+(-1+ 14)*NBPW(sp)
std 15,SZ_FRAME+(-1+ 15)*NBPW(sp)
std 16,SZ_FRAME+(-1+ 16)*NBPW(sp)
std 17,SZ_FRAME+(-1+ 17)*NBPW(sp)
std 18,SZ_FRAME+(-1+ 18)*NBPW(sp)
std 19,SZ_FRAME+(-1+ 19)*NBPW(sp)
std 20,SZ_FRAME+(-1+ 20)*NBPW(sp)
std 21,SZ_FRAME+(-1+ 21)*NBPW(sp)
std 22,SZ_FRAME+(-1+ 22)*NBPW(sp)
std 23,SZ_FRAME+(-1+ 23)*NBPW(sp)
std 24,SZ_FRAME+(-1+ 24)*NBPW(sp)
std 25,SZ_FRAME+(-1+ 25)*NBPW(sp)
std 26,SZ_FRAME+(-1+ 26)*NBPW(sp)
std 27,SZ_FRAME+(-1+ 27)*NBPW(sp)
std 28,SZ_FRAME+(-1+ 28)*NBPW(sp)
std 29,SZ_FRAME+(-1+ 29)*NBPW(sp)
std 30,SZ_FRAME+(-1+ 30)*NBPW(sp)
std 31,SZ_FRAME+(-1+ 31)*NBPW(sp)
mflr r_exp // &f_exp (decompress)
la a0,NBPW+SZ_FRAME+32*NBPW(sp) // NBPW: argc can be 0
call zfind // a0= envp
call zfind // a0= &Elf64_auxv
mr r_auxv,a0 // save for folded code
// set r_PMASK by finding actual page size in Elf64_auxv_t
1:
ld r0,a_type(a0); ld a1,a_val(a0); addi a0,a0,sz_auxv
cmpdi cr0,r0,AT_PAGESZ; beq- cr0,2f
cmpdi cr0,r0,AT_NULL; bne+ cr0,1b
lis a1,PAGE_SIZE>>16 // not found; use default
2:
neg r_PMASK,a1 // save for folded code
call unfold
LrFLD:
LOBINFO:
.long O_BINFO // .int4
LBINFO:
/* { b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...} */
/* vim:set ts=8 sw=8 et: */
#include "../src/powerpc64-linux.elf-entry.S"
+3 -365
View File
@@ -1,367 +1,5 @@
/* powerpc64le-linux.elf-fold.S -- linkage to C code to process ELF binary
*
* This file is part of the UPX executable compressor.
*
* Copyright (C) 1996-2024 Markus Franz Xaver Johannes Oberhumer
* Copyright (C) 1996-2024 Laszlo Molnar
* Copyright (C) 2000-2024 John F. Reiser
* All Rights Reserved.
*
* UPX and the UCL library are free software; you can redistribute them
* and/or modify them under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING.
* If not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* Markus F.X.J. Oberhumer Laszlo Molnar
* <markus@oberhumer.com> <ezerotven+github@gmail.com>
*
* John F. Reiser
* <jreiser@users.sourceforge.net>
*/
#ifndef BIG_ENDIAN
#define BIG_ENDIAN 0
#if !defined(BIG_ENDIAN) || BIG_ENDIAN
#error must "#define BIG_ENDIAN 0" for powerpc64le
#endif
NBPW= 8 //Number of Bytes Per Word
AL_STK= 0x10 // stack alignment
#define USE_TOC 1
#include "arch/powerpc/64le/macros.S"
#include "arch/powerpc/64le/ppc_regs.h"
PATH_MAX= 4096 // /usr/include/linux/limits.h
szElf64_Ehdr= 0x40
szElf64_Phdr= 0x38
e_phnum= 56
AT_NULL= 0
sz_b_info= 12
sz_unc= 0
sz_cpr= 4
sz_l_info= 12
sz_p_info= 12
MAP_PRIVATE= 0x02
MAP_FIXED= 0x10
PROT_READ= 0x1
O_RDONLY= 0
OVERHEAD= 2048
// http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html#REG
// r0 Volatile register used in function prologs
// r1 Stack frame pointer
// r2 TOC pointer
// r3 Volatile parameter and return value register
// r4-r10 Volatile registers used for function parameters
// r11 Volatile register used in calls by pointer and as an
// environment pointer for languages which require one
// r12 Volatile register used for exception handling and glink code
// r13 Reserved for use as system thread ID
// r14-r31 Nonvolatile registers used for local variables
//
// CR0-CR1 Volatile condition code register fields (CR0 '.' int; CR1 '.' floating)
// CR2-CR4 Nonvolatile condition code register fields
// CR5-CR7 Volatile condition code register fields
// http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html#STACK
//SZ_LINK= 6*8 // (sp,cr,lr, tmp.xlc,tmp.ld,save.toc)
//SZ_PSAV= 8*8 // for arg9, arg10, ...; and for spilling a0-a7 if necessary
// The parameter save area shall be allocated by the caller.
// It shall be doubleword aligned, and shall be at least 8 doublewords in length.
// In:
r_exp= 31 // f_exp == &decompress
r_PMASK= 30 // PAGE_MASK
r_ADRU= 29 // &base to unmap
r_LENU= 28 // length to unmap
r_fd= 27 // open fd of /proc/self/exe
r_auxv= 26
r_elfa= 25 // original &Elf64_Ehdr of stub
r_ADRX= 24 // compressed input
r_LENX= 23 // total size
r_FLD= 22
// Local:
r_unf= 22 // f_unf == &unfilter()
av_hi= 21
av_len= 20
cblk= 19
r_buf= 18
b fold_begin
nop
page_mask:
.quad -0x10000 // default page mask (64KiB)
get_page_mask: .globl get_page_mask
mflr r0 // retaddr
call 0f; 0: mflr a0
mtlr r0 // original retaddr
ld a0,page_mask - 0b(a0)
blr
Pprotect: .globl Pprotect
mprotect: .globl mprotect
mr a4,a0 // save 1st arg
mflr a5; bl get_page_mask; mtlr a5
andc t1,a4,a0 // frag
sub a0,a4,t1
add a1,a1,t1
li r0,SYS_mprotect
b sysgo
fold_begin:
mtctr r0 // # words of stuff
lwz r0,0(r_FLD) // O_BINFO | is_ptinterp | unmap_all_pages
slwi r0,r0,3*4
mtcrf 0x8,r0 // cr4.eq = unmap_all_pages
call L90
L90b:
#include "arch/powerpc/64le/bxx.S"
L90a:
L_PFX= 4 // strlen(" =")
.asciz " =/proc/self/exe"
.balign 4
L90:
mflr r_unf // L90b = &ppcbxx: f_unfilter
// slide {<<stuff>>,argc,argv,0,env,0,auxv} down with maximum room before strings
la a1,-NBPW(sp) // src ready for ldu
beq cr4,0f; la sp,-(-AL_STK & (-1+ AL_STK + (NBPW + L_PFX + PATH_MAX)))(sp); 0:
la a0,-NBPW(sp) // dst ready for stdu
la r_auxv,-NBPW(r_auxv) // &end ready for ldu
0: // copy stuff (upto auxv)
ldu r0,NBPW(a1); cmpld cr0,a1,r_auxv
stdu r0,NBPW(a0); blt cr0,0b
la r_auxv,NBPW(a0) // tmp &auxv
0: // copy auxv
ld r0,NBPW(a1); cmpldi cr0,r0,AT_NULL
std r0,NBPW(a0)
ldu r0,2*NBPW(a1)
stdu r0,2*NBPW(a0); bne cr0,0b
la av_hi,NBPW(a0) // tmp end of auxv
beq cr4,no_pse_env
subf av_len,r_auxv,av_hi // length of auxv
lwz r0,L90a - L90b(r_unf) // " ="
la cblk,NBPW(a1) // original &strings
stwu r0,NBPW(a0)
la r_buf,L_PFX(a0) // buffer
// r_fd = open("/proc/self/exe", O_RDONLY)
li a1,O_RDONLY
la a0,L_PFX+ L90a - L90b(r_unf) // "/proc/self/exe"
call open; mr r_fd,a0
// readlink("/proc/self/exe", buffer, -1+ PATH_MAX)
li a2,-1+ PATH_MAX
movr a1,r_buf // buffer
la a0,L_PFX+ L90a - L90b(r_unf) // "/proc/self/exe"
call readlink; la a2,-L_PFX(r_buf) // a0= len; a2= buffer
cmpdi a0,0; bgt 0f // success
la a2,L90a - L90b(r_unf) // " =/proc/self/exe"
li a0,L90 - (NBPW+ L90a) // round_up(NBPW, strlen("/proc/self/exe"))
0:
addi a0,a0,L_PFX // len += strlen(" =");
add a1,a2,a0 // beyond end of path
mtctr a0
movr a0,cblk // old &strings
li a2,0
stbu a2,-1(a0) // NUL terminate
0: // slide path up
lbzu r0,-1(a1)
stbu r0,-1(a0); bdnz 0b
std a0,-2*NBPW(r_auxv) // &" =<<path>>" for env
clrrdi a0,a0,3 // word align
xor r0,sp,a1 // parity of length
xor r0,r0,a0 // length vs destination
clrldi r0,r0,-4+ 8*NBPW // keep bottom 4 bits
sub a0,a0,r0
// slide the rest of the stack up; leave room for fake TOC of .e_entry
movr a1,av_hi
li r0,0; stdu r0,-NBPW(a0); stdu r0,-NBPW(a0)
movr av_hi,a0 // remember location
sub r_auxv,a0,av_len
0:
ldu r0,-NBPW(a1); cmpld cr0,a1,sp
stdu r0,-NBPW(a0); bgt+ cr0,0b
movr sp,a0 // FR_02
no_pse_env:
r_reloc= 32 - 1 # used slot in register save area
la a6,SZ_FRAME + r_reloc*NBPW(sp) // &reloc [adjacent to argc]
std r_elfa,0(a6) // elfaddr
stdu sp,-(SZ_FRAME+OVERHEAD)(sp) // FR_01 allocate this frame
mr a0,r_ADRX // &b_info
mr a1,r_LENX // total_size
la a2,SZ_FRAME(sp) // &Elf64_Ehdr temporary space
mr a3,r_auxv // &Elf64_auxv_t
mr a4,r_exp // &decompress: f_expand
mr a5,r_unf // &f_unf
#if USE_TOC //{
li r0,0
std a4,F_TOC + 0 + 0*2*NBPW(sp)
la a4,F_TOC + 0 + 0*2*NBPW(sp)
std r0,F_TOC + NBPW + 0*2*NBPW(sp)
std a5,F_TOC + 0 + 1*2*NBPW(sp)
la a5,F_TOC + 0 + 1*2*NBPW(sp)
std r0,F_TOC + NBPW + 1*2*NBPW(sp)
#endif //}
mr a7,r_PMASK // PAGE_MASK
call upx_main // Out: a0= entry
// entry= upx_main(b_info *a0, total_size a1, Elf64_Ehdr *a2, ELf32_auxv_t *a3,
// f_exp a4, f_unf a5, elfaddr &a6, page_mask a7)
la sp,SZ_FRAME+OVERHEAD(sp) // FR_01 deallocate this frame
#if USE_TOC //{
// Sometimes the "entry TOC" is not a TOC, particularly with musl.
movr r2,av_hi // default fake TOC
andi. r0,a0,7; bne cr0,noTOC // align(TOC) < 8; [heuristic]
lwz r0,0(a0); cmplwi r0,0; bne noTOC // 4GiB <= .func; an instruction?
ld r0, SZ_FRAME + r_reloc*NBPW(sp) // reloc for ET_DYN
ld r2,NBPW(r3); add r2,r2,r0 // toc
ld r3, 0(r3); add r3,r3,r0 // .func NOTE: r3 === a0
noTOC:
std r3,0(av_hi) // .func for .e_entry
#endif //}
mr r_exp,a0 // save &entry (.entry when BIG_ENDIAN)
p_memsz= 4+4+ 4*NBPW
// Discard pages of compressed data (includes [ADRX,+LENX) )
ld a1,p_memsz+szElf64_Phdr+szElf64_Ehdr(r_elfa) // Phdr[C_TEXT= 1].p_memsz
//lhz r0,e_type(r_elf); cmpwi r0,ET_EXEC; bne 1f // only ET_EXEC
movr a0,r_elfa; call brk // also set the brk
1:
movr a0,r_elfa; call munmap # discard C_TEXT compressed data
beq cr4,no_map_pse
// first page of /proc/self/exe, to preserve it despite munmap(ADRU, LENU)
li a5,0 // offset
movr a4,r_fd
cmpwi a4,0; blt no_map_pse
li a3,MAP_PRIVATE
li a2,PROT_READ
neg a1,r_PMASK // PAGE_SIZE
li a0,0 // kernel chooses where
call mmap
// close /proc/self/exe
movr a0,r_fd
call close
no_map_pse:
AT_NULL= 0 // <elf.h>
a_type= 0
a_val= NBPW
sz_auxv= 2*NBPW
ld r0,-NBPW(av_hi) // &hatch
mtctr r0
ld r0,0(av_hi) // entry address
std r0,SZ_FRAME + (-1+ 31)*NBPW(sp) // hatch: "movr r12,r31" for musl 1.1.16
mr a0,r_ADRU
mr a1,r_LENU
li r0,SYS_munmap
mtlr r_exp // entry address
// BIG_ENDIAN: r2 (TOC) already is live (set after return from upx_main)
// LITTLE_ENDIAN: r2 never is touched
// ld 2,SZ_FRAME + (-1+ 2)*NBPW(sp)
// r3,r4 are a0,a1 which are parameters to munmap()
// ld 3,SZ_FRAME + (-1+ 3)*NBPW(sp)
// ld 4,SZ_FRAME + (-1+ 4)*NBPW(sp)
ld 5,SZ_FRAME + (-1+ 5)*NBPW(sp)
ld 6,SZ_FRAME + (-1+ 6)*NBPW(sp)
ld 7,SZ_FRAME + (-1+ 7)*NBPW(sp)
ld 8,SZ_FRAME + (-1+ 8)*NBPW(sp)
ld 9,SZ_FRAME + (-1+ 9)*NBPW(sp)
ld 10,SZ_FRAME + (-1+ 10)*NBPW(sp)
ld 11,SZ_FRAME + (-1+ 11)*NBPW(sp)
ld 12,SZ_FRAME + (-1+ 12)*NBPW(sp)
ld 13,SZ_FRAME + (-1+ 13)*NBPW(sp)
ld 14,SZ_FRAME + (-1+ 14)*NBPW(sp)
ld 15,SZ_FRAME + (-1+ 15)*NBPW(sp)
ld 16,SZ_FRAME + (-1+ 16)*NBPW(sp)
ld 17,SZ_FRAME + (-1+ 17)*NBPW(sp)
ld 18,SZ_FRAME + (-1+ 18)*NBPW(sp)
ld 19,SZ_FRAME + (-1+ 19)*NBPW(sp)
ld 20,SZ_FRAME + (-1+ 20)*NBPW(sp)
ld 21,SZ_FRAME + (-1+ 21)*NBPW(sp)
ld 22,SZ_FRAME + (-1+ 22)*NBPW(sp)
ld 23,SZ_FRAME + (-1+ 23)*NBPW(sp)
ld 24,SZ_FRAME + (-1+ 24)*NBPW(sp)
ld 25,SZ_FRAME + (-1+ 25)*NBPW(sp)
ld 26,SZ_FRAME + (-1+ 26)*NBPW(sp)
ld 27,SZ_FRAME + (-1+ 27)*NBPW(sp)
ld 28,SZ_FRAME + (-1+ 28)*NBPW(sp)
ld 29,SZ_FRAME + (-1+ 29)*NBPW(sp)
ld 30,SZ_FRAME + (-1+ 30)*NBPW(sp)
ld 31,SZ_FRAME + (-1+ 31)*NBPW(sp)
la sp,SZ_FRAME + 32 *NBPW(sp) // FR_00 deallocate outer frame
bctr // goto escape hatch
SYS_exit= 1
SYS_fork= 2
SYS_read= 3
SYS_write= 4
SYS_open= 5
SYS_close= 6
SYS_brk= 45
SYS_mmap= 90
SYS_munmap= 91
SYS_mprotect= 125
SYS_readlink= 85
mmap: .globl mmap
clrldi a4,a4,32 // truncate fd to 32 bits; kernel is picky?
li 0,SYS_mmap
sysgo:
sc
bns+ no_fail // 'bns': branch if No Summary[Overflow]
li a0,-1 // failure; IGNORE errno
no_fail:
ret
exit: .globl exit
li r0,SYS_exit; b 5f
brk: .globl brk
li r0,SYS_brk; 5: b 5f
readlink: .globl readlink
li r0,SYS_readlink; 5: b 5f
write: .globl write
li r0,SYS_write; 5: b 5f
read: .globl read
li r0,SYS_read; 5: b 5f
open: .globl open
li r0,SYS_open; 5: b 5f
close: .globl close
li r0,SYS_close; 5: b 5f
munmap: .globl munmap
li r0,SYS_munmap; 5: b sysgo
my_bkpt: .globl my_bkpt
teq r0,r0 // my_bkpt
blr
/* vim:set ts=8 sw=8 et: */
#include "../src/powerpc64-linux.elf-fold.S"
@@ -38,7 +38,6 @@ PHDRS
}
SECTIONS
{
. = 0x00100000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
.text : {
*(.text)
*(.data)
@@ -34,7 +34,7 @@
#define BIG_ENDIAN 0
#endif //}
#include "arch/powerpc/64le/macros.S"
#include "arch/powerpc/64/macros.S"
#include "arch/powerpc/64le/ppc_regs.h"
// offsets in struct b_info
+6 -42
View File
@@ -2,33 +2,13 @@ file format elf64-powerpc
Sections:
Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINX 04 0 0 040 2**0 CONTENTS
1 NRV_HEAD 0 0 0 044 2**0 CONTENTS
2 NRV2E 0154 0 0 044 2**0 CONTENTS
3 NRV2D 013c 0 0 0198 2**0 CONTENTS
4 NRV2B 0f8 0 0 02d4 2**0 CONTENTS
5 LZMA_ELF00 094 0 0 03cc 2**0 CONTENTS
6 LZMA_DEC30 028 0 0 0460 2**0 CONTENTS
7 LZMA_DEC10 0bc0 0 0 0488 2**0 CONTENTS
8 LZMA_DEC20 0c74 0 0 01048 2**0 CONTENTS
9 NRV_TAIL 01c 0 0 01cbc 2**0 CONTENTS
10 CFLUSH 024 0 0 01cd8 2**0 CONTENTS
11 ELFMAINY 012 0 0 01cfc 2**0 CONTENTS
12 ELFMAINZe 018 0 0 01d10 2**3 CONTENTS
13 ELFMAINZ 0190 0 0 01d28 2**2 CONTENTS
0 ELFMAINX 013c 0 0 040 2**0 CONTENTS
1 ELFMAINY 012 0 0 017c 2**0 CONTENTS
2 ELFMAINZe 018 0 0 0190 2**3 CONTENTS
3 ELFMAINZ 01d4 0 0 01a8 2**2 CONTENTS
SYMBOL TABLE:
0000000000000000 l d LZMA_DEC30 0 LZMA_DEC30
0000000000000000 l d NRV_TAIL 0 NRV_TAIL
0000000000000000 l d ELFMAINZ 0 ELFMAINZ
0000000000000000 l d ELFMAINX 0 ELFMAINX
0000000000000000 l d NRV_HEAD 0 NRV_HEAD
0000000000000000 l d NRV2E 0 NRV2E
0000000000000000 l d NRV2D 0 NRV2D
0000000000000000 l d NRV2B 0 NRV2B
0000000000000000 l d LZMA_ELF00 0 LZMA_ELF00
0000000000000000 l d LZMA_DEC10 0 LZMA_DEC10
0000000000000000 l d LZMA_DEC20 0 LZMA_DEC20
0000000000000000 l d CFLUSH 0 CFLUSH
0000000000000000 l d ELFMAINY 0 ELFMAINY
0000000000000000 l d ELFMAINZe 0 ELFMAINZe
0000000000000000 g ELFMAINX 0 _start
@@ -37,23 +17,7 @@ SYMBOL TABLE:
RELOCATION RECORDS FOR [ELFMAINX]:
OFFSET TYPE VALUE
0000000000000000 R_PPC64_REL24 ELFMAINZ+0x00000000000000d4
RELOCATION RECORDS FOR [NRV2E]:
OFFSET TYPE VALUE
00000000000000c0 R_PPC64_REL14 NRV_TAIL
RELOCATION RECORDS FOR [NRV2D]:
OFFSET TYPE VALUE
00000000000000c4 R_PPC64_REL14 NRV_TAIL
RELOCATION RECORDS FOR [NRV2B]:
OFFSET TYPE VALUE
0000000000000098 R_PPC64_REL14 NRV_TAIL
RELOCATION RECORDS FOR [LZMA_ELF00]:
OFFSET TYPE VALUE
0000000000000004 R_PPC64_REL14 LZMA_DEC30+0x0000000000000028
0000000000000000 R_PPC64_REL24 ELFMAINZ+0x0000000000000118
RELOCATION RECORDS FOR [ELFMAINY]:
OFFSET TYPE VALUE
@@ -65,4 +29,4 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [ELFMAINZ]:
OFFSET TYPE VALUE
000000000000018c R_PPC64_ADDR32 O_BINFO
00000000000001d0 R_PPC64_ADDR32 O_BINFO
+62 -50
View File
@@ -7,65 +7,77 @@ Name Origin Length Attributes
Linker script and memory map
TARGET(elf64-powerpc)
0x00000000001000bc . = ((0x100000 + SIZEOF_HEADERS) + 0xc)
.text 0x00000000001000bc 0xc84
.text 0x0000000000000000 0xd6c
*(.text)
.text 0x00000000001000bc 0x38c tmp/powerpc64-linux.elf-fold.o
0x00000000001000cc get_page_mask
0x00000000001000e4 Pprotect
0x00000000001000e4 mprotect
0x00000000001003e8 mmap
0x0000000000100400 exit
0x0000000000100408 brk
0x0000000000100410 readlink
0x0000000000100418 write
0x0000000000100420 read
0x0000000000100428 open
0x0000000000100430 close
0x0000000000100438 munmap
0x0000000000100440 my_bkpt
.text 0x0000000000100448 0x8f8 tmp/powerpc64-linux.elf-main.o
.text 0x0000000000000000 0xd6c tmp/powerpc64-linux.elf-fold.o
0x0000000000000014 get_page_mask
0x0000000000000b48 underlay
0x0000000000000bd4 upx_main
*(.data)
.data 0x0000000000100d40 0x0 tmp/powerpc64-linux.elf-fold.o
.data 0x0000000000100d40 0x0 tmp/powerpc64-linux.elf-main.o
.sfpr 0x0000000000100d40 0xa4
.sfpr 0x0000000000100d40 0xa4 linker stubs
0x0000000000100d40 _savegpr0_14
0x0000000000100d68 _savegpr0_24
0x0000000000100d78 _savegpr0_28
0x0000000000100d90 _restgpr0_14
0x0000000000100db8 _restgpr0_24
0x0000000000100dc8 _restgpr0_28
.glink 0x0000000000100de8 0x0
.glink 0x0000000000100de8 0x0 linker stubs
.eh_frame 0x0000000000100de4 0x0
.eh_frame 0x0000000000100de4 0x0 linker stubs
.rela.dyn 0x0000000000100de8 0x0
.rela.iplt 0x0000000000100de8 0x0 linker stubs
.data 0x0000000000000d6c 0x0 tmp/powerpc64-linux.elf-fold.o
.data
LOAD tmp/powerpc64-linux.elf-fold.o
LOAD tmp/powerpc64-linux.elf-main.o
OUTPUT(tmp/powerpc64-linux.elf-fold.bin elf64-powerpc)
.branch_lt 0x0000000000100de8 0x0
.branch_lt 0x0000000000100de8 0x0 linker stubs
.bss 0x0000000000000000 0x0
.bss 0x0000000000000000 0x0 tmp/powerpc64-linux.elf-fold.o
.toc 0x0000000000100de8 0x0
.toc 0x0000000000100de8 0x0 tmp/powerpc64-linux.elf-main.o
SYSCALLS 0x0000000000000000 0x11c
SYSCALLS 0x0000000000000000 0x11c tmp/powerpc64-linux.elf-fold.o
0x0000000000000000 Pmap
0x0000000000000010 mmap
0x0000000000000028 Pprotect
0x0000000000000028 mprotect
0x0000000000000040 Punmap
0x0000000000000050 munmap
0x0000000000000058 memfd_create
0x0000000000000060 ftruncate
0x0000000000000068 exit
0x0000000000000070 brk
0x0000000000000078 readlink
0x0000000000000080 write
0x0000000000000088 read
0x0000000000000090 open
0x0000000000000098 close
0x00000000000000a0 upxfd_create
0x00000000000000f8 memcpy
0x0000000000000114 my_bkpt
.opd 0x0000000000100de8 0x58
.opd 0x0000000000100de8 0x58 tmp/powerpc64-linux.elf-main.o
0x0000000000100e28 upx_main
.comment 0x0000000000000000 0x33
.comment 0x0000000000000000 0x33 tmp/powerpc64-linux.elf-fold.o
.iplt 0x0000000000100e40 0x0
.iplt 0x0000000000100e40 0x0 linker stubs
.note.GNU-stack
0x0000000000000000 0x0
.note.GNU-stack
0x0000000000000000 0x0 tmp/powerpc64-linux.elf-fold.o
.bss 0x0000000000100e40 0x0
.bss 0x0000000000100e40 0x0 tmp/powerpc64-linux.elf-fold.o
.bss 0x0000000000100e40 0x0 tmp/powerpc64-linux.elf-main.o
EXP_HEAD 0x0000000000000000 0xa8
EXP_HEAD 0x0000000000000000 0xa8 tmp/powerpc64-linux.elf-fold.o
0x0000000000000000 f_expand
EXP_TAIL 0x0000000000000000 0x84
EXP_TAIL 0x0000000000000000 0x84 tmp/powerpc64-linux.elf-fold.o
0x0000000000000000 eof_nrv
NRV2E 0x0000000000000000 0x154
NRV2E 0x0000000000000000 0x154 tmp/powerpc64-linux.elf-fold.o
NRV2D 0x0000000000000000 0x13c
NRV2D 0x0000000000000000 0x13c tmp/powerpc64-linux.elf-fold.o
NRV2B 0x0000000000000000 0xf8
NRV2B 0x0000000000000000 0xf8 tmp/powerpc64-linux.elf-fold.o
LZMA_ELF00 0x0000000000000000 0x94
LZMA_ELF00 0x0000000000000000 0x94 tmp/powerpc64-linux.elf-fold.o
LZMA_DEC30 0x0000000000000000 0x28
LZMA_DEC30 0x0000000000000000 0x28 tmp/powerpc64-linux.elf-fold.o
LZMA_DEC10 0x0000000000000000 0xbc0
LZMA_DEC10 0x0000000000000000 0xbc0 tmp/powerpc64-linux.elf-fold.o
LZMA_DEC20 0x0000000000000000 0xc74
LZMA_DEC20 0x0000000000000000 0xc74 tmp/powerpc64-linux.elf-fold.o
+5 -41
View File
@@ -2,55 +2,19 @@ file format elf64-powerpcle
Sections:
Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINX 04 0 0 040 2**0 CONTENTS
1 NRV_HEAD 0 0 0 044 2**0 CONTENTS
2 NRV2E 0154 0 0 044 2**0 CONTENTS
3 NRV2D 013c 0 0 0198 2**0 CONTENTS
4 NRV2B 0f8 0 0 02d4 2**0 CONTENTS
5 LZMA_ELF00 094 0 0 03cc 2**0 CONTENTS
6 LZMA_DEC30 028 0 0 0460 2**0 CONTENTS
7 LZMA_DEC10 0bb8 0 0 0488 2**0 CONTENTS
8 LZMA_DEC20 0c74 0 0 01040 2**0 CONTENTS
9 NRV_TAIL 01c 0 0 01cb4 2**0 CONTENTS
10 CFLUSH 024 0 0 01cd0 2**0 CONTENTS
11 ELFMAINY 012 0 0 01cf4 2**0 CONTENTS
12 ELFMAINZ 0190 0 0 01d08 2**2 CONTENTS
0 ELFMAINX 013c 0 0 040 2**0 CONTENTS
1 ELFMAINY 012 0 0 017c 2**0 CONTENTS
2 ELFMAINZ 01d4 0 0 0190 2**2 CONTENTS
SYMBOL TABLE:
0000000000000000 l d LZMA_DEC30 0 LZMA_DEC30
0000000000000000 l d NRV_TAIL 0 NRV_TAIL
0000000000000000 l d ELFMAINZ 0 ELFMAINZ
0000000000000000 l d ELFMAINX 0 ELFMAINX
0000000000000000 l d NRV_HEAD 0 NRV_HEAD
0000000000000000 l d NRV2E 0 NRV2E
0000000000000000 l d NRV2D 0 NRV2D
0000000000000000 l d NRV2B 0 NRV2B
0000000000000000 l d LZMA_ELF00 0 LZMA_ELF00
0000000000000000 l d LZMA_DEC10 0 LZMA_DEC10
0000000000000000 l d LZMA_DEC20 0 LZMA_DEC20
0000000000000000 l d CFLUSH 0 CFLUSH
0000000000000000 l d ELFMAINY 0 ELFMAINY
0000000000000000 g ELFMAINX 0 _start
0000000000000000 *UND* 0 O_BINFO
RELOCATION RECORDS FOR [ELFMAINX]:
OFFSET TYPE VALUE
0000000000000000 R_PPC64_REL24 ELFMAINZ+0x00000000000000d4
RELOCATION RECORDS FOR [NRV2E]:
OFFSET TYPE VALUE
00000000000000c0 R_PPC64_REL14 NRV_TAIL
RELOCATION RECORDS FOR [NRV2D]:
OFFSET TYPE VALUE
00000000000000c4 R_PPC64_REL14 NRV_TAIL
RELOCATION RECORDS FOR [NRV2B]:
OFFSET TYPE VALUE
0000000000000098 R_PPC64_REL14 NRV_TAIL
RELOCATION RECORDS FOR [LZMA_ELF00]:
OFFSET TYPE VALUE
0000000000000004 R_PPC64_REL14 LZMA_DEC30+0x0000000000000028
0000000000000000 R_PPC64_REL24 ELFMAINZ+0x0000000000000118
RELOCATION RECORDS FOR [ELFMAINY]:
OFFSET TYPE VALUE
@@ -58,4 +22,4 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [ELFMAINZ]:
OFFSET TYPE VALUE
000000000000018c R_PPC64_ADDR32 O_BINFO
00000000000001d0 R_PPC64_ADDR32 O_BINFO
+62 -50
View File
@@ -7,65 +7,77 @@ Name Origin Length Attributes
Linker script and memory map
TARGET(elf64-powerpcle)
0x00000000001000bc . = ((0x100000 + SIZEOF_HEADERS) + 0xc)
.text 0x00000000001000bc 0xc80
.text 0x0000000000000000 0xd94
*(.text)
.text 0x00000000001000bc 0x38c tmp/powerpc64le-linux.elf-fold.o
0x00000000001000cc get_page_mask
0x00000000001000e4 Pprotect
0x00000000001000e4 mprotect
0x00000000001003e8 mmap
0x0000000000100400 exit
0x0000000000100408 brk
0x0000000000100410 readlink
0x0000000000100418 write
0x0000000000100420 read
0x0000000000100428 open
0x0000000000100430 close
0x0000000000100438 munmap
0x0000000000100440 my_bkpt
.text 0x0000000000100448 0x8f4 tmp/powerpc64le-linux.elf-main.o
.text 0x0000000000000000 0xd94 tmp/powerpc64le-linux.elf-fold.o
0x0000000000000014 get_page_mask
0x0000000000000b70 underlay
0x0000000000000bfc upx_main
*(.data)
.data 0x0000000000100d3c 0x0 tmp/powerpc64le-linux.elf-fold.o
.data 0x0000000000100d3c 0x0 tmp/powerpc64le-linux.elf-main.o
.sfpr 0x0000000000100d3c 0xa4
.sfpr 0x0000000000100d3c 0xa4 linker stubs
0x0000000000100d3c _savegpr0_14
0x0000000000100d64 _savegpr0_24
0x0000000000100d74 _savegpr0_28
0x0000000000100d8c _restgpr0_14
0x0000000000100db4 _restgpr0_24
0x0000000000100dc4 _restgpr0_28
.glink 0x0000000000100de0 0x0
.glink 0x0000000000100de0 0x0 linker stubs
.eh_frame 0x0000000000100de0 0x0
.eh_frame 0x0000000000100de0 0x0 linker stubs
.rela.dyn 0x0000000000100de0 0x0
.rela.iplt 0x0000000000100de0 0x0 linker stubs
.data 0x0000000000000d94 0x0 tmp/powerpc64le-linux.elf-fold.o
.data
LOAD tmp/powerpc64le-linux.elf-fold.o
LOAD tmp/powerpc64le-linux.elf-main.o
OUTPUT(tmp/powerpc64le-linux.elf-fold.bin elf64-powerpcle)
.branch_lt 0x0000000000100de0 0x0
.branch_lt 0x0000000000100de0 0x0 linker stubs
.bss 0x0000000000000000 0x0
.bss 0x0000000000000000 0x0 tmp/powerpc64le-linux.elf-fold.o
.toc 0x0000000000100de0 0x0
.toc 0x0000000000100de0 0x0 tmp/powerpc64le-linux.elf-main.o
SYSCALLS 0x0000000000000000 0x11c
SYSCALLS 0x0000000000000000 0x11c tmp/powerpc64le-linux.elf-fold.o
0x0000000000000000 Pmap
0x0000000000000010 mmap
0x0000000000000028 Pprotect
0x0000000000000028 mprotect
0x0000000000000040 Punmap
0x0000000000000050 munmap
0x0000000000000058 memfd_create
0x0000000000000060 ftruncate
0x0000000000000068 exit
0x0000000000000070 brk
0x0000000000000078 readlink
0x0000000000000080 write
0x0000000000000088 read
0x0000000000000090 open
0x0000000000000098 close
0x00000000000000a0 upxfd_create
0x00000000000000f8 memcpy
0x0000000000000114 my_bkpt
.opd 0x0000000000100de0 0x58
.opd 0x0000000000100de0 0x58 tmp/powerpc64le-linux.elf-main.o
0x0000000000100e20 upx_main
.comment 0x0000000000000000 0x33
.comment 0x0000000000000000 0x33 tmp/powerpc64le-linux.elf-fold.o
.iplt 0x0000000000100e38 0x0
.iplt 0x0000000000100e38 0x0 linker stubs
.note.GNU-stack
0x0000000000000000 0x0
.note.GNU-stack
0x0000000000000000 0x0 tmp/powerpc64le-linux.elf-fold.o
.bss 0x0000000000100e38 0x0
.bss 0x0000000000100e38 0x0 tmp/powerpc64le-linux.elf-fold.o
.bss 0x0000000000100e38 0x0 tmp/powerpc64le-linux.elf-main.o
EXP_HEAD 0x0000000000000000 0xa8
EXP_HEAD 0x0000000000000000 0xa8 tmp/powerpc64le-linux.elf-fold.o
0x0000000000000000 f_expand
EXP_TAIL 0x0000000000000000 0x84
EXP_TAIL 0x0000000000000000 0x84 tmp/powerpc64le-linux.elf-fold.o
0x0000000000000000 eof_nrv
NRV2E 0x0000000000000000 0x154
NRV2E 0x0000000000000000 0x154 tmp/powerpc64le-linux.elf-fold.o
NRV2D 0x0000000000000000 0x13c
NRV2D 0x0000000000000000 0x13c tmp/powerpc64le-linux.elf-fold.o
NRV2B 0x0000000000000000 0xf8
NRV2B 0x0000000000000000 0xf8 tmp/powerpc64le-linux.elf-fold.o
LZMA_ELF00 0x0000000000000000 0x94
LZMA_ELF00 0x0000000000000000 0x94 tmp/powerpc64le-linux.elf-fold.o
LZMA_DEC30 0x0000000000000000 0x28
LZMA_DEC30 0x0000000000000000 0x28 tmp/powerpc64le-linux.elf-fold.o
LZMA_DEC10 0x0000000000000000 0xbb8
LZMA_DEC10 0x0000000000000000 0xbb8 tmp/powerpc64le-linux.elf-fold.o
LZMA_DEC20 0x0000000000000000 0xc74
LZMA_DEC20 0x0000000000000000 0xc74 tmp/powerpc64le-linux.elf-fold.o