arm64 (aarch64)

Tested and working: nrv2b and nrv2e for ET_EXE on linux.
NOT TESTED: lzma, ET_DYN on linux; any Mach-O

	modified:   bele.h
	modified:   conf.h
	modified:   filter/ct.h
	modified:   filteri.cpp
	modified:   linker.cpp
	modified:   linker.h
	modified:   miniacc.h
	modified:   p_elf_enum.h
	modified:   p_lx_elf.cpp
	modified:   p_lx_elf.h
	modified:   packmast.cpp
	modified:   stub/Makefile
	modified:   stub/arm64-darwin.macho-entry.h
	modified:   stub/arm64-darwin.macho-fold.h
	new file:   stub/arm64-linux.elf-entry.h
	new file:   stub/arm64-linux.elf-fold.h
	new file:   stub/arm64-linux.shlib-init.h
	new file:   stub/src/arch/arm64/v8/Makefile.extra
	modified:   stub/src/arch/arm64/v8/lzma_d-arm.S
	modified:   stub/src/arch/arm64/v8/lzma_d.S
	modified:   stub/src/arch/arm64/v8/lzma_d_cf.S
	new file:   stub/src/arch/arm64/v8/lzma_d_cs.S
	modified:   stub/src/arch/arm64/v8/macros.S
	renamed:    stub/src/arch/arm64/v8/nrv2b_d8.S -> stub/src/arch/arm64/v8/nrv2b_d32.S
	renamed:    stub/src/arch/arm64/v8/nrv2d_d8.S -> stub/src/arch/arm64/v8/nrv2d_d32.S
	modified:   stub/src/arch/arm64/v8/nrv2e_d32.S
	deleted:    stub/src/arch/arm64/v8/nrv2e_d8.S
	modified:   stub/src/arm64-darwin.macho-entry.S
	modified:   stub/src/arm64-darwin.macho-fold.S
	new file:   stub/src/arm64-linux.elf-entry.S
	new file:   stub/src/arm64-linux.elf-fold.S
	new file:   stub/src/arm64-linux.elf-fold.lds
	new file:   stub/src/arm64-linux.elf-main.c
	new file:   stub/src/arm64-linux.shlib-init.S
	modified:   stub/src/include/linux.h
	modified:   stub/tmp/arm64-darwin.macho-entry.bin.dump
	modified:   stub/tmp/arm64-darwin.macho-fold.map
	new file:   stub/tmp/arm64-linux.elf-entry.bin.dump
	new file:   stub/tmp/arm64-linux.elf-fold.map
	new file:   stub/tmp/arm64-linux.shlib-init.bin.dump
This commit is contained in:
John Reiser 2017-03-26 13:10:26 -07:00
parent 0e154cc759
commit b818e2c4b8
40 changed files with 4689 additions and 1780 deletions

View File

@ -142,6 +142,24 @@ inline void set_le24(void *p, unsigned v)
#endif
}
inline unsigned get_le26(const void *p)
{
#if defined(ACC_UA_GET_LE26)
return ACC_UA_GET_LE26(p);
#else
return acc_ua_get_le26(p);
#endif
}
inline void set_le26(void *p, unsigned v)
{
#if defined(ACC_UA_SET_LE26)
ACC_UA_SET_LE26(p, v);
#else
acc_ua_set_le26(p, v);
#endif
}
inline unsigned get_le32(const void *p)
{
#if defined(ACC_UA_GET_LE32)

View File

@ -403,6 +403,8 @@ private:
#define UPX_F_VMLINUX_PPC64LE 40
#define UPX_F_DYLIB_PPC64LE 41
#define UPX_F_LINUX_ELF64_ARM 42
#define UPX_F_ATARI_TOS 129
#define UPX_F_SOLARIS_SPARC 130 // NOT IMPLEMENTED
#define UPX_F_MACH_PPC32 131

View File

@ -459,4 +459,45 @@ static int s_ct24arm_be(Filter *f)
#undef CT24ARM_BE
#undef ARMCT_COND
/*************************************************************************
// 26-bit ARM calltrick ("naive")
**************************************************************************/
#define CT26ARM_LE(f, cond, addvalue, get, set) \
upx_byte *b = f->buf; \
upx_byte *b_end = b + f->buf_len - 4; \
do { \
if (cond) \
{ \
unsigned a = (unsigned) (b - f->buf); \
f->lastcall = a; \
set(b, get(b) + (addvalue)); \
f->calls++; \
} \
b += 4; \
} while (b < b_end); \
if (f->lastcall) f->lastcall += 4; \
return 0;
#define ARMCT_COND (((b[3] & 0x7C) == 0x14))
static int f_ct26arm_le(Filter *f)
{
CT26ARM_LE(f, ARMCT_COND, a / 4 + f->addvalue, get_le26, set_le26)
}
static int u_ct26arm_le(Filter *f)
{
CT26ARM_LE(f, ARMCT_COND, 0 - a / 4 - f->addvalue, get_le26, set_le26)
}
static int s_ct26arm_le(Filter *f)
{
CT26ARM_LE(f, ARMCT_COND, a + f->addvalue, get_le26, set_dummy)
}
#undef CT26ARM_LE
#undef ARMCT_COND
/* vim:set ts=4 sw=4 et: */

View File

@ -228,6 +228,9 @@ const FilterImp::FilterEntry FilterImp::filters[] = {
{ 0x50, 8, 0x01ffffff, f_ct24arm_le, u_ct24arm_le, s_ct24arm_le },
{ 0x51, 8, 0x01ffffff, f_ct24arm_be, u_ct24arm_be, s_ct24arm_be },
// 26-bit calltrick for arm64
{ 0x52, 8, 0x03ffffff, f_ct26arm_le, u_ct26arm_le, s_ct26arm_le },
// 32-bit cto calltrick with jmp and jcc(swap 0x0f/0x8Y) and relative renumbering
{ 0x80, 8, 0x00ffffff, f_ctojr32_e8e9_bswap_le, u_ctojr32_e8e9_bswap_le, s_ctojr32_e8e9_bswap_le },
{ 0x81, 8, 0x00ffffff, f_ctojr32_e8e9_bswap_le, u_ctojr32_e8e9_bswap_le, s_ctojr32_e8e9_bswap_le },

View File

@ -472,9 +472,9 @@ void ElfLinker::relocate() {
value = rel->value->section->offset + rel->value->offset + rel->add;
}
upx_byte *location = rel->section->output + rel->offset;
// printf("%-28s %-28s %-10s 0x%16llx 0x%16llx\n", rel->section->name, rel->value->name,
// printf("%-28s %-28s %-10s %#16llx %#16llx\n", rel->section->name, rel->value->name,
// rel->type, (long long) value, (long long) value - rel->section->offset - rel->offset);
// printf(" %llx %d %llx %d %llx : %d\n", (long long) value, rel->value->section->offset,
// printf(" %llx %d %llx %d %llx : %d\n", (long long) value, (int)rel->value->section->offset,
// rel->value->offset, rel->offset, (long long) rel->add, *location);
relocate1(rel, location, value, rel->type);
}
@ -541,7 +541,7 @@ void ElfLinker::alignWithByte(unsigned len, unsigned char b) {
}
void ElfLinker::relocate1(const Relocation *rel, upx_byte *, upx_uint64_t, const char *) {
internal_error("unknown relocation type '%s\n", rel->type);
internal_error("unknown relocation type '%s\n'", rel->type);
}
/*************************************************************************
@ -591,6 +591,37 @@ void ElfLinkerAMD64::relocate1(const Relocation *rel, upx_byte *location, upx_ui
super::relocate1(rel, location, value, type);
}
void ElfLinkerARM64::relocate1(const Relocation *rel, upx_byte *location, upx_uint64_t value,
const char *type) {
if (strncmp(type, "R_AARCH64_", 10))
return super::relocate1(rel, location, value, type);
type += 10;
if (!strncmp(type, "PREL", 4)) {
value -= rel->section->offset + rel->offset;
type += 4;
if (!strcmp(type, "16"))
set_le16(location, get_le16(location) + value);
else if (!strncmp(type, "32", 2)) // for "32" and "32S"
set_le32(location, get_le32(location) + value);
else if (!strcmp(type, "64"))
set_le64(location, get_le64(location) + value);
} else if (!strcmp(type, "ABS32")) {
set_le32(location, get_le32(location) + value);
} else if (!strcmp(type, "ABS64")) {
set_le64(location, get_le64(location) + value);
}
else if (!strcmp(type, "CONDBR19")) {
value -= rel->section->offset + rel->offset;
uint32_t const m19 = ~(~0u << 19);
uint32_t w = get_le32(location);
set_le32(location, (w &~(m19<<5)) | ((((w>>5) + (value>>2)) & m19) << 5) );
}
else
super::relocate1(rel, location, value, type);
}
void ElfLinkerArmBE::relocate1(const Relocation *rel, upx_byte *location, upx_uint64_t value,
const char *type) {
if (strcmp(type, "R_ARM_PC24") == 0) {

View File

@ -160,6 +160,15 @@ protected:
const char *type);
};
class ElfLinkerARM64 : public ElfLinker {
typedef ElfLinker super;
protected:
virtual void alignCode(unsigned len) { alignWithByte(len, 0x90); }
virtual void relocate1(const Relocation *, upx_byte *location, upx_uint64_t value,
const char *type);
};
class ElfLinkerArmBE : public ElfLinker {
typedef ElfLinker super;

View File

@ -5103,9 +5103,11 @@ ACCLIB_EXTERN(void, acc_ua_set_be24) (acc_hvoid_p, acc_uint32l_t);
ACCLIB_EXTERN(void, acc_ua_set_be32) (acc_hvoid_p, acc_uint32l_t);
ACCLIB_EXTERN(unsigned, acc_ua_get_le16) (const acc_hvoid_p);
ACCLIB_EXTERN(acc_uint32l_t, acc_ua_get_le24) (const acc_hvoid_p);
ACCLIB_EXTERN(acc_uint32l_t, acc_ua_get_le26) (const acc_hvoid_p);
ACCLIB_EXTERN(acc_uint32l_t, acc_ua_get_le32) (const acc_hvoid_p);
ACCLIB_EXTERN(void, acc_ua_set_le16) (acc_hvoid_p, unsigned);
ACCLIB_EXTERN(void, acc_ua_set_le24) (acc_hvoid_p, acc_uint32l_t);
ACCLIB_EXTERN(void, acc_ua_set_le26) (acc_hvoid_p, acc_uint32l_t);
ACCLIB_EXTERN(void, acc_ua_set_le32) (acc_hvoid_p, acc_uint32l_t);
#if defined(acc_int64l_t)
ACCLIB_EXTERN(acc_uint64l_t, acc_ua_get_be64) (const acc_hvoid_p);
@ -6095,6 +6097,12 @@ ACCLIB_PUBLIC(acc_uint32l_t, acc_ua_get_le24) (const acc_hvoid_p p)
const acc_hbyte_p b = ACC_CCAST(const acc_hbyte_p, p);
return ACC_ICONV(acc_uint32l_t, b[0]) | (ACC_ICONV(acc_uint32l_t, b[1]) << 8) | (ACC_ICONV(acc_uint32l_t, b[2]) << 16);
}
ACCLIB_PUBLIC(acc_uint32l_t, acc_ua_get_le26) (const acc_hvoid_p p)
{
const acc_hbyte_p b = ACC_CCAST(const acc_hbyte_p, p);
return ACC_ICONV(acc_uint32l_t, b[0] ) | ( ACC_ICONV(acc_uint32l_t, b[1]) << 8) |
(ACC_ICONV(acc_uint32l_t, b[2]) << 16) | (((ACC_ICONV(acc_uint32l_t, b[3]) & 3)<< 24));
}
ACCLIB_PUBLIC(acc_uint32l_t, acc_ua_get_le32) (const acc_hvoid_p p)
{
#if defined(ACC_UA_GET_LE32)
@ -6121,6 +6129,14 @@ ACCLIB_PUBLIC(void, acc_ua_set_le24) (acc_hvoid_p p, acc_uint32l_t v)
b[1] = ACC_ICONV(unsigned char, (v >> 8) & 0xff);
b[2] = ACC_ICONV(unsigned char, (v >> 16) & 0xff);
}
ACCLIB_PUBLIC(void, acc_ua_set_le26) (acc_hvoid_p p, acc_uint32l_t v)
{
acc_hbyte_p b = ACC_PCAST(acc_hbyte_p, p);
b[0] = ACC_ICONV(unsigned char, (v >> 0) & 0xff);
b[1] = ACC_ICONV(unsigned char, (v >> 8) & 0xff);
b[2] = ACC_ICONV(unsigned char, (v >> 16) & 0xff);
b[3] = ACC_ICONV(unsigned char, (v >> 24) & 0x03) | (0xFC & b[3]);
}
ACCLIB_PUBLIC(void, acc_ua_set_le32) (acc_hvoid_p p, acc_uint32l_t v)
{
#if defined(ACC_UA_SET_LE32)

View File

@ -73,7 +73,8 @@
EM_PPC = 20,
EM_PPC64 = 21,
EM_ARM = 40,
EM_X86_64 = 62
EM_X86_64 = 62,
EM_AARCH64 = 183
};
enum { // e_version

View File

@ -650,6 +650,11 @@ Linker* PackLinuxElf64amd::newLinker() const
return new ElfLinkerAMD64;
}
Linker* PackLinuxElf64arm::newLinker() const
{
return new ElfLinkerARM64;
}
int const *
PackLinuxElf::getCompressionMethods(int method, int level) const
{
@ -696,6 +701,15 @@ PackLinuxElf64amd::getFilters() const
return filters;
}
int const *
PackLinuxElf64arm::getFilters() const
{
static const int filters[] = {
0x52,
FT_END };
return filters;
}
void PackLinuxElf32::patchLoader()
{
}
@ -740,6 +754,7 @@ void PackLinuxElf32::updateLoader(OutputFile * /*fo*/)
void PackLinuxElf64::updateLoader(OutputFile * /*fo*/)
{
set_te64(&elfout.ehdr.e_entry, sz_pack2 +
linker->getSymbolOffset("_start") +
get_te64(&elfout.phdr[0].p_vaddr));
}
@ -788,10 +803,23 @@ PackLinuxElf64amd::PackLinuxElf64amd(InputFile *f)
ei_osabi = Elf32_Ehdr::ELFOSABI_LINUX;
}
PackLinuxElf64arm::PackLinuxElf64arm(InputFile *f)
: super(f)
{
e_machine = Elf64_Ehdr::EM_AARCH64;
ei_class = Elf64_Ehdr::ELFCLASS64;
ei_data = Elf64_Ehdr::ELFDATA2LSB;
ei_osabi = Elf32_Ehdr::ELFOSABI_LINUX;
}
PackLinuxElf64amd::~PackLinuxElf64amd()
{
}
PackLinuxElf64arm::~PackLinuxElf64arm()
{
}
static unsigned
umax(unsigned a, unsigned b)
{
@ -1052,6 +1080,7 @@ PackLinuxElf64amd::defineSymbols(Filter const *)
len += (7&-lsize) + lsize;
is_big = (lo_va_user < (lo_va_stub + len + 2*page_size));
if (is_big && ehdri.ET_EXEC==get_te16(&ehdri.e_type)) {
// .e_entry is set later by PackLinuxElf64::updateLoader
set_te64( &elfout.ehdr.e_entry,
get_te64(&elfout.ehdr.e_entry) + lo_va_user - lo_va_stub);
set_te64(&elfout.phdr[0].p_vaddr, lo_va_user);
@ -1347,6 +1376,28 @@ PackLinuxElf64amd::buildLoader(const Filter *ft)
stub_amd64_linux_elf_fold, sizeof(stub_amd64_linux_elf_fold), ft);
}
static const
#include "stub/arm64-linux.elf-entry.h"
static const
#include "stub/arm64-linux.elf-fold.h"
//static const
//#include "stub/arm64-linux.shlib-init.h"
void
PackLinuxElf64arm::buildLoader(const Filter *ft)
{
if (0!=xct_off) { // shared library
abort(); // FIXME
//buildLinuxLoader(
// stub_arm64_linux_shlib_init, sizeof(stub_arm64_linux_shlib_init),
// NULL, 0, ft );
//return;
}
buildLinuxLoader(
stub_arm64_linux_elf_entry, sizeof(stub_arm64_linux_elf_entry),
stub_arm64_linux_elf_fold, sizeof(stub_arm64_linux_elf_fold), ft);
}
Elf32_Shdr const *PackLinuxElf32::elf_find_section_name(
char const *const name
) const
@ -2005,6 +2056,198 @@ proceed: ;
return true;
}
bool
PackLinuxElf64arm::canPack()
{
union {
unsigned char buf[sizeof(Elf64_Ehdr) + 14*sizeof(Elf64_Phdr)];
//struct { Elf64_Ehdr ehdr; Elf64_Phdr phdr; } e;
} u;
COMPILE_TIME_ASSERT(sizeof(u) <= 1024)
fi->readx(u.buf, sizeof(u.buf));
fi->seek(0, SEEK_SET);
Elf64_Ehdr const *const ehdr = (Elf64_Ehdr *) u.buf;
// now check the ELF header
if (checkEhdr(ehdr) != 0)
return false;
// additional requirements for linux/elf386
if (get_te16(&ehdr->e_ehsize) != sizeof(*ehdr)) {
throwCantPack("invalid Ehdr e_ehsize; try '--force-execve'");
return false;
}
if (e_phoff != sizeof(*ehdr)) {// Phdrs not contiguous with Ehdr
throwCantPack("non-contiguous Ehdr/Phdr; try '--force-execve'");
return false;
}
// The first PT_LOAD64 must cover the beginning of the file (0==p_offset).
Elf64_Phdr const *phdr = phdri;
for (unsigned j=0; j < e_phnum; ++phdr, ++j) {
if (j >= 14)
return false;
if (phdr->PT_LOAD64 == get_te32(&phdr->p_type)) {
load_va = get_te64(&phdr->p_vaddr);
upx_uint64_t file_offset = get_te64(&phdr->p_offset);
if (~page_mask & file_offset) {
if ((~page_mask & load_va) == file_offset) {
throwCantPack("Go-language PT_LOAD: try hemfix.c, or try '--force-execve'");
// Fixing it inside upx fails because packExtent() reads original file.
}
else {
throwCantPack("invalid Phdr p_offset; try '--force-execve'");
}
return false;
}
exetype = 1;
break;
}
}
// We want to compress position-independent executable (gcc -pie)
// main programs, but compressing a shared library must be avoided
// because the result is no longer usable. In theory, there is no way
// to tell them apart: both are just ET_DYN. Also in theory,
// neither the presence nor the absence of any particular symbol name
// can be used to tell them apart; there are counterexamples.
// However, we will use the following heuristic suggested by
// Peter S. Mazinger <ps.m@gmx.net> September 2005:
// If a ET_DYN has __libc_start_main as a global undefined symbol,
// then the file is a position-independent executable main program
// (that depends on libc.so.6) and is eligible to be compressed.
// Otherwise (no __libc_start_main as global undefined): skip it.
// Also allow __uClibc_main and __uClibc_start_main .
if (Elf32_Ehdr::ET_DYN==get_te16(&ehdr->e_type)) {
// The DT_STRTAB has no designated length. Read the whole file.
alloc_file_image(file_image, file_size);
fi->seek(0, SEEK_SET);
fi->readx(file_image, file_size);
memcpy(&ehdri, ehdr, sizeof(Elf64_Ehdr));
phdri= (Elf64_Phdr *)((size_t)e_phoff + file_image); // do not free() !!
shdri= (Elf64_Shdr const *)((size_t)e_shoff + file_image); // do not free() !!
//sec_strndx = &shdri[ehdr->e_shstrndx];
//shstrtab = (char const *)(sec_strndx->sh_offset + file_image);
sec_dynsym = elf_find_section_type(Elf64_Shdr::SHT_DYNSYM);
if (sec_dynsym)
sec_dynstr = get_te64(&sec_dynsym->sh_link) + shdri;
int j= e_phnum;
phdr= phdri;
for (; --j>=0; ++phdr)
if (Elf64_Phdr::PT_DYNAMIC==get_te32(&phdr->p_type)) {
dynseg= (Elf64_Dyn const *)(get_te64(&phdr->p_offset) + file_image);
break;
}
// elf_find_dynamic() returns 0 if 0==dynseg.
dynstr= (char const *)elf_find_dynamic(Elf64_Dyn::DT_STRTAB);
dynsym= (Elf64_Sym const *)elf_find_dynamic(Elf64_Dyn::DT_SYMTAB);
// Modified 2009-10-10 to detect a ProgramLinkageTable relocation
// which references the symbol, because DT_GNU_HASH contains only
// defined symbols, and there might be no DT_HASH.
Elf64_Rela const *
rela= (Elf64_Rela const *)elf_find_dynamic(Elf64_Dyn::DT_RELA);
Elf64_Rela const *
jmprela= (Elf64_Rela const *)elf_find_dynamic(Elf64_Dyn::DT_JMPREL);
for ( int sz = elf_unsigned_dynamic(Elf64_Dyn::DT_PLTRELSZ);
0 < sz;
(sz -= sizeof(Elf64_Rela)), ++jmprela
) {
unsigned const symnum = get_te64(&jmprela->r_info) >> 32;
char const *const symnam = get_te32(&dynsym[symnum].st_name) + dynstr;
if (0==strcmp(symnam, "__libc_start_main")
|| 0==strcmp(symnam, "__uClibc_main")
|| 0==strcmp(symnam, "__uClibc_start_main"))
goto proceed;
}
// 2016-10-09 DT_JMPREL is no more (binutils-2.26.1)?
// Check the general case, too.
for ( int sz = elf_unsigned_dynamic(Elf64_Dyn::DT_RELASZ);
0 < sz;
(sz -= sizeof(Elf64_Rela)), ++rela
) {
unsigned const symnum = get_te64(&rela->r_info) >> 32;
char const *const symnam = get_te32(&dynsym[symnum].st_name) + dynstr;
if (0==strcmp(symnam, "__libc_start_main")
|| 0==strcmp(symnam, "__uClibc_main")
|| 0==strcmp(symnam, "__uClibc_start_main"))
goto proceed;
}
// Heuristic HACK for shared libraries (compare Darwin (MacOS) Dylib.)
// If there is an existing DT_INIT, and if everything that the dynamic
// linker ld-linux needs to perform relocations before calling DT_INIT
// resides below the first SHT_EXECINSTR Section in one PT_LOAD, then
// compress from the first executable Section to the end of that PT_LOAD.
// We must not alter anything that ld-linux might touch before it calls
// the DT_INIT function.
//
// Obviously this hack requires that the linker script put pieces
// into good positions when building the original shared library,
// and also requires ld-linux to behave.
if (elf_find_dynamic(Elf64_Dyn::DT_INIT)) {
if (elf_has_dynamic(Elf64_Dyn::DT_TEXTREL)) {
throwCantPack("DT_TEXTREL found; re-compile with -fPIC");
goto abandon;
}
Elf64_Shdr const *shdr = shdri;
xct_va = ~0ull;
for (j= e_shnum; --j>=0; ++shdr) {
if (Elf64_Shdr::SHF_EXECINSTR & get_te32(&shdr->sh_flags)) {
xct_va = umin64(xct_va, get_te64(&shdr->sh_addr));
}
}
// Rely on 0==elf_unsigned_dynamic(tag) if no such tag.
upx_uint64_t const va_gash = elf_unsigned_dynamic(Elf64_Dyn::DT_GNU_HASH);
upx_uint64_t const va_hash = elf_unsigned_dynamic(Elf64_Dyn::DT_HASH);
if (xct_va < va_gash || (0==va_gash && xct_va < va_hash)
|| xct_va < elf_unsigned_dynamic(Elf64_Dyn::DT_STRTAB)
|| xct_va < elf_unsigned_dynamic(Elf64_Dyn::DT_SYMTAB)
|| xct_va < elf_unsigned_dynamic(Elf64_Dyn::DT_REL)
|| xct_va < elf_unsigned_dynamic(Elf64_Dyn::DT_RELA)
|| xct_va < elf_unsigned_dynamic(Elf64_Dyn::DT_JMPREL)
|| xct_va < elf_unsigned_dynamic(Elf64_Dyn::DT_VERDEF)
|| xct_va < elf_unsigned_dynamic(Elf64_Dyn::DT_VERSYM)
|| xct_va < elf_unsigned_dynamic(Elf64_Dyn::DT_VERNEEDED) ) {
throwCantPack("DT_ tag above stub");
goto abandon;
}
for ((shdr= shdri), (j= e_shnum); --j>=0; ++shdr) {
upx_uint64_t const sh_addr = get_te64(&shdr->sh_addr);
if ( sh_addr==va_gash
|| (sh_addr==va_hash && 0==va_gash) ) {
shdr= &shdri[get_te32(&shdr->sh_link)]; // the associated SHT_SYMTAB
hatch_off = (char *)&ehdri.e_ident[11] - (char *)&ehdri;
break;
}
}
ACC_UNUSED(shdr);
xct_off = elf_get_offset_from_address(xct_va);
goto proceed; // But proper packing depends on checking xct_va.
}
abandon:
return false;
proceed: ;
}
// XXX Theoretically the following test should be first,
// but PackUnix::canPack() wants 0!=exetype ?
if (!super::canPack())
return false;
assert(exetype == 1);
exetype = 0;
// set options
opt->o_unix.blocksize = blocksize = file_size;
return true;
}
off_t
PackLinuxElf32::getbrk(const Elf32_Phdr *phdr, int nph) const
{
@ -2675,6 +2918,14 @@ void PackLinuxElf64amd::pack1(OutputFile *fo, Filter &ft)
generateElfHdr(fo, stub_amd64_linux_elf_fold, getbrk(phdri, e_phnum) );
}
void PackLinuxElf64arm::pack1(OutputFile *fo, Filter &ft)
{
super::pack1(fo, ft);
if (0!=xct_off) // shared library
return;
generateElfHdr(fo, stub_arm64_linux_elf_fold, getbrk(phdri, e_phnum) );
}
// Determine length of gap between PT_LOAD phdr[k] and closest PT_LOAD
// which follows in the file (or end-of-file). Optimize for common case
// where the PT_LOAD are adjacent ascending by .p_offset. Assume no overlap.
@ -3013,6 +3264,51 @@ void PackLinuxElf32armBe::defineSymbols(Filter const *ft)
ARM_defineSymbols(ft);
}
void PackLinuxElf64arm::defineSymbols(Filter const * /*ft*/)
{
lsize = /*getLoaderSize()*/ 4 * 1024; // upper bound; avoid circularity
upx_uint64_t lo_va_user = ~0ul; // infinity
for (int j= e_phnum; --j>=0; ) {
if (PT_LOAD64 == get_te32(&phdri[j].p_type)) {
upx_uint64_t const va = get_te64(&phdri[j].p_vaddr);
if (va < lo_va_user) {
lo_va_user = va;
}
}
}
upx_uint64_t lo_va_stub = get_te64(&elfout.phdr[0].p_vaddr);
upx_uint64_t adrc = 0; // init: pacify c++-analyzer
upx_uint64_t adrm = 0; // init: pacify c++-analyzer
is_big = true; // kernel disallows mapping below 0x8000.
if (is_big) {
set_te64( &elfout.ehdr.e_entry, linker->getSymbolOffset("_start") +
get_te64(&elfout.ehdr.e_entry) + lo_va_user - lo_va_stub);
set_te64(&elfout.phdr[0].p_vaddr, lo_va_user);
set_te64(&elfout.phdr[0].p_paddr, lo_va_user);
lo_va_stub = lo_va_user;
adrc = lo_va_stub;
adrm = getbrk(phdri, e_phnum);
}
adrc = page_mask & (~page_mask + adrc); // round up to page boundary
adrm = page_mask & (~page_mask + adrm); // round up to page boundary
adrm += page_size; // Try: hole so that kernel does not extend the brk(0)
linker->defineSymbol("ADRM", adrm); // addr for map
linker->defineSymbol("CPR0", 4+ linker->getSymbolOffset("cpr0"));
linker->defineSymbol("LENF", 4+ linker->getSymbolOffset("end_decompress"));
ACC_UNUSED(adrc);
#define MAP_PRIVATE 2 /* UNIX standard */
#define MAP_FIXED 0x10 /* UNIX standard */
#define MAP_ANONYMOUS 0x20 /* UNIX standard */
#define MAP_PRIVANON 3 /* QNX anonymous private memory */
unsigned mflg = MAP_PRIVATE | MAP_ANONYMOUS;
//if (ARM_is_QNX())
// mflg = MAP_PRIVANON;
linker->defineSymbol("MFLG", mflg);
}
void PackLinuxElf32mipseb::defineSymbols(Filter const * /*ft*/)
{
unsigned const hlen = sz_elf_hdrs + sizeof(l_info) + sizeof(p_info);

View File

@ -387,6 +387,25 @@ protected:
virtual void defineSymbols(Filter const *);
};
class PackLinuxElf64arm : public PackLinuxElf64Le
{
typedef PackLinuxElf64Le super;
public:
PackLinuxElf64arm(InputFile *f);
virtual ~PackLinuxElf64arm();
virtual int getFormat() const { return UPX_F_LINUX_ELF64_ARM; }
virtual const char *getName() const { return "linux/arm64"; }
virtual const char *getFullName(const options_t *) const { return "arm64-linux.elf"; }
virtual const int *getFilters() const;
virtual bool canPack();
protected:
virtual void pack1(OutputFile *, Filter &); // generate executable header
//virtual void pack3(OutputFile *, Filter &); // append loader
virtual void buildLoader(const Filter *);
virtual Linker* newLinker() const;
virtual void defineSymbols(Filter const *);
};
/*************************************************************************
// linux/elf32ppc

View File

@ -250,6 +250,9 @@ Packer* PackMaster::visitAllPackers(visit_func_t func, InputFile *f, const optio
if ((p = func(new PackLinuxElf32armBe(f), user)) != NULL)
return p;
delete p; p = NULL;
if ((p = func(new PackLinuxElf64arm(f), user)) != NULL)
return p;
delete p; p = NULL;
if ((p = func(new PackLinuxElf32ppc(f), user)) != NULL)
return p;
delete p; p = NULL;

View File

@ -72,12 +72,14 @@ STUBS += arm.v5a-linux.kernel.vmlinux.h
STUBS += arm.v5a-linux.kernel.vmlinuz-head.h
STUBS += arm.v5a-linux.kernel.vmlinuz.h
STUBS += arm.v5a-linux.shlib-init.h
STUBS += arm.v5a-linux.shlib-init.h
STUBS += arm.v5t-linux.shlib-init.h
STUBS += armeb.v4a-linux.elf-entry.h
STUBS += armeb.v4a-linux.elf-fold.h
STUBS += armeb.v5a-linux.kernel.vmlinux-head.h
STUBS += armeb.v5a-linux.kernel.vmlinux.h
STUBS += arm64-linux.elf-entry.h
STUBS += arm64-linux.elf-fold.h
STUBS += arm64-linux.shlib-init.h
STUBS += arm64-darwin.macho-entry.h
STUBS += arm64-darwin.macho-fold.h
STUBS += i086-dos16.com.h
@ -533,6 +535,61 @@ tmp/armel-linux.elf-main.o : $(srcdir)/src/$$T.c $(srcdir)/src/i386-linux.elf-ma
$(call tc,f-objstrip,$@)
# /***********************************************************************
# // arm64-linux.elf (arm64)
# ************************************************************************/
arm64-linux.elf%.h : tc_list = arm64-linux.elf default
arm64-linux.elf%.h : tc_bfdname = elf64-littleaarch64
tc.arm64-linux.elf.gcc = /usr/bin/aarch64-linux-gnu-gcc -nostdinc -MMD -MT $@
tc.arm64-linux.elf.gcc += -fno-exceptions -fno-asynchronous-unwind-tables
tc.arm64-linux.elf.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototypes -Wwrite-strings -Werror
tc.arm64-linux.elf-fold.ld = /usr/bin/aarch64-linux-gnu-ld
tc.arm64-linux.elf-entry.objcopy = /usr/bin/aarch64-linux-gnu-objcopy -F elf64-littleaarch64
tc.arm64-linux.elf-fold.objcopy = /usr/bin/aarch64-linux-gnu-objcopy -F elf64-littleaarch64
tc.arm64-linux.elf-main.objcopy = /usr/bin/aarch64-linux-gnu-objcopy -F elf64-littleaarch64
tc.arm64-linux.elf-entry.objdump = /usr/bin/aarch64-linux-gnu-objdump
tc.arm64-linux.elf-fold.objdump = /usr/bin/aarch64-linux-gnu-objdump
tc.arm64-linux.elf-main.objdump = /usr/bin/aarch64-linux-gnu-objdump
arm64-linux.elf-entry.h : $(srcdir)/src/$$T.S
$(call tc,gcc) -c $< -o tmp/$T.bin
$(call tc,f-embed_objinfo,tmp/$T.bin)
$(call tc,bin2h) tmp/$T.bin $@
arm64-linux.elf-fold.h : tmp/$$T.o tmp/arm64-linux.elf-main.o $(srcdir)/src/arm64-linux.elf-fold.lds
$(call tc,ld) --strip-all -T $(srcdir)/src/arm64-linux.elf-fold.lds -Map tmp/$T.map $(filter %.o,$^) -o tmp/$T.bin
$(call tc,f-objstrip,tmp/$T.bin)
$(call tc,sstrip) tmp/$T.bin
$(call tc,bin2h) tmp/$T.bin $@
tmp/arm64-linux.elf-fold.o : $(srcdir)/src/$$T.S
$(call tc,gcc) -c $< -o $@
$(call tc,f-objstrip,$@)
tmp/arm64-linux.elf-main.o : $(srcdir)/src/$$T.c $(srcdir)/src/arm64-linux.elf-main.c
$(call tc,gcc) -c -Os $< -o $@
$(call tc,f-objstrip,$@)
# /***********************************************************************
# // arm64-linux.shlib arm64
# ************************************************************************/
arm64-linux.shlib%.h : tc_list = arm64-linux.elf default
arm64-linux.shlib%.h : tc_bfdname = elf64-littleaarch64
tc.arm64-linux.shlib-init.objcopy = /usr/bin/aarch64-linux-gnu-objcopy -F elf64-littleaarch64
tc.arm64-linux.shlib-init.objdump = /usr/bin/aarch64-linux-gnu-objdump
arm64-linux.shlib%.h : $(srcdir)/src/$$T.S
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.bin
$(call tc,f-embed_objinfo,tmp/$T.bin)
$(call tc,bin2h-c) tmp/$T.bin $@
# /***********************************************************************
# // arm.v5a-linux.shlib (arm.v5a)
# ************************************************************************/

View File

@ -1,5 +1,5 @@
/* arm64-darwin.macho-entry.h
created from arm64-darwin.macho-entry.bin, 4261 (0x10a5) bytes
created from arm64-darwin.macho-entry.bin, 7524 (0x1d64) bytes
This file is part of the UPX executable compressor.
@ -31,276 +31,480 @@
*/
#define STUB_ARM64_DARWIN_MACHO_ENTRY_SIZE 4261
#define STUB_ARM64_DARWIN_MACHO_ENTRY_ADLER32 0xaa67ad09
#define STUB_ARM64_DARWIN_MACHO_ENTRY_CRC32 0x5553c968
#define STUB_ARM64_DARWIN_MACHO_ENTRY_SIZE 7524
#define STUB_ARM64_DARWIN_MACHO_ENTRY_ADLER32 0xe8d2735e
#define STUB_ARM64_DARWIN_MACHO_ENTRY_CRC32 0x4030fbb8
unsigned char stub_arm64_darwin_macho_entry[4261] = {
unsigned char stub_arm64_darwin_macho_entry[7524] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0,183, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0, 80, 11, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0,168, 21, 0, 0, 0, 0, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
/* 0x0040 */ 255, 19, 0,209,224, 7,177,169,226, 15, 1,169,228, 23, 2,169,
/* 0x0050 */ 230, 31, 3,169,232, 39, 4,169,234, 47, 5,169,236, 55, 6,169,
/* 0x0060 */ 238, 63, 7,169,240, 71, 8,169,242, 79, 9,169,244, 87, 10,169,
/* 0x0070 */ 246, 95, 11,169,248,103, 12,169,250,111, 13,169,252,119, 14,169,
/* 0x0080 */ 0, 0, 0,148,226,143,190,169,254, 11, 0,249, 7, 64, 33,139,
/* 0x0090 */ 5, 0,128, 18, 4, 0,176, 82, 29, 0, 0, 20,227, 19,193,168,
/* 0x0080 */ 0, 0, 0,148,254, 15, 31,248,226, 15,191,169, 7, 64, 33,139,
/* 0x0090 */ 5, 0,128, 18, 4, 0,176, 82, 24, 0, 0, 20,227, 19,193,168,
/* 0x00a0 */ 0, 0, 7,203, 66, 0, 3,203,130, 0, 0,185,228, 3, 0,170,
/* 0x00b0 */ 224, 3, 3,170,225, 3, 2,170,224, 7,191,169, 35, 0,128, 82,
/* 0x00c0 */ 8, 0,176, 82, 0, 16, 32,212,224, 7,193,168, 3, 0,128, 82,
/* 0x00d0 */ 8, 0,176, 82, 0, 16, 32,212,224, 3, 4,170,254,135, 64,248,
/* 0x00e0 */ 192, 3, 95,214,132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214,
/* 0x00f0 */ 4, 20, 64, 56,132, 0, 4, 58,132, 32, 9, 83,132, 0, 4, 43,
/* 0x0100 */ 192, 3, 95,214, 3, 20, 64, 56, 67, 20, 0, 56,246,255,255,151,
/* 0x0110 */ 162,255,255, 84, 33, 0,128, 82, 4, 0, 0, 20, 33, 4, 0, 81,
/* 0x0120 */ 241,255,255,151, 33, 0, 1, 26,239,255,255,151, 33, 0, 1, 26,
/* 0x0130 */ 237,255,255,151, 67,255,255, 84, 35, 12, 0,113, 1, 0,128, 82,
/* 0x0140 */ 35, 1, 0, 84, 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42,
/* 0x0150 */ 101,250,255, 52,191, 0, 0,114,165,124, 1, 19,161, 1, 0, 84,
/* 0x0160 */ 3, 0, 0, 20,224,255,255,151, 66, 1, 0, 84, 33, 0,128, 82,
/* 0x0170 */ 221,255,255,151,226, 0, 0, 84,219,255,255,151, 33, 0, 1, 26,
/* 0x0180 */ 217,255,255,151,163,255,255, 84, 33, 16, 0, 17, 4, 0, 0, 20,
/* 0x0190 */ 213,255,255,151, 33, 0, 1, 26, 33, 8, 0, 17,191, 0, 20, 49,
/* 0x01a0 */ 33, 52,129, 26, 67,192, 33,139, 99,240, 95, 56, 67,200,101, 56,
/* 0x01b0 */ 67, 20, 0, 56, 33, 4, 0,113,161,255,255, 84,212,255,255, 23,
/* 0x01c0 */ 226,143,190,169,254, 11, 0,249, 7, 64, 33,139, 5, 0,128, 18,
/* 0x01d0 */ 4, 0,176, 82, 29, 0, 0, 20,227, 19,193,168, 0, 0, 7,203,
/* 0x01e0 */ 66, 0, 3,203,130, 0, 0,185,228, 3, 0,170,224, 3, 3,170,
/* 0x01f0 */ 225, 3, 2,170,224, 7,191,169, 35, 0,128, 82, 8, 0,176, 82,
/* 0x0200 */ 0, 16, 32,212,224, 7,193,168, 3, 0,128, 82, 8, 0,176, 82,
/* 0x0210 */ 0, 16, 32,212,224, 3, 4,170,254,135, 64,248,192, 3, 95,214,
/* 0x0220 */ 132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214, 4, 20, 64, 56,
/* 0x0230 */ 132, 0, 4, 58,132, 32, 9, 83,132, 0, 4, 43,192, 3, 95,214,
/* 0x0240 */ 3, 20, 64, 56, 67, 20, 0, 56,246,255,255,151,162,255,255, 84,
/* 0x0250 */ 33, 0,128, 82, 4, 0, 0, 20, 33, 4, 0, 81,241,255,255,151,
/* 0x0260 */ 33, 0, 1, 58,239,255,255,151, 33, 0, 1, 58,237,255,255,151,
/* 0x0270 */ 67,255,255, 84, 35, 12, 0,113, 1, 0,128, 82, 35, 1, 0, 84,
/* 0x0280 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42,101,250,255, 52,
/* 0x0290 */ 163, 0, 1, 83,165,124, 1, 83, 99, 0, 3, 43, 2, 0, 0, 20,
/* 0x02a0 */ 224,255,255,151, 33, 0, 1, 58,222,255,255,151, 33, 0, 1, 58,
/* 0x02b0 */ 225, 0, 0, 84, 33, 0,128, 82,218,255,255,151, 33, 0, 1, 58,
/* 0x02c0 */ 216,255,255,151,163,255,255, 84, 33, 8, 0, 17, 33, 4, 0, 17,
/* 0x02d0 */ 191, 0, 20, 49, 33, 52,129, 26, 67, 0, 64, 57, 67,200,101, 56,
/* 0x02e0 */ 67, 20, 0, 56, 33, 4, 0,113,161,255,255, 84,215,255,255, 23,
/* 0x02f0 */ 1, 64, 33,139,225, 11,190,169,227,123, 1,169, 5, 0,128, 18,
/* 0x0300 */ 4, 0,176, 82, 37, 0, 0, 20,228, 11, 64,249,225,143,193,168,
/* 0x0310 */ 0, 0, 1,203, 66, 0, 3,203,130, 0, 0,185,228, 3, 0,170,
/* 0x0320 */ 224, 3, 3,170,225, 3, 2,170,224, 7,191,169, 35, 0,128, 82,
/* 0x0330 */ 8, 0,176, 82, 0, 16, 32,212,224, 7,193,168, 3, 0,128, 82,
/* 0x0340 */ 8, 0,176, 82, 0, 16, 32,212,224, 3, 4,170,254,135, 64,248,
/* 0x0350 */ 192, 3, 95,214,132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214,
/* 0x0360 */ 4, 20, 64, 56,132, 0, 4, 26,132, 32, 9, 83,132, 0, 4, 43,
/* 0x0370 */ 192, 3, 95,214, 33, 0,128, 82,240, 3, 30,170,246,255,255,151,
/* 0x0380 */ 33, 0, 1, 58,244,255,255,151,163,255,255, 84, 0, 2, 31,214,
/* 0x0390 */ 3, 20, 64, 56, 67, 20, 0, 56,239,255,255,151,162,255,255, 84,
/* 0x03a0 */ 245,255,255,151, 35, 12, 0,113, 1, 0,128, 82,163, 0, 0, 84,
/* 0x03b0 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42,101,250,255, 52,
/* 0x03c0 */ 229,255,255,151, 33, 0, 1, 58,227,255,255,151, 33, 0, 1, 58,
/* 0x03d0 */ 97, 0, 0, 84,232,255,255,151, 33, 8, 0, 17,191, 0, 52, 49,
/* 0x03e0 */ 33, 36,129, 26, 67,200,101, 56, 33, 4, 0,113, 67, 20, 0, 56,
/* 0x03f0 */ 162,255,255, 84,233,255,255, 23,230,123,191,169,227,147,190,169,
/* 0x0400 */ 229, 11, 0,249,232, 3, 1,170, 45, 64, 34,139,233, 3, 4,170,
/* 0x0410 */ 142, 64, 37,139,235, 3, 0,170, 6, 21, 64, 56,160, 5,128, 82,
/* 0x0420 */ 196, 8,192, 26, 0,124, 4, 27,198, 0, 0, 75, 32, 1,128, 82,
/* 0x0430 */ 197, 8,192, 26, 0,124, 5, 27,198, 0, 0, 75,174, 0, 6, 11,
/* 0x0440 */ 7, 0,128, 18,229, 32,197, 26,229, 3, 37, 42,228, 32,196, 26,
/* 0x0450 */ 228, 3, 36, 42, 35, 0,128, 82, 34, 0,128, 82, 33, 0,128, 82,
/* 0x0460 */ 32, 0,128, 82, 6, 0,128, 82,230, 31, 0,185, 2, 96,128, 82,
/* 0x0470 */ 192,230,128, 82, 66, 32,206, 26, 66, 0, 0, 11, 0,128,128,210,
/* 0x0480 */ 225, 3, 11,170, 0, 64, 0,170, 0,128, 0,170, 32,132, 0,248,
/* 0x0490 */ 66, 16, 0,113,204,255,255, 84, 0, 21, 0,145,231, 0, 0,148,
/* 0x04a0 */ 31, 0, 8,235,193,255,255, 84,227, 67, 66,248,226, 19, 64,185,
/* 0x04b0 */ 36, 1, 3,203,128, 0, 2, 10,224, 47, 0,185, 0, 16, 6, 11,
/* 0x04c0 */ 97, 1, 0,145,225, 0, 0,148,129, 5, 0, 84,227, 23, 64,185,
/* 0x04d0 */ 226, 27, 64,185, 99, 0, 4, 10,224,115, 64, 57, 99, 32,194, 26,
/* 0x04e0 */ 226, 3, 2, 75, 66, 32, 0, 17, 2, 36,194, 26, 99, 0, 2, 11,
/* 0x04f0 */ 106,177, 57,145, 99, 4, 3, 11,227, 3, 3, 42, 32, 0,128, 82,
/* 0x0500 */ 74, 37, 3,139,223, 28, 0,113, 3, 2, 0, 84,227,125, 64,147,
/* 0x0510 */ 227, 3, 3,203, 37,105, 99, 56,165,120, 31, 83, 65, 1, 8,145,
/* 0x0520 */ 164, 0, 24, 18,227, 3, 4, 42, 33, 4, 3,139,201, 0, 0,148,
/* 0x0530 */ 3, 0, 0, 18,127, 32, 68,107,193, 0, 0, 84, 31, 0, 4,113,
/* 0x0540 */ 195,254,255, 84, 5, 0, 0, 20,225, 3, 10,170,193, 0, 0,148,
/* 0x0550 */ 31, 0, 4,113,163,255,255, 84, 98, 0,128, 82,195, 0,128, 82,
/* 0x0560 */ 223, 40, 0,113, 67, 48,131, 26,223, 16, 0,113,195, 48,131, 26,
/* 0x0570 */ 198, 0, 3, 75, 34, 0, 0, 20, 97, 1, 6,145,178, 0, 0,148,
/* 0x0580 */ 129, 1, 0, 84,227, 11, 64,185,226, 7, 64,185,227, 15, 0,185,
/* 0x0590 */ 226, 11, 0,185,239, 7, 0,185, 3, 0,128, 82,223, 28, 0,113,
/* 0x05a0 */ 102, 0,128, 82,102, 48,134, 26,106,145, 25,145, 42, 0, 0, 20,
/* 0x05b0 */ 97, 97, 6,145,164, 0, 0,148, 97, 2, 0, 84,227, 47, 64,185,
/* 0x05c0 */ 97,129, 7,145, 96, 16, 6, 11,160, 0, 0,148,161, 3, 0, 84,
/* 0x05d0 */ 35, 1,128, 82,223, 28, 0,113,102, 1,128, 82,102, 48,134, 26,
/* 0x05e0 */ 227, 67, 66,248, 36, 1, 3,203,159, 0, 15,107,131, 17, 0, 84,
/* 0x05f0 */ 227,125, 64,147,227, 3, 3,203, 32,105, 99, 56, 32, 21, 0, 56,
/* 0x0600 */ 121, 0, 0, 20, 97,193, 6,145,143, 0, 0,148,228, 7, 64,185,
/* 0x0610 */ 64, 1, 0, 84, 97, 33, 7,145,139, 0, 0,148,228, 11, 64,185,
/* 0x0620 */ 128, 0, 0, 84,227, 11, 64,185,228, 15, 64,185,227, 15, 0,185,
/* 0x0630 */ 227, 7, 64,185,227, 11, 0,185,239, 7, 0,185,239, 3, 4, 42,
/* 0x0640 */ 3, 1,128, 82,223, 28, 0,113,102, 1,128, 82,102, 48,134, 26,
/* 0x0650 */ 106,161, 41,145, 65, 1, 0,145,125, 0, 0,148, 1, 1, 0, 84,
/* 0x0660 */ 227, 47, 64,185, 69, 17, 0,145,227, 3, 3, 42, 2, 0,128, 82,
/* 0x0670 */ 165, 16, 3,139, 4, 1,128, 82, 14, 0, 0, 20, 65, 9, 0,145,
/* 0x0680 */ 115, 0, 0,148, 1, 1, 0, 84,227, 47, 64,185, 69, 17, 4,145,
/* 0x0690 */ 227, 3, 3, 42, 2, 1,128, 82,165, 16, 3,139, 4, 1,128, 82,
/* 0x06a0 */ 4, 0, 0, 20, 69, 17, 8,145, 2, 2,128, 82, 4, 32,128, 82,
/* 0x06b0 */ 226, 55, 0,185, 32, 0,128, 82,225, 3, 5,170,101, 0, 0,148,
/* 0x06c0 */ 3, 0, 4,107,163,255,255, 84,229, 55, 64,185,165, 0, 3, 11,
/* 0x06d0 */ 229, 55, 0,185,223, 16, 0,113,194, 6, 0, 84,198, 28, 0, 17,
/* 0x06e0 */ 99, 0,128, 82,191, 16, 0,113,101, 32,133, 26,227, 3, 5, 42,
/* 0x06f0 */ 101, 29, 3,139,165,128, 13,145, 32, 0,128, 82, 4, 8,128, 82,
/* 0x0700 */ 225, 3, 5,170, 83, 0, 0,148, 3, 0, 4,107,163,255,255, 84,
/* 0x0710 */ 227, 47, 0,185,127, 16, 0,113, 99, 4, 0, 84,100,124, 1, 83,
/* 0x0720 */ 132, 4, 0, 81,111, 0, 0, 18,239, 1, 31, 50,127, 56, 0,113,
/* 0x0730 */ 226, 0, 0, 84,239, 33,196, 26,106,121, 21,145,227, 1, 3, 75,
/* 0x0740 */ 227, 3, 3, 42, 74, 5, 3,139, 12, 0, 0, 20,132, 16, 0, 81,
/* 0x0750 */ 53, 0, 0,148,231,124, 1, 83,131, 1, 7,107,108, 32,140, 26,
/* 0x0760 */ 239, 1, 15, 26,132, 4, 0,113, 65,255,255, 84,106, 17, 25,145,
/* 0x0770 */ 239,109, 28, 83,132, 0,128, 82, 37, 0,128, 82, 32, 0,128, 82,
/* 0x0780 */ 225, 3, 10,170, 51, 0, 0,148, 31, 0, 0,114, 64, 0, 0, 84,
/* 0x0790 */ 239, 1, 5, 42,165,120, 31, 83,132, 4, 0,113, 33,255,255, 84,
/* 0x07a0 */ 2, 0, 0, 20,239, 47, 64,185,239, 5, 0, 49,229, 55, 64,185,
/* 0x07b0 */ 227, 67, 66,248,165, 8, 0, 17, 35, 1, 3,203,255, 1, 3,107,
/* 0x07c0 */ 232, 2, 0, 84,227,125, 64,147,227, 3, 3,203, 32,105, 99, 56,
/* 0x07d0 */ 32, 21, 0, 56, 63, 1, 14,235,194, 0, 0, 84,165, 4, 0,113,
/* 0x07e0 */ 97,255,255, 84,224,115, 0, 57, 63, 1, 14,235,227,229,255, 84,
/* 0x07f0 */ 13, 0, 0,148, 0, 0,128, 82,226, 19, 64,249, 3, 1, 2,203,
/* 0x0800 */ 226, 31, 64,249, 67, 0, 0,185,226, 67, 66,248, 35, 1, 2,203,
/* 0x0810 */ 226, 55, 64,249, 67, 0, 0,185,255,243, 0,145, 32, 0,128, 82,
/* 0x0820 */ 246,255,255, 23,227,124, 24, 83,195, 0, 0, 53, 31, 1, 13,235,
/* 0x0830 */ 231, 92, 24, 83, 66,255,255, 84, 3, 21, 64, 56,108, 32, 12, 42,
/* 0x0840 */ 192, 3, 95,214,224, 3, 6, 42, 33, 68, 32,139, 0, 0,128, 82,
/* 0x0850 */ 33, 68, 32,139,227,124, 24, 83,241, 3, 30,170, 94, 0, 0, 16,
/* 0x0860 */ 99,254,255, 52, 35, 0, 64,121,226,124, 11, 83, 98,124, 2, 27,
/* 0x0870 */ 159, 1, 2,107, 2, 1, 0, 84, 2, 0,129, 82,231, 3, 2, 42,
/* 0x0880 */ 66, 0, 3, 75, 0, 0, 0, 58, 99, 20, 66, 11, 35, 0, 0,121,
/* 0x0890 */ 32, 2, 95,214,140, 1, 2, 75,231, 0, 2, 75, 99, 20, 67, 75,
/* 0x08a0 */ 0, 0, 0, 58, 35, 0, 0,121, 32, 2, 95,214,195, 3, 64,185,
/* 0x08b0 */ 193, 7, 64,185,194, 67, 33,139, 66, 48, 0,145,192, 67, 35,139,
/* 0x08c0 */ 0, 0, 3,145,228, 3, 1, 42, 73,204, 95,184,132, 16, 0, 81,
/* 0x08d0 */ 9,204, 31,184,164,255,255, 53,196, 11, 64,185,222, 3, 2,145,
/* 0x08e0 */ 227,143, 31,184,227, 3, 0,145,226, 3, 30,170,171, 32, 1,209,
/* 0x08f0 */ 234, 3, 30,170,160, 0, 63,214, 64, 1, 31,214,229, 3, 30,170,
/* 0x0900 */ 235,255,255,151,102,105,108,101, 32,102,111,114,109, 97,116, 32,
/* 0x0910 */ 101,108,102, 54, 52, 45,108,105,116,116,108,101, 97, 97,114, 99,
/* 0x0920 */ 104, 54, 52, 10, 10, 83,101, 99,116,105,111,110,115, 58, 10, 73,
/* 0x0930 */ 100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x0940 */ 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32,
/* 0x0950 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65,
/* 0x0960 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70,
/* 0x0970 */ 105,108,101, 32,111,102,102, 32, 32, 65,108,103,110, 32, 32, 70,
/* 0x0980 */ 108, 97,103,115, 10, 32, 32, 48, 32, 77, 65, 67, 72, 77, 65, 73,
/* 0x0990 */ 78, 88, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 52, 52, 32,
/* 0x09a0 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x09b0 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x09c0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 52, 48, 32, 32, 50,
/* 0x09d0 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82,
/* 0x09e0 */ 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32,
/* 0x09f0 */ 32, 49, 32, 78, 82, 86, 95, 72, 69, 65, 68, 32, 32, 32, 32, 32,
/* 0x0a00 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x0a10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48,
/* 0x0a20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x0a30 */ 48, 48, 48, 48, 48, 56, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67,
/* 0x0a40 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76,
/* 0x0a50 */ 89, 10, 32, 32, 50, 32, 78, 82, 86, 50, 69, 32, 32, 32, 32, 32,
/* 0x0a60 */ 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 51, 99, 32, 32, 48, 48,
/* 0x0a70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x0a80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0a90 */ 32, 32, 48, 48, 48, 48, 48, 48, 56, 52, 32, 32, 50, 42, 42, 48,
/* 0x0aa0 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68,
/* 0x0ab0 */ 79, 78, 76, 89, 10, 32, 32, 51, 32, 78, 82, 86, 50, 68, 32, 32,
/* 0x0ac0 */ 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 51, 48, 32,
/* 0x0ad0 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0ae0 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0af0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 49, 99, 48, 32, 32, 50,
/* 0x0b00 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82,
/* 0x0b10 */ 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 52, 32, 78, 82, 86, 50,
/* 0x0b20 */ 66, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49,
/* 0x0b30 */ 48, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0b40 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0b50 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 50,102, 48,
/* 0x0b60 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83,
/* 0x0b70 */ 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 53, 32, 78,
/* 0x0b80 */ 82, 86, 95, 84, 65, 73, 76, 32, 32, 32, 32, 32, 32, 48, 48, 48,
/* 0x0b90 */ 48, 48, 52, 98, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0ba0 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x0bb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x0bc0 */ 51,102, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69,
/* 0x0bd0 */ 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32,
/* 0x0be0 */ 54, 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32,
/* 0x0bf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x0c00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48,
/* 0x0c10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x0c20 */ 48, 48, 48, 56, 97, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79,
/* 0x0c30 */ 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89,
/* 0x0c40 */ 10, 32, 32, 55, 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, 32, 32,
/* 0x0c50 */ 32, 32, 32, 48, 48, 48, 48, 48, 48, 53, 56, 32, 32, 48, 48, 48,
/* 0x0c60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x0c70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x0c80 */ 32, 48, 48, 48, 48, 48, 56, 97, 99, 32, 32, 50, 42, 42, 48, 32,
/* 0x0c90 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79,
/* 0x0ca0 */ 78, 76, 89, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69,
/* 0x0cb0 */ 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0cc0 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 77, 65, 67, 72, 77,
/* 0x0cd0 */ 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0ce0 */ 48, 48, 48, 48, 48, 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, 10,
/* 0x0cf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0d00 */ 32,108, 32, 32, 32, 32,100, 32, 32, 77, 65, 67, 72, 77, 65, 73,
/* 0x0d10 */ 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0d20 */ 48, 48, 48, 32, 77, 65, 67, 72, 77, 65, 73, 78, 88, 10, 48, 48,
/* 0x0d30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108,
/* 0x0d40 */ 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 9,
/* 0x0d50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0d60 */ 32, 78, 82, 86, 95, 72, 69, 65, 68, 10, 48, 48, 48, 48, 48, 48,
/* 0x0d70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,
/* 0x0d80 */ 100, 32, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48, 48, 48,
/* 0x0d90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 69, 10,
/* 0x0da0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0db0 */ 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 68, 9, 48,
/* 0x0dc0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x0dd0 */ 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0de0 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78,
/* 0x0df0 */ 82, 86, 50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0e00 */ 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48,
/* 0x0e10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32,
/* 0x0e20 */ 32, 32,100, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 9, 48, 48,
/* 0x0e30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78,
/* 0x0e40 */ 82, 86, 95, 84, 65, 73, 76, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0e50 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32,
/* 0x0e60 */ 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48,
/* 0x0e70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 77, 65, 67, 72,
/* 0x0e80 */ 77, 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0e90 */ 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 77,
/* 0x0ea0 */ 65, 67, 72, 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48,
/* 0x0eb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 95,115,116, 97,114,116,
/* 0x0ec0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0ed0 */ 48, 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 69, 9,
/* 0x0ee0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 51, 99,
/* 0x0ef0 */ 32,117, 99,108, 95,110,114,118, 50,101, 95,100,101, 99,111,109,
/* 0x0f00 */ 112,114,101,115,115, 95, 56, 10, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0f10 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70,
/* 0x0f20 */ 32, 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0f30 */ 48, 48, 48, 48, 49, 51, 48, 32,117, 99,108, 95,110,114,118, 50,
/* 0x0f40 */ 100, 95,100,101, 99,111,109,112,114,101,115,115, 95, 56, 10, 48,
/* 0x0f50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x0f60 */ 103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 66, 9, 48, 48,
/* 0x0f70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 48, 56, 32,117,
/* 0x0f80 */ 99,108, 95,110,114,118, 50, 98, 95,100,101, 99,111,109,112,114,
/* 0x0f90 */ 101,115,115, 95, 56, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0fa0 */ 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 78,
/* 0x0fb0 */ 82, 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0fc0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,122,109, 97, 68,101, 99,
/* 0x0fd0 */ 111,100,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x0fe0 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 77, 65, 67,
/* 0x0ff0 */ 72, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1000 */ 48, 48, 48, 48, 48, 48, 48, 32,101,110,100, 95,100,101, 99,111,
/* 0x1010 */ 109,112,114,101,115,115, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73,
/* 0x1020 */ 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91,
/* 0x1030 */ 77, 65, 67, 72, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83,
/* 0x1040 */ 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80,
/* 0x1050 */ 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86,
/* 0x1060 */ 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1070 */ 48, 48, 48, 52, 48, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95,
/* 0x1080 */ 67, 65, 76, 76, 50, 54, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78,
/* 0x1090 */ 90, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x10a0 */ 48, 48, 53, 48, 10
/* 0x00b0 */ 224, 3, 3,170, 97, 0, 2,139, 32,123, 11,213, 32,117, 11,213,
/* 0x00c0 */ 0, 0, 1,145, 31, 0, 1,235,131,255,255, 84,224, 3, 4,170,
/* 0x00d0 */ 254, 7, 65,248,192, 3, 95,214,132, 0, 4, 43, 68, 0, 0, 52,
/* 0x00e0 */ 192, 3, 95,214, 4, 68, 64,184,132, 0, 4, 58,192, 3, 95,214,
/* 0x00f0 */ 3, 20, 64, 56, 67, 20, 0, 56,248,255,255,151,162,255,255, 84,
/* 0x0100 */ 33, 0,128, 82, 4, 0, 0, 20, 33, 4, 0, 81,243,255,255,151,
/* 0x0110 */ 33, 0, 1, 26,241,255,255,151, 33, 0, 1, 26,239,255,255,151,
/* 0x0120 */ 67,255,255, 84, 35, 12, 0,113, 1, 0,128, 82, 35, 1, 0, 84,
/* 0x0130 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42, 5,251,255, 52,
/* 0x0140 */ 191, 0, 0,114,165,124, 1, 19,161, 1, 0, 84, 3, 0, 0, 20,
/* 0x0150 */ 226,255,255,151, 66, 1, 0, 84, 33, 0,128, 82,223,255,255,151,
/* 0x0160 */ 226, 0, 0, 84,221,255,255,151, 33, 0, 1, 26,219,255,255,151,
/* 0x0170 */ 163,255,255, 84, 33, 16, 0, 17, 4, 0, 0, 20,215,255,255,151,
/* 0x0180 */ 33, 0, 1, 26, 33, 8, 0, 17,191, 0, 20, 49, 33, 36,129, 26,
/* 0x0190 */ 67, 64, 33,139, 99,240, 95, 56, 67,200,101, 56, 67, 20, 0, 56,
/* 0x01a0 */ 33, 4, 0,113,161,255,255, 84,212,255,255, 23,226, 15,190,169,
/* 0x01b0 */ 254, 11, 0,249, 7, 64, 33,139, 5, 0,128, 18, 4, 0,176, 82,
/* 0x01c0 */ 24, 0, 0, 20,227, 19,193,168, 0, 0, 7,203, 66, 0, 3,203,
/* 0x01d0 */ 130, 0, 0,185,228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139,
/* 0x01e0 */ 32,123, 11,213, 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235,
/* 0x01f0 */ 131,255,255, 84,224, 3, 4,170,254, 7, 65,248,192, 3, 95,214,
/* 0x0200 */ 132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214, 4, 68, 64,184,
/* 0x0210 */ 132, 0, 4, 58,192, 3, 95,214, 3, 20, 64, 56, 67, 20, 0, 56,
/* 0x0220 */ 248,255,255,151,162,255,255, 84, 33, 0,128, 82, 4, 0, 0, 20,
/* 0x0230 */ 33, 4, 0, 81,243,255,255,151, 33, 0, 1, 58,241,255,255,151,
/* 0x0240 */ 33, 0, 1, 58,239,255,255,151, 67,255,255, 84, 35, 12, 0,113,
/* 0x0250 */ 1, 0,128, 82, 35, 1, 0, 84, 5, 20, 64, 56,165, 32, 3, 42,
/* 0x0260 */ 229, 3, 37, 42, 5,251,255, 52,163, 0, 1, 83,165,124, 1, 83,
/* 0x0270 */ 99, 0, 3, 43, 2, 0, 0, 20,226,255,255,151, 33, 0, 1, 58,
/* 0x0280 */ 224,255,255,151, 33, 0, 1, 58,225, 0, 0, 84, 33, 0,128, 82,
/* 0x0290 */ 220,255,255,151, 33, 0, 1, 58,218,255,255,151,163,255,255, 84,
/* 0x02a0 */ 33, 8, 0, 17, 33, 4, 0, 17,191, 0, 20, 49, 33, 52,129, 26,
/* 0x02b0 */ 67, 0, 64, 57, 67,200,101, 56, 67, 20, 0, 56, 33, 4, 0,113,
/* 0x02c0 */ 161,255,255, 84,215,255,255, 23, 1, 64, 33,139,225, 11,190,169,
/* 0x02d0 */ 227,123, 1,169, 5, 0,128, 18, 4, 0,176, 82, 31, 0, 0, 20,
/* 0x02e0 */ 228,123, 65,169,225, 15,194,168, 0, 0, 1,203, 66, 0, 3,203,
/* 0x02f0 */ 130, 0, 0,185,228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139,
/* 0x0300 */ 32,123, 11,213, 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235,
/* 0x0310 */ 131,255,255, 84,224, 3, 4,170,192, 3, 95,214,132, 0, 4, 43,
/* 0x0320 */ 68, 0, 0, 52,192, 3, 95,214, 4, 68, 64,184,132, 0, 4, 58,
/* 0x0330 */ 192, 3, 95,214, 33, 0,128, 82,240, 3, 30,170,248,255,255,151,
/* 0x0340 */ 33, 0, 1, 58,246,255,255,151,163,255,255, 84, 0, 2, 31,214,
/* 0x0350 */ 3, 20, 64, 56, 67, 20, 0, 56,241,255,255,151,162,255,255, 84,
/* 0x0360 */ 245,255,255,151, 35, 12, 0,113, 1, 0,128, 82,163, 0, 0, 84,
/* 0x0370 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42, 37,251,255, 52,
/* 0x0380 */ 231,255,255,151, 33, 0, 1, 58,229,255,255,151, 33, 0, 1, 58,
/* 0x0390 */ 97, 0, 0, 84,232,255,255,151, 33, 8, 0, 17,191, 0, 52, 49,
/* 0x03a0 */ 33, 36,129, 26, 67,200,101, 56, 33, 4, 0,113, 67, 20, 0, 56,
/* 0x03b0 */ 162,255,255, 84,233,255,255, 23,159, 56, 0,113, 1, 0, 0, 84,
/* 0x03c0 */ 1, 64, 33,139, 4, 0,128,210,225, 11,190,169,227,123, 1,169,
/* 0x03d0 */ 228, 19,191,169,224, 3, 0,145,227, 35, 0,145,230, 51, 0,145,
/* 0x03e0 */ 8, 0, 64, 57, 7,192,128, 82, 8,125, 3, 83,231, 32,200, 26,
/* 0x03f0 */ 253, 3, 0,145,231,192, 57, 17,232, 3, 0,145,255, 67, 39,203,
/* 0x0400 */ 100, 16,129,168,127, 0, 8,235,195,255,255, 84,230, 3, 3,170,
/* 0x0410 */ 229, 3, 7, 42,228, 3, 2,170, 34, 8, 0, 81,225, 3, 0,170,
/* 0x0420 */ 39, 20, 64, 56,231, 8, 0, 18,231, 11, 0, 57, 39, 20, 64, 56,
/* 0x0430 */ 232,124, 4, 83,232, 7, 0, 57,231, 12, 0, 18,231, 3, 0, 57,
/* 0x0440 */ 224, 3, 0,145, 17, 0, 0,148,191, 3, 0,145,228,123, 65,169,
/* 0x0450 */ 225, 15,194,168, 0, 0, 1,203, 66, 0, 3,203,130, 0, 0,185,
/* 0x0460 */ 228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139, 32,123, 11,213,
/* 0x0470 */ 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235,131,255,255, 84,
/* 0x0480 */ 224, 3, 4,170,192, 3, 95,214,243, 83,184,169, 39, 0,128, 82,
/* 0x0490 */ 20, 16, 0,145,245, 91, 1,169,247, 99, 2,169,249,107, 3,169,
/* 0x04a0 */ 251,115, 4,169,254, 43, 0,249, 8, 4, 64, 57, 26, 8, 64, 57,
/* 0x04b0 */ 28, 0, 64, 57,127, 0, 0,185,250, 32,218, 26,223, 0, 0,185,
/* 0x04c0 */ 231, 32,200, 26,231, 4, 0, 81,231,111, 0,185, 8, 4, 64, 57,
/* 0x04d0 */ 7, 96,128, 82, 90, 7, 0, 81, 8, 1, 28, 11,232, 32,200, 26,
/* 0x04e0 */ 8,217, 28, 49,224, 0, 0, 84, 7, 0,128,210, 9,128,128, 82,
/* 0x04f0 */ 137,122, 39,120,231, 4, 0,145, 31, 1, 7,107,168,255,255, 84,
/* 0x0500 */ 51, 64, 34,139,127, 2, 1,235, 0, 15, 0, 84,235, 3, 1,170,
/* 0x0510 */ 34, 4, 0,145,103, 85, 64, 56,127, 2, 2,235, 96, 14, 0, 84,
/* 0x0520 */ 72, 20, 64, 56,127, 1, 2,235, 7, 33, 7, 42, 97,255,255, 84,
/* 0x0530 */ 37, 68, 0, 52, 9,176, 41,145, 59, 0,128, 82,233, 63, 0,249,
/* 0x0540 */ 9, 1,128, 82, 41, 1, 28, 75, 10, 0,128, 18,245, 3, 27, 42,
/* 0x0550 */ 25, 0,128, 82, 8, 0,128, 82, 2, 0,128, 82, 16,224,191, 18,
/* 0x0560 */ 17, 0,129, 82,251,107, 0,185,251,115, 0,185,233,119, 0,185,
/* 0x0570 */ 78, 0, 26, 10, 44,111, 28, 83, 95, 1, 16,107,201,125, 64,147,
/* 0x0580 */ 44,193, 44,139,143,249,127,211,232, 0, 0, 84,127, 2, 11,235,
/* 0x0590 */ 192, 10, 0, 84,105, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145,
/* 0x05a0 */ 39, 33, 7, 42,141,122,108,120, 73,125, 11, 83,169,125, 9, 27,
/* 0x05b0 */ 255, 0, 9,107,162, 10, 0, 84,234,211, 65, 57, 63, 27, 0,113,
/* 0x05c0 */ 8, 41,202, 26,234,111, 64,185, 79, 0, 10, 10,239, 33,220, 26,
/* 0x05d0 */ 239, 1, 8, 11, 40, 2, 13, 75,234,117, 30, 83, 79, 1, 15, 75,
/* 0x05e0 */ 173, 21,136, 11,239, 93,120,211,141,122, 44,120,239,217, 28,145,
/* 0x05f0 */ 143, 6, 15,139, 45, 31, 0, 84, 72, 0, 21, 75,146,104,104, 56,
/* 0x0600 */ 40, 0,128, 82, 7, 0, 0, 20,236,121, 42,120, 8,121, 31, 83,
/* 0x0610 */ 233, 3, 14, 42,205, 56, 0, 53, 31,253, 3,113,204, 3, 0, 84,
/* 0x0620 */ 82,122, 31, 83, 63, 1, 16,107, 77, 2, 24, 18, 22,121, 31, 83,
/* 0x0630 */ 170,125, 64,147, 74, 1, 4,145, 74,193, 40,139,232, 0, 0, 84,
/* 0x0640 */ 127, 1, 19,235, 41, 93, 24, 83, 0, 5, 0, 84,108, 1, 64, 57,
/* 0x0650 */ 107, 5, 0,145,135, 33, 7, 42,236,121,106,120, 46,125, 11, 83,
/* 0x0660 */ 55, 2, 12, 75,142,125, 14, 27,152, 21, 76, 75,140, 21,151, 11,
/* 0x0670 */ 255, 0, 14,107, 41, 1, 14, 75,131,252,255, 84,248,121, 42,120,
/* 0x0680 */ 200, 6, 0, 17,231, 0, 14, 75,141,252,255, 53, 31,253, 3,113,
/* 0x0690 */ 45, 27, 0, 84, 8, 29, 0, 83,234, 3, 9, 42,136, 72, 34, 56,
/* 0x06a0 */ 66, 4, 0, 17, 63, 39, 0,113,140, 49, 0, 84, 57, 15, 0, 81,
/* 0x06b0 */ 191, 0, 2,107,232,245,255, 84, 0,224,191, 18, 95, 1, 0,107,
/* 0x06c0 */ 136, 0, 0, 84,127, 2, 11,235, 0, 1, 0, 84,107, 5, 0,145,
/* 0x06d0 */ 97, 1, 1,203, 97, 0, 0,185, 0, 0,128, 82,194, 0, 0,185,
/* 0x06e0 */ 3, 0, 0, 20, 31, 32, 3,213, 32, 0,128, 82,245, 91, 65,169,
/* 0x06f0 */ 247, 99, 66,169,249,107, 67,169,251,115, 68,169,254, 43, 64,249,
/* 0x0700 */ 243, 83,200,168,192, 3, 95,214, 74, 1, 9, 75,173, 21, 77, 75,
/* 0x0710 */ 231, 0, 9, 75,141,122, 44,120, 41,127, 64,147, 95, 1, 16,107,
/* 0x0720 */ 41, 1, 3,145, 45,249,127,211,232, 0, 0, 84,127, 1, 19,235,
/* 0x0730 */ 192,253,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145,
/* 0x0740 */ 7, 33, 7, 42,140,122,105,120, 72,125, 11, 83,136,125, 8, 27,
/* 0x0750 */ 255, 0, 8,107, 98, 25, 0, 84,234,107, 64,185, 63, 31, 0,113,
/* 0x0760 */ 251,115, 64,185,234,115, 0,185, 42, 2, 12, 75,245,107, 0,185,
/* 0x0770 */ 140, 21,138, 11,140,122, 41,120,105, 0,128, 82,249,179,137, 26,
/* 0x0780 */ 9,160, 25,145, 31, 1, 16,107,232, 0, 0, 84,127, 2, 11,235,
/* 0x0790 */ 192,250,255, 84,106, 1, 64, 57, 8, 93, 24, 83,107, 5, 0,145,
/* 0x07a0 */ 71, 33, 7, 42, 44, 1, 64,121, 10,125, 11, 83,138,125, 10, 27,
/* 0x07b0 */ 255, 0, 10,107,226, 30, 0, 84,210,113, 29, 83, 40, 2, 12, 75,
/* 0x07c0 */ 22, 0,128, 82,126, 0,128, 82, 82,126, 64,147,140, 21,136, 11,
/* 0x07d0 */ 82, 10, 0,145, 44, 1, 0,121, 50, 5, 18,139,238, 3, 30, 42,
/* 0x07e0 */ 45, 0,128, 82, 6, 0, 0, 20,232, 1, 0,121,206, 5, 0,113,
/* 0x07f0 */ 173,121, 31, 83,234, 3, 9, 42, 32, 3, 0, 84, 95, 1, 16,107,
/* 0x0800 */ 183,121, 31, 83, 79,198, 45,139,232, 0, 0, 84,127, 2, 11,235,
/* 0x0810 */ 74, 93, 24, 83,160,246,255, 84,104, 1, 64, 57,107, 5, 0,145,
/* 0x0820 */ 7, 33, 7, 42,232, 1, 64,121, 73,125, 11, 83, 44, 2, 8, 75,
/* 0x0830 */ 9,125, 9, 27, 24, 21, 72, 75, 8, 21,140, 11,255, 0, 9,107,
/* 0x0840 */ 74, 1, 9, 75, 35,253,255, 84,248, 1, 0,121,206, 5, 0,113,
/* 0x0850 */ 231, 0, 9, 75,237, 6, 0, 17, 33,253,255, 84, 40, 0,128, 82,
/* 0x0860 */ 63, 15, 0,113, 30, 33,222, 26,222, 2, 30, 75,205, 3, 13, 11,
/* 0x0870 */ 236, 22, 0, 84,191, 13, 0,113,104, 0,128, 82,181,209,136, 26,
/* 0x0880 */ 207, 0,128, 82,181,102, 26, 83, 46, 0,128, 82,181,126, 64,147,
/* 0x0890 */ 181,194, 6,145,181,250,127,211, 7, 0, 0, 20, 31, 32, 3,213,
/* 0x08a0 */ 136,106, 50,120,239, 5, 0,113,206,121, 31, 83,234, 3, 9, 42,
/* 0x08b0 */ 32, 3, 0, 84, 95, 1, 16,107,214,121, 31, 83,178,198, 46,139,
/* 0x08c0 */ 232, 0, 0, 84,127, 2, 11,235, 74, 93, 24, 83,224,240,255, 84,
/* 0x08d0 */ 104, 1, 64, 57,107, 5, 0,145, 7, 33, 7, 42,136,106,114,120,
/* 0x08e0 */ 73,125, 11, 83, 44, 2, 8, 75, 9,125, 9, 27, 23, 21, 72, 75,
/* 0x08f0 */ 8, 21,140, 11,255, 0, 9,107, 74, 1, 9, 75, 35,253,255, 84,
/* 0x0900 */ 151,106, 50,120,239, 5, 0,113,231, 0, 9, 75,206, 6, 0, 17,
/* 0x0910 */ 33,253,255, 84,213, 1, 1, 81,191, 14, 0,113, 45, 17, 0, 84,
/* 0x0920 */ 191, 54, 0,113,168, 2, 0, 18, 8, 1, 31, 50,169,126, 1, 19,
/* 0x0930 */ 44, 32, 0, 84, 47, 5, 0, 81, 9, 86,128,210, 46,193, 53,203,
/* 0x0940 */ 21, 33,207, 26,206, 65, 53,139,142, 6, 14,139,206, 9, 0,209,
/* 0x0950 */ 50, 0,128, 82,247, 3, 18, 42, 8, 0, 0, 20, 31, 32, 3,213,
/* 0x0960 */ 200, 2, 0,121, 82,122, 31, 83,234, 3, 9, 42,239, 5, 0,113,
/* 0x0970 */ 247,122, 31, 83, 96, 14, 0, 84, 95, 1, 16,107, 88,122, 31, 83,
/* 0x0980 */ 214,197, 50,139,232, 0, 0, 84,127, 2, 11,235, 74, 93, 24, 83,
/* 0x0990 */ 192,234,255, 84,104, 1, 64, 57,107, 5, 0,145, 7, 33, 7, 42,
/* 0x09a0 */ 200, 2, 64,121, 73,125, 11, 83, 44, 2, 8, 75, 9,125, 9, 27,
/* 0x09b0 */ 30, 21, 72, 75, 8, 21,140, 11,255, 0, 9,107, 74, 1, 9, 75,
/* 0x09c0 */ 3,253,255, 84,222, 2, 0,121,231, 0, 9, 75,181, 2, 23, 42,
/* 0x09d0 */ 18, 7, 0, 17,230,255,255, 23, 40, 0,128, 82, 6, 0, 0, 20,
/* 0x09e0 */ 8,121, 31, 83,234,121, 46,120, 31,253, 3,113,233, 3, 12, 42,
/* 0x09f0 */ 44, 3, 0, 84, 63, 1, 16,107, 18,121, 31, 83, 14,125, 64,147,
/* 0x0a00 */ 232, 0, 0, 84,127, 2, 11,235, 41, 93, 24, 83,224,230,255, 84,
/* 0x0a10 */ 106, 1, 64, 57,107, 5, 0,145, 71, 33, 7, 42,234,121,110,120,
/* 0x0a20 */ 44,125, 11, 83, 45, 2, 10, 75, 76,125, 12, 27, 86, 21, 74, 75,
/* 0x0a30 */ 74, 21,141, 11,255, 0, 12,107, 41, 1, 12, 75, 35,253,255, 84,
/* 0x0a40 */ 72, 6, 0, 17,246,121, 46,120, 31,253, 3,113,231, 0, 12, 75,
/* 0x0a50 */ 45,253,255, 84, 8, 29, 0, 83, 63, 15, 0,113,136, 72, 34, 56,
/* 0x0a60 */ 234, 3, 9, 42, 66, 4, 0, 17,236,225,255, 84,191, 0, 2,107,
/* 0x0a70 */ 25, 0,128, 82,232,215,255, 84, 16,255,255, 23, 31, 32, 3,213,
/* 0x0a80 */ 74, 1, 8, 75,140, 21, 76, 75, 95, 1, 16,107,140,122, 41,120,
/* 0x0a90 */ 231, 0, 8, 75,169, 97, 0,145,232, 0, 0, 84,127, 2, 11,235,
/* 0x0aa0 */ 64,226,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145,
/* 0x0ab0 */ 7, 33, 7, 42,140,106,105,120, 72,125, 11, 83,136,125, 8, 27,
/* 0x0ac0 */ 255, 0, 8,107,226, 9, 0, 84, 42, 2, 12, 75, 31, 1, 16,107,
/* 0x0ad0 */ 239,129, 7,145,140, 21,138, 11,140,106, 41,120,232, 0, 0, 84,
/* 0x0ae0 */ 127, 2, 11,235, 32,224,255, 84,105, 1, 64, 57, 8, 93, 24, 83,
/* 0x0af0 */ 107, 5, 0,145, 39, 33, 7, 42,137,106,111,120, 10,125, 11, 83,
/* 0x0b00 */ 42,125, 10, 27,255, 0, 10,107,130, 16, 0, 84, 40, 2, 9, 75,
/* 0x0b10 */ 41, 21,136, 11,137,106, 47,120,130,222,255, 52, 72, 0, 21, 75,
/* 0x0b20 */ 63, 31, 0,113, 41, 1,128, 82,108, 1,128, 82, 57,177,140, 26,
/* 0x0b30 */ 136,104,104, 56,136, 72, 34, 56, 66, 4, 0, 17,221,254,255, 23,
/* 0x0b40 */ 181, 6, 0, 49,160,219,255, 84, 57, 31, 0, 17,191, 2, 2,107,
/* 0x0b50 */ 173, 9, 0, 17,168,220,255, 84,233, 3, 2, 42, 72, 0, 21, 75,
/* 0x0b60 */ 173, 5, 0, 81, 66, 4, 0, 17,191, 1, 31,107,160, 16, 66,122,
/* 0x0b70 */ 136,104,104, 56,136, 72, 41, 56,233, 3, 2, 42, 8,255,255, 84,
/* 0x0b80 */ 191, 0, 2,107,104,207,255, 84,204,254,255, 23, 31, 32, 3,213,
/* 0x0b90 */ 8, 1, 10, 75,140, 21, 76, 75, 31, 1, 16,107, 44, 1, 0,121,
/* 0x0ba0 */ 231, 0, 10, 75,232, 0, 0, 84,127, 2, 11,235,224,217,255, 84,
/* 0x0bb0 */ 106, 1, 64, 57, 8, 93, 24, 83,107, 5, 0,145, 71, 33, 7, 42,
/* 0x0bc0 */ 44, 5, 64,121, 10,125, 11, 83,138,125, 10, 27,255, 0, 10,107,
/* 0x0bd0 */ 66, 7, 0, 84,210,113, 29, 83, 40, 2, 12, 75, 22, 1,128, 82,
/* 0x0be0 */ 126, 0,128, 82, 82,126, 64,147,136, 21,136, 11, 82, 10, 2,145,
/* 0x0bf0 */ 40, 5, 0,121, 50, 5, 18,139,249,254,255, 23, 31, 32, 3,213,
/* 0x0c00 */ 74, 1, 8, 75,231, 0, 8, 75, 95, 1, 16,107,136, 21, 76, 75,
/* 0x0c10 */ 136,106, 41,120,172,193, 0,145,232, 0, 0, 84,127, 2, 11,235,
/* 0x0c20 */ 64,214,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145,
/* 0x0c30 */ 7, 33, 7, 42,137,106,108,120, 72,125, 11, 83, 40,125, 8, 27,
/* 0x0c40 */ 255, 0, 8,107, 35, 5, 0, 84, 74, 1, 8, 75, 41, 21, 73, 75,
/* 0x0c50 */ 95, 1, 16,107,137,106, 44,120,231, 0, 8, 75,173, 33, 1,145,
/* 0x0c60 */ 232, 0, 0, 84,127, 2, 11,235, 0,212,255, 84,104, 1, 64, 57,
/* 0x0c70 */ 74, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42,137,106,109,120,
/* 0x0c80 */ 72,125, 11, 83, 40,125, 8, 27,255, 0, 8,107,226, 7, 0, 84,
/* 0x0c90 */ 234, 3, 21, 42,236,107, 64,185,234,107, 0,185, 42, 2, 9, 75,
/* 0x0ca0 */ 245,115, 64,185, 41, 21,138, 11,236,115, 0,185,137,106, 45,120,
/* 0x0cb0 */ 20, 0, 0, 20, 31, 32, 3,213,231, 0, 10, 75, 50, 17, 8,145,
/* 0x0cc0 */ 10, 1, 10, 75, 22, 2,128, 82,136, 21, 76, 75, 30, 1,128, 82,
/* 0x0cd0 */ 40, 5, 0,121,194,254,255, 23,191, 0, 2,107, 57, 27, 0, 81,
/* 0x0ce0 */ 136,196,255, 84,117,254,255, 23,234, 3, 21, 42,245,107, 64,185,
/* 0x0cf0 */ 234,107, 0,185, 42, 2, 9, 75, 41, 21,138, 11,137,106, 44,120,
/* 0x0d00 */ 63, 31, 0,113, 10, 1,128, 82,108, 1,128, 82,233, 63, 64,249,
/* 0x0d10 */ 89,177,140, 26,156,254,255, 23, 41, 21, 73, 75, 8, 1, 10, 75,
/* 0x0d20 */ 137,106, 47,120,231, 0, 10, 75,246,255,255, 23,233, 3, 14, 42,
/* 0x0d30 */ 87,254,255, 23, 41, 21, 0, 81, 95, 1, 16,107, 8,121, 31, 83,
/* 0x0d40 */ 232, 0, 0, 84,127, 2, 11,235, 74, 93, 24, 83,224,204,255, 84,
/* 0x0d50 */ 108, 1, 64, 57,107, 5, 0,145,135, 33, 7, 42, 74,125, 1, 83,
/* 0x0d60 */ 255, 0, 10,107, 99, 0, 0, 84,231, 0, 10, 75, 8, 1, 0, 50,
/* 0x0d70 */ 41, 5, 0,113, 33,254,255, 84, 21,109, 28, 83, 14, 32, 25,145,
/* 0x0d80 */ 143, 0,128, 82,243,254,255, 23, 41, 21, 73, 75,137,106, 45,120,
/* 0x0d90 */ 233,107, 64,185,236, 3, 21, 42,231, 0, 8, 75,245, 3, 27, 42,
/* 0x0da0 */ 72, 1, 8, 75,251,115, 64,185,236,107, 0,185,233,115, 0,185,
/* 0x0db0 */ 212,255,255, 23, 2, 0,128, 82,227, 19,189,169,229, 27, 1,169,
/* 0x0dc0 */ 254, 19, 0,249,232, 3, 1,170, 45, 64, 34,139,233, 3, 4,170,
/* 0x0dd0 */ 142, 64, 37,139, 11, 16, 0,145, 6, 0, 64, 57, 5, 4, 64, 57,
/* 0x0de0 */ 4, 8, 64, 57,174, 0, 6, 11, 7, 0,128, 18,229, 32,197, 26,
/* 0x0df0 */ 229, 3, 37, 42,228, 32,196, 26,228, 3, 36, 42, 35, 0,128, 82,
/* 0x0e00 */ 34, 0,128, 82, 33, 0,128, 82, 32, 0,128, 82, 6, 0,128, 82,
/* 0x0e10 */ 230, 31, 0,185, 2, 96,128, 82,192,230,128, 82, 66, 32,206, 26,
/* 0x0e20 */ 66, 0, 0, 11, 0,128,128,210,225, 3, 11,170, 0, 64, 0,170,
/* 0x0e30 */ 0,128, 0,170, 32,132, 0,248, 66, 16, 0,113,204,255,255, 84,
/* 0x0e40 */ 0, 21, 0,145,231, 0, 0,148, 31, 0, 8,235,193,255,255, 84,
/* 0x0e50 */ 227, 67, 66,248,226, 19, 64,185, 36, 1, 3,203,128, 0, 2, 10,
/* 0x0e60 */ 224, 47, 0,185, 0, 16, 6, 11, 97, 1, 0,145,225, 0, 0,148,
/* 0x0e70 */ 129, 5, 0, 84,227, 23, 64,185,226, 27, 64,185, 99, 0, 4, 10,
/* 0x0e80 */ 224,115, 64, 57, 99, 32,194, 26,226, 3, 2, 75, 66, 32, 0, 17,
/* 0x0e90 */ 2, 36,194, 26, 99, 0, 2, 11,106,177, 57,145, 99, 4, 3, 11,
/* 0x0ea0 */ 227, 3, 3, 42, 32, 0,128, 82, 74, 37, 3,139,223, 28, 0,113,
/* 0x0eb0 */ 3, 2, 0, 84,227,125, 64,147,227, 3, 3,203, 37,105, 99, 56,
/* 0x0ec0 */ 165,120, 31, 83, 65, 1, 8,145,164, 0, 24, 18,227, 3, 4, 42,
/* 0x0ed0 */ 33, 4, 3,139,201, 0, 0,148, 3, 0, 0, 18,127, 32, 68,107,
/* 0x0ee0 */ 193, 0, 0, 84, 31, 0, 4,113,195,254,255, 84, 5, 0, 0, 20,
/* 0x0ef0 */ 225, 3, 10,170,193, 0, 0,148, 31, 0, 4,113,163,255,255, 84,
/* 0x0f00 */ 98, 0,128, 82,195, 0,128, 82,223, 40, 0,113, 67, 48,131, 26,
/* 0x0f10 */ 223, 16, 0,113,195, 48,131, 26,198, 0, 3, 75, 34, 0, 0, 20,
/* 0x0f20 */ 97, 1, 6,145,178, 0, 0,148,129, 1, 0, 84,227, 11, 64,185,
/* 0x0f30 */ 226, 7, 64,185,227, 15, 0,185,226, 11, 0,185,239, 7, 0,185,
/* 0x0f40 */ 3, 0,128, 82,223, 28, 0,113,102, 0,128, 82,102, 48,134, 26,
/* 0x0f50 */ 106,145, 25,145, 42, 0, 0, 20, 97, 97, 6,145,164, 0, 0,148,
/* 0x0f60 */ 97, 2, 0, 84,227, 47, 64,185, 97,129, 7,145, 96, 16, 6, 11,
/* 0x0f70 */ 160, 0, 0,148,161, 3, 0, 84, 35, 1,128, 82,223, 28, 0,113,
/* 0x0f80 */ 102, 1,128, 82,102, 48,134, 26,227, 67, 66,248, 36, 1, 3,203,
/* 0x0f90 */ 159, 0, 15,107,131, 17, 0, 84,227,125, 64,147,227, 3, 3,203,
/* 0x0fa0 */ 32,105, 99, 56, 32, 21, 0, 56,121, 0, 0, 20, 97,193, 6,145,
/* 0x0fb0 */ 143, 0, 0,148,228, 7, 64,185, 64, 1, 0, 84, 97, 33, 7,145,
/* 0x0fc0 */ 139, 0, 0,148,228, 11, 64,185,128, 0, 0, 84,227, 11, 64,185,
/* 0x0fd0 */ 228, 15, 64,185,227, 15, 0,185,227, 7, 64,185,227, 11, 0,185,
/* 0x0fe0 */ 239, 7, 0,185,239, 3, 4, 42, 3, 1,128, 82,223, 28, 0,113,
/* 0x0ff0 */ 102, 1,128, 82,102, 48,134, 26,106,161, 41,145, 65, 1, 0,145,
/* 0x1000 */ 125, 0, 0,148, 1, 1, 0, 84,227, 47, 64,185, 69, 17, 0,145,
/* 0x1010 */ 227, 3, 3, 42, 2, 0,128, 82,165, 16, 3,139, 4, 1,128, 82,
/* 0x1020 */ 14, 0, 0, 20, 65, 9, 0,145,115, 0, 0,148, 1, 1, 0, 84,
/* 0x1030 */ 227, 47, 64,185, 69, 17, 4,145,227, 3, 3, 42, 2, 1,128, 82,
/* 0x1040 */ 165, 16, 3,139, 4, 1,128, 82, 4, 0, 0, 20, 69, 17, 8,145,
/* 0x1050 */ 2, 2,128, 82, 4, 32,128, 82,226, 55, 0,185, 32, 0,128, 82,
/* 0x1060 */ 225, 3, 5,170,101, 0, 0,148, 3, 0, 4,107,163,255,255, 84,
/* 0x1070 */ 229, 55, 64,185,165, 0, 3, 11,229, 55, 0,185,223, 16, 0,113,
/* 0x1080 */ 194, 6, 0, 84,198, 28, 0, 17, 99, 0,128, 82,191, 16, 0,113,
/* 0x1090 */ 101, 32,133, 26,227, 3, 5, 42,101, 29, 3,139,165,128, 13,145,
/* 0x10a0 */ 32, 0,128, 82, 4, 8,128, 82,225, 3, 5,170, 83, 0, 0,148,
/* 0x10b0 */ 3, 0, 4,107,163,255,255, 84,227, 47, 0,185,127, 16, 0,113,
/* 0x10c0 */ 99, 4, 0, 84,100,124, 1, 83,132, 4, 0, 81,111, 0, 0, 18,
/* 0x10d0 */ 239, 1, 31, 50,127, 56, 0,113,226, 0, 0, 84,239, 33,196, 26,
/* 0x10e0 */ 106,121, 21,145,227, 1, 3, 75,227, 3, 3, 42, 74, 5, 3,139,
/* 0x10f0 */ 12, 0, 0, 20,132, 16, 0, 81, 53, 0, 0,148,231,124, 1, 83,
/* 0x1100 */ 131, 1, 7,107,108, 32,140, 26,239, 1, 15, 26,132, 4, 0,113,
/* 0x1110 */ 65,255,255, 84,106, 17, 25,145,239,109, 28, 83,132, 0,128, 82,
/* 0x1120 */ 37, 0,128, 82, 32, 0,128, 82,225, 3, 10,170, 51, 0, 0,148,
/* 0x1130 */ 31, 0, 0,114, 64, 0, 0, 84,239, 1, 5, 42,165,120, 31, 83,
/* 0x1140 */ 132, 4, 0,113, 33,255,255, 84, 2, 0, 0, 20,239, 47, 64,185,
/* 0x1150 */ 239, 5, 0, 49,229, 55, 64,185,227, 67, 66,248,165, 8, 0, 17,
/* 0x1160 */ 35, 1, 3,203,255, 1, 3,107,232, 2, 0, 84,227,125, 64,147,
/* 0x1170 */ 227, 3, 3,203, 32,105, 99, 56, 32, 21, 0, 56, 63, 1, 14,235,
/* 0x1180 */ 194, 0, 0, 84,165, 4, 0,113, 97,255,255, 84,224,115, 0, 57,
/* 0x1190 */ 63, 1, 14,235,227,229,255, 84, 13, 0, 0,148, 0, 0,128, 82,
/* 0x11a0 */ 226, 19, 64,249, 3, 1, 2,203,226, 31, 64,249, 67, 0, 0,185,
/* 0x11b0 */ 226, 67, 66,248, 35, 1, 2,203,226, 55, 64,249, 67, 0, 0,185,
/* 0x11c0 */ 255,243, 0,145, 32, 0,128, 82,246,255,255, 23,227,124, 24, 83,
/* 0x11d0 */ 195, 0, 0, 53, 31, 1, 13,235,231, 92, 24, 83, 66,255,255, 84,
/* 0x11e0 */ 3, 21, 64, 56,108, 32, 12, 42,192, 3, 95,214,224, 3, 6, 42,
/* 0x11f0 */ 33, 68, 32,139, 0, 0,128, 82, 33, 68, 32,139,227,124, 24, 83,
/* 0x1200 */ 241, 3, 30,170, 94, 0, 0, 16, 99,254,255, 52, 35, 0, 64,121,
/* 0x1210 */ 226,124, 11, 83, 98,124, 2, 27,159, 1, 2,107, 2, 1, 0, 84,
/* 0x1220 */ 2, 0,129, 82,231, 3, 2, 42, 66, 0, 3, 75, 0, 0, 0, 58,
/* 0x1230 */ 99, 20, 66, 11, 35, 0, 0,121, 32, 2, 95,214,140, 1, 2, 75,
/* 0x1240 */ 231, 0, 2, 75, 99, 20, 67, 75, 0, 0, 0, 58, 35, 0, 0,121,
/* 0x1250 */ 32, 2, 95,214,195, 3, 64,185,193, 7, 64,185,194, 67, 33,139,
/* 0x1260 */ 66, 48, 0,145,192, 67, 35,139, 0, 0, 3,145,228, 3, 1, 42,
/* 0x1270 */ 73,204, 95,184,132, 16, 0, 81, 9,204, 31,184,164,255,255, 53,
/* 0x1280 */ 196, 11, 64,185,222, 3, 2,145,227, 15, 31,184,227, 3, 0,145,
/* 0x1290 */ 226, 3, 30,170,171, 32, 1,209,234, 3, 30,170,160, 0, 63,214,
/* 0x12a0 */ 64, 1, 31,214,229, 3, 30,170,235,255,255,151,102,105,108,101,
/* 0x12b0 */ 32,102,111,114,109, 97,116, 32,101,108,102, 54, 52, 45,108,105,
/* 0x12c0 */ 116,116,108,101, 97, 97,114, 99,104, 54, 52, 10, 10, 83,101, 99,
/* 0x12d0 */ 116,105,111,110,115, 58, 10, 73,100,120, 32, 78, 97,109,101, 32,
/* 0x12e0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,101, 32, 32, 32,
/* 0x12f0 */ 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1300 */ 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1310 */ 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,111,102,102, 32,
/* 0x1320 */ 32, 65,108,103,110, 32, 32, 70,108, 97,103,115, 10, 32, 32, 48,
/* 0x1330 */ 32, 77, 65, 67, 72, 77, 65, 73, 78, 88, 32, 32, 32, 32, 32, 48,
/* 0x1340 */ 48, 48, 48, 48, 48, 52, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x1350 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x1360 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48,
/* 0x1370 */ 48, 48, 48, 52, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78,
/* 0x1380 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69,
/* 0x1390 */ 65, 68, 79, 78, 76, 89, 10, 32, 32, 49, 32, 78, 82, 86, 95, 72,
/* 0x13a0 */ 69, 65, 68, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x13b0 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x13c0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x13d0 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 56, 52, 32,
/* 0x13e0 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44,
/* 0x13f0 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 50, 32, 78, 82,
/* 0x1400 */ 86, 50, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48,
/* 0x1410 */ 48, 49, 50, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1420 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1430 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x1440 */ 56, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x1450 */ 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 51,
/* 0x1460 */ 32, 78, 82, 86, 50, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48,
/* 0x1470 */ 48, 48, 48, 48, 49, 49, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x1480 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x1490 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48,
/* 0x14a0 */ 48, 48, 49, 97, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78,
/* 0x14b0 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10,
/* 0x14c0 */ 32, 32, 52, 32, 78, 82, 86, 50, 66, 32, 32, 32, 32, 32, 32, 32,
/* 0x14d0 */ 32, 32, 48, 48, 48, 48, 48, 48,102, 48, 32, 32, 48, 48, 48, 48,
/* 0x14e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x14f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x1500 */ 48, 48, 48, 48, 48, 50, 99, 56, 32, 32, 50, 42, 42, 48, 32, 32,
/* 0x1510 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78,
/* 0x1520 */ 76, 89, 10, 32, 32, 53, 32, 78, 82, 86, 95, 84, 65, 73, 76, 32,
/* 0x1530 */ 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x1540 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1550 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1560 */ 48, 32, 32, 48, 48, 48, 48, 48, 51, 98, 56, 32, 32, 50, 42, 42,
/* 0x1570 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65,
/* 0x1580 */ 68, 79, 78, 76, 89, 10, 32, 32, 54, 32, 76, 90, 77, 65, 95, 69,
/* 0x1590 */ 76, 70, 48, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,100, 48,
/* 0x15a0 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x15b0 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x15c0 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 51, 98, 56, 32, 32,
/* 0x15d0 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32,
/* 0x15e0 */ 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10,
/* 0x15f0 */ 32, 32, 55, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 32, 32,
/* 0x1600 */ 32, 32, 48, 48, 48, 48, 48, 57, 51, 48, 32, 32, 48, 48, 48, 48,
/* 0x1610 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x1620 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x1630 */ 48, 48, 48, 48, 48, 52, 56, 56, 32, 32, 50, 42, 42, 48, 32, 32,
/* 0x1640 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78,
/* 0x1650 */ 76, 89, 10, 32, 32, 56, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49,
/* 0x1660 */ 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 52, 57, 99, 32, 32, 48,
/* 0x1670 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1680 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1690 */ 48, 32, 32, 48, 48, 48, 48, 48,100, 98, 56, 32, 32, 50, 42, 42,
/* 0x16a0 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65,
/* 0x16b0 */ 68, 79, 78, 76, 89, 10, 32, 32, 57, 32, 76, 90, 77, 65, 95, 68,
/* 0x16c0 */ 69, 67, 51, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x16d0 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x16e0 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x16f0 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 53, 52, 32, 32,
/* 0x1700 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32,
/* 0x1710 */ 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 48, 32, 77, 65, 67,
/* 0x1720 */ 72, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48,
/* 0x1730 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1740 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1750 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 53,
/* 0x1760 */ 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x1770 */ 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 49, 32,
/* 0x1780 */ 77, 65, 67, 72, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 48, 48,
/* 0x1790 */ 48, 48, 48, 48, 53, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x17a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x17b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48,
/* 0x17c0 */ 49, 50, 53, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84,
/* 0x17d0 */ 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 83,
/* 0x17e0 */ 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48,
/* 0x17f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32,
/* 0x1800 */ 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48,
/* 0x1810 */ 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1820 */ 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10, 48, 48, 48,
/* 0x1830 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32,
/* 0x1840 */ 32, 32, 32,100, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, 9,
/* 0x1850 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1860 */ 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48,
/* 0x1870 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x1880 */ 32,100, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 88, 9, 48, 48,
/* 0x1890 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 77,
/* 0x18a0 */ 65, 67, 72, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x18b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100,
/* 0x18c0 */ 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 9, 48, 48, 48, 48, 48,
/* 0x18d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95,
/* 0x18e0 */ 72, 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x18f0 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82,
/* 0x1900 */ 86, 50, 69, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1910 */ 48, 48, 48, 48, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48,
/* 0x1920 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x1930 */ 32,100, 32, 32, 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48,
/* 0x1940 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 68,
/* 0x1950 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1960 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 66, 9,
/* 0x1970 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1980 */ 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1990 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x19a0 */ 78, 82, 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, 48, 48, 48, 48,
/* 0x19b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 84, 65,
/* 0x19c0 */ 73, 76, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x19d0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x19e0 */ 95, 69, 76, 70, 48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x19f0 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 69, 76, 70,
/* 0x1a00 */ 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a10 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x1a20 */ 95, 68, 69, 67, 50, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a30 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x1a40 */ 50, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a50 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x1a60 */ 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a70 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x1a80 */ 49, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a90 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 77, 65, 67, 72,
/* 0x1aa0 */ 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ab0 */ 48, 48, 48, 48, 48, 48, 32, 77, 65, 67, 72, 77, 65, 73, 78, 89,
/* 0x1ac0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ad0 */ 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 77, 65, 67, 72, 77, 65,
/* 0x1ae0 */ 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1af0 */ 48, 48, 48, 48, 32, 95,115,116, 97,114,116, 10, 48, 48, 48, 48,
/* 0x1b00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32,
/* 0x1b10 */ 32, 32, 32, 70, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48,
/* 0x1b20 */ 48, 48, 48, 48, 48, 48, 48, 48, 49, 50, 56, 32,117, 99,108, 95,
/* 0x1b30 */ 110,114,118, 50,101, 95,100,101, 99,111,109,112,114,101,115,115,
/* 0x1b40 */ 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b50 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86,
/* 0x1b60 */ 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b70 */ 49, 49, 99, 32,117, 99,108, 95,110,114,118, 50,100, 95,100,101,
/* 0x1b80 */ 99,111,109,112,114,101,115,115, 95, 51, 50, 10, 48, 48, 48, 48,
/* 0x1b90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32,
/* 0x1ba0 */ 32, 32, 32, 70, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, 48,
/* 0x1bb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48,102, 48, 32,117, 99,108, 95,
/* 0x1bc0 */ 110,114,118, 50, 98, 95,100,101, 99,111,109,112,114,101,115,115,
/* 0x1bd0 */ 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1be0 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77,
/* 0x1bf0 */ 65, 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c00 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,122,109, 97, 68,101, 99,
/* 0x1c10 */ 111,100,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c20 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 77, 65, 67,
/* 0x1c30 */ 72, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c40 */ 48, 48, 48, 48, 48, 48, 48, 32,101,110,100, 95,100,101, 99,111,
/* 0x1c50 */ 109,112,114,101,115,115, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73,
/* 0x1c60 */ 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91,
/* 0x1c70 */ 77, 65, 67, 72, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83,
/* 0x1c80 */ 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80,
/* 0x1c90 */ 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86,
/* 0x1ca0 */ 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1cb0 */ 48, 48, 48, 52, 48, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95,
/* 0x1cc0 */ 67, 65, 76, 76, 50, 54, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78,
/* 0x1cd0 */ 90, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ce0 */ 48, 48, 53, 48, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78,
/* 0x1cf0 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 76, 90,
/* 0x1d00 */ 77, 65, 95, 69, 76, 70, 48, 48, 93, 58, 10, 79, 70, 70, 83, 69,
/* 0x1d10 */ 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69,
/* 0x1d20 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65,
/* 0x1d30 */ 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d40 */ 48, 48, 48, 52, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 67,
/* 0x1d50 */ 79, 78, 68, 66, 82, 49, 57, 32, 32, 76, 90, 77, 65, 95, 68, 69,
/* 0x1d60 */ 67, 51, 48, 10
};

View File

@ -1,5 +1,5 @@
/* arm64-darwin.macho-fold.h
created from arm64-darwin.macho-fold.bin, 1960 (0x7a8) bytes
created from arm64-darwin.macho-fold.bin, 1920 (0x780) bytes
This file is part of the UPX executable compressor.
@ -31,14 +31,14 @@
*/
#define STUB_ARM64_DARWIN_MACHO_FOLD_SIZE 1960
#define STUB_ARM64_DARWIN_MACHO_FOLD_ADLER32 0xe297dee4
#define STUB_ARM64_DARWIN_MACHO_FOLD_CRC32 0xa720f497
#define STUB_ARM64_DARWIN_MACHO_FOLD_SIZE 1920
#define STUB_ARM64_DARWIN_MACHO_FOLD_ADLER32 0x2900c991
#define STUB_ARM64_DARWIN_MACHO_FOLD_CRC32 0xcc0bdf2e
unsigned char stub_arm64_darwin_macho_fold[1960] = {
unsigned char stub_arm64_darwin_macho_fold[1920] = {
/* 0x0000 */ 97, 1, 64,249,231, 3, 4,145, 96, 65, 33,203, 3, 24, 64,185,
/* 0x0010 */ 9, 0,132, 82,127, 0, 9,107, 99,128,137, 26,255, 67, 35,203,
/* 0x0020 */ 226, 3, 0,145,101, 2, 0, 16, 54, 1, 0,148, 30,120, 64,249,
/* 0x0020 */ 226, 3, 0,145,101, 2, 0, 16, 44, 1, 0,148, 30,120, 64,249,
/* 0x0030 */ 252,119, 78,169,250,111, 77,169,248,103, 76,169,246, 95, 75,169,
/* 0x0040 */ 244, 87, 74,169,242, 79, 73,169,240, 71, 72,169,238, 63, 71,169,
/* 0x0050 */ 236, 55, 70,169,234, 47, 69,169,232, 39, 68,169,230, 31, 67,169,
@ -48,115 +48,112 @@ unsigned char stub_arm64_darwin_macho_fold[1960] = {
/* 0x0090 */ 67,124, 26, 83,127,148, 0,113,193, 0, 0, 84, 67, 20, 6, 18,
/* 0x00a0 */ 66, 0, 1, 75, 66,100, 0, 18, 66, 0, 3, 42, 2, 88, 33,184,
/* 0x00b0 */ 63, 0, 0,113,161,254,255, 84,192, 3, 95,214,192, 3, 95,214,
/* 0x00c0 */ 40, 0,128, 82, 0, 16, 32,212,192, 3, 95,214,104, 0,128, 82,
/* 0x00d0 */ 0, 16, 32,212,192, 3, 95,214,192, 3, 95,214,136, 0,128, 82,
/* 0x00e0 */ 0, 16, 32,212,192, 3, 95,214,192, 3, 95,214,168, 0,128, 82,
/* 0x00f0 */ 0, 16, 32,212,192, 3, 95,214,192, 3, 95,214,200, 0,128, 82,
/* 0x0100 */ 0, 16, 32,212,192, 3, 95,214,192, 3, 95,214,168, 5,128, 82,
/* 0x0110 */ 0, 16, 32,212,192, 3, 95,214,192, 3, 95,214, 40, 9,128, 82,
/* 0x0120 */ 0, 16, 32,212,192, 3, 95,214,192, 3, 95,214, 72, 9,128, 82,
/* 0x0130 */ 0, 16, 32,212,192, 3, 95,214,192, 3, 95,214,168, 24,128, 82,
/* 0x0140 */ 0, 16, 32,212,192, 3, 95,214,192, 3, 95,214, 40, 19,128, 82,
/* 0x0150 */ 0, 16, 32,212,192, 3, 95,214,192, 3, 95,214,233, 31,128, 82,
/* 0x0160 */ 41, 29, 16, 50, 6, 0, 0, 20, 2, 0, 64,185, 35, 1, 2, 10,
/* 0x0170 */ 34, 97,194, 10, 66, 32,195, 42, 2, 68, 0,184, 33, 16, 0,113,
/* 0x0180 */ 74,255,255, 84,192, 3, 95,214,253,123,191,169, 3, 0,128,210,
/* 0x0190 */ 253, 3, 0,145, 5, 0, 64,249, 4, 4, 64,249,191, 0, 2,235,
/* 0x01a0 */ 98, 0, 0, 84,224, 15,128, 82,198,255,255,151,127, 0, 2,235,
/* 0x01b0 */ 160, 0, 0, 84,133,104, 99, 56, 37,104, 35, 56, 99, 4, 0,145,
/* 0x01c0 */ 251,255,255, 23, 1, 4, 64,249, 33, 0, 3,139, 1, 4, 0,249,
/* 0x01d0 */ 1, 0, 64,249, 35, 0, 3,203, 3, 0, 0,249,253,123,193,168,
/* 0x01e0 */ 192, 3, 95,214,253,123,187,169,253, 3, 0,145,243, 83, 1,169,
/* 0x01f0 */ 245, 91, 2,169,244, 3, 0,170,243, 3, 1,170,246, 3, 2,170,
/* 0x0200 */ 245, 3, 3,170, 96, 2, 64,249,224, 7, 0,180,224, 3, 20,170,
/* 0x0210 */ 130, 1,128,210,161, 3, 1,145,220,255,255,151,160, 67, 64,185,
/* 0x0220 */ 162, 71, 64,185, 0, 1, 0, 53,160, 10,138, 82, 0, 43,164,114,
/* 0x0230 */ 95, 0, 0,107,225, 0, 0, 84,128, 2, 64,249, 64, 6, 0,180,
/* 0x0240 */ 4, 0, 0, 20, 98, 0, 0, 52, 95, 0, 0,107,105, 0, 0, 84,
/* 0x0250 */ 224, 15,128, 82,155,255,255,151, 97, 2, 64,249, 63, 64, 32,235,
/* 0x0260 */ 131,255,255, 84, 95, 0, 0,107, 98, 3, 0, 84,160, 63, 0,185,
/* 0x0270 */ 225, 3, 2, 42,128, 6, 64,249,163,243, 0,145, 98, 6, 64,249,
/* 0x0280 */ 164, 35, 65, 57,192, 2, 63,214, 64,254,255, 53,161, 63, 64,185,
/* 0x0290 */ 160, 67, 64,185, 63, 0, 0,107,193,253,255, 84,163, 39, 65, 57,
/* 0x02a0 */ 181, 0, 0,180,131, 0, 0, 52, 96, 6, 64,249,162, 43, 65, 57,
/* 0x02b0 */ 160, 2, 63,214,163, 71, 64,185,129, 6, 64,249,128, 2, 64,249,
/* 0x02c0 */ 33, 0, 3,139,129, 6, 0,249, 0, 0, 3,203,128, 2, 0,249,
/* 0x02d0 */ 5, 0, 0, 20, 97, 6, 64,249,224, 3, 20,170,226, 3, 2, 42,
/* 0x02e0 */ 170,255,255,151,163, 67, 64,185, 97, 6, 64,249, 96, 2, 64,249,
/* 0x02f0 */ 33, 0, 3,139, 97, 6, 0,249, 0, 0, 3,203, 96, 2, 0,249,
/* 0x0300 */ 193,255,255, 23,243, 83, 65,169,245, 91, 66,169,253,123,197,168,
/* 0x0310 */ 192, 3, 95,214,253,123,182,169,253, 3, 0,145,232, 39, 6,109,
/* 0x0320 */ 234, 59, 0,253, 40, 0, 39, 30,169, 0,103,158,202, 0,103,158,
/* 0x0330 */ 247, 99, 3,169,249,107, 4,169,243, 83, 1,169,245, 91, 2,169,
/* 0x0340 */ 251,115, 5,169,249, 3, 0,170,245, 3, 2,170,250, 3, 3, 42,
/* 0x0350 */ 252, 3, 4,170, 20,112, 0,145, 24, 0,128, 82, 23, 0,128,210,
/* 0x0360 */ 32, 19, 64,185, 31, 3, 0,107,130, 11, 0, 84,128, 2, 64,185,
/* 0x0370 */ 31,100, 0,113, 33, 9, 0, 84,150, 18, 64,249,246, 8, 0,180,
/* 0x0380 */ 147, 14, 64,249,128, 26, 64,249,179, 79, 0,249,118, 2, 22,139,
/* 0x0390 */ 123,206,116,146,115, 46, 64,146,160, 75, 0,249,115, 2, 0,171,
/* 0x03a0 */ 96, 9, 0, 84, 31, 0, 31,235, 67, 2,130, 82, 68, 19,159, 90,
/* 0x03b0 */ 181, 0, 0,181, 31, 0, 31,235, 65, 2,128, 82, 64, 2,130, 82,
/* 0x03c0 */ 3, 0,129, 26, 6, 1, 38, 30,133, 22, 64,249,224, 3, 27,170,
/* 0x03d0 */ 225, 3, 19,170, 98, 0,128, 82,197, 0, 5, 11, 88,255,255,151,
/* 0x03e0 */ 127, 3, 0,235, 96, 0, 0, 84,224, 15,128, 82, 53,255,255,151,
/* 0x03f0 */ 117, 1, 0,180,128, 26, 64,249, 32, 1, 0,180,128, 22, 64,249,
/* 0x0400 */ 64, 0, 0,181,155, 3, 0,249, 34, 1,102,158,224, 3, 21,170,
/* 0x0410 */ 67, 1,102,158,161, 67, 2,145,115,255,255,151,227, 3, 19,203,
/* 0x0420 */ 99, 44, 64,242,224, 0, 0, 84, 97, 3, 19,139, 0, 0,128,210,
/* 0x0430 */ 63,104, 32, 56, 0, 4, 0,145, 31, 0, 3,235,161,255,255, 84,
/* 0x0440 */ 19, 1, 0,180,130, 62, 64,185,224, 3, 27,170,225, 3, 19,170,
/* 0x0450 */ 163, 71, 0,249, 54,255,255,151,163, 71, 64,249, 96,252,255, 53,
/* 0x0460 */ 115, 0, 19,139,115, 3, 19,139,127, 2, 22,235,130, 2, 0, 84,
/* 0x0470 */ 130, 62, 64,185,224, 3, 19,170,193, 2, 19,203, 67, 2,130, 82,
/* 0x0480 */ 4, 0,128, 18, 5, 0,128, 82, 45,255,255,151,127, 2, 0,235,
/* 0x0490 */ 96, 1, 0, 84,213,255,255, 23, 0, 16, 0, 81, 31, 4, 0,113,
/* 0x04a0 */ 232, 0, 0, 84,130, 6, 64,249, 33, 0,128,210,129, 8,192,242,
/* 0x04b0 */ 128, 66, 0,145, 95, 0, 1,235,247, 18,128,154,128, 6, 64,185,
/* 0x04c0 */ 24, 7, 0, 17,148, 2, 0,139,166,255,255, 23,227, 3, 21,170,
/* 0x04d0 */ 53,249,255,181,227,255,255, 23,224, 3, 23,170,232, 39, 70,109,
/* 0x04e0 */ 243, 83, 65,169,245, 91, 66,169,247, 99, 67,169,249,107, 68,169,
/* 0x04f0 */ 251,115, 69,169,234, 59, 64,253,253,123,202,168,192, 3, 95,214,
/* 0x0500 */ 253,123,184,169,253, 3, 0,145,243, 83, 1,169,244, 3, 4,170,
/* 0x0510 */ 243, 3, 2,170,161, 39, 0,249, 1, 96, 0,145,161, 47, 0,249,
/* 0x0520 */ 161, 39, 64,249, 0, 24, 64,185, 33, 96, 0,209,161, 43, 0,249,
/* 0x0530 */ 160, 51, 0,249,160, 7, 69,169,160, 7, 7,169,247, 99, 3,169,
/* 0x0540 */ 162, 55, 0,249,160, 67, 1,145,161,131, 1,145,226, 3, 20,170,
/* 0x0550 */ 247, 3, 3,170, 3, 0,128,210,245, 91, 2,169,166, 35, 0,249,
/* 0x0560 */ 245, 3, 5,170, 32,255,255,151,164, 35, 64,249, 1, 0,128, 82,
/* 0x0570 */ 230, 3, 21,170,224, 3, 19,170,162,195, 1,145, 3, 0,128, 18,
/* 0x0580 */ 229, 3, 20,170,100,255,255,151,245, 3, 0,170, 96, 18, 64,185,
/* 0x0590 */ 97,114, 0,145, 4, 0,128, 82,159, 0, 0,107,160, 7, 0, 84,
/* 0x05a0 */ 34, 0, 64,185, 95, 56, 0,113,193, 6, 0, 84, 32, 4, 64,249,
/* 0x05b0 */ 22, 0,128, 82,152, 2,128, 82, 32, 0, 0,139, 1, 0,128, 82,
/* 0x05c0 */ 226, 3, 1, 42,202,254,255,151,244, 3, 0, 42,212, 2,248, 54,
/* 0x05d0 */ 224, 15,128, 82,187,254,255,151, 97, 2, 64,185,192, 87,151, 82,
/* 0x05e0 */ 192, 95,185,114, 63, 0, 0,107, 65, 3, 0, 84, 97, 30, 64, 57,
/* 0x05f0 */ 224, 3, 19,170,117, 34, 0,145, 33,124, 24, 27, 33, 32, 0, 17,
/* 0x0600 */ 215,254,255,151, 97, 6, 64,185, 0, 0,128, 82, 31, 0, 1,107,
/* 0x0610 */ 0, 2, 0, 84,162, 2, 64,185, 95, 48, 0,113, 65, 1, 0, 84,
/* 0x0620 */ 182, 10, 64,185,224, 3, 20, 42,225, 3, 19,170,226, 3, 23,170,
/* 0x0630 */ 227, 3, 22, 42,198,254,255,151,255, 2, 0,235,224,252,255, 84,
/* 0x0640 */ 228,255,255, 23, 0, 4, 0, 17,181, 82, 0,145,240,255,255, 23,
/* 0x0650 */ 2, 0,128,210,224, 3, 19,170,225, 3, 22, 42,227, 3, 20, 42,
/* 0x0660 */ 228, 3, 2,170,229, 3, 2,170,230, 3, 2,170, 42,255,255,151,
/* 0x0670 */ 245, 3, 0,170,224, 3, 20, 42,161,254,255,151, 5, 0, 0, 20,
/* 0x0680 */ 34, 4, 64,185,132, 4, 0, 17, 33, 0, 2,139,195,255,255, 23,
/* 0x0690 */ 224, 3, 21,170,243, 83, 65,169,245, 91, 66,169,247, 99, 67,169,
/* 0x06a0 */ 253,123,200,168,192, 3, 95,214, 20, 0, 0, 0, 0, 0, 0, 0,
/* 0x06b0 */ 1,122, 82, 0, 4,120, 30, 1, 27, 12, 31, 0, 0, 0, 0, 0,
/* 0x06c0 */ 36, 0, 0, 0, 28, 0, 0, 0,192,250,255,255, 92, 0, 0, 0,
/* 0x06d0 */ 0, 65, 14, 16,157, 2,158, 1, 66, 13, 29, 83,222,221, 12, 31,
/* 0x06e0 */ 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 68, 0, 0, 0,
/* 0x06f0 */ 244,250,255,255, 48, 1, 0, 0, 0, 65, 14, 80,157, 10,158, 9,
/* 0x0700 */ 65, 13, 29, 66,147, 8,148, 7,149, 6,150, 5, 2, 71,222,221,
/* 0x0710 */ 214,213,212,211, 12, 31, 0, 0, 84, 0, 0, 0,116, 0, 0, 0,
/* 0x0720 */ 244,251,255,255,236, 1, 0, 0, 0, 65, 14,160, 1,157, 20,158,
/* 0x0730 */ 19, 65, 13, 29, 66, 5, 72, 8, 5, 73, 7, 5, 74, 6, 72,151,
/* 0x0740 */ 14,152, 13,153, 12,154, 11,147, 18,148, 17,149, 16,150, 15,155,
/* 0x0750 */ 10,156, 9, 2,110,222,221, 6, 74, 6, 73, 6, 72,220,219,218,
/* 0x0760 */ 217,216,215,214,213,212,211, 12, 31, 0, 0, 0, 0, 0, 0, 0,
/* 0x0770 */ 52, 0, 0, 0,204, 0, 0, 0,136,253,255,255,168, 1, 0, 0,
/* 0x0780 */ 0, 65, 14,128, 1,157, 16,158, 15, 65, 13, 29, 65,147, 14,148,
/* 0x0790 */ 13, 81,151, 10,152, 9, 67,149, 12,150, 11, 2, 82,222,221,216,
/* 0x07a0 */ 215,214,213,212,211, 12, 31, 0
/* 0x00c0 */ 40, 0,128, 82, 1, 0, 0,212,104, 0,128, 82, 1, 0, 0,212,
/* 0x00d0 */ 192, 3, 95,214,136, 0,128, 82, 1, 0, 0,212,192, 3, 95,214,
/* 0x00e0 */ 168, 0,128, 82, 1, 0, 0,212,192, 3, 95,214,200, 0,128, 82,
/* 0x00f0 */ 1, 0, 0,212,192, 3, 95,214,168, 5,128, 82, 1, 0, 0,212,
/* 0x0100 */ 192, 3, 95,214, 40, 9,128, 82, 1, 0, 0,212,192, 3, 95,214,
/* 0x0110 */ 72, 9,128, 82, 1, 0, 0,212,192, 3, 95,214,168, 24,128, 82,
/* 0x0120 */ 1, 0, 0,212,192, 3, 95,214, 40, 19,128, 82, 1, 0, 0,212,
/* 0x0130 */ 192, 3, 95,214,233, 31,128, 82, 41, 29, 16, 50, 6, 0, 0, 20,
/* 0x0140 */ 2, 0, 64,185, 35, 1, 2, 10, 34, 97,194, 10, 66, 32,195, 42,
/* 0x0150 */ 2, 68, 0,184, 33, 16, 0,113, 74,255,255, 84,192, 3, 95,214,
/* 0x0160 */ 253,123,191,169, 3, 0,128,210,253, 3, 0,145, 5, 0, 64,249,
/* 0x0170 */ 4, 4, 64,249,191, 0, 2,235, 98, 0, 0, 84,224, 15,128, 82,
/* 0x0180 */ 208,255,255,151,127, 0, 2,235,160, 0, 0, 84,133,104, 99, 56,
/* 0x0190 */ 37,104, 35, 56, 99, 4, 0,145,251,255,255, 23, 1, 4, 64,249,
/* 0x01a0 */ 33, 0, 3,139, 1, 4, 0,249, 1, 0, 64,249, 35, 0, 3,203,
/* 0x01b0 */ 3, 0, 0,249,253,123,193,168,192, 3, 95,214,253,123,187,169,
/* 0x01c0 */ 253, 3, 0,145,243, 83, 1,169,245, 91, 2,169,244, 3, 0,170,
/* 0x01d0 */ 243, 3, 1,170,246, 3, 2,170,245, 3, 3,170, 96, 2, 64,249,
/* 0x01e0 */ 224, 7, 0,180,224, 3, 20,170,130, 1,128,210,161, 3, 1,145,
/* 0x01f0 */ 220,255,255,151,160, 67, 64,185,162, 71, 64,185, 0, 1, 0, 53,
/* 0x0200 */ 160, 10,138, 82, 0, 43,164,114, 95, 0, 0,107,225, 0, 0, 84,
/* 0x0210 */ 128, 2, 64,249, 64, 6, 0,180, 4, 0, 0, 20, 98, 0, 0, 52,
/* 0x0220 */ 95, 0, 0,107,105, 0, 0, 84,224, 15,128, 82,165,255,255,151,
/* 0x0230 */ 97, 2, 64,249, 63, 64, 32,235,131,255,255, 84, 95, 0, 0,107,
/* 0x0240 */ 98, 3, 0, 84,160, 63, 0,185,225, 3, 2, 42,128, 6, 64,249,
/* 0x0250 */ 163,243, 0,145, 98, 6, 64,249,164, 35, 65, 57,192, 2, 63,214,
/* 0x0260 */ 64,254,255, 53,161, 63, 64,185,160, 67, 64,185, 63, 0, 0,107,
/* 0x0270 */ 193,253,255, 84,163, 39, 65, 57,181, 0, 0,180,131, 0, 0, 52,
/* 0x0280 */ 96, 6, 64,249,162, 43, 65, 57,160, 2, 63,214,163, 71, 64,185,
/* 0x0290 */ 129, 6, 64,249,128, 2, 64,249, 33, 0, 3,139,129, 6, 0,249,
/* 0x02a0 */ 0, 0, 3,203,128, 2, 0,249, 5, 0, 0, 20, 97, 6, 64,249,
/* 0x02b0 */ 224, 3, 20,170,226, 3, 2, 42,170,255,255,151,163, 67, 64,185,
/* 0x02c0 */ 97, 6, 64,249, 96, 2, 64,249, 33, 0, 3,139, 97, 6, 0,249,
/* 0x02d0 */ 0, 0, 3,203, 96, 2, 0,249,193,255,255, 23,243, 83, 65,169,
/* 0x02e0 */ 245, 91, 66,169,253,123,197,168,192, 3, 95,214,253,123,182,169,
/* 0x02f0 */ 253, 3, 0,145,232, 39, 6,109,234, 59, 0,253, 40, 0, 39, 30,
/* 0x0300 */ 169, 0,103,158,202, 0,103,158,247, 99, 3,169,249,107, 4,169,
/* 0x0310 */ 243, 83, 1,169,245, 91, 2,169,251,115, 5,169,249, 3, 0,170,
/* 0x0320 */ 245, 3, 2,170,250, 3, 3, 42,252, 3, 4,170, 20,112, 0,145,
/* 0x0330 */ 24, 0,128, 82, 23, 0,128,210, 32, 19, 64,185, 31, 3, 0,107,
/* 0x0340 */ 130, 11, 0, 84,128, 2, 64,185, 31,100, 0,113, 33, 9, 0, 84,
/* 0x0350 */ 150, 18, 64,249,246, 8, 0,180,147, 14, 64,249,128, 26, 64,249,
/* 0x0360 */ 179, 79, 0,249,118, 2, 22,139,123,206,116,146,115, 46, 64,146,
/* 0x0370 */ 160, 75, 0,249,115, 2, 0,171, 96, 9, 0, 84, 31, 0, 31,235,
/* 0x0380 */ 67, 2,130, 82, 68, 19,159, 90,181, 0, 0,181, 31, 0, 31,235,
/* 0x0390 */ 65, 2,128, 82, 64, 2,130, 82, 3, 0,129, 26, 6, 1, 38, 30,
/* 0x03a0 */ 133, 22, 64,249,224, 3, 27,170,225, 3, 19,170, 98, 0,128, 82,
/* 0x03b0 */ 197, 0, 5, 11, 90,255,255,151,127, 3, 0,235, 96, 0, 0, 84,
/* 0x03c0 */ 224, 15,128, 82, 63,255,255,151,117, 1, 0,180,128, 26, 64,249,
/* 0x03d0 */ 32, 1, 0,180,128, 22, 64,249, 64, 0, 0,181,155, 3, 0,249,
/* 0x03e0 */ 34, 1,102,158,224, 3, 21,170, 67, 1,102,158,161, 67, 2,145,
/* 0x03f0 */ 115,255,255,151,227, 3, 19,203, 99, 44, 64,242,224, 0, 0, 84,
/* 0x0400 */ 97, 3, 19,139, 0, 0,128,210, 63,104, 32, 56, 0, 4, 0,145,
/* 0x0410 */ 31, 0, 3,235,161,255,255, 84, 19, 1, 0,180,130, 62, 64,185,
/* 0x0420 */ 224, 3, 27,170,225, 3, 19,170,163, 71, 0,249, 57,255,255,151,
/* 0x0430 */ 163, 71, 64,249, 96,252,255, 53,115, 0, 19,139,115, 3, 19,139,
/* 0x0440 */ 127, 2, 22,235,130, 2, 0, 84,130, 62, 64,185,224, 3, 19,170,
/* 0x0450 */ 193, 2, 19,203, 67, 2,130, 82, 4, 0,128, 18, 5, 0,128, 82,
/* 0x0460 */ 47,255,255,151,127, 2, 0,235, 96, 1, 0, 84,213,255,255, 23,
/* 0x0470 */ 0, 16, 0, 81, 31, 4, 0,113,232, 0, 0, 84,130, 6, 64,249,
/* 0x0480 */ 33, 0,128,210,129, 8,192,242,128, 66, 0,145, 95, 0, 1,235,
/* 0x0490 */ 247, 18,128,154,128, 6, 64,185, 24, 7, 0, 17,148, 2, 0,139,
/* 0x04a0 */ 166,255,255, 23,227, 3, 21,170, 53,249,255,181,227,255,255, 23,
/* 0x04b0 */ 224, 3, 23,170,232, 39, 70,109,243, 83, 65,169,245, 91, 66,169,
/* 0x04c0 */ 247, 99, 67,169,249,107, 68,169,251,115, 69,169,234, 59, 64,253,
/* 0x04d0 */ 253,123,202,168,192, 3, 95,214,253,123,184,169,253, 3, 0,145,
/* 0x04e0 */ 243, 83, 1,169,244, 3, 4,170,243, 3, 2,170,161, 39, 0,249,
/* 0x04f0 */ 1, 96, 0,145,161, 47, 0,249,161, 39, 64,249, 0, 24, 64,185,
/* 0x0500 */ 33, 96, 0,209,161, 43, 0,249,160, 51, 0,249,160, 7, 69,169,
/* 0x0510 */ 160, 7, 7,169,247, 99, 3,169,162, 55, 0,249,160, 67, 1,145,
/* 0x0520 */ 161,131, 1,145,226, 3, 20,170,247, 3, 3,170, 3, 0,128,210,
/* 0x0530 */ 245, 91, 2,169,166, 35, 0,249,245, 3, 5,170, 32,255,255,151,
/* 0x0540 */ 164, 35, 64,249, 1, 0,128, 82,230, 3, 21,170,224, 3, 19,170,
/* 0x0550 */ 162,195, 1,145, 3, 0,128, 18,229, 3, 20,170,100,255,255,151,
/* 0x0560 */ 245, 3, 0,170, 96, 18, 64,185, 97,114, 0,145, 4, 0,128, 82,
/* 0x0570 */ 159, 0, 0,107,160, 7, 0, 84, 34, 0, 64,185, 95, 56, 0,113,
/* 0x0580 */ 193, 6, 0, 84, 32, 4, 64,249, 22, 0,128, 82,152, 2,128, 82,
/* 0x0590 */ 32, 0, 0,139, 1, 0,128, 82,226, 3, 1, 42,209,254,255,151,
/* 0x05a0 */ 244, 3, 0, 42,212, 2,248, 54,224, 15,128, 82,197,254,255,151,
/* 0x05b0 */ 97, 2, 64,185,192, 87,151, 82,192, 95,185,114, 63, 0, 0,107,
/* 0x05c0 */ 65, 3, 0, 84, 97, 30, 64, 57,224, 3, 19,170,117, 34, 0,145,
/* 0x05d0 */ 33,124, 24, 27, 33, 32, 0, 17,215,254,255,151, 97, 6, 64,185,
/* 0x05e0 */ 0, 0,128, 82, 31, 0, 1,107, 0, 2, 0, 84,162, 2, 64,185,
/* 0x05f0 */ 95, 48, 0,113, 65, 1, 0, 84,182, 10, 64,185,224, 3, 20, 42,
/* 0x0600 */ 225, 3, 19,170,226, 3, 23,170,227, 3, 22, 42,199,254,255,151,
/* 0x0610 */ 255, 2, 0,235,224,252,255, 84,228,255,255, 23, 0, 4, 0, 17,
/* 0x0620 */ 181, 82, 0,145,240,255,255, 23, 2, 0,128,210,224, 3, 19,170,
/* 0x0630 */ 225, 3, 22, 42,227, 3, 20, 42,228, 3, 2,170,229, 3, 2,170,
/* 0x0640 */ 230, 3, 2,170, 42,255,255,151,245, 3, 0,170,224, 3, 20, 42,
/* 0x0650 */ 167,254,255,151, 5, 0, 0, 20, 34, 4, 64,185,132, 4, 0, 17,
/* 0x0660 */ 33, 0, 2,139,195,255,255, 23,224, 3, 21,170,243, 83, 65,169,
/* 0x0670 */ 245, 91, 66,169,247, 99, 67,169,253,123,200,168,192, 3, 95,214,
/* 0x0680 */ 20, 0, 0, 0, 0, 0, 0, 0, 1,122, 82, 0, 4,120, 30, 1,
/* 0x0690 */ 27, 12, 31, 0, 0, 0, 0, 0, 36, 0, 0, 0, 28, 0, 0, 0,
/* 0x06a0 */ 192,250,255,255, 92, 0, 0, 0, 0, 65, 14, 16,157, 2,158, 1,
/* 0x06b0 */ 66, 13, 29, 83,222,221, 12, 31, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x06c0 */ 44, 0, 0, 0, 68, 0, 0, 0,244,250,255,255, 48, 1, 0, 0,
/* 0x06d0 */ 0, 65, 14, 80,157, 10,158, 9, 65, 13, 29, 66,147, 8,148, 7,
/* 0x06e0 */ 149, 6,150, 5, 2, 71,222,221,214,213,212,211, 12, 31, 0, 0,
/* 0x06f0 */ 84, 0, 0, 0,116, 0, 0, 0,244,251,255,255,236, 1, 0, 0,
/* 0x0700 */ 0, 65, 14,160, 1,157, 20,158, 19, 65, 13, 29, 66, 5, 72, 8,
/* 0x0710 */ 5, 73, 7, 5, 74, 6, 72,151, 14,152, 13,153, 12,154, 11,147,
/* 0x0720 */ 18,148, 17,149, 16,150, 15,155, 10,156, 9, 2,110,222,221, 6,
/* 0x0730 */ 74, 6, 73, 6, 72,220,219,218,217,216,215,214,213,212,211, 12,
/* 0x0740 */ 31, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,204, 0, 0, 0,
/* 0x0750 */ 136,253,255,255,168, 1, 0, 0, 0, 65, 14,128, 1,157, 16,158,
/* 0x0760 */ 15, 65, 13, 29, 65,147, 14,148, 13, 81,151, 10,152, 9, 67,149,
/* 0x0770 */ 12,150, 11, 2, 82,222,221,216,215,214,213,212,211, 12, 31, 0
};

View File

@ -0,0 +1,578 @@
/* arm64-linux.elf-entry.h
created from arm64-linux.elf-entry.bin, 8615 (0x21a7) bytes
This file is part of the UPX executable compressor.
Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2017 Laszlo Molnar
Copyright (C) 2000-2017 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>
*/
#define STUB_ARM64_LINUX_ELF_ENTRY_SIZE 8615
#define STUB_ARM64_LINUX_ELF_ENTRY_ADLER32 0xdca24898
#define STUB_ARM64_LINUX_ELF_ENTRY_CRC32 0xf3ff5dfd
unsigned char stub_arm64_linux_elf_entry[8615] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0,183, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0,136, 23, 0, 0, 0, 0, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
/* 0x0040 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0050 */ 0, 0, 0, 0, 76,255,255, 16,129, 41, 64, 41,139, 53, 65, 41,
/* 0x0060 */ 107, 1, 12,139, 74, 1, 12,139, 99, 1, 64,185,137, 1, 1,203,
/* 0x0070 */ 33, 0, 3, 11,128, 9, 64,249, 33, 4, 64,145,224, 7,190,169,
/* 0x0080 */ 226, 55, 1,169,226, 0,128, 82,163, 1, 28, 50, 5, 0,128,210,
/* 0x0090 */ 4, 0,128, 18,200, 27,128, 82, 1, 0, 0,212, 31, 4, 64,177,
/* 0x00a0 */ 2, 0, 0, 84, 5, 0, 1,145, 33, 9,193,168, 35, 17,193,168,
/* 0x00b0 */ 1, 8,129,168, 3, 16,129,168, 33, 9,193,168, 35, 17,193,168,
/* 0x00c0 */ 1, 8,129,168, 3, 16,129,168, 63, 1, 10,235, 37, 1, 1,209,
/* 0x00d0 */ 163,254,255, 84, 4, 0, 9,203,225, 35, 64,185, 15, 2, 0, 16,
/* 0x00e0 */ 1, 68, 0,184,254, 3, 0,170,239, 1, 4,139,137, 1, 64,185,
/* 0x00f0 */ 41, 33, 3, 81,138, 1, 9,203, 74, 1, 4,139,100, 9, 64,185,
/* 0x0100 */ 99, 1, 64,185, 96, 49, 0,145, 97, 5, 64,185,226, 3, 30,170,
/* 0x0110 */ 227, 19, 0,185,227, 67, 0,145,224, 1, 31,214,254, 15, 31,248,
/* 0x0120 */ 226, 15,191,169, 7, 64, 33,139, 5, 0,128, 18, 4, 0,176, 82,
/* 0x0130 */ 24, 0, 0, 20,227, 19,193,168, 0, 0, 7,203, 66, 0, 3,203,
/* 0x0140 */ 130, 0, 0,185,228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139,
/* 0x0150 */ 32,123, 11,213, 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235,
/* 0x0160 */ 131,255,255, 84,224, 3, 4,170,254, 7, 65,248,192, 3, 95,214,
/* 0x0170 */ 132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214, 4, 68, 64,184,
/* 0x0180 */ 132, 0, 4, 58,192, 3, 95,214, 3, 20, 64, 56, 67, 20, 0, 56,
/* 0x0190 */ 248,255,255,151,162,255,255, 84, 33, 0,128, 82, 4, 0, 0, 20,
/* 0x01a0 */ 33, 4, 0, 81,243,255,255,151, 33, 0, 1, 26,241,255,255,151,
/* 0x01b0 */ 33, 0, 1, 26,239,255,255,151, 67,255,255, 84, 35, 12, 0,113,
/* 0x01c0 */ 1, 0,128, 82, 35, 1, 0, 84, 5, 20, 64, 56,165, 32, 3, 42,
/* 0x01d0 */ 229, 3, 37, 42, 5,251,255, 52,191, 0, 0,114,165,124, 1, 19,
/* 0x01e0 */ 161, 1, 0, 84, 3, 0, 0, 20,226,255,255,151, 66, 1, 0, 84,
/* 0x01f0 */ 33, 0,128, 82,223,255,255,151,226, 0, 0, 84,221,255,255,151,
/* 0x0200 */ 33, 0, 1, 26,219,255,255,151,163,255,255, 84, 33, 16, 0, 17,
/* 0x0210 */ 4, 0, 0, 20,215,255,255,151, 33, 0, 1, 26, 33, 8, 0, 17,
/* 0x0220 */ 191, 0, 20, 49, 33, 36,129, 26, 67, 64, 33,139, 99,240, 95, 56,
/* 0x0230 */ 67,200,101, 56, 67, 20, 0, 56, 33, 4, 0,113,161,255,255, 84,
/* 0x0240 */ 212,255,255, 23,226, 15,190,169,254, 11, 0,249, 7, 64, 33,139,
/* 0x0250 */ 5, 0,128, 18, 4, 0,176, 82, 24, 0, 0, 20,227, 19,193,168,
/* 0x0260 */ 0, 0, 7,203, 66, 0, 3,203,130, 0, 0,185,228, 3, 0,170,
/* 0x0270 */ 224, 3, 3,170, 97, 0, 2,139, 32,123, 11,213, 32,117, 11,213,
/* 0x0280 */ 0, 0, 1,145, 31, 0, 1,235,131,255,255, 84,224, 3, 4,170,
/* 0x0290 */ 254, 7, 65,248,192, 3, 95,214,132, 0, 4, 43, 68, 0, 0, 52,
/* 0x02a0 */ 192, 3, 95,214, 4, 68, 64,184,132, 0, 4, 58,192, 3, 95,214,
/* 0x02b0 */ 3, 20, 64, 56, 67, 20, 0, 56,248,255,255,151,162,255,255, 84,
/* 0x02c0 */ 33, 0,128, 82, 4, 0, 0, 20, 33, 4, 0, 81,243,255,255,151,
/* 0x02d0 */ 33, 0, 1, 58,241,255,255,151, 33, 0, 1, 58,239,255,255,151,
/* 0x02e0 */ 67,255,255, 84, 35, 12, 0,113, 1, 0,128, 82, 35, 1, 0, 84,
/* 0x02f0 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42, 5,251,255, 52,
/* 0x0300 */ 163, 0, 1, 83,165,124, 1, 83, 99, 0, 3, 43, 2, 0, 0, 20,
/* 0x0310 */ 226,255,255,151, 33, 0, 1, 58,224,255,255,151, 33, 0, 1, 58,
/* 0x0320 */ 225, 0, 0, 84, 33, 0,128, 82,220,255,255,151, 33, 0, 1, 58,
/* 0x0330 */ 218,255,255,151,163,255,255, 84, 33, 8, 0, 17, 33, 4, 0, 17,
/* 0x0340 */ 191, 0, 20, 49, 33, 52,129, 26, 67, 0, 64, 57, 67,200,101, 56,
/* 0x0350 */ 67, 20, 0, 56, 33, 4, 0,113,161,255,255, 84,215,255,255, 23,
/* 0x0360 */ 1, 64, 33,139,225, 11,190,169,227,123, 1,169, 5, 0,128, 18,
/* 0x0370 */ 4, 0,176, 82, 31, 0, 0, 20,228,123, 65,169,225, 15,194,168,
/* 0x0380 */ 0, 0, 1,203, 66, 0, 3,203,130, 0, 0,185,228, 3, 0,170,
/* 0x0390 */ 224, 3, 3,170, 97, 0, 2,139, 32,123, 11,213, 32,117, 11,213,
/* 0x03a0 */ 0, 0, 1,145, 31, 0, 1,235,131,255,255, 84,224, 3, 4,170,
/* 0x03b0 */ 192, 3, 95,214,132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214,
/* 0x03c0 */ 4, 68, 64,184,132, 0, 4, 58,192, 3, 95,214, 33, 0,128, 82,
/* 0x03d0 */ 240, 3, 30,170,248,255,255,151, 33, 0, 1, 58,246,255,255,151,
/* 0x03e0 */ 163,255,255, 84, 0, 2, 31,214, 3, 20, 64, 56, 67, 20, 0, 56,
/* 0x03f0 */ 241,255,255,151,162,255,255, 84,245,255,255,151, 35, 12, 0,113,
/* 0x0400 */ 1, 0,128, 82,163, 0, 0, 84, 5, 20, 64, 56,165, 32, 3, 42,
/* 0x0410 */ 229, 3, 37, 42, 37,251,255, 52,231,255,255,151, 33, 0, 1, 58,
/* 0x0420 */ 229,255,255,151, 33, 0, 1, 58, 97, 0, 0, 84,232,255,255,151,
/* 0x0430 */ 33, 8, 0, 17,191, 0, 52, 49, 33, 36,129, 26, 67,200,101, 56,
/* 0x0440 */ 33, 4, 0,113, 67, 20, 0, 56,162,255,255, 84,233,255,255, 23,
/* 0x0450 */ 159, 56, 0,113, 1, 0, 0, 84, 1, 64, 33,139, 4, 0,128,210,
/* 0x0460 */ 225, 11,190,169,227,123, 1,169,228, 19,191,169,224, 3, 0,145,
/* 0x0470 */ 227, 35, 0,145,230, 51, 0,145, 8, 0, 64, 57, 7,192,128, 82,
/* 0x0480 */ 8,125, 3, 83,231, 32,200, 26,253, 3, 0,145,231,192, 57, 17,
/* 0x0490 */ 232, 3, 0,145,255, 67, 39,203,100, 16,129,168,127, 0, 8,235,
/* 0x04a0 */ 195,255,255, 84,230, 3, 3,170,229, 3, 7, 42,228, 3, 2,170,
/* 0x04b0 */ 34, 8, 0, 81,225, 3, 0,170, 39, 20, 64, 56,231, 8, 0, 18,
/* 0x04c0 */ 231, 11, 0, 57, 39, 20, 64, 56,232,124, 4, 83,232, 7, 0, 57,
/* 0x04d0 */ 231, 12, 0, 18,231, 3, 0, 57,224, 3, 0,145, 17, 0, 0,148,
/* 0x04e0 */ 191, 3, 0,145,228,123, 65,169,225, 15,194,168, 0, 0, 1,203,
/* 0x04f0 */ 66, 0, 3,203,130, 0, 0,185,228, 3, 0,170,224, 3, 3,170,
/* 0x0500 */ 97, 0, 2,139, 32,123, 11,213, 32,117, 11,213, 0, 0, 1,145,
/* 0x0510 */ 31, 0, 1,235,131,255,255, 84,224, 3, 4,170,192, 3, 95,214,
/* 0x0520 */ 243, 83,184,169, 39, 0,128, 82, 20, 16, 0,145,245, 91, 1,169,
/* 0x0530 */ 247, 99, 2,169,249,107, 3,169,251,115, 4,169,254, 43, 0,249,
/* 0x0540 */ 8, 4, 64, 57, 26, 8, 64, 57, 28, 0, 64, 57,127, 0, 0,185,
/* 0x0550 */ 250, 32,218, 26,223, 0, 0,185,231, 32,200, 26,231, 4, 0, 81,
/* 0x0560 */ 231,111, 0,185, 8, 4, 64, 57, 7, 96,128, 82, 90, 7, 0, 81,
/* 0x0570 */ 8, 1, 28, 11,232, 32,200, 26, 8,217, 28, 49,224, 0, 0, 84,
/* 0x0580 */ 7, 0,128,210, 9,128,128, 82,137,122, 39,120,231, 4, 0,145,
/* 0x0590 */ 31, 1, 7,107,168,255,255, 84, 51, 64, 34,139,127, 2, 1,235,
/* 0x05a0 */ 0, 15, 0, 84,235, 3, 1,170, 34, 4, 0,145,103, 85, 64, 56,
/* 0x05b0 */ 127, 2, 2,235, 96, 14, 0, 84, 72, 20, 64, 56,127, 1, 2,235,
/* 0x05c0 */ 7, 33, 7, 42, 97,255,255, 84, 37, 68, 0, 52, 9,176, 41,145,
/* 0x05d0 */ 59, 0,128, 82,233, 63, 0,249, 9, 1,128, 82, 41, 1, 28, 75,
/* 0x05e0 */ 10, 0,128, 18,245, 3, 27, 42, 25, 0,128, 82, 8, 0,128, 82,
/* 0x05f0 */ 2, 0,128, 82, 16,224,191, 18, 17, 0,129, 82,251,107, 0,185,
/* 0x0600 */ 251,115, 0,185,233,119, 0,185, 78, 0, 26, 10, 44,111, 28, 83,
/* 0x0610 */ 95, 1, 16,107,201,125, 64,147, 44,193, 44,139,143,249,127,211,
/* 0x0620 */ 232, 0, 0, 84,127, 2, 11,235,192, 10, 0, 84,105, 1, 64, 57,
/* 0x0630 */ 74, 93, 24, 83,107, 5, 0,145, 39, 33, 7, 42,141,122,108,120,
/* 0x0640 */ 73,125, 11, 83,169,125, 9, 27,255, 0, 9,107,162, 10, 0, 84,
/* 0x0650 */ 234,211, 65, 57, 63, 27, 0,113, 8, 41,202, 26,234,111, 64,185,
/* 0x0660 */ 79, 0, 10, 10,239, 33,220, 26,239, 1, 8, 11, 40, 2, 13, 75,
/* 0x0670 */ 234,117, 30, 83, 79, 1, 15, 75,173, 21,136, 11,239, 93,120,211,
/* 0x0680 */ 141,122, 44,120,239,217, 28,145,143, 6, 15,139, 45, 31, 0, 84,
/* 0x0690 */ 72, 0, 21, 75,146,104,104, 56, 40, 0,128, 82, 7, 0, 0, 20,
/* 0x06a0 */ 236,121, 42,120, 8,121, 31, 83,233, 3, 14, 42,205, 56, 0, 53,
/* 0x06b0 */ 31,253, 3,113,204, 3, 0, 84, 82,122, 31, 83, 63, 1, 16,107,
/* 0x06c0 */ 77, 2, 24, 18, 22,121, 31, 83,170,125, 64,147, 74, 1, 4,145,
/* 0x06d0 */ 74,193, 40,139,232, 0, 0, 84,127, 1, 19,235, 41, 93, 24, 83,
/* 0x06e0 */ 0, 5, 0, 84,108, 1, 64, 57,107, 5, 0,145,135, 33, 7, 42,
/* 0x06f0 */ 236,121,106,120, 46,125, 11, 83, 55, 2, 12, 75,142,125, 14, 27,
/* 0x0700 */ 152, 21, 76, 75,140, 21,151, 11,255, 0, 14,107, 41, 1, 14, 75,
/* 0x0710 */ 131,252,255, 84,248,121, 42,120,200, 6, 0, 17,231, 0, 14, 75,
/* 0x0720 */ 141,252,255, 53, 31,253, 3,113, 45, 27, 0, 84, 8, 29, 0, 83,
/* 0x0730 */ 234, 3, 9, 42,136, 72, 34, 56, 66, 4, 0, 17, 63, 39, 0,113,
/* 0x0740 */ 140, 49, 0, 84, 57, 15, 0, 81,191, 0, 2,107,232,245,255, 84,
/* 0x0750 */ 0,224,191, 18, 95, 1, 0,107,136, 0, 0, 84,127, 2, 11,235,
/* 0x0760 */ 0, 1, 0, 84,107, 5, 0,145, 97, 1, 1,203, 97, 0, 0,185,
/* 0x0770 */ 0, 0,128, 82,194, 0, 0,185, 3, 0, 0, 20, 31, 32, 3,213,
/* 0x0780 */ 32, 0,128, 82,245, 91, 65,169,247, 99, 66,169,249,107, 67,169,
/* 0x0790 */ 251,115, 68,169,254, 43, 64,249,243, 83,200,168,192, 3, 95,214,
/* 0x07a0 */ 74, 1, 9, 75,173, 21, 77, 75,231, 0, 9, 75,141,122, 44,120,
/* 0x07b0 */ 41,127, 64,147, 95, 1, 16,107, 41, 1, 3,145, 45,249,127,211,
/* 0x07c0 */ 232, 0, 0, 84,127, 1, 19,235,192,253,255, 84,104, 1, 64, 57,
/* 0x07d0 */ 74, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42,140,122,105,120,
/* 0x07e0 */ 72,125, 11, 83,136,125, 8, 27,255, 0, 8,107, 98, 25, 0, 84,
/* 0x07f0 */ 234,107, 64,185, 63, 31, 0,113,251,115, 64,185,234,115, 0,185,
/* 0x0800 */ 42, 2, 12, 75,245,107, 0,185,140, 21,138, 11,140,122, 41,120,
/* 0x0810 */ 105, 0,128, 82,249,179,137, 26, 9,160, 25,145, 31, 1, 16,107,
/* 0x0820 */ 232, 0, 0, 84,127, 2, 11,235,192,250,255, 84,106, 1, 64, 57,
/* 0x0830 */ 8, 93, 24, 83,107, 5, 0,145, 71, 33, 7, 42, 44, 1, 64,121,
/* 0x0840 */ 10,125, 11, 83,138,125, 10, 27,255, 0, 10,107,226, 30, 0, 84,
/* 0x0850 */ 210,113, 29, 83, 40, 2, 12, 75, 22, 0,128, 82,126, 0,128, 82,
/* 0x0860 */ 82,126, 64,147,140, 21,136, 11, 82, 10, 0,145, 44, 1, 0,121,
/* 0x0870 */ 50, 5, 18,139,238, 3, 30, 42, 45, 0,128, 82, 6, 0, 0, 20,
/* 0x0880 */ 232, 1, 0,121,206, 5, 0,113,173,121, 31, 83,234, 3, 9, 42,
/* 0x0890 */ 32, 3, 0, 84, 95, 1, 16,107,183,121, 31, 83, 79,198, 45,139,
/* 0x08a0 */ 232, 0, 0, 84,127, 2, 11,235, 74, 93, 24, 83,160,246,255, 84,
/* 0x08b0 */ 104, 1, 64, 57,107, 5, 0,145, 7, 33, 7, 42,232, 1, 64,121,
/* 0x08c0 */ 73,125, 11, 83, 44, 2, 8, 75, 9,125, 9, 27, 24, 21, 72, 75,
/* 0x08d0 */ 8, 21,140, 11,255, 0, 9,107, 74, 1, 9, 75, 35,253,255, 84,
/* 0x08e0 */ 248, 1, 0,121,206, 5, 0,113,231, 0, 9, 75,237, 6, 0, 17,
/* 0x08f0 */ 33,253,255, 84, 40, 0,128, 82, 63, 15, 0,113, 30, 33,222, 26,
/* 0x0900 */ 222, 2, 30, 75,205, 3, 13, 11,236, 22, 0, 84,191, 13, 0,113,
/* 0x0910 */ 104, 0,128, 82,181,209,136, 26,207, 0,128, 82,181,102, 26, 83,
/* 0x0920 */ 46, 0,128, 82,181,126, 64,147,181,194, 6,145,181,250,127,211,
/* 0x0930 */ 7, 0, 0, 20, 31, 32, 3,213,136,106, 50,120,239, 5, 0,113,
/* 0x0940 */ 206,121, 31, 83,234, 3, 9, 42, 32, 3, 0, 84, 95, 1, 16,107,
/* 0x0950 */ 214,121, 31, 83,178,198, 46,139,232, 0, 0, 84,127, 2, 11,235,
/* 0x0960 */ 74, 93, 24, 83,224,240,255, 84,104, 1, 64, 57,107, 5, 0,145,
/* 0x0970 */ 7, 33, 7, 42,136,106,114,120, 73,125, 11, 83, 44, 2, 8, 75,
/* 0x0980 */ 9,125, 9, 27, 23, 21, 72, 75, 8, 21,140, 11,255, 0, 9,107,
/* 0x0990 */ 74, 1, 9, 75, 35,253,255, 84,151,106, 50,120,239, 5, 0,113,
/* 0x09a0 */ 231, 0, 9, 75,206, 6, 0, 17, 33,253,255, 84,213, 1, 1, 81,
/* 0x09b0 */ 191, 14, 0,113, 45, 17, 0, 84,191, 54, 0,113,168, 2, 0, 18,
/* 0x09c0 */ 8, 1, 31, 50,169,126, 1, 19, 44, 32, 0, 84, 47, 5, 0, 81,
/* 0x09d0 */ 9, 86,128,210, 46,193, 53,203, 21, 33,207, 26,206, 65, 53,139,
/* 0x09e0 */ 142, 6, 14,139,206, 9, 0,209, 50, 0,128, 82,247, 3, 18, 42,
/* 0x09f0 */ 8, 0, 0, 20, 31, 32, 3,213,200, 2, 0,121, 82,122, 31, 83,
/* 0x0a00 */ 234, 3, 9, 42,239, 5, 0,113,247,122, 31, 83, 96, 14, 0, 84,
/* 0x0a10 */ 95, 1, 16,107, 88,122, 31, 83,214,197, 50,139,232, 0, 0, 84,
/* 0x0a20 */ 127, 2, 11,235, 74, 93, 24, 83,192,234,255, 84,104, 1, 64, 57,
/* 0x0a30 */ 107, 5, 0,145, 7, 33, 7, 42,200, 2, 64,121, 73,125, 11, 83,
/* 0x0a40 */ 44, 2, 8, 75, 9,125, 9, 27, 30, 21, 72, 75, 8, 21,140, 11,
/* 0x0a50 */ 255, 0, 9,107, 74, 1, 9, 75, 3,253,255, 84,222, 2, 0,121,
/* 0x0a60 */ 231, 0, 9, 75,181, 2, 23, 42, 18, 7, 0, 17,230,255,255, 23,
/* 0x0a70 */ 40, 0,128, 82, 6, 0, 0, 20, 8,121, 31, 83,234,121, 46,120,
/* 0x0a80 */ 31,253, 3,113,233, 3, 12, 42, 44, 3, 0, 84, 63, 1, 16,107,
/* 0x0a90 */ 18,121, 31, 83, 14,125, 64,147,232, 0, 0, 84,127, 2, 11,235,
/* 0x0aa0 */ 41, 93, 24, 83,224,230,255, 84,106, 1, 64, 57,107, 5, 0,145,
/* 0x0ab0 */ 71, 33, 7, 42,234,121,110,120, 44,125, 11, 83, 45, 2, 10, 75,
/* 0x0ac0 */ 76,125, 12, 27, 86, 21, 74, 75, 74, 21,141, 11,255, 0, 12,107,
/* 0x0ad0 */ 41, 1, 12, 75, 35,253,255, 84, 72, 6, 0, 17,246,121, 46,120,
/* 0x0ae0 */ 31,253, 3,113,231, 0, 12, 75, 45,253,255, 84, 8, 29, 0, 83,
/* 0x0af0 */ 63, 15, 0,113,136, 72, 34, 56,234, 3, 9, 42, 66, 4, 0, 17,
/* 0x0b00 */ 236,225,255, 84,191, 0, 2,107, 25, 0,128, 82,232,215,255, 84,
/* 0x0b10 */ 16,255,255, 23, 31, 32, 3,213, 74, 1, 8, 75,140, 21, 76, 75,
/* 0x0b20 */ 95, 1, 16,107,140,122, 41,120,231, 0, 8, 75,169, 97, 0,145,
/* 0x0b30 */ 232, 0, 0, 84,127, 2, 11,235, 64,226,255, 84,104, 1, 64, 57,
/* 0x0b40 */ 74, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42,140,106,105,120,
/* 0x0b50 */ 72,125, 11, 83,136,125, 8, 27,255, 0, 8,107,226, 9, 0, 84,
/* 0x0b60 */ 42, 2, 12, 75, 31, 1, 16,107,239,129, 7,145,140, 21,138, 11,
/* 0x0b70 */ 140,106, 41,120,232, 0, 0, 84,127, 2, 11,235, 32,224,255, 84,
/* 0x0b80 */ 105, 1, 64, 57, 8, 93, 24, 83,107, 5, 0,145, 39, 33, 7, 42,
/* 0x0b90 */ 137,106,111,120, 10,125, 11, 83, 42,125, 10, 27,255, 0, 10,107,
/* 0x0ba0 */ 130, 16, 0, 84, 40, 2, 9, 75, 41, 21,136, 11,137,106, 47,120,
/* 0x0bb0 */ 130,222,255, 52, 72, 0, 21, 75, 63, 31, 0,113, 41, 1,128, 82,
/* 0x0bc0 */ 108, 1,128, 82, 57,177,140, 26,136,104,104, 56,136, 72, 34, 56,
/* 0x0bd0 */ 66, 4, 0, 17,221,254,255, 23,181, 6, 0, 49,160,219,255, 84,
/* 0x0be0 */ 57, 31, 0, 17,191, 2, 2,107,173, 9, 0, 17,168,220,255, 84,
/* 0x0bf0 */ 233, 3, 2, 42, 72, 0, 21, 75,173, 5, 0, 81, 66, 4, 0, 17,
/* 0x0c00 */ 191, 1, 31,107,160, 16, 66,122,136,104,104, 56,136, 72, 41, 56,
/* 0x0c10 */ 233, 3, 2, 42, 8,255,255, 84,191, 0, 2,107,104,207,255, 84,
/* 0x0c20 */ 204,254,255, 23, 31, 32, 3,213, 8, 1, 10, 75,140, 21, 76, 75,
/* 0x0c30 */ 31, 1, 16,107, 44, 1, 0,121,231, 0, 10, 75,232, 0, 0, 84,
/* 0x0c40 */ 127, 2, 11,235,224,217,255, 84,106, 1, 64, 57, 8, 93, 24, 83,
/* 0x0c50 */ 107, 5, 0,145, 71, 33, 7, 42, 44, 5, 64,121, 10,125, 11, 83,
/* 0x0c60 */ 138,125, 10, 27,255, 0, 10,107, 66, 7, 0, 84,210,113, 29, 83,
/* 0x0c70 */ 40, 2, 12, 75, 22, 1,128, 82,126, 0,128, 82, 82,126, 64,147,
/* 0x0c80 */ 136, 21,136, 11, 82, 10, 2,145, 40, 5, 0,121, 50, 5, 18,139,
/* 0x0c90 */ 249,254,255, 23, 31, 32, 3,213, 74, 1, 8, 75,231, 0, 8, 75,
/* 0x0ca0 */ 95, 1, 16,107,136, 21, 76, 75,136,106, 41,120,172,193, 0,145,
/* 0x0cb0 */ 232, 0, 0, 84,127, 2, 11,235, 64,214,255, 84,104, 1, 64, 57,
/* 0x0cc0 */ 74, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42,137,106,108,120,
/* 0x0cd0 */ 72,125, 11, 83, 40,125, 8, 27,255, 0, 8,107, 35, 5, 0, 84,
/* 0x0ce0 */ 74, 1, 8, 75, 41, 21, 73, 75, 95, 1, 16,107,137,106, 44,120,
/* 0x0cf0 */ 231, 0, 8, 75,173, 33, 1,145,232, 0, 0, 84,127, 2, 11,235,
/* 0x0d00 */ 0,212,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145,
/* 0x0d10 */ 7, 33, 7, 42,137,106,109,120, 72,125, 11, 83, 40,125, 8, 27,
/* 0x0d20 */ 255, 0, 8,107,226, 7, 0, 84,234, 3, 21, 42,236,107, 64,185,
/* 0x0d30 */ 234,107, 0,185, 42, 2, 9, 75,245,115, 64,185, 41, 21,138, 11,
/* 0x0d40 */ 236,115, 0,185,137,106, 45,120, 20, 0, 0, 20, 31, 32, 3,213,
/* 0x0d50 */ 231, 0, 10, 75, 50, 17, 8,145, 10, 1, 10, 75, 22, 2,128, 82,
/* 0x0d60 */ 136, 21, 76, 75, 30, 1,128, 82, 40, 5, 0,121,194,254,255, 23,
/* 0x0d70 */ 191, 0, 2,107, 57, 27, 0, 81,136,196,255, 84,117,254,255, 23,
/* 0x0d80 */ 234, 3, 21, 42,245,107, 64,185,234,107, 0,185, 42, 2, 9, 75,
/* 0x0d90 */ 41, 21,138, 11,137,106, 44,120, 63, 31, 0,113, 10, 1,128, 82,
/* 0x0da0 */ 108, 1,128, 82,233, 63, 64,249, 89,177,140, 26,156,254,255, 23,
/* 0x0db0 */ 41, 21, 73, 75, 8, 1, 10, 75,137,106, 47,120,231, 0, 10, 75,
/* 0x0dc0 */ 246,255,255, 23,233, 3, 14, 42, 87,254,255, 23, 41, 21, 0, 81,
/* 0x0dd0 */ 95, 1, 16,107, 8,121, 31, 83,232, 0, 0, 84,127, 2, 11,235,
/* 0x0de0 */ 74, 93, 24, 83,224,204,255, 84,108, 1, 64, 57,107, 5, 0,145,
/* 0x0df0 */ 135, 33, 7, 42, 74,125, 1, 83,255, 0, 10,107, 99, 0, 0, 84,
/* 0x0e00 */ 231, 0, 10, 75, 8, 1, 0, 50, 41, 5, 0,113, 33,254,255, 84,
/* 0x0e10 */ 21,109, 28, 83, 14, 32, 25,145,143, 0,128, 82,243,254,255, 23,
/* 0x0e20 */ 41, 21, 73, 75,137,106, 45,120,233,107, 64,185,236, 3, 21, 42,
/* 0x0e30 */ 231, 0, 8, 75,245, 3, 27, 42, 72, 1, 8, 75,251,115, 64,185,
/* 0x0e40 */ 236,107, 0,185,233,115, 0,185,212,255,255, 23, 2, 0,128, 82,
/* 0x0e50 */ 227, 19,189,169,229, 27, 1,169,254, 19, 0,249,232, 3, 1,170,
/* 0x0e60 */ 45, 64, 34,139,233, 3, 4,170,142, 64, 37,139, 11, 16, 0,145,
/* 0x0e70 */ 6, 0, 64, 57, 5, 4, 64, 57, 4, 8, 64, 57,174, 0, 6, 11,
/* 0x0e80 */ 7, 0,128, 18,229, 32,197, 26,229, 3, 37, 42,228, 32,196, 26,
/* 0x0e90 */ 228, 3, 36, 42, 35, 0,128, 82, 34, 0,128, 82, 33, 0,128, 82,
/* 0x0ea0 */ 32, 0,128, 82, 6, 0,128, 82,230, 31, 0,185, 2, 96,128, 82,
/* 0x0eb0 */ 192,230,128, 82, 66, 32,206, 26, 66, 0, 0, 11, 0,128,128,210,
/* 0x0ec0 */ 225, 3, 11,170, 0, 64, 0,170, 0,128, 0,170, 32,132, 0,248,
/* 0x0ed0 */ 66, 16, 0,113,204,255,255, 84, 0, 21, 0,145,231, 0, 0,148,
/* 0x0ee0 */ 31, 0, 8,235,193,255,255, 84,227, 67, 66,248,226, 19, 64,185,
/* 0x0ef0 */ 36, 1, 3,203,128, 0, 2, 10,224, 47, 0,185, 0, 16, 6, 11,
/* 0x0f00 */ 97, 1, 0,145,225, 0, 0,148,129, 5, 0, 84,227, 23, 64,185,
/* 0x0f10 */ 226, 27, 64,185, 99, 0, 4, 10,224,115, 64, 57, 99, 32,194, 26,
/* 0x0f20 */ 226, 3, 2, 75, 66, 32, 0, 17, 2, 36,194, 26, 99, 0, 2, 11,
/* 0x0f30 */ 106,177, 57,145, 99, 4, 3, 11,227, 3, 3, 42, 32, 0,128, 82,
/* 0x0f40 */ 74, 37, 3,139,223, 28, 0,113, 3, 2, 0, 84,227,125, 64,147,
/* 0x0f50 */ 227, 3, 3,203, 37,105, 99, 56,165,120, 31, 83, 65, 1, 8,145,
/* 0x0f60 */ 164, 0, 24, 18,227, 3, 4, 42, 33, 4, 3,139,201, 0, 0,148,
/* 0x0f70 */ 3, 0, 0, 18,127, 32, 68,107,193, 0, 0, 84, 31, 0, 4,113,
/* 0x0f80 */ 195,254,255, 84, 5, 0, 0, 20,225, 3, 10,170,193, 0, 0,148,
/* 0x0f90 */ 31, 0, 4,113,163,255,255, 84, 98, 0,128, 82,195, 0,128, 82,
/* 0x0fa0 */ 223, 40, 0,113, 67, 48,131, 26,223, 16, 0,113,195, 48,131, 26,
/* 0x0fb0 */ 198, 0, 3, 75, 34, 0, 0, 20, 97, 1, 6,145,178, 0, 0,148,
/* 0x0fc0 */ 129, 1, 0, 84,227, 11, 64,185,226, 7, 64,185,227, 15, 0,185,
/* 0x0fd0 */ 226, 11, 0,185,239, 7, 0,185, 3, 0,128, 82,223, 28, 0,113,
/* 0x0fe0 */ 102, 0,128, 82,102, 48,134, 26,106,145, 25,145, 42, 0, 0, 20,
/* 0x0ff0 */ 97, 97, 6,145,164, 0, 0,148, 97, 2, 0, 84,227, 47, 64,185,
/* 0x1000 */ 97,129, 7,145, 96, 16, 6, 11,160, 0, 0,148,161, 3, 0, 84,
/* 0x1010 */ 35, 1,128, 82,223, 28, 0,113,102, 1,128, 82,102, 48,134, 26,
/* 0x1020 */ 227, 67, 66,248, 36, 1, 3,203,159, 0, 15,107,131, 17, 0, 84,
/* 0x1030 */ 227,125, 64,147,227, 3, 3,203, 32,105, 99, 56, 32, 21, 0, 56,
/* 0x1040 */ 121, 0, 0, 20, 97,193, 6,145,143, 0, 0,148,228, 7, 64,185,
/* 0x1050 */ 64, 1, 0, 84, 97, 33, 7,145,139, 0, 0,148,228, 11, 64,185,
/* 0x1060 */ 128, 0, 0, 84,227, 11, 64,185,228, 15, 64,185,227, 15, 0,185,
/* 0x1070 */ 227, 7, 64,185,227, 11, 0,185,239, 7, 0,185,239, 3, 4, 42,
/* 0x1080 */ 3, 1,128, 82,223, 28, 0,113,102, 1,128, 82,102, 48,134, 26,
/* 0x1090 */ 106,161, 41,145, 65, 1, 0,145,125, 0, 0,148, 1, 1, 0, 84,
/* 0x10a0 */ 227, 47, 64,185, 69, 17, 0,145,227, 3, 3, 42, 2, 0,128, 82,
/* 0x10b0 */ 165, 16, 3,139, 4, 1,128, 82, 14, 0, 0, 20, 65, 9, 0,145,
/* 0x10c0 */ 115, 0, 0,148, 1, 1, 0, 84,227, 47, 64,185, 69, 17, 4,145,
/* 0x10d0 */ 227, 3, 3, 42, 2, 1,128, 82,165, 16, 3,139, 4, 1,128, 82,
/* 0x10e0 */ 4, 0, 0, 20, 69, 17, 8,145, 2, 2,128, 82, 4, 32,128, 82,
/* 0x10f0 */ 226, 55, 0,185, 32, 0,128, 82,225, 3, 5,170,101, 0, 0,148,
/* 0x1100 */ 3, 0, 4,107,163,255,255, 84,229, 55, 64,185,165, 0, 3, 11,
/* 0x1110 */ 229, 55, 0,185,223, 16, 0,113,194, 6, 0, 84,198, 28, 0, 17,
/* 0x1120 */ 99, 0,128, 82,191, 16, 0,113,101, 32,133, 26,227, 3, 5, 42,
/* 0x1130 */ 101, 29, 3,139,165,128, 13,145, 32, 0,128, 82, 4, 8,128, 82,
/* 0x1140 */ 225, 3, 5,170, 83, 0, 0,148, 3, 0, 4,107,163,255,255, 84,
/* 0x1150 */ 227, 47, 0,185,127, 16, 0,113, 99, 4, 0, 84,100,124, 1, 83,
/* 0x1160 */ 132, 4, 0, 81,111, 0, 0, 18,239, 1, 31, 50,127, 56, 0,113,
/* 0x1170 */ 226, 0, 0, 84,239, 33,196, 26,106,121, 21,145,227, 1, 3, 75,
/* 0x1180 */ 227, 3, 3, 42, 74, 5, 3,139, 12, 0, 0, 20,132, 16, 0, 81,
/* 0x1190 */ 53, 0, 0,148,231,124, 1, 83,131, 1, 7,107,108, 32,140, 26,
/* 0x11a0 */ 239, 1, 15, 26,132, 4, 0,113, 65,255,255, 84,106, 17, 25,145,
/* 0x11b0 */ 239,109, 28, 83,132, 0,128, 82, 37, 0,128, 82, 32, 0,128, 82,
/* 0x11c0 */ 225, 3, 10,170, 51, 0, 0,148, 31, 0, 0,114, 64, 0, 0, 84,
/* 0x11d0 */ 239, 1, 5, 42,165,120, 31, 83,132, 4, 0,113, 33,255,255, 84,
/* 0x11e0 */ 2, 0, 0, 20,239, 47, 64,185,239, 5, 0, 49,229, 55, 64,185,
/* 0x11f0 */ 227, 67, 66,248,165, 8, 0, 17, 35, 1, 3,203,255, 1, 3,107,
/* 0x1200 */ 232, 2, 0, 84,227,125, 64,147,227, 3, 3,203, 32,105, 99, 56,
/* 0x1210 */ 32, 21, 0, 56, 63, 1, 14,235,194, 0, 0, 84,165, 4, 0,113,
/* 0x1220 */ 97,255,255, 84,224,115, 0, 57, 63, 1, 14,235,227,229,255, 84,
/* 0x1230 */ 13, 0, 0,148, 0, 0,128, 82,226, 19, 64,249, 3, 1, 2,203,
/* 0x1240 */ 226, 31, 64,249, 67, 0, 0,185,226, 67, 66,248, 35, 1, 2,203,
/* 0x1250 */ 226, 55, 64,249, 67, 0, 0,185,255,243, 0,145, 32, 0,128, 82,
/* 0x1260 */ 246,255,255, 23,227,124, 24, 83,195, 0, 0, 53, 31, 1, 13,235,
/* 0x1270 */ 231, 92, 24, 83, 66,255,255, 84, 3, 21, 64, 56,108, 32, 12, 42,
/* 0x1280 */ 192, 3, 95,214,224, 3, 6, 42, 33, 68, 32,139, 0, 0,128, 82,
/* 0x1290 */ 33, 68, 32,139,227,124, 24, 83,241, 3, 30,170, 94, 0, 0, 16,
/* 0x12a0 */ 99,254,255, 52, 35, 0, 64,121,226,124, 11, 83, 98,124, 2, 27,
/* 0x12b0 */ 159, 1, 2,107, 2, 1, 0, 84, 2, 0,129, 82,231, 3, 2, 42,
/* 0x12c0 */ 66, 0, 3, 75, 0, 0, 0, 58, 99, 20, 66, 11, 35, 0, 0,121,
/* 0x12d0 */ 32, 2, 95,214,140, 1, 2, 75,231, 0, 2, 75, 99, 20, 67, 75,
/* 0x12e0 */ 0, 0, 0, 58, 35, 0, 0,121, 32, 2, 95,214,194, 3,128, 82,
/* 0x12f0 */ 225, 0, 0, 16, 64, 0,128, 82, 8, 8,128, 82, 1, 0, 0,212,
/* 0x1300 */ 224, 15,128, 82,168, 11,128, 82, 1, 0, 0,212, 80, 82, 79, 84,
/* 0x1310 */ 95, 69, 88, 69, 67,124, 80, 82, 79, 84, 95, 87, 82, 73, 84, 69,
/* 0x1320 */ 32,102, 97,105,108,101,100, 46, 10, 0,102,105,108,101, 32,102,
/* 0x1330 */ 111,114,109, 97,116, 32,101,108,102, 54, 52, 45,108,105,116,116,
/* 0x1340 */ 108,101, 97, 97,114, 99,104, 54, 52, 10, 10, 83,101, 99,116,105,
/* 0x1350 */ 111,110,115, 58, 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32,
/* 0x1360 */ 32, 32, 32, 32, 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32,
/* 0x1370 */ 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1380 */ 32, 32, 32, 76, 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1390 */ 32, 32, 32, 32, 32, 70,105,108,101, 32,111,102,102, 32, 32, 65,
/* 0x13a0 */ 108,103,110, 32, 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 69,
/* 0x13b0 */ 76, 70, 77, 65, 73, 78, 88, 32, 32, 32, 32, 32, 32, 48, 48, 48,
/* 0x13c0 */ 48, 48, 48, 51, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x13d0 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x13e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x13f0 */ 48, 52, 48, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69,
/* 0x1400 */ 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68,
/* 0x1410 */ 79, 78, 76, 89, 10, 32, 32, 49, 32, 76, 85, 78, 77, 80, 48, 48,
/* 0x1420 */ 48, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1430 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1440 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1450 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 55, 99, 32, 32, 50,
/* 0x1460 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82,
/* 0x1470 */ 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 50, 32, 76, 85, 78, 77,
/* 0x1480 */ 80, 48, 48, 49, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x1490 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x14a0 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x14b0 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 55, 99,
/* 0x14c0 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83,
/* 0x14d0 */ 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 51, 32, 69,
/* 0x14e0 */ 76, 70, 77, 65, 73, 78, 88,117, 32, 32, 32, 32, 32, 48, 48, 48,
/* 0x14f0 */ 48, 48, 48, 97, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1500 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x1510 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x1520 */ 48, 55, 99, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69,
/* 0x1530 */ 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68,
/* 0x1540 */ 79, 78, 76, 89, 10, 32, 32, 52, 32, 78, 82, 86, 95, 72, 69, 65,
/* 0x1550 */ 68, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1560 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1570 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1580 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 49, 49, 99, 32, 32, 50,
/* 0x1590 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82,
/* 0x15a0 */ 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 53, 32, 78, 82, 86, 95,
/* 0x15b0 */ 84, 65, 73, 76, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x15c0 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x15d0 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x15e0 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 49, 49, 99,
/* 0x15f0 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83,
/* 0x1600 */ 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 54, 32, 78,
/* 0x1610 */ 82, 86, 50, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48,
/* 0x1620 */ 48, 48, 49, 50, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1630 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x1640 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x1650 */ 49, 49, 99, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69,
/* 0x1660 */ 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32,
/* 0x1670 */ 55, 32, 78, 82, 86, 50, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1680 */ 48, 48, 48, 48, 48, 49, 49, 99, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x1690 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48,
/* 0x16a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x16b0 */ 48, 48, 48, 50, 52, 52, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79,
/* 0x16c0 */ 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89,
/* 0x16d0 */ 10, 32, 32, 56, 32, 78, 82, 86, 50, 66, 32, 32, 32, 32, 32, 32,
/* 0x16e0 */ 32, 32, 32, 48, 48, 48, 48, 48, 48,102, 48, 32, 32, 48, 48, 48,
/* 0x16f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x1700 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1710 */ 32, 48, 48, 48, 48, 48, 51, 54, 48, 32, 32, 50, 42, 42, 50, 32,
/* 0x1720 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79,
/* 0x1730 */ 78, 76, 89, 10, 32, 32, 57, 32, 76, 90, 77, 65, 95, 69, 76, 70,
/* 0x1740 */ 48, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,100, 48, 32, 32,
/* 0x1750 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1760 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1770 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 52, 53, 48, 32, 32, 50, 42,
/* 0x1780 */ 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69,
/* 0x1790 */ 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49,
/* 0x17a0 */ 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 32, 32, 32, 32,
/* 0x17b0 */ 48, 48, 48, 48, 48, 57, 51, 48, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x17c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48,
/* 0x17d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x17e0 */ 48, 48, 48, 53, 50, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79,
/* 0x17f0 */ 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89,
/* 0x1800 */ 10, 32, 49, 49, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32,
/* 0x1810 */ 32, 32, 32, 48, 48, 48, 48, 48, 52, 57, 99, 32, 32, 48, 48, 48,
/* 0x1820 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x1830 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1840 */ 32, 48, 48, 48, 48, 48,101, 53, 48, 32, 32, 50, 42, 42, 50, 32,
/* 0x1850 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79,
/* 0x1860 */ 78, 76, 89, 10, 32, 49, 50, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x1870 */ 51, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x1880 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1890 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x18a0 */ 48, 48, 32, 32, 48, 48, 48, 48, 49, 50,101, 99, 32, 32, 50, 42,
/* 0x18b0 */ 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69,
/* 0x18c0 */ 65, 68, 79, 78, 76, 89, 10, 32, 49, 51, 32, 69, 76, 70, 77, 65,
/* 0x18d0 */ 73, 78, 89, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 51,
/* 0x18e0 */ 101, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x18f0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1900 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50,101, 99, 32,
/* 0x1910 */ 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44,
/* 0x1920 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 52, 32, 69, 76,
/* 0x1930 */ 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48,
/* 0x1940 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1950 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1960 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 51,
/* 0x1970 */ 50, 97, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x1980 */ 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 83, 89, 77,
/* 0x1990 */ 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48,
/* 0x19a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x19b0 */ 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 9, 48,
/* 0x19c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x19d0 */ 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10, 48, 48, 48, 48, 48,
/* 0x19e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x19f0 */ 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 9, 48, 48, 48,
/* 0x1a00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76,
/* 0x1a10 */ 70, 77, 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a20 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x1a30 */ 69, 76, 70, 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73,
/* 0x1a50 */ 78, 88, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a60 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 85, 78, 77,
/* 0x1a70 */ 80, 48, 48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a80 */ 48, 48, 48, 48, 48, 32, 76, 85, 78, 77, 80, 48, 48, 48, 10, 48,
/* 0x1a90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1aa0 */ 108, 32, 32, 32, 32,100, 32, 32, 76, 85, 78, 77, 80, 48, 48, 49,
/* 0x1ab0 */ 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ac0 */ 48, 32, 76, 85, 78, 77, 80, 48, 48, 49, 10, 48, 48, 48, 48, 48,
/* 0x1ad0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x1ae0 */ 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88,117, 9, 48, 48,
/* 0x1af0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69,
/* 0x1b00 */ 76, 70, 77, 65, 73, 78, 88,117, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100,
/* 0x1b20 */ 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 9, 48, 48, 48, 48, 48,
/* 0x1b30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95,
/* 0x1b40 */ 72, 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b50 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82,
/* 0x1b60 */ 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b70 */ 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 84, 65, 73, 76,
/* 0x1b80 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b90 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 69, 9,
/* 0x1ba0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1bb0 */ 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1bc0 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x1bd0 */ 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1be0 */ 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48,
/* 0x1bf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32,
/* 0x1c00 */ 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48,
/* 0x1c10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86,
/* 0x1c20 */ 50, 66, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c30 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x1c40 */ 95, 69, 76, 70, 48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c50 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 69, 76, 70,
/* 0x1c60 */ 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c70 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x1c80 */ 95, 68, 69, 67, 50, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c90 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x1ca0 */ 50, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1cb0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x1cc0 */ 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1cd0 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x1ce0 */ 49, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1cf0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77,
/* 0x1d00 */ 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d10 */ 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48,
/* 0x1d20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1d30 */ 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 9, 48, 48,
/* 0x1d40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,
/* 0x1d50 */ 69, 78, 70, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d60 */ 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78,
/* 0x1d70 */ 68, 42, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d80 */ 48, 48, 48, 32, 67, 80, 82, 48, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32,
/* 0x1da0 */ 32, 32, 42, 85, 78, 68, 42, 9, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1db0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 77, 70, 76, 71, 10, 48, 48,
/* 0x1dc0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x1dd0 */ 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 9, 48, 48, 48,
/* 0x1de0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 65, 68,
/* 0x1df0 */ 82, 77, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e00 */ 48, 49, 52, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77,
/* 0x1e10 */ 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e20 */ 48, 48, 48, 48, 48, 32, 95,115,116, 97,114,116, 10, 48, 48, 48,
/* 0x1e30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32,
/* 0x1e40 */ 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48,
/* 0x1e50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 50, 56, 32,117, 99,108,
/* 0x1e60 */ 95,110,114,118, 50,101, 95,100,101, 99,111,109,112,114,101,115,
/* 0x1e70 */ 115, 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e80 */ 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82,
/* 0x1e90 */ 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ea0 */ 48, 49, 49, 99, 32,117, 99,108, 95,110,114,118, 50,100, 95,100,
/* 0x1eb0 */ 101, 99,111,109,112,114,101,115,115, 95, 51, 50, 10, 48, 48, 48,
/* 0x1ec0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32,
/* 0x1ed0 */ 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48,
/* 0x1ee0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,102, 48, 32,117, 99,108,
/* 0x1ef0 */ 95,110,114,118, 50, 98, 95,100,101, 99,111,109,112,114,101,115,
/* 0x1f00 */ 115, 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1f10 */ 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 76, 90,
/* 0x1f20 */ 77, 65, 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48,
/* 0x1f30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,122,109, 97, 68,101,
/* 0x1f40 */ 99,111,100,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1f50 */ 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76,
/* 0x1f60 */ 70, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1f70 */ 48, 48, 48, 48, 48, 48, 48, 32,101,110,100, 95,100,101, 99,111,
/* 0x1f80 */ 109,112,114,101,115,115, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1f90 */ 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32,
/* 0x1fa0 */ 69, 76, 70, 77, 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48,
/* 0x1fb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 99,112,114, 48, 10, 10,
/* 0x1fc0 */ 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82,
/* 0x1fd0 */ 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 88,
/* 0x1fe0 */ 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32,
/* 0x1ff0 */ 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2000 */ 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48,
/* 0x2010 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 82, 95, 65,
/* 0x2020 */ 65, 82, 67, 72, 54, 52, 95, 65, 66, 83, 51, 50, 32, 32, 32, 76,
/* 0x2030 */ 69, 78, 70, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2040 */ 48, 48, 48, 52, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 65,
/* 0x2050 */ 66, 83, 51, 50, 32, 32, 32, 67, 80, 82, 48, 10, 48, 48, 48, 48,
/* 0x2060 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56, 32, 82, 95, 65,
/* 0x2070 */ 65, 82, 67, 72, 54, 52, 95, 65, 66, 83, 51, 50, 32, 32, 32, 77,
/* 0x2080 */ 70, 76, 71, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2090 */ 48, 48, 48, 99, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 65,
/* 0x20a0 */ 66, 83, 54, 52, 32, 32, 32, 65, 68, 82, 77, 10, 10, 82, 69, 76,
/* 0x20b0 */ 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32,
/* 0x20c0 */ 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 88,117, 93, 58,
/* 0x20d0 */ 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x20e0 */ 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x20f0 */ 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48,
/* 0x2100 */ 48, 48, 48, 48, 48, 48, 48, 48, 50, 52, 32, 82, 95, 65, 65, 82,
/* 0x2110 */ 67, 72, 54, 52, 95, 67, 79, 78, 68, 66, 82, 49, 57, 32, 32, 69,
/* 0x2120 */ 76, 70, 77, 65, 73, 78, 89, 10, 10, 82, 69, 76, 79, 67, 65, 84,
/* 0x2130 */ 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32,
/* 0x2140 */ 91, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 93, 58, 10, 79, 70,
/* 0x2150 */ 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84,
/* 0x2160 */ 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2170 */ 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2180 */ 48, 48, 48, 48, 48, 48, 52, 32, 82, 95, 65, 65, 82, 67, 72, 54,
/* 0x2190 */ 52, 95, 67, 79, 78, 68, 66, 82, 49, 57, 32, 32, 76, 90, 77, 65,
/* 0x21a0 */ 95, 68, 69, 67, 51, 48, 10
};

View File

@ -0,0 +1,187 @@
/* arm64-linux.elf-fold.h
created from arm64-linux.elf-fold.bin, 2356 (0x934) bytes
This file is part of the UPX executable compressor.
Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2017 Laszlo Molnar
Copyright (C) 2000-2017 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>
*/
#define STUB_ARM64_LINUX_ELF_FOLD_SIZE 2356
#define STUB_ARM64_LINUX_ELF_FOLD_ADLER32 0xde69440e
#define STUB_ARM64_LINUX_ELF_FOLD_CRC32 0xf9178fcb
unsigned char stub_arm64_linux_elf_fold[2356] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 2, 0,183, 0, 1, 0, 0, 0,188, 0, 16, 0, 0, 0, 0, 0,
/* 0x0020 */ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 64, 0, 56, 0, 2, 0, 0, 0, 0, 0, 0, 0,
/* 0x0040 */ 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0050 */ 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0,
/* 0x0060 */ 52, 9, 0, 0, 0, 0, 0, 0, 52, 9, 0, 0, 0, 0, 0, 0,
/* 0x0070 */ 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
/* 0x0080 */ 52, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0090 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x00a0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
/* 0x00b0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229, 35, 65,169,
/* 0x00c0 */ 227, 19,194,168,231, 3, 64,249,224, 3, 0,145,225, 67, 0,145,
/* 0x00d0 */ 33, 12, 7,139, 34,132, 64,248,226,255,255,181, 34, 4, 65,248,
/* 0x00e0 */ 226,255,255,181, 32, 4, 64,209, 0, 16, 0,209, 33, 0, 0,203,
/* 0x00f0 */ 0,252, 76,211, 0, 4, 0,209, 6,204,116,211,192, 0, 1,203,
/* 0x0100 */ 0, 32, 0,209, 0,236,124,146,225, 35, 0,145, 31, 0, 0,145,
/* 0x0110 */ 227, 19,190,169,229, 11, 0,249, 7,132, 0,248, 34,132, 64,248,
/* 0x0120 */ 2,132, 0,248,194,255,255,181, 34,132, 64,248, 2,132, 0,248,
/* 0x0130 */ 194,255,255,181, 4, 32, 0,209, 2,132, 0,248,231, 3, 0,170,
/* 0x0140 */ 34, 12,193,168, 2, 12,129,168,194,255,255,181,224, 11, 0,249,
/* 0x0150 */ 193, 4, 64,145,129, 0, 0,249, 34, 4, 0, 24, 34, 68, 0,184,
/* 0x0160 */ 226,255,129, 82,224, 3, 0, 16, 91, 0, 0,148,160, 3, 0, 16,
/* 0x0170 */ 1, 0,128, 82, 81, 0, 0,148,228, 3, 0, 42,224, 3, 6,170,
/* 0x0180 */ 5, 0,128,210, 67, 2,128, 82, 34, 0,128, 82, 1, 0,130,210,
/* 0x0190 */ 68, 0, 0,148,224, 3, 4, 42, 47, 0, 0,148,230, 99, 0,145,
/* 0x01a0 */ 255, 3, 40,209,101, 2, 0, 16,228, 3, 15,170,227, 3, 7,170,
/* 0x01b0 */ 226, 3, 0,145,225, 3, 9, 42,224, 3, 10,170,130, 1, 0,148,
/* 0x01c0 */ 255, 3, 40,145,254, 3, 0,170,226, 15, 65,169,224, 7,194,168,
/* 0x01d0 */ 67,128, 95,248,232, 26,128, 82, 96, 0, 31,214, 32, 32, 32, 61,
/* 0x01e0 */ 47,112,114,111, 99, 47,115,101,108,102, 47,101,120,101, 0, 0,
/* 0x01f0 */ 99, 28, 0, 18,127, 72, 1,113,129, 1, 0, 84, 33,252, 66,211,
/* 0x0200 */ 65, 1, 0,180, 33, 4, 0,209, 2,120, 97,184, 67,120, 26, 83,
/* 0x0210 */ 127, 20, 0,113,129, 0, 0, 84, 67, 0, 1, 75, 98,100, 0, 51,
/* 0x0220 */ 2,120, 33,184, 1,255,255,181,192, 3, 95,214, 0, 0, 32,212,
/* 0x0230 */ 192, 3, 95,214,200, 11,128, 82, 1, 0, 0,212,232, 7,128, 82,
/* 0x0240 */ 1, 0, 0,212,192, 3, 95,214, 8, 8,128, 82, 1, 0, 0,212,
/* 0x0250 */ 192, 3, 95,214, 40, 7,128, 82, 1, 0, 0,212,192, 3, 95,214,
/* 0x0260 */ 168, 21,128, 82, 1, 0, 0,212,192, 3, 95,214,200, 26,128, 82,
/* 0x0270 */ 1, 0, 0,212,192, 3, 95,214,232, 26,128, 82, 1, 0, 0,212,
/* 0x0280 */ 192, 3, 95,214, 72, 28,128, 82, 1, 0, 0,212,192, 3, 95,214,
/* 0x0290 */ 70,241,255, 24, 5, 0,128,210, 4, 0,128,146, 99, 0, 6, 42,
/* 0x02a0 */ 200, 27,128, 82, 1, 0, 0,212,192, 3, 95,214, 1, 0,128,210,
/* 0x02b0 */ 104, 4,128, 82, 2, 0, 0, 20, 8, 7,128, 82,227, 3, 2,170,
/* 0x02c0 */ 226, 3, 1,170,225, 3, 0,170, 96, 12,128,146, 1, 0, 0,212,
/* 0x02d0 */ 192, 3, 95,214,200, 9,128, 82,227, 3, 2,170,226, 3, 1,170,
/* 0x02e0 */ 225, 3, 0,170, 96, 12,128,146, 1, 0, 0,212, 31, 4, 64,177,
/* 0x02f0 */ 98, 0, 0, 84, 3, 0,128, 82, 67,104, 32, 56,192, 3, 95,214,
/* 0x0300 */ 0, 0, 64,212, 2, 0,128, 82, 8, 0,128, 82, 1, 0, 0,212,
/* 0x0310 */ 192, 3, 95,214,128, 1, 0,180, 3, 0, 64,249,228, 3, 1, 42,
/* 0x0320 */ 127, 0, 4,235, 97, 0, 0, 84, 4, 8, 0,169,192, 3, 95,214,
/* 0x0330 */ 63, 0, 31,107, 96, 24, 65,250,128,255,255, 84, 0, 64, 0,145,
/* 0x0340 */ 246,255,255, 23,192, 3, 95,214, 3, 16, 64,169,127, 0, 2,235,
/* 0x0350 */ 99, 0, 0, 84, 3, 0,128,210, 5, 0, 0, 20,253,123,191,169,
/* 0x0360 */ 224, 15,128, 82,253, 3, 0,145,179,255,255,151, 95, 0, 3,235,
/* 0x0370 */ 160, 0, 0, 84,133,104, 99, 56, 37,104, 35, 56, 99, 4, 0,145,
/* 0x0380 */ 251,255,255, 23, 1, 4, 64,249, 33, 0, 2,139, 1, 4, 0,249,
/* 0x0390 */ 1, 0, 64,249, 34, 0, 2,203, 2, 0, 0,249,192, 3, 95,214,
/* 0x03a0 */ 253,123,187,169,253, 3, 0,145,243, 83, 1,169,245, 91, 2,169,
/* 0x03b0 */ 244, 3, 0,170,243, 3, 1,170,246, 3, 2,170,245, 3, 3,170,
/* 0x03c0 */ 96, 2, 64,249,192, 7, 0,180,161, 3, 1,145,224, 3, 20,170,
/* 0x03d0 */ 130, 1,128,210,221,255,255,151,160, 7, 72, 41, 0, 1, 0, 53,
/* 0x03e0 */ 160, 10,138, 82, 0, 43,164,114, 63, 0, 0,107,225, 0, 0, 84,
/* 0x03f0 */ 128, 2, 64,249, 64, 6, 0,180, 4, 0, 0, 20, 31, 0, 1,107,
/* 0x0400 */ 36, 32, 95,122, 97, 0, 0, 84,224, 15,128, 82,138,255,255,151,
/* 0x0410 */ 98, 2, 64,249, 95, 64, 32,235,131,255,255, 84, 31, 0, 1,107,
/* 0x0420 */ 169, 3, 0, 84,160, 63, 0,185,163,243, 0,145,164, 35, 65, 57,
/* 0x0430 */ 98, 6, 64,249,128, 6, 64,249,192, 2, 63,214, 96,254,255, 53,
/* 0x0440 */ 160,135, 71, 41, 63, 0, 0,107, 1,254,255, 84,163, 39, 65, 57,
/* 0x0450 */ 191, 2, 31,235,100, 16, 95,122, 32, 1, 0, 84, 63, 0, 8,113,
/* 0x0460 */ 136, 0, 0, 84, 96, 2, 64,249, 31, 64, 33,235,129, 0, 0, 84,
/* 0x0470 */ 162, 43, 65, 57, 96, 6, 64,249,160, 2, 63,214,128, 6, 64,169,
/* 0x0480 */ 162, 71, 64,185, 33, 0, 2,139, 0, 0, 2,203,128, 6, 0,169,
/* 0x0490 */ 5, 0, 0, 20,226, 3, 1, 42, 97, 6, 64,249,224, 3, 20,170,
/* 0x04a0 */ 170,255,255,151, 96, 6, 64,169,162, 67, 64,185, 33, 0, 2,139,
/* 0x04b0 */ 0, 0, 2,203, 96, 6, 0,169,194,255,255, 23,243, 83, 65,169,
/* 0x04c0 */ 245, 91, 66,169,253,123,197,168,192, 3, 95,214,253,123,180,169,
/* 0x04d0 */ 253, 3, 0,145,247, 99, 3,169,247, 3, 0,170,166, 75, 0,249,
/* 0x04e0 */ 6, 16, 64,249,249,107, 4,169, 25, 0, 6,139, 0, 32, 64,121,
/* 0x04f0 */ 243, 83, 1,169, 31, 12, 0,113,224,114, 64,121,244, 3, 2, 42,
/* 0x0500 */ 2, 7,128, 82,251,115, 5,169, 2,124,162,155,252, 3, 3,170,
/* 0x0510 */ 3, 2,128, 82, 99, 16,159, 26, 19, 0,128,146,245, 91, 2,169,
/* 0x0520 */ 165,147, 6,169,246, 3, 1,170, 99,136, 0, 17, 1, 0,128,210,
/* 0x0530 */ 34, 3, 2,139,224, 3, 25,170, 31, 0, 2,235,160, 1, 0, 84,
/* 0x0540 */ 4, 0, 64,185,159, 4, 0,113, 1, 1, 0, 84, 5, 8, 64,249,
/* 0x0550 */ 4, 20, 64,249,127, 2, 5,235,164, 0, 4,139,115,146,133,154,
/* 0x0560 */ 63, 0, 4,235, 33, 32,132,154, 0,224, 0,145,243,255,255, 23,
/* 0x0570 */ 115,206,116,146, 33,252, 63,145, 33, 0, 19,203,224, 3, 19,170,
/* 0x0580 */ 33,204,116,146, 5, 0,128,210, 4, 0,128, 18, 2, 0,128, 82,
/* 0x0590 */ 26, 0,128, 82, 67,255,255,151, 19, 0, 19,203, 96, 14, 0,145,
/* 0x05a0 */ 223, 2, 31,235,160, 67, 0,249, 64, 0,128, 82, 0, 16,159, 26,
/* 0x05b0 */ 160,143, 0,185,128, 2,159, 90, 65, 6,128, 82,160,139, 0,185,
/* 0x05c0 */ 64, 2,128, 82, 32, 16,128, 26,160,127, 0,185,224,114, 64,121,
/* 0x05d0 */ 95, 3, 0,107,170, 12, 0, 84, 32, 3, 64,185, 54, 1, 0,180,
/* 0x05e0 */ 31, 24, 0,113,225, 0, 0, 84, 34, 11, 64,249, 97, 0,128, 82,
/* 0x05f0 */ 224, 3, 28,170, 98, 2, 2,139, 71,255,255,151, 88, 0, 0, 20,
/* 0x0600 */ 31, 4, 0,113,193, 10, 0, 84, 56, 7, 64,185, 1, 72,140, 82,
/* 0x0610 */ 33,106,174,114, 53, 19, 64,249, 24, 11, 30, 83,163,127, 64,185,
/* 0x0620 */ 32, 36,216, 26,160,163, 0,185, 37,211, 64,169, 27, 8, 0, 18,
/* 0x0630 */ 32, 23, 64,249,116, 2, 20,139,164,139, 64,185,128, 2, 0,139,
/* 0x0640 */ 160, 79, 0,249,128, 46, 64,146,181, 83, 11,169,165, 0, 0,203,
/* 0x0650 */ 181, 2, 0,139,160,143, 64,185,148,206,116,146,225, 3, 21,170,
/* 0x0660 */ 2, 0, 27, 42,224, 3, 20,170, 14,255,255,151,159, 2, 0,235,
/* 0x0670 */ 96, 0, 0, 84,224, 15,128, 82,239,254,255,151,182, 0, 0,180,
/* 0x0680 */ 163,139, 70,169,161,195, 2,145,224, 3, 22,170, 69,255,255,151,
/* 0x0690 */ 160, 83, 64,249,227, 3, 21,203,120, 44, 64,146, 96, 0, 8, 55,
/* 0x06a0 */ 86, 1, 0,181, 32, 0, 0, 20,216,255,255,180,129, 2, 21,139,
/* 0x06b0 */ 0, 0,128,210, 63,104, 32, 56, 0, 4, 0,145, 31, 0, 24,235,
/* 0x06c0 */ 161,255,255, 84,247,255,255, 23, 32, 3, 64,249,225, 3, 0,178,
/* 0x06d0 */ 0,128, 64,146, 31, 0, 1,235,193, 1, 0, 84, 32, 23, 64,249,
/* 0x06e0 */ 34, 11, 64,249,161, 67, 64,249, 2, 0, 2,139, 66, 0, 1,139,
/* 0x06f0 */ 33, 19, 64,249, 66,244,126,146, 31, 0, 1,235,161, 0, 0, 84,
/* 0x0700 */ 224, 3, 2,203, 0, 44, 64,146, 31, 28, 0,241,104, 3, 0, 84,
/* 0x0710 */ 226, 3, 27, 42,225, 3, 21,170,224, 3, 20,170,218,254,255,151,
/* 0x0720 */ 160,250,255, 53,181, 2, 24,139,160, 79, 64,249,148, 2, 21,139,
/* 0x0730 */ 31, 0, 20,235, 73, 1, 0, 84, 1, 0, 20,203, 5, 0,128,210,
/* 0x0740 */ 4, 0,128, 18, 67, 6,128, 82,226, 3, 27, 42,224, 3, 20,170,
/* 0x0750 */ 212,254,255,151,159, 2, 0,235,225,248,255, 84, 57,227, 0,145,
/* 0x0760 */ 90, 7, 0, 17,154,255,255, 23,160, 75, 64,249,160, 1, 0,180,
/* 0x0770 */ 19, 0, 0,249, 11, 0, 0, 20, 32, 0,128, 82, 1, 0,128, 82,
/* 0x0780 */ 0,128,186,114, 64, 0, 0,185, 0,120,128, 82,224,203,186,114,
/* 0x0790 */ 64, 4, 0,185,224, 3, 28,170,223,254,255,151,221,255,255, 23,
/* 0x07a0 */ 224, 14, 64,249,245, 91, 66,169,249,107, 68,169,251,115, 69,169,
/* 0x07b0 */ 96, 2, 0,139,243, 83, 65,169,247, 99, 67,169,253,123,204,168,
/* 0x07c0 */ 192, 3, 95,214,253,123,183,169,253, 3, 0,145,243, 83, 1,169,
/* 0x07d0 */ 243, 3, 2,170, 84, 0, 1,145,162,135, 6,169, 2, 0, 64,185,
/* 0x07e0 */ 245, 91, 2,169,160,135, 7,169,245, 3, 3,170,160, 71, 0,249,
/* 0x07f0 */ 3, 0,128,210,161,131, 1,145,160, 3, 2,145,162, 51, 0,249,
/* 0x0800 */ 226, 3, 4,170,246, 3, 4,170,247, 99, 3,169,249, 35, 0,249,
/* 0x0810 */ 247, 3, 5,170,249, 3, 6,170,226,254,255,151,130, 10, 64,249,
/* 0x0820 */ 97, 0,128, 82,224, 3, 21,170, 66, 0, 1,145,186,254,255,151,
/* 0x0830 */ 98,114, 64,121,161, 0,128, 82,224, 3, 21,170,182,254,255,151,
/* 0x0840 */ 229, 3, 23,170,228, 3, 22,170,230, 3, 25,170,227, 3, 21,170,
/* 0x0850 */ 2, 0,128, 82,161,195, 1,145,224, 3, 19,170, 23, 0,128, 82,
/* 0x0860 */ 27,255,255,151,226, 3, 0,170,246, 3, 0,170, 33, 1,128, 82,
/* 0x0870 */ 224, 3, 21,170,168,254,255,151, 96,114, 64,121,255, 2, 0,107,
/* 0x0880 */ 202, 4, 0, 84,128, 2, 64,185, 31, 12, 0,113, 1, 4, 0, 84,
/* 0x0890 */ 128, 10, 64,249, 2, 0,128, 82, 35, 3, 64,249, 1, 0,128, 82,
/* 0x08a0 */ 96, 0, 0,139,133,254,255,151,248, 3, 0, 42, 96, 0,248, 54,
/* 0x08b0 */ 224, 15,128, 82, 96,254,255,151, 2,128,128,210,225, 3, 19,170,
/* 0x08c0 */ 95,254,255,151, 31, 0, 16,241, 65,255,255, 84,166, 99, 1,145,
/* 0x08d0 */ 5, 0,128,210, 4, 0,128,210, 3, 0,128,210,226, 3, 24, 42,
/* 0x08e0 */ 1, 0,128,210,224, 3, 19,170,191, 47, 0,249,248,254,255,151,
/* 0x08f0 */ 246, 3, 0,170,162, 47, 64,249,224, 3, 21,170,225, 0,128, 82,
/* 0x0900 */ 133,254,255,151,224, 3, 24, 42, 83,254,255,151,148,226, 0,145,
/* 0x0910 */ 247, 6, 0, 17,217,255,255, 23,224, 3, 22,170,249, 35, 64,249,
/* 0x0920 */ 243, 83, 65,169,245, 91, 66,169,247, 99, 67,169,253,123,201,168,
/* 0x0930 */ 192, 3, 95,214
};

View File

@ -0,0 +1,551 @@
/* arm64-linux.shlib-init.h
created from arm64-linux.shlib-init.bin, 8187 (0x1ffb) bytes
This file is part of the UPX executable compressor.
Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2017 Laszlo Molnar
Copyright (C) 2000-2017 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>
*/
#define STUB_ARM64_LINUX_SHLIB_INIT_SIZE 8187
#define STUB_ARM64_LINUX_SHLIB_INIT_ADLER32 0x5a8b7b3c
#define STUB_ARM64_LINUX_SHLIB_INIT_CRC32 0x3a7d7f09
unsigned char stub_arm64_linux_shlib_init[8187] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0,183, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0, 88, 24, 0, 0, 0, 0, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
/* 0x0040 */ 0, 0, 32,212,253,123,190,169,224, 11, 0,249,227, 19,190,169,
/* 0x0050 */ 230, 31, 1,169,224, 7,190,169,226, 11, 0,249,253, 3, 0,145,
/* 0x0060 */ 0, 0, 0,148,254, 15, 31,248,226, 15,191,169, 7, 64, 33,139,
/* 0x0070 */ 5, 0,128, 18, 4, 0,176, 82, 24, 0, 0, 20,227, 19,193,168,
/* 0x0080 */ 0, 0, 7,203, 66, 0, 3,203,130, 0, 0,185,228, 3, 0,170,
/* 0x0090 */ 224, 3, 3,170, 97, 0, 2,139, 32,123, 11,213, 32,117, 11,213,
/* 0x00a0 */ 0, 0, 1,145, 31, 0, 1,235,131,255,255, 84,224, 3, 4,170,
/* 0x00b0 */ 254, 7, 65,248,192, 3, 95,214,132, 0, 4, 43, 68, 0, 0, 52,
/* 0x00c0 */ 192, 3, 95,214, 4, 68, 64,184,132, 0, 4, 58,192, 3, 95,214,
/* 0x00d0 */ 3, 20, 64, 56, 67, 20, 0, 56,248,255,255,151,162,255,255, 84,
/* 0x00e0 */ 33, 0,128, 82, 4, 0, 0, 20, 33, 4, 0, 81,243,255,255,151,
/* 0x00f0 */ 33, 0, 1, 26,241,255,255,151, 33, 0, 1, 26,239,255,255,151,
/* 0x0100 */ 67,255,255, 84, 35, 12, 0,113, 1, 0,128, 82, 35, 1, 0, 84,
/* 0x0110 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42, 5,251,255, 52,
/* 0x0120 */ 191, 0, 0,114,165,124, 1, 19,161, 1, 0, 84, 3, 0, 0, 20,
/* 0x0130 */ 226,255,255,151, 66, 1, 0, 84, 33, 0,128, 82,223,255,255,151,
/* 0x0140 */ 226, 0, 0, 84,221,255,255,151, 33, 0, 1, 26,219,255,255,151,
/* 0x0150 */ 163,255,255, 84, 33, 16, 0, 17, 4, 0, 0, 20,215,255,255,151,
/* 0x0160 */ 33, 0, 1, 26, 33, 8, 0, 17,191, 0, 20, 49, 33, 36,129, 26,
/* 0x0170 */ 67, 64, 33,139, 99,240, 95, 56, 67,200,101, 56, 67, 20, 0, 56,
/* 0x0180 */ 33, 4, 0,113,161,255,255, 84,212,255,255, 23,226, 15,190,169,
/* 0x0190 */ 254, 11, 0,249, 7, 64, 33,139, 5, 0,128, 18, 4, 0,176, 82,
/* 0x01a0 */ 24, 0, 0, 20,227, 19,193,168, 0, 0, 7,203, 66, 0, 3,203,
/* 0x01b0 */ 130, 0, 0,185,228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139,
/* 0x01c0 */ 32,123, 11,213, 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235,
/* 0x01d0 */ 131,255,255, 84,224, 3, 4,170,254, 7, 65,248,192, 3, 95,214,
/* 0x01e0 */ 132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214, 4, 68, 64,184,
/* 0x01f0 */ 132, 0, 4, 58,192, 3, 95,214, 3, 20, 64, 56, 67, 20, 0, 56,
/* 0x0200 */ 248,255,255,151,162,255,255, 84, 33, 0,128, 82, 4, 0, 0, 20,
/* 0x0210 */ 33, 4, 0, 81,243,255,255,151, 33, 0, 1, 58,241,255,255,151,
/* 0x0220 */ 33, 0, 1, 58,239,255,255,151, 67,255,255, 84, 35, 12, 0,113,
/* 0x0230 */ 1, 0,128, 82, 35, 1, 0, 84, 5, 20, 64, 56,165, 32, 3, 42,
/* 0x0240 */ 229, 3, 37, 42, 5,251,255, 52,163, 0, 1, 83,165,124, 1, 83,
/* 0x0250 */ 99, 0, 3, 43, 2, 0, 0, 20,226,255,255,151, 33, 0, 1, 58,
/* 0x0260 */ 224,255,255,151, 33, 0, 1, 58,225, 0, 0, 84, 33, 0,128, 82,
/* 0x0270 */ 220,255,255,151, 33, 0, 1, 58,218,255,255,151,163,255,255, 84,
/* 0x0280 */ 33, 8, 0, 17, 33, 4, 0, 17,191, 0, 20, 49, 33, 52,129, 26,
/* 0x0290 */ 67, 0, 64, 57, 67,200,101, 56, 67, 20, 0, 56, 33, 4, 0,113,
/* 0x02a0 */ 161,255,255, 84,215,255,255, 23, 1, 64, 33,139,225, 11,190,169,
/* 0x02b0 */ 227,123, 1,169, 5, 0,128, 18, 4, 0,176, 82, 31, 0, 0, 20,
/* 0x02c0 */ 228,123, 65,169,225, 15,194,168, 0, 0, 1,203, 66, 0, 3,203,
/* 0x02d0 */ 130, 0, 0,185,228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139,
/* 0x02e0 */ 32,123, 11,213, 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235,
/* 0x02f0 */ 131,255,255, 84,224, 3, 4,170,192, 3, 95,214,132, 0, 4, 43,
/* 0x0300 */ 68, 0, 0, 52,192, 3, 95,214, 4, 68, 64,184,132, 0, 4, 58,
/* 0x0310 */ 192, 3, 95,214, 33, 0,128, 82,240, 3, 30,170,248,255,255,151,
/* 0x0320 */ 33, 0, 1, 58,246,255,255,151,163,255,255, 84, 0, 2, 31,214,
/* 0x0330 */ 3, 20, 64, 56, 67, 20, 0, 56,241,255,255,151,162,255,255, 84,
/* 0x0340 */ 245,255,255,151, 35, 12, 0,113, 1, 0,128, 82,163, 0, 0, 84,
/* 0x0350 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42, 37,251,255, 52,
/* 0x0360 */ 231,255,255,151, 33, 0, 1, 58,229,255,255,151, 33, 0, 1, 58,
/* 0x0370 */ 97, 0, 0, 84,232,255,255,151, 33, 8, 0, 17,191, 0, 52, 49,
/* 0x0380 */ 33, 36,129, 26, 67,200,101, 56, 33, 4, 0,113, 67, 20, 0, 56,
/* 0x0390 */ 162,255,255, 84,233,255,255, 23,159, 56, 0,113, 1, 0, 0, 84,
/* 0x03a0 */ 1, 64, 33,139, 4, 0,128,210,225, 11,190,169,227,123, 1,169,
/* 0x03b0 */ 228, 19,191,169,224, 3, 0,145,227, 35, 0,145,230, 51, 0,145,
/* 0x03c0 */ 8, 0, 64, 57, 7,192,128, 82, 8,125, 3, 83,231, 32,200, 26,
/* 0x03d0 */ 253, 3, 0,145,231,192, 57, 17,232, 3, 0,145,255, 67, 39,203,
/* 0x03e0 */ 100, 16,129,168,127, 0, 8,235,195,255,255, 84,230, 3, 3,170,
/* 0x03f0 */ 229, 3, 7, 42,228, 3, 2,170, 34, 8, 0, 81,225, 3, 0,170,
/* 0x0400 */ 39, 20, 64, 56,231, 8, 0, 18,231, 11, 0, 57, 39, 20, 64, 56,
/* 0x0410 */ 232,124, 4, 83,232, 7, 0, 57,231, 12, 0, 18,231, 3, 0, 57,
/* 0x0420 */ 224, 3, 0,145, 17, 0, 0,148,191, 3, 0,145,228,123, 65,169,
/* 0x0430 */ 225, 15,194,168, 0, 0, 1,203, 66, 0, 3,203,130, 0, 0,185,
/* 0x0440 */ 228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139, 32,123, 11,213,
/* 0x0450 */ 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235,131,255,255, 84,
/* 0x0460 */ 224, 3, 4,170,192, 3, 95,214,243, 83,184,169, 39, 0,128, 82,
/* 0x0470 */ 20, 16, 0,145,245, 91, 1,169,247, 99, 2,169,249,107, 3,169,
/* 0x0480 */ 251,115, 4,169,254, 43, 0,249, 8, 4, 64, 57, 26, 8, 64, 57,
/* 0x0490 */ 28, 0, 64, 57,127, 0, 0,185,250, 32,218, 26,223, 0, 0,185,
/* 0x04a0 */ 231, 32,200, 26,231, 4, 0, 81,231,111, 0,185, 8, 4, 64, 57,
/* 0x04b0 */ 7, 96,128, 82, 90, 7, 0, 81, 8, 1, 28, 11,232, 32,200, 26,
/* 0x04c0 */ 8,217, 28, 49,224, 0, 0, 84, 7, 0,128,210, 9,128,128, 82,
/* 0x04d0 */ 137,122, 39,120,231, 4, 0,145, 31, 1, 7,107,168,255,255, 84,
/* 0x04e0 */ 51, 64, 34,139,127, 2, 1,235, 0, 15, 0, 84,235, 3, 1,170,
/* 0x04f0 */ 34, 4, 0,145,103, 85, 64, 56,127, 2, 2,235, 96, 14, 0, 84,
/* 0x0500 */ 72, 20, 64, 56,127, 1, 2,235, 7, 33, 7, 42, 97,255,255, 84,
/* 0x0510 */ 37, 68, 0, 52, 9,176, 41,145, 59, 0,128, 82,233, 63, 0,249,
/* 0x0520 */ 9, 1,128, 82, 41, 1, 28, 75, 10, 0,128, 18,245, 3, 27, 42,
/* 0x0530 */ 25, 0,128, 82, 8, 0,128, 82, 2, 0,128, 82, 16,224,191, 18,
/* 0x0540 */ 17, 0,129, 82,251,107, 0,185,251,115, 0,185,233,119, 0,185,
/* 0x0550 */ 78, 0, 26, 10, 44,111, 28, 83, 95, 1, 16,107,201,125, 64,147,
/* 0x0560 */ 44,193, 44,139,143,249,127,211,232, 0, 0, 84,127, 2, 11,235,
/* 0x0570 */ 192, 10, 0, 84,105, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145,
/* 0x0580 */ 39, 33, 7, 42,141,122,108,120, 73,125, 11, 83,169,125, 9, 27,
/* 0x0590 */ 255, 0, 9,107,162, 10, 0, 84,234,211, 65, 57, 63, 27, 0,113,
/* 0x05a0 */ 8, 41,202, 26,234,111, 64,185, 79, 0, 10, 10,239, 33,220, 26,
/* 0x05b0 */ 239, 1, 8, 11, 40, 2, 13, 75,234,117, 30, 83, 79, 1, 15, 75,
/* 0x05c0 */ 173, 21,136, 11,239, 93,120,211,141,122, 44,120,239,217, 28,145,
/* 0x05d0 */ 143, 6, 15,139, 45, 31, 0, 84, 72, 0, 21, 75,146,104,104, 56,
/* 0x05e0 */ 40, 0,128, 82, 7, 0, 0, 20,236,121, 42,120, 8,121, 31, 83,
/* 0x05f0 */ 233, 3, 14, 42,205, 56, 0, 53, 31,253, 3,113,204, 3, 0, 84,
/* 0x0600 */ 82,122, 31, 83, 63, 1, 16,107, 77, 2, 24, 18, 22,121, 31, 83,
/* 0x0610 */ 170,125, 64,147, 74, 1, 4,145, 74,193, 40,139,232, 0, 0, 84,
/* 0x0620 */ 127, 1, 19,235, 41, 93, 24, 83, 0, 5, 0, 84,108, 1, 64, 57,
/* 0x0630 */ 107, 5, 0,145,135, 33, 7, 42,236,121,106,120, 46,125, 11, 83,
/* 0x0640 */ 55, 2, 12, 75,142,125, 14, 27,152, 21, 76, 75,140, 21,151, 11,
/* 0x0650 */ 255, 0, 14,107, 41, 1, 14, 75,131,252,255, 84,248,121, 42,120,
/* 0x0660 */ 200, 6, 0, 17,231, 0, 14, 75,141,252,255, 53, 31,253, 3,113,
/* 0x0670 */ 45, 27, 0, 84, 8, 29, 0, 83,234, 3, 9, 42,136, 72, 34, 56,
/* 0x0680 */ 66, 4, 0, 17, 63, 39, 0,113,140, 49, 0, 84, 57, 15, 0, 81,
/* 0x0690 */ 191, 0, 2,107,232,245,255, 84, 0,224,191, 18, 95, 1, 0,107,
/* 0x06a0 */ 136, 0, 0, 84,127, 2, 11,235, 0, 1, 0, 84,107, 5, 0,145,
/* 0x06b0 */ 97, 1, 1,203, 97, 0, 0,185, 0, 0,128, 82,194, 0, 0,185,
/* 0x06c0 */ 3, 0, 0, 20, 31, 32, 3,213, 32, 0,128, 82,245, 91, 65,169,
/* 0x06d0 */ 247, 99, 66,169,249,107, 67,169,251,115, 68,169,254, 43, 64,249,
/* 0x06e0 */ 243, 83,200,168,192, 3, 95,214, 74, 1, 9, 75,173, 21, 77, 75,
/* 0x06f0 */ 231, 0, 9, 75,141,122, 44,120, 41,127, 64,147, 95, 1, 16,107,
/* 0x0700 */ 41, 1, 3,145, 45,249,127,211,232, 0, 0, 84,127, 1, 19,235,
/* 0x0710 */ 192,253,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145,
/* 0x0720 */ 7, 33, 7, 42,140,122,105,120, 72,125, 11, 83,136,125, 8, 27,
/* 0x0730 */ 255, 0, 8,107, 98, 25, 0, 84,234,107, 64,185, 63, 31, 0,113,
/* 0x0740 */ 251,115, 64,185,234,115, 0,185, 42, 2, 12, 75,245,107, 0,185,
/* 0x0750 */ 140, 21,138, 11,140,122, 41,120,105, 0,128, 82,249,179,137, 26,
/* 0x0760 */ 9,160, 25,145, 31, 1, 16,107,232, 0, 0, 84,127, 2, 11,235,
/* 0x0770 */ 192,250,255, 84,106, 1, 64, 57, 8, 93, 24, 83,107, 5, 0,145,
/* 0x0780 */ 71, 33, 7, 42, 44, 1, 64,121, 10,125, 11, 83,138,125, 10, 27,
/* 0x0790 */ 255, 0, 10,107,226, 30, 0, 84,210,113, 29, 83, 40, 2, 12, 75,
/* 0x07a0 */ 22, 0,128, 82,126, 0,128, 82, 82,126, 64,147,140, 21,136, 11,
/* 0x07b0 */ 82, 10, 0,145, 44, 1, 0,121, 50, 5, 18,139,238, 3, 30, 42,
/* 0x07c0 */ 45, 0,128, 82, 6, 0, 0, 20,232, 1, 0,121,206, 5, 0,113,
/* 0x07d0 */ 173,121, 31, 83,234, 3, 9, 42, 32, 3, 0, 84, 95, 1, 16,107,
/* 0x07e0 */ 183,121, 31, 83, 79,198, 45,139,232, 0, 0, 84,127, 2, 11,235,
/* 0x07f0 */ 74, 93, 24, 83,160,246,255, 84,104, 1, 64, 57,107, 5, 0,145,
/* 0x0800 */ 7, 33, 7, 42,232, 1, 64,121, 73,125, 11, 83, 44, 2, 8, 75,
/* 0x0810 */ 9,125, 9, 27, 24, 21, 72, 75, 8, 21,140, 11,255, 0, 9,107,
/* 0x0820 */ 74, 1, 9, 75, 35,253,255, 84,248, 1, 0,121,206, 5, 0,113,
/* 0x0830 */ 231, 0, 9, 75,237, 6, 0, 17, 33,253,255, 84, 40, 0,128, 82,
/* 0x0840 */ 63, 15, 0,113, 30, 33,222, 26,222, 2, 30, 75,205, 3, 13, 11,
/* 0x0850 */ 236, 22, 0, 84,191, 13, 0,113,104, 0,128, 82,181,209,136, 26,
/* 0x0860 */ 207, 0,128, 82,181,102, 26, 83, 46, 0,128, 82,181,126, 64,147,
/* 0x0870 */ 181,194, 6,145,181,250,127,211, 7, 0, 0, 20, 31, 32, 3,213,
/* 0x0880 */ 136,106, 50,120,239, 5, 0,113,206,121, 31, 83,234, 3, 9, 42,
/* 0x0890 */ 32, 3, 0, 84, 95, 1, 16,107,214,121, 31, 83,178,198, 46,139,
/* 0x08a0 */ 232, 0, 0, 84,127, 2, 11,235, 74, 93, 24, 83,224,240,255, 84,
/* 0x08b0 */ 104, 1, 64, 57,107, 5, 0,145, 7, 33, 7, 42,136,106,114,120,
/* 0x08c0 */ 73,125, 11, 83, 44, 2, 8, 75, 9,125, 9, 27, 23, 21, 72, 75,
/* 0x08d0 */ 8, 21,140, 11,255, 0, 9,107, 74, 1, 9, 75, 35,253,255, 84,
/* 0x08e0 */ 151,106, 50,120,239, 5, 0,113,231, 0, 9, 75,206, 6, 0, 17,
/* 0x08f0 */ 33,253,255, 84,213, 1, 1, 81,191, 14, 0,113, 45, 17, 0, 84,
/* 0x0900 */ 191, 54, 0,113,168, 2, 0, 18, 8, 1, 31, 50,169,126, 1, 19,
/* 0x0910 */ 44, 32, 0, 84, 47, 5, 0, 81, 9, 86,128,210, 46,193, 53,203,
/* 0x0920 */ 21, 33,207, 26,206, 65, 53,139,142, 6, 14,139,206, 9, 0,209,
/* 0x0930 */ 50, 0,128, 82,247, 3, 18, 42, 8, 0, 0, 20, 31, 32, 3,213,
/* 0x0940 */ 200, 2, 0,121, 82,122, 31, 83,234, 3, 9, 42,239, 5, 0,113,
/* 0x0950 */ 247,122, 31, 83, 96, 14, 0, 84, 95, 1, 16,107, 88,122, 31, 83,
/* 0x0960 */ 214,197, 50,139,232, 0, 0, 84,127, 2, 11,235, 74, 93, 24, 83,
/* 0x0970 */ 192,234,255, 84,104, 1, 64, 57,107, 5, 0,145, 7, 33, 7, 42,
/* 0x0980 */ 200, 2, 64,121, 73,125, 11, 83, 44, 2, 8, 75, 9,125, 9, 27,
/* 0x0990 */ 30, 21, 72, 75, 8, 21,140, 11,255, 0, 9,107, 74, 1, 9, 75,
/* 0x09a0 */ 3,253,255, 84,222, 2, 0,121,231, 0, 9, 75,181, 2, 23, 42,
/* 0x09b0 */ 18, 7, 0, 17,230,255,255, 23, 40, 0,128, 82, 6, 0, 0, 20,
/* 0x09c0 */ 8,121, 31, 83,234,121, 46,120, 31,253, 3,113,233, 3, 12, 42,
/* 0x09d0 */ 44, 3, 0, 84, 63, 1, 16,107, 18,121, 31, 83, 14,125, 64,147,
/* 0x09e0 */ 232, 0, 0, 84,127, 2, 11,235, 41, 93, 24, 83,224,230,255, 84,
/* 0x09f0 */ 106, 1, 64, 57,107, 5, 0,145, 71, 33, 7, 42,234,121,110,120,
/* 0x0a00 */ 44,125, 11, 83, 45, 2, 10, 75, 76,125, 12, 27, 86, 21, 74, 75,
/* 0x0a10 */ 74, 21,141, 11,255, 0, 12,107, 41, 1, 12, 75, 35,253,255, 84,
/* 0x0a20 */ 72, 6, 0, 17,246,121, 46,120, 31,253, 3,113,231, 0, 12, 75,
/* 0x0a30 */ 45,253,255, 84, 8, 29, 0, 83, 63, 15, 0,113,136, 72, 34, 56,
/* 0x0a40 */ 234, 3, 9, 42, 66, 4, 0, 17,236,225,255, 84,191, 0, 2,107,
/* 0x0a50 */ 25, 0,128, 82,232,215,255, 84, 16,255,255, 23, 31, 32, 3,213,
/* 0x0a60 */ 74, 1, 8, 75,140, 21, 76, 75, 95, 1, 16,107,140,122, 41,120,
/* 0x0a70 */ 231, 0, 8, 75,169, 97, 0,145,232, 0, 0, 84,127, 2, 11,235,
/* 0x0a80 */ 64,226,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145,
/* 0x0a90 */ 7, 33, 7, 42,140,106,105,120, 72,125, 11, 83,136,125, 8, 27,
/* 0x0aa0 */ 255, 0, 8,107,226, 9, 0, 84, 42, 2, 12, 75, 31, 1, 16,107,
/* 0x0ab0 */ 239,129, 7,145,140, 21,138, 11,140,106, 41,120,232, 0, 0, 84,
/* 0x0ac0 */ 127, 2, 11,235, 32,224,255, 84,105, 1, 64, 57, 8, 93, 24, 83,
/* 0x0ad0 */ 107, 5, 0,145, 39, 33, 7, 42,137,106,111,120, 10,125, 11, 83,
/* 0x0ae0 */ 42,125, 10, 27,255, 0, 10,107,130, 16, 0, 84, 40, 2, 9, 75,
/* 0x0af0 */ 41, 21,136, 11,137,106, 47,120,130,222,255, 52, 72, 0, 21, 75,
/* 0x0b00 */ 63, 31, 0,113, 41, 1,128, 82,108, 1,128, 82, 57,177,140, 26,
/* 0x0b10 */ 136,104,104, 56,136, 72, 34, 56, 66, 4, 0, 17,221,254,255, 23,
/* 0x0b20 */ 181, 6, 0, 49,160,219,255, 84, 57, 31, 0, 17,191, 2, 2,107,
/* 0x0b30 */ 173, 9, 0, 17,168,220,255, 84,233, 3, 2, 42, 72, 0, 21, 75,
/* 0x0b40 */ 173, 5, 0, 81, 66, 4, 0, 17,191, 1, 31,107,160, 16, 66,122,
/* 0x0b50 */ 136,104,104, 56,136, 72, 41, 56,233, 3, 2, 42, 8,255,255, 84,
/* 0x0b60 */ 191, 0, 2,107,104,207,255, 84,204,254,255, 23, 31, 32, 3,213,
/* 0x0b70 */ 8, 1, 10, 75,140, 21, 76, 75, 31, 1, 16,107, 44, 1, 0,121,
/* 0x0b80 */ 231, 0, 10, 75,232, 0, 0, 84,127, 2, 11,235,224,217,255, 84,
/* 0x0b90 */ 106, 1, 64, 57, 8, 93, 24, 83,107, 5, 0,145, 71, 33, 7, 42,
/* 0x0ba0 */ 44, 5, 64,121, 10,125, 11, 83,138,125, 10, 27,255, 0, 10,107,
/* 0x0bb0 */ 66, 7, 0, 84,210,113, 29, 83, 40, 2, 12, 75, 22, 1,128, 82,
/* 0x0bc0 */ 126, 0,128, 82, 82,126, 64,147,136, 21,136, 11, 82, 10, 2,145,
/* 0x0bd0 */ 40, 5, 0,121, 50, 5, 18,139,249,254,255, 23, 31, 32, 3,213,
/* 0x0be0 */ 74, 1, 8, 75,231, 0, 8, 75, 95, 1, 16,107,136, 21, 76, 75,
/* 0x0bf0 */ 136,106, 41,120,172,193, 0,145,232, 0, 0, 84,127, 2, 11,235,
/* 0x0c00 */ 64,214,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145,
/* 0x0c10 */ 7, 33, 7, 42,137,106,108,120, 72,125, 11, 83, 40,125, 8, 27,
/* 0x0c20 */ 255, 0, 8,107, 35, 5, 0, 84, 74, 1, 8, 75, 41, 21, 73, 75,
/* 0x0c30 */ 95, 1, 16,107,137,106, 44,120,231, 0, 8, 75,173, 33, 1,145,
/* 0x0c40 */ 232, 0, 0, 84,127, 2, 11,235, 0,212,255, 84,104, 1, 64, 57,
/* 0x0c50 */ 74, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42,137,106,109,120,
/* 0x0c60 */ 72,125, 11, 83, 40,125, 8, 27,255, 0, 8,107,226, 7, 0, 84,
/* 0x0c70 */ 234, 3, 21, 42,236,107, 64,185,234,107, 0,185, 42, 2, 9, 75,
/* 0x0c80 */ 245,115, 64,185, 41, 21,138, 11,236,115, 0,185,137,106, 45,120,
/* 0x0c90 */ 20, 0, 0, 20, 31, 32, 3,213,231, 0, 10, 75, 50, 17, 8,145,
/* 0x0ca0 */ 10, 1, 10, 75, 22, 2,128, 82,136, 21, 76, 75, 30, 1,128, 82,
/* 0x0cb0 */ 40, 5, 0,121,194,254,255, 23,191, 0, 2,107, 57, 27, 0, 81,
/* 0x0cc0 */ 136,196,255, 84,117,254,255, 23,234, 3, 21, 42,245,107, 64,185,
/* 0x0cd0 */ 234,107, 0,185, 42, 2, 9, 75, 41, 21,138, 11,137,106, 44,120,
/* 0x0ce0 */ 63, 31, 0,113, 10, 1,128, 82,108, 1,128, 82,233, 63, 64,249,
/* 0x0cf0 */ 89,177,140, 26,156,254,255, 23, 41, 21, 73, 75, 8, 1, 10, 75,
/* 0x0d00 */ 137,106, 47,120,231, 0, 10, 75,246,255,255, 23,233, 3, 14, 42,
/* 0x0d10 */ 87,254,255, 23, 41, 21, 0, 81, 95, 1, 16,107, 8,121, 31, 83,
/* 0x0d20 */ 232, 0, 0, 84,127, 2, 11,235, 74, 93, 24, 83,224,204,255, 84,
/* 0x0d30 */ 108, 1, 64, 57,107, 5, 0,145,135, 33, 7, 42, 74,125, 1, 83,
/* 0x0d40 */ 255, 0, 10,107, 99, 0, 0, 84,231, 0, 10, 75, 8, 1, 0, 50,
/* 0x0d50 */ 41, 5, 0,113, 33,254,255, 84, 21,109, 28, 83, 14, 32, 25,145,
/* 0x0d60 */ 143, 0,128, 82,243,254,255, 23, 41, 21, 73, 75,137,106, 45,120,
/* 0x0d70 */ 233,107, 64,185,236, 3, 21, 42,231, 0, 8, 75,245, 3, 27, 42,
/* 0x0d80 */ 72, 1, 8, 75,251,115, 64,185,236,107, 0,185,233,115, 0,185,
/* 0x0d90 */ 212,255,255, 23, 2, 0,128, 82,227, 19,189,169,229, 27, 1,169,
/* 0x0da0 */ 254, 19, 0,249,232, 3, 1,170, 45, 64, 34,139,233, 3, 4,170,
/* 0x0db0 */ 142, 64, 37,139, 11, 16, 0,145, 6, 0, 64, 57, 5, 4, 64, 57,
/* 0x0dc0 */ 4, 8, 64, 57,174, 0, 6, 11, 7, 0,128, 18,229, 32,197, 26,
/* 0x0dd0 */ 229, 3, 37, 42,228, 32,196, 26,228, 3, 36, 42, 35, 0,128, 82,
/* 0x0de0 */ 34, 0,128, 82, 33, 0,128, 82, 32, 0,128, 82, 6, 0,128, 82,
/* 0x0df0 */ 230, 31, 0,185, 2, 96,128, 82,192,230,128, 82, 66, 32,206, 26,
/* 0x0e00 */ 66, 0, 0, 11, 0,128,128,210,225, 3, 11,170, 0, 64, 0,170,
/* 0x0e10 */ 0,128, 0,170, 32,132, 0,248, 66, 16, 0,113,204,255,255, 84,
/* 0x0e20 */ 0, 21, 0,145,231, 0, 0,148, 31, 0, 8,235,193,255,255, 84,
/* 0x0e30 */ 227, 67, 66,248,226, 19, 64,185, 36, 1, 3,203,128, 0, 2, 10,
/* 0x0e40 */ 224, 47, 0,185, 0, 16, 6, 11, 97, 1, 0,145,225, 0, 0,148,
/* 0x0e50 */ 129, 5, 0, 84,227, 23, 64,185,226, 27, 64,185, 99, 0, 4, 10,
/* 0x0e60 */ 224,115, 64, 57, 99, 32,194, 26,226, 3, 2, 75, 66, 32, 0, 17,
/* 0x0e70 */ 2, 36,194, 26, 99, 0, 2, 11,106,177, 57,145, 99, 4, 3, 11,
/* 0x0e80 */ 227, 3, 3, 42, 32, 0,128, 82, 74, 37, 3,139,223, 28, 0,113,
/* 0x0e90 */ 3, 2, 0, 84,227,125, 64,147,227, 3, 3,203, 37,105, 99, 56,
/* 0x0ea0 */ 165,120, 31, 83, 65, 1, 8,145,164, 0, 24, 18,227, 3, 4, 42,
/* 0x0eb0 */ 33, 4, 3,139,201, 0, 0,148, 3, 0, 0, 18,127, 32, 68,107,
/* 0x0ec0 */ 193, 0, 0, 84, 31, 0, 4,113,195,254,255, 84, 5, 0, 0, 20,
/* 0x0ed0 */ 225, 3, 10,170,193, 0, 0,148, 31, 0, 4,113,163,255,255, 84,
/* 0x0ee0 */ 98, 0,128, 82,195, 0,128, 82,223, 40, 0,113, 67, 48,131, 26,
/* 0x0ef0 */ 223, 16, 0,113,195, 48,131, 26,198, 0, 3, 75, 34, 0, 0, 20,
/* 0x0f00 */ 97, 1, 6,145,178, 0, 0,148,129, 1, 0, 84,227, 11, 64,185,
/* 0x0f10 */ 226, 7, 64,185,227, 15, 0,185,226, 11, 0,185,239, 7, 0,185,
/* 0x0f20 */ 3, 0,128, 82,223, 28, 0,113,102, 0,128, 82,102, 48,134, 26,
/* 0x0f30 */ 106,145, 25,145, 42, 0, 0, 20, 97, 97, 6,145,164, 0, 0,148,
/* 0x0f40 */ 97, 2, 0, 84,227, 47, 64,185, 97,129, 7,145, 96, 16, 6, 11,
/* 0x0f50 */ 160, 0, 0,148,161, 3, 0, 84, 35, 1,128, 82,223, 28, 0,113,
/* 0x0f60 */ 102, 1,128, 82,102, 48,134, 26,227, 67, 66,248, 36, 1, 3,203,
/* 0x0f70 */ 159, 0, 15,107,131, 17, 0, 84,227,125, 64,147,227, 3, 3,203,
/* 0x0f80 */ 32,105, 99, 56, 32, 21, 0, 56,121, 0, 0, 20, 97,193, 6,145,
/* 0x0f90 */ 143, 0, 0,148,228, 7, 64,185, 64, 1, 0, 84, 97, 33, 7,145,
/* 0x0fa0 */ 139, 0, 0,148,228, 11, 64,185,128, 0, 0, 84,227, 11, 64,185,
/* 0x0fb0 */ 228, 15, 64,185,227, 15, 0,185,227, 7, 64,185,227, 11, 0,185,
/* 0x0fc0 */ 239, 7, 0,185,239, 3, 4, 42, 3, 1,128, 82,223, 28, 0,113,
/* 0x0fd0 */ 102, 1,128, 82,102, 48,134, 26,106,161, 41,145, 65, 1, 0,145,
/* 0x0fe0 */ 125, 0, 0,148, 1, 1, 0, 84,227, 47, 64,185, 69, 17, 0,145,
/* 0x0ff0 */ 227, 3, 3, 42, 2, 0,128, 82,165, 16, 3,139, 4, 1,128, 82,
/* 0x1000 */ 14, 0, 0, 20, 65, 9, 0,145,115, 0, 0,148, 1, 1, 0, 84,
/* 0x1010 */ 227, 47, 64,185, 69, 17, 4,145,227, 3, 3, 42, 2, 1,128, 82,
/* 0x1020 */ 165, 16, 3,139, 4, 1,128, 82, 4, 0, 0, 20, 69, 17, 8,145,
/* 0x1030 */ 2, 2,128, 82, 4, 32,128, 82,226, 55, 0,185, 32, 0,128, 82,
/* 0x1040 */ 225, 3, 5,170,101, 0, 0,148, 3, 0, 4,107,163,255,255, 84,
/* 0x1050 */ 229, 55, 64,185,165, 0, 3, 11,229, 55, 0,185,223, 16, 0,113,
/* 0x1060 */ 194, 6, 0, 84,198, 28, 0, 17, 99, 0,128, 82,191, 16, 0,113,
/* 0x1070 */ 101, 32,133, 26,227, 3, 5, 42,101, 29, 3,139,165,128, 13,145,
/* 0x1080 */ 32, 0,128, 82, 4, 8,128, 82,225, 3, 5,170, 83, 0, 0,148,
/* 0x1090 */ 3, 0, 4,107,163,255,255, 84,227, 47, 0,185,127, 16, 0,113,
/* 0x10a0 */ 99, 4, 0, 84,100,124, 1, 83,132, 4, 0, 81,111, 0, 0, 18,
/* 0x10b0 */ 239, 1, 31, 50,127, 56, 0,113,226, 0, 0, 84,239, 33,196, 26,
/* 0x10c0 */ 106,121, 21,145,227, 1, 3, 75,227, 3, 3, 42, 74, 5, 3,139,
/* 0x10d0 */ 12, 0, 0, 20,132, 16, 0, 81, 53, 0, 0,148,231,124, 1, 83,
/* 0x10e0 */ 131, 1, 7,107,108, 32,140, 26,239, 1, 15, 26,132, 4, 0,113,
/* 0x10f0 */ 65,255,255, 84,106, 17, 25,145,239,109, 28, 83,132, 0,128, 82,
/* 0x1100 */ 37, 0,128, 82, 32, 0,128, 82,225, 3, 10,170, 51, 0, 0,148,
/* 0x1110 */ 31, 0, 0,114, 64, 0, 0, 84,239, 1, 5, 42,165,120, 31, 83,
/* 0x1120 */ 132, 4, 0,113, 33,255,255, 84, 2, 0, 0, 20,239, 47, 64,185,
/* 0x1130 */ 239, 5, 0, 49,229, 55, 64,185,227, 67, 66,248,165, 8, 0, 17,
/* 0x1140 */ 35, 1, 3,203,255, 1, 3,107,232, 2, 0, 84,227,125, 64,147,
/* 0x1150 */ 227, 3, 3,203, 32,105, 99, 56, 32, 21, 0, 56, 63, 1, 14,235,
/* 0x1160 */ 194, 0, 0, 84,165, 4, 0,113, 97,255,255, 84,224,115, 0, 57,
/* 0x1170 */ 63, 1, 14,235,227,229,255, 84, 13, 0, 0,148, 0, 0,128, 82,
/* 0x1180 */ 226, 19, 64,249, 3, 1, 2,203,226, 31, 64,249, 67, 0, 0,185,
/* 0x1190 */ 226, 67, 66,248, 35, 1, 2,203,226, 55, 64,249, 67, 0, 0,185,
/* 0x11a0 */ 255,243, 0,145, 32, 0,128, 82,246,255,255, 23,227,124, 24, 83,
/* 0x11b0 */ 195, 0, 0, 53, 31, 1, 13,235,231, 92, 24, 83, 66,255,255, 84,
/* 0x11c0 */ 3, 21, 64, 56,108, 32, 12, 42,192, 3, 95,214,224, 3, 6, 42,
/* 0x11d0 */ 33, 68, 32,139, 0, 0,128, 82, 33, 68, 32,139,227,124, 24, 83,
/* 0x11e0 */ 241, 3, 30,170, 94, 0, 0, 16, 99,254,255, 52, 35, 0, 64,121,
/* 0x11f0 */ 226,124, 11, 83, 98,124, 2, 27,159, 1, 2,107, 2, 1, 0, 84,
/* 0x1200 */ 2, 0,129, 82,231, 3, 2, 42, 66, 0, 3, 75, 0, 0, 0, 58,
/* 0x1210 */ 99, 20, 66, 11, 35, 0, 0,121, 32, 2, 95,214,140, 1, 2, 75,
/* 0x1220 */ 231, 0, 2, 75, 99, 20, 67, 75, 0, 0, 0, 58, 35, 0, 0,121,
/* 0x1230 */ 32, 2, 95,214,194, 3,128, 82,225, 0, 0, 16, 64, 0,128, 82,
/* 0x1240 */ 8, 8,128, 82, 1, 0, 0,212,224, 15,128, 82,168, 11,128, 82,
/* 0x1250 */ 1, 0, 0,212, 80, 82, 79, 84, 95, 69, 88, 69, 67,124, 80, 82,
/* 0x1260 */ 79, 84, 95, 87, 82, 73, 84, 69, 32,102, 97,105,108,101,100, 46,
/* 0x1270 */ 10, 0, 0, 0,226, 3, 30,170, 65,208, 0,209,229, 3, 1,170,
/* 0x1280 */ 36, 68, 64,184,165, 0, 4,203, 36, 68, 64,184,164, 0, 4,139,
/* 0x1290 */ 164, 75, 0,185, 36, 68, 64,184,164, 0, 4,139,228,207, 31,248,
/* 0x12a0 */ 36, 68, 64,184,160, 0, 4, 11, 1, 96, 0, 17,255, 35, 0,209,
/* 0x12b0 */ 36, 4, 64,185, 33, 48, 0,145, 33, 0, 4,139, 36, 68, 64,184,
/* 0x12c0 */ 5, 44, 12, 83,165,124, 22, 83,132, 8, 5, 11,228,207, 31,184,
/* 0x12d0 */ 0, 8, 5, 75,224,207, 31,184,132, 8, 5, 75, 0, 8, 5, 11,
/* 0x12e0 */ 229,207, 31,184, 16, 0, 0,148, 99, 28, 0, 18,127, 64, 1,113,
/* 0x12f0 */ 129, 1, 0, 84, 33,252, 66,211, 65, 1, 0,180, 33, 4, 0,209,
/* 0x1300 */ 2,120, 97,184, 67,120, 26, 83,127, 20, 0,113,129, 0, 0, 84,
/* 0x1310 */ 66, 0, 1, 75, 98, 20, 26, 83, 2,120, 33,184, 1,255,255,181,
/* 0x1320 */ 192, 3, 95,214,254,207, 31,248, 35, 20, 64, 57,227,207, 31,248,
/* 0x1330 */ 35, 24, 64, 57,227,207, 31,248,228,207, 31,248,224,207, 31,248,
/* 0x1340 */ 36, 68, 64,184,229, 3, 4, 42, 36, 68, 64,184,228,207, 31,248,
/* 0x1350 */ 226,207, 31,248,163, 83, 1,209,227,207, 31,248,224,207, 31,248,
/* 0x1360 */ 229,207, 31,248,225,207, 31,248, 35, 4, 64,146,165, 12, 0,145,
/* 0x1370 */ 165, 0, 3,139,163, 3, 93,184, 98, 8, 69,139,163,131, 89,184,
/* 0x1380 */ 115, 0, 0,148,163,131, 92,184,113, 0, 0,148, 67, 0, 0,148,
/* 0x1390 */ 4, 0,128,146, 67, 6,128,210, 98, 0,128,210,161,195, 93,248,
/* 0x13a0 */ 160,131, 93,248,230, 3, 0,170,200, 27,128, 82, 1, 0, 0,212,
/* 0x13b0 */ 31, 0, 6,235, 64, 0, 0, 84, 0, 0, 32,212,165, 3, 93,184,
/* 0x13c0 */ 161, 67, 95,248, 44, 0, 0,148,226, 15, 65,169,224, 7,194,168,
/* 0x13d0 */ 228, 7, 65,248,128, 0, 63,214,255, 35, 0,145, 10, 0, 0,148,
/* 0x13e0 */ 232, 26,128, 82, 1, 0, 0,212,226, 11, 64,249,224, 7,194,168,
/* 0x13f0 */ 230, 31, 65,169,228, 23,194,168,225, 11, 64,249,253,123,194,168,
/* 0x1400 */ 32, 0, 31,214,164,195, 95,184,192, 7, 64,169,128, 4, 0,169,
/* 0x1410 */ 226, 15, 65,169,224, 7,194,168,228, 51,193,168, 67, 0, 0,180,
/* 0x1420 */ 128, 0, 63,214,224, 3, 64,249,225, 67, 64,248, 2, 0,128,210,
/* 0x1430 */ 33, 0, 0,139, 33, 32, 0,145, 8, 0,176, 82, 1, 0, 0,212,
/* 0x1440 */ 224, 7,193,168,162, 0,128,210, 72, 28,128, 82, 1, 0, 0,212,
/* 0x1450 */ 254, 11, 64,249,224, 7,194,168,192, 3, 31,214, 37,192, 95,184,
/* 0x1460 */ 165, 92, 0, 18,165, 4, 0, 17, 35, 68, 64,184,165, 4, 0, 81,
/* 0x1470 */ 3, 68, 0,184,191, 8, 0,114,129,255,255, 84,165,124, 3, 83,
/* 0x1480 */ 165, 0, 0, 52, 34, 12,193,168,165, 4, 0,113, 2, 12,129,168,
/* 0x1490 */ 165,255,255, 53,192, 3, 95,214,254,207, 31,248,227, 3, 30,170,
/* 0x14a0 */ 43, 0, 0,148, 65,244,126,211, 4, 0,128,146, 67, 4,128,210,
/* 0x14b0 */ 226, 0,128,210,161,195, 31,248, 0, 0,128,210,200, 27,128, 82,
/* 0x14c0 */ 1, 0, 0,212, 31, 4, 64,177, 67, 0, 0, 84, 0, 0, 32,212,
/* 0x14d0 */ 160, 67, 31,248,161,131, 93,184,165, 3, 93,184,230,255,255,151,
/* 0x14e0 */ 161,131, 87,184,165,195, 87,184, 35, 4, 0, 18, 33, 0, 3, 75,
/* 0x14f0 */ 165, 0, 3, 11, 99, 0, 0, 11,163,131, 23,184,165, 28, 0, 17,
/* 0x1500 */ 165,124, 3, 83,220,255,255,151,226, 3, 0,170,161,131, 89,248,
/* 0x1510 */ 160,131, 25,248,210,255,255,151,161,131, 92,248,160,131, 28,248,
/* 0x1520 */ 207,255,255,151,225, 71, 64,248,224,207, 31,248,204,255,255,151,
/* 0x1530 */ 225, 3, 0,170,224, 3, 2,170, 2, 0,128,210, 8, 0,176, 82,
/* 0x1540 */ 1, 0, 0,212,254, 71, 64,248,192, 3, 31,214, 99,192, 95,184,
/* 0x1550 */ 99, 92, 0, 18, 99, 4, 0, 17, 66, 0, 3,139,192, 3, 95,214,
/* 0x1560 */ 102,105,108,101, 32,102,111,114,109, 97,116, 32,101,108,102, 54,
/* 0x1570 */ 52, 45,108,105,116,116,108,101, 97, 97,114, 99,104, 54, 52, 10,
/* 0x1580 */ 10, 83,101, 99,116,105,111,110,115, 58, 10, 73,100,120, 32, 78,
/* 0x1590 */ 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,
/* 0x15a0 */ 101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32,
/* 0x15b0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32,
/* 0x15c0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,
/* 0x15d0 */ 111,102,102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,103,115,
/* 0x15e0 */ 10, 32, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 32, 32,
/* 0x15f0 */ 32, 32, 32, 48, 48, 48, 48, 48, 48, 50, 52, 32, 32, 48, 48, 48,
/* 0x1600 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x1610 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1620 */ 32, 48, 48, 48, 48, 48, 48, 52, 48, 32, 32, 50, 42, 42, 50, 32,
/* 0x1630 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67,
/* 0x1640 */ 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 49, 32, 78,
/* 0x1650 */ 82, 86, 95, 72, 69, 65, 68, 32, 32, 32, 32, 32, 32, 48, 48, 48,
/* 0x1660 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1670 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x1680 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x1690 */ 48, 54, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69,
/* 0x16a0 */ 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32,
/* 0x16b0 */ 50, 32, 78, 82, 86, 95, 84, 65, 73, 76, 32, 32, 32, 32, 32, 32,
/* 0x16c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x16d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48,
/* 0x16e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x16f0 */ 48, 48, 48, 48, 54, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79,
/* 0x1700 */ 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89,
/* 0x1710 */ 10, 32, 32, 51, 32, 78, 82, 86, 50, 69, 32, 32, 32, 32, 32, 32,
/* 0x1720 */ 32, 32, 32, 48, 48, 48, 48, 48, 49, 50, 56, 32, 32, 48, 48, 48,
/* 0x1730 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x1740 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1750 */ 32, 48, 48, 48, 48, 48, 48, 54, 52, 32, 32, 50, 42, 42, 50, 32,
/* 0x1760 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79,
/* 0x1770 */ 78, 76, 89, 10, 32, 32, 52, 32, 78, 82, 86, 50, 68, 32, 32, 32,
/* 0x1780 */ 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 49, 99, 32, 32,
/* 0x1790 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x17a0 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x17b0 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 49, 56, 99, 32, 32, 50, 42,
/* 0x17c0 */ 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69,
/* 0x17d0 */ 65, 68, 79, 78, 76, 89, 10, 32, 32, 53, 32, 78, 82, 86, 50, 66,
/* 0x17e0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,102,
/* 0x17f0 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1800 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1810 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 50, 97, 56, 32,
/* 0x1820 */ 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44,
/* 0x1830 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 54, 32, 76, 90,
/* 0x1840 */ 77, 65, 95, 69, 76, 70, 48, 48, 32, 32, 32, 32, 48, 48, 48, 48,
/* 0x1850 */ 48, 48,100, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1860 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1870 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 51,
/* 0x1880 */ 57, 56, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x1890 */ 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79,
/* 0x18a0 */ 78, 76, 89, 10, 32, 32, 55, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x18b0 */ 50, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 57, 51, 48, 32, 32,
/* 0x18c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x18d0 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x18e0 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 52, 54, 56, 32, 32, 50, 42,
/* 0x18f0 */ 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69,
/* 0x1900 */ 65, 68, 79, 78, 76, 89, 10, 32, 32, 56, 32, 76, 90, 77, 65, 95,
/* 0x1910 */ 68, 69, 67, 49, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 52, 57,
/* 0x1920 */ 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1930 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1940 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,100, 57, 56, 32,
/* 0x1950 */ 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44,
/* 0x1960 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 57, 32, 76, 90,
/* 0x1970 */ 77, 65, 95, 68, 69, 67, 51, 48, 32, 32, 32, 32, 48, 48, 48, 48,
/* 0x1980 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1990 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x19a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50,
/* 0x19b0 */ 51, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x19c0 */ 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 48,
/* 0x19d0 */ 32, 69, 76, 70, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32, 32, 48,
/* 0x19e0 */ 48, 48, 48, 48, 48, 51,101, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x19f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x1a00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48,
/* 0x1a10 */ 48, 49, 50, 51, 52, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78,
/* 0x1a20 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10,
/* 0x1a30 */ 32, 49, 49, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32, 32, 32,
/* 0x1a40 */ 32, 32, 48, 48, 48, 48, 48, 50,101, 99, 32, 32, 48, 48, 48, 48,
/* 0x1a50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x1a60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x1a70 */ 48, 48, 48, 48, 49, 50, 55, 52, 32, 32, 50, 42, 42, 50, 32, 32,
/* 0x1a80 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78,
/* 0x1a90 */ 76, 89, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58,
/* 0x1aa0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ab0 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68,
/* 0x1ac0 */ 69, 67, 51, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ad0 */ 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48,
/* 0x1ae0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1af0 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73,
/* 0x1b00 */ 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b10 */ 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48,
/* 0x1b20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32,
/* 0x1b30 */ 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 9, 48,
/* 0x1b40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1b50 */ 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100,
/* 0x1b70 */ 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 9, 48, 48, 48, 48, 48,
/* 0x1b80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95,
/* 0x1b90 */ 72, 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ba0 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82,
/* 0x1bb0 */ 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1bc0 */ 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 84, 65, 73, 76,
/* 0x1bd0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1be0 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 69, 9,
/* 0x1bf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c00 */ 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c10 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x1c20 */ 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c30 */ 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48,
/* 0x1c40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32,
/* 0x1c50 */ 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48,
/* 0x1c60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86,
/* 0x1c70 */ 50, 66, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c80 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x1c90 */ 95, 69, 76, 70, 48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ca0 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 69, 76, 70,
/* 0x1cb0 */ 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1cc0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x1cd0 */ 95, 68, 69, 67, 50, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ce0 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x1cf0 */ 50, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d00 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x1d10 */ 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d20 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x1d30 */ 49, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d40 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77,
/* 0x1d50 */ 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d60 */ 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 10, 48,
/* 0x1d70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1d80 */ 103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88,
/* 0x1d90 */ 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1da0 */ 48, 32, 95,115,116, 97,114,116, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x1db0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32,
/* 0x1dc0 */ 70, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1dd0 */ 48, 48, 48, 48, 48, 49, 50, 56, 32,117, 99,108, 95,110,114,118,
/* 0x1de0 */ 50,101, 95,100,101, 99,111,109,112,114,101,115,115, 95, 51, 50,
/* 0x1df0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e00 */ 48, 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 68, 9,
/* 0x1e10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 99,
/* 0x1e20 */ 32,117, 99,108, 95,110,114,118, 50,100, 95,100,101, 99,111,109,
/* 0x1e30 */ 112,114,101,115,115, 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32,
/* 0x1e50 */ 70, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e60 */ 48, 48, 48, 48, 48, 48,102, 48, 32,117, 99,108, 95,110,114,118,
/* 0x1e70 */ 50, 98, 95,100,101, 99,111,109,112,114,101,115,115, 95, 51, 50,
/* 0x1e80 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e90 */ 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68,
/* 0x1ea0 */ 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1eb0 */ 48, 48, 48, 48, 48, 32, 76,122,109, 97, 68,101, 99,111,100,101,
/* 0x1ec0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ed0 */ 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73,
/* 0x1ee0 */ 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ef0 */ 48, 48, 48, 32,101,110,100, 95,100,101, 99,111,109,112,114,101,
/* 0x1f00 */ 115,115, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82,
/* 0x1f10 */ 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77,
/* 0x1f20 */ 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32,
/* 0x1f30 */ 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32,
/* 0x1f40 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10,
/* 0x1f50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 48,
/* 0x1f60 */ 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 67, 65, 76, 76, 50,
/* 0x1f70 */ 54, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 10, 82, 69, 76,
/* 0x1f80 */ 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32,
/* 0x1f90 */ 70, 79, 82, 32, 91, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 93,
/* 0x1fa0 */ 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1fb0 */ 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1fc0 */ 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48,
/* 0x1fd0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 32, 82, 95, 65, 65,
/* 0x1fe0 */ 82, 67, 72, 54, 52, 95, 67, 79, 78, 68, 66, 82, 49, 57, 32, 32,
/* 0x1ff0 */ 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10
};

View File

@ -0,0 +1,58 @@
MAKEFLAGS += -rR
.SUFFIXES:
.SECONDEXPANSION:
ifndef top_srcdir
__dir_list = . .. ../.. ../../.. ../../../.. ../../../../..
__dir_list += ../../../../../.. ../../../../../../.. ../../../../../../../..
__dir_search = $(firstword $(foreach v,$1,$(if $(wildcard $v/$2),$v)) $3)
top_srcdir := $(call __dir_search,$(__dir_list),src/bele.h,NOT_FOUND)
endif
include $(wildcard $(top_srcdir)/Makevars.global ./Makevars.local)
vpath %.c $(top_srcdir)/src/stub/src/c
STUBS =
include $(top_srcdir)/src/stub/src/c/Makevars.lzma
ifneq ($(UPX_LZMA_VERSION),)
STUBS += lzma_d_cf.S lzma_d_cs.S
endif
default.targets = all
ifeq ($(strip $(STUBS)),)
STUBS = NO_STUBS
all.targets =
endif
include $(top_srcdir)/src/stub/Makefile
# /***********************************************************************
# // method-lzma
# ************************************************************************/
lzma_d_c%.S : tc_list = method-lzma arm64-linux.elf default
lzma_d_c%.S : tc_bfdname = elf64-littleaarch64
c := tc.method-lzma.gcc
$c = $(tc.arm64-linux.elf.gcc)
$c += -fomit-frame-pointer
$c += -fno-unit-at-a-time
$c += -ffunction-sections
$c += -fwrapv
$c += -DWITH_LZMA=$(UPX_LZMA_VERSION)
$c += -I$(UPX_LZMADIR)
$c += -I$(top_srcdir)/src
$c += -Wno-error
tc.method-lzma.objcopy = /usr/bin/aarch64-linux-gnu-objcopy
tc.method-lzma.objdump = /usr/bin/aarch64-linux-gnu-objdump
lzma_d_c%.S : lzma_d_c.c
$(call tc,gcc) $(PP_FLAGS) -c $< -o tmp/$T.o
$(call tc,f-objstrip,tmp/$T.o)
$(call tc,objcopy) -O binary --only-section .text.LzmaDecode tmp/$T.o tmp/$T.bin
head -c-4 tmp/$T.bin > tmp/$T.out
$(call tc,objdump) -b binary -m aarch64 -D tmp/$T.out | $(RTRIM) > tmp/$T.out.disasm
$(call tc,bin2h) --mode=gas tmp/$T.out $@
lzma_d_cf.% : PP_FLAGS = -DFAST -O2
lzma_d_cs.% : PP_FLAGS = -DSMALL -Os

View File

@ -71,8 +71,9 @@ Align= (SpecPos + kNumFullDistances - kEndPosModelIndex)
RepLenCoder= (LenCoder + kNumLenProbs)
Literal= (RepLenCoder + kNumLenProbs)
LZMA_BASE_SIZE= Literal /* 1846 */
LZMA_LIT_SIZE= 768
// Already #define in lzma_d.S
//LZMA_BASE_SIZE= Literal
//LZMA_LIT_SIZE= 768
#define call bl /* subroutine call */
@ -137,7 +138,7 @@ vs_lc= 0
*/
LzmaDecode: .globl LzmaDecode
// save &inSizeProcesesed and caller registers
PUSH5(x3,x4,x5,x6, x30)
PUSH5(x3,x4,x5,x6, lr)
mov inPtr,x1
add inLim,x1,w2, uxtw
mov outPtr,x4
@ -489,8 +490,8 @@ rcGetBit_mi: // rcGetBit(mi, mi + p_in)
add p_in,p_in,mi, uxtw #1
rcGetBit: // Out: CC set on mo
lsr t0,Range,#kNumTopBits
mov t2x,x30 // save lr if need rcLoad
adr x30,rcGetBitCont; cbz t0,rcLoad // conditional subroutine call
mov t2x,lr // save lr if need rcLoad
adr lr,rcGetBitCont; cbz t0,rcLoad // conditional subroutine call
rcGetBitCont:
#define starp t0
#define bound t1

View File

@ -1,525 +1,165 @@
// In LZMA SDK 4.63 file lzma.txt (2008-12-30):
// LZMA SDK is written and placed in the public domain by Igor Pavlov.
// The creative expression of this hand compilation into assembly language,
// including (but not limited to) code organization and register assignment,
// remains copyright by John F. Reiser and licensed under GNU Lesser General
// Public License (GNU LGPL).
/* lzma_d.S -- arm64 decompressor for LZMA
// Hand compiled Copyright (c) 2006-2017 John F. Reiser (2007-06-18)
// from modified LzmaDecode.c.
// LZMA SDK 4.40 Copyright (c) 1999-2017 Igor Pavlov (2006-05-01)
//
// This file is licensed under either of these two licenses:
// 1) GNU Lesser General Public License (GNU LGPL)
// 2) Common Public License (CPL)
// See files LGPL.txt and CPL.html for the text of the licenses.
This file is part of the UPX executable compressor.
#include "macros.S"
Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2017 Laszlo Molnar
Copyright (C) 2000-2017 John F. Reiser
All Rights Reserved.
kLzmaStreamWasFinishedId= (-1)
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.
kNumTopBits= 24
kTopValue= 1<<kNumTopBits
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.
kNumBitModelTotalBits= 11
kBitModelTotal= (1 << kNumBitModelTotalBits)
kNumMoveBits= 5
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.
kNumPosBitsMax= 4
kNumPosStatesMax= (1 << kNumPosBitsMax)
Markus F.X.J. Oberhumer Laszlo Molnar
<markus@oberhumer.com> <ezerotven+github@gmail.com>
kLenNumLowBits= 3
kLenNumLowSymbols= (1 << kLenNumLowBits)
kLenNumMidBits= 3
kLenNumMidSymbols= (1 << kLenNumMidBits)
kLenNumHighBits= 8
kLenNumHighSymbols= (1 << kLenNumHighBits)
LenChoice= 0
LenChoice2= (LenChoice + 1)
LenLow= (LenChoice2 + 1)
LenMid= (LenLow + (kNumPosStatesMax << kLenNumLowBits))
LenHigh= (LenMid + (kNumPosStatesMax << kLenNumMidBits))
kNumLenProbs= (LenHigh + kLenNumHighSymbols)
kNumStates= 12
kNumLitStates= 7
kStartPosModelIndex= 4
kEndPosModelIndex= 14
kNumFullDistances= (1 << (kEndPosModelIndex >> 1))
kNumPosSlotBits= 6
kNumLenToPosStates= 4
kNumAlignBits= 4
kAlignTableSize= (1 << kNumAlignBits)
kMatchMinLen= 2
IsMatch= 0
IsRep= (IsMatch + (kNumStates << kNumPosBitsMax))
IsRepG0= (IsRep + kNumStates)
IsRepG1= (IsRepG0 + kNumStates)
IsRepG2= (IsRepG1 + kNumStates)
IsRep0Long= (IsRepG2 + kNumStates)
PosSlot= (IsRep0Long + (kNumStates << kNumPosBitsMax))
SpecPos= (PosSlot + (kNumLenToPosStates << kNumPosSlotBits))
Align= (SpecPos + kNumFullDistances - kEndPosModelIndex)
LenCoder= (Align + kAlignTableSize)
RepLenCoder= (LenCoder + kNumLenProbs)
Literal= (RepLenCoder + kNumLenProbs)
LZMA_BASE_SIZE= Literal /* 1846 */
LZMA_LIT_SIZE= 768
#define call bl /* subroutine call */
#define symbol mi
#define mo mi
#define mi w0
#define p_in x1
#define t1 w2
#define t1x x2
#define t0 w3
#define t0x x3
#define bit w4
#define bitx x4
#define i w5
#define ix x5
#define state w6
#define Range w7
#define inPtr x8
#define outPtr x9
#define prob x10
#define p x11
#define Code w12
#define inLim x13
#define outLim x14
#define rep0 w15
#define t2x x17
#define nowPos bit /* temporary only */
#define nowPosx bitx /* temporary only */
#define distance bit
#define numDirectBits bit
#define hibit bit
#define matchB i
#define probLen ix
#define probLit ix
#define posSlot posState
#define r_posSlot t0
#define r_len i
#define vs x0
vs_ps= 2
vs_lp= 1
vs_lc= 0
#if !defined(PARAMETER_STYLE) /*{*/
#define PARAMETER_STYLE 1
// Possible choices:
// 1 /* 0 bytes; 1-byte encoding of pb,lp,lc [default] */
// 2 /* -24 bytes; 2-byte encoding requires no division */
// 3 /* -32 bytes; separate bytes lc,lp,pb,xx at -4+ probs */
#endif /*}*/
/* LzmaDecode(x0=vs, x1=inStream, w2=inSize, x3= &inSizeProcessed,
x4= outStream, w5= outSize, x6= &outSizeProcessed)
John F. Reiser
<jreiser@users.sourceforge.net>
*/
LzmaDecode: .globl LzmaDecode
// save &inSizeProcesesed and caller registers
PUSH5(x3,x4,x5,x6, x30)
mov inPtr,x1
add inLim,x1,w2, uxtw
mov outPtr,x4
add outLim,x4,w5, uxtw
#if 1==PARAMETER_STYLE /*{ [0]: pb*45 + lp*9 + lc */
mov p,vs
ldrb w6,[inPtr],#1
#define section .section
mov w0,#45; udiv w4,w6,w0 // w4 = quo(w6, 45) = pb
mul w0,w0,w4; sub w6,w6,w0 // w6 = rem(w6, 45)
section LZMA_ELF00
//decompress: // (uchar const *src, size_t lsrc, uchar *dst, u32 &ldst, uint method)
/* Arguments according to calling convention */
src .req x0
#define lsrc w1
dst .req x2
#define ldst x3 /* Out: actually a reference: &len_dst */
#define meth w4
mov w0,#9; udiv w5,w6,w0 // w5 = quo(w6, 9) = lp
mul w0,w0,w5; sub w6,w6,w0 // w6 = rem(w6, 9) = lc
#endif /*}*/
#define M_LZMA 14
cmp meth,#M_LZMA; bne not_lzma
#if 2==PARAMETER_STYLE /*{ [0]: ((lc + lp)<<3) | pb; [1]: (lp<<4) | lc */
mov p,vs
ldrb w4,[inPtr],#1; and w4,w4,#7 // pb
ldrb w6,[inPtr],#1; mov w5,w6,lsr #4 // lp
and w6,w6,#0xf // lc
add x1,src,len,uxtw // x1= eof_src;
mov x4,#0
PUSH4(x1,x2,x3, lr)
#endif /*}*/
PUSH2(x4,x4) // clear CLzmaDecoderState, inSizeProcessed, outSizeProcessed
State= 0
#define a0 x0 /* &CLzmaDecoderState */
add a0,sp,#State
#define a1 x1 /* inp */
#define a2 w2 /* inSize */
#define a3 x3 /* &inSizeProcessed */
add a3,sp,#8
#define a4 x4 /* outp */
#define a5 w5 /* outSize */
#define a6 x6 /* &outSizeProcessed */
add a6,sp,#12
#if 3==PARAMETER_STYLE /*{ lc,lp,pb,xx in separate bytes before probs[] */
add p,vs,#4
ldrb w6,[vs, #vs_lc]
ldrb w5,[vs, #vs_lp]
ldrb w4,[vs, #vs_ps]
#endif /*}*/
#undef vs
#define t0 w7
#define t1 w8
#define t1x x8
add w14,w5,w6 // lp + lc
mov Range,#~0
lsl w5,Range,w5; mvn w5,w5 // ~(~0<<lp) == litPosMask
lsl w4,Range,w4; mvn w4,w4 // ~(~0<<ps) == posStateMask
mov w3,#1
mov w2,#1
mov w1,#1
mov w0,#1
// FIXME stmdb sp!,{r0,r1,r2,r3, r4,r5,r6,r7, r8,r9,r10,r11, r12,r14}
//#define rep0 [sp, #0*4]
#define rep1 [sp, #1*4]
#define rep2 [sp, #2*4]
#define rep3 [sp, #3*4]
#define posStateMask [sp, #4*4]
#define litPosMask [sp, #5*4]
#define lc [sp, #6*4]
#define prevB [sp, #7*4]
#define inBuf [sp, #8*4]
#define outBuf [sp, #9*4]
//#define outLim [sp, #10*4]
#define posState [sp, #11*4]
//#define inLim [sp, #12*4]
#define m_len [sp, #13*4]
#define fp x29
#define inSizeProcessed [sp, #(14 )*4]
#define outSizeProcessed [sp, #(14+10+2)*4]
//The target is:
//LzmaDecode( // from lzmaSDK/C/7zip/Compress/LZMA_C/LzmaDecode.h
// a0= &CLzmaDecoderState,
// a1= inp, a2= inSize, a3= &inSizeProcessed,
// a4= outp, a5= outSize, a6= &outSizeProcessed
//)
#define LZMA_BASE_SIZE 1846
#define LZMA_LIT_SIZE 768
mov state,#0
str state,prevB
ldrb t1,[src,#0] // first byte, replaces LzmaDecodeProperties()
mov t0,#2*LZMA_LIT_SIZE
lsr t1,t1,#3 // lit_context_bits + lit_pos_bits
lslv t0,t0,t1 // 2*LZMA_LIT_SIZE << (lit_context_bits + lit_pos_bits)
mov fp,sp
#define W 4 /* even #bits to round up so that 8 bits span all the 1's */
add t0,t0,#((~(~0<<W) + 2*LZMA_BASE_SIZE)>>W)<<W
mov t1x,sp
sub sp,sp,t0,uxtw
mov w2,#LZMA_LIT_SIZE
mov w0,#LZMA_BASE_SIZE
lsl w2,w2,w14 // LZMA_LIT_SIZE << (lp + lc)
add w2,w2,w0
mov x0,#(kBitModelTotal>>1) // 0.5 starting probability
mov x1,p
orr x0,x0,x0,lsl #16
orr x0,x0,x0,lsl #32
L10:
str x0,[x1],#4*2 // 4 at a time
subs w2,w2,#4; bgt L10
1: // clear inSizeProcessed and CLzmaDecoderState
stp x4,x4,[x3],#2*8
cmp x3,t1x
blo 1b
add x0,inPtr,#5 // sentinel
L14:
call rcInit2; cmp x0,inPtr; bne L14
mov a6,ldst // &outSizeProcessed
mov a5,t0 // outSize
mov a4,dst // outp
sub w2,lsrc,#2 // inSize
mov a1,src // inp
L200: // main loop
ldr t0x,outBuf
ldr t1,posStateMask
sub nowPosx,outPtr,t0x
and mi,nowPos,t1
str mi,posState
add mi,mi,state, lsl #kNumPosBitsMax
add p_in,p,#IsMatch<<1
call rcGetBit_mi0; bne L270
ldrb t0,[a1],#1 // first byte, replaces LzmaDecodeProperties()
and t0,t0,#7 // posBits
strb t0,[sp,#2 + State]
ldrb t0,[a1],#1 // second byte, replaces LzmaDecodeProperties()
lsr t1,t0,#4 // lit_pos_bits
strb t1,[sp,#1 + State]
and t0,t0,#0xf // lib_context_bits
strb t0,[sp,#0 + State]
ldr t0,litPosMask
ldr t1,lc
and t0,t0,nowPos
ldrb mi,prevB
lsl t0,t0,t1 // (nowPos & litPosMask)<<lc
neg t1,t1; add t1,t1,#8 // rsb t1,t1,#8
lsr t1,mi,t1 // prevB >> (8- lc)
add t0,t0,t1
add prob, p,#Literal<<1
add t0,t0,t0,lsl #1 // *3
uxtw t0x,t0
mov symbol,#1
add prob,prob,t0x,lsl #1+ 8 // *768 *2
add a0,sp,#State
bl 1f // the call
mov sp,fp
cmp state,#kNumLitStates; blo L240
L205:
sxtw t0x,rep0
neg t0x,t0x
ldrb matchB,[outPtr,t0x]
L210: // symbol === mi === mo
lsl matchB,matchB,#1
add p_in,prob,#0x100<<1
and bit,matchB,#0x100
uxtw t0x,bit
add p_in,p_in,t0x,lsl #1
call rcGetBit_mi
and t0,symbol,#1
cmp t0,bit,lsr #8; bne L243 // break
cmp symbol,#0x100; blo L210
b L245
L240: // symbol === mi === mo
mov p_in,prob
call rcGetBit_mi
L243:
cmp symbol,#0x100; blo L240
L245:
mov t1,#3; mov t0,#6
cmp state,#10; csel t0,t1, t0,lo
cmp state,# 4; csel t0,state,t0,lo
sub state,state,t0
b L298 // assumes symbol===w0
L270:
add p_in,p,#IsRep<<1
call rcGetBit_state0; bne L290
ldr t0,rep2
ldr t1,rep1
str t0,rep3
str t1,rep2
str rep0,rep1
mov t0,#0
cmp state,#kNumLitStates
mov state,#3
csel state,t0,state,lo
add prob, p,#LenCoder<<1
b L350
L290:
add p_in,p,#IsRepG0<<1
call rcGetBit_state0; bne L300
L293:
ldr t0,posState
add p_in,p,#IsRep0Long<<1
add mi,t0,state,lsl #kNumPosBitsMax
call rcGetBit_mi0; bne L340
L295:
mov t0,#9
cmp state,#kNumLitStates
mov state,#11
csel state,t0,state,lo
L297:
ldr t0x,outBuf
sub nowPosx,outPtr,t0x
cmp nowPos,rep0; blo lzmaDataError
sxtw t0x,rep0
neg t0x,t0x
ldrb w0,[outPtr,t0x]
L298:
strb w0,[outPtr],#1
b L519
L300:
add p_in,p,#IsRepG1<<1
call rcGetBit_state0; ldr distance,rep1; beq L330
L310:
add p_in,p,#IsRepG2<<1
call rcGetBit_state0; ldr distance,rep2; beq L325
L320:
ldr t0,rep2
ldr distance,rep3
str t0,rep3
L325:
ldr t0,rep1
str t0,rep2
L330:
str rep0,rep1
mov rep0,distance
L340:
mov t0,#8
cmp state,#kNumLitStates
mov state,#11
csel state,t0,state,lo
add prob, p,#RepLenCoder<<1
L350:
add p_in,prob,#LenChoice<<1
call rcGetBit_0; bne L360
ldr t0,posState
add probLen,prob,#LenLow<<1
uxtw t0x,t0
mov t1,#0
add probLen,probLen,t0x,lsl #1+ kLenNumLowBits
mov hibit,#1<<kLenNumLowBits
b L390
L360:
add p_in,prob,#LenChoice2<<1
call rcGetBit_0; bne L370
ldr t0,posState
add probLen,prob,#LenMid<<1
uxtw t0x,t0
mov t1,#kLenNumLowSymbols
add probLen,probLen,t0x,lsl #1+ kLenNumMidBits
mov hibit,#1<<kLenNumMidBits
b L390
L370:
add probLen,prob,#LenHigh<<1
mov t1,#kLenNumLowSymbols + kLenNumMidSymbols
mov hibit,#1<<kLenNumHighBits
L390:
str t1,m_len
mov mi,#1
L395: // RangeDecoderBitTreeDecode
mov p_in,probLen
call rcGetBit_mi; subs t0,mo,hibit; blo L395
ldr r_len,m_len
add r_len,r_len,t0
str r_len,m_len
cmp state,#4; bhs L500
/*L400:*/
add state,state,#kNumLitStates
mov t0,#kNumLenToPosStates -1
cmp r_len,#kNumLenToPosStates
csel r_len,t0,r_len,hs
uxtw t0x,r_len
add probLit,p,t0x,lsl #1+ kNumPosSlotBits
add probLit,probLit,#PosSlot<<1
mov mi,#1
mov hibit,#1<<kNumPosSlotBits
L403: // RangeDecoderBitTreeDecode
mov p_in,probLit
call rcGetBit_mi; subs r_posSlot,mo,hibit; blo L403
str r_posSlot,posSlot
eof_lzma:
POP4(x1,x3,x4, lr) // x1= eof_src; r3= orig_dst; r4= plen_dst
SUB2(src,x1) // 0 if actual src length equals expected length
SUB2(dst,x3) // actual dst length
str dstw,[x4]
mov x4,x0 // save result value
cmp r_posSlot,#kStartPosModelIndex; blo L460
L405:
lsr numDirectBits,r_posSlot,#1
sub numDirectBits,numDirectBits,#1
and rep0,r_posSlot,#1
orr rep0,rep0,#2
cmp r_posSlot,#kEndPosModelIndex; bhs L410
L407:
lsl rep0,rep0,numDirectBits
add prob,p, #(SpecPos -1)<<1
sub t0,rep0,r_posSlot // r_posSlot dies
uxtw t0x,t0
add prob,prob,t0x,lsl #1
b L438
L410:
sub numDirectBits,numDirectBits,#kNumAlignBits
L420:
call rcNormalize
lsr Range,Range,#1
subs t0,Code,Range
csel Code,t0,Code,hs // if (Code>=Range) Code-=Range;
adc rep0,rep0,rep0 // rep0 = (rep0<<1) + (Code>=Range)
L430:
subs numDirectBits,numDirectBits,#1; bne L420
add prob,p, #Align<<1
lsl rep0,rep0,#kNumAlignBits
mov numDirectBits,#kNumAlignBits
L438:
mov i,#1
mov mi,#1
L440:
mov p_in,prob; call rcGetBit_mi
tst mo,#1; beq L445
orr rep0,rep0,i
L445:
lsl i,i,#1
subs numDirectBits,numDirectBits,#1; bne L440
b L465
L450:
L460:
ldr rep0,posSlot
L465:
adds rep0,rep0,#1
#if 0 /*{ only for the stream version */
bne L470
mov t0,#kLzmaStreamWasFinishedId
str t0,m_len
b L530
L470:
#endif /*}*/
ldr r_len,m_len
L500:
ldr t0x,outBuf
add r_len,r_len,#kMatchMinLen
sub t0x,outPtr,t0x // nowPos
cmp rep0,t0; bhi lzmaDataError
sxtw t0x,rep0
neg t0x,t0x
L510: // const t0x= -rep0;
ldrb w0,[outPtr,t0x]
strb w0,[outPtr],#1
cmp outPtr,outLim; bhs L530
subs r_len,r_len,#1; bne L510
// FIXME: prfm PLDL1KEEP,outPtr,#32 // fetch next cache line
L519:
strb w0,prevB // implicit &0xFF
L520: // bottom of while loop
cmp outPtr,outLim; blo L200
L530:
call rcNormalize
mov w0,#0 // success
lzmaExit:
ldr t1x,inBuf
sub t0x,inPtr,t1x
ldr t1x,inSizeProcessed
str t0,[t1x]
mov x0,x3 // orig_dst
add x1,x3,dst // orig_dst + dst_len
cache_lzma:
dc cvau,x0 // Clean by VA to point of Unification
ic ivau,x0 // Invalidate by VA to point of Unification
add x0,x0,#64 // next line
cmp x0,x1; blo cache_lzma
ldr t1x,outBuf
sub t0x,outPtr,t1x
ldr t1x,outSizeProcessed
str t0,[t1x]
add sp,sp,#(14+1)*4
// FIXME ldmia sp!,{r4,r5,r6,r7, r8,r9,r10,r11, pc}
lzmaDataError:
mov w0,#1 // failure
b lzmaExit
rcNormalize:
lsr t0,Range,#kNumTopBits
cbnz t0,retNorm
rcLoad:
cmp inPtr,inLim
lsl Range,Range,#8
bhs lzmaDataError
rcInit2:
ldrb t0,[inPtr],#1
orr Code,t0,Code, lsl #8
retNorm:
mov x0,x4 // result value
ret
rcGetBit_state0: // rcGetBit(0, state + p_in)
mov mi,state
rcGetBit_mi0: // rcGetBit(0, mi + p_in)
add p_in,p_in,mi, uxtw #1
rcGetBit_0: // rcGetBit(0, p_in)
mov mi,#0
rcGetBit_mi: // rcGetBit(mi, mi + p_in)
add p_in,p_in,mi, uxtw #1
rcGetBit: // Out: CC set on mo
lsr t0,Range,#kNumTopBits
mov t2x,x30 // save lr if need rcLoad
adr x30,rcGetBitCont; cbz t0,rcLoad // conditional subroutine call
rcGetBitCont:
#define starp t0
#define bound t1
#define y0tmp t1
ldrh starp,[p_in]
lsr y0tmp,Range,#kNumBitModelTotalBits
mul bound,starp,y0tmp
cmp Code,bound; bhs rcGB1
rcGB0: // Code < bound
mov y0tmp,#kBitModelTotal
mov Range,bound
sub y0tmp,y0tmp,starp
adcs mo,mi,mi // mo = (mi<<1) | (Code >= bound); set CC
add starp,starp,y0tmp, lsr #kNumMoveBits
strh starp,[p_in]
ret t2x
rcGB1: // Code >= bound
sub Code,Code,bound
sub Range,Range,bound
sub starp,starp,starp, lsr #kNumMoveBits
adcs mo,mi,mi // mo = (mi<<1) | (Code >= bound); set CC
strh starp,[p_in]
ret t2x
#undef y0tmp
#undef bound
#undef starp
#undef t1x
#undef t1
#undef t0x
#undef t0
#undef t1
#undef t1x
#undef lsrc
#undef ldst
#undef meth
#undef a0
#undef a1
#undef a2
#undef a3
#undef a4
#undef a5
#undef a6
1: // entry to C-lang LzmaDecode
section LZMA_DEC20
#include "lzma_d_cf.S"
section LZMA_DEC10
#if 0 /*{*/
#include "lzma_d_cs.S"
#else /*}{*/
#define PARAMETER_STYLE 3
#include "lzma_d-arm.S"
#endif /*}*/
section LZMA_DEC30
not_lzma:
// vi:ts=8:et

View File

@ -1,441 +1,147 @@
// .section .text.LzmaDecode,"ax",%progbits
// .align 2
// .global LzmaDecode
// .type LzmaDecode, %function
//LzmaDecode:
stp x29, x30, [sp, -112]!
mov w8, 1024
add x29, sp, 0
stp x19, x20, [sp, 16]
stp x21, x22, [sp, 32]
stp x23, x24, [sp, 48]
stp x25, x26, [sp, 64]
ldp w19, w15, [x0]
ldr w14, [x0, 8]
ldr x11, [x0, 16]
str wzr, [x3]
str wzr, [x6]
ldr w7, [x0, 4]
mov w0, 768
add w7, w19, w7
lsl w7, w0, w7
mov w0, 1
adds w7, w7, 1846
lsl w14, w0, w14
lsl w0, w0, w15
sub w14, w14, #1
sub w15, w0, #1
mov x0, 0
beq .L22
.L79:
strh w8, [x11, x0, lsl 1]
add x0, x0, 1
cmp w7, w0
bhi .L79
.L22:
add x2, x1, x2, uxtw
mov w27, 0
str x2, [x29, 96]
mov w28, -1
add x0, x1, 1
add x10, x1, 6
add x2, x2, 1
.L20:
cmp x0, x2
mov x8, x0
beq .L41
str x0, [x29, 104]
add x0, x0, 1
cmp x0, x10
ldrb w7, [x0, -2]
orr w27, w7, w27, lsl 8
bne .L20
stp x1, x6, [x29, 80]
mov x9, x4
mov x25, x3
cbz w5, .L63
mov w23, 1
mov w26, 8
mov w22, w23
mov w21, w23
mov w7, w23
mov w10, 0
mov w13, 0
mov w6, 0
sub w20, w26, w19
.L60:
and w12, w14, w6
lsl w8, w10, 4
add x18, x29, 96
mov w0, 0
sxtw x1, w12
add x8, x1, x8, sxtw
lsl x8, x8, 1
add x1, x11, x8
bl rcGetBit.2736
cbnz w0, .L26
and w0, w15, w6
asr w8, w13, w20
lsl w0, w0, w19
cmp w10, 6
add w8, w0, w8
lsl w0, w8, 2
sub w8, w0, w8
ubfiz x8, x8, 8, 24
add x8, x8, 1846
add x8, x11, x8, lsl 1
ble .L64
sub w0, w6, w7
mov w2, 1
ldrb w12, [x9, x0]
b .L32
.L96:
cbnz w13, .L29
.L30:
cmp w2, 255
bgt .L31
.L32:
lsl w12, w12, 1
mov w0, w2
and w13, w12, 256
add x18, x29, 96
sxtw x1, w13
add x1, x1, 256
add x1, x1, x2, sxtw
add x1, x8, x1, lsl 1
bl rcGetBit.2736
mov w2, w0
tbz x2, 0, .L96
cbnz w13, .L30
.L29:
cmp w2, 255
bgt .L31
.L33:
add x1, x8, x2, sxtw 1
mov w0, w2
add x18, x29, 96
bl rcGetBit.2736
cmp w0, 255
mov w2, w0
ble .L33
uxtb w13, w0
cmp w10, 3
strb w13, [x9, w6, uxtw]
add w6, w6, 1
bgt .L62
mov w10, 0
.L34:
cmp w5, w6
bhi .L60
.L58:
mov w1, 16777215
cmp w28, w1
bhi .L97
ldp x2, x1, [x29, 96]
cmp x1, x2
beq .L41
add x8, x1, 1
str x8, [x29, 104]
lsl w28, w28, 8
ldrb w0, [x1]
orr w27, w0, w27, lsl 8
.L25:
ldr x0, [x29, 80]
ldp x19, x20, [sp, 16]
sub x8, x8, x0
ldr x0, [x29, 88]
str w8, [x25]
ldp x21, x22, [sp, 32]
str w6, [x0]
mov w0, 0
ldp x23, x24, [sp, 48]
ldp x25, x26, [sp, 64]
ldp x29, x30, [sp], 112
ret
.L64:
mov w2, 1
b .L33
.L31:
uxtb w13, w2
strb w13, [x9, w6, uxtw]
add w6, w6, 1
.L62:
cmp w10, 9
bgt .L35
sub w10, w10, #3
b .L34
.L26:
sxtw x13, w10
add x18, x29, 96
add x13, x13, 192
mov w0, 0
lsl x13, x13, 1
add x1, x11, x13
bl rcGetBit.2736
cbnz w0, .L36
mov w0, 3
cmp w10, 6
mov w23, w22
csel w10, w0, wzr, gt
mov w22, w21
add x24, x11, 1636
mov w21, w7
.L38:
add x18, x29, 96
mov x1, x24
mov w0, 0
bl rcGetBit.2736
cbnz w0, .L44
lsl w12, w12, 3
mov w8, -8
mov w13, 3
sxtw x12, w12
add x12, x12, 2
add x12, x24, x12, lsl 1
.L45:
mov w0, 1
.L47:
add x18, x29, 96
add x1, x12, x0, uxtw 1
bl rcGetBit.2736
subs w13, w13, #1
bne .L47
cmp w10, 3
add w8, w0, w8
bgt .L48
mov w7, 3
mov w12, 6
cmp w8, w7
mov w0, 1
csel w7, w8, w7, le
lsl w7, w7, 6
sxtw x7, w7
add x7, x7, 432
lsl x7, x7, 1
.L49:
add x1, x7, x0, uxtw 1
add x18, x29, 96
add x1, x11, x1
bl rcGetBit.2736
subs w12, w12, #1
bne .L49
sub w7, w0, #64
add w10, w10, 7
cmp w7, 3
mov w12, w7
ble .L50
cmp w7, 13
and w0, w7, 1
asr w1, w7, 1
orr w7, w0, 2
bgt .L51
sub w13, w1, #1
mov x0, 688
lsl w7, w7, w13
sub x12, x0, x12, sxtw
add x12, x12, x7, uxtw
add x12, x11, x12, lsl 1
sub x12, x12, #2
.L52:
mov w0, 1
mov w24, w0
.L57:
add x1, x12, x0, sxtw 1
add x18, x29, 96
bl rcGetBit.2736
and w3, w0, 1
orr w1, w7, w24
cmp w3, wzr
csel w7, w1, w7, ne
subs w13, w13, #1
lsl w24, w24, 1
bne .L57
.L50:
adds w7, w7, 1
beq .L58
.L48:
cmp w7, w6
add w0, w8, 2
bhi .L41
mov w1, w6
.L59:
sub w2, w6, w7
sub w0, w0, #1
add w6, w6, 1
cmp w0, wzr
ccmp w5, w6, 0, ne
ldrb w13, [x9, x2]
strb w13, [x9, w1, uxtw]
mov w1, w6
bhi .L59
b .L34
.L35:
sub w10, w10, #6
b .L34
.L36:
add x1, x13, 24
add x18, x29, 96
add x1, x11, x1
mov w0, 0
bl rcGetBit.2736
cbnz w0, .L39
add x1, x8, 480
add x18, x29, 96
add x1, x11, x1
bl rcGetBit.2736
cbnz w0, .L67
cbz w6, .L41
sub w0, w6, w7
cmp w10, 6
mov w10, 11
ldrb w13, [x9, x0]
mov w0, 9
strb w13, [x9, w6, uxtw]
csel w10, w10, w0, gt
add w6, w6, 1
b .L34
.L44:
add x18, x29, 96
add x1, x24, 2
mov w0, 0
bl rcGetBit.2736
mov w8, w0
cbnz w0, .L46
lsl w0, w12, 3
mov w13, 3
sxtw x0, w0
add x0, x0, 130
add x12, x24, x0, lsl 1
b .L45
.L39:
add x1, x13, 48
add x18, x29, 96
add x1, x11, x1
mov w0, 0
bl rcGetBit.2736
cbnz w0, .L98
.L40:
cmp w10, 6
mov w0, w7
mov w10, 11
mov w7, w21
csel w10, w10, w26, gt
mov w21, w0
add x24, x11, 2664
b .L38
.L46:
add x12, x24, 516
mov w8, -240
mov w13, 8
b .L45
.L41:
ldp x19, x20, [sp, 16]
ldp x21, x22, [sp, 32]
ldp x23, x24, [sp, 48]
ldp x25, x26, [sp, 64]
mov w0, 1
ldp x29, x30, [sp], 112
ret
.L51:
ldr x12, [x29, 96]
sub w1, w1, #5
mov w3, 16777215
.L55:
cmp w28, w3
lsl w7, w7, 1
bhi .L53
ldr x2, [x29, 104]
cmp x2, x12
add x4, x2, 1
beq .L41
str x4, [x29, 104]
lsl w28, w28, 8
ldrb w0, [x2]
orr w27, w0, w27, lsl 8
.L53:
lsr w0, w28, 1
cmp w0, w27
mov w28, w0
bhi .L54
sub w27, w27, w0
orr w7, w7, 1
.L54:
subs w1, w1, #1
bne .L55
lsl w7, w7, 4
add x12, x11, 1604
mov w13, 4
b .L52
.L67:
mov w0, w21
mov w21, w7
mov w7, w0
b .L40
.L98:
add x1, x13, 72
add x18, x29, 96
add x1, x11, x1
mov w0, 0
bl rcGetBit.2736
cbnz w0, .L69
mov w0, w21
mov w21, w22
mov w22, w0
b .L40
.L69:
mov w0, w21
mov w21, w23
mov w23, w22
mov w22, w0
b .L40
.L97:
ldr x8, [x29, 104]
b .L25
.L63:
mov w6, 0
b .L25
// .size LzmaDecode, .-LzmaDecode
// .section .text.rcGetBit.2736,"ax",%progbits
// .align 2
// .type rcGetBit.2736, %function
rcGetBit.2736:
mov w3, 16777215
cmp w28, w3
bhi .L2
ldp x4, x3, [x18]
cmp x3, x4
beq .L5
add x4, x3, 1
str x4, [x18, 8]
lsl w28, w28, 8
ldrb w2, [x3]
orr w27, w2, w27, lsl 8
.L2:
ldrh w3, [x1]
lsr w2, w28, 11
mul w2, w2, w3
cmp w2, w27
bhi .L7
lsl w0, w0, 1
sub w3, w3, w3, lsr 5
sub w27, w27, w2
sub w28, w28, w2
strh w3, [x1]
add w0, w0, 1
ret
.L7:
mov w4, 2048
mov w28, w2
sub w2, w4, w3
lsl w0, w0, 1
add w3, w3, w2, asr 5
strh w3, [x1]
ret
.L5:
mov w0, 1
ret
// .size rcGetBit.2736, .-rcGetBit.2736
// .ident "GCC: (GNU) 5.2.1 20151104 (Red Hat Cross 5.2.1-4)"
// .section .note.GNU-stack,"",%progbits
/* 0x0000 */ .byte 243, 83,184,169, 39, 0,128, 82, 20, 16, 0,145,245, 91, 1,169
/* 0x0010 */ .byte 247, 99, 2,169,249,107, 3,169,251,115, 4,169,254, 43, 0,249
/* 0x0020 */ .byte 8, 4, 64, 57, 26, 8, 64, 57, 28, 0, 64, 57,127, 0, 0,185
/* 0x0030 */ .byte 250, 32,218, 26,223, 0, 0,185,231, 32,200, 26,231, 4, 0, 81
/* 0x0040 */ .byte 231,111, 0,185, 8, 4, 64, 57, 7, 96,128, 82, 90, 7, 0, 81
/* 0x0050 */ .byte 8, 1, 28, 11,232, 32,200, 26, 8,217, 28, 49,224, 0, 0, 84
/* 0x0060 */ .byte 7, 0,128,210, 9,128,128, 82,137,122, 39,120,231, 4, 0,145
/* 0x0070 */ .byte 31, 1, 7,107,168,255,255, 84, 51, 64, 34,139,127, 2, 1,235
/* 0x0080 */ .byte 0, 15, 0, 84,235, 3, 1,170, 34, 4, 0,145,103, 85, 64, 56
/* 0x0090 */ .byte 127, 2, 2,235, 96, 14, 0, 84, 72, 20, 64, 56,127, 1, 2,235
/* 0x00a0 */ .byte 7, 33, 7, 42, 97,255,255, 84, 37, 68, 0, 52, 9,176, 41,145
/* 0x00b0 */ .byte 59, 0,128, 82,233, 63, 0,249, 9, 1,128, 82, 41, 1, 28, 75
/* 0x00c0 */ .byte 10, 0,128, 18,245, 3, 27, 42, 25, 0,128, 82, 8, 0,128, 82
/* 0x00d0 */ .byte 2, 0,128, 82, 16,224,191, 18, 17, 0,129, 82,251,107, 0,185
/* 0x00e0 */ .byte 251,115, 0,185,233,119, 0,185, 78, 0, 26, 10, 44,111, 28, 83
/* 0x00f0 */ .byte 95, 1, 16,107,201,125, 64,147, 44,193, 44,139,143,249,127,211
/* 0x0100 */ .byte 232, 0, 0, 84,127, 2, 11,235,192, 10, 0, 84,105, 1, 64, 57
/* 0x0110 */ .byte 74, 93, 24, 83,107, 5, 0,145, 39, 33, 7, 42,141,122,108,120
/* 0x0120 */ .byte 73,125, 11, 83,169,125, 9, 27,255, 0, 9,107,162, 10, 0, 84
/* 0x0130 */ .byte 234,211, 65, 57, 63, 27, 0,113, 8, 41,202, 26,234,111, 64,185
/* 0x0140 */ .byte 79, 0, 10, 10,239, 33,220, 26,239, 1, 8, 11, 40, 2, 13, 75
/* 0x0150 */ .byte 234,117, 30, 83, 79, 1, 15, 75,173, 21,136, 11,239, 93,120,211
/* 0x0160 */ .byte 141,122, 44,120,239,217, 28,145,143, 6, 15,139, 45, 31, 0, 84
/* 0x0170 */ .byte 72, 0, 21, 75,146,104,104, 56, 40, 0,128, 82, 7, 0, 0, 20
/* 0x0180 */ .byte 236,121, 42,120, 8,121, 31, 83,233, 3, 14, 42,205, 56, 0, 53
/* 0x0190 */ .byte 31,253, 3,113,204, 3, 0, 84, 82,122, 31, 83, 63, 1, 16,107
/* 0x01a0 */ .byte 77, 2, 24, 18, 22,121, 31, 83,170,125, 64,147, 74, 1, 4,145
/* 0x01b0 */ .byte 74,193, 40,139,232, 0, 0, 84,127, 1, 19,235, 41, 93, 24, 83
/* 0x01c0 */ .byte 0, 5, 0, 84,108, 1, 64, 57,107, 5, 0,145,135, 33, 7, 42
/* 0x01d0 */ .byte 236,121,106,120, 46,125, 11, 83, 55, 2, 12, 75,142,125, 14, 27
/* 0x01e0 */ .byte 152, 21, 76, 75,140, 21,151, 11,255, 0, 14,107, 41, 1, 14, 75
/* 0x01f0 */ .byte 131,252,255, 84,248,121, 42,120,200, 6, 0, 17,231, 0, 14, 75
/* 0x0200 */ .byte 141,252,255, 53, 31,253, 3,113, 45, 27, 0, 84, 8, 29, 0, 83
/* 0x0210 */ .byte 234, 3, 9, 42,136, 72, 34, 56, 66, 4, 0, 17, 63, 39, 0,113
/* 0x0220 */ .byte 140, 49, 0, 84, 57, 15, 0, 81,191, 0, 2,107,232,245,255, 84
/* 0x0230 */ .byte 0,224,191, 18, 95, 1, 0,107,136, 0, 0, 84,127, 2, 11,235
/* 0x0240 */ .byte 0, 1, 0, 84,107, 5, 0,145, 97, 1, 1,203, 97, 0, 0,185
/* 0x0250 */ .byte 0, 0,128, 82,194, 0, 0,185, 3, 0, 0, 20, 31, 32, 3,213
/* 0x0260 */ .byte 32, 0,128, 82,245, 91, 65,169,247, 99, 66,169,249,107, 67,169
/* 0x0270 */ .byte 251,115, 68,169,254, 43, 64,249,243, 83,200,168,192, 3, 95,214
/* 0x0280 */ .byte 74, 1, 9, 75,173, 21, 77, 75,231, 0, 9, 75,141,122, 44,120
/* 0x0290 */ .byte 41,127, 64,147, 95, 1, 16,107, 41, 1, 3,145, 45,249,127,211
/* 0x02a0 */ .byte 232, 0, 0, 84,127, 1, 19,235,192,253,255, 84,104, 1, 64, 57
/* 0x02b0 */ .byte 74, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42,140,122,105,120
/* 0x02c0 */ .byte 72,125, 11, 83,136,125, 8, 27,255, 0, 8,107, 98, 25, 0, 84
/* 0x02d0 */ .byte 234,107, 64,185, 63, 31, 0,113,251,115, 64,185,234,115, 0,185
/* 0x02e0 */ .byte 42, 2, 12, 75,245,107, 0,185,140, 21,138, 11,140,122, 41,120
/* 0x02f0 */ .byte 105, 0,128, 82,249,179,137, 26, 9,160, 25,145, 31, 1, 16,107
/* 0x0300 */ .byte 232, 0, 0, 84,127, 2, 11,235,192,250,255, 84,106, 1, 64, 57
/* 0x0310 */ .byte 8, 93, 24, 83,107, 5, 0,145, 71, 33, 7, 42, 44, 1, 64,121
/* 0x0320 */ .byte 10,125, 11, 83,138,125, 10, 27,255, 0, 10,107,226, 30, 0, 84
/* 0x0330 */ .byte 210,113, 29, 83, 40, 2, 12, 75, 22, 0,128, 82,126, 0,128, 82
/* 0x0340 */ .byte 82,126, 64,147,140, 21,136, 11, 82, 10, 0,145, 44, 1, 0,121
/* 0x0350 */ .byte 50, 5, 18,139,238, 3, 30, 42, 45, 0,128, 82, 6, 0, 0, 20
/* 0x0360 */ .byte 232, 1, 0,121,206, 5, 0,113,173,121, 31, 83,234, 3, 9, 42
/* 0x0370 */ .byte 32, 3, 0, 84, 95, 1, 16,107,183,121, 31, 83, 79,198, 45,139
/* 0x0380 */ .byte 232, 0, 0, 84,127, 2, 11,235, 74, 93, 24, 83,160,246,255, 84
/* 0x0390 */ .byte 104, 1, 64, 57,107, 5, 0,145, 7, 33, 7, 42,232, 1, 64,121
/* 0x03a0 */ .byte 73,125, 11, 83, 44, 2, 8, 75, 9,125, 9, 27, 24, 21, 72, 75
/* 0x03b0 */ .byte 8, 21,140, 11,255, 0, 9,107, 74, 1, 9, 75, 35,253,255, 84
/* 0x03c0 */ .byte 248, 1, 0,121,206, 5, 0,113,231, 0, 9, 75,237, 6, 0, 17
/* 0x03d0 */ .byte 33,253,255, 84, 40, 0,128, 82, 63, 15, 0,113, 30, 33,222, 26
/* 0x03e0 */ .byte 222, 2, 30, 75,205, 3, 13, 11,236, 22, 0, 84,191, 13, 0,113
/* 0x03f0 */ .byte 104, 0,128, 82,181,209,136, 26,207, 0,128, 82,181,102, 26, 83
/* 0x0400 */ .byte 46, 0,128, 82,181,126, 64,147,181,194, 6,145,181,250,127,211
/* 0x0410 */ .byte 7, 0, 0, 20, 31, 32, 3,213,136,106, 50,120,239, 5, 0,113
/* 0x0420 */ .byte 206,121, 31, 83,234, 3, 9, 42, 32, 3, 0, 84, 95, 1, 16,107
/* 0x0430 */ .byte 214,121, 31, 83,178,198, 46,139,232, 0, 0, 84,127, 2, 11,235
/* 0x0440 */ .byte 74, 93, 24, 83,224,240,255, 84,104, 1, 64, 57,107, 5, 0,145
/* 0x0450 */ .byte 7, 33, 7, 42,136,106,114,120, 73,125, 11, 83, 44, 2, 8, 75
/* 0x0460 */ .byte 9,125, 9, 27, 23, 21, 72, 75, 8, 21,140, 11,255, 0, 9,107
/* 0x0470 */ .byte 74, 1, 9, 75, 35,253,255, 84,151,106, 50,120,239, 5, 0,113
/* 0x0480 */ .byte 231, 0, 9, 75,206, 6, 0, 17, 33,253,255, 84,213, 1, 1, 81
/* 0x0490 */ .byte 191, 14, 0,113, 45, 17, 0, 84,191, 54, 0,113,168, 2, 0, 18
/* 0x04a0 */ .byte 8, 1, 31, 50,169,126, 1, 19, 44, 32, 0, 84, 47, 5, 0, 81
/* 0x04b0 */ .byte 9, 86,128,210, 46,193, 53,203, 21, 33,207, 26,206, 65, 53,139
/* 0x04c0 */ .byte 142, 6, 14,139,206, 9, 0,209, 50, 0,128, 82,247, 3, 18, 42
/* 0x04d0 */ .byte 8, 0, 0, 20, 31, 32, 3,213,200, 2, 0,121, 82,122, 31, 83
/* 0x04e0 */ .byte 234, 3, 9, 42,239, 5, 0,113,247,122, 31, 83, 96, 14, 0, 84
/* 0x04f0 */ .byte 95, 1, 16,107, 88,122, 31, 83,214,197, 50,139,232, 0, 0, 84
/* 0x0500 */ .byte 127, 2, 11,235, 74, 93, 24, 83,192,234,255, 84,104, 1, 64, 57
/* 0x0510 */ .byte 107, 5, 0,145, 7, 33, 7, 42,200, 2, 64,121, 73,125, 11, 83
/* 0x0520 */ .byte 44, 2, 8, 75, 9,125, 9, 27, 30, 21, 72, 75, 8, 21,140, 11
/* 0x0530 */ .byte 255, 0, 9,107, 74, 1, 9, 75, 3,253,255, 84,222, 2, 0,121
/* 0x0540 */ .byte 231, 0, 9, 75,181, 2, 23, 42, 18, 7, 0, 17,230,255,255, 23
/* 0x0550 */ .byte 40, 0,128, 82, 6, 0, 0, 20, 8,121, 31, 83,234,121, 46,120
/* 0x0560 */ .byte 31,253, 3,113,233, 3, 12, 42, 44, 3, 0, 84, 63, 1, 16,107
/* 0x0570 */ .byte 18,121, 31, 83, 14,125, 64,147,232, 0, 0, 84,127, 2, 11,235
/* 0x0580 */ .byte 41, 93, 24, 83,224,230,255, 84,106, 1, 64, 57,107, 5, 0,145
/* 0x0590 */ .byte 71, 33, 7, 42,234,121,110,120, 44,125, 11, 83, 45, 2, 10, 75
/* 0x05a0 */ .byte 76,125, 12, 27, 86, 21, 74, 75, 74, 21,141, 11,255, 0, 12,107
/* 0x05b0 */ .byte 41, 1, 12, 75, 35,253,255, 84, 72, 6, 0, 17,246,121, 46,120
/* 0x05c0 */ .byte 31,253, 3,113,231, 0, 12, 75, 45,253,255, 84, 8, 29, 0, 83
/* 0x05d0 */ .byte 63, 15, 0,113,136, 72, 34, 56,234, 3, 9, 42, 66, 4, 0, 17
/* 0x05e0 */ .byte 236,225,255, 84,191, 0, 2,107, 25, 0,128, 82,232,215,255, 84
/* 0x05f0 */ .byte 16,255,255, 23, 31, 32, 3,213, 74, 1, 8, 75,140, 21, 76, 75
/* 0x0600 */ .byte 95, 1, 16,107,140,122, 41,120,231, 0, 8, 75,169, 97, 0,145
/* 0x0610 */ .byte 232, 0, 0, 84,127, 2, 11,235, 64,226,255, 84,104, 1, 64, 57
/* 0x0620 */ .byte 74, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42,140,106,105,120
/* 0x0630 */ .byte 72,125, 11, 83,136,125, 8, 27,255, 0, 8,107,226, 9, 0, 84
/* 0x0640 */ .byte 42, 2, 12, 75, 31, 1, 16,107,239,129, 7,145,140, 21,138, 11
/* 0x0650 */ .byte 140,106, 41,120,232, 0, 0, 84,127, 2, 11,235, 32,224,255, 84
/* 0x0660 */ .byte 105, 1, 64, 57, 8, 93, 24, 83,107, 5, 0,145, 39, 33, 7, 42
/* 0x0670 */ .byte 137,106,111,120, 10,125, 11, 83, 42,125, 10, 27,255, 0, 10,107
/* 0x0680 */ .byte 130, 16, 0, 84, 40, 2, 9, 75, 41, 21,136, 11,137,106, 47,120
/* 0x0690 */ .byte 130,222,255, 52, 72, 0, 21, 75, 63, 31, 0,113, 41, 1,128, 82
/* 0x06a0 */ .byte 108, 1,128, 82, 57,177,140, 26,136,104,104, 56,136, 72, 34, 56
/* 0x06b0 */ .byte 66, 4, 0, 17,221,254,255, 23,181, 6, 0, 49,160,219,255, 84
/* 0x06c0 */ .byte 57, 31, 0, 17,191, 2, 2,107,173, 9, 0, 17,168,220,255, 84
/* 0x06d0 */ .byte 233, 3, 2, 42, 72, 0, 21, 75,173, 5, 0, 81, 66, 4, 0, 17
/* 0x06e0 */ .byte 191, 1, 31,107,160, 16, 66,122,136,104,104, 56,136, 72, 41, 56
/* 0x06f0 */ .byte 233, 3, 2, 42, 8,255,255, 84,191, 0, 2,107,104,207,255, 84
/* 0x0700 */ .byte 204,254,255, 23, 31, 32, 3,213, 8, 1, 10, 75,140, 21, 76, 75
/* 0x0710 */ .byte 31, 1, 16,107, 44, 1, 0,121,231, 0, 10, 75,232, 0, 0, 84
/* 0x0720 */ .byte 127, 2, 11,235,224,217,255, 84,106, 1, 64, 57, 8, 93, 24, 83
/* 0x0730 */ .byte 107, 5, 0,145, 71, 33, 7, 42, 44, 5, 64,121, 10,125, 11, 83
/* 0x0740 */ .byte 138,125, 10, 27,255, 0, 10,107, 66, 7, 0, 84,210,113, 29, 83
/* 0x0750 */ .byte 40, 2, 12, 75, 22, 1,128, 82,126, 0,128, 82, 82,126, 64,147
/* 0x0760 */ .byte 136, 21,136, 11, 82, 10, 2,145, 40, 5, 0,121, 50, 5, 18,139
/* 0x0770 */ .byte 249,254,255, 23, 31, 32, 3,213, 74, 1, 8, 75,231, 0, 8, 75
/* 0x0780 */ .byte 95, 1, 16,107,136, 21, 76, 75,136,106, 41,120,172,193, 0,145
/* 0x0790 */ .byte 232, 0, 0, 84,127, 2, 11,235, 64,214,255, 84,104, 1, 64, 57
/* 0x07a0 */ .byte 74, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42,137,106,108,120
/* 0x07b0 */ .byte 72,125, 11, 83, 40,125, 8, 27,255, 0, 8,107, 35, 5, 0, 84
/* 0x07c0 */ .byte 74, 1, 8, 75, 41, 21, 73, 75, 95, 1, 16,107,137,106, 44,120
/* 0x07d0 */ .byte 231, 0, 8, 75,173, 33, 1,145,232, 0, 0, 84,127, 2, 11,235
/* 0x07e0 */ .byte 0,212,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145
/* 0x07f0 */ .byte 7, 33, 7, 42,137,106,109,120, 72,125, 11, 83, 40,125, 8, 27
/* 0x0800 */ .byte 255, 0, 8,107,226, 7, 0, 84,234, 3, 21, 42,236,107, 64,185
/* 0x0810 */ .byte 234,107, 0,185, 42, 2, 9, 75,245,115, 64,185, 41, 21,138, 11
/* 0x0820 */ .byte 236,115, 0,185,137,106, 45,120, 20, 0, 0, 20, 31, 32, 3,213
/* 0x0830 */ .byte 231, 0, 10, 75, 50, 17, 8,145, 10, 1, 10, 75, 22, 2,128, 82
/* 0x0840 */ .byte 136, 21, 76, 75, 30, 1,128, 82, 40, 5, 0,121,194,254,255, 23
/* 0x0850 */ .byte 191, 0, 2,107, 57, 27, 0, 81,136,196,255, 84,117,254,255, 23
/* 0x0860 */ .byte 234, 3, 21, 42,245,107, 64,185,234,107, 0,185, 42, 2, 9, 75
/* 0x0870 */ .byte 41, 21,138, 11,137,106, 44,120, 63, 31, 0,113, 10, 1,128, 82
/* 0x0880 */ .byte 108, 1,128, 82,233, 63, 64,249, 89,177,140, 26,156,254,255, 23
/* 0x0890 */ .byte 41, 21, 73, 75, 8, 1, 10, 75,137,106, 47,120,231, 0, 10, 75
/* 0x08a0 */ .byte 246,255,255, 23,233, 3, 14, 42, 87,254,255, 23, 41, 21, 0, 81
/* 0x08b0 */ .byte 95, 1, 16,107, 8,121, 31, 83,232, 0, 0, 84,127, 2, 11,235
/* 0x08c0 */ .byte 74, 93, 24, 83,224,204,255, 84,108, 1, 64, 57,107, 5, 0,145
/* 0x08d0 */ .byte 135, 33, 7, 42, 74,125, 1, 83,255, 0, 10,107, 99, 0, 0, 84
/* 0x08e0 */ .byte 231, 0, 10, 75, 8, 1, 0, 50, 41, 5, 0,113, 33,254,255, 84
/* 0x08f0 */ .byte 21,109, 28, 83, 14, 32, 25,145,143, 0,128, 82,243,254,255, 23
/* 0x0900 */ .byte 41, 21, 73, 75,137,106, 45,120,233,107, 64,185,236, 3, 21, 42
/* 0x0910 */ .byte 231, 0, 8, 75,245, 3, 27, 42, 72, 1, 8, 75,251,115, 64,185
/* 0x0920 */ .byte 236,107, 0,185,233,115, 0,185,212,255,255, 23, 2, 0,128, 82

View File

@ -0,0 +1,140 @@
/* 0x0000 */ .byte 243, 83,184,169, 39, 0,128, 82, 12, 16, 0,145,245, 91, 1,169
/* 0x0010 */ .byte 247, 99, 2,169,249,107, 3,169,251,115, 4,169,254, 43, 0,249
/* 0x0020 */ .byte 9,128,128, 82, 8, 8, 64, 57, 23, 0, 64, 57,232, 32,200, 26
/* 0x0030 */ .byte 8, 5, 0, 81,232,111, 0,185, 8, 4, 64, 57,127, 0, 0,185
/* 0x0040 */ .byte 231, 32,200, 26,223, 0, 0,185,231, 4, 0, 81,231,123, 0,185
/* 0x0050 */ .byte 7, 4, 64, 57, 8, 96,128, 82,231, 0, 23, 11, 7, 33,199, 26
/* 0x0060 */ .byte 8, 0,128,210,231,216, 28, 17,255, 0, 8,107,137, 0, 0, 84
/* 0x0070 */ .byte 137,121, 40,120, 8, 5, 0,145,252,255,255, 23, 34, 64, 34,139
/* 0x0080 */ .byte 41, 20, 0,145,231, 3, 1,170, 8, 0,128, 82, 95, 0, 7,235
/* 0x0090 */ .byte 97, 0, 0, 84, 32, 0,128, 82, 1, 2, 0, 20,234, 20, 64, 56
/* 0x00a0 */ .byte 63, 1, 7,235, 72, 33, 8, 42, 33,255,255, 84, 53, 0,128, 82
/* 0x00b0 */ .byte 11,176, 41,145, 24, 1,128, 82,235, 59, 0,249, 7, 0,128, 18
/* 0x00c0 */ .byte 11, 3, 23, 75,254, 3, 21, 42,243, 3, 21, 42,234, 3, 21, 42
/* 0x00d0 */ .byte 13, 0,128, 82, 26, 0,128, 82, 14, 0,128, 82, 17,224,191, 18
/* 0x00e0 */ .byte 18, 0,129, 82,121, 1,128, 82,235,127, 0,185,223, 1, 5,107
/* 0x00f0 */ .byte 34, 60, 0, 84,235,111, 64,185,175,109, 28, 83,255, 0, 17,107
/* 0x0100 */ .byte 212, 1, 11, 10,139,126, 64,147,111,193, 47,139,239,249,127,211
/* 0x0110 */ .byte 232, 0, 0, 84, 63, 1, 2,235,224,251,255, 84, 43, 1, 64, 57
/* 0x0120 */ .byte 231, 92, 24, 83, 41, 5, 0,145,104, 33, 8, 42,150,105,111,120
/* 0x0130 */ .byte 240,124, 11, 83,208,126, 16, 27, 31, 1, 16,107,130, 12, 0, 84
/* 0x0140 */ .byte 71, 2, 22, 75,191, 25, 0,113,214, 22,135, 11,231,123, 64,185
/* 0x0150 */ .byte 150,105, 47,120,239,243, 65, 57,199, 1, 7, 10,231, 32,215, 26
/* 0x0160 */ .byte 75, 43,207, 26,246, 0, 11, 11, 7, 96,128, 82,214,126, 7, 27
/* 0x0170 */ .byte 214,218, 28,145,150, 5, 22,139,108, 0, 0, 84, 43, 0,128, 82
/* 0x0180 */ .byte 26, 0, 0, 20,199, 1, 10, 75, 43, 0,128, 82,154,104,103, 56
/* 0x0190 */ .byte 231, 3, 16, 42, 90,123, 31, 83,255, 0, 17,107, 91, 3, 24, 18
/* 0x01a0 */ .byte 111,127, 64,147,239, 1, 4,145,239,193, 43,139,239,249,127,211
/* 0x01b0 */ .byte 9, 2, 0, 84,212,106,111,120,240,124, 11, 83,107,121, 31, 83
/* 0x01c0 */ .byte 144,126, 16, 27, 31, 1, 16,107, 35, 2, 0, 84,148, 22, 84, 75
/* 0x01d0 */ .byte 212,106, 47,120,231, 0, 16, 75, 8, 1, 16, 75,107, 5, 0, 17
/* 0x01e0 */ .byte 27, 2, 0, 53,240, 3, 7, 42,231, 3, 16, 42, 29, 0, 0, 20
/* 0x01f0 */ .byte 63, 1, 2,235, 0,245,255, 84, 48, 1, 64, 57,231, 92, 24, 83
/* 0x0200 */ .byte 41, 5, 0,145, 8, 34, 8, 42,235,255,255, 23, 71, 2, 20, 75
/* 0x0210 */ .byte 148, 22,135, 11,212,106, 47,120,155,254,255, 53,231, 3, 16, 42
/* 0x0220 */ .byte 127,253, 3,113,141,251,255, 84, 30, 0, 0, 20,255, 0, 17,107
/* 0x0230 */ .byte 116,125,127,147,201, 1, 0, 84,208,106,116,120,239,124, 11, 83
/* 0x0240 */ .byte 107,121, 31, 83, 15,126, 15, 27, 31, 1, 15,107,226, 1, 0, 84
/* 0x0250 */ .byte 71, 2, 16, 75, 16, 22,135, 11,208,106, 52,120,231, 3, 15, 42
/* 0x0260 */ .byte 127,253, 3,113, 77,254,255, 84, 14, 0, 0, 20, 63, 1, 2,235
/* 0x0270 */ .byte 32,241,255, 84, 47, 1, 64, 57,231, 92, 24, 83, 41, 5, 0,145
/* 0x0280 */ .byte 232, 33, 8, 42,237,255,255, 23, 8, 1, 15, 75, 16, 22, 80, 75
/* 0x0290 */ .byte 107, 5, 0, 17,208,106, 52,120,239, 0, 15, 75,240,255,255, 23
/* 0x02a0 */ .byte 122, 29, 0, 83,191, 13, 0,113,154, 72, 46, 56,207, 5, 0, 17
/* 0x02b0 */ .byte 205, 45, 0, 84,191, 37, 0,113,108, 0, 0, 84,173, 13, 0, 81
/* 0x02c0 */ .byte 107, 1, 0, 20,173, 25, 0, 81,105, 1, 0, 20,231, 0, 16, 75
/* 0x02d0 */ .byte 8, 1, 16, 75,214, 22, 86, 75,176,125, 64,147,150,105, 47,120
/* 0x02e0 */ .byte 255, 0, 17,107, 16, 2, 3,145, 16,250,127,211,232, 0, 0, 84
/* 0x02f0 */ .byte 63, 1, 2,235, 0,237,255, 84, 43, 1, 64, 57,231, 92, 24, 83
/* 0x0300 */ .byte 41, 5, 0,145,104, 33, 8, 42,150,105,112,120,235,124, 11, 83
/* 0x0310 */ .byte 203,126, 11, 27, 31, 1, 11,107,130, 1, 0, 84, 71, 2, 22, 75
/* 0x0320 */ .byte 191, 29, 0,113,245, 3, 30, 42, 15,160, 25,145,214, 22,135, 11
/* 0x0330 */ .byte 103, 0,128, 82,254, 3, 19, 42,150,105, 48,120,237,179,135, 26
/* 0x0340 */ .byte 243, 3, 10, 42,117, 0, 0, 20,231, 0, 11, 75,214, 22, 86, 75
/* 0x0350 */ .byte 255, 0, 17,107,150,105, 48,120, 8, 1, 11, 75, 26, 98, 0,145
/* 0x0360 */ .byte 232, 0, 0, 84, 63, 1, 2,235, 96,233,255, 84, 43, 1, 64, 57
/* 0x0370 */ .byte 231, 92, 24, 83, 41, 5, 0,145,104, 33, 8, 42,150,105,122,120
/* 0x0380 */ .byte 235,124, 11, 83,203,126, 11, 27, 31, 1, 11,107,194, 4, 0, 84
/* 0x0390 */ .byte 71, 2, 22, 75,127, 1, 17,107,239,129, 7,145,214, 22,135, 11
/* 0x03a0 */ .byte 150,105, 58,120,232, 0, 0, 84, 63, 1, 2,235, 64,231,255, 84
/* 0x03b0 */ .byte 39, 1, 64, 57,107, 93, 24, 83, 41, 5, 0,145,232, 32, 8, 42
/* 0x03c0 */ .byte 144,105,111,120,103,125, 11, 83, 7,126, 7, 27, 31, 1, 7,107
/* 0x03d0 */ .byte 162, 1, 0, 84, 75, 2, 16, 75, 16, 22,139, 11,144,105, 47,120
/* 0x03e0 */ .byte 174,229,255, 52, 43, 1,128, 82,191, 29, 0,113,109,177,153, 26
/* 0x03f0 */ .byte 203, 1, 10, 75,207, 5, 0, 17,154,104,107, 56,154, 72, 46, 56
/* 0x0400 */ .byte 27, 1, 0, 20,107, 1, 7, 75, 8, 1, 7, 75, 16, 22, 80, 75
/* 0x0410 */ .byte 231, 3, 30, 42,144,105, 47,120,254, 3, 10, 42,234, 3, 19, 42
/* 0x0420 */ .byte 24, 0, 0, 20,231, 0, 11, 75,214, 22, 86, 75,255, 0, 17,107
/* 0x0430 */ .byte 150,105, 58,120, 8, 1, 11, 75, 22,194, 0,145,232, 0, 0, 84
/* 0x0440 */ .byte 63, 1, 2,235,128,226,255, 84, 43, 1, 64, 57,231, 92, 24, 83
/* 0x0450 */ .byte 41, 5, 0,145,104, 33, 8, 42,143,105,118,120,235,124, 11, 83
/* 0x0460 */ .byte 235,125, 11, 27, 31, 1, 11,107, 2, 1, 0, 84, 71, 2, 15, 75
/* 0x0470 */ .byte 239, 21,135, 11,231, 3, 30, 42,143,105, 54,120,254, 3, 19, 42
/* 0x0480 */ .byte 243, 3, 7, 42, 30, 0, 0, 20,231, 0, 11, 75,239, 21, 79, 75
/* 0x0490 */ .byte 255, 0, 17,107,143,105, 54,120, 8, 1, 11, 75, 16, 34, 1,145
/* 0x04a0 */ .byte 232, 0, 0, 84, 63, 1, 2,235, 96,223,255, 84, 43, 1, 64, 57
/* 0x04b0 */ .byte 231, 92, 24, 83, 41, 5, 0,145,104, 33, 8, 42,143,105,112,120
/* 0x04c0 */ .byte 235,124, 11, 83,235,125, 11, 27, 31, 1, 11,107,162, 0, 0, 84
/* 0x04d0 */ .byte 71, 2, 15, 75,239, 21,135, 11,143,105, 48,120, 8, 0, 0, 20
/* 0x04e0 */ .byte 8, 1, 11, 75,235, 0, 11, 75,231, 3, 30, 42,239, 21, 79, 75
/* 0x04f0 */ .byte 254, 3, 21, 42,143,105, 48,120,245, 3, 7, 42,231, 3, 10, 42
/* 0x0500 */ .byte 191, 29, 0,113,239, 59, 64,249,234, 3, 30, 42, 13,179,153, 26
/* 0x0510 */ .byte 254, 3, 19, 42,243, 3, 7, 42,127, 1, 17,107,232, 0, 0, 84
/* 0x0520 */ .byte 63, 1, 2,235,128,219,255, 84, 39, 1, 64, 57,107, 93, 24, 83
/* 0x0530 */ .byte 41, 5, 0,145,232, 32, 8, 42,240, 1, 64,121,103,125, 11, 83
/* 0x0540 */ .byte 7,126, 7, 27, 31, 1, 7,107, 66, 1, 0, 84,148,114, 29, 83
/* 0x0550 */ .byte 75, 2, 16, 75,148,126, 64,147, 16, 22,139, 11,148, 10, 0,145
/* 0x0560 */ .byte 240, 1, 0,121, 16, 0,128, 82,239, 5, 20,139, 26, 0, 0, 20
/* 0x0570 */ .byte 107, 1, 7, 75, 16, 22, 80, 75,127, 1, 17,107,240, 1, 0,121
/* 0x0580 */ .byte 8, 1, 7, 75,232, 0, 0, 84, 63, 1, 2,235, 64,216,255, 84
/* 0x0590 */ .byte 39, 1, 64, 57,107, 93, 24, 83, 41, 5, 0,145,232, 32, 8, 42
/* 0x05a0 */ .byte 240, 5, 64,121,103,125, 11, 83, 7,126, 7, 27, 31, 1, 7,107
/* 0x05b0 */ .byte 98, 1, 0, 84,148,114, 29, 83, 75, 2, 16, 75,148,126, 64,147
/* 0x05c0 */ .byte 16, 22,139, 11,148, 10, 2,145,240, 5, 0,121, 16, 1,128, 82
/* 0x05d0 */ .byte 239, 5, 20,139,122, 0,128, 82, 8, 0, 0, 20, 16, 22, 80, 75
/* 0x05e0 */ .byte 8, 1, 7, 75,240, 5, 0,121,103, 1, 7, 75,239, 17, 8,145
/* 0x05f0 */ .byte 16, 2,128, 82, 26, 1,128, 82,251, 3, 26, 42, 43, 0,128, 82
/* 0x0600 */ .byte 255, 0, 17,107,252,197, 43,139,232, 0, 0, 84, 63, 1, 2,235
/* 0x0610 */ .byte 32,212,255, 84, 52, 1, 64, 57,231, 92, 24, 83, 41, 5, 0,145
/* 0x0620 */ .byte 136, 34, 8, 42,150, 3, 64,121,244,124, 11, 83,107,121, 31, 83
/* 0x0630 */ .byte 212,126, 20, 27, 31, 1, 20,107,194, 0, 0, 84, 71, 2, 22, 75
/* 0x0640 */ .byte 214, 22,135, 11,231, 3, 20, 42,150, 3, 0,121, 6, 0, 0, 20
/* 0x0650 */ .byte 214, 22, 86, 75,231, 0, 20, 75, 8, 1, 20, 75,150, 3, 0,121
/* 0x0660 */ .byte 107, 5, 0, 17,123, 7, 0,113,193,252,255, 84, 47, 0,128, 82
/* 0x0670 */ .byte 191, 13, 0,113,250, 33,218, 26, 16, 2, 26, 75, 16, 2, 11, 11
/* 0x0680 */ .byte 172, 13, 0, 84,106, 0,128, 82, 31, 14, 0,113, 11,210,138, 26
/* 0x0690 */ .byte 214, 0,128, 82,107,101, 26, 83,234, 3, 15, 42,107,125, 64,147
/* 0x06a0 */ .byte 107,193, 6,145,107,249,127,211,255, 0, 17,107,122,197, 42,139
/* 0x06b0 */ .byte 232, 0, 0, 84, 63, 1, 2,235,224,206,255, 84, 47, 1, 64, 57
/* 0x06c0 */ .byte 231, 92, 24, 83, 41, 5, 0,145,232, 33, 8, 42,148,105,122,120
/* 0x06d0 */ .byte 239,124, 11, 83, 74,121, 31, 83,143,126, 15, 27, 31, 1, 15,107
/* 0x06e0 */ .byte 194, 0, 0, 84, 71, 2, 20, 75,148, 22,135, 11,231, 3, 15, 42
/* 0x06f0 */ .byte 148,105, 58,120, 6, 0, 0, 20,148, 22, 84, 75,231, 0, 15, 75
/* 0x0700 */ .byte 8, 1, 15, 75,148,105, 58,120, 74, 5, 0, 17,214, 6, 0,113
/* 0x0710 */ .byte 193,252,255, 84, 75, 1, 1, 81,127, 13, 0,113, 77, 8, 0, 84
/* 0x0720 */ .byte 127, 53, 0,113,106, 1, 0, 18,111,125, 1, 19, 74, 1, 31, 50
/* 0x0730 */ .byte 44, 1, 0, 84,239, 5, 0, 81, 20, 86,128,210, 74, 33,207, 26
/* 0x0740 */ .byte 139,194, 43,203,107, 65, 42,139,139, 5, 11,139,107, 9, 0,209
/* 0x0750 */ .byte 21, 0, 0, 20,239, 21, 0, 81,255, 0, 17,107,232, 0, 0, 84
/* 0x0760 */ .byte 63, 1, 2,235,128,201,255, 84, 43, 1, 64, 57,231, 92, 24, 83
/* 0x0770 */ .byte 41, 5, 0,145,104, 33, 8, 42,231,124, 1, 83, 74,121, 31, 83
/* 0x0780 */ .byte 31, 1, 7,107, 99, 0, 0, 84, 8, 1, 7, 75, 74, 1, 0, 50
/* 0x0790 */ .byte 239, 5, 0,113, 33,254,255, 84, 11, 32, 25,145, 74,109, 28, 83
/* 0x07a0 */ .byte 143, 0,128, 82, 52, 0,128, 82,251, 3, 20, 42,255, 0, 17,107
/* 0x07b0 */ .byte 124,197, 52,139,232, 0, 0, 84, 63, 1, 2,235,192,198,255, 84
/* 0x07c0 */ .byte 54, 1, 64, 57,231, 92, 24, 83, 41, 5, 0,145,200, 34, 8, 42
/* 0x07d0 */ .byte 154, 3, 64,121,246,124, 11, 83,148,122, 31, 83, 86,127, 22, 27
/* 0x07e0 */ .byte 31, 1, 22,107,194, 0, 0, 84, 71, 2, 26, 75, 90, 23,135, 11
/* 0x07f0 */ .byte 231, 3, 22, 42,154, 3, 0,121, 7, 0, 0, 20, 90, 23, 90, 75
/* 0x0800 */ .byte 231, 0, 22, 75, 8, 1, 22, 75,154, 3, 0,121,148, 6, 0, 17
/* 0x0810 */ .byte 74, 1, 27, 42,239, 5, 0,113,123,123, 31, 83,129,252,255, 84
/* 0x0820 */ .byte 2, 0, 0, 20,234, 3, 11, 42, 74, 5, 0, 49, 64, 2, 0, 84
/* 0x0830 */ .byte 173, 29, 0, 17,223, 1, 10,107, 11, 10, 0, 17,195,194,255, 84
/* 0x0840 */ .byte 207, 1, 10, 75,107, 5, 0, 81,127, 1, 31,107,154,104,111, 56
/* 0x0850 */ .byte 207, 5, 0, 17,154, 72, 46, 56,160, 16, 79,122,238, 3, 15, 42
/* 0x0860 */ .byte 8,255,255, 84, 2, 0, 0, 20, 13, 0,128, 82,238, 3, 15, 42
/* 0x0870 */ .byte 31,254,255, 23, 0,224,191, 18,255, 0, 0,107,136, 0, 0, 84
/* 0x0880 */ .byte 63, 1, 2,235,128,192,255, 84, 41, 5, 0,145, 33, 1, 1,203
/* 0x0890 */ .byte 97, 0, 0,185, 0, 0,128, 82,206, 0, 0,185,245, 91, 65,169
/* 0x08a0 */ .byte 247, 99, 66,169,249,107, 67,169,251,115, 68,169,254, 43, 64,249
/* 0x08b0 */ .byte 243, 83,200,168

View File

@ -30,96 +30,47 @@
#define __MACROS_S__ 1
.altmacro
lr .req x30
fp .req x29
#define PUSH1(r1) str r1, [sp,#-1*8]!
#define PUSH2(r1,r2) stp r1,r2,[sp,#-2*8]!
#define PUSH3(r1,r2,r3) stp r1,r2,[sp,#-3*8]!; str r3, [sp,#2*8]
#define PUSH4(r1,r2,r3,r4) stp r1,r2,[sp,#-4*8]!; stp r3,r4,[sp,#2*8]
#define PUSH5(r1,r2,r3,r4,r5) PUSH2(r4,r5); PUSH3(r1,r2,r3)
// ARM64 (AARCH64) REQUIRES 16-BYTE ALIGNED STACK POINTER (SP)
// Therefore PUSH of an odd number of registers, inserts an 8-byte hole.
#define POP1(r1) ldr r1, [sp],#1*8
#define PUSH1(r1) str r1, [sp,#-2*8]! /* HOLE */
#define PUSH2(r1,r2) stp r1,r2,[sp,#-2*8]!
#define PUSH3(r1,r2,r3) stp r1,r2,[sp,#-4*8]!;\
str r3, [sp,# 2*8] /* HOLE */
#define PUSH4(r1,r2,r3,r4) stp r1,r2,[sp,#-4*8]!; \
stp r3,r4,[sp,# 2*8]
#define PUSH5(r1,r2,r3,r4,r5) stp r1,r2,[sp,#-6*8]!;\
stp r3,r4,[sp,# 2*8];\
str r5, [sp,# 4*8] /* HOLE */
#define POP1(r1) ldr r1, [sp],#2*8
#define POP2(r1,r2) ldp r1,r2,[sp],#2*8
#define POP3(r1,r2,r3) ldr r3, [sp,#2*8]; ldp r1,r2,[sp],#3*8
#define POP3(r1,r2,r3) ldr r3, [sp,#2*8]; ldp r1,r2,[sp],#4*8
#define POP4(r1,r2,r3,r4) ldp r3,r4,[sp,#2*8]; ldp r1,r2,[sp],#4*8
.macro section name
.section \name
.endm
/* The order of #if-#elif matters: ARMEL_EABI4 takes precedence over ARM_OLDABI */
#if defined(ARMEL_DARWIN) /*{*/
__NR_SYSCALL_BASE = 0
.macro do_sys N
mov w8,#\N
brk #0x80 // sets Carry iff error
svc #0 // sets Carry iff error
// orrcs r0,r0,#(1<<31) // force negative on error; FIXME: needed?
ret
.endm
.macro do_sys7t N
do_sys \N
.endm
.macro do_dcache_flush // In: r0=addr; r1=len
mov w3,#1 // _sys_dcache_flush
mov w8,#(1<<31) // syscall number?
brk #0x80
svc #0
.endm
.macro do_icache_invalidate // In: r0=addr; r1=len
mov w3,#0 // _sys_icache_invalidate
mov w8,#(1<<31) // syscall number?
brk #0x80
.endm
#elif defined(ARMEL_EABI4) /*}{*/
__NR_SYSCALL_BASE = 0
.macro do_sys7t N
mov r7,#\N // syscall number
brk #0
.endm
.macro do_sys N
mov r12,r7 // save r7 in ip
do_sys7t \N
mov r7,r12 // restore r7 from ip
.endm
.macro do_sys7t2 N
mov r7, #(\N) & 0xff // syscall number
orr r7,r7,#(\N) &~0xff // high bits
brk #0
.endm
.macro do_sys2 N
mov r12,r7 // save r7 in ip
do_sys7t2 \N
mov r7,r12 // restore r7 from ip
.endm
#elif defined(ARM_OLDABI) /*}{*/
__NR_SYSCALL_BASE = 0x900000
.macro do_sys N
brk #\N
.endm
.macro do_sys7t N
do_sys \N
.endm
.macro do_sys2 N
brk #\N
.endm
.macro do_sys7t2 N
do_sys2 \N
.endm
#else /*}{*/
.macro do_sys N
error \N // ARM_OLDABI, ARMEL_EABI4, ARMEL_DARWIN ?
.endm
.macro do_sys2 N
error \N // ARM_OLDABI, ARMEL_EABI4, ARMEL_DARWIN ?
.endm
#endif /*}*/
.macro loadcon8 reg,val8
.long (0xe3<<24)|(0xa0<<16)|((\reg<<4)<<8)+(\val8) /* mov \reg,#\val8 */
svc #0
.endm
#endif //}

View File

@ -57,9 +57,9 @@
#define jnextb0 GETBIT; bcc
#define jnextb1 GETBIT; bcs
ucl_nrv2b_decompress_8: .globl ucl_nrv2b_decompress_8 // ARM mode
.type ucl_nrv2b_decompress_8, %function
/* error = (*)(char const *src, int len_src, char *dst, int *plen_dst) */
ucl_nrv2b_decompress_32: .globl ucl_nrv2b_decompress_32 // ARM mode
.type ucl_nrv2b_decompress_32, %function
/* error = (*)(char const *src, uint32_t len_src, char *dst, uint32_t *plen_dst) */
add x1,src,len,uxtw // x1= eof_src;
PUSH4(x1,x2,x3, lr)
mov off,#-1 // off= -1 initial condition
@ -67,38 +67,28 @@ ucl_nrv2b_decompress_8: .globl ucl_nrv2b_decompress_8 // ARM mode
b top_n2b
eof_n2b:
POP3(x1,x3,x4) // x1= eof_src; r3= orig_dst; r4= plen_dst
POP4(x1,x3,x4, lr) // x1= eof_src; r3= orig_dst; r4= plen_dst
SUB2(src,x1) // 0 if actual src length equals expected length
SUB2(dst,x3) // actual dst length
str dstw,[x4]
#if defined(LINUX_ARM_CACHEFLUSH) /*{*/
mov x4,x0 // save result value
mov x0,x3 // orig_dst
add x1,x3,dst // orig_dst + dst_len
mov w2,#0
do_sys2 __ARM_NR_cacheflush // decompressed region
mov x0,x4 // result value
#endif /*}*/
#if defined(DARWIN_ARM_CACHEFLUSH) /*{*/
mov x4,x0 // save result value
mov x0,x3 // orig_dst
mov x1,dst // dst_len
PUSH2(x0,x1); do_dcache_flush
POP2 (x0,x1); do_icache_invalidate
mov x0,x4 // result value
#endif /*}*/
cache_n2b:
dc cvau,x0 // Clean by VA to point of Unification
ic ivau,x0 // Invalidate by VA to point of Unification
add x0,x0,#64 // next line
cmp x0,x1; blo cache_n2b
ldr lr,[sp],#8
mov x0,x4 // result value
ret
get1_n2b:
ADD2S(bits,bits); cbz bits,get8_n2b; ret
get8_n2b: // In: Carry set [from adding 0x80000000 (1<<31) to itself]
LDRB3(bits,[src],#1) // zero-extend next byte
ADC2(bits,bits) // double and insert CarryIn as low bit
lsl bits,bits,#23 // top 9 bits
ADD2S(bits,bits) // top 8 bits; CarryOut from doubling
ADD2S(bits,bits); cbz bits,get32_n2b; ret
get32_n2b: // In: Carry set [from adding 0x80000000 (1<<31) to itself]
LDR3(bits,[src],#4)
ADC2S(bits,bits) // left shift 1 bit with CarryIn and CarryOut
ret
ss11_n2b: // return len= [2..)
@ -135,7 +125,7 @@ copy_n2b: // copy 1+len bytes
STRB3(tmp,[dst],#1); bhs copy_n2b
b top_n2b // exit with -1==len
.size ucl_nrv2b_decompress_8, .-ucl_nrv2b_decompress_8
.size ucl_nrv2b_decompress_32, .-ucl_nrv2b_decompress_32
/*
vi:ts=8:et:nowrap
*/

View File

@ -1,4 +1,4 @@
/* nrv2d_d8.S -- ARM decompressor for NRV2D
/* nrv2d_d32.S -- ARM64 decompressor for NRV2D
This file is part of the UPX executable compressor.
@ -55,11 +55,12 @@
#define ADC2S(dst,src) adcs dst,dst,src
#define SUB2( dst,src) sub dst,dst,src
#define SUB2S(dst,src) subs dst,dst,src
#define LDR3( reg,psrc,incr) ldr reg,psrc,incr
#define LDRB3(reg,psrc,incr) ldrb reg,psrc,incr
#define STRB3(reg,pdst,incr) strb reg,pdst,incr
#if 1==SAFE /*{*/
#define CHECK_SRC cmp srclim,src; bls bad_src_n2d /* Out: 1==Carry for get8_n2d */
#define CHECK_SRC cmp srclim,src; bls bad_src_n2d /* Out: 1==Carry for get32_n2d */
#define CHECK_DST cmp dst,dstlim; bhs bad_dst_n2d
#else /*}{*/
#define CHECK_SRC /*empty*/
@ -82,8 +83,8 @@
#define jnextb0 GETBIT; bcc
#define jnextb1 GETBIT; bcs
ucl_nrv2d_decompress_8: .globl ucl_nrv2d_decompress_8 // ARM mode
.type ucl_nrv2d_decompress_8, %function
ucl_nrv2d_decompress_32: .globl ucl_nrv2d_decompress_32 // ARM mode
.type ucl_nrv2d_decompress_32, %function
/* error = (*)(char const *src, int len_src, char *dst, int *plen_dst)
Actual decompressed length is stored through plen_dst.
For SAFE mode: at call, *plen_dst must be allowed length of output buffer.
@ -111,34 +112,25 @@ eof_n2d:
SUB2(src,srclim) // 0 if actual src length equals expected length
SUB2(dst,x3) // actual dst length
str dstw,[x4]
#if defined(LINUX_ARM_CACHEFLUSH) /*{*/
mov x4,x0 // save result value
mov x0,x3 // orig_dst
add x1,x3,dst // orig_dst + dst_len
mov w2,#0
do_sys2 __ARM_NR_cacheflush // decompressed region
mov x0,x4 // result value
#endif /*}*/
#if defined(DARWIN_ARM_CACHEFLUSH) /*{*/
mov x4,x0 // save result value
mov x0,x3 // orig_dst
mov x1,dst // dst_len
PUSH2(x0,x1); do_dcache_flush
POP2 (x0,x1); do_icache_invalidate
mov x0,x4 // result value
#endif /*}*/
cache_n2d:
dc cvau,x0 // Clean by VA to point of Unification
ic ivau,x0 // Invalidate by VA to point of Unification
add x0,x0,#64 // next line
cmp x0,x1; blo cache_n2d
ldr lr,[sp],#8
mov x0,x4 // result value
POP1(lr)
ret
get1_n2d:
ADD2S(bits,bits); cbz bits,get8_n2d; ret
get8_n2d: // In: Carry set [from adding 0x80000000 (1<<31) to itself]
CHECK_SRC; LDRB3(bits,[src],#1) // zero-extend next byte
ADC2S(bits,bits) // double and insert CarryIn as low bit
lsl bits,bits,#23 // top 9 bits
ADD2S(bits,bits) // top 8 bits; CarryOut from doubling
ADD2S(bits,bits); cbz bits,get32_n2d; ret
get32_n2d: // In: Carry set [from adding 0x80000000 (1<<31) to itself]
CHECK_SRC; LDR3(bits,[src],#4)
ADC2S(bits,bits) // left shift one bit with CarryIn and CarryOut
ret
lit_n2d:
@ -194,7 +186,7 @@ copy_n2d:
SUB2S(len,#1); bne copy_n2d
b top_n2d
.size ucl_nrv2d_decompress_8, .-ucl_nrv2d_decompress_8
.size ucl_nrv2d_decompress_32, .-ucl_nrv2d_decompress_32
/*
vi:ts=8:et:nowrap

View File

@ -69,7 +69,7 @@
#if 0 /*{ DEBUG only: check newly-decompressed against original dst */
#define CHECK_BYTE \
ldrb w6,[dst]; \
cmp w6,tmp; beq 0f; bkpt; 0:
cmp w6,tmp; beq 0f; brk #0; 0:
#else /*}{*/
#define CHECK_BYTE /*empty*/
#endif /*}*/
@ -84,11 +84,12 @@
ucl_nrv2e_decompress_32: .globl ucl_nrv2e_decompress_32 // ARM mode
.type ucl_nrv2e_decompress_32, %function
/* error = (*)(char const *src, int len_src, char *dst, int *plen_dst)
/* error = (*)(char const *src, uint32_t len_src, char *dst, uint32_t *plen_dst)
Actual decompressed length is stored through plen_dst.
For SAFE mode: at call, *plen_dst must be allowed length of output buffer.
*/
PUSH3(x2,x3, lr)
PUSH1(lr)
PUSH2(x2,x3)
#define sp_DST0 0 /* stack offset of original dst */
add srclim,src,len,uxtw // srclim= eof_src;
#if 1==SAFE /*{*/
@ -101,7 +102,6 @@ ucl_nrv2e_decompress_32: .globl ucl_nrv2e_decompress_32 // ARM mode
#if 1==SAFE /*{*/
bad_dst_n2e: # return value will be 2
bkpt
add src,srclim,#1
bad_src_n2e: # return value will be 1
ADD2(src,#1)
@ -111,31 +111,25 @@ eof_n2e:
SUB2(src,srclim) // 0 if actual src length equals expected length
SUB2(dst,x3) // actual dst length
str dstw,[x4]
#if defined(LINUX_ARM_CACHEFLUSH) /*{*/
mov x4,x0 // save result value
mov x0,x3 // orig_dst
add x1,x3,dst // orig_dst + dst_len
mov w2,#0
do_sys2 __ARM_NR_cacheflush // decompressed region
mov x0,x4 // result value
#endif /*}*/
#if defined(DARWIN_ARM_CACHEFLUSH) /*{*/
mov x4,x0 // save result value
mov x0,x3 // orig_dst
mov x1,dst // dst_len
PUSH2(x0,x1); do_dcache_flush
POP {x0,x1}; do_icache_invalidate
mov x0,x4 // result value
#endif /*}*/
cache_n2e:
dc cvau,x0 // Clean by VA to point of Unification
ic ivau,x0 // Invalidate by VA to point of Unification
add x0,x0,#64 // next line
cmp x0,x1; blo cache_n2e
ldr lr,[sp],#8; br lr
mov x0,x4 // result value
POP1(lr)
ret
get1_n2e:
ADD2S(bits,bits); cbz bits,get32_n2e; ret
get32_n2e: // In: Carry set [from adding 0x80000000 (1<<31) to itself]
CHECK_SRC; ldr bits,[src],#4
ADC2S(bits,bits) // double, insert CarryIn as low bit, record CarryOut
ADC2S(bits,bits) // left shift 1 bit with CarryIn and CarryOut
ret
lit_n2e:

View File

@ -1,209 +0,0 @@
/* armv4_n2e_d8.S -- ARM decompressor for NRV2E
This file is part of the UPX executable compressor.
Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2017 Laszlo Molnar
Copyright (C) 2000-2017 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>
*/
#define SAFE 0 /* 1 for src+dst bounds checking: cost 76 bytes */
#define lr x30
#define src x0
#define len w1 /* overlaps 'cnt' */
#define dst x2
#define dstw w2
#define tmp w3
#define tmpx x3
#define bits w4
#define off w5
/* r6 UNUSED in ARM code unless DEBUG mode */
#define srclim x7
#if 1==SAFE /*{*/
#define dstlim x12 /* FIXME */
#endif /*}*/
#define cnt w1 /* overlaps 'len' while reading an offset */
/* macros reduce "noise" when comparing this ARM code to corresponding THUMB code */
#define ADD2( dst,src) add dst,dst,src
#define ADD2S(dst,src) adds dst,dst,src
#define ADC2( dst,src) adc dst,dst,src
#define ADC2S(dst,src) adcs dst,dst,src
#define SUB2( dst,src) sub dst,dst,src
#define SUB2S(dst,src) subs dst,dst,src
#define LDRB3(reg,psrc,incr) ldrb reg,psrc,incr
#define STRB3(reg,pdst,incr) strb reg,pdst,incr
#if 1==SAFE /*{*/
#define CHECK_SRC cmp srclim,src; bls bad_src_n2e /* Out: 1==Carry for get8_n2e */
#define CHECK_DST cmp dst,dstlim; bhs bad_dst_n2e
#else /*}{*/
#define CHECK_SRC /*empty*/
#define CHECK_DST /*empty*/
#endif /*}*/
#if 0 /*{ DEBUG only: check newly-decompressed against original dst */
#define CHECK_BYTE \
ldrb w6,[dst]; \
cmp w6,tmp; beq 0f; bkpt; 0:
#else /*}{*/
#define CHECK_BYTE /*empty*/
#endif /*}*/
#undef GETBIT
#define GETBIT bl get1_n2e
#undef getnextb
#define getnextb(reg) GETBIT; ADC2(reg,reg) /* Out: condition code not changed */
#define jnextb0 GETBIT; bcc
#define jnextb1 GETBIT; bcs
ucl_nrv2e_decompress_8: .globl ucl_nrv2e_decompress_8 // ARM mode
.type ucl_nrv2e_decompress_8, %function
/* error = (*)(char const *src, int len_src, char *dst, int *plen_dst)
Actual decompressed length is stored through plen_dst.
For SAFE mode: at call, *plen_dst must be allowed length of output buffer.
*/
PUSH3(x2,x3, lr)
#define sp_DST0 0 /* stack offset of original dst */
add srclim,src,len,uxtw // srclim= eof_src;
#if 1==SAFE /*{*/
ldr tmp,[r3] // len_dst
add dstlim,tmp,dst
#endif /*}*/
mov off,#-1 // off= -1 initial condition
mov bits,#1<<31 // refill next time
b top_n2e
#if 1==SAFE /*{*/
bad_dst_n2e: # return value will be 2
bkpt
add src,srclim,#1
bad_src_n2e: # return value will be 1
ADD2(src,#1)
#endif /*}*/
eof_n2e:
POP2(x3,x4) // r3= orig_dst; r4= plen_dst
SUB2(src,srclim) // 0 if actual src length equals expected length
SUB2(dst,x3) // actual dst length
str dstw,[x4]
#if defined(LINUX_ARM_CACHEFLUSH) /*{*/
mov x4,x0 // save result value
mov x0,x3 // orig_dst
add x1,x3,dst // orig_dst + dst_len
mov x2,#0
do_sys2 __ARM_NR_cacheflush // decompressed region
mov x0,x4 // result value
#endif /*}*/
#if defined(DARWIN_ARM_CACHEFLUSH) /*{*/
mov x4,x0 // save result value
mov x0,x3 // orig_dst
mov x1,dst // dst_len
PUSH2(x0,x1); do_dcache_flush
POP2 (x0,x1); do_icache_invalidate
mov x0,x4 // result value
#endif /*}*/
POP1(lr)
ret
get1_n2e:
ADD2S(bits,bits); cbz bits,get8_n2e; ret
get8_n2e:
// In: Carry set [from adding 0x80000000 (1<<31) to itself]
CHECK_SRC; LDRB3(bits,[src],#1) // zero-extend next byte
ADC2S(bits,bits) // double and insert CarryIn as low bit
lsl bits,bits,#23 // top 9 bits
ADD2S(bits,bits) // top 8 bits; CarryOut from doubling
ret
lit_n2e:
CHECK_SRC; LDRB3(tmp,[src],#1)
CHECK_BYTE
CHECK_DST; STRB3(tmp,[dst],#1)
top_n2e:
jnextb1 lit_n2e
mov cnt,#1; b getoff_n2e
off_n2e:
SUB2(cnt,#1)
getnextb(cnt)
getoff_n2e:
getnextb(cnt)
jnextb0 off_n2e
subs tmp,cnt,#3 // set Carry
mov len,#0 // Carry unaffected
blo offprev_n2e // cnt was 2; tests Carry only
CHECK_SRC; LDRB3(off,[src],#1) // low 7+1 bits
orr off,off,tmp,lsl #8
mvn off,off; cbz off,eof_n2e // off= ~off
tst off,#1; asr off,off,#1; bne lenlast_n2e // branch on former bottom bit
b lenmore_n2e
offprev_n2e:
jnextb1 lenlast_n2e
lenmore_n2e:
mov len,#1
jnextb1 lenlast_n2e
len_n2e:
getnextb(len)
jnextb0 len_n2e
ADD2(len,#6-2)
b gotlen_n2e
lenlast_n2e:
getnextb(len) // 0,1,2,3
ADD2(len,#2)
gotlen_n2e: // 'cmn': add the inputs, set condition codes, discard the sum
cmn off,#5<<8 // within M2_MAX_OFFSET
csinc len,len,len,cc // too far away, so minimum match length is 3
near_n2e:
#if 1==SAFE /*{*/
ldr tmp,[sp,#sp_DST0]
SUB2( tmp,dst)
SUB2S(tmp,off); bhi bad_dst_n2e // reaching back too far
add tmp,dst,cnt
cmp tmp,dstlim; bhi bad_dst_n2e // too much output
#endif /*}*/
add tmpx,dst,len,sxtw
ldrb tmp,[tmpx,#-1] // force cacheline allocate
copy_n2e:
ldrb tmp,[dst,off,sxtw]
CHECK_BYTE
STRB3(tmp,[dst],#1)
SUB2S(len,#1); bne copy_n2e
b top_n2e
.size ucl_nrv2e_decompress_8, .-ucl_nrv2e_decompress_8
/*
vi:ts=8:et:nowrap
*/

View File

@ -29,19 +29,6 @@
* <jreiser@users.sourceforge.net>
*/
//#define SIMULATE_ON_DEBIAN_EABI4 1
#undef SIMULATE_ON_DEBIAN_EABI4
#ifdef SIMULATE_ON_DEBIAN_EABI4 /*{*/
#define LINUX_ARM_CACHEFLUSH 1 /* SIMULATE_ON_DEBIAN_EABI4 */
#define ARMEL_EABI4 1 /* SIMULATE_ON_DEBIAN_EABI4 */
#else /*}{ usual case */
#define DARWIN_ARM_CACHEFLUSH 1
#define ARMEL_DARWIN 1
#endif /*}*/
#define lr x30
#include "arch/arm64/v8/macros.S"
sz_b_info= 12
@ -97,13 +84,13 @@ f_decompress:
// empty
section NRV2E
#include "arch/arm64/v8/nrv2e_d8.S"
#include "arch/arm64/v8/nrv2e_d32.S"
section NRV2D
#include "arch/arm64/v8/nrv2d_d8.S"
#include "arch/arm64/v8/nrv2d_d32.S"
section NRV2B
#include "arch/arm64/v8/nrv2b_d8.S"
#include "arch/arm64/v8/nrv2b_d32.S"
section NRV_TAIL
// empty
@ -116,9 +103,9 @@ end_decompress: .globl end_decompress
/* IDENTSTR goes here */
section MACHMAINZ
#define lsrc w1
#define ldst w3
#define ldstx x3
lsrc .req w1
ldst .req w3
ldstx .req x3
unfold: // lr= &L100
ldr ldst,[lr,#sz_unc]
ldr lsrc,[lr,#sz_cpr]
@ -126,7 +113,7 @@ unfold: // lr= &L100
add src,lr,ldst,uxtw; add src,src,#GAP+NO_LAP // defend against prefetch and overlap
mov w4,lsrc // loop count
#define t0 w9
t0 .req w9
movup: // descending copy folded_loader to higher address
ldr t0,[dst,#-4]!; sub w4,w4,#4
str t0,[src,#-4]!; cbnz w4,movup
@ -149,7 +136,4 @@ L100:
GAP= 128 // > farthest prefetch; must match ../../p_mach.cpp
NO_LAP= 64 // avoid overlap for folded loader; must match ../../p_mach.cpp
#undef ldstx
#undef ldst
/* vim:set ts=8 sw=8 et: */

View File

@ -59,7 +59,6 @@ fold_begin:
sp/ junk1,junk2,{30 original regs (omit sp,lr)},junk3,original_stack...
*/
#define t0w w9 /* scratch value */
lr .req x30
ldr x1,[x11] // sz_pack2
add x7,sp,#8*(2+(32-2)) // &junk3; will become &mhdrp
sub x0,x11,x1,uxtw // &{l_info; p_info; b_info}
@ -134,23 +133,23 @@ unf_ret:
spin: .globl spin
ret
__NR_exit = 1 + __NR_SYSCALL_BASE
__NR_read = 3 + __NR_SYSCALL_BASE
__NR_write = 4 + __NR_SYSCALL_BASE
__NR_open = 5 + __NR_SYSCALL_BASE
__NR_close = 6 + __NR_SYSCALL_BASE
__NR_brk = 45 + __NR_SYSCALL_BASE
__NR_exit = 1
__NR_read = 3
__NR_write = 4
__NR_open = 5
__NR_close = 6
__NR_brk = 45
__NR_mmap = 197 + __NR_SYSCALL_BASE
__NR_munmap = 73 + __NR_SYSCALL_BASE
__NR_mprotect = 74 + __NR_SYSCALL_BASE
__NR_pread = 153 + __NR_SYSCALL_BASE
__NR_mmap = 197
__NR_munmap = 73
__NR_mprotect = 74
__NR_pread = 153
#ifdef SIMULATE_ON_DEBIAN_EABI4 /*{*/
__NR_mmap = 192 + __NR_SYSCALL_BASE // mmap2
__NR_munmap = 91 + __NR_SYSCALL_BASE
__NR_mprotect = 125 + __NR_SYSCALL_BASE
__NR_pread = 180 + __NR_SYSCALL_BASE
__NR_mmap = 192 // mmap2
__NR_munmap = 91
__NR_mprotect = 125
__NR_pread = 180
#endif /*}*/
.globl exit

View File

@ -0,0 +1,245 @@
/* aarch64-linux.elf-entry.S -- Linux program entry point & decompressor (Elf binary)
*
* This file is part of the UPX executable compressor.
*
* Copyright (C) 1996-2015 Markus Franz Xaver Johannes Oberhumer
* Copyright (C) 1996-2015 Laszlo Molnar
* Copyright (C) 2000-2015 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> <ml1050@users.sourceforge.net>
*
* John F. Reiser
* <jreiser@users.sourceforge.net>
*/
#include "arch/arm64/v8/macros.S"
sz_Elf64_Ehdr= 64
sz_Elf64_Phdr= 56
sz_b_info= 12
sz_unc= 0
sz_cpr= 4
b_method= 8
sz_l_info= 12
sz_p_info= 12
PROT_READ= 1
PROT_WRITE= 2
PROT_EXEC= 4
MAP_FIXED= 0x10
PAGE_SHIFT= 12
PAGE_SIZE = -(~0<<PAGE_SHIFT)
__NR_exit = 93
__NR_write = 64
__NR_mmap64 = 222
__ARM_NR_cacheflush = 255 // FIXME
#ifndef DEBUG /*{*/
#define DEBUG 0
#endif /*}*/
//.long sz_pack2 // placed there by ::pack3()
section ELFMAINX
start_params:
.long LENF // end_decompress - (start_params -4)
.long CPR0 // cpr0 - (start_params -4)
mflg:
.long MFLG // MAP_{PRIVATE|ANONYMOUS} // QNX vs linux
.xword ADRM // dst for map
_start: .globl _start
/* Get some pages: enough
to duplicate the entire compressed PT_LOAD, plus 1 page, located just after
the brk() of the _un_compressed program. The address is pre-calculated
calculated by PackLinuxElf64arm::addLinkerSymbols().
*/
#if DEBUG /*{*/
#define TRACE_REGS r0-r12,r14,r15
// sp (r13) is not included because the write-back might cause UNDEFINED behavior
// if the write-back register is not first or last. The actual value of sp
// usually does not matter. Just remember that lr (r14) and pc (r15) are stored
// one word closer to the stack pointer because r13 has been omitted.
stmdb sp!,{TRACE_REGS}; mov r0,#1; bl trace
#endif /*}*/
adr x12,start_params -4 // &sz_pack2
ldp w1,w10,[x12] // w1= sz_pack2; w10= LENF
ldp w11,w13,[x12,#2*4] // w11= CPRO; w13= MFLG
add x11,x11,x12 // cpr0
add x10,x10,x12 // end_decompress
ldr w3,[x11,# sz_unc]
sub x9,x12,x1 // &our_Elf64_Ehdr
add w1,w1,w3 // sz_pack2 + cpr0.sz_unc
ldr x0,[x12,#4*4] // ADRM
add x1,x1,# PAGE_SIZE
section LUNMP000
// unused
section LUNMP001
// unused
section ELFMAINXu
PUSH4(x0,x1,x2,x13) // ADRU, LENU, space for sz_unc, MFLG
SP_MFLG= 4*8
D_sz_unc=2*8 // stack displacement to sz_unc
mov w2,#PROT_READ | PROT_WRITE | PROT_EXEC
orr w3,w13,#MAP_FIXED // MFLG: MAP_{PRIVATE|ANON}
mov x5,#0 // offset= 0
mov w4,#-1 // fd= -1; cater to *BSD for fd when MAP_ANON
do_sys __NR_mmap64
#if DEBUG /*{*/
stmdb sp!,{TRACE_REGS}; mov r0,#2; bl trace
#endif /*}*/
cmn x0,#4096
bcs msg_SELinux
copy_cl: // copy decompressor and folded code
add x5,x0,#64; // FIXME(memcheck) dc zva,x5 // clear FOLLOWING 64-byte line
ldp x1,x2,[x9],#2*8
ldp x3,x4,[x9],#2*8
stp x1,x2,[x0],#2*8
stp x3,x4,[x0],#2*8
ldp x1,x2,[x9],#2*8
ldp x3,x4,[x9],#2*8
stp x1,x2,[x0],#2*8
stp x3,x4,[x0],#2*8
cmp x9,x10
sub x5,x9,#64; // FIXME(memcheck) dc cvau,x5 // clean 64-byte line
blo copy_cl // all source lines
sub x4,x0,x9 // relocation amount
ldr w1,[sp,#SP_MFLG]
adr x15,f_decompress
str w1,[x0],#4 // MFLG at -4+ fold_begin
mov lr,x0 // dst for unfolded code
add x15,x15,x4 // relocated f_decompress
ldr w9,[x12] // sz_pack2
sub w9,w9,#sz_Elf64_Ehdr + 2*sz_Elf64_Phdr + sz_l_info + sz_p_info
sub x10,x12,x9 // &b_info
add x10,x10,x4 // relocated &b_info
ldr w4,[x11,# b_method ] // 5th param (whole word: endian issues!)
D_stm1=0*8
ldr w3,[x11,# sz_unc]
add x0, x11,# sz_b_info
ldr w1,[x11,# sz_cpr ]
mov x2,lr // dst
str w3,[sp,#D_stm1 + D_sz_unc] // sz_unc; lzma needs for EOF
add x3, sp,#D_stm1 + D_sz_unc // &sz_unc
#if DEBUG /*{*/
stmdb sp!,{TRACE_REGS}; mov r0,#3; bl trace
#endif /*}*/
br x15 // decompress folded code, return to *lr
#if DEBUG /*{*/
TRACE_BUFLEN=512
trace:
str lr,[sp,#(-1+ 15)*4] @ return pc; [remember: sp is not stored]
mov r4,sp @ &saved_r0
sub sp,sp,#TRACE_BUFLEN
mov r2,sp @ output string
mov r1,#'\n'; bl trace_hex @ In: r0 as label
mov r1,#'>'; strb r1,[r2],#1
mov r5,#3 @ rows to print
L600: @ each row
sub r0,r4,#TRACE_BUFLEN
sub r0,r0,sp
mov r0,r0,lsr #2; mov r1,#'\n'; bl trace_hex @ which block of 8
mov r6,#8 @ words per row
L610: @ each word
ldr r0,[r4],#4; mov r1,#' '; bl trace_hex @ next word
subs r6,r6,#1; bgt L610
subs r5,r5,#1; bgt L600
mov r0,#'\n'; strb r0,[r2],#1
sub r2,r2,sp @ count
mov r1,sp @ buf
mov r0,#2 @ FD_STDERR
do_sys __NR_write
add sp,sp,#TRACE_BUFLEN
ldmia sp!,{TRACE_REGS}
trace_hex: // In: r0=val, r1=punctuation before, r2=ptr; Uses: r3, ip
strb r1,[r2],#1 @ punctuation
mov r3,#4*(8 -1) @ shift count
adr ip,hex
L620:
mov r1,r0,lsr r3
and r1,r1,#0xf
ldrb r1,[ip, r1]
strb r1,[r2],#1
subs r3,r3,#4; bge L620
ret
hex:
.ascii "0123456789abcdef"
#endif /*}*/
f_decompress:
#define LINUX_ARM_CACHEFLUSH 1
section NRV_HEAD
// empty
section NRV_TAIL
// empty
section NRV2E
#include "arch/arm64/v8/nrv2e_d32.S"
section NRV2D
#include "arch/arm64/v8/nrv2d_d32.S"
section NRV2B
#include "arch/arm64/v8/nrv2b_d32.S"
#include "arch/arm64/v8/lzma_d.S"
section ELFMAINY
end_decompress: .globl end_decompress
msg_SELinux:
mov w2,#L71 - L70 // length
adr x1,L70 // message text
mov w0,#2 // fd stderr
do_sys __NR_write
die:
mov w0,#127
do_sys __NR_exit
L70:
.asciz "PROT_EXEC|PROT_WRITE failed.\n"
L71:
/* IDENTSTR goes here */
section ELFMAINZ
cpr0: .globl cpr0
/* { b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...} */
/*
vi:ts=8:et:nowrap
*/

View File

@ -0,0 +1,384 @@
// aarch64-linux.elf-fold.S -- linkage to C code to process Elf binary
//
// This file is part of the UPX executable compressor.
//
// Copyright (C) 2000-2015 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> <ml1050@users.sourceforge.net>
//
// John F. Reiser
// <jreiser@users.sourceforge.net>
//
#define ARM_OLDABI 1
#include "arch/arm64/v8/macros.S"
sz_Elf64_Ehdr= 64
sz_Elf64_Phdr= 56
sz_l_info = 12
sz_p_info = 12
sz_b_info = 12
sz_unc= 0
sz_cpr= 4
b_method= 8
MAP_PRIVATE= 0x02
MAP_FIXED= 0x10
PROT_READ= 0x1
O_RDONLY= 0
AT_FDCWD= -100
PAGE_SHIFT= 12
PAGE_SIZE = -(~0<<PAGE_SHIFT)
#ifndef DEBUG /*{*/
#define DEBUG 0
#endif /*}*/
//@ control just falls through, after this part and compiled C code
//@ are uncompressed.
#define OVERHEAD 2048
#define MAX_ELF_HDR 512
fold_begin:
/* In:
r15= f_decompress
r10= &b_info of first compressed block (after move)
r9= total size of compressed data
sp/ ADRU,LENU,sz_unc,MFLG, argc,argv...
*/
POP4(x3,x4,x5,x8) // x3= ADRU; x4= LENU; x5= sz_unc; x8= MFLG
ldr x7,[sp,#0] // argc
mov x0,sp // current stack pointer
add x1,sp,#2*8 // skip argc and terminator of argv
add x1,x1,x7,lsl #3 // skip argv
.L10: // skip env
ldr x2,[x1],#8
cbnz x2,.L10
.L20: // skip auxv
ldr x2,[x1],#2*8
cbnz x2,.L20 // AT_NULL
sub x0,x1,#4096 // buffer for readlink
sub x0,x0,#4 // space for copy of space3eq
sub x1,x1,x0 // amount needed for argc,argv,env,auxv
lsr x0,x0,#PAGE_SHIFT // round down
sub x0,x0,#1 // one page
lsl x6,x0,#PAGE_SHIFT // page address
sub x0,x6,x1 // space for argc,argv,env,auxv
sub x0,x0,#8 // room for added env ptr
and x0,x0,#~0<<4 // sp must be 16-byte aligned
add x1,sp,#8 // old_argv; avoid 0==argc impostor for terminator of argv
mov sp,x0 // new_argc
PUSH3(x3,x4,x5) // ADRU, LENU, sz_unc
SP_sz_unc= 2*8
SP_argc= 4*8 // remember the hole from PUSH3
str x7,[x0],#8 // argc
.Larg: // copy argv
ldr x2,[x1],#8
str x2,[x0],#8
cbnz x2,.Larg
.Lenv: // copy env
ldr x2,[x1],#8
str x2,[x0],#8
cbnz x2,.Lenv
sub x4,x0,#8 // added env ptr goes here
str x2,[x0],#8 // terminator after added ptr
mov x7,x0 // new &Elf64_auxv_t
.Laux: // copy auxv
ldp x2,x3,[x1],#2*8 // .a_type, .a_val
stp x2,x3,[x0],#2*8
cbnz x2,.Laux // AT_NULL
str x0,[sp,#SP_sz_unc] // clobber sz_unc with 1+ &Elf64_auxv_t[AT_NULL@.a_type]
add x1,x6,#1<<PAGE_SHIFT // after the mmap'ed page
str x1,[x4] // new env ptr
ldr w2,space3eq
str w2,[x1],#4 // " =" of new env var
mov w2,#4096-1 // buffer length and null terminator
adr x0,proc_self_exe
bl readlink
/* Preserve symlink /proc/self/exe by mapping one page into stack */
adr x0,proc_self_exe
mov w1,#O_RDONLY
bl open // no error check: cannot recover
mov w4,w0 // fd
mov x0,x6 // page address
mov x5,#0 // offset
mov w3,#MAP_PRIVATE|MAP_FIXED
mov w2,#PROT_READ
mov x1,#PAGE_SIZE
bl mmap // no error check: cannot recover
mov w0,w4 // fd
bl close
/* Construct arglist for upx_main */
add x6,sp,#3*8 // &reloc
sub sp,sp,#MAX_ELF_HDR + OVERHEAD // alloca
adr x5,f_unfilter
mov x4,x15 // f_decompress
mov x3,x7 // new &Elf64_auxv_t
mov x2,sp // ehdr
mov w1,w9 // total size of compressed data
mov x0,x10 // &b_info
bl upx_main
add sp,sp,#MAX_ELF_HDR + OVERHEAD // un-alloca
mov lr,x0 // entry address
POP4(x0,x1,x2,x3) // x0= ADRU; x1= LENU; x2= 1+ &Elf64_auxv_t[AT_NULL@.atype]; x3= reloc
#if DEBUG /*{*/
ldr x4,[x2,#8 -2*8] // Elf64_auxv_t[AT_NULL@.a_type].a_val
ldr w5,[x4,#0] // 1st instr
ldr w6,[x4,#4] // 2nd instr
#define TRACE_REGS r0-r12,r14,r15
stmdb sp!,{TRACE_REGS}; mov r0,#4; bl trace
#endif /*}*/
ldr x3,[x2,#8 -2*8] // Elf64_auxv_t[AT_NULL@.a_type].a_val
mov w8,#__NR_munmap
br x3
space3eq:
.ascii " ="
proc_self_exe:
.asciz "/proc/self/exe"
.balign 4
f_unfilter: // (char *ptr, uint len, uint cto, uint fid)
ptr .req x0
len .req x1
lenw .req w1
cto .req w2 // unused
fid .req w3
t1 .req w2
t2 .req w3
#ifndef FILTER_ID /*{*/
#define FILTER_ID 0x52 /* little-endian */
#endif /*}*/
and fid,fid,#0xff
cmp fid,#FILTER_ID // last use of fid
bne unfret
lsr len,len,#2 // word count
cbz len,unfret
top_unf:
sub len,len,#1
ldr t1,[ptr,len,lsl #2]
ubfx t2,t1,#26,#5
cmp t2,#5; bne tst_unf // not unconditional branch
sub t2,t1,lenw // word displ
bfi t1,t2,#0,#26 // replace
str t1,[ptr,len,lsl #2]
tst_unf:
cbnz len,top_unf
unfret:
ret
#if DEBUG /*{*/
TRACE_BUFLEN=512
trace:
str lr,[sp,#(-1+ 15)*4] // return pc; [remember: sp is not stored]
mov r4,sp // &saved_r0
sub sp,sp,#TRACE_BUFLEN
mov r2,sp // output string
mov r1,#'\n'; bl trace_hex // In: r0 as label
mov r1,#'>'; strb r1,[r2],#1
mov r5,#3 // rows to print
L600: // each row
sub r0,r4,#TRACE_BUFLEN
sub r0,r0,sp
mov r0,r0,lsr #2; mov r1,#'\n'; bl trace_hex // which block of 8
mov r6,#8 // words per row
L610: // each word
ldr r0,[r4],#4; mov r1,#' '; bl trace_hex // next word
subs r6,r6,#1; bgt L610
subs r5,r5,#1; bgt L600
mov r0,#'\n'; strb r0,[r2],#1
sub r2,r2,sp // count
mov r1,sp // buf
mov r0,#2 // FD_STDERR
#if defined(ARMEL_EABI4) /*{*/
mov r7,#__NR_write
swi 0
#else /*}{*/
swi __NR_write
#endif /*}*/
add sp,sp,#TRACE_BUFLEN
ldmia sp!,{TRACE_REGS}
trace_hex: // In: r0=val, r1=punctuation before, r2=ptr; Uses: r3, ip
strb r1,[r2],#1 // punctuation
mov r3,#4*(8 -1) // shift count
adr ip,hex
L620:
mov r1,r0,lsr r3
and r1,r1,#0xf
ldrb r1,[ip, r1]
strb r1,[r2],#1
subs r3,r3,#4; bge L620
ret
hex:
.ascii "0123456789abcdef"
#endif /*}*/
.unreq ptr
.unreq len
.unreq cto
.unreq fid
__NR_SYSCALL_BASE= 0
__NR_exit = 0x5e + __NR_SYSCALL_BASE // 94 exit_group
__NR_read = 0x3f + __NR_SYSCALL_BASE // 63
__NR_write = 0x40 + __NR_SYSCALL_BASE // 64
__NR_open = 0x38 + __NR_SYSCALL_BASE // 56
__NR_close = 0x39 + __NR_SYSCALL_BASE // 57
__NR_unlink= 0x23 + __NR_SYSCALL_BASE // 35
__NR_getpid= 0xad + __NR_SYSCALL_BASE // 172
__NR_brk = 0xd6 + __NR_SYSCALL_BASE // 214
__NR_readlink=0x4e+ __NR_SYSCALL_BASE // 78
__NR_mmap = 0xde + __NR_SYSCALL_BASE // 222
__NR_mprotect = 0xe2 + __NR_SYSCALL_BASE // 226
__NR_munmap = 0xd7 + __NR_SYSCALL_BASE // 215
__ARM_NR_BASE = 0x0f0000 + __NR_SYSCALL_BASE
__ARM_NR_cacheflush = 2 + __ARM_NR_BASE
.globl my_bkpt
my_bkpt:
brk #0
ret
.globl exit
exit:
do_sys __NR_exit
.globl read
read:
do_sys __NR_read; ret
.globl write
write:
do_sys __NR_write; ret
.globl close
close:
do_sys __NR_close; ret
.globl getpid
getpid:
do_sys __NR_getpid; ret
.globl brk
brk:
do_sys __NR_brk; ret
.globl munmap
munmap:
do_sys __NR_munmap; ret
.globl mprotect
mprotect:
do_sys __NR_mprotect; ret
bits_privanon= -4+ fold_begin // entry stores: MAP_{PRIVATE|ANON} QNX vs linux
mmap_privanon: .globl mmap_privanon
ldr w6,bits_privanon // r12 === ip
mov x5,#0 // offset= 0
mov x4,#-1 // fd= -1
orr w3,w3,w6 // flags |= MAP_{PRIVATE|ANON} [QNX vs Linux]
// FALL THROUGH to mmap
.globl mmap
mmap:
do_sys __NR_mmap; ret
.globl unlink
unlink:
mov x1,#0 // flags as last arg
mov w8,#__NR_unlink
b svc_AT
.globl open
open:
mov w8,#__NR_open
svc_AT:
//mov x4,x3
mov x3,x2 // mode
mov x2,x1 // flags
mov x1,x0 // fname
mov x0,#AT_FDCWD
svc #0; ret
.globl readlink
readlink:
mov w8,#__NR_readlink
mov x3,x2 // buflen
mov x2,x1 // buffer
mov x1,x0 // fname
mov x0,#AT_FDCWD
svc #0
cmn x0,#4096; bcs 0f // error
mov w3,#0
strb w3,[x2,x0] // null terminate pathname
0:
ret
.globl __clear_cache
__clear_cache:
hlt #0
mov w2,#0
do_sys 0; ret // FIXME
#if DEBUG /*{*/
div10: .globl div10
mov x1,#10
udiv x0,x0,x1
ret
#endif /*}*/
// vi:ts=8:et:nowrap

View File

@ -0,0 +1,48 @@
/* arm64-linux.elf-fold.lds -- static linker script to build arm64-linux.elf-fold.bin
This file is part of the UPX executable compressor.
Copyright (C) 2000-2017 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>
*/
OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64", "elf64-littleaarch64")
OUTPUT_ARCH(aarch64)
/*ENTRY(_start)*/
PHDRS
{
text PT_LOAD FILEHDR PHDRS FLAGS ( 5 ) ; /* r-x (no -w-) */
data PT_LOAD ; /* for setting brk(0) */
}
SECTIONS
{
. = 0x00100000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
.text : {
*(.text)
*(.data)
} : text
.data : {
} : data
}

View File

@ -0,0 +1,406 @@
/* arm64-linux.elf-main.c -- stub loader for Linux 64-bit ELF executable
This file is part of the UPX executable compressor.
Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2017 Laszlo Molnar
Copyright (C) 2000-2017 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>
*/
#include "include/linux.h"
/*************************************************************************
// configuration section
**************************************************************************/
// In order to make it much easier to move this code at runtime and execute
// it at an address different from it load address: there must be no
// static data, and no string constants.
#define MAX_ELF_HDR 1024 // Elf64_Ehdr + n*Elf64_Phdr must fit in this
/*************************************************************************
// "file" util
**************************************************************************/
typedef struct {
size_t size; // must be first to match size[0] uncompressed size
char *buf;
} Extent;
static void
xread(Extent *x, char *buf, size_t count)
{
char *p=x->buf, *q=buf;
size_t j;
if (x->size < count) {
exit(127);
}
for (j = count; 0!=j--; ++p, ++q) {
*q = *p;
}
x->buf += count;
x->size -= count;
}
/*************************************************************************
// util
**************************************************************************/
#if 1 //{ save space
#define ERR_LAB error: exit(127);
#define err_exit(a) goto error
#else //}{ save debugging time
#define ERR_LAB /*empty*/
static void
err_exit(int a)
{
(void)a; // debugging convenience
exit(127);
}
#endif //}
/*************************************************************************
// UPX & NRV stuff
**************************************************************************/
typedef void f_unfilter(
nrv_byte *, // also addvalue
nrv_uint,
unsigned cto8, // junk in high 24 bits
unsigned ftid
);
typedef int f_expand(
const nrv_byte *, nrv_uint,
nrv_byte *, nrv_uint *, unsigned );
static void
unpackExtent(
Extent *const xi, // input
Extent *const xo, // output
f_expand *const f_decompress,
f_unfilter *f_unf
)
{
while (xo->size) {
struct b_info h;
// Note: if h.sz_unc == h.sz_cpr then the block was not
// compressible and is stored in its uncompressed form.
// Read and check block sizes.
xread(xi, (char *)&h, sizeof(h));
if (h.sz_unc == 0) { // uncompressed size 0 -> EOF
if (h.sz_cpr != UPX_MAGIC_LE32) // h.sz_cpr must be h->magic
err_exit(2);
if (xi->size != 0) // all bytes must be written
err_exit(3);
break;
}
if (h.sz_cpr <= 0) {
err_exit(4);
ERR_LAB
}
if (h.sz_cpr > h.sz_unc
|| h.sz_unc > xo->size ) {
err_exit(5);
}
// Now we have:
// assert(h.sz_cpr <= h.sz_unc);
// assert(h.sz_unc > 0 && h.sz_unc <= blocksize);
// assert(h.sz_cpr > 0 && h.sz_cpr <= blocksize);
if (h.sz_cpr < h.sz_unc) { // Decompress block
nrv_uint out_len = h.sz_unc; // EOF for lzma
int const j = (*f_decompress)((unsigned char *)xi->buf, h.sz_cpr,
(unsigned char *)xo->buf, &out_len, h.b_method );
if (j != 0 || out_len != (nrv_uint)h.sz_unc)
err_exit(7);
// Skip Ehdr+Phdrs: separate 1st block, not filtered
if (h.b_ftid!=0 && f_unf // have filter
&& ((512 < out_len) // this block is longer than Ehdr+Phdrs
|| (xo->size==(unsigned)h.sz_unc) ) // block is last in Extent
) {
(*f_unf)((unsigned char *)xo->buf, out_len, h.b_cto8, h.b_ftid);
}
xi->buf += h.sz_cpr;
xi->size -= h.sz_cpr;
}
else { // copy literal block
xread(xi, xo->buf, h.sz_cpr);
}
xo->buf += h.sz_unc;
xo->size -= h.sz_unc;
}
}
//DEBUG_STRCON(STR_make_hatch, "make_hatch %%p %%x\\n");
static void *
make_hatch_arm64(
Elf64_Phdr const *const phdr,
uint64_t const reloc
)
{
unsigned *hatch = 0;
//DPRINTF((STR_make_hatch(),phdr,reloc));
if (phdr->p_type==PT_LOAD && phdr->p_flags & PF_X) {
// The format of the 'if' is
// if ( ( (hatch = loc1), test_loc1 )
// || ( (hatch = loc2), test_loc2 ) ) {
// action
// }
// which uses the comma to save bytes when test_locj involves locj
// and the action is the same when either test succeeds.
// Try page fragmentation just beyond .text .
if ( ( (hatch = (void *)(~3ul & (3+ phdr->p_memsz + phdr->p_vaddr + reloc))),
( phdr->p_memsz==phdr->p_filesz // don't pollute potential .bss
&& (2*4)<=(~PAGE_MASK & -(uint64_t)hatch) ) ) // space left on page
) {
hatch[0]= 0xd4000001; // svc #0
hatch[1]= 0xd65f03c0; // ret (jmp *lr)
}
else {
hatch = 0;
}
}
return hatch;
}
#if 1 /*{*/
static void
upx_bzero(char *p, size_t len)
{
if (len) do {
*p++= 0;
} while (--len);
}
#define bzero upx_bzero
#else
#define bzero(a,b) __builtin_memset(a,0,b)
#endif /*}*/
static void
auxv_up(Elf64_auxv_t *av, unsigned const type, uint64_t const value)
{
if (av)
for (;; ++av) {
if (av->a_type==type || (av->a_type==AT_IGNORE && type!=AT_NULL)) {
av->a_type = type;
av->a_un.a_val = value;
return;
}
}
}
// The PF_* and PROT_* bits are {1,2,4}; the conversion table fits in 32 bits.
#define REP8(x) \
((x)|((x)<<4)|((x)<<8)|((x)<<12)|((x)<<16)|((x)<<20)|((x)<<24)|((x)<<28))
#define EXP8(y) \
((1&(y)) ? 0xf0f0f0f0 : (2&(y)) ? 0xff00ff00 : (4&(y)) ? 0xffff0000 : 0)
#define PF_TO_PROT(pf) \
((PROT_READ|PROT_WRITE|PROT_EXEC) & ( \
( (REP8(PROT_EXEC ) & EXP8(PF_X)) \
|(REP8(PROT_READ ) & EXP8(PF_R)) \
|(REP8(PROT_WRITE) & EXP8(PF_W)) \
) >> ((pf & (PF_R|PF_W|PF_X))<<2) ))
// Find convex hull of PT_LOAD (the minimal interval which covers all PT_LOAD),
// and mmap that much, to be sure that a kernel using exec-shield-randomize
// won't place the first piece in a way that leaves no room for the rest.
static unsigned long // returns relocation constant
xfind_pages(unsigned mflags, Elf64_Phdr const *phdr, int phnum,
char **const p_brk
)
{
size_t lo= ~0, hi= 0, szlo= 0;
char *addr;
mflags += MAP_PRIVATE | MAP_ANONYMOUS; // '+' can optimize better than '|'
for (; --phnum>=0; ++phdr) if (PT_LOAD==phdr->p_type) {
if (phdr->p_vaddr < lo) {
lo = phdr->p_vaddr;
szlo = phdr->p_filesz;
}
if (hi < (phdr->p_memsz + phdr->p_vaddr)) {
hi = phdr->p_memsz + phdr->p_vaddr;
}
}
szlo += ~PAGE_MASK & lo; // page fragment on lo edge
lo -= ~PAGE_MASK & lo; // round down to page boundary
hi = PAGE_MASK & (hi - lo - PAGE_MASK -1); // page length
szlo = PAGE_MASK & (szlo - PAGE_MASK -1); // page length
addr = mmap((void *)lo, hi, PROT_NONE, mflags, -1, 0);
*p_brk = hi + addr; // the logical value of brk(0)
//mprotect(szlo + addr, hi - szlo, PROT_NONE); // no access, but keep the frames!
return (unsigned long)addr - lo;
}
static Elf64_Addr // entry address
do_xmap(
Elf64_Ehdr const *const ehdr,
Extent *const xi,
int const fdi,
Elf64_auxv_t *const av,
f_expand *const f_decompress,
f_unfilter *const f_unf,
Elf64_Addr *p_reloc
)
{
Elf64_Phdr const *phdr = (Elf64_Phdr const *) (ehdr->e_phoff +
(char const *)ehdr);
char *v_brk;
unsigned long const reloc = xfind_pages(
((ET_DYN!=ehdr->e_type) ? MAP_FIXED : 0), phdr, ehdr->e_phnum, &v_brk);
int j;
for (j=0; j < ehdr->e_phnum; ++phdr, ++j)
if (xi && PT_PHDR==phdr->p_type) {
auxv_up(av, AT_PHDR, phdr->p_vaddr + reloc);
} else
if (PT_LOAD==phdr->p_type) {
unsigned const prot = PF_TO_PROT(phdr->p_flags);
Extent xo;
size_t mlen = xo.size = phdr->p_filesz;
char *addr = xo.buf = reloc + (char *)phdr->p_vaddr;
char *haddr = phdr->p_memsz + addr;
size_t frag = (long)addr &~ PAGE_MASK;
mlen += frag;
addr -= frag;
if (addr != mmap(addr, mlen, prot | (xi ? PROT_WRITE : 0),
MAP_FIXED | MAP_PRIVATE | (xi ? MAP_ANONYMOUS : 0),
(xi ? -1 : fdi), phdr->p_offset - frag) ) {
err_exit(8);
}
if (xi) {
unpackExtent(xi, &xo, f_decompress, f_unf);
}
// Linux does not fixup the low end, so neither do we.
//if (PROT_WRITE & prot) {
// bzero(addr, frag); // fragment at lo end
//}
frag = (-mlen) &~ PAGE_MASK; // distance to next page boundary
if (PROT_WRITE & prot) { // note: read-only .bss not supported here
bzero(mlen+addr, frag); // fragment at hi end
}
if (xi) {
void *const hatch = make_hatch_arm64(phdr, reloc);
if (0!=hatch) {
auxv_up(av, AT_NULL, (uint64_t)hatch);
}
if (0!=mprotect(addr, mlen, prot)) {
err_exit(10);
ERR_LAB
}
}
addr += mlen + frag; /* page boundary on hi end */
if (addr < haddr) { // need pages for .bss
if (addr != mmap(addr, haddr - addr, prot,
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0 ) ) {
err_exit(9);
}
}
}
if (xi) { // 1st call (main); also have (0!=av) here
if (ET_DYN!=ehdr->e_type) {
// Needed only if compressed shell script invokes compressed shell.
// brk(v_brk); // SIGSEGV when is_big [unmaps ourself!]
}
}
if (0!=p_reloc) {
*p_reloc = reloc;
}
return ehdr->e_entry + reloc;
}
/*************************************************************************
// upx_main - called by our entry code
//
// This function is optimized for size.
**************************************************************************/
void *
upx_main( // returns entry address
/*x0*/ struct b_info const *const bi, // 1st block header
/*x1*/ size_t const sz_compressed, // total length
/*x2*/ Elf64_Ehdr *const ehdr, // temp char[sz_ehdr] for decompressing
/*x3*/ Elf64_auxv_t *const av,
/*x4*/ f_expand *const f_decompress,
/*x5*/ f_unfilter *const f_unf,
/*x6*/ Elf64_Addr *preloc // IN OUT; value result for ET_DYN
)
{
Elf64_Phdr const *phdr = (Elf64_Phdr const *)(1+ ehdr);
Elf64_Addr entry;
Extent xo, xi1, xi2;
xo.buf = (char *)ehdr;
xo.size = bi->sz_unc;
xi2.buf = CONST_CAST(char *, bi); xi2.size = sz_compressed;
xi1.buf = CONST_CAST(char *, bi); xi1.size = sz_compressed;
// ehdr = Uncompress Ehdr and Phdrs
unpackExtent(&xi2, &xo, f_decompress, 0); // never filtered?
// AT_PHDR.a_un.a_val is set again by do_xmap if PT_PHDR is present.
auxv_up(av, AT_PHDR , (unsigned long)(1+(Elf64_Ehdr *)phdr->p_vaddr));
auxv_up(av, AT_PHNUM , ehdr->e_phnum);
//auxv_up(av, AT_PHENT , ehdr->e_phentsize); /* this can never change */
//auxv_up(av, AT_PAGESZ, PAGE_SIZE); /* ld-linux.so.2 does not need this */
entry = do_xmap(ehdr, &xi1, 0, av, f_decompress, f_unf, preloc); // "rewind"
auxv_up(av, AT_ENTRY , entry);
{ // Map PT_INTERP program interpreter
int j;
for (j=0; j < ehdr->e_phnum; ++phdr, ++j) if (PT_INTERP==phdr->p_type) {
char const *const iname = *preloc + (char const *)phdr->p_vaddr;
int const fdi = open(iname, O_RDONLY, 0);
if (0 > fdi) {
err_exit(18);
}
if (MAX_ELF_HDR!=read(fdi, (void *)ehdr, MAX_ELF_HDR)) {
ERR_LAB
err_exit(19);
}
{
Elf64_Addr i_reloc = 0;
entry = do_xmap(ehdr, 0, fdi, 0, 0, 0, &i_reloc);
auxv_up(av, AT_BASE, i_reloc);
}
close(fdi);
}
}
return (void *)entry;
}
/* vim:set ts=4 sw=4 et: */

View File

@ -0,0 +1,400 @@
/* arm-linux.shlib-init.S -- Linux Elf shared library init & decompressor
*
* This file is part of the UPX executable compressor.
*
* Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
* Copyright (C) 1996-2017 Laszlo Molnar
* Copyright (C) 2000-2017 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>
*/
#include "arch/arm64/v8/macros.S"
sz_Elf64_Ehdr = 16 + 2*2 + 4 + 3*8 + 4 + 6*2
sz_Elf64_Phdr = 2*4 + 6*8
sz_b_info= 12
sz_unc= 0
sz_cpr= 4
b_method= 8
sz_l_info= 12
sz_p_info= 12
PROT_READ= 1
PROT_WRITE= 2
PROT_EXEC= 4
MAP_PRIVATE= 2
MAP_FIXED= 0x10
MAP_ANONYMOUS= 0x20
PAGE_SHIFT= 12
PAGE_MASK= (~0<<PAGE_SHIFT)
PAGE_SIZE= -PAGE_MASK
__NR_exit = 93
__NR_write = 64
__NR_mmap64 = 0xde // 222
__NR_munmap = 0xd7 // 215
__NR_mprotect = 0xe2 // 226
__ARM_NR_cacheflush = (1<<31) // FIXME
#define arg1 x0
#define arg2 x1
#define arg3 x2
#define arg4 x3
#define arg5 x4
#define edi w0
#define esi w1
#define edx w2
#define tmp w3
#define eax w4
#define ecx w5
#define rdi x0
#define rsi x1
#define rdx x2
#define rax x4
#define rcx x5
#define lr x30
#define fp x29
#define src x0
#define len w1
#define dst x2
#define dstw w2
#define tmp w3
#define tmpx x3
#define bits w4
#define off w5
section ELFMAINX
// .long offset(.) // detect relocation
// .long offset(user DT_INIT)
// .long offset(escape_hatch)
// .long offset({p_info; b_info; compressed data})
_start: .globl _start
brk #0 // for debugging
PUSH3(x29,x30,x0)
PUSH4(arg4,arg5,x6,x7)
PUSH3(arg1,arg2,arg3)
mov fp,sp
o_uinit= (3+4+2)*8 // pc
bl main // push &f_decompress
f_decompress:
#define LINUX_ARM_CACHEFLUSH 1
section NRV_HEAD
// empty
section NRV_TAIL
// empty
section NRV2E
#include "arch/arm64/v8/nrv2e_d32.S"
section NRV2D
#include "arch/arm64/v8/nrv2d_d32.S"
section NRV2B
#include "arch/arm64/v8/nrv2b_d32.S"
#include "arch/arm64/v8/lzma_d.S"
section ELFMAINY
end_decompress: .globl end_decompress
msg_SELinux:
mov w2,#L71 - L70 // length
adr x1,L70 // message text
mov w0,#2 // fd stderr
do_sys __NR_write
die:
mov w0,#127
do_sys __NR_exit
L70:
.asciz "PROT_EXEC|PROT_WRITE failed.\n"
L71:
/* IDENTSTR goes here */
section ELFMAINZ
.macro push reg
str \reg,[sp,#-4]!
.endm
.macro pop reg
ldr \reg,[sp],#4
.endm
#define lodsl ldr eax,[rsi],#4
#define lodslu lodsl
main:
// 1. allocate temporary pages
// 2. copy to temporary pages:
// fragment of page below dst; compressed src;
// decompress+unfilter; supervise
// 3. mmap destination pages for decompressed data
// 4. create escape hatch
// 5. jump to temporary pages
// 6. uncompress
// 7. unfilter
// 8. mprotect decompressed pages
// 9 setup args for unmap of temp pages
// 10. jump to escape hatch
// 11. unmap temporary pages
// 12. goto user DT_INIT
mov rdx,lr // &f_decompress
add rsi,rdx,# _start - f_decompress - 4*4
mov rcx,rsi
lodsl; sub rcx,rcx,rax; //str ecx,[fp,#o_reloc]
lodsl; add rax,rcx,rax; str eax,[fp,#o_uinit] // reloc DT_INIT for step 12
lodsl; add rax,rcx,rax; push rax // reloc &hatch for step 10
o_hatch= -1*4
lodsl; add edi,ecx,eax // &l_info; also destination for decompress
add esi,edi,#sz_l_info + sz_p_info // &b_info
sub sp,sp,#2*4 // param space: munmap temp pages step 9
p_unmap= -3*4
ldr eax,[rsi,#4]; add rsi,rsi,#3*4 // sz_cpr
add rsi,rsi,rax // skip unpack helper block
lodslu // eax=dstlen
lsl ecx,edi,# (32-PAGE_SHIFT)
lsr ecx,ecx,#2+(32-PAGE_SHIFT) // ecx= w_fragment
add eax,eax,ecx,lsl #2; push eax // params: mprotect restored pages step 8
sub edi,edi,ecx,lsl #2; push edi
p_mprot= -5*8
sub eax,eax,ecx,lsl #2 // dstlen
add edi,edi,ecx,lsl #2 // dst
push ecx // w_fragment
o_wfrag= -6*8
bl L610
f_unfilter: // (char *ptr, uint len, uint cto, uint fid)
ptr .req x0
fid .req w3
#ifndef FILTER_ID /*{*/
#define FILTER_ID 0x50 /* little-endian */
#endif /*}*/
and fid,fid,#0xff
cmp fid,#FILTER_ID // last use of fid
bne unfret
lsr x1,x1,#2 // word count
cbz x1,unfret
top_unf:
sub x1,x1,#1
ldr w2,[ptr,x1,lsl #2]
ubfx w3,w2,#26,#5
cmp w3,#5; bne tst_unf // not unconditional branch
sub w2,w2,w1 // word displ; hi 0b.00101 preserves bit 31
ubfm w2,w3,#26,#5
str w2,[ptr,x1,lsl #2]
tst_unf:
cbnz x1,top_unf
unfret:
ret
L610:
push lr
o_unflt= -7*8
ldrb tmp,[rsi,#b_method-4+1]; push tmpx // ftid
ldrb tmp,[rsi,#b_method-4+2]; push tmpx // cto8
push rax // dstlen also for unfilter step 7
push rdi // dst param for unfilter step 7
p_unflt= -11*8
lodslu; mov ecx,eax // ecx= srclen
lodslu; push rax // method,filter,cto,junk
push rdx // &decompress
o_uncpr= -13*8
add tmpx,fp,#p_unflt+1*4; push tmpx // &dstlen
push rdi // dst
push rcx // srclen
push rsi // src; arglist ready for decompress step 6
p_uncpr= -17*8
and tmpx,rsi,#3 // length of prefix alignment
add rcx,rcx,#3 // allow suffix alignment
add rcx,rcx,tmpx // prefix increases byte length
ldr tmp,[fp,#o_wfrag]; add rdx,tmpx,rcx,lsr #2 // w_srclen + w_frag
ldr tmp,[fp,#o_uncpr]; bl wlen_subr
ldr tmp,[fp,#o_unflt]; bl wlen_subr
bl L220
supervise:
// Allocate pages for result of decompressing.
// These replace the compressed source and the following hole.
mov arg5,#-1 // cater to *BSD for fd of MAP_ANON
mov arg4,#MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED
mov arg3,#PROT_READ|PROT_WRITE
ldr arg2,[fp,#p_mprot+4] // dstlen
ldr arg1,[fp,#p_mprot ] // dst
mov x6,arg1 // required result
do_sys __NR_mmap64; cmp x0,x6; beq 0f; brk #0; 0:
// Restore fragment of page below dst
ldr ecx,[fp,#o_wfrag]
//mov edi,r0 // NOP: edi==r0
ldr rsi,[fp,#p_unmap]
bl movsl
POP4(arg1,arg2,arg3,arg4)
POP1(rax)
blr rax // decompress
add sp,sp,#8 // toss arg5
bl L620
//hatch:
do_sys __NR_munmap
POP3(arg1,arg2,arg3)
POP4(rax,rcx,x6,x7)
POP3(fp,lr,x1)
br x1
L620: // Implant escape hatch at end of .text
ldr eax,[fp,#o_hatch]
ldp arg1,arg2,[lr]
stp arg1,arg2,[rax]
//p_unflt
POP4(arg1,arg2,arg3,arg4)
POP2(rax,x12) // x12= w_fragment [toss]
cbz arg4,0f // 0==ftid ==> no filter
blr rax // unfilter
0:
//p_mprot
ldr arg1,[sp,#0*4] // lo(dst)
ldr arg2,[sp,#1*4] // len
mov arg3,#0
add arg2,arg2,arg1 // hi(dst)
add arg2,arg2,#2*4 // len(hatch)
do_sys __ARM_NR_cacheflush
POP2(arg1,arg2)
mov arg3,#PROT_READ|PROT_EXEC
do_sys __NR_mprotect
//p_unmap
#if defined(ARMEL_EABI4) //{
// first part of do_sys7t __NR_munmap
.if __NR_munmap <= 0xff
mov r7,#__NR_munmap
.else
mov r7,#__NR_munmap>>16
lsl r7,r7,#16
add r7,r7,#__NR_munmap - ((__NR_munmap>>16)<<16)
.endif
#endif //}
POP3(arg1,arg2,lr)
br lr // togo hatch
movsl_subr:
ldr ecx,[rsi,#-4] // 'bl <over>' instruction word
bic ecx,ecx,#0xff<<24 // displacment field
add ecx,ecx,#1 // displ omits one word
// FALL THROUGH to the part of 'movsl' that trims to a multiple of 8 words.
// 7/8 of the time this is faster; 1/8 of the time it's slower.
9:
ldr tmp,[rsi],#4; sub ecx,ecx,#1
str tmp,[rdi],#4
movsl: // rdi= 4-byte aligned dst; esi= 4-byte aligned src; ecx= word count
tst ecx,#7; bne 9b // work ecx down to multiple of 8
lsr ecx,ecx,#3; cbz ecx,9f
7:
ldp x2,x3,[rsi],#2*8; subs ecx,ecx,#1
stp x2,x3,[rdi],#2*8; cbnz ecx,7b
9:
ret
L220:
push lr // &supervise
o_super= -18*8
mov tmpx,lr; bl wlen_subr // wlen_supervise
lsl arg2,rdx,#2 // convert to bytes
// Allocate pages to hold temporary copy.
mov arg5,#-1 // cater to *BSD for fd of MAP_ANON
mov arg4,#MAP_PRIVATE|MAP_ANONYMOUS
mov arg3,#PROT_READ|PROT_WRITE|PROT_EXEC
str arg2,[fp,#p_unmap+1*8] // length to unmap
mov arg1,#0 // any addr
do_sys __NR_mmap64; cmn x0,#4096; bcc 0f; brk #0; 0:
str x0,[fp,#p_unmap+0*8] // address to unmap
ldr esi,[fp,#p_mprot]
//mov edi,r0 // edi= dst NOP: edi==r0
ldr ecx,[fp,#o_wfrag] // w_fragment
bl movsl // copy the fragment
ldr esi,[fp,#p_uncpr+0*4] // src
ldr ecx,[fp,#p_uncpr+1*4] // len
and tmp,esi,#3 // length of prefix alignment
sub esi,esi,tmp // down to word aligned
add ecx,ecx,tmp // prefix increases byte length
add tmp,tmp,edi // skip prefix at destination
str tmp,[fp,#p_uncpr+0*4] // dst
add ecx,ecx,#7 // round up to full words
lsr ecx,ecx,#3
bl movsl // copy all aligned words that contain compressed data
mov rdx,rdi // lo(dst) of copied code
ldr rsi,[fp,#o_uncpr]
str rdi,[fp,#o_uncpr]
bl movsl_subr // copy decompressor
ldr rsi,[fp,#o_unflt]
str rdi,[fp,#o_unflt]
bl movsl_subr // copy unfilter
pop rsi // &supervise
push rdi // &copied
bl movsl_subr // copy supervisor
mov arg2,rdi // hi(dst) of copied code
mov arg1,rdx // lo(dst) of copied code
mov arg3,#0
do_sys __ARM_NR_cacheflush
pop lr; br lr // goto copied supervisor
wlen_subr: // edx+= nwords of inline subr at *tmp
ldr tmp,[tmpx,#-4] // 'bl <over>' instruction word
bic tmp,tmp,#0xff<<24 // displacment field
add tmp,tmp,#1 // displ omits one word
add rdx,rdx,tmpx
ret
/*__XTHEENDX__*/
/* vim:set ts=8 sw=8 et: */

View File

@ -96,7 +96,7 @@ struct timespec {
#elif defined(__amd64__)
#define PAGE_MASK (~0ul<<12) // discards the offset, keeps the page
#define PAGE_SIZE ( 1ul<<12)
#elif defined(__i386__) || defined(__powerpc__) || defined(__arm__)
#elif defined(__i386__) || defined(__powerpc__) || defined(__arm__) || defined(__AARCH64EL__)
#define PAGE_MASK (~0ul<<12) // discards the offset, keeps the page
#define PAGE_SIZE ( 1ul<<12)
#endif

View File

@ -4,13 +4,18 @@ Sections:
Idx Name Size VMA LMA File off Algn Flags
0 MACHMAINX 00000044 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, RELOC, READONLY
1 NRV_HEAD 00000000 0000000000000000 0000000000000000 00000084 2**0 CONTENTS, READONLY
2 NRV2E 0000013c 0000000000000000 0000000000000000 00000084 2**0 CONTENTS, READONLY
3 NRV2D 00000130 0000000000000000 0000000000000000 000001c0 2**0 CONTENTS, READONLY
4 NRV2B 00000108 0000000000000000 0000000000000000 000002f0 2**0 CONTENTS, READONLY
5 NRV_TAIL 000004b4 0000000000000000 0000000000000000 000003f8 2**0 CONTENTS, READONLY
6 MACHMAINY 00000000 0000000000000000 0000000000000000 000008ac 2**0 CONTENTS, READONLY
7 MACHMAINZ 00000058 0000000000000000 0000000000000000 000008ac 2**0 CONTENTS, READONLY
2 NRV2E 00000128 0000000000000000 0000000000000000 00000084 2**0 CONTENTS, READONLY
3 NRV2D 0000011c 0000000000000000 0000000000000000 000001ac 2**0 CONTENTS, READONLY
4 NRV2B 000000f0 0000000000000000 0000000000000000 000002c8 2**0 CONTENTS, READONLY
5 NRV_TAIL 00000000 0000000000000000 0000000000000000 000003b8 2**0 CONTENTS, READONLY
6 LZMA_ELF00 000000d0 0000000000000000 0000000000000000 000003b8 2**0 CONTENTS, RELOC, READONLY
7 LZMA_DEC20 00000930 0000000000000000 0000000000000000 00000488 2**0 CONTENTS, READONLY
8 LZMA_DEC10 0000049c 0000000000000000 0000000000000000 00000db8 2**0 CONTENTS, READONLY
9 LZMA_DEC30 00000000 0000000000000000 0000000000000000 00001254 2**0 CONTENTS, READONLY
10 MACHMAINY 00000000 0000000000000000 0000000000000000 00001254 2**0 CONTENTS, READONLY
11 MACHMAINZ 00000058 0000000000000000 0000000000000000 00001254 2**0 CONTENTS, READONLY
SYMBOL TABLE:
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
0000000000000000 l d MACHMAINZ 0000000000000000 MACHMAINZ
0000000000000000 l d MACHMAINX 0000000000000000 MACHMAINX
0000000000000000 l d NRV_HEAD 0000000000000000 NRV_HEAD
@ -18,14 +23,21 @@ SYMBOL TABLE:
0000000000000000 l d NRV2D 0000000000000000 NRV2D
0000000000000000 l d NRV2B 0000000000000000 NRV2B
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
0000000000000000 l d LZMA_ELF00 0000000000000000 LZMA_ELF00
0000000000000000 l d LZMA_DEC20 0000000000000000 LZMA_DEC20
0000000000000000 l d LZMA_DEC10 0000000000000000 LZMA_DEC10
0000000000000000 l d MACHMAINY 0000000000000000 MACHMAINY
0000000000000000 g MACHMAINX 0000000000000000 _start
0000000000000000 g F NRV2E 000000000000013c ucl_nrv2e_decompress_8
0000000000000000 g F NRV2D 0000000000000130 ucl_nrv2d_decompress_8
0000000000000000 g F NRV2B 0000000000000108 ucl_nrv2b_decompress_8
0000000000000000 g NRV_TAIL 0000000000000000 LzmaDecode
0000000000000000 g F NRV2E 0000000000000128 ucl_nrv2e_decompress_32
0000000000000000 g F NRV2D 000000000000011c ucl_nrv2d_decompress_32
0000000000000000 g F NRV2B 00000000000000f0 ucl_nrv2b_decompress_32
0000000000000000 g LZMA_DEC10 0000000000000000 LzmaDecode
0000000000000000 g MACHMAINY 0000000000000000 end_decompress
RELOCATION RECORDS FOR [MACHMAINX]:
OFFSET TYPE VALUE
0000000000000040 R_AARCH64_CALL26 MACHMAINZ+0x0000000000000050
RELOCATION RECORDS FOR [LZMA_ELF00]:
OFFSET TYPE VALUE
0000000000000004 R_AARCH64_CONDBR19 LZMA_DEC30

View File

@ -67,35 +67,35 @@ LOAD tmp/arm64-darwin.macho-main.o
*(.iplt)
.iplt 0x0000000000400080 0x0 tmp/arm64-darwin.macho-fold.o
.text 0x0000000000400078 0x6a8
.text 0x0000000000400078 0x680
*(.text.unlikely .text.*_unlikely .text.unlikely.*)
*(.text.exit .text.exit.*)
*(.text.startup .text.startup.*)
*(.text.hot .text.hot.*)
*(.text .stub .text.* .gnu.linkonce.t.*)
.text 0x0000000000400078 0x188 tmp/arm64-darwin.macho-fold.o
.text 0x0000000000400078 0x160 tmp/arm64-darwin.macho-fold.o
0x0000000000400078 _start
0x0000000000400134 spin
0x0000000000400138 exit
0x0000000000400144 read
0x0000000000400154 write
0x0000000000400164 open
0x0000000000400174 close
0x0000000000400184 brk
0x0000000000400194 munmap
0x00000000004001a4 mprotect
0x00000000004001b4 mmap
0x00000000004001c4 pread
0x00000000004001d4 bswap
.text 0x0000000000400200 0x520 tmp/arm64-darwin.macho-main.o
0x0000000000400578 upx_main
0x0000000000400140 read
0x000000000040014c write
0x0000000000400158 open
0x0000000000400164 close
0x0000000000400170 brk
0x000000000040017c munmap
0x0000000000400188 mprotect
0x0000000000400194 mmap
0x00000000004001a0 pread
0x00000000004001ac bswap
.text 0x00000000004001d8 0x520 tmp/arm64-darwin.macho-main.o
0x0000000000400550 upx_main
*(.gnu.warning)
.fini
*(SORT(.fini))
0x0000000000400720 PROVIDE (__etext, .)
0x0000000000400720 PROVIDE (_etext, .)
0x0000000000400720 PROVIDE (etext, .)
0x00000000004006f8 PROVIDE (__etext, .)
0x00000000004006f8 PROVIDE (_etext, .)
0x00000000004006f8 PROVIDE (etext, .)
.rodata
*(.rodata .rodata.* .gnu.linkonce.r.*)
@ -106,9 +106,9 @@ LOAD tmp/arm64-darwin.macho-main.o
.eh_frame_hdr
*(.eh_frame_hdr)
.eh_frame 0x0000000000400720 0x100
.eh_frame 0x00000000004006f8 0x100
*(.eh_frame)
.eh_frame 0x0000000000400720 0x100 tmp/arm64-darwin.macho-main.o
.eh_frame 0x00000000004006f8 0x100 tmp/arm64-darwin.macho-main.o
0xf8 (size before relaxing)
.gcc_except_table
@ -116,8 +116,8 @@ LOAD tmp/arm64-darwin.macho-main.o
.exception_ranges
*(.exception_ranges .exception_ranges*)
0x0000000000400820 . = (ALIGN (0x10000) - ((0x10000 - .) & 0xffff))
0x0000000000410820 . = DATA_SEGMENT_ALIGN (0x10000, 0x1000)
0x00000000004007f8 . = (ALIGN (0x10000) - ((0x10000 - .) & 0xffff))
0x00000000004107f8 . = DATA_SEGMENT_ALIGN (0x10000, 0x1000)
.eh_frame
*(.eh_frame)
@ -135,22 +135,22 @@ LOAD tmp/arm64-darwin.macho-main.o
*(.tbss .tbss.* .gnu.linkonce.tb.*)
*(.tcommon)
.preinit_array 0x0000000000410820 0x0
0x0000000000410820 PROVIDE (__preinit_array_start, .)
.preinit_array 0x00000000004107f8 0x0
0x00000000004107f8 PROVIDE (__preinit_array_start, .)
*(.preinit_array)
0x0000000000410820 PROVIDE (__preinit_array_end, .)
0x00000000004107f8 PROVIDE (__preinit_array_end, .)
.init_array 0x0000000000410820 0x0
0x0000000000410820 PROVIDE (__init_array_start, .)
.init_array 0x00000000004107f8 0x0
0x00000000004107f8 PROVIDE (__init_array_start, .)
*(SORT(.init_array.*))
*(.init_array)
0x0000000000410820 PROVIDE (__init_array_end, .)
0x00000000004107f8 PROVIDE (__init_array_end, .)
.fini_array 0x0000000000410820 0x0
0x0000000000410820 PROVIDE (__fini_array_start, .)
.fini_array 0x00000000004107f8 0x0
0x00000000004107f8 PROVIDE (__fini_array_start, .)
*(SORT(.fini_array.*))
*(.fini_array)
0x0000000000410820 PROVIDE (__fini_array_end, .)
0x00000000004107f8 PROVIDE (__fini_array_end, .)
.ctors
*crtbegin.o(.ctors)
@ -179,43 +179,43 @@ LOAD tmp/arm64-darwin.macho-main.o
.got
*(.got)
*(.igot)
0x0000000000410820 . = DATA_SEGMENT_RELRO_END (., 0x18)
0x00000000004107f8 . = DATA_SEGMENT_RELRO_END (., 0x18)
.got.plt 0x0000000000410820 0x0
.got.plt 0x00000000004107f8 0x0
*(.got.plt)
*(.igot.plt)
.igot.plt 0x0000000000410820 0x0 tmp/arm64-darwin.macho-fold.o
.igot.plt 0x00000000004107f8 0x0 tmp/arm64-darwin.macho-fold.o
.data 0x0000000000410820 0x0
0x0000000000410820 PROVIDE (__data_start, .)
.data 0x00000000004107f8 0x0
0x00000000004107f8 PROVIDE (__data_start, .)
*(.data .data.* .gnu.linkonce.d.*)
.data 0x0000000000410820 0x0 tmp/arm64-darwin.macho-fold.o
.data 0x0000000000410820 0x0 tmp/arm64-darwin.macho-main.o
.data 0x00000000004107f8 0x0 tmp/arm64-darwin.macho-fold.o
.data 0x00000000004107f8 0x0 tmp/arm64-darwin.macho-main.o
.data1
*(.data1)
0x0000000000410820 _edata = .
0x0000000000410820 PROVIDE (edata, .)
0x0000000000410820 . = .
0x0000000000410820 __bss_start = .
0x0000000000410820 __bss_start__ = .
0x00000000004107f8 _edata = .
0x00000000004107f8 PROVIDE (edata, .)
0x00000000004107f8 . = .
0x00000000004107f8 __bss_start = .
0x00000000004107f8 __bss_start__ = .
.bss 0x0000000000410820 0x0
.bss 0x00000000004107f8 0x0
*(.dynbss)
*(.bss .bss.* .gnu.linkonce.b.*)
.bss 0x0000000000410820 0x0 tmp/arm64-darwin.macho-fold.o
.bss 0x0000000000410820 0x0 tmp/arm64-darwin.macho-main.o
.bss 0x00000000004107f8 0x0 tmp/arm64-darwin.macho-fold.o
.bss 0x00000000004107f8 0x0 tmp/arm64-darwin.macho-main.o
*(COMMON)
0x0000000000410820 . = ALIGN ((. != 0x0)?0x8:0x1)
0x0000000000410820 _bss_end__ = .
0x0000000000410820 __bss_end__ = .
0x0000000000410820 . = ALIGN (0x8)
0x0000000000410820 . = SEGMENT_START ("ldata-segment", .)
0x0000000000410820 . = ALIGN (0x8)
0x0000000000410820 __end__ = .
0x0000000000410820 _end = .
0x0000000000410820 PROVIDE (end, .)
0x0000000000410820 . = DATA_SEGMENT_END (.)
0x00000000004107f8 . = ALIGN ((. != 0x0)?0x8:0x1)
0x00000000004107f8 _bss_end__ = .
0x00000000004107f8 __bss_end__ = .
0x00000000004107f8 . = ALIGN (0x8)
0x00000000004107f8 . = SEGMENT_START ("ldata-segment", .)
0x00000000004107f8 . = ALIGN (0x8)
0x00000000004107f8 __end__ = .
0x00000000004107f8 _end = .
0x00000000004107f8 PROVIDE (end, .)
0x00000000004107f8 . = DATA_SEGMENT_END (.)
.stab
*(.stab)

View File

@ -0,0 +1,61 @@
file format elf64-littleaarch64
Sections:
Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINX 0000003c 0000000000000000 0000000000000000 00000040 2**2 CONTENTS, RELOC, READONLY
1 LUNMP000 00000000 0000000000000000 0000000000000000 0000007c 2**0 CONTENTS, READONLY
2 LUNMP001 00000000 0000000000000000 0000000000000000 0000007c 2**0 CONTENTS, READONLY
3 ELFMAINXu 000000a0 0000000000000000 0000000000000000 0000007c 2**2 CONTENTS, RELOC, READONLY
4 NRV_HEAD 00000000 0000000000000000 0000000000000000 0000011c 2**0 CONTENTS, READONLY
5 NRV_TAIL 00000000 0000000000000000 0000000000000000 0000011c 2**0 CONTENTS, READONLY
6 NRV2E 00000128 0000000000000000 0000000000000000 0000011c 2**2 CONTENTS, READONLY
7 NRV2D 0000011c 0000000000000000 0000000000000000 00000244 2**2 CONTENTS, READONLY
8 NRV2B 000000f0 0000000000000000 0000000000000000 00000360 2**2 CONTENTS, READONLY
9 LZMA_ELF00 000000d0 0000000000000000 0000000000000000 00000450 2**2 CONTENTS, RELOC, READONLY
10 LZMA_DEC20 00000930 0000000000000000 0000000000000000 00000520 2**0 CONTENTS, READONLY
11 LZMA_DEC10 0000049c 0000000000000000 0000000000000000 00000e50 2**2 CONTENTS, READONLY
12 LZMA_DEC30 00000000 0000000000000000 0000000000000000 000012ec 2**0 CONTENTS, READONLY
13 ELFMAINY 0000003e 0000000000000000 0000000000000000 000012ec 2**2 CONTENTS, READONLY
14 ELFMAINZ 00000000 0000000000000000 0000000000000000 0000132a 2**0 CONTENTS, READONLY
SYMBOL TABLE:
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
0000000000000000 l d ELFMAINY 0000000000000000 ELFMAINY
0000000000000000 l d ELFMAINX 0000000000000000 ELFMAINX
0000000000000000 l d LUNMP000 0000000000000000 LUNMP000
0000000000000000 l d LUNMP001 0000000000000000 LUNMP001
0000000000000000 l d ELFMAINXu 0000000000000000 ELFMAINXu
0000000000000000 l d NRV_HEAD 0000000000000000 NRV_HEAD
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
0000000000000000 l d NRV2E 0000000000000000 NRV2E
0000000000000000 l d NRV2D 0000000000000000 NRV2D
0000000000000000 l d NRV2B 0000000000000000 NRV2B
0000000000000000 l d LZMA_ELF00 0000000000000000 LZMA_ELF00
0000000000000000 l d LZMA_DEC20 0000000000000000 LZMA_DEC20
0000000000000000 l d LZMA_DEC10 0000000000000000 LZMA_DEC10
0000000000000000 l d ELFMAINZ 0000000000000000 ELFMAINZ
0000000000000000 *UND* 0000000000000000 LENF
0000000000000000 *UND* 0000000000000000 CPR0
0000000000000000 *UND* 0000000000000000 MFLG
0000000000000000 *UND* 0000000000000000 ADRM
0000000000000014 g ELFMAINX 0000000000000000 _start
0000000000000000 g F NRV2E 0000000000000128 ucl_nrv2e_decompress_32
0000000000000000 g F NRV2D 000000000000011c ucl_nrv2d_decompress_32
0000000000000000 g F NRV2B 00000000000000f0 ucl_nrv2b_decompress_32
0000000000000000 g LZMA_DEC10 0000000000000000 LzmaDecode
0000000000000000 g ELFMAINY 0000000000000000 end_decompress
0000000000000000 g ELFMAINZ 0000000000000000 cpr0
RELOCATION RECORDS FOR [ELFMAINX]:
OFFSET TYPE VALUE
0000000000000000 R_AARCH64_ABS32 LENF
0000000000000004 R_AARCH64_ABS32 CPR0
0000000000000008 R_AARCH64_ABS32 MFLG
000000000000000c R_AARCH64_ABS64 ADRM
RELOCATION RECORDS FOR [ELFMAINXu]:
OFFSET TYPE VALUE
0000000000000024 R_AARCH64_CONDBR19 ELFMAINY
RELOCATION RECORDS FOR [LZMA_ELF00]:
OFFSET TYPE VALUE
0000000000000004 R_AARCH64_CONDBR19 LZMA_DEC30

View File

@ -0,0 +1,51 @@
Memory Configuration
Name Origin Length Attributes
*default* 0x0000000000000000 0xffffffffffffffff
Linker script and memory map
0x00000000001000bc . = ((0x100000 + SIZEOF_HEADERS) + 0xc)
.text 0x00000000001000bc 0x878
*(.text)
.text 0x00000000001000bc 0x258 tmp/arm64-linux.elf-fold.o
0x000000000010022c my_bkpt
0x0000000000100234 exit
0x000000000010023c read
0x0000000000100248 write
0x0000000000100254 close
0x0000000000100260 getpid
0x000000000010026c brk
0x0000000000100278 munmap
0x0000000000100284 mprotect
0x0000000000100290 mmap_privanon
0x00000000001002a0 mmap
0x00000000001002ac unlink
0x00000000001002b8 open
0x00000000001002d4 readlink
0x0000000000100300 __clear_cache
.text 0x0000000000100314 0x620 tmp/arm64-linux.elf-main.o
0x00000000001007c4 upx_main
*(.data)
.data 0x0000000000100934 0x0 tmp/arm64-linux.elf-fold.o
.data 0x0000000000100934 0x0 tmp/arm64-linux.elf-main.o
.iplt 0x0000000000100934 0x0
.iplt 0x0000000000100934 0x0 tmp/arm64-linux.elf-fold.o
.rela.dyn 0x0000000000100938 0x0
.rela.iplt 0x0000000000100938 0x0 tmp/arm64-linux.elf-fold.o
.data
LOAD tmp/arm64-linux.elf-fold.o
LOAD tmp/arm64-linux.elf-main.o
OUTPUT(tmp/arm64-linux.elf-fold.bin elf64-littleaarch64)
.igot.plt 0x0000000000100938 0x0
.igot.plt 0x0000000000100938 0x0 tmp/arm64-linux.elf-fold.o
.bss 0x0000000000100934 0x0
.bss 0x0000000000100934 0x0 tmp/arm64-linux.elf-fold.o
.bss 0x0000000000100934 0x0 tmp/arm64-linux.elf-main.o

View File

@ -0,0 +1,43 @@
file format elf64-littleaarch64
Sections:
Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINX 00000024 0000000000000000 0000000000000000 00000040 2**2 CONTENTS, RELOC, READONLY
1 NRV_HEAD 00000000 0000000000000000 0000000000000000 00000064 2**0 CONTENTS, READONLY
2 NRV_TAIL 00000000 0000000000000000 0000000000000000 00000064 2**0 CONTENTS, READONLY
3 NRV2E 00000128 0000000000000000 0000000000000000 00000064 2**2 CONTENTS, READONLY
4 NRV2D 0000011c 0000000000000000 0000000000000000 0000018c 2**2 CONTENTS, READONLY
5 NRV2B 000000f0 0000000000000000 0000000000000000 000002a8 2**2 CONTENTS, READONLY
6 LZMA_ELF00 000000d0 0000000000000000 0000000000000000 00000398 2**2 CONTENTS, RELOC, READONLY
7 LZMA_DEC20 00000930 0000000000000000 0000000000000000 00000468 2**0 CONTENTS, READONLY
8 LZMA_DEC10 0000049c 0000000000000000 0000000000000000 00000d98 2**2 CONTENTS, READONLY
9 LZMA_DEC30 00000000 0000000000000000 0000000000000000 00001234 2**0 CONTENTS, READONLY
10 ELFMAINY 0000003e 0000000000000000 0000000000000000 00001234 2**2 CONTENTS, READONLY
11 ELFMAINZ 000002ec 0000000000000000 0000000000000000 00001274 2**2 CONTENTS, READONLY
SYMBOL TABLE:
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
0000000000000000 l d ELFMAINZ 0000000000000000 ELFMAINZ
0000000000000000 l d ELFMAINX 0000000000000000 ELFMAINX
0000000000000000 l d NRV_HEAD 0000000000000000 NRV_HEAD
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
0000000000000000 l d NRV2E 0000000000000000 NRV2E
0000000000000000 l d NRV2D 0000000000000000 NRV2D
0000000000000000 l d NRV2B 0000000000000000 NRV2B
0000000000000000 l d LZMA_ELF00 0000000000000000 LZMA_ELF00
0000000000000000 l d LZMA_DEC20 0000000000000000 LZMA_DEC20
0000000000000000 l d LZMA_DEC10 0000000000000000 LZMA_DEC10
0000000000000000 l d ELFMAINY 0000000000000000 ELFMAINY
0000000000000000 g ELFMAINX 0000000000000000 _start
0000000000000000 g F NRV2E 0000000000000128 ucl_nrv2e_decompress_32
0000000000000000 g F NRV2D 000000000000011c ucl_nrv2d_decompress_32
0000000000000000 g F NRV2B 00000000000000f0 ucl_nrv2b_decompress_32
0000000000000000 g LZMA_DEC10 0000000000000000 LzmaDecode
0000000000000000 g ELFMAINY 0000000000000000 end_decompress
RELOCATION RECORDS FOR [ELFMAINX]:
OFFSET TYPE VALUE
0000000000000020 R_AARCH64_CALL26 ELFMAINZ
RELOCATION RECORDS FOR [LZMA_ELF00]:
OFFSET TYPE VALUE
0000000000000004 R_AARCH64_CONDBR19 LZMA_DEC30