diff options
| author | cvs2svn <cvs2svn@FreeBSD.org> | 2000-06-26 08:06:25 +0000 |
|---|---|---|
| committer | cvs2svn <cvs2svn@FreeBSD.org> | 2000-06-26 08:06:25 +0000 |
| commit | d0c4b1ba8742485cd62ea25563b54515241584b5 (patch) | |
| tree | 29b7a43ff3314febb2901cada3e71d1eed0e17ee | |
| parent | 6038fd0dfe694cb1f726cbfc300b803b0e6d7cfc (diff) | |
Notes
47 files changed, 28509 insertions, 0 deletions
diff --git a/contrib/binutils/bfd/ppcboot.c b/contrib/binutils/bfd/ppcboot.c new file mode 100644 index 000000000000..9441848b3d37 --- /dev/null +++ b/contrib/binutils/bfd/ppcboot.c @@ -0,0 +1,541 @@ +/* BFD back-end for PPCbug boot records. + Copyright 1996, 1997, 1998, 1999 Free Software Foundation, Inc. + Written by Michael Meissner, Cygnus Support, <meissner@cygnus.com> + +This file is part of BFD, the Binary File Descriptor library. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +/* This is a BFD backend which may be used to write PowerPCBug boot objects. + It may only be used for output, not input. The intention is that this may + be used as an output format for objcopy in order to generate raw binary + data. + + This is very simple. The only complication is that the real data + will start at some address X, and in some cases we will not want to + include X zeroes just to get to that point. Since the start + address is not meaningful for this object file format, we use it + instead to indicate the number of zeroes to skip at the start of + the file. objcopy cooperates by specially setting the start + address to zero by default. */ + +#include <ctype.h> + +#include "bfd.h" +#include "sysdep.h" +#include "libbfd.h" + +/* PPCbug location structure */ +typedef struct ppcboot_location { + bfd_byte ind; + bfd_byte head; + bfd_byte sector; + bfd_byte cylinder; +} ppcboot_location_t; + +/* PPCbug partition table layout */ +typedef struct ppcboot_partition { + ppcboot_location_t partition_begin; /* partition begin */ + ppcboot_location_t partition_end; /* partition end */ + bfd_byte sector_begin[4]; /* 32-bit start RBA (zero-based), little endian */ + bfd_byte sector_length[4]; /* 32-bit RBA count (one-based), little endian */ +} ppcboot_partition_t; + +/* PPCbug boot layout. */ +typedef struct ppcboot_hdr { + bfd_byte pc_compatibility[446]; /* x86 instruction field */ + ppcboot_partition_t partition[4]; /* partition information */ + bfd_byte signature[2]; /* 0x55 and 0xaa */ + bfd_byte entry_offset[4]; /* entry point offset, little endian */ + bfd_byte length[4]; /* load image length, little endian */ + bfd_byte flags; /* flag field */ + bfd_byte os_id; /* OS_ID */ + char partition_name[32]; /* partition name */ + bfd_byte reserved1[470]; /* reserved */ +} +#ifdef __GNUC__ + __attribute__ ((packed)) +#endif +ppcboot_hdr_t; + +/* Signature bytes for last 2 bytes of the 512 byte record */ +#define SIGNATURE0 0x55 +#define SIGNATURE1 0xaa + +/* PowerPC boot type */ +#define PPC_IND 0x41 + +/* Information needed for ppcboot header */ +typedef struct ppcboot_data { + ppcboot_hdr_t header; /* raw header */ + asection *sec; /* single section */ +} ppcboot_data_t; + +/* Any bfd we create by reading a ppcboot file has three symbols: + a start symbol, an end symbol, and an absolute length symbol. */ +#define PPCBOOT_SYMS 3 + +static boolean ppcboot_mkobject PARAMS ((bfd *)); +static const bfd_target *ppcboot_object_p PARAMS ((bfd *)); +static boolean ppcboot_set_arch_mach + PARAMS ((bfd *, enum bfd_architecture, unsigned long)); +static boolean ppcboot_get_section_contents + PARAMS ((bfd *, asection *, PTR, file_ptr, bfd_size_type)); +static long ppcboot_get_symtab_upper_bound PARAMS ((bfd *)); +static char *mangle_name PARAMS ((bfd *, char *)); +static long ppcboot_get_symtab PARAMS ((bfd *, asymbol **)); +static asymbol *ppcboot_make_empty_symbol PARAMS ((bfd *)); +static void ppcboot_get_symbol_info PARAMS ((bfd *, asymbol *, symbol_info *)); +static boolean ppcboot_set_section_contents + PARAMS ((bfd *, asection *, PTR, file_ptr, bfd_size_type)); +static int ppcboot_sizeof_headers PARAMS ((bfd *, boolean)); +static boolean ppcboot_bfd_print_private_bfd_data PARAMS ((bfd *, PTR)); + +#define ppcboot_set_tdata(abfd, ptr) ((abfd)->tdata.any = (PTR) (ptr)) +#define ppcboot_get_tdata(abfd) ((ppcboot_data_t *) ((abfd)->tdata.any)) + +/* Create a ppcboot object. Invoked via bfd_set_format. */ + +static boolean +ppcboot_mkobject (abfd) + bfd *abfd; +{ + if (!ppcboot_get_tdata (abfd)) + ppcboot_set_tdata (abfd, bfd_zalloc (abfd, sizeof (ppcboot_data_t))); + + return true; +} + + +/* Set the architecture to PowerPC */ +static boolean +ppcboot_set_arch_mach (abfd, arch, machine) + bfd *abfd; + enum bfd_architecture arch; + unsigned long machine; +{ + if (arch == bfd_arch_unknown) + arch = bfd_arch_powerpc; + + else if (arch != bfd_arch_powerpc) + return false; + + return bfd_default_set_arch_mach (abfd, arch, machine); +} + + +/* Any file may be considered to be a ppcboot file, provided the target + was not defaulted. That is, it must be explicitly specified as + being ppcboot. */ + +static const bfd_target * +ppcboot_object_p (abfd) + bfd *abfd; +{ + struct stat statbuf; + asection *sec; + ppcboot_hdr_t hdr; + size_t i; + ppcboot_data_t *tdata; + + BFD_ASSERT (sizeof (ppcboot_hdr_t) == 1024); + + if (abfd->target_defaulted) + { + bfd_set_error (bfd_error_wrong_format); + return NULL; + } + + /* Find the file size. */ + if (bfd_stat (abfd, &statbuf) < 0) + { + bfd_set_error (bfd_error_system_call); + return NULL; + } + + if ((size_t) statbuf.st_size < sizeof (ppcboot_hdr_t)) + { + bfd_set_error (bfd_error_wrong_format); + return NULL; + } + + if (bfd_read ((PTR) &hdr, sizeof (hdr), 1, abfd) != sizeof (hdr)) + { + if (bfd_get_error () != bfd_error_system_call) + bfd_set_error (bfd_error_wrong_format); + + return NULL; + } + + /* Now do some basic checks. */ + for (i = 0; i < sizeof (hdr.pc_compatibility); i++) + if (hdr.pc_compatibility[i]) + { + bfd_set_error (bfd_error_wrong_format); + return NULL; + } + + if (hdr.signature[0] != SIGNATURE0 || hdr.signature[1] != SIGNATURE1) + { + bfd_set_error (bfd_error_wrong_format); + return NULL; + } + + if (hdr.partition[0].partition_end.ind != PPC_IND) + { + bfd_set_error (bfd_error_wrong_format); + return NULL; + } + + abfd->symcount = PPCBOOT_SYMS; + + /* One data section. */ + sec = bfd_make_section (abfd, ".data"); + if (sec == NULL) + return NULL; + sec->flags = SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_CODE | SEC_HAS_CONTENTS; + sec->vma = 0; + sec->_raw_size = statbuf.st_size - sizeof (ppcboot_hdr_t); + sec->filepos = sizeof (ppcboot_hdr_t); + + ppcboot_mkobject (abfd); + tdata = ppcboot_get_tdata (abfd); + tdata->sec = sec; + memcpy ((PTR) &tdata->header, (PTR) &hdr, sizeof (ppcboot_hdr_t)); + + ppcboot_set_arch_mach (abfd, bfd_arch_powerpc, 0); + return abfd->xvec; +} + +#define ppcboot_close_and_cleanup _bfd_generic_close_and_cleanup +#define ppcboot_bfd_free_cached_info _bfd_generic_bfd_free_cached_info +#define ppcboot_new_section_hook _bfd_generic_new_section_hook + + +/* Get contents of the only section. */ + +static boolean +ppcboot_get_section_contents (abfd, section, location, offset, count) + bfd *abfd; + asection *section ATTRIBUTE_UNUSED; + PTR location; + file_ptr offset; + bfd_size_type count; +{ + if (bfd_seek (abfd, offset + sizeof(ppcboot_hdr_t), SEEK_SET) != 0 + || bfd_read (location, 1, count, abfd) != count) + return false; + return true; +} + + +/* Return the amount of memory needed to read the symbol table. */ + +static long +ppcboot_get_symtab_upper_bound (abfd) + bfd *abfd ATTRIBUTE_UNUSED; +{ + return (PPCBOOT_SYMS + 1) * sizeof (asymbol *); +} + + +/* Create a symbol name based on the bfd's filename. */ + +static char * +mangle_name (abfd, suffix) + bfd *abfd; + char *suffix; +{ + int size; + char *buf; + char *p; + + size = (strlen (bfd_get_filename (abfd)) + + strlen (suffix) + + sizeof "_ppcboot__"); + + buf = (char *) bfd_alloc (abfd, size); + if (buf == NULL) + return ""; + + sprintf (buf, "_ppcboot_%s_%s", bfd_get_filename (abfd), suffix); + + /* Change any non-alphanumeric characters to underscores. */ + for (p = buf; *p; p++) + if (! isalnum ((unsigned char) *p)) + *p = '_'; + + return buf; +} + + +/* Return the symbol table. */ + +static long +ppcboot_get_symtab (abfd, alocation) + bfd *abfd; + asymbol **alocation; +{ + asection *sec = ppcboot_get_tdata (abfd)->sec; + asymbol *syms; + unsigned int i; + + syms = (asymbol *) bfd_alloc (abfd, PPCBOOT_SYMS * sizeof (asymbol)); + if (syms == NULL) + return false; + + /* Start symbol. */ + syms[0].the_bfd = abfd; + syms[0].name = mangle_name (abfd, "start"); + syms[0].value = 0; + syms[0].flags = BSF_GLOBAL; + syms[0].section = sec; + syms[0].udata.p = NULL; + + /* End symbol. */ + syms[1].the_bfd = abfd; + syms[1].name = mangle_name (abfd, "end"); + syms[1].value = sec->_raw_size; + syms[1].flags = BSF_GLOBAL; + syms[1].section = sec; + syms[1].udata.p = NULL; + + /* Size symbol. */ + syms[2].the_bfd = abfd; + syms[2].name = mangle_name (abfd, "size"); + syms[2].value = sec->_raw_size; + syms[2].flags = BSF_GLOBAL; + syms[2].section = bfd_abs_section_ptr; + syms[2].udata.p = NULL; + + for (i = 0; i < PPCBOOT_SYMS; i++) + *alocation++ = syms++; + *alocation = NULL; + + return PPCBOOT_SYMS; +} + + +/* Make an empty symbol. */ + +static asymbol * +ppcboot_make_empty_symbol (abfd) + bfd *abfd; +{ + return (asymbol *) bfd_alloc (abfd, sizeof (asymbol)); +} + + +#define ppcboot_print_symbol _bfd_nosymbols_print_symbol + +/* Get information about a symbol. */ + +static void +ppcboot_get_symbol_info (ignore_abfd, symbol, ret) + bfd *ignore_abfd ATTRIBUTE_UNUSED; + asymbol *symbol; + symbol_info *ret; +{ + bfd_symbol_info (symbol, ret); +} + +#define ppcboot_bfd_is_local_label_name bfd_generic_is_local_label_name +#define ppcboot_get_lineno _bfd_nosymbols_get_lineno +#define ppcboot_find_nearest_line _bfd_nosymbols_find_nearest_line +#define ppcboot_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol +#define ppcboot_read_minisymbols _bfd_generic_read_minisymbols +#define ppcboot_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol + +#define ppcboot_get_reloc_upper_bound \ + ((long (*) PARAMS ((bfd *, asection *))) bfd_0l) +#define ppcboot_canonicalize_reloc \ + ((long (*) PARAMS ((bfd *, asection *, arelent **, asymbol **))) bfd_0l) +#define ppcboot_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup + +/* Write section contents of a ppcboot file. */ + +static boolean +ppcboot_set_section_contents (abfd, sec, data, offset, size) + bfd *abfd; + asection *sec; + PTR data; + file_ptr offset; + bfd_size_type size; +{ + if (! abfd->output_has_begun) + { + bfd_vma low; + asection *s; + + /* The lowest section VMA sets the virtual address of the start + of the file. We use the set the file position of all the + sections. */ + low = abfd->sections->vma; + for (s = abfd->sections->next; s != NULL; s = s->next) + if (s->vma < low) + low = s->vma; + + for (s = abfd->sections; s != NULL; s = s->next) + s->filepos = s->vma - low; + + abfd->output_has_begun = true; + } + + return _bfd_generic_set_section_contents (abfd, sec, data, offset, size); +} + + +static int +ppcboot_sizeof_headers (abfd, exec) + bfd *abfd ATTRIBUTE_UNUSED; + boolean exec ATTRIBUTE_UNUSED; +{ + return sizeof (ppcboot_hdr_t); +} + + +/* Print out the program headers. */ + +static boolean +ppcboot_bfd_print_private_bfd_data (abfd, farg) + bfd *abfd; + PTR farg; +{ + FILE *f = (FILE *)farg; + ppcboot_data_t *tdata = ppcboot_get_tdata (abfd); + long entry_offset = bfd_getl_signed_32 ((PTR) tdata->header.entry_offset); + long length = bfd_getl_signed_32 ((PTR) tdata->header.length); + int i; + + fprintf (f, _("\nppcboot header:\n")); + fprintf (f, _("Entry offset = 0x%.8lx (%ld)\n"), entry_offset, entry_offset); + fprintf (f, _("Length = 0x%.8lx (%ld)\n"), length, length); + + if (tdata->header.flags) + fprintf (f, _("Flag field = 0x%.2x\n"), tdata->header.flags); + + if (tdata->header.os_id) + fprintf (f, "OS_ID = 0x%.2x\n", tdata->header.os_id); + + if (tdata->header.partition_name) + fprintf (f, _("Partition name = \"%s\"\n"), tdata->header.partition_name); + + for (i = 0; i < 4; i++) + { + long sector_begin = bfd_getl_signed_32 ((PTR) tdata->header.partition[i].sector_begin); + long sector_length = bfd_getl_signed_32 ((PTR) tdata->header.partition[i].sector_length); + + /* Skip all 0 entries */ + if (!tdata->header.partition[i].partition_begin.ind + && !tdata->header.partition[i].partition_begin.head + && !tdata->header.partition[i].partition_begin.sector + && !tdata->header.partition[i].partition_begin.cylinder + && !tdata->header.partition[i].partition_end.ind + && !tdata->header.partition[i].partition_end.head + && !tdata->header.partition[i].partition_end.sector + && !tdata->header.partition[i].partition_end.cylinder + && !sector_begin && !sector_length) + continue; + + fprintf (f, _("\nPartition[%d] start = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"), i, + tdata->header.partition[i].partition_begin.ind, + tdata->header.partition[i].partition_begin.head, + tdata->header.partition[i].partition_begin.sector, + tdata->header.partition[i].partition_begin.cylinder); + + fprintf (f, _("Partition[%d] end = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"), i, + tdata->header.partition[i].partition_end.ind, + tdata->header.partition[i].partition_end.head, + tdata->header.partition[i].partition_end.sector, + tdata->header.partition[i].partition_end.cylinder); + + fprintf (f, _("Partition[%d] sector = 0x%.8lx (%ld)\n"), i, sector_begin, sector_begin); + fprintf (f, _("Partition[%d] length = 0x%.8lx (%ld)\n"), i, sector_length, sector_length); + } + + fprintf (f, "\n"); + return true; +} + + +#define ppcboot_bfd_get_relocated_section_contents \ + bfd_generic_get_relocated_section_contents +#define ppcboot_bfd_relax_section bfd_generic_relax_section +#define ppcboot_bfd_gc_sections bfd_generic_gc_sections +#define ppcboot_bfd_link_hash_table_create _bfd_generic_link_hash_table_create +#define ppcboot_bfd_link_add_symbols _bfd_generic_link_add_symbols +#define ppcboot_bfd_final_link _bfd_generic_final_link +#define ppcboot_bfd_link_split_section _bfd_generic_link_split_section +#define ppcboot_get_section_contents_in_window \ + _bfd_generic_get_section_contents_in_window + +#define ppcboot_bfd_copy_private_bfd_data _bfd_generic_bfd_copy_private_bfd_data +#define ppcboot_bfd_merge_private_bfd_data _bfd_generic_bfd_merge_private_bfd_data +#define ppcboot_bfd_copy_private_section_data _bfd_generic_bfd_copy_private_section_data +#define ppcboot_bfd_copy_private_symbol_data _bfd_generic_bfd_copy_private_symbol_data +#define ppcboot_bfd_set_private_flags _bfd_generic_bfd_set_private_flags +#define ppcboot_bfd_print_private_bfd_dat ppcboot_bfd_print_private_bfd_data + +const bfd_target ppcboot_vec = +{ + "ppcboot", /* name */ + bfd_target_unknown_flavour, /* flavour */ + BFD_ENDIAN_BIG, /* byteorder is big endian for code */ + BFD_ENDIAN_LITTLE, /* header_byteorder */ + EXEC_P, /* object_flags */ + (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE | SEC_DATA + | SEC_ROM | SEC_HAS_CONTENTS), /* section_flags */ + 0, /* symbol_leading_char */ + ' ', /* ar_pad_char */ + 16, /* ar_max_namelen */ + bfd_getb64, bfd_getb_signed_64, bfd_putb64, + bfd_getb32, bfd_getb_signed_32, bfd_putb32, + bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */ + bfd_getl64, bfd_getl_signed_64, bfd_putl64, + bfd_getl32, bfd_getl_signed_32, bfd_putl32, + bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */ + { /* bfd_check_format */ + _bfd_dummy_target, + ppcboot_object_p, /* bfd_check_format */ + _bfd_dummy_target, + _bfd_dummy_target, + }, + { /* bfd_set_format */ + bfd_false, + ppcboot_mkobject, + bfd_false, + bfd_false, + }, + { /* bfd_write_contents */ + bfd_false, + bfd_true, + bfd_false, + bfd_false, + }, + + BFD_JUMP_TABLE_GENERIC (ppcboot), + BFD_JUMP_TABLE_COPY (ppcboot), + BFD_JUMP_TABLE_CORE (_bfd_nocore), + BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive), + BFD_JUMP_TABLE_SYMBOLS (ppcboot), + BFD_JUMP_TABLE_RELOCS (ppcboot), + BFD_JUMP_TABLE_WRITE (ppcboot), + BFD_JUMP_TABLE_LINK (ppcboot), + BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), + + NULL, + + NULL +}; diff --git a/contrib/binutils/binutils/readelf.c b/contrib/binutils/binutils/readelf.c new file mode 100644 index 000000000000..fc011e4988a7 --- /dev/null +++ b/contrib/binutils/binutils/readelf.c @@ -0,0 +1,7365 @@ +/* readelf.c -- display contents of an ELF format file + Copyright (C) 1998, 99, 2000 Free Software Foundation, Inc. + + Originally developed by Eric Youngdale <eric@andante.jic.com> + Modifications by Nick Clifton <nickc@cygnus.com> + + This file is part of GNU Binutils. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + +#include <assert.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <stdio.h> +#include <time.h> + +#if __GNUC__ >= 2 +/* Define BFD64 here, even if our default architecture is 32 bit ELF + as this will allow us to read in and parse 64bit and 32bit ELF files. + Only do this if we belive that the compiler can support a 64 bit + data type. For now we only rely on GCC being able to do this. */ +#define BFD64 +#endif + +#include "bfd.h" + +#include "elf/common.h" +#include "elf/external.h" +#include "elf/internal.h" +#include "elf/dwarf2.h" + +/* The following headers use the elf/reloc-macros.h file to + automatically generate relocation recognition functions + such as elf_mips_reloc_type() */ + +#define RELOC_MACROS_GEN_FUNC + +#include "elf/i386.h" +#include "elf/v850.h" +#include "elf/ppc.h" +#include "elf/mips.h" +#include "elf/alpha.h" +#include "elf/arm.h" +#include "elf/m68k.h" +#include "elf/sparc.h" +#include "elf/m32r.h" +#include "elf/d10v.h" +#include "elf/d30v.h" +#include "elf/sh.h" +#include "elf/mn10200.h" +#include "elf/mn10300.h" +#include "elf/hppa.h" +#include "elf/arc.h" +#include "elf/fr30.h" +#include "elf/mcore.h" +#include "elf/i960.h" +#include "elf/pj.h" +#include "elf/avr.h" + +#include "bucomm.h" +#include "getopt.h" + +char * program_name = "readelf"; +unsigned int dynamic_addr; +bfd_size_type dynamic_size; +unsigned int rela_addr; +unsigned int rela_size; +char * dynamic_strings; +char * string_table; +unsigned long num_dynamic_syms; +Elf_Internal_Sym * dynamic_symbols; +Elf_Internal_Syminfo * dynamic_syminfo; +unsigned long dynamic_syminfo_offset; +unsigned int dynamic_syminfo_nent; +char program_interpreter [64]; +int dynamic_info[DT_JMPREL + 1]; +int version_info[16]; +int loadaddr = 0; +Elf_Internal_Ehdr elf_header; +Elf_Internal_Shdr * section_headers; +Elf_Internal_Dyn * dynamic_segment; +int show_name; +int do_dynamic; +int do_syms; +int do_reloc; +int do_sections; +int do_segments; +int do_using_dynamic; +int do_header; +int do_dump; +int do_version; +int do_histogram; +int do_debugging; +int do_debug_info; +int do_debug_abbrevs; +int do_debug_lines; +int do_debug_pubnames; +int do_debug_aranges; +int do_arch; +int do_notes; +int is_32bit_elf; + +/* A dynamic array of flags indicating which sections require dumping. */ +char * dump_sects = NULL; +unsigned int num_dump_sects = 0; + +#define HEX_DUMP (1 << 0) +#define DISASS_DUMP (1 << 1) +#define DEBUG_DUMP (1 << 2) + +/* How to rpint a vma value. */ +typedef enum print_mode +{ + HEX, + DEC, + DEC_5, + UNSIGNED, + PREFIX_HEX, + FULL_HEX, + LONG_HEX +} +print_mode; + +/* Forward declarations for dumb compilers. */ +static void print_vma PARAMS ((bfd_vma, print_mode)); +static bfd_vma (* byte_get) PARAMS ((unsigned char *, int)); +static bfd_vma byte_get_little_endian PARAMS ((unsigned char *, int)); +static bfd_vma byte_get_big_endian PARAMS ((unsigned char *, int)); +static const char * get_mips_dynamic_type PARAMS ((unsigned long)); +static const char * get_sparc64_dynamic_type PARAMS ((unsigned long)); +static const char * get_parisc_dynamic_type PARAMS ((unsigned long)); +static const char * get_dynamic_type PARAMS ((unsigned long)); +static int dump_relocations PARAMS ((FILE *, unsigned long, unsigned long, Elf_Internal_Sym *, unsigned long, char *, int)); +static char * get_file_type PARAMS ((unsigned)); +static char * get_machine_name PARAMS ((unsigned)); +static char * get_machine_flags PARAMS ((unsigned, unsigned)); +static const char * get_mips_segment_type PARAMS ((unsigned long)); +static const char * get_parisc_segment_type PARAMS ((unsigned long)); +static const char * get_segment_type PARAMS ((unsigned long)); +static const char * get_mips_section_type_name PARAMS ((unsigned int)); +static const char * get_parisc_section_type_name PARAMS ((unsigned int)); +static const char * get_section_type_name PARAMS ((unsigned int)); +static const char * get_symbol_binding PARAMS ((unsigned int)); +static const char * get_symbol_type PARAMS ((unsigned int)); +static const char * get_symbol_visibility PARAMS ((unsigned int)); +static const char * get_symbol_index_type PARAMS ((unsigned int)); +static const char * get_dynamic_flags PARAMS ((bfd_vma)); +static void usage PARAMS ((void)); +static void parse_args PARAMS ((int, char **)); +static int process_file_header PARAMS ((void)); +static int process_program_headers PARAMS ((FILE *)); +static int process_section_headers PARAMS ((FILE *)); +static void dynamic_segment_mips_val PARAMS ((Elf_Internal_Dyn *)); +static void dynamic_segment_parisc_val PARAMS ((Elf_Internal_Dyn *)); +static int process_dynamic_segment PARAMS ((FILE *)); +static int process_symbol_table PARAMS ((FILE *)); +static int process_section_contents PARAMS ((FILE *)); +static void process_file PARAMS ((char *)); +static int process_relocs PARAMS ((FILE *)); +static int process_version_sections PARAMS ((FILE *)); +static char * get_ver_flags PARAMS ((unsigned int)); +static int get_32bit_section_headers PARAMS ((FILE *)); +static int get_64bit_section_headers PARAMS ((FILE *)); +static int get_32bit_program_headers PARAMS ((FILE *, Elf_Internal_Phdr *)); +static int get_64bit_program_headers PARAMS ((FILE *, Elf_Internal_Phdr *)); +static int get_file_header PARAMS ((FILE *)); +static Elf_Internal_Sym * get_32bit_elf_symbols PARAMS ((FILE *, unsigned long, unsigned long)); +static Elf_Internal_Sym * get_64bit_elf_symbols PARAMS ((FILE *, unsigned long, unsigned long)); +static int * get_dynamic_data PARAMS ((FILE *, unsigned int)); +static int get_32bit_dynamic_segment PARAMS ((FILE *)); +static int get_64bit_dynamic_segment PARAMS ((FILE *)); +#ifdef SUPPORT_DISASSEMBLY +static int disassemble_section PARAMS ((Elf32_Internal_Shdr *, FILE *)); +#endif +static int dump_section PARAMS ((Elf32_Internal_Shdr *, FILE *)); +static int display_debug_section PARAMS ((Elf32_Internal_Shdr *, FILE *)); +static int display_debug_info PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *)); +static int display_debug_not_supported PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *)); +static int display_debug_lines PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *)); +static int display_debug_abbrev PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *)); +static int display_debug_aranges PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *)); +static unsigned char * process_abbrev_section PARAMS ((unsigned char *, unsigned char *)); +static unsigned long read_leb128 PARAMS ((unsigned char *, int *, int)); +static int process_extended_line_op PARAMS ((unsigned char *, int, int)); +static void reset_state_machine PARAMS ((int)); +static char * get_TAG_name PARAMS ((unsigned long)); +static char * get_AT_name PARAMS ((unsigned long)); +static char * get_FORM_name PARAMS ((unsigned long)); +static void free_abbrevs PARAMS ((void)); +static void add_abbrev PARAMS ((unsigned long, unsigned long, int)); +static void add_abbrev_attr PARAMS ((unsigned long, unsigned long)); +static unsigned char * read_and_display_attr PARAMS ((unsigned long, unsigned long, unsigned char *, unsigned long)); +static unsigned char * display_block PARAMS ((unsigned char *, unsigned long)); +static void decode_location_expression PARAMS ((unsigned char *, unsigned int)); +static void request_dump PARAMS ((unsigned int, char)); +static const char * get_elf_class PARAMS ((unsigned char)); +static const char * get_data_encoding PARAMS ((unsigned char)); +static const char * get_osabi_name PARAMS ((unsigned char)); +static int guess_is_rela PARAMS ((unsigned long)); +static char * get_note_type PARAMS ((unsigned int)); +static int process_note PARAMS ((Elf32_Internal_Note *)); +static int process_corefile_note_segment PARAMS ((FILE *, bfd_vma, bfd_vma)); +static int process_corefile_note_segments PARAMS ((FILE *)); +static int process_corefile_contents PARAMS ((FILE *)); + +typedef int Elf32_Word; + +#ifndef TRUE +#define TRUE 1 +#define FALSE 0 +#endif +#define UNKNOWN -1 + +#define SECTION_NAME(X) (string_table + (X)->sh_name) + +#define DT_VERSIONTAGIDX(tag) (DT_VERNEEDNUM - (tag)) /* Reverse order! */ + +#define BYTE_GET(field) byte_get (field, sizeof (field)) + +/* If we can support a 64 bit data type then BFD64 should be defined + and sizeof (bfd_vma) == 8. In this case when translating from an + external 8 byte field to an internal field, we can assume that the + internal field is also 8 bytes wide and so we can extact all the data. + If, however, BFD64 is not defined, then we must assume that the + internal data structure only has 4 byte wide fields that are the + equivalent of the 8 byte wide external counterparts, and so we must + truncate the data. */ +#ifdef BFD64 +#define BYTE_GET8(field) byte_get (field, -8) +#else +#define BYTE_GET8(field) byte_get (field, 8) +#endif + +#define NUM_ELEM(array) (sizeof (array) / sizeof ((array)[0])) + +#define GET_DATA_ALLOC(offset, size, var, type, reason) \ + if (fseek (file, offset, SEEK_SET)) \ + { \ + error (_("Unable to seek to start of %s at %x\n"), reason, offset); \ + return 0; \ + } \ + \ + var = (type) malloc (size); \ + \ + if (var == NULL) \ + { \ + error (_("Out of memory allocating %d bytes for %s\n"), size, reason); \ + return 0; \ + } \ + \ + if (fread (var, size, 1, file) != 1) \ + { \ + error (_("Unable to read in %d bytes of %s\n"), size, reason); \ + free (var); \ + var = NULL; \ + return 0; \ + } + + +#define GET_DATA(offset, var, reason) \ + if (fseek (file, offset, SEEK_SET)) \ + { \ + error (_("Unable to seek to %x for %s\n"), offset, reason); \ + return 0; \ + } \ + else if (fread (& var, sizeof (var), 1, file) != 1) \ + { \ + error (_("Unable to read data at %x for %s\n"), offset, reason); \ + return 0; \ + } + +#define GET_ELF_SYMBOLS(file, offset, size) \ + (is_32bit_elf ? get_32bit_elf_symbols (file, offset, size) \ + : get_64bit_elf_symbols (file, offset, size)) + + +#ifdef ANSI_PROTOTYPES +static void +error (const char * message, ...) +{ + va_list args; + + fprintf (stderr, _("%s: Error: "), program_name); + va_start (args, message); + vfprintf (stderr, message, args); + va_end (args); + return; +} + +static void +warn (const char * message, ...) +{ + va_list args; + + fprintf (stderr, _("%s: Warning: "), program_name); + va_start (args, message); + vfprintf (stderr, message, args); + va_end (args); + return; +} +#else +static void +error (va_alist) + va_dcl +{ + char * message; + va_list args; + + fprintf (stderr, _("%s: Error: "), program_name); + va_start (args); + message = va_arg (args, char *); + vfprintf (stderr, message, args); + va_end (args); + return; +} + +static void +warn (va_alist) + va_dcl +{ + char * message; + va_list args; + + fprintf (stderr, _("%s: Warning: "), program_name); + va_start (args); + message = va_arg (args, char *); + vfprintf (stderr, message, args); + va_end (args); + return; +} +#endif + +static bfd_vma +byte_get_little_endian (field, size) + unsigned char * field; + int size; +{ + switch (size) + { + case 1: + return * field; + + case 2: + return ((unsigned int) (field [0])) + | (((unsigned int) (field [1])) << 8); + + case 8: + /* We want to extract data from an 8 byte wide field and + place it into a 4 byte wide field. Since this is a little + endian source we can juts use the 4 byte extraction code. */ + /* Fall through. */ + case 4: + return ((unsigned long) (field [0])) + | (((unsigned long) (field [1])) << 8) + | (((unsigned long) (field [2])) << 16) + | (((unsigned long) (field [3])) << 24); + +#ifdef BFD64 + case -8: + /* This is a special case, generated by the BYTE_GET8 macro. + It means that we are loading an 8 byte value from a field + in an external structure into an 8 byte value in a field + in an internal strcuture. */ + return ((bfd_vma) (field [0])) + | (((bfd_vma) (field [1])) << 8) + | (((bfd_vma) (field [2])) << 16) + | (((bfd_vma) (field [3])) << 24) + | (((bfd_vma) (field [4])) << 32) + | (((bfd_vma) (field [5])) << 40) + | (((bfd_vma) (field [6])) << 48) + | (((bfd_vma) (field [7])) << 56); +#endif + default: + error (_("Unhandled data length: %d\n"), size); + abort (); + } +} + +/* Print a VMA value. */ +static void +print_vma (vma, mode) + bfd_vma vma; + print_mode mode; +{ +#ifdef BFD64 + if (is_32bit_elf) +#endif + { + switch (mode) + { + case FULL_HEX: printf ("0x"); /* drop through */ + case LONG_HEX: printf ("%8.8lx", (unsigned long) vma); break; + case PREFIX_HEX: printf ("0x"); /* drop through */ + case HEX: printf ("%lx", (unsigned long) vma); break; + case DEC: printf ("%ld", (unsigned long) vma); break; + case DEC_5: printf ("%5ld", (long) vma); break; + case UNSIGNED: printf ("%lu", (unsigned long) vma); break; + } + } +#ifdef BFD64 + else + { + switch (mode) + { + case FULL_HEX: + printf ("0x"); + /* drop through */ + + case LONG_HEX: + printf_vma (vma); + break; + + case PREFIX_HEX: + printf ("0x"); + /* drop through */ + + case HEX: +#if BFD_HOST_64BIT_LONG + printf ("%lx", vma); +#else + if (_bfd_int64_high (vma)) + printf ("%lx%lx", _bfd_int64_high (vma), _bfd_int64_low (vma)); + else + printf ("%lx", _bfd_int64_low (vma)); +#endif + break; + + case DEC: +#if BFD_HOST_64BIT_LONG + printf ("%ld", vma); +#else + if (_bfd_int64_high (vma)) + /* ugg */ + printf ("++%ld", _bfd_int64_low (vma)); + else + printf ("%ld", _bfd_int64_low (vma)); +#endif + break; + + case DEC_5: +#if BFD_HOST_64BIT_LONG + printf ("%5ld", vma); +#else + if (_bfd_int64_high (vma)) + /* ugg */ + printf ("++%ld", _bfd_int64_low (vma)); + else + printf ("%5ld", _bfd_int64_low (vma)); +#endif + break; + + case UNSIGNED: +#if BFD_HOST_64BIT_LONG + printf ("%lu", vma); +#else + if (_bfd_int64_high (vma)) + /* ugg */ + printf ("++%lu", _bfd_int64_low (vma)); + else + printf ("%lu", _bfd_int64_low (vma)); +#endif + break; + } + } +#endif +} + +static bfd_vma +byte_get_big_endian (field, size) + unsigned char * field; + int size; +{ + switch (size) + { + case 1: + return * field; + + case 2: + return ((unsigned int) (field [1])) | (((int) (field [0])) << 8); + + case 4: + return ((unsigned long) (field [3])) + | (((unsigned long) (field [2])) << 8) + | (((unsigned long) (field [1])) << 16) + | (((unsigned long) (field [0])) << 24); + + case 8: + /* Although we are extracing data from an 8 byte wide field, we + are returning only 4 bytes of data. */ + return ((unsigned long) (field [7])) + | (((unsigned long) (field [6])) << 8) + | (((unsigned long) (field [5])) << 16) + | (((unsigned long) (field [4])) << 24); + +#ifdef BFD64 + case -8: + /* This is a special case, generated by the BYTE_GET8 macro. + It means that we are loading an 8 byte value from a field + in an external structure into an 8 byte value in a field + in an internal strcuture. */ + return ((bfd_vma) (field [7])) + | (((bfd_vma) (field [6])) << 8) + | (((bfd_vma) (field [5])) << 16) + | (((bfd_vma) (field [4])) << 24) + | (((bfd_vma) (field [3])) << 32) + | (((bfd_vma) (field [2])) << 40) + | (((bfd_vma) (field [1])) << 48) + | (((bfd_vma) (field [0])) << 56); +#endif + + default: + error (_("Unhandled data length: %d\n"), size); + abort (); + } +} + + +/* Guess the relocation sized based on the sized commonly used by the specific machine. */ +static int +guess_is_rela (e_machine) + unsigned long e_machine; +{ + switch (e_machine) + { + /* Targets that use REL relocations. */ + case EM_ARM: + case EM_386: + case EM_486: + case EM_960: + case EM_CYGNUS_M32R: + case EM_CYGNUS_D10V: + case EM_MIPS: + case EM_MIPS_RS4_BE: + return FALSE; + + /* Targets that use RELA relocations. */ + case EM_68K: + case EM_SPARC32PLUS: + case EM_SPARCV9: + case EM_SPARC: + case EM_PPC: + case EM_CYGNUS_V850: + case EM_CYGNUS_D30V: + case EM_CYGNUS_MN10200: + case EM_CYGNUS_MN10300: + case EM_CYGNUS_FR30: + case EM_SH: + case EM_ALPHA: + case EM_MCORE: + return TRUE; + + case EM_MMA: + case EM_PCP: + case EM_NCPU: + case EM_NDR1: + case EM_STARCORE: + case EM_ME16: + case EM_ST100: + case EM_TINYJ: + case EM_FX66: + case EM_ST9PLUS: + case EM_ST7: + case EM_68HC16: + case EM_68HC11: + case EM_68HC08: + case EM_68HC05: + case EM_SVX: + case EM_ST19: + case EM_VAX: + default: + warn (_("Don't know about relocations on this machine architecture\n")); + return FALSE; + } +} + +/* Display the contents of the relocation data found at the specified offset. */ +static int +dump_relocations (file, rel_offset, rel_size, symtab, nsyms, strtab, is_rela) + FILE * file; + unsigned long rel_offset; + unsigned long rel_size; + Elf_Internal_Sym * symtab; + unsigned long nsyms; + char * strtab; + int is_rela; +{ + unsigned int i; + Elf_Internal_Rel * rels; + Elf_Internal_Rela * relas; + + + if (is_rela == UNKNOWN) + is_rela = guess_is_rela (elf_header.e_machine); + + if (is_rela) + { + if (is_32bit_elf) + { + Elf32_External_Rela * erelas; + + GET_DATA_ALLOC (rel_offset, rel_size, erelas, + Elf32_External_Rela *, "relocs"); + + rel_size = rel_size / sizeof (Elf32_External_Rela); + + relas = (Elf_Internal_Rela *) + malloc (rel_size * sizeof (Elf_Internal_Rela)); + + if (relas == NULL) + { + error(_("out of memory parsing relocs")); + return 0; + } + + for (i = 0; i < rel_size; i++) + { + relas[i].r_offset = BYTE_GET (erelas[i].r_offset); + relas[i].r_info = BYTE_GET (erelas[i].r_info); + relas[i].r_addend = BYTE_GET (erelas[i].r_addend); + } + + free (erelas); + + rels = (Elf_Internal_Rel *) relas; + } + else + { + Elf64_External_Rela * erelas; + + GET_DATA_ALLOC (rel_offset, rel_size, erelas, + Elf64_External_Rela *, "relocs"); + + rel_size = rel_size / sizeof (Elf64_External_Rela); + + relas = (Elf_Internal_Rela *) + malloc (rel_size * sizeof (Elf_Internal_Rela)); + + if (relas == NULL) + { + error(_("out of memory parsing relocs")); + return 0; + } + + for (i = 0; i < rel_size; i++) + { + relas[i].r_offset = BYTE_GET8 (erelas[i].r_offset); + relas[i].r_info = BYTE_GET8 (erelas[i].r_info); + relas[i].r_addend = BYTE_GET8 (erelas[i].r_addend); + } + + free (erelas); + + rels = (Elf_Internal_Rel *) relas; + } + } + else + { + if (is_32bit_elf) + { + Elf32_External_Rel * erels; + + GET_DATA_ALLOC (rel_offset, rel_size, erels, + Elf32_External_Rel *, "relocs"); + + rel_size = rel_size / sizeof (Elf32_External_Rel); + + rels = (Elf_Internal_Rel *) + malloc (rel_size * sizeof (Elf_Internal_Rel)); + + if (rels == NULL) + { + error(_("out of memory parsing relocs")); + return 0; + } + + for (i = 0; i < rel_size; i++) + { + rels[i].r_offset = BYTE_GET (erels[i].r_offset); + rels[i].r_info = BYTE_GET (erels[i].r_info); + } + + free (erels); + + relas = (Elf_Internal_Rela *) rels; + } + else + { + Elf64_External_Rel * erels; + + GET_DATA_ALLOC (rel_offset, rel_size, erels, + Elf64_External_Rel *, "relocs"); + + rel_size = rel_size / sizeof (Elf64_External_Rel); + + rels = (Elf_Internal_Rel *) + malloc (rel_size * sizeof (Elf_Internal_Rel)); + + if (rels == NULL) + { + error(_("out of memory parsing relocs")); + return 0; + } + + for (i = 0; i < rel_size; i++) + { + rels[i].r_offset = BYTE_GET8 (erels[i].r_offset); + rels[i].r_info = BYTE_GET8 (erels[i].r_info); + } + + free (erels); + + relas = (Elf_Internal_Rela *) rels; + } + } + + if (is_rela) + printf + (_(" Offset Info Type Symbol's Value Symbol's Name Addend\n")); + else + printf + (_(" Offset Info Type Symbol's Value Symbol's Name\n")); + + for (i = 0; i < rel_size; i++) + { + const char * rtype; + bfd_vma offset; + bfd_vma info; + bfd_vma symtab_index; + bfd_vma type; + + if (is_rela) + { + offset = relas [i].r_offset; + info = relas [i].r_info; + } + else + { + offset = rels [i].r_offset; + info = rels [i].r_info; + } + + if (is_32bit_elf) + { + type = ELF32_R_TYPE (info); + symtab_index = ELF32_R_SYM (info); + } + else + { + if (elf_header.e_machine == EM_SPARCV9) + type = ELF64_R_TYPE_ID (info); + else + type = ELF64_R_TYPE (info); + /* The #ifdef BFD64 below is to prevent a compile time warning. + We know that if we do not have a 64 bit data type that we + will never execute this code anyway. */ +#ifdef BFD64 + symtab_index = ELF64_R_SYM (info); +#endif + } + +#ifdef _bfd_int64_low + printf (" %8.8lx %5.5lx ", _bfd_int64_low (offset), _bfd_int64_low (info)); +#else + printf (" %8.8lx %5.5lx ", offset, info); +#endif + + switch (elf_header.e_machine) + { + default: + rtype = NULL; + break; + + case EM_CYGNUS_M32R: + rtype = elf_m32r_reloc_type (type); + break; + + case EM_386: + case EM_486: + rtype = elf_i386_reloc_type (type); + break; + + case EM_68K: + rtype = elf_m68k_reloc_type (type); + break; + + case EM_960: + rtype = elf_i960_reloc_type (type); + break; + + case EM_AVR: + rtype = elf_avr_reloc_type (type); + break; + + case EM_OLD_SPARCV9: + case EM_SPARC32PLUS: + case EM_SPARCV9: + case EM_SPARC: + rtype = elf_sparc_reloc_type (type); + break; + + case EM_CYGNUS_V850: + rtype = v850_reloc_type (type); + break; + + case EM_CYGNUS_D10V: + rtype = elf_d10v_reloc_type (type); + break; + + case EM_CYGNUS_D30V: + rtype = elf_d30v_reloc_type (type); + break; + + case EM_SH: + rtype = elf_sh_reloc_type (type); + break; + + case EM_CYGNUS_MN10300: + rtype = elf_mn10300_reloc_type (type); + break; + + case EM_CYGNUS_MN10200: + rtype = elf_mn10200_reloc_type (type); + break; + + case EM_CYGNUS_FR30: + rtype = elf_fr30_reloc_type (type); + break; + + case EM_MCORE: + rtype = elf_mcore_reloc_type (type); + break; + + case EM_PPC: + rtype = elf_ppc_reloc_type (type); + break; + + case EM_MIPS: + case EM_MIPS_RS4_BE: + rtype = elf_mips_reloc_type (type); + break; + + case EM_ALPHA: + rtype = elf_alpha_reloc_type (type); + break; + + case EM_ARM: + rtype = elf_arm_reloc_type (type); + break; + + case EM_CYGNUS_ARC: + rtype = elf_arc_reloc_type (type); + break; + + case EM_PARISC: + rtype = elf_hppa_reloc_type (type); + break; + + case EM_PJ: + rtype = elf_pj_reloc_type (type); + break; + } + + if (rtype == NULL) +#ifdef _bfd_int64_low + printf (_("unrecognised: %-7lx"), _bfd_int64_low (type)); +#else + printf (_("unrecognised: %-7lx"), type); +#endif + else + printf ("%-21.21s", rtype); + + if (symtab_index) + { + if (symtab != NULL) + { + if (symtab_index >= nsyms) + printf (" bad symbol index: %08lx", (unsigned long) symtab_index); + else + { + Elf_Internal_Sym * psym; + + psym = symtab + symtab_index; + + printf (" "); + print_vma (psym->st_value, LONG_HEX); + printf (" "); + + if (psym->st_name == 0) + printf ("%-25.25s", + SECTION_NAME (section_headers + psym->st_shndx)); + else if (strtab == NULL) + printf (_("<string table index %3ld>"), psym->st_name); + else + printf ("%-25.25s", strtab + psym->st_name); + + if (is_rela) + printf (" + %lx", (unsigned long) relas [i].r_addend); + } + } + } + else if (is_rela) + { + printf ("%*c", is_32bit_elf ? 34 : 26, ' '); + print_vma (relas[i].r_addend, LONG_HEX); + } + + if (elf_header.e_machine == EM_SPARCV9 + && !strcmp (rtype, "R_SPARC_OLO10")) + printf (" + %lx", (unsigned long) ELF64_R_TYPE_DATA (info)); + + putchar ('\n'); + } + + free (relas); + + return 1; +} + +static const char * +get_mips_dynamic_type (type) + unsigned long type; +{ + switch (type) + { + case DT_MIPS_RLD_VERSION: return "MIPS_RLD_VERSION"; + case DT_MIPS_TIME_STAMP: return "MIPS_TIME_STAMP"; + case DT_MIPS_ICHECKSUM: return "MIPS_ICHECKSUM"; + case DT_MIPS_IVERSION: return "MIPS_IVERSION"; + case DT_MIPS_FLAGS: return "MIPS_FLAGS"; + case DT_MIPS_BASE_ADDRESS: return "MIPS_BASE_ADDRESS"; + case DT_MIPS_MSYM: return "MIPS_MSYM"; + case DT_MIPS_CONFLICT: return "MIPS_CONFLICT"; + case DT_MIPS_LIBLIST: return "MIPS_LIBLIST"; + case DT_MIPS_LOCAL_GOTNO: return "MIPS_LOCAL_GOTNO"; + case DT_MIPS_CONFLICTNO: return "MIPS_CONFLICTNO"; + case DT_MIPS_LIBLISTNO: return "MIPS_LIBLISTNO"; + case DT_MIPS_SYMTABNO: return "MIPS_SYMTABNO"; + case DT_MIPS_UNREFEXTNO: return "MIPS_UNREFEXTNO"; + case DT_MIPS_GOTSYM: return "MIPS_GOTSYM"; + case DT_MIPS_HIPAGENO: return "MIPS_HIPAGENO"; + case DT_MIPS_RLD_MAP: return "MIPS_RLD_MAP"; + case DT_MIPS_DELTA_CLASS: return "MIPS_DELTA_CLASS"; + case DT_MIPS_DELTA_CLASS_NO: return "MIPS_DELTA_CLASS_NO"; + case DT_MIPS_DELTA_INSTANCE: return "MIPS_DELTA_INSTANCE"; + case DT_MIPS_DELTA_INSTANCE_NO: return "MIPS_DELTA_INSTANCE_NO"; + case DT_MIPS_DELTA_RELOC: return "MIPS_DELTA_RELOC"; + case DT_MIPS_DELTA_RELOC_NO: return "MIPS_DELTA_RELOC_NO"; + case DT_MIPS_DELTA_SYM: return "MIPS_DELTA_SYM"; + case DT_MIPS_DELTA_SYM_NO: return "MIPS_DELTA_SYM_NO"; + case DT_MIPS_DELTA_CLASSSYM: return "MIPS_DELTA_CLASSSYM"; + case DT_MIPS_DELTA_CLASSSYM_NO: return "MIPS_DELTA_CLASSSYM_NO"; + case DT_MIPS_CXX_FLAGS: return "MIPS_CXX_FLAGS"; + case DT_MIPS_PIXIE_INIT: return "MIPS_PIXIE_INIT"; + case DT_MIPS_SYMBOL_LIB: return "MIPS_SYMBOL_LIB"; + case DT_MIPS_LOCALPAGE_GOTIDX: return "MIPS_LOCALPAGE_GOTIDX"; + case DT_MIPS_LOCAL_GOTIDX: return "MIPS_LOCAL_GOTIDX"; + case DT_MIPS_HIDDEN_GOTIDX: return "MIPS_HIDDEN_GOTIDX"; + case DT_MIPS_PROTECTED_GOTIDX: return "MIPS_PROTECTED_GOTIDX"; + case DT_MIPS_OPTIONS: return "MIPS_OPTIONS"; + case DT_MIPS_INTERFACE: return "MIPS_INTERFACE"; + case DT_MIPS_DYNSTR_ALIGN: return "MIPS_DYNSTR_ALIGN"; + case DT_MIPS_INTERFACE_SIZE: return "MIPS_INTERFACE_SIZE"; + case DT_MIPS_RLD_TEXT_RESOLVE_ADDR: return "MIPS_RLD_TEXT_RESOLVE_ADDR"; + case DT_MIPS_PERF_SUFFIX: return "MIPS_PERF_SUFFIX"; + case DT_MIPS_COMPACT_SIZE: return "MIPS_COMPACT_SIZE"; + case DT_MIPS_GP_VALUE: return "MIPS_GP_VALUE"; + case DT_MIPS_AUX_DYNAMIC: return "MIPS_AUX_DYNAMIC"; + default: + return NULL; + } +} + +static const char * +get_sparc64_dynamic_type (type) + unsigned long type; +{ + switch (type) + { + case DT_SPARC_REGISTER: return "SPARC_REGISTER"; + default: + return NULL; + } +} + +static const char * +get_parisc_dynamic_type (type) + unsigned long type; +{ + switch (type) + { + case DT_HP_LOAD_MAP: return "HP_LOAD_MAP"; + case DT_HP_DLD_FLAGS: return "HP_DLD_FLAGS"; + case DT_HP_DLD_HOOK: return "HP_DLD_HOOK"; + case DT_HP_UX10_INIT: return "HP_UX10_INIT"; + case DT_HP_UX10_INITSZ: return "HP_UX10_INITSZ"; + case DT_HP_PREINIT: return "HP_PREINIT"; + case DT_HP_PREINITSZ: return "HP_PREINITSZ"; + case DT_HP_NEEDED: return "HP_NEEDED"; + case DT_HP_TIME_STAMP: return "HP_TIME_STAMP"; + case DT_HP_CHECKSUM: return "HP_CHECKSUM"; + case DT_HP_GST_SIZE: return "HP_GST_SIZE"; + case DT_HP_GST_VERSION: return "HP_GST_VERSION"; + case DT_HP_GST_HASHVAL: return "HP_GST_HASHVAL"; + default: + return NULL; + } +} + +static const char * +get_dynamic_type (type) + unsigned long type; +{ + static char buff [32]; + + switch (type) + { + case DT_NULL: return "NULL"; + case DT_NEEDED: return "NEEDED"; + case DT_PLTRELSZ: return "PLTRELSZ"; + case DT_PLTGOT: return "PLTGOT"; + case DT_HASH: return "HASH"; + case DT_STRTAB: return "STRTAB"; + case DT_SYMTAB: return "SYMTAB"; + case DT_RELA: return "RELA"; + case DT_RELASZ: return "RELASZ"; + case DT_RELAENT: return "RELAENT"; + case DT_STRSZ: return "STRSZ"; + case DT_SYMENT: return "SYMENT"; + case DT_INIT: return "INIT"; + case DT_FINI: return "FINI"; + case DT_SONAME: return "SONAME"; + case DT_RPATH: return "RPATH"; + case DT_SYMBOLIC: return "SYMBOLIC"; + case DT_REL: return "REL"; + case DT_RELSZ: return "RELSZ"; + case DT_RELENT: return "RELENT"; + case DT_PLTREL: return "PLTREL"; + case DT_DEBUG: return "DEBUG"; + case DT_TEXTREL: return "TEXTREL"; + case DT_JMPREL: return "JMPREL"; + case DT_BIND_NOW: return "BIND_NOW"; + case DT_INIT_ARRAY: return "INIT_ARRAY"; + case DT_FINI_ARRAY: return "FINI_ARRAY"; + case DT_INIT_ARRAYSZ: return "INIT_ARRAYSZ"; + case DT_FINI_ARRAYSZ: return "FINI_ARRAYSZ"; + case DT_RUNPATH: return "RUNPATH"; + case DT_FLAGS: return "FLAGS"; + + case DT_PREINIT_ARRAY: return "PREINIT_ARRAY"; + case DT_PREINIT_ARRAYSZ: return "PREINIT_ARRAYSZ"; + + case DT_PLTPADSZ: return "PLTPADSZ"; + case DT_MOVEENT: return "MOVEENT"; + case DT_MOVESZ: return "MOVESZ"; + case DT_FEATURE_1: return "FEATURE_1"; + case DT_POSFLAG_1: return "POSFLAG_1"; + case DT_SYMINSZ: return "SYMINSZ"; + case DT_SYMINENT: return "SYMINENT"; /* aka VALRNGHI */ + + case DT_ADDRRNGLO: return "ADDRRNGLO"; + case DT_SYMINFO: return "SYMINFO"; /* aka ADDRRNGHI */ + + case DT_VERSYM: return "VERSYM"; + + case DT_RELACOUNT: return "RELACOUNT"; + case DT_RELCOUNT: return "RELCOUNT"; + case DT_FLAGS_1: return "FLAGS_1"; + case DT_VERDEF: return "VERDEF"; + case DT_VERDEFNUM: return "VERDEFNUM"; + case DT_VERNEED: return "VERNEED"; + case DT_VERNEEDNUM: return "VERNEEDNUM"; + + case DT_AUXILIARY: return "AUXILARY"; + case DT_USED: return "USED"; + case DT_FILTER: return "FILTER"; + + default: + if ((type >= DT_LOPROC) && (type <= DT_HIPROC)) + { + const char * result; + + switch (elf_header.e_machine) + { + case EM_MIPS: + case EM_MIPS_RS4_BE: + result = get_mips_dynamic_type (type); + break; + case EM_SPARCV9: + result = get_sparc64_dynamic_type (type); + break; + default: + result = NULL; + break; + } + + if (result != NULL) + return result; + + sprintf (buff, _("Processor Specific: %lx"), type); + } + else if ((type >= DT_LOOS) && (type <= DT_HIOS)) + { + const char * result; + + switch (elf_header.e_machine) + { + case EM_PARISC: + result = get_parisc_dynamic_type (type); + break; + default: + result = NULL; + break; + } + + if (result != NULL) + return result; + + sprintf (buff, _("Operating System specific: %lx"), type); + } + else + sprintf (buff, _("<unknown>: %lx"), type); + + return buff; + } +} + +static char * +get_file_type (e_type) + unsigned e_type; +{ + static char buff [32]; + + switch (e_type) + { + case ET_NONE: return _("NONE (None)"); + case ET_REL: return _("REL (Relocatable file)"); + case ET_EXEC: return _("EXEC (Executable file)"); + case ET_DYN: return _("DYN (Shared object file)"); + case ET_CORE: return _("CORE (Core file)"); + + default: + if ((e_type >= ET_LOPROC) && (e_type <= ET_HIPROC)) + sprintf (buff, _("Processor Specific: (%x)"), e_type); + else if ((e_type >= ET_LOOS) && (e_type <= ET_HIOS)) + sprintf (buff, _("OS Specific: (%x)"), e_type); + else + sprintf (buff, _("<unknown>: %x"), e_type); + return buff; + } +} + +static char * +get_machine_name (e_machine) + unsigned e_machine; +{ + static char buff [64]; /* XXX */ + + switch (e_machine) + { + case EM_NONE: return _("None"); + case EM_M32: return "WE32100"; + case EM_SPARC: return "Sparc"; + case EM_386: return "Intel 80386"; + case EM_68K: return "MC68000"; + case EM_88K: return "MC88000"; + case EM_486: return "Intel 80486"; + case EM_860: return "Intel 80860"; + case EM_MIPS: return "MIPS R3000"; + case EM_S370: return "IBM System/370"; + case EM_MIPS_RS4_BE: return "MIPS R4000 big-endian"; + case EM_OLD_SPARCV9: return "Sparc v9 (old)"; + case EM_PARISC: return "HPPA"; + case EM_PPC_OLD: return "Power PC (old)"; + case EM_SPARC32PLUS: return "Sparc v8+" ; + case EM_960: return "Intel 90860"; + case EM_PPC: return "PowerPC"; + case EM_V800: return "NEC V800"; + case EM_FR20: return "Fujitsu FR20"; + case EM_RH32: return "TRW RH32"; + case EM_MCORE: return "MCORE"; + case EM_ARM: return "ARM"; + case EM_OLD_ALPHA: return "Digital Alpha (old)"; + case EM_SH: return "Hitachi SH"; + case EM_SPARCV9: return "Sparc v9"; + case EM_TRICORE: return "Siemens Tricore"; + case EM_ARC: return "Argonaut RISC Core"; + case EM_H8_300: return "Hitachi H8/300"; + case EM_H8_300H: return "Hitachi H8/300H"; + case EM_H8S: return "Hitachi H8S"; + case EM_H8_500: return "Hitachi H8/500"; + case EM_IA_64: return "Intel IA-64"; + case EM_MIPS_X: return "Stanford MIPS-X"; + case EM_COLDFIRE: return "Motorola Coldfire"; + case EM_68HC12: return "Motorola M68HC12"; + case EM_ALPHA: return "Alpha"; + case EM_CYGNUS_D10V: return "d10v"; + case EM_CYGNUS_D30V: return "d30v"; + case EM_CYGNUS_ARC: return "Arc"; + case EM_CYGNUS_M32R: return "Mitsubishi M32r"; + case EM_CYGNUS_V850: return "NEC v850"; + case EM_CYGNUS_MN10300: return "mn10300"; + case EM_CYGNUS_MN10200: return "mn10200"; + case EM_CYGNUS_FR30: return "Fujitsu FR30"; + case EM_PJ: return "picoJava"; + case EM_MMA: return "Fujitsu Multimedia Accelerator"; + case EM_PCP: return "Siemens PCP"; + case EM_NCPU: return "Sony nCPU embedded RISC processor"; + case EM_NDR1: return "Denso NDR1 microprocesspr"; + case EM_STARCORE: return "Motorola Star*Core processor"; + case EM_ME16: return "Toyota ME16 processor"; + case EM_ST100: return "STMicroelectronics ST100 processor"; + case EM_TINYJ: return "Advanced Logic Corp. TinyJ embedded processor"; + case EM_FX66: return "Siemens FX66 microcontroller"; + case EM_ST9PLUS: return "STMicroelectronics ST9+ 8/16 bit microcontroller"; + case EM_ST7: return "STMicroelectronics ST7 8-bit microcontroller"; + case EM_68HC16: return "Motorola MC68HC16 Microcontroller"; + case EM_68HC11: return "Motorola MC68HC11 Microcontroller"; + case EM_68HC08: return "Motorola MC68HC08 Microcontroller"; + case EM_68HC05: return "Motorola MC68HC05 Microcontroller"; + case EM_SVX: return "Silicon Graphics SVx"; + case EM_ST19: return "STMicroelectronics ST19 8-bit microcontroller"; + case EM_VAX: return "Digital VAX"; + default: + sprintf (buff, _("<unknown>: %x"), e_machine); + return buff; + } +} + +static char * +get_machine_flags (e_flags, e_machine) + unsigned e_flags; + unsigned e_machine; +{ + static char buf [1024]; + + buf[0] = '\0'; + + if (e_flags) + { + switch (e_machine) + { + default: + break; + + case EM_68K: + if (e_flags & EF_CPU32) + strcat (buf, ", cpu32"); + break; + + case EM_PPC: + if (e_flags & EF_PPC_EMB) + strcat (buf, ", emb"); + + if (e_flags & EF_PPC_RELOCATABLE) + strcat (buf, ", relocatable"); + + if (e_flags & EF_PPC_RELOCATABLE_LIB) + strcat (buf, ", relocatable-lib"); + break; + + case EM_CYGNUS_V850: + switch (e_flags & EF_V850_ARCH) + { + case E_V850E_ARCH: + strcat (buf, ", v850e"); + break; + case E_V850EA_ARCH: + strcat (buf, ", v850ea"); + break; + case E_V850_ARCH: + strcat (buf, ", v850"); + break; + default: + strcat (buf, ", unknown v850 architecture variant"); + break; + } + break; + + case EM_CYGNUS_M32R: + if ((e_flags & EF_M32R_ARCH) == E_M32R_ARCH) + strcat (buf, ", m32r"); + + break; + + case EM_MIPS: + case EM_MIPS_RS4_BE: + if (e_flags & EF_MIPS_NOREORDER) + strcat (buf, ", noreorder"); + + if (e_flags & EF_MIPS_PIC) + strcat (buf, ", pic"); + + if (e_flags & EF_MIPS_CPIC) + strcat (buf, ", cpic"); + + if (e_flags & EF_MIPS_ABI2) + strcat (buf, ", abi2"); + + if ((e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1) + strcat (buf, ", mips1"); + + if ((e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2) + strcat (buf, ", mips2"); + + if ((e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3) + strcat (buf, ", mips3"); + + if ((e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4) + strcat (buf, ", mips4"); + break; + + case EM_SPARCV9: + if (e_flags & EF_SPARC_32PLUS) + strcat (buf, ", v8+"); + + if (e_flags & EF_SPARC_SUN_US1) + strcat (buf, ", ultrasparcI"); + + if (e_flags & EF_SPARC_SUN_US3) + strcat (buf, ", ultrasparcIII"); + + if (e_flags & EF_SPARC_HAL_R1) + strcat (buf, ", halr1"); + + if (e_flags & EF_SPARC_LEDATA) + strcat (buf, ", ledata"); + + if ((e_flags & EF_SPARCV9_MM) == EF_SPARCV9_TSO) + strcat (buf, ", tso"); + + if ((e_flags & EF_SPARCV9_MM) == EF_SPARCV9_PSO) + strcat (buf, ", pso"); + + if ((e_flags & EF_SPARCV9_MM) == EF_SPARCV9_RMO) + strcat (buf, ", rmo"); + break; + + case EM_PARISC: + switch (e_flags & EF_PARISC_ARCH) + { + case EFA_PARISC_1_0: + strcpy (buf, ", PA-RISC 1.0"); + break; + case EFA_PARISC_1_1: + strcpy (buf, ", PA-RISC 1.1"); + break; + case EFA_PARISC_2_0: + strcpy (buf, ", PA-RISC 2.0"); + break; + default: + break; + } + if (e_flags & EF_PARISC_TRAPNIL) + strcat (buf, ", trapnil"); + if (e_flags & EF_PARISC_EXT) + strcat (buf, ", ext"); + if (e_flags & EF_PARISC_LSB) + strcat (buf, ", lsb"); + if (e_flags & EF_PARISC_WIDE) + strcat (buf, ", wide"); + if (e_flags & EF_PARISC_NO_KABP) + strcat (buf, ", no kabp"); + if (e_flags & EF_PARISC_LAZYSWAP) + strcat (buf, ", lazyswap"); + break; + + case EM_PJ: + if ((e_flags & EF_PICOJAVA_NEWCALLS) == EF_PICOJAVA_NEWCALLS) + strcat (buf, ", new calling convention"); + + if ((e_flags & EF_PICOJAVA_GNUCALLS) == EF_PICOJAVA_GNUCALLS) + strcat (buf, ", gnu calling convention"); + break; + } + } + + return buf; +} + +static const char * +get_mips_segment_type (type) + unsigned long type; +{ + switch (type) + { + case PT_MIPS_REGINFO: + return "REGINFO"; + case PT_MIPS_RTPROC: + return "RTPROC"; + case PT_MIPS_OPTIONS: + return "OPTIONS"; + default: + break; + } + + return NULL; +} + +static const char * +get_parisc_segment_type (type) + unsigned long type; +{ + switch (type) + { + case PT_HP_TLS: return "HP_TLS"; + case PT_HP_CORE_NONE: return "HP_CORE_NONE"; + case PT_HP_CORE_VERSION: return "HP_CORE_VERSION"; + case PT_HP_CORE_KERNEL: return "HP_CORE_KERNEL"; + case PT_HP_CORE_COMM: return "HP_CORE_COMM"; + case PT_HP_CORE_PROC: return "HP_CORE_PROC"; + case PT_HP_CORE_LOADABLE: return "HP_CORE_LOADABLE"; + case PT_HP_CORE_STACK: return "HP_CORE_STACK"; + case PT_HP_CORE_SHM: return "HP_CORE_SHM"; + case PT_HP_CORE_MMF: return "HP_CORE_MMF"; + case PT_HP_PARALLEL: return "HP_PARALLEL"; + case PT_HP_FASTBIND: return "HP_FASTBIND"; + case PT_PARISC_ARCHEXT: return "PARISC_ARCHEXT"; + case PT_PARISC_UNWIND: return "PARISC_UNWIND"; + default: + break; + } + + return NULL; +} + +static const char * +get_segment_type (p_type) + unsigned long p_type; +{ + static char buff [32]; + + switch (p_type) + { + case PT_NULL: return "NULL"; + case PT_LOAD: return "LOAD"; + case PT_DYNAMIC: return "DYNAMIC"; + case PT_INTERP: return "INTERP"; + case PT_NOTE: return "NOTE"; + case PT_SHLIB: return "SHLIB"; + case PT_PHDR: return "PHDR"; + + default: + if ((p_type >= PT_LOPROC) && (p_type <= PT_HIPROC)) + { + const char * result; + + switch (elf_header.e_machine) + { + case EM_MIPS: + case EM_MIPS_RS4_BE: + result = get_mips_segment_type (p_type); + break; + case EM_PARISC: + result = get_parisc_segment_type (p_type); + break; + default: + result = NULL; + break; + } + + if (result != NULL) + return result; + + sprintf (buff, "LOPROC+%lx", p_type - PT_LOPROC); + } + else if ((p_type >= PT_LOOS) && (p_type <= PT_HIOS)) + { + const char * result; + + switch (elf_header.e_machine) + { + case EM_PARISC: + result = get_parisc_segment_type (p_type); + break; + default: + result = NULL; + break; + } + + if (result != NULL) + return result; + + sprintf (buff, "LOOS+%lx", p_type - PT_LOOS); + } + else + sprintf (buff, _("<unknown>: %lx"), p_type); + + return buff; + } +} + +static const char * +get_mips_section_type_name (sh_type) + unsigned int sh_type; +{ + switch (sh_type) + { + case SHT_MIPS_LIBLIST: return "MIPS_LIBLIST"; + case SHT_MIPS_MSYM: return "MIPS_MSYM"; + case SHT_MIPS_CONFLICT: return "MIPS_CONFLICT"; + case SHT_MIPS_GPTAB: return "MIPS_GPTAB"; + case SHT_MIPS_UCODE: return "MIPS_UCODE"; + case SHT_MIPS_DEBUG: return "MIPS_DEBUG"; + case SHT_MIPS_REGINFO: return "MIPS_REGINFO"; + case SHT_MIPS_PACKAGE: return "MIPS_PACKAGE"; + case SHT_MIPS_PACKSYM: return "MIPS_PACKSYM"; + case SHT_MIPS_RELD: return "MIPS_RELD"; + case SHT_MIPS_IFACE: return "MIPS_IFACE"; + case SHT_MIPS_CONTENT: return "MIPS_CONTENT"; + case SHT_MIPS_OPTIONS: return "MIPS_OPTIONS"; + case SHT_MIPS_SHDR: return "MIPS_SHDR"; + case SHT_MIPS_FDESC: return "MIPS_FDESC"; + case SHT_MIPS_EXTSYM: return "MIPS_EXTSYM"; + case SHT_MIPS_DENSE: return "MIPS_DENSE"; + case SHT_MIPS_PDESC: return "MIPS_PDESC"; + case SHT_MIPS_LOCSYM: return "MIPS_LOCSYM"; + case SHT_MIPS_AUXSYM: return "MIPS_AUXSYM"; + case SHT_MIPS_OPTSYM: return "MIPS_OPTSYM"; + case SHT_MIPS_LOCSTR: return "MIPS_LOCSTR"; + case SHT_MIPS_LINE: return "MIPS_LINE"; + case SHT_MIPS_RFDESC: return "MIPS_RFDESC"; + case SHT_MIPS_DELTASYM: return "MIPS_DELTASYM"; + case SHT_MIPS_DELTAINST: return "MIPS_DELTAINST"; + case SHT_MIPS_DELTACLASS: return "MIPS_DELTACLASS"; + case SHT_MIPS_DWARF: return "MIPS_DWARF"; + case SHT_MIPS_DELTADECL: return "MIPS_DELTADECL"; + case SHT_MIPS_SYMBOL_LIB: return "MIPS_SYMBOL_LIB"; + case SHT_MIPS_EVENTS: return "MIPS_EVENTS"; + case SHT_MIPS_TRANSLATE: return "MIPS_TRANSLATE"; + case SHT_MIPS_PIXIE: return "MIPS_PIXIE"; + case SHT_MIPS_XLATE: return "MIPS_XLATE"; + case SHT_MIPS_XLATE_DEBUG: return "MIPS_XLATE_DEBUG"; + case SHT_MIPS_WHIRL: return "MIPS_WHIRL"; + case SHT_MIPS_EH_REGION: return "MIPS_EH_REGION"; + case SHT_MIPS_XLATE_OLD: return "MIPS_XLATE_OLD"; + case SHT_MIPS_PDR_EXCEPTION: return "MIPS_PDR_EXCEPTION"; + default: + break; + } + return NULL; +} + +static const char * +get_parisc_section_type_name (sh_type) + unsigned int sh_type; +{ + switch (sh_type) + { + case SHT_PARISC_EXT: return "PARISC_EXT"; + case SHT_PARISC_UNWIND: return "PARISC_UNWIND"; + case SHT_PARISC_DOC: return "PARISC_DOC"; + default: + break; + } + return NULL; +} + +static const char * +get_section_type_name (sh_type) + unsigned int sh_type; +{ + static char buff [32]; + + switch (sh_type) + { + case SHT_NULL: return "NULL"; + case SHT_PROGBITS: return "PROGBITS"; + case SHT_SYMTAB: return "SYMTAB"; + case SHT_STRTAB: return "STRTAB"; + case SHT_RELA: return "RELA"; + case SHT_HASH: return "HASH"; + case SHT_DYNAMIC: return "DYNAMIC"; + case SHT_NOTE: return "NOTE"; + case SHT_NOBITS: return "NOBITS"; + case SHT_REL: return "REL"; + case SHT_SHLIB: return "SHLIB"; + case SHT_DYNSYM: return "DYNSYM"; + case SHT_INIT_ARRAY: return "INIT_ARRAY"; + case SHT_FINI_ARRAY: return "FINI_ARRAY"; + case SHT_PREINIT_ARRAY: return "PREINIT_ARRAY"; + case SHT_GNU_verdef: return "VERDEF"; + case SHT_GNU_verneed: return "VERNEED"; + case SHT_GNU_versym: return "VERSYM"; + case 0x6ffffff0: return "VERSYM"; + case 0x6ffffffc: return "VERDEF"; + case 0x7ffffffd: return "AUXILIARY"; + case 0x7fffffff: return "FILTER"; + + default: + if ((sh_type >= SHT_LOPROC) && (sh_type <= SHT_HIPROC)) + { + const char * result; + + switch (elf_header.e_machine) + { + case EM_MIPS: + case EM_MIPS_RS4_BE: + result = get_mips_section_type_name (sh_type); + break; + case EM_PARISC: + result = get_parisc_section_type_name (sh_type); + break; + default: + result = NULL; + break; + } + + if (result != NULL) + return result; + + sprintf (buff, "SHT_LOPROC+%x", sh_type - SHT_LOPROC); + } + else if ((sh_type >= SHT_LOOS) && (sh_type <= SHT_HIOS)) + sprintf (buff, "SHT_LOOS+%x", sh_type - SHT_LOOS); + else if ((sh_type >= SHT_LOUSER) && (sh_type <= SHT_HIUSER)) + sprintf (buff, "SHT_LOUSER+%x", sh_type - SHT_LOUSER); + else + sprintf (buff, _("<unknown>: %x"), sh_type); + + return buff; + } +} + +struct option options [] = +{ + {"all", no_argument, 0, 'a'}, + {"file-header", no_argument, 0, 'h'}, + {"program-headers", no_argument, 0, 'l'}, + {"headers", no_argument, 0, 'e'}, + {"histogram", no_argument, 0, 'I'}, + {"segments", no_argument, 0, 'l'}, + {"sections", no_argument, 0, 'S'}, + {"section-headers", no_argument, 0, 'S'}, + {"symbols", no_argument, 0, 's'}, + {"syms", no_argument, 0, 's'}, + {"relocs", no_argument, 0, 'r'}, + {"notes", no_argument, 0, 'n'}, + {"dynamic", no_argument, 0, 'd'}, + {"arch-specific", no_argument, 0, 'A'}, + {"version-info", no_argument, 0, 'V'}, + {"use-dynamic", no_argument, 0, 'D'}, + {"hex-dump", required_argument, 0, 'x'}, + {"debug-dump", optional_argument, 0, 'w'}, +#ifdef SUPPORT_DISASSEMBLY + {"instruction-dump", required_argument, 0, 'i'}, +#endif + + {"version", no_argument, 0, 'v'}, + {"help", no_argument, 0, 'H'}, + {0, no_argument, 0, 0} +}; + +static void +usage () +{ + fprintf (stdout, _("Usage: readelf {options} elf-file(s)\n")); + fprintf (stdout, _(" Options are:\n")); + fprintf (stdout, _(" -a or --all Equivalent to: -h -l -S -s -r -d -V -A -I\n")); + fprintf (stdout, _(" -h or --file-header Display the ELF file header\n")); + fprintf (stdout, _(" -l or --program-headers or --segments\n")); + fprintf (stdout, _(" Display the program headers\n")); + fprintf (stdout, _(" -S or --section-headers or --sections\n")); + fprintf (stdout, _(" Display the sections' header\n")); + fprintf (stdout, _(" -e or --headers Equivalent to: -h -l -S\n")); + fprintf (stdout, _(" -s or --syms or --symbols Display the symbol table\n")); + fprintf (stdout, _(" -n or --notes Display the core notes (if present)\n")); + fprintf (stdout, _(" -r or --relocs Display the relocations (if present)\n")); + fprintf (stdout, _(" -d or --dynamic Display the dynamic segment (if present)\n")); + fprintf (stdout, _(" -V or --version-info Display the version sections (if present)\n")); + fprintf (stdout, _(" -A or --arch-specific Display architecture specific information (if any).\n")); + fprintf (stdout, _(" -D or --use-dynamic Use the dynamic section info when displaying symbols\n")); + fprintf (stdout, _(" -x <number> or --hex-dump=<number>\n")); + fprintf (stdout, _(" Dump the contents of section <number>\n")); + fprintf (stdout, _(" -w[liapr] or --debug-dump[=line,=info,=abbrev,=pubnames,=ranges]\n")); + fprintf (stdout, _(" Display the contents of DWARF2 debug sections\n")); +#ifdef SUPPORT_DISASSEMBLY + fprintf (stdout, _(" -i <number> or --instruction-dump=<number>\n")); + fprintf (stdout, _(" Disassemble the contents of section <number>\n")); +#endif + fprintf (stdout, _(" -I or --histogram Display histogram of bucket list lengths\n")); + fprintf (stdout, _(" -v or --version Display the version number of readelf\n")); + fprintf (stdout, _(" -H or --help Display this information\n")); + fprintf (stdout, _("Report bugs to %s\n"), REPORT_BUGS_TO); + + exit (0); +} + +static void +request_dump (section, type) + unsigned int section; + char type; +{ + if (section >= num_dump_sects) + { + char * new_dump_sects; + + new_dump_sects = (char *) calloc (section + 1, 1); + + if (new_dump_sects == NULL) + error (_("Out of memory allocating dump request table.")); + else + { + /* Copy current flag settings. */ + memcpy (new_dump_sects, dump_sects, num_dump_sects); + + free (dump_sects); + + dump_sects = new_dump_sects; + num_dump_sects = section + 1; + } + } + + if (dump_sects) + dump_sects [section] |= type; + + return; +} + +static void +parse_args (argc, argv) + int argc; + char ** argv; +{ + int c; + + if (argc < 2) + usage (); + + while ((c = getopt_long + (argc, argv, "ersahnldSDAIw::x:i:vV", options, NULL)) != EOF) + { + char * cp; + int section; + + switch (c) + { + case 0: + /* Long options. */ + break; + case 'H': + usage (); + break; + + case 'a': + do_syms ++; + do_reloc ++; + do_dynamic ++; + do_header ++; + do_sections ++; + do_segments ++; + do_version ++; + do_histogram ++; + do_arch ++; + do_notes ++; + break; + case 'e': + do_header ++; + do_sections ++; + do_segments ++; + break; + case 'A': + do_arch ++; + break; + case 'D': + do_using_dynamic ++; + break; + case 'r': + do_reloc ++; + break; + case 'h': + do_header ++; + break; + case 'l': + do_segments ++; + break; + case 's': + do_syms ++; + break; + case 'S': + do_sections ++; + break; + case 'd': + do_dynamic ++; + break; + case 'I': + do_histogram ++; + break; + case 'n': + do_notes ++; + break; + case 'x': + do_dump ++; + section = strtoul (optarg, & cp, 0); + if (! * cp && section >= 0) + { + request_dump (section, HEX_DUMP); + break; + } + goto oops; + case 'w': + do_dump ++; + if (optarg == 0) + do_debugging = 1; + else + { + do_debugging = 0; + switch (optarg[0]) + { + case 'i': + case 'I': + do_debug_info = 1; + break; + + case 'a': + case 'A': + do_debug_abbrevs = 1; + break; + + case 'l': + case 'L': + do_debug_lines = 1; + break; + + case 'p': + case 'P': + do_debug_pubnames = 1; + break; + + case 'r': + case 'R': + do_debug_aranges = 1; + break; + + default: + warn (_("Unrecognised debug option '%s'\n"), optarg); + break; + } + } + break; +#ifdef SUPPORT_DISASSEMBLY + case 'i': + do_dump ++; + section = strtoul (optarg, & cp, 0); + if (! * cp && section >= 0) + { + request_dump (section, DISASS_DUMP); + break; + } + goto oops; +#endif + case 'v': + print_version (program_name); + break; + case 'V': + do_version ++; + break; + default: + oops: + /* xgettext:c-format */ + error (_("Invalid option '-%c'\n"), c); + /* Drop through. */ + case '?': + usage (); + } + } + + if (!do_dynamic && !do_syms && !do_reloc && !do_sections + && !do_segments && !do_header && !do_dump && !do_version + && !do_histogram && !do_debugging && !do_arch && !do_notes) + usage (); + else if (argc < 3) + { + warn (_("Nothing to do.\n")); + usage(); + } +} + +static const char * +get_elf_class (elf_class) + unsigned char elf_class; +{ + static char buff [32]; + + switch (elf_class) + { + case ELFCLASSNONE: return _("none"); + case ELFCLASS32: return _("ELF32"); + case ELFCLASS64: return _("ELF64"); + default: + sprintf (buff, _("<unknown: %x>"), elf_class); + return buff; + } +} + +static const char * +get_data_encoding (encoding) + unsigned char encoding; +{ + static char buff [32]; + + switch (encoding) + { + case ELFDATANONE: return _("none"); + case ELFDATA2LSB: return _("2's complement, little endian"); + case ELFDATA2MSB: return _("2's complement, big endian"); + default: + sprintf (buff, _("<unknown: %x>"), encoding); + return buff; + } +} + +static const char * +get_osabi_name (osabi) + unsigned char osabi; +{ + static char buff [32]; + + switch (osabi) + { + case ELFOSABI_NONE: return _("UNIX - System V"); + case ELFOSABI_HPUX: return _("UNIX - HP-UX"); + case ELFOSABI_NETBSD: return _("UNIX - NetBSD"); + case ELFOSABI_LINUX: return _("UNIX - Linux"); + case ELFOSABI_HURD: return _("GNU/Hurd"); + case ELFOSABI_SOLARIS: return _("UNIX - Solaris"); + case ELFOSABI_MONTEREY: return _("UNIX - Monterey"); + case ELFOSABI_IRIX: return _("UNIX - IRIX"); + case ELFOSABI_FREEBSD: return _("UNIX - FreeBSD"); + case ELFOSABI_TRU64: return _("UNIX - TRU64"); + case ELFOSABI_MODESTO: return _("Novell - Modesto"); + case ELFOSABI_OPENBSD: return _("UNIX - OpenBSD"); + case ELFOSABI_STANDALONE: return _("Standalone App"); + case ELFOSABI_ARM: return _("ARM"); + default: + sprintf (buff, _("<unknown: %x>"), osabi); + return buff; + } +} + +/* Decode the data held in 'elf_header'. */ +static int +process_file_header () +{ + if ( elf_header.e_ident [EI_MAG0] != ELFMAG0 + || elf_header.e_ident [EI_MAG1] != ELFMAG1 + || elf_header.e_ident [EI_MAG2] != ELFMAG2 + || elf_header.e_ident [EI_MAG3] != ELFMAG3) + { + error + (_("Not an ELF file - it has the wrong magic bytes at the start\n")); + return 0; + } + + if (do_header) + { + int i; + + printf (_("ELF Header:\n")); + printf (_(" Magic: ")); + for (i = 0; i < EI_NIDENT; i ++) + printf ("%2.2x ", elf_header.e_ident [i]); + printf ("\n"); + printf (_(" Class: %s\n"), + get_elf_class (elf_header.e_ident [EI_CLASS])); + printf (_(" Data: %s\n"), + get_data_encoding (elf_header.e_ident [EI_DATA])); + printf (_(" Version: %d %s\n"), + elf_header.e_ident [EI_VERSION], + (elf_header.e_ident [EI_VERSION] == EV_CURRENT + ? "(current)" + : (elf_header.e_ident [EI_VERSION] != EV_NONE + ? "<unknown: %lx>" + : ""))); + printf (_(" OS/ABI: %s\n"), + get_osabi_name (elf_header.e_ident [EI_OSABI])); + printf (_(" ABI Version: %d\n"), + elf_header.e_ident [EI_ABIVERSION]); + printf (_(" Type: %s\n"), + get_file_type (elf_header.e_type)); + printf (_(" Machine: %s\n"), + get_machine_name (elf_header.e_machine)); + printf (_(" Version: 0x%lx\n"), + (unsigned long) elf_header.e_version); + + printf (_(" Entry point address: ")); + print_vma ((bfd_vma) elf_header.e_entry, PREFIX_HEX); + printf (_("\n Start of program headers: ")); + print_vma ((bfd_vma) elf_header.e_phoff, DEC); + printf (_(" (bytes into file)\n Start of section headers: ")); + print_vma ((bfd_vma) elf_header.e_shoff, DEC); + printf (_(" (bytes into file)\n")); + + printf (_(" Flags: 0x%lx%s\n"), + (unsigned long) elf_header.e_flags, + get_machine_flags (elf_header.e_flags, elf_header.e_machine)); + printf (_(" Size of this header: %ld (bytes)\n"), + (long) elf_header.e_ehsize); + printf (_(" Size of program headers: %ld (bytes)\n"), + (long) elf_header.e_phentsize); + printf (_(" Number of program headers: %ld\n"), + (long) elf_header.e_phnum); + printf (_(" Size of section headers: %ld (bytes)\n"), + (long) elf_header.e_shentsize); + printf (_(" Number of section headers: %ld\n"), + (long) elf_header.e_shnum); + printf (_(" Section header string table index: %ld\n"), + (long) elf_header.e_shstrndx); + } + + return 1; +} + + +static int +get_32bit_program_headers (file, program_headers) + FILE * file; + Elf_Internal_Phdr * program_headers; +{ + Elf32_External_Phdr * phdrs; + Elf32_External_Phdr * external; + Elf32_Internal_Phdr * internal; + unsigned int i; + + GET_DATA_ALLOC (elf_header.e_phoff, + elf_header.e_phentsize * elf_header.e_phnum, + phdrs, Elf32_External_Phdr *, "program headers"); + + for (i = 0, internal = program_headers, external = phdrs; + i < elf_header.e_phnum; + i ++, internal ++, external ++) + { + internal->p_type = BYTE_GET (external->p_type); + internal->p_offset = BYTE_GET (external->p_offset); + internal->p_vaddr = BYTE_GET (external->p_vaddr); + internal->p_paddr = BYTE_GET (external->p_paddr); + internal->p_filesz = BYTE_GET (external->p_filesz); + internal->p_memsz = BYTE_GET (external->p_memsz); + internal->p_flags = BYTE_GET (external->p_flags); + internal->p_align = BYTE_GET (external->p_align); + } + + free (phdrs); + + return 1; +} + +static int +get_64bit_program_headers (file, program_headers) + FILE * file; + Elf_Internal_Phdr * program_headers; +{ + Elf64_External_Phdr * phdrs; + Elf64_External_Phdr * external; + Elf64_Internal_Phdr * internal; + unsigned int i; + + GET_DATA_ALLOC (elf_header.e_phoff, + elf_header.e_phentsize * elf_header.e_phnum, + phdrs, Elf64_External_Phdr *, "program headers"); + + for (i = 0, internal = program_headers, external = phdrs; + i < elf_header.e_phnum; + i ++, internal ++, external ++) + { + internal->p_type = BYTE_GET (external->p_type); + internal->p_flags = BYTE_GET (external->p_flags); + internal->p_offset = BYTE_GET8 (external->p_offset); + internal->p_vaddr = BYTE_GET8 (external->p_vaddr); + internal->p_paddr = BYTE_GET8 (external->p_paddr); + internal->p_filesz = BYTE_GET8 (external->p_filesz); + internal->p_memsz = BYTE_GET8 (external->p_memsz); + internal->p_align = BYTE_GET8 (external->p_align); + } + + free (phdrs); + + return 1; +} + +static int +process_program_headers (file) + FILE * file; +{ + Elf_Internal_Phdr * program_headers; + Elf_Internal_Phdr * segment; + unsigned int i; + + if (elf_header.e_phnum == 0) + { + if (do_segments) + printf (_("\nThere are no program headers in this file.\n")); + return 1; + } + + if (do_segments && !do_header) + { + printf (_("\nElf file type is %s\n"), get_file_type (elf_header.e_type)); + printf (_("Entry point ")); + print_vma ((bfd_vma) elf_header.e_entry, PREFIX_HEX); + printf (_("\nThere are %d program headers, starting at offset "), + elf_header.e_phnum); + print_vma ((bfd_vma) elf_header.e_phoff, DEC); + printf ("\n"); + } + + program_headers = (Elf_Internal_Phdr *) malloc + (elf_header.e_phnum * sizeof (Elf_Internal_Phdr)); + + if (program_headers == NULL) + { + error (_("Out of memory\n")); + return 0; + } + + if (is_32bit_elf) + i = get_32bit_program_headers (file, program_headers); + else + i = get_64bit_program_headers (file, program_headers); + + if (i == 0) + { + free (program_headers); + return 0; + } + + if (do_segments) + { + printf + (_("\nProgram Header%s:\n"), elf_header.e_phnum > 1 ? "s" : ""); + + if (is_32bit_elf) + printf + (_(" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n")); + else + { + printf + (_(" Type Offset VirtAddr PhysAddr\n")); + printf + (_(" FileSiz MemSiz Flags Align\n")); + } + } + + loadaddr = -1; + dynamic_addr = 0; + dynamic_size = 0; + + for (i = 0, segment = program_headers; + i < elf_header.e_phnum; + i ++, segment ++) + { + if (do_segments) + { + printf (" %-14.14s ", get_segment_type (segment->p_type)); + + if (is_32bit_elf) + { + printf ("0x%6.6lx ", (unsigned long) segment->p_offset); + printf ("0x%8.8lx ", (unsigned long) segment->p_vaddr); + printf ("0x%8.8lx ", (unsigned long) segment->p_paddr); + printf ("0x%5.5lx ", (unsigned long) segment->p_filesz); + printf ("0x%5.5lx ", (unsigned long) segment->p_memsz); + printf ("%c%c%c ", + (segment->p_flags & PF_R ? 'R' : ' '), + (segment->p_flags & PF_W ? 'W' : ' '), + (segment->p_flags & PF_X ? 'E' : ' ')); + printf ("%#lx", (unsigned long) segment->p_align); + } + else + { + print_vma (segment->p_offset, FULL_HEX); + putchar (' '); + print_vma (segment->p_vaddr, FULL_HEX); + putchar (' '); + print_vma (segment->p_paddr, FULL_HEX); + printf ("\n "); + print_vma (segment->p_filesz, FULL_HEX); + putchar (' '); + print_vma (segment->p_memsz, FULL_HEX); + printf (" %c%c%c ", + (segment->p_flags & PF_R ? 'R' : ' '), + (segment->p_flags & PF_W ? 'W' : ' '), + (segment->p_flags & PF_X ? 'E' : ' ')); + print_vma (segment->p_align, HEX); + } + } + + switch (segment->p_type) + { + case PT_LOAD: + if (loadaddr == -1) + loadaddr = (segment->p_vaddr & 0xfffff000) + - (segment->p_offset & 0xfffff000); + break; + + case PT_DYNAMIC: + if (dynamic_addr) + error (_("more than one dynamic segment\n")); + + dynamic_addr = segment->p_offset; + dynamic_size = segment->p_filesz; + break; + + case PT_INTERP: + if (fseek (file, (long) segment->p_offset, SEEK_SET)) + error (_("Unable to find program interpreter name\n")); + else + { + program_interpreter[0] = 0; + fscanf (file, "%63s", program_interpreter); + + if (do_segments) + printf (_("\n [Requesting program interpreter: %s]"), + program_interpreter); + } + break; + } + + if (do_segments) + putc ('\n', stdout); + } + + if (loadaddr == -1) + { + /* Very strange. */ + loadaddr = 0; + } + + if (do_segments && section_headers != NULL) + { + printf (_("\n Section to Segment mapping:\n")); + printf (_(" Segment Sections...\n")); + + assert (string_table != NULL); + + for (i = 0; i < elf_header.e_phnum; i++) + { + int j; + Elf_Internal_Shdr * section; + + segment = program_headers + i; + section = section_headers; + + printf (" %2.2d ", i); + + for (j = 0; j < elf_header.e_shnum; j++, section ++) + { + if (section->sh_size > 0 + /* Compare allocated sections by VMA, unallocated + sections by file offset. */ + && (section->sh_flags & SHF_ALLOC + ? (section->sh_addr >= segment->p_vaddr + && section->sh_addr + section->sh_size + <= segment->p_vaddr + segment->p_memsz) + : ((bfd_vma) section->sh_offset >= segment->p_offset + && (section->sh_offset + section->sh_size + <= segment->p_offset + segment->p_filesz)))) + printf ("%s ", SECTION_NAME (section)); + } + + putc ('\n',stdout); + } + } + + free (program_headers); + + return 1; +} + + +static int +get_32bit_section_headers (file) + FILE * file; +{ + Elf32_External_Shdr * shdrs; + Elf32_Internal_Shdr * internal; + unsigned int i; + + GET_DATA_ALLOC (elf_header.e_shoff, + elf_header.e_shentsize * elf_header.e_shnum, + shdrs, Elf32_External_Shdr *, "section headers"); + + section_headers = (Elf_Internal_Shdr *) malloc + (elf_header.e_shnum * sizeof (Elf_Internal_Shdr)); + + if (section_headers == NULL) + { + error (_("Out of memory\n")); + return 0; + } + + for (i = 0, internal = section_headers; + i < elf_header.e_shnum; + i ++, internal ++) + { + internal->sh_name = BYTE_GET (shdrs[i].sh_name); + internal->sh_type = BYTE_GET (shdrs[i].sh_type); + internal->sh_flags = BYTE_GET (shdrs[i].sh_flags); + internal->sh_addr = BYTE_GET (shdrs[i].sh_addr); + internal->sh_offset = BYTE_GET (shdrs[i].sh_offset); + internal->sh_size = BYTE_GET (shdrs[i].sh_size); + internal->sh_link = BYTE_GET (shdrs[i].sh_link); + internal->sh_info = BYTE_GET (shdrs[i].sh_info); + internal->sh_addralign = BYTE_GET (shdrs[i].sh_addralign); + internal->sh_entsize = BYTE_GET (shdrs[i].sh_entsize); + } + + free (shdrs); + + return 1; +} + +static int +get_64bit_section_headers (file) + FILE * file; +{ + Elf64_External_Shdr * shdrs; + Elf64_Internal_Shdr * internal; + unsigned int i; + + GET_DATA_ALLOC (elf_header.e_shoff, + elf_header.e_shentsize * elf_header.e_shnum, + shdrs, Elf64_External_Shdr *, "section headers"); + + section_headers = (Elf_Internal_Shdr *) malloc + (elf_header.e_shnum * sizeof (Elf_Internal_Shdr)); + + if (section_headers == NULL) + { + error (_("Out of memory\n")); + return 0; + } + + for (i = 0, internal = section_headers; + i < elf_header.e_shnum; + i ++, internal ++) + { + internal->sh_name = BYTE_GET (shdrs[i].sh_name); + internal->sh_type = BYTE_GET (shdrs[i].sh_type); + internal->sh_flags = BYTE_GET8 (shdrs[i].sh_flags); + internal->sh_addr = BYTE_GET8 (shdrs[i].sh_addr); + internal->sh_size = BYTE_GET8 (shdrs[i].sh_size); + internal->sh_entsize = BYTE_GET8 (shdrs[i].sh_entsize); + internal->sh_link = BYTE_GET (shdrs[i].sh_link); + internal->sh_info = BYTE_GET (shdrs[i].sh_info); + internal->sh_offset = BYTE_GET (shdrs[i].sh_offset); + internal->sh_addralign = BYTE_GET (shdrs[i].sh_addralign); + } + + free (shdrs); + + return 1; +} + +static Elf_Internal_Sym * +get_32bit_elf_symbols (file, offset, number) + FILE * file; + unsigned long offset; + unsigned long number; +{ + Elf32_External_Sym * esyms; + Elf_Internal_Sym * isyms; + Elf_Internal_Sym * psym; + unsigned int j; + + GET_DATA_ALLOC (offset, number * sizeof (Elf32_External_Sym), + esyms, Elf32_External_Sym *, "symbols"); + + isyms = (Elf_Internal_Sym *) malloc (number * sizeof (Elf_Internal_Sym)); + + if (isyms == NULL) + { + error (_("Out of memory\n")); + free (esyms); + + return NULL; + } + + for (j = 0, psym = isyms; + j < number; + j ++, psym ++) + { + psym->st_name = BYTE_GET (esyms[j].st_name); + psym->st_value = BYTE_GET (esyms[j].st_value); + psym->st_size = BYTE_GET (esyms[j].st_size); + psym->st_shndx = BYTE_GET (esyms[j].st_shndx); + psym->st_info = BYTE_GET (esyms[j].st_info); + psym->st_other = BYTE_GET (esyms[j].st_other); + } + + free (esyms); + + return isyms; +} + +static Elf_Internal_Sym * +get_64bit_elf_symbols (file, offset, number) + FILE * file; + unsigned long offset; + unsigned long number; +{ + Elf64_External_Sym * esyms; + Elf_Internal_Sym * isyms; + Elf_Internal_Sym * psym; + unsigned int j; + + GET_DATA_ALLOC (offset, number * sizeof (Elf64_External_Sym), + esyms, Elf64_External_Sym *, "symbols"); + + isyms = (Elf_Internal_Sym *) malloc (number * sizeof (Elf_Internal_Sym)); + + if (isyms == NULL) + { + error (_("Out of memory\n")); + free (esyms); + + return NULL; + } + + for (j = 0, psym = isyms; + j < number; + j ++, psym ++) + { + psym->st_name = BYTE_GET (esyms[j].st_name); + psym->st_info = BYTE_GET (esyms[j].st_info); + psym->st_other = BYTE_GET (esyms[j].st_other); + psym->st_shndx = BYTE_GET (esyms[j].st_shndx); + psym->st_value = BYTE_GET8 (esyms[j].st_value); + psym->st_size = BYTE_GET8 (esyms[j].st_size); + } + + free (esyms); + + return isyms; +} + +static const char * +get_elf_section_flags (sh_flags) + bfd_vma sh_flags; +{ + static char buff [32]; + + * buff = 0; + + while (sh_flags) + { + bfd_vma flag; + + flag = sh_flags & - sh_flags; + sh_flags &= ~ flag; + + switch (flag) + { + case SHF_WRITE: strcat (buff, "W"); break; + case SHF_ALLOC: strcat (buff, "A"); break; + case SHF_EXECINSTR: strcat (buff, "X"); break; + case SHF_MERGE: strcat (buff, "M"); break; + case SHF_STRINGS: strcat (buff, "S"); break; + case SHF_INFO_LINK: strcat (buff, "I"); break; + case SHF_LINK_ORDER: strcat (buff, "L"); break; + case SHF_OS_NONCONFORMING: strcat (buff, "O"); break; + + default: + if (flag & SHF_MASKOS) + { + strcat (buff, "o"); + sh_flags &= ~ SHF_MASKOS; + } + else if (flag & SHF_MASKPROC) + { + strcat (buff, "p"); + sh_flags &= ~ SHF_MASKPROC; + } + else + strcat (buff, "x"); + break; + } + } + + return buff; +} + +static int +process_section_headers (file) + FILE * file; +{ + Elf_Internal_Shdr * section; + int i; + + section_headers = NULL; + + if (elf_header.e_shnum == 0) + { + if (do_sections) + printf (_("\nThere are no sections in this file.\n")); + + return 1; + } + + if (do_sections && !do_header) + printf (_("There are %d section headers, starting at offset 0x%lx:\n"), + elf_header.e_shnum, (unsigned long) elf_header.e_shoff); + + if (is_32bit_elf) + { + if (! get_32bit_section_headers (file)) + return 0; + } + else if (! get_64bit_section_headers (file)) + return 0; + + /* Read in the string table, so that we have names to display. */ + section = section_headers + elf_header.e_shstrndx; + + if (section->sh_size != 0) + { + unsigned long string_table_offset; + + string_table_offset = section->sh_offset; + + GET_DATA_ALLOC (section->sh_offset, section->sh_size, + string_table, char *, "string table"); + } + + /* Scan the sections for the dynamic symbol table + and dynamic string table and debug sections. */ + dynamic_symbols = NULL; + dynamic_strings = NULL; + dynamic_syminfo = NULL; + + for (i = 0, section = section_headers; + i < elf_header.e_shnum; + i ++, section ++) + { + char * name = SECTION_NAME (section); + + if (section->sh_type == SHT_DYNSYM) + { + if (dynamic_symbols != NULL) + { + error (_("File contains multiple dynamic symbol tables\n")); + continue; + } + + num_dynamic_syms = section->sh_size / section->sh_entsize; + dynamic_symbols = + GET_ELF_SYMBOLS (file, section->sh_offset, num_dynamic_syms); + } + else if (section->sh_type == SHT_STRTAB + && strcmp (name, ".dynstr") == 0) + { + if (dynamic_strings != NULL) + { + error (_("File contains multiple dynamic string tables\n")); + continue; + } + + GET_DATA_ALLOC (section->sh_offset, section->sh_size, + dynamic_strings, char *, "dynamic strings"); + } + else if ((do_debugging || do_debug_info || do_debug_abbrevs + || do_debug_lines || do_debug_pubnames || do_debug_aranges) + && strncmp (name, ".debug_", 7) == 0) + { + name += 7; + + if (do_debugging + || (do_debug_info && (strcmp (name, "info") == 0)) + || (do_debug_abbrevs && (strcmp (name, "abbrev") == 0)) + || (do_debug_lines && (strcmp (name, "line") == 0)) + || (do_debug_pubnames && (strcmp (name, "pubnames") == 0)) + || (do_debug_aranges && (strcmp (name, "aranges") == 0)) + ) + request_dump (i, DEBUG_DUMP); + } + } + + if (! do_sections) + return 1; + + printf (_("\nSection Header%s:\n"), elf_header.e_shnum > 1 ? "s" : ""); + + if (is_32bit_elf) + printf + (_(" [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n")); + else + { + printf (_(" [Nr] Name Type Address Offset\n")); + printf (_(" Size EntSize Flags Link Info Align\n")); + } + + for (i = 0, section = section_headers; + i < elf_header.e_shnum; + i ++, section ++) + { + printf (" [%2d] %-17.17s %-15.15s ", + i, + SECTION_NAME (section), + get_section_type_name (section->sh_type)); + + if (is_32bit_elf) + { + print_vma (section->sh_addr, LONG_HEX); + + printf ( " %6.6lx %6.6lx %2.2lx", + (unsigned long) section->sh_offset, + (unsigned long) section->sh_size, + (unsigned long) section->sh_entsize); + + printf (" %3s ", get_elf_section_flags (section->sh_flags)); + + printf (" %2ld %3lx %ld\n", + (unsigned long) section->sh_link, + (unsigned long) section->sh_info, + (unsigned long) section->sh_addralign); + } + else + { + putchar (' '); + print_vma (section->sh_addr, LONG_HEX); + printf (" %8.8lx", section->sh_offset); + printf ("\n "); + print_vma (section->sh_size, LONG_HEX); + printf (" "); + print_vma (section->sh_entsize, LONG_HEX); + + printf (" %3s ", get_elf_section_flags (section->sh_flags)); + + printf (" %2ld %3lx %ld\n", + (unsigned long) section->sh_link, + (unsigned long) section->sh_info, + (unsigned long) section->sh_addralign); + } + } + + printf (_("Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings)\n")); + printf (_(" I (info), L (link order), O (extra OS processing required)\n")); + printf (_(" o (os specific), p (processor specific) x (unknown)\n")); + + return 1; +} + +/* Process the reloc section. */ +static int +process_relocs (file) + FILE * file; +{ + unsigned long rel_size; + unsigned long rel_offset; + + + if (!do_reloc) + return 1; + + if (do_using_dynamic) + { + int is_rela = FALSE; + + rel_size = 0; + rel_offset = 0; + + if (dynamic_info[DT_REL]) + { + rel_offset = dynamic_info[DT_REL]; + rel_size = dynamic_info[DT_RELSZ]; + is_rela = FALSE; + } + else if (dynamic_info [DT_RELA]) + { + rel_offset = dynamic_info[DT_RELA]; + rel_size = dynamic_info[DT_RELASZ]; + is_rela = TRUE; + } + else if (dynamic_info[DT_JMPREL]) + { + rel_offset = dynamic_info[DT_JMPREL]; + rel_size = dynamic_info[DT_PLTRELSZ]; + + switch (dynamic_info[DT_PLTREL]) + { + case DT_REL: + is_rela = FALSE; + break; + case DT_RELA: + is_rela = TRUE; + break; + default: + is_rela = UNKNOWN; + break; + } + } + + if (rel_size) + { + printf + (_("\nRelocation section at offset 0x%lx contains %ld bytes:\n"), + rel_offset, rel_size); + + dump_relocations (file, rel_offset - loadaddr, rel_size, + dynamic_symbols, num_dynamic_syms, dynamic_strings, is_rela); + } + else + printf (_("\nThere are no dynamic relocations in this file.\n")); + } + else + { + Elf32_Internal_Shdr * section; + unsigned long i; + int found = 0; + + for (i = 0, section = section_headers; + i < elf_header.e_shnum; + i++, section ++) + { + if ( section->sh_type != SHT_RELA + && section->sh_type != SHT_REL) + continue; + + rel_offset = section->sh_offset; + rel_size = section->sh_size; + + if (rel_size) + { + Elf32_Internal_Shdr * strsec; + Elf32_Internal_Shdr * symsec; + Elf_Internal_Sym * symtab; + char * strtab; + int is_rela; + unsigned long nsyms; + + printf (_("\nRelocation section ")); + + if (string_table == NULL) + printf ("%d", section->sh_name); + else + printf ("'%s'", SECTION_NAME (section)); + + printf (_(" at offset 0x%lx contains %lu entries:\n"), + rel_offset, (unsigned long) (rel_size / section->sh_entsize)); + + symsec = section_headers + section->sh_link; + + nsyms = symsec->sh_size / symsec->sh_entsize; + symtab = GET_ELF_SYMBOLS (file, symsec->sh_offset, nsyms); + + if (symtab == NULL) + continue; + + strsec = section_headers + symsec->sh_link; + + GET_DATA_ALLOC (strsec->sh_offset, strsec->sh_size, strtab, + char *, "string table"); + + is_rela = section->sh_type == SHT_RELA; + + dump_relocations (file, rel_offset, rel_size, symtab, nsyms, strtab, is_rela); + + free (strtab); + free (symtab); + + found = 1; + } + } + + if (! found) + printf (_("\nThere are no relocations in this file.\n")); + } + + return 1; +} + + +static void +dynamic_segment_mips_val (entry) + Elf_Internal_Dyn * entry; +{ + switch (entry->d_tag) + { + case DT_MIPS_FLAGS: + if (entry->d_un.d_val == 0) + printf ("NONE\n"); + else + { + static const char * opts[] = + { + "QUICKSTART", "NOTPOT", "NO_LIBRARY_REPLACEMENT", + "NO_MOVE", "SGI_ONLY", "GUARANTEE_INIT", "DELTA_C_PLUS_PLUS", + "GUARANTEE_START_INIT", "PIXIE", "DEFAULT_DELAY_LOAD", + "REQUICKSTART", "REQUICKSTARTED", "CORD", "NO_UNRES_UNDEF", + "RLD_ORDER_SAFE" + }; + unsigned int cnt; + int first = 1; + for (cnt = 0; cnt < NUM_ELEM (opts); ++ cnt) + if (entry->d_un.d_val & (1 << cnt)) + { + printf ("%s%s", first ? "" : " ", opts[cnt]); + first = 0; + } + puts (""); + } + break; + + case DT_MIPS_IVERSION: + if (dynamic_strings != NULL) + printf ("Interface Version: %s\n", + dynamic_strings + entry->d_un.d_val); + else + printf ("%ld\n", (long) entry->d_un.d_ptr); + break; + + case DT_MIPS_TIME_STAMP: + { + char timebuf[20]; + struct tm * tmp; + + time_t time = entry->d_un.d_val; + tmp = gmtime (&time); + sprintf (timebuf, "%04u-%02u-%02uT%02u:%02u:%02u", + tmp->tm_year + 1900, tmp->tm_mon + 1, tmp->tm_mday, + tmp->tm_hour, tmp->tm_min, tmp->tm_sec); + printf ("Time Stamp: %s\n", timebuf); + } + break; + + case DT_MIPS_RLD_VERSION: + case DT_MIPS_LOCAL_GOTNO: + case DT_MIPS_CONFLICTNO: + case DT_MIPS_LIBLISTNO: + case DT_MIPS_SYMTABNO: + case DT_MIPS_UNREFEXTNO: + case DT_MIPS_HIPAGENO: + case DT_MIPS_DELTA_CLASS_NO: + case DT_MIPS_DELTA_INSTANCE_NO: + case DT_MIPS_DELTA_RELOC_NO: + case DT_MIPS_DELTA_SYM_NO: + case DT_MIPS_DELTA_CLASSSYM_NO: + case DT_MIPS_COMPACT_SIZE: + printf ("%ld\n", (long) entry->d_un.d_ptr); + break; + + default: + printf ("%#lx\n", (long) entry->d_un.d_ptr); + } +} + + +static void +dynamic_segment_parisc_val (entry) + Elf_Internal_Dyn * entry; +{ + switch (entry->d_tag) + { + case DT_HP_DLD_FLAGS: + { + static struct + { + long int bit; + const char * str; + } + flags[] = + { + { DT_HP_DEBUG_PRIVATE, "HP_DEBUG_PRIVATE" }, + { DT_HP_DEBUG_CALLBACK, "HP_DEBUG_CALLBACK" }, + { DT_HP_DEBUG_CALLBACK_BOR, "HP_DEBUG_CALLBACK_BOR" }, + { DT_HP_NO_ENVVAR, "HP_NO_ENVVAR" }, + { DT_HP_BIND_NOW, "HP_BIND_NOW" }, + { DT_HP_BIND_NONFATAL, "HP_BIND_NONFATAL" }, + { DT_HP_BIND_VERBOSE, "HP_BIND_VERBOSE" }, + { DT_HP_BIND_RESTRICTED, "HP_BIND_RESTRICTED" }, + { DT_HP_BIND_SYMBOLIC, "HP_BIND_SYMBOLIC" }, + { DT_HP_RPATH_FIRST, "HP_RPATH_FIRST" }, + { DT_HP_BIND_DEPTH_FIRST, "HP_BIND_DEPTH_FIRST" } + }; + int first = 1; + size_t cnt; + bfd_vma val = entry->d_un.d_val; + + for (cnt = 0; cnt < sizeof (flags) / sizeof (flags[0]); ++cnt) + if (val & flags[cnt].bit) + { + if (! first) + putchar (' '); + fputs (flags[cnt].str, stdout); + first = 0; + val ^= flags[cnt].bit; + } + + if (val != 0 || first) + { + if (! first) + putchar (' '); + print_vma (val, HEX); + } + } + break; + + default: + print_vma (entry->d_un.d_ptr, PREFIX_HEX); + break; + } +} + +static int +get_32bit_dynamic_segment (file) + FILE * file; +{ + Elf32_External_Dyn * edyn; + Elf_Internal_Dyn * entry; + bfd_size_type i; + + GET_DATA_ALLOC (dynamic_addr, dynamic_size, + edyn, Elf32_External_Dyn *, "dynamic segment"); + + /* SGI's ELF has more than one section in the DYNAMIC segment. Determine + how large this .dynamic is now. We can do this even before the byte + swapping since the DT_NULL tag is recognizable. */ + dynamic_size = 0; + while (*(Elf32_Word *) edyn [dynamic_size++].d_tag != DT_NULL) + ; + + dynamic_segment = (Elf_Internal_Dyn *) + malloc (dynamic_size * sizeof (Elf_Internal_Dyn)); + + if (dynamic_segment == NULL) + { + error (_("Out of memory\n")); + free (edyn); + return 0; + } + + for (i = 0, entry = dynamic_segment; + i < dynamic_size; + i ++, entry ++) + { + entry->d_tag = BYTE_GET (edyn [i].d_tag); + entry->d_un.d_val = BYTE_GET (edyn [i].d_un.d_val); + } + + free (edyn); + + return 1; +} + +static int +get_64bit_dynamic_segment (file) + FILE * file; +{ + Elf64_External_Dyn * edyn; + Elf_Internal_Dyn * entry; + bfd_size_type i; + + GET_DATA_ALLOC (dynamic_addr, dynamic_size, + edyn, Elf64_External_Dyn *, "dynamic segment"); + + /* SGI's ELF has more than one section in the DYNAMIC segment. Determine + how large this .dynamic is now. We can do this even before the byte + swapping since the DT_NULL tag is recognizable. */ + dynamic_size = 0; + while (*(bfd_vma *) edyn [dynamic_size ++].d_tag != DT_NULL) + ; + + dynamic_segment = (Elf_Internal_Dyn *) + malloc (dynamic_size * sizeof (Elf_Internal_Dyn)); + + if (dynamic_segment == NULL) + { + error (_("Out of memory\n")); + free (edyn); + return 0; + } + + for (i = 0, entry = dynamic_segment; + i < dynamic_size; + i ++, entry ++) + { + entry->d_tag = BYTE_GET8 (edyn [i].d_tag); + entry->d_un.d_val = BYTE_GET8 (edyn [i].d_un.d_val); + } + + free (edyn); + + return 1; +} + +static const char * +get_dynamic_flags (flags) + bfd_vma flags; +{ + static char buff [64]; + while (flags) + { + bfd_vma flag; + + flag = flags & - flags; + flags &= ~ flag; + + switch (flag) + { + case DF_ORIGIN: strcat (buff, "ORIGIN "); break; + case DF_SYMBOLIC: strcat (buff, "SYMBOLIC "); break; + case DF_TEXTREL: strcat (buff, "TEXTREL "); break; + case DF_BIND_NOW: strcat (buff, "BIND_NOW "); break; + default: strcat (buff, "unknown "); break; + } + } + return buff; +} + +/* Parse and display the contents of the dynamic segment. */ +static int +process_dynamic_segment (file) + FILE * file; +{ + Elf_Internal_Dyn * entry; + bfd_size_type i; + + if (dynamic_size == 0) + { + if (do_dynamic) + printf (_("\nThere is no dynamic segment in this file.\n")); + + return 1; + } + + if (is_32bit_elf) + { + if (! get_32bit_dynamic_segment (file)) + return 0; + } + else if (! get_64bit_dynamic_segment (file)) + return 0; + + /* Find the appropriate symbol table. */ + if (dynamic_symbols == NULL) + { + for (i = 0, entry = dynamic_segment; + i < dynamic_size; + ++i, ++ entry) + { + unsigned long offset; + + if (entry->d_tag != DT_SYMTAB) + continue; + + dynamic_info[DT_SYMTAB] = entry->d_un.d_val; + + /* Since we do not know how big the symbol table is, + we default to reading in the entire file (!) and + processing that. This is overkill, I know, but it + should work. */ + offset = entry->d_un.d_val - loadaddr; + + if (fseek (file, 0, SEEK_END)) + error (_("Unable to seek to end of file!")); + + if (is_32bit_elf) + num_dynamic_syms = (ftell (file) - offset) / sizeof (Elf32_External_Sym); + else + num_dynamic_syms = (ftell (file) - offset) / sizeof (Elf64_External_Sym); + + if (num_dynamic_syms < 1) + { + error (_("Unable to determine the number of symbols to load\n")); + continue; + } + + dynamic_symbols = GET_ELF_SYMBOLS (file, offset, num_dynamic_syms); + } + } + + /* Similarly find a string table. */ + if (dynamic_strings == NULL) + { + for (i = 0, entry = dynamic_segment; + i < dynamic_size; + ++i, ++ entry) + { + unsigned long offset; + long str_tab_len; + + if (entry->d_tag != DT_STRTAB) + continue; + + dynamic_info[DT_STRTAB] = entry->d_un.d_val; + + /* Since we do not know how big the string table is, + we default to reading in the entire file (!) and + processing that. This is overkill, I know, but it + should work. */ + + offset = entry->d_un.d_val - loadaddr; + if (fseek (file, 0, SEEK_END)) + error (_("Unable to seek to end of file\n")); + str_tab_len = ftell (file) - offset; + + if (str_tab_len < 1) + { + error + (_("Unable to determine the length of the dynamic string table\n")); + continue; + } + + GET_DATA_ALLOC (offset, str_tab_len, dynamic_strings, char *, + "dynamic string table"); + + break; + } + } + + /* And find the syminfo section if available. */ + if (dynamic_syminfo == NULL) + { + unsigned int syminsz = 0; + + for (i = 0, entry = dynamic_segment; + i < dynamic_size; + ++i, ++ entry) + { + if (entry->d_tag == DT_SYMINENT) + { + /* Note: these braces are necessary to avoid a syntax + error from the SunOS4 C compiler. */ + assert (sizeof (Elf_External_Syminfo) == entry->d_un.d_val); + } + else if (entry->d_tag == DT_SYMINSZ) + syminsz = entry->d_un.d_val; + else if (entry->d_tag == DT_SYMINFO) + dynamic_syminfo_offset = entry->d_un.d_val - loadaddr; + } + + if (dynamic_syminfo_offset != 0 && syminsz != 0) + { + Elf_External_Syminfo * extsyminfo; + Elf_Internal_Syminfo * syminfo; + + /* There is a syminfo section. Read the data. */ + GET_DATA_ALLOC (dynamic_syminfo_offset, syminsz, extsyminfo, + Elf_External_Syminfo *, "symbol information"); + + dynamic_syminfo = (Elf_Internal_Syminfo *) malloc (syminsz); + if (dynamic_syminfo == NULL) + { + error (_("Out of memory\n")); + return 0; + } + + dynamic_syminfo_nent = syminsz / sizeof (Elf_External_Syminfo); + for (i = 0, syminfo = dynamic_syminfo; i < dynamic_syminfo_nent; + ++i, ++syminfo) + { + syminfo->si_boundto = BYTE_GET (extsyminfo[i].si_boundto); + syminfo->si_flags = BYTE_GET (extsyminfo[i].si_flags); + } + + free (extsyminfo); + } + } + + if (do_dynamic && dynamic_addr) + printf (_("\nDynamic segment at offset 0x%x contains %ld entries:\n"), + dynamic_addr, (long) dynamic_size); + if (do_dynamic) + printf (_(" Tag Type Name/Value\n")); + + for (i = 0, entry = dynamic_segment; + i < dynamic_size; + i++, entry ++) + { + if (do_dynamic) + { + const char *dtype; + + putchar (' '); + print_vma (entry->d_tag, FULL_HEX); + dtype = get_dynamic_type (entry->d_tag); + printf (" (%s)%*s", dtype, + ((is_32bit_elf ? 27 : 19) + - (int) strlen (dtype)), + " "); + } + + switch (entry->d_tag) + { + case DT_FLAGS: + if (do_dynamic) + printf ("%s", get_dynamic_flags (entry->d_un.d_val)); + break; + + case DT_AUXILIARY: + case DT_FILTER: + if (do_dynamic) + { + if (entry->d_tag == DT_AUXILIARY) + printf (_("Auxiliary library")); + else + printf (_("Filter library")); + + if (dynamic_strings) + printf (": [%s]\n", dynamic_strings + entry->d_un.d_val); + else + { + printf (": "); + print_vma (entry->d_un.d_val, PREFIX_HEX); + putchar ('\n'); + } + } + break; + + case DT_FEATURE_1: + if (do_dynamic) + { + printf (_("Flags:")); + if (entry->d_un.d_val == 0) + printf (_(" None\n")); + else + { + unsigned long int val = entry->d_un.d_val; + if (val & DTF_1_PARINIT) + { + printf (" PARINIT"); + val ^= DTF_1_PARINIT; + } + if (val != 0) + printf (" %lx", val); + puts (""); + } + } + break; + + case DT_POSFLAG_1: + if (do_dynamic) + { + printf (_("Flags:")); + if (entry->d_un.d_val == 0) + printf (_(" None\n")); + else + { + unsigned long int val = entry->d_un.d_val; + if (val & DF_P1_LAZYLOAD) + { + printf (" LAZYLOAD"); + val ^= DF_P1_LAZYLOAD; + } + if (val & DF_P1_GROUPPERM) + { + printf (" GROUPPERM"); + val ^= DF_P1_GROUPPERM; + } + if (val != 0) + printf (" %lx", val); + puts (""); + } + } + break; + + case DT_FLAGS_1: + if (do_dynamic) + { + printf (_("Flags:")); + if (entry->d_un.d_val == 0) + printf (_(" None\n")); + else + { + unsigned long int val = entry->d_un.d_val; + if (val & DF_1_NOW) + { + printf (" NOW"); + val ^= DF_1_NOW; + } + if (val & DF_1_GLOBAL) + { + printf (" GLOBAL"); + val ^= DF_1_GLOBAL; + } + if (val & DF_1_GROUP) + { + printf (" GROUP"); + val ^= DF_1_GROUP; + } + if (val & DF_1_NODELETE) + { + printf (" NODELETE"); + val ^= DF_1_NODELETE; + } + if (val & DF_1_LOADFLTR) + { + printf (" LOADFLTR"); + val ^= DF_1_LOADFLTR; + } + if (val & DF_1_INITFIRST) + { + printf (" INITFIRST"); + val ^= DF_1_INITFIRST; + } + if (val & DF_1_NOOPEN) + { + printf (" NOOPEN"); + val ^= DF_1_NOOPEN; + } + if (val & DF_1_ORIGIN) + { + printf (" ORIGIN"); + val ^= DF_1_ORIGIN; + } + if (val & DF_1_DIRECT) + { + printf (" DIRECT"); + val ^= DF_1_DIRECT; + } + if (val & DF_1_TRANS) + { + printf (" TRANS"); + val ^= DF_1_TRANS; + } + if (val & DF_1_INTERPOSE) + { + printf (" INTERPOSE"); + val ^= DF_1_INTERPOSE; + } + if (val != 0) + printf (" %lx", val); + puts (""); + } + } + break; + + case DT_PLTREL: + if (do_dynamic) + puts (get_dynamic_type (entry->d_un.d_val)); + break; + + case DT_NULL : + case DT_NEEDED : + case DT_PLTGOT : + case DT_HASH : + case DT_STRTAB : + case DT_SYMTAB : + case DT_RELA : + case DT_INIT : + case DT_FINI : + case DT_SONAME : + case DT_RPATH : + case DT_SYMBOLIC: + case DT_REL : + case DT_DEBUG : + case DT_TEXTREL : + case DT_JMPREL : + dynamic_info[entry->d_tag] = entry->d_un.d_val; + + if (do_dynamic) + { + char * name; + + if (dynamic_strings == NULL) + name = NULL; + else + name = dynamic_strings + entry->d_un.d_val; + + if (name) + { + switch (entry->d_tag) + { + case DT_NEEDED: + printf (_("Shared library: [%s]"), name); + + if (strcmp (name, program_interpreter) == 0) + printf (_(" program interpreter")); + break; + + case DT_SONAME: + printf (_("Library soname: [%s]"), name); + break; + + case DT_RPATH: + printf (_("Library rpath: [%s]"), name); + break; + + default: + print_vma (entry->d_un.d_val, PREFIX_HEX); + break; + } + } + else + print_vma (entry->d_un.d_val, PREFIX_HEX); + + putchar ('\n'); + } + break; + + case DT_PLTRELSZ: + case DT_RELASZ : + case DT_STRSZ : + case DT_RELSZ : + case DT_RELAENT : + case DT_SYMENT : + case DT_RELENT : + case DT_PLTPADSZ: + case DT_MOVEENT : + case DT_MOVESZ : + case DT_INIT_ARRAYSZ: + case DT_FINI_ARRAYSZ: + if (do_dynamic) + { + print_vma (entry->d_un.d_val, UNSIGNED); + printf (" (bytes)\n"); + } + break; + + case DT_VERDEFNUM: + case DT_VERNEEDNUM: + case DT_RELACOUNT: + case DT_RELCOUNT: + if (do_dynamic) + { + print_vma (entry->d_un.d_val, UNSIGNED); + putchar ('\n'); + } + break; + + case DT_SYMINSZ: + case DT_SYMINENT: + case DT_SYMINFO: + case DT_USED: + case DT_INIT_ARRAY: + case DT_FINI_ARRAY: + if (do_dynamic) + { + if (dynamic_strings != NULL && entry->d_tag == DT_USED) + { + char * name; + + name = dynamic_strings + entry->d_un.d_val; + + if (* name) + { + printf (_("Not needed object: [%s]\n"), name); + break; + } + } + + print_vma (entry->d_un.d_val, PREFIX_HEX); + putchar ('\n'); + } + break; + + case DT_BIND_NOW: + /* The value of this entry is ignored. */ + break; + + default: + if ((entry->d_tag >= DT_VERSYM) && (entry->d_tag <= DT_VERNEEDNUM)) + version_info [DT_VERSIONTAGIDX (entry->d_tag)] = + entry->d_un.d_val; + + if (do_dynamic) + { + switch (elf_header.e_machine) + { + case EM_MIPS: + case EM_MIPS_RS4_BE: + dynamic_segment_mips_val (entry); + break; + case EM_PARISC: + dynamic_segment_parisc_val (entry); + break; + default: + print_vma (entry->d_un.d_val, PREFIX_HEX); + putchar ('\n'); + } + } + break; + } + } + + return 1; +} + +static char * +get_ver_flags (flags) + unsigned int flags; +{ + static char buff [32]; + + buff[0] = 0; + + if (flags == 0) + return _("none"); + + if (flags & VER_FLG_BASE) + strcat (buff, "BASE "); + + if (flags & VER_FLG_WEAK) + { + if (flags & VER_FLG_BASE) + strcat (buff, "| "); + + strcat (buff, "WEAK "); + } + + if (flags & ~(VER_FLG_BASE | VER_FLG_WEAK)) + strcat (buff, "| <unknown>"); + + return buff; +} + +/* Display the contents of the version sections. */ +static int +process_version_sections (file) + FILE * file; +{ + Elf32_Internal_Shdr * section; + unsigned i; + int found = 0; + + if (! do_version) + return 1; + + for (i = 0, section = section_headers; + i < elf_header.e_shnum; + i++, section ++) + { + switch (section->sh_type) + { + case SHT_GNU_verdef: + { + Elf_External_Verdef * edefs; + unsigned int idx; + unsigned int cnt; + + found = 1; + + printf + (_("\nVersion definition section '%s' contains %ld entries:\n"), + SECTION_NAME (section), section->sh_info); + + printf (_(" Addr: 0x")); + printf_vma (section->sh_addr); + printf (_(" Offset: %#08lx Link: %lx (%s)\n"), + (unsigned long) section->sh_offset, section->sh_link, + SECTION_NAME (section_headers + section->sh_link)); + + GET_DATA_ALLOC (section->sh_offset, section->sh_size, + edefs, Elf_External_Verdef *, + "version definition section"); + + for (idx = cnt = 0; cnt < section->sh_info; ++ cnt) + { + char * vstart; + Elf_External_Verdef * edef; + Elf_Internal_Verdef ent; + Elf_External_Verdaux * eaux; + Elf_Internal_Verdaux aux; + int j; + int isum; + + vstart = ((char *) edefs) + idx; + + edef = (Elf_External_Verdef *) vstart; + + ent.vd_version = BYTE_GET (edef->vd_version); + ent.vd_flags = BYTE_GET (edef->vd_flags); + ent.vd_ndx = BYTE_GET (edef->vd_ndx); + ent.vd_cnt = BYTE_GET (edef->vd_cnt); + ent.vd_hash = BYTE_GET (edef->vd_hash); + ent.vd_aux = BYTE_GET (edef->vd_aux); + ent.vd_next = BYTE_GET (edef->vd_next); + + printf (_(" %#06x: Rev: %d Flags: %s"), + idx, ent.vd_version, get_ver_flags (ent.vd_flags)); + + printf (_(" Index: %d Cnt: %d "), + ent.vd_ndx, ent.vd_cnt); + + vstart += ent.vd_aux; + + eaux = (Elf_External_Verdaux *) vstart; + + aux.vda_name = BYTE_GET (eaux->vda_name); + aux.vda_next = BYTE_GET (eaux->vda_next); + + if (dynamic_strings) + printf (_("Name: %s\n"), dynamic_strings + aux.vda_name); + else + printf (_("Name index: %ld\n"), aux.vda_name); + + isum = idx + ent.vd_aux; + + for (j = 1; j < ent.vd_cnt; j ++) + { + isum += aux.vda_next; + vstart += aux.vda_next; + + eaux = (Elf_External_Verdaux *) vstart; + + aux.vda_name = BYTE_GET (eaux->vda_name); + aux.vda_next = BYTE_GET (eaux->vda_next); + + if (dynamic_strings) + printf (_(" %#06x: Parent %d: %s\n"), + isum, j, dynamic_strings + aux.vda_name); + else + printf (_(" %#06x: Parent %d, name index: %ld\n"), + isum, j, aux.vda_name); + } + + idx += ent.vd_next; + } + + free (edefs); + } + break; + + case SHT_GNU_verneed: + { + Elf_External_Verneed * eneed; + unsigned int idx; + unsigned int cnt; + + found = 1; + + printf (_("\nVersion needs section '%s' contains %ld entries:\n"), + SECTION_NAME (section), section->sh_info); + + printf (_(" Addr: 0x")); + printf_vma (section->sh_addr); + printf (_(" Offset: %#08lx Link to section: %ld (%s)\n"), + (unsigned long) section->sh_offset, section->sh_link, + SECTION_NAME (section_headers + section->sh_link)); + + GET_DATA_ALLOC (section->sh_offset, section->sh_size, + eneed, Elf_External_Verneed *, + "version need section"); + + for (idx = cnt = 0; cnt < section->sh_info; ++cnt) + { + Elf_External_Verneed * entry; + Elf_Internal_Verneed ent; + int j; + int isum; + char * vstart; + + vstart = ((char *) eneed) + idx; + + entry = (Elf_External_Verneed *) vstart; + + ent.vn_version = BYTE_GET (entry->vn_version); + ent.vn_cnt = BYTE_GET (entry->vn_cnt); + ent.vn_file = BYTE_GET (entry->vn_file); + ent.vn_aux = BYTE_GET (entry->vn_aux); + ent.vn_next = BYTE_GET (entry->vn_next); + + printf (_(" %#06x: Version: %d"), idx, ent.vn_version); + + if (dynamic_strings) + printf (_(" File: %s"), dynamic_strings + ent.vn_file); + else + printf (_(" File: %lx"), ent.vn_file); + + printf (_(" Cnt: %d\n"), ent.vn_cnt); + + vstart += ent.vn_aux; + + for (j = 0, isum = idx + ent.vn_aux; j < ent.vn_cnt; ++j) + { + Elf_External_Vernaux * eaux; + Elf_Internal_Vernaux aux; + + eaux = (Elf_External_Vernaux *) vstart; + + aux.vna_hash = BYTE_GET (eaux->vna_hash); + aux.vna_flags = BYTE_GET (eaux->vna_flags); + aux.vna_other = BYTE_GET (eaux->vna_other); + aux.vna_name = BYTE_GET (eaux->vna_name); + aux.vna_next = BYTE_GET (eaux->vna_next); + + if (dynamic_strings) + printf (_(" %#06x: Name: %s"), + isum, dynamic_strings + aux.vna_name); + else + printf (_(" %#06x: Name index: %lx"), + isum, aux.vna_name); + + printf (_(" Flags: %s Version: %d\n"), + get_ver_flags (aux.vna_flags), aux.vna_other); + + isum += aux.vna_next; + vstart += aux.vna_next; + } + + idx += ent.vn_next; + } + + free (eneed); + } + break; + + case SHT_GNU_versym: + { + Elf32_Internal_Shdr * link_section; + int total; + int cnt; + unsigned char * edata; + unsigned short * data; + char * strtab; + Elf_Internal_Sym * symbols; + Elf32_Internal_Shdr * string_sec; + + link_section = section_headers + section->sh_link; + total = section->sh_size / section->sh_entsize; + + found = 1; + + symbols = GET_ELF_SYMBOLS (file, link_section->sh_offset, + link_section->sh_size / link_section->sh_entsize); + + string_sec = section_headers + link_section->sh_link; + + GET_DATA_ALLOC (string_sec->sh_offset, string_sec->sh_size, + strtab, char *, "version string table"); + + printf (_("\nVersion symbols section '%s' contains %d entries:\n"), + SECTION_NAME (section), total); + + printf (_(" Addr: ")); + printf_vma (section->sh_addr); + printf (_(" Offset: %#08lx Link: %lx (%s)\n"), + (unsigned long) section->sh_offset, section->sh_link, + SECTION_NAME (link_section)); + + GET_DATA_ALLOC (version_info [DT_VERSIONTAGIDX (DT_VERSYM)] + - loadaddr, + total * sizeof (short), edata, + unsigned char *, "version symbol data"); + + data = (unsigned short *) malloc (total * sizeof (short)); + + for (cnt = total; cnt --;) + data [cnt] = byte_get (edata + cnt * sizeof (short), + sizeof (short)); + + free (edata); + + for (cnt = 0; cnt < total; cnt += 4) + { + int j, nn; + char *name; + + printf (" %03x:", cnt); + + for (j = 0; (j < 4) && (cnt + j) < total; ++j) + switch (data [cnt + j]) + { + case 0: + fputs (_(" 0 (*local*) "), stdout); + break; + + case 1: + fputs (_(" 1 (*global*) "), stdout); + break; + + default: + nn = printf ("%4x%c", data [cnt + j] & 0x7fff, + data [cnt + j] & 0x8000 ? 'h' : ' '); + + if (symbols [cnt + j].st_shndx < SHN_LORESERVE + && section_headers[symbols [cnt + j].st_shndx].sh_type + == SHT_NOBITS) + { + /* We must test both. */ + Elf_Internal_Verneed ivn; + unsigned long offset; + + offset = version_info [DT_VERSIONTAGIDX (DT_VERNEED)] + - loadaddr; + + do + { + Elf_External_Verneed evn; + Elf_External_Vernaux evna; + Elf_Internal_Vernaux ivna; + unsigned long vna_off; + + GET_DATA (offset, evn, "version need"); + + ivn.vn_aux = BYTE_GET (evn.vn_aux); + ivn.vn_next = BYTE_GET (evn.vn_next); + + vna_off = offset + ivn.vn_aux; + + do + { + GET_DATA (vna_off, evna, + "version need aux (1)"); + + ivna.vna_next = BYTE_GET (evna.vna_next); + ivna.vna_other = BYTE_GET (evna.vna_other); + + vna_off += ivna.vna_next; + } + while (ivna.vna_other != data [cnt + j] + && ivna.vna_next != 0); + + if (ivna.vna_other == data [cnt + j]) + { + ivna.vna_name = BYTE_GET (evna.vna_name); + + name = strtab + ivna.vna_name; + nn += printf ("(%s%-*s", + name, + 12 - (int) strlen (name), + ")"); + break; + } + else if (ivn.vn_next == 0) + { + if (data [cnt + j] != 0x8001) + { + Elf_Internal_Verdef ivd; + Elf_External_Verdef evd; + + offset = version_info + [DT_VERSIONTAGIDX (DT_VERDEF)] + - loadaddr; + + do + { + GET_DATA (offset, evd, + "version definition"); + + ivd.vd_next = BYTE_GET (evd.vd_next); + ivd.vd_ndx = BYTE_GET (evd.vd_ndx); + + offset += ivd.vd_next; + } + while (ivd.vd_ndx + != (data [cnt + j] & 0x7fff) + && ivd.vd_next != 0); + + if (ivd.vd_ndx + == (data [cnt + j] & 0x7fff)) + { + Elf_External_Verdaux evda; + Elf_Internal_Verdaux ivda; + + ivd.vd_aux = BYTE_GET (evd.vd_aux); + + GET_DATA (offset + ivd.vd_aux, evda, + "version definition aux"); + + ivda.vda_name = + BYTE_GET (evda.vda_name); + + name = strtab + ivda.vda_name; + nn += + printf ("(%s%-*s", + name, + 12 - (int) strlen (name), + ")"); + } + } + + break; + } + else + offset += ivn.vn_next; + } + while (ivn.vn_next); + } + else if (symbols [cnt + j].st_shndx == SHN_UNDEF) + { + Elf_Internal_Verneed ivn; + unsigned long offset; + + offset = version_info [DT_VERSIONTAGIDX (DT_VERNEED)] + - loadaddr; + + do + { + Elf_Internal_Vernaux ivna; + Elf_External_Verneed evn; + Elf_External_Vernaux evna; + unsigned long a_off; + + GET_DATA (offset, evn, "version need"); + + ivn.vn_aux = BYTE_GET (evn.vn_aux); + ivn.vn_next = BYTE_GET (evn.vn_next); + + a_off = offset + ivn.vn_aux; + + do + { + GET_DATA (a_off, evna, + "version need aux (2)"); + + ivna.vna_next = BYTE_GET (evna.vna_next); + ivna.vna_other = BYTE_GET (evna.vna_other); + + a_off += ivna.vna_next; + } + while (ivna.vna_other != data [cnt + j] + && ivna.vna_next != 0); + + if (ivna.vna_other == data [cnt + j]) + { + ivna.vna_name = BYTE_GET (evna.vna_name); + + name = strtab + ivna.vna_name; + nn += printf ("(%s%-*s", + name, + 12 - (int) strlen (name), + ")"); + break; + } + + offset += ivn.vn_next; + } + while (ivn.vn_next); + } + else if (data [cnt + j] != 0x8001) + { + Elf_Internal_Verdef ivd; + Elf_External_Verdef evd; + unsigned long offset; + + offset = version_info + [DT_VERSIONTAGIDX (DT_VERDEF)] - loadaddr; + + do + { + GET_DATA (offset, evd, "version def"); + + ivd.vd_next = BYTE_GET (evd.vd_next); + ivd.vd_ndx = BYTE_GET (evd.vd_ndx); + + offset += ivd.vd_next; + } + while (ivd.vd_ndx != (data [cnt + j] & 0x7fff) + && ivd.vd_next != 0); + + if (ivd.vd_ndx == (data [cnt + j] & 0x7fff)) + { + Elf_External_Verdaux evda; + Elf_Internal_Verdaux ivda; + + ivd.vd_aux = BYTE_GET (evd.vd_aux); + + GET_DATA (offset - ivd.vd_next + ivd.vd_aux, + evda, "version def aux"); + + ivda.vda_name = BYTE_GET (evda.vda_name); + + name = strtab + ivda.vda_name; + nn += printf ("(%s%-*s", + name, + 12 - (int) strlen (name), + ")"); + } + } + + if (nn < 18) + printf ("%*c", 18 - nn, ' '); + } + + putchar ('\n'); + } + + free (data); + free (strtab); + free (symbols); + } + break; + + default: + break; + } + } + + if (! found) + printf (_("\nNo version information found in this file.\n")); + + return 1; +} + +static const char * +get_symbol_binding (binding) + unsigned int binding; +{ + static char buff [32]; + + switch (binding) + { + case STB_LOCAL: return "LOCAL"; + case STB_GLOBAL: return "GLOBAL"; + case STB_WEAK: return "WEAK"; + default: + if (binding >= STB_LOPROC && binding <= STB_HIPROC) + sprintf (buff, _("<processor specific>: %d"), binding); + else if (binding >= STB_LOOS && binding <= STB_HIOS) + sprintf (buff, _("<OS specific>: %d"), binding); + else + sprintf (buff, _("<unknown>: %d"), binding); + return buff; + } +} + +static const char * +get_symbol_type (type) + unsigned int type; +{ + static char buff [32]; + + switch (type) + { + case STT_NOTYPE: return "NOTYPE"; + case STT_OBJECT: return "OBJECT"; + case STT_FUNC: return "FUNC"; + case STT_SECTION: return "SECTION"; + case STT_FILE: return "FILE"; + case STT_COMMON: return "COMMON"; + default: + if (type >= STT_LOPROC && type <= STT_HIPROC) + { + if (elf_header.e_machine == EM_ARM && type == STT_ARM_TFUNC) + return "THUMB_FUNC"; + + if (elf_header.e_machine == EM_SPARCV9 && type == STT_REGISTER) + return "REGISTER"; + + if (elf_header.e_machine == EM_PARISC && type == STT_PARISC_MILLI) + return "PARISC_MILLI"; + + sprintf (buff, _("<processor specific>: %d"), type); + } + else if (type >= STT_LOOS && type <= STT_HIOS) + { + if (elf_header.e_machine == EM_PARISC) + { + if (type == STT_HP_OPAQUE) + return "HP_OPAQUE"; + if (type == STT_HP_STUB) + return "HP_STUB"; + } + + sprintf (buff, _("<OS specific>: %d"), type); + } + else + sprintf (buff, _("<unknown>: %d"), type); + return buff; + } +} + +static const char * +get_symbol_visibility (visibility) + unsigned int visibility; +{ + switch (visibility) + { + case STV_DEFAULT: return "DEFAULT"; + case STV_INTERNAL: return "INTERNAL"; + case STV_HIDDEN: return "HIDDEN"; + case STV_PROTECTED: return "PROTECTED"; + default: abort (); + } +} + +static const char * +get_symbol_index_type (type) + unsigned int type; +{ + switch (type) + { + case SHN_UNDEF: return "UND"; + case SHN_ABS: return "ABS"; + case SHN_COMMON: return "COM"; + default: + if (type >= SHN_LOPROC && type <= SHN_HIPROC) + return "PRC"; + else if (type >= SHN_LORESERVE && type <= SHN_HIRESERVE) + return "RSV"; + else if (type >= SHN_LOOS && type <= SHN_HIOS) + return "OS "; + else + { + static char buff [32]; + + sprintf (buff, "%3d", type); + return buff; + } + } +} + +static int * +get_dynamic_data (file, number) + FILE * file; + unsigned int number; +{ + char * e_data; + int * i_data; + + e_data = (char *) malloc (number * 4); + + if (e_data == NULL) + { + error (_("Out of memory\n")); + return NULL; + } + + if (fread (e_data, 4, number, file) != number) + { + error (_("Unable to read in dynamic data\n")); + return NULL; + } + + i_data = (int *) malloc (number * sizeof (* i_data)); + + if (i_data == NULL) + { + error (_("Out of memory\n")); + free (e_data); + return NULL; + } + + while (number--) + i_data [number] = byte_get (e_data + number * 4, 4); + + free (e_data); + + return i_data; +} + +/* Dump the symbol table */ +static int +process_symbol_table (file) + FILE * file; +{ + Elf32_Internal_Shdr * section; + char nb [4]; + char nc [4]; + int nbuckets = 0; + int nchains = 0; + int * buckets = NULL; + int * chains = NULL; + + if (! do_syms && !do_histogram) + return 1; + + if (dynamic_info[DT_HASH] && ((do_using_dynamic && dynamic_strings != NULL) + || do_histogram)) + { + if (fseek (file, dynamic_info[DT_HASH] - loadaddr, SEEK_SET)) + { + error (_("Unable to seek to start of dynamic information")); + return 0; + } + + if (fread (nb, sizeof (nb), 1, file) != 1) + { + error (_("Failed to read in number of buckets\n")); + return 0; + } + + if (fread (nc, sizeof (nc), 1, file) != 1) + { + error (_("Failed to read in number of chains\n")); + return 0; + } + + nbuckets = byte_get (nb, 4); + nchains = byte_get (nc, 4); + + buckets = get_dynamic_data (file, nbuckets); + chains = get_dynamic_data (file, nchains); + + if (buckets == NULL || chains == NULL) + return 0; + } + + if (do_syms + && dynamic_info[DT_HASH] && do_using_dynamic && dynamic_strings != NULL) + { + int hn; + int si; + + printf (_("\nSymbol table for image:\n")); + if (is_32bit_elf) + printf (_(" Num Buc: Value Size Type Bind Vis Ndx Name\n")); + else + printf (_(" Num Buc: Value Size Type Bind Vis Ndx Name\n")); + + for (hn = 0; hn < nbuckets; hn++) + { + if (! buckets [hn]) + continue; + + for (si = buckets [hn]; si < nchains && si > 0; si = chains [si]) + { + Elf_Internal_Sym * psym; + + psym = dynamic_symbols + si; + + printf (" %3d %3d: ", si, hn); + print_vma (psym->st_value, LONG_HEX); + putchar (' ' ); + print_vma (psym->st_size, DEC_5); + + printf (" %6s", get_symbol_type (ELF_ST_TYPE (psym->st_info))); + printf (" %6s", get_symbol_binding (ELF_ST_BIND (psym->st_info))); + printf (" %3s", get_symbol_visibility (ELF_ST_VISIBILITY (psym->st_other))); + printf (" %3.3s", get_symbol_index_type (psym->st_shndx)); + printf (" %s\n", dynamic_strings + psym->st_name); + } + } + } + else if (do_syms && !do_using_dynamic) + { + unsigned int i; + + for (i = 0, section = section_headers; + i < elf_header.e_shnum; + i++, section++) + { + unsigned int si; + char * strtab; + Elf_Internal_Sym * symtab; + Elf_Internal_Sym * psym; + + + if ( section->sh_type != SHT_SYMTAB + && section->sh_type != SHT_DYNSYM) + continue; + + printf (_("\nSymbol table '%s' contains %lu entries:\n"), + SECTION_NAME (section), + (unsigned long) (section->sh_size / section->sh_entsize)); + if (is_32bit_elf) + printf (_(" Num: Value Size Type Bind Vis Ndx Name\n")); + else + printf (_(" Num: Value Size Type Bind Vis Ndx Name\n")); + + symtab = GET_ELF_SYMBOLS (file, section->sh_offset, + section->sh_size / section->sh_entsize); + if (symtab == NULL) + continue; + + if (section->sh_link == elf_header.e_shstrndx) + strtab = string_table; + else + { + Elf32_Internal_Shdr * string_sec; + + string_sec = section_headers + section->sh_link; + + GET_DATA_ALLOC (string_sec->sh_offset, string_sec->sh_size, + strtab, char *, "string table"); + } + + for (si = 0, psym = symtab; + si < section->sh_size / section->sh_entsize; + si ++, psym ++) + { + printf ("%6d: ", si); + print_vma (psym->st_value, LONG_HEX); + putchar (' '); + print_vma (psym->st_size, DEC_5); + printf (" %-7s", get_symbol_type (ELF_ST_TYPE (psym->st_info))); + printf (" %-6s", get_symbol_binding (ELF_ST_BIND (psym->st_info))); + printf (" %-3s", get_symbol_visibility (ELF_ST_VISIBILITY (psym->st_other))); + printf (" %4s", get_symbol_index_type (psym->st_shndx)); + printf (" %s", strtab + psym->st_name); + + if (section->sh_type == SHT_DYNSYM && + version_info [DT_VERSIONTAGIDX (DT_VERSYM)] != 0) + { + unsigned char data[2]; + unsigned short vers_data; + unsigned long offset; + int is_nobits; + int check_def; + + offset = version_info [DT_VERSIONTAGIDX (DT_VERSYM)] + - loadaddr; + + GET_DATA (offset + si * sizeof (vers_data), data, + "version data"); + + vers_data = byte_get (data, 2); + + is_nobits = psym->st_shndx < SHN_LORESERVE ? + (section_headers [psym->st_shndx].sh_type == SHT_NOBITS) + : 0; + + check_def = (psym->st_shndx != SHN_UNDEF); + + if ((vers_data & 0x8000) || vers_data > 1) + { + if (is_nobits || ! check_def) + { + Elf_External_Verneed evn; + Elf_Internal_Verneed ivn; + Elf_Internal_Vernaux ivna; + + /* We must test both. */ + offset = version_info + [DT_VERSIONTAGIDX (DT_VERNEED)] - loadaddr; + + do + { + unsigned long vna_off; + + GET_DATA (offset, evn, "version need"); + + ivn.vn_aux = BYTE_GET (evn.vn_aux); + ivn.vn_next = BYTE_GET (evn.vn_next); + + vna_off = offset + ivn.vn_aux; + + do + { + Elf_External_Vernaux evna; + + GET_DATA (vna_off, evna, + "version need aux (3)"); + + ivna.vna_other = BYTE_GET (evna.vna_other); + ivna.vna_next = BYTE_GET (evna.vna_next); + ivna.vna_name = BYTE_GET (evna.vna_name); + + vna_off += ivna.vna_next; + } + while (ivna.vna_other != vers_data + && ivna.vna_next != 0); + + if (ivna.vna_other == vers_data) + break; + + offset += ivn.vn_next; + } + while (ivn.vn_next != 0); + + if (ivna.vna_other == vers_data) + { + printf ("@%s (%d)", + strtab + ivna.vna_name, ivna.vna_other); + check_def = 0; + } + else if (! is_nobits) + error (_("bad dynamic symbol")); + else + check_def = 1; + } + + if (check_def) + { + if (vers_data != 0x8001) + { + Elf_Internal_Verdef ivd; + Elf_Internal_Verdaux ivda; + Elf_External_Verdaux evda; + unsigned long offset; + + offset = + version_info [DT_VERSIONTAGIDX (DT_VERDEF)] + - loadaddr; + + do + { + Elf_External_Verdef evd; + + GET_DATA (offset, evd, "version def"); + + ivd.vd_ndx = BYTE_GET (evd.vd_ndx); + ivd.vd_aux = BYTE_GET (evd.vd_aux); + ivd.vd_next = BYTE_GET (evd.vd_next); + + offset += ivd.vd_next; + } + while (ivd.vd_ndx != (vers_data & 0x7fff) + && ivd.vd_next != 0); + + offset -= ivd.vd_next; + offset += ivd.vd_aux; + + GET_DATA (offset, evda, "version def aux"); + + ivda.vda_name = BYTE_GET (evda.vda_name); + + if (psym->st_name != ivda.vda_name) + printf ((vers_data & 0x8000) + ? "@%s" : "@@%s", + strtab + ivda.vda_name); + } + } + } + } + + putchar ('\n'); + } + + free (symtab); + if (strtab != string_table) + free (strtab); + } + } + else if (do_syms) + printf + (_("\nDynamic symbol information is not available for displaying symbols.\n")); + + if (do_histogram && buckets != NULL) + { + int *lengths; + int *counts; + int hn; + int si; + int maxlength = 0; + int nzero_counts = 0; + int nsyms = 0; + + printf (_("\nHistogram for bucket list length (total of %d buckets):\n"), + nbuckets); + printf (_(" Length Number %% of total Coverage\n")); + + lengths = (int *) calloc (nbuckets, sizeof (int)); + if (lengths == NULL) + { + error (_("Out of memory")); + return 0; + } + for (hn = 0; hn < nbuckets; ++hn) + { + if (! buckets [hn]) + continue; + + for (si = buckets[hn]; si > 0 && si < nchains; si = chains[si]) + { + ++ nsyms; + if (maxlength < ++lengths[hn]) + ++ maxlength; + } + } + + counts = (int *) calloc (maxlength + 1, sizeof (int)); + if (counts == NULL) + { + error (_("Out of memory")); + return 0; + } + + for (hn = 0; hn < nbuckets; ++hn) + ++ counts [lengths [hn]]; + + if (nbuckets > 0) + { + printf (" 0 %-10d (%5.1f%%)\n", + counts[0], (counts[0] * 100.0) / nbuckets); + for (si = 1; si <= maxlength; ++si) + { + nzero_counts += counts[si] * si; + printf ("%7d %-10d (%5.1f%%) %5.1f%%\n", + si, counts[si], (counts[si] * 100.0) / nbuckets, + (nzero_counts * 100.0) / nsyms); + } + } + + free (counts); + free (lengths); + } + + if (buckets != NULL) + { + free (buckets); + free (chains); + } + + return 1; +} + +static int +process_syminfo (file) + FILE * file ATTRIBUTE_UNUSED; +{ + unsigned int i; + + if (dynamic_syminfo == NULL + || !do_dynamic) + /* No syminfo, this is ok. */ + return 1; + + /* There better should be a dynamic symbol section. */ + if (dynamic_symbols == NULL || dynamic_strings == NULL) + return 0; + + if (dynamic_addr) + printf (_("\nDynamic info segment at offset 0x%lx contains %d entries:\n"), + dynamic_syminfo_offset, dynamic_syminfo_nent); + + printf (_(" Num: Name BoundTo Flags\n")); + for (i = 0; i < dynamic_syminfo_nent; ++i) + { + unsigned short int flags = dynamic_syminfo[i].si_flags; + + printf ("%4d: %-30s ", i, + dynamic_strings + dynamic_symbols[i].st_name); + + switch (dynamic_syminfo[i].si_boundto) + { + case SYMINFO_BT_SELF: + fputs ("SELF ", stdout); + break; + case SYMINFO_BT_PARENT: + fputs ("PARENT ", stdout); + break; + default: + if (dynamic_syminfo[i].si_boundto > 0 + && dynamic_syminfo[i].si_boundto < dynamic_size) + printf ("%-10s ", + dynamic_strings + + dynamic_segment[dynamic_syminfo[i].si_boundto].d_un.d_val); + else + printf ("%-10d ", dynamic_syminfo[i].si_boundto); + break; + } + + if (flags & SYMINFO_FLG_DIRECT) + printf (" DIRECT"); + if (flags & SYMINFO_FLG_PASSTHRU) + printf (" PASSTHRU"); + if (flags & SYMINFO_FLG_COPY) + printf (" COPY"); + if (flags & SYMINFO_FLG_LAZYLOAD) + printf (" LAZYLOAD"); + + puts (""); + } + + return 1; +} + +#ifdef SUPPORT_DISASSEMBLY +static void +disassemble_section (section, file) + Elf32_Internal_Shdr * section; + FILE * file; +{ + printf (_("\nAssembly dump of section %s\n"), + SECTION_NAME (section)); + + /* XXX -- to be done --- XXX */ + + return 1; +} +#endif + +static int +dump_section (section, file) + Elf32_Internal_Shdr * section; + FILE * file; +{ + bfd_size_type bytes; + bfd_vma addr; + unsigned char * data; + unsigned char * start; + + bytes = section->sh_size; + + if (bytes == 0) + { + printf (_("\nSection '%s' has no data to dump.\n"), + SECTION_NAME (section)); + return 0; + } + else + printf (_("\nHex dump of section '%s':\n"), SECTION_NAME (section)); + + addr = section->sh_addr; + + GET_DATA_ALLOC (section->sh_offset, bytes, start, unsigned char *, + "section data"); + + data = start; + + while (bytes) + { + int j; + int k; + int lbytes; + + lbytes = (bytes > 16 ? 16 : bytes); + + printf (" 0x%8.8lx ", (unsigned long) addr); + + switch (elf_header.e_ident [EI_DATA]) + { + default: + case ELFDATA2LSB: + for (j = 15; j >= 0; j --) + { + if (j < lbytes) + printf ("%2.2x", data [j]); + else + printf (" "); + + if (!(j & 0x3)) + printf (" "); + } + break; + + case ELFDATA2MSB: + for (j = 0; j < 16; j++) + { + if (j < lbytes) + printf ("%2.2x", data [j]); + else + printf (" "); + + if ((j & 3) == 3) + printf (" "); + } + break; + } + + for (j = 0; j < lbytes; j++) + { + k = data [j]; + if (k >= ' ' && k < 0x80) + printf ("%c", k); + else + printf ("."); + } + + putchar ('\n'); + + data += lbytes; + addr += lbytes; + bytes -= lbytes; + } + + free (start); + + return 1; +} + + +static unsigned long int +read_leb128 (data, length_return, sign) + unsigned char * data; + int * length_return; + int sign; +{ + unsigned long int result = 0; + unsigned int num_read = 0; + int shift = 0; + unsigned char byte; + + do + { + byte = * data ++; + num_read ++; + + result |= (byte & 0x7f) << shift; + + shift += 7; + + } + while (byte & 0x80); + + if (length_return != NULL) + * length_return = num_read; + + if (sign && (shift < 32) && (byte & 0x40)) + result |= -1 << shift; + + return result; +} + +typedef struct State_Machine_Registers +{ + unsigned long address; + unsigned int file; + unsigned int line; + unsigned int column; + int is_stmt; + int basic_block; + int end_sequence; +/* This variable hold the number of the last entry seen + in the File Table. */ + unsigned int last_file_entry; +} SMR; + +static SMR state_machine_regs; + +static void +reset_state_machine (is_stmt) + int is_stmt; +{ + state_machine_regs.address = 0; + state_machine_regs.file = 1; + state_machine_regs.line = 1; + state_machine_regs.column = 0; + state_machine_regs.is_stmt = is_stmt; + state_machine_regs.basic_block = 0; + state_machine_regs.end_sequence = 0; + state_machine_regs.last_file_entry = 0; +} + +/* Handled an extend line op. Returns true if this is the end + of sequence. */ +static int +process_extended_line_op (data, is_stmt, pointer_size) + unsigned char * data; + int is_stmt; + int pointer_size; +{ + unsigned char op_code; + int bytes_read; + unsigned int len; + unsigned char * name; + unsigned long adr; + + len = read_leb128 (data, & bytes_read, 0); + data += bytes_read; + + if (len == 0) + { + warn (_("badly formed extended line op encountered!")); + return bytes_read; + } + + len += bytes_read; + op_code = * data ++; + + printf (_(" Extended opcode %d: "), op_code); + + switch (op_code) + { + case DW_LNE_end_sequence: + printf (_("End of Sequence\n\n")); + reset_state_machine (is_stmt); + break; + + case DW_LNE_set_address: + adr = byte_get (data, pointer_size); + printf (_("set Address to 0x%lx\n"), adr); + state_machine_regs.address = adr; + break; + + case DW_LNE_define_file: + printf (_(" define new File Table entry\n")); + printf (_(" Entry\tDir\tTime\tSize\tName\n")); + + printf (_(" %d\t"), ++ state_machine_regs.last_file_entry); + name = data; + data += strlen (data) + 1; + printf (_("%lu\t"), read_leb128 (data, & bytes_read, 0)); + data += bytes_read; + printf (_("%lu\t"), read_leb128 (data, & bytes_read, 0)); + data += bytes_read; + printf (_("%lu\t"), read_leb128 (data, & bytes_read, 0)); + printf (_("%s\n\n"), name); + break; + + default: + printf (_("UNKNOWN: length %d\n"), len - bytes_read); + break; + } + + return len; +} + +/* Size of pointers in the .debug_line section. This information is not + really present in that section. It's obtained before dumping the debug + sections by doing some pre-scan of the .debug_info section. */ +static int debug_line_pointer_size = 4; + +static int +display_debug_lines (section, start, file) + Elf32_Internal_Shdr * section; + unsigned char * start; + FILE * file ATTRIBUTE_UNUSED; +{ + DWARF2_External_LineInfo * external; + DWARF2_Internal_LineInfo info; + unsigned char * standard_opcodes; + unsigned char * data = start; + unsigned char * end = start + section->sh_size; + unsigned char * end_of_sequence; + int i; + + printf (_("\nDump of debug contents of section %s:\n\n"), + SECTION_NAME (section)); + + while (data < end) + { + external = (DWARF2_External_LineInfo *) data; + + /* Check the length of the block. */ + info.li_length = BYTE_GET (external->li_length); + if (info.li_length > section->sh_size) + { + warn + (_("The line info appears to be corrupt - the section is too small\n")); + return 0; + } + + /* Check its version number. */ + info.li_version = BYTE_GET (external->li_version); + if (info.li_version != 2) + { + warn (_("Only DWARF version 2 line info is currently supported.\n")); + return 0; + } + + info.li_prologue_length = BYTE_GET (external->li_prologue_length); + info.li_min_insn_length = BYTE_GET (external->li_min_insn_length); + info.li_default_is_stmt = BYTE_GET (external->li_default_is_stmt); + info.li_line_base = BYTE_GET (external->li_line_base); + info.li_line_range = BYTE_GET (external->li_line_range); + info.li_opcode_base = BYTE_GET (external->li_opcode_base); + + /* Sign extend the line base field. */ + info.li_line_base <<= 24; + info.li_line_base >>= 24; + + printf (_(" Length: %ld\n"), info.li_length); + printf (_(" DWARF Version: %d\n"), info.li_version); + printf (_(" Prolgue Length: %d\n"), info.li_prologue_length); + printf (_(" Minimum Instruction Length: %d\n"), info.li_min_insn_length); + printf (_(" Initial value of 'is_stmt': %d\n"), info.li_default_is_stmt); + printf (_(" Line Base: %d\n"), info.li_line_base); + printf (_(" Line Range: %d\n"), info.li_line_range); + printf (_(" Opcode Base: %d\n"), info.li_opcode_base); + + end_of_sequence = data + info.li_length + sizeof (info.li_length); + + reset_state_machine (info.li_default_is_stmt); + + /* Display the contents of the Opcodes table. */ + standard_opcodes = data + sizeof (* external); + + printf (_("\n Opcodes:\n")); + + for (i = 1; i < info.li_opcode_base; i++) + printf (_(" Opcode %d has %d args\n"), i, standard_opcodes[i - 1]); + + /* Display the contents of the Directory table. */ + data = standard_opcodes + info.li_opcode_base - 1; + + if (* data == 0) + printf (_("\n The Directory Table is empty.\n")); + else + { + printf (_("\n The Directory Table:\n")); + + while (* data != 0) + { + printf (_(" %s\n"), data); + + data += strlen (data) + 1; + } + } + + /* Skip the NUL at the end of the table. */ + data ++; + + /* Display the contents of the File Name table. */ + if (* data == 0) + printf (_("\n The File Name Table is empty.\n")); + else + { + printf (_("\n The File Name Table:\n")); + printf (_(" Entry\tDir\tTime\tSize\tName\n")); + + while (* data != 0) + { + char * name; + int bytes_read; + + printf (_(" %d\t"), ++ state_machine_regs.last_file_entry); + name = data; + + data += strlen (data) + 1; + + printf (_("%lu\t"), read_leb128 (data, & bytes_read, 0)); + data += bytes_read; + printf (_("%lu\t"), read_leb128 (data, & bytes_read, 0)); + data += bytes_read; + printf (_("%lu\t"), read_leb128 (data, & bytes_read, 0)); + data += bytes_read; + printf (_("%s\n"), name); + } + } + + /* Skip the NUL at the end of the table. */ + data ++; + + /* Now display the statements. */ + printf (_("\n Line Number Statements:\n")); + + + while (data < end_of_sequence) + { + unsigned char op_code; + int adv; + int bytes_read; + + op_code = * data ++; + + switch (op_code) + { + case DW_LNS_extended_op: + data += process_extended_line_op (data, info.li_default_is_stmt, + debug_line_pointer_size); + break; + + case DW_LNS_copy: + printf (_(" Copy\n")); + break; + + case DW_LNS_advance_pc: + adv = info.li_min_insn_length * read_leb128 (data, & bytes_read, 0); + data += bytes_read; + state_machine_regs.address += adv; + printf (_(" Advance PC by %d to %lx\n"), adv, + state_machine_regs.address); + break; + + case DW_LNS_advance_line: + adv = read_leb128 (data, & bytes_read, 1); + data += bytes_read; + state_machine_regs.line += adv; + printf (_(" Advance Line by %d to %d\n"), adv, + state_machine_regs.line); + break; + + case DW_LNS_set_file: + adv = read_leb128 (data, & bytes_read, 0); + data += bytes_read; + printf (_(" Set File Name to entry %d in the File Name Table\n"), + adv); + state_machine_regs.file = adv; + break; + + case DW_LNS_set_column: + adv = read_leb128 (data, & bytes_read, 0); + data += bytes_read; + printf (_(" Set column to %d\n"), adv); + state_machine_regs.column = adv; + break; + + case DW_LNS_negate_stmt: + adv = state_machine_regs.is_stmt; + adv = ! adv; + printf (_(" Set is_stmt to %d\n"), adv); + state_machine_regs.is_stmt = adv; + break; + + case DW_LNS_set_basic_block: + printf (_(" Set basic block\n")); + state_machine_regs.basic_block = 1; + break; + + case DW_LNS_const_add_pc: + adv = (((255 - info.li_opcode_base) / info.li_line_range) + * info.li_min_insn_length); + state_machine_regs.address += adv; + printf (_(" Advance PC by constant %d to 0x%lx\n"), adv, + state_machine_regs.address); + break; + + case DW_LNS_fixed_advance_pc: + adv = byte_get (data, 2); + data += 2; + state_machine_regs.address += adv; + printf (_(" Advance PC by fixed size amount %d to 0x%lx\n"), + adv, state_machine_regs.address); + break; + + default: + op_code -= info.li_opcode_base; + adv = (op_code / info.li_line_range) * info.li_min_insn_length; + state_machine_regs.address += adv; + printf (_(" Special opcode %d: advance Address by %d to 0x%lx"), + op_code, adv, state_machine_regs.address); + adv = (op_code % info.li_line_range) + info.li_line_base; + state_machine_regs.line += adv; + printf (_(" and Line by %d to %d\n"), + adv, state_machine_regs.line); + break; + } + } + printf ("\n"); + } + + return 1; +} + +static int +display_debug_pubnames (section, start, file) + Elf32_Internal_Shdr * section; + unsigned char * start; + FILE * file ATTRIBUTE_UNUSED; +{ + DWARF2_External_PubNames * external; + DWARF2_Internal_PubNames pubnames; + unsigned char * end; + + end = start + section->sh_size; + + printf (_("Contents of the %s section:\n\n"), SECTION_NAME (section)); + + while (start < end) + { + unsigned char * data; + unsigned long offset; + + external = (DWARF2_External_PubNames *) start; + + pubnames.pn_length = BYTE_GET (external->pn_length); + pubnames.pn_version = BYTE_GET (external->pn_version); + pubnames.pn_offset = BYTE_GET (external->pn_offset); + pubnames.pn_size = BYTE_GET (external->pn_size); + + data = start + sizeof (* external); + start += pubnames.pn_length + sizeof (external->pn_length); + + if (pubnames.pn_version != 2) + { + warn (_("Only DWARF 2 pubnames are currently supported")); + continue; + } + + printf (_(" Length: %ld\n"), + pubnames.pn_length); + printf (_(" Version: %d\n"), + pubnames.pn_version); + printf (_(" Offset into .debug_info section: %ld\n"), + pubnames.pn_offset); + printf (_(" Size of area in .debug_info section: %ld\n"), + pubnames.pn_size); + + printf (_("\n Offset\tName\n")); + + do + { + offset = byte_get (data, 4); + + if (offset != 0) + { + data += 4; + printf (" %ld\t\t%s\n", offset, data); + data += strlen (data) + 1; + } + } + while (offset != 0); + } + + printf ("\n"); + return 1; +} + +static char * +get_TAG_name (tag) + unsigned long tag; +{ + switch (tag) + { + case DW_TAG_padding: return "DW_TAG_padding"; + case DW_TAG_array_type: return "DW_TAG_array_type"; + case DW_TAG_class_type: return "DW_TAG_class_type"; + case DW_TAG_entry_point: return "DW_TAG_entry_point"; + case DW_TAG_enumeration_type: return "DW_TAG_enumeration_type"; + case DW_TAG_formal_parameter: return "DW_TAG_formal_parameter"; + case DW_TAG_imported_declaration: return "DW_TAG_imported_declaration"; + case DW_TAG_label: return "DW_TAG_label"; + case DW_TAG_lexical_block: return "DW_TAG_lexical_block"; + case DW_TAG_member: return "DW_TAG_member"; + case DW_TAG_pointer_type: return "DW_TAG_pointer_type"; + case DW_TAG_reference_type: return "DW_TAG_reference_type"; + case DW_TAG_compile_unit: return "DW_TAG_compile_unit"; + case DW_TAG_string_type: return "DW_TAG_string_type"; + case DW_TAG_structure_type: return "DW_TAG_structure_type"; + case DW_TAG_subroutine_type: return "DW_TAG_subroutine_type"; + case DW_TAG_typedef: return "DW_TAG_typedef"; + case DW_TAG_union_type: return "DW_TAG_union_type"; + case DW_TAG_unspecified_parameters: return "DW_TAG_unspecified_parameters"; + case DW_TAG_variant: return "DW_TAG_variant"; + case DW_TAG_common_block: return "DW_TAG_common_block"; + case DW_TAG_common_inclusion: return "DW_TAG_common_inclusion"; + case DW_TAG_inheritance: return "DW_TAG_inheritance"; + case DW_TAG_inlined_subroutine: return "DW_TAG_inlined_subroutine"; + case DW_TAG_module: return "DW_TAG_module"; + case DW_TAG_ptr_to_member_type: return "DW_TAG_ptr_to_member_type"; + case DW_TAG_set_type: return "DW_TAG_set_type"; + case DW_TAG_subrange_type: return "DW_TAG_subrange_type"; + case DW_TAG_with_stmt: return "DW_TAG_with_stmt"; + case DW_TAG_access_declaration: return "DW_TAG_access_declaration"; + case DW_TAG_base_type: return "DW_TAG_base_type"; + case DW_TAG_catch_block: return "DW_TAG_catch_block"; + case DW_TAG_const_type: return "DW_TAG_const_type"; + case DW_TAG_constant: return "DW_TAG_constant"; + case DW_TAG_enumerator: return "DW_TAG_enumerator"; + case DW_TAG_file_type: return "DW_TAG_file_type"; + case DW_TAG_friend: return "DW_TAG_friend"; + case DW_TAG_namelist: return "DW_TAG_namelist"; + case DW_TAG_namelist_item: return "DW_TAG_namelist_item"; + case DW_TAG_packed_type: return "DW_TAG_packed_type"; + case DW_TAG_subprogram: return "DW_TAG_subprogram"; + case DW_TAG_template_type_param: return "DW_TAG_template_type_param"; + case DW_TAG_template_value_param: return "DW_TAG_template_value_param"; + case DW_TAG_thrown_type: return "DW_TAG_thrown_type"; + case DW_TAG_try_block: return "DW_TAG_try_block"; + case DW_TAG_variant_part: return "DW_TAG_variant_part"; + case DW_TAG_variable: return "DW_TAG_variable"; + case DW_TAG_volatile_type: return "DW_TAG_volatile_type"; + case DW_TAG_MIPS_loop: return "DW_TAG_MIPS_loop"; + case DW_TAG_format_label: return "DW_TAG_format_label"; + case DW_TAG_function_template: return "DW_TAG_function_template"; + case DW_TAG_class_template: return "DW_TAG_class_template"; + default: + { + static char buffer [100]; + + sprintf (buffer, _("Unknown TAG value: %lx"), tag); + return buffer; + } + } +} + +static char * +get_AT_name (attribute) + unsigned long attribute; +{ + switch (attribute) + { + case DW_AT_sibling: return "DW_AT_sibling"; + case DW_AT_location: return "DW_AT_location"; + case DW_AT_name: return "DW_AT_name"; + case DW_AT_ordering: return "DW_AT_ordering"; + case DW_AT_subscr_data: return "DW_AT_subscr_data"; + case DW_AT_byte_size: return "DW_AT_byte_size"; + case DW_AT_bit_offset: return "DW_AT_bit_offset"; + case DW_AT_bit_size: return "DW_AT_bit_size"; + case DW_AT_element_list: return "DW_AT_element_list"; + case DW_AT_stmt_list: return "DW_AT_stmt_list"; + case DW_AT_low_pc: return "DW_AT_low_pc"; + case DW_AT_high_pc: return "DW_AT_high_pc"; + case DW_AT_language: return "DW_AT_language"; + case DW_AT_member: return "DW_AT_member"; + case DW_AT_discr: return "DW_AT_discr"; + case DW_AT_discr_value: return "DW_AT_discr_value"; + case DW_AT_visibility: return "DW_AT_visibility"; + case DW_AT_import: return "DW_AT_import"; + case DW_AT_string_length: return "DW_AT_string_length"; + case DW_AT_common_reference: return "DW_AT_common_reference"; + case DW_AT_comp_dir: return "DW_AT_comp_dir"; + case DW_AT_const_value: return "DW_AT_const_value"; + case DW_AT_containing_type: return "DW_AT_containing_type"; + case DW_AT_default_value: return "DW_AT_default_value"; + case DW_AT_inline: return "DW_AT_inline"; + case DW_AT_is_optional: return "DW_AT_is_optional"; + case DW_AT_lower_bound: return "DW_AT_lower_bound"; + case DW_AT_producer: return "DW_AT_producer"; + case DW_AT_prototyped: return "DW_AT_prototyped"; + case DW_AT_return_addr: return "DW_AT_return_addr"; + case DW_AT_start_scope: return "DW_AT_start_scope"; + case DW_AT_stride_size: return "DW_AT_stride_size"; + case DW_AT_upper_bound: return "DW_AT_upper_bound"; + case DW_AT_abstract_origin: return "DW_AT_abstract_origin"; + case DW_AT_accessibility: return "DW_AT_accessibility"; + case DW_AT_address_class: return "DW_AT_address_class"; + case DW_AT_artificial: return "DW_AT_artificial"; + case DW_AT_base_types: return "DW_AT_base_types"; + case DW_AT_calling_convention: return "DW_AT_calling_convention"; + case DW_AT_count: return "DW_AT_count"; + case DW_AT_data_member_location: return "DW_AT_data_member_location"; + case DW_AT_decl_column: return "DW_AT_decl_column"; + case DW_AT_decl_file: return "DW_AT_decl_file"; + case DW_AT_decl_line: return "DW_AT_decl_line"; + case DW_AT_declaration: return "DW_AT_declaration"; + case DW_AT_discr_list: return "DW_AT_discr_list"; + case DW_AT_encoding: return "DW_AT_encoding"; + case DW_AT_external: return "DW_AT_external"; + case DW_AT_frame_base: return "DW_AT_frame_base"; + case DW_AT_friend: return "DW_AT_friend"; + case DW_AT_identifier_case: return "DW_AT_identifier_case"; + case DW_AT_macro_info: return "DW_AT_macro_info"; + case DW_AT_namelist_items: return "DW_AT_namelist_items"; + case DW_AT_priority: return "DW_AT_priority"; + case DW_AT_segment: return "DW_AT_segment"; + case DW_AT_specification: return "DW_AT_specification"; + case DW_AT_static_link: return "DW_AT_static_link"; + case DW_AT_type: return "DW_AT_type"; + case DW_AT_use_location: return "DW_AT_use_location"; + case DW_AT_variable_parameter: return "DW_AT_variable_parameter"; + case DW_AT_virtuality: return "DW_AT_virtuality"; + case DW_AT_vtable_elem_location: return "DW_AT_vtable_elem_location"; + case DW_AT_MIPS_fde: return "DW_AT_MIPS_fde"; + case DW_AT_MIPS_loop_begin: return "DW_AT_MIPS_loop_begin"; + case DW_AT_MIPS_tail_loop_begin: return "DW_AT_MIPS_tail_loop_begin"; + case DW_AT_MIPS_epilog_begin: return "DW_AT_MIPS_epilog_begin"; + case DW_AT_MIPS_loop_unroll_factor: return "DW_AT_MIPS_loop_unroll_factor"; + case DW_AT_MIPS_software_pipeline_depth: return "DW_AT_MIPS_software_pipeline_depth"; + case DW_AT_MIPS_linkage_name: return "DW_AT_MIPS_linkage_name"; + case DW_AT_MIPS_stride: return "DW_AT_MIPS_stride"; + case DW_AT_MIPS_abstract_name: return "DW_AT_MIPS_abstract_name"; + case DW_AT_MIPS_clone_origin: return "DW_AT_MIPS_clone_origin"; + case DW_AT_MIPS_has_inlines: return "DW_AT_MIPS_has_inlines"; + case DW_AT_sf_names: return "DW_AT_sf_names"; + case DW_AT_src_info: return "DW_AT_src_info"; + case DW_AT_mac_info: return "DW_AT_mac_info"; + case DW_AT_src_coords: return "DW_AT_src_coords"; + case DW_AT_body_begin: return "DW_AT_body_begin"; + case DW_AT_body_end: return "DW_AT_body_end"; + default: + { + static char buffer [100]; + + sprintf (buffer, _("Unknown AT value: %lx"), attribute); + return buffer; + } + } +} + +static char * +get_FORM_name (form) + unsigned long form; +{ + switch (form) + { + case DW_FORM_addr: return "DW_FORM_addr"; + case DW_FORM_block2: return "DW_FORM_block2"; + case DW_FORM_block4: return "DW_FORM_block4"; + case DW_FORM_data2: return "DW_FORM_data2"; + case DW_FORM_data4: return "DW_FORM_data4"; + case DW_FORM_data8: return "DW_FORM_data8"; + case DW_FORM_string: return "DW_FORM_string"; + case DW_FORM_block: return "DW_FORM_block"; + case DW_FORM_block1: return "DW_FORM_block1"; + case DW_FORM_data1: return "DW_FORM_data1"; + case DW_FORM_flag: return "DW_FORM_flag"; + case DW_FORM_sdata: return "DW_FORM_sdata"; + case DW_FORM_strp: return "DW_FORM_strp"; + case DW_FORM_udata: return "DW_FORM_udata"; + case DW_FORM_ref_addr: return "DW_FORM_ref_addr"; + case DW_FORM_ref1: return "DW_FORM_ref1"; + case DW_FORM_ref2: return "DW_FORM_ref2"; + case DW_FORM_ref4: return "DW_FORM_ref4"; + case DW_FORM_ref8: return "DW_FORM_ref8"; + case DW_FORM_ref_udata: return "DW_FORM_ref_udata"; + case DW_FORM_indirect: return "DW_FORM_indirect"; + default: + { + static char buffer [100]; + + sprintf (buffer, _("Unknown FORM value: %lx"), form); + return buffer; + } + } +} + +/* FIXME: There are better and more effiecint ways to handle + these structures. For now though, I just want something that + is simple to implement. */ +typedef struct abbrev_attr +{ + unsigned long attribute; + unsigned long form; + struct abbrev_attr * next; +} +abbrev_attr; + +typedef struct abbrev_entry +{ + unsigned long entry; + unsigned long tag; + int children; + struct abbrev_attr * first_attr; + struct abbrev_attr * last_attr; + struct abbrev_entry * next; +} +abbrev_entry; + +static abbrev_entry * first_abbrev = NULL; +static abbrev_entry * last_abbrev = NULL; + +static void +free_abbrevs PARAMS ((void)) +{ + abbrev_entry * abbrev; + + for (abbrev = first_abbrev; abbrev;) + { + abbrev_entry * next = abbrev->next; + abbrev_attr * attr; + + for (attr = abbrev->first_attr; attr;) + { + abbrev_attr * next = attr->next; + + free (attr); + attr = next; + } + + free (abbrev); + abbrev = next; + } + + last_abbrev = first_abbrev = NULL; +} + +static void +add_abbrev (number, tag, children) + unsigned long number; + unsigned long tag; + int children; +{ + abbrev_entry * entry; + + entry = (abbrev_entry *) malloc (sizeof (* entry)); + + if (entry == NULL) + /* ugg */ + return; + + entry->entry = number; + entry->tag = tag; + entry->children = children; + entry->first_attr = NULL; + entry->last_attr = NULL; + entry->next = NULL; + + if (first_abbrev == NULL) + first_abbrev = entry; + else + last_abbrev->next = entry; + + last_abbrev = entry; +} + +static void +add_abbrev_attr (attribute, form) + unsigned long attribute; + unsigned long form; +{ + abbrev_attr * attr; + + attr = (abbrev_attr *) malloc (sizeof (* attr)); + + if (attr == NULL) + /* ugg */ + return; + + attr->attribute = attribute; + attr->form = form; + attr->next = NULL; + + if (last_abbrev->first_attr == NULL) + last_abbrev->first_attr = attr; + else + last_abbrev->last_attr->next = attr; + + last_abbrev->last_attr = attr; +} + +/* Processes the (partial) contents of a .debug_abbrev section. + Returns NULL if the end of the section was encountered. + Returns the address after the last byte read if the end of + an abbreviation set was found. */ + +static unsigned char * +process_abbrev_section (start, end) + unsigned char * start; + unsigned char * end; +{ + if (first_abbrev != NULL) + return NULL; + + while (start < end) + { + int bytes_read; + unsigned long entry; + unsigned long tag; + unsigned long attribute; + int children; + + entry = read_leb128 (start, & bytes_read, 0); + start += bytes_read; + + /* A single zero is supposed to end the section according + to the standard. If there's more, then signal that to + the caller. */ + if (entry == 0) + return start == end ? NULL : start; + + tag = read_leb128 (start, & bytes_read, 0); + start += bytes_read; + + children = * start ++; + + add_abbrev (entry, tag, children); + + do + { + unsigned long form; + + attribute = read_leb128 (start, & bytes_read, 0); + start += bytes_read; + + form = read_leb128 (start, & bytes_read, 0); + start += bytes_read; + + if (attribute != 0) + add_abbrev_attr (attribute, form); + } + while (attribute != 0); + } + + return NULL; +} + + +static int +display_debug_abbrev (section, start, file) + Elf32_Internal_Shdr * section; + unsigned char * start; + FILE * file ATTRIBUTE_UNUSED; +{ + abbrev_entry * entry; + unsigned char * end = start + section->sh_size; + + printf (_("Contents of the %s section:\n\n"), SECTION_NAME (section)); + + do + { + start = process_abbrev_section (start, end); + + printf (_(" Number TAG\n")); + + for (entry = first_abbrev; entry; entry = entry->next) + { + abbrev_attr * attr; + + printf (_(" %ld %s [%s]\n"), + entry->entry, + get_TAG_name (entry->tag), + entry->children ? _("has children") : _("no children")); + + for (attr = entry->first_attr; attr; attr = attr->next) + { + printf (_(" %-18s %s\n"), + get_AT_name (attr->attribute), + get_FORM_name (attr->form)); + } + } + } + while (start); + + printf ("\n"); + + return 1; +} + + +static unsigned char * +display_block (data, length) + unsigned char * data; + unsigned long length; +{ + printf (_(" %lu byte block: "), length); + + while (length --) + printf ("%lx ", (unsigned long) byte_get (data ++, 1)); + + return data; +} + +static void +decode_location_expression (data, pointer_size) + unsigned char * data; + unsigned int pointer_size; +{ + unsigned char op; + int bytes_read; + unsigned long uvalue; + + op = * data ++; + + switch (op) + { + case DW_OP_addr: + printf ("DW_OP_addr: %lx", (unsigned long) byte_get (data, pointer_size)); + break; + case DW_OP_deref: + printf ("DW_OP_deref"); + break; + case DW_OP_const1u: + printf ("DW_OP_const1u: %lu", (unsigned long) byte_get (data, 1)); + break; + case DW_OP_const1s: + printf ("DW_OP_const1s: %ld", (long) byte_get (data, 1)); + break; + case DW_OP_const2u: + printf ("DW_OP_const2u: %lu", (unsigned long) byte_get (data, 2)); + break; + case DW_OP_const2s: + printf ("DW_OP_const2s: %ld", (long) byte_get (data, 2)); + break; + case DW_OP_const4u: + printf ("DW_OP_const4u: %lu", (unsigned long) byte_get (data, 4)); + break; + case DW_OP_const4s: + printf ("DW_OP_const4s: %ld", (long) byte_get (data, 4)); + break; + case DW_OP_const8u: + printf ("DW_OP_const8u: %lu %lu", (unsigned long) byte_get (data, 4), + (unsigned long) byte_get (data + 4, 4)); + break; + case DW_OP_const8s: + printf ("DW_OP_const8s: %ld %ld", (long) byte_get (data, 4), + (long) byte_get (data + 4, 4)); + break; + case DW_OP_constu: + printf ("DW_OP_constu: %lu", read_leb128 (data, NULL, 0)); + break; + case DW_OP_consts: + printf ("DW_OP_consts: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_dup: + printf ("DW_OP_dup"); + break; + case DW_OP_drop: + printf ("DW_OP_drop"); + break; + case DW_OP_over: + printf ("DW_OP_over"); + break; + case DW_OP_pick: + printf ("DW_OP_pick: %ld", (unsigned long) byte_get (data, 1)); + break; + case DW_OP_swap: + printf ("DW_OP_swap"); + break; + case DW_OP_rot: + printf ("DW_OP_rot"); + break; + case DW_OP_xderef: + printf ("DW_OP_xderef"); + break; + case DW_OP_abs: + printf ("DW_OP_abs"); + break; + case DW_OP_and: + printf ("DW_OP_and"); + break; + case DW_OP_div: + printf ("DW_OP_div"); + break; + case DW_OP_minus: + printf ("DW_OP_minus"); + break; + case DW_OP_mod: + printf ("DW_OP_mod"); + break; + case DW_OP_mul: + printf ("DW_OP_mul"); + break; + case DW_OP_neg: + printf ("DW_OP_neg"); + break; + case DW_OP_not: + printf ("DW_OP_not"); + break; + case DW_OP_or: + printf ("DW_OP_or"); + break; + case DW_OP_plus: + printf ("DW_OP_plus"); + break; + case DW_OP_plus_uconst: + printf ("DW_OP_plus_uconst: %lu", read_leb128 (data, NULL, 0)); + break; + case DW_OP_shl: + printf ("DW_OP_shl"); + break; + case DW_OP_shr: + printf ("DW_OP_shr"); + break; + case DW_OP_shra: + printf ("DW_OP_shra"); + break; + case DW_OP_xor: + printf ("DW_OP_xor"); + break; + case DW_OP_bra: + printf ("DW_OP_bra: %ld", (long) byte_get (data, 2)); + break; + case DW_OP_eq: + printf ("DW_OP_eq"); + break; + case DW_OP_ge: + printf ("DW_OP_ge"); + break; + case DW_OP_gt: + printf ("DW_OP_gt"); + break; + case DW_OP_le: + printf ("DW_OP_le"); + break; + case DW_OP_lt: + printf ("DW_OP_lt"); + break; + case DW_OP_ne: + printf ("DW_OP_ne"); + break; + case DW_OP_skip: + printf ("DW_OP_skip: %ld", (long) byte_get (data, 2)); + break; + case DW_OP_lit0: + printf ("DW_OP_lit0"); + break; + case DW_OP_lit1: + printf ("DW_OP_lit1"); + break; + case DW_OP_lit2: + printf ("DW_OP_lit2"); + break; + case DW_OP_lit3: + printf ("DW_OP_lit3"); + break; + case DW_OP_lit4: + printf ("DW_OP_lit4"); + break; + case DW_OP_lit5: + printf ("DW_OP_lit5"); + break; + case DW_OP_lit6: + printf ("DW_OP_lit6"); + break; + case DW_OP_lit7: + printf ("DW_OP_lit7"); + break; + case DW_OP_lit8: + printf ("DW_OP_lit8"); + break; + case DW_OP_lit9: + printf ("DW_OP_lit9"); + break; + case DW_OP_lit10: + printf ("DW_OP_lit10"); + break; + case DW_OP_lit11: + printf ("DW_OP_lit11"); + break; + case DW_OP_lit12: + printf ("DW_OP_lit12"); + break; + case DW_OP_lit13: + printf ("DW_OP_lit13"); + break; + case DW_OP_lit14: + printf ("DW_OP_lit14"); + break; + case DW_OP_lit15: + printf ("DW_OP_lit15"); + break; + case DW_OP_lit16: + printf ("DW_OP_lit16"); + break; + case DW_OP_lit17: + printf ("DW_OP_lit17"); + break; + case DW_OP_lit18: + printf ("DW_OP_lit18"); + break; + case DW_OP_lit19: + printf ("DW_OP_lit19"); + break; + case DW_OP_lit20: + printf ("DW_OP_lit20"); + break; + case DW_OP_lit21: + printf ("DW_OP_lit21"); + break; + case DW_OP_lit22: + printf ("DW_OP_lit22"); + break; + case DW_OP_lit23: + printf ("DW_OP_lit23"); + break; + case DW_OP_lit24: + printf ("DW_OP_lit24"); + break; + case DW_OP_lit25: + printf ("DW_OP_lit25"); + break; + case DW_OP_lit26: + printf ("DW_OP_lit26"); + break; + case DW_OP_lit27: + printf ("DW_OP_lit27"); + break; + case DW_OP_lit28: + printf ("DW_OP_lit28"); + break; + case DW_OP_lit29: + printf ("DW_OP_lit29"); + break; + case DW_OP_lit30: + printf ("DW_OP_lit30"); + break; + case DW_OP_lit31: + printf ("DW_OP_lit31"); + break; + case DW_OP_reg0: + printf ("DW_OP_reg0"); + break; + case DW_OP_reg1: + printf ("DW_OP_reg1"); + break; + case DW_OP_reg2: + printf ("DW_OP_reg2"); + break; + case DW_OP_reg3: + printf ("DW_OP_reg3"); + break; + case DW_OP_reg4: + printf ("DW_OP_reg4"); + break; + case DW_OP_reg5: + printf ("DW_OP_reg5"); + break; + case DW_OP_reg6: + printf ("DW_OP_reg6"); + break; + case DW_OP_reg7: + printf ("DW_OP_reg7"); + break; + case DW_OP_reg8: + printf ("DW_OP_reg8"); + break; + case DW_OP_reg9: + printf ("DW_OP_reg9"); + break; + case DW_OP_reg10: + printf ("DW_OP_reg10"); + break; + case DW_OP_reg11: + printf ("DW_OP_reg11"); + break; + case DW_OP_reg12: + printf ("DW_OP_reg12"); + break; + case DW_OP_reg13: + printf ("DW_OP_reg13"); + break; + case DW_OP_reg14: + printf ("DW_OP_reg14"); + break; + case DW_OP_reg15: + printf ("DW_OP_reg15"); + break; + case DW_OP_reg16: + printf ("DW_OP_reg16"); + break; + case DW_OP_reg17: + printf ("DW_OP_reg17"); + break; + case DW_OP_reg18: + printf ("DW_OP_reg18"); + break; + case DW_OP_reg19: + printf ("DW_OP_reg19"); + break; + case DW_OP_reg20: + printf ("DW_OP_reg20"); + break; + case DW_OP_reg21: + printf ("DW_OP_reg21"); + break; + case DW_OP_reg22: + printf ("DW_OP_reg22"); + break; + case DW_OP_reg23: + printf ("DW_OP_reg23"); + break; + case DW_OP_reg24: + printf ("DW_OP_reg24"); + break; + case DW_OP_reg25: + printf ("DW_OP_reg25"); + break; + case DW_OP_reg26: + printf ("DW_OP_reg26"); + break; + case DW_OP_reg27: + printf ("DW_OP_reg27"); + break; + case DW_OP_reg28: + printf ("DW_OP_reg28"); + break; + case DW_OP_reg29: + printf ("DW_OP_reg29"); + break; + case DW_OP_reg30: + printf ("DW_OP_reg30"); + break; + case DW_OP_reg31: + printf ("DW_OP_reg31"); + break; + case DW_OP_breg0: + printf ("DW_OP_breg0: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg1: + printf ("DW_OP_breg1: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg2: + printf ("DW_OP_breg2: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg3: + printf ("DW_OP_breg3: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg4: + printf ("DW_OP_breg4: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg5: + printf ("DW_OP_breg5: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg6: + printf ("DW_OP_breg6: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg7: + printf ("DW_OP_breg7: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg8: + printf ("DW_OP_breg8: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg9: + printf ("DW_OP_breg9: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg10: + printf ("DW_OP_breg10: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg11: + printf ("DW_OP_breg11: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg12: + printf ("DW_OP_breg12: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg13: + printf ("DW_OP_breg13: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg14: + printf ("DW_OP_breg14: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg15: + printf ("DW_OP_breg15: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg16: + printf ("DW_OP_breg16: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg17: + printf ("DW_OP_breg17: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg18: + printf ("DW_OP_breg18: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg19: + printf ("DW_OP_breg19: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg20: + printf ("DW_OP_breg20: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg21: + printf ("DW_OP_breg21: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg22: + printf ("DW_OP_breg22: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg23: + printf ("DW_OP_breg23: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg24: + printf ("DW_OP_breg24: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg25: + printf ("DW_OP_breg25: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg26: + printf ("DW_OP_breg26: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg27: + printf ("DW_OP_breg27: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg28: + printf ("DW_OP_breg28: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg29: + printf ("DW_OP_breg29: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg30: + printf ("DW_OP_breg30: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_breg31: + printf ("DW_OP_breg31: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_regx: + printf ("DW_OP_regx: %lu", read_leb128 (data, NULL, 0)); + break; + case DW_OP_fbreg: + printf ("DW_OP_fbreg: %ld", read_leb128 (data, NULL, 1)); + break; + case DW_OP_bregx: + uvalue = read_leb128 (data, &bytes_read, 0); + printf ("DW_OP_bregx: %lu %ld", uvalue, + read_leb128 (data + bytes_read, NULL, 1)); + break; + case DW_OP_piece: + printf ("DW_OP_piece: %lu", read_leb128 (data, NULL, 0)); + break; + case DW_OP_deref_size: + printf ("DW_OP_deref_size: %ld", (long) byte_get (data, 1)); + break; + case DW_OP_xderef_size: + printf ("DW_OP_xderef_size: %ld", (long) byte_get (data, 1)); + break; + case DW_OP_nop: + printf ("DW_OP_nop"); + break; + + default: + if (op >= DW_OP_lo_user + && op <= DW_OP_hi_user) + printf (_("(User defined location op)")); + else + printf (_("(Unknown location op)")); + break; + } +} + + +static unsigned char * +read_and_display_attr (attribute, form, data, pointer_size) + unsigned long attribute; + unsigned long form; + unsigned char * data; + unsigned long pointer_size; +{ + unsigned long uvalue = 0; + unsigned char * block_start = NULL; + int bytes_read; + int is_ref = 0; + + printf (" %-18s:", get_AT_name (attribute)); + + switch (form) + { + case DW_FORM_ref_addr: + case DW_FORM_ref1: + case DW_FORM_ref2: + case DW_FORM_ref4: + case DW_FORM_ref8: + case DW_FORM_ref_udata: + is_ref = 1; + } + + switch (form) + { + case DW_FORM_ref_addr: + case DW_FORM_addr: + uvalue = byte_get (data, pointer_size); + printf (is_ref ? " <%lx>" : " %#lx", uvalue); + data += pointer_size; + break; + + case DW_FORM_ref1: + case DW_FORM_flag: + case DW_FORM_data1: + uvalue = byte_get (data ++, 1); + printf (is_ref ? " <%lx>" : " %ld", uvalue); + break; + + case DW_FORM_ref2: + case DW_FORM_data2: + uvalue = byte_get (data, 2); + data += 2; + printf (is_ref ? " <%lx>" : " %ld", uvalue); + break; + + case DW_FORM_ref4: + case DW_FORM_data4: + uvalue = byte_get (data, 4); + data += 4; + printf (is_ref ? " <%lx>" : " %ld", uvalue); + break; + + case DW_FORM_ref8: + case DW_FORM_data8: + uvalue = byte_get (data, 4); + printf (" %lx", uvalue); + printf (" %lx", (unsigned long) byte_get (data + 4, 4)); + data += 8; + break; + + case DW_FORM_string: + printf (" %s", data); + data += strlen (data) + 1; + break; + + case DW_FORM_sdata: + uvalue = read_leb128 (data, & bytes_read, 1); + data += bytes_read; + printf (" %ld", (long) uvalue); + break; + + case DW_FORM_ref_udata: + case DW_FORM_udata: + uvalue = read_leb128 (data, & bytes_read, 0); + data += bytes_read; + printf (is_ref ? " <%lx>" : " %ld", uvalue); + break; + + case DW_FORM_block: + uvalue = read_leb128 (data, & bytes_read, 0); + block_start = data + bytes_read; + data = display_block (block_start, uvalue); + uvalue = * block_start; + break; + + case DW_FORM_block1: + uvalue = byte_get (data, 1); + block_start = data + 1; + data = display_block (block_start, uvalue); + uvalue = * block_start; + break; + + case DW_FORM_block2: + uvalue = byte_get (data, 2); + block_start = data + 2; + data = display_block (block_start, uvalue); + uvalue = * block_start; + break; + + case DW_FORM_block4: + uvalue = byte_get (data, 4); + block_start = data + 4; + data = display_block (block_start, uvalue); + uvalue = * block_start; + break; + + case DW_FORM_strp: + case DW_FORM_indirect: + warn (_("Unable to handle FORM: %d"), form); + break; + + default: + warn (_("Unrecognised form: %d"), form); + break; + } + + /* For some attributes we can display futher information. */ + + printf ("\t"); + + switch (attribute) + { + case DW_AT_inline: + switch (uvalue) + { + case DW_INL_not_inlined: printf (_("(not inlined)")); break; + case DW_INL_inlined: printf (_("(inlined)")); break; + case DW_INL_declared_not_inlined: printf (_("(declared as inline but ignored)")); break; + case DW_INL_declared_inlined: printf (_("(declared as inline and inlined)")); break; + default: printf (_(" (Unknown inline attribute value: %lx)"), uvalue); break; + } + break; + + case DW_AT_frame_base: + if (uvalue >= DW_OP_reg0 && uvalue <= DW_OP_reg31) + printf ("(reg %ld)", uvalue - DW_OP_reg0); + break; + + case DW_AT_language: + switch (uvalue) + { + case DW_LANG_C: printf ("(non-ANSI C)"); break; + case DW_LANG_C89: printf ("(ANSI C)"); break; + case DW_LANG_C_plus_plus: printf ("(C++)"); break; + case DW_LANG_Fortran77: printf ("(FORTRAN 77)"); break; + case DW_LANG_Fortran90: printf ("(Fortran 90)"); break; + case DW_LANG_Modula2: printf ("(Modula 2)"); break; + case DW_LANG_Pascal83: printf ("(ANSI Pascal)"); break; + case DW_LANG_Ada83: printf ("(Ada)"); break; + case DW_LANG_Cobol74: printf ("(Cobol 74)"); break; + case DW_LANG_Cobol85: printf ("(Cobol 85)"); break; + case DW_LANG_Mips_Assembler: printf ("(MIPS assembler)"); break; + default: printf ("(Unknown: %lx)", uvalue); break; + } + break; + + case DW_AT_encoding: + switch (uvalue) + { + case DW_ATE_void: printf ("(void)"); break; + case DW_ATE_address: printf ("(machine address)"); break; + case DW_ATE_boolean: printf ("(boolean)"); break; + case DW_ATE_complex_float: printf ("(complex float)"); break; + case DW_ATE_float: printf ("(float)"); break; + case DW_ATE_signed: printf ("(signed)"); break; + case DW_ATE_signed_char: printf ("(signed char)"); break; + case DW_ATE_unsigned: printf ("(unsigned)"); break; + case DW_ATE_unsigned_char: printf ("(unsigned char)"); break; + default: + if (uvalue >= DW_ATE_lo_user + && uvalue <= DW_ATE_hi_user) + printf ("(user defined type)"); + else + printf ("(unknown type)"); + break; + } + break; + + case DW_AT_accessibility: + switch (uvalue) + { + case DW_ACCESS_public: printf ("(public)"); break; + case DW_ACCESS_protected: printf ("(protected)"); break; + case DW_ACCESS_private: printf ("(private)"); break; + default: printf ("(unknown accessibility)"); break; + } + break; + + case DW_AT_visibility: + switch (uvalue) + { + case DW_VIS_local: printf ("(local)"); break; + case DW_VIS_exported: printf ("(exported)"); break; + case DW_VIS_qualified: printf ("(qualified)"); break; + default: printf ("(unknown visibility)"); break; + } + break; + + case DW_AT_virtuality: + switch (uvalue) + { + case DW_VIRTUALITY_none: printf ("(none)"); break; + case DW_VIRTUALITY_virtual: printf ("(virtual)"); break; + case DW_VIRTUALITY_pure_virtual:printf ("(pure_virtual)"); break; + default: printf ("(unknown virtuality)"); break; + } + break; + + case DW_AT_identifier_case: + switch (uvalue) + { + case DW_ID_case_sensitive: printf ("(case_sensitive)"); break; + case DW_ID_up_case: printf ("(up_case)"); break; + case DW_ID_down_case: printf ("(down_case)"); break; + case DW_ID_case_insensitive: printf ("(case_insensitive)"); break; + default: printf ("(unknown case)"); break; + } + break; + + case DW_AT_calling_convention: + switch (uvalue) + { + case DW_CC_normal: printf ("(normal)"); break; + case DW_CC_program: printf ("(program)"); break; + case DW_CC_nocall: printf ("(nocall)"); break; + default: + if (uvalue >= DW_CC_lo_user + && uvalue <= DW_CC_hi_user) + printf ("(user defined)"); + else + printf ("(unknown convention)"); + } + break; + + case DW_AT_location: + case DW_AT_data_member_location: + case DW_AT_vtable_elem_location: + printf ("("); + decode_location_expression (block_start, pointer_size); + printf (")"); + break; + + default: + break; + } + + printf ("\n"); + return data; +} + +static int +display_debug_info (section, start, file) + Elf32_Internal_Shdr * section; + unsigned char * start; + FILE * file; +{ + unsigned char * end = start + section->sh_size; + unsigned char * section_begin = start; + + printf (_("The section %s contains:\n\n"), SECTION_NAME (section)); + + while (start < end) + { + DWARF2_External_CompUnit * external; + DWARF2_Internal_CompUnit compunit; + unsigned char * tags; + int i; + int level; + + external = (DWARF2_External_CompUnit *) start; + + compunit.cu_length = BYTE_GET (external->cu_length); + compunit.cu_version = BYTE_GET (external->cu_version); + compunit.cu_abbrev_offset = BYTE_GET (external->cu_abbrev_offset); + compunit.cu_pointer_size = BYTE_GET (external->cu_pointer_size); + + tags = start + sizeof (* external); + start += compunit.cu_length + sizeof (external->cu_length); + + if (compunit.cu_version != 2) + { + warn (_("Only version 2 DWARF debug information is currently supported.\n")); + continue; + } + + printf (_(" Compilation Unit:\n")); + printf (_(" Length: %ld\n"), compunit.cu_length); + printf (_(" Version: %d\n"), compunit.cu_version); + printf (_(" Abbrev Offset: %ld\n"), compunit.cu_abbrev_offset); + printf (_(" Pointer Size: %d\n"), compunit.cu_pointer_size); + + if (first_abbrev != NULL) + free_abbrevs (); + + /* Read in the abbrevs used by this compilation unit. */ + + { + Elf32_Internal_Shdr * sec; + unsigned char * begin; + + /* Locate the .debug_abbrev section and process it. */ + for (i = 0, sec = section_headers; + i < elf_header.e_shnum; + i ++, sec ++) + if (strcmp (SECTION_NAME (sec), ".debug_abbrev") == 0) + break; + + if (i == -1 || sec->sh_size == 0) + { + warn (_("Unable to locate .debug_abbrev section!\n")); + return 0; + } + + GET_DATA_ALLOC (sec->sh_offset, sec->sh_size, begin, unsigned char *, + "debug_abbrev section data"); + + process_abbrev_section (begin + compunit.cu_abbrev_offset, + begin + sec->sh_size); + + free (begin); + } + + level = 0; + while (tags < start) + { + int bytes_read; + unsigned long abbrev_number; + abbrev_entry * entry; + abbrev_attr * attr; + + abbrev_number = read_leb128 (tags, & bytes_read, 0); + tags += bytes_read; + + /* A null DIE marks the end of a list of children. */ + if (abbrev_number == 0) + { + --level; + continue; + } + + /* Scan through the abbreviation list until we reach the + correct entry. */ + for (entry = first_abbrev; + entry && entry->entry != abbrev_number; + entry = entry->next) + continue; + + if (entry == NULL) + { + warn (_("Unable to locate entry %lu in the abbreviation table\n"), + abbrev_number); + return 0; + } + + printf (_(" <%d><%x>: Abbrev Number: %lu (%s)\n"), + level, tags - section_begin - bytes_read, + abbrev_number, + get_TAG_name (entry->tag)); + + for (attr = entry->first_attr; attr; attr = attr->next) + tags = read_and_display_attr (attr->attribute, + attr->form, + tags, + compunit.cu_pointer_size); + + if (entry->children) + ++level; + } + } + + printf ("\n"); + + return 1; +} + +static int +display_debug_aranges (section, start, file) + Elf32_Internal_Shdr * section; + unsigned char * start; + FILE * file ATTRIBUTE_UNUSED; +{ + unsigned char * end = start + section->sh_size; + + printf (_("The section %s contains:\n\n"), SECTION_NAME (section)); + + while (start < end) + { + DWARF2_External_ARange * external; + DWARF2_Internal_ARange arange; + unsigned char * ranges; + unsigned long length; + unsigned long address; + int excess; + + external = (DWARF2_External_ARange *) start; + + arange.ar_length = BYTE_GET (external->ar_length); + arange.ar_version = BYTE_GET (external->ar_version); + arange.ar_info_offset = BYTE_GET (external->ar_info_offset); + arange.ar_pointer_size = BYTE_GET (external->ar_pointer_size); + arange.ar_segment_size = BYTE_GET (external->ar_segment_size); + + printf (_(" Length: %ld\n"), arange.ar_length); + printf (_(" Version: %d\n"), arange.ar_version); + printf (_(" Offset into .debug_info: %lx\n"), arange.ar_info_offset); + printf (_(" Pointer Size: %d\n"), arange.ar_pointer_size); + printf (_(" Segment Size: %d\n"), arange.ar_segment_size); + + printf (_("\n Address Length\n")); + + ranges = start + sizeof (* external); + + /* Must pad to an alignment boundary that is twice the pointer size. */ + excess = sizeof (*external) % (2 * arange.ar_pointer_size); + if (excess) + ranges += (2 * arange.ar_pointer_size) - excess; + + for (;;) + { + address = byte_get (ranges, arange.ar_pointer_size); + + ranges += arange.ar_pointer_size; + + length = byte_get (ranges, arange.ar_pointer_size); + + ranges += arange.ar_pointer_size; + + /* A pair of zeros marks the end of the list. */ + if (address == 0 && length == 0) + break; + + printf (" %8.8lx %lu\n", address, length); + } + + start += arange.ar_length + sizeof (external->ar_length); + } + + printf ("\n"); + + return 1; +} + + +static int +display_debug_not_supported (section, start, file) + Elf32_Internal_Shdr * section; + unsigned char * start ATTRIBUTE_UNUSED; + FILE * file ATTRIBUTE_UNUSED; +{ + printf (_("Displaying the debug contents of section %s is not yet supported.\n"), + SECTION_NAME (section)); + + return 1; +} + +/* Pre-scan the .debug_info section to record the size of address. + When dumping the .debug_line, we use that size information, assuming + that all compilation units have the same address size. */ +static int +prescan_debug_info (section, start, file) + Elf32_Internal_Shdr * section ATTRIBUTE_UNUSED; + unsigned char * start; + FILE * file ATTRIBUTE_UNUSED; +{ + DWARF2_External_CompUnit * external; + + external = (DWARF2_External_CompUnit *) start; + + debug_line_pointer_size = BYTE_GET (external->cu_pointer_size); + return 0; +} + + /* A structure containing the name of a debug section and a pointer + to a function that can decode it. The third field is a prescan + function to be run over the section before displaying any of the + sections. */ +struct +{ + char * name; + int (* display) PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *)); + int (* prescan) PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *)); +} +debug_displays[] = +{ + { ".debug_info", display_debug_info, prescan_debug_info }, + { ".debug_abbrev", display_debug_abbrev, NULL }, + { ".debug_line", display_debug_lines, NULL }, + { ".debug_aranges", display_debug_aranges, NULL }, + { ".debug_pubnames", display_debug_pubnames, NULL }, + { ".debug_macinfo", display_debug_not_supported, NULL }, + { ".debug_frame", display_debug_not_supported, NULL }, + { ".debug_str", display_debug_not_supported, NULL }, + { ".debug_static_func", display_debug_not_supported, NULL }, + { ".debug_static_vars", display_debug_not_supported, NULL }, + { ".debug_types", display_debug_not_supported, NULL }, + { ".debug_weaknames", display_debug_not_supported, NULL } +}; + +static int +display_debug_section (section, file) + Elf32_Internal_Shdr * section; + FILE * file; +{ + char * name = SECTION_NAME (section); + bfd_size_type length; + unsigned char * start; + int i; + + length = section->sh_size; + if (length == 0) + { + printf (_("\nSection '%s' has no debugging data.\n"), name); + return 0; + } + + GET_DATA_ALLOC (section->sh_offset, length, start, unsigned char *, + "debug section data"); + + /* See if we know how to display the contents of this section. */ + for (i = NUM_ELEM (debug_displays); i--;) + if (strcmp (debug_displays[i].name, name) == 0) + { + debug_displays[i].display (section, start, file); + break; + } + + if (i == -1) + printf (_("Unrecognised debug section: %s\n"), name); + + free (start); + + /* If we loaded in the abbrev section at some point, + we must release it here. */ + if (first_abbrev != NULL) + free_abbrevs (); + + return 1; +} + +static int +process_section_contents (file) + FILE * file; +{ + Elf32_Internal_Shdr * section; + unsigned int i; + + if (! do_dump) + return 1; + + /* Pre-scan the debug sections to find some debug information not + present in some of them. For the .debug_line, we must find out the + size of address (specified in .debug_info and .debug_aranges). */ + for (i = 0, section = section_headers; + i < elf_header.e_shnum && i < num_dump_sects; + i ++, section ++) + { + char * name = SECTION_NAME (section); + int j; + + if (section->sh_size == 0) + continue; + + /* See if there is some pre-scan operation for this section. */ + for (j = NUM_ELEM (debug_displays); j--;) + if (strcmp (debug_displays[j].name, name) == 0) + { + if (debug_displays[j].prescan != NULL) + { + bfd_size_type length; + unsigned char * start; + + length = section->sh_size; + GET_DATA_ALLOC (section->sh_offset, length, start, unsigned char *, + "debug section data"); + + debug_displays[j].prescan (section, start, file); + free (start); + } + + break; + } + } + + for (i = 0, section = section_headers; + i < elf_header.e_shnum && i < num_dump_sects; + i ++, section ++) + { +#ifdef SUPPORT_DISASSEMBLY + if (dump_sects[i] & DISASS_DUMP) + disassemble_section (section, file); +#endif + if (dump_sects[i] & HEX_DUMP) + dump_section (section, file); + + if (dump_sects[i] & DEBUG_DUMP) + display_debug_section (section, file); + } + + if (i < num_dump_sects) + warn (_("Some sections were not dumped because they do not exist!\n")); + + return 1; +} + +static void +process_mips_fpe_exception (mask) + int mask; +{ + if (mask) + { + int first = 1; + if (mask & OEX_FPU_INEX) + fputs ("INEX", stdout), first = 0; + if (mask & OEX_FPU_UFLO) + printf ("%sUFLO", first ? "" : "|"), first = 0; + if (mask & OEX_FPU_OFLO) + printf ("%sOFLO", first ? "" : "|"), first = 0; + if (mask & OEX_FPU_DIV0) + printf ("%sDIV0", first ? "" : "|"), first = 0; + if (mask & OEX_FPU_INVAL) + printf ("%sINVAL", first ? "" : "|"); + } + else + fputs ("0", stdout); +} + +static int +process_mips_specific (file) + FILE * file; +{ + Elf_Internal_Dyn * entry; + size_t liblist_offset = 0; + size_t liblistno = 0; + size_t conflictsno = 0; + size_t options_offset = 0; + size_t conflicts_offset = 0; + + /* We have a lot of special sections. Thanks SGI! */ + if (dynamic_segment == NULL) + /* No information available. */ + return 0; + + for (entry = dynamic_segment; entry->d_tag != DT_NULL; ++entry) + switch (entry->d_tag) + { + case DT_MIPS_LIBLIST: + liblist_offset = entry->d_un.d_val - loadaddr; + break; + case DT_MIPS_LIBLISTNO: + liblistno = entry->d_un.d_val; + break; + case DT_MIPS_OPTIONS: + options_offset = entry->d_un.d_val - loadaddr; + break; + case DT_MIPS_CONFLICT: + conflicts_offset = entry->d_un.d_val - loadaddr; + break; + case DT_MIPS_CONFLICTNO: + conflictsno = entry->d_un.d_val; + break; + default: + break; + } + + if (liblist_offset != 0 && liblistno != 0 && do_dynamic) + { + Elf32_External_Lib * elib; + size_t cnt; + + GET_DATA_ALLOC (liblist_offset, liblistno * sizeof (Elf32_External_Lib), + elib, Elf32_External_Lib *, "liblist"); + + printf ("\nSection '.liblist' contains %lu entries:\n", + (unsigned long) liblistno); + fputs (" Library Time Stamp Checksum Version Flags\n", + stdout); + + for (cnt = 0; cnt < liblistno; ++cnt) + { + Elf32_Lib liblist; + time_t time; + char timebuf[20]; + struct tm * tmp; + + liblist.l_name = BYTE_GET (elib[cnt].l_name); + time = BYTE_GET (elib[cnt].l_time_stamp); + liblist.l_checksum = BYTE_GET (elib[cnt].l_checksum); + liblist.l_version = BYTE_GET (elib[cnt].l_version); + liblist.l_flags = BYTE_GET (elib[cnt].l_flags); + + tmp = gmtime (&time); + sprintf (timebuf, "%04u-%02u-%02uT%02u:%02u:%02u", + tmp->tm_year + 1900, tmp->tm_mon + 1, tmp->tm_mday, + tmp->tm_hour, tmp->tm_min, tmp->tm_sec); + + printf ("%3lu: %-20s %s %#10lx %-7ld", (unsigned long) cnt, + dynamic_strings + liblist.l_name, timebuf, + liblist.l_checksum, liblist.l_version); + + if (liblist.l_flags == 0) + puts (" NONE"); + else + { + static const struct + { + const char * name; + int bit; + } + l_flags_vals[] = + { + { " EXACT_MATCH", LL_EXACT_MATCH }, + { " IGNORE_INT_VER", LL_IGNORE_INT_VER }, + { " REQUIRE_MINOR", LL_REQUIRE_MINOR }, + { " EXPORTS", LL_EXPORTS }, + { " DELAY_LOAD", LL_DELAY_LOAD }, + { " DELTA", LL_DELTA } + }; + int flags = liblist.l_flags; + size_t fcnt; + + for (fcnt = 0; + fcnt < sizeof (l_flags_vals) / sizeof (l_flags_vals[0]); + ++fcnt) + if ((flags & l_flags_vals[fcnt].bit) != 0) + { + fputs (l_flags_vals[fcnt].name, stdout); + flags ^= l_flags_vals[fcnt].bit; + } + if (flags != 0) + printf (" %#x", (unsigned int) flags); + + puts (""); + } + } + + free (elib); + } + + if (options_offset != 0) + { + Elf_External_Options * eopt; + Elf_Internal_Shdr * sect = section_headers; + Elf_Internal_Options * iopt; + Elf_Internal_Options * option; + size_t offset; + int cnt; + + /* Find the section header so that we get the size. */ + while (sect->sh_type != SHT_MIPS_OPTIONS) + ++ sect; + + GET_DATA_ALLOC (options_offset, sect->sh_size, eopt, + Elf_External_Options *, "options"); + + iopt = (Elf_Internal_Options *) malloc ((sect->sh_size / sizeof (eopt)) + * sizeof (*iopt)); + if (iopt == NULL) + { + error (_("Out of memory")); + return 0; + } + + offset = cnt = 0; + option = iopt; + + while (offset < sect->sh_size) + { + Elf_External_Options * eoption; + + eoption = (Elf_External_Options *) ((char *) eopt + offset); + + option->kind = BYTE_GET (eoption->kind); + option->size = BYTE_GET (eoption->size); + option->section = BYTE_GET (eoption->section); + option->info = BYTE_GET (eoption->info); + + offset += option->size; + + ++option; + ++cnt; + } + + printf (_("\nSection '%s' contains %d entries:\n"), + string_table + sect->sh_name, cnt); + + option = iopt; + + while (cnt-- > 0) + { + size_t len; + + switch (option->kind) + { + case ODK_NULL: + /* This shouldn't happen. */ + printf (" NULL %d %lx", option->section, option->info); + break; + case ODK_REGINFO: + printf (" REGINFO "); + if (elf_header.e_machine == EM_MIPS) + { + /* 32bit form. */ + Elf32_External_RegInfo *ereg; + Elf32_RegInfo reginfo; + + ereg = (Elf32_External_RegInfo *) (option + 1); + reginfo.ri_gprmask = BYTE_GET (ereg->ri_gprmask); + reginfo.ri_cprmask[0] = BYTE_GET (ereg->ri_cprmask[0]); + reginfo.ri_cprmask[1] = BYTE_GET (ereg->ri_cprmask[1]); + reginfo.ri_cprmask[2] = BYTE_GET (ereg->ri_cprmask[2]); + reginfo.ri_cprmask[3] = BYTE_GET (ereg->ri_cprmask[3]); + reginfo.ri_gp_value = BYTE_GET (ereg->ri_gp_value); + + printf ("GPR %08lx GP 0x%lx\n", + reginfo.ri_gprmask, + (unsigned long) reginfo.ri_gp_value); + printf (" CPR0 %08lx CPR1 %08lx CPR2 %08lx CPR3 %08lx\n", + reginfo.ri_cprmask[0], reginfo.ri_cprmask[1], + reginfo.ri_cprmask[2], reginfo.ri_cprmask[3]); + } + else + { + /* 64 bit form. */ + Elf64_External_RegInfo * ereg; + Elf64_Internal_RegInfo reginfo; + + ereg = (Elf64_External_RegInfo *) (option + 1); + reginfo.ri_gprmask = BYTE_GET (ereg->ri_gprmask); + reginfo.ri_cprmask[0] = BYTE_GET (ereg->ri_cprmask[0]); + reginfo.ri_cprmask[1] = BYTE_GET (ereg->ri_cprmask[1]); + reginfo.ri_cprmask[2] = BYTE_GET (ereg->ri_cprmask[2]); + reginfo.ri_cprmask[3] = BYTE_GET (ereg->ri_cprmask[3]); + reginfo.ri_gp_value = BYTE_GET8 (ereg->ri_gp_value); + + printf ("GPR %08lx GP 0x", + reginfo.ri_gprmask); + printf_vma (reginfo.ri_gp_value); + printf ("\n"); + + printf (" CPR0 %08lx CPR1 %08lx CPR2 %08lx CPR3 %08lx\n", + reginfo.ri_cprmask[0], reginfo.ri_cprmask[1], + reginfo.ri_cprmask[2], reginfo.ri_cprmask[3]); + } + ++option; + continue; + case ODK_EXCEPTIONS: + fputs (" EXCEPTIONS fpe_min(", stdout); + process_mips_fpe_exception (option->info & OEX_FPU_MIN); + fputs (") fpe_max(", stdout); + process_mips_fpe_exception ((option->info & OEX_FPU_MAX) >> 8); + fputs (")", stdout); + + if (option->info & OEX_PAGE0) + fputs (" PAGE0", stdout); + if (option->info & OEX_SMM) + fputs (" SMM", stdout); + if (option->info & OEX_FPDBUG) + fputs (" FPDBUG", stdout); + if (option->info & OEX_DISMISS) + fputs (" DISMISS", stdout); + break; + case ODK_PAD: + fputs (" PAD ", stdout); + if (option->info & OPAD_PREFIX) + fputs (" PREFIX", stdout); + if (option->info & OPAD_POSTFIX) + fputs (" POSTFIX", stdout); + if (option->info & OPAD_SYMBOL) + fputs (" SYMBOL", stdout); + break; + case ODK_HWPATCH: + fputs (" HWPATCH ", stdout); + if (option->info & OHW_R4KEOP) + fputs (" R4KEOP", stdout); + if (option->info & OHW_R8KPFETCH) + fputs (" R8KPFETCH", stdout); + if (option->info & OHW_R5KEOP) + fputs (" R5KEOP", stdout); + if (option->info & OHW_R5KCVTL) + fputs (" R5KCVTL", stdout); + break; + case ODK_FILL: + fputs (" FILL ", stdout); + /* XXX Print content of info word? */ + break; + case ODK_TAGS: + fputs (" TAGS ", stdout); + /* XXX Print content of info word? */ + break; + case ODK_HWAND: + fputs (" HWAND ", stdout); + if (option->info & OHWA0_R4KEOP_CHECKED) + fputs (" R4KEOP_CHECKED", stdout); + if (option->info & OHWA0_R4KEOP_CLEAN) + fputs (" R4KEOP_CLEAN", stdout); + break; + case ODK_HWOR: + fputs (" HWOR ", stdout); + if (option->info & OHWA0_R4KEOP_CHECKED) + fputs (" R4KEOP_CHECKED", stdout); + if (option->info & OHWA0_R4KEOP_CLEAN) + fputs (" R4KEOP_CLEAN", stdout); + break; + case ODK_GP_GROUP: + printf (" GP_GROUP %#06lx self-contained %#06lx", + option->info & OGP_GROUP, + (option->info & OGP_SELF) >> 16); + break; + case ODK_IDENT: + printf (" IDENT %#06lx self-contained %#06lx", + option->info & OGP_GROUP, + (option->info & OGP_SELF) >> 16); + break; + default: + /* This shouldn't happen. */ + printf (" %3d ??? %d %lx", + option->kind, option->section, option->info); + break; + } + + len = sizeof (*eopt); + while (len < option->size) + if (((char *) option)[len] >= ' ' + && ((char *) option)[len] < 0x7f) + printf ("%c", ((char *) option)[len++]); + else + printf ("\\%03o", ((char *) option)[len++]); + + fputs ("\n", stdout); + ++option; + } + + free (eopt); + } + + if (conflicts_offset != 0 && conflictsno != 0) + { + Elf32_External_Conflict * econf32; + Elf64_External_Conflict * econf64; + Elf32_Conflict * iconf; + size_t cnt; + + if (dynamic_symbols == NULL) + { + error (_("conflict list with without table")); + return 0; + } + + iconf = (Elf32_Conflict *) malloc (conflictsno * sizeof (*iconf)); + if (iconf == NULL) + { + error (_("Out of memory")); + return 0; + } + + if (is_32bit_elf) + { + GET_DATA_ALLOC (conflicts_offset, conflictsno * sizeof (*econf32), + econf32, Elf32_External_Conflict *, "conflict"); + + for (cnt = 0; cnt < conflictsno; ++cnt) + iconf[cnt] = BYTE_GET (econf32[cnt]); + } + else + { + GET_DATA_ALLOC (conflicts_offset, conflictsno * sizeof (*econf64), + econf64, Elf64_External_Conflict *, "conflict"); + + for (cnt = 0; cnt < conflictsno; ++cnt) + iconf[cnt] = BYTE_GET (econf64[cnt]); + } + + printf (_("\nSection '.conflict' contains %d entries:\n"), conflictsno); + puts (_(" Num: Index Value Name")); + + for (cnt = 0; cnt < conflictsno; ++cnt) + { + Elf_Internal_Sym * psym = &dynamic_symbols[iconf[cnt]]; + + printf ("%5lu: %8lu ", (unsigned long) cnt, iconf[cnt]); + print_vma (psym->st_value, FULL_HEX); + printf (" %s\n", dynamic_strings + psym->st_name); + } + + free (iconf); + } + + return 1; +} + +static char * +get_note_type (e_type) + unsigned e_type; +{ + static char buff[64]; + + switch (e_type) + { + case NT_PRSTATUS: return _("NT_PRSTATUS (prstatus structure)"); + case NT_FPREGSET: return _("NT_FPREGSET (floating point registers)"); + case NT_PRPSINFO: return _("NT_PRPSINFO (prpsinfo structure)"); + case NT_TASKSTRUCT: return _("NT_TASKSTRUCT (task structure)"); + case NT_PRXFPREG: return _("NT_PRXFPREG (user_xfpregs structure)"); + case NT_PSTATUS: return _("NT_PSTATUS (pstatus structure)"); + case NT_FPREGS: return _("NT_FPREGS (floating point registers)"); + case NT_PSINFO: return _("NT_PSINFO (psinfo structure)"); + case NT_LWPSTATUS: return _("NT_LWPSTATUS (lwpstatus_t structure)"); + case NT_LWPSINFO: return _("NT_LWPSINFO (lwpsinfo_t structure)"); + case NT_WIN32PSTATUS: return _("NT_WIN32PSTATUS (win32_pstatus strcuture)"); + default: + sprintf (buff, _("Unknown note type: (0x%08x)"), e_type); + return buff; + } +} + +/* Note that by the ELF standard, the name field is already null byte + terminated, and namesz includes the terminating null byte. + I.E. the value of namesz for the name "FSF" is 4. + + If the value of namesz is zero, there is no name present. */ +static int +process_note (pnote) + Elf32_Internal_Note * pnote; +{ + printf (" %s\t\t0x%08lx\t%s\n", + pnote->namesz ? pnote->namedata : "(NONE)", + pnote->descsz, get_note_type (pnote->type)); + return 1; +} + + +static int +process_corefile_note_segment (file, offset, length) + FILE * file; + bfd_vma offset; + bfd_vma length; +{ + Elf_External_Note * pnotes; + Elf_External_Note * external; + int res = 1; + + if (length <= 0) + return 0; + + GET_DATA_ALLOC (offset, length, pnotes, Elf_External_Note *, "notes"); + + external = pnotes; + + printf (_("\nNotes at offset 0x%08lx with length 0x%08lx:\n"), + (unsigned long) offset, + (unsigned long) length); + printf (_(" Owner\t\tData size\tDescription\n")); + + while (external < (Elf_External_Note *)((char *) pnotes + length)) + { + Elf32_Internal_Note inote; + char * temp = NULL; + + inote.type = BYTE_GET (external->type); + inote.namesz = BYTE_GET (external->namesz); + inote.namedata = external->name; + inote.descsz = BYTE_GET (external->descsz); + inote.descdata = inote.namedata + align_power (inote.namesz, 2); + inote.descpos = offset + (inote.descdata - (char *) pnotes); + + external = (Elf_External_Note *)(inote.descdata + align_power (inote.descsz, 2)); + + /* Verify that name is null terminated. It appears that at least + one version of Linux (RedHat 6.0) generates corefiles that don't + comply with the ELF spec by failing to include the null byte in + namesz. */ + if (inote.namedata[inote.namesz] != '\0') + { + temp = malloc (inote.namesz + 1); + + if (temp == NULL) + { + error (_("Out of memory\n")); + res = 0; + break; + } + + strncpy (temp, inote.namedata, inote.namesz); + temp[inote.namesz] = 0; + + /* warn (_("'%s' NOTE name not properly null terminated\n"), temp); */ + inote.namedata = temp; + } + + res &= process_note (& inote); + + if (temp != NULL) + { + free (temp); + temp = NULL; + } + } + + free (pnotes); + + return res; +} + +static int +process_corefile_note_segments (file) + FILE * file; +{ + Elf_Internal_Phdr * program_headers; + Elf_Internal_Phdr * segment; + unsigned int i; + int res = 1; + + program_headers = (Elf_Internal_Phdr *) malloc + (elf_header.e_phnum * sizeof (Elf_Internal_Phdr)); + + if (program_headers == NULL) + { + error (_("Out of memory\n")); + return 0; + } + + if (is_32bit_elf) + i = get_32bit_program_headers (file, program_headers); + else + i = get_64bit_program_headers (file, program_headers); + + if (i == 0) + { + free (program_headers); + return 0; + } + + for (i = 0, segment = program_headers; + i < elf_header.e_phnum; + i ++, segment ++) + { + if (segment->p_type == PT_NOTE) + res &= process_corefile_note_segment (file, + (bfd_vma) segment->p_offset, + (bfd_vma) segment->p_filesz); + } + + free (program_headers); + + return res; +} + +static int +process_corefile_contents (file) + FILE * file; +{ + /* If we have not been asked to display the notes then do nothing. */ + if (! do_notes) + return 1; + + /* If file is not a core file then exit. */ + if (elf_header.e_type != ET_CORE) + return 1; + + /* No program headers means no NOTE segment. */ + if (elf_header.e_phnum == 0) + { + printf (_("No note segments present in the core file.\n")); + return 1; + } + + return process_corefile_note_segments (file); +} + +static int +process_arch_specific (file) + FILE * file; +{ + if (! do_arch) + return 1; + + switch (elf_header.e_machine) + { + case EM_MIPS: + case EM_MIPS_RS4_BE: + return process_mips_specific (file); + break; + default: + break; + } + return 1; +} + +static int +get_file_header (file) + FILE * file; +{ + /* Read in the identity array. */ + if (fread (elf_header.e_ident, EI_NIDENT, 1, file) != 1) + return 0; + + /* Determine how to read the rest of the header. */ + switch (elf_header.e_ident [EI_DATA]) + { + default: /* fall through */ + case ELFDATANONE: /* fall through */ + case ELFDATA2LSB: byte_get = byte_get_little_endian; break; + case ELFDATA2MSB: byte_get = byte_get_big_endian; break; + } + + /* For now we only support 32 bit and 64 bit ELF files. */ + is_32bit_elf = (elf_header.e_ident [EI_CLASS] != ELFCLASS64); + + /* Read in the rest of the header. */ + if (is_32bit_elf) + { + Elf32_External_Ehdr ehdr32; + + if (fread (ehdr32.e_type, sizeof (ehdr32) - EI_NIDENT, 1, file) != 1) + return 0; + + elf_header.e_type = BYTE_GET (ehdr32.e_type); + elf_header.e_machine = BYTE_GET (ehdr32.e_machine); + elf_header.e_version = BYTE_GET (ehdr32.e_version); + elf_header.e_entry = BYTE_GET (ehdr32.e_entry); + elf_header.e_phoff = BYTE_GET (ehdr32.e_phoff); + elf_header.e_shoff = BYTE_GET (ehdr32.e_shoff); + elf_header.e_flags = BYTE_GET (ehdr32.e_flags); + elf_header.e_ehsize = BYTE_GET (ehdr32.e_ehsize); + elf_header.e_phentsize = BYTE_GET (ehdr32.e_phentsize); + elf_header.e_phnum = BYTE_GET (ehdr32.e_phnum); + elf_header.e_shentsize = BYTE_GET (ehdr32.e_shentsize); + elf_header.e_shnum = BYTE_GET (ehdr32.e_shnum); + elf_header.e_shstrndx = BYTE_GET (ehdr32.e_shstrndx); + } + else + { + Elf64_External_Ehdr ehdr64; + + /* If we have been compiled with sizeof (bfd_vma) == 4, then + we will not be able to cope with the 64bit data found in + 64 ELF files. Detect this now and abort before we start + overwritting things. */ + if (sizeof (bfd_vma) < 8) + { + error (_("This instance of readelf has been built without support for a\n")); + error (_("64 bit data type and so it cannot read 64 bit ELF files.\n")); + return 0; + } + + if (fread (ehdr64.e_type, sizeof (ehdr64) - EI_NIDENT, 1, file) != 1) + return 0; + + elf_header.e_type = BYTE_GET (ehdr64.e_type); + elf_header.e_machine = BYTE_GET (ehdr64.e_machine); + elf_header.e_version = BYTE_GET (ehdr64.e_version); + elf_header.e_entry = BYTE_GET8 (ehdr64.e_entry); + elf_header.e_phoff = BYTE_GET8 (ehdr64.e_phoff); + elf_header.e_shoff = BYTE_GET8 (ehdr64.e_shoff); + elf_header.e_flags = BYTE_GET (ehdr64.e_flags); + elf_header.e_ehsize = BYTE_GET (ehdr64.e_ehsize); + elf_header.e_phentsize = BYTE_GET (ehdr64.e_phentsize); + elf_header.e_phnum = BYTE_GET (ehdr64.e_phnum); + elf_header.e_shentsize = BYTE_GET (ehdr64.e_shentsize); + elf_header.e_shnum = BYTE_GET (ehdr64.e_shnum); + elf_header.e_shstrndx = BYTE_GET (ehdr64.e_shstrndx); + } + + return 1; +} + +static void +process_file (file_name) + char * file_name; +{ + FILE * file; + struct stat statbuf; + unsigned int i; + + if (stat (file_name, & statbuf) < 0) + { + error (_("Cannot stat input file %s.\n"), file_name); + return; + } + + file = fopen (file_name, "rb"); + if (file == NULL) + { + error (_("Input file %s not found.\n"), file_name); + return; + } + + if (! get_file_header (file)) + { + error (_("%s: Failed to read file header\n"), file_name); + fclose (file); + return; + } + + /* Initialise per file variables. */ + for (i = NUM_ELEM (version_info); i--;) + version_info[i] = 0; + + for (i = NUM_ELEM (dynamic_info); i--;) + dynamic_info[i] = 0; + + /* Process the file. */ + if (show_name) + printf (_("\nFile: %s\n"), file_name); + + if (! process_file_header ()) + { + fclose (file); + return; + } + + process_section_headers (file); + + process_program_headers (file); + + process_dynamic_segment (file); + + process_relocs (file); + + process_symbol_table (file); + + process_syminfo (file); + + process_version_sections (file); + + process_section_contents (file); + + process_corefile_contents (file); + + process_arch_specific (file); + + fclose (file); + + if (section_headers) + { + free (section_headers); + section_headers = NULL; + } + + if (string_table) + { + free (string_table); + string_table = NULL; + } + + if (dynamic_strings) + { + free (dynamic_strings); + dynamic_strings = NULL; + } + + if (dynamic_symbols) + { + free (dynamic_symbols); + dynamic_symbols = NULL; + num_dynamic_syms = 0; + } + + if (dynamic_syminfo) + { + free (dynamic_syminfo); + dynamic_syminfo = NULL; + } +} + +#ifdef SUPPORT_DISASSEMBLY +/* Needed by the i386 disassembler. For extra credit, someone could + fix this so that we insert symbolic addresses here, esp for GOT/PLT + symbols */ + +void +print_address (unsigned int addr, FILE * outfile) +{ + fprintf (outfile,"0x%8.8x", addr); +} + +/* Needed by the i386 disassembler. */ +void +db_task_printsym (unsigned int addr) +{ + print_address (addr, stderr); +} +#endif + +int +main (argc, argv) + int argc; + char ** argv; +{ +#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES) + setlocale (LC_MESSAGES, ""); +#endif + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + + parse_args (argc, argv); + + if (optind < (argc - 1)) + show_name = 1; + + while (optind < argc) + process_file (argv [optind ++]); + + if (dump_sects != NULL) + free (dump_sects); + + return 0; +} diff --git a/contrib/binutils/gas/config/tc-arm.c b/contrib/binutils/gas/config/tc-arm.c new file mode 100644 index 000000000000..c6a197966932 --- /dev/null +++ b/contrib/binutils/gas/config/tc-arm.c @@ -0,0 +1,7236 @@ +/* tc-arm.c -- Assemble for the ARM + Copyright (C) 1994, 95, 96, 97, 98, 1999, 2000 Free Software Foundation, Inc. + Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org) + Modified by David Taylor (dtaylor@armltd.co.uk) + + This file is part of GAS, the GNU Assembler. + + GAS is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GAS 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 GAS; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +#include <ctype.h> +#include <string.h> +#define NO_RELOC 0 +#include "as.h" + +/* need TARGET_CPU */ +#include "config.h" +#include "subsegs.h" +#include "obstack.h" +#include "symbols.h" +#include "listing.h" + +#ifdef OBJ_ELF +#include "elf/arm.h" +#endif + +/* Types of processor to assemble for. */ +#define ARM_1 0x00000001 +#define ARM_2 0x00000002 +#define ARM_3 0x00000004 +#define ARM_250 ARM_3 +#define ARM_6 0x00000008 +#define ARM_7 ARM_6 /* same core instruction set */ +#define ARM_8 ARM_6 /* same core instruction set */ +#define ARM_9 ARM_6 /* same core instruction set */ +#define ARM_CPU_MASK 0x0000000f + +/* The following bitmasks control CPU extensions (ARM7 onwards): */ +#define ARM_LONGMUL 0x00000010 /* allow long multiplies */ +#define ARM_HALFWORD 0x00000020 /* allow half word loads */ +#define ARM_THUMB 0x00000040 /* allow BX instruction */ +#define ARM_EXT_V5 0x00000080 /* allow CLZ etc */ +#define ARM_EXT_V5E 0x00000200 /* "El Segundo" */ + +/* Architectures are the sum of the base and extensions. */ +#define ARM_ARCH_V4 (ARM_7 | ARM_LONGMUL | ARM_HALFWORD) +#define ARM_ARCH_V4T (ARM_ARCH_V4 | ARM_THUMB) +#define ARM_ARCH_V5 (ARM_ARCH_V4 | ARM_EXT_V5) +#define ARM_ARCH_V5T (ARM_ARCH_V5 | ARM_THUMB) + +/* Some useful combinations: */ +#define ARM_ANY 0x00ffffff +#define ARM_2UP (ARM_ANY - ARM_1) +#define ARM_ALL ARM_2UP /* Not arm1 only */ +#define ARM_3UP 0x00fffffc +#define ARM_6UP 0x00fffff8 /* Includes ARM7 */ + +#define FPU_CORE 0x80000000 +#define FPU_FPA10 0x40000000 +#define FPU_FPA11 0x40000000 +#define FPU_NONE 0 + +/* Some useful combinations */ +#define FPU_ALL 0xff000000 /* Note this is ~ARM_ANY */ +#define FPU_MEMMULTI 0x7f000000 /* Not fpu_core */ + + +#ifndef CPU_DEFAULT +#if defined __thumb__ +#define CPU_DEFAULT (ARM_ARCH_V4 | ARM_THUMB) +#else +#define CPU_DEFAULT ARM_ALL +#endif +#endif + +#ifndef FPU_DEFAULT +#define FPU_DEFAULT FPU_ALL +#endif + +#define streq(a, b) (strcmp (a, b) == 0) +#define skip_whitespace(str) while (* (str) == ' ') ++ (str) + +static unsigned long cpu_variant = CPU_DEFAULT | FPU_DEFAULT; +static int target_oabi = 0; + +#if defined OBJ_COFF || defined OBJ_ELF +/* Flags stored in private area of BFD structure */ +static boolean uses_apcs_26 = false; +static boolean support_interwork = false; +static boolean uses_apcs_float = false; +static boolean pic_code = false; +#endif + +/* This array holds the chars that always start a comment. If the + pre-processor is disabled, these aren't very useful. */ +CONST char comment_chars[] = "@"; + +/* This array holds the chars that only start a comment at the beginning of + a line. If the line seems to have the form '# 123 filename' + .line and .file directives will appear in the pre-processed output. */ +/* Note that input_file.c hand checks for '#' at the beginning of the + first line of the input file. This is because the compiler outputs + #NO_APP at the beginning of its output. */ +/* Also note that comments like this one will always work. */ +CONST char line_comment_chars[] = "#"; + +#ifdef TE_LINUX +CONST char line_separator_chars[] = ";"; +#else +CONST char line_separator_chars[] = ""; +#endif + +/* Chars that can be used to separate mant + from exp in floating point numbers. */ +CONST char EXP_CHARS[] = "eE"; + +/* Chars that mean this number is a floating point constant */ +/* As in 0f12.456 */ +/* or 0d1.2345e12 */ + +CONST char FLT_CHARS[] = "rRsSfFdDxXeEpP"; + +/* Prefix characters that indicate the start of an immediate + value. */ +#define is_immediate_prefix(C) ((C) == '#' || (C) == '$') + +#ifdef OBJ_ELF +symbolS * GOT_symbol; /* Pre-defined "_GLOBAL_OFFSET_TABLE_" */ +#endif + +CONST int md_reloc_size = 8; /* Size of relocation record */ + +static int thumb_mode = 0; /* 0: assemble for ARM, 1: assemble for Thumb, + 2: assemble for Thumb even though target cpu + does not support thumb instructions. */ +typedef struct arm_fix +{ + int thumb_mode; +} arm_fix_data; + +struct arm_it +{ + CONST char * error; + unsigned long instruction; + int suffix; + int size; + struct + { + bfd_reloc_code_real_type type; + expressionS exp; + int pc_rel; + } reloc; +}; + +struct arm_it inst; + +struct asm_shift +{ + CONST char * template; + unsigned long value; +}; + +static CONST struct asm_shift shift[] = +{ + {"asl", 0}, + {"lsl", 0}, + {"lsr", 0x00000020}, + {"asr", 0x00000040}, + {"ror", 0x00000060}, + {"rrx", 0x00000060}, + {"ASL", 0}, + {"LSL", 0}, + {"LSR", 0x00000020}, + {"ASR", 0x00000040}, + {"ROR", 0x00000060}, + {"RRX", 0x00000060} +}; + +#define NO_SHIFT_RESTRICT 1 +#define SHIFT_RESTRICT 0 + +#define NUM_FLOAT_VALS 8 + +CONST char * fp_const[] = +{ + "0.0", "1.0", "2.0", "3.0", "4.0", "5.0", "0.5", "10.0", 0 +}; + +/* Number of littlenums required to hold an extended precision number. */ +#define MAX_LITTLENUMS 6 + +LITTLENUM_TYPE fp_values[NUM_FLOAT_VALS][MAX_LITTLENUMS]; + +#define FAIL (-1) +#define SUCCESS (0) + +#define SUFF_S 1 +#define SUFF_D 2 +#define SUFF_E 3 +#define SUFF_P 4 + +#define CP_T_X 0x00008000 +#define CP_T_Y 0x00400000 +#define CP_T_Pre 0x01000000 +#define CP_T_UD 0x00800000 +#define CP_T_WB 0x00200000 + +#define CONDS_BIT (0x00100000) +#define LOAD_BIT (0x00100000) +#define TRANS_BIT (0x00200000) + +struct asm_cond +{ + CONST char * template; + unsigned long value; +}; + +/* This is to save a hash look-up in the common case. */ +#define COND_ALWAYS 0xe0000000 + +static CONST struct asm_cond conds[] = +{ + {"eq", 0x00000000}, + {"ne", 0x10000000}, + {"cs", 0x20000000}, {"hs", 0x20000000}, + {"cc", 0x30000000}, {"ul", 0x30000000}, {"lo", 0x30000000}, + {"mi", 0x40000000}, + {"pl", 0x50000000}, + {"vs", 0x60000000}, + {"vc", 0x70000000}, + {"hi", 0x80000000}, + {"ls", 0x90000000}, + {"ge", 0xa0000000}, + {"lt", 0xb0000000}, + {"gt", 0xc0000000}, + {"le", 0xd0000000}, + {"al", 0xe0000000}, + {"nv", 0xf0000000} +}; + +/* Warning: If the top bit of the set_bits is set, then the standard + instruction bitmask is ignored, and the new bitmask is taken from + the set_bits: */ +struct asm_flg +{ + CONST char * template; /* Basic flag string */ + unsigned long set_bits; /* Bits to set */ +}; + +static CONST struct asm_flg s_flag[] = +{ + {"s", CONDS_BIT}, + {NULL, 0} +}; + +static CONST struct asm_flg ldr_flags[] = +{ + {"b", 0x00400000}, + {"t", TRANS_BIT}, + {"bt", 0x00400000 | TRANS_BIT}, + {"h", 0x801000b0}, + {"sh", 0x801000f0}, + {"sb", 0x801000d0}, + {NULL, 0} +}; + +static CONST struct asm_flg str_flags[] = +{ + {"b", 0x00400000}, + {"t", TRANS_BIT}, + {"bt", 0x00400000 | TRANS_BIT}, + {"h", 0x800000b0}, + {NULL, 0} +}; + +static CONST struct asm_flg byte_flag[] = +{ + {"b", 0x00400000}, + {NULL, 0} +}; + +static CONST struct asm_flg cmp_flags[] = +{ + {"s", CONDS_BIT}, + {"p", 0x0010f000}, + {NULL, 0} +}; + +static CONST struct asm_flg ldm_flags[] = +{ + {"ed", 0x01800000}, + {"fd", 0x00800000}, + {"ea", 0x01000000}, + {"fa", 0x08000000}, + {"ib", 0x01800000}, + {"ia", 0x00800000}, + {"db", 0x01000000}, + {"da", 0x08000000}, + {NULL, 0} +}; + +static CONST struct asm_flg stm_flags[] = +{ + {"ed", 0x08000000}, + {"fd", 0x01000000}, + {"ea", 0x00800000}, + {"fa", 0x01800000}, + {"ib", 0x01800000}, + {"ia", 0x00800000}, + {"db", 0x01000000}, + {"da", 0x08000000}, + {NULL, 0} +}; + +static CONST struct asm_flg lfm_flags[] = +{ + {"fd", 0x00800000}, + {"ea", 0x01000000}, + {NULL, 0} +}; + +static CONST struct asm_flg sfm_flags[] = +{ + {"fd", 0x01000000}, + {"ea", 0x00800000}, + {NULL, 0} +}; + +static CONST struct asm_flg round_flags[] = +{ + {"p", 0x00000020}, + {"m", 0x00000040}, + {"z", 0x00000060}, + {NULL, 0} +}; + +/* The implementation of the FIX instruction is broken on some assemblers, + in that it accepts a precision specifier as well as a rounding specifier, + despite the fact that this is meaningless. To be more compatible, we + accept it as well, though of course it does not set any bits. */ +static CONST struct asm_flg fix_flags[] = +{ + {"p", 0x00000020}, + {"m", 0x00000040}, + {"z", 0x00000060}, + {"sp", 0x00000020}, + {"sm", 0x00000040}, + {"sz", 0x00000060}, + {"dp", 0x00000020}, + {"dm", 0x00000040}, + {"dz", 0x00000060}, + {"ep", 0x00000020}, + {"em", 0x00000040}, + {"ez", 0x00000060}, + {NULL, 0} +}; + +static CONST struct asm_flg except_flag[] = +{ + {"e", 0x00400000}, + {NULL, 0} +}; + +static CONST struct asm_flg cplong_flag[] = +{ + {"l", 0x00400000}, + {NULL, 0} +}; + +struct asm_psr +{ + CONST char * template; + boolean cpsr; + unsigned long field; +}; + +#define SPSR_BIT (1 << 22) /* The bit that distnguishes CPSR and SPSR. */ +#define PSR_SHIFT 16 /* How many bits to shift the PSR_xxx bits up by. */ + +#define PSR_c (1 << 0) +#define PSR_x (1 << 1) +#define PSR_s (1 << 2) +#define PSR_f (1 << 3) + +static CONST struct asm_psr psrs[] = +{ + {"CPSR", true, PSR_c | PSR_f}, + {"CPSR_all", true, PSR_c | PSR_f}, + {"SPSR", false, PSR_c | PSR_f}, + {"SPSR_all", false, PSR_c | PSR_f}, + {"CPSR_flg", true, PSR_f}, + {"CPSR_f", true, PSR_f}, + {"SPSR_flg", false, PSR_f}, + {"SPSR_f", false, PSR_f}, + {"CPSR_c", true, PSR_c}, + {"CPSR_ctl", true, PSR_c}, + {"SPSR_c", false, PSR_c}, + {"SPSR_ctl", false, PSR_c}, + {"CPSR_x", true, PSR_x}, + {"CPSR_s", true, PSR_s}, + {"SPSR_x", false, PSR_x}, + {"SPSR_s", false, PSR_s}, + /* For backwards compatability with older toolchain we also + support lower case versions of some of these flags. */ + {"cpsr", true, PSR_c | PSR_f}, + {"cpsr_all", true, PSR_c | PSR_f}, + {"spsr", false, PSR_c | PSR_f}, + {"spsr_all", false, PSR_c | PSR_f}, + {"cpsr_flg", true, PSR_f}, + {"cpsr_f", true, PSR_f}, + {"spsr_flg", false, PSR_f}, + {"spsr_f", false, PSR_f}, + {"cpsr_c", true, PSR_c}, + {"cpsr_ctl", true, PSR_c}, + {"spsr_c", false, PSR_c}, + {"spsr_ctl", false, PSR_c} +}; + +/* Functions called by parser. */ +/* ARM instructions */ +static void do_arit PARAMS ((char *, unsigned long)); +static void do_cmp PARAMS ((char *, unsigned long)); +static void do_mov PARAMS ((char *, unsigned long)); +static void do_ldst PARAMS ((char *, unsigned long)); +static void do_ldmstm PARAMS ((char *, unsigned long)); +static void do_branch PARAMS ((char *, unsigned long)); +static void do_swi PARAMS ((char *, unsigned long)); +/* Pseudo Op codes */ +static void do_adr PARAMS ((char *, unsigned long)); +static void do_adrl PARAMS ((char *, unsigned long)); +static void do_nop PARAMS ((char *, unsigned long)); +/* ARM 2 */ +static void do_mul PARAMS ((char *, unsigned long)); +static void do_mla PARAMS ((char *, unsigned long)); +/* ARM 3 */ +static void do_swap PARAMS ((char *, unsigned long)); +/* ARM 6 */ +static void do_msr PARAMS ((char *, unsigned long)); +static void do_mrs PARAMS ((char *, unsigned long)); +/* ARM 7M */ +static void do_mull PARAMS ((char *, unsigned long)); +/* ARM THUMB */ +static void do_bx PARAMS ((char *, unsigned long)); + + +/* Coprocessor Instructions */ +static void do_cdp PARAMS ((char *, unsigned long)); +static void do_lstc PARAMS ((char *, unsigned long)); +static void do_co_reg PARAMS ((char *, unsigned long)); +static void do_fp_ctrl PARAMS ((char *, unsigned long)); +static void do_fp_ldst PARAMS ((char *, unsigned long)); +static void do_fp_ldmstm PARAMS ((char *, unsigned long)); +static void do_fp_dyadic PARAMS ((char *, unsigned long)); +static void do_fp_monadic PARAMS ((char *, unsigned long)); +static void do_fp_cmp PARAMS ((char *, unsigned long)); +static void do_fp_from_reg PARAMS ((char *, unsigned long)); +static void do_fp_to_reg PARAMS ((char *, unsigned long)); + +static void fix_new_arm PARAMS ((fragS *, int, short, expressionS *, int, int)); +static int arm_reg_parse PARAMS ((char **)); +static CONST struct asm_psr * arm_psr_parse PARAMS ((char **)); +static void symbol_locate PARAMS ((symbolS *, CONST char *, segT, valueT, fragS *)); +static int add_to_lit_pool PARAMS ((void)); +static unsigned validate_immediate PARAMS ((unsigned)); +static unsigned validate_immediate_twopart PARAMS ((unsigned int, unsigned int *)); +static int validate_offset_imm PARAMS ((unsigned int, int)); +static void opcode_select PARAMS ((int)); +static void end_of_line PARAMS ((char *)); +static int reg_required_here PARAMS ((char **, int)); +static int psr_required_here PARAMS ((char **)); +static int co_proc_number PARAMS ((char **)); +static int cp_opc_expr PARAMS ((char **, int, int)); +static int cp_reg_required_here PARAMS ((char **, int)); +static int fp_reg_required_here PARAMS ((char **, int)); +static int cp_address_offset PARAMS ((char **)); +static int cp_address_required_here PARAMS ((char **)); +static int my_get_float_expression PARAMS ((char **)); +static int skip_past_comma PARAMS ((char **)); +static int walk_no_bignums PARAMS ((symbolS *)); +static int negate_data_op PARAMS ((unsigned long *, unsigned long)); +static int data_op2 PARAMS ((char **)); +static int fp_op2 PARAMS ((char **)); +static long reg_list PARAMS ((char **)); +static void thumb_load_store PARAMS ((char *, int, int)); +static int decode_shift PARAMS ((char **, int)); +static int ldst_extend PARAMS ((char **, int)); +static void thumb_add_sub PARAMS ((char *, int)); +static void insert_reg PARAMS ((int)); +static void thumb_shift PARAMS ((char *, int)); +static void thumb_mov_compare PARAMS ((char *, int)); +static void set_constant_flonums PARAMS ((void)); +static valueT md_chars_to_number PARAMS ((char *, int)); +static void insert_reg_alias PARAMS ((char *, int)); +static void output_inst PARAMS ((void)); +#ifdef OBJ_ELF +static bfd_reloc_code_real_type arm_parse_reloc PARAMS ((void)); +#endif + +/* ARM instructions take 4bytes in the object file, Thumb instructions + take 2: */ +#define INSN_SIZE 4 + +/* LONGEST_INST is the longest basic instruction name without conditions or + flags. ARM7M has 4 of length 5. */ + +#define LONGEST_INST 5 + + +struct asm_opcode +{ + CONST char * template; /* Basic string to match */ + unsigned long value; /* Basic instruction code */ + + /* Compulsory suffix that must follow conds. If "", then the + instruction is not conditional and must have no suffix. */ + CONST char * comp_suffix; + + CONST struct asm_flg * flags; /* Bits to toggle if flag 'n' set */ + unsigned long variants; /* Which CPU variants this exists for */ + /* Function to call to parse args */ + void (* parms) PARAMS ((char *, unsigned long)); +}; + +static CONST struct asm_opcode insns[] = +{ +/* ARM Instructions */ + {"and", 0x00000000, NULL, s_flag, ARM_ANY, do_arit}, + {"eor", 0x00200000, NULL, s_flag, ARM_ANY, do_arit}, + {"sub", 0x00400000, NULL, s_flag, ARM_ANY, do_arit}, + {"rsb", 0x00600000, NULL, s_flag, ARM_ANY, do_arit}, + {"add", 0x00800000, NULL, s_flag, ARM_ANY, do_arit}, + {"adc", 0x00a00000, NULL, s_flag, ARM_ANY, do_arit}, + {"sbc", 0x00c00000, NULL, s_flag, ARM_ANY, do_arit}, + {"rsc", 0x00e00000, NULL, s_flag, ARM_ANY, do_arit}, + {"orr", 0x01800000, NULL, s_flag, ARM_ANY, do_arit}, + {"bic", 0x01c00000, NULL, s_flag, ARM_ANY, do_arit}, + {"tst", 0x01000000, NULL, cmp_flags, ARM_ANY, do_cmp}, + {"teq", 0x01200000, NULL, cmp_flags, ARM_ANY, do_cmp}, + {"cmp", 0x01400000, NULL, cmp_flags, ARM_ANY, do_cmp}, + {"cmn", 0x01600000, NULL, cmp_flags, ARM_ANY, do_cmp}, + {"mov", 0x01a00000, NULL, s_flag, ARM_ANY, do_mov}, + {"mvn", 0x01e00000, NULL, s_flag, ARM_ANY, do_mov}, + {"str", 0x04000000, NULL, str_flags, ARM_ANY, do_ldst}, + {"ldr", 0x04100000, NULL, ldr_flags, ARM_ANY, do_ldst}, + {"stm", 0x08000000, NULL, stm_flags, ARM_ANY, do_ldmstm}, + {"ldm", 0x08100000, NULL, ldm_flags, ARM_ANY, do_ldmstm}, + {"swi", 0x0f000000, NULL, NULL, ARM_ANY, do_swi}, +#ifdef TE_WINCE + {"bl", 0x0b000000, NULL, NULL, ARM_ANY, do_branch}, + {"b", 0x0a000000, NULL, NULL, ARM_ANY, do_branch}, +#else + {"bl", 0x0bfffffe, NULL, NULL, ARM_ANY, do_branch}, + {"b", 0x0afffffe, NULL, NULL, ARM_ANY, do_branch}, +#endif + +/* Pseudo ops */ + {"adr", 0x028f0000, NULL, NULL, ARM_ANY, do_adr}, + {"adrl", 0x028f0000, NULL, NULL, ARM_ANY, do_adrl}, + {"nop", 0x01a00000, NULL, NULL, ARM_ANY, do_nop}, + +/* ARM 2 multiplies */ + {"mul", 0x00000090, NULL, s_flag, ARM_2UP, do_mul}, + {"mla", 0x00200090, NULL, s_flag, ARM_2UP, do_mla}, + +/* ARM 3 - swp instructions */ + {"swp", 0x01000090, NULL, byte_flag, ARM_3UP, do_swap}, + +/* ARM 6 Coprocessor instructions */ + {"mrs", 0x010f0000, NULL, NULL, ARM_6UP, do_mrs}, + {"msr", 0x0120f000, NULL, NULL, ARM_6UP, do_msr}, +/* ScottB: our code uses 0x0128f000 for msr. + NickC: but this is wrong because the bits 16 through 19 are + handled by the PSR_xxx defines above. */ + +/* ARM 7M long multiplies - need signed/unsigned flags! */ + {"smull", 0x00c00090, NULL, s_flag, ARM_LONGMUL, do_mull}, + {"umull", 0x00800090, NULL, s_flag, ARM_LONGMUL, do_mull}, + {"smlal", 0x00e00090, NULL, s_flag, ARM_LONGMUL, do_mull}, + {"umlal", 0x00a00090, NULL, s_flag, ARM_LONGMUL, do_mull}, + +/* ARM THUMB interworking */ + {"bx", 0x012fff10, NULL, NULL, ARM_THUMB, do_bx}, + +/* Floating point instructions */ + {"wfs", 0x0e200110, NULL, NULL, FPU_ALL, do_fp_ctrl}, + {"rfs", 0x0e300110, NULL, NULL, FPU_ALL, do_fp_ctrl}, + {"wfc", 0x0e400110, NULL, NULL, FPU_ALL, do_fp_ctrl}, + {"rfc", 0x0e500110, NULL, NULL, FPU_ALL, do_fp_ctrl}, + {"ldf", 0x0c100100, "sdep", NULL, FPU_ALL, do_fp_ldst}, + {"stf", 0x0c000100, "sdep", NULL, FPU_ALL, do_fp_ldst}, + {"lfm", 0x0c100200, NULL, lfm_flags, FPU_MEMMULTI, do_fp_ldmstm}, + {"sfm", 0x0c000200, NULL, sfm_flags, FPU_MEMMULTI, do_fp_ldmstm}, + {"mvf", 0x0e008100, "sde", round_flags, FPU_ALL, do_fp_monadic}, + {"mnf", 0x0e108100, "sde", round_flags, FPU_ALL, do_fp_monadic}, + {"abs", 0x0e208100, "sde", round_flags, FPU_ALL, do_fp_monadic}, + {"rnd", 0x0e308100, "sde", round_flags, FPU_ALL, do_fp_monadic}, + {"sqt", 0x0e408100, "sde", round_flags, FPU_ALL, do_fp_monadic}, + {"log", 0x0e508100, "sde", round_flags, FPU_ALL, do_fp_monadic}, + {"lgn", 0x0e608100, "sde", round_flags, FPU_ALL, do_fp_monadic}, + {"exp", 0x0e708100, "sde", round_flags, FPU_ALL, do_fp_monadic}, + {"sin", 0x0e808100, "sde", round_flags, FPU_ALL, do_fp_monadic}, + {"cos", 0x0e908100, "sde", round_flags, FPU_ALL, do_fp_monadic}, + {"tan", 0x0ea08100, "sde", round_flags, FPU_ALL, do_fp_monadic}, + {"asn", 0x0eb08100, "sde", round_flags, FPU_ALL, do_fp_monadic}, + {"acs", 0x0ec08100, "sde", round_flags, FPU_ALL, do_fp_monadic}, + {"atn", 0x0ed08100, "sde", round_flags, FPU_ALL, do_fp_monadic}, + {"urd", 0x0ee08100, "sde", round_flags, FPU_ALL, do_fp_monadic}, + {"nrm", 0x0ef08100, "sde", round_flags, FPU_ALL, do_fp_monadic}, + {"adf", 0x0e000100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, + {"suf", 0x0e200100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, + {"rsf", 0x0e300100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, + {"muf", 0x0e100100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, + {"dvf", 0x0e400100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, + {"rdf", 0x0e500100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, + {"pow", 0x0e600100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, + {"rpw", 0x0e700100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, + {"rmf", 0x0e800100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, + {"fml", 0x0e900100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, + {"fdv", 0x0ea00100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, + {"frd", 0x0eb00100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, + {"pol", 0x0ec00100, "sde", round_flags, FPU_ALL, do_fp_dyadic}, + {"cmf", 0x0e90f110, NULL, except_flag, FPU_ALL, do_fp_cmp}, + {"cnf", 0x0eb0f110, NULL, except_flag, FPU_ALL, do_fp_cmp}, +/* The FPA10 data sheet suggests that the 'E' of cmfe/cnfe should not + be an optional suffix, but part of the instruction. To be compatible, + we accept either. */ + {"cmfe", 0x0ed0f110, NULL, NULL, FPU_ALL, do_fp_cmp}, + {"cnfe", 0x0ef0f110, NULL, NULL, FPU_ALL, do_fp_cmp}, + {"flt", 0x0e000110, "sde", round_flags, FPU_ALL, do_fp_from_reg}, + {"fix", 0x0e100110, NULL, fix_flags, FPU_ALL, do_fp_to_reg}, + +/* Generic copressor instructions. */ + {"cdp", 0x0e000000, NULL, NULL, ARM_2UP, do_cdp}, + {"ldc", 0x0c100000, NULL, cplong_flag, ARM_2UP, do_lstc}, + {"stc", 0x0c000000, NULL, cplong_flag, ARM_2UP, do_lstc}, + {"mcr", 0x0e000010, NULL, NULL, ARM_2UP, do_co_reg}, + {"mrc", 0x0e100010, NULL, NULL, ARM_2UP, do_co_reg}, +}; + +/* Defines for various bits that we will want to toggle. */ +#define INST_IMMEDIATE 0x02000000 +#define OFFSET_REG 0x02000000 +#define HWOFFSET_IMM 0x00400000 +#define SHIFT_BY_REG 0x00000010 +#define PRE_INDEX 0x01000000 +#define INDEX_UP 0x00800000 +#define WRITE_BACK 0x00200000 +#define LDM_TYPE_2_OR_3 0x00400000 + +#define LITERAL_MASK 0xf000f000 +#define COND_MASK 0xf0000000 +#define OPCODE_MASK 0xfe1fffff +#define DATA_OP_SHIFT 21 + +/* Codes to distinguish the arithmetic instructions. */ +#define OPCODE_AND 0 +#define OPCODE_EOR 1 +#define OPCODE_SUB 2 +#define OPCODE_RSB 3 +#define OPCODE_ADD 4 +#define OPCODE_ADC 5 +#define OPCODE_SBC 6 +#define OPCODE_RSC 7 +#define OPCODE_TST 8 +#define OPCODE_TEQ 9 +#define OPCODE_CMP 10 +#define OPCODE_CMN 11 +#define OPCODE_ORR 12 +#define OPCODE_MOV 13 +#define OPCODE_BIC 14 +#define OPCODE_MVN 15 + +static void do_t_nop PARAMS ((char *)); +static void do_t_arit PARAMS ((char *)); +static void do_t_add PARAMS ((char *)); +static void do_t_asr PARAMS ((char *)); +static void do_t_branch9 PARAMS ((char *)); +static void do_t_branch12 PARAMS ((char *)); +static void do_t_branch23 PARAMS ((char *)); +static void do_t_bx PARAMS ((char *)); +static void do_t_compare PARAMS ((char *)); +static void do_t_ldmstm PARAMS ((char *)); +static void do_t_ldr PARAMS ((char *)); +static void do_t_ldrb PARAMS ((char *)); +static void do_t_ldrh PARAMS ((char *)); +static void do_t_lds PARAMS ((char *)); +static void do_t_lsl PARAMS ((char *)); +static void do_t_lsr PARAMS ((char *)); +static void do_t_mov PARAMS ((char *)); +static void do_t_push_pop PARAMS ((char *)); +static void do_t_str PARAMS ((char *)); +static void do_t_strb PARAMS ((char *)); +static void do_t_strh PARAMS ((char *)); +static void do_t_sub PARAMS ((char *)); +static void do_t_swi PARAMS ((char *)); +static void do_t_adr PARAMS ((char *)); + +#define T_OPCODE_MUL 0x4340 +#define T_OPCODE_TST 0x4200 +#define T_OPCODE_CMN 0x42c0 +#define T_OPCODE_NEG 0x4240 +#define T_OPCODE_MVN 0x43c0 + +#define T_OPCODE_ADD_R3 0x1800 +#define T_OPCODE_SUB_R3 0x1a00 +#define T_OPCODE_ADD_HI 0x4400 +#define T_OPCODE_ADD_ST 0xb000 +#define T_OPCODE_SUB_ST 0xb080 +#define T_OPCODE_ADD_SP 0xa800 +#define T_OPCODE_ADD_PC 0xa000 +#define T_OPCODE_ADD_I8 0x3000 +#define T_OPCODE_SUB_I8 0x3800 +#define T_OPCODE_ADD_I3 0x1c00 +#define T_OPCODE_SUB_I3 0x1e00 + +#define T_OPCODE_ASR_R 0x4100 +#define T_OPCODE_LSL_R 0x4080 +#define T_OPCODE_LSR_R 0x40c0 +#define T_OPCODE_ASR_I 0x1000 +#define T_OPCODE_LSL_I 0x0000 +#define T_OPCODE_LSR_I 0x0800 + +#define T_OPCODE_MOV_I8 0x2000 +#define T_OPCODE_CMP_I8 0x2800 +#define T_OPCODE_CMP_LR 0x4280 +#define T_OPCODE_MOV_HR 0x4600 +#define T_OPCODE_CMP_HR 0x4500 + +#define T_OPCODE_LDR_PC 0x4800 +#define T_OPCODE_LDR_SP 0x9800 +#define T_OPCODE_STR_SP 0x9000 +#define T_OPCODE_LDR_IW 0x6800 +#define T_OPCODE_STR_IW 0x6000 +#define T_OPCODE_LDR_IH 0x8800 +#define T_OPCODE_STR_IH 0x8000 +#define T_OPCODE_LDR_IB 0x7800 +#define T_OPCODE_STR_IB 0x7000 +#define T_OPCODE_LDR_RW 0x5800 +#define T_OPCODE_STR_RW 0x5000 +#define T_OPCODE_LDR_RH 0x5a00 +#define T_OPCODE_STR_RH 0x5200 +#define T_OPCODE_LDR_RB 0x5c00 +#define T_OPCODE_STR_RB 0x5400 + +#define T_OPCODE_PUSH 0xb400 +#define T_OPCODE_POP 0xbc00 + +#define T_OPCODE_BRANCH 0xe7fe + +static int thumb_reg PARAMS ((char ** str, int hi_lo)); + +#define THUMB_SIZE 2 /* Size of thumb instruction. */ +#define THUMB_REG_LO 0x1 +#define THUMB_REG_HI 0x2 +#define THUMB_REG_ANY 0x3 + +#define THUMB_H1 0x0080 +#define THUMB_H2 0x0040 + +#define THUMB_ASR 0 +#define THUMB_LSL 1 +#define THUMB_LSR 2 + +#define THUMB_MOVE 0 +#define THUMB_COMPARE 1 + +#define THUMB_LOAD 0 +#define THUMB_STORE 1 + +#define THUMB_PP_PC_LR 0x0100 + +/* These three are used for immediate shifts, do not alter. */ +#define THUMB_WORD 2 +#define THUMB_HALFWORD 1 +#define THUMB_BYTE 0 + +struct thumb_opcode +{ + CONST char * template; /* Basic string to match */ + unsigned long value; /* Basic instruction code */ + int size; + unsigned long variants; /* Which CPU variants this exists for */ + void (* parms) PARAMS ((char *)); /* Function to call to parse args */ +}; + +static CONST struct thumb_opcode tinsns[] = +{ + {"adc", 0x4140, 2, ARM_THUMB, do_t_arit}, + {"add", 0x0000, 2, ARM_THUMB, do_t_add}, + {"and", 0x4000, 2, ARM_THUMB, do_t_arit}, + {"asr", 0x0000, 2, ARM_THUMB, do_t_asr}, + {"b", T_OPCODE_BRANCH, 2, ARM_THUMB, do_t_branch12}, + {"beq", 0xd0fe, 2, ARM_THUMB, do_t_branch9}, + {"bne", 0xd1fe, 2, ARM_THUMB, do_t_branch9}, + {"bcs", 0xd2fe, 2, ARM_THUMB, do_t_branch9}, + {"bhs", 0xd2fe, 2, ARM_THUMB, do_t_branch9}, + {"bcc", 0xd3fe, 2, ARM_THUMB, do_t_branch9}, + {"bul", 0xd3fe, 2, ARM_THUMB, do_t_branch9}, + {"blo", 0xd3fe, 2, ARM_THUMB, do_t_branch9}, + {"bmi", 0xd4fe, 2, ARM_THUMB, do_t_branch9}, + {"bpl", 0xd5fe, 2, ARM_THUMB, do_t_branch9}, + {"bvs", 0xd6fe, 2, ARM_THUMB, do_t_branch9}, + {"bvc", 0xd7fe, 2, ARM_THUMB, do_t_branch9}, + {"bhi", 0xd8fe, 2, ARM_THUMB, do_t_branch9}, + {"bls", 0xd9fe, 2, ARM_THUMB, do_t_branch9}, + {"bge", 0xdafe, 2, ARM_THUMB, do_t_branch9}, + {"blt", 0xdbfe, 2, ARM_THUMB, do_t_branch9}, + {"bgt", 0xdcfe, 2, ARM_THUMB, do_t_branch9}, + {"ble", 0xddfe, 2, ARM_THUMB, do_t_branch9}, + {"bal", 0xdefe, 2, ARM_THUMB, do_t_branch9}, + {"bic", 0x4380, 2, ARM_THUMB, do_t_arit}, + {"bl", 0xf7fffffe, 4, ARM_THUMB, do_t_branch23}, + {"bx", 0x4700, 2, ARM_THUMB, do_t_bx}, + {"cmn", T_OPCODE_CMN, 2, ARM_THUMB, do_t_arit}, + {"cmp", 0x0000, 2, ARM_THUMB, do_t_compare}, + {"eor", 0x4040, 2, ARM_THUMB, do_t_arit}, + {"ldmia", 0xc800, 2, ARM_THUMB, do_t_ldmstm}, + {"ldr", 0x0000, 2, ARM_THUMB, do_t_ldr}, + {"ldrb", 0x0000, 2, ARM_THUMB, do_t_ldrb}, + {"ldrh", 0x0000, 2, ARM_THUMB, do_t_ldrh}, + {"ldrsb", 0x5600, 2, ARM_THUMB, do_t_lds}, + {"ldrsh", 0x5e00, 2, ARM_THUMB, do_t_lds}, + {"ldsb", 0x5600, 2, ARM_THUMB, do_t_lds}, + {"ldsh", 0x5e00, 2, ARM_THUMB, do_t_lds}, + {"lsl", 0x0000, 2, ARM_THUMB, do_t_lsl}, + {"lsr", 0x0000, 2, ARM_THUMB, do_t_lsr}, + {"mov", 0x0000, 2, ARM_THUMB, do_t_mov}, + {"mul", T_OPCODE_MUL, 2, ARM_THUMB, do_t_arit}, + {"mvn", T_OPCODE_MVN, 2, ARM_THUMB, do_t_arit}, + {"neg", T_OPCODE_NEG, 2, ARM_THUMB, do_t_arit}, + {"orr", 0x4300, 2, ARM_THUMB, do_t_arit}, + {"pop", 0xbc00, 2, ARM_THUMB, do_t_push_pop}, + {"push", 0xb400, 2, ARM_THUMB, do_t_push_pop}, + {"ror", 0x41c0, 2, ARM_THUMB, do_t_arit}, + {"sbc", 0x4180, 2, ARM_THUMB, do_t_arit}, + {"stmia", 0xc000, 2, ARM_THUMB, do_t_ldmstm}, + {"str", 0x0000, 2, ARM_THUMB, do_t_str}, + {"strb", 0x0000, 2, ARM_THUMB, do_t_strb}, + {"strh", 0x0000, 2, ARM_THUMB, do_t_strh}, + {"swi", 0xdf00, 2, ARM_THUMB, do_t_swi}, + {"sub", 0x0000, 2, ARM_THUMB, do_t_sub}, + {"tst", T_OPCODE_TST, 2, ARM_THUMB, do_t_arit}, + /* Pseudo ops: */ + {"adr", 0x0000, 2, ARM_THUMB, do_t_adr}, + {"nop", 0x46C0, 2, ARM_THUMB, do_t_nop}, /* mov r8,r8 */ +}; + +struct reg_entry +{ + CONST char * name; + int number; +}; + +#define int_register(reg) ((reg) >= 0 && (reg) <= 15) +#define cp_register(reg) ((reg) >= 32 && (reg) <= 47) +#define fp_register(reg) ((reg) >= 16 && (reg) <= 23) + +#define REG_PC 15 +#define REG_LR 14 +#define REG_SP 13 + +/* These are the standard names. Users can add aliases with .req */ +static CONST struct reg_entry reg_table[] = +{ + /* Processor Register Numbers. */ + {"r0", 0}, {"r1", 1}, {"r2", 2}, {"r3", 3}, + {"r4", 4}, {"r5", 5}, {"r6", 6}, {"r7", 7}, + {"r8", 8}, {"r9", 9}, {"r10", 10}, {"r11", 11}, + {"r12", 12}, {"r13", REG_SP},{"r14", REG_LR},{"r15", REG_PC}, + /* APCS conventions. */ + {"a1", 0}, {"a2", 1}, {"a3", 2}, {"a4", 3}, + {"v1", 4}, {"v2", 5}, {"v3", 6}, {"v4", 7}, {"v5", 8}, + {"v6", 9}, {"sb", 9}, {"v7", 10}, {"sl", 10}, + {"fp", 11}, {"ip", 12}, {"sp", REG_SP},{"lr", REG_LR},{"pc", REG_PC}, + /* ATPCS additions to APCS conventions. */ + {"wr", 7}, {"v8", 11}, + /* FP Registers. */ + {"f0", 16}, {"f1", 17}, {"f2", 18}, {"f3", 19}, + {"f4", 20}, {"f5", 21}, {"f6", 22}, {"f7", 23}, + {"c0", 32}, {"c1", 33}, {"c2", 34}, {"c3", 35}, + {"c4", 36}, {"c5", 37}, {"c6", 38}, {"c7", 39}, + {"c8", 40}, {"c9", 41}, {"c10", 42}, {"c11", 43}, + {"c12", 44}, {"c13", 45}, {"c14", 46}, {"c15", 47}, + {"cr0", 32}, {"cr1", 33}, {"cr2", 34}, {"cr3", 35}, + {"cr4", 36}, {"cr5", 37}, {"cr6", 38}, {"cr7", 39}, + {"cr8", 40}, {"cr9", 41}, {"cr10", 42}, {"cr11", 43}, + {"cr12", 44}, {"cr13", 45}, {"cr14", 46}, {"cr15", 47}, + /* ATPCS additions to float register names. */ + {"s0",16}, {"s1",17}, {"s2",18}, {"s3",19}, + {"s4",20}, {"s5",21}, {"s6",22}, {"s7",23}, + {"d0",16}, {"d1",17}, {"d2",18}, {"d3",19}, + {"d4",20}, {"d5",21}, {"d6",22}, {"d7",23}, + /* FIXME: At some point we need to add VFP register names. */ + /* Array terminator. */ + {NULL, 0} +}; + +#define BAD_ARGS _("Bad arguments to instruction") +#define BAD_PC _("r15 not allowed here") +#define BAD_FLAGS _("Instruction should not have flags") +#define BAD_COND _("Instruction is not conditional") + +static struct hash_control * arm_ops_hsh = NULL; +static struct hash_control * arm_tops_hsh = NULL; +static struct hash_control * arm_cond_hsh = NULL; +static struct hash_control * arm_shift_hsh = NULL; +static struct hash_control * arm_reg_hsh = NULL; +static struct hash_control * arm_psr_hsh = NULL; + +/* This table describes all the machine specific pseudo-ops the assembler + has to support. The fields are: + pseudo-op name without dot + function to call to execute this pseudo-op + Integer arg to pass to the function. */ + +static void s_req PARAMS ((int)); +static void s_align PARAMS ((int)); +static void s_bss PARAMS ((int)); +static void s_even PARAMS ((int)); +static void s_ltorg PARAMS ((int)); +static void s_arm PARAMS ((int)); +static void s_thumb PARAMS ((int)); +static void s_code PARAMS ((int)); +static void s_force_thumb PARAMS ((int)); +static void s_thumb_func PARAMS ((int)); +static void s_thumb_set PARAMS ((int)); +static void arm_s_text PARAMS ((int)); +static void arm_s_data PARAMS ((int)); +#ifdef OBJ_ELF +static void arm_s_section PARAMS ((int)); +static void s_arm_elf_cons PARAMS ((int)); +#endif + +static int my_get_expression PARAMS ((expressionS *, char **)); + +CONST pseudo_typeS md_pseudo_table[] = +{ + { "req", s_req, 0 }, /* Never called becasue '.req' does not start line */ + { "bss", s_bss, 0 }, + { "align", s_align, 0 }, + { "arm", s_arm, 0 }, + { "thumb", s_thumb, 0 }, + { "code", s_code, 0 }, + { "force_thumb", s_force_thumb, 0 }, + { "thumb_func", s_thumb_func, 0 }, + { "thumb_set", s_thumb_set, 0 }, + { "even", s_even, 0 }, + { "ltorg", s_ltorg, 0 }, + { "pool", s_ltorg, 0 }, + /* Allow for the effect of section changes. */ + { "text", arm_s_text, 0 }, + { "data", arm_s_data, 0 }, +#ifdef OBJ_ELF + { "section", arm_s_section, 0 }, + { "section.s", arm_s_section, 0 }, + { "sect", arm_s_section, 0 }, + { "sect.s", arm_s_section, 0 }, + { "word", s_arm_elf_cons, 4 }, + { "long", s_arm_elf_cons, 4 }, +#else + { "word", cons, 4}, +#endif + { "extend", float_cons, 'x' }, + { "ldouble", float_cons, 'x' }, + { "packed", float_cons, 'p' }, + { 0, 0, 0 } +}; + +/* Stuff needed to resolve the label ambiguity + As: + ... + label: <insn> + may differ from: + ... + label: + <insn> +*/ + +symbolS * last_label_seen; +static int label_is_thumb_function_name = false; + +/* Literal stuff */ + +#define MAX_LITERAL_POOL_SIZE 1024 + +typedef struct literalS +{ + struct expressionS exp; + struct arm_it * inst; +} literalT; + +literalT literals[MAX_LITERAL_POOL_SIZE]; +int next_literal_pool_place = 0; /* Next free entry in the pool */ +int lit_pool_num = 1; /* Next literal pool number */ +symbolS * current_poolP = NULL; + +static int +add_to_lit_pool () +{ + int lit_count = 0; + + if (current_poolP == NULL) + current_poolP = symbol_create (FAKE_LABEL_NAME, undefined_section, + (valueT) 0, &zero_address_frag); + + /* Check if this literal value is already in the pool: */ + while (lit_count < next_literal_pool_place) + { + if (literals[lit_count].exp.X_op == inst.reloc.exp.X_op + && inst.reloc.exp.X_op == O_constant + && literals[lit_count].exp.X_add_number + == inst.reloc.exp.X_add_number + && literals[lit_count].exp.X_unsigned == inst.reloc.exp.X_unsigned) + break; + lit_count++; + } + + if (lit_count == next_literal_pool_place) /* new entry */ + { + if (next_literal_pool_place > MAX_LITERAL_POOL_SIZE) + { + inst.error = _("Literal Pool Overflow"); + return FAIL; + } + + literals[next_literal_pool_place].exp = inst.reloc.exp; + lit_count = next_literal_pool_place++; + } + + inst.reloc.exp.X_op = O_symbol; + inst.reloc.exp.X_add_number = (lit_count) * 4 - 8; + inst.reloc.exp.X_add_symbol = current_poolP; + + return SUCCESS; +} + +/* Can't use symbol_new here, so have to create a symbol and then at + a later date assign it a value. Thats what these functions do. */ +static void +symbol_locate (symbolP, name, segment, valu, frag) + symbolS * symbolP; + CONST char * name; /* It is copied, the caller can modify */ + segT segment; /* Segment identifier (SEG_<something>) */ + valueT valu; /* Symbol value */ + fragS * frag; /* Associated fragment */ +{ + unsigned int name_length; + char * preserved_copy_of_name; + + name_length = strlen (name) + 1; /* +1 for \0 */ + obstack_grow (¬es, name, name_length); + preserved_copy_of_name = obstack_finish (¬es); +#ifdef STRIP_UNDERSCORE + if (preserved_copy_of_name[0] == '_') + preserved_copy_of_name++; +#endif + +#ifdef tc_canonicalize_symbol_name + preserved_copy_of_name = + tc_canonicalize_symbol_name (preserved_copy_of_name); +#endif + + S_SET_NAME (symbolP, preserved_copy_of_name); + + S_SET_SEGMENT (symbolP, segment); + S_SET_VALUE (symbolP, valu); + symbol_clear_list_pointers(symbolP); + + symbol_set_frag (symbolP, frag); + + /* Link to end of symbol chain. */ + { + extern int symbol_table_frozen; + if (symbol_table_frozen) + abort (); + } + + symbol_append (symbolP, symbol_lastP, & symbol_rootP, & symbol_lastP); + + obj_symbol_new_hook (symbolP); + +#ifdef tc_symbol_new_hook + tc_symbol_new_hook (symbolP); +#endif + +#ifdef DEBUG_SYMS + verify_symbol_chain (symbol_rootP, symbol_lastP); +#endif /* DEBUG_SYMS */ +} + +/* Check that an immediate is valid, and if so, + convert it to the right format. */ +static unsigned int +validate_immediate (val) + unsigned int val; +{ + unsigned int a; + unsigned int i; + +#define rotate_left(v, n) (v << n | v >> (32 - n)) + + for (i = 0; i < 32; i += 2) + if ((a = rotate_left (val, i)) <= 0xff) + return a | (i << 7); /* 12-bit pack: [shift-cnt,const] */ + + return FAIL; +} + +/* Check to see if an immediate can be computed as two seperate immediate + values, added together. We already know that this value cannot be + computed by just one ARM instruction. */ +static unsigned int +validate_immediate_twopart (val, highpart) + unsigned int val; + unsigned int * highpart; +{ + unsigned int a; + unsigned int i; + + for (i = 0; i < 32; i += 2) + if (((a = rotate_left (val, i)) & 0xff) != 0) + { + if (a & 0xff00) + { + if (a & ~ 0xffff) + continue; + * highpart = (a >> 8) | ((i + 24) << 7); + } + else if (a & 0xff0000) + { + if (a & 0xff000000) + continue; + + * highpart = (a >> 16) | ((i + 16) << 7); + } + else + { + assert (a & 0xff000000); + + * highpart = (a >> 24) | ((i + 8) << 7); + } + + return (a & 0xff) | (i << 7); + } + + return FAIL; +} + +static int +validate_offset_imm (val, hwse) + unsigned int val; + int hwse; +{ + if ((hwse && val > 255) || val > 4095) + return FAIL; + return val; +} + + +static void +s_req (a) + int a ATTRIBUTE_UNUSED; +{ + as_bad (_("Invalid syntax for .req directive.")); +} + +static void +s_bss (ignore) + int ignore ATTRIBUTE_UNUSED; +{ + /* We don't support putting frags in the BSS segment, we fake it by + marking in_bss, then looking at s_skip for clues?.. */ + subseg_set (bss_section, 0); + demand_empty_rest_of_line (); +} + +static void +s_even (ignore) + int ignore ATTRIBUTE_UNUSED; +{ + if (!need_pass_2) /* Never make frag if expect extra pass. */ + frag_align (1, 0, 0); + + record_alignment (now_seg, 1); + + demand_empty_rest_of_line (); +} + +static void +s_ltorg (ignored) + int ignored ATTRIBUTE_UNUSED; +{ + int lit_count = 0; + char sym_name[20]; + + if (current_poolP == NULL) + return; + + /* Align pool as you have word accesses */ + /* Only make a frag if we have to ... */ + if (!need_pass_2) + frag_align (2, 0, 0); + + record_alignment (now_seg, 2); + + sprintf (sym_name, "$$lit_\002%x", lit_pool_num++); + + symbol_locate (current_poolP, sym_name, now_seg, + (valueT) frag_now_fix (), frag_now); + symbol_table_insert (current_poolP); + + ARM_SET_THUMB (current_poolP, thumb_mode); + +#if defined OBJ_COFF || defined OBJ_ELF + ARM_SET_INTERWORK (current_poolP, support_interwork); +#endif + + while (lit_count < next_literal_pool_place) + /* First output the expression in the instruction to the pool. */ + emit_expr (&(literals[lit_count++].exp), 4); /* .word */ + + next_literal_pool_place = 0; + current_poolP = NULL; +} + +static void +s_align (unused) /* Same as s_align_ptwo but align 0 => align 2 */ + int unused ATTRIBUTE_UNUSED; +{ + register int temp; + register long temp_fill; + long max_alignment = 15; + + temp = get_absolute_expression (); + if (temp > max_alignment) + as_bad (_("Alignment too large: %d. assumed."), temp = max_alignment); + else if (temp < 0) + { + as_bad (_("Alignment negative. 0 assumed.")); + temp = 0; + } + + if (*input_line_pointer == ',') + { + input_line_pointer++; + temp_fill = get_absolute_expression (); + } + else + temp_fill = 0; + + if (!temp) + temp = 2; + + /* Only make a frag if we HAVE to. . . */ + if (temp && !need_pass_2) + frag_align (temp, (int) temp_fill, 0); + demand_empty_rest_of_line (); + + record_alignment (now_seg, temp); +} + +static void +s_force_thumb (ignore) + int ignore ATTRIBUTE_UNUSED; +{ + /* If we are not already in thumb mode go into it, EVEN if + the target processor does not support thumb instructions. + This is used by gcc/config/arm/lib1funcs.asm for example + to compile interworking support functions even if the + target processor should not support interworking. */ + + if (! thumb_mode) + { + thumb_mode = 2; + + record_alignment (now_seg, 1); + } + + demand_empty_rest_of_line (); +} + +static void +s_thumb_func (ignore) + int ignore ATTRIBUTE_UNUSED; +{ + /* The following label is the name/address of the start of a Thumb function. + We need to know this for the interworking support. */ + + label_is_thumb_function_name = true; + + demand_empty_rest_of_line (); +} + +/* Perform a .set directive, but also mark the alias as + being a thumb function. */ + +static void +s_thumb_set (equiv) + int equiv; +{ + /* XXX the following is a duplicate of the code for s_set() in read.c + We cannot just call that code as we need to get at the symbol that + is created. */ + register char * name; + register char delim; + register char * end_name; + register symbolS * symbolP; + + /* + * Especial apologies for the random logic: + * this just grew, and could be parsed much more simply! + * Dean in haste. + */ + name = input_line_pointer; + delim = get_symbol_end (); + end_name = input_line_pointer; + *end_name = delim; + + SKIP_WHITESPACE (); + + if (*input_line_pointer != ',') + { + *end_name = 0; + as_bad (_("Expected comma after name \"%s\""), name); + *end_name = delim; + ignore_rest_of_line (); + return; + } + + input_line_pointer++; + *end_name = 0; + + if (name[0] == '.' && name[1] == '\0') + { + /* XXX - this should not happen to .thumb_set */ + abort (); + } + + if ((symbolP = symbol_find (name)) == NULL + && (symbolP = md_undefined_symbol (name)) == NULL) + { +#ifndef NO_LISTING + /* When doing symbol listings, play games with dummy fragments living + outside the normal fragment chain to record the file and line info + for this symbol. */ + if (listing & LISTING_SYMBOLS) + { + extern struct list_info_struct * listing_tail; + fragS * dummy_frag = (fragS *) xmalloc (sizeof(fragS)); + memset (dummy_frag, 0, sizeof(fragS)); + dummy_frag->fr_type = rs_fill; + dummy_frag->line = listing_tail; + symbolP = symbol_new (name, undefined_section, 0, dummy_frag); + dummy_frag->fr_symbol = symbolP; + } + else +#endif + symbolP = symbol_new (name, undefined_section, 0, &zero_address_frag); + +#ifdef OBJ_COFF + /* "set" symbols are local unless otherwise specified. */ + SF_SET_LOCAL (symbolP); +#endif /* OBJ_COFF */ + } /* make a new symbol */ + + symbol_table_insert (symbolP); + + * end_name = delim; + + if (equiv + && S_IS_DEFINED (symbolP) + && S_GET_SEGMENT (symbolP) != reg_section) + as_bad (_("symbol `%s' already defined"), S_GET_NAME (symbolP)); + + pseudo_set (symbolP); + + demand_empty_rest_of_line (); + + /* XXX Now we come to the Thumb specific bit of code. */ + + THUMB_SET_FUNC (symbolP, 1); + ARM_SET_THUMB (symbolP, 1); +#if defined OBJ_ELF || defined OBJ_COFF + ARM_SET_INTERWORK (symbolP, support_interwork); +#endif +} + +/* If we change section we must dump the literal pool first. */ +static void +arm_s_text (ignore) + int ignore; +{ + if (now_seg != text_section) + s_ltorg (0); + +#ifdef OBJ_ELF + obj_elf_text (ignore); +#else + s_text (ignore); +#endif +} + +static void +arm_s_data (ignore) + int ignore; +{ + if (flag_readonly_data_in_text) + { + if (now_seg != text_section) + s_ltorg (0); + } + else if (now_seg != data_section) + s_ltorg (0); + +#ifdef OBJ_ELF + obj_elf_data (ignore); +#else + s_data (ignore); +#endif +} + +#ifdef OBJ_ELF +static void +arm_s_section (ignore) + int ignore; +{ + s_ltorg (0); + + obj_elf_section (ignore); +} +#endif + +static void +opcode_select (width) + int width; +{ + switch (width) + { + case 16: + if (! thumb_mode) + { + if (! (cpu_variant & ARM_THUMB)) + as_bad (_("selected processor does not support THUMB opcodes")); + thumb_mode = 1; + /* No need to force the alignment, since we will have been + coming from ARM mode, which is word-aligned. */ + record_alignment (now_seg, 1); + } + break; + + case 32: + if (thumb_mode) + { + if ((cpu_variant & ARM_ANY) == ARM_THUMB) + as_bad (_("selected processor does not support ARM opcodes")); + thumb_mode = 0; + if (!need_pass_2) + frag_align (2, 0, 0); + record_alignment (now_seg, 1); + } + break; + + default: + as_bad (_("invalid instruction size selected (%d)"), width); + } +} + +static void +s_arm (ignore) + int ignore ATTRIBUTE_UNUSED; +{ + opcode_select (32); + demand_empty_rest_of_line (); +} + +static void +s_thumb (ignore) + int ignore ATTRIBUTE_UNUSED; +{ + opcode_select (16); + demand_empty_rest_of_line (); +} + +static void +s_code (unused) + int unused ATTRIBUTE_UNUSED; +{ + register int temp; + + temp = get_absolute_expression (); + switch (temp) + { + case 16: + case 32: + opcode_select (temp); + break; + + default: + as_bad (_("invalid operand to .code directive (%d) (expecting 16 or 32)"), temp); + } +} + +static void +end_of_line (str) + char * str; +{ + skip_whitespace (str); + + if (* str != '\0') + inst.error = _("Garbage following instruction"); +} + +static int +skip_past_comma (str) + char ** str; +{ + char *p = *str, c; + int comma = 0; + + while ((c = *p) == ' ' || c == ',') + { + p++; + if (c == ',' && comma++) + return FAIL; + } + + if (c == '\0') + return FAIL; + + *str = p; + return comma ? SUCCESS : FAIL; +} + +/* A standard register must be given at this point. + Shift is the place to put it in inst.instruction. + Restores input start point on err. + Returns the reg#, or FAIL. */ +static int +reg_required_here (str, shift) + char ** str; + int shift; +{ + static char buff [128]; /* XXX */ + int reg; + char * start = *str; + + if ((reg = arm_reg_parse (str)) != FAIL && int_register (reg)) + { + if (shift >= 0) + inst.instruction |= reg << shift; + return reg; + } + + /* Restore the start point, we may have got a reg of the wrong class. */ + *str = start; + + /* In the few cases where we might be able to accept something else + this error can be overridden. */ + sprintf (buff, _("Register expected, not '%.100s'"), start); + inst.error = buff; + + return FAIL; +} + +static CONST struct asm_psr * +arm_psr_parse (ccp) + register char ** ccp; +{ + char * start = * ccp; + char c; + char * p; + CONST struct asm_psr * psr; + + p = start; + + /* Skip to the end of the next word in the input stream. */ + do + { + c = *p++; + } + while (isalpha (c) || c == '_'); + + /* Terminate the word. */ + *--p = 0; + + /* Now locate the word in the psr hash table. */ + psr = (CONST struct asm_psr *) hash_find (arm_psr_hsh, start); + + /* Restore the input stream. */ + *p = c; + + /* If we found a valid match, advance the + stream pointer past the end of the word. */ + *ccp = p; + + return psr; +} + +/* Parse the input looking for a PSR flag. */ +static int +psr_required_here (str) + char ** str; +{ + char * start = *str; + CONST struct asm_psr * psr; + + psr = arm_psr_parse (str); + + if (psr) + { + /* If this is the SPSR that is being modified, set the R bit. */ + if (! psr->cpsr) + inst.instruction |= SPSR_BIT; + + /* Set the psr flags in the MSR instruction. */ + inst.instruction |= psr->field << PSR_SHIFT; + + return SUCCESS; + } + + /* In the few cases where we might be able to accept + something else this error can be overridden. */ + inst.error = _("flag for {c}psr instruction expected"); + + /* Restore the start point. */ + *str = start; + return FAIL; +} + +static int +co_proc_number (str) + char ** str; +{ + int processor, pchar; + + skip_whitespace (* str); + + /* The data sheet seems to imply that just a number on its own is valid + here, but the RISC iX assembler seems to accept a prefix 'p'. We will + accept either. */ + if (**str == 'p' || **str == 'P') + (*str)++; + + pchar = *(*str)++; + if (pchar >= '0' && pchar <= '9') + { + processor = pchar - '0'; + if (**str >= '0' && **str <= '9') + { + processor = processor * 10 + *(*str)++ - '0'; + if (processor > 15) + { + inst.error = _("Illegal co-processor number"); + return FAIL; + } + } + } + else + { + inst.error = _("Bad or missing co-processor number"); + return FAIL; + } + + inst.instruction |= processor << 8; + return SUCCESS; +} + +static int +cp_opc_expr (str, where, length) + char ** str; + int where; + int length; +{ + expressionS expr; + + skip_whitespace (* str); + + memset (&expr, '\0', sizeof (expr)); + + if (my_get_expression (&expr, str)) + return FAIL; + if (expr.X_op != O_constant) + { + inst.error = _("bad or missing expression"); + return FAIL; + } + + if ((expr.X_add_number & ((1 << length) - 1)) != expr.X_add_number) + { + inst.error = _("immediate co-processor expression too large"); + return FAIL; + } + + inst.instruction |= expr.X_add_number << where; + return SUCCESS; +} + +static int +cp_reg_required_here (str, where) + char ** str; + int where; +{ + int reg; + char * start = *str; + + if ((reg = arm_reg_parse (str)) != FAIL && cp_register (reg)) + { + reg &= 15; + inst.instruction |= reg << where; + return reg; + } + + /* In the few cases where we might be able to accept something else + this error can be overridden. */ + inst.error = _("Co-processor register expected"); + + /* Restore the start point. */ + *str = start; + return FAIL; +} + +static int +fp_reg_required_here (str, where) + char ** str; + int where; +{ + int reg; + char * start = *str; + + if ((reg = arm_reg_parse (str)) != FAIL && fp_register (reg)) + { + reg &= 7; + inst.instruction |= reg << where; + return reg; + } + + /* In the few cases where we might be able to accept something else + this error can be overridden. */ + inst.error = _("Floating point register expected"); + + /* Restore the start point. */ + *str = start; + return FAIL; +} + +static int +cp_address_offset (str) + char ** str; +{ + int offset; + + skip_whitespace (* str); + + if (! is_immediate_prefix (**str)) + { + inst.error = _("immediate expression expected"); + return FAIL; + } + + (*str)++; + + if (my_get_expression (& inst.reloc.exp, str)) + return FAIL; + + if (inst.reloc.exp.X_op == O_constant) + { + offset = inst.reloc.exp.X_add_number; + + if (offset & 3) + { + inst.error = _("co-processor address must be word aligned"); + return FAIL; + } + + if (offset > 1023 || offset < -1023) + { + inst.error = _("offset too large"); + return FAIL; + } + + if (offset >= 0) + inst.instruction |= INDEX_UP; + else + offset = -offset; + + inst.instruction |= offset >> 2; + } + else + inst.reloc.type = BFD_RELOC_ARM_CP_OFF_IMM; + + return SUCCESS; +} + +static int +cp_address_required_here (str) + char ** str; +{ + char * p = * str; + int pre_inc = 0; + int write_back = 0; + + if (*p == '[') + { + int reg; + + p++; + skip_whitespace (p); + + if ((reg = reg_required_here (& p, 16)) == FAIL) + return FAIL; + + skip_whitespace (p); + + if (*p == ']') + { + p++; + + if (skip_past_comma (& p) == SUCCESS) + { + /* [Rn], #expr */ + write_back = WRITE_BACK; + + if (reg == REG_PC) + { + inst.error = _("pc may not be used in post-increment"); + return FAIL; + } + + if (cp_address_offset (& p) == FAIL) + return FAIL; + } + else + pre_inc = PRE_INDEX | INDEX_UP; + } + else + { + /* '['Rn, #expr']'[!] */ + + if (skip_past_comma (& p) == FAIL) + { + inst.error = _("pre-indexed expression expected"); + return FAIL; + } + + pre_inc = PRE_INDEX; + + if (cp_address_offset (& p) == FAIL) + return FAIL; + + skip_whitespace (p); + + if (*p++ != ']') + { + inst.error = _("missing ]"); + return FAIL; + } + + skip_whitespace (p); + + if (*p == '!') + { + if (reg == REG_PC) + { + inst.error = _("pc may not be used with write-back"); + return FAIL; + } + + p++; + write_back = WRITE_BACK; + } + } + } + else + { + if (my_get_expression (&inst.reloc.exp, &p)) + return FAIL; + + inst.reloc.type = BFD_RELOC_ARM_CP_OFF_IMM; + inst.reloc.exp.X_add_number -= 8; /* PC rel adjust */ + inst.reloc.pc_rel = 1; + inst.instruction |= (REG_PC << 16); + pre_inc = PRE_INDEX; + } + + inst.instruction |= write_back | pre_inc; + *str = p; + return SUCCESS; +} + +static void +do_nop (str, flags) + char * str; + unsigned long flags; +{ + /* Do nothing really. */ + inst.instruction |= flags; /* This is pointless. */ + end_of_line (str); + return; +} + +static void +do_mrs (str, flags) + char *str; + unsigned long flags; +{ + int skip = 0; + + /* Only one syntax. */ + skip_whitespace (str); + + if (reg_required_here (&str, 12) == FAIL) + { + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL) + { + inst.error = _("comma expected after register name"); + return; + } + + skip_whitespace (str); + + if ( strcmp (str, "CPSR") == 0 + || strcmp (str, "SPSR") == 0 + /* Lower case versions for backwards compatability. */ + || strcmp (str, "cpsr") == 0 + || strcmp (str, "spsr") == 0) + skip = 4; + /* This is for backwards compatability with older toolchains. */ + else if (strcmp (str, "cpsr_all") == 0 + || strcmp (str, "spsr_all") == 0) + skip = 7; + else + { + inst.error = _("{C|S}PSR expected"); + return; + } + + if (* str == 's' || * str == 'S') + inst.instruction |= SPSR_BIT; + str += skip; + + inst.instruction |= flags; + end_of_line (str); +} + +/* Two possible forms: + "{C|S}PSR_<field>, Rm", + "{C|S}PSR_f, #expression". */ +static void +do_msr (str, flags) + char * str; + unsigned long flags; +{ + skip_whitespace (str); + + if (psr_required_here (& str) == FAIL) + return; + + if (skip_past_comma (& str) == FAIL) + { + inst.error = _("comma missing after psr flags"); + return; + } + + skip_whitespace (str); + + if (reg_required_here (& str, 0) != FAIL) + { + inst.error = NULL; + inst.instruction |= flags; + end_of_line (str); + return; + } + + if (! is_immediate_prefix (* str)) + { + inst.error = _("only a register or immediate value can follow a psr flag"); + return; + } + + str ++; + inst.error = NULL; + + if (my_get_expression (& inst.reloc.exp, & str)) + { + inst.error = _("only a register or immediate value can follow a psr flag"); + return; + } + + if (inst.instruction & ((PSR_c | PSR_x | PSR_s) << PSR_SHIFT)) + { + inst.error = _("can only set flag field with immediate value"); + return; + } + + flags |= INST_IMMEDIATE; + + if (inst.reloc.exp.X_add_symbol) + { + inst.reloc.type = BFD_RELOC_ARM_IMMEDIATE; + inst.reloc.pc_rel = 0; + } + else + { + unsigned value = validate_immediate (inst.reloc.exp.X_add_number); + + if (value == (unsigned) FAIL) + { + inst.error = _("Invalid constant"); + return; + } + + inst.instruction |= value; + } + + inst.error = NULL; + inst.instruction |= flags; + end_of_line (str); +} + +/* Long Multiply Parser + UMULL RdLo, RdHi, Rm, Rs + SMULL RdLo, RdHi, Rm, Rs + UMLAL RdLo, RdHi, Rm, Rs + SMLAL RdLo, RdHi, Rm, Rs +*/ +static void +do_mull (str, flags) + char * str; + unsigned long flags; +{ + int rdlo, rdhi, rm, rs; + + /* Only one format "rdlo, rdhi, rm, rs" */ + skip_whitespace (str); + + if ((rdlo = reg_required_here (&str, 12)) == FAIL) + { + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || (rdhi = reg_required_here (&str, 16)) == FAIL) + { + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || (rm = reg_required_here (&str, 0)) == FAIL) + { + inst.error = BAD_ARGS; + return; + } + + /* rdhi, rdlo and rm must all be different */ + if (rdlo == rdhi || rdlo == rm || rdhi == rm) + as_tsktsk (_("rdhi, rdlo and rm must all be different")); + + if (skip_past_comma (&str) == FAIL + || (rs = reg_required_here (&str, 8)) == FAIL) + { + inst.error = BAD_ARGS; + return; + } + + if (rdhi == REG_PC || rdhi == REG_PC || rdhi == REG_PC || rdhi == REG_PC) + { + inst.error = BAD_PC; + return; + } + + inst.instruction |= flags; + end_of_line (str); + return; +} + +static void +do_mul (str, flags) + char * str; + unsigned long flags; +{ + int rd, rm; + + /* Only one format "rd, rm, rs" */ + skip_whitespace (str); + + if ((rd = reg_required_here (&str, 16)) == FAIL) + { + inst.error = BAD_ARGS; + return; + } + + if (rd == REG_PC) + { + inst.error = BAD_PC; + return; + } + + if (skip_past_comma (&str) == FAIL + || (rm = reg_required_here (&str, 0)) == FAIL) + { + inst.error = BAD_ARGS; + return; + } + + if (rm == REG_PC) + { + inst.error = BAD_PC; + return; + } + + if (rm == rd) + as_tsktsk (_("rd and rm should be different in mul")); + + if (skip_past_comma (&str) == FAIL + || (rm = reg_required_here (&str, 8)) == FAIL) + { + inst.error = BAD_ARGS; + return; + } + + if (rm == REG_PC) + { + inst.error = BAD_PC; + return; + } + + inst.instruction |= flags; + end_of_line (str); + return; +} + +static void +do_mla (str, flags) + char * str; + unsigned long flags; +{ + int rd, rm; + + /* Only one format "rd, rm, rs, rn" */ + skip_whitespace (str); + + if ((rd = reg_required_here (&str, 16)) == FAIL) + { + inst.error = BAD_ARGS; + return; + } + + if (rd == REG_PC) + { + inst.error = BAD_PC; + return; + } + + if (skip_past_comma (&str) == FAIL + || (rm = reg_required_here (&str, 0)) == FAIL) + { + inst.error = BAD_ARGS; + return; + } + + if (rm == REG_PC) + { + inst.error = BAD_PC; + return; + } + + if (rm == rd) + as_tsktsk (_("rd and rm should be different in mla")); + + if (skip_past_comma (&str) == FAIL + || (rd = reg_required_here (&str, 8)) == FAIL + || skip_past_comma (&str) == FAIL + || (rm = reg_required_here (&str, 12)) == FAIL) + { + inst.error = BAD_ARGS; + return; + } + + if (rd == REG_PC || rm == REG_PC) + { + inst.error = BAD_PC; + return; + } + + inst.instruction |= flags; + end_of_line (str); + return; +} + +/* Returns the index into fp_values of a floating point number, or -1 if + not in the table. */ +static int +my_get_float_expression (str) + char ** str; +{ + LITTLENUM_TYPE words[MAX_LITTLENUMS]; + char * save_in; + expressionS exp; + int i; + int j; + + memset (words, 0, MAX_LITTLENUMS * sizeof (LITTLENUM_TYPE)); + /* Look for a raw floating point number */ + if ((save_in = atof_ieee (*str, 'x', words)) != NULL + && (is_end_of_line [(int)(*save_in)] || *save_in == '\0')) + { + for (i = 0; i < NUM_FLOAT_VALS; i++) + { + for (j = 0; j < MAX_LITTLENUMS; j++) + { + if (words[j] != fp_values[i][j]) + break; + } + + if (j == MAX_LITTLENUMS) + { + *str = save_in; + return i; + } + } + } + + /* Try and parse a more complex expression, this will probably fail + unless the code uses a floating point prefix (eg "0f") */ + save_in = input_line_pointer; + input_line_pointer = *str; + if (expression (&exp) == absolute_section + && exp.X_op == O_big + && exp.X_add_number < 0) + { + /* FIXME: 5 = X_PRECISION, should be #define'd where we can use it. + Ditto for 15. */ + if (gen_to_words (words, 5, (long)15) == 0) + { + for (i = 0; i < NUM_FLOAT_VALS; i++) + { + for (j = 0; j < MAX_LITTLENUMS; j++) + { + if (words[j] != fp_values[i][j]) + break; + } + + if (j == MAX_LITTLENUMS) + { + *str = input_line_pointer; + input_line_pointer = save_in; + return i; + } + } + } + } + + *str = input_line_pointer; + input_line_pointer = save_in; + return -1; +} + +/* Return true if anything in the expression is a bignum */ +static int +walk_no_bignums (sp) + symbolS * sp; +{ + if (symbol_get_value_expression (sp)->X_op == O_big) + return 1; + + if (symbol_get_value_expression (sp)->X_add_symbol) + { + return (walk_no_bignums (symbol_get_value_expression (sp)->X_add_symbol) + || (symbol_get_value_expression (sp)->X_op_symbol + && walk_no_bignums (symbol_get_value_expression (sp)->X_op_symbol))); + } + + return 0; +} + +static int +my_get_expression (ep, str) + expressionS * ep; + char ** str; +{ + char * save_in; + segT seg; + + save_in = input_line_pointer; + input_line_pointer = *str; + seg = expression (ep); + +#ifdef OBJ_AOUT + if (seg != absolute_section + && seg != text_section + && seg != data_section + && seg != bss_section + && seg != undefined_section) + { + inst.error = _("bad_segment"); + *str = input_line_pointer; + input_line_pointer = save_in; + return 1; + } +#endif + + /* Get rid of any bignums now, so that we don't generate an error for which + we can't establish a line number later on. Big numbers are never valid + in instructions, which is where this routine is always called. */ + if (ep->X_op == O_big + || (ep->X_add_symbol + && (walk_no_bignums (ep->X_add_symbol) + || (ep->X_op_symbol + && walk_no_bignums (ep->X_op_symbol))))) + { + inst.error = _("Invalid constant"); + *str = input_line_pointer; + input_line_pointer = save_in; + return 1; + } + + *str = input_line_pointer; + input_line_pointer = save_in; + return 0; +} + +/* unrestrict should be one if <shift> <register> is permitted for this + instruction */ + +static int +decode_shift (str, unrestrict) + char ** str; + int unrestrict; +{ + struct asm_shift * shft; + char * p; + char c; + + skip_whitespace (* str); + + for (p = *str; isalpha (*p); p++) + ; + + if (p == *str) + { + inst.error = _("Shift expression expected"); + return FAIL; + } + + c = *p; + *p = '\0'; + shft = (struct asm_shift *) hash_find (arm_shift_hsh, *str); + *p = c; + if (shft) + { + if (!strncmp (*str, "rrx", 3) + || !strncmp (*str, "RRX", 3)) + { + *str = p; + inst.instruction |= shft->value; + return SUCCESS; + } + + skip_whitespace (p); + + if (unrestrict && reg_required_here (&p, 8) != FAIL) + { + inst.instruction |= shft->value | SHIFT_BY_REG; + *str = p; + return SUCCESS; + } + else if (is_immediate_prefix (* p)) + { + inst.error = NULL; + p++; + if (my_get_expression (&inst.reloc.exp, &p)) + return FAIL; + + /* Validate some simple #expressions */ + if (inst.reloc.exp.X_op == O_constant) + { + unsigned num = inst.reloc.exp.X_add_number; + + /* Reject operations greater than 32, or lsl #32 */ + if (num > 32 || (num == 32 && shft->value == 0)) + { + inst.error = _("Invalid immediate shift"); + return FAIL; + } + + /* Shifts of zero should be converted to lsl (which is zero)*/ + if (num == 0) + { + *str = p; + return SUCCESS; + } + + /* Shifts of 32 are encoded as 0, for those shifts that + support it. */ + if (num == 32) + num = 0; + + inst.instruction |= (num << 7) | shft->value; + *str = p; + return SUCCESS; + } + + inst.reloc.type = BFD_RELOC_ARM_SHIFT_IMM; + inst.reloc.pc_rel = 0; + inst.instruction |= shft->value; + *str = p; + return SUCCESS; + } + else + { + inst.error = unrestrict ? _("shift requires register or #expression") + : _("shift requires #expression"); + *str = p; + return FAIL; + } + } + + inst.error = _("Shift expression expected"); + return FAIL; +} + +/* Do those data_ops which can take a negative immediate constant */ +/* by altering the instuction. A bit of a hack really */ +/* MOV <-> MVN + AND <-> BIC + ADC <-> SBC + by inverting the second operand, and + ADD <-> SUB + CMP <-> CMN + by negating the second operand. +*/ +static int +negate_data_op (instruction, value) + unsigned long * instruction; + unsigned long value; +{ + int op, new_inst; + unsigned long negated, inverted; + + negated = validate_immediate (-value); + inverted = validate_immediate (~value); + + op = (*instruction >> DATA_OP_SHIFT) & 0xf; + switch (op) + { + /* First negates */ + case OPCODE_SUB: /* ADD <-> SUB */ + new_inst = OPCODE_ADD; + value = negated; + break; + + case OPCODE_ADD: + new_inst = OPCODE_SUB; + value = negated; + break; + + case OPCODE_CMP: /* CMP <-> CMN */ + new_inst = OPCODE_CMN; + value = negated; + break; + + case OPCODE_CMN: + new_inst = OPCODE_CMP; + value = negated; + break; + + /* Now Inverted ops */ + case OPCODE_MOV: /* MOV <-> MVN */ + new_inst = OPCODE_MVN; + value = inverted; + break; + + case OPCODE_MVN: + new_inst = OPCODE_MOV; + value = inverted; + break; + + case OPCODE_AND: /* AND <-> BIC */ + new_inst = OPCODE_BIC; + value = inverted; + break; + + case OPCODE_BIC: + new_inst = OPCODE_AND; + value = inverted; + break; + + case OPCODE_ADC: /* ADC <-> SBC */ + new_inst = OPCODE_SBC; + value = inverted; + break; + + case OPCODE_SBC: + new_inst = OPCODE_ADC; + value = inverted; + break; + + /* We cannot do anything */ + default: + return FAIL; + } + + if (value == (unsigned) FAIL) + return FAIL; + + *instruction &= OPCODE_MASK; + *instruction |= new_inst << DATA_OP_SHIFT; + return value; +} + +static int +data_op2 (str) + char ** str; +{ + int value; + expressionS expr; + + skip_whitespace (* str); + + if (reg_required_here (str, 0) != FAIL) + { + if (skip_past_comma (str) == SUCCESS) + /* Shift operation on register. */ + return decode_shift (str, NO_SHIFT_RESTRICT); + + return SUCCESS; + } + else + { + /* Immediate expression */ + if (is_immediate_prefix (**str)) + { + (*str)++; + inst.error = NULL; + + if (my_get_expression (&inst.reloc.exp, str)) + return FAIL; + + if (inst.reloc.exp.X_add_symbol) + { + inst.reloc.type = BFD_RELOC_ARM_IMMEDIATE; + inst.reloc.pc_rel = 0; + } + else + { + if (skip_past_comma (str) == SUCCESS) + { + /* #x, y -- ie explicit rotation by Y */ + if (my_get_expression (&expr, str)) + return FAIL; + + if (expr.X_op != O_constant) + { + inst.error = _("Constant expression expected"); + return FAIL; + } + + /* Rotate must be a multiple of 2 */ + if (((unsigned) expr.X_add_number) > 30 + || (expr.X_add_number & 1) != 0 + || ((unsigned) inst.reloc.exp.X_add_number) > 255) + { + inst.error = _("Invalid constant"); + return FAIL; + } + inst.instruction |= INST_IMMEDIATE; + inst.instruction |= inst.reloc.exp.X_add_number; + inst.instruction |= expr.X_add_number << 7; + return SUCCESS; + } + + /* Implicit rotation, select a suitable one */ + value = validate_immediate (inst.reloc.exp.X_add_number); + + if (value == FAIL) + { + /* Can't be done, perhaps the code reads something like + "add Rd, Rn, #-n", where "sub Rd, Rn, #n" would be ok */ + if ((value = negate_data_op (&inst.instruction, + inst.reloc.exp.X_add_number)) + == FAIL) + { + inst.error = _("Invalid constant"); + return FAIL; + } + } + + inst.instruction |= value; + } + + inst.instruction |= INST_IMMEDIATE; + return SUCCESS; + } + + (*str)++; + inst.error = _("Register or shift expression expected"); + return FAIL; + } +} + +static int +fp_op2 (str) + char ** str; +{ + skip_whitespace (* str); + + if (fp_reg_required_here (str, 0) != FAIL) + return SUCCESS; + else + { + /* Immediate expression */ + if (*((*str)++) == '#') + { + int i; + + inst.error = NULL; + + skip_whitespace (* str); + + /* First try and match exact strings, this is to guarantee that + some formats will work even for cross assembly */ + + for (i = 0; fp_const[i]; i++) + { + if (strncmp (*str, fp_const[i], strlen (fp_const[i])) == 0) + { + char *start = *str; + + *str += strlen (fp_const[i]); + if (is_end_of_line[(int)**str] || **str == '\0') + { + inst.instruction |= i + 8; + return SUCCESS; + } + *str = start; + } + } + + /* Just because we didn't get a match doesn't mean that the + constant isn't valid, just that it is in a format that we + don't automatically recognize. Try parsing it with + the standard expression routines. */ + if ((i = my_get_float_expression (str)) >= 0) + { + inst.instruction |= i + 8; + return SUCCESS; + } + + inst.error = _("Invalid floating point immediate expression"); + return FAIL; + } + inst.error = _("Floating point register or immediate expression expected"); + return FAIL; + } +} + +static void +do_arit (str, flags) + char * str; + unsigned long flags; +{ + skip_whitespace (str); + + if (reg_required_here (&str, 12) == FAIL + || skip_past_comma (&str) == FAIL + || reg_required_here (&str, 16) == FAIL + || skip_past_comma (&str) == FAIL + || data_op2 (&str) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + inst.instruction |= flags; + end_of_line (str); + return; +} + +static void +do_adr (str, flags) + char * str; + unsigned long flags; +{ + /* This is a pseudo-op of the form "adr rd, label" to be converted + into a relative address of the form "add rd, pc, #label-.-8". */ + skip_whitespace (str); + + if (reg_required_here (&str, 12) == FAIL + || skip_past_comma (&str) == FAIL + || my_get_expression (&inst.reloc.exp, &str)) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + /* Frag hacking will turn this into a sub instruction if the offset turns + out to be negative. */ + inst.reloc.type = BFD_RELOC_ARM_IMMEDIATE; + inst.reloc.exp.X_add_number -= 8; /* PC relative adjust. */ + inst.reloc.pc_rel = 1; + inst.instruction |= flags; + end_of_line (str); + return; +} + +static void +do_adrl (str, flags) + char * str; + unsigned long flags; +{ + /* This is a pseudo-op of the form "adrl rd, label" to be converted + into a relative address of the form: + add rd, pc, #low(label-.-8)" + add rd, rd, #high(label-.-8)" */ + + skip_whitespace (str); + + if (reg_required_here (& str, 12) == FAIL + || skip_past_comma (& str) == FAIL + || my_get_expression (& inst.reloc.exp, & str)) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + end_of_line (str); + + /* Frag hacking will turn this into a sub instruction if the offset turns + out to be negative. */ + inst.reloc.type = BFD_RELOC_ARM_ADRL_IMMEDIATE; + inst.reloc.exp.X_add_number -= 8; /* PC relative adjust */ + inst.reloc.pc_rel = 1; + inst.instruction |= flags; + inst.size = INSN_SIZE * 2; + + return; +} + +static void +do_cmp (str, flags) + char * str; + unsigned long flags; +{ + skip_whitespace (str); + + if (reg_required_here (&str, 16) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || data_op2 (&str) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + inst.instruction |= flags; + if ((flags & 0x0000f000) == 0) + inst.instruction |= CONDS_BIT; + + end_of_line (str); + return; +} + +static void +do_mov (str, flags) + char * str; + unsigned long flags; +{ + skip_whitespace (str); + + if (reg_required_here (&str, 12) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || data_op2 (&str) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + inst.instruction |= flags; + end_of_line (str); + return; +} + +static int +ldst_extend (str, hwse) + char ** str; + int hwse; +{ + int add = INDEX_UP; + + switch (**str) + { + case '#': + case '$': + (*str)++; + if (my_get_expression (& inst.reloc.exp, str)) + return FAIL; + + if (inst.reloc.exp.X_op == O_constant) + { + int value = inst.reloc.exp.X_add_number; + + if ((hwse && (value < -255 || value > 255)) + || (value < -4095 || value > 4095)) + { + inst.error = _("address offset too large"); + return FAIL; + } + + if (value < 0) + { + value = -value; + add = 0; + } + + /* Halfword and signextension instructions have the + immediate value split across bits 11..8 and bits 3..0 */ + if (hwse) + inst.instruction |= add | HWOFFSET_IMM | ((value >> 4) << 8) | (value & 0xF); + else + inst.instruction |= add | value; + } + else + { + if (hwse) + { + inst.instruction |= HWOFFSET_IMM; + inst.reloc.type = BFD_RELOC_ARM_OFFSET_IMM8; + } + else + inst.reloc.type = BFD_RELOC_ARM_OFFSET_IMM; + inst.reloc.pc_rel = 0; + } + return SUCCESS; + + case '-': + add = 0; /* and fall through */ + case '+': + (*str)++; /* and fall through */ + default: + if (reg_required_here (str, 0) == FAIL) + return FAIL; + + if (hwse) + inst.instruction |= add; + else + { + inst.instruction |= add | OFFSET_REG; + if (skip_past_comma (str) == SUCCESS) + return decode_shift (str, SHIFT_RESTRICT); + } + + return SUCCESS; + } +} + +static void +do_ldst (str, flags) + char * str; + unsigned long flags; +{ + int halfword = 0; + int pre_inc = 0; + int conflict_reg; + int value; + + /* This is not ideal, but it is the simplest way of dealing with the + ARM7T halfword instructions (since they use a different + encoding, but the same mnemonic): */ + halfword = (flags & 0x80000000) != 0; + if (halfword) + { + /* This is actually a load/store of a halfword, or a + signed-extension load */ + if ((cpu_variant & ARM_HALFWORD) == 0) + { + inst.error + = _("Processor does not support halfwords or signed bytes"); + return; + } + + inst.instruction = (inst.instruction & COND_MASK) + | (flags & ~COND_MASK); + + flags = 0; + } + + skip_whitespace (str); + + if ((conflict_reg = reg_required_here (& str, 12)) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (& str) == FAIL) + { + inst.error = _("Address expected"); + return; + } + + if (*str == '[') + { + int reg; + + str++; + + skip_whitespace (str); + + if ((reg = reg_required_here (&str, 16)) == FAIL) + return; + + /* Conflicts can occur on stores as well as loads. */ + conflict_reg = (conflict_reg == reg); + + skip_whitespace (str); + + if (*str == ']') + { + str ++; + + if (skip_past_comma (&str) == SUCCESS) + { + /* [Rn],... (post inc) */ + if (ldst_extend (&str, halfword) == FAIL) + return; + if (conflict_reg) + as_warn (_("%s register same as write-back base"), + (inst.instruction & LOAD_BIT) ? _("destination") : _("source") ); + } + else + { + /* [Rn] */ + if (halfword) + inst.instruction |= HWOFFSET_IMM; + + skip_whitespace (str); + + if (*str == '!') + { + if (conflict_reg) + as_warn (_("%s register same as write-back base"), + (inst.instruction & LOAD_BIT) ? _("destination") : _("source") ); + str++; + inst.instruction |= WRITE_BACK; + } + + flags |= INDEX_UP; + if (! (flags & TRANS_BIT)) + pre_inc = 1; + } + } + else + { + /* [Rn,...] */ + if (skip_past_comma (&str) == FAIL) + { + inst.error = _("pre-indexed expression expected"); + return; + } + + pre_inc = 1; + if (ldst_extend (&str, halfword) == FAIL) + return; + + skip_whitespace (str); + + if (*str++ != ']') + { + inst.error = _("missing ]"); + return; + } + + skip_whitespace (str); + + if (*str == '!') + { + if (conflict_reg) + as_warn (_("%s register same as write-back base"), + (inst.instruction & LOAD_BIT) ? _("destination") : _("source") ); + str++; + inst.instruction |= WRITE_BACK; + } + } + } + else if (*str == '=') + { + /* Parse an "ldr Rd, =expr" instruction; this is another pseudo op */ + str++; + + skip_whitespace (str); + + if (my_get_expression (&inst.reloc.exp, &str)) + return; + + if (inst.reloc.exp.X_op != O_constant + && inst.reloc.exp.X_op != O_symbol) + { + inst.error = _("Constant expression expected"); + return; + } + + if (inst.reloc.exp.X_op == O_constant + && (value = validate_immediate(inst.reloc.exp.X_add_number)) != FAIL) + { + /* This can be done with a mov instruction */ + inst.instruction &= LITERAL_MASK; + inst.instruction |= INST_IMMEDIATE | (OPCODE_MOV << DATA_OP_SHIFT); + inst.instruction |= (flags & COND_MASK) | (value & 0xfff); + end_of_line(str); + return; + } + else + { + /* Insert into literal pool */ + if (add_to_lit_pool () == FAIL) + { + if (!inst.error) + inst.error = _("literal pool insertion failed"); + return; + } + + /* Change the instruction exp to point to the pool */ + if (halfword) + { + inst.instruction |= HWOFFSET_IMM; + inst.reloc.type = BFD_RELOC_ARM_HWLITERAL; + } + else + inst.reloc.type = BFD_RELOC_ARM_LITERAL; + inst.reloc.pc_rel = 1; + inst.instruction |= (REG_PC << 16); + pre_inc = 1; + } + } + else + { + if (my_get_expression (&inst.reloc.exp, &str)) + return; + + if (halfword) + { + inst.instruction |= HWOFFSET_IMM; + inst.reloc.type = BFD_RELOC_ARM_OFFSET_IMM8; + } + else + inst.reloc.type = BFD_RELOC_ARM_OFFSET_IMM; +#ifndef TE_WINCE + inst.reloc.exp.X_add_number -= 8; /* PC rel adjust */ +#endif + inst.reloc.pc_rel = 1; + inst.instruction |= (REG_PC << 16); + pre_inc = 1; + } + + if (pre_inc && (flags & TRANS_BIT)) + inst.error = _("Pre-increment instruction with translate"); + + inst.instruction |= flags | (pre_inc ? PRE_INDEX : 0); + end_of_line (str); + return; +} + +static long +reg_list (strp) + char ** strp; +{ + char * str = *strp; + long range = 0; + int another_range; + + /* We come back here if we get ranges concatenated by '+' or '|' */ + do + { + another_range = 0; + + if (*str == '{') + { + int in_range = 0; + int cur_reg = -1; + + str++; + do + { + int reg; + + skip_whitespace (str); + + if ((reg = reg_required_here (& str, -1)) == FAIL) + return FAIL; + + if (in_range) + { + int i; + + if (reg <= cur_reg) + { + inst.error = _("Bad range in register list"); + return FAIL; + } + + for (i = cur_reg + 1; i < reg; i++) + { + if (range & (1 << i)) + as_tsktsk + (_("Warning: Duplicated register (r%d) in register list"), + i); + else + range |= 1 << i; + } + in_range = 0; + } + + if (range & (1 << reg)) + as_tsktsk (_("Warning: Duplicated register (r%d) in register list"), + reg); + else if (reg <= cur_reg) + as_tsktsk (_("Warning: Register range not in ascending order")); + + range |= 1 << reg; + cur_reg = reg; + } while (skip_past_comma (&str) != FAIL + || (in_range = 1, *str++ == '-')); + str--; + skip_whitespace (str); + + if (*str++ != '}') + { + inst.error = _("Missing `}'"); + return FAIL; + } + } + else + { + expressionS expr; + + if (my_get_expression (&expr, &str)) + return FAIL; + + if (expr.X_op == O_constant) + { + if (expr.X_add_number + != (expr.X_add_number & 0x0000ffff)) + { + inst.error = _("invalid register mask"); + return FAIL; + } + + if ((range & expr.X_add_number) != 0) + { + int regno = range & expr.X_add_number; + + regno &= -regno; + regno = (1 << regno) - 1; + as_tsktsk + (_("Warning: Duplicated register (r%d) in register list"), + regno); + } + + range |= expr.X_add_number; + } + else + { + if (inst.reloc.type != 0) + { + inst.error = _("expression too complex"); + return FAIL; + } + + memcpy (&inst.reloc.exp, &expr, sizeof (expressionS)); + inst.reloc.type = BFD_RELOC_ARM_MULTI; + inst.reloc.pc_rel = 0; + } + } + + skip_whitespace (str); + + if (*str == '|' || *str == '+') + { + str++; + another_range = 1; + } + } while (another_range); + + *strp = str; + return range; +} + +static void +do_ldmstm (str, flags) + char * str; + unsigned long flags; +{ + int base_reg; + long range; + + skip_whitespace (str); + + if ((base_reg = reg_required_here (&str, 16)) == FAIL) + return; + + if (base_reg == REG_PC) + { + inst.error = _("r15 not allowed as base register"); + return; + } + + skip_whitespace (str); + + if (*str == '!') + { + flags |= WRITE_BACK; + str++; + } + + if (skip_past_comma (&str) == FAIL + || (range = reg_list (&str)) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + if (*str == '^') + { + str++; + flags |= LDM_TYPE_2_OR_3; + } + + inst.instruction |= flags | range; + end_of_line (str); + return; +} + +static void +do_swi (str, flags) + char * str; + unsigned long flags; +{ + skip_whitespace (str); + + /* Allow optional leading '#'. */ + if (is_immediate_prefix (*str)) + str++; + + if (my_get_expression (& inst.reloc.exp, & str)) + return; + + inst.reloc.type = BFD_RELOC_ARM_SWI; + inst.reloc.pc_rel = 0; + inst.instruction |= flags; + + end_of_line (str); + + return; +} + +static void +do_swap (str, flags) + char * str; + unsigned long flags; +{ + int reg; + + skip_whitespace (str); + + if ((reg = reg_required_here (&str, 12)) == FAIL) + return; + + if (reg == REG_PC) + { + inst.error = _("r15 not allowed in swap"); + return; + } + + if (skip_past_comma (&str) == FAIL + || (reg = reg_required_here (&str, 0)) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + if (reg == REG_PC) + { + inst.error = _("r15 not allowed in swap"); + return; + } + + if (skip_past_comma (&str) == FAIL + || *str++ != '[') + { + inst.error = BAD_ARGS; + return; + } + + skip_whitespace (str); + + if ((reg = reg_required_here (&str, 16)) == FAIL) + return; + + if (reg == REG_PC) + { + inst.error = BAD_PC; + return; + } + + skip_whitespace (str); + + if (*str++ != ']') + { + inst.error = _("missing ]"); + return; + } + + inst.instruction |= flags; + end_of_line (str); + return; +} + +static void +do_branch (str, flags) + char * str; + unsigned long flags ATTRIBUTE_UNUSED; +{ + if (my_get_expression (&inst.reloc.exp, &str)) + return; + +#ifdef OBJ_ELF + { + char * save_in; + + /* ScottB: February 5, 1998 */ + /* Check to see of PLT32 reloc required for the instruction. */ + + /* arm_parse_reloc() works on input_line_pointer. + We actually want to parse the operands to the branch instruction + passed in 'str'. Save the input pointer and restore it later. */ + save_in = input_line_pointer; + input_line_pointer = str; + if (inst.reloc.exp.X_op == O_symbol + && *str == '(' + && arm_parse_reloc () == BFD_RELOC_ARM_PLT32) + { + inst.reloc.type = BFD_RELOC_ARM_PLT32; + inst.reloc.pc_rel = 0; + /* Modify str to point to after parsed operands, otherwise + end_of_line() will complain about the (PLT) left in str. */ + str = input_line_pointer; + } + else + { + inst.reloc.type = BFD_RELOC_ARM_PCREL_BRANCH; + inst.reloc.pc_rel = 1; + } + input_line_pointer = save_in; + } +#else + inst.reloc.type = BFD_RELOC_ARM_PCREL_BRANCH; + inst.reloc.pc_rel = 1; +#endif /* OBJ_ELF */ + + end_of_line (str); + return; +} + +static void +do_bx (str, flags) + char * str; + unsigned long flags ATTRIBUTE_UNUSED; +{ + int reg; + + skip_whitespace (str); + + if ((reg = reg_required_here (&str, 0)) == FAIL) + { + inst.error = BAD_ARGS; + return; + } + + if (reg == REG_PC) + inst.error = BAD_PC; + + end_of_line (str); +} + +static void +do_cdp (str, flags) + char * str; + unsigned long flags ATTRIBUTE_UNUSED; +{ + /* Co-processor data operation. + Format: CDP{cond} CP#,<expr>,CRd,CRn,CRm{,<expr>} */ + skip_whitespace (str); + + if (co_proc_number (&str) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || cp_opc_expr (&str, 20,4) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || cp_reg_required_here (&str, 12) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || cp_reg_required_here (&str, 16) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || cp_reg_required_here (&str, 0) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == SUCCESS) + { + if (cp_opc_expr (&str, 5, 3) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + } + + end_of_line (str); + return; +} + +static void +do_lstc (str, flags) + char * str; + unsigned long flags; +{ + /* Co-processor register load/store. + Format: <LDC|STC{cond}[L] CP#,CRd,<address> */ + + skip_whitespace (str); + + if (co_proc_number (&str) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || cp_reg_required_here (&str, 12) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || cp_address_required_here (&str) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + inst.instruction |= flags; + end_of_line (str); + return; +} + +static void +do_co_reg (str, flags) + char * str; + unsigned long flags; +{ + /* Co-processor register transfer. + Format: <MCR|MRC>{cond} CP#,<expr1>,Rd,CRn,CRm{,<expr2>} */ + + skip_whitespace (str); + + if (co_proc_number (&str) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || cp_opc_expr (&str, 21, 3) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || reg_required_here (&str, 12) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || cp_reg_required_here (&str, 16) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || cp_reg_required_here (&str, 0) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == SUCCESS) + { + if (cp_opc_expr (&str, 5, 3) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + } + if (flags) + { + inst.error = BAD_COND; + } + + end_of_line (str); + return; +} + +static void +do_fp_ctrl (str, flags) + char * str; + unsigned long flags ATTRIBUTE_UNUSED; +{ + /* FP control registers. + Format: <WFS|RFS|WFC|RFC>{cond} Rn */ + + skip_whitespace (str); + + if (reg_required_here (&str, 12) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + end_of_line (str); + return; +} + +static void +do_fp_ldst (str, flags) + char * str; + unsigned long flags ATTRIBUTE_UNUSED; +{ + skip_whitespace (str); + + switch (inst.suffix) + { + case SUFF_S: + break; + case SUFF_D: + inst.instruction |= CP_T_X; + break; + case SUFF_E: + inst.instruction |= CP_T_Y; + break; + case SUFF_P: + inst.instruction |= CP_T_X | CP_T_Y; + break; + default: + abort (); + } + + if (fp_reg_required_here (&str, 12) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || cp_address_required_here (&str) == FAIL) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + end_of_line (str); +} + +static void +do_fp_ldmstm (str, flags) + char * str; + unsigned long flags; +{ + int num_regs; + + skip_whitespace (str); + + if (fp_reg_required_here (&str, 12) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + /* Get Number of registers to transfer */ + if (skip_past_comma (&str) == FAIL + || my_get_expression (&inst.reloc.exp, &str)) + { + if (! inst.error) + inst.error = _("constant expression expected"); + return; + } + + if (inst.reloc.exp.X_op != O_constant) + { + inst.error = _("Constant value required for number of registers"); + return; + } + + num_regs = inst.reloc.exp.X_add_number; + + if (num_regs < 1 || num_regs > 4) + { + inst.error = _("number of registers must be in the range [1:4]"); + return; + } + + switch (num_regs) + { + case 1: + inst.instruction |= CP_T_X; + break; + case 2: + inst.instruction |= CP_T_Y; + break; + case 3: + inst.instruction |= CP_T_Y | CP_T_X; + break; + case 4: + break; + default: + abort (); + } + + if (flags) + { + int reg; + int write_back; + int offset; + + /* The instruction specified "ea" or "fd", so we can only accept + [Rn]{!}. The instruction does not really support stacking or + unstacking, so we have to emulate these by setting appropriate + bits and offsets. */ + if (skip_past_comma (&str) == FAIL + || *str != '[') + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + str++; + skip_whitespace (str); + + if ((reg = reg_required_here (&str, 16)) == FAIL) + return; + + skip_whitespace (str); + + if (*str != ']') + { + inst.error = BAD_ARGS; + return; + } + + str++; + if (*str == '!') + { + write_back = 1; + str++; + if (reg == REG_PC) + { + inst.error = _("R15 not allowed as base register with write-back"); + return; + } + } + else + write_back = 0; + + if (flags & CP_T_Pre) + { + /* Pre-decrement */ + offset = 3 * num_regs; + if (write_back) + flags |= CP_T_WB; + } + else + { + /* Post-increment */ + if (write_back) + { + flags |= CP_T_WB; + offset = 3 * num_regs; + } + else + { + /* No write-back, so convert this into a standard pre-increment + instruction -- aesthetically more pleasing. */ + flags = CP_T_Pre | CP_T_UD; + offset = 0; + } + } + + inst.instruction |= flags | offset; + } + else if (skip_past_comma (&str) == FAIL + || cp_address_required_here (&str) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + end_of_line (str); +} + +static void +do_fp_dyadic (str, flags) + char * str; + unsigned long flags; +{ + skip_whitespace (str); + + switch (inst.suffix) + { + case SUFF_S: + break; + case SUFF_D: + inst.instruction |= 0x00000080; + break; + case SUFF_E: + inst.instruction |= 0x00080000; + break; + default: + abort (); + } + + if (fp_reg_required_here (&str, 12) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || fp_reg_required_here (&str, 16) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || fp_op2 (&str) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + inst.instruction |= flags; + end_of_line (str); + return; +} + +static void +do_fp_monadic (str, flags) + char * str; + unsigned long flags; +{ + skip_whitespace (str); + + switch (inst.suffix) + { + case SUFF_S: + break; + case SUFF_D: + inst.instruction |= 0x00000080; + break; + case SUFF_E: + inst.instruction |= 0x00080000; + break; + default: + abort (); + } + + if (fp_reg_required_here (&str, 12) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || fp_op2 (&str) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + inst.instruction |= flags; + end_of_line (str); + return; +} + +static void +do_fp_cmp (str, flags) + char * str; + unsigned long flags; +{ + skip_whitespace (str); + + if (fp_reg_required_here (&str, 16) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || fp_op2 (&str) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + inst.instruction |= flags; + end_of_line (str); + return; +} + +static void +do_fp_from_reg (str, flags) + char * str; + unsigned long flags; +{ + skip_whitespace (str); + + switch (inst.suffix) + { + case SUFF_S: + break; + case SUFF_D: + inst.instruction |= 0x00000080; + break; + case SUFF_E: + inst.instruction |= 0x00080000; + break; + default: + abort (); + } + + if (fp_reg_required_here (&str, 16) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) == FAIL + || reg_required_here (&str, 12) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + inst.instruction |= flags; + end_of_line (str); + return; +} + +static void +do_fp_to_reg (str, flags) + char * str; + unsigned long flags; +{ + skip_whitespace (str); + + if (reg_required_here (&str, 12) == FAIL) + return; + + if (skip_past_comma (&str) == FAIL + || fp_reg_required_here (&str, 0) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + inst.instruction |= flags; + end_of_line (str); + return; +} + +/* Thumb specific routines */ + +/* Parse and validate that a register is of the right form, this saves + repeated checking of this information in many similar cases. + Unlike the 32-bit case we do not insert the register into the opcode + here, since the position is often unknown until the full instruction + has been parsed. */ +static int +thumb_reg (strp, hi_lo) + char ** strp; + int hi_lo; +{ + int reg; + + if ((reg = reg_required_here (strp, -1)) == FAIL) + return FAIL; + + switch (hi_lo) + { + case THUMB_REG_LO: + if (reg > 7) + { + inst.error = _("lo register required"); + return FAIL; + } + break; + + case THUMB_REG_HI: + if (reg < 8) + { + inst.error = _("hi register required"); + return FAIL; + } + break; + + default: + break; + } + + return reg; +} + +/* Parse an add or subtract instruction, SUBTRACT is non-zero if the opcode + was SUB. */ +static void +thumb_add_sub (str, subtract) + char * str; + int subtract; +{ + int Rd, Rs, Rn = FAIL; + + skip_whitespace (str); + + if ((Rd = thumb_reg (&str, THUMB_REG_ANY)) == FAIL + || skip_past_comma (&str) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + if (is_immediate_prefix (*str)) + { + Rs = Rd; + str++; + if (my_get_expression (&inst.reloc.exp, &str)) + return; + } + else + { + if ((Rs = thumb_reg (&str, THUMB_REG_ANY)) == FAIL) + return; + + if (skip_past_comma (&str) == FAIL) + { + /* Two operand format, shuffle the registers and pretend there + are 3 */ + Rn = Rs; + Rs = Rd; + } + else if (is_immediate_prefix (*str)) + { + str++; + if (my_get_expression (&inst.reloc.exp, &str)) + return; + } + else if ((Rn = thumb_reg (&str, THUMB_REG_ANY)) == FAIL) + return; + } + + /* We now have Rd and Rs set to registers, and Rn set to a register or FAIL; + for the latter case, EXPR contains the immediate that was found. */ + if (Rn != FAIL) + { + /* All register format. */ + if (Rd > 7 || Rs > 7 || Rn > 7) + { + if (Rs != Rd) + { + inst.error = _("dest and source1 must be the same register"); + return; + } + + /* Can't do this for SUB */ + if (subtract) + { + inst.error = _("subtract valid only on lo regs"); + return; + } + + inst.instruction = (T_OPCODE_ADD_HI + | (Rd > 7 ? THUMB_H1 : 0) + | (Rn > 7 ? THUMB_H2 : 0)); + inst.instruction |= (Rd & 7) | ((Rn & 7) << 3); + } + else + { + inst.instruction = subtract ? T_OPCODE_SUB_R3 : T_OPCODE_ADD_R3; + inst.instruction |= Rd | (Rs << 3) | (Rn << 6); + } + } + else + { + /* Immediate expression, now things start to get nasty. */ + + /* First deal with HI regs, only very restricted cases allowed: + Adjusting SP, and using PC or SP to get an address. */ + if ((Rd > 7 && (Rd != REG_SP || Rs != REG_SP)) + || (Rs > 7 && Rs != REG_SP && Rs != REG_PC)) + { + inst.error = _("invalid Hi register with immediate"); + return; + } + + if (inst.reloc.exp.X_op != O_constant) + { + /* Value isn't known yet, all we can do is store all the fragments + we know about in the instruction and let the reloc hacking + work it all out. */ + inst.instruction = (subtract ? 0x8000 : 0) | (Rd << 4) | Rs; + inst.reloc.type = BFD_RELOC_ARM_THUMB_ADD; + } + else + { + int offset = inst.reloc.exp.X_add_number; + + if (subtract) + offset = -offset; + + if (offset < 0) + { + offset = -offset; + subtract = 1; + + /* Quick check, in case offset is MIN_INT */ + if (offset < 0) + { + inst.error = _("immediate value out of range"); + return; + } + } + else + subtract = 0; + + if (Rd == REG_SP) + { + if (offset & ~0x1fc) + { + inst.error = _("invalid immediate value for stack adjust"); + return; + } + inst.instruction = subtract ? T_OPCODE_SUB_ST : T_OPCODE_ADD_ST; + inst.instruction |= offset >> 2; + } + else if (Rs == REG_PC || Rs == REG_SP) + { + if (subtract + || (offset & ~0x3fc)) + { + inst.error = _("invalid immediate for address calculation"); + return; + } + inst.instruction = (Rs == REG_PC ? T_OPCODE_ADD_PC + : T_OPCODE_ADD_SP); + inst.instruction |= (Rd << 8) | (offset >> 2); + } + else if (Rs == Rd) + { + if (offset & ~0xff) + { + inst.error = _("immediate value out of range"); + return; + } + inst.instruction = subtract ? T_OPCODE_SUB_I8 : T_OPCODE_ADD_I8; + inst.instruction |= (Rd << 8) | offset; + } + else + { + if (offset & ~0x7) + { + inst.error = _("immediate value out of range"); + return; + } + inst.instruction = subtract ? T_OPCODE_SUB_I3 : T_OPCODE_ADD_I3; + inst.instruction |= Rd | (Rs << 3) | (offset << 6); + } + } + } + + end_of_line (str); +} + +static void +thumb_shift (str, shift) + char * str; + int shift; +{ + int Rd, Rs, Rn = FAIL; + + skip_whitespace (str); + + if ((Rd = thumb_reg (&str, THUMB_REG_LO)) == FAIL + || skip_past_comma (&str) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + if (is_immediate_prefix (*str)) + { + /* Two operand immediate format, set Rs to Rd. */ + Rs = Rd; + str ++; + if (my_get_expression (&inst.reloc.exp, &str)) + return; + } + else + { + if ((Rs = thumb_reg (&str, THUMB_REG_LO)) == FAIL) + return; + + if (skip_past_comma (&str) == FAIL) + { + /* Two operand format, shuffle the registers and pretend there + are 3 */ + Rn = Rs; + Rs = Rd; + } + else if (is_immediate_prefix (*str)) + { + str++; + if (my_get_expression (&inst.reloc.exp, &str)) + return; + } + else if ((Rn = thumb_reg (&str, THUMB_REG_LO)) == FAIL) + return; + } + + /* We now have Rd and Rs set to registers, and Rn set to a register or FAIL; + for the latter case, EXPR contains the immediate that was found. */ + + if (Rn != FAIL) + { + if (Rs != Rd) + { + inst.error = _("source1 and dest must be same register"); + return; + } + + switch (shift) + { + case THUMB_ASR: inst.instruction = T_OPCODE_ASR_R; break; + case THUMB_LSL: inst.instruction = T_OPCODE_LSL_R; break; + case THUMB_LSR: inst.instruction = T_OPCODE_LSR_R; break; + } + + inst.instruction |= Rd | (Rn << 3); + } + else + { + switch (shift) + { + case THUMB_ASR: inst.instruction = T_OPCODE_ASR_I; break; + case THUMB_LSL: inst.instruction = T_OPCODE_LSL_I; break; + case THUMB_LSR: inst.instruction = T_OPCODE_LSR_I; break; + } + + if (inst.reloc.exp.X_op != O_constant) + { + /* Value isn't known yet, create a dummy reloc and let reloc + hacking fix it up */ + + inst.reloc.type = BFD_RELOC_ARM_THUMB_SHIFT; + } + else + { + unsigned shift_value = inst.reloc.exp.X_add_number; + + if (shift_value > 32 || (shift_value == 32 && shift == THUMB_LSL)) + { + inst.error = _("Invalid immediate for shift"); + return; + } + + /* Shifts of zero are handled by converting to LSL */ + if (shift_value == 0) + inst.instruction = T_OPCODE_LSL_I; + + /* Shifts of 32 are encoded as a shift of zero */ + if (shift_value == 32) + shift_value = 0; + + inst.instruction |= shift_value << 6; + } + + inst.instruction |= Rd | (Rs << 3); + } + + end_of_line (str); +} + +static void +thumb_mov_compare (str, move) + char * str; + int move; +{ + int Rd, Rs = FAIL; + + skip_whitespace (str); + + if ((Rd = thumb_reg (&str, THUMB_REG_ANY)) == FAIL + || skip_past_comma (&str) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + if (is_immediate_prefix (*str)) + { + str++; + if (my_get_expression (&inst.reloc.exp, &str)) + return; + } + else if ((Rs = thumb_reg (&str, THUMB_REG_ANY)) == FAIL) + return; + + if (Rs != FAIL) + { + if (Rs < 8 && Rd < 8) + { + if (move == THUMB_MOVE) + /* A move of two lowregs is encoded as ADD Rd, Rs, #0 + since a MOV instruction produces unpredictable results */ + inst.instruction = T_OPCODE_ADD_I3; + else + inst.instruction = T_OPCODE_CMP_LR; + inst.instruction |= Rd | (Rs << 3); + } + else + { + if (move == THUMB_MOVE) + inst.instruction = T_OPCODE_MOV_HR; + else + inst.instruction = T_OPCODE_CMP_HR; + + if (Rd > 7) + inst.instruction |= THUMB_H1; + + if (Rs > 7) + inst.instruction |= THUMB_H2; + + inst.instruction |= (Rd & 7) | ((Rs & 7) << 3); + } + } + else + { + if (Rd > 7) + { + inst.error = _("only lo regs allowed with immediate"); + return; + } + + if (move == THUMB_MOVE) + inst.instruction = T_OPCODE_MOV_I8; + else + inst.instruction = T_OPCODE_CMP_I8; + + inst.instruction |= Rd << 8; + + if (inst.reloc.exp.X_op != O_constant) + inst.reloc.type = BFD_RELOC_ARM_THUMB_IMM; + else + { + unsigned value = inst.reloc.exp.X_add_number; + + if (value > 255) + { + inst.error = _("invalid immediate"); + return; + } + + inst.instruction |= value; + } + } + + end_of_line (str); +} + +static void +thumb_load_store (str, load_store, size) + char * str; + int load_store; + int size; +{ + int Rd, Rb, Ro = FAIL; + + skip_whitespace (str); + + if ((Rd = thumb_reg (&str, THUMB_REG_LO)) == FAIL + || skip_past_comma (&str) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + if (*str == '[') + { + str++; + if ((Rb = thumb_reg (&str, THUMB_REG_ANY)) == FAIL) + return; + + if (skip_past_comma (&str) != FAIL) + { + if (is_immediate_prefix (*str)) + { + str++; + if (my_get_expression (&inst.reloc.exp, &str)) + return; + } + else if ((Ro = thumb_reg (&str, THUMB_REG_LO)) == FAIL) + return; + } + else + { + inst.reloc.exp.X_op = O_constant; + inst.reloc.exp.X_add_number = 0; + } + + if (*str != ']') + { + inst.error = _("expected ']'"); + return; + } + str++; + } + else if (*str == '=') + { + /* Parse an "ldr Rd, =expr" instruction; this is another pseudo op */ + str++; + + skip_whitespace (str); + + if (my_get_expression (& inst.reloc.exp, & str)) + return; + + end_of_line (str); + + if ( inst.reloc.exp.X_op != O_constant + && inst.reloc.exp.X_op != O_symbol) + { + inst.error = "Constant expression expected"; + return; + } + + if (inst.reloc.exp.X_op == O_constant + && ((inst.reloc.exp.X_add_number & ~0xFF) == 0)) + { + /* This can be done with a mov instruction */ + + inst.instruction = T_OPCODE_MOV_I8 | (Rd << 8); + inst.instruction |= inst.reloc.exp.X_add_number; + return; + } + + /* Insert into literal pool */ + if (add_to_lit_pool () == FAIL) + { + if (!inst.error) + inst.error = "literal pool insertion failed"; + return; + } + + inst.reloc.type = BFD_RELOC_ARM_THUMB_OFFSET; + inst.reloc.pc_rel = 1; + inst.instruction = T_OPCODE_LDR_PC | (Rd << 8); + inst.reloc.exp.X_add_number += 4; /* Adjust ARM pipeline offset to Thumb */ + + return; + } + else + { + if (my_get_expression (&inst.reloc.exp, &str)) + return; + + inst.instruction = T_OPCODE_LDR_PC | (Rd << 8); + inst.reloc.pc_rel = 1; + inst.reloc.exp.X_add_number -= 4; /* Pipeline offset */ + inst.reloc.type = BFD_RELOC_ARM_THUMB_OFFSET; + end_of_line (str); + return; + } + + if (Rb == REG_PC || Rb == REG_SP) + { + if (size != THUMB_WORD) + { + inst.error = _("byte or halfword not valid for base register"); + return; + } + else if (Rb == REG_PC && load_store != THUMB_LOAD) + { + inst.error = _("R15 based store not allowed"); + return; + } + else if (Ro != FAIL) + { + inst.error = _("Invalid base register for register offset"); + return; + } + + if (Rb == REG_PC) + inst.instruction = T_OPCODE_LDR_PC; + else if (load_store == THUMB_LOAD) + inst.instruction = T_OPCODE_LDR_SP; + else + inst.instruction = T_OPCODE_STR_SP; + + inst.instruction |= Rd << 8; + if (inst.reloc.exp.X_op == O_constant) + { + unsigned offset = inst.reloc.exp.X_add_number; + + if (offset & ~0x3fc) + { + inst.error = _("invalid offset"); + return; + } + + inst.instruction |= offset >> 2; + } + else + inst.reloc.type = BFD_RELOC_ARM_THUMB_OFFSET; + } + else if (Rb > 7) + { + inst.error = _("invalid base register in load/store"); + return; + } + else if (Ro == FAIL) + { + /* Immediate offset */ + if (size == THUMB_WORD) + inst.instruction = (load_store == THUMB_LOAD + ? T_OPCODE_LDR_IW : T_OPCODE_STR_IW); + else if (size == THUMB_HALFWORD) + inst.instruction = (load_store == THUMB_LOAD + ? T_OPCODE_LDR_IH : T_OPCODE_STR_IH); + else + inst.instruction = (load_store == THUMB_LOAD + ? T_OPCODE_LDR_IB : T_OPCODE_STR_IB); + + inst.instruction |= Rd | (Rb << 3); + + if (inst.reloc.exp.X_op == O_constant) + { + unsigned offset = inst.reloc.exp.X_add_number; + + if (offset & ~(0x1f << size)) + { + inst.error = _("Invalid offset"); + return; + } + inst.instruction |= (offset >> size) << 6; + } + else + inst.reloc.type = BFD_RELOC_ARM_THUMB_OFFSET; + } + else + { + /* Register offset */ + if (size == THUMB_WORD) + inst.instruction = (load_store == THUMB_LOAD + ? T_OPCODE_LDR_RW : T_OPCODE_STR_RW); + else if (size == THUMB_HALFWORD) + inst.instruction = (load_store == THUMB_LOAD + ? T_OPCODE_LDR_RH : T_OPCODE_STR_RH); + else + inst.instruction = (load_store == THUMB_LOAD + ? T_OPCODE_LDR_RB : T_OPCODE_STR_RB); + + inst.instruction |= Rd | (Rb << 3) | (Ro << 6); + } + + end_of_line (str); +} + +static void +do_t_nop (str) + char * str; +{ + /* Do nothing */ + end_of_line (str); + return; +} + +/* Handle the Format 4 instructions that do not have equivalents in other + formats. That is, ADC, AND, EOR, SBC, ROR, TST, NEG, CMN, ORR, MUL, + BIC and MVN. */ +static void +do_t_arit (str) + char * str; +{ + int Rd, Rs, Rn; + + skip_whitespace (str); + + if ((Rd = thumb_reg (&str, THUMB_REG_LO)) == FAIL + || skip_past_comma (&str) == FAIL + || (Rs = thumb_reg (&str, THUMB_REG_LO)) == FAIL) + { + inst.error = BAD_ARGS; + return; + } + + if (skip_past_comma (&str) != FAIL) + { + /* Three operand format not allowed for TST, CMN, NEG and MVN. + (It isn't allowed for CMP either, but that isn't handled by this + function.) */ + if (inst.instruction == T_OPCODE_TST + || inst.instruction == T_OPCODE_CMN + || inst.instruction == T_OPCODE_NEG + || inst.instruction == T_OPCODE_MVN) + { + inst.error = BAD_ARGS; + return; + } + + if ((Rn = thumb_reg (&str, THUMB_REG_LO)) == FAIL) + return; + + if (Rs != Rd) + { + inst.error = _("dest and source1 one must be the same register"); + return; + } + Rs = Rn; + } + + if (inst.instruction == T_OPCODE_MUL + && Rs == Rd) + as_tsktsk (_("Rs and Rd must be different in MUL")); + + inst.instruction |= Rd | (Rs << 3); + end_of_line (str); +} + +static void +do_t_add (str) + char * str; +{ + thumb_add_sub (str, 0); +} + +static void +do_t_asr (str) + char * str; +{ + thumb_shift (str, THUMB_ASR); +} + +static void +do_t_branch9 (str) + char * str; +{ + if (my_get_expression (&inst.reloc.exp, &str)) + return; + inst.reloc.type = BFD_RELOC_THUMB_PCREL_BRANCH9; + inst.reloc.pc_rel = 1; + end_of_line (str); +} + +static void +do_t_branch12 (str) + char * str; +{ + if (my_get_expression (&inst.reloc.exp, &str)) + return; + inst.reloc.type = BFD_RELOC_THUMB_PCREL_BRANCH12; + inst.reloc.pc_rel = 1; + end_of_line (str); +} + +/* Find the real, Thumb encoded start of a Thumb function. */ + +static symbolS * +find_real_start (symbolP) + symbolS * symbolP; +{ + char * real_start; + const char * name = S_GET_NAME (symbolP); + symbolS * new_target; + + /* This definiton must agree with the one in gcc/config/arm/thumb.c */ +#define STUB_NAME ".real_start_of" + + if (name == NULL) + abort(); + + /* Names that start with '.' are local labels, not function entry points. + The compiler may generate BL instructions to these labels because it + needs to perform a branch to a far away location. */ + if (name[0] == '.') + return symbolP; + + real_start = malloc (strlen (name) + strlen (STUB_NAME) + 1); + sprintf (real_start, "%s%s", STUB_NAME, name); + + new_target = symbol_find (real_start); + + if (new_target == NULL) + { + as_warn ("Failed to find real start of function: %s\n", name); + new_target = symbolP; + } + + free (real_start); + + return new_target; +} + + +static void +do_t_branch23 (str) + char * str; +{ + if (my_get_expression (& inst.reloc.exp, & str)) + return; + + inst.reloc.type = BFD_RELOC_THUMB_PCREL_BRANCH23; + inst.reloc.pc_rel = 1; + end_of_line (str); + + /* If the destination of the branch is a defined symbol which does not have + the THUMB_FUNC attribute, then we must be calling a function which has + the (interfacearm) attribute. We look for the Thumb entry point to that + function and change the branch to refer to that function instead. */ + if ( inst.reloc.exp.X_op == O_symbol + && inst.reloc.exp.X_add_symbol != NULL + && S_IS_DEFINED (inst.reloc.exp.X_add_symbol) + && ! THUMB_IS_FUNC (inst.reloc.exp.X_add_symbol)) + inst.reloc.exp.X_add_symbol = find_real_start (inst.reloc.exp.X_add_symbol); +} + +static void +do_t_bx (str) + char * str; +{ + int reg; + + skip_whitespace (str); + + if ((reg = thumb_reg (&str, THUMB_REG_ANY)) == FAIL) + return; + + /* This sets THUMB_H2 from the top bit of reg. */ + inst.instruction |= reg << 3; + + /* ??? FIXME: Should add a hacky reloc here if reg is REG_PC. The reloc + should cause the alignment to be checked once it is known. This is + because BX PC only works if the instruction is word aligned. */ + + end_of_line (str); +} + +static void +do_t_compare (str) + char * str; +{ + thumb_mov_compare (str, THUMB_COMPARE); +} + +static void +do_t_ldmstm (str) + char * str; +{ + int Rb; + long range; + + skip_whitespace (str); + + if ((Rb = thumb_reg (&str, THUMB_REG_LO)) == FAIL) + return; + + if (*str != '!') + as_warn (_("Inserted missing '!': load/store multiple always writes back base register")); + else + str++; + + if (skip_past_comma (&str) == FAIL + || (range = reg_list (&str)) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + if (inst.reloc.type != BFD_RELOC_NONE) + { + /* This really doesn't seem worth it. */ + inst.reloc.type = BFD_RELOC_NONE; + inst.error = _("Expression too complex"); + return; + } + + if (range & ~0xff) + { + inst.error = _("only lo-regs valid in load/store multiple"); + return; + } + + inst.instruction |= (Rb << 8) | range; + end_of_line (str); +} + +static void +do_t_ldr (str) + char * str; +{ + thumb_load_store (str, THUMB_LOAD, THUMB_WORD); +} + +static void +do_t_ldrb (str) + char * str; +{ + thumb_load_store (str, THUMB_LOAD, THUMB_BYTE); +} + +static void +do_t_ldrh (str) + char * str; +{ + thumb_load_store (str, THUMB_LOAD, THUMB_HALFWORD); +} + +static void +do_t_lds (str) + char * str; +{ + int Rd, Rb, Ro; + + skip_whitespace (str); + + if ((Rd = thumb_reg (&str, THUMB_REG_LO)) == FAIL + || skip_past_comma (&str) == FAIL + || *str++ != '[' + || (Rb = thumb_reg (&str, THUMB_REG_LO)) == FAIL + || skip_past_comma (&str) == FAIL + || (Ro = thumb_reg (&str, THUMB_REG_LO)) == FAIL + || *str++ != ']') + { + if (! inst.error) + inst.error = _("Syntax: ldrs[b] Rd, [Rb, Ro]"); + return; + } + + inst.instruction |= Rd | (Rb << 3) | (Ro << 6); + end_of_line (str); +} + +static void +do_t_lsl (str) + char * str; +{ + thumb_shift (str, THUMB_LSL); +} + +static void +do_t_lsr (str) + char * str; +{ + thumb_shift (str, THUMB_LSR); +} + +static void +do_t_mov (str) + char * str; +{ + thumb_mov_compare (str, THUMB_MOVE); +} + +static void +do_t_push_pop (str) + char * str; +{ + long range; + + skip_whitespace (str); + + if ((range = reg_list (&str)) == FAIL) + { + if (! inst.error) + inst.error = BAD_ARGS; + return; + } + + if (inst.reloc.type != BFD_RELOC_NONE) + { + /* This really doesn't seem worth it. */ + inst.reloc.type = BFD_RELOC_NONE; + inst.error = _("Expression too complex"); + return; + } + + if (range & ~0xff) + { + if ((inst.instruction == T_OPCODE_PUSH + && (range & ~0xff) == 1 << REG_LR) + || (inst.instruction == T_OPCODE_POP + && (range & ~0xff) == 1 << REG_PC)) + { + inst.instruction |= THUMB_PP_PC_LR; + range &= 0xff; + } + else + { + inst.error = _("invalid register list to push/pop instruction"); + return; + } + } + + inst.instruction |= range; + end_of_line (str); +} + +static void +do_t_str (str) + char * str; +{ + thumb_load_store (str, THUMB_STORE, THUMB_WORD); +} + +static void +do_t_strb (str) + char * str; +{ + thumb_load_store (str, THUMB_STORE, THUMB_BYTE); +} + +static void +do_t_strh (str) + char * str; +{ + thumb_load_store (str, THUMB_STORE, THUMB_HALFWORD); +} + +static void +do_t_sub (str) + char * str; +{ + thumb_add_sub (str, 1); +} + +static void +do_t_swi (str) + char * str; +{ + skip_whitespace (str); + + if (my_get_expression (&inst.reloc.exp, &str)) + return; + + inst.reloc.type = BFD_RELOC_ARM_SWI; + end_of_line (str); + return; +} + +static void +do_t_adr (str) + char * str; +{ + int reg; + + /* This is a pseudo-op of the form "adr rd, label" to be converted + into a relative address of the form "add rd, pc, #label-.-4". */ + skip_whitespace (str); + + /* Store Rd in temporary location inside instruction. */ + if ((reg = reg_required_here (&str, 4)) == FAIL + || (reg > 7) /* For Thumb reg must be r0..r7. */ + || skip_past_comma (&str) == FAIL + || my_get_expression (&inst.reloc.exp, &str)) + { + if (!inst.error) + inst.error = BAD_ARGS; + return; + } + + inst.reloc.type = BFD_RELOC_ARM_THUMB_ADD; + inst.reloc.exp.X_add_number -= 4; /* PC relative adjust. */ + inst.reloc.pc_rel = 1; + inst.instruction |= REG_PC; /* Rd is already placed into the instruction. */ + + end_of_line (str); +} + +static void +insert_reg (entry) + int entry; +{ + int len = strlen (reg_table[entry].name) + 2; + char * buf = (char *) xmalloc (len); + char * buf2 = (char *) xmalloc (len); + int i = 0; + +#ifdef REGISTER_PREFIX + buf[i++] = REGISTER_PREFIX; +#endif + + strcpy (buf + i, reg_table[entry].name); + + for (i = 0; buf[i]; i++) + buf2[i] = islower (buf[i]) ? toupper (buf[i]) : buf[i]; + + buf2[i] = '\0'; + + hash_insert (arm_reg_hsh, buf, (PTR) ®_table[entry]); + hash_insert (arm_reg_hsh, buf2, (PTR) ®_table[entry]); +} + +static void +insert_reg_alias (str, regnum) + char *str; + int regnum; +{ + struct reg_entry *new = + (struct reg_entry *)xmalloc (sizeof (struct reg_entry)); + char *name = xmalloc (strlen (str) + 1); + strcpy (name, str); + + new->name = name; + new->number = regnum; + + hash_insert (arm_reg_hsh, name, (PTR) new); +} + +static void +set_constant_flonums () +{ + int i; + + for (i = 0; i < NUM_FLOAT_VALS; i++) + if (atof_ieee ((char *)fp_const[i], 'x', fp_values[i]) == NULL) + abort (); +} + +void +md_begin () +{ + unsigned mach; + unsigned int i; + + if ( (arm_ops_hsh = hash_new ()) == NULL + || (arm_tops_hsh = hash_new ()) == NULL + || (arm_cond_hsh = hash_new ()) == NULL + || (arm_shift_hsh = hash_new ()) == NULL + || (arm_reg_hsh = hash_new ()) == NULL + || (arm_psr_hsh = hash_new ()) == NULL) + as_fatal (_("Virtual memory exhausted")); + + for (i = 0; i < sizeof (insns) / sizeof (struct asm_opcode); i++) + hash_insert (arm_ops_hsh, insns[i].template, (PTR) (insns + i)); + for (i = 0; i < sizeof (tinsns) / sizeof (struct thumb_opcode); i++) + hash_insert (arm_tops_hsh, tinsns[i].template, (PTR) (tinsns + i)); + for (i = 0; i < sizeof (conds) / sizeof (struct asm_cond); i++) + hash_insert (arm_cond_hsh, conds[i].template, (PTR) (conds + i)); + for (i = 0; i < sizeof (shift) / sizeof (struct asm_shift); i++) + hash_insert (arm_shift_hsh, shift[i].template, (PTR) (shift + i)); + for (i = 0; i < sizeof (psrs) / sizeof (struct asm_psr); i++) + hash_insert (arm_psr_hsh, psrs[i].template, (PTR) (psrs + i)); + + for (i = 0; reg_table[i].name; i++) + insert_reg (i); + + set_constant_flonums (); + +#if defined OBJ_COFF || defined OBJ_ELF + { + unsigned int flags = 0; + + /* Set the flags in the private structure. */ + if (uses_apcs_26) flags |= F_APCS26; + if (support_interwork) flags |= F_INTERWORK; + if (uses_apcs_float) flags |= F_APCS_FLOAT; + if (pic_code) flags |= F_PIC; + if ((cpu_variant & FPU_ALL) == FPU_NONE) flags |= F_SOFT_FLOAT; + + bfd_set_private_flags (stdoutput, flags); + } +#endif + + /* Record the CPU type as well. */ + switch (cpu_variant & ARM_CPU_MASK) + { + case ARM_2: + mach = bfd_mach_arm_2; + break; + + case ARM_3: /* Also ARM_250. */ + mach = bfd_mach_arm_2a; + break; + + default: + case ARM_6 | ARM_3 | ARM_2: /* Actually no CPU type defined. */ + mach = bfd_mach_arm_4; + break; + + case ARM_7: /* Also ARM_6. */ + mach = bfd_mach_arm_3; + break; + } + + /* Catch special cases. */ + if (cpu_variant != (FPU_DEFAULT | CPU_DEFAULT)) + { + if (cpu_variant & (ARM_EXT_V5 & ARM_THUMB)) + mach = bfd_mach_arm_5T; + else if (cpu_variant & ARM_EXT_V5) + mach = bfd_mach_arm_5; + else if (cpu_variant & ARM_THUMB) + mach = bfd_mach_arm_4T; + else if ((cpu_variant & ARM_ARCH_V4) == ARM_ARCH_V4) + mach = bfd_mach_arm_4; + else if (cpu_variant & ARM_LONGMUL) + mach = bfd_mach_arm_3M; + } + + bfd_set_arch_mach (stdoutput, TARGET_ARCH, mach); +} + +/* Turn an integer of n bytes (in val) into a stream of bytes appropriate + for use in the a.out file, and stores them in the array pointed to by buf. + This knows about the endian-ness of the target machine and does + THE RIGHT THING, whatever it is. Possible values for n are 1 (byte) + 2 (short) and 4 (long) Floating numbers are put out as a series of + LITTLENUMS (shorts, here at least). */ +void +md_number_to_chars (buf, val, n) + char * buf; + valueT val; + int n; +{ + if (target_big_endian) + number_to_chars_bigendian (buf, val, n); + else + number_to_chars_littleendian (buf, val, n); +} + +static valueT +md_chars_to_number (buf, n) + char * buf; + int n; +{ + valueT result = 0; + unsigned char * where = (unsigned char *) buf; + + if (target_big_endian) + { + while (n--) + { + result <<= 8; + result |= (*where++ & 255); + } + } + else + { + while (n--) + { + result <<= 8; + result |= (where[n] & 255); + } + } + + return result; +} + +/* Turn a string in input_line_pointer into a floating point constant + of type TYPE, and store the appropriate bytes in *litP. The number + of LITTLENUMS emitted is stored in *sizeP . An error message is + returned, or NULL on OK. + + Note that fp constants aren't represent in the normal way on the ARM. + In big endian mode, things are as expected. However, in little endian + mode fp constants are big-endian word-wise, and little-endian byte-wise + within the words. For example, (double) 1.1 in big endian mode is + the byte sequence 3f f1 99 99 99 99 99 9a, and in little endian mode is + the byte sequence 99 99 f1 3f 9a 99 99 99. + + ??? The format of 12 byte floats is uncertain according to gcc's arm.h. */ + +char * +md_atof (type, litP, sizeP) + char type; + char * litP; + int * sizeP; +{ + int prec; + LITTLENUM_TYPE words[MAX_LITTLENUMS]; + char *t; + int i; + + switch (type) + { + case 'f': + case 'F': + case 's': + case 'S': + prec = 2; + break; + + case 'd': + case 'D': + case 'r': + case 'R': + prec = 4; + break; + + case 'x': + case 'X': + prec = 6; + break; + + case 'p': + case 'P': + prec = 6; + break; + + default: + *sizeP = 0; + return _("Bad call to MD_ATOF()"); + } + + t = atof_ieee (input_line_pointer, type, words); + if (t) + input_line_pointer = t; + *sizeP = prec * 2; + + if (target_big_endian) + { + for (i = 0; i < prec; i++) + { + md_number_to_chars (litP, (valueT) words[i], 2); + litP += 2; + } + } + else + { + /* For a 4 byte float the order of elements in `words' is 1 0. For an + 8 byte float the order is 1 0 3 2. */ + for (i = 0; i < prec; i += 2) + { + md_number_to_chars (litP, (valueT) words[i + 1], 2); + md_number_to_chars (litP + 2, (valueT) words[i], 2); + litP += 4; + } + } + + return 0; +} + +/* The knowledge of the PC's pipeline offset is built into the insns themselves. */ +long +md_pcrel_from (fixP) + fixS * fixP; +{ + if ( fixP->fx_addsy + && S_GET_SEGMENT (fixP->fx_addsy) == undefined_section + && fixP->fx_subsy == NULL) + return 0; + + if (fixP->fx_pcrel && (fixP->fx_r_type == BFD_RELOC_ARM_THUMB_ADD)) + { + /* PC relative addressing on the Thumb is slightly odd + as the bottom two bits of the PC are forced to zero + for the calculation. */ + return (fixP->fx_where + fixP->fx_frag->fr_address) & ~3; + } + +#ifdef TE_WINCE + /* The pattern was adjusted to accomodate CE's off-by-one fixups, + so we un-adjust here to compensate for the accomodation. */ + return fixP->fx_where + fixP->fx_frag->fr_address + 8; +#else + return fixP->fx_where + fixP->fx_frag->fr_address; +#endif +} + +/* Round up a section size to the appropriate boundary. */ +valueT +md_section_align (segment, size) + segT segment ATTRIBUTE_UNUSED; + valueT size; +{ +#ifdef OBJ_ELF + return size; +#else + /* Round all sects to multiple of 4 */ + return (size + 3) & ~3; +#endif +} + +/* Under ELF we need to default _GLOBAL_OFFSET_TABLE. Otherwise + we have no need to default values of symbols. */ + +/* ARGSUSED */ +symbolS * +md_undefined_symbol (name) + char * name ATTRIBUTE_UNUSED; +{ +#ifdef OBJ_ELF + if (name[0] == '_' && name[1] == 'G' + && streq (name, GLOBAL_OFFSET_TABLE_NAME)) + { + if (!GOT_symbol) + { + if (symbol_find (name)) + as_bad ("GOT already in the symbol table"); + + GOT_symbol = symbol_new (name, undefined_section, + (valueT)0, & zero_address_frag); + } + + return GOT_symbol; + } +#endif + + return 0; +} + +/* arm_reg_parse () := if it looks like a register, return its token and + advance the pointer. */ + +static int +arm_reg_parse (ccp) + register char ** ccp; +{ + char * start = * ccp; + char c; + char * p; + struct reg_entry * reg; + +#ifdef REGISTER_PREFIX + if (*start != REGISTER_PREFIX) + return FAIL; + p = start + 1; +#else + p = start; +#ifdef OPTIONAL_REGISTER_PREFIX + if (*p == OPTIONAL_REGISTER_PREFIX) + p++, start++; +#endif +#endif + if (!isalpha (*p) || !is_name_beginner (*p)) + return FAIL; + + c = *p++; + while (isalpha (c) || isdigit (c) || c == '_') + c = *p++; + + *--p = 0; + reg = (struct reg_entry *) hash_find (arm_reg_hsh, start); + *p = c; + + if (reg) + { + *ccp = p; + return reg->number; + } + + return FAIL; +} + +int +md_apply_fix3 (fixP, val, seg) + fixS * fixP; + valueT * val; + segT seg; +{ + offsetT value = * val; + offsetT newval; + unsigned int newimm; + unsigned long temp; + int sign; + char * buf = fixP->fx_where + fixP->fx_frag->fr_literal; + arm_fix_data * arm_data = (arm_fix_data *) fixP->tc_fix_data; + + assert (fixP->fx_r_type < BFD_RELOC_UNUSED); + + /* Note whether this will delete the relocation. */ +#if 0 /* patch from REarnshaw to JDavis (disabled for the moment, since it doesn't work fully) */ + if ((fixP->fx_addsy == 0 || symbol_constant_p (fixP->fx_addsy)) + && !fixP->fx_pcrel) +#else + if (fixP->fx_addsy == 0 && !fixP->fx_pcrel) +#endif + fixP->fx_done = 1; + + /* If this symbol is in a different section then we need to leave it for + the linker to deal with. Unfortunately, md_pcrel_from can't tell, + so we have to undo it's effects here. */ + if (fixP->fx_pcrel) + { + if (fixP->fx_addsy != NULL + && S_IS_DEFINED (fixP->fx_addsy) + && S_GET_SEGMENT (fixP->fx_addsy) != seg) + { + if (target_oabi + && (fixP->fx_r_type == BFD_RELOC_ARM_PCREL_BRANCH + )) + value = 0; + else + value += md_pcrel_from (fixP); + } + } + + fixP->fx_addnumber = value; /* Remember value for emit_reloc. */ + + switch (fixP->fx_r_type) + { + case BFD_RELOC_ARM_IMMEDIATE: + newimm = validate_immediate (value); + temp = md_chars_to_number (buf, INSN_SIZE); + + /* If the instruction will fail, see if we can fix things up by + changing the opcode. */ + if (newimm == (unsigned int) FAIL + && (newimm = negate_data_op (&temp, value)) == (unsigned int) FAIL) + { + as_bad_where (fixP->fx_file, fixP->fx_line, + _("invalid constant (%lx) after fixup"), + (unsigned long) value); + break; + } + + newimm |= (temp & 0xfffff000); + md_number_to_chars (buf, (valueT) newimm, INSN_SIZE); + break; + + case BFD_RELOC_ARM_ADRL_IMMEDIATE: + { + unsigned int highpart = 0; + unsigned int newinsn = 0xe1a00000; /* nop */ + newimm = validate_immediate (value); + temp = md_chars_to_number (buf, INSN_SIZE); + + /* If the instruction will fail, see if we can fix things up by + changing the opcode. */ + if (newimm == (unsigned int) FAIL + && (newimm = negate_data_op (& temp, value)) == (unsigned int) FAIL) + { + /* No ? OK - try using two ADD instructions to generate the value. */ + newimm = validate_immediate_twopart (value, & highpart); + + /* Yes - then make sure that the second instruction is also an add. */ + if (newimm != (unsigned int) FAIL) + newinsn = temp; + /* Still No ? Try using a negated value. */ + else if (validate_immediate_twopart (- value, & highpart) != (unsigned int) FAIL) + temp = newinsn = (temp & OPCODE_MASK) | OPCODE_SUB << DATA_OP_SHIFT; + /* Otherwise - give up. */ + else + { + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Unable to compute ADRL instructions for PC offset of 0x%x"), value); + break; + } + + /* Replace the first operand in the 2nd instruction (which is the PC) + with the destination register. We have already added in the PC in the + first instruction and we do not want to do it again. */ + newinsn &= ~ 0xf0000; + newinsn |= ((newinsn & 0x0f000) << 4); + } + + newimm |= (temp & 0xfffff000); + md_number_to_chars (buf, (valueT) newimm, INSN_SIZE); + + highpart |= (newinsn & 0xfffff000); + md_number_to_chars (buf + INSN_SIZE, (valueT) highpart, INSN_SIZE); + } + break; + + case BFD_RELOC_ARM_OFFSET_IMM: + sign = value >= 0; + + if (value < 0) + value = - value; + + if (validate_offset_imm (value, 0) == FAIL) + { + as_bad_where (fixP->fx_file, fixP->fx_line, + _("bad immediate value for offset (%ld)"), (long) value); + break; + } + + newval = md_chars_to_number (buf, INSN_SIZE); + newval &= 0xff7ff000; + newval |= value | (sign ? INDEX_UP : 0); + md_number_to_chars (buf, newval, INSN_SIZE); + break; + + case BFD_RELOC_ARM_OFFSET_IMM8: + case BFD_RELOC_ARM_HWLITERAL: + sign = value >= 0; + + if (value < 0) + value = - value; + + if (validate_offset_imm (value, 1) == FAIL) + { + if (fixP->fx_r_type == BFD_RELOC_ARM_HWLITERAL) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("invalid literal constant: pool needs to be closer")); + else + as_bad (_("bad immediate value for half-word offset (%ld)"), + (long) value); + break; + } + + newval = md_chars_to_number (buf, INSN_SIZE); + newval &= 0xff7ff0f0; + newval |= ((value >> 4) << 8) | (value & 0xf) | (sign ? INDEX_UP : 0); + md_number_to_chars (buf, newval, INSN_SIZE); + break; + + case BFD_RELOC_ARM_LITERAL: + sign = value >= 0; + + if (value < 0) + value = - value; + + if (validate_offset_imm (value, 0) == FAIL) + { + as_bad_where (fixP->fx_file, fixP->fx_line, + _("invalid literal constant: pool needs to be closer")); + break; + } + + newval = md_chars_to_number (buf, INSN_SIZE); + newval &= 0xff7ff000; + newval |= value | (sign ? INDEX_UP : 0); + md_number_to_chars (buf, newval, INSN_SIZE); + break; + + case BFD_RELOC_ARM_SHIFT_IMM: + newval = md_chars_to_number (buf, INSN_SIZE); + if (((unsigned long) value) > 32 + || (value == 32 + && (((newval & 0x60) == 0) || (newval & 0x60) == 0x60))) + { + as_bad_where (fixP->fx_file, fixP->fx_line, + _("shift expression is too large")); + break; + } + + if (value == 0) + newval &= ~0x60; /* Shifts of zero must be done as lsl */ + else if (value == 32) + value = 0; + newval &= 0xfffff07f; + newval |= (value & 0x1f) << 7; + md_number_to_chars (buf, newval , INSN_SIZE); + break; + + case BFD_RELOC_ARM_SWI: + if (arm_data->thumb_mode) + { + if (((unsigned long) value) > 0xff) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Invalid swi expression")); + newval = md_chars_to_number (buf, THUMB_SIZE) & 0xff00; + newval |= value; + md_number_to_chars (buf, newval, THUMB_SIZE); + } + else + { + if (((unsigned long) value) > 0x00ffffff) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Invalid swi expression")); + newval = md_chars_to_number (buf, INSN_SIZE) & 0xff000000; + newval |= value; + md_number_to_chars (buf, newval , INSN_SIZE); + } + break; + + case BFD_RELOC_ARM_MULTI: + if (((unsigned long) value) > 0xffff) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Invalid expression in load/store multiple")); + newval = value | md_chars_to_number (buf, INSN_SIZE); + md_number_to_chars (buf, newval, INSN_SIZE); + break; + + case BFD_RELOC_ARM_PCREL_BRANCH: + newval = md_chars_to_number (buf, INSN_SIZE); + + /* Sign-extend a 24-bit number. */ +#define SEXT24(x) ((((x) & 0xffffff) ^ (~ 0x7fffff)) + 0x800000) + +#ifdef OBJ_ELF + if (! target_oabi) + value = fixP->fx_offset; +#endif + + /* We are going to store value (shifted right by two) in the + instruction, in a 24 bit, signed field. Thus we need to check + that none of the top 8 bits of the shifted value (top 7 bits of + the unshifted, unsigned value) are set, or that they are all set. */ + if ((value & 0xfe000000UL) != 0 + && ((value & 0xfe000000UL) != 0xfe000000UL)) + { +#ifdef OBJ_ELF + /* Normally we would be stuck at this point, since we cannot store + the absolute address that is the destination of the branch in the + 24 bits of the branch instruction. If however, we happen to know + that the destination of the branch is in the same section as the + branch instruciton itself, then we can compute the relocation for + ourselves and not have to bother the linker with it. + + FIXME: The tests for OBJ_ELF and ! target_oabi are only here + because I have not worked out how to do this for OBJ_COFF or + target_oabi. */ + if (! target_oabi + && fixP->fx_addsy != NULL + && S_IS_DEFINED (fixP->fx_addsy) + && S_GET_SEGMENT (fixP->fx_addsy) == seg) + { + /* Get pc relative value to go into the branch. */ + value = * val; + + /* Permit a backward branch provided that enough bits are set. + Allow a forwards branch, provided that enough bits are clear. */ + if ((value & 0xfe000000UL) == 0xfe000000UL + || (value & 0xfe000000UL) == 0) + fixP->fx_done = 1; + } + + if (! fixP->fx_done) +#endif + as_bad_where (fixP->fx_file, fixP->fx_line, + _("gas can't handle same-section branch dest >= 0x04000000")); + } + + value >>= 2; + value += SEXT24 (newval); + + if ((value & 0xff000000UL) != 0 + && ((value & 0xff000000UL) != 0xff000000UL)) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("out of range branch")); + + newval = (value & 0x00ffffff) | (newval & 0xff000000); + md_number_to_chars (buf, newval, INSN_SIZE); + break; + + + case BFD_RELOC_THUMB_PCREL_BRANCH9: /* conditional branch */ + newval = md_chars_to_number (buf, THUMB_SIZE); + { + addressT diff = (newval & 0xff) << 1; + if (diff & 0x100) + diff |= ~0xff; + + value += diff; + if ((value & ~0xff) && ((value & ~0xff) != ~0xff)) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Branch out of range")); + newval = (newval & 0xff00) | ((value & 0x1ff) >> 1); + } + md_number_to_chars (buf, newval, THUMB_SIZE); + break; + + case BFD_RELOC_THUMB_PCREL_BRANCH12: /* unconditional branch */ + newval = md_chars_to_number (buf, THUMB_SIZE); + { + addressT diff = (newval & 0x7ff) << 1; + if (diff & 0x800) + diff |= ~0x7ff; + + value += diff; + if ((value & ~0x7ff) && ((value & ~0x7ff) != ~0x7ff)) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Branch out of range")); + newval = (newval & 0xf800) | ((value & 0xfff) >> 1); + } + md_number_to_chars (buf, newval, THUMB_SIZE); + break; + + case BFD_RELOC_THUMB_PCREL_BRANCH23: + { + offsetT newval2; + addressT diff; + + newval = md_chars_to_number (buf, THUMB_SIZE); + newval2 = md_chars_to_number (buf + THUMB_SIZE, THUMB_SIZE); + diff = ((newval & 0x7ff) << 12) | ((newval2 & 0x7ff) << 1); + if (diff & 0x400000) + diff |= ~0x3fffff; +#ifdef OBJ_ELF + value = fixP->fx_offset; +#endif + value += diff; + if ((value & ~0x3fffff) && ((value & ~0x3fffff) != ~0x3fffff)) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Branch with link out of range")); + + newval = (newval & 0xf800) | ((value & 0x7fffff) >> 12); + newval2 = (newval2 & 0xf800) | ((value & 0xfff) >> 1); + md_number_to_chars (buf, newval, THUMB_SIZE); + md_number_to_chars (buf + THUMB_SIZE, newval2, THUMB_SIZE); + } + break; + + case BFD_RELOC_8: + if (fixP->fx_done || fixP->fx_pcrel) + md_number_to_chars (buf, value, 1); +#ifdef OBJ_ELF + else if (!target_oabi) + { + value = fixP->fx_offset; + md_number_to_chars (buf, value, 1); + } +#endif + break; + + case BFD_RELOC_16: + if (fixP->fx_done || fixP->fx_pcrel) + md_number_to_chars (buf, value, 2); +#ifdef OBJ_ELF + else if (!target_oabi) + { + value = fixP->fx_offset; + md_number_to_chars (buf, value, 2); + } +#endif + break; + +#ifdef OBJ_ELF + case BFD_RELOC_ARM_GOT32: + case BFD_RELOC_ARM_GOTOFF: + md_number_to_chars (buf, 0, 4); + break; +#endif + + case BFD_RELOC_RVA: + case BFD_RELOC_32: + if (fixP->fx_done || fixP->fx_pcrel) + md_number_to_chars (buf, value, 4); +#ifdef OBJ_ELF + else if (!target_oabi) + { + value = fixP->fx_offset; + md_number_to_chars (buf, value, 4); + } +#endif + break; + +#ifdef OBJ_ELF + case BFD_RELOC_ARM_PLT32: + /* It appears the instruction is fully prepared at this point. */ + break; +#endif + + case BFD_RELOC_ARM_GOTPC: + md_number_to_chars (buf, value, 4); + break; + + case BFD_RELOC_ARM_CP_OFF_IMM: + sign = value >= 0; + if (value < -1023 || value > 1023 || (value & 3)) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Illegal value for co-processor offset")); + if (value < 0) + value = -value; + newval = md_chars_to_number (buf, INSN_SIZE) & 0xff7fff00; + newval |= (value >> 2) | (sign ? INDEX_UP : 0); + md_number_to_chars (buf, newval , INSN_SIZE); + break; + + case BFD_RELOC_ARM_THUMB_OFFSET: + newval = md_chars_to_number (buf, THUMB_SIZE); + /* Exactly what ranges, and where the offset is inserted depends on + the type of instruction, we can establish this from the top 4 bits */ + switch (newval >> 12) + { + case 4: /* PC load */ + /* Thumb PC loads are somewhat odd, bit 1 of the PC is + forced to zero for these loads, so we will need to round + up the offset if the instruction address is not word + aligned (since the final address produced must be, and + we can only describe word-aligned immediate offsets). */ + + if ((fixP->fx_frag->fr_address + fixP->fx_where + value) & 3) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Invalid offset, target not word aligned (0x%08X)"), + (unsigned int)(fixP->fx_frag->fr_address + fixP->fx_where + value)); + + if ((value + 2) & ~0x3fe) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Invalid offset, value too big (0x%08X)"), value); + + /* Round up, since pc will be rounded down. */ + newval |= (value + 2) >> 2; + break; + + case 9: /* SP load/store */ + if (value & ~0x3fc) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Invalid offset, value too big (0x%08X)"), value); + newval |= value >> 2; + break; + + case 6: /* Word load/store */ + if (value & ~0x7c) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Invalid offset, value too big (0x%08X)"), value); + newval |= value << 4; /* 6 - 2 */ + break; + + case 7: /* Byte load/store */ + if (value & ~0x1f) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Invalid offset, value too big (0x%08X)"), value); + newval |= value << 6; + break; + + case 8: /* Halfword load/store */ + if (value & ~0x3e) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Invalid offset, value too big (0x%08X)"), value); + newval |= value << 5; /* 6 - 1 */ + break; + + default: + as_bad_where (fixP->fx_file, fixP->fx_line, + "Unable to process relocation for thumb opcode: %lx", + (unsigned long) newval); + break; + } + md_number_to_chars (buf, newval, THUMB_SIZE); + break; + + case BFD_RELOC_ARM_THUMB_ADD: + /* This is a complicated relocation, since we use it for all of + the following immediate relocations: + 3bit ADD/SUB + 8bit ADD/SUB + 9bit ADD/SUB SP word-aligned + 10bit ADD PC/SP word-aligned + + The type of instruction being processed is encoded in the + instruction field: + 0x8000 SUB + 0x00F0 Rd + 0x000F Rs + */ + newval = md_chars_to_number (buf, THUMB_SIZE); + { + int rd = (newval >> 4) & 0xf; + int rs = newval & 0xf; + int subtract = newval & 0x8000; + + if (rd == REG_SP) + { + if (value & ~0x1fc) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Invalid immediate for stack address calculation")); + newval = subtract ? T_OPCODE_SUB_ST : T_OPCODE_ADD_ST; + newval |= value >> 2; + } + else if (rs == REG_PC || rs == REG_SP) + { + if (subtract || + value & ~0x3fc) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Invalid immediate for address calculation (value = 0x%08lX)"), + (unsigned long) value); + newval = (rs == REG_PC ? T_OPCODE_ADD_PC : T_OPCODE_ADD_SP); + newval |= rd << 8; + newval |= value >> 2; + } + else if (rs == rd) + { + if (value & ~0xff) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Invalid 8bit immediate")); + newval = subtract ? T_OPCODE_SUB_I8 : T_OPCODE_ADD_I8; + newval |= (rd << 8) | value; + } + else + { + if (value & ~0x7) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Invalid 3bit immediate")); + newval = subtract ? T_OPCODE_SUB_I3 : T_OPCODE_ADD_I3; + newval |= rd | (rs << 3) | (value << 6); + } + } + md_number_to_chars (buf, newval , THUMB_SIZE); + break; + + case BFD_RELOC_ARM_THUMB_IMM: + newval = md_chars_to_number (buf, THUMB_SIZE); + switch (newval >> 11) + { + case 0x04: /* 8bit immediate MOV */ + case 0x05: /* 8bit immediate CMP */ + if (value < 0 || value > 255) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Invalid immediate: %ld is too large"), + (long) value); + newval |= value; + break; + + default: + abort (); + } + md_number_to_chars (buf, newval , THUMB_SIZE); + break; + + case BFD_RELOC_ARM_THUMB_SHIFT: + /* 5bit shift value (0..31) */ + if (value < 0 || value > 31) + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Illegal Thumb shift value: %ld"), (long) value); + newval = md_chars_to_number (buf, THUMB_SIZE) & 0xf03f; + newval |= value << 6; + md_number_to_chars (buf, newval , THUMB_SIZE); + break; + + case BFD_RELOC_VTABLE_INHERIT: + case BFD_RELOC_VTABLE_ENTRY: + fixP->fx_done = 0; + return 1; + + case BFD_RELOC_NONE: + default: + as_bad_where (fixP->fx_file, fixP->fx_line, + _("Bad relocation fixup type (%d)"), fixP->fx_r_type); + } + + return 1; +} + +/* Translate internal representation of relocation info to BFD target + format. */ +arelent * +tc_gen_reloc (section, fixp) + asection * section ATTRIBUTE_UNUSED; + fixS * fixp; +{ + arelent * reloc; + bfd_reloc_code_real_type code; + + reloc = (arelent *) xmalloc (sizeof (arelent)); + + reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); + *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); + reloc->address = fixp->fx_frag->fr_address + fixp->fx_where; + + /* @@ Why fx_addnumber sometimes and fx_offset other times? */ +#ifndef OBJ_ELF + if (fixp->fx_pcrel == 0) + reloc->addend = fixp->fx_offset; + else + reloc->addend = fixp->fx_offset = reloc->address; +#else /* OBJ_ELF */ + reloc->addend = fixp->fx_offset; +#endif + + switch (fixp->fx_r_type) + { + case BFD_RELOC_8: + if (fixp->fx_pcrel) + { + code = BFD_RELOC_8_PCREL; + break; + } + + case BFD_RELOC_16: + if (fixp->fx_pcrel) + { + code = BFD_RELOC_16_PCREL; + break; + } + + case BFD_RELOC_32: + if (fixp->fx_pcrel) + { + code = BFD_RELOC_32_PCREL; + break; + } + + case BFD_RELOC_ARM_PCREL_BRANCH: + case BFD_RELOC_RVA: + case BFD_RELOC_THUMB_PCREL_BRANCH9: + case BFD_RELOC_THUMB_PCREL_BRANCH12: + case BFD_RELOC_THUMB_PCREL_BRANCH23: + case BFD_RELOC_VTABLE_ENTRY: + case BFD_RELOC_VTABLE_INHERIT: + code = fixp->fx_r_type; + break; + + case BFD_RELOC_ARM_LITERAL: + case BFD_RELOC_ARM_HWLITERAL: + /* If this is called then the a literal has been referenced across + a section boundary - possibly due to an implicit dump */ + as_bad_where (fixp->fx_file, fixp->fx_line, + _("Literal referenced across section boundary (Implicit dump?)")); + return NULL; + +#ifdef OBJ_ELF + case BFD_RELOC_ARM_GOT32: + case BFD_RELOC_ARM_GOTOFF: + case BFD_RELOC_ARM_PLT32: + code = fixp->fx_r_type; + break; +#endif + + case BFD_RELOC_ARM_IMMEDIATE: + as_bad_where (fixp->fx_file, fixp->fx_line, + _("Internal_relocation (type %d) not fixed up (IMMEDIATE)"), + fixp->fx_r_type); + return NULL; + + case BFD_RELOC_ARM_ADRL_IMMEDIATE: + as_bad_where (fixp->fx_file, fixp->fx_line, + _("ADRL used for a symbol not defined in the same file"), + fixp->fx_r_type); + return NULL; + + case BFD_RELOC_ARM_OFFSET_IMM: + as_bad_where (fixp->fx_file, fixp->fx_line, + _("Internal_relocation (type %d) not fixed up (OFFSET_IMM)"), + fixp->fx_r_type); + return NULL; + + default: + { + char * type; + switch (fixp->fx_r_type) + { + case BFD_RELOC_ARM_IMMEDIATE: type = "IMMEDIATE"; break; + case BFD_RELOC_ARM_OFFSET_IMM: type = "OFFSET_IMM"; break; + case BFD_RELOC_ARM_OFFSET_IMM8: type = "OFFSET_IMM8"; break; + case BFD_RELOC_ARM_SHIFT_IMM: type = "SHIFT_IMM"; break; + case BFD_RELOC_ARM_SWI: type = "SWI"; break; + case BFD_RELOC_ARM_MULTI: type = "MULTI"; break; + case BFD_RELOC_ARM_CP_OFF_IMM: type = "CP_OFF_IMM"; break; + case BFD_RELOC_ARM_THUMB_ADD: type = "THUMB_ADD"; break; + case BFD_RELOC_ARM_THUMB_SHIFT: type = "THUMB_SHIFT"; break; + case BFD_RELOC_ARM_THUMB_IMM: type = "THUMB_IMM"; break; + case BFD_RELOC_ARM_THUMB_OFFSET: type = "THUMB_OFFSET"; break; + default: type = _("<unknown>"); break; + } + as_bad_where (fixp->fx_file, fixp->fx_line, + _("Can not represent %s relocation in this object file format (%d)"), + type, fixp->fx_pcrel); + return NULL; + } + } + +#ifdef OBJ_ELF + if (code == BFD_RELOC_32_PCREL + && GOT_symbol + && fixp->fx_addsy == GOT_symbol) + { + code = BFD_RELOC_ARM_GOTPC; + reloc->addend = fixp->fx_offset = reloc->address; + } +#endif + + reloc->howto = bfd_reloc_type_lookup (stdoutput, code); + + if (reloc->howto == NULL) + { + as_bad_where (fixp->fx_file, fixp->fx_line, + _("Can not represent %s relocation in this object file format"), + bfd_get_reloc_code_name (code)); + return NULL; + } + + /* HACK: Since arm ELF uses Rel instead of Rela, encode the + vtable entry to be used in the relocation's section offset. */ + if (fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY) + reloc->address = fixp->fx_offset; + + return reloc; +} + +int +md_estimate_size_before_relax (fragP, segtype) + fragS * fragP ATTRIBUTE_UNUSED; + segT segtype ATTRIBUTE_UNUSED; +{ + as_fatal (_("md_estimate_size_before_relax\n")); + return 1; +} + +static void +output_inst PARAMS ((void)) +{ + char * to = NULL; + + if (inst.error) + { + as_bad (inst.error); + return; + } + + to = frag_more (inst.size); + + if (thumb_mode && (inst.size > THUMB_SIZE)) + { + assert (inst.size == (2 * THUMB_SIZE)); + md_number_to_chars (to, inst.instruction >> 16, THUMB_SIZE); + md_number_to_chars (to + THUMB_SIZE, inst.instruction, THUMB_SIZE); + } + else if (inst.size > INSN_SIZE) + { + assert (inst.size == (2 * INSN_SIZE)); + md_number_to_chars (to, inst.instruction, INSN_SIZE); + md_number_to_chars (to + INSN_SIZE, inst.instruction, INSN_SIZE); + } + else + md_number_to_chars (to, inst.instruction, inst.size); + + if (inst.reloc.type != BFD_RELOC_NONE) + fix_new_arm (frag_now, to - frag_now->fr_literal, + inst.size, & inst.reloc.exp, inst.reloc.pc_rel, + inst.reloc.type); + + return; +} + +void +md_assemble (str) + char * str; +{ + char c; + char * p; + char * q; + char * start; + + /* Align the instruction. + This may not be the right thing to do but ... */ + /* arm_align (2, 0); */ + listing_prev_line (); /* Defined in listing.h */ + + /* Align the previous label if needed. */ + if (last_label_seen != NULL) + { + symbol_set_frag (last_label_seen, frag_now); + S_SET_VALUE (last_label_seen, (valueT) frag_now_fix ()); + S_SET_SEGMENT (last_label_seen, now_seg); + } + + memset (&inst, '\0', sizeof (inst)); + inst.reloc.type = BFD_RELOC_NONE; + + skip_whitespace (str); + + /* Scan up to the end of the op-code, which must end in white space or + end of string. */ + for (start = p = str; *p != '\0'; p++) + if (*p == ' ') + break; + + if (p == str) + { + as_bad (_("No operator -- statement `%s'\n"), str); + return; + } + + if (thumb_mode) + { + CONST struct thumb_opcode * opcode; + + c = *p; + *p = '\0'; + opcode = (CONST struct thumb_opcode *) hash_find (arm_tops_hsh, str); + *p = c; + + if (opcode) + { + /* Check that this instruction is supported for this CPU. */ + if (thumb_mode == 1 && (opcode->variants & cpu_variant) == 0) + { + as_bad (_("selected processor does not support this opcode")); + return; + } + + inst.instruction = opcode->value; + inst.size = opcode->size; + (*opcode->parms)(p); + output_inst (); + return; + } + } + else + { + CONST struct asm_opcode * opcode; + unsigned long cond_code; + + inst.size = INSN_SIZE; + /* p now points to the end of the opcode, probably white space, but we + have to break the opcode up in case it contains condionals and flags; + keep trying with progressively smaller basic instructions until one + matches, or we run out of opcode. */ + q = (p - str > LONGEST_INST) ? str + LONGEST_INST : p; + for (; q != str; q--) + { + c = *q; + *q = '\0'; + opcode = (CONST struct asm_opcode *) hash_find (arm_ops_hsh, str); + *q = c; + + if (opcode && opcode->template) + { + unsigned long flag_bits = 0; + char * r; + + /* Check that this instruction is supported for this CPU. */ + if ((opcode->variants & cpu_variant) == 0) + goto try_shorter; + + inst.instruction = opcode->value; + if (q == p) /* Just a simple opcode. */ + { + if (opcode->comp_suffix) + { + if (*opcode->comp_suffix != '\0') + as_bad (_("Opcode `%s' must have suffix from list: <%s>"), + str, opcode->comp_suffix); + else + /* Not a conditional instruction. */ + (*opcode->parms)(q, 0); + } + else + { + /* A conditional instruction with default condition. */ + inst.instruction |= COND_ALWAYS; + (*opcode->parms)(q, 0); + } + output_inst (); + return; + } + + /* Not just a simple opcode. Check if extra is a conditional. */ + r = q; + if (p - r >= 2) + { + CONST struct asm_cond *cond; + char d = *(r + 2); + + *(r + 2) = '\0'; + cond = (CONST struct asm_cond *) hash_find (arm_cond_hsh, r); + *(r + 2) = d; + if (cond) + { + if (cond->value == 0xf0000000) + as_tsktsk ( +_("Warning: Use of the 'nv' conditional is deprecated\n")); + + cond_code = cond->value; + r += 2; + } + else + cond_code = COND_ALWAYS; + } + else + cond_code = COND_ALWAYS; + + /* Apply the conditional, or complain it's not allowed. */ + if (opcode->comp_suffix && *opcode->comp_suffix == '\0') + { + /* Instruction isn't conditional */ + if (cond_code != COND_ALWAYS) + { + as_bad (_("Opcode `%s' is unconditional\n"), str); + return; + } + } + else + /* Instruction is conditional: set the condition into it. */ + inst.instruction |= cond_code; + + + /* If there is a compulsory suffix, it should come here, before + any optional flags. */ + if (opcode->comp_suffix && *opcode->comp_suffix != '\0') + { + CONST char *s = opcode->comp_suffix; + + while (*s) + { + inst.suffix++; + if (*r == *s) + break; + s++; + } + + if (*s == '\0') + { + as_bad (_("Opcode `%s' must have suffix from <%s>\n"), str, + opcode->comp_suffix); + return; + } + + r++; + } + + /* The remainder, if any should now be flags for the instruction; + Scan these checking each one found with the opcode. */ + if (r != p) + { + char d; + CONST struct asm_flg *flag = opcode->flags; + + if (flag) + { + int flagno; + + d = *p; + *p = '\0'; + + for (flagno = 0; flag[flagno].template; flagno++) + { + if (streq (r, flag[flagno].template)) + { + flag_bits |= flag[flagno].set_bits; + break; + } + } + + *p = d; + if (! flag[flagno].template) + goto try_shorter; + } + else + goto try_shorter; + } + + (*opcode->parms) (p, flag_bits); + output_inst (); + return; + } + + try_shorter: + ; + } + } + + /* It wasn't an instruction, but it might be a register alias of the form + alias .req reg */ + q = p; + skip_whitespace (q); + + c = *p; + *p = '\0'; + + if (*q && !strncmp (q, ".req ", 4)) + { + int reg; + char * copy_of_str = str; + char * r; + + q += 4; + skip_whitespace (q); + + for (r = q; *r != '\0'; r++) + if (*r == ' ') + break; + + if (r != q) + { + int regnum; + char d = *r; + + *r = '\0'; + regnum = arm_reg_parse (& q); + *r = d; + + reg = arm_reg_parse (& str); + + if (reg == FAIL) + { + if (regnum != FAIL) + insert_reg_alias (str, regnum); + else + as_warn (_("register '%s' does not exist\n"), q); + } + else if (regnum != FAIL) + { + if (reg != regnum) + as_warn (_("ignoring redefinition of register alias '%s'"), + copy_of_str ); + + /* Do not warn about redefinitions to the same alias. */ + } + else + as_warn (_("ignoring redefinition of register alias '%s' to non-existant register '%s'"), + copy_of_str, q); + } + else + as_warn (_("ignoring incomplete .req pseuso op")); + + *p = c; + return; + } + + *p = c; + as_bad (_("bad instruction `%s'"), start); +} + +/* + * md_parse_option + * Invocation line includes a switch not recognized by the base assembler. + * See if it's a processor-specific option. These are: + * Cpu variants, the arm part is optional: + * -m[arm]1 Currently not supported. + * -m[arm]2, -m[arm]250 Arm 2 and Arm 250 processor + * -m[arm]3 Arm 3 processor + * -m[arm]6[xx], Arm 6 processors + * -m[arm]7[xx][t][[d]m] Arm 7 processors + * -m[arm]8[10] Arm 8 processors + * -m[arm]9[20][tdmi] Arm 9 processors + * -mstrongarm[110[0]] StrongARM processors + * -m[arm]v[2345[t]] Arm architectures + * -mall All (except the ARM1) + * FP variants: + * -mfpa10, -mfpa11 FPA10 and 11 co-processor instructions + * -mfpe-old (No float load/store multiples) + * -mno-fpu Disable all floating point instructions + * Run-time endian selection: + * -EB big endian cpu + * -EL little endian cpu + * ARM Procedure Calling Standard: + * -mapcs-32 32 bit APCS + * -mapcs-26 26 bit APCS + * -mapcs-float Pass floats in float regs + * -mapcs-reentrant Position independent code + * -mthumb-interwork Code supports Arm/Thumb interworking + * -moabi Old ELF ABI + */ + +CONST char * md_shortopts = "m:k"; +struct option md_longopts[] = +{ +#ifdef ARM_BI_ENDIAN +#define OPTION_EB (OPTION_MD_BASE + 0) + {"EB", no_argument, NULL, OPTION_EB}, +#define OPTION_EL (OPTION_MD_BASE + 1) + {"EL", no_argument, NULL, OPTION_EL}, +#ifdef OBJ_ELF +#define OPTION_OABI (OPTION_MD_BASE +2) + {"oabi", no_argument, NULL, OPTION_OABI}, +#endif +#endif + {NULL, no_argument, NULL, 0} +}; +size_t md_longopts_size = sizeof (md_longopts); + +int +md_parse_option (c, arg) + int c; + char * arg; +{ + char * str = arg; + + switch (c) + { +#ifdef ARM_BI_ENDIAN + case OPTION_EB: + target_big_endian = 1; + break; + case OPTION_EL: + target_big_endian = 0; + break; +#endif + + case 'm': + switch (*str) + { + case 'f': + if (streq (str, "fpa10")) + cpu_variant = (cpu_variant & ~FPU_ALL) | FPU_FPA10; + else if (streq (str, "fpa11")) + cpu_variant = (cpu_variant & ~FPU_ALL) | FPU_FPA11; + else if (streq (str, "fpe-old")) + cpu_variant = (cpu_variant & ~FPU_ALL) | FPU_CORE; + else + goto bad; + break; + + case 'n': + if (streq (str, "no-fpu")) + cpu_variant &= ~FPU_ALL; + break; + +#ifdef OBJ_ELF + case 'o': + if (streq (str, "oabi")) + target_oabi = true; + break; +#endif + + case 't': + /* Limit assembler to generating only Thumb instructions: */ + if (streq (str, "thumb")) + { + cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_THUMB; + cpu_variant = (cpu_variant & ~FPU_ALL) | FPU_NONE; + thumb_mode = 1; + } + else if (streq (str, "thumb-interwork")) + { + if ((cpu_variant & ARM_THUMB) == 0) + cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_ARCH_V4T; +#if defined OBJ_COFF || defined OBJ_ELF + support_interwork = true; +#endif + } + else + goto bad; + break; + + default: + if (streq (str, "all")) + { + cpu_variant = ARM_ALL | FPU_ALL; + return 1; + } +#if defined OBJ_COFF || defined OBJ_ELF + if (! strncmp (str, "apcs-", 5)) + { + /* GCC passes on all command line options starting "-mapcs-..." + to us, so we must parse them here. */ + + str += 5; + + if (streq (str, "32")) + { + uses_apcs_26 = false; + return 1; + } + else if (streq (str, "26")) + { + uses_apcs_26 = true; + return 1; + } + else if (streq (str, "frame")) + { + /* Stack frames are being generated - does not affect + linkage of code. */ + return 1; + } + else if (streq (str, "stack-check")) + { + /* Stack checking is being performed - does not affect + linkage, but does require that the functions + __rt_stkovf_split_small and __rt_stkovf_split_big be + present in the final link. */ + + return 1; + } + else if (streq (str, "float")) + { + /* Floating point arguments are being passed in the floating + point registers. This does affect linking, since this + version of the APCS is incompatible with the version that + passes floating points in the integer registers. */ + + uses_apcs_float = true; + return 1; + } + else if (streq (str, "reentrant")) + { + /* Reentrant code has been generated. This does affect + linking, since there is no point in linking reentrant/ + position independent code with absolute position code. */ + pic_code = true; + return 1; + } + + as_bad (_("Unrecognised APCS switch -m%s"), arg); + return 0; + } +#endif + /* Strip off optional "arm" */ + if (! strncmp (str, "arm", 3)) + str += 3; + + switch (*str) + { + case '1': + if (streq (str, "1")) + cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_1; + else + goto bad; + break; + + case '2': + if (streq (str, "2")) + cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_2; + else if (streq (str, "250")) + cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_250; + else + goto bad; + break; + + case '3': + if (streq (str, "3")) + cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_3; + else + goto bad; + break; + + case '6': + switch (strtol (str, NULL, 10)) + { + case 6: + case 60: + case 600: + case 610: + case 620: + cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_6; + break; + default: + goto bad; + } + break; + + case '7': + switch (strtol (str, & str, 10)) /* Eat the processor name */ + { + case 7: + case 70: + case 700: + case 710: + case 720: + case 7100: + case 7500: + break; + default: + goto bad; + } + cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_7; + for (; *str; str++) + { + switch (* str) + { + case 't': + cpu_variant |= (ARM_THUMB | ARM_ARCH_V4); + break; + + case 'm': + cpu_variant |= ARM_LONGMUL; + break; + + case 'f': /* fe => fp enabled cpu. */ + if (str[1] == 'e') + ++ str; + else + goto bad; + + case 'c': /* Left over from 710c processor name. */ + case 'd': /* Debug */ + case 'i': /* Embedded ICE */ + /* Included for completeness in ARM processor naming. */ + break; + + default: + goto bad; + } + } + break; + + case '8': + if (streq (str, "8") || streq (str, "810")) + cpu_variant = (cpu_variant & ~ARM_ANY) + | ARM_8 | ARM_ARCH_V4 | ARM_LONGMUL; + else + goto bad; + break; + + case '9': + if (streq (str, "9")) + cpu_variant = (cpu_variant & ~ARM_ANY) + | ARM_9 | ARM_ARCH_V4 | ARM_LONGMUL | ARM_THUMB; + else if (streq (str, "920")) + cpu_variant = (cpu_variant & ~ARM_ANY) + | ARM_9 | ARM_ARCH_V4 | ARM_LONGMUL; + else if (streq (str, "920t")) + cpu_variant = (cpu_variant & ~ARM_ANY) + | ARM_9 | ARM_ARCH_V4 | ARM_LONGMUL | ARM_THUMB; + else if (streq (str, "9tdmi")) + cpu_variant = (cpu_variant & ~ARM_ANY) + | ARM_9 | ARM_ARCH_V4 | ARM_LONGMUL | ARM_THUMB; + else + goto bad; + break; + + + case 's': + if (streq (str, "strongarm") + || streq (str, "strongarm110") + || streq (str, "strongarm1100")) + cpu_variant = (cpu_variant & ~ARM_ANY) + | ARM_8 | ARM_ARCH_V4 | ARM_LONGMUL; + else + goto bad; + break; + + case 'v': + /* Select variant based on architecture rather than processor. */ + switch (*++str) + { + case '2': + switch (*++str) + { + case 'a': + cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_3; + break; + case 0: + cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_2; + break; + default: + as_bad (_("Invalid architecture variant -m%s"), arg); + break; + } + break; + + case '3': + cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_7; + + switch (*++str) + { + case 'm': cpu_variant |= ARM_LONGMUL; break; + case 0: break; + default: + as_bad (_("Invalid architecture variant -m%s"), arg); + break; + } + break; + + case '4': + cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_ARCH_V4; + + switch (*++str) + { + case 't': cpu_variant |= ARM_THUMB; break; + case 0: break; + default: + as_bad (_("Invalid architecture variant -m%s"), arg); + break; + } + break; + + case '5': + cpu_variant = (cpu_variant & ~ARM_ANY) | ARM_ARCH_V5; + switch (*++str) + { + case 't': cpu_variant |= ARM_THUMB; break; + case 'e': cpu_variant |= ARM_EXT_V5E; break; + case 0: break; + default: + as_bad (_("Invalid architecture variant -m%s"), arg); + break; + } + break; + + default: + as_bad (_("Invalid architecture variant -m%s"), arg); + break; + } + break; + + default: + bad: + as_bad (_("Invalid processor variant -m%s"), arg); + return 0; + } + } + break; + +#if defined OBJ_ELF || defined OBJ_COFF + case 'k': + pic_code = 1; + break; +#endif + + default: + return 0; + } + + return 1; +} + +void +md_show_usage (fp) + FILE * fp; +{ + fprintf (fp, _("\ + ARM Specific Assembler Options:\n\ + -m[arm][<processor name>] select processor variant\n\ + -m[arm]v[2|2a|3|3m|4|4t|5[t][e]] select architecture variant\n\ + -mthumb only allow Thumb instructions\n\ + -mthumb-interwork mark the assembled code as supporting interworking\n\ + -mall allow any instruction\n\ + -mfpa10, -mfpa11 select floating point architecture\n\ + -mfpe-old don't allow floating-point multiple instructions\n\ + -mno-fpu don't allow any floating-point instructions.\n\ + -k generate PIC code.\n")); +#if defined OBJ_COFF || defined OBJ_ELF + fprintf (fp, _("\ + -mapcs-32, -mapcs-26 specify which ARM Procedure Calling Standard to use\n\ + -mapcs-float floating point args are passed in FP regs\n\ + -mapcs-reentrant the code is position independent/reentrant\n")); + #endif +#ifdef OBJ_ELF + fprintf (fp, _("\ + -moabi support the old ELF ABI\n")); +#endif +#ifdef ARM_BI_ENDIAN + fprintf (fp, _("\ + -EB assemble code for a big endian cpu\n\ + -EL assemble code for a little endian cpu\n")); +#endif +} + +/* We need to be able to fix up arbitrary expressions in some statements. + This is so that we can handle symbols that are an arbitrary distance from + the pc. The most common cases are of the form ((+/-sym -/+ . - 8) & mask), + which returns part of an address in a form which will be valid for + a data instruction. We do this by pushing the expression into a symbol + in the expr_section, and creating a fix for that. */ + +static void +fix_new_arm (frag, where, size, exp, pc_rel, reloc) + fragS * frag; + int where; + short int size; + expressionS * exp; + int pc_rel; + int reloc; +{ + fixS * new_fix; + arm_fix_data * arm_data; + + switch (exp->X_op) + { + case O_constant: + case O_symbol: + case O_add: + case O_subtract: + new_fix = fix_new_exp (frag, where, size, exp, pc_rel, reloc); + break; + + default: + new_fix = fix_new (frag, where, size, make_expr_symbol (exp), 0, + pc_rel, reloc); + break; + } + + /* Mark whether the fix is to a THUMB instruction, or an ARM instruction */ + arm_data = (arm_fix_data *) obstack_alloc (& notes, sizeof (arm_fix_data)); + new_fix->tc_fix_data = (PTR) arm_data; + arm_data->thumb_mode = thumb_mode; + + return; +} + + +/* This fix_new is called by cons via TC_CONS_FIX_NEW. */ +void +cons_fix_new_arm (frag, where, size, exp) + fragS * frag; + int where; + int size; + expressionS * exp; +{ + bfd_reloc_code_real_type type; + int pcrel = 0; + + /* Pick a reloc. + FIXME: @@ Should look at CPU word size. */ + switch (size) + { + case 1: + type = BFD_RELOC_8; + break; + case 2: + type = BFD_RELOC_16; + break; + case 4: + default: + type = BFD_RELOC_32; + break; + case 8: + type = BFD_RELOC_64; + break; + } + + fix_new_exp (frag, where, (int) size, exp, pcrel, type); +} + +/* A good place to do this, although this was probably not intended + for this kind of use. We need to dump the literal pool before + references are made to a null symbol pointer. */ +void +arm_cleanup () +{ + if (current_poolP == NULL) + return; + + subseg_set (text_section, 0); /* Put it at the end of text section. */ + s_ltorg (0); + listing_prev_line (); +} + +void +arm_start_line_hook () +{ + last_label_seen = NULL; +} + +void +arm_frob_label (sym) + symbolS * sym; +{ + last_label_seen = sym; + + ARM_SET_THUMB (sym, thumb_mode); + +#if defined OBJ_COFF || defined OBJ_ELF + ARM_SET_INTERWORK (sym, support_interwork); +#endif + + if (label_is_thumb_function_name) + { + /* When the address of a Thumb function is taken the bottom + bit of that address should be set. This will allow + interworking between Arm and Thumb functions to work + correctly. */ + + THUMB_SET_FUNC (sym, 1); + + label_is_thumb_function_name = false; + } +} + +/* Adjust the symbol table. This marks Thumb symbols as distinct from + ARM ones. */ + +void +arm_adjust_symtab () +{ +#ifdef OBJ_COFF + symbolS * sym; + + for (sym = symbol_rootP; sym != NULL; sym = symbol_next (sym)) + { + if (ARM_IS_THUMB (sym)) + { + if (THUMB_IS_FUNC (sym)) + { + /* Mark the symbol as a Thumb function. */ + if ( S_GET_STORAGE_CLASS (sym) == C_STAT + || S_GET_STORAGE_CLASS (sym) == C_LABEL) /* This can happen! */ + S_SET_STORAGE_CLASS (sym, C_THUMBSTATFUNC); + + else if (S_GET_STORAGE_CLASS (sym) == C_EXT) + S_SET_STORAGE_CLASS (sym, C_THUMBEXTFUNC); + else + as_bad (_("%s: unexpected function type: %d"), + S_GET_NAME (sym), S_GET_STORAGE_CLASS (sym)); + } + else switch (S_GET_STORAGE_CLASS (sym)) + { + case C_EXT: + S_SET_STORAGE_CLASS (sym, C_THUMBEXT); + break; + case C_STAT: + S_SET_STORAGE_CLASS (sym, C_THUMBSTAT); + break; + case C_LABEL: + S_SET_STORAGE_CLASS (sym, C_THUMBLABEL); + break; + default: /* do nothing */ + break; + } + } + + if (ARM_IS_INTERWORK (sym)) + coffsymbol (symbol_get_bfdsym (sym))->native->u.syment.n_flags = 0xFF; + } +#endif +#ifdef OBJ_ELF + symbolS * sym; + char bind; + + for (sym = symbol_rootP; sym != NULL; sym = symbol_next (sym)) + { + if (ARM_IS_THUMB (sym)) + { + elf_symbol_type * elf_sym; + + elf_sym = elf_symbol (symbol_get_bfdsym (sym)); + bind = ELF_ST_BIND (elf_sym); + + /* If it's a .thumb_func, declare it as so, + otherwise tag label as .code 16. */ + if (THUMB_IS_FUNC (sym)) + elf_sym->internal_elf_sym.st_info = + ELF_ST_INFO (bind, STT_ARM_TFUNC); + else + elf_sym->internal_elf_sym.st_info = + ELF_ST_INFO (bind, STT_ARM_16BIT); + } + } +#endif +} + +int +arm_data_in_code () +{ + if (thumb_mode && ! strncmp (input_line_pointer + 1, "data:", 5)) + { + *input_line_pointer = '/'; + input_line_pointer += 5; + *input_line_pointer = 0; + return 1; + } + + return 0; +} + +char * +arm_canonicalize_symbol_name (name) + char * name; +{ + int len; + + if (thumb_mode && (len = strlen (name)) > 5 + && streq (name + len - 5, "/data")) + *(name + len - 5) = 0; + + return name; +} + +boolean +arm_validate_fix (fixP) + fixS * fixP; +{ + /* If the destination of the branch is a defined symbol which does not have + the THUMB_FUNC attribute, then we must be calling a function which has + the (interfacearm) attribute. We look for the Thumb entry point to that + function and change the branch to refer to that function instead. */ + if ( fixP->fx_r_type == BFD_RELOC_THUMB_PCREL_BRANCH23 + && fixP->fx_addsy != NULL + && S_IS_DEFINED (fixP->fx_addsy) + && ! THUMB_IS_FUNC (fixP->fx_addsy)) + { + fixP->fx_addsy = find_real_start (fixP->fx_addsy); + return true; + } + + return false; +} + +#ifdef OBJ_ELF +/* Relocations against Thumb function names must be left unadjusted, + so that the linker can use this information to correctly set the + bottom bit of their addresses. The MIPS version of this function + also prevents relocations that are mips-16 specific, but I do not + know why it does this. + + FIXME: + There is one other problem that ought to be addressed here, but + which currently is not: Taking the address of a label (rather + than a function) and then later jumping to that address. Such + addresses also ought to have their bottom bit set (assuming that + they reside in Thumb code), but at the moment they will not. */ + +boolean +arm_fix_adjustable (fixP) + fixS * fixP; +{ + if (fixP->fx_addsy == NULL) + return 1; + + /* Prevent all adjustments to global symbols. */ + if (S_IS_EXTERN (fixP->fx_addsy)) + return 0; + + if (S_IS_WEAK (fixP->fx_addsy)) + return 0; + + if (THUMB_IS_FUNC (fixP->fx_addsy) + && fixP->fx_subsy == NULL) + return 0; + + /* We need the symbol name for the VTABLE entries */ + if ( fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT + || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY) + return 0; + + return 1; +} + +const char * +elf32_arm_target_format () +{ + if (target_big_endian) + if (target_oabi) + return "elf32-bigarm-oabi"; + else + return "elf32-bigarm"; + else + if (target_oabi) + return "elf32-littlearm-oabi"; + else + return "elf32-littlearm"; +} + +void +armelf_frob_symbol (symp, puntp) + symbolS * symp; + int * puntp; +{ + elf_frob_symbol (symp, puntp); +} + +int +arm_force_relocation (fixp) + struct fix * fixp; +{ + if ( fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT + || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY + || fixp->fx_r_type == BFD_RELOC_ARM_PCREL_BRANCH + || fixp->fx_r_type == BFD_RELOC_THUMB_PCREL_BRANCH23) + return 1; + + return 0; +} + +static bfd_reloc_code_real_type +arm_parse_reloc () +{ + char id[16]; + char * ip; + unsigned int i; + static struct + { + char * str; + int len; + bfd_reloc_code_real_type reloc; + } + reloc_map[] = + { +#define MAP(str,reloc) { str, sizeof (str)-1, reloc } + MAP ("(got)", BFD_RELOC_ARM_GOT32), + MAP ("(gotoff)", BFD_RELOC_ARM_GOTOFF), + /* ScottB: Jan 30, 1998 */ + /* Added support for parsing "var(PLT)" branch instructions */ + /* generated by GCC for PLT relocs */ + MAP ("(plt)", BFD_RELOC_ARM_PLT32), + { NULL, 0, BFD_RELOC_UNUSED } +#undef MAP + }; + + for (i = 0, ip = input_line_pointer; + i < sizeof (id) && (isalnum (*ip) || ispunct (*ip)); + i++, ip++) + id[i] = tolower (*ip); + + for (i = 0; reloc_map[i].str; i++) + if (strncmp (id, reloc_map[i].str, reloc_map[i].len) == 0) + break; + + input_line_pointer += reloc_map[i].len; + + return reloc_map[i].reloc; +} + +static void +s_arm_elf_cons (nbytes) + int nbytes; +{ + expressionS exp; + +#ifdef md_flush_pending_output + md_flush_pending_output (); +#endif + + if (is_it_end_of_statement ()) + { + demand_empty_rest_of_line (); + return; + } + +#ifdef md_cons_align + md_cons_align (nbytes); +#endif + + do + { + bfd_reloc_code_real_type reloc; + + expression (& exp); + + if (exp.X_op == O_symbol + && * input_line_pointer == '(' + && (reloc = arm_parse_reloc()) != BFD_RELOC_UNUSED) + { + reloc_howto_type * howto = bfd_reloc_type_lookup (stdoutput, reloc); + int size = bfd_get_reloc_size (howto); + + if (size > nbytes) + as_bad ("%s relocations do not fit in %d bytes", + howto->name, nbytes); + else + { + register char * p = frag_more ((int) nbytes); + int offset = nbytes - size; + + fix_new_exp (frag_now, p - frag_now->fr_literal + offset, size, + & exp, 0, reloc); + } + } + else + emit_expr (& exp, (unsigned int) nbytes); + } + while (*input_line_pointer++ == ','); + + input_line_pointer--; /* Put terminator back into stream. */ + demand_empty_rest_of_line (); +} + +#endif /* OBJ_ELF */ diff --git a/contrib/binutils/gas/doc/c-arm.texi b/contrib/binutils/gas/doc/c-arm.texi new file mode 100644 index 000000000000..e35498240325 --- /dev/null +++ b/contrib/binutils/gas/doc/c-arm.texi @@ -0,0 +1,294 @@ +@c Copyright (C) 1996, 1998, 1999, 2000 Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. + +@ifset GENERIC +@page +@node ARM-Dependent +@chapter ARM Dependent Features +@end ifset + +@ifclear GENERIC +@node Machine Dependencies +@chapter ARM Dependent Features +@end ifclear + +@cindex ARM support +@cindex Thumb support +@menu +* ARM Options:: Options +* ARM Syntax:: Syntax +* ARM Floating Point:: Floating Point +* ARM Directives:: ARM Machine Directives +* ARM Opcodes:: Opcodes +@end menu + +@node ARM Options +@section Options +@cindex ARM options (none) +@cindex options for ARM (none) + +@table @code + +@cindex @code{-marm} command line option, ARM +@item -marm@code{[2|250|3|6|60|600|610|620|7|7m|7d|7dm|7di|7dmi|70|700|700i|710|710c|7100|7500|7500fe|7tdmi|8|810|9|9tdmi|920|strongarm|strongarm110|strongarm1100]} +This option specifies the target processor. The assembler will issue an +error message if an attempt is made to assemble an instruction which +will not execute on the target processor. + +@cindex @code{-marmv} command line option, ARM +@item -marmv@code{[2|2a|3|3m|4|4t|5|5t]} +This option specifies the target architecture. The assembler will issue +an error message if an attempt is made to assemble an instruction which +will not execute on the target architecture. + +@cindex @code{-mthumb} command line option, ARM +@item -mthumb +This option specifies that only Thumb instructions should be assembled. + +@cindex @code{-mall} command line option, ARM +@item -mall +This option specifies that any Arm or Thumb instruction should be assembled. + +@cindex @code{-mfpa} command line option, ARM +@item -mfpa @var{[10|11]} +This option specifies the floating point architecture in use on the +target processor. + +@cindex @code{-mfpe-old} command line option, ARM +@item -mfpe-old +Do not allow the assemble of floating point multiple instructions. + +@cindex @code{-mno-fpu} command line option, ARM +@item -mno-fpu +Do not allow the assembly of any floating point instructions. + +@cindex @code{-mthumb-interwork} command line option, ARM +@item -mthumb-interwork +This option specifies that the output generated by the assembler should +be marked as supporting interworking. + +@cindex @code{-mapcs} command line option, ARM +@item -mapcs @var{[26|32]} +This option specifies that the output generated by the assembler should +be marked as supporting the indicated version of the Arm Procedure. +Calling Standard. + +@cindex @code{-mapcs-float} command line option, ARM +@item -mapcs-float +This indicates the the floating point variant of the APCS should be +used. In this variant floating point arguments are passed in FP +registers rather than integer registers. + +@cindex @code{-mapcs-reentrant} command line option, ARM +@item -mapcs-reentrant +This indicates that the reentrant variant of the APCS should be used. +This variant supports position independent code. + +@cindex @code{-EB} command line option, ARM +@item -EB +This option specifies that the output generated by the assembler should +be marked as being encoded for a big-endian processor. + +@cindex @code{-EL} command line option, ARM +@item -EL +This option specifies that the output generated by the assembler should +be marked as being encoded for a little-endian processor. + +@cindex @code{-k} command line option, ARM +@cindex PIC code generation for ARM +@item -k +This option enables the generation of PIC (position independent code). + +@cindex @code{-moabi} command line option, ARM +@item -moabi +This indicates that the code should be assembled using the old ARM ELF +conventions, based on a beta release release of the ARM-ELF +specifications, rather than the default conventions which are based on +the final release of the ARM-ELF specifications. + +@end table + + +@node ARM Syntax +@section Syntax +@menu +* ARM-Chars:: Special Characters +* ARM-Regs:: Register Names +@end menu + +@node ARM-Chars +@subsection Special Characters + +@cindex line comment character, ARM +@cindex ARM line comment character +The presence of a @samp{@@} on a line indicates the start of a comment +that extends to the end of the current line. If a @samp{#} appears as +the first character of a line, the whole line is treated as a comment. + +@cindex line separator, ARM +@cindex statement separator, ARM +@cindex ARM line separator +On ARM systems running the GNU/Linux operating system, @samp{;} can be +used instead of a newline to separate statements. + +@cindex immediate character, ARM +@cindex ARM immediate character +Either @samp{#} or @samp{$} can be used to indicate immediate operands. + +@cindex identifiers, ARM +@cindex ARM identifiers +*TODO* Explain about /data modifier on symbols. + +@node ARM-Regs +@subsection Register Names + +@cindex ARM register names +@cindex register names, ARM +*TODO* Explain about ARM register naming, and the predefined names. + +@node ARM Floating Point +@section Floating Point + +@cindex floating point, ARM (@sc{ieee}) +@cindex ARM floating point (@sc{ieee}) +The ARM family uses @sc{ieee} floating-point numbers. + + + +@node ARM Directives +@section ARM Machine Directives + +@cindex machine directives, ARM +@cindex ARM machine directives +@table @code + +@cindex @code{align} directive, ARM +@item .align @var{expression} [, @var{expression}] +This is the generic @var{.align} directive. For the ARM however if the +first argument is zero (ie no alignment is needed) the assembler will +behave as if the argument had been 2 (ie pad to the next four byte +boundary). This is for compatability with ARM's own assembler. + +@cindex @code{req} directive, ARM +@item @var{name} .req @var{register name} +This creates an alias for @var{register name} called @var{name}. For +example: + +@smallexample + foo .req r0 +@end smallexample + +@cindex @code{code} directive, ARM +@item .code @var{[16|32]} +This directive selects the instruction set being generated. The value 16 +selects Thumb, with the value 32 selecting ARM. + +@cindex @code{thumb} directive, ARM +@item .thumb +This performs the same action as @var{.code 16}. + +@cindex @code{arm} directive, ARM +@item .arm +This performs the same action as @var{.code 32}. + +@cindex @code{force_thumb} directive, ARM +@item .force_thumb +This directive forces the selection of Thumb instructions, even if the +target processor does not support those instructions + +@cindex @code{thumb_func} directive, ARM +@item .thumb_func +This directive specifies that the following symbol is the name of a +Thumb encoded function. This information is necessary in order to allow +the assembler and linker to generate correct code for interworking +between Arm and Thumb instructions and should be used even if +interworking is not going to be performed. + +@cindex @code{thumb_set} directive, ARM +@item .thumb_set +This performs the equivalent of a @code{.set} directive in that it +creates a symbol which is an alias for another symbol (possibly not yet +defined). This directive also has the added property in that it marks +the aliased symbol as being a thumb function entry point, in the same +way that the @code{.thumb_func} directive does. + +@cindex @code{.ltorg} directive, ARM +@item .ltorg +This directive causes the current contents of the literal pool to be +dumped into the current section (which is assumed to be the .text +section) at the current location (aligned to a word boundary). + +@cindex @code{.pool} directive, ARM +@item .pool +This is a synonym for .ltorg. + +@end table + +@node ARM Opcodes +@section Opcodes + +@cindex ARM opcodes +@cindex opcodes for ARM +@code{@value{AS}} implements all the standard ARM opcodes. It also +implements several pseudo opcodes, including several synthetic load +instructions. + +@table @code + +@cindex @code{NOP} pseudo op, ARM +@item NOP +@smallexample + nop +@end smallexample + +This pseudo op will always evaluate to a legal ARM instruction that does +nothing. Currently it will evaluate to MOV r0, r0. + +@cindex @code{LDR reg,=<label>} pseudo op, ARM +@item LDR +@smallexample + ldr <register> , = <expression> +@end smallexample + +If expression evaluates to a numeric constant then a MOV or MVN +instruction will be used in place of the LDR instruction, if the +constant can be generated by either of these instructions. Otherwise +the constant will be placed into the nearest literal pool (if it not +already there) and a PC relative LDR instruction will be generated. + +@cindex @code{ADR reg,<label>} pseudo op, ARM +@item ADR +@smallexample + adr <register> <label> +@end smallexample + +This instruction will load the address of @var{label} into the indicated +register. The instruction will evaluate to a PC relative ADD or SUB +instruction depending upon where the label is located. If the label is +out of range, or if it is not defined in the same file (and section) as +the ADR instruction, then an error will be generated. This instruction +will not make use of the literal pool. + +@cindex @code{ADRL reg,<label>} pseudo op, ARM +@item ADRL +@smallexample + adrl <register> <label> +@end smallexample + +This instruction will load the address of @var{label} into the indicated +register. The instruction will evaluate to one or two a PC relative ADD +or SUB instructions depending upon where the label is located. If a +second instruction is not needed a NOP instruction will be generated in +its place, so that this instruction is always 8 bytes long. + +If the label is out of range, or if it is not defined in the same file +(and section) as the ADRL instruction, then an error will be generated. +This instruction will not make use of the literal pool. + +@end table + +For information on the ARM or Thumb instruction sets, see @cite{ARM +Software Development Toolkit Reference Manual}, Advanced RISC Machines +Ltd. + diff --git a/contrib/binutils/include/filenames.h b/contrib/binutils/include/filenames.h new file mode 100644 index 000000000000..ba933c8530ee --- /dev/null +++ b/contrib/binutils/include/filenames.h @@ -0,0 +1,51 @@ +/* Macros for taking apart, interpreting and processing file names. + + These are here because some non-Posix (a.k.a. DOSish) systems have + drive letter brain-damage at the beginning of an absolute file name, + use forward- and back-slash in path names interchangeably, and + some of them have case-insensitive file names. + + Copyright 2000 Free Software Foundation, Inc. + +This file is part of BFD, the Binary File Descriptor library. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef FILENAMES_H +#define FILENAMES_H + +#if defined(__MSDOS__) || defined(_WIN32) || defined(__OS2__) + +#ifndef HAVE_DOS_BASED_FILE_SYSTEM +#define HAVE_DOS_BASED_FILE_SYSTEM 1 +#endif + +#define IS_DIR_SEPARATOR(c) ((c) == '/' || (c) == '\\') +/* Note that IS_ABSOLUTE_PATH accepts d:foo as well, although it is + only semi-absolute. This is because the users of IS_ABSOLUTE_PATH + want to know whether to prepend the current working directory to + a file name, which should not be done with a name like d:foo. */ +#define IS_ABSOLUTE_PATH(f) (IS_DIR_SEPARATOR((f)[0]) || (((f)[0]) && ((f)[1] == ':'))) +#define FILENAME_CMP(s1, s2) strcasecmp(s1, s2) + +#else /* not DOSish */ + +#define IS_DIR_SEPARATOR(c) ((c) == '/') +#define IS_ABSOLUTE_PATH(f) (IS_DIR_SEPARATOR((f)[0])) +#define FILENAME_CMP(s1, s2) strcmp(s1, s2) + +#endif /* not DOSish */ + +#endif /* FILENAMES_H */ diff --git a/contrib/binutils/opcodes/arm-dis.c b/contrib/binutils/opcodes/arm-dis.c new file mode 100644 index 000000000000..a3e7112b3fc1 --- /dev/null +++ b/contrib/binutils/opcodes/arm-dis.c @@ -0,0 +1,1071 @@ +/* Instruction printing code for the ARM + Copyright (C) 1994, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. + Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org) + Modification by James G. Smith (jsmith@cygnus.co.uk) + +This file is part of libopcodes. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#include "sysdep.h" +#include "dis-asm.h" +#define DEFINE_TABLE +#include "arm-opc.h" +#include "coff/internal.h" +#include "libcoff.h" +#include "opintl.h" + +/* FIXME: This shouldn't be done here */ +#include "elf-bfd.h" +#include "elf/internal.h" +#include "elf/arm.h" + +#ifndef streq +#define streq(a,b) (strcmp ((a), (b)) == 0) +#endif + +#ifndef strneq +#define strneq(a,b,n) (strncmp ((a), (b), (n)) == 0) +#endif + +#ifndef NUM_ELEM +#define NUM_ELEM(a) (sizeof (a) / sizeof (a)[0]) +#endif + +static char * arm_conditional[] = +{"eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc", + "hi", "ls", "ge", "lt", "gt", "le", "", "nv"}; + +typedef struct +{ + const char * name; + const char * description; + const char * reg_names[16]; +} +arm_regname; + +static arm_regname regnames[] = +{ + { "raw" , "Select raw register names", + { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"}}, + { "std", "Select register names used in ARM's ISA documentation", + { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc" }}, + { "apcs", "Select register names used in the APCS", + { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "v4", "v5", "v6", "sl", "fp", "ip", "sp", "lr", "pc" }}, + { "atpcs", "Select register names used in the ATPCS", + { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "IP", "SP", "LR", "PC" }}, + { "special-atpcs", "Select special register names used in the ATPCS", + { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "WR", "v5", "SB", "SL", "FP", "IP", "SP", "LR", "PC" }} +}; + +/* Default to standard register name set. */ +static unsigned int regname_selected = 1; + +#define NUM_ARM_REGNAMES NUM_ELEM (regnames) +#define arm_regnames regnames[regname_selected].reg_names + +static boolean force_thumb = false; + +static char * arm_fp_const[] = +{"0.0", "1.0", "2.0", "3.0", "4.0", "5.0", "0.5", "10.0"}; + +static char * arm_shift[] = +{"lsl", "lsr", "asr", "ror"}; + +/* Forward declarations. */ +static void arm_decode_shift PARAMS ((long, fprintf_ftype, void *)); +static int print_insn_arm PARAMS ((bfd_vma, struct disassemble_info *, long)); +static int print_insn_thumb PARAMS ((bfd_vma, struct disassemble_info *, long)); +static void parse_disassembler_options PARAMS ((char *)); +static int print_insn PARAMS ((bfd_vma, struct disassemble_info *, boolean)); +int get_arm_regname_num_options (void); +int set_arm_regname_option (int option); +int get_arm_regnames (int option, const char **setname, + const char **setdescription, + const char ***register_names); + +/* Functions. */ +int +get_arm_regname_num_options (void) +{ + return NUM_ARM_REGNAMES; +} + +int +set_arm_regname_option (int option) +{ + int old = regname_selected; + regname_selected = option; + return old; +} + +int +get_arm_regnames (int option, const char **setname, + const char **setdescription, + const char ***register_names) +{ + *setname = regnames[option].name; + *setdescription = regnames[option].description; + *register_names = regnames[option].reg_names; + return 16; +} + +static void +arm_decode_shift (given, func, stream) + long given; + fprintf_ftype func; + void * stream; +{ + func (stream, "%s", arm_regnames[given & 0xf]); + + if ((given & 0xff0) != 0) + { + if ((given & 0x10) == 0) + { + int amount = (given & 0xf80) >> 7; + int shift = (given & 0x60) >> 5; + + if (amount == 0) + { + if (shift == 3) + { + func (stream, ", rrx"); + return; + } + + amount = 32; + } + + func (stream, ", %s #%d", arm_shift[shift], amount); + } + else + func (stream, ", %s %s", arm_shift[(given & 0x60) >> 5], + arm_regnames[(given & 0xf00) >> 8]); + } +} + +/* Print one instruction from PC on INFO->STREAM. + Return the size of the instruction (always 4 on ARM). */ +static int +print_insn_arm (pc, info, given) + bfd_vma pc; + struct disassemble_info * info; + long given; +{ + struct arm_opcode * insn; + void * stream = info->stream; + fprintf_ftype func = info->fprintf_func; + + for (insn = arm_opcodes; insn->assembler; insn++) + { + if ((given & insn->mask) == insn->value) + { + char * c; + + for (c = insn->assembler; *c; c++) + { + if (*c == '%') + { + switch (*++c) + { + case '%': + func (stream, "%%"); + break; + + case 'a': + if (((given & 0x000f0000) == 0x000f0000) + && ((given & 0x02000000) == 0)) + { + int offset = given & 0xfff; + + func (stream, "[pc"); + + if (given & 0x01000000) + { + if ((given & 0x00800000) == 0) + offset = - offset; + + /* pre-indexed */ + func (stream, ", #%x]", offset); + + offset += pc + 8; + + /* Cope with the possibility of write-back + being used. Probably a very dangerous thing + for the programmer to do, but who are we to + argue ? */ + if (given & 0x00200000) + func (stream, "!"); + } + else + { + /* Post indexed. */ + func (stream, "], #%x", offset); + + offset = pc + 8; /* ie ignore the offset. */ + } + + func (stream, "\t; "); + info->print_address_func (offset, info); + } + else + { + func (stream, "[%s", + arm_regnames[(given >> 16) & 0xf]); + if ((given & 0x01000000) != 0) + { + if ((given & 0x02000000) == 0) + { + int offset = given & 0xfff; + if (offset) + func (stream, ", %s#%d", + (((given & 0x00800000) == 0) + ? "-" : ""), offset); + } + else + { + func (stream, ", %s", + (((given & 0x00800000) == 0) + ? "-" : "")); + arm_decode_shift (given, func, stream); + } + + func (stream, "]%s", + ((given & 0x00200000) != 0) ? "!" : ""); + } + else + { + if ((given & 0x02000000) == 0) + { + int offset = given & 0xfff; + if (offset) + func (stream, "], %s#%d", + (((given & 0x00800000) == 0) + ? "-" : ""), offset); + else + func (stream, "]"); + } + else + { + func (stream, "], %s", + (((given & 0x00800000) == 0) + ? "-" : "")); + arm_decode_shift (given, func, stream); + } + } + } + break; + + case 's': + if ((given & 0x004f0000) == 0x004f0000) + { + /* PC relative with immediate offset. */ + int offset = ((given & 0xf00) >> 4) | (given & 0xf); + + if ((given & 0x00800000) == 0) + offset = -offset; + + func (stream, "[pc, #%x]\t; ", offset); + + (*info->print_address_func) + (offset + pc + 8, info); + } + else + { + func (stream, "[%s", + arm_regnames[(given >> 16) & 0xf]); + if ((given & 0x01000000) != 0) + { + /* Pre-indexed. */ + if ((given & 0x00400000) == 0x00400000) + { + /* Immediate. */ + int offset = ((given & 0xf00) >> 4) | (given & 0xf); + if (offset) + func (stream, ", %s#%d", + (((given & 0x00800000) == 0) + ? "-" : ""), offset); + } + else + { + /* Register. */ + func (stream, ", %s%s", + (((given & 0x00800000) == 0) + ? "-" : ""), + arm_regnames[given & 0xf]); + } + + func (stream, "]%s", + ((given & 0x00200000) != 0) ? "!" : ""); + } + else + { + /* Post-indexed. */ + if ((given & 0x00400000) == 0x00400000) + { + /* Immediate. */ + int offset = ((given & 0xf00) >> 4) | (given & 0xf); + if (offset) + func (stream, "], %s#%d", + (((given & 0x00800000) == 0) + ? "-" : ""), offset); + else + func (stream, "]"); + } + else + { + /* Register. */ + func (stream, "], %s%s", + (((given & 0x00800000) == 0) + ? "-" : ""), + arm_regnames[given & 0xf]); + } + } + } + break; + + case 'b': + (*info->print_address_func) + (BDISP (given) * 4 + pc + 8, info); + break; + + case 'c': + func (stream, "%s", + arm_conditional [(given >> 28) & 0xf]); + break; + + case 'm': + { + int started = 0; + int reg; + + func (stream, "{"); + for (reg = 0; reg < 16; reg++) + if ((given & (1 << reg)) != 0) + { + if (started) + func (stream, ", "); + started = 1; + func (stream, "%s", arm_regnames[reg]); + } + func (stream, "}"); + } + break; + + case 'o': + if ((given & 0x02000000) != 0) + { + int rotate = (given & 0xf00) >> 7; + int immed = (given & 0xff); + immed = (((immed << (32 - rotate)) + | (immed >> rotate)) & 0xffffffff); + func (stream, "#%d\t; 0x%x", immed, immed); + } + else + arm_decode_shift (given, func, stream); + break; + + case 'p': + if ((given & 0x0000f000) == 0x0000f000) + func (stream, "p"); + break; + + case 't': + if ((given & 0x01200000) == 0x00200000) + func (stream, "t"); + break; + + case 'h': + if ((given & 0x00000020) == 0x00000020) + func (stream, "h"); + else + func (stream, "b"); + break; + + case 'A': + func (stream, "[%s", arm_regnames [(given >> 16) & 0xf]); + if ((given & 0x01000000) != 0) + { + int offset = given & 0xff; + if (offset) + func (stream, ", %s#%d]%s", + ((given & 0x00800000) == 0 ? "-" : ""), + offset * 4, + ((given & 0x00200000) != 0 ? "!" : "")); + else + func (stream, "]"); + } + else + { + int offset = given & 0xff; + if (offset) + func (stream, "], %s#%d", + ((given & 0x00800000) == 0 ? "-" : ""), + offset * 4); + else + func (stream, "]"); + } + break; + + case 'C': + switch (given & 0x000f0000) + { + default: + func (stream, "_???"); + break; + case 0x90000: + func (stream, "_all"); + break; + case 0x10000: + func (stream, "_c"); + break; + case 0x20000: + func (stream, "_x"); + break; + case 0x40000: + func (stream, "_s"); + break; + case 0x80000: + func (stream, "_f"); + break; + } + break; + + case 'F': + switch (given & 0x00408000) + { + case 0: + func (stream, "4"); + break; + case 0x8000: + func (stream, "1"); + break; + case 0x00400000: + func (stream, "2"); + break; + default: + func (stream, "3"); + } + break; + + case 'P': + switch (given & 0x00080080) + { + case 0: + func (stream, "s"); + break; + case 0x80: + func (stream, "d"); + break; + case 0x00080000: + func (stream, "e"); + break; + default: + func (stream, _("<illegal precision>")); + break; + } + break; + case 'Q': + switch (given & 0x00408000) + { + case 0: + func (stream, "s"); + break; + case 0x8000: + func (stream, "d"); + break; + case 0x00400000: + func (stream, "e"); + break; + default: + func (stream, "p"); + break; + } + break; + case 'R': + switch (given & 0x60) + { + case 0: + break; + case 0x20: + func (stream, "p"); + break; + case 0x40: + func (stream, "m"); + break; + default: + func (stream, "z"); + break; + } + break; + + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + { + int bitstart = *c++ - '0'; + int bitend = 0; + while (*c >= '0' && *c <= '9') + bitstart = (bitstart * 10) + *c++ - '0'; + + switch (*c) + { + case '-': + c++; + + while (*c >= '0' && *c <= '9') + bitend = (bitend * 10) + *c++ - '0'; + + if (!bitend) + abort (); + + switch (*c) + { + case 'r': + { + long reg; + + reg = given >> bitstart; + reg &= (2 << (bitend - bitstart)) - 1; + + func (stream, "%s", arm_regnames[reg]); + } + break; + case 'd': + { + long reg; + + reg = given >> bitstart; + reg &= (2 << (bitend - bitstart)) - 1; + + func (stream, "%d", reg); + } + break; + case 'x': + { + long reg; + + reg = given >> bitstart; + reg &= (2 << (bitend - bitstart)) - 1; + + func (stream, "0x%08x", reg); + + /* Some SWI instructions have special + meanings. */ + if ((given & 0x0fffffff) == 0x0FF00000) + func (stream, "\t; IMB"); + else if ((given & 0x0fffffff) == 0x0FF00001) + func (stream, "\t; IMBRange"); + } + break; + case 'X': + { + long reg; + + reg = given >> bitstart; + reg &= (2 << (bitend - bitstart)) - 1; + + func (stream, "%01x", reg & 0xf); + } + break; + case 'f': + { + long reg; + + reg = given >> bitstart; + reg &= (2 << (bitend - bitstart)) - 1; + + if (reg > 7) + func (stream, "#%s", + arm_fp_const[reg & 7]); + else + func (stream, "f%d", reg); + } + break; + default: + abort (); + } + break; + + case '`': + c++; + if ((given & (1 << bitstart)) == 0) + func (stream, "%c", *c); + break; + case '\'': + c++; + if ((given & (1 << bitstart)) != 0) + func (stream, "%c", *c); + break; + case '?': + ++c; + if ((given & (1 << bitstart)) != 0) + func (stream, "%c", *c++); + else + func (stream, "%c", *++c); + break; + default: + abort (); + } + break; + + default: + abort (); + } + } + } + else + func (stream, "%c", *c); + } + return 4; + } + } + abort (); +} + +/* Print one instruction from PC on INFO->STREAM. + Return the size of the instruction. */ +static int +print_insn_thumb (pc, info, given) + bfd_vma pc; + struct disassemble_info * info; + long given; +{ + struct thumb_opcode * insn; + void * stream = info->stream; + fprintf_ftype func = info->fprintf_func; + + for (insn = thumb_opcodes; insn->assembler; insn++) + { + if ((given & insn->mask) == insn->value) + { + char * c = insn->assembler; + + /* Special processing for Thumb 2 instruction BL sequence: */ + if (!*c) /* Check for empty (not NULL) assembler string. */ + { + info->bytes_per_chunk = 4; + info->bytes_per_line = 4; + + func (stream, "bl\t"); + + info->print_address_func (BDISP23 (given) * 2 + pc + 4, info); + return 4; + } + else + { + info->bytes_per_chunk = 2; + info->bytes_per_line = 4; + + given &= 0xffff; + + for (; *c; c++) + { + if (*c == '%') + { + int domaskpc = 0; + int domasklr = 0; + + switch (*++c) + { + case '%': + func (stream, "%%"); + break; + + case 'S': + { + long reg; + + reg = (given >> 3) & 0x7; + if (given & (1 << 6)) + reg += 8; + + func (stream, "%s", arm_regnames[reg]); + } + break; + + case 'D': + { + long reg; + + reg = given & 0x7; + if (given & (1 << 7)) + reg += 8; + + func (stream, "%s", arm_regnames[reg]); + } + break; + + case 'T': + func (stream, "%s", + arm_conditional [(given >> 8) & 0xf]); + break; + + case 'N': + if (given & (1 << 8)) + domasklr = 1; + /* Fall through. */ + case 'O': + if (*c == 'O' && (given & (1 << 8))) + domaskpc = 1; + /* Fall through. */ + case 'M': + { + int started = 0; + int reg; + + func (stream, "{"); + + /* It would be nice if we could spot + ranges, and generate the rS-rE format: */ + for (reg = 0; (reg < 8); reg++) + if ((given & (1 << reg)) != 0) + { + if (started) + func (stream, ", "); + started = 1; + func (stream, "%s", arm_regnames[reg]); + } + + if (domasklr) + { + if (started) + func (stream, ", "); + started = 1; + func (stream, arm_regnames[14] /* "lr" */); + } + + if (domaskpc) + { + if (started) + func (stream, ", "); + func (stream, arm_regnames[15] /* "pc" */); + } + + func (stream, "}"); + } + break; + + + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + { + int bitstart = *c++ - '0'; + int bitend = 0; + + while (*c >= '0' && *c <= '9') + bitstart = (bitstart * 10) + *c++ - '0'; + + switch (*c) + { + case '-': + { + long reg; + + c++; + while (*c >= '0' && *c <= '9') + bitend = (bitend * 10) + *c++ - '0'; + if (!bitend) + abort (); + reg = given >> bitstart; + reg &= (2 << (bitend - bitstart)) - 1; + switch (*c) + { + case 'r': + func (stream, "%s", arm_regnames[reg]); + break; + + case 'd': + func (stream, "%d", reg); + break; + + case 'H': + func (stream, "%d", reg << 1); + break; + + case 'W': + func (stream, "%d", reg << 2); + break; + + case 'a': + /* PC-relative address -- the bottom two + bits of the address are dropped + before the calculation. */ + info->print_address_func + (((pc + 4) & ~3) + (reg << 2), info); + break; + + case 'x': + func (stream, "0x%04x", reg); + break; + + case 'I': + reg = ((reg ^ (1 << bitend)) - (1 << bitend)); + func (stream, "%d", reg); + break; + + case 'B': + reg = ((reg ^ (1 << bitend)) - (1 << bitend)); + (*info->print_address_func) + (reg * 2 + pc + 4, info); + break; + + default: + abort (); + } + } + break; + + case '\'': + c++; + if ((given & (1 << bitstart)) != 0) + func (stream, "%c", *c); + break; + + case '?': + ++c; + if ((given & (1 << bitstart)) != 0) + func (stream, "%c", *c++); + else + func (stream, "%c", *++c); + break; + + default: + abort (); + } + } + break; + + default: + abort (); + } + } + else + func (stream, "%c", *c); + } + } + return 2; + } + } + + /* No match. */ + abort (); +} + +/* Parse an individual disassembler option. */ +void +parse_arm_disassembler_option (option) + char * option; +{ + if (option == NULL) + return; + + if (strneq (option, "reg-names-", 10)) + { + int i; + + option += 10; + + for (i = NUM_ARM_REGNAMES; i--;) + if (streq (option, regnames[i].name)) + { + regname_selected = i; + break; + } + + if (i < 0) + fprintf (stderr, _("Unrecognised register name set: %s\n"), option); + } + else if (streq (option, "force-thumb")) + force_thumb = 1; + else if (streq (option, "no-force-thumb")) + force_thumb = 0; + else + fprintf (stderr, _("Unrecognised disassembler option: %s\n"), option); + + return; +} + +/* Parse the string of disassembler options, spliting it at whitespaces. */ +static void +parse_disassembler_options (options) + char * options; +{ + char * space; + + if (options == NULL) + return; + + do + { + space = strchr (options, ' '); + + if (space) + { + * space = '\0'; + parse_arm_disassembler_option (options); + * space = ' '; + options = space + 1; + } + else + parse_arm_disassembler_option (options); + } + while (space); +} + +/* NOTE: There are no checks in these routines that + the relevant number of data bytes exist. */ +static int +print_insn (pc, info, little) + bfd_vma pc; + struct disassemble_info * info; + boolean little; +{ + unsigned char b[4]; + long given; + int status; + int is_thumb; + + if (info->disassembler_options) + { + parse_disassembler_options (info->disassembler_options); + + /* To avoid repeated parsing of these options, we remove them here. */ + info->disassembler_options = NULL; + } + + is_thumb = force_thumb; + + if (!is_thumb && info->symbols != NULL) + { + if (bfd_asymbol_flavour (*info->symbols) == bfd_target_coff_flavour) + { + coff_symbol_type * cs; + + cs = coffsymbol (*info->symbols); + is_thumb = ( cs->native->u.syment.n_sclass == C_THUMBEXT + || cs->native->u.syment.n_sclass == C_THUMBSTAT + || cs->native->u.syment.n_sclass == C_THUMBLABEL + || cs->native->u.syment.n_sclass == C_THUMBEXTFUNC + || cs->native->u.syment.n_sclass == C_THUMBSTATFUNC); + } + else if (bfd_asymbol_flavour (*info->symbols) == bfd_target_elf_flavour) + { + elf_symbol_type * es; + unsigned int type; + + es = *(elf_symbol_type **)(info->symbols); + type = ELF_ST_TYPE (es->internal_elf_sym.st_info); + + is_thumb = (type == STT_ARM_TFUNC) || (type == STT_ARM_16BIT); + } + } + + info->bytes_per_chunk = 4; + info->display_endian = little ? BFD_ENDIAN_LITTLE : BFD_ENDIAN_BIG; + + if (little) + { + status = info->read_memory_func (pc, (bfd_byte *) &b[0], 4, info); + if (status != 0 && is_thumb) + { + info->bytes_per_chunk = 2; + + status = info->read_memory_func (pc, (bfd_byte *) b, 2, info); + b[3] = b[2] = 0; + } + + if (status != 0) + { + info->memory_error_func (status, pc, info); + return -1; + } + + given = (b[0]) | (b[1] << 8) | (b[2] << 16) | (b[3] << 24); + } + else + { + status = info->read_memory_func + (pc & ~ 0x3, (bfd_byte *) &b[0], 4, info); + if (status != 0) + { + info->memory_error_func (status, pc, info); + return -1; + } + + if (is_thumb) + { + if (pc & 0x2) + { + given = (b[2] << 8) | b[3]; + + status = info->read_memory_func + ((pc + 4) & ~ 0x3, (bfd_byte *) b, 4, info); + if (status != 0) + { + info->memory_error_func (status, pc + 4, info); + return -1; + } + + given |= (b[0] << 24) | (b[1] << 16); + } + else + given = (b[0] << 8) | b[1] | (b[2] << 24) | (b[3] << 16); + } + else + given = (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | (b[3]); + } + + if (is_thumb) + status = print_insn_thumb (pc, info, given); + else + status = print_insn_arm (pc, info, given); + + return status; +} + +int +print_insn_big_arm (pc, info) + bfd_vma pc; + struct disassemble_info * info; +{ + return print_insn (pc, info, false); +} + +int +print_insn_little_arm (pc, info) + bfd_vma pc; + struct disassemble_info * info; +{ + return print_insn (pc, info, true); +} + +void +print_arm_disassembler_options (FILE * stream) +{ + int i; + + fprintf (stream, _("\n\ +The following ARM specific disassembler options are supported for use with\n\ +the -M switch:\n")); + + for (i = NUM_ARM_REGNAMES; i--;) + fprintf (stream, " reg-names-%s %*c%s\n", + regnames[i].name, + 14 - strlen (regnames[i].name), ' ', + regnames[i].description); + + fprintf (stream, " force-thumb Assume all insns are Thumb insns\n"); + fprintf (stream, " no-force-thumb Examine preceeding label to determine an insn's type\n\n"); +} diff --git a/contrib/binutils/opcodes/arm-opc.h b/contrib/binutils/opcodes/arm-opc.h new file mode 100644 index 000000000000..5ecde4be6add --- /dev/null +++ b/contrib/binutils/opcodes/arm-opc.h @@ -0,0 +1,284 @@ +/* Opcode table for the ARM. + + Copyright 1994, 1995, 1996, 1997, 2000 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +struct arm_opcode { + unsigned long value, mask; /* recognise instruction if (op&mask)==value */ + char *assembler; /* how to disassemble this instruction */ +}; + +struct thumb_opcode +{ + unsigned short value, mask; /* recognise instruction if (op&mask)==value */ + char * assembler; /* how to disassemble this instruction */ +}; + +/* format of the assembler string : + + %% % + %<bitfield>d print the bitfield in decimal + %<bitfield>x print the bitfield in hex + %<bitfield>X print the bitfield as 1 hex digit without leading "0x" + %<bitfield>r print as an ARM register + %<bitfield>f print a floating point constant if >7 else a + floating point register + %c print condition code (always bits 28-31) + %P print floating point precision in arithmetic insn + %Q print floating point precision in ldf/stf insn + %R print floating point rounding mode + %<bitnum>'c print specified char iff bit is one + %<bitnum>`c print specified char iff bit is zero + %<bitnum>?ab print a if bit is one else print b + %p print 'p' iff bits 12-15 are 15 + %t print 't' iff bit 21 set and bit 24 clear + %h print 'h' iff bit 5 set, else print 'b' + %o print operand2 (immediate or register + shift) + %a print address for ldr/str instruction + %s print address for ldr/str halfword/signextend instruction + %b print branch destination + %A print address for ldc/stc/ldf/stf instruction + %m print register mask for ldm/stm instruction + %C print the PSR sub type. + %F print the COUNT field of a LFM/SFM instruction. +Thumb specific format options: + %D print Thumb register (bits 0..2 as high number if bit 7 set) + %S print Thumb register (bits 3..5 as high number if bit 6 set) + %<bitfield>I print bitfield as a signed decimal + (top bit of range being the sign bit) + %M print Thumb register mask + %N print Thumb register mask (with LR) + %O print Thumb register mask (with PC) + %T print Thumb condition code (always bits 8-11) + %<bitfield>B print Thumb branch destination (signed displacement) + %<bitfield>W print (bitfield * 4) as a decimal + %<bitfield>H print (bitfield * 2) as a decimal + %<bitfield>a print (bitfield * 4) as a pc-rel offset + decoded symbol +*/ + +/* Note: There is a partial ordering in this table - it must be searched from + the top to obtain a correct match. */ + +static struct arm_opcode arm_opcodes[] = +{ + /* ARM instructions */ + {0xe1a00000, 0xffffffff, "nop\t\t\t(mov r0,r0)"}, + {0x012FFF10, 0x0ffffff0, "bx%c\t%0-3r"}, + {0x00000090, 0x0fe000f0, "mul%c%20's\t%16-19r, %0-3r, %8-11r"}, + {0x00200090, 0x0fe000f0, "mla%c%20's\t%16-19r, %0-3r, %8-11r, %12-15r"}, + {0x01000090, 0x0fb00ff0, "swp%c%22'b\t%12-15r, %0-3r, [%16-19r]"}, + {0x00800090, 0x0fa000f0, "%22?sumull%c%20's\t%12-15r, %16-19r, %0-3r, %8-11r"}, + {0x00a00090, 0x0fa000f0, "%22?sumlal%c%20's\t%12-15r, %16-19r, %0-3r, %8-11r"}, + {0x00000090, 0x0e100090, "str%c%6's%h\t%12-15r, %s"}, + {0x00100090, 0x0e100090, "ldr%c%6's%h\t%12-15r, %s"}, + {0x00000000, 0x0de00000, "and%c%20's\t%12-15r, %16-19r, %o"}, + {0x00200000, 0x0de00000, "eor%c%20's\t%12-15r, %16-19r, %o"}, + {0x00400000, 0x0de00000, "sub%c%20's\t%12-15r, %16-19r, %o"}, + {0x00600000, 0x0de00000, "rsb%c%20's\t%12-15r, %16-19r, %o"}, + {0x00800000, 0x0de00000, "add%c%20's\t%12-15r, %16-19r, %o"}, + {0x00a00000, 0x0de00000, "adc%c%20's\t%12-15r, %16-19r, %o"}, + {0x00c00000, 0x0de00000, "sbc%c%20's\t%12-15r, %16-19r, %o"}, + {0x00e00000, 0x0de00000, "rsc%c%20's\t%12-15r, %16-19r, %o"}, + {0x0120f000, 0x0db0f000, "msr%c\t%22?SCPSR%C, %o"}, + {0x010f0000, 0x0fbf0fff, "mrs%c\t%12-15r, %22?SCPSR"}, + {0x01000000, 0x0de00000, "tst%c%p\t%16-19r, %o"}, + {0x01200000, 0x0de00000, "teq%c%p\t%16-19r, %o"}, + {0x01400000, 0x0de00000, "cmp%c%p\t%16-19r, %o"}, + {0x01600000, 0x0de00000, "cmn%c%p\t%16-19r, %o"}, + {0x01800000, 0x0de00000, "orr%c%20's\t%12-15r, %16-19r, %o"}, + {0x01a00000, 0x0de00000, "mov%c%20's\t%12-15r, %o"}, + {0x01c00000, 0x0de00000, "bic%c%20's\t%12-15r, %16-19r, %o"}, + {0x01e00000, 0x0de00000, "mvn%c%20's\t%12-15r, %o"}, + {0x04000000, 0x0e100000, "str%c%22'b%t\t%12-15r, %a"}, + {0x06000000, 0x0e100ff0, "str%c%22'b%t\t%12-15r, %a"}, + {0x04000000, 0x0c100010, "str%c%22'b%t\t%12-15r, %a"}, + {0x06000010, 0x0e000010, "undefined"}, + {0x04100000, 0x0c100000, "ldr%c%22'b%t\t%12-15r, %a"}, + {0x08000000, 0x0e100000, "stm%c%23?id%24?ba\t%16-19r%21'!, %m%22'^"}, + {0x08100000, 0x0e100000, "ldm%c%23?id%24?ba\t%16-19r%21'!, %m%22'^"}, + {0x0a000000, 0x0e000000, "b%24'l%c\t%b"}, + {0x0f000000, 0x0f000000, "swi%c\t%0-23x"}, + + /* Floating point coprocessor instructions */ + {0x0e000100, 0x0ff08f10, "adf%c%P%R\t%12-14f, %16-18f, %0-3f"}, + {0x0e100100, 0x0ff08f10, "muf%c%P%R\t%12-14f, %16-18f, %0-3f"}, + {0x0e200100, 0x0ff08f10, "suf%c%P%R\t%12-14f, %16-18f, %0-3f"}, + {0x0e300100, 0x0ff08f10, "rsf%c%P%R\t%12-14f, %16-18f, %0-3f"}, + {0x0e400100, 0x0ff08f10, "dvf%c%P%R\t%12-14f, %16-18f, %0-3f"}, + {0x0e500100, 0x0ff08f10, "rdf%c%P%R\t%12-14f, %16-18f, %0-3f"}, + {0x0e600100, 0x0ff08f10, "pow%c%P%R\t%12-14f, %16-18f, %0-3f"}, + {0x0e700100, 0x0ff08f10, "rpw%c%P%R\t%12-14f, %16-18f, %0-3f"}, + {0x0e800100, 0x0ff08f10, "rmf%c%P%R\t%12-14f, %16-18f, %0-3f"}, + {0x0e900100, 0x0ff08f10, "fml%c%P%R\t%12-14f, %16-18f, %0-3f"}, + {0x0ea00100, 0x0ff08f10, "fdv%c%P%R\t%12-14f, %16-18f, %0-3f"}, + {0x0eb00100, 0x0ff08f10, "frd%c%P%R\t%12-14f, %16-18f, %0-3f"}, + {0x0ec00100, 0x0ff08f10, "pol%c%P%R\t%12-14f, %16-18f, %0-3f"}, + {0x0e008100, 0x0ff08f10, "mvf%c%P%R\t%12-14f, %0-3f"}, + {0x0e108100, 0x0ff08f10, "mnf%c%P%R\t%12-14f, %0-3f"}, + {0x0e208100, 0x0ff08f10, "abs%c%P%R\t%12-14f, %0-3f"}, + {0x0e308100, 0x0ff08f10, "rnd%c%P%R\t%12-14f, %0-3f"}, + {0x0e408100, 0x0ff08f10, "sqt%c%P%R\t%12-14f, %0-3f"}, + {0x0e508100, 0x0ff08f10, "log%c%P%R\t%12-14f, %0-3f"}, + {0x0e608100, 0x0ff08f10, "lgn%c%P%R\t%12-14f, %0-3f"}, + {0x0e708100, 0x0ff08f10, "exp%c%P%R\t%12-14f, %0-3f"}, + {0x0e808100, 0x0ff08f10, "sin%c%P%R\t%12-14f, %0-3f"}, + {0x0e908100, 0x0ff08f10, "cos%c%P%R\t%12-14f, %0-3f"}, + {0x0ea08100, 0x0ff08f10, "tan%c%P%R\t%12-14f, %0-3f"}, + {0x0eb08100, 0x0ff08f10, "asn%c%P%R\t%12-14f, %0-3f"}, + {0x0ec08100, 0x0ff08f10, "acs%c%P%R\t%12-14f, %0-3f"}, + {0x0ed08100, 0x0ff08f10, "atn%c%P%R\t%12-14f, %0-3f"}, + {0x0ee08100, 0x0ff08f10, "urd%c%P%R\t%12-14f, %0-3f"}, + {0x0ef08100, 0x0ff08f10, "nrm%c%P%R\t%12-14f, %0-3f"}, + {0x0e000110, 0x0ff00f1f, "flt%c%P%R\t%16-18f, %12-15r"}, + {0x0e100110, 0x0fff0f98, "fix%c%R\t%12-15r, %0-2f"}, + {0x0e200110, 0x0fff0fff, "wfs%c\t%12-15r"}, + {0x0e300110, 0x0fff0fff, "rfs%c\t%12-15r"}, + {0x0e400110, 0x0fff0fff, "wfc%c\t%12-15r"}, + {0x0e500110, 0x0fff0fff, "rfc%c\t%12-15r"}, + {0x0e90f110, 0x0ff8fff0, "cmf%c\t%16-18f, %0-3f"}, + {0x0eb0f110, 0x0ff8fff0, "cnf%c\t%16-18f, %0-3f"}, + {0x0ed0f110, 0x0ff8fff0, "cmfe%c\t%16-18f, %0-3f"}, + {0x0ef0f110, 0x0ff8fff0, "cnfe%c\t%16-18f, %0-3f"}, + {0x0c000100, 0x0e100f00, "stf%c%Q\t%12-14f, %A"}, + {0x0c100100, 0x0e100f00, "ldf%c%Q\t%12-14f, %A"}, + {0x0c000200, 0x0e100f00, "sfm%c\t%12-14f, %F, %A"}, + {0x0c100200, 0x0e100f00, "lfm%c\t%12-14f, %F, %A"}, + + /* Generic coprocessor instructions */ + {0x0e000000, 0x0f000010, "cdp%c\t%8-11d, %20-23d, cr%12-15d, cr%16-19d, cr%0-3d, {%5-7d}"}, + {0x0e100010, 0x0f100010, "mrc%c\t%8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}"}, + {0x0e000010, 0x0f100010, "mcr%c\t%8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}"}, + {0x0c000000, 0x0e100000, "stc%c%22'l\t%8-11d, cr%12-15d, %A"}, + {0x0c100000, 0x0e100000, "ldc%c%22'l\t%8-11d, cr%12-15d, %A"}, + + /* The rest. */ + {0x00000000, 0x00000000, "undefined instruction %0-31x"}, + {0x00000000, 0x00000000, 0} +}; + +#define BDISP(x) ((((x) & 0xffffff) ^ 0x800000) - 0x800000) /* 26 bit */ + +static struct thumb_opcode thumb_opcodes[] = +{ + /* Thumb instructions */ + {0x46C0, 0xFFFF, "nop\t\t\t(mov r8,r8)"}, /* format 5 instructions do not update the PSR */ + {0x1C00, 0xFFC0, "mov\t%0-2r, %3-5r\t\t(add %0-2r, %3-5r, #%6-8d)"}, + /* format 4 */ + {0x4000, 0xFFC0, "and\t%0-2r, %3-5r"}, + {0x4040, 0xFFC0, "eor\t%0-2r, %3-5r"}, + {0x4080, 0xFFC0, "lsl\t%0-2r, %3-5r"}, + {0x40C0, 0xFFC0, "lsr\t%0-2r, %3-5r"}, + {0x4100, 0xFFC0, "asr\t%0-2r, %3-5r"}, + {0x4140, 0xFFC0, "adc\t%0-2r, %3-5r"}, + {0x4180, 0xFFC0, "sbc\t%0-2r, %3-5r"}, + {0x41C0, 0xFFC0, "ror\t%0-2r, %3-5r"}, + {0x4200, 0xFFC0, "tst\t%0-2r, %3-5r"}, + {0x4240, 0xFFC0, "neg\t%0-2r, %3-5r"}, + {0x4280, 0xFFC0, "cmp\t%0-2r, %3-5r"}, + {0x42C0, 0xFFC0, "cmn\t%0-2r, %3-5r"}, + {0x4300, 0xFFC0, "orr\t%0-2r, %3-5r"}, + {0x4340, 0xFFC0, "mul\t%0-2r, %3-5r"}, + {0x4380, 0xFFC0, "bic\t%0-2r, %3-5r"}, + {0x43C0, 0xFFC0, "mvn\t%0-2r, %3-5r"}, + /* format 13 */ + {0xB000, 0xFF80, "add\tsp, #%0-6W"}, + {0xB080, 0xFF80, "sub\tsp, #%0-6W"}, + /* format 5 */ + {0x4700, 0xFF80, "bx\t%S"}, + {0x4400, 0xFF00, "add\t%D, %S"}, + {0x4500, 0xFF00, "cmp\t%D, %S"}, + {0x4600, 0xFF00, "mov\t%D, %S"}, + /* format 14 */ + {0xB400, 0xFE00, "push\t%N"}, + {0xBC00, 0xFE00, "pop\t%O"}, + /* format 2 */ + {0x1800, 0xFE00, "add\t%0-2r, %3-5r, %6-8r"}, + {0x1A00, 0xFE00, "sub\t%0-2r, %3-5r, %6-8r"}, + {0x1C00, 0xFE00, "add\t%0-2r, %3-5r, #%6-8d"}, + {0x1E00, 0xFE00, "sub\t%0-2r, %3-5r, #%6-8d"}, + /* format 8 */ + {0x5200, 0xFE00, "strh\t%0-2r, [%3-5r, %6-8r]"}, + {0x5A00, 0xFE00, "ldrh\t%0-2r, [%3-5r, %6-8r]"}, + {0x5600, 0xF600, "ldrs%11?hb\t%0-2r, [%3-5r, %6-8r]"}, + /* format 7 */ + {0x5000, 0xFA00, "str%10'b\t%0-2r, [%3-5r, %6-8r]"}, + {0x5800, 0xFA00, "ldr%10'b\t%0-2r, [%3-5r, %6-8r]"}, + /* format 1 */ + {0x0000, 0xF800, "lsl\t%0-2r, %3-5r, #%6-10d"}, + {0x0800, 0xF800, "lsr\t%0-2r, %3-5r, #%6-10d"}, + {0x1000, 0xF800, "asr\t%0-2r, %3-5r, #%6-10d"}, + /* format 3 */ + {0x2000, 0xF800, "mov\t%8-10r, #%0-7d"}, + {0x2800, 0xF800, "cmp\t%8-10r, #%0-7d"}, + {0x3000, 0xF800, "add\t%8-10r, #%0-7d"}, + {0x3800, 0xF800, "sub\t%8-10r, #%0-7d"}, + /* format 6 */ + {0x4800, 0xF800, "ldr\t%8-10r, [pc, #%0-7W]\t(%0-7a)"}, /* TODO: Disassemble PC relative "LDR rD,=<symbolic>" */ + /* format 9 */ + {0x6000, 0xF800, "str\t%0-2r, [%3-5r, #%6-10W]"}, + {0x6800, 0xF800, "ldr\t%0-2r, [%3-5r, #%6-10W]"}, + {0x7000, 0xF800, "strb\t%0-2r, [%3-5r, #%6-10d]"}, + {0x7800, 0xF800, "ldrb\t%0-2r, [%3-5r, #%6-10d]"}, + /* format 10 */ + {0x8000, 0xF800, "strh\t%0-2r, [%3-5r, #%6-10H]"}, + {0x8800, 0xF800, "ldrh\t%0-2r, [%3-5r, #%6-10H]"}, + /* format 11 */ + {0x9000, 0xF800, "str\t%8-10r, [sp, #%0-7W]"}, + {0x9800, 0xF800, "ldr\t%8-10r, [sp, #%0-7W]"}, + /* format 12 */ + {0xA000, 0xF800, "add\t%8-10r, pc, #%0-7W\t(adr %8-10r,%0-7a)"}, + {0xA800, 0xF800, "add\t%8-10r, sp, #%0-7W"}, + /* format 15 */ + {0xC000, 0xF800, "stmia\t%8-10r!,%M"}, + {0xC800, 0xF800, "ldmia\t%8-10r!,%M"}, + /* format 18 */ + {0xE000, 0xF800, "b\t%0-10B"}, + {0xE800, 0xF800, "undefined"}, + /* format 19 */ + {0xF000, 0xF800, ""}, /* special processing required in disassembler */ + {0xF800, 0xF800, "second half of BL instruction %0-15x"}, + /* format 16 */ + {0xD000, 0xFF00, "beq\t%0-7B"}, + {0xD100, 0xFF00, "bne\t%0-7B"}, + {0xD200, 0xFF00, "bcs\t%0-7B"}, + {0xD300, 0xFF00, "bcc\t%0-7B"}, + {0xD400, 0xFF00, "bmi\t%0-7B"}, + {0xD500, 0xFF00, "bpl\t%0-7B"}, + {0xD600, 0xFF00, "bvs\t%0-7B"}, + {0xD700, 0xFF00, "bvc\t%0-7B"}, + {0xD800, 0xFF00, "bhi\t%0-7B"}, + {0xD900, 0xFF00, "bls\t%0-7B"}, + {0xDA00, 0xFF00, "bge\t%0-7B"}, + {0xDB00, 0xFF00, "blt\t%0-7B"}, + {0xDC00, 0xFF00, "bgt\t%0-7B"}, + {0xDD00, 0xFF00, "ble\t%0-7B"}, + /* format 17 */ + {0xDE00, 0xFF00, "bal\t%0-7B"}, + {0xDF00, 0xFF00, "swi\t%0-7d"}, + /* format 9 */ + {0x6000, 0xF800, "str\t%0-2r, [%3-5r, #%6-10W]"}, + {0x6800, 0xF800, "ldr\t%0-2r, [%3-5r, #%6-10W]"}, + {0x7000, 0xF800, "strb\t%0-2r, [%3-5r, #%6-10d]"}, + {0x7800, 0xF800, "ldrb\t%0-2r, [%3-5r, #%6-10d]"}, + /* the rest */ + {0x0000, 0x0000, "undefined instruction %0-15x"}, + {0x0000, 0x0000, 0} +}; + +#define BDISP23(x) ((((((x) & 0x07ff) << 11) | (((x) & 0x07ff0000) >> 16)) \ + ^ 0x200000) - 0x200000) /* 23bit */ + diff --git a/contrib/isc-dhcp/Makefile.conf b/contrib/isc-dhcp/Makefile.conf new file mode 100644 index 000000000000..d2fb53499fc5 --- /dev/null +++ b/contrib/isc-dhcp/Makefile.conf @@ -0,0 +1,332 @@ +# Makefile.conf +# +# Copyright (c) 1996, 1997, 1998, 1999 The Internet Software Consortium. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of The Internet Software Consortium nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE INTERNET SOFTWARE CONSORTIUM AND +# CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +# THE INTERNET SOFTWARE CONSORTIUM OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +# OF THE POSSIBILITY OF SUCH DAMAGE. +# + +## Defaults... +SCRIPT = none +BINDIR = /usr/sbin +CLIENTBINDIR=/sbin +ADMMANEXT = .0 +FFMANEXT = .0 +ADMMANDIR = /usr/share/man/cat8 +FFMANDIR = /usr/share/man/cat5 +INSTALL = install -c +MANINSTALL = install -c -m 444 +CHMOD = chmod +CATMANPAGES = +MANCAT = cat +ETC = /etc +VARRUN = /var/run +VARDB = /var/db + +# Major version number (if applicable) +##--majver-- +MAJORVERSION=MajorVersion +##--majver-- + +# Minor version number (if applicable) +##--minver-- +MINORVERSION=MinorVersion +##--minver-- + +## Porting:: +# +# For each supported operating system, there is a block of text below +# beginning with #--os-name-- and ending with #--os-name--. Between +# these delimiters are assignments, commented out, which define the +# Makefile variables required for that operating system. +# +# The configure shell script figures out what operating system it's +# being run on and then runs Makefile.dist through a sed script which +# removes the comment characters from the appropriate set of +# assignments, and writes the output to Makefile. + +## AIX 4.1.5.0 +##--aix-- +#CF = cf/aix.h +#CC=cc -Daix +#INSTALL=/usr/ucb/install +#MANINSTALL=/usr/ucb/install +#ADMMANEXT = .8 +#FFMANEXT = .5 +#VARRUN = /etc +#VARDB = /etc +##--aix-- + +## NEXTSTEP 3.x,4.x +##--nextstep-- +#LIBS = +#CF = cf/nextstep.h +#CC=cc +#COPTS = -Wall +#BINDIR=/usr/etc +#ADMMANDIR = /usr/local/man/cat8 +#FFMANDIR = /usr/local/man/cat5 +#ADMMANEXT = .8 +#FFMANEXT = .5 +#VARRUN = /etc +#VARDB = /etc +##--nextstep-- + +## SunOS 4.1 +##--sunos4-- +#LIBS = -lresolv +#CF = cf/sunos4.h +#BINDIR=/usr/etc +#CLIENTBINDIR=/etc +#ADMMANEXT = .8 +#FFMANEXT = .5 +#VARRUN = /etc +#VARDB = /etc +##--sunos4-- + +## Solaris 2.5 (with gcc) +##--sunos5-gcc-- +#INSTALL=/usr/ucb/install +#MANINSTALL=/usr/ucb/install +#LIBS = -lresolv -lsocket -lnsl -lgen +#CC=gcc +#COPTS = -Wall -Wno-unused -Wno-implicit -Wno-comment \ +# -Wno-uninitialized -Wno-char-subscripts -Werror +#CF = cf/sunos5-5.h +#ADMMANDIR = /usr/share/man/cat1m +#ADMMANEXT = .1m +#FFMANDIR = /usr/share/man/cat4 +#FFMANEXT = .4 +#VARRUN = /etc +#VARDB = /etc +#SCRIPT=solaris +##--sunos5-gcc-- + +## Solaris 2.5 (with Sun cc) +##--sunos5-cc-- +#INSTALL=/usr/ucb/install +#MANINSTALL=/usr/ucb/install +#LIBS = -lresolv -lsocket -lnsl -lgen +#CC=cc +#COPTS = -D__svr4__ +#CF = cf/sunos5-5.h +#ADMMANDIR = /usr/share/man/cat1m +#ADMMANEXT = .1m +#FFMANDIR = /usr/share/man/cat4 +#FFMANEXT = .4 +#VARRUN = /etc +#VARDB = /etc +#SCRIPT=solaris +##--sunos5-cc-- + +## DEC Alpha/OSF1 +##--alphaosf-- +#CC=cc -std0 +#INSTALL=/usr/ucb/installbsd +#MANINSTALL=/usr/ucb/installbsd +#LIBS= +#CF = cf/alphaosf.h +#ADMMANEXT = .8 +#FFMANEXT = .5 +#VARDB = /etc +##--alphaosf-- + +## BSD/OS 2.1 +##--bsdos-- +#LIBS= -lresolv +#CC=gcc2 +#CF = cf/bsdos.h +##--bsdos-- + +## FreeBSD +##--freebsd-- +#CF = cf/freebsd.h +#SCRIPT=freebsd +##--freebsd-- + +## Rhapsody +##--rhapsody-- +#CF = cf/rhapsody.h +#COPTS = -Wall -Wno-unused -Wno-implicit -Wno-comment \ +# -Wno-uninitialized -Werror -pipe +#SCRIPT=rhapsody +##--rhapsody-- + +## NetBSD +##--netbsd-- +#CF = cf/netbsd.h +#COPTS = -Wall -Wstrict-prototypes -Wno-unused -Wno-implicit -Wno-comment \ +# -Wno-uninitialized -Werror -pipe +#SCRIPT=netbsd +##--netbsd-- + +## Ultrix +##--ultrix-- +#BINDIR = /usr/etc +#CLIENTBINDIR=/etc +#VARRUN = /etc +#VARDB = /etc +#CF = cf/ultrix.h +#ADMMANDIR = /usr/man/man8 +#ADMMANEXT = .8 +#FFMANDIR = /usr/man/man5 +#FFMANEXT = .5 +##--ultrix-- + +## Linux 1.x +##--linux-1-- +#COPTS = -DLINUX_MAJOR=$(MAJORVERSION) -DLINUX_MINOR=$(MINORVERSION) +#CF = cf/linux.h +#ADMMANDIR = /usr/man/man8 +#ADMMANEXT = .8 +#FFMANDIR = /usr/man/man5 +#FFMANEXT = .5 +#MANCAT = man +#VARRUN = /var/run +#VARDB = /var/state/dhcp # see rationale in includes/cf/linux.h +#SCRIPT=linux +##--linux-1-- + +## Linux 2.0 +##--linux-2.0-- +#COPTS = -DLINUX_MAJOR=$(MAJORVERSION) -DLINUX_MINOR=$(MINORVERSION) +#CF = cf/linux.h +#ADMMANDIR = /usr/man/man8 +#ADMMANEXT = .8 +#FFMANDIR = /usr/man/man5 +#FFMANEXT = .5 +#MANCAT = man +#VARRUN = /var/run +#VARDB = /var/state/dhcp # see rationale in includes/cf/linux.h +#SCRIPT=linux +##--linux-2.0-- + +## Linux 2.1 +##--linux-2.1-- +#COPTS = -DLINUX_MAJOR=$(MAJORVERSION) -DLINUX_MINOR=$(MINORVERSION) +#CF = cf/linux.h +#ADMMANDIR = /usr/man/man8 +#ADMMANEXT = .8 +#FFMANDIR = /usr/share/man/man5 +#FFMANEXT = .5 +#MANCAT = man +#VARRUN = /var/run +#VARDB = /var/state/dhcp # see rationale in includes/cf/linux.h +#SCRIPT=linux +##--linux-2.1-- + +## Linux 2.2 +##--linux-2.2-- +#COPTS = -DLINUX_MAJOR=$(MAJORVERSION) -DLINUX_MINOR=$(MINORVERSION) +#CF = cf/linux.h +#ADMMANDIR = /usr/man/man8 +#ADMMANEXT = .8 +#FFMANDIR = /usr/share/man/man5 +#FFMANEXT = .5 +#MANCAT = man +#VARRUN = /var/run +#VARDB = /var/state/dhcp # see rationale in includes/cf/linux.h +#SCRIPT=linux +##--linux-2.2-- + +## SCO +##--sco-- +#CF = cf/sco.h +#PREDEFINES=-DSCO -DBROKEN_ANSI +#BINDIR = /usr/etc +#CLIENTBINDIR=/etc +#ADMMANDIR = /usr/man/cat.ADMN +#ADMMANEXT = .ADMN.Z +#FFMANDIR = /usr/man/cat.SFF +#FFMANEXT = .SFF.Z +#INSTALL = cp +#MANFROM = < +#MANINSTALL = compress +#MANTO = > +#VARRUN = /etc +#VARDB = /etc +#CATMANPAGES= +##--sco-- + +## QNX +##--qnx-- +#CF = cf/qnx.h +#ADMMANDIR = /usr/man/man8 +#ADMMANEXT = .8 +#FFMANDIR = /usr/man/man5 +#FFMANEXT = .5 +#MANCAT = man +#VARRUN = /etc +#COPTS=-w3 -Dlint +#LFLAGS=$(DEBUG) "-Wl,op symfile" -l socket +#MANINSTALL = /bin/true +#INSTALL = cp +#BINDIR = /etc +#CLIENTBINDIR = /etc +##--qnx-- + +## CygWin32 +##--cygwin32-- +#CF = cf/cygwin32.h +#ADMMANDIR = /usr/man/man8 +#ADMMANEXT = .8 +#FFMANDIR = /usr/man/man5 +#FFMANEXT = .5 +#VARRUN = /etc +#MANINSTALL = /bin/true +#INSTALL = cp +#BINDIR = /etc +#CLIENTBINDIR = /etc +#CC=/usr/local/i386-unknown-cygwin32/bin/gcc +#AR=/usr/local/i386-unknown-cygwin32/bin/ar +#AS=/usr/local/i386-unknown-cygwin32/bin/as +#LD=/usr/local/i386-unknown-cygwin32/bin/ld +#NM=/usr/local/i386-unknown-cygwin32/bin/nm +#RANLIB=/usr/local/i386-unknown-cygwin32/bin/ranlib +#STRIP=/usr/local/i386-unknown-cygwin32/bin/strip +##--cygwin32-- + +## IRIX 6.x +##--irix-- +#LIBS = -lbind +#LFLAGS=$(DEBUG) -L/usr/local/lib -Wl,-woff,84 -Wl,-woff,85 -Wl,-woff,134 +#CC=gcc +#COPTS = -I/usr/local/include +#CF = cf/irix.h +#BINDIR = /usr/local/etc +#ADMMANDIR = /usr/local/man/man8 +#ADMMANEXT = .8 +#FFMANDIR = /usr/local/man/man5 +#FFMANEXT = .5 +#MANCAT = man +#INSTALL = install +#MANINSTALL = install +#CHMOD = chmod +#ETC = /etc +#VARRUN = /etc +#VARDB = /usr/local/etc/dhcp +##--irix-- diff --git a/contrib/isc-dhcp/Makefile.dist b/contrib/isc-dhcp/Makefile.dist new file mode 100644 index 000000000000..e2dc4e28e7fb --- /dev/null +++ b/contrib/isc-dhcp/Makefile.dist @@ -0,0 +1,94 @@ +# Makefile.dist +# +# Copyright (c) 1996, 1997 The Internet Software Consortium. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of The Internet Software Consortium nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE INTERNET SOFTWARE CONSORTIUM AND +# CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +# THE INTERNET SOFTWARE CONSORTIUM OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +# OF THE POSSIBILITY OF SUCH DAMAGE. +# + +SUBDIRS= common server client relay + +all: + @for dir in ${SUBDIRS}; do \ + echo "Making all in $$dir"; \ + (cd $$dir; $(MAKE) all) || exit 1; \ + done + @if [ `uname` = Linux ]; then \ + echo; \ + echo " !!!! WARNING !!!!"; \ + echo ; \ + echo "The default location for the dhcpd.leases file has \ +changed!!!"; \ + echo; \ + echo "It is now in /var/state/dhcp. If you are not"; \ + echo "installing this for the first time, please move your"; \ + echo "lease database to the new location before using this"; \ + echo "software."; \ + echo; \ + echo " !!!! WARNING !!!!"; \ + echo; \ + fi + +install: + @for dir in ${SUBDIRS}; do \ + echo "Installing in $$dir"; \ + (cd $$dir; $(MAKE) install) || exit 1; \ + done + @if [ `uname` = Linux ]; then \ + echo; \ + echo " !!!! WARNING !!!!"; \ + echo ; \ + echo "The default location for the dhcpd.leases file has \ +changed!!!"; \ + echo; \ + echo "It is now in /var/state/dhcp. If you are not"; \ + echo "installing this for the first time, please move your"; \ + echo "lease database to the new location before using this"; \ + echo "software."; \ + echo; \ + echo " !!!! WARNING !!!!"; \ + echo; \ + fi + +clean: + @for dir in ${SUBDIRS}; do \ + echo "Cleaning in $$dir"; \ + (cd $$dir; $(MAKE) clean) || exit 1; \ + done + +realclean: + @for dir in ${SUBDIRS}; do \ + echo "Really cleaning in $$dir"; \ + (cd $$dir; $(MAKE) realclean) || exit 1; \ + done + +distclean: + @for dir in ${SUBDIRS}; do \ + echo "Really, really cleaning in $$dir"; \ + (cd $$dir; $(MAKE) distclean) || exit 1; \ + done + @rm -f Makefile diff --git a/contrib/isc-dhcp/client/Makefile.dist b/contrib/isc-dhcp/client/Makefile.dist new file mode 100644 index 000000000000..2109d3977c83 --- /dev/null +++ b/contrib/isc-dhcp/client/Makefile.dist @@ -0,0 +1,136 @@ +# Makefile.dist +# +# Copyright (c) 1996, 1997, 1999 The Internet Software Consortium. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of The Internet Software Consortium nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE INTERNET SOFTWARE CONSORTIUM AND +# CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +# THE INTERNET SOFTWARE CONSORTIUM OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +# OF THE POSSIBILITY OF SUCH DAMAGE. +# + +CATMANPAGES = dhclient.cat8 dhclient.conf.cat5 dhclient-script.cat8 \ + dhclient.leases.cat5 +SEDMANPAGES = dhclient.man8 dhclient.conf.man5 dhclient-script.man8 \ + dhclient.leases.man5 +SRCS = dhclient.c clparse.c +OBJS = dhclient.o clparse.o +PROG = dhclient +MAN = dhclient.8 dhclient.conf.5 dhclient-script.8 dhclient.leases.5 + +DEBUG = -g +INCLUDES = -I.. -I../includes +DHCPLIB = ../common/libdhcp.a +CFLAGS = $(DEBUG) $(PREDEFINES) $(INCLUDES) $(COPTS) + +all: $(PROG) $(CATMANPAGES) + +install: all + for dir in $(CLIENTBINDIR) $(ETC) $(FFMANDIR) $(ADMMANDIR) $(VARDB); \ + do \ + foo=""; \ + for bar in `echo $(DESTDIR)$${dir} |tr / ' '`; do \ + foo=$${foo}/$$bar; \ + if [ ! -d $$foo ]; then \ + mkdir $$foo; \ + chmod 755 $$foo; \ + fi; \ + done; \ + done + $(INSTALL) dhclient $(DESTDIR)$(CLIENTBINDIR) + $(CHMOD) 755 $(DESTDIR)$(CLIENTBINDIR)/dhclient + if [ x$(SCRIPT) = xnone ]; then \ + echo "No client script available."; \ + else \ + $(INSTALL) scripts/$(SCRIPT) $(DESTDIR)$(ETC)/dhclient-script; \ + $(CHMOD) 700 $(DESTDIR)$(ETC)/dhclient-script; \ + fi + $(MANINSTALL) $(MANFROM) dhclient.$(MANCAT)8 $(MANTO) \ + $(DESTDIR)$(ADMMANDIR)/dhclient$(ADMMANEXT) + $(MANINSTALL) $(MANFROM) dhclient-script.$(MANCAT)8 $(MANTO) \ + $(DESTDIR)$(ADMMANDIR)/dhclient-script$(ADMMANEXT) + $(MANINSTALL) $(MANFROM) dhclient.conf.$(MANCAT)5 $(MANTO) \ + $(DESTDIR)$(FFMANDIR)/dhclient.conf$(FFMANEXT) + $(MANINSTALL) $(MANFROM) dhclient.leases.$(MANCAT)5 $(MANTO) \ + $(DESTDIR)$(FFMANDIR)/dhclient.leases$(FFMANEXT) + +clean: + -rm -f $(OBJS) + +realclean: clean + -rm -f $(PROG) $(CATMANPAGES) $(SEDMANPAGES) *~ #* + +distclean: realclean + -rm -f Makefile + +# These should only be done on 4.4 BSD-based systems, since the mandoc +# macros aren't available on older unices. Catted man pages are +# provided in the distribution so that this doesn't become a problem. + +dhclient.cat8: dhclient.man8 + nroff -man dhclient.man8 >dhclient.cat8 + +dhclient.man8: dhclient.8 + sed -e "s#ETCDIR#$(ETC)#g" -e "s#DBDIR#$(VARDB)#g" \ + -e "s#RUNDIR#$(VARRUN)#g" < dhclient.8 >dhclient.man8 + +dhclient-script.cat8: dhclient-script.man8 + nroff -man dhclient-script.man8 >dhclient-script.cat8 + +dhclient-script.man8: dhclient-script.8 + sed -e "s#ETCDIR#$(ETC)#g" -e "s#DBDIR#$(VARDB)#g" \ + -e "s#RUNDIR#$(VARRUN)#g" < dhclient-script.8 \ + >dhclient-script.man8 + +dhclient.conf.man5: dhclient.conf.5 + sed -e "s#ETCDIR#$(ETC)#g" -e "s#DBDIR#$(VARDB)#g" \ + -e "s#RUNDIR#$(VARRUN)#g" < dhclient.conf.5 \ + >dhclient.conf.man5 + +dhclient.conf.cat5: dhclient.conf.man5 + nroff -man dhclient.conf.man5 >dhclient.conf.cat5 + +dhclient.leases.man5: dhclient.leases.5 + sed -e "s#ETCDIR#$(ETC)#g" -e "s#DBDIR#$(VARDB)#g" \ + -e "s#RUNDIR#$(VARRUN)#g" < dhclient.leases.5 \ + >dhclient.leases.man5 + +dhclient.leases.cat5: dhclient.leases.man5 + nroff -man dhclient.leases.man5 >dhclient.leases.cat5 + +dhclient: $(OBJS) $(DHCPLIB) + $(CC) $(LFLAGS) -o $(PROG) $(OBJS) $(DHCPLIB) $(LIBS) + +# Dependencies (semi-automatically-generated) + +dhclient.o: dhclient.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h ../includes/version.h +clparse.o: clparse.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h ../includes/dhctoken.h diff --git a/contrib/isc-dhcp/common/Makefile.dist b/contrib/isc-dhcp/common/Makefile.dist new file mode 100644 index 000000000000..1e3e062cd775 --- /dev/null +++ b/contrib/isc-dhcp/common/Makefile.dist @@ -0,0 +1,206 @@ +# Makefile.dist +# +# Copyright (c) 1996, 1999 The Internet Software Consortium. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of The Internet Software Consortium nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE INTERNET SOFTWARE CONSORTIUM AND +# CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +# THE INTERNET SOFTWARE CONSORTIUM OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +# OF THE POSSIBILITY OF SUCH DAMAGE. +# + +CATMANPAGES = dhcp-options.cat5 +SEDMANPAGES = dhcp-options.man5 +SRC = raw.c parse.c nit.c icmp.c dispatch.c conflex.c upf.c bpf.c socket.c \ + lpf.c packet.c memory.c print.c options.c inet.c convert.c \ + tree.c tables.c hash.c alloc.c errwarn.c inet_addr.c dlpi.c \ + tr.c ethernet.c +OBJ = raw.o parse.o nit.o icmp.o dispatch.o conflex.o upf.o bpf.o socket.o \ + lpf.o packet.o memory.o print.o options.o inet.o convert.o \ + tree.o tables.o hash.o alloc.o errwarn.o inet_addr.o dlpi.o \ + tr.o ethernet.o +MAN = dhcp-options.5 + +DEBUG = -g +INCLUDES = -I.. -I../includes +CFLAGS = $(DEBUG) $(PREDEFINES) $(INCLUDES) $(COPTS) + +all: libdhcp.a $(CATMANPAGES) + +libdhcp.a: $(OBJ) + rm -f libdhcp.a + ar cruv libdhcp.a $(OBJ) + ranlib libdhcp.a + +install: all + for dir in $(FFMANDIR); do \ + foo=""; \ + for bar in `echo $(DESTDIR)$${dir} |tr / ' '`; do \ + foo=$${foo}/$$bar; \ + if [ ! -d $$foo ]; then \ + mkdir $$foo; \ + chmod 755 $$foo; \ + fi; \ + done; \ + done + $(MANINSTALL) $(MANFROM) dhcp-options.$(MANCAT)5 $(MANTO) \ + $(DESTDIR)$(FFMANDIR)/dhcp-options$(FFMANEXT) + + +clean: + -rm -f $(OBJ) + +realclean: clean + -rm -f libdhcp.a *~ #* $(CATMANPAGES) $(SEDMANPAGES) + +distclean: realclean + -rm -f Makefile + +dhcp-options.cat5: dhcp-options.man5 + nroff -man dhcp-options.man5 >dhcp-options.cat5 + +dhcp-options.man5: dhcp-options.5 + sed -e "s#ETCDIR#$(ETC)#g" -e "s#DBDIR#$(VARDB)#g" \ + -e "s#RUNDIR#$(VARRUN)#g" < dhcp-options.5 >dhcp-options.man5 + +# Dependencies (semi-automatically-generated) + +raw.o: raw.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h +parse.o: parse.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h \ + ../includes/dhcp.h ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h ../includes/dhctoken.h +nit.o: nit.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h +icmp.o: icmp.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h ../includes/netinet/ip.h \ + ../includes/netinet/ip_icmp.h +dispatch.o: dispatch.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h \ + conflex.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h ../includes/dhctoken.h +upf.o: upf.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h +bpf.o: bpf.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h ../includes/netinet/ip.h ../includes/netinet/udp.h \ + ../includes/netinet/if_ether.h +socket.o: socket.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h +lpf.o: lpf.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h +packet.o: packet.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h ../includes/netinet/ip.h \ + ../includes/netinet/udp.h ../includes/netinet/if_ether.h +memory.o: memory.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h +print.o: print.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h +options.o: options.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h +inet.o: inet.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h +convert.o: convert.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h +tree.o: tree.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h +tables.o: tables.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h +hash.o: hash.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h +alloc.o: alloc.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h +errwarn.o: errwarn.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h +inet_addr.o: inet_addr.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h +dlpi.o: dlpi.c ../includes/dhcpd.h \ + ../includes/cdefs.h ../includes/osdep.h ../includes/site.h \ + ../includes/cf/netbsd.h ../includes/dhcp.h \ + ../includes/tree.h ../includes/hash.h ../includes/inet.h \ + ../includes/sysconf.h diff --git a/contrib/isc-dhcp/configure b/contrib/isc-dhcp/configure new file mode 100755 index 000000000000..190b3c500854 --- /dev/null +++ b/contrib/isc-dhcp/configure @@ -0,0 +1,100 @@ +#!/bin/sh + +sysname=$1 + +uname=`uname -s` +machine=`uname -m` + +if [ "$sysname" = "" ]; then + case $uname in + AIX) + sysname=aix;; + Rhapsody) + sysname=rhapsody;; + ULTRIX) + sysname=ultrix;; + BSD/OS) + sysname=bsdos;; + OSF1) + if [ $machine = 'alpha' ]; then + sysname=alphaosf + fi;; + Linux) + release=`uname -r` + minor=`echo $release |sed -e 's/[0-9]*\.\([0-9][0-9]*\)\(\..*\)*$/\1/'` + major=`echo $release |sed -e 's/\([0-9][0-9]*\)\..*$/\1/'` + + case $major in + 1) sysname=linux-1 ;; + 2) case $minor in + 0) sysname=linux-2.0 ;; + 1) sysname=linux-2.1 ;; + 2) sysname=linux-2.2 ;; + *) sysname=linux-2.2 ;; + esac;; + esac;; + SunOS) + case `uname -r` in + 4*) sysname=sunos4;; + 5*) + set `which gcc` + if [ $# = 1 ]; then + sysname=sunos5-gcc + else + sysname=sunos5-cc + fi;; + esac;; + NetBSD) + sysname=netbsd;; + FreeBSD) + sysname=freebsd;; + hpux) + sysname=hpux;; + HP-UX) + sysname=hpux;; + QNX) + sysname=qnx;; + NEXTSTEP) + sysname=nextstep;; + esac +fi + +if [ "$sysname" = "" ]; then + echo "UNIX name: $uname machine: $machine" + echo + echo "Unknown system. If this is an SCO system running ODT 3.0 or" + echo "higher, type \`\`./configure sco''. Otherwise, this is a" + echo "configuration that isn't supported or hasn't been tested." + echo + echo "Supported configurations are:" + echo " aix AIX 4.1.5.0" + echo " ultrix ULTRIX 4.2A or higher" + echo " bsdos BSDI BSD/OS 2.1" + echo " alphaosf DEC Alpha OSF/1" + echo " linux Linux" + echo " sunos4 Sunos 4.1.4 (earlier releases may work)" + echo " sunos5-cc Solaris 2.4 or higher with Sun cc" + echo " sunos5-gcc Solaris 2.4 or higher with gcc" + echo " netbsd NetBSD 1.1 or higher" + echo " freebsd FreeBSD" + echo " hpux HP-UX" + echo " qnx QNX 4.2 or higher" + echo " NEXTSTEP NeXTSTEP" + exit 1; +fi + +echo "System Type: $sysname" + +if [ x$major != x ] && [ x$minor != x ]; then + majversubst="-e /^##--majver--/,/^##--majver--/s/MajorVersion/$major/" + minversubst="-e /^##--minver--/,/^##--minver--/s/MinorVersion/$minor/" +fi + +for foo in . client server relay common; do + (sed $majversubst $minversubst \ + -e "/^##--${sysname}--/,/^##--${sysname}--/s/^#//" \ + <Makefile.conf; cat $foo/Makefile.dist) \ + >$foo/Makefile +done + +exit 0 diff --git a/gnu/usr.bin/perl/library/B/Makefile b/gnu/usr.bin/perl/library/B/Makefile new file mode 100644 index 000000000000..fae4d74cc087 --- /dev/null +++ b/gnu/usr.bin/perl/library/B/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +MODULE= B + +.include "../Makefile.inc" +.include <bsd.obj.mk> diff --git a/gnu/usr.bin/perl/library/DB_File/Makefile b/gnu/usr.bin/perl/library/DB_File/Makefile new file mode 100644 index 000000000000..b35ab1022b04 --- /dev/null +++ b/gnu/usr.bin/perl/library/DB_File/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +MODULE= DB_File + +.include "../Makefile.inc" +.include <bsd.obj.mk> diff --git a/gnu/usr.bin/perl/library/Dumper/Makefile b/gnu/usr.bin/perl/library/Dumper/Makefile new file mode 100644 index 000000000000..f10206748fa2 --- /dev/null +++ b/gnu/usr.bin/perl/library/Dumper/Makefile @@ -0,0 +1,7 @@ +# $FreeBSD$ + +MODULE= Dumper +MODULEDIR= Data/Dumper + +.include "../Makefile.inc" +.include <bsd.obj.mk> diff --git a/gnu/usr.bin/perl/library/Errno/Makefile b/gnu/usr.bin/perl/library/Errno/Makefile new file mode 100644 index 000000000000..2210e033b6d2 --- /dev/null +++ b/gnu/usr.bin/perl/library/Errno/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +MODULE= Errno + +.include "../Makefile.inc" +.include <bsd.obj.mk> diff --git a/gnu/usr.bin/perl/library/Fcntl/Makefile b/gnu/usr.bin/perl/library/Fcntl/Makefile new file mode 100644 index 000000000000..d2a0a68f6ebb --- /dev/null +++ b/gnu/usr.bin/perl/library/Fcntl/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +MODULE= Fcntl + +.include "../Makefile.inc" +.include <bsd.obj.mk> diff --git a/gnu/usr.bin/perl/library/IO/Makefile b/gnu/usr.bin/perl/library/IO/Makefile new file mode 100644 index 000000000000..69a7753c3880 --- /dev/null +++ b/gnu/usr.bin/perl/library/IO/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +MODULE= IO + +.include "../Makefile.inc" +.include <bsd.obj.mk> diff --git a/gnu/usr.bin/perl/library/NDBM_File/Makefile b/gnu/usr.bin/perl/library/NDBM_File/Makefile new file mode 100644 index 000000000000..1395f67f8569 --- /dev/null +++ b/gnu/usr.bin/perl/library/NDBM_File/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +MODULE= NDBM_File + +.include "../Makefile.inc" +.include <bsd.obj.mk> diff --git a/gnu/usr.bin/perl/library/Opcode/Makefile b/gnu/usr.bin/perl/library/Opcode/Makefile new file mode 100644 index 000000000000..5497061b89dc --- /dev/null +++ b/gnu/usr.bin/perl/library/Opcode/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +MODULE= Opcode + +.include "../Makefile.inc" +.include <bsd.obj.mk> diff --git a/gnu/usr.bin/perl/library/POSIX/Makefile b/gnu/usr.bin/perl/library/POSIX/Makefile new file mode 100644 index 000000000000..7345909a2f7f --- /dev/null +++ b/gnu/usr.bin/perl/library/POSIX/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +MODULE= POSIX + +.include "../Makefile.inc" +.include <bsd.obj.mk> diff --git a/gnu/usr.bin/perl/library/SDBM_File/Makefile b/gnu/usr.bin/perl/library/SDBM_File/Makefile new file mode 100644 index 000000000000..3695e76c0777 --- /dev/null +++ b/gnu/usr.bin/perl/library/SDBM_File/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +MODULE= SDBM_File + +.include "../Makefile.inc" +.include <bsd.obj.mk> diff --git a/gnu/usr.bin/perl/library/Socket/Makefile b/gnu/usr.bin/perl/library/Socket/Makefile new file mode 100644 index 000000000000..4102086f2368 --- /dev/null +++ b/gnu/usr.bin/perl/library/Socket/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +MODULE= Socket + +.include "../Makefile.inc" +.include <bsd.obj.mk> diff --git a/gnu/usr.bin/perl/library/SysV/Makefile b/gnu/usr.bin/perl/library/SysV/Makefile new file mode 100644 index 000000000000..2386888238cf --- /dev/null +++ b/gnu/usr.bin/perl/library/SysV/Makefile @@ -0,0 +1,7 @@ +# $FreeBSD$ + +MODULE= SysV +MODULEDIR= IPC/SysV + +.include "../Makefile.inc" +.include <bsd.obj.mk> diff --git a/gnu/usr.bin/perl/library/attrs/Makefile b/gnu/usr.bin/perl/library/attrs/Makefile new file mode 100644 index 000000000000..462815b3efbc --- /dev/null +++ b/gnu/usr.bin/perl/library/attrs/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +MODULE= attrs + +.include "../Makefile.inc" +.include <bsd.obj.mk> diff --git a/gnu/usr.bin/perl/library/re/Makefile b/gnu/usr.bin/perl/library/re/Makefile new file mode 100644 index 000000000000..175265163d89 --- /dev/null +++ b/gnu/usr.bin/perl/library/re/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +MODULE= re + +.include "../Makefile.inc" +.include <bsd.obj.mk> diff --git a/lib/libalias/alias_pptp.c b/lib/libalias/alias_pptp.c new file mode 100644 index 000000000000..822cfa61ddff --- /dev/null +++ b/lib/libalias/alias_pptp.c @@ -0,0 +1,279 @@ +/* + * alias_pptp.c + * + * Copyright (c) 2000 Whistle Communications, Inc. + * All rights reserved. + * + * Subject to the following obligations and disclaimer of warranty, use and + * redistribution of this software, in source or object code forms, with or + * without modifications are expressly permitted by Whistle Communications; + * provided, however, that: + * 1. Any and all reproductions of the source or object code must include the + * copyright notice above and the following disclaimer of warranties; and + * 2. No rights are granted, in any manner or form, to use Whistle + * Communications, Inc. trademarks, including the mark "WHISTLE + * COMMUNICATIONS" on advertising, endorsements, or otherwise except as + * such appears in the above copyright notice or in the software. + * + * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO + * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, + * INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * WHISTLE COMMUNICATIONS DOES NOT WARRANT, GUARANTEE, OR MAKE ANY + * REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS OF THE USE OF THIS + * SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY OR OTHERWISE. + * IN NO EVENT SHALL WHISTLE COMMUNICATIONS BE LIABLE FOR ANY DAMAGES + * RESULTING FROM OR ARISING OUT OF ANY USE OF THIS SOFTWARE, INCLUDING + * WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + * PUNITIVE, OR CONSEQUENTIAL DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Erik Salander <erik@whistle.com> + * + * $FreeBSD$ + */ + +/* + Alias_pptp.c performs special processing for PPTP sessions under TCP. + Specifically, watch PPTP control messages and alias the Call ID or the + Peer's Call ID in the appropriate messages. Note, PPTP requires + "de-aliasing" of incoming packets, this is different than any other + TCP applications that are currently (ie. FTP, IRC and RTSP) aliased. + + For Call IDs encountered for the first time, a GRE alias link is created. + The GRE alias link uses the Call ID in place of the original port number. + An alias Call ID is created. + + For this routine to work, the PPTP control messages must fit entirely + into a single TCP packet. This is typically the case, but is not + required by the spec. + + Unlike some of the other TCP applications that are aliased (ie. FTP, + IRC and RTSP), the PPTP control messages that need to be aliased are + guaranteed to remain the same length. The aliased Call ID is a fixed + length field. + + Reference: RFC 2637 + + Initial version: May, 2000 (eds) + +*/ + +/* Includes */ +#include <ctype.h> +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#include <netinet/in_systm.h> +#include <netinet/in.h> +#include <netinet/ip.h> +#include <netinet/tcp.h> + +#include "alias_local.h" + +/* + * PPTP definitions + */ + +struct grehdr /* Enhanced GRE header. */ +{ + u_char gh_recursion:3, /* Recursion control. */ + gh_ssr_flag:1, /* Strict source route present. */ + gh_seq_no_flag:1, /* Sequence number present. */ + gh_key_flag:1, /* Key present. */ + gh_rt_flag:1, /* Routing present. */ + gh_cksum_flag:1; /* Checksum present. */ + u_char gh_version:3, /* GRE version. */ + gh_flags:4, /* Flags. */ + gh_ack_no_flag:1; /* Acknowledgment sequence number present. */ + u_short gh_protocol; /* Protocol type. */ + u_short gh_length; /* Payload length. */ + u_short gh_call_id; /* Call ID. */ + u_int32_t gh_seq_no; /* Sequence number (optional). */ + u_int32_t gh_ack_no; /* Acknowledgment number (optional). */ +}; + +/* The PPTP protocol ID used in the GRE 'proto' field. */ +#define PPTP_GRE_PROTO 0x880b + +/* Bits that must be set a certain way in all PPTP/GRE packets. */ +#define PPTP_INIT_VALUE ((0x2001 << 16) | PPTP_GRE_PROTO) +#define PPTP_INIT_MASK 0xef7fffff + +#define PPTP_MAGIC 0x1a2b3c4d +#define PPTP_CTRL_MSG_TYPE 1 + +enum { + PPTP_StartCtrlConnRequest = 1, + PPTP_StartCtrlConnReply = 2, + PPTP_StopCtrlConnRequest = 3, + PPTP_StopCtrlConnReply = 4, + PPTP_EchoRequest = 5, + PPTP_statoReply = 6, + PPTP_OutCallRequest = 7, + PPTP_OutCallReply = 8, + PPTP_InCallRequest = 9, + PPTP_InCallReply = 10, + PPTP_InCallConn = 11, + PPTP_CallClearRequest = 12, + PPTP_CallDiscNotify = 13, + PPTP_WanErrorNotify = 14, + PPTP_SetLinkInfo = 15, +}; + + /* Message structures */ + struct pptpMsgHead { + u_int16_t length; /* total length */ + u_int16_t msgType; /* PPTP message type */ + u_int32_t magic; /* magic cookie */ + u_int16_t type; /* control message type */ + u_int16_t resv0; /* reserved */ + }; + typedef struct pptpMsgHead *PptpMsgHead; + + struct pptpCallIds { + u_int16_t cid1; /* Call ID field #1 */ + u_int16_t cid2; /* Call ID field #2 */ + }; + typedef struct pptpCallIds *PptpCallId; + +static PptpCallId AliasVerifyPptp(struct ip *, u_int16_t *); + +int +PptpGetCallID(struct ip *pip, + u_short *call_id) +{ + struct grehdr *gr; + + gr = (struct grehdr *)((char *)pip + (pip->ip_hl << 2)); + + /* Check GRE header bits. */ + if ((ntohl(*((u_int32_t *)gr)) & PPTP_INIT_MASK) == PPTP_INIT_VALUE) { + *call_id = gr->gh_call_id; + return 1; + } else + return 0; +}; + +void PptpSetCallID(struct ip *pip, u_short call_id) +{ + struct grehdr *gr; + + gr = (struct grehdr *)((char *)pip + (pip->ip_hl << 2)); + gr->gh_call_id = call_id; +}; + +void +AliasHandlePptpOut(struct ip *pip, /* IP packet to examine/patch */ + struct alias_link *link) /* The PPTP control link */ +{ + struct alias_link *gre_link; + PptpCallId cptr; + u_int16_t ctl_type; /* control message type */ + struct tcphdr *tc; + + /* Verify valid PPTP control message */ + if ((cptr = AliasVerifyPptp(pip, &ctl_type)) == NULL) + return; + + /* Modify certain PPTP messages */ + if ((ctl_type >= PPTP_OutCallRequest) && + (ctl_type <= PPTP_CallDiscNotify)) { + + /* Establish GRE link for address and Call ID found in PPTP Control Msg */ + gre_link = FindPptpOut(GetOriginalAddress(link), GetDestAddress(link), + cptr->cid1); + + if (gre_link != NULL) { + /* alias the Call Id */ + cptr->cid1 = GetAliasPort(gre_link); + + /* Compute TCP checksum for revised packet */ + tc = (struct tcphdr *) ((char *) pip + (pip->ip_hl << 2)); + tc->th_sum = 0; + tc->th_sum = TcpChecksum(pip); + } + } +} + +void +AliasHandlePptpIn(struct ip *pip, /* IP packet to examine/patch */ + struct alias_link *link) /* The PPTP control link */ +{ + struct alias_link *gre_link; + PptpCallId cptr; + u_int16_t *pcall_id; + u_int16_t ctl_type; /* control message type */ + struct tcphdr *tc; + + /* Verify valid PPTP control message */ + if ((cptr = AliasVerifyPptp(pip, &ctl_type)) == NULL) + return; + + /* Modify certain PPTP messages */ + switch (ctl_type) + { + case PPTP_InCallConn: + case PPTP_WanErrorNotify: + case PPTP_SetLinkInfo: + pcall_id = &cptr->cid1; + break; + case PPTP_OutCallReply: + case PPTP_InCallReply: + pcall_id = &cptr->cid2; + break; + default: + return; + break; + } + + /* Find GRE link for address and Call ID found in PPTP Control Msg */ + gre_link = FindPptpIn(GetDestAddress(link), GetAliasAddress(link), + *pcall_id); + + if (gre_link != NULL) { + /* alias the Call Id */ + *pcall_id = GetOriginalPort(gre_link); + + /* Compute TCP checksum for modified packet */ + tc = (struct tcphdr *) ((char *) pip + (pip->ip_hl << 2)); + tc->th_sum = 0; + tc->th_sum = TcpChecksum(pip); + } +} + +PptpCallId +AliasVerifyPptp(struct ip *pip, u_int16_t *ptype) /* IP packet to examine/patch */ +{ + int hlen, tlen, dlen; + PptpMsgHead hptr; + struct tcphdr *tc; + + /* Calculate some lengths */ + tc = (struct tcphdr *) ((char *) pip + (pip->ip_hl << 2)); + hlen = (pip->ip_hl + tc->th_off) << 2; + tlen = ntohs(pip->ip_len); + dlen = tlen - hlen; + + /* Verify data length */ + if (dlen < (sizeof(struct pptpMsgHead) + sizeof(struct pptpCallIds))) + return(NULL); + + /* Move up to PPTP message header */ + hptr = (PptpMsgHead)(((char *) pip) + hlen); + + /* Return the control message type */ + *ptype = ntohs(hptr->type); + + /* Verify PPTP Control Message */ + if ((ntohs(hptr->msgType) != PPTP_CTRL_MSG_TYPE) || + (ntohl(hptr->magic) != PPTP_MAGIC)) + return(NULL); + else + return((PptpCallId)(((char *)hptr) + sizeof(struct pptpMsgHead))); +} diff --git a/lib/libc/gen/strtofflags.3 b/lib/libc/gen/strtofflags.3 new file mode 100644 index 000000000000..10f86c935917 --- /dev/null +++ b/lib/libc/gen/strtofflags.3 @@ -0,0 +1,99 @@ +.\" Copyright (c) 1989, 1991, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)setmode.3 8.2 (Berkeley) 4/28/95 +.\" $FreeBSD$ +.\" +.Dd January 1, 2000 +.Dt STRTOFFLAGS 3 +.Os +.Sh NAME +.Nm fflagstostr , +.Nm strtofflags +.Nd convert between file flag bits and their string names +.Sh LIBRARY +.Lb libc +.Sh SYNOPSIS +.Fd #include <unistd.h> +.Ft char * +.Fn fflagstostr "u_long flags" +.Ft int +.Fn strtofflags "char **stringp" "u_long *setp" "u_long *clrp" +.Sh DESCRIPTION +The +.Fn fflagstostr +function returns a comma separated string of the file flags represented by +.Fa flags . +If no flags are set a zero length string is returned. +.Pp +If memory cannot be allocated for the return value, +.Fn fflagstostr +returns +.Dv NULL . +.Pp +The value returned from +.Fn fflagstostr +is obtained from +.Fn malloc +and should be returned to the system with +.Fn free +when the program is done with it. +.Pp +The +.Fn strtofflags +function takes a string of file flags, as described in +.Xr chflags 1 , +parses it, and returns the 'set' flags and 'clear' flags +such as would be given as arguments to +.Xr chflags 2 . +On success +.Fn strtofflags +returns 0, otherwise it returns non-zero and +.Fa stringp +is left pointing to the offending token. +.Sh ERRORS +The +.Fn fflagstostr +function +may fail and set errno for any of the errors specified for the library +routine +.Xr malloc 3 . +.Sh SEE ALSO +.Xr chflags 1 , +.Xr chflags 2 , +.Xr malloc 3 +.Sh HISTORY +The +.Fn fflagstostr +and +.Fn strtofflags +functions first appeared in +.Fx 4.0 . diff --git a/lib/libc/gen/strtofflags.c b/lib/libc/gen/strtofflags.c new file mode 100644 index 000000000000..4c9e8d562aa8 --- /dev/null +++ b/lib/libc/gen/strtofflags.c @@ -0,0 +1,158 @@ +/*- + * Copyright (c) 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef lint +#if 0 +static char sccsid[] = "@(#)stat_flags.c 8.1 (Berkeley) 5/31/93"; +#else +static const char rcsid[] = + "$FreeBSD$"; +#endif +#endif /* not lint */ + +#include <sys/types.h> +#include <sys/stat.h> + +#include <stddef.h> +#include <stdlib.h> +#include <string.h> + +static struct { + char *name; + u_long flag; + int invert; +} mapping[] = { + /* shorter names per flag first, all prefixed by "no" */ + { "nosappnd", SF_APPEND, 0 }, + { "nosappend", SF_APPEND, 0 }, + { "noarch", SF_ARCHIVED, 0 }, + { "noarchived", SF_ARCHIVED, 0 }, + { "noschg", SF_IMMUTABLE, 0 }, + { "noschange", SF_IMMUTABLE, 0 }, + { "nosimmutable", SF_IMMUTABLE, 0 }, + { "nosunlnk", SF_NOUNLINK, 0 }, + { "nosunlink", SF_NOUNLINK, 0 }, + { "nouappnd", UF_APPEND, 0 }, + { "nouappend", UF_APPEND, 0 }, + { "nouchg", UF_IMMUTABLE, 0 }, + { "nouchange", UF_IMMUTABLE, 0 }, + { "nouimmutable", UF_IMMUTABLE, 0 }, + { "nodump", UF_NODUMP, 1 }, + { "noopaque", UF_OPAQUE, 0 }, + { "nouunlnk", UF_NOUNLINK, 0 }, + { "nouunlink", UF_NOUNLINK, 0 } +}; +#define longestflaglen 12 +#define nmappings (sizeof(mapping) / sizeof(mapping[0])) + +/* + * fflagstostr -- + * Convert file flags to a comma-separated string. If no flags + * are set, return the empty string. + */ +char * +fflagstostr(flags) + u_long flags; +{ + char *string; + char *sp, *dp; + u_long setflags; + int i; + + if ((string = (char *)malloc(nmappings * (longestflaglen + 1))) == NULL) + return (NULL); + + setflags = flags; + dp = string; + for (i = 0; i < nmappings; i++) { + if (setflags & mapping[i].flag) { + if (dp > string) + *dp++ = ','; + for (sp = mapping[i].invert ? mapping[i].name : + mapping[i].name + 2; *sp; *dp++ = *sp++) ; + setflags &= ~mapping[i].flag; + } + } + *dp = '\0'; + return (string); +} + +/* + * strtofflags -- + * Take string of arguments and return file flags. Return 0 on + * success, 1 on failure. On failure, stringp is set to point + * to the offending token. + */ +int +strtofflags(stringp, setp, clrp) + char **stringp; + u_long *setp, *clrp; +{ + char *string, *p; + int i; + + if (setp) + *setp = 0; + if (clrp) + *clrp = 0; + string = *stringp; + while ((p = strsep(&string, "\t ,")) != NULL) { + *stringp = p; + if (*p == '\0') + continue; + for (i = 0; i < nmappings; i++) { + if (strcmp(p, mapping[i].name + 2) == 0) { + if (mapping[i].invert) { + if (clrp) + *clrp |= mapping[i].flag; + } else { + if (setp) + *setp |= mapping[i].flag; + } + break; + } else if (strcmp(p, mapping[i].name) == 0) { + if (mapping[i].invert) { + if (setp) + *setp |= mapping[i].flag; + } else { + if (clrp) + *clrp |= mapping[i].flag; + } + break; + } + } + if (i == nmappings) + return 1; + } + return 0; +} diff --git a/sys/alpha/alpha/api_up1000.c b/sys/alpha/alpha/api_up1000.c new file mode 100644 index 000000000000..26e8e2fc1192 --- /dev/null +++ b/sys/alpha/alpha/api_up1000.c @@ -0,0 +1,127 @@ +/*- + * Copyright (c) 2000 Andrew Gallatin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include "opt_ddb.h" +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/kernel.h> +#include <sys/module.h> +#include <sys/bus.h> +#include <machine/intr.h> + +#include <sys/termios.h> + +#include <machine/rpb.h> +#include <machine/cpuconf.h> +#include <machine/clock.h> +#include <pci/pcireg.h> +#include <pci/pcivar.h> +#include <alpha/pci/irongatereg.h> +#include <alpha/pci/irongatevar.h> + +#include "sio.h" +#include "sc.h" + +#ifndef CONSPEED +#define CONSPEED TTYDEF_SPEED +#endif +static int comcnrate = CONSPEED; + +void api_up1000_init __P((void)); +static void api_up1000_cons_init __P((void)); + +extern int siocnattach __P((int, int)); +extern int siogdbattach __P((int, int)); +extern int sccnattach __P((void)); + +void +api_up1000_init() +{ + platform.family = "UP1000"; + + if ((platform.model = alpha_dsr_sysname()) == NULL) { + /* XXX Don't know the system variations, yet. */ + platform.model = alpha_unknown_sysname(); + } + + platform.iobus = "irongate"; + platform.cons_init = api_up1000_cons_init; +} + +extern int comconsole; + +static void +api_up1000_cons_init() +{ + struct ctb *ctb; + + irongate_init(); +#ifdef DDB + siogdbattach(0x2f8, 57600); +#endif + + ctb = (struct ctb *)(((caddr_t)hwrpb) + hwrpb->rpb_ctb_off); + + switch (ctb->ctb_term_type) { + case 2: + /* serial console ... */ + /* XXX */ + { + /* + * Delay to allow PROM putchars to complete. + * FIFO depth * character time, + * character time = (1000000 / (defaultrate / 10)) + */ + DELAY(160000000 / comcnrate); + comconsole = 0; + if (siocnattach(0x3f8, comcnrate)) + panic("can't init serial console"); + + break; + } + + case 3: + /* display console ... */ + /* XXX */ +#if NSC > 0 + sccnattach(); +#else + panic("not configured to use display && keyboard console"); +#endif + break; + + default: + printf("ctb->ctb_term_type = 0x%lx\n", ctb->ctb_term_type); + printf("ctb->ctb_turboslot = 0x%lx\n", ctb->ctb_turboslot); + + panic("consinit: unknown console type %ld\n", + ctb->ctb_term_type); + } +} + + diff --git a/sys/alpha/pci/irongate.c b/sys/alpha/pci/irongate.c new file mode 100644 index 000000000000..296d09dcd4a0 --- /dev/null +++ b/sys/alpha/pci/irongate.c @@ -0,0 +1,420 @@ +/*- + * Copyright (c) 2000 Andrew Gallatin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include "opt_cpu.h" + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/kernel.h> +#include <sys/module.h> +#include <sys/bus.h> +#include <machine/bus.h> +#include <sys/rman.h> +#include <sys/malloc.h> + +#include <pci/pcivar.h> +#include <pci/pcireg.h> +#include <alpha/isa/isavar.h> +#include <alpha/pci/irongatereg.h> +#include <alpha/pci/irongatevar.h> +#include <alpha/pci/pcibus.h> +#include <machine/bwx.h> +#include <machine/intr.h> +#include <machine/intrcnt.h> +#include <machine/cpuconf.h> +#include <machine/rpb.h> +#include <machine/resource.h> +#include <machine/sgmap.h> + +#include <vm/vm.h> +#include <vm/vm_page.h> + +#define KV(pa) ALPHA_PHYS_TO_K0SEG(pa) + +static devclass_t irongate_devclass; +static device_t irongate0; /* XXX only one for now */ + +struct irongate_softc { + int junk; /* no softc */ +}; + +#define IRONGATE_SOFTC(dev) (struct irongate_softc*) device_get_softc(dev) + +static alpha_chipset_inb_t irongate_inb; +static alpha_chipset_inw_t irongate_inw; +static alpha_chipset_inl_t irongate_inl; +static alpha_chipset_outb_t irongate_outb; +static alpha_chipset_outw_t irongate_outw; +static alpha_chipset_outl_t irongate_outl; +static alpha_chipset_readb_t irongate_readb; +static alpha_chipset_readw_t irongate_readw; +static alpha_chipset_readl_t irongate_readl; +static alpha_chipset_writeb_t irongate_writeb; +static alpha_chipset_writew_t irongate_writew; +static alpha_chipset_writel_t irongate_writel; +static alpha_chipset_maxdevs_t irongate_maxdevs; +static alpha_chipset_cfgreadb_t irongate_cfgreadb; +static alpha_chipset_cfgreadw_t irongate_cfgreadw; +static alpha_chipset_cfgreadl_t irongate_cfgreadl; +static alpha_chipset_cfgwriteb_t irongate_cfgwriteb; +static alpha_chipset_cfgwritew_t irongate_cfgwritew; +static alpha_chipset_cfgwritel_t irongate_cfgwritel; +static alpha_chipset_addrcvt_t irongate_cvt_dense, irongate_cvt_bwx; + +static alpha_chipset_read_hae_t irongate_read_hae; +static alpha_chipset_write_hae_t irongate_write_hae; + +static alpha_chipset_t irongate_chipset = { + irongate_inb, + irongate_inw, + irongate_inl, + irongate_outb, + irongate_outw, + irongate_outl, + irongate_readb, + irongate_readw, + irongate_readl, + irongate_writeb, + irongate_writew, + irongate_writel, + irongate_maxdevs, + irongate_cfgreadb, + irongate_cfgreadw, + irongate_cfgreadl, + irongate_cfgwriteb, + irongate_cfgwritew, + irongate_cfgwritel, + irongate_cvt_dense, + irongate_cvt_bwx, + irongate_read_hae, + irongate_write_hae, +}; + +static u_int8_t +irongate_inb(u_int32_t port) +{ + alpha_mb(); + return ldbu(KV(IRONGATE_IO + port)); +} + +static u_int16_t +irongate_inw(u_int32_t port) +{ + alpha_mb(); + return ldwu(KV(IRONGATE_IO + port)); +} + +static u_int32_t +irongate_inl(u_int32_t port) +{ + alpha_mb(); + return ldl(KV(IRONGATE_IO + port)); +} + +static void +irongate_outb(u_int32_t port, u_int8_t data) +{ + stb(KV(IRONGATE_IO + port), data); + alpha_mb(); +} + +static void +irongate_outw(u_int32_t port, u_int16_t data) +{ + stw(KV(IRONGATE_IO + port), data); + alpha_mb(); +} + +static void +irongate_outl(u_int32_t port, u_int32_t data) +{ + stl(KV(IRONGATE_IO + port), data); + alpha_mb(); +} + +static u_int8_t +irongate_readb(u_int32_t pa) +{ + alpha_mb(); + return ldbu(KV(IRONGATE_MEM + pa)); +} + +static u_int16_t +irongate_readw(u_int32_t pa) +{ + alpha_mb(); + return ldwu(KV(IRONGATE_MEM + pa)); +} + +static u_int32_t +irongate_readl(u_int32_t pa) +{ + alpha_mb(); + return ldl(KV(IRONGATE_MEM + pa)); +} + +static void +irongate_writeb(u_int32_t pa, u_int8_t data) +{ + stb(KV(IRONGATE_MEM + pa), data); + alpha_mb(); +} + +static void +irongate_writew(u_int32_t pa, u_int16_t data) +{ + stw(KV(IRONGATE_MEM + pa), data); + alpha_mb(); +} + +static void +irongate_writel(u_int32_t pa, u_int32_t data) +{ + stl(KV(IRONGATE_MEM + pa), data); + alpha_mb(); +} + +static int +irongate_maxdevs(u_int b) +{ + return 12; /* XXX */ +} + +static void +irongate_clear_abort(void) +{ + alpha_mb(); + alpha_pal_draina(); +} + +static int +irongate_check_abort(void) +{ + alpha_pal_draina(); + alpha_mb(); + + return 0; +} + +#define IRONGATE_CFGADDR(b, s, f, r) \ + KV(IRONGATE_CONF | ((b) << 16) | ((s) << 11) | ((f) << 8) | (r)) + +#define CFGREAD(h, b, s, f, r, op, width, type) \ + vm_offset_t va; \ + type data; \ + va = IRONGATE_CFGADDR(b, s, f, r); \ + irongate_clear_abort(); \ + if (badaddr((caddr_t)va, width)) { \ + irongate_check_abort(); \ + return ~0; \ + } \ + data = ##op##(va); \ + if (irongate_check_abort()) \ + return ~0; \ + return data; + +#define CFWRITE(h, b, s, f, r, data, op, width) \ + vm_offset_t va; \ + va = IRONGATE_CFGADDR(b, s, f, r); \ + irongate_clear_abort(); \ + if (badaddr((caddr_t)va, width)) \ + return; \ + ##op##(va, data); \ + irongate_check_abort(); + + + + +static u_int8_t +irongate_cfgreadb(u_int h, u_int b, u_int s, u_int f, u_int r) +{ + CFGREAD(h, b, s, f, r, ldbu, 1, u_int8_t) +} + +static u_int16_t +irongate_cfgreadw(u_int h, u_int b, u_int s, u_int f, u_int r) +{ + CFGREAD(h, b, s, f, r, ldwu, 2, u_int16_t) +} + +static u_int32_t +irongate_cfgreadl(u_int h, u_int b, u_int s, u_int f, u_int r) +{ + CFGREAD(h, b, s, f, r, ldl, 4, u_int32_t) +} + +static void +irongate_cfgwriteb(u_int h, u_int b, u_int s, u_int f, u_int r, u_int8_t data) +{ + CFWRITE(h, b, s, f, r, data, stb, 1) +} + +static void +irongate_cfgwritew(u_int h, u_int b, u_int s, u_int f, u_int r, u_int16_t data) +{ + CFWRITE(h, b, s, f, r, data, stw, 2) +} + +static void +irongate_cfgwritel(u_int h, u_int b, u_int s, u_int f, u_int r, u_int32_t data) +{ + CFWRITE(h, b, s, f, r, data, stl, 4) +} + + +vm_offset_t +irongate_cvt_bwx(vm_offset_t addr) +{ + addr &= 0xffffffffUL; + return (KV(addr | IRONGATE_MEM)); +} + +vm_offset_t +irongate_cvt_dense(vm_offset_t addr) +{ + return irongate_cvt_bwx(addr); +} + + +/* + * There doesn't appear to be an hae on this platform + */ + + +static u_int64_t +irongate_read_hae(void) +{ + return 0; +} + +static void +irongate_write_hae(u_int64_t hae) +{ +} + +static int irongate_probe(device_t dev); +static int irongate_attach(device_t dev); + +static device_method_t irongate_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, irongate_probe), + DEVMETHOD(device_attach, irongate_attach), + + /* Bus interface */ + DEVMETHOD(bus_print_child, bus_generic_print_child), + DEVMETHOD(bus_alloc_resource, pci_alloc_resource), + DEVMETHOD(bus_release_resource, pci_release_resource), + DEVMETHOD(bus_activate_resource, pci_activate_resource), + DEVMETHOD(bus_deactivate_resource, pci_deactivate_resource), + DEVMETHOD(bus_setup_intr, isa_setup_intr), + DEVMETHOD(bus_teardown_intr, isa_teardown_intr), + + { 0, 0 } +}; + +static driver_t irongate_driver = { + "irongate", + irongate_methods, + sizeof(struct irongate_softc), +}; + +void +irongate_init() +{ + static int initted = 0; + + if (initted) return; + initted = 1; + + chipset = irongate_chipset; + alpha_XXX_dmamap_or = 0UL; + + if (platform.pci_intr_init) + platform.pci_intr_init(); +} + +static int +irongate_probe(device_t dev) +{ + + if (irongate0) + return ENXIO; + irongate0 = dev; + device_set_desc(dev, "AMD 751 Core Logic chipset"); + pci_init_resources(); + isa_init_intr(); + device_add_child(dev, "pcib", 0); + return 0; +} + + + +static int +irongate_attach(device_t dev) +{ + u_int8_t value; + pcicfgregs southbridge; + + + irongate_init(); + + if (!platform.iointr) /* XXX */ + set_iointr(alpha_dispatch_intr); + + snprintf(chipset_type, sizeof(chipset_type), "irongate"); + chipset_bwx = 1; + + chipset_ports = IRONGATE_IO; + chipset_memory = IRONGATE_MEM; + chipset_dense = IRONGATE_MEM; + /* no s/g support in this chipset, must use bounce-buffers */ + chipset.sgmap = NULL; + + /* + * XXX -- The SRM console doesn't properly initialize + * the AcerLabs M1533C southbridge. We must turn off 32-bit + * DMA support. + */ + + southbridge.hose = 0; + southbridge.bus = 0; + southbridge.slot = 7; + southbridge.func = 0; + if ((0x153310b9 == pci_cfgread(&southbridge, PCIR_DEVVENDOR, 4))) { + value = (u_int8_t)pci_cfgread(&southbridge, 0x42, 1); + value &= ~0x40; + pci_cfgwrite(&southbridge, 0x42, 0, 1); + } + + bus_generic_attach(dev); + + return 0; +} + +DRIVER_MODULE(irongate, root, irongate_driver, irongate_devclass, 0, 0); + diff --git a/sys/alpha/pci/irongate_pci.c b/sys/alpha/pci/irongate_pci.c new file mode 100644 index 000000000000..e8cf2917b819 --- /dev/null +++ b/sys/alpha/pci/irongate_pci.c @@ -0,0 +1,95 @@ +/*- + * Copyright (c) 2000 Andrew Gallatin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/kernel.h> +#include <sys/module.h> +#include <sys/malloc.h> +#include <sys/bus.h> +#include <machine/bus.h> +#include <machine/md_var.h> +#include <sys/rman.h> +#include <pci/pcivar.h> +#include <alpha/pci/irongatereg.h> +#include <alpha/pci/irongatevar.h> + + +static devclass_t pcib_devclass; + + +static int +irongate_pcib_probe(device_t dev) +{ + + device_set_desc(dev, "AMD 751 PCI host bus adapter"); + + device_add_child(dev, "pci", -1); + + return 0; +} + +static int +irongate_pcib_read_ivar(device_t dev, device_t child, int which, u_long *result) +{ + if (which == PCIB_IVAR_HOSE) { + *result = 0; + return 0; + } + return ENOENT; +} + +static device_method_t irongate_pcib_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, irongate_pcib_probe), + DEVMETHOD(device_attach, bus_generic_attach), + + /* Bus interface */ + DEVMETHOD(bus_print_child, bus_generic_print_child), + DEVMETHOD(bus_read_ivar, irongate_pcib_read_ivar), + DEVMETHOD(bus_alloc_resource, bus_generic_alloc_resource), + DEVMETHOD(bus_release_resource, bus_generic_release_resource), + DEVMETHOD(bus_activate_resource, bus_generic_activate_resource), + DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource), + DEVMETHOD(bus_setup_intr, bus_generic_setup_intr), + DEVMETHOD(bus_teardown_intr, bus_generic_teardown_intr), + + { 0, 0 } +}; + + +static driver_t irongate_pcib_driver = { + "pcib", + irongate_pcib_methods, + 1, +}; + + +DRIVER_MODULE(pcib, irongate, irongate_pcib_driver, pcib_devclass, 0, 0); + + diff --git a/sys/alpha/pci/irongatereg.h b/sys/alpha/pci/irongatereg.h new file mode 100644 index 000000000000..0d10d1514717 --- /dev/null +++ b/sys/alpha/pci/irongatereg.h @@ -0,0 +1,43 @@ +/*- + * Copyright (c) 2000 Andrew Gallatin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * AMD-751 Chipset registers and constants. + * + */ + + +/* + * memory / i/o space macros + * + */ + +#define IRONGATE_MEM 0x10000000000UL +#define IRONGATE_IACK_SC 0x101F8000000UL +#define IRONGATE_IO 0x101FC000000UL +#define IRONGATE_CONF 0x101FE000000UL diff --git a/sys/alpha/pci/irongatevar.h b/sys/alpha/pci/irongatevar.h new file mode 100644 index 000000000000..31012d97f8d5 --- /dev/null +++ b/sys/alpha/pci/irongatevar.h @@ -0,0 +1,30 @@ +/*- + * Copyright (c) 2000 Andrew Gallatin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +extern void irongate_init(void); + diff --git a/sys/boot/common/loader.8 b/sys/boot/common/loader.8 new file mode 100644 index 000000000000..8569709779c9 --- /dev/null +++ b/sys/boot/common/loader.8 @@ -0,0 +1,801 @@ +.\" Copyright (c) 1999 Daniel C. Sobral +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.\" Note: The date here should be updated whenever a non-trivial +.\" change is made to the manual page. +.Dd March 14, 1999 +.Dt LOADER 8 +.Os +.Sh NAME +.Nm loader +.Nd kernel bootstrapping final stage +.Sh DESCRIPTION +The program called +.Nm +is the final stage of FreeBSD's kernel bootstrapping process. +On IA32 (i386) architectures, it is a +.Pa BTX +client. +It is linked statically to +.Xr libstand 3 +and usually located in the directory +.Pa /boot . +.Pp +It provides a scripting language that can be used to +automate tasks, do pre-configuration or assist in recovery +procedures. +This scripting language is roughly divided in +two main components. +The smaller one is a set of commands +designed for direct use by the casual user, called "builtin +commands" for historical reasons. +The main drive behind these commands is user-friendlyness. +The bigger component is an +.Tn ANS +Forth compatible Forth interpreter based on ficl, by +.An John Sadler . +.Pp +During initialization, +.Nm +will probe for a console and set the +.Va console +variable, or set it to serial console +.Pq Dq comconsole +if the previous boot stage used that. +Then, devices are probed, +.Va currdev +and +.Va loaddev +are set, and +.Va LINES +is set to 24. +Next, +.Tn FICL +is initialized, the builtin words are added to its vocabulary, and +.Pa /boot/boot.4th +will be processed if it exists. +No disk switching is possible while that file is being read. +The inner interpreter +.Nm +will use with +.Tn FICL +is then set to +.Ic interpret , +which is +.Tn FICL Ns 's +default. +After that, +.Pa /boot/loader.rc +is processed if available, and, failing that, +.Pa /boot/boot.conf +will be read for historical reasons. +These files are processed through the +.Ic include +command, which read all of them into memory before processing them, +making disk changes possible. +.Pp +At this point, if an +.Ic autoboot +has not been tried, and if +.Va autoboot_delay +is not set to +.Dq NO +(not case sensitive), then an +.Ic autoboot +will be tried. +If the system gets past this point, +.Va prompt +will be set and +.Nm +will engage interactive mode. +.Sh BUILTIN COMMANDS +.Nm Loader Ns No 's +builtin commands take its parameters from the command line. +Presently, +the only way to call them from a script is by using +.Pa evaluate +on a string. +If an error condition occurs, an exception will be generated, +which can be intercepted using +.Tn ANS +Forth exception handling +words. +If not intercepted, an error message will be displayed and +the interpreter's state will be reset, emptying the stack and restoring +interpreting mode. +.Pp +The builtin commands available are: +.Pp +.Bl -tag -width Ds -compact -offset indent +.It Ic autoboot Op Ar seconds +Proceeds to bootstrap the system after a number of seconds, if not +interrupted by the user. +Displays a countdown prompt +warning the user the system is about to be booted, +unless interrupted by a key press. +The kernel will be loaded first if necessary. +Defaults to 10 seconds. +.Pp +.It Ic bcachestat +Displays statistics about disk cache usage. +For depuration only. +.Pp +.It Ic boot +.It Ic boot Ar kernelname Op Cm ... +.It Ic boot Fl flag Cm ... +Immediately proceeds to bootstrap the system, loading the kernel +if necessary. +Any flags or arguments are passed to the kernel, but they +must precede the kernel name, if a kernel name is provided. +.Pp +.It Ic echo Xo +.Op Fl n +.Op Aq message +.Xc +Displays a text on the screen. +A new line will be printed unless +.Fl n +is specified. +.Pp +.It Ic heap +Displays memory usage statistics. +For debugging purposes only. +.Pp +.It Ic help Op topic Op subtopic +Shows help messages read from +.Pa /boot/loader.help . +The special topic +.Em index +will list the topics available. +.Pp +.It Ic include Ar file Op Ar +Process script files. +Each file is, at a turn, completely read into memory, +and then have each of its lines passed to the command line interpreter. +If any error is returned by the interpreter, the include +commands aborts immediately, without reading any other files, and +returns an error itself (see +.Sx ERRORS ) . +.Pp +.It Ic load Xo +.Op Fl t Ar type +.Ar file Cm ... +.Xc +Loads a kernel, kernel loadable module (kld), or a file of opaque +contents tagged as being of the type +.Ar type . +Kernel and modules can be either in a.out or elf format. +Any arguments passed after the name of the file to be loaded +will be passed as arguments to that file. +Notice, though, that, at the present, this does not work for the kernel. +.Pp +.It Ic ls Xo +.Op Fl l +.Op Ar path +.Xc +Displays a listing of files in the directory +.Ar path , +or the root directory if +.Ar path +is not specified. +If +.Fl l +is specified, file sizes will be shown too. +.Pp +.It Ic lsdev Op Fl v +Lists all of the devices from which it may be possible to load modules. +If +.Fl v +is specified, more details are printed. +.Pp +.It Ic lsmod Op Fl v +Displays loaded modules. +If +.Fl v +is specified, more details are shown. +.Pp +.It Ic more Ar file Op Ar +Display the files specified, with a pause at each +.Va LINES +displayed. +.Pp +.It Ic pnpscan Op Fl v +Scans for Plug-and-Play devices. +This is not functional at the present. +.Pp +.It Ic read Xo +.Op Fl t Ar seconds +.Op Fl p Ar prompt +.Op Va variable +.Xc +Reads a line of input from the terminal, storing it in +.Va variable +if specified. +A timeout can be specified with +.Fl t , +though it will be canceled at the first key pressed. +A prompt may also be displayed through the +.Fl p +flag. +.Pp +.It Ic reboot +Immediately reboots the system. +.Pp +.It Ic set Ar variable +.It Ic set Ar variable Ns = Ns Ar value +Set loader's environment variables. +.Pp +.It Ic show Op Va variable +Displays the specified variable's value, or all variables and their +values if +.Va variable +is not specified. +.Pp +.It Ic unload +Remove all modules from memory. +.Pp +.It Ic unset Va variable +Removes +.Va variable +from the environment. +.Pp +.It Ic \&? +Same as +.Dq help index . +.Pp +.El +.Ss BUILTIN ENVIRONMENT VARIABLES +The +.Nm +has actually two different kinds of +.Sq environment +variables. +There are ANS Forth's +.Em environmental queries , +and a separate space of environment variables used by builtins, which +are not directly available to Forth words. +It is the later ones that this session covers. +.Pp +Environment variables can be set and unset through the use of the +.Ic set +and +.Ic unset +builtins, and have their value interactively examined through the +use of the +.Ic show +builtin. +Their values can also be accessed as described in +.Sx BUILTIN PARSER . +.Pp +Notice that this environment variables are not inherited by any shell +after the system has been booted. +.Pp +A few variables are set automatically by +.Nm loader . +Others can affect either +.Nm +or kernel's behavior at boot. +While some of these may require a value, +others define behavior just by being set. +These are described below. +.Bl -tag -width bootfile -offset indent +.It Va autoboot_delay +Number of seconds +.Ic autoboot +will wait before booting. +If this variable is not defined, +.Ic autoboot +will default to 10 seconds. +.Pp +If set to +.Dq NO , +no +.Ic autoboot +will be automatically attempted after processing +.Pa /boot/loader.rc , +though explict +.Ic autoboot Ns 's +will be processed normally, defaulting to 10 seconds delay. +.It Va boot_askname +Instructs the kernel to prompt the user for the name of the root device +when the kernel is booted. +.It Va boot_ddb +Instructs the kernel to start in the DDB debugger, rather than +proceeding to initialise when booted. +.It Va boot_gdb +Selects gdb-remote mode for the kernel debugger by default. +.It Va boot_single +Prevents the kernel from initiating a multi-user startup, single-user +mode will be entered when the kernel has finished device probes. +.It Va boot_userconfig +Requests that the kernel's interactive device configuration program +be run when the kernel is booted. +.It Va boot_verbose +Setting this variable causes extra debugging information to be printed +by the kernel during the boot phase. +.It Va bootfile +List of semicolon-separated search path for bootable kernels. +The default is +.Li Dq kernel;kernel.old . +.It Va console +Defines the current console. +.It Va currdev +Selects the default device. +Syntax for devices is odd. +.It Va init_path +Sets the list of binaries which the kernel will try to run as initial +process. +The default is +.Li Dq /sbin/init:/sbin/oinit:/sbin/init.bak:/stand/sysinstall . +.It Va interpret +Has the value +.Li Dq ok +if the Forth's current state is interpreting. +.It Va LINES +Define the number of lines on the screen, to be used by the pager. +.It Va module_path +Sets the list of directories which will be searched in for modules +named in a load command or implicitly required by a dependancy. +The default value for this variable is +.Li Dq /;/boot;/modules . +.It Va num_ide_disks +Sets the number of IDE disks as a work around for some problems in +finding the root disk at boot. +This has been deprecated in favour of +.Va root_disk_unit . +.It Va prompt +Value of +.Nm Ns No 's +prompt. +Defaults to +.Li Dq "${currdev}>" . +.It Va root_disk_unit +If the code which detects the disk unit number for the root disk is +confused, eg. by a mix of SCSI and IDE disks, or IDE disks with +gaps in the sequence (eg. no primary slave), the unit number can +be forced by setting this variable. +.It Va rootdev +By default the value of +.Va currdev +is used to set the root filesystem +when the kernel is booted. +This can be overridden by setting +.Va rootdev +explicitly. +.El +.Pp +Other variables are used to override kernel tunable parameters. +The following tunables are available: +.Bl -tag -width Va -offset indent +.It Va kern.ipc.nmbclusters +Set the number of mbuf clusters to be allocated. +The value cannot be set below the default +determined when the kernel was compiled. +Modifies +.Va NMBCLUSTERS . +.It Va kern.vm.kmem.size +Sets the size of kernel memory (bytes). +This overrides completely the value +determined when the kernel was compiled. +Modifies +.Va VM_KMEM_SIZE . +.It Va machdep.pccard.pcic_irq +Overrides the IRQ normally assigned to a PCCARD controller. +Typically the first available interrupt will be allocated, +which may conflict with other hardware. +If this value is set to 0, +an interrupt will not be assigned +and the controller will operate in polled mode only. +.It Va net.inet.tcp.tcbhashsize +Overrides the compile-time set value of +.Va TCBHASHSIZE +or the preset default of 512. +Must be a power of 2. +.El +.Ss BUILTIN PARSER +When a builtin command is executed, the rest of the line is taken +by it as arguments, and it is processed by a special parser which +is not used for regular Forth commands. +.Pp +This special parser applies the following rules to the parsed text: +.Pp +.Bl -enum +.It +All backslash characters are preprocessed. +.Bl -bullet +.It +\eb , \ef , \er , \en and \et are processed as in C. +.It +\es is converted to a space. +.It +\ev is converted to +.Tn ASCII +11. +.It +\ez is just skipped. +Useful for things like +.Dq \e0xf\ez\e0xf . +.It +\e0xN and \e0xNN are replaced by the hex N or NN. +.It +\eNNN is replaced by the octal NNN +.Tn ASCII +character. +.It +\e" , \e' and \e$ will escape these characters, preventing them from +receiving special semantics on the step 2 described below. +.It +\e\e will be replaced with a single \e . +.It +In any other occurance, backslash will just be removed. +.El +.It +Every string between non-escaped quotes or double-quotes will be treated +as a single word for the purposes of the remaining steps. +.It +Replace any +.Li $VARIABLE +or +.Li ${VARIABLE} +with the value of the environemnt variable +.Va VARIABLE . +.It +Passes multiple space-delimited arguments to the builtin command called. +Spaces can also be escaped through the use of \e\e . +.El +.Pp +An exception to this parsing rule exists, and is described in +.Sx BUILTINS AND FORTH . +.Ss BUILTINS AND FORTH +All builtin words are state-smart, immediate words. +If interpreted, they behave exactly as described previously. +If they are compiled, though, +they extract their arguments from the stack instead of the command line. +.Pp +If compiled, the builtin words expect to find, at execution time, the +following parameters on the stack: +.D1 Ar addrN lenN ... addr2 len2 addr1 len1 N +where +.Ar addrX lenX +are strings which will compose the command line that will be parsed +into the builtin's arguments. +Internally, these strings are concatenated in from 1 to N, +with a space put between each one. +.Pp +If no arguments are passed, a 0 +.Em must +be passed, even if the builtin accepts no arguments. +.Pp +While this behavior has benefits, it has its trade-offs. +If the execution token of a builtin is acquired (through +.Ic No ' +or +.Ic No ['] ) , +and then passed to +.Ic catch +or +.Ic execute , +the builtin behavior will depend on the system state +.Bf Em +at the time +.Ic catch +or +.Ic execute +is processed +.Ef +\&! This is particular annoying for programs that want or need to +treat exceptions. +In this case, it is recommended the use of a proxy. +For example: +.Dl : (boot) boot ; +.Sh FICL +.Tn FICL +is a Forth interpreter written in C, in the form of a forth +virtual machine library that can be called by C functions and vice +versa. +.Pp +In +.Nm No , +each line read interactively is then fed to +.Tn FICL , +which may call +.Nm +back to execute the builtin words. +The builtin +.Ic include +will also feed +.Tn FICL , +one line at a time. +.Pp +The words available to +.Tn FICL +can be classified in four groups. +The +.Tn ANS +Forth standard words, extra +.Tn FICL +words, extra +.Os +words, and the builtin commands. +The later were already described. +The +.Tn ANS +Forth standard words are listed in the +.Sx STANDARDS +section. +The words falling in the two other groups are described in the +following subsections. +.Ss FICL EXTRA WORDS +.Bl -tag -width wid-set-super -offset indent +.It Ic .env +.It Ic .ver +.It Ic -roll +.It Ic 2constant +.It Ic >name +.It Ic body> +.It Ic compare +This the STRING word set's +.Ic compare . +.It Ic compile-only +.It Ic endif +.It Ic forget-wid +.It Ic parse-word +.It Ic sliteral +This is the STRING word set's +.Ic sliteral . +.It Ic wid-set-super +.It Ic w@ +.It Ic w! +.It Ic x. +.It Ic empty +.It Ic cell- +.It Ic -rot +.El +.Ss FREEBSD EXTRA WORDS +.Bl -tag -width XXXXXXXX -offset indent +.It Ic \&$ Pq -- +Evaluates the remainder of the input buffer, after having printed it first. +.It Ic \&% Pq -- +Evaluates the remainder of the input buffer under a +.Ic catch +exception guard. +.It Ic .# +Works like +.Ic . +but without outputting a trailing space. +.It Ic fclose Pq Ar fd -- +Closes a file. +.It Ic fkey Pq Ar fd -- char +Reads a single character from a file. +.It Ic fload Pq Ar fd -- +Process file +.Em fd . +.It Ic fopen Pq Ar addr len -- fd +Open a file. +Returns a file descriptor, or -1 in case of failure. +.It Xo +.Ic fread +.Pq Ar fd addr len -- len' +.Xc +Tries to read +.Em len +bytes from file +.Em fd +into buffer +.Em addr . +Returns the actual number of bytes read, or -1 in case of error or end of +file. +.It Ic heap? Pq -- Ar cells +Return the space remaining in the dictionary heap, in cells. +This is not related to the heap used by dynamic memory allocation words. +.It Ic inb Pq Ar port -- char +Reads a byte from a port. +.It Ic key Pq -- Ar char +Reads a single character from the console. +.It Ic key? Pq -- Ar flag +Returns +.Ic true +if there is a character available to be read from the console. +.It Ic ms Pq Ar u -- +Waits +.Em u +microseconds. +.It Ic outb Pq Ar port char -- +Writes a byte to a port. +.It Ic seconds Pq -- Ar u +Returns the number of seconds since midnight. +.It Ic tib> Pq -- Ar addr len +Returns the remainder of the input buffer as a string on the stack. +.It Ic trace! Pq Ar flag -- +Activates or deactivates tracing. +Does not work with +.Ic catch . +.El +.Ss FREEBSD DEFINED ENVIRONMENTAL QUERIES +.Bl -tag -width Ds -offset indent +.It arch-i386 +.Ic TRUE +if the architecture is IA32. +.It arch-alpha +.Ic TRUE +if the architecture is AXP. +.It FreeBSD_version +.Fx +version at compile time. +.It loader_version +.Nm +version. +.El +.Ss SYSTEM DOCUMENTATION +.Sh FILES +.Bl -tag -width /dev/loader.helpX -compact +.It Pa /boot/loader +.Nm +itself. +.It Pa /boot/boot.4th +Additional +.Tn FICL +initialization. +.It Pa /boot/boot.conf +.Nm +bootstrapping script. +Deprecated. +.It Pa /boot/loader.rc +.Nm +bootstrapping script. +.It Pa /boot/loader.help +Loaded by +.Ic help . +Contains the help messages. +.El +.Sh EXAMPLES +Boot in single user mode: +.Pp +.Dl boot -s +.Pp +Loads kernel's user configuration file. +Notice that a kernel must be loaded before any other +.Ic load +command is attempted. +.Pp +.Bd -literal -offset indent -compact +load kernel +load -t userconfig_script /boot/kernel.conf +.Ed +.Pp +Loads the kernel, a splash screen, and then autoboots in five seconds. +.Pp +.Bd -literal -offset indent -compact +load kernel +load splash_bmp +load -t splash_image_data /boot/chuckrulez.bmp +autoboot 5 +.Ed +.Pp +Sets the disk unit of the root device to 2, and then boots. +This would be needed in the case of a two IDE disks system, +with the second IDE hardwired to wd2 instead of wd1. +.Pp +.Bd -literal -offset indent -compact +set root_disk_unit=2 +boot /kernel +.Ed +.Pp +See also: +.Bl -tag -width /usr/share/examples/bootforth/X +.It Pa /boot/loader.4th +Extra builtin-like words. +.It Pa /boot/support.4th +.Pa loader.conf +processing words. +.It Pa /usr/share/examples/bootforth/ +Assorted examples. +.El +.Sh ERRORS +The following values are thrown by +.Nm : +.Bl -tag -width XXXXX -offset indent +.It 100 +Any type of error in the processing of a builtin. +.It -1 +.Ic Abort +executed. +.It -2 +.Ic Abort" +executed. +.It -56 +.Ic Quit +executed. +.It -256 +Out of interpreting text. +.It -257 +Need more text to succeed -- will finish on next run. +.It -258 +.Ic Bye +executed. +.It -259 +Unspecified error. +.El +.Sh SEE ALSO +.Xr libstand 3 , +.Xr loader.conf 5 , +.Xr boot 8 , +.Xr btxld 8 +.Sh STANDARDS +For the purposes of ANS Forth compliance, loader is an +.Bf Em +ANS Forth System with Environmental Restrictions, Providing +.Ef +.Bf Li +.No .( , +.No :noname , +.No ?do , +parse, pick, roll, refill, to, value, \e, false, true, +.No <> , +.No 0<> , +compile\&, , erase, nip, tuck +.Ef +.Em and +.Li marker +.Bf Em +from the Core Extensions word set, Providing the Exception Extensions +word set, Providing the Locals Extensions word set, Providing the +Memory-Allocation Extensions word set, Providing +.Ef +.Bf Li +\&.s , +bye, forget, see, words, +\&[if] , +\&[else] +.Ef +.Em and +.Li No [then] +.Bf Em +from the Programming-Tools extension word set, Providing the +Search-Order extensions word set. +.Ef +.Sh HISTORY +.Nm +first appeared in +.Fx 3.1 . +.Sh AUTHORS +.Bl -item +.It +.Nm +was written by +.An Michael Smith Aq msmith@freebsd.org . +.It +.Tn FICL +was written by +.An John Sadler Aq john_sadler@alum.mit.edu . +.El +.Sh BUGS +The +.Ic expect +and +.Ic accept +words will read from the input buffer instead of the console. +The latter will be fixed, but the former will not. diff --git a/sys/conf/kmod.mk b/sys/conf/kmod.mk new file mode 100644 index 000000000000..803593b24f9a --- /dev/null +++ b/sys/conf/kmod.mk @@ -0,0 +1,301 @@ +# From: @(#)bsd.prog.mk 5.26 (Berkeley) 6/25/91 +# $FreeBSD$ +# +# The include file <bsd.kmod.mk> handles installing Kernel Loadable Device +# drivers (KLD's). +# +# +# +++ variables +++ +# +# CLEANFILES Additional files to remove for the clean and cleandir targets. +# +# DISTRIBUTION Name of distribution. [bin] +# +# KMOD The name of the kernel module to build. +# +# KMODDIR Base path for kernel modules (see kld(4)). [/modules] +# +# KMODOWN KLD owner. [${BINOWN}] +# +# KMODGRP KLD group. [${BINGRP}] +# +# KMODMODE KLD mode. [${BINMODE}] +# +# LINKS The list of KLD links; should be full pathnames, the +# linked-to file coming first, followed by the linked +# file. The files are hard-linked. For example, to link +# /modules/master and /modules/meister, use: +# +# LINKS= /modules/master /modules/meister +# +# KMODLOAD Command to load a kernel module [/sbin/kldload] +# +# KMODUNLOAD Command to unload a kernel module [/sbin/kldunload] +# +# NOMAN KLD does not have a manual page if set. +# +# PROG The name of the kernel module to build. +# If not supplied, ${KMOD}.o is used. +# +# SRCS List of source files +# +# SUBDIR A list of subdirectories that should be built as well. +# Each of the targets will execute the same target in the +# subdirectories. +# +# SYMLINKS Same as LINKS, except it creates symlinks and the +# linked-to pathname may be relative. +# +# DESTDIR, DISTDIR are set by other Makefiles (e.g. bsd.own.mk) +# +# MFILES Optionally a list of interfaces used by the module. +# This file contains a default list of interfaces. +# +# +++ targets +++ +# +# distribute: +# This is a variant of install, which will +# put the stuff into the right "distribution". +# +# install: +# install the program and its manual pages; if the Makefile +# does not itself define the target install, the targets +# beforeinstall and afterinstall may also be used to cause +# actions immediately before and after the install target +# is executed. +# +# load: +# Load KLD. +# +# unload: +# Unload KLD. +# +# bsd.obj.mk: clean, cleandir and obj +# bsd.dep.mk: cleandepend, depend and tags +# bsd.man.mk: maninstall +# + +KMODLOAD?= /sbin/kldload +KMODUNLOAD?= /sbin/kldunload + +.if !target(__initialized__) +__initialized__: +.if exists(${.CURDIR}/../Makefile.inc) +.include "${.CURDIR}/../Makefile.inc" +.endif +.endif + +.SUFFIXES: .out .o .c .cc .cxx .C .y .l .s .S + +CFLAGS+= ${COPTS} -D_KERNEL ${CWARNFLAGS} +CFLAGS+= -DKLD_MODULE + +# Don't use any standard or source-relative include directories. +# Since -nostdinc will annull any previous -I paths, we repeat all +# such paths after -nostdinc. It doesn't seem to be possible to +# add to the front of `make' variable. +_ICFLAGS:= ${CFLAGS:M-I*} +CFLAGS+= -nostdinc -I- ${_ICFLAGS} + +# Add -I paths for system headers. Individual KLD makefiles don't +# need any -I paths for this. Similar defaults for .PATH can't be +# set because there are no standard paths for non-headers. +CFLAGS+= -I. -I@ + +# Add a -I path to standard headers like <stddef.h>. Use a relative +# path to src/include if possible. If the @ symlink hasn't been built +# yet, then we can't tell if the relative path exists. Add both the +# potential relative path and an absolute path in that case. +.if exists(@) +.if exists(@/../include) +CFLAGS+= -I@/../include +.else +CFLAGS+= -I${DESTDIR}/usr/include +.endif +.else # !@ +CFLAGS+= -I@/../include -I${DESTDIR}/usr/include +.endif # @ + +CFLAGS+= ${DEBUG_FLAGS} + +.if ${OBJFORMAT} == elf +CLEANFILES+= setdef0.c setdef1.c setdefs.h +CLEANFILES+= setdef0.o setdef1.o +.endif + +OBJS+= ${SRCS:N*.h:R:S/$/.o/g} + +.if !defined(PROG) +PROG= ${KMOD}.ko +.endif + +${PROG}: ${KMOD}.kld +.if ${OBJFORMAT} == elf + gensetdefs ${KMOD}.kld + ${CC} ${CFLAGS} -c setdef0.c + ${CC} ${CFLAGS} -c setdef1.c + ${LD} -Bshareable ${LDFLAGS} -o ${.TARGET} setdef0.o ${KMOD}.kld setdef1.o +.else + ${LD} -Bshareable ${LDFLAGS} -o ${.TARGET} ${KMOD}.kld +.endif + +${KMOD}.kld: ${OBJS} + ${LD} ${LDFLAGS} -r -o ${.TARGET} ${OBJS} + +.if !defined(NOMAN) +.include <bsd.man.mk> +.if !defined(_MANPAGES) || empty(_MANPAGES) +MAN1= ${KMOD}.4 +.endif + +.elif !target(maninstall) +maninstall: _SUBDIR +all-man: +.endif + +_ILINKS=@ machine + +.MAIN: all +all: objwarn ${PROG} all-man _SUBDIR + +beforedepend ${OBJS}: ${_ILINKS} + +# Search for kernel source tree in standard places. +.for _dir in ${.CURDIR}/../.. ${.CURDIR}/../../.. /sys /usr/src/sys +.if !defined(SYSDIR) && exists(${_dir}/kern/) +SYSDIR= ${_dir} +.endif +.endfor +.if !defined(SYSDIR) || !exists(${SYSDIR}/kern/) +.error "can't find kernel source tree" +.endif + +${_ILINKS}: + @case ${.TARGET} in \ + machine) \ + path=${SYSDIR}/${MACHINE_ARCH}/include ;; \ + @) \ + path=${SYSDIR} ;; \ + esac ; \ + path=`(cd $$path && /bin/pwd)` ; \ + ${ECHO} ${.TARGET} "->" $$path ; \ + ln -s $$path ${.TARGET} + +CLEANFILES+= ${PROG} ${KMOD}.kld ${OBJS} ${_ILINKS} symb.tmp tmp.o + +.if !target(install) +.if !target(beforeinstall) +beforeinstall: +.endif +.if !target(afterinstall) +afterinstall: +.endif + +_INSTALLFLAGS:= ${INSTALLFLAGS} +.for ie in ${INSTALLFLAGS_EDIT} +_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} +.endfor + +realinstall: _SUBDIR + ${INSTALL} ${COPY} -o ${KMODOWN} -g ${KMODGRP} -m ${KMODMODE} \ + ${_INSTALLFLAGS} ${PROG} ${DESTDIR}${KMODDIR} +.if defined(LINKS) && !empty(LINKS) + @set ${LINKS}; \ + while test $$# -ge 2; do \ + l=${DESTDIR}$$1; \ + shift; \ + t=${DESTDIR}$$1; \ + shift; \ + ${ECHO} $$t -\> $$l; \ + ln -f $$l $$t; \ + done; true +.endif +.if defined(SYMLINKS) && !empty(SYMLINKS) + @set ${SYMLINKS}; \ + while test $$# -ge 2; do \ + l=$$1; \ + shift; \ + t=${DESTDIR}$$1; \ + shift; \ + ${ECHO} $$t -\> $$l; \ + ln -fs $$l $$t; \ + done; true +.endif + +install: afterinstall _SUBDIR +.if !defined(NOMAN) +afterinstall: realinstall maninstall +.else +afterinstall: realinstall +.endif +realinstall: beforeinstall +.endif + +DISTRIBUTION?= bin +.if !target(distribute) +distribute: _SUBDIR +.for dist in ${DISTRIBUTION} + cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies +.endfor +.endif + +.if !target(load) +load: ${PROG} + ${KMODLOAD} -v ./${KMOD}.ko +.endif + +.if !target(unload) +unload: + ${KMODUNLOAD} -v ${KMOD} +.endif + +.for _src in ${SRCS:Mopt_*.h} +CLEANFILES+= ${_src} +.if !target(${_src}) +${_src}: + touch ${.TARGET} +.endif +.endfor + +MFILES?= kern/bus_if.m kern/device_if.m dev/iicbus/iicbb_if.m \ + dev/iicbus/iicbus_if.m isa/isa_if.m dev/mii/miibus_if.m \ + dev/pccard/card_if.m dev/pccard/power_if.m pci/pci_if.m \ + dev/ppbus/ppbus_if.m dev/smbus/smbus_if.m dev/usb/usb_if.m + +.for _srcsrc in ${MFILES} +.for _ext in c h +.for _src in ${SRCS:M${_srcsrc:T:R}.${_ext}} +CLEANFILES+= ${_src} +.if !target(${_src}) +${_src}: @ +.if exists(@) +${_src}: @/kern/makeobjops.pl @/${_srcsrc} +.endif + perl @/kern/makeobjops.pl -${_ext} @/${_srcsrc} +.endif +.endfor # _src +.endfor # _ext +.endfor # _srcsrc + +.for _ext in c h +.if ${SRCS:Mvnode_if.${_ext}} != "" +CLEANFILES+= vnode_if.${_ext} +vnode_if.${_ext}: @ +.if exists(@) +vnode_if.${_ext}: @/kern/vnode_if.pl @/kern/vnode_if.src +.endif + perl @/kern/vnode_if.pl -${_ext} @/kern/vnode_if.src +.endif +.endfor + +regress: + +.include <bsd.dep.mk> + +.if !exists(${DEPENDFILE}) +${OBJS}: ${SRCS:M*.h} +.endif + +.include <bsd.obj.mk> + +.include <bsd.kern.mk> diff --git a/sys/dev/ispfw/MAINTAINER b/sys/dev/ispfw/MAINTAINER new file mode 100644 index 000000000000..bc6164b5de5c --- /dev/null +++ b/sys/dev/ispfw/MAINTAINER @@ -0,0 +1,2 @@ +$FreeBSD$ +MAINTAINER = mjacob@freebsd.org diff --git a/sys/dev/ispfw/asm_1040.h b/sys/dev/ispfw/asm_1040.h new file mode 100644 index 000000000000..4f8bca2ca664 --- /dev/null +++ b/sys/dev/ispfw/asm_1040.h @@ -0,0 +1,3527 @@ +/* $FreeBSD$ */ +/* + * Copyright (C) 1995, 1996, 1997, 1998, 1999 Qlogic, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted provided + * that the following conditions are met: + * 1. Redistribution of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistribution in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/************************************************************************ + * * + * --- ISP1040 Initiator Firmware --- * + * 32 LUN Support * + * * + ************************************************************************/ +/* + * Firmware Version 4.65.00 (10:45 Aug 09, 1999) + */ +static const u_int16_t isp_1040_risc_code[] = { + 0x0078, 0x1041, 0x0000, 0x2c56, 0x0000, 0x2043, 0x4f50, 0x5952, + 0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932, 0x2c31, + 0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749, 0x4320, + 0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049, 0x5350, + 0x3130, 0x3230, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056, + 0x6572, 0x7369, 0x6f6e, 0x2030, 0x342e, 0x3635, 0x2020, 0x2043, + 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, 0x3030, 0x2050, + 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, 0x3030, 0x2020, + 0x2400, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x0048, 0x104c, + 0x0038, 0x1052, 0x0078, 0x104e, 0x0028, 0x1052, 0x20b9, 0x1212, + 0x0078, 0x1054, 0x20b9, 0x1313, 0x2071, 0x0010, 0x70c3, 0x0004, + 0x20c9, 0x62ff, 0x2089, 0x1185, 0x70c7, 0x4953, 0x70cb, 0x5020, + 0x70cf, 0x2020, 0x70d3, 0x0004, 0x3f00, 0x70d6, 0x20c1, 0x0008, + 0x2019, 0x0000, 0x2009, 0xfeff, 0x2100, 0x200b, 0xa5a5, 0xa1ec, + 0x7fff, 0x2d64, 0x206b, 0x0a0a, 0xaddc, 0x3fff, 0x2b54, 0x205b, + 0x5050, 0x2114, 0xa286, 0xa5a5, 0x0040, 0x10c4, 0xa386, 0x000f, + 0x0040, 0x108a, 0x2c6a, 0x2a5a, 0x20c1, 0x0000, 0x2019, 0x000f, + 0x0078, 0x106a, 0x2c6a, 0x2a5a, 0x20c1, 0x0008, 0x2009, 0x7fff, + 0x2148, 0x2944, 0x204b, 0x0a0a, 0xa9bc, 0x3fff, 0x2734, 0x203b, + 0x5050, 0x2114, 0xa286, 0x0a0a, 0x0040, 0x10ae, 0x284a, 0x263a, + 0x20c1, 0x0004, 0x2009, 0x3fff, 0x2134, 0x200b, 0x5050, 0x2114, + 0xa286, 0x5050, 0x0040, 0x10af, 0x0078, 0x118d, 0x284a, 0x263a, + 0x98c0, 0xa188, 0x1000, 0x212c, 0x200b, 0xa5a5, 0x2114, 0xa286, + 0xa5a5, 0x0040, 0x10c1, 0x250a, 0xa18a, 0x1000, 0x98c1, 0x0078, + 0x10c6, 0x250a, 0x0078, 0x10c6, 0x2c6a, 0x2a5a, 0x2130, 0xa18a, + 0x0040, 0x2128, 0xa1a2, 0x3d00, 0x8424, 0x8424, 0x8424, 0x8424, + 0x8424, 0x8424, 0xa192, 0x6300, 0x2009, 0x0000, 0x2001, 0x002f, + 0x1078, 0x1ba0, 0x2218, 0x2079, 0x3d00, 0x2fa0, 0x2408, 0x2011, + 0x0000, 0x20a9, 0x0040, 0x42a4, 0x8109, 0x00c0, 0x10e1, 0x7ee6, + 0x8528, 0x7dda, 0x7cde, 0x7be2, 0x787b, 0x0000, 0x2031, 0x0030, + 0x78c3, 0x0101, 0x780b, 0x0002, 0x780f, 0x0002, 0x784f, 0x0003, + 0x7803, 0x0002, 0x2069, 0x3d40, 0x2001, 0x04fd, 0x2004, 0xa082, + 0x0005, 0x0048, 0x1107, 0x0038, 0x1109, 0x0078, 0x110d, 0x00a8, + 0x110d, 0x681b, 0x003c, 0x0078, 0x110f, 0x681b, 0x0028, 0x6807, + 0x0007, 0x680b, 0x00fa, 0x680f, 0x0008, 0x6813, 0x0005, 0x681f, + 0x0000, 0x6823, 0x0006, 0x6817, 0x0008, 0x6827, 0x0000, 0x2069, + 0x3f80, 0x2011, 0x0020, 0x2009, 0x0010, 0x680b, 0x0c19, 0x680f, + 0x0019, 0x6803, 0xfd00, 0x6807, 0x0018, 0x6a1a, 0x2d00, 0xa0e8, + 0x0008, 0xa290, 0x0004, 0x8109, 0x00c0, 0x1125, 0x2069, 0x4000, + 0x2009, 0x0002, 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b, 0x0040, + 0x7be4, 0xa386, 0xfeff, 0x00c0, 0x114b, 0x6817, 0x0100, 0x681f, + 0x0064, 0x0078, 0x114f, 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, + 0x0010, 0x0070, 0x1155, 0x0078, 0x113c, 0x8109, 0x00c0, 0x113a, + 0x1078, 0x1ef7, 0x1078, 0x3735, 0x1078, 0x19b7, 0x1078, 0x3bed, + 0x3200, 0xa085, 0x000d, 0x2090, 0x70c3, 0x0000, 0x0090, 0x116f, + 0x70c0, 0xa086, 0x0002, 0x00c0, 0x116f, 0x1078, 0x12a4, 0x1078, + 0x11b6, 0x78c0, 0xa005, 0x00c0, 0x117b, 0x1078, 0x1bc9, 0x0068, + 0x117f, 0x1078, 0x1e1b, 0x0068, 0x117f, 0x1078, 0x1ab6, 0x00e0, + 0x116f, 0x1078, 0x3a64, 0x0078, 0x116f, 0x118d, 0x1192, 0x20bb, + 0x20bb, 0x37af, 0x37af, 0x20bb, 0x20bb, 0x0088, 0x118d, 0x2091, + 0x8001, 0x007c, 0x0088, 0x1192, 0x2091, 0x8001, 0x007c, 0x0078, + 0x1197, 0x0078, 0x1199, 0x2009, 0x0022, 0x2104, 0xa086, 0x4000, + 0x0040, 0x11b1, 0x7008, 0x800b, 0x00c8, 0x11b1, 0x7007, 0x0002, + 0xa08c, 0x01e0, 0x00c0, 0x11b2, 0xa084, 0x0008, 0x0040, 0x11b1, + 0x087a, 0x097a, 0x70c3, 0x4002, 0x0078, 0x12a7, 0x0068, 0x1221, + 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x1221, 0x7814, + 0xa005, 0x00c0, 0x11c7, 0x0010, 0x1222, 0x0078, 0x1221, 0x2009, + 0x3d68, 0x2104, 0xa005, 0x00c0, 0x1221, 0x2009, 0x3d71, 0x200b, + 0x0000, 0x7914, 0xa186, 0x0042, 0x00c0, 0x11ec, 0x7816, 0x2009, + 0x3d6f, 0x2164, 0x200b, 0x0000, 0x6018, 0x70c6, 0x6014, 0x70ca, + 0x611c, 0xa18c, 0xff00, 0x6020, 0xa084, 0x00ff, 0xa105, 0x70ce, + 0x1078, 0x19a9, 0x0078, 0x121f, 0x7814, 0xa086, 0x0018, 0x00c0, + 0x11f3, 0x1078, 0x16ba, 0x7817, 0x0000, 0x2009, 0x3d6f, 0x2104, + 0xa065, 0x0040, 0x120f, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x1a07, + 0x0c7f, 0x609f, 0x0000, 0x1078, 0x17a0, 0x2009, 0x0018, 0x6087, + 0x0103, 0x1078, 0x1930, 0x00c0, 0x121b, 0x1078, 0x19a9, 0x2009, + 0x3d6f, 0x200b, 0x0000, 0x2009, 0x3d69, 0x2104, 0x200b, 0x0000, + 0xa005, 0x0040, 0x121f, 0x2001, 0x4005, 0x0078, 0x12a6, 0x0078, + 0x12a4, 0x007c, 0x70c3, 0x0000, 0x70c7, 0x0000, 0x70cb, 0x0000, + 0x70cf, 0x0000, 0x70c0, 0xa0bc, 0xffc0, 0x00c0, 0x1272, 0x2038, + 0x0079, 0x1232, 0x12a4, 0x12ff, 0x12c3, 0x12ff, 0x1368, 0x1368, + 0x12ba, 0x17b8, 0x1373, 0x12b2, 0x12c7, 0x12c9, 0x12cb, 0x12cd, + 0x17bd, 0x12b2, 0x1385, 0x13bc, 0x16d2, 0x17b2, 0x12cf, 0x15e7, + 0x1609, 0x1627, 0x1654, 0x15a0, 0x15ae, 0x15c2, 0x15d6, 0x143b, + 0x12b2, 0x13e9, 0x13ef, 0x13f4, 0x13f9, 0x13ff, 0x1404, 0x1409, + 0x140e, 0x1413, 0x1417, 0x142c, 0x1438, 0x12b2, 0x12b2, 0x12b2, + 0x12b2, 0x1447, 0x1450, 0x145f, 0x1485, 0x148f, 0x1496, 0x14d6, + 0x14e5, 0x14f4, 0x1506, 0x1580, 0x1590, 0x12b2, 0x12b2, 0x12b2, + 0x12b2, 0x1595, 0xa0bc, 0xffa0, 0x00c0, 0x12b2, 0x2038, 0xa084, + 0x001f, 0x0079, 0x127b, 0x17d4, 0x17d7, 0x17e7, 0x188c, 0x18c5, + 0x1901, 0x191e, 0x1873, 0x12b2, 0x12b2, 0x1922, 0x192a, 0x12b2, + 0x12b2, 0x12b2, 0x12b2, 0x12f5, 0x135e, 0x137b, 0x13b2, 0x16c8, + 0x12b2, 0x12b2, 0x12b2, 0x12b2, 0x12b2, 0x18dd, 0x18e7, 0x18eb, + 0x18f9, 0x12b2, 0x12b2, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078, + 0x12a6, 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0068, + 0x12a7, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x2091, + 0x4080, 0x007c, 0x70c3, 0x4001, 0x0078, 0x12a7, 0x70c3, 0x4006, + 0x0078, 0x12a7, 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, + 0x53a3, 0x0078, 0x12a4, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078, + 0x12a4, 0x0078, 0x12a4, 0x0078, 0x12a4, 0x0078, 0x12a4, 0x2091, + 0x8000, 0x70c3, 0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, + 0x2020, 0x70d3, 0x0004, 0x3f00, 0x70d6, 0x2079, 0x0000, 0x781b, + 0x0001, 0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x0457, 0x2051, + 0x0470, 0x2061, 0x0472, 0x20b9, 0xffff, 0x20c1, 0x0000, 0x2091, + 0x5000, 0x2091, 0x4080, 0x0078, 0x0455, 0x1078, 0x1b23, 0x00c0, + 0x12b6, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1302, 0x2029, + 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x20a0, 0x2098, + 0x2031, 0x0030, 0x81ff, 0x0040, 0x12a4, 0x7007, 0x0004, 0x731a, + 0x721e, 0x7422, 0x7526, 0x2051, 0x0012, 0x2049, 0x133d, 0x2041, + 0x12a4, 0x7003, 0x0002, 0xa786, 0x0001, 0x0040, 0x1325, 0xa786, + 0x0050, 0x0040, 0x1325, 0x0078, 0x132b, 0x2049, 0x134a, 0x2041, + 0x1356, 0x7003, 0x0003, 0x7017, 0x0000, 0x810b, 0x7112, 0x00c8, + 0x1333, 0x7017, 0x0001, 0x7007, 0x0001, 0xa786, 0x0001, 0x0040, + 0x134a, 0xa786, 0x0050, 0x0040, 0x134a, 0x700c, 0xa084, 0x007f, + 0x2009, 0x0040, 0xa102, 0x8004, 0x094a, 0x20a8, 0x26a0, 0x53a6, + 0x0078, 0x119b, 0x700c, 0xa084, 0x007f, 0x0040, 0x134a, 0x80ac, + 0x0048, 0x134a, 0x2698, 0x53a5, 0x0078, 0x119b, 0x700c, 0xa084, + 0x007f, 0x80ac, 0x2698, 0x53a5, 0x0078, 0x12a4, 0x1078, 0x1b23, + 0x00c0, 0x12b6, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1302, + 0x71c4, 0x70c8, 0x2114, 0xa79e, 0x0004, 0x00c0, 0x1370, 0x200a, + 0x72ca, 0x0078, 0x12a3, 0x70c7, 0x0004, 0x70cb, 0x0041, 0x70cf, + 0x0000, 0x0078, 0x12a4, 0x1078, 0x1b23, 0x00c0, 0x12b6, 0x75d8, + 0x76dc, 0x75da, 0x76de, 0x0078, 0x1388, 0x2029, 0x0000, 0x2530, + 0x70c4, 0x72c8, 0x73cc, 0x74d0, 0x70c6, 0x72ca, 0x73ce, 0x74d2, + 0xa005, 0x0040, 0x13ac, 0x8001, 0x788a, 0xa084, 0xfc00, 0x0040, + 0x13a1, 0x78c0, 0xa085, 0x0001, 0x78c2, 0x2001, 0x4005, 0x0078, + 0x12a6, 0x7a92, 0x7b96, 0x7d9a, 0x7e9e, 0x7c8e, 0x78c0, 0xa084, + 0xfffc, 0x78c2, 0x0078, 0x13b0, 0x78c0, 0xa085, 0x0001, 0x78c2, + 0x0078, 0x12a4, 0x1078, 0x1b23, 0x00c0, 0x12b6, 0x75d8, 0x76dc, + 0x75da, 0x76de, 0x0078, 0x13bf, 0x2029, 0x0000, 0x2530, 0x70c4, + 0x72c8, 0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce, 0x74d6, 0xa005, + 0x0040, 0x13e3, 0x8001, 0x78a6, 0xa084, 0xfc00, 0x0040, 0x13d8, + 0x78c0, 0xa085, 0x0100, 0x78c2, 0x2001, 0x4005, 0x0078, 0x12a6, + 0x7aae, 0x7bb2, 0x7db6, 0x7eba, 0x7caa, 0x78c0, 0xa084, 0xfcff, + 0x78c2, 0x0078, 0x13e7, 0x78c0, 0xa085, 0x0100, 0x78c2, 0x0078, + 0x12a4, 0x2009, 0x3d5f, 0x210c, 0x7ae0, 0x0078, 0x12a2, 0x2009, + 0x3d41, 0x210c, 0x0078, 0x12a3, 0x2009, 0x3d42, 0x210c, 0x0078, + 0x12a3, 0x2061, 0x3d40, 0x610c, 0x6210, 0x0078, 0x12a2, 0x2009, + 0x3d45, 0x210c, 0x0078, 0x12a3, 0x2009, 0x3d46, 0x210c, 0x0078, + 0x12a3, 0x2009, 0x3d47, 0x210c, 0x0078, 0x12a3, 0x2009, 0x3d48, + 0x210c, 0x0078, 0x12a3, 0x7908, 0x7a0c, 0x0078, 0x12a2, 0x71c4, + 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8, 0x3f80, + 0x6a00, 0x6804, 0xa084, 0x0008, 0x0040, 0x1429, 0x6b08, 0x0078, + 0x142a, 0x6b0c, 0x0078, 0x12a1, 0x77c4, 0x1078, 0x19c7, 0x2091, + 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708, 0x0078, 0x12a1, + 0x794c, 0x0078, 0x12a3, 0x77c4, 0x1078, 0x19c7, 0x2091, 0x8000, + 0x6908, 0x6a18, 0x6b10, 0x2091, 0x8001, 0x0078, 0x12a1, 0x71c4, + 0xa182, 0x0010, 0x00c8, 0x129c, 0x1078, 0x1f8e, 0x0078, 0x12a1, + 0x71c4, 0xa182, 0x0010, 0x00c8, 0x129c, 0x2011, 0x3d41, 0x2204, + 0x007e, 0x2112, 0x1078, 0x1f47, 0x017f, 0x0078, 0x12a3, 0x71c4, + 0x2011, 0x147d, 0x20a9, 0x0008, 0x2204, 0xa106, 0x0040, 0x146f, + 0x8210, 0x0070, 0x146d, 0x0078, 0x1464, 0x0078, 0x129c, 0xa292, + 0x147d, 0x027e, 0x2011, 0x3d42, 0x2204, 0x2112, 0x017f, 0x007e, + 0x1078, 0x1f53, 0x017f, 0x0078, 0x12a3, 0x03e8, 0x00fa, 0x01f4, + 0x02ee, 0x0064, 0x0019, 0x0032, 0x004b, 0x2061, 0x3d40, 0x610c, + 0x6210, 0x70c4, 0x600e, 0x70c8, 0x6012, 0x0078, 0x12a2, 0x2061, + 0x3d40, 0x6114, 0x70c4, 0x6016, 0x0078, 0x12a3, 0x71c4, 0x2011, + 0x0004, 0x2019, 0x1212, 0xa186, 0x0028, 0x0040, 0x14af, 0x2011, + 0x0005, 0x2019, 0x1212, 0xa186, 0x0032, 0x0040, 0x14af, 0x2011, + 0x0006, 0x2019, 0x1313, 0xa186, 0x003c, 0x00c0, 0x129c, 0x2061, + 0x3d40, 0x6018, 0x007e, 0x611a, 0x7800, 0xa084, 0x0001, 0x00c0, + 0x14cc, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x0048, 0x14c4, + 0x0038, 0x14c8, 0x0078, 0x14cc, 0x0028, 0x14c8, 0x0078, 0x14cc, + 0x2019, 0x1313, 0x0078, 0x14ce, 0x2019, 0x1212, 0x23b8, 0x1078, + 0x1f64, 0x1078, 0x3bed, 0x017f, 0x0078, 0x12a3, 0x71c4, 0xa184, + 0xffcf, 0x00c0, 0x129c, 0x2011, 0x3d47, 0x2204, 0x2112, 0x007e, + 0x1078, 0x1f86, 0x017f, 0x0078, 0x12a3, 0x71c4, 0xa182, 0x0010, + 0x00c8, 0x129c, 0x2011, 0x3d48, 0x2204, 0x007e, 0x2112, 0x1078, + 0x1f75, 0x017f, 0x0078, 0x12a3, 0x71c4, 0x72c8, 0xa184, 0xfffd, + 0x00c0, 0x129b, 0xa284, 0xfffd, 0x00c0, 0x129b, 0x2100, 0x7908, + 0x780a, 0x2200, 0x7a0c, 0x780e, 0x0078, 0x12a2, 0x71c4, 0x8107, + 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8, 0x3f80, 0x2019, + 0x0000, 0x72c8, 0xa284, 0x0080, 0x0040, 0x151c, 0x6c14, 0x84ff, + 0x00c0, 0x151c, 0x6817, 0x0040, 0xa284, 0x0040, 0x0040, 0x1526, + 0x6c10, 0x84ff, 0x00c0, 0x1526, 0x6813, 0x0001, 0x6800, 0x007e, + 0xa226, 0x0040, 0x1549, 0x6a02, 0xa484, 0x2000, 0x0040, 0x1532, + 0xa39d, 0x0010, 0xa484, 0x1000, 0x0040, 0x1538, 0xa39d, 0x0008, + 0xa484, 0x4000, 0x0040, 0x1549, 0x810f, 0xa284, 0x4000, 0x0040, + 0x1545, 0x1078, 0x1fa8, 0x0078, 0x1549, 0x1078, 0x1f9a, 0x0078, + 0x1549, 0x72cc, 0x6808, 0xa206, 0x0040, 0x1578, 0xa2a4, 0x00ff, + 0x2061, 0x3d40, 0x6118, 0xa186, 0x0028, 0x0040, 0x155f, 0xa186, + 0x0032, 0x0040, 0x1565, 0xa186, 0x003c, 0x0040, 0x156b, 0xa482, + 0x0064, 0x0048, 0x1575, 0x0078, 0x156f, 0xa482, 0x0050, 0x0048, + 0x1575, 0x0078, 0x156f, 0xa482, 0x0043, 0x0048, 0x1575, 0x71c4, + 0x71c6, 0x027f, 0x72ca, 0x0078, 0x129d, 0x6a0a, 0xa39d, 0x000a, + 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x71c4, 0x0078, 0x12a1, + 0x77c4, 0x1078, 0x19c7, 0x2091, 0x8000, 0x6a14, 0x6b1c, 0x2091, + 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e, 0x2708, 0x0078, 0x12a1, + 0x70c4, 0x794c, 0x784e, 0x0078, 0x12a3, 0x71c4, 0x72c8, 0x73cc, + 0xa182, 0x0010, 0x00c8, 0x129c, 0x1078, 0x1fb6, 0x0078, 0x12a1, + 0x77c4, 0x1078, 0x19c7, 0x2091, 0x8000, 0x6a08, 0xa295, 0x0002, + 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0078, 0x12a2, 0x77c4, 0x1078, + 0x19c7, 0x2091, 0x8000, 0x6a08, 0xa294, 0xfff9, 0x6a0a, 0x6804, + 0xa005, 0x0040, 0x15bd, 0x1078, 0x1edc, 0x2091, 0x8001, 0x2708, + 0x0078, 0x12a2, 0x77c4, 0x1078, 0x19c7, 0x2091, 0x8000, 0x6a08, + 0xa295, 0x0004, 0x6a0a, 0x6804, 0xa005, 0x0040, 0x15d1, 0x1078, + 0x1edc, 0x2091, 0x8001, 0x2708, 0x0078, 0x12a2, 0x77c4, 0x2041, + 0x0001, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078, + 0x19d4, 0x2091, 0x8001, 0x2708, 0x6a08, 0x0078, 0x12a2, 0x77c4, + 0x73c8, 0x72cc, 0x77c6, 0x73ca, 0x72ce, 0x1078, 0x1a4f, 0x00c0, + 0x1605, 0x6818, 0xa005, 0x0040, 0x15ff, 0x2708, 0x1078, 0x1fc6, + 0x00c0, 0x15ff, 0x7817, 0x0015, 0x2091, 0x8001, 0x007c, 0x2091, + 0x8001, 0x2001, 0x4005, 0x0078, 0x12a6, 0x2091, 0x8001, 0x0078, + 0x12a4, 0x77c4, 0x77c6, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, + 0x0020, 0x2091, 0x8000, 0x1078, 0x19d4, 0x2061, 0x3d40, 0x60a3, + 0x0003, 0x67b6, 0x60c7, 0x000f, 0x60a7, 0x0000, 0x7817, 0x0016, + 0x2091, 0x8000, 0x1078, 0x1edc, 0x2091, 0x8001, 0x007c, 0x77c8, + 0x77ca, 0x77c4, 0x77c6, 0xa7bc, 0xff00, 0x2091, 0x8000, 0x2061, + 0x3d40, 0x60a3, 0x0002, 0x60a7, 0x0000, 0x67b6, 0x60c7, 0x000f, + 0x7817, 0x0017, 0x2091, 0x8000, 0x1078, 0x1edc, 0x2091, 0x8001, + 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, 0x2091, 0x8000, + 0x1078, 0x19d4, 0x70c8, 0x6836, 0x8738, 0xa784, 0x001f, 0x00c0, + 0x1648, 0x2091, 0x8001, 0x007c, 0x78c0, 0xa084, 0x0003, 0x00c0, + 0x1678, 0x2039, 0x0000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, + 0x0008, 0x1078, 0x19c7, 0x2091, 0x8000, 0x6808, 0xa80d, 0x690a, + 0x2091, 0x8001, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1661, 0xa7bc, + 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1661, + 0x2091, 0x8000, 0x2069, 0x0100, 0x6830, 0xa084, 0x0040, 0x0040, + 0x16a1, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0004, + 0x0040, 0x168e, 0x0070, 0x168e, 0x0078, 0x1685, 0x684b, 0x0009, + 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, 0x0040, 0x169b, 0x0070, + 0x169b, 0x0078, 0x1692, 0x20a9, 0x00fa, 0x0070, 0x16a1, 0x0078, + 0x169d, 0x2079, 0x3d00, 0x7817, 0x0018, 0x2061, 0x3d40, 0x60a3, + 0x0001, 0x60a7, 0x0000, 0x60c7, 0x000f, 0x78c0, 0xa085, 0x0002, + 0x78c2, 0x6808, 0xa084, 0xfffd, 0x680a, 0x681b, 0x0047, 0x2091, + 0x8001, 0x007c, 0x78c0, 0xa084, 0xfffd, 0x78c2, 0xa084, 0x0001, + 0x00c0, 0x16c4, 0x1078, 0x1a99, 0x71c4, 0x71c6, 0x794a, 0x007c, + 0x1078, 0x1b23, 0x00c0, 0x12b6, 0x75d8, 0x74dc, 0x75da, 0x74de, + 0x0078, 0x16d5, 0x2029, 0x0000, 0x2520, 0x71c4, 0x73c8, 0x72cc, + 0x71c6, 0x73ca, 0x72ce, 0x2079, 0x3d00, 0x1078, 0x19a0, 0x0040, + 0x179c, 0x20a9, 0x0005, 0x20a1, 0x3d16, 0x2091, 0x8000, 0x41a1, + 0x2091, 0x8001, 0x2009, 0x0040, 0x1078, 0x196a, 0x0040, 0x16f4, + 0x1078, 0x19a9, 0x0078, 0x179c, 0x6004, 0xa08c, 0x00ff, 0xa18e, + 0x0009, 0x00c0, 0x16ff, 0x007e, 0x1078, 0x1dfe, 0x007f, 0xa084, + 0xff00, 0x8007, 0x8009, 0x0040, 0x176a, 0x0c7e, 0x2c68, 0x1078, + 0x19a0, 0x0040, 0x1739, 0x2c00, 0x689e, 0x8109, 0x00c0, 0x1706, + 0x609f, 0x0000, 0x0c7f, 0x0c7e, 0x7218, 0x731c, 0x7420, 0x7524, + 0x2c68, 0x689c, 0xa065, 0x0040, 0x1769, 0x2009, 0x0040, 0x1078, + 0x196a, 0x00c0, 0x1752, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0002, + 0x00c0, 0x1739, 0x6004, 0xa084, 0x00ff, 0xa086, 0x000a, 0x00c0, + 0x1735, 0x017e, 0x1078, 0x1dfa, 0x017f, 0x2d00, 0x6002, 0x0078, + 0x1714, 0x0c7f, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x1a07, 0x0c7f, + 0x609f, 0x0000, 0x1078, 0x17a0, 0x2009, 0x0018, 0x6008, 0xa085, + 0x0200, 0x600a, 0x6004, 0x6086, 0x1078, 0x1930, 0x1078, 0x19a9, + 0x0078, 0x179c, 0x0c7f, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x1a07, + 0x0c7f, 0x609f, 0x0000, 0x1078, 0x17a0, 0x2009, 0x0018, 0x6087, + 0x0103, 0x601b, 0x0003, 0x1078, 0x1930, 0x1078, 0x19a9, 0x0078, + 0x179c, 0x0c7f, 0x74c4, 0x73c8, 0x72cc, 0x6014, 0x2091, 0x8000, + 0x7817, 0x0012, 0x0e7e, 0x2071, 0x3d40, 0x70a3, 0x0005, 0x70a7, + 0x0000, 0x73aa, 0x72ae, 0x74b2, 0x70b6, 0x70bb, 0x0000, 0x2c00, + 0x70be, 0x70c3, 0x0000, 0xa02e, 0x2530, 0x611c, 0xa184, 0x0060, + 0x0040, 0x178c, 0x1078, 0x36d9, 0x0e7f, 0x6596, 0x65a6, 0x669a, + 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000, 0x2091, 0x8000, 0x1078, + 0x1edc, 0x2091, 0x8001, 0x007c, 0x70c3, 0x4005, 0x0078, 0x12a7, + 0x20a9, 0x0005, 0x2099, 0x3d16, 0x2091, 0x8000, 0x530a, 0x2091, + 0x8001, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, + 0x0000, 0x007c, 0x71c4, 0x70c7, 0x0000, 0x7906, 0x0078, 0x12a4, + 0x71c4, 0x71c6, 0x2168, 0x0078, 0x17bf, 0x2069, 0x1000, 0x690c, + 0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x00c0, 0x17c1, 0xa285, + 0x0000, 0x00c0, 0x17cf, 0x70c3, 0x4000, 0x0078, 0x17d1, 0x70c3, + 0x4003, 0x70ca, 0x0078, 0x12a7, 0x79d8, 0x0078, 0x12a3, 0x71c4, + 0x71c6, 0x2198, 0x20a1, 0x0042, 0x20a9, 0x0004, 0x53a3, 0x21a0, + 0x2099, 0x0042, 0x20a9, 0x0004, 0x53a3, 0x0078, 0x12a4, 0x70c4, + 0x2068, 0x2079, 0x3d00, 0x1078, 0x19a0, 0x00c0, 0x17f3, 0x70c3, + 0x4005, 0x0078, 0x12a7, 0x6007, 0x0001, 0x600b, 0x0000, 0x602b, + 0x0000, 0x601b, 0x0006, 0x6a10, 0xa28c, 0x000f, 0xa284, 0x00f0, + 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0x6016, 0xa284, 0x0800, + 0x0040, 0x180e, 0x601b, 0x000a, 0x0078, 0x1814, 0xa284, 0x1000, + 0x0040, 0x1814, 0x601b, 0x000c, 0xa284, 0x0300, 0x0040, 0x181d, + 0x602b, 0x0001, 0x8004, 0x8004, 0x8004, 0xa085, 0x0001, 0x601e, + 0x6023, 0x0000, 0x6027, 0x0000, 0xa284, 0x0400, 0x0040, 0x182a, + 0x602b, 0x0000, 0x20a9, 0x0006, 0xac80, 0x000b, 0x20a0, 0xad80, + 0x0005, 0x2098, 0x53a3, 0xa284, 0x0300, 0x00c0, 0x183f, 0x6046, + 0x604a, 0x604e, 0x6052, 0x6096, 0x609a, 0x0078, 0x1849, 0x6800, + 0x6046, 0x6804, 0x604a, 0x6e08, 0x664e, 0x6d0c, 0x6552, 0x6596, + 0x669a, 0x6014, 0x2091, 0x8000, 0x7817, 0x0042, 0x2c08, 0x2061, + 0x3d40, 0x60a3, 0x0005, 0x60a7, 0x0000, 0x60ab, 0x0000, 0x60af, + 0x0000, 0x60b3, 0x0000, 0x60b6, 0x61be, 0xa284, 0x0400, 0x60c2, + 0x2091, 0x8001, 0x0e7e, 0x2071, 0x0020, 0x7007, 0x000a, 0x7007, + 0x0002, 0x7003, 0x0000, 0x0e7f, 0x2091, 0x8000, 0x1078, 0x1edc, + 0x2091, 0x8001, 0x007c, 0x70c4, 0x2068, 0x2079, 0x3d00, 0x1078, + 0x19a0, 0x0040, 0x1888, 0x6007, 0x0001, 0x600b, 0x0000, 0x602b, + 0x0000, 0x601b, 0x0006, 0x70c8, 0x6016, 0x6a10, 0x0078, 0x1806, + 0x70c3, 0x4005, 0x0078, 0x12a7, 0x78ec, 0xa005, 0x0040, 0x12b2, + 0x2091, 0x8000, 0x70c4, 0x800a, 0x2011, 0x0010, 0x810c, 0x0048, + 0x189e, 0x3a00, 0xa084, 0xfff7, 0x0078, 0x18a1, 0x3a00, 0xa085, + 0x0008, 0x20d0, 0x0005, 0x0005, 0xa084, 0xfffb, 0x20d0, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0xa085, + 0x0004, 0x20d0, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x8211, 0x00c0, 0x1896, 0x3a00, 0xa085, 0x0008, + 0x20d0, 0x2091, 0x8001, 0x0078, 0x12a4, 0x2011, 0x04fd, 0x2204, + 0xa082, 0x0004, 0x0048, 0x18d9, 0x78ef, 0x0001, 0x2009, 0xff01, + 0x200a, 0x2001, 0x000c, 0x20d8, 0x2001, 0x000c, 0x20d0, 0x0078, + 0x12a4, 0x2001, 0x4005, 0x0078, 0x12a6, 0x7978, 0x71c6, 0x71c4, + 0xa182, 0x0003, 0x00c8, 0x129c, 0x797a, 0x0078, 0x12a4, 0x7978, + 0x71c6, 0x0078, 0x12a4, 0x796c, 0x71c6, 0x71c4, 0x796e, 0x7970, + 0x71ca, 0x71c8, 0x7972, 0x7974, 0x71ce, 0x71cc, 0x7976, 0x0078, + 0x12a4, 0x796c, 0x71c6, 0x7970, 0x71ca, 0x7974, 0x71ce, 0x0078, + 0x12a4, 0x7900, 0x71c6, 0x71c4, 0x7902, 0x2001, 0x04fd, 0x2004, + 0xa082, 0x0005, 0x0048, 0x1910, 0x0038, 0x1912, 0x0078, 0x191c, + 0x00a8, 0x191c, 0xa18c, 0x0001, 0x00c0, 0x191a, 0x20b9, 0x1313, + 0x0078, 0x191c, 0x20b9, 0x1212, 0x0078, 0x12a4, 0x7900, 0x71c6, + 0x0078, 0x12a4, 0x2009, 0x3d79, 0x2104, 0x70c6, 0x70c4, 0x200a, + 0x0078, 0x12a4, 0x2009, 0x3d79, 0x2104, 0x70c6, 0x0078, 0x12a4, + 0x700c, 0xa084, 0x00ff, 0x0040, 0x193c, 0x7007, 0x0004, 0x7004, + 0xa084, 0x0004, 0x00c0, 0x1937, 0x7017, 0x0000, 0x7112, 0x721a, + 0x731e, 0x7422, 0x7526, 0xac80, 0x0001, 0x8108, 0x810c, 0x81a9, + 0x8098, 0x20a1, 0x0030, 0x6084, 0x20a2, 0x53a6, 0x780c, 0xa085, + 0x0000, 0x7002, 0x7007, 0x0001, 0x2009, 0x0022, 0x2104, 0xa084, + 0x4000, 0x00c0, 0x1954, 0x7108, 0x8103, 0x00c8, 0x1954, 0x7014, + 0xa005, 0x0040, 0x1954, 0x7007, 0x0002, 0xa184, 0x01e0, 0x7003, + 0x0000, 0x007c, 0x700c, 0xa084, 0x00ff, 0x0040, 0x1976, 0x7007, + 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x1971, 0x7017, 0x0000, + 0x7112, 0x721a, 0x7422, 0x7526, 0x731e, 0x2099, 0x0030, 0x8108, + 0x81ac, 0x780c, 0xa085, 0x0001, 0x7002, 0x7007, 0x0001, 0x2009, + 0x0022, 0x2104, 0xa084, 0x4000, 0x00c0, 0x1987, 0x7008, 0x800b, + 0x00c8, 0x1987, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x00c0, 0x199d, + 0xac80, 0x0001, 0x20a0, 0x53a5, 0xa006, 0x7003, 0x0000, 0x007c, + 0x7850, 0xa065, 0x0040, 0x19a8, 0x2c04, 0x7852, 0x2063, 0x0000, + 0x007c, 0x0f7e, 0x2079, 0x3d00, 0x7850, 0x2062, 0x2c00, 0xa005, + 0x00c0, 0x19b4, 0x1078, 0x209b, 0x7852, 0x0f7f, 0x007c, 0x2011, + 0x6300, 0x7a52, 0x7be0, 0x8319, 0x0040, 0x19c4, 0xa280, 0x002f, + 0x2012, 0x2010, 0x0078, 0x19bb, 0x2013, 0x0000, 0x007c, 0xa784, + 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003, + 0xa105, 0xa0e8, 0x4000, 0x007c, 0x1078, 0x19c7, 0x2900, 0x682a, + 0x2a00, 0x682e, 0x6808, 0xa084, 0xffef, 0xa80d, 0x690a, 0x2009, + 0x3d4f, 0x210c, 0x6804, 0xa005, 0x0040, 0x19f1, 0xa116, 0x00c0, + 0x19f1, 0x2060, 0x6000, 0x6806, 0x017e, 0x200b, 0x0000, 0x0078, + 0x19f4, 0x2009, 0x0000, 0x017e, 0x6804, 0xa065, 0x0040, 0x1a03, + 0x6000, 0x6806, 0x1078, 0x1a14, 0x1078, 0x1b44, 0x6810, 0x8001, + 0x6812, 0x00c0, 0x19f4, 0x017f, 0x6902, 0x6906, 0x007c, 0xa065, + 0x0040, 0x1a13, 0x609c, 0x609f, 0x0000, 0x2008, 0x1078, 0x19a9, + 0x2100, 0x0078, 0x1a07, 0x007c, 0x6007, 0x0103, 0x608f, 0x0000, + 0x20a9, 0x001c, 0xac80, 0x0005, 0x20a0, 0x2001, 0x0000, 0x40a4, + 0x6828, 0x601a, 0x682c, 0x6022, 0x007c, 0x0e7e, 0x2071, 0x3d40, + 0x7040, 0xa08c, 0x0200, 0x00c0, 0x1a33, 0xa088, 0x3d80, 0x2d0a, + 0x8000, 0x7042, 0xa006, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x3d40, + 0x2009, 0x3d80, 0x7240, 0x8221, 0x8211, 0x0048, 0x1a4d, 0x2104, + 0x8108, 0xad06, 0x00c0, 0x1a3c, 0x8119, 0x211e, 0x8108, 0x8318, + 0x8211, 0x00c8, 0x1a45, 0x7442, 0xa006, 0x0e7f, 0x007c, 0x1078, + 0x19c7, 0x2091, 0x8000, 0x6804, 0x781e, 0xa065, 0x0040, 0x1a98, + 0x0078, 0x1a60, 0x2c00, 0x781e, 0x6000, 0xa065, 0x0040, 0x1a98, + 0x6010, 0xa306, 0x00c0, 0x1a5a, 0x600c, 0xa206, 0x00c0, 0x1a5a, + 0x2c28, 0x2001, 0x3d4f, 0x2004, 0xac06, 0x00c0, 0x1a71, 0x0078, + 0x1a95, 0x6804, 0xac06, 0x00c0, 0x1a7f, 0x6000, 0x2060, 0x6806, + 0xa005, 0x00c0, 0x1a7f, 0x6803, 0x0000, 0x0078, 0x1a89, 0x6400, + 0x781c, 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x1a89, 0x2c00, + 0x6802, 0x2560, 0x1078, 0x1a14, 0x601b, 0x0005, 0x6023, 0x0020, + 0x1078, 0x1b44, 0x6810, 0x8001, 0x6812, 0x2001, 0xffff, 0xa005, + 0x007c, 0x2039, 0x0000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, + 0x0008, 0x2091, 0x8000, 0x1078, 0x19d4, 0x8738, 0xa784, 0x001f, + 0x00c0, 0x1aa3, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, + 0x0f00, 0x00c0, 0x1aa3, 0x2091, 0x8001, 0x007c, 0x2061, 0x0000, + 0x6018, 0xa084, 0x0001, 0x00c0, 0x1ac7, 0x2091, 0x8000, 0x78d4, + 0x78d7, 0x0000, 0x2091, 0x8001, 0xa005, 0x00c0, 0x1ac8, 0x007c, + 0xa08c, 0xfff0, 0x0040, 0x1ace, 0x1078, 0x209b, 0x0079, 0x1ad0, + 0x1ae0, 0x1ae3, 0x1ae9, 0x1aed, 0x1ae1, 0x1af1, 0x1ae1, 0x1af7, + 0x1afb, 0x1aff, 0x1b32, 0x1b36, 0x1ae1, 0x1ae1, 0x1ae1, 0x1ae1, + 0x007c, 0x1078, 0x209b, 0x1078, 0x1a99, 0x2001, 0x8001, 0x0078, + 0x1b3c, 0x2001, 0x8003, 0x0078, 0x1b3c, 0x2001, 0x8004, 0x0078, + 0x1b3c, 0x1078, 0x1a99, 0x2001, 0x8006, 0x0078, 0x1b3c, 0x2001, + 0x8008, 0x0078, 0x1b3c, 0x2001, 0x8009, 0x0078, 0x1b3c, 0x2091, + 0x8000, 0x2069, 0x3d40, 0x6800, 0xa086, 0x0000, 0x0040, 0x1b0d, + 0x2091, 0x8001, 0x78d7, 0x0009, 0x007c, 0x68b4, 0xa0bc, 0xff00, + 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, 0x1078, 0x19d4, + 0x8738, 0xa784, 0x001f, 0x00c0, 0x1b16, 0x2091, 0x8001, 0x2001, + 0x800a, 0x0078, 0x1b3c, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0004, + 0x00c8, 0x1b2c, 0x0078, 0x1b2f, 0xa006, 0x0078, 0x1b31, 0xa085, + 0x0001, 0x007c, 0x2001, 0x800c, 0x0078, 0x1b3c, 0x1078, 0x1a99, + 0x2001, 0x800d, 0x0078, 0x1b3c, 0x70c2, 0x2061, 0x0000, 0x601b, + 0x0001, 0x2091, 0x4080, 0x007c, 0x6004, 0x6086, 0x2c08, 0x2063, + 0x0000, 0x787c, 0x8000, 0x787e, 0x7880, 0xa005, 0x7982, 0x0040, + 0x1b54, 0x2c02, 0x0078, 0x1b55, 0x7986, 0x007c, 0x0c7e, 0x2061, + 0x3d00, 0x6887, 0x0103, 0x2d08, 0x206b, 0x0000, 0x607c, 0x8000, + 0x607e, 0x6080, 0xa005, 0x6182, 0x0040, 0x1b69, 0x2d02, 0x0078, + 0x1b6a, 0x6186, 0x0c7f, 0x007c, 0x1078, 0x1b7d, 0x0040, 0x1b7c, + 0x0c7e, 0x609c, 0xa065, 0x0040, 0x1b77, 0x1078, 0x1a07, 0x0c7f, + 0x609f, 0x0000, 0x1078, 0x19a9, 0x007c, 0x7884, 0xa065, 0x0040, + 0x1b8f, 0x2091, 0x8000, 0x787c, 0x8001, 0x787e, 0x2c04, 0x7886, + 0xa005, 0x00c0, 0x1b8d, 0x7882, 0x8000, 0x2091, 0x8001, 0x007c, + 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e, 0x00c8, 0x1b99, + 0xa200, 0x0070, 0x1b9d, 0x0078, 0x1b94, 0x8086, 0x818e, 0x007c, + 0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x1bc3, 0xa11a, 0x00c8, + 0x1bc3, 0x8213, 0x818d, 0x0048, 0x1bb4, 0xa11a, 0x00c8, 0x1bb5, + 0x0070, 0x1bbb, 0x0078, 0x1ba9, 0xa11a, 0x2308, 0x8210, 0x0070, + 0x1bbb, 0x0078, 0x1ba9, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080, + 0x007f, 0x157f, 0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078, + 0x1bbf, 0x798c, 0x70d0, 0x007e, 0x007f, 0xa106, 0x0040, 0x1c45, + 0x7800, 0xa084, 0x0002, 0x0040, 0x1bdc, 0x2011, 0x04fd, 0x2204, + 0xa082, 0x0005, 0x00c8, 0x1bef, 0x2091, 0x8000, 0x2071, 0x0020, + 0x7004, 0xa005, 0x00c0, 0x1c45, 0x7008, 0x7208, 0xa206, 0x00c0, + 0x1c45, 0xa286, 0x0008, 0x00c0, 0x1c45, 0x2071, 0x0010, 0x1078, + 0x19a0, 0x0040, 0x1c45, 0x7a94, 0x7b90, 0x7c9c, 0x7d98, 0xa184, + 0xff00, 0x0040, 0x1c13, 0x2031, 0x0000, 0x810b, 0x86b5, 0x810b, + 0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b, + 0x86b5, 0x2100, 0xa210, 0x2600, 0xa319, 0xa4a1, 0x0000, 0xa5a9, + 0x0000, 0x0078, 0x1c1d, 0x8107, 0x8004, 0x8004, 0xa210, 0xa399, + 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x2009, 0x0040, 0x1078, + 0x196a, 0x2091, 0x8001, 0x0040, 0x1c3c, 0x1078, 0x19a9, 0x78a0, + 0x8000, 0x78a2, 0xa086, 0x0002, 0x00c0, 0x1c45, 0x2091, 0x8000, + 0x78d7, 0x0002, 0x78a3, 0x0000, 0x78c0, 0xa085, 0x0003, 0x78c2, + 0x2091, 0x8001, 0x0078, 0x1c45, 0x78a3, 0x0000, 0x1078, 0x1de4, + 0x6004, 0xa084, 0x000f, 0x0079, 0x1c4a, 0x2071, 0x0010, 0x2091, + 0x8001, 0x007c, 0x1c5a, 0x1c7c, 0x1ca2, 0x1c5a, 0x1cb4, 0x1c69, + 0x1c5a, 0x1c5a, 0x1c5a, 0x1c76, 0x1c9c, 0x1c5a, 0x1c5a, 0x1c5a, + 0x1c5a, 0x1c5a, 0x2039, 0x0400, 0x78d0, 0xa705, 0x78d2, 0x6008, + 0xa705, 0x600a, 0x1078, 0x1cff, 0x609c, 0x78ce, 0x1078, 0x1dcc, + 0x007c, 0x78d0, 0xa084, 0x0100, 0x0040, 0x1c70, 0x0078, 0x1c5a, + 0x601c, 0xa085, 0x0080, 0x601e, 0x0078, 0x1c83, 0x1078, 0x1b23, + 0x00c0, 0x1c5a, 0x1078, 0x1dfe, 0x78d0, 0xa084, 0x0100, 0x0040, + 0x1c83, 0x0078, 0x1c5a, 0x78d3, 0x0000, 0x6004, 0x8007, 0xa084, + 0x00ff, 0x78c6, 0x8001, 0x609f, 0x0000, 0x0040, 0x1c99, 0x1078, + 0x1cff, 0x0040, 0x1c99, 0x78d0, 0xa085, 0x0100, 0x78d2, 0x0078, + 0x1c9b, 0x1078, 0x1d23, 0x007c, 0x1078, 0x1b23, 0x00c0, 0x1c5a, + 0x1078, 0x1dfa, 0x78d0, 0xa08c, 0x0e00, 0x00c0, 0x1cab, 0xa084, + 0x0100, 0x00c0, 0x1cad, 0x0078, 0x1c5a, 0x1078, 0x1cff, 0x00c0, + 0x1cb3, 0x1078, 0x1d23, 0x007c, 0x78d0, 0xa084, 0x0100, 0x0040, + 0x1cbb, 0x0078, 0x1c5a, 0x78d3, 0x0000, 0x6714, 0x2011, 0x0001, + 0x20a9, 0x0001, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0040, 0x1cde, + 0x2011, 0x0001, 0xa7bc, 0xff00, 0x20a9, 0x0020, 0xa08e, 0x0001, + 0x0040, 0x1cde, 0x2039, 0x0000, 0x2011, 0x0002, 0x20a9, 0x0100, + 0xa08e, 0x0002, 0x0040, 0x1cde, 0x0078, 0x1cfc, 0x1078, 0x19c7, + 0x2d00, 0x2091, 0x8000, 0x682b, 0x0000, 0x682f, 0x0000, 0x6808, + 0xa084, 0xffde, 0x680a, 0x2d00, 0xa080, 0x0010, 0x2068, 0x2091, + 0x8001, 0x0070, 0x1cf5, 0x0078, 0x1ce1, 0x8211, 0x0040, 0x1cfc, + 0x20a9, 0x0100, 0x0078, 0x1ce1, 0x1078, 0x19a9, 0x007c, 0x78c8, + 0xa06d, 0x00c0, 0x1d0a, 0x2c00, 0x78ca, 0x78ce, 0x609f, 0x0000, + 0x0078, 0x1d16, 0x2c00, 0x689e, 0x609f, 0x0000, 0x78ca, 0x2d00, + 0x6002, 0x78cc, 0xad06, 0x00c0, 0x1d16, 0x6002, 0x78c4, 0x8001, + 0x78c6, 0x00c0, 0x1d22, 0x78d0, 0xa084, 0x0000, 0x78d2, 0x78cc, + 0x2060, 0xa006, 0x007c, 0xa02e, 0x2530, 0x611c, 0x61a2, 0xa184, + 0xe1ff, 0x601e, 0xa184, 0x0060, 0x0040, 0x1d32, 0x0e7e, 0x1078, + 0x36d9, 0x0e7f, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, + 0x60b3, 0x0000, 0x6714, 0x1078, 0x19c7, 0x2091, 0x8000, 0x60a0, + 0xa084, 0x8000, 0x00c0, 0x1d59, 0x6808, 0xa084, 0x0001, 0x0040, + 0x1d59, 0x2091, 0x8001, 0x1078, 0x1a14, 0x2091, 0x8000, 0x1078, + 0x1b44, 0x2091, 0x8001, 0x78cb, 0x0000, 0x78cf, 0x0000, 0x0078, + 0x1dcb, 0x6024, 0xa096, 0x0001, 0x00c0, 0x1d60, 0x8000, 0x6026, + 0x6a10, 0x6814, 0x2091, 0x8001, 0xa202, 0x0048, 0x1d6f, 0x0040, + 0x1d6f, 0x2039, 0x0200, 0x1078, 0x1dcc, 0x0078, 0x1dcb, 0x2c08, + 0x2091, 0x8000, 0x60a0, 0xa084, 0x8000, 0x0040, 0x1d9c, 0x6800, + 0xa065, 0x0040, 0x1da1, 0x6a04, 0x0e7e, 0x2071, 0x3d40, 0x7000, + 0xa084, 0x0001, 0x0040, 0x1d96, 0x703c, 0xa206, 0x00c0, 0x1d96, + 0x6b04, 0x231c, 0x2160, 0x6302, 0x2300, 0xa005, 0x00c0, 0x1d91, + 0x6902, 0x2260, 0x6102, 0x0e7f, 0x0078, 0x1da8, 0x2160, 0x6202, + 0x6906, 0x0e7f, 0x0078, 0x1da8, 0x6800, 0xa065, 0x0040, 0x1da1, + 0x6102, 0x6902, 0x00c0, 0x1da5, 0x6906, 0x2160, 0x6003, 0x0000, + 0x2160, 0x60a0, 0xa084, 0x8000, 0x0040, 0x1db2, 0x6808, 0xa084, + 0xfffc, 0x680a, 0x6810, 0x8000, 0x6812, 0x2091, 0x8001, 0x6808, + 0xa08c, 0x0040, 0x0040, 0x1dc1, 0xa086, 0x0040, 0x680a, 0x1078, + 0x1a25, 0x2091, 0x8000, 0x1078, 0x1edc, 0x2091, 0x8001, 0x78cf, + 0x0000, 0x78cb, 0x0000, 0x007c, 0x6008, 0xa705, 0x600a, 0x2091, + 0x8000, 0x1078, 0x1b44, 0x2091, 0x8001, 0x78cc, 0xa065, 0x0040, + 0x1ddf, 0x609c, 0x78ce, 0x609f, 0x0000, 0x0078, 0x1dcf, 0x78cb, + 0x0000, 0x78cf, 0x0000, 0x007c, 0x7988, 0x788c, 0x8000, 0xa10a, + 0x00c8, 0x1deb, 0xa006, 0x788e, 0x70d2, 0x7804, 0xa005, 0x0040, + 0x1df9, 0x8001, 0x7806, 0x00c0, 0x1df9, 0x0068, 0x1df9, 0x2091, + 0x4080, 0x007c, 0x2039, 0x1e12, 0x0078, 0x1e00, 0x2039, 0x1e18, + 0x2704, 0xa005, 0x0040, 0x1e11, 0xac00, 0x2068, 0x6b08, 0x6c0c, + 0x6910, 0x6a14, 0x690a, 0x6a0e, 0x6b12, 0x6c16, 0x8738, 0x0078, + 0x1e00, 0x007c, 0x0003, 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, + 0x0015, 0x001b, 0x0000, 0x0068, 0x1e61, 0x2029, 0x0000, 0x7884, + 0xa065, 0x0040, 0x1e5c, 0x2009, 0x3d79, 0x2104, 0xa084, 0x0001, + 0x0040, 0x1e4f, 0x6084, 0xa086, 0x0103, 0x00c0, 0x1e4f, 0x6018, + 0xa005, 0x00c0, 0x1e4f, 0x6014, 0xa005, 0x00c0, 0x1e4f, 0x0d7e, + 0x2069, 0x0000, 0x6818, 0xa084, 0x0001, 0x00c0, 0x1e4e, 0x600c, + 0x70c6, 0x6010, 0x70ca, 0x70c3, 0x8020, 0x681b, 0x0001, 0x2091, + 0x4080, 0x0d7f, 0x1078, 0x1b6c, 0x0078, 0x1e5c, 0x0d7f, 0x1078, + 0x1e62, 0x0040, 0x1e5c, 0x057e, 0x1078, 0x1e73, 0x057f, 0x00c0, + 0x1e5c, 0x8528, 0x0078, 0x1e1f, 0x85ff, 0x0040, 0x1e61, 0x2091, + 0x4080, 0x007c, 0x7ba4, 0x79a8, 0x70d4, 0x007e, 0x007f, 0xa102, + 0x00c0, 0x1e6d, 0x2300, 0xa005, 0x007c, 0x0048, 0x1e71, 0xa302, + 0x007c, 0x8002, 0x007c, 0x7800, 0xa084, 0x0002, 0x0040, 0x1e7f, + 0x2011, 0x04fd, 0x2204, 0xa082, 0x0005, 0x00c8, 0x1e92, 0x2091, + 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x1ec3, 0x7008, + 0x7208, 0xa206, 0x00c0, 0x1ec3, 0xa286, 0x0008, 0x00c0, 0x1ec3, + 0x2071, 0x0010, 0x1078, 0x1ec8, 0x2009, 0x0018, 0x6028, 0xa005, + 0x0040, 0x1e9c, 0x2009, 0x0040, 0x1078, 0x1930, 0x0040, 0x1eb5, + 0x78bc, 0x8000, 0x78be, 0xa086, 0x0002, 0x00c0, 0x1ec3, 0x2091, + 0x8000, 0x78d7, 0x0003, 0x78bf, 0x0000, 0x78c0, 0xa085, 0x0300, + 0x78c2, 0x2091, 0x8001, 0x0078, 0x1ec3, 0x78bf, 0x0000, 0x1078, + 0x1b6c, 0x79a4, 0x78a8, 0x8000, 0xa10a, 0x00c8, 0x1ec0, 0xa006, + 0x78aa, 0x70d6, 0xa006, 0x2071, 0x0010, 0x2091, 0x8001, 0x007c, + 0x8107, 0x8004, 0x8004, 0x7ab0, 0x7bac, 0x7cb8, 0x7db4, 0xa210, + 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c, 0x2009, + 0x3d68, 0x2091, 0x8000, 0x200a, 0x0f7e, 0x2079, 0x0100, 0x2009, + 0x3d40, 0x2104, 0xa086, 0x0000, 0x00c0, 0x1ef5, 0x2009, 0x3d12, + 0x2104, 0xa005, 0x00c0, 0x1ef5, 0x7830, 0xa084, 0x00c0, 0x00c0, + 0x1ef5, 0x0018, 0x1ef5, 0x781b, 0x0045, 0x0f7f, 0x007c, 0x127e, + 0x2091, 0x2300, 0x2071, 0x3d40, 0x2079, 0x0100, 0x784b, 0x000f, + 0x2019, 0x359d, 0x20a1, 0x012b, 0x2304, 0xa005, 0x0040, 0x1f11, + 0x789a, 0x8318, 0x23ac, 0x8318, 0x2398, 0x53a6, 0x3318, 0x0078, + 0x1f04, 0x789b, 0x0020, 0x20a9, 0x0010, 0x78af, 0x0000, 0x78af, + 0x0020, 0x0070, 0x1f1d, 0x0078, 0x1f15, 0x7003, 0x0000, 0x1078, + 0x202f, 0x7004, 0xa084, 0x000f, 0x017e, 0x2009, 0x04fd, 0x210c, + 0xa18a, 0x0005, 0x0048, 0x1f34, 0x0038, 0x1f30, 0x0078, 0x1f34, + 0xa085, 0x62c0, 0x0078, 0x1f36, 0xa085, 0x6280, 0x017f, 0x7806, + 0x780f, 0x9200, 0x7843, 0x00d8, 0x7853, 0x0080, 0x780b, 0x0008, + 0x7047, 0x3d7f, 0x7043, 0x0000, 0x127f, 0x2000, 0x007c, 0xa18c, + 0x000f, 0x2011, 0x0101, 0x2204, 0xa084, 0xfff0, 0xa105, 0x2012, + 0x1078, 0x202f, 0x007c, 0x2011, 0x0101, 0x20a9, 0x0009, 0x810b, + 0x0070, 0x1f5c, 0x0078, 0x1f57, 0xa18c, 0x0e00, 0x2204, 0xa084, + 0xf1ff, 0xa105, 0x2012, 0x007c, 0x2009, 0x0101, 0x20a9, 0x0005, + 0x8213, 0x0070, 0x1f6d, 0x0078, 0x1f68, 0xa294, 0x00e0, 0x2104, + 0xa084, 0xff1f, 0xa205, 0x200a, 0x007c, 0x2011, 0x0101, 0x20a9, + 0x000c, 0x810b, 0x0070, 0x1f7e, 0x0078, 0x1f79, 0xa18c, 0xf000, + 0x2204, 0xa084, 0x0fff, 0xa105, 0x2012, 0x007c, 0x2011, 0x0102, + 0x2204, 0xa084, 0xffcf, 0xa105, 0x2012, 0x007c, 0x8103, 0x8003, + 0xa080, 0x0020, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x62ac, 0x63ac, + 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0022, 0x0c7e, 0x2061, + 0x0100, 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x0c7f, 0x007c, + 0x8103, 0x8003, 0xa080, 0x0022, 0x0c7e, 0x2061, 0x0100, 0x609a, + 0x60a4, 0xa085, 0x0020, 0x60ae, 0x0c7f, 0x007c, 0x8103, 0x8003, + 0xa080, 0x0020, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, 0x62ae, + 0x2010, 0x60a4, 0x63ae, 0x2018, 0x0c7f, 0x007c, 0x2091, 0x8000, + 0x0c7e, 0x0e7e, 0x6818, 0xa005, 0x0040, 0x200d, 0x2061, 0x6100, + 0x1078, 0x2015, 0x0040, 0x1ff9, 0x20a9, 0x0000, 0x2061, 0x6000, + 0x0c7e, 0x1078, 0x2015, 0x0040, 0x1fe5, 0x0c7f, 0x8c60, 0x0070, + 0x1fe3, 0x0078, 0x1fd8, 0x0078, 0x200d, 0x007f, 0xa082, 0x6000, + 0x2071, 0x3d40, 0x70ba, 0x6020, 0xa085, 0x0800, 0x6022, 0x71b6, + 0x2001, 0x0004, 0x70a2, 0x70c7, 0x000f, 0x1078, 0x1ed7, 0x0078, + 0x2009, 0x2071, 0x3d40, 0x6020, 0xa085, 0x0800, 0x6022, 0x71b6, + 0x2c00, 0x70be, 0x2001, 0x0006, 0x70a2, 0x70c7, 0x000f, 0x1078, + 0x1ed7, 0x2001, 0x0000, 0x0078, 0x200f, 0x2001, 0x0001, 0x2091, + 0x8001, 0xa005, 0x0e7f, 0x0c7f, 0x007c, 0x2c04, 0xa005, 0x0040, + 0x202c, 0x2060, 0x6010, 0xa306, 0x00c0, 0x2029, 0x600c, 0xa206, + 0x00c0, 0x2029, 0x6014, 0xa106, 0x00c0, 0x2029, 0xa006, 0x0078, + 0x202e, 0x6000, 0x0078, 0x2016, 0xa085, 0x0001, 0x007c, 0x2011, + 0x3d41, 0x220c, 0xa18c, 0x000f, 0x2011, 0x013b, 0x2204, 0xa084, + 0x0100, 0x0040, 0x2045, 0x2021, 0xff04, 0x2122, 0x810b, 0x810b, + 0x810b, 0x810b, 0xa18d, 0x0f00, 0x2104, 0x007c, 0x0e7e, 0x68e4, + 0xa08c, 0x0020, 0x0040, 0x2099, 0xa084, 0x0006, 0x00c0, 0x2099, + 0x6014, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0f0, + 0x3f80, 0x7004, 0xa084, 0x000a, 0x00c0, 0x2099, 0x7108, 0xa194, + 0xff00, 0x0040, 0x2099, 0xa18c, 0x00ff, 0x2001, 0x000c, 0xa106, + 0x0040, 0x2080, 0x2001, 0x0012, 0xa106, 0x0040, 0x2084, 0x2001, + 0x0014, 0xa106, 0x0040, 0x2088, 0x2001, 0x0019, 0xa106, 0x0040, + 0x208c, 0x2001, 0x0032, 0xa106, 0x0040, 0x2090, 0x0078, 0x2094, + 0x2009, 0x0012, 0x0078, 0x2096, 0x2009, 0x0014, 0x0078, 0x2096, + 0x2009, 0x0019, 0x0078, 0x2096, 0x2009, 0x0020, 0x0078, 0x2096, + 0x2009, 0x003f, 0x0078, 0x2096, 0x2011, 0x0000, 0x2100, 0xa205, + 0x700a, 0x0e7f, 0x007c, 0x0068, 0x209b, 0x2091, 0x8000, 0x2071, + 0x0000, 0x007e, 0x7018, 0xa084, 0x0001, 0x00c0, 0x20a2, 0x007f, + 0x2071, 0x0010, 0x70ca, 0x007f, 0x70c6, 0x70c3, 0x8002, 0x70db, + 0x0441, 0x70df, 0x0000, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, + 0x4080, 0x0078, 0x20b9, 0x107e, 0x007e, 0x127e, 0x2091, 0x2300, + 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x2009, 0x3d74, 0x78a0, 0x200a, + 0x8108, 0x250a, 0x8108, 0x240a, 0x8108, 0x260a, 0x8108, 0x270a, + 0xa594, 0x003f, 0xa484, 0x4000, 0x0040, 0x20df, 0xa784, 0x007d, + 0x00c0, 0x3526, 0xd784, 0x00c0, 0x2c9c, 0x1078, 0x209b, 0xa49c, + 0x000f, 0xa382, 0x0004, 0x0050, 0x20e7, 0x1078, 0x209b, 0x8507, + 0xa084, 0x000f, 0x0079, 0x20ec, 0x25a2, 0x265d, 0x2685, 0x2912, + 0x2b8c, 0x2bcf, 0x2c17, 0x2c9c, 0x2d43, 0x2dd4, 0x2114, 0x20fc, + 0x23eb, 0x24c2, 0x2b67, 0x20fc, 0x1078, 0x209b, 0x0018, 0x20c0, + 0x127f, 0x2091, 0x8001, 0x007f, 0x107f, 0x007c, 0x7003, 0x0000, + 0x703f, 0x0000, 0x7030, 0xa005, 0x0040, 0x2110, 0x7033, 0x0000, + 0x1078, 0x34fc, 0x0018, 0x20c0, 0x2009, 0x3d0f, 0x200b, 0x0000, + 0x705c, 0xa005, 0x00c0, 0x21e9, 0x70a0, 0xa084, 0x0007, 0x0079, + 0x2121, 0x2215, 0x2129, 0x2137, 0x2154, 0x2176, 0x21c3, 0x219c, + 0x2129, 0x7808, 0xa084, 0xfffd, 0x780a, 0x2009, 0x0047, 0x1078, + 0x2a46, 0x00c0, 0x2135, 0x7003, 0x0004, 0x0078, 0x20fe, 0x1078, + 0x34e3, 0x00c0, 0x2152, 0x70b4, 0x8007, 0x7882, 0x789b, 0x0010, + 0x78ab, 0x000c, 0x789b, 0x0060, 0x78ab, 0x0001, 0x785b, 0x0004, + 0x2009, 0x00fc, 0x1078, 0x2a44, 0x00c0, 0x2152, 0x7003, 0x0004, + 0x70c7, 0x000f, 0x0078, 0x20fe, 0x1078, 0x34e3, 0x00c0, 0x2174, + 0x71b4, 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, 0x001f, 0xa18d, + 0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b, 0x0060, 0x78ab, 0x0002, + 0x785b, 0x0004, 0x2009, 0x00fc, 0x1078, 0x2a44, 0x00c0, 0x2174, + 0x7003, 0x0004, 0x70c7, 0x000f, 0x0078, 0x20fe, 0x1078, 0x34e3, + 0x00c0, 0x219a, 0x71b4, 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, + 0x001f, 0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0020, 0x71b8, 0x79aa, + 0x78ab, 0x000d, 0x789b, 0x0060, 0x78ab, 0x0004, 0x785b, 0x0004, + 0x2009, 0x00fc, 0x1078, 0x2a44, 0x00c0, 0x219a, 0x7003, 0x0004, + 0x70c7, 0x000f, 0x0078, 0x20fe, 0x1078, 0x34e3, 0x00c0, 0x21c1, + 0x71b4, 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, 0x001f, 0xa18d, + 0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b, 0x0060, 0x78ab, 0x0002, + 0x785b, 0x0004, 0x2009, 0x00fc, 0x1078, 0x2a44, 0x00c0, 0x21c1, + 0x70bc, 0x70bf, 0x0000, 0x2068, 0x703e, 0x7003, 0x0002, 0x70c7, + 0x000f, 0x0078, 0x20fe, 0x1078, 0x34e3, 0x00c0, 0x20fe, 0x70bc, + 0x2068, 0x6f14, 0x1078, 0x33ea, 0x2c50, 0x1078, 0x358b, 0x789b, + 0x0010, 0x6814, 0xa084, 0x001f, 0xa085, 0x0080, 0x007e, 0x007f, + 0x78aa, 0x6e1c, 0x067e, 0x067f, 0x2041, 0x0001, 0x70c0, 0xa084, + 0x0400, 0x2001, 0x0004, 0x0040, 0x21e7, 0x2001, 0x0006, 0x0078, + 0x2307, 0x1078, 0x34e3, 0x00c0, 0x20fe, 0x789b, 0x0010, 0x705c, + 0x2068, 0x6f14, 0x1078, 0x33ea, 0x2c50, 0x1078, 0x358b, 0x6008, + 0xa085, 0x0010, 0x600a, 0x6824, 0xa005, 0x0040, 0x2207, 0xa082, + 0x0006, 0x0048, 0x2205, 0x0078, 0x2207, 0x6827, 0x0005, 0x6814, + 0xa084, 0x001f, 0xa085, 0x0080, 0x78aa, 0x2031, 0x0020, 0x2041, + 0x0001, 0x2001, 0x0003, 0x0078, 0x2307, 0x0018, 0x20c0, 0x7440, + 0xa485, 0x0000, 0x0040, 0x223f, 0xa080, 0x3d80, 0x2030, 0x7144, + 0x0018, 0x20c0, 0x8108, 0xa12a, 0x0048, 0x2228, 0x2009, 0x3d80, + 0x2164, 0x6504, 0x85ff, 0x00c0, 0x224c, 0x8421, 0x00c0, 0x2220, + 0x017e, 0x2009, 0x3d0f, 0x2104, 0xa005, 0x00c0, 0x223d, 0x017e, + 0x2009, 0x3d10, 0x2104, 0x017f, 0x200a, 0x017f, 0x7146, 0x7003, + 0x0000, 0x703f, 0x0000, 0x0078, 0x20fe, 0x7640, 0xa6b0, 0x3d80, + 0x7144, 0x2600, 0x0078, 0x222d, 0x7146, 0x2568, 0x2558, 0x753e, + 0x2c50, 0x6034, 0xa085, 0x0000, 0x00c0, 0x2249, 0x6708, 0x7736, + 0xa784, 0x013f, 0x0040, 0x227a, 0xa784, 0x0021, 0x00c0, 0x2249, + 0xa784, 0x0002, 0x0040, 0x226b, 0xa784, 0x0004, 0x0040, 0x2249, + 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0018, 0x00c0, 0x2249, 0xa784, + 0x0100, 0x0040, 0x227a, 0x6018, 0xa005, 0x00c0, 0x2249, 0xa7bc, + 0xfeff, 0x670a, 0x6823, 0x0000, 0x6e1c, 0xa684, 0x000e, 0x6118, + 0x0040, 0x228a, 0x601c, 0xa102, 0x0048, 0x228d, 0x0040, 0x228d, + 0x0078, 0x2245, 0x81ff, 0x00c0, 0x2245, 0xa784, 0x0080, 0x00c0, + 0x2293, 0x700c, 0x6022, 0xa7bc, 0xff7f, 0x670a, 0x1078, 0x358b, + 0x0018, 0x20c0, 0x789b, 0x0010, 0xa046, 0x1078, 0x34e3, 0x00c0, + 0x20fe, 0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0, 0x704c, 0xa084, + 0x8000, 0x0040, 0x22af, 0xa684, 0x0001, 0x0040, 0x22b1, 0xa39c, + 0xffbf, 0xa684, 0x0010, 0x0040, 0x22b7, 0xa39d, 0x0020, 0x7baa, + 0x8840, 0xa684, 0x000e, 0x00c0, 0x22c2, 0xa7bd, 0x0010, 0x670a, + 0x0078, 0x2303, 0x714c, 0xa18c, 0x0800, 0x0040, 0x2fef, 0x2011, + 0x0021, 0x8004, 0x8004, 0x0048, 0x22d9, 0x2011, 0x0022, 0x8004, + 0x0048, 0x22d9, 0x2011, 0x0020, 0x8004, 0x0048, 0x22d9, 0x0040, + 0x2303, 0x7aaa, 0x8840, 0x1078, 0x34fc, 0x6a14, 0x610c, 0x8108, + 0xa18c, 0x00ff, 0xa1e0, 0x6000, 0x2c64, 0x8cff, 0x0040, 0x22fa, + 0x6014, 0xa206, 0x00c0, 0x22e4, 0x60b8, 0x8001, 0x60ba, 0x00c0, + 0x22df, 0x0c7e, 0x2a60, 0x6008, 0xa085, 0x0100, 0x600a, 0x0c7f, + 0x0078, 0x2215, 0x1078, 0x34e3, 0x00c0, 0x20fe, 0x2a60, 0x610e, + 0x79aa, 0x8840, 0x712e, 0x0018, 0x20c0, 0x2001, 0x0001, 0x007e, + 0x7150, 0xa184, 0x0018, 0x0040, 0x2322, 0xa184, 0x0010, 0x0040, + 0x2315, 0x1078, 0x3214, 0x00c0, 0x2345, 0xa184, 0x0008, 0x0040, + 0x2322, 0x69a0, 0xa184, 0x0600, 0x00c0, 0x2322, 0x1078, 0x3110, + 0x0078, 0x2345, 0x69a0, 0xa184, 0x0800, 0x0040, 0x2339, 0x0c7e, + 0x027e, 0x2960, 0x6000, 0xa085, 0x2000, 0x6002, 0x6104, 0xa18d, + 0x0010, 0x6106, 0x027f, 0x0c7f, 0x1078, 0x3214, 0x00c0, 0x2345, + 0x69a0, 0xa184, 0x0200, 0x0040, 0x2341, 0x1078, 0x315f, 0x0078, + 0x2345, 0xa184, 0x0400, 0x00c0, 0x231e, 0x69a0, 0xa184, 0x1000, + 0x0040, 0x2350, 0x6914, 0xa18c, 0xff00, 0x810f, 0x1078, 0x1f9a, + 0x007f, 0x0018, 0x20c0, 0x7002, 0xa68c, 0x00e0, 0xa684, 0x0060, + 0x0040, 0x2360, 0xa086, 0x0060, 0x00c0, 0x2360, 0xa18d, 0x4000, + 0x88ff, 0x0040, 0x2365, 0xa18d, 0x0004, 0x795a, 0x69b6, 0x789b, + 0x0060, 0x2800, 0x78aa, 0x789b, 0x0061, 0x6818, 0xa08d, 0x8000, + 0xa084, 0x7fff, 0x691a, 0xa68c, 0x0080, 0x0040, 0x2384, 0x70cb, + 0x0000, 0xa08a, 0x000d, 0x0050, 0x2382, 0xa08a, 0x000c, 0x71ca, + 0x2001, 0x000c, 0x800c, 0x71ce, 0x78aa, 0x8008, 0x810c, 0x0040, + 0x2ff5, 0xa18c, 0x00f8, 0x00c0, 0x2ff5, 0x157e, 0x137e, 0x147e, + 0x20a1, 0x012b, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, + 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6814, 0x8007, 0x7882, + 0x6d94, 0x7dd6, 0x7dde, 0x6e98, 0x7ed2, 0x7eda, 0x7830, 0xa084, + 0x00c0, 0x00c0, 0x23ad, 0x0098, 0x23b5, 0x6008, 0xa084, 0xffef, + 0x600a, 0x1078, 0x34fc, 0x0078, 0x2106, 0x7200, 0xa284, 0x0007, + 0xa086, 0x0001, 0x00c0, 0x23c2, 0x781b, 0x004a, 0x1078, 0x34fc, + 0x0078, 0x23d3, 0x6ab4, 0xa295, 0x2000, 0x7a5a, 0x781b, 0x004a, + 0x1078, 0x34fc, 0x7200, 0x2500, 0xa605, 0x0040, 0x23d3, 0xa284, + 0x0007, 0x1079, 0x23e1, 0xad80, 0x0009, 0x7032, 0xa284, 0x0007, + 0xa086, 0x0001, 0x00c0, 0x20fe, 0x6018, 0x8000, 0x601a, 0x0078, + 0x20fe, 0x23e9, 0x3943, 0x3943, 0x3932, 0x3943, 0x23e9, 0x3932, + 0x23e9, 0x1078, 0x209b, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0f7e, + 0x2079, 0x3d00, 0x78c0, 0x0f7f, 0xa084, 0x0001, 0x0040, 0x2411, + 0x70a0, 0xa086, 0x0001, 0x00c0, 0x2400, 0x70a2, 0x0078, 0x24a4, + 0x70a0, 0xa086, 0x0005, 0x00c0, 0x240f, 0x70bc, 0x2068, 0x681b, + 0x0004, 0x6817, 0x0000, 0x6820, 0xa085, 0x0008, 0x6822, 0x70a3, + 0x0000, 0x157e, 0x2011, 0x0004, 0x71a0, 0xa186, 0x0001, 0x0040, + 0x2433, 0xa186, 0x0007, 0x00c0, 0x2423, 0x2009, 0x3d35, 0x200b, + 0x0005, 0x0078, 0x2433, 0x2009, 0x3d13, 0x2104, 0x2009, 0x3d12, + 0x200a, 0x2009, 0x3d35, 0x200b, 0x0001, 0x70a3, 0x0000, 0x70a7, + 0x0001, 0x0078, 0x2435, 0x70a3, 0x0000, 0x1078, 0x368f, 0x20a9, + 0x0010, 0x2039, 0x0000, 0x1078, 0x32e1, 0xa7b8, 0x0100, 0x0070, + 0x2443, 0x0078, 0x243b, 0x7000, 0x0079, 0x2446, 0x2476, 0x245d, + 0x245d, 0x2450, 0x2476, 0x2476, 0x2476, 0x244e, 0x1078, 0x209b, + 0x2021, 0x3d57, 0x2404, 0xa005, 0x0040, 0x2476, 0xad06, 0x00c0, + 0x245d, 0x6800, 0x2022, 0x0078, 0x246d, 0x6820, 0xa084, 0x0001, + 0x00c0, 0x2469, 0x6f14, 0x1078, 0x33ea, 0x1078, 0x2fc6, 0x0078, + 0x246d, 0x7054, 0x2060, 0x6800, 0x6002, 0x6a1a, 0x6817, 0x0000, + 0x6820, 0xa085, 0x0008, 0x6822, 0x1078, 0x1b56, 0x2021, 0x6100, + 0x1078, 0x24aa, 0x2021, 0x3d57, 0x1078, 0x24aa, 0x20a9, 0x0000, + 0x2021, 0x6000, 0x1078, 0x24aa, 0x8420, 0x0070, 0x2489, 0x0078, + 0x2482, 0x2061, 0x4000, 0x2021, 0x0002, 0x20a9, 0x0100, 0x6018, + 0x6110, 0x81ff, 0x0040, 0x2498, 0xa102, 0x0050, 0x2498, 0x6012, + 0x601b, 0x0000, 0xace0, 0x0010, 0x0070, 0x24a0, 0x0078, 0x248f, + 0x8421, 0x00c0, 0x248d, 0x157f, 0x7003, 0x0000, 0x703f, 0x0000, + 0x0078, 0x20fe, 0x047e, 0x2404, 0xa005, 0x0040, 0x24be, 0x2068, + 0x6800, 0x007e, 0x6a1a, 0x6817, 0x0000, 0x6820, 0xa085, 0x0008, + 0x6822, 0x1078, 0x1b56, 0x007f, 0x0078, 0x24ac, 0x047f, 0x2023, + 0x0000, 0x007c, 0xa282, 0x0003, 0x0050, 0x24c8, 0x1078, 0x209b, + 0x2300, 0x0079, 0x24cb, 0x24ce, 0x2541, 0x255e, 0xa282, 0x0002, + 0x0040, 0x24d4, 0x1078, 0x209b, 0x70a0, 0x70a3, 0x0000, 0x70c7, + 0x0000, 0x0079, 0x24db, 0x24e3, 0x24e3, 0x24e5, 0x2519, 0x2ffb, + 0x24e3, 0x2519, 0x24e3, 0x1078, 0x209b, 0x77b4, 0x1078, 0x32e1, + 0x77b4, 0xa7bc, 0x0f00, 0x1078, 0x33ea, 0x6018, 0xa005, 0x0040, + 0x2510, 0x2021, 0x6100, 0x2009, 0x0004, 0x2011, 0x0010, 0x1078, + 0x257b, 0x0040, 0x2510, 0x157e, 0x20a9, 0x0000, 0x2021, 0x6000, + 0x047e, 0x2009, 0x0004, 0x2011, 0x0010, 0x1078, 0x257b, 0x047f, + 0x0040, 0x250f, 0x8420, 0x0070, 0x250f, 0x0078, 0x2500, 0x157f, + 0x8738, 0xa784, 0x001f, 0x00c0, 0x24eb, 0x0078, 0x2106, 0x0078, + 0x2106, 0x77b4, 0x1078, 0x33ea, 0x6018, 0xa005, 0x0040, 0x253f, + 0x2021, 0x6100, 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x257b, + 0x0040, 0x253f, 0x157e, 0x20a9, 0x0000, 0x2021, 0x6000, 0x047e, + 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x257b, 0x047f, 0x0040, + 0x253e, 0x8420, 0x0070, 0x253e, 0x0078, 0x252f, 0x157f, 0x0078, + 0x2106, 0x2200, 0x0079, 0x2544, 0x2547, 0x2549, 0x2549, 0x1078, + 0x209b, 0x2009, 0x0012, 0x70a0, 0xa086, 0x0002, 0x0040, 0x2552, + 0x2009, 0x000e, 0x6818, 0xa084, 0x8000, 0x0040, 0x2558, 0x691a, + 0x70a3, 0x0000, 0x70a7, 0x0001, 0x0078, 0x347b, 0x2200, 0x0079, + 0x2561, 0x2566, 0x2549, 0x2564, 0x1078, 0x209b, 0x7000, 0xa086, + 0x0001, 0x00c0, 0x2577, 0x1078, 0x2fdc, 0x6008, 0xa084, 0xffef, + 0x600a, 0x1078, 0x2f7e, 0x0040, 0x2577, 0x0078, 0x2215, 0x1078, + 0x2a53, 0x0078, 0x2f8b, 0x2404, 0xa005, 0x0040, 0x259e, 0x2068, + 0x2d04, 0x007e, 0x6814, 0xa706, 0x0040, 0x258a, 0x2d20, 0x007f, + 0x0078, 0x257c, 0x007f, 0x2022, 0x691a, 0x6817, 0x0000, 0x6820, + 0xa205, 0x6822, 0x1078, 0x1b56, 0x6010, 0x8001, 0x6012, 0x6008, + 0xa084, 0xffef, 0x600a, 0x1078, 0x2fdc, 0x007c, 0xa085, 0x0001, + 0x0078, 0x259d, 0x2300, 0x0079, 0x25a5, 0x25aa, 0x25a8, 0x2603, + 0x1078, 0x209b, 0x78e4, 0xa005, 0x00d0, 0x25cd, 0x0018, 0x20fe, + 0x2008, 0xa084, 0x0030, 0x00c0, 0x25b9, 0x781b, 0x004a, 0x0078, + 0x20fe, 0x78ec, 0xa084, 0x0003, 0x0040, 0x25b5, 0x2100, 0xa084, + 0x0007, 0x0079, 0x25c3, 0x25de, 0x25e9, 0x25d1, 0x25cb, 0x34d6, + 0x34d6, 0x25cb, 0x25f6, 0x1078, 0x209b, 0x2001, 0x0003, 0x0078, + 0x2926, 0x6818, 0xa084, 0x8000, 0x0040, 0x25d8, 0x681b, 0x001d, + 0x1078, 0x32c4, 0x781b, 0x0053, 0x0078, 0x20fe, 0x6818, 0xa084, + 0x8000, 0x0040, 0x25e5, 0x681b, 0x001d, 0x1078, 0x32c4, 0x0078, + 0x34a7, 0x6818, 0xa084, 0x8000, 0x0040, 0x25f0, 0x681b, 0x001d, + 0x1078, 0x32c4, 0x781b, 0x00e5, 0x0078, 0x20fe, 0x6818, 0xa084, + 0x8000, 0x0040, 0x25fd, 0x681b, 0x001d, 0x1078, 0x32c4, 0x781b, + 0x009c, 0x0078, 0x20fe, 0xa584, 0x000f, 0x00c0, 0x2624, 0x7000, + 0x0079, 0x260a, 0x2612, 0x2614, 0x2612, 0x2620, 0x2620, 0x2620, + 0x2620, 0x2612, 0x1078, 0x209b, 0x1078, 0x2fdc, 0x6008, 0xa084, + 0xffef, 0x600a, 0x1078, 0x2f7e, 0x0040, 0x2620, 0x0078, 0x2215, + 0x1078, 0x2a53, 0x0078, 0x2f8b, 0x78e4, 0xa005, 0x00d0, 0x25cd, + 0x0018, 0x25cd, 0x2008, 0xa084, 0x0030, 0x00c0, 0x2633, 0x781b, + 0x004a, 0x0078, 0x20fe, 0x78ec, 0xa084, 0x0003, 0x0040, 0x262f, + 0x2100, 0xa184, 0x0007, 0x0079, 0x263d, 0x264d, 0x2651, 0x2647, + 0x2645, 0x34d6, 0x34d6, 0x2645, 0x34ce, 0x1078, 0x209b, 0x1078, + 0x32cc, 0x781b, 0x0053, 0x0078, 0x20fe, 0x1078, 0x32cc, 0x0078, + 0x34a7, 0x1078, 0x32cc, 0x781b, 0x00e5, 0x0078, 0x20fe, 0x1078, + 0x32cc, 0x781b, 0x009c, 0x0078, 0x20fe, 0x2300, 0x0079, 0x2660, + 0x2665, 0x2663, 0x2667, 0x1078, 0x209b, 0x0078, 0x2c9c, 0x681b, + 0x0008, 0x78a3, 0x0000, 0x79e4, 0xa184, 0x0030, 0x0040, 0x2c9c, + 0x78ec, 0xa084, 0x0003, 0x0040, 0x2c9c, 0xa184, 0x0007, 0x0079, + 0x2679, 0x2681, 0x2651, 0x25d1, 0x347b, 0x34d6, 0x34d6, 0x2681, + 0x34ce, 0x1078, 0x348b, 0x0078, 0x20fe, 0xa282, 0x0005, 0x0050, + 0x268b, 0x1078, 0x209b, 0x2300, 0x0079, 0x268e, 0x2691, 0x28d7, + 0x28e3, 0x2200, 0x0079, 0x2694, 0x26ae, 0x269b, 0x26ae, 0x2699, + 0x28bc, 0x1078, 0x209b, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, + 0xa082, 0x0020, 0x0048, 0x32a6, 0xa08a, 0x0004, 0x00c8, 0x32a6, + 0x0079, 0x26aa, 0x32a6, 0x32a6, 0x32a6, 0x3254, 0x789b, 0x0018, + 0x79a8, 0xa184, 0x0080, 0x0040, 0x26bf, 0x0078, 0x32a6, 0x7000, + 0xa005, 0x00c0, 0x26b5, 0x2011, 0x0004, 0x0078, 0x2de2, 0xa184, + 0x00ff, 0xa08a, 0x0010, 0x00c8, 0x32a6, 0x0079, 0x26c7, 0x26d9, + 0x26d7, 0x26f1, 0x26f5, 0x27b0, 0x32a6, 0x32a6, 0x27b2, 0x32a6, + 0x32a6, 0x28b8, 0x28b8, 0x32a6, 0x32a6, 0x32a6, 0x28ba, 0x1078, + 0x209b, 0xa684, 0x1000, 0x0040, 0x26e6, 0x2001, 0x0300, 0x8000, + 0x8000, 0x783a, 0x781b, 0x0099, 0x0078, 0x20fe, 0x6818, 0xa084, + 0x8000, 0x0040, 0x26ef, 0x681b, 0x001d, 0x0078, 0x26dd, 0x0078, + 0x347b, 0x681b, 0x001d, 0x0078, 0x32b2, 0x6920, 0x6922, 0xa684, + 0x1800, 0x00c0, 0x2736, 0x6820, 0xa084, 0x0001, 0x00c0, 0x273c, + 0x6818, 0xa086, 0x0008, 0x00c0, 0x2707, 0x681b, 0x0000, 0xa684, + 0x0400, 0x0040, 0x27ac, 0xa684, 0x0080, 0x0040, 0x2732, 0x70cb, + 0x0000, 0x6818, 0xa084, 0x003f, 0xa08a, 0x000d, 0x0050, 0x2732, + 0xa08a, 0x000c, 0x71ca, 0x2001, 0x000c, 0x800c, 0x71ce, 0x789b, + 0x0061, 0x78aa, 0x157e, 0x137e, 0x147e, 0x20a1, 0x012b, 0x789b, + 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, + 0x137f, 0x157f, 0x781b, 0x0056, 0x0078, 0x20fe, 0xa684, 0x1000, + 0x0040, 0x273c, 0x0078, 0x20fe, 0xa684, 0x0060, 0x0040, 0x27a8, + 0xa684, 0x0800, 0x0040, 0x27a8, 0xa684, 0x8000, 0x00c0, 0x274a, + 0x0078, 0x2764, 0xa6b4, 0x7fff, 0x7e5a, 0x6eb6, 0x789b, 0x0076, + 0x7aac, 0x79ac, 0x78ac, 0x801b, 0x00c8, 0x2757, 0x8000, 0xa084, + 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, + 0x6b94, 0x2200, 0xa303, 0x68ae, 0xa684, 0x4000, 0x0040, 0x276c, + 0xa6b4, 0xbfff, 0x7e5a, 0x6eb6, 0x7000, 0xa086, 0x0003, 0x00c0, + 0x2779, 0x1078, 0x3735, 0x1078, 0x3932, 0x781b, 0x0065, 0x0078, + 0x20fe, 0xa006, 0x1078, 0x3a01, 0x6ab0, 0x69ac, 0x6c98, 0x6b94, + 0x2200, 0xa105, 0x0040, 0x2788, 0x2200, 0xa422, 0x2100, 0xa31b, + 0x6caa, 0x7cd2, 0x7cda, 0x6ba6, 0x7bd6, 0x7bde, 0x2300, 0xa405, + 0x00c0, 0x279a, 0xa6b5, 0x4000, 0x7e5a, 0x6eb6, 0x781b, 0x0065, + 0x0078, 0x20fe, 0x781b, 0x0065, 0x2200, 0xa115, 0x00c0, 0x27a4, + 0x1078, 0x3943, 0x0078, 0x20fe, 0x1078, 0x3978, 0x0078, 0x20fe, + 0x781b, 0x0068, 0x0078, 0x20fe, 0x781b, 0x0056, 0x0078, 0x20fe, + 0x1078, 0x209b, 0x0078, 0x280f, 0x6920, 0xa184, 0x0100, 0x0040, + 0x27ca, 0xa18c, 0xfeff, 0x6922, 0x0c7e, 0x7048, 0x2060, 0x6000, + 0xa084, 0xefff, 0x6002, 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, + 0x0078, 0x27fe, 0xa184, 0x0200, 0x0040, 0x27fe, 0xa18c, 0xfdff, + 0x6922, 0x0c7e, 0x7048, 0x2060, 0x6000, 0xa084, 0xdfff, 0x6002, + 0x6004, 0xa084, 0xffef, 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xa184, + 0x0008, 0x0040, 0x27fe, 0x1078, 0x33e6, 0x1078, 0x3110, 0x88ff, + 0x0040, 0x27fe, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5, + 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x27fa, 0x781b, 0x0053, + 0x0078, 0x20fe, 0x781b, 0x0067, 0x0078, 0x20fe, 0x7e58, 0xa684, + 0x0400, 0x00c0, 0x2807, 0x781b, 0x0056, 0x0078, 0x20fe, 0x781b, + 0x0068, 0x0078, 0x20fe, 0x0078, 0x32ac, 0x0078, 0x32ac, 0x2019, + 0x0000, 0x7990, 0xa18c, 0x0007, 0x0040, 0x280d, 0x789b, 0x0010, + 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, 0x00c0, 0x284d, 0x2300, + 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040, 0x2845, 0x0048, 0x282a, + 0x0078, 0x2847, 0xa380, 0x0002, 0xa102, 0x00c8, 0x2845, 0x6920, + 0xa18c, 0xfcff, 0x6922, 0x0c7e, 0x7048, 0x2060, 0x6000, 0xa084, + 0xefef, 0x6002, 0x6004, 0xa084, 0xffe5, 0x6006, 0x0c7f, 0x7e58, + 0xa6b4, 0xfffb, 0x7e5a, 0x0078, 0x27ff, 0x0078, 0x27b4, 0x24a8, + 0x7aa8, 0x00f0, 0x2847, 0x0078, 0x2818, 0xa284, 0x00f0, 0xa086, + 0x0020, 0x00c0, 0x28a9, 0x8318, 0x8318, 0x2300, 0xa102, 0x0040, + 0x285d, 0x0048, 0x285d, 0x0078, 0x28a6, 0xa286, 0x0023, 0x0040, + 0x280d, 0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, 0xa684, 0xfff1, + 0xa085, 0x0010, 0x2030, 0x7e5a, 0x6008, 0xa085, 0x0010, 0x600a, + 0x0c7e, 0x7048, 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xa184, + 0x0010, 0x0040, 0x2881, 0x1078, 0x33e6, 0x1078, 0x3214, 0x0078, + 0x2890, 0x0c7e, 0x7048, 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, + 0xa184, 0x0008, 0x0040, 0x27fe, 0x1078, 0x33e6, 0x1078, 0x3110, + 0x88ff, 0x0040, 0x27fe, 0x789b, 0x0060, 0x2800, 0x78aa, 0xa6b5, + 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x28a2, 0x781b, 0x0053, + 0x0078, 0x20fe, 0x781b, 0x0067, 0x0078, 0x20fe, 0x7aa8, 0x0078, + 0x2818, 0x8318, 0x2300, 0xa102, 0x0040, 0x28b2, 0x0048, 0x28b2, + 0x0078, 0x2818, 0xa284, 0x0080, 0x00c0, 0x32b2, 0x0078, 0x32ac, + 0x0078, 0x32b2, 0x0078, 0x32a6, 0x789b, 0x0018, 0x78a8, 0xa084, + 0x00ff, 0xa08e, 0x0001, 0x0040, 0x28c7, 0x1078, 0x209b, 0x7aa8, + 0xa294, 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, 0x00c8, + 0x32a6, 0x0079, 0x28d3, 0x302c, 0x3063, 0x32a6, 0x31af, 0xa282, + 0x0000, 0x00c0, 0x28dd, 0x1078, 0x209b, 0x1078, 0x32c4, 0x781b, + 0x0067, 0x0078, 0x20fe, 0xa282, 0x0003, 0x00c0, 0x28e9, 0x1078, + 0x209b, 0xa484, 0x8000, 0x00c0, 0x290c, 0x70a0, 0xa005, 0x0040, + 0x28f3, 0x1078, 0x209b, 0x6f14, 0x77b6, 0xa7bc, 0x0f00, 0x1078, + 0x33ea, 0x6008, 0xa085, 0x0021, 0x600a, 0x8738, 0xa784, 0x001f, + 0x00c0, 0x28f7, 0x1078, 0x32c8, 0x70a3, 0x0002, 0x2009, 0x3d35, + 0x200b, 0x0009, 0x0078, 0x290e, 0x1078, 0x32d4, 0x781b, 0x0067, + 0x0078, 0x20fe, 0xa282, 0x0004, 0x0050, 0x2918, 0x1078, 0x209b, + 0x2300, 0x0079, 0x291b, 0x291e, 0x29ff, 0x2a2e, 0xa286, 0x0003, + 0x0040, 0x2924, 0x1078, 0x209b, 0x2001, 0x0000, 0x007e, 0x68a0, + 0xa084, 0x2000, 0x0040, 0x2930, 0x6008, 0xa085, 0x0002, 0x600a, + 0x007f, 0x703a, 0x7000, 0xa084, 0x0007, 0x0079, 0x2937, 0x2106, + 0x2941, 0x2941, 0x2b1c, 0x2b4d, 0x2106, 0x2b4d, 0x293f, 0x1078, + 0x209b, 0xa684, 0x1000, 0x00c0, 0x2949, 0x1078, 0x368f, 0x0040, + 0x29d9, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x298f, 0xa186, 0x0008, + 0x00c0, 0x2960, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x2f7e, + 0x0040, 0x298f, 0x1078, 0x2fdc, 0x1078, 0x368f, 0x0078, 0x2976, + 0xa186, 0x0028, 0x00c0, 0x298f, 0x1078, 0x368f, 0x6008, 0xa084, + 0xffef, 0x600a, 0x6018, 0xa005, 0x0040, 0x2976, 0x8001, 0x601a, + 0x6008, 0xa085, 0x0008, 0x600a, 0x7010, 0x6026, 0x6820, 0xa084, + 0x0001, 0x0040, 0x2106, 0x6820, 0xa084, 0xfffe, 0x6822, 0x7054, + 0x0c7e, 0x2060, 0x6800, 0x6002, 0x0c7f, 0x6004, 0x6802, 0xa005, + 0x2d00, 0x00c0, 0x298c, 0x6002, 0x6006, 0x0078, 0x2106, 0x017e, + 0x1078, 0x2a53, 0x017f, 0xa684, 0xdf00, 0x681e, 0x682b, 0x0000, + 0x6f14, 0x81ff, 0x0040, 0x29d9, 0xa186, 0x0002, 0x00c0, 0x29d9, + 0xa684, 0x0800, 0x00c0, 0x29ac, 0xa684, 0x0060, 0x0040, 0x29ac, + 0x78d8, 0x7adc, 0x682e, 0x6a32, 0x6820, 0xa084, 0x0800, 0x00c0, + 0x29d9, 0x8717, 0xa294, 0x000f, 0x8213, 0x8213, 0x8213, 0xa290, + 0x3f80, 0xa290, 0x0000, 0x221c, 0xa384, 0x0100, 0x00c0, 0x29c2, + 0x0078, 0x29c8, 0x8210, 0x2204, 0xa085, 0x0018, 0x2012, 0x8211, + 0xa384, 0x0400, 0x0040, 0x29d5, 0x68a0, 0xa084, 0x0100, 0x00c0, + 0x29d5, 0x1078, 0x2ad7, 0x0078, 0x2106, 0x6008, 0xa085, 0x0002, + 0x600a, 0x6916, 0x6818, 0xa084, 0x8000, 0x0040, 0x29e1, 0x7038, + 0x681a, 0xa68c, 0xdf00, 0x691e, 0x1078, 0x2fcd, 0x1078, 0x2fdc, + 0x00c0, 0x29ee, 0x6008, 0xa084, 0xffef, 0x600a, 0x6820, 0xa084, + 0x0001, 0x00c0, 0x29f7, 0x1078, 0x2fc6, 0x0078, 0x29fb, 0x7054, + 0x2060, 0x6800, 0x6002, 0x1078, 0x1b56, 0x0078, 0x2106, 0xa282, + 0x0004, 0x0048, 0x2a05, 0x1078, 0x209b, 0x2200, 0x0079, 0x2a08, + 0x2a03, 0x2a0c, 0x2a19, 0x2a0c, 0x7000, 0xa086, 0x0005, 0x0040, + 0x2a15, 0x1078, 0x32c4, 0x781b, 0x0067, 0x781b, 0x0068, 0x0078, + 0x20fe, 0x7890, 0x8007, 0x8001, 0xa084, 0x0007, 0xa080, 0x0018, + 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa186, 0x0003, 0x0040, 0x2a2a, + 0x0078, 0x32a6, 0x781b, 0x0068, 0x0078, 0x20fe, 0x6820, 0xa085, + 0x0004, 0x6822, 0x82ff, 0x00c0, 0x2a39, 0x1078, 0x32c4, 0x0078, + 0x2a40, 0x8211, 0x0040, 0x2a3e, 0x1078, 0x209b, 0x1078, 0x32d4, + 0x781b, 0x0067, 0x0078, 0x20fe, 0x1078, 0x34fc, 0x7830, 0xa084, + 0x00c0, 0x00c0, 0x2a50, 0x0018, 0x2a50, 0x791a, 0xa006, 0x007c, + 0xa085, 0x0001, 0x007c, 0xa684, 0x0060, 0x00c0, 0x2a5d, 0x682f, + 0x0000, 0x6833, 0x0000, 0x0078, 0x2ad6, 0xa684, 0x0800, 0x00c0, + 0x2a7f, 0x68b4, 0xa084, 0x4800, 0xa635, 0xa684, 0x0800, 0x00c0, + 0x2a7f, 0x6998, 0x6a94, 0x692e, 0x6a32, 0x7038, 0xa005, 0x00c0, + 0x2a77, 0x2200, 0xa105, 0x0040, 0x2a7e, 0x703b, 0x0015, 0x7000, + 0xa086, 0x0006, 0x0040, 0x2a7e, 0x1078, 0x368f, 0x007c, 0xa684, + 0x0020, 0x0040, 0x2aa1, 0xa684, 0x4000, 0x0040, 0x2a8d, 0x682f, + 0x0000, 0x6833, 0x0000, 0x0078, 0x2a77, 0x68b4, 0xa084, 0x4800, + 0xa635, 0xa684, 0x4000, 0x00c0, 0x2a87, 0x7038, 0xa005, 0x00c0, + 0x2a9b, 0x703b, 0x0015, 0x79d8, 0x7adc, 0x692e, 0x6a32, 0x0078, + 0x2a77, 0xa684, 0x4000, 0x0040, 0x2aab, 0x682f, 0x0000, 0x6833, + 0x0000, 0x0078, 0x2a77, 0x68b4, 0xa084, 0x4800, 0xa635, 0xa684, + 0x4000, 0x00c0, 0x2aa5, 0x7038, 0xa005, 0x00c0, 0x2ab9, 0x703b, + 0x0015, 0x79d8, 0x7adc, 0x78d0, 0x80fb, 0x00c8, 0x2ac0, 0x8000, + 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x692e, 0x6a32, 0x2100, + 0xa205, 0x00c0, 0x2acd, 0x0078, 0x2a77, 0x7000, 0xa086, 0x0006, + 0x0040, 0x2ad6, 0x1078, 0x3a01, 0x0078, 0x2a77, 0x007c, 0xa384, + 0x0200, 0x0040, 0x2adf, 0x6008, 0xa085, 0x0002, 0x600a, 0x681b, + 0x0006, 0x688f, 0x0000, 0x6893, 0x0000, 0x6a30, 0x692c, 0x6a3e, + 0x6942, 0x682f, 0x0003, 0x6833, 0x0000, 0x6837, 0x0020, 0x6897, + 0x0000, 0x689b, 0x0020, 0x7000, 0x0079, 0x2af6, 0x2afe, 0x2b00, + 0x2b09, 0x2afe, 0x2afe, 0x2afe, 0x2afe, 0x2afe, 0x1078, 0x209b, + 0x6820, 0xa084, 0x0001, 0x00c0, 0x2b09, 0x1078, 0x2fc6, 0x0078, + 0x2b0f, 0x7054, 0x2c50, 0x2060, 0x6800, 0x6002, 0x2a60, 0x2021, + 0x3d57, 0x2404, 0xa005, 0x0040, 0x2b18, 0x2020, 0x0078, 0x2b11, + 0x2d22, 0x206b, 0x0000, 0x007c, 0x1078, 0x2fcd, 0x1078, 0x2fdc, + 0x682b, 0x0000, 0x789b, 0x000e, 0x6f14, 0x1078, 0x3a33, 0x6817, + 0x0002, 0xa684, 0x0800, 0x0040, 0x2b31, 0x691c, 0xa18d, 0x2000, + 0x691e, 0x6818, 0xa084, 0x8000, 0x0040, 0x2b41, 0x7868, 0xa08c, + 0x00ff, 0x0040, 0x2b3f, 0x681b, 0x001e, 0x0078, 0x2b41, 0x681b, + 0x0000, 0x2021, 0x3d57, 0x6800, 0x2022, 0x6a3c, 0x6940, 0x6a32, + 0x692e, 0x1078, 0x1b56, 0x0078, 0x2106, 0x1078, 0x2a53, 0x682b, + 0x0000, 0x2001, 0x000e, 0x6f14, 0x1078, 0x3501, 0xa08c, 0x00ff, + 0x6916, 0x6818, 0xa084, 0x8000, 0x0040, 0x2b60, 0x7038, 0x681a, + 0xa68c, 0xdf00, 0x691e, 0x70a3, 0x0000, 0x0078, 0x2106, 0xa006, + 0x1078, 0x368f, 0x6817, 0x0000, 0x681b, 0x0014, 0xa68c, 0xdf00, + 0x691e, 0x682b, 0x0000, 0x6820, 0xa085, 0x00ff, 0x6822, 0x7000, + 0x0079, 0x2b7a, 0x2b82, 0x2b84, 0x2b84, 0x2b86, 0x2b86, 0x2b86, + 0x2b86, 0x2b82, 0x1078, 0x209b, 0x1078, 0x2fdc, 0x6008, 0xa084, + 0xffef, 0x600a, 0x0078, 0x2f96, 0x2300, 0x0079, 0x2b8f, 0x2b92, + 0x2b94, 0x2bcd, 0x1078, 0x209b, 0x7000, 0x0079, 0x2b97, 0x2b9f, + 0x2ba1, 0x2ba1, 0x2bbc, 0x2ba1, 0x2bc9, 0x2bbc, 0x2b9f, 0x1078, + 0x209b, 0xa684, 0x0060, 0xa086, 0x0060, 0x00c0, 0x2bb8, 0xa6b4, + 0xffdf, 0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a, 0x681c, 0xa084, + 0xffdf, 0x681e, 0x1078, 0x368f, 0x1078, 0x3943, 0x0078, 0x347b, + 0xa684, 0x2000, 0x0040, 0x2bab, 0x6818, 0xa084, 0x8000, 0x0040, + 0x2bc9, 0x681b, 0x0015, 0xa684, 0x4000, 0x0040, 0x2bc9, 0x681b, + 0x0007, 0x1078, 0x348b, 0x0078, 0x20fe, 0x1078, 0x209b, 0x2300, + 0x0079, 0x2bd2, 0x2bd5, 0x2bd7, 0x2c09, 0x1078, 0x209b, 0x7000, + 0x0079, 0x2bda, 0x2be1, 0x2be3, 0x2be3, 0x2bfe, 0x2be3, 0x2bfe, + 0x2be1, 0x1078, 0x209b, 0xa684, 0x0060, 0xa086, 0x0060, 0x00c0, + 0x2bfa, 0xa6b4, 0xffbf, 0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a, + 0x681c, 0xa084, 0xffbf, 0x681e, 0x1078, 0x368f, 0x1078, 0x3943, + 0x0078, 0x347b, 0xa684, 0x2000, 0x0040, 0x2bed, 0x6818, 0xa084, + 0x8000, 0x0040, 0x2c05, 0x681b, 0x0007, 0x781b, 0x00e6, 0x0078, + 0x20fe, 0x6820, 0xa085, 0x0004, 0x6822, 0x1078, 0x3448, 0xa6b5, + 0x0800, 0x1078, 0x32c4, 0x781b, 0x0067, 0x0078, 0x20fe, 0x2300, + 0x0079, 0x2c1a, 0x2c1d, 0x2c1f, 0x2c21, 0x1078, 0x209b, 0x0078, + 0x32b2, 0xa684, 0x0400, 0x00c0, 0x2c4a, 0x79e4, 0xa184, 0x0020, + 0x0040, 0x2c31, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2c31, 0x782b, + 0x3009, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, + 0x79e4, 0xa184, 0x0020, 0x0040, 0x2c42, 0x78ec, 0xa084, 0x0003, + 0x00c0, 0x2c46, 0x2001, 0x0014, 0x0078, 0x2926, 0xa184, 0x0007, + 0x0079, 0x2c82, 0x7a90, 0xa294, 0x0007, 0x789b, 0x0060, 0x79a8, + 0x81ff, 0x0040, 0x2c80, 0x789b, 0x0010, 0x7ba8, 0xa384, 0x0001, + 0x00c0, 0x2c71, 0x7ba8, 0x7ba8, 0xa386, 0x0001, 0x00c0, 0x2c64, + 0x2009, 0xfff7, 0x0078, 0x2c6a, 0xa386, 0x0003, 0x00c0, 0x2c71, + 0x2009, 0xffef, 0x0c7e, 0x7048, 0x2060, 0x6004, 0xa104, 0x6006, + 0x0c7f, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, + 0x782b, 0x3009, 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff, 0x6922, + 0x0078, 0x347b, 0x25de, 0x25e9, 0x2c8c, 0x2c94, 0x2c8a, 0x2c8a, + 0x347b, 0x347b, 0x1078, 0x209b, 0x6920, 0xa18c, 0xfdff, 0xa18c, + 0xfeff, 0x6922, 0x0078, 0x3483, 0x6920, 0xa18c, 0xfdff, 0xa18c, + 0xfeff, 0x6922, 0x0078, 0x347b, 0x79e4, 0xa184, 0x0030, 0x0040, + 0x2ca6, 0x78ec, 0xa084, 0x0003, 0x00c0, 0x2cbc, 0x70a0, 0xa086, + 0x0002, 0x00c0, 0x2caf, 0x2011, 0x0002, 0x0078, 0x24c2, 0x7000, + 0xa086, 0x0000, 0x0040, 0x20fe, 0x6818, 0xa085, 0x8000, 0x681a, + 0x2001, 0x0014, 0x0078, 0x2926, 0xa184, 0x0007, 0x0079, 0x2cc0, + 0x347b, 0x347b, 0x2cc8, 0x347b, 0x34d6, 0x34d6, 0x347b, 0x347b, + 0xa684, 0x0080, 0x0040, 0x2cf7, 0x71c8, 0x81ff, 0x0040, 0x2cf7, + 0xa182, 0x000d, 0x00d0, 0x2cd8, 0x70cb, 0x0000, 0x0078, 0x2cdd, + 0xa182, 0x000c, 0x70ca, 0x2009, 0x000c, 0x789b, 0x0061, 0x79aa, + 0x157e, 0x137e, 0x147e, 0x70cc, 0x8114, 0xa210, 0x72ce, 0xa080, + 0x000b, 0xad00, 0x2098, 0x20a1, 0x012b, 0x789b, 0x0000, 0x8108, + 0x81ac, 0x53a6, 0x147f, 0x137f, 0x157f, 0x0078, 0x3483, 0xa684, + 0x0400, 0x00c0, 0x2d38, 0x6820, 0xa084, 0x0001, 0x0040, 0x3483, + 0xa68c, 0x0060, 0xa684, 0x0060, 0x0040, 0x2d0c, 0xa086, 0x0060, + 0x00c0, 0x2d0c, 0xa18d, 0x4000, 0xa18c, 0xfffb, 0x795a, 0x69b6, + 0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061, 0x6818, 0xa085, + 0x8000, 0x681a, 0x78aa, 0x8008, 0x810c, 0x0040, 0x2ff5, 0xa18c, + 0x00f8, 0x00c0, 0x2ff5, 0x157e, 0x137e, 0x147e, 0x20a1, 0x012b, + 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, + 0x147f, 0x137f, 0x157f, 0x6814, 0x8007, 0x7882, 0x0078, 0x3483, + 0x6818, 0xa084, 0x8000, 0x0040, 0x2d3f, 0x681b, 0x0008, 0x781b, + 0x00da, 0x0078, 0x20fe, 0x2300, 0x0079, 0x2d46, 0x2d4b, 0x2dd2, + 0x2d49, 0x1078, 0x209b, 0x7000, 0xa084, 0x0007, 0x0079, 0x2d50, + 0x2d58, 0x2d5a, 0x2d7f, 0x2924, 0x2d58, 0x2106, 0x2d58, 0x2d58, + 0x1078, 0x209b, 0x681c, 0xa084, 0x2000, 0x0040, 0x2d63, 0x6008, + 0xa085, 0x0002, 0x600a, 0x6920, 0xa18d, 0x0001, 0x6922, 0x6800, + 0x6006, 0xa005, 0x00c0, 0x2d6d, 0x6002, 0x681c, 0xa084, 0x000e, + 0x0040, 0x2d79, 0x7014, 0x68ba, 0x712c, 0xa188, 0x6000, 0x0078, + 0x2d7b, 0x2009, 0x6100, 0x2104, 0x6802, 0x2d0a, 0x7156, 0x6eb6, + 0xa684, 0x0060, 0x0040, 0x2dd0, 0xa684, 0x0800, 0x00c0, 0x2d93, + 0xa684, 0x7fff, 0x68b6, 0x6894, 0x68a6, 0x6898, 0x68aa, 0x1078, + 0x368f, 0x0078, 0x2dd0, 0xa684, 0x0020, 0x0040, 0x2da0, 0xa006, + 0x1078, 0x3a01, 0x79d8, 0x7adc, 0x69aa, 0x6aa6, 0x0078, 0x2da6, + 0x1078, 0x33f7, 0x69aa, 0x6aa6, 0x1078, 0x3a01, 0xa684, 0x8000, + 0x0040, 0x2dd0, 0xa684, 0x7fff, 0x68b6, 0x2001, 0x0076, 0x1078, + 0x3501, 0x2010, 0x2001, 0x0078, 0x1078, 0x3501, 0x2008, 0xa684, + 0x0020, 0x00c0, 0x2dc8, 0x2001, 0x007a, 0x1078, 0x3501, 0x801b, + 0x00c8, 0x2dc3, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, + 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, + 0x0078, 0x2106, 0x0078, 0x32b2, 0x7033, 0x0000, 0xa282, 0x0006, + 0x0050, 0x2ddc, 0x1078, 0x209b, 0x2300, 0x0079, 0x2ddf, 0x2de2, + 0x2e0b, 0x2e31, 0x2200, 0x0079, 0x2de5, 0x2deb, 0x32b2, 0x2ded, + 0x2deb, 0x2e5d, 0x2eb0, 0x1078, 0x209b, 0x7003, 0x0005, 0x2001, + 0x6110, 0x2068, 0x703e, 0x157e, 0x20a9, 0x002f, 0x2003, 0x0000, + 0x8000, 0x0070, 0x2dfd, 0x0078, 0x2df6, 0x157f, 0xad80, 0x0009, + 0x7032, 0x6817, 0x0000, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, + 0x0003, 0x0078, 0x32a6, 0x7000, 0xa086, 0x0001, 0x00c0, 0x2e18, + 0x1078, 0x2fdc, 0x1078, 0x368f, 0x7034, 0x600a, 0x0078, 0x2e1d, + 0x7000, 0xa086, 0x0003, 0x0040, 0x2e12, 0x7003, 0x0005, 0x2001, + 0x6110, 0x2068, 0x703e, 0xad80, 0x0009, 0x7032, 0x2200, 0x0079, + 0x2e29, 0x32b2, 0x2e2f, 0x2e2f, 0x2e5d, 0x2e2f, 0x32b2, 0x1078, + 0x209b, 0x7000, 0xa086, 0x0001, 0x00c0, 0x2e3e, 0x1078, 0x2fdc, + 0x1078, 0x368f, 0x7034, 0x600a, 0x0078, 0x2e43, 0x7000, 0xa086, + 0x0003, 0x0040, 0x2e38, 0x7003, 0x0005, 0x2001, 0x6110, 0x2068, + 0x703e, 0xad80, 0x0009, 0x7032, 0x2200, 0x0079, 0x2e4f, 0x2e57, + 0x2e55, 0x2e55, 0x2e57, 0x2e55, 0x2e57, 0x1078, 0x209b, 0x1078, + 0x32d4, 0x781b, 0x0067, 0x0078, 0x20fe, 0x7000, 0xa086, 0x0001, + 0x00c0, 0x2e6a, 0x1078, 0x2fdc, 0x1078, 0x368f, 0x7034, 0x600a, + 0x0078, 0x2e6f, 0x7000, 0xa086, 0x0003, 0x0040, 0x2e64, 0x7003, + 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, + 0x001f, 0xa215, 0x2069, 0x6100, 0x2d04, 0x2d08, 0x7156, 0x2068, + 0xa005, 0x0040, 0x2e8a, 0x6814, 0xa206, 0x0040, 0x2ea5, 0x6800, + 0x0078, 0x2e7d, 0x7003, 0x0005, 0x2001, 0x6110, 0x2068, 0x703e, + 0x157e, 0x20a9, 0x002f, 0x2003, 0x0000, 0x8000, 0x0070, 0x2e9a, + 0x0078, 0x2e93, 0x157f, 0xad80, 0x0009, 0x7032, 0x6a16, 0x68b7, + 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a, 0x6820, + 0xa084, 0x0c00, 0x0040, 0x2f11, 0x1078, 0x32cc, 0x0078, 0x2f11, + 0x7000, 0xa086, 0x0001, 0x00c0, 0x2ebd, 0x1078, 0x2fdc, 0x1078, + 0x368f, 0x7034, 0x600a, 0x0078, 0x2ec2, 0x7000, 0xa086, 0x0003, + 0x0040, 0x2eb7, 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b, + 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x79a8, 0x79a8, 0xa18c, + 0x00ff, 0xa1e8, 0x6000, 0x2d04, 0x2d08, 0x7156, 0x2068, 0xa005, + 0x0040, 0x2ee1, 0x6814, 0xa206, 0x0040, 0x2efc, 0x6800, 0x0078, + 0x2ed4, 0x7003, 0x0005, 0x2001, 0x6110, 0x2068, 0x703e, 0x157e, + 0x20a9, 0x002f, 0x2003, 0x0000, 0x8000, 0x0070, 0x2ef1, 0x0078, + 0x2eea, 0x157f, 0xad80, 0x0009, 0x7032, 0x6a16, 0x68b7, 0x0700, + 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a, 0x6820, 0xa084, + 0x0c00, 0x0040, 0x2f11, 0xa084, 0x0800, 0x0040, 0x2f0b, 0x1078, + 0x32d0, 0x0078, 0x2f11, 0x1078, 0x32cc, 0x70bf, 0x0000, 0x0078, + 0x2f11, 0x027e, 0x8207, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, + 0xa080, 0x3f80, 0x2060, 0x704a, 0x6000, 0x704e, 0x6004, 0x7052, + 0xa684, 0x0060, 0x0040, 0x2f51, 0x6b98, 0x6c94, 0x69ac, 0x68b0, + 0xa105, 0x00c0, 0x2f3f, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa6b4, + 0xb7ff, 0x7e5a, 0xa684, 0x0060, 0xa086, 0x0060, 0x0040, 0x2f51, + 0x1078, 0x3943, 0xa6b5, 0x2000, 0x7e5a, 0x0078, 0x2f51, 0x68b0, + 0xa31a, 0x2100, 0xa423, 0x2400, 0xa305, 0x0040, 0x2f51, 0x7bd2, + 0x7bda, 0x7cd6, 0x7cde, 0x68b0, 0xa6b4, 0xbfff, 0x7e5a, 0x1078, + 0x3978, 0x077f, 0x1078, 0x33ea, 0x2009, 0x0068, 0xa684, 0x0008, + 0x0040, 0x2f70, 0x78e4, 0xa084, 0x0030, 0x0040, 0x2f68, 0x78ec, + 0xa084, 0x0003, 0x0040, 0x2f68, 0x2009, 0x0067, 0x0078, 0x2f70, + 0x0f7e, 0x2079, 0x3d00, 0x1078, 0x368f, 0x0f7f, 0x0078, 0x2106, + 0x791a, 0x2d00, 0x703e, 0x8207, 0xa084, 0x000f, 0x8003, 0x8003, + 0x8003, 0xa080, 0x3f80, 0x2048, 0x0078, 0x20fe, 0x6020, 0xa005, + 0x0040, 0x2f8a, 0x8001, 0x6022, 0x6008, 0xa085, 0x0008, 0x600a, + 0x7010, 0x6026, 0x007c, 0xa006, 0x1078, 0x368f, 0x6817, 0x0000, + 0x681b, 0x0001, 0x6823, 0x0040, 0x681f, 0x0100, 0x7000, 0xa084, + 0x0007, 0x0079, 0x2f9b, 0x2fa3, 0x2fa5, 0x2fa5, 0x2fc2, 0x2fad, + 0x2fa3, 0x2fad, 0x2fa3, 0x1078, 0x209b, 0x1078, 0x2fcd, 0x1078, + 0x2fc6, 0x1078, 0x1b56, 0x0078, 0x2106, 0x70a0, 0x70a3, 0x0000, + 0x70c7, 0x0000, 0x0079, 0x2fb4, 0x2fbe, 0x2fbe, 0x2fbc, 0x2fbc, + 0x2fbc, 0x2fbe, 0x2fbc, 0x2fbe, 0x0079, 0x24db, 0x70a3, 0x0000, + 0x0078, 0x2106, 0x681b, 0x0000, 0x0078, 0x2b1c, 0x6800, 0xa005, + 0x00c0, 0x2fcb, 0x6002, 0x6006, 0x007c, 0x6010, 0xa005, 0x0040, + 0x2fd6, 0x8001, 0x00d0, 0x2fd6, 0x1078, 0x209b, 0x6012, 0x6008, + 0xa084, 0xffef, 0x600a, 0x007c, 0x6018, 0xa005, 0x0040, 0x2fe2, + 0x8001, 0x601a, 0x007c, 0x1078, 0x34fc, 0x681b, 0x0018, 0x0078, + 0x3019, 0x1078, 0x34fc, 0x681b, 0x0019, 0x0078, 0x3019, 0x1078, + 0x34fc, 0x681b, 0x001a, 0x0078, 0x3019, 0x1078, 0x34fc, 0x681b, + 0x0003, 0x0078, 0x3019, 0x77b4, 0x1078, 0x33ea, 0x71b8, 0xa18c, + 0x00ff, 0xa1e8, 0x6000, 0x2d04, 0x2d08, 0x2068, 0xa005, 0x00c0, + 0x300b, 0x0078, 0x2106, 0x6814, 0x72b4, 0xa206, 0x0040, 0x3013, + 0x6800, 0x0078, 0x3004, 0x6800, 0x200a, 0x681b, 0x0005, 0x70bf, + 0x0000, 0x1078, 0x2fcd, 0x6820, 0xa084, 0x0001, 0x00c0, 0x3022, + 0x1078, 0x2fc6, 0x1078, 0x2fdc, 0x681f, 0x0000, 0x6823, 0x0020, + 0x1078, 0x1b56, 0x0078, 0x2106, 0xa282, 0x0005, 0x00c0, 0x32a6, + 0x78a8, 0xa084, 0x00ff, 0x802f, 0x78a8, 0xa084, 0x00ff, 0xa52d, + 0x78a8, 0xa084, 0x00ff, 0x8037, 0x78a8, 0xa084, 0x00ff, 0xa635, + 0x7cd8, 0x2600, 0xa420, 0x7bdc, 0x2500, 0xa319, 0x0048, 0x32a6, + 0x7cda, 0x7bde, 0x6caa, 0x7cd2, 0x6ba6, 0x7bd6, 0x1078, 0x3735, + 0x1078, 0x3932, 0x781b, 0x0065, 0x0078, 0x20fe, 0xa006, 0x1078, + 0x3a01, 0x781b, 0x0065, 0x0078, 0x20fe, 0x78d0, 0x79d4, 0x1078, + 0x3978, 0x0078, 0x20fe, 0xa282, 0x0003, 0x00c0, 0x32a6, 0x7da8, + 0xa5ac, 0x00ff, 0x7ea8, 0xa6b4, 0x00ff, 0x6920, 0xa18d, 0x0080, + 0x6922, 0xa184, 0x0100, 0x0040, 0x30c3, 0xa18c, 0xfeff, 0x6922, + 0xa6b4, 0x00ff, 0x0040, 0x30ad, 0xa682, 0x000c, 0x0048, 0x3084, + 0x0040, 0x3084, 0x2031, 0x000c, 0x852b, 0x852b, 0x1078, 0x335f, + 0x0040, 0x308e, 0x1078, 0x317b, 0x0078, 0x30b6, 0x1078, 0x331a, + 0x0c7e, 0x2960, 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x319f, + 0x0c7f, 0x6920, 0xa18d, 0x0100, 0x6922, 0x7e58, 0xa6b5, 0x0004, + 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x30a9, 0x781b, 0x0053, 0x0078, + 0x20fe, 0x781b, 0x0067, 0x0078, 0x20fe, 0x0c7e, 0x2960, 0x6004, + 0xa084, 0xfff5, 0x6006, 0x1078, 0x319f, 0x0c7f, 0x7e58, 0xa684, + 0x0400, 0x00c0, 0x30bf, 0x781b, 0x0056, 0x0078, 0x20fe, 0x781b, + 0x0068, 0x0078, 0x20fe, 0x0c7e, 0x7048, 0x2060, 0x6100, 0xa18c, + 0x1000, 0x0040, 0x3103, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, + 0x000c, 0x0048, 0x30d7, 0x0040, 0x30d7, 0x2011, 0x000c, 0x2600, + 0xa202, 0x00c8, 0x30dc, 0x2230, 0x6208, 0xa294, 0x00ff, 0x7018, + 0xa086, 0x0028, 0x00c0, 0x30ec, 0xa282, 0x0019, 0x00c8, 0x30f2, + 0x2011, 0x0019, 0x0078, 0x30f2, 0xa282, 0x000c, 0x00c8, 0x30f2, + 0x2011, 0x000c, 0x2200, 0xa502, 0x00c8, 0x30f7, 0x2228, 0x1078, + 0x331e, 0x852b, 0x852b, 0x1078, 0x335f, 0x0040, 0x3103, 0x1078, + 0x317b, 0x0078, 0x3107, 0x1078, 0x331a, 0x1078, 0x319f, 0x7858, + 0xa085, 0x0004, 0x785a, 0x0c7f, 0x781b, 0x0067, 0x0078, 0x20fe, + 0x0c7e, 0x2960, 0x6000, 0xa084, 0x1000, 0x00c0, 0x3128, 0x6010, + 0xa084, 0x000f, 0x00c0, 0x3122, 0x6104, 0xa18c, 0xfff5, 0x6106, + 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, 0x314f, + 0x68a0, 0xa084, 0x0200, 0x00c0, 0x3122, 0x6208, 0xa294, 0x00ff, + 0x7018, 0xa086, 0x0028, 0x00c0, 0x313d, 0xa282, 0x0019, 0x00c8, + 0x3143, 0x2011, 0x0019, 0x0078, 0x3143, 0xa282, 0x000c, 0x00c8, + 0x3143, 0x2011, 0x000c, 0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, + 0x000c, 0x0048, 0x314f, 0x0040, 0x314f, 0x2019, 0x000c, 0x78ab, + 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, + 0x0005, 0x6820, 0xa085, 0x0100, 0x6822, 0x0c7f, 0x007c, 0x0c7e, + 0x2960, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x2011, 0x0032, 0x2019, + 0x0000, 0x0078, 0x316b, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, + 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xa085, 0x0100, + 0x6822, 0x0c7f, 0x007c, 0x0c7e, 0x7148, 0x2160, 0x2008, 0xa084, + 0xfff0, 0xa635, 0x7e86, 0x6018, 0x789a, 0x7eae, 0x6612, 0x78a4, + 0xa084, 0xfff8, 0xa18c, 0x0007, 0xa105, 0x78a6, 0x6016, 0x788a, + 0xa6b4, 0x000f, 0x8637, 0x8204, 0x8004, 0xa084, 0x00ff, 0xa605, + 0x600e, 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x007c, 0x0c7e, + 0x7048, 0x2060, 0x6018, 0x789a, 0x78a4, 0xa084, 0xfff0, 0x78a6, + 0x6012, 0x7884, 0xa084, 0xfff0, 0x7886, 0x0c7f, 0x007c, 0xa282, + 0x0002, 0x00c0, 0x32a6, 0x7aa8, 0x6920, 0xa18d, 0x0080, 0x6922, + 0xa184, 0x0200, 0x0040, 0x31f4, 0xa18c, 0xfdff, 0x6922, 0xa294, + 0x00ff, 0xa282, 0x0002, 0x00c8, 0x32a6, 0x1078, 0x323b, 0x1078, + 0x319f, 0xa980, 0x0001, 0x200c, 0x1078, 0x33e6, 0x1078, 0x3110, + 0x88ff, 0x0040, 0x31e7, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, + 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x31e3, 0x781b, + 0x0053, 0x0078, 0x20fe, 0x781b, 0x0067, 0x0078, 0x20fe, 0x7e58, + 0xa684, 0x0400, 0x00c0, 0x31f0, 0x781b, 0x0056, 0x0078, 0x20fe, + 0x781b, 0x0068, 0x0078, 0x20fe, 0xa282, 0x0002, 0x00c8, 0x31fc, + 0xa284, 0x0001, 0x0040, 0x3206, 0x7148, 0xa188, 0x0000, 0x210c, + 0xa18c, 0x2000, 0x00c0, 0x3206, 0x2011, 0x0000, 0x1078, 0x330c, + 0x1078, 0x323b, 0x1078, 0x319f, 0x7858, 0xa085, 0x0004, 0x785a, + 0x781b, 0x0067, 0x0078, 0x20fe, 0x0c7e, 0x027e, 0x2960, 0x6000, + 0x2011, 0x0001, 0xa084, 0x2000, 0x00c0, 0x322b, 0x6014, 0xa084, + 0x0040, 0x00c0, 0x3229, 0xa18c, 0xffef, 0x6106, 0xa006, 0x0078, + 0x3238, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, + 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x6820, 0xa085, 0x0200, 0x6822, + 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x7048, 0x2060, 0x82ff, 0x0040, + 0x3243, 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a, 0x78a4, + 0xa084, 0xffbf, 0xa205, 0x78a6, 0x6016, 0x788a, 0x6004, 0xa084, + 0xffef, 0x6006, 0x0c7f, 0x007c, 0x007e, 0x7000, 0xa086, 0x0003, + 0x0040, 0x325d, 0x007f, 0x0078, 0x3260, 0x007f, 0x0078, 0x32a2, + 0xa684, 0x0020, 0x0040, 0x32a2, 0x7888, 0xa084, 0x0040, 0x0040, + 0x32a2, 0x7bb8, 0xa384, 0x003f, 0x831b, 0x00c8, 0x3270, 0x8000, + 0xa005, 0x0040, 0x3286, 0x831b, 0x00c8, 0x3279, 0x8001, 0x0040, + 0x329e, 0xa684, 0x4000, 0x0040, 0x3286, 0x78b8, 0x801b, 0x00c8, + 0x3282, 0x8000, 0xa084, 0x003f, 0x00c0, 0x329e, 0xa6b4, 0xbfff, + 0x7e5a, 0x79d8, 0x7adc, 0x2001, 0x0001, 0xa108, 0x00c8, 0x3292, + 0xa291, 0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade, 0x1078, 0x3a01, + 0x781b, 0x0065, 0x1078, 0x38d2, 0x0078, 0x20fe, 0x781b, 0x0065, + 0x0078, 0x20fe, 0x781b, 0x0068, 0x0078, 0x20fe, 0x1078, 0x32d8, + 0x781b, 0x0067, 0x0078, 0x20fe, 0x1078, 0x32c4, 0x781b, 0x0067, + 0x0078, 0x20fe, 0x6827, 0x0002, 0x1078, 0x32cc, 0x78e4, 0xa084, + 0x0030, 0x0040, 0x2106, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2106, + 0x781b, 0x0067, 0x0078, 0x20fe, 0x2001, 0x0005, 0x0078, 0x32da, + 0x2001, 0x000c, 0x0078, 0x32da, 0x2001, 0x0006, 0x0078, 0x32da, + 0x2001, 0x000d, 0x0078, 0x32da, 0x2001, 0x0009, 0x0078, 0x32da, + 0x2001, 0x0007, 0x789b, 0x007e, 0x78aa, 0xa6b5, 0x0008, 0x7e5a, + 0x007c, 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, + 0xa0e0, 0x3f80, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184, 0x000f, + 0x0040, 0x32fa, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004, 0xa085, + 0x0008, 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184, 0x0040, + 0x0040, 0x330a, 0xa184, 0xffbf, 0x78a6, 0x6016, 0x6004, 0xa085, + 0x0010, 0x6006, 0x077f, 0x007c, 0x789b, 0x0010, 0x78ab, 0x0001, + 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab, + 0x0004, 0x007c, 0x2031, 0x0000, 0x2029, 0x0032, 0x789b, 0x0010, + 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7eaa, + 0x789b, 0x0060, 0x78ab, 0x0005, 0x007c, 0x157e, 0x8007, 0xa084, + 0x00ff, 0x8003, 0x8003, 0xa080, 0x0020, 0x789a, 0x79a4, 0xa18c, + 0xfff0, 0x2001, 0x3d46, 0x2004, 0xa082, 0x0028, 0x0040, 0x3348, + 0x2021, 0x33cd, 0x2019, 0x0014, 0x20a9, 0x000c, 0x0078, 0x334e, + 0x2021, 0x33d9, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011, 0x0064, + 0x2404, 0xa084, 0xfff0, 0xa106, 0x0040, 0x335d, 0x8420, 0x2300, + 0xa210, 0x0070, 0x335d, 0x0078, 0x3350, 0x157f, 0x007c, 0x157e, + 0x2011, 0x3d46, 0x2214, 0xa282, 0x0032, 0x0048, 0x3373, 0x0040, + 0x3377, 0x2021, 0x33bf, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, + 0x0032, 0x0078, 0x3389, 0xa282, 0x0028, 0x0040, 0x3381, 0x2021, + 0x33cd, 0x2019, 0x0014, 0x20a9, 0x000c, 0x2011, 0x0064, 0x0078, + 0x3389, 0x2021, 0x33d9, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011, + 0x0064, 0x2200, 0xa502, 0x0040, 0x3399, 0x0048, 0x3399, 0x8420, + 0x2300, 0xa210, 0x0070, 0x3396, 0x0078, 0x3389, 0x157f, 0xa006, + 0x007c, 0x157f, 0xa582, 0x0064, 0x00c8, 0x33a4, 0x7808, 0xa085, + 0x0070, 0x780a, 0x0078, 0x33a4, 0x78ec, 0xa084, 0x0300, 0x0040, + 0x33ac, 0x2404, 0x0078, 0x33bd, 0x2404, 0xa09e, 0x1102, 0x00c0, + 0x33bd, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x0048, 0x33bc, + 0x2001, 0x1201, 0x0078, 0x33bd, 0x2404, 0xa005, 0x007c, 0x1102, + 0x3002, 0x3202, 0x4203, 0x4403, 0x5404, 0x5604, 0x6605, 0x6805, + 0x7806, 0x7a06, 0x0c07, 0x0c07, 0x0e07, 0x3202, 0x4202, 0x5202, + 0x6202, 0x7202, 0x6605, 0x7605, 0x7805, 0x7a05, 0x7c05, 0x7e05, + 0x7f05, 0x2202, 0x3202, 0x4202, 0x5202, 0x5404, 0x6404, 0x7404, + 0x7604, 0x7804, 0x7a04, 0x7c04, 0x7e04, 0x7f04, 0x789b, 0x0010, + 0xa046, 0x007c, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, + 0x8003, 0x8003, 0x8003, 0xa105, 0xa0e0, 0x4000, 0x007c, 0x79d8, + 0x7adc, 0x78d0, 0x801b, 0x00c8, 0x33fe, 0x8000, 0xa084, 0x003f, + 0xa108, 0xa291, 0x0000, 0x007c, 0x0f7e, 0x2079, 0x0100, 0x2009, + 0x3d40, 0x2091, 0x8000, 0x2104, 0x0079, 0x340e, 0x3444, 0x3418, + 0x3418, 0x3418, 0x3418, 0x3418, 0x3418, 0x3416, 0x1078, 0x209b, + 0x784b, 0x0004, 0x7848, 0xa084, 0x0004, 0x00c0, 0x341a, 0x784b, + 0x0008, 0x7848, 0xa084, 0x0008, 0x00c0, 0x3421, 0x68b4, 0xa085, + 0x4000, 0x68b6, 0x7858, 0xa085, 0x4000, 0x785a, 0x7830, 0xa084, + 0x0080, 0x00c0, 0x3444, 0x0018, 0x3444, 0x681c, 0xa084, 0x0020, + 0x00c0, 0x3442, 0x0e7e, 0x2071, 0x3d40, 0x1078, 0x348b, 0x0e7f, + 0x0078, 0x3444, 0x781b, 0x00e6, 0x2091, 0x8001, 0x0f7f, 0x007c, + 0x0c7e, 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, + 0xa0e0, 0x3f80, 0x6004, 0xa084, 0x000a, 0x00c0, 0x3479, 0x6108, + 0xa194, 0xff00, 0x0040, 0x3479, 0xa18c, 0x00ff, 0x2001, 0x0019, + 0xa106, 0x0040, 0x346a, 0x2001, 0x0032, 0xa106, 0x0040, 0x346e, + 0x0078, 0x3472, 0x2009, 0x0020, 0x0078, 0x3474, 0x2009, 0x003f, + 0x0078, 0x3474, 0x2011, 0x0000, 0x2100, 0xa205, 0x600a, 0x6004, + 0x6006, 0x0c7f, 0x007c, 0x781b, 0x0068, 0x0078, 0x20fe, 0x781b, + 0x0067, 0x0078, 0x20fe, 0x781b, 0x0056, 0x0078, 0x20fe, 0x781b, + 0x0053, 0x0078, 0x20fe, 0x2009, 0x3d1e, 0x210c, 0xa186, 0x0000, + 0x0040, 0x349f, 0xa186, 0x0001, 0x0040, 0x34a2, 0x2009, 0x3d35, + 0x200b, 0x000b, 0x70a3, 0x0001, 0x781b, 0x0047, 0x007c, 0x781b, + 0x00df, 0x007c, 0x2009, 0x3d35, 0x200b, 0x000a, 0x007c, 0x2009, + 0x3d1e, 0x210c, 0xa186, 0x0000, 0x0040, 0x34c2, 0xa186, 0x0001, + 0x0040, 0x34bc, 0x2009, 0x3d35, 0x200b, 0x000b, 0x70a3, 0x0001, + 0x781b, 0x0047, 0x0078, 0x20fe, 0x2009, 0x3d35, 0x200b, 0x000a, + 0x0078, 0x20fe, 0x781b, 0x00de, 0x0078, 0x20fe, 0x781b, 0x00e6, + 0x0078, 0x20fe, 0x781b, 0x00e5, 0x0078, 0x20fe, 0x781b, 0x009d, + 0x0078, 0x20fe, 0x781b, 0x009c, 0x0078, 0x20fe, 0x6818, 0xa084, + 0x8000, 0x0040, 0x34dd, 0x681b, 0x001d, 0x70a3, 0x0001, 0x781b, + 0x0047, 0x0078, 0x20fe, 0x007e, 0x7830, 0xa084, 0x00c0, 0x00c0, + 0x34fa, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0005, 0x0005, 0x0005, + 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040, 0x34fa, 0x7808, 0xa085, + 0x0002, 0x780a, 0x007f, 0x007c, 0x7808, 0xa085, 0x0002, 0x780a, + 0x007c, 0x007e, 0x7830, 0xa084, 0x0040, 0x00c0, 0x3502, 0x0098, + 0x350d, 0x007f, 0x789a, 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd, + 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, + 0x0040, 0x351c, 0x0098, 0x351a, 0x007f, 0x789a, 0x78ac, 0x007e, + 0x7808, 0xa085, 0x0002, 0x780a, 0x007f, 0x007c, 0xa784, 0x0001, + 0x00c0, 0x2b67, 0xa784, 0x0070, 0x0040, 0x3536, 0x0c7e, 0x2d60, + 0x2f68, 0x1078, 0x2046, 0x2d78, 0x2c68, 0x0c7f, 0xa784, 0x0008, + 0x0040, 0x3543, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, + 0x2106, 0x0078, 0x347b, 0xa784, 0x0004, 0x0040, 0x3576, 0x78b8, + 0xa084, 0x4001, 0x0040, 0x3576, 0x784b, 0x0008, 0x78ec, 0xa084, + 0x0003, 0x0040, 0x2106, 0x78e4, 0xa084, 0x0007, 0xa086, 0x0001, + 0x00c0, 0x3576, 0x78c0, 0xa685, 0x4800, 0x2030, 0x7e5a, 0x781b, + 0x00e6, 0x0078, 0x20fe, 0x784b, 0x0008, 0x6818, 0xa084, 0x8000, + 0x0040, 0x3572, 0x681b, 0x0015, 0xa684, 0x4000, 0x0040, 0x3572, + 0x681b, 0x0007, 0x1078, 0x348b, 0x0078, 0x20fe, 0x681b, 0x0003, + 0x7858, 0xa084, 0x3f00, 0x681e, 0x682f, 0x0000, 0x6833, 0x0000, + 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x25cd, 0x0018, + 0x20fe, 0x0078, 0x32ac, 0x6b14, 0x8307, 0xa084, 0x000f, 0x8003, + 0x8003, 0x8003, 0xa080, 0x3f80, 0x2060, 0x2048, 0x704a, 0x6000, + 0x704e, 0x6004, 0x7052, 0x2a60, 0x007c, 0x0020, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0062, + 0x000a, 0x0014, 0x0014, 0x9848, 0x0014, 0x0014, 0x98fa, 0x98e9, + 0x0014, 0x0014, 0x0014, 0x0080, 0x00c1, 0x0100, 0x0402, 0x2008, + 0xf880, 0x0018, 0xa20a, 0x0014, 0x300b, 0xa20c, 0x0014, 0xa200, + 0x8838, 0x3806, 0x8839, 0x28c2, 0x9cc2, 0xa805, 0x0864, 0xa83d, + 0x3008, 0x28c1, 0x9cc2, 0xa201, 0x300c, 0x2847, 0x8161, 0x846a, + 0x8000, 0x84a4, 0x1856, 0x883a, 0xa808, 0x28e2, 0x9c9f, 0xa8f3, + 0x0864, 0xa82b, 0x300c, 0xa801, 0x3008, 0x28e1, 0x9c9f, 0x280d, + 0xa204, 0x64c0, 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7023, 0x8576, + 0x8677, 0xa80f, 0x786e, 0x883e, 0xa80c, 0x282b, 0xa205, 0x64a0, + 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7023, 0x8576, 0x8677, 0xa801, + 0x883e, 0x206b, 0x28c1, 0x9cc2, 0x2044, 0x2103, 0x20a2, 0x2081, + 0xa8dc, 0xa207, 0x2901, 0xa80a, 0x0014, 0xa203, 0x8000, 0x85a4, + 0x1872, 0x879a, 0x883c, 0x1fe2, 0xf601, 0xa208, 0x856e, 0x866f, + 0x0704, 0x3008, 0x9c9f, 0x0014, 0xa202, 0x8000, 0x85a4, 0x3009, + 0x84a8, 0x19e2, 0xf848, 0x8176, 0x86eb, 0x85eb, 0x872e, 0x87a9, + 0x883f, 0x08e6, 0xa8f1, 0xf861, 0xa8e8, 0xf801, 0x0014, 0xf881, + 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfaa2, 0x1de2, 0x0014, 0x8532, + 0xf221, 0x0014, 0x1de2, 0x84a8, 0xd6e0, 0x1fe6, 0x0014, 0xa206, + 0x6865, 0x817e, 0x842a, 0x1dc1, 0x8823, 0x0016, 0x6042, 0x8008, + 0xa8fa, 0x8000, 0x84a4, 0x8160, 0x842a, 0xf021, 0x3008, 0x84a8, + 0x11d6, 0x7042, 0x20dd, 0x0011, 0x20d4, 0x8822, 0x0016, 0x8000, + 0x2848, 0x1011, 0xa8fc, 0x3008, 0x8000, 0xa000, 0x2802, 0x1011, + 0xa8fd, 0xa883, 0x3008, 0x283d, 0x1011, 0xa8fd, 0xa209, 0x0017, + 0x300c, 0x8000, 0x85a4, 0x1de2, 0xdac1, 0x0014, 0x0210, 0xa801, + 0x0014, 0x26e0, 0x873a, 0xfaa2, 0x19f2, 0x1fe2, 0x0014, 0xa20b, + 0x0014, 0xa20d, 0x3806, 0x0210, 0x9ccc, 0x0704, 0x0000, 0x127e, + 0x2091, 0x2200, 0x2049, 0x368f, 0x7000, 0x7204, 0xa205, 0x720c, + 0xa215, 0x7008, 0xa084, 0xfff7, 0xa205, 0x0040, 0x36a1, 0x0078, + 0x36a4, 0x127f, 0x2000, 0x007c, 0x7000, 0xa084, 0x0001, 0x00c0, + 0x36d2, 0x7108, 0x8103, 0x00c8, 0x36b1, 0x1078, 0x37bf, 0x0078, + 0x36a9, 0x700c, 0xa08c, 0x00ff, 0x0040, 0x36d2, 0x7004, 0x8004, + 0x00c8, 0x36c9, 0x7014, 0xa005, 0x00c0, 0x36c5, 0x7010, 0xa005, + 0x0040, 0x36c9, 0xa102, 0x00c8, 0x36a9, 0x7007, 0x0010, 0x0078, + 0x36d2, 0x8aff, 0x0040, 0x36d2, 0x1078, 0x39d8, 0x00c0, 0x36cc, + 0x0040, 0x36a9, 0x1078, 0x374f, 0x7003, 0x0000, 0x127f, 0x2000, + 0x007c, 0x6428, 0x84ff, 0x0040, 0x3705, 0x2c70, 0x7004, 0xa0bc, + 0x000f, 0xa7b8, 0x3715, 0x273c, 0x87fb, 0x00c0, 0x36f3, 0x0048, + 0x36eb, 0x1078, 0x209b, 0x609c, 0xa075, 0x0040, 0x3705, 0x0078, + 0x36de, 0x2039, 0x370a, 0x2704, 0xae68, 0x6808, 0xa630, 0x680c, + 0xa529, 0x8421, 0x0040, 0x3705, 0x8738, 0x2704, 0xa005, 0x00c0, + 0x36f4, 0x709c, 0xa075, 0x00c0, 0x36de, 0x007c, 0x0000, 0x0005, + 0x0009, 0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, 0x0003, + 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x370a, 0x3707, + 0x0000, 0x0000, 0x8000, 0x0000, 0x370a, 0x0000, 0x3712, 0x370f, + 0x0000, 0x0000, 0x0000, 0x0000, 0x3712, 0x0000, 0x370d, 0x370d, + 0x0000, 0x0000, 0x8000, 0x0000, 0x370d, 0x0000, 0x3713, 0x3713, + 0x0000, 0x0000, 0x0000, 0x0000, 0x3713, 0x127e, 0x2091, 0x2200, + 0x2079, 0x3d00, 0x2071, 0x0010, 0x7007, 0x000a, 0x7007, 0x0002, + 0x7003, 0x0000, 0x2071, 0x0020, 0x7007, 0x000a, 0x7007, 0x0002, + 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c, 0x2049, + 0x374f, 0x2019, 0x0000, 0x7004, 0x8004, 0x00c8, 0x379b, 0x7007, + 0x0012, 0x7108, 0x7008, 0xa106, 0x00c0, 0x3759, 0xa184, 0x01e0, + 0x0040, 0x3764, 0x1078, 0x209b, 0xa184, 0x4000, 0x00c0, 0x3759, + 0xa19c, 0x300c, 0xa386, 0x2004, 0x0040, 0x3776, 0xa386, 0x0008, + 0x0040, 0x3781, 0xa386, 0x200c, 0x00c0, 0x3759, 0x7200, 0x8204, + 0x0048, 0x3781, 0x730c, 0xa384, 0x00ff, 0x0040, 0x3781, 0x1078, + 0x209b, 0x7007, 0x0012, 0x7000, 0xa084, 0x0001, 0x00c0, 0x379b, + 0x7008, 0xa084, 0x01e0, 0x00c0, 0x379b, 0x7310, 0x7014, 0xa305, + 0x0040, 0x379b, 0x710c, 0xa184, 0x0300, 0x00c0, 0x379b, 0xa184, + 0x00ff, 0x00c0, 0x374f, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, + 0xa084, 0x0008, 0x00c0, 0x379f, 0x7007, 0x0012, 0x7108, 0x8103, + 0x0048, 0x37a4, 0x7003, 0x0000, 0x2049, 0x0000, 0x007c, 0x107e, + 0x007e, 0x127e, 0x157e, 0x2091, 0x2200, 0x7108, 0x1078, 0x37bf, + 0x157f, 0x127f, 0x2091, 0x8001, 0x007f, 0x107f, 0x007c, 0x7204, + 0x7500, 0x730c, 0xa384, 0x0300, 0x00c0, 0x3801, 0xa184, 0x01e0, + 0x00c0, 0x3825, 0x7108, 0xa184, 0x01e0, 0x00c0, 0x3825, 0x2001, + 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8, 0x37f5, 0xa184, 0x4000, + 0x00c0, 0x37ca, 0xa986, 0x3a01, 0x00c0, 0x37f5, 0xa19c, 0x300c, + 0xa386, 0x2004, 0x0040, 0x37ec, 0xa386, 0x0008, 0x0040, 0x37f5, + 0xa386, 0x200c, 0x00c0, 0x37ca, 0x7200, 0x8204, 0x0048, 0x37f5, + 0x730c, 0xa384, 0x00ff, 0x00c0, 0x3801, 0xa184, 0x0007, 0x0079, + 0x37f9, 0x3803, 0x3815, 0x3801, 0x3815, 0x3801, 0x3861, 0x3801, + 0x385f, 0x1078, 0x209b, 0x7004, 0xa084, 0x0010, 0xa085, 0x0002, + 0x7006, 0x8aff, 0x00c0, 0x3810, 0x2049, 0x0000, 0x0078, 0x3814, + 0x1078, 0x39d8, 0x00c0, 0x3810, 0x007c, 0x7004, 0xa084, 0x0010, + 0xa085, 0x0002, 0x7006, 0x8aff, 0x00c0, 0x3820, 0x0078, 0x3824, + 0x1078, 0x39d8, 0x00c0, 0x3820, 0x007c, 0x7007, 0x0012, 0x7108, + 0x00e0, 0x3828, 0x2091, 0x6000, 0x00e0, 0x382c, 0x2091, 0x6000, + 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xa084, 0x0008, 0x00c0, + 0x3834, 0x7007, 0x0012, 0x7108, 0x8103, 0x0048, 0x3839, 0x7003, + 0x0000, 0x7000, 0xa005, 0x00c0, 0x384d, 0x7004, 0xa005, 0x00c0, + 0x384d, 0x700c, 0xa005, 0x0040, 0x384f, 0x0078, 0x3830, 0x2049, + 0x0000, 0x1078, 0x3404, 0x6818, 0xa084, 0x8000, 0x0040, 0x385a, + 0x681b, 0x0002, 0x007c, 0x1078, 0x209b, 0x1078, 0x209b, 0x1078, + 0x38bd, 0x7210, 0x7114, 0x700c, 0xa09c, 0x00ff, 0x2800, 0xa300, + 0xa211, 0xa189, 0x0000, 0x1078, 0x38bd, 0x2704, 0x2c58, 0xac60, + 0x6308, 0x2200, 0xa322, 0x630c, 0x2100, 0xa31b, 0x2400, 0xa305, + 0x0040, 0x3884, 0x00c8, 0x3884, 0x8412, 0x8210, 0x830a, 0xa189, + 0x0000, 0x2b60, 0x0078, 0x386b, 0x2b60, 0x8a07, 0x007e, 0x6004, + 0xa084, 0x0008, 0x0040, 0x3890, 0xa7ba, 0x370f, 0x0078, 0x3892, + 0xa7ba, 0x3707, 0x007f, 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92, + 0x6b8e, 0x7007, 0x0012, 0x1078, 0x374f, 0x007c, 0x8738, 0x2704, + 0xa005, 0x00c0, 0x38b1, 0x609c, 0xa005, 0x0040, 0x38ba, 0x2060, + 0x6004, 0xa084, 0x000f, 0xa080, 0x3715, 0x203c, 0x87fb, 0x1040, + 0x209b, 0x8a51, 0x0040, 0x38b9, 0x7008, 0xa084, 0x0003, 0xa086, + 0x0003, 0x007c, 0x2051, 0x0000, 0x007c, 0x8a50, 0x8739, 0x2704, + 0xa004, 0x00c0, 0x38d1, 0x6000, 0xa064, 0x00c0, 0x38c8, 0x2d60, + 0x6004, 0xa084, 0x000f, 0xa080, 0x3725, 0x203c, 0x87fb, 0x1040, + 0x209b, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x6884, + 0x2060, 0x6888, 0x6b8c, 0x6c90, 0x8057, 0xaad4, 0x00ff, 0xa084, + 0x00ff, 0x007e, 0x6804, 0xa084, 0x0008, 0x007f, 0x0040, 0x38ec, + 0xa0b8, 0x370f, 0x0078, 0x38ee, 0xa0b8, 0x3707, 0x7e08, 0xa6b5, + 0x000c, 0x681c, 0xa084, 0x0040, 0x0040, 0x38f8, 0xa6b5, 0x0001, + 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x38fa, 0x2400, + 0xa305, 0x00c0, 0x3905, 0x0078, 0x392b, 0x2c58, 0x2704, 0x6104, + 0xac60, 0x6000, 0xa400, 0x701a, 0x6004, 0xa301, 0x701e, 0xa184, + 0x0008, 0x0040, 0x391b, 0x6010, 0xa081, 0x0000, 0x7022, 0x6014, + 0xa081, 0x0000, 0x7026, 0x6208, 0x2400, 0xa202, 0x7012, 0x620c, + 0x2300, 0xa203, 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x1078, + 0x389e, 0x0078, 0x392d, 0x1078, 0x39d8, 0x00c0, 0x392b, 0x127f, + 0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x7007, + 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x3939, 0x7003, 0x0008, + 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, + 0x2049, 0x3943, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, + 0x394c, 0x7e08, 0xa6b5, 0x000c, 0x681c, 0xa084, 0x0020, 0x00c0, + 0x395b, 0xa6b5, 0x0001, 0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, + 0x000f, 0xa7b8, 0x3715, 0x273c, 0x87fb, 0x00c0, 0x3971, 0x0048, + 0x396b, 0x1078, 0x209b, 0x689c, 0xa065, 0x0040, 0x3975, 0x0078, + 0x395e, 0x1078, 0x39d8, 0x00c0, 0x3971, 0x127f, 0x2000, 0x007c, + 0x127e, 0x007e, 0x017e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x037f, + 0x047f, 0x7e08, 0xa6b5, 0x000c, 0x681c, 0xa084, 0x0040, 0x0040, + 0x398b, 0xa6b5, 0x0001, 0x2049, 0x3978, 0x6828, 0xa055, 0x0040, + 0x39d5, 0x2d70, 0x2e60, 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x3715, + 0x273c, 0x87fb, 0x00c0, 0x39a7, 0x0048, 0x39a0, 0x1078, 0x209b, + 0x709c, 0xa075, 0x2060, 0x0040, 0x39d5, 0x0078, 0x3993, 0x2704, + 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0048, 0x39c2, 0x8a51, + 0x00c0, 0x39b4, 0x1078, 0x209b, 0x8738, 0x2704, 0xa005, 0x00c0, + 0x39a8, 0x709c, 0xa075, 0x2060, 0x0040, 0x39d5, 0x2039, 0x3707, + 0x0078, 0x3993, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, 0x6908, + 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x00c8, 0x39d1, 0x1078, + 0x209b, 0x2071, 0x0020, 0x0078, 0x38f8, 0x127f, 0x2000, 0x007c, + 0x7008, 0xa084, 0x0003, 0xa086, 0x0003, 0x0040, 0x3a00, 0x2704, + 0xac08, 0x2104, 0x701a, 0x8108, 0x2104, 0x701e, 0x8108, 0x2104, + 0x7012, 0x8108, 0x2104, 0x7016, 0x6004, 0xa084, 0x0008, 0x0040, + 0x39f7, 0x8108, 0x2104, 0x7022, 0x8108, 0x2104, 0x7026, 0x7602, + 0x7004, 0xa084, 0x0010, 0xa085, 0x0001, 0x7006, 0x1078, 0x389e, + 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, 0x2200, 0x2049, 0x3a01, + 0x0d7f, 0x087f, 0x7108, 0xa184, 0x0003, 0x00c0, 0x3a15, 0x6828, + 0xa005, 0x0040, 0x3a23, 0x0078, 0x36a4, 0x00a0, 0x3a1c, 0x7108, + 0x1078, 0x37bf, 0x0078, 0x3a0a, 0x7007, 0x0010, 0x00a0, 0x3a1e, + 0x7108, 0x1078, 0x37bf, 0x7008, 0xa086, 0x0008, 0x00c0, 0x3a0a, + 0x7000, 0xa005, 0x00c0, 0x3a0a, 0x7003, 0x0000, 0x2049, 0x0000, + 0x127f, 0x2000, 0x007c, 0x127e, 0x147e, 0x137e, 0x157e, 0x0c7e, + 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x2049, 0x3a33, 0xad80, 0x0011, + 0x20a0, 0x2099, 0x0031, 0x700c, 0xa084, 0x00ff, 0x682a, 0x7007, + 0x0008, 0x7007, 0x0002, 0x7003, 0x0001, 0x0040, 0x3a52, 0x8000, + 0x80ac, 0x53a5, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, + 0x3a54, 0x0c7f, 0x2049, 0x0000, 0x7003, 0x0000, 0x157f, 0x137f, + 0x147f, 0x127f, 0x2000, 0x007c, 0x2091, 0x6000, 0x2091, 0x8000, + 0x78c0, 0xa005, 0x00c0, 0x3a7b, 0x798c, 0x70d0, 0xa106, 0x00c0, + 0x3a7b, 0x7804, 0xa005, 0x0040, 0x3a7b, 0x7807, 0x0000, 0x0068, + 0x3a7b, 0x2091, 0x4080, 0x7820, 0x8001, 0x7822, 0x00c0, 0x3b00, + 0x7824, 0x7822, 0x783c, 0xa005, 0x0040, 0x3a8c, 0x8001, 0x783e, + 0x00c0, 0x3a8c, 0x1078, 0x3c2a, 0x78ec, 0xa005, 0x0040, 0x3ab0, + 0x78d4, 0xa005, 0x00c0, 0x3ab0, 0x3a10, 0xa284, 0x0002, 0x00c0, + 0x3aa0, 0x78d7, 0x0007, 0x2009, 0xff01, 0x200a, 0x0078, 0x3ab0, + 0xa284, 0x0001, 0x00c0, 0x3aa8, 0x78eb, 0x0000, 0x0078, 0x3ab0, + 0x78e8, 0xa005, 0x00c0, 0x3ab0, 0x78d7, 0x0008, 0x78eb, 0x0001, + 0x2069, 0x3d40, 0x6800, 0xa084, 0x0007, 0x0040, 0x3ac7, 0xa086, + 0x0002, 0x0040, 0x3ac7, 0x6830, 0xa00d, 0x0040, 0x3ac7, 0x2104, + 0xa005, 0x0040, 0x3ac7, 0x8001, 0x200a, 0x0040, 0x3ba2, 0x7848, + 0xa005, 0x0040, 0x3ad1, 0x8001, 0x784a, 0x00c0, 0x3ad1, 0x1078, + 0x1edc, 0x68c4, 0xa005, 0x0040, 0x3add, 0x8001, 0x68c6, 0x00c0, + 0x3add, 0x68a3, 0x0000, 0x68a7, 0x0001, 0x2061, 0x4000, 0x2009, + 0x0002, 0x20a9, 0x0100, 0x6034, 0xa005, 0x0040, 0x3af3, 0x8001, + 0x6036, 0x00c0, 0x3af3, 0x6010, 0xa005, 0x0040, 0x3af3, 0x017e, + 0x1078, 0x1edc, 0x017f, 0xace0, 0x0010, 0x0070, 0x3af9, 0x0078, + 0x3ae3, 0x8109, 0x0040, 0x3b00, 0x20a9, 0x0100, 0x0078, 0x3ae3, + 0x1078, 0x3b07, 0x1078, 0x3b2c, 0x2091, 0x8001, 0x007c, 0x7834, + 0x8001, 0x7836, 0x00c0, 0x3b2b, 0x7838, 0x7836, 0x2091, 0x8000, + 0x7844, 0xa005, 0x00c0, 0x3b16, 0x2001, 0x0101, 0x8001, 0x7846, + 0xa080, 0x6000, 0x2040, 0x2004, 0xa065, 0x0040, 0x3b2b, 0x6024, + 0xa005, 0x0040, 0x3b27, 0x8001, 0x6026, 0x0040, 0x3b5b, 0x6000, + 0x2c40, 0x0078, 0x3b1c, 0x007c, 0x7828, 0x8001, 0x782a, 0x00c0, + 0x3b5a, 0x782c, 0x782a, 0x7830, 0xa005, 0x00c0, 0x3b39, 0x2001, + 0x0200, 0x8001, 0x7832, 0x8003, 0x8003, 0x8003, 0x8003, 0xa090, + 0x4000, 0xa298, 0x0002, 0x2304, 0xa084, 0x0008, 0x0040, 0x3b5a, + 0xa290, 0x0009, 0x2204, 0xa005, 0x0040, 0x3b52, 0x8001, 0x2012, + 0x00c0, 0x3b5a, 0x2304, 0xa084, 0xfff7, 0xa085, 0x0080, 0x201a, + 0x1078, 0x1edc, 0x007c, 0x2069, 0x3d40, 0x6800, 0xa005, 0x0040, + 0x3b65, 0x683c, 0xac06, 0x0040, 0x3ba2, 0x601b, 0x0006, 0x60b4, + 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0060, + 0x6022, 0x6000, 0x2042, 0x6714, 0x6fb6, 0x1078, 0x19c7, 0x6818, + 0xa005, 0x0040, 0x3b7d, 0x8001, 0x681a, 0x6808, 0xa084, 0xffef, + 0x680a, 0x6810, 0x8001, 0x00d0, 0x3b87, 0x1078, 0x209b, 0x6812, + 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x1078, 0x1b56, 0x2069, + 0x3d40, 0x7944, 0xa184, 0x0100, 0x2001, 0x0006, 0x68a2, 0x00c0, + 0x3b9d, 0x69ba, 0x2001, 0x0004, 0x68a2, 0x1078, 0x1ed7, 0x2091, + 0x8001, 0x007c, 0x2009, 0x3d4f, 0x2164, 0x2069, 0x0100, 0x1078, + 0x2046, 0x601b, 0x0006, 0x6858, 0xa084, 0x3f00, 0x601e, 0x6020, + 0xa084, 0x00ff, 0xa085, 0x0048, 0x6022, 0x602f, 0x0000, 0x6033, + 0x0000, 0x6830, 0xa084, 0x0040, 0x0040, 0x3bde, 0x684b, 0x0004, + 0x20a9, 0x0014, 0x6848, 0xa084, 0x0004, 0x0040, 0x3bcb, 0x0070, + 0x3bcb, 0x0078, 0x3bc2, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, + 0xa084, 0x0001, 0x0040, 0x3bd8, 0x0070, 0x3bd8, 0x0078, 0x3bcf, + 0x20a9, 0x00fa, 0x0070, 0x3bde, 0x0078, 0x3bda, 0x6808, 0xa084, + 0xfffd, 0x680a, 0x681b, 0x0047, 0x2009, 0x3d68, 0x200b, 0x0007, + 0x784c, 0x784a, 0x2091, 0x8001, 0x007c, 0x2079, 0x3d00, 0x1078, + 0x3c18, 0x1078, 0x3bfc, 0x1078, 0x3c0a, 0x7833, 0x0000, 0x7847, + 0x0000, 0x784b, 0x0000, 0x007c, 0x2019, 0x0003, 0x2011, 0x3d46, + 0x2204, 0xa086, 0x003c, 0x0040, 0x3c07, 0x2019, 0x0002, 0x7b2a, + 0x7b2e, 0x007c, 0x2019, 0x0039, 0x2011, 0x3d46, 0x2204, 0xa086, + 0x003c, 0x0040, 0x3c15, 0x2019, 0x0027, 0x7b36, 0x7b3a, 0x007c, + 0x2019, 0x3971, 0x2011, 0x3d46, 0x2204, 0xa086, 0x003c, 0x0040, + 0x3c23, 0x2019, 0x2626, 0x7b22, 0x7b26, 0x783f, 0x0000, 0x7843, + 0x000a, 0x007c, 0x2011, 0x0002, 0x2039, 0x0000, 0x20a9, 0x0100, + 0x1078, 0x19c7, 0x2d00, 0xa088, 0x0002, 0x2168, 0x682b, 0x0000, + 0x682f, 0x0000, 0x2104, 0xa085, 0x0040, 0x200a, 0x2100, 0xa088, + 0x0010, 0x0070, 0x3c45, 0x0078, 0x3c35, 0x8211, 0x0040, 0x3c4c, + 0x20a9, 0x0100, 0x0078, 0x3c35, 0x2009, 0x3d51, 0x200b, 0x3d7f, + 0x2009, 0x3d50, 0x200b, 0x0000, 0x007c, 0x6baa +}; +/************************************************************************ + * * + * --- ISP1040 Initiator/Target Firmware --- * + * 32 LUN Support * + * * + ************************************************************************/ +/* + * Firmware Version 7.65.00 (14:17 Jul 20, 1999) + */ +static const u_int16_t isp_1040_risc_code_it[] = { + 0x0078, 0x103a, 0x0000, 0x4057, 0x0000, 0x2043, 0x4f50, 0x5952, + 0x4947, 0x4854, 0x2031, 0x3939, 0x3520, 0x514c, 0x4f47, 0x4943, + 0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350, + 0x3130, 0x3230, 0x2049, 0x2f54, 0x2046, 0x6972, 0x6d77, 0x6172, + 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, 0x372e, 0x3635, + 0x2020, 0x2043, 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, + 0x3030, 0x2050, 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, + 0x3031, 0x2024, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x0048, + 0x1045, 0x0038, 0x104b, 0x0078, 0x1047, 0x0028, 0x104b, 0x20b9, + 0x1212, 0x0078, 0x104d, 0x20b9, 0x2222, 0x20c1, 0x0008, 0x2071, + 0x0010, 0x70c3, 0x0004, 0x20c9, 0x77ff, 0x2089, 0x1186, 0x70c7, + 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, 0x0007, 0x3f00, + 0x70d6, 0x20c1, 0x0008, 0x2019, 0x0000, 0x2009, 0xfeff, 0x2100, + 0x200b, 0xa5a5, 0xa1ec, 0x7fff, 0x2d64, 0x206b, 0x0a0a, 0xaddc, + 0x3fff, 0x2b54, 0x205b, 0x5050, 0x2114, 0xa286, 0xa5a5, 0x0040, + 0x10bf, 0xa386, 0x000f, 0x0040, 0x1085, 0x2c6a, 0x2a5a, 0x20c1, + 0x0000, 0x2019, 0x000f, 0x0078, 0x1065, 0x2c6a, 0x2a5a, 0x20c1, + 0x0008, 0x2009, 0x7fff, 0x2148, 0x2944, 0x204b, 0x0a0a, 0xa9bc, + 0x3fff, 0x2734, 0x203b, 0x5050, 0x2114, 0xa286, 0x0a0a, 0x0040, + 0x10a9, 0x284a, 0x263a, 0x20c1, 0x0004, 0x2009, 0x3fff, 0x2134, + 0x200b, 0x5050, 0x2114, 0xa286, 0x5050, 0x0040, 0x10aa, 0x0078, + 0x118e, 0x284a, 0x263a, 0x98c0, 0xa188, 0x1000, 0x212c, 0x200b, + 0xa5a5, 0x2114, 0xa286, 0xa5a5, 0x0040, 0x10bc, 0x250a, 0xa18a, + 0x1000, 0x98c1, 0x0078, 0x10c1, 0x250a, 0x0078, 0x10c1, 0x2c6a, + 0x2a5a, 0x2130, 0xa18a, 0x0040, 0x2128, 0xa1a2, 0x5100, 0x8424, + 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, 0xa192, 0x7800, 0x2009, + 0x0000, 0x2001, 0x0031, 0x1078, 0x1cba, 0x2218, 0x2079, 0x5100, + 0x2fa0, 0x2408, 0x2011, 0x0000, 0x20a9, 0x0040, 0x42a4, 0x8109, + 0x00c0, 0x10dc, 0x7ef2, 0x8528, 0x7de6, 0x7cea, 0x7bee, 0x7883, + 0x0000, 0x2031, 0x0030, 0x78cf, 0x0101, 0x780b, 0x0002, 0x780f, + 0x0002, 0x784f, 0x0003, 0x2069, 0x5140, 0x2001, 0x04fd, 0x2004, + 0xa082, 0x0005, 0x0048, 0x1104, 0x0038, 0x1100, 0x0078, 0x1108, + 0x681b, 0x003c, 0x0078, 0x110a, 0x00a8, 0x1108, 0x681b, 0x003c, + 0x681b, 0x0028, 0x6807, 0x0007, 0x680b, 0x00fa, 0x680f, 0x0008, + 0x6813, 0x0005, 0x6823, 0x0000, 0x6827, 0x0006, 0x6817, 0x0008, + 0x682b, 0x0000, 0x681f, 0x0019, 0x2069, 0x5380, 0x2011, 0x0020, + 0x2009, 0x0010, 0x680b, 0x080c, 0x680f, 0x0019, 0x6803, 0xfd00, + 0x6807, 0x0018, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004, + 0x8109, 0x00c0, 0x1122, 0x2069, 0x5400, 0x2009, 0x0002, 0x20a9, + 0x0100, 0x6837, 0x0000, 0x680b, 0x0040, 0x7bf0, 0xa386, 0xfeff, + 0x00c0, 0x1148, 0x6817, 0x0100, 0x681f, 0x0064, 0x0078, 0x114c, + 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010, 0x0070, 0x1152, + 0x0078, 0x1139, 0x8109, 0x00c0, 0x1137, 0x1078, 0x220a, 0x1078, + 0x482c, 0x1078, 0x1963, 0x1078, 0x4d22, 0x3200, 0xa085, 0x000d, + 0x2090, 0x70c3, 0x0000, 0x0090, 0x116c, 0x70c0, 0xa086, 0x0002, + 0x00c0, 0x116c, 0x1078, 0x1284, 0x1078, 0x1196, 0x78cc, 0xa005, + 0x00c0, 0x117a, 0x1078, 0x1ce3, 0x0010, 0x1180, 0x0068, 0x1180, + 0x1078, 0x20e9, 0x0010, 0x1180, 0x0068, 0x1180, 0x1078, 0x1a48, + 0x00e0, 0x116c, 0x1078, 0x4ba9, 0x0078, 0x116c, 0x118e, 0x1190, + 0x240b, 0x240b, 0x48ad, 0x48ad, 0x240b, 0x240b, 0x0078, 0x118e, + 0x0078, 0x1190, 0x0078, 0x1192, 0x0078, 0x1194, 0x0068, 0x1201, + 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x1201, 0x7814, + 0xa005, 0x00c0, 0x11a7, 0x0010, 0x1202, 0x0078, 0x1201, 0x2009, + 0x515b, 0x2104, 0xa005, 0x00c0, 0x1201, 0x2009, 0x5164, 0x200b, + 0x0000, 0x7914, 0xa186, 0x0042, 0x00c0, 0x11cc, 0x7816, 0x2009, + 0x5162, 0x2164, 0x200b, 0x0000, 0x6018, 0x70c6, 0x6014, 0x70ca, + 0x611c, 0xa18c, 0xff00, 0x6020, 0xa084, 0x00ff, 0xa105, 0x70ce, + 0x1078, 0x1948, 0x0078, 0x11ff, 0x7814, 0xa086, 0x0018, 0x00c0, + 0x11d3, 0x1078, 0x165a, 0x7817, 0x0000, 0x2009, 0x5162, 0x2104, + 0xa065, 0x0040, 0x11ef, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x19b3, + 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1730, 0x2009, 0x000c, 0x6007, + 0x0103, 0x1078, 0x1924, 0x00c0, 0x11fb, 0x1078, 0x1948, 0x2009, + 0x5162, 0x200b, 0x0000, 0x2009, 0x515c, 0x2104, 0x200b, 0x0000, + 0xa005, 0x0040, 0x11ff, 0x2001, 0x4005, 0x0078, 0x1286, 0x0078, + 0x1284, 0x007c, 0x70c3, 0x0000, 0x70c7, 0x0000, 0x70cb, 0x0000, + 0x70cf, 0x0000, 0x70c0, 0xa0bc, 0xffc0, 0x00c0, 0x1252, 0x2038, + 0x0079, 0x1212, 0x1284, 0x12e5, 0x12a9, 0x12fe, 0x130d, 0x1313, + 0x12a0, 0x1748, 0x1317, 0x1298, 0x12ad, 0x12af, 0x12b1, 0x12b3, + 0x174d, 0x1298, 0x1329, 0x1360, 0x1672, 0x1742, 0x12b5, 0x1591, + 0x15ad, 0x15c9, 0x15f4, 0x154a, 0x1558, 0x156c, 0x1580, 0x13df, + 0x1298, 0x138d, 0x1393, 0x1398, 0x139d, 0x13a3, 0x13a8, 0x13ad, + 0x13b2, 0x13b7, 0x13bb, 0x13d0, 0x13dc, 0x1298, 0x1298, 0x1298, + 0x1298, 0x13eb, 0x13f4, 0x1403, 0x1429, 0x1433, 0x143a, 0x1480, + 0x148f, 0x149e, 0x14b0, 0x152a, 0x153a, 0x1298, 0x1298, 0x1298, + 0x1298, 0x153f, 0xa0bc, 0xffa0, 0x00c0, 0x1298, 0x2038, 0xa084, + 0x001f, 0x0079, 0x125b, 0x1786, 0x1789, 0x1799, 0x1298, 0x1298, + 0x18df, 0x18fc, 0x1298, 0x1298, 0x1298, 0x1900, 0x1908, 0x1298, + 0x1298, 0x1298, 0x1298, 0x12db, 0x12f4, 0x131f, 0x1356, 0x1668, + 0x1764, 0x1778, 0x1298, 0x1829, 0x190e, 0x18bb, 0x18c5, 0x18c9, + 0x18d7, 0x1298, 0x1298, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078, + 0x1286, 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0068, + 0x1287, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x00e0, + 0x128f, 0x00e0, 0x1291, 0x0068, 0x1291, 0x2091, 0x4080, 0x007c, + 0x70c3, 0x4001, 0x0078, 0x1287, 0x70c3, 0x4006, 0x0078, 0x1287, + 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0078, + 0x1284, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078, 0x1284, 0x0078, + 0x1284, 0x0078, 0x1284, 0x0078, 0x1284, 0x2091, 0x8000, 0x70c3, + 0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, + 0x0007, 0x3f00, 0x70d6, 0x2079, 0x0000, 0x781b, 0x0001, 0x2031, + 0x0030, 0x2059, 0x1000, 0x2029, 0x0457, 0x2051, 0x0470, 0x2061, + 0x0472, 0x20b9, 0xffff, 0x20c1, 0x0000, 0x2091, 0x5000, 0x2091, + 0x4080, 0x0078, 0x0455, 0x1078, 0x1b53, 0x00c0, 0x129c, 0x75d8, + 0x74dc, 0x75da, 0x74de, 0x0078, 0x12e8, 0x2029, 0x0000, 0x2520, + 0x71d0, 0x73c8, 0x72cc, 0x70c4, 0x1078, 0x1a8d, 0x0040, 0x1284, + 0x70c3, 0x4002, 0x0078, 0x1284, 0x1078, 0x1b53, 0x00c0, 0x129c, + 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1301, 0x2029, 0x0000, + 0x2520, 0x71d0, 0x73c8, 0x72cc, 0x70c4, 0x1078, 0x1aed, 0x0040, + 0x1284, 0x70c3, 0x4002, 0x0078, 0x1284, 0x71c4, 0x70c8, 0x2114, + 0x200a, 0x0078, 0x1282, 0x71c4, 0x2114, 0x0078, 0x1282, 0x70c7, + 0x0007, 0x70cb, 0x0041, 0x70cf, 0x0000, 0x0078, 0x1284, 0x1078, + 0x1b53, 0x00c0, 0x129c, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, + 0x132c, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0, + 0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005, 0x0040, 0x1350, 0x8001, + 0x7892, 0xa084, 0xfc00, 0x0040, 0x1345, 0x78cc, 0xa085, 0x0001, + 0x78ce, 0x2001, 0x4005, 0x0078, 0x1286, 0x7a9a, 0x7b9e, 0x7da2, + 0x7ea6, 0x7c96, 0x78cc, 0xa084, 0xfffc, 0x78ce, 0x0078, 0x1354, + 0x78cc, 0xa085, 0x0001, 0x78ce, 0x0078, 0x1284, 0x1078, 0x1b53, + 0x00c0, 0x129c, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, 0x1363, + 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6, + 0x72ca, 0x73ce, 0x74d6, 0xa005, 0x0040, 0x1387, 0x8001, 0x78ae, + 0xa084, 0xfc00, 0x0040, 0x137c, 0x78cc, 0xa085, 0x0100, 0x78ce, + 0x2001, 0x4005, 0x0078, 0x1286, 0x7ab6, 0x7bba, 0x7dbe, 0x7ec2, + 0x7cb2, 0x78cc, 0xa084, 0xfcff, 0x78ce, 0x0078, 0x138b, 0x78cc, + 0xa085, 0x0100, 0x78ce, 0x0078, 0x1284, 0x2009, 0x5161, 0x210c, + 0x7aec, 0x0078, 0x1282, 0x2009, 0x5141, 0x210c, 0x0078, 0x1283, + 0x2009, 0x5142, 0x210c, 0x0078, 0x1283, 0x2061, 0x5140, 0x610c, + 0x6210, 0x0078, 0x1282, 0x2009, 0x5145, 0x210c, 0x0078, 0x1283, + 0x2009, 0x5146, 0x210c, 0x0078, 0x1283, 0x2009, 0x5148, 0x210c, + 0x0078, 0x1283, 0x2009, 0x5149, 0x210c, 0x0078, 0x1283, 0x7908, + 0x7a0c, 0x0078, 0x1282, 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, + 0x8003, 0x8003, 0xa0e8, 0x5380, 0x6a00, 0x6804, 0xa084, 0x0008, + 0x0040, 0x13cd, 0x6b08, 0x0078, 0x13ce, 0x6b0c, 0x0078, 0x1281, + 0x77c4, 0x1078, 0x1973, 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, + 0x8001, 0x2708, 0x0078, 0x1281, 0x794c, 0x0078, 0x1283, 0x77c4, + 0x1078, 0x1973, 0x2091, 0x8000, 0x6908, 0x6a18, 0x6b10, 0x2091, + 0x8001, 0x0078, 0x1281, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x127c, + 0x1078, 0x22e2, 0x0078, 0x1281, 0x71c4, 0xa182, 0x0010, 0x00c8, + 0x127c, 0x2011, 0x5141, 0x2204, 0x007e, 0x2112, 0x1078, 0x229b, + 0x017f, 0x0078, 0x1283, 0x71c4, 0x2011, 0x1421, 0x20a9, 0x0008, + 0x2204, 0xa106, 0x0040, 0x1413, 0x8210, 0x0070, 0x1411, 0x0078, + 0x1408, 0x0078, 0x127c, 0xa292, 0x1421, 0x027e, 0x2011, 0x5142, + 0x2204, 0x2112, 0x017f, 0x007e, 0x1078, 0x22a7, 0x017f, 0x0078, + 0x1283, 0x03e8, 0x00fa, 0x01f4, 0x02ee, 0x0064, 0x0019, 0x0032, + 0x004b, 0x2061, 0x5140, 0x610c, 0x6210, 0x70c4, 0x600e, 0x70c8, + 0x6012, 0x0078, 0x1282, 0x2061, 0x5140, 0x6114, 0x70c4, 0x6016, + 0x0078, 0x1283, 0x2061, 0x5140, 0x71c4, 0x2011, 0x0004, 0x601f, + 0x0019, 0x2019, 0x1212, 0xa186, 0x0028, 0x0040, 0x145b, 0x2011, + 0x0005, 0x601f, 0x0019, 0x2019, 0x1212, 0xa186, 0x0032, 0x0040, + 0x145b, 0x2011, 0x0006, 0x601f, 0x000c, 0x2019, 0x2222, 0xa186, + 0x003c, 0x00c0, 0x127c, 0x6018, 0x007e, 0x611a, 0x7800, 0xa084, + 0x0001, 0x00c0, 0x1476, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, + 0x0048, 0x146e, 0x0038, 0x1472, 0x0078, 0x1476, 0x0028, 0x1472, + 0x0078, 0x1476, 0x2019, 0x2222, 0x0078, 0x1478, 0x2019, 0x1212, + 0x23b8, 0x1078, 0x22b8, 0x1078, 0x4d22, 0x017f, 0x0078, 0x1283, + 0x71c4, 0xa184, 0xffcf, 0x00c0, 0x127c, 0x2011, 0x5148, 0x2204, + 0x2112, 0x007e, 0x1078, 0x22da, 0x017f, 0x0078, 0x1283, 0x71c4, + 0xa182, 0x0010, 0x00c8, 0x127c, 0x2011, 0x5149, 0x2204, 0x007e, + 0x2112, 0x1078, 0x22c9, 0x017f, 0x0078, 0x1283, 0x71c4, 0x72c8, + 0xa184, 0xfffd, 0x00c0, 0x127b, 0xa284, 0xfffd, 0x00c0, 0x127b, + 0x2100, 0x7908, 0x780a, 0x2200, 0x7a0c, 0x780e, 0x0078, 0x1282, + 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8, + 0x5380, 0x2019, 0x0000, 0x72c8, 0xa284, 0x0080, 0x0040, 0x14c6, + 0x6c14, 0x84ff, 0x00c0, 0x14c6, 0x6817, 0x0040, 0xa284, 0x0040, + 0x0040, 0x14d0, 0x6c10, 0x84ff, 0x00c0, 0x14d0, 0x6813, 0x0001, + 0x6800, 0x007e, 0xa226, 0x0040, 0x14f3, 0x6a02, 0xa484, 0x2000, + 0x0040, 0x14dc, 0xa39d, 0x0010, 0xa484, 0x1000, 0x0040, 0x14e2, + 0xa39d, 0x0008, 0xa484, 0x4000, 0x0040, 0x14f3, 0x810f, 0xa284, + 0x4000, 0x0040, 0x14ef, 0x1078, 0x22fc, 0x0078, 0x14f3, 0x1078, + 0x22ee, 0x0078, 0x14f3, 0x72cc, 0x6808, 0xa206, 0x0040, 0x1522, + 0xa2a4, 0x00ff, 0x2061, 0x5140, 0x6118, 0xa186, 0x0028, 0x0040, + 0x1509, 0xa186, 0x0032, 0x0040, 0x150f, 0xa186, 0x003c, 0x0040, + 0x1515, 0xa482, 0x0064, 0x0048, 0x151f, 0x0078, 0x1519, 0xa482, + 0x0050, 0x0048, 0x151f, 0x0078, 0x1519, 0xa482, 0x0043, 0x0048, + 0x151f, 0x71c4, 0x71c6, 0x027f, 0x72ca, 0x0078, 0x127d, 0x6a0a, + 0xa39d, 0x000a, 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x71c4, + 0x0078, 0x1281, 0x77c4, 0x1078, 0x1973, 0x2091, 0x8000, 0x6a14, + 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e, 0x2708, + 0x0078, 0x1281, 0x70c4, 0x794c, 0x784e, 0x0078, 0x1283, 0x71c4, + 0x72c8, 0x73cc, 0xa182, 0x0010, 0x00c8, 0x127c, 0x1078, 0x230a, + 0x0078, 0x1281, 0x77c4, 0x1078, 0x1973, 0x2091, 0x8000, 0x6a08, + 0xa295, 0x0002, 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0078, 0x1282, + 0x77c4, 0x1078, 0x1973, 0x2091, 0x8000, 0x6a08, 0xa294, 0xfff9, + 0x6a0a, 0x6804, 0xa005, 0x0040, 0x1567, 0x1078, 0x21d2, 0x2091, + 0x8001, 0x2708, 0x0078, 0x1282, 0x77c4, 0x1078, 0x1973, 0x2091, + 0x8000, 0x6a08, 0xa295, 0x0004, 0x6a0a, 0x6804, 0xa005, 0x0040, + 0x157b, 0x1078, 0x21d2, 0x2091, 0x8001, 0x2708, 0x0078, 0x1282, + 0x77c4, 0x2041, 0x0001, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, + 0x8000, 0x1078, 0x1980, 0x2091, 0x8001, 0x2708, 0x6a08, 0x0078, + 0x1282, 0x77c4, 0x72c8, 0x73cc, 0x77c6, 0x72ca, 0x73ce, 0x1078, + 0x19e1, 0x00c0, 0x15a9, 0x6818, 0xa005, 0x0040, 0x15a9, 0x2708, + 0x1078, 0x231a, 0x00c0, 0x15a9, 0x7817, 0x0015, 0x2091, 0x8001, + 0x007c, 0x2091, 0x8001, 0x0078, 0x1284, 0x77c4, 0x77c6, 0x2041, + 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078, + 0x1980, 0x2061, 0x5140, 0x606f, 0x0003, 0x6782, 0x6093, 0x000f, + 0x6073, 0x0000, 0x7817, 0x0016, 0x1078, 0x21d2, 0x2091, 0x8001, + 0x007c, 0x77c8, 0x77ca, 0x77c4, 0x77c6, 0xa7bc, 0xff00, 0x2091, + 0x8000, 0x2061, 0x5140, 0x606f, 0x0002, 0x6073, 0x0000, 0x6782, + 0x6093, 0x000f, 0x7817, 0x0017, 0x1078, 0x21d2, 0x2091, 0x8001, + 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, 0x2091, 0x8000, + 0x1078, 0x1980, 0x70c8, 0x6836, 0x8738, 0xa784, 0x001f, 0x00c0, + 0x15e8, 0x2091, 0x8001, 0x007c, 0x78cc, 0xa084, 0x0003, 0x00c0, + 0x1618, 0x2039, 0x0000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, + 0x0008, 0x1078, 0x1973, 0x2091, 0x8000, 0x6808, 0xa80d, 0x690a, + 0x2091, 0x8001, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1601, 0xa7bc, + 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1601, + 0x2091, 0x8000, 0x2069, 0x0100, 0x6830, 0xa084, 0x0040, 0x0040, + 0x1641, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0004, + 0x0040, 0x162e, 0x0070, 0x162e, 0x0078, 0x1625, 0x684b, 0x0009, + 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, 0x0040, 0x163b, 0x0070, + 0x163b, 0x0078, 0x1632, 0x20a9, 0x00fa, 0x0070, 0x1641, 0x0078, + 0x163d, 0x2079, 0x5100, 0x7817, 0x0018, 0x2061, 0x5140, 0x606f, + 0x0001, 0x6073, 0x0000, 0x6093, 0x000f, 0x78cc, 0xa085, 0x0002, + 0x78ce, 0x6808, 0xa084, 0xfffd, 0x680a, 0x681b, 0x0048, 0x2091, + 0x8001, 0x007c, 0x78cc, 0xa084, 0xfffd, 0x78ce, 0xa084, 0x0001, + 0x00c0, 0x1664, 0x1078, 0x1a2b, 0x71c4, 0x71c6, 0x794a, 0x007c, + 0x1078, 0x1b53, 0x00c0, 0x129c, 0x75d8, 0x74dc, 0x75da, 0x74de, + 0x0078, 0x1675, 0x2029, 0x0000, 0x2520, 0x71c4, 0x73c8, 0x72cc, + 0x71c6, 0x73ca, 0x72ce, 0x2079, 0x5100, 0x2091, 0x8000, 0x1078, + 0x192e, 0x2091, 0x8001, 0x0040, 0x172c, 0x20a9, 0x0005, 0x20a1, + 0x5118, 0x2091, 0x8000, 0x41a1, 0x2091, 0x8001, 0x2009, 0x0020, + 0x1078, 0x1929, 0x0040, 0x1698, 0x1078, 0x1948, 0x0078, 0x172c, + 0x6004, 0xa084, 0xff00, 0x8007, 0x8009, 0x0040, 0x16fb, 0x0c7e, + 0x2c68, 0x2091, 0x8000, 0x1078, 0x192e, 0x2091, 0x8001, 0x0040, + 0x16cc, 0x2c00, 0x689e, 0x8109, 0x00c0, 0x16a0, 0x609f, 0x0000, + 0x0c7f, 0x0c7e, 0x7218, 0x731c, 0x7420, 0x7524, 0x2c68, 0x689c, + 0xa065, 0x0040, 0x16fa, 0x2009, 0x0020, 0x1078, 0x1929, 0x00c0, + 0x16e3, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0002, 0x00c0, 0x16cc, + 0x2d00, 0x6002, 0x0078, 0x16b2, 0x0c7f, 0x0c7e, 0x609c, 0x2060, + 0x1078, 0x19b3, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1730, 0x2009, + 0x000c, 0x6008, 0xa085, 0x0200, 0x600a, 0x1078, 0x1924, 0x1078, + 0x1948, 0x0078, 0x172c, 0x0c7f, 0x0c7e, 0x609c, 0x2060, 0x1078, + 0x19b3, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1730, 0x2009, 0x000c, + 0x6007, 0x0103, 0x601b, 0x0003, 0x1078, 0x1924, 0x1078, 0x1948, + 0x0078, 0x172c, 0x0c7f, 0x74c4, 0x73c8, 0x72cc, 0x6014, 0x2091, + 0x8000, 0x7817, 0x0012, 0x0e7e, 0x2071, 0x5140, 0x706f, 0x0005, + 0x7073, 0x0000, 0x7376, 0x727a, 0x747e, 0x7082, 0x7087, 0x0000, + 0x2c00, 0x708a, 0x708f, 0x0000, 0xa02e, 0x2530, 0x611c, 0x61a2, + 0xa184, 0x0060, 0x0040, 0x171e, 0x1078, 0x47c2, 0x0e7f, 0x6596, + 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000, 0x1078, + 0x21d2, 0x2091, 0x8001, 0x007c, 0x70c3, 0x4005, 0x0078, 0x1287, + 0x20a9, 0x0005, 0x2099, 0x5118, 0x2091, 0x8000, 0x530a, 0x2091, + 0x8001, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, + 0x0000, 0x007c, 0x71c4, 0x70c7, 0x0000, 0x7906, 0x0078, 0x1284, + 0x71c4, 0x71c6, 0x2168, 0x0078, 0x174f, 0x2069, 0x1000, 0x690c, + 0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x00c0, 0x1751, 0xa285, + 0x0000, 0x00c0, 0x175f, 0x70c3, 0x4000, 0x0078, 0x1761, 0x70c3, + 0x4003, 0x70ca, 0x0078, 0x1287, 0x2011, 0x5167, 0x220c, 0x70c4, + 0x8003, 0x0048, 0x1771, 0x1078, 0x3b7f, 0xa184, 0x7fff, 0x0078, + 0x1775, 0x1078, 0x3b72, 0xa185, 0x8000, 0x2012, 0x0078, 0x1283, + 0x71c4, 0x1078, 0x3b69, 0x6100, 0x2001, 0x5167, 0x2004, 0xa084, + 0x8000, 0xa10d, 0x6204, 0x6308, 0x0078, 0x1281, 0x79e4, 0x0078, + 0x1283, 0x71c4, 0x71c6, 0x2198, 0x20a1, 0x0042, 0x20a9, 0x0004, + 0x53a3, 0x21a0, 0x2099, 0x0042, 0x20a9, 0x0004, 0x53a3, 0x0078, + 0x1284, 0x70c4, 0x2068, 0x2079, 0x5100, 0x2091, 0x8000, 0x1078, + 0x192e, 0x2091, 0x8001, 0x0040, 0x1825, 0x6007, 0x0001, 0x600b, + 0x0000, 0x602b, 0x0000, 0x601b, 0x0006, 0x6a10, 0xa28c, 0x000f, + 0xa284, 0x00f0, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0x6016, + 0xa284, 0x0800, 0x0040, 0x17c0, 0x601b, 0x000a, 0x0078, 0x17c6, + 0xa284, 0x1000, 0x0040, 0x17c6, 0x601b, 0x000c, 0xa284, 0x0300, + 0x0040, 0x17cf, 0x602b, 0x0001, 0x8004, 0x8004, 0x8004, 0xa085, + 0x0001, 0x601e, 0x6023, 0x0000, 0x6027, 0x0000, 0xa284, 0x0400, + 0x0040, 0x17dc, 0x602b, 0x0000, 0x20a9, 0x0006, 0xac80, 0x000b, + 0x20a0, 0xad80, 0x0005, 0x2098, 0x53a3, 0xa284, 0x0300, 0x00c0, + 0x17f1, 0x6046, 0x604a, 0x604e, 0x6052, 0x6096, 0x609a, 0x0078, + 0x17fb, 0x6800, 0x6046, 0x6804, 0x604a, 0x6e08, 0x664e, 0x6d0c, + 0x6552, 0x6596, 0x669a, 0x6014, 0x2091, 0x8000, 0x7817, 0x0042, + 0x2c08, 0x2061, 0x5140, 0x606f, 0x0005, 0x6073, 0x0000, 0x6077, + 0x0000, 0x607b, 0x0000, 0x607f, 0x0000, 0x6082, 0x618a, 0xa284, + 0x0400, 0x608e, 0x2091, 0x8001, 0x0e7e, 0x2071, 0x0020, 0x7007, + 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x0e7f, 0x2091, 0x8000, + 0x1078, 0x21d2, 0x2091, 0x8001, 0x007c, 0x70c3, 0x4005, 0x0078, + 0x1287, 0x0c7e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2091, 0x8000, 0x2071, + 0x5140, 0x2079, 0x0100, 0x2061, 0x0010, 0x70a0, 0xa06d, 0x0040, + 0x18b1, 0x6a04, 0xa294, 0x00ff, 0xa286, 0x0007, 0x0040, 0x1844, + 0xa286, 0x000f, 0x00c0, 0x18b1, 0x691c, 0xa184, 0x0080, 0x00c0, + 0x18b1, 0x6824, 0xa18c, 0xff00, 0xa085, 0x0019, 0x6826, 0x71b0, + 0x81ff, 0x0040, 0x1867, 0x0d7e, 0x2069, 0x0020, 0x6807, 0x0010, + 0x6908, 0x6808, 0xa106, 0x00c0, 0x1858, 0x690c, 0x680c, 0xa106, + 0x00c0, 0x185d, 0xa184, 0x00ff, 0x00c0, 0x185d, 0x0d7f, 0x78b8, + 0xa084, 0x801f, 0x00c0, 0x1867, 0x7848, 0xa085, 0x000c, 0x784a, + 0x71b0, 0x81ff, 0x0040, 0x188a, 0x70b3, 0x0000, 0x0d7e, 0x2069, + 0x0020, 0x6807, 0x0018, 0x6804, 0xa084, 0x0008, 0x00c0, 0x187b, + 0x6807, 0x0008, 0x6804, 0xa084, 0x0008, 0x00c0, 0x1882, 0x6807, + 0x0002, 0x0d7f, 0x61c4, 0x62c8, 0x63cc, 0x61c6, 0x62ca, 0x63ce, + 0x0e7e, 0x2071, 0x5100, 0x7266, 0x736a, 0xae80, 0x0019, 0x0e7f, + 0x7848, 0xa084, 0x000c, 0x00c0, 0x1898, 0x1078, 0x46db, 0x78a3, + 0x0000, 0x7858, 0xa084, 0xedff, 0x785a, 0x70b4, 0xa080, 0x00df, + 0x781a, 0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x2091, 0x8001, 0x0078, + 0x1284, 0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x2091, 0x8001, 0x2001, + 0x4005, 0x0078, 0x1286, 0x7980, 0x71c6, 0x71c4, 0xa182, 0x0003, + 0x00c8, 0x127c, 0x7982, 0x0078, 0x1284, 0x7980, 0x71c6, 0x0078, + 0x1284, 0x7974, 0x71c6, 0x71c4, 0x7976, 0x7978, 0x71ca, 0x71c8, + 0x797a, 0x797c, 0x71ce, 0x71cc, 0x797e, 0x0078, 0x1284, 0x7974, + 0x71c6, 0x7978, 0x71ca, 0x797c, 0x71ce, 0x0078, 0x1284, 0x7900, + 0x71c6, 0x71c4, 0x7902, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, + 0x0048, 0x18ee, 0x0038, 0x18f0, 0x0078, 0x18fa, 0x00a8, 0x18fa, + 0xa18c, 0x0001, 0x00c0, 0x18f8, 0x20b9, 0x2222, 0x0078, 0x18fa, + 0x20b9, 0x1212, 0x0078, 0x1284, 0x7900, 0x71c6, 0x0078, 0x1284, + 0x2009, 0x5174, 0x2104, 0x70c6, 0x70c4, 0x200a, 0x0078, 0x1284, + 0x2009, 0x5174, 0x2104, 0x70c6, 0x0078, 0x1284, 0x71c4, 0x8107, + 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8, 0x5380, 0x6a14, + 0xd2b4, 0x0040, 0x191f, 0x2011, 0x0001, 0x0078, 0x1921, 0x2011, + 0x0000, 0x6b0c, 0x0078, 0x1281, 0xac80, 0x0001, 0x1078, 0x1b0f, + 0x007c, 0xac80, 0x0001, 0x1078, 0x1aaf, 0x007c, 0x7850, 0xa065, + 0x0040, 0x1936, 0x2c04, 0x7852, 0x2063, 0x0000, 0x007c, 0x0f7e, + 0x2079, 0x5100, 0x7850, 0xa06d, 0x0040, 0x1946, 0x2d04, 0x7852, + 0x6803, 0x0000, 0x6807, 0x0000, 0x680b, 0x0000, 0x0f7f, 0x007c, + 0x2091, 0x8000, 0x0f7e, 0x2079, 0x5100, 0x7850, 0x2062, 0x2c00, + 0xa005, 0x00c0, 0x1955, 0x1078, 0x23eb, 0x7852, 0x0f7f, 0x2091, + 0x8001, 0x007c, 0x0f7e, 0x2079, 0x5100, 0x7850, 0x206a, 0x2d00, + 0x7852, 0x0f7f, 0x007c, 0x2011, 0x7800, 0x7a52, 0x7bec, 0x8319, + 0x0040, 0x1970, 0xa280, 0x0031, 0x2012, 0x2010, 0x0078, 0x1967, + 0x2013, 0x0000, 0x007c, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, + 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xa0e8, 0x5400, 0x007c, + 0x1078, 0x1973, 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, + 0xffef, 0xa80d, 0x690a, 0x2009, 0x5152, 0x210c, 0x6804, 0xa005, + 0x0040, 0x19b2, 0xa116, 0x00c0, 0x199d, 0x2060, 0x6000, 0x6806, + 0x017e, 0x200b, 0x0000, 0x0078, 0x19a0, 0x2009, 0x0000, 0x017e, + 0x6804, 0xa065, 0x0040, 0x19af, 0x6000, 0x6806, 0x1078, 0x19c0, + 0x1078, 0x1c5f, 0x6810, 0x8001, 0x6812, 0x00c0, 0x19a0, 0x017f, + 0x6902, 0x6906, 0x007c, 0xa065, 0x0040, 0x19bf, 0x609c, 0x609f, + 0x0000, 0x2008, 0x1078, 0x1948, 0x2100, 0x0078, 0x19b3, 0x007c, + 0x6007, 0x0103, 0x608f, 0x0000, 0x20a9, 0x001c, 0xac80, 0x0005, + 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828, 0x601a, 0x682c, 0x6022, + 0x007c, 0x0e7e, 0x2071, 0x5140, 0x704c, 0xa08c, 0x0200, 0x00c0, + 0x19df, 0xa088, 0x5180, 0x2d0a, 0x8000, 0x704e, 0xa006, 0x0e7f, + 0x007c, 0x1078, 0x1973, 0x2091, 0x8000, 0x6804, 0x781e, 0xa065, + 0x0040, 0x1a2a, 0x0078, 0x19f2, 0x2c00, 0x781e, 0x6000, 0xa065, + 0x0040, 0x1a2a, 0x600c, 0xa306, 0x00c0, 0x19ec, 0x6010, 0xa206, + 0x00c0, 0x19ec, 0x2c28, 0x2001, 0x5152, 0x2004, 0xac06, 0x00c0, + 0x1a03, 0x0078, 0x1a28, 0x6804, 0xac06, 0x00c0, 0x1a10, 0x6000, + 0xa065, 0x6806, 0x00c0, 0x1a1a, 0x6803, 0x0000, 0x0078, 0x1a1a, + 0x6400, 0x781c, 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x1a1a, + 0x2c00, 0x6802, 0x2560, 0x1078, 0x19c0, 0x601b, 0x0005, 0x6023, + 0x0020, 0x1078, 0x1c5f, 0x6810, 0x8001, 0x1050, 0x23eb, 0x6812, + 0xa085, 0xffff, 0x007c, 0x2039, 0x0000, 0x2041, 0x0021, 0x2049, + 0x0004, 0x2051, 0x0008, 0x2091, 0x8000, 0x1078, 0x1980, 0x8738, + 0xa784, 0x001f, 0x00c0, 0x1a35, 0xa7bc, 0xff00, 0x873f, 0x8738, + 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1a35, 0x2091, 0x8001, 0x007c, + 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x1a59, 0x2091, + 0x8000, 0x78e0, 0x78e3, 0x0000, 0x2091, 0x8001, 0xa005, 0x00c0, + 0x1a5a, 0x007c, 0xa08c, 0xfff0, 0x0040, 0x1a60, 0x1078, 0x23eb, + 0x0079, 0x1a62, 0x1a72, 0x1a75, 0x1a7b, 0x1a7f, 0x1a73, 0x1a83, + 0x1a89, 0x1a73, 0x1a73, 0x1c29, 0x1c4d, 0x1c51, 0x1a73, 0x1a73, + 0x1a73, 0x1a73, 0x007c, 0x1078, 0x23eb, 0x1078, 0x1a2b, 0x2001, + 0x8001, 0x0078, 0x1c57, 0x2001, 0x8003, 0x0078, 0x1c57, 0x2001, + 0x8004, 0x0078, 0x1c57, 0x1078, 0x1a2b, 0x2001, 0x8006, 0x0078, + 0x1c57, 0x2001, 0x8007, 0x0078, 0x1c57, 0x2030, 0x2138, 0xa782, + 0x0021, 0x0048, 0x1a95, 0x2009, 0x0020, 0x2600, 0x1078, 0x1aaf, + 0x00c0, 0x1aae, 0xa7ba, 0x0020, 0x0048, 0x1aad, 0x0040, 0x1aad, + 0x2708, 0xa6b0, 0x0020, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1, + 0x0000, 0xa5a9, 0x0000, 0x0078, 0x1a8f, 0xa006, 0x007c, 0x81ff, + 0x0040, 0x1aea, 0x2099, 0x0030, 0x20a0, 0x700c, 0xa084, 0x00ff, + 0x0040, 0x1ac1, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, + 0x1abc, 0x21a8, 0x7017, 0x0000, 0x810b, 0x7112, 0x721a, 0x731e, + 0x7422, 0x7526, 0x780c, 0xa085, 0x0001, 0x7002, 0x7007, 0x0001, + 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8, 0x1ade, 0x2009, + 0x0022, 0x2104, 0xa084, 0x4000, 0x00c0, 0x1ad0, 0x7008, 0x800b, + 0x00c8, 0x1ad0, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x00c0, 0x1aea, + 0x53a5, 0xa006, 0x7003, 0x0000, 0x007c, 0x2030, 0x2138, 0xa782, + 0x0021, 0x0048, 0x1af5, 0x2009, 0x0020, 0x2600, 0x1078, 0x1b0f, + 0x00c0, 0x1b0e, 0xa7ba, 0x0020, 0x0048, 0x1b0d, 0x0040, 0x1b0d, + 0x2708, 0xa6b0, 0x0020, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1, + 0x0000, 0xa5a9, 0x0000, 0x0078, 0x1aef, 0xa006, 0x007c, 0x81ff, + 0x0040, 0x1b50, 0x2098, 0x20a1, 0x0030, 0x700c, 0xa084, 0x00ff, + 0x0040, 0x1b21, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, + 0x1b1c, 0x21a8, 0x7017, 0x0000, 0x810b, 0x7112, 0x721a, 0x731e, + 0x7422, 0x7526, 0x780c, 0xa085, 0x0000, 0x7002, 0x53a6, 0x7007, + 0x0001, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8, 0x1b3f, + 0x2009, 0x0022, 0x2104, 0xa084, 0x4000, 0x00c0, 0x1b31, 0x7010, + 0xa084, 0xf000, 0x0040, 0x1b48, 0x7007, 0x0008, 0x0078, 0x1b4c, + 0x7108, 0x8103, 0x00c8, 0x1b31, 0x7007, 0x0002, 0xa184, 0x01e0, + 0x7003, 0x0000, 0x007c, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0004, + 0x00c8, 0x1b5c, 0x0078, 0x1b5f, 0xa006, 0x0078, 0x1b61, 0xa085, + 0x0001, 0x007c, 0x0e7e, 0x2071, 0x5100, 0x2d08, 0x7058, 0x6802, + 0xa005, 0x00c0, 0x1b6c, 0x715e, 0x715a, 0x0e7f, 0x007c, 0x2c08, + 0x7858, 0x6002, 0xa005, 0x00c0, 0x1b76, 0x795e, 0x795a, 0x007c, + 0x2091, 0x8000, 0x6003, 0x0000, 0x2c08, 0x785c, 0xa065, 0x00c0, + 0x1b84, 0x795a, 0x0078, 0x1b85, 0x6102, 0x795e, 0x2091, 0x8001, + 0x1078, 0x21ef, 0x007c, 0x0e7e, 0x2071, 0x5100, 0x7058, 0xa06d, + 0x0040, 0x1b99, 0x6800, 0x705a, 0xa005, 0x00c0, 0x1b98, 0x705e, + 0x8dff, 0x0e7f, 0x007c, 0x0d7e, 0x0c7e, 0x0f7e, 0x2079, 0x5100, + 0xaf80, 0x0016, 0x2060, 0x6000, 0xa005, 0x0040, 0x1bc9, 0x2068, + 0x6814, 0xa306, 0x00c0, 0x1bb2, 0x6828, 0xa084, 0x00ff, 0xa406, + 0x0040, 0x1bb5, 0x2d60, 0x0078, 0x1ba3, 0x6800, 0xa005, 0x6002, + 0x00c0, 0x1bc1, 0xaf80, 0x0016, 0xac06, 0x0040, 0x1bc0, 0x2c00, + 0x785e, 0x0d7e, 0x689c, 0xa005, 0x0040, 0x1bc8, 0x1078, 0x19b3, + 0x007f, 0x0f7f, 0x0c7f, 0x0d7f, 0xa005, 0x007c, 0x0d7e, 0x0c7e, + 0x0f7e, 0x2079, 0x5100, 0xaf80, 0x0016, 0x2060, 0x6000, 0xa005, + 0x0040, 0x1bf8, 0x2068, 0x6814, 0xa084, 0x00ff, 0xa306, 0x0040, + 0x1be4, 0x2d60, 0x0078, 0x1bd6, 0x6800, 0xa005, 0x6002, 0x00c0, + 0x1bf0, 0xaf80, 0x0016, 0xac06, 0x0040, 0x1bef, 0x2c00, 0x785e, + 0x0d7e, 0x689c, 0xa005, 0x0040, 0x1bf7, 0x1078, 0x19b3, 0x007f, + 0x0f7f, 0x0c7f, 0x0d7f, 0xa005, 0x007c, 0x0d7e, 0x0c7e, 0x0f7e, + 0x2079, 0x5100, 0xaf80, 0x0016, 0x2060, 0x6000, 0xa06d, 0x0040, + 0x1c24, 0x6814, 0xa306, 0x0040, 0x1c10, 0x2d60, 0x0078, 0x1c05, + 0x6800, 0xa005, 0x6002, 0x00c0, 0x1c1c, 0xaf80, 0x0016, 0xac06, + 0x0040, 0x1c1b, 0x2c00, 0x785e, 0x0d7e, 0x689c, 0xa005, 0x0040, + 0x1c23, 0x1078, 0x19b3, 0x007f, 0x0f7f, 0x0c7f, 0x0d7f, 0xa005, + 0x007c, 0x2091, 0x8000, 0x2069, 0x5140, 0x6800, 0xa086, 0x0000, + 0x0040, 0x1c37, 0x2091, 0x8001, 0x78e3, 0x0009, 0x007c, 0x6880, + 0xa0bc, 0xff00, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, + 0x1078, 0x1980, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1c40, 0x2091, + 0x8001, 0x2001, 0x800a, 0x0078, 0x1c57, 0x2001, 0x800c, 0x0078, + 0x1c57, 0x1078, 0x1a2b, 0x2001, 0x800d, 0x0078, 0x1c57, 0x70c2, + 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x4080, 0x007c, 0x6004, + 0x2c08, 0x2063, 0x0000, 0x7884, 0x8000, 0x7886, 0x7888, 0xa005, + 0x798a, 0x0040, 0x1c6e, 0x2c02, 0x0078, 0x1c6f, 0x798e, 0x007c, + 0x6807, 0x0103, 0x0c7e, 0x2061, 0x5100, 0x2d08, 0x206b, 0x0000, + 0x6084, 0x8000, 0x6086, 0x6088, 0xa005, 0x618a, 0x0040, 0x1c83, + 0x2d02, 0x0078, 0x1c84, 0x618e, 0x0c7f, 0x007c, 0x1078, 0x1c97, + 0x0040, 0x1c96, 0x0c7e, 0x609c, 0xa065, 0x0040, 0x1c91, 0x1078, + 0x19b3, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1948, 0x007c, 0x788c, + 0xa065, 0x0040, 0x1ca9, 0x2091, 0x8000, 0x7884, 0x8001, 0x7886, + 0x2c04, 0x788e, 0xa005, 0x00c0, 0x1ca7, 0x788a, 0x8000, 0x2091, + 0x8001, 0x007c, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e, + 0x00c8, 0x1cb3, 0xa200, 0x0070, 0x1cb7, 0x0078, 0x1cae, 0x8086, + 0x818e, 0x007c, 0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x1cdd, + 0xa11a, 0x00c8, 0x1cdd, 0x8213, 0x818d, 0x0048, 0x1cce, 0xa11a, + 0x00c8, 0x1ccf, 0x0070, 0x1cd5, 0x0078, 0x1cc3, 0xa11a, 0x2308, + 0x8210, 0x0070, 0x1cd5, 0x0078, 0x1cc3, 0x007e, 0x3200, 0xa084, + 0xf7ff, 0x2080, 0x007f, 0x157f, 0x007c, 0x007e, 0x3200, 0xa085, + 0x0800, 0x0078, 0x1cd9, 0x7994, 0x70d0, 0xa106, 0x0040, 0x1d51, + 0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x1d51, + 0x7008, 0x7208, 0xa206, 0x00c0, 0x1d51, 0xa286, 0x0008, 0x00c0, + 0x1d51, 0x2071, 0x0010, 0x1078, 0x192e, 0x0040, 0x1d51, 0x7a9c, + 0x7b98, 0x7ca4, 0x7da0, 0xa184, 0xff00, 0x0040, 0x1d1f, 0x2031, + 0x0000, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b, + 0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x2100, 0xa210, 0x2600, + 0xa319, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x0078, 0x1d29, 0x8107, + 0x8004, 0x8004, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, + 0x0000, 0x2009, 0x0020, 0x1078, 0x1929, 0x2091, 0x8001, 0x0040, + 0x1d48, 0x1078, 0x1948, 0x78a8, 0x8000, 0x78aa, 0xa086, 0x0002, + 0x00c0, 0x1d51, 0x2091, 0x8000, 0x78e3, 0x0002, 0x78ab, 0x0000, + 0x78cc, 0xa085, 0x0003, 0x78ce, 0x2091, 0x8001, 0x0078, 0x1d51, + 0x78ab, 0x0000, 0x1078, 0x20ac, 0x6004, 0xa084, 0x000f, 0x0079, + 0x1d56, 0x2071, 0x0010, 0x2091, 0x8001, 0x007c, 0x1d66, 0x1d88, + 0x1dae, 0x1d66, 0x1dcb, 0x1d75, 0x1f2c, 0x1f47, 0x1d66, 0x1d82, + 0x1da8, 0x1e13, 0x1e82, 0x1ed2, 0x1ee4, 0x1f43, 0x2039, 0x0400, + 0x78dc, 0xa705, 0x78de, 0x6008, 0xa705, 0x600a, 0x1078, 0x1fc7, + 0x609c, 0x78da, 0x1078, 0x2094, 0x007c, 0x78dc, 0xa084, 0x0100, + 0x0040, 0x1d7c, 0x0078, 0x1d66, 0x601c, 0xa085, 0x0080, 0x601e, + 0x0078, 0x1d8f, 0x1078, 0x1b53, 0x00c0, 0x1d66, 0x1078, 0x20c6, + 0x78dc, 0xa084, 0x0100, 0x0040, 0x1d8f, 0x0078, 0x1d66, 0x78df, + 0x0000, 0x6004, 0x8007, 0xa084, 0x00ff, 0x78d2, 0x8001, 0x609f, + 0x0000, 0x0040, 0x1da5, 0x1078, 0x1fc7, 0x0040, 0x1da5, 0x78dc, + 0xa085, 0x0100, 0x78de, 0x0078, 0x1da7, 0x1078, 0x1feb, 0x007c, + 0x1078, 0x1b53, 0x00c0, 0x1d66, 0x1078, 0x20c2, 0x78dc, 0xa08c, + 0x0e00, 0x00c0, 0x1db7, 0xa084, 0x0100, 0x00c0, 0x1db9, 0x0078, + 0x1d66, 0x1078, 0x1fc7, 0x00c0, 0x1dca, 0x6104, 0xa18c, 0x00ff, + 0xa186, 0x0007, 0x0040, 0x1f84, 0xa186, 0x000f, 0x0040, 0x1f84, + 0x1078, 0x1feb, 0x007c, 0x78dc, 0xa084, 0x0100, 0x0040, 0x1dd2, + 0x0078, 0x1d66, 0x78df, 0x0000, 0x6714, 0x2011, 0x0001, 0x20a9, + 0x0001, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0040, 0x1df5, 0x2011, + 0x0001, 0xa7bc, 0xff00, 0x20a9, 0x0020, 0xa08e, 0x0001, 0x0040, + 0x1df5, 0x2039, 0x0000, 0x2011, 0x0002, 0x20a9, 0x0100, 0xa08e, + 0x0002, 0x0040, 0x1df5, 0x0078, 0x1e10, 0x1078, 0x1973, 0x2091, + 0x8000, 0x682b, 0x0000, 0x682f, 0x0000, 0x6808, 0xa084, 0xffde, + 0x680a, 0xade8, 0x0010, 0x2091, 0x8001, 0x0070, 0x1e09, 0x0078, + 0x1df7, 0x8211, 0x0040, 0x1e10, 0x20a9, 0x0100, 0x0078, 0x1df7, + 0x1078, 0x1948, 0x007c, 0x2001, 0x5167, 0x2004, 0xa084, 0x8000, + 0x0040, 0x1fac, 0x6114, 0x1078, 0x20e3, 0x6900, 0xa184, 0x0001, + 0x0040, 0x1e34, 0x6028, 0xa084, 0x00ff, 0x00c0, 0x1fa4, 0x6800, + 0xa084, 0x0001, 0x0040, 0x1fac, 0x6803, 0x0000, 0x680b, 0x0000, + 0x6807, 0x0000, 0x0078, 0x1fb4, 0x2011, 0x0001, 0x6020, 0xd0f4, + 0x0040, 0x1e3c, 0xa295, 0x0002, 0xd0c4, 0x0040, 0x1e41, 0xa295, + 0x0008, 0xd0cc, 0x0040, 0x1e46, 0xa295, 0x0400, 0x601c, 0xa084, + 0x0002, 0x0040, 0x1e4d, 0xa295, 0x0004, 0x602c, 0xa08c, 0x00ff, + 0xa182, 0x0002, 0x0048, 0x1fb0, 0xa182, 0x001b, 0x00c8, 0x1fb0, + 0x0040, 0x1fb0, 0x690e, 0x602c, 0x8007, 0xa08c, 0x00ff, 0xa182, + 0x0002, 0x0048, 0x1fb0, 0xa182, 0x001b, 0x00c8, 0x1fb0, 0x0040, + 0x1fb0, 0x6912, 0x6030, 0xa005, 0x00c0, 0x1e70, 0x2001, 0x001e, + 0x8000, 0x6816, 0x6028, 0xa084, 0x00ff, 0x0040, 0x1fac, 0x6806, + 0x6028, 0x8007, 0xa084, 0x00ff, 0x0040, 0x1fac, 0x680a, 0x6a02, + 0x0078, 0x1fb4, 0x2001, 0x5167, 0x2004, 0xa084, 0x8000, 0x0040, + 0x1fac, 0x6114, 0x1078, 0x20e3, 0x2091, 0x8000, 0x6a04, 0x6b08, + 0x6418, 0xa484, 0x0003, 0x0040, 0x1ea8, 0x6128, 0xa18c, 0x00ff, + 0x8001, 0x00c0, 0x1ea1, 0x2100, 0xa210, 0x0048, 0x1ece, 0x0078, + 0x1ea8, 0x8001, 0x00c0, 0x1ece, 0x2100, 0xa212, 0x0048, 0x1ece, + 0xa484, 0x000c, 0x0040, 0x1ec2, 0x6128, 0x810f, 0xa18c, 0x00ff, + 0xa082, 0x0004, 0x00c0, 0x1eba, 0x2100, 0xa318, 0x0048, 0x1ece, + 0x0078, 0x1ec2, 0xa082, 0x0004, 0x00c0, 0x1ece, 0x2100, 0xa31a, + 0x0048, 0x1ece, 0x6030, 0xa005, 0x0040, 0x1ec8, 0x8000, 0x6816, + 0x6a06, 0x6b0a, 0x2091, 0x8001, 0x0078, 0x1fb4, 0x2091, 0x8001, + 0x0078, 0x1fb0, 0x6114, 0x1078, 0x20e3, 0x2091, 0x8000, 0x6b08, + 0x8318, 0x0048, 0x1ee0, 0x6b0a, 0x2091, 0x8001, 0x0078, 0x1fc3, + 0x2091, 0x8001, 0x0078, 0x1fb0, 0x6024, 0x8007, 0xa084, 0x00ff, + 0x0040, 0x1f02, 0xa086, 0x0080, 0x00c0, 0x1f2a, 0x20a9, 0x0008, + 0x2069, 0x7510, 0x2091, 0x8000, 0x6800, 0xa084, 0xfcff, 0x6802, + 0xade8, 0x0008, 0x0070, 0x1efe, 0x0078, 0x1ef4, 0x2091, 0x8001, + 0x0078, 0x1fb4, 0x6028, 0xa015, 0x0040, 0x1f2a, 0x6114, 0x1078, + 0x20e3, 0x0d7e, 0xade8, 0x0007, 0x2091, 0x8000, 0x6800, 0xa00d, + 0x0040, 0x1f27, 0xa206, 0x0040, 0x1f18, 0x2168, 0x0078, 0x1f0e, + 0x0c7e, 0x2160, 0x6000, 0x6802, 0x1078, 0x1948, 0x0c7f, 0x0d7f, + 0x6808, 0x8000, 0x680a, 0x2091, 0x8001, 0x0078, 0x1fc3, 0x2091, + 0x8001, 0x0d7f, 0x0078, 0x1fac, 0x6114, 0x1078, 0x20e3, 0x6800, + 0xa084, 0x0001, 0x0040, 0x1f9c, 0x2091, 0x8000, 0x6a04, 0x8210, + 0x0048, 0x1f3f, 0x6a06, 0x2091, 0x8001, 0x0078, 0x1fc3, 0x2091, + 0x8001, 0x0078, 0x1fb0, 0x1078, 0x1b53, 0x00c0, 0x1d66, 0x6114, + 0x1078, 0x20e3, 0x60be, 0x60bb, 0x0000, 0x6900, 0xa184, 0x0008, + 0x0040, 0x1f56, 0x6020, 0xa085, 0x0100, 0x6022, 0xa184, 0x0001, + 0x0040, 0x1fac, 0xa184, 0x0100, 0x00c0, 0x1f98, 0xa184, 0x0200, + 0x00c0, 0x1f94, 0x681c, 0xa005, 0x00c0, 0x1fa0, 0x6004, 0xa084, + 0x00ff, 0xa086, 0x000f, 0x00c0, 0x1f6f, 0x1078, 0x20c6, 0x78df, + 0x0000, 0x6004, 0x8007, 0xa084, 0x00ff, 0x78d2, 0x8001, 0x609f, + 0x0000, 0x0040, 0x1f84, 0x1078, 0x1fc7, 0x0040, 0x1f84, 0x78dc, + 0xa085, 0x0100, 0x78de, 0x007c, 0x78d7, 0x0000, 0x78db, 0x0000, + 0x6024, 0xa084, 0xff00, 0x6026, 0x1078, 0x39de, 0x0040, 0x1ce3, + 0x1078, 0x1b78, 0x0078, 0x1ce3, 0x2009, 0x0017, 0x0078, 0x1fb6, + 0x2009, 0x000e, 0x0078, 0x1fb6, 0x2009, 0x0007, 0x0078, 0x1fb6, + 0x2009, 0x0035, 0x0078, 0x1fb6, 0x2009, 0x003e, 0x0078, 0x1fb6, + 0x2009, 0x0004, 0x0078, 0x1fb6, 0x2009, 0x0006, 0x0078, 0x1fb6, + 0x2009, 0x0016, 0x0078, 0x1fb6, 0x2009, 0x0001, 0x6024, 0xa084, + 0xff00, 0xa105, 0x6026, 0x2091, 0x8000, 0x1078, 0x1c5f, 0x2091, + 0x8001, 0x0078, 0x1ce3, 0x1078, 0x1948, 0x0078, 0x1ce3, 0x78d4, + 0xa06d, 0x00c0, 0x1fd2, 0x2c00, 0x78d6, 0x78da, 0x609f, 0x0000, + 0x0078, 0x1fde, 0x2c00, 0x689e, 0x609f, 0x0000, 0x78d6, 0x2d00, + 0x6002, 0x78d8, 0xad06, 0x00c0, 0x1fde, 0x6002, 0x78d0, 0x8001, + 0x78d2, 0x00c0, 0x1fea, 0x78dc, 0xa084, 0xfeff, 0x78de, 0x78d8, + 0x2060, 0xa006, 0x007c, 0xa02e, 0x2530, 0x611c, 0x61a2, 0xa184, + 0xe1ff, 0x601e, 0xa184, 0x0060, 0x0040, 0x1ffa, 0x0e7e, 0x1078, + 0x47c2, 0x0e7f, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, + 0x60b3, 0x0000, 0x6714, 0x1078, 0x1973, 0x2091, 0x8000, 0x60a0, + 0xa084, 0x8000, 0x00c0, 0x2021, 0x6808, 0xa084, 0x0001, 0x0040, + 0x2021, 0x2091, 0x8001, 0x1078, 0x19c0, 0x2091, 0x8000, 0x1078, + 0x1c5f, 0x2091, 0x8001, 0x78d7, 0x0000, 0x78db, 0x0000, 0x0078, + 0x2093, 0x6024, 0xa096, 0x0001, 0x00c0, 0x2028, 0x8000, 0x6026, + 0x6a10, 0x6814, 0x2091, 0x8001, 0xa202, 0x0048, 0x2037, 0x0040, + 0x2037, 0x2039, 0x0200, 0x1078, 0x2094, 0x0078, 0x2093, 0x2c08, + 0x2091, 0x8000, 0x60a0, 0xa084, 0x8000, 0x0040, 0x2064, 0x6800, + 0xa065, 0x0040, 0x2069, 0x6a04, 0x0e7e, 0x2071, 0x5140, 0x7000, + 0xa084, 0x0001, 0x0040, 0x205e, 0x7048, 0xa206, 0x00c0, 0x205e, + 0x6b04, 0x231c, 0x2160, 0x6302, 0x2300, 0xa005, 0x00c0, 0x2059, + 0x6902, 0x2260, 0x6102, 0x0e7f, 0x0078, 0x2070, 0x2160, 0x6202, + 0x6906, 0x0e7f, 0x0078, 0x2070, 0x6800, 0xa065, 0x0040, 0x2069, + 0x6102, 0x6902, 0x00c0, 0x206d, 0x6906, 0x2160, 0x6003, 0x0000, + 0x2160, 0x60a0, 0xa084, 0x8000, 0x0040, 0x207a, 0x6808, 0xa084, + 0xfffc, 0x680a, 0x6810, 0x8000, 0x6812, 0x2091, 0x8001, 0x6808, + 0xa08c, 0x0040, 0x0040, 0x2089, 0xa086, 0x0040, 0x680a, 0x1078, + 0x19d1, 0x2091, 0x8000, 0x1078, 0x21d2, 0x2091, 0x8001, 0x78db, + 0x0000, 0x78d7, 0x0000, 0x007c, 0x6008, 0xa705, 0x600a, 0x2091, + 0x8000, 0x1078, 0x1c5f, 0x2091, 0x8001, 0x78d8, 0xa065, 0x0040, + 0x20a7, 0x609c, 0x78da, 0x609f, 0x0000, 0x0078, 0x2097, 0x78d7, + 0x0000, 0x78db, 0x0000, 0x007c, 0x7990, 0x7894, 0x8000, 0xa10a, + 0x00c8, 0x20b3, 0xa006, 0x7896, 0x70d2, 0x7804, 0xa005, 0x0040, + 0x20c1, 0x8001, 0x7806, 0x00c0, 0x20c1, 0x0068, 0x20c1, 0x2091, + 0x4080, 0x007c, 0x2039, 0x20da, 0x0078, 0x20c8, 0x2039, 0x20e0, + 0x2704, 0xa005, 0x0040, 0x20d9, 0xac00, 0x2068, 0x6b08, 0x6c0c, + 0x6910, 0x6a14, 0x690a, 0x6a0e, 0x6b12, 0x6c16, 0x8738, 0x0078, + 0x20c8, 0x007c, 0x0003, 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, + 0x0015, 0x001b, 0x0000, 0x0c7e, 0x1078, 0x3b69, 0x2c68, 0x0c7f, + 0x007c, 0x0010, 0x215a, 0x0068, 0x215a, 0x2029, 0x0000, 0x78cb, + 0x0000, 0x788c, 0xa065, 0x0040, 0x2153, 0x2009, 0x5174, 0x2104, + 0xa084, 0x0001, 0x0040, 0x2121, 0x6004, 0xa086, 0x0103, 0x00c0, + 0x2121, 0x6018, 0xa005, 0x00c0, 0x2121, 0x6014, 0xa005, 0x00c0, + 0x2121, 0x0d7e, 0x2069, 0x0000, 0x6818, 0xa084, 0x0001, 0x00c0, + 0x2120, 0x600c, 0x70c6, 0x6010, 0x70ca, 0x70c3, 0x8020, 0x681b, + 0x0001, 0x2091, 0x4080, 0x0d7f, 0x1078, 0x1c86, 0x0078, 0x2158, + 0x0d7f, 0x1078, 0x215b, 0x0040, 0x2153, 0x6204, 0xa294, 0x00ff, + 0xa296, 0x0003, 0x0040, 0x2133, 0x6204, 0xa296, 0x0110, 0x00c0, + 0x2141, 0x78cb, 0x0001, 0x6204, 0xa294, 0xff00, 0x8217, 0x8211, + 0x0040, 0x2141, 0x85ff, 0x00c0, 0x2153, 0x8210, 0xa202, 0x00c8, + 0x2153, 0x057e, 0x1078, 0x216a, 0x057f, 0x0040, 0x214e, 0x78e0, + 0xa086, 0x0003, 0x0040, 0x2153, 0x0078, 0x2141, 0x8528, 0x78c8, + 0xa005, 0x0040, 0x20f1, 0x85ff, 0x0040, 0x215a, 0x2091, 0x4080, + 0x78b0, 0x70d6, 0x007c, 0x7bac, 0x79b0, 0x70d4, 0xa102, 0x00c0, + 0x2164, 0x2300, 0xa005, 0x007c, 0x0048, 0x2168, 0xa302, 0x007c, + 0x8002, 0x007c, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8, + 0x2184, 0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, + 0x21b9, 0x7008, 0x7208, 0xa206, 0x00c0, 0x21b9, 0xa286, 0x0008, + 0x00c0, 0x21b9, 0x2071, 0x0010, 0x1078, 0x21be, 0x2009, 0x0020, + 0x6004, 0xa086, 0x0103, 0x00c0, 0x2193, 0x6028, 0xa005, 0x00c0, + 0x2193, 0x2009, 0x000c, 0x1078, 0x1924, 0x0040, 0x21ac, 0x78c4, + 0x8000, 0x78c6, 0xa086, 0x0002, 0x00c0, 0x21b9, 0x2091, 0x8000, + 0x78e3, 0x0003, 0x78c7, 0x0000, 0x78cc, 0xa085, 0x0300, 0x78ce, + 0x2091, 0x8001, 0x0078, 0x21b9, 0x78c7, 0x0000, 0x1078, 0x1c86, + 0x79ac, 0x78b0, 0x8000, 0xa10a, 0x00c8, 0x21b7, 0xa006, 0x78b2, + 0xa006, 0x2071, 0x0010, 0x2091, 0x8001, 0x007c, 0x8107, 0x8004, + 0x8004, 0x7ab8, 0x7bb4, 0x7cc0, 0x7dbc, 0xa210, 0xa399, 0x0000, + 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c, 0x2009, 0x515b, 0x2091, + 0x8000, 0x200a, 0x0f7e, 0x0e7e, 0x2071, 0x5140, 0x7000, 0xa086, + 0x0000, 0x00c0, 0x21ec, 0x2009, 0x5112, 0x2104, 0xa005, 0x00c0, + 0x21ec, 0x2079, 0x0100, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x21ec, + 0x0018, 0x21ec, 0x781b, 0x004b, 0x0e7f, 0x0f7f, 0x007c, 0x0f7e, + 0x0e7e, 0x2071, 0x5140, 0x2091, 0x8000, 0x7000, 0xa086, 0x0000, + 0x00c0, 0x2205, 0x2079, 0x0100, 0x7830, 0xa084, 0x00c0, 0x00c0, + 0x2205, 0x0018, 0x2205, 0x781b, 0x004d, 0x2091, 0x8001, 0x0e7f, + 0x0f7f, 0x007c, 0x127e, 0x2091, 0x2300, 0x2071, 0x5140, 0x2079, + 0x0100, 0x784b, 0x000f, 0x0098, 0x2218, 0x7838, 0x0078, 0x2211, + 0x20a9, 0x0040, 0x7800, 0xa082, 0x0004, 0x0048, 0x2221, 0x20a9, + 0x0060, 0x789b, 0x0000, 0x78af, 0x0000, 0x78af, 0x0000, 0x0070, + 0x222b, 0x0078, 0x2223, 0x7800, 0xa082, 0x0004, 0x0048, 0x223a, + 0x70b7, 0x0096, 0x2019, 0x4ee7, 0x1078, 0x2276, 0x702f, 0x8001, + 0x0078, 0x2246, 0x70b7, 0x0000, 0x2019, 0x4d5f, 0x1078, 0x2276, + 0x2019, 0x4d9e, 0x1078, 0x2276, 0x702f, 0x8000, 0x7003, 0x0000, + 0x1078, 0x237f, 0x7004, 0xa084, 0x000f, 0x017e, 0x2009, 0x04fd, + 0x210c, 0xa18a, 0x0005, 0x0048, 0x225b, 0x0038, 0x2261, 0xa085, + 0x6280, 0x0078, 0x2263, 0x0028, 0x2261, 0xa085, 0x6280, 0x0078, + 0x2263, 0xa085, 0x62c0, 0x017f, 0x7806, 0x780f, 0xb204, 0x7843, + 0x00d8, 0x7853, 0x0080, 0x780b, 0x0008, 0x7047, 0x0008, 0x7053, + 0x517f, 0x704f, 0x0000, 0x127f, 0x2000, 0x007c, 0x137e, 0x147e, + 0x157e, 0x047e, 0x20a1, 0x012b, 0x2304, 0xa005, 0x789a, 0x0040, + 0x2296, 0x8318, 0x2324, 0x8318, 0x2398, 0x24a8, 0xa484, 0xff00, + 0x0040, 0x228e, 0xa482, 0x0100, 0x20a9, 0x0100, 0x2020, 0x53a6, + 0xa005, 0x00c0, 0x2285, 0x3318, 0x0078, 0x227c, 0x047f, 0x157f, + 0x147f, 0x137f, 0x007c, 0xa18c, 0x000f, 0x2011, 0x0101, 0x2204, + 0xa084, 0xfff0, 0xa105, 0x2012, 0x1078, 0x237f, 0x007c, 0x2011, + 0x0101, 0x20a9, 0x0009, 0x810b, 0x0070, 0x22b0, 0x0078, 0x22ab, + 0xa18c, 0x0e00, 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012, 0x007c, + 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, 0x0070, 0x22c1, 0x0078, + 0x22bc, 0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a, + 0x007c, 0x2011, 0x0101, 0x20a9, 0x000c, 0x810b, 0x0070, 0x22d2, + 0x0078, 0x22cd, 0xa18c, 0xf000, 0x2204, 0xa084, 0x0fff, 0xa105, + 0x2012, 0x007c, 0x2011, 0x0102, 0x2204, 0xa084, 0xffcf, 0xa105, + 0x2012, 0x007c, 0x8103, 0x8003, 0xa080, 0x0020, 0x0c7e, 0x2061, + 0x0100, 0x609a, 0x62ac, 0x63ac, 0x0c7f, 0x007c, 0x8103, 0x8003, + 0xa080, 0x0022, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, 0xa084, + 0xffdf, 0x60ae, 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0022, + 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, 0xa085, 0x0020, 0x60ae, + 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0020, 0x0c7e, 0x2061, + 0x0100, 0x609a, 0x60a4, 0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018, + 0x0c7f, 0x007c, 0x2091, 0x8000, 0x0c7e, 0x0e7e, 0x6818, 0xa005, + 0x0040, 0x235d, 0x2061, 0x7500, 0x1078, 0x2365, 0x0040, 0x2349, + 0x20a9, 0x0000, 0x2061, 0x7400, 0x0c7e, 0x1078, 0x2365, 0x0040, + 0x2339, 0x0c7f, 0x8c60, 0x0070, 0x2337, 0x0078, 0x232c, 0x0078, + 0x235d, 0x007f, 0xa082, 0x7400, 0x2071, 0x5140, 0x7086, 0x7182, + 0x2001, 0x0004, 0x706e, 0x7093, 0x000f, 0x1078, 0x21cd, 0x0078, + 0x2359, 0x60c0, 0xa005, 0x00c0, 0x235d, 0x2071, 0x5140, 0x7182, + 0x2c00, 0x708a, 0x2001, 0x0006, 0x706e, 0x7093, 0x000f, 0x1078, + 0x21cd, 0x2001, 0x0000, 0x0078, 0x235f, 0x2001, 0x0001, 0x2091, + 0x8001, 0xa005, 0x0e7f, 0x0c7f, 0x007c, 0x2c04, 0xa005, 0x0040, + 0x237c, 0x2060, 0x600c, 0xa306, 0x00c0, 0x2379, 0x6010, 0xa206, + 0x00c0, 0x2379, 0x6014, 0xa106, 0x00c0, 0x2379, 0xa006, 0x0078, + 0x237e, 0x6000, 0x0078, 0x2366, 0xa085, 0x0001, 0x007c, 0x2011, + 0x5141, 0x220c, 0xa18c, 0x000f, 0x2011, 0x013b, 0x2204, 0xa084, + 0x0100, 0x0040, 0x2395, 0x2021, 0xff04, 0x2122, 0x810b, 0x810b, + 0x810b, 0x810b, 0xa18d, 0x0f00, 0x2104, 0x007c, 0x0e7e, 0x68e4, + 0xa08c, 0x0020, 0x0040, 0x23e9, 0xa084, 0x0006, 0x00c0, 0x23e9, + 0x6014, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0f0, + 0x5380, 0x7004, 0xa084, 0x000a, 0x00c0, 0x23e9, 0x7108, 0xa194, + 0xff00, 0x0040, 0x23e9, 0xa18c, 0x00ff, 0x2001, 0x000c, 0xa106, + 0x0040, 0x23d0, 0x2001, 0x0012, 0xa106, 0x0040, 0x23d4, 0x2001, + 0x0014, 0xa106, 0x0040, 0x23d8, 0x2001, 0x0019, 0xa106, 0x0040, + 0x23dc, 0x2001, 0x0032, 0xa106, 0x0040, 0x23e0, 0x0078, 0x23e4, + 0x2009, 0x0012, 0x0078, 0x23e6, 0x2009, 0x0014, 0x0078, 0x23e6, + 0x2009, 0x0019, 0x0078, 0x23e6, 0x2009, 0x0020, 0x0078, 0x23e6, + 0x2009, 0x003f, 0x0078, 0x23e6, 0x2011, 0x0000, 0x2100, 0xa205, + 0x700a, 0x0e7f, 0x007c, 0x0068, 0x23eb, 0x2091, 0x8000, 0x2071, + 0x0000, 0x007e, 0x7018, 0xa084, 0x0001, 0x00c0, 0x23f2, 0x007f, + 0x2071, 0x0010, 0x70ca, 0x007f, 0x70c6, 0x70c3, 0x8002, 0x70db, + 0x0741, 0x70df, 0x0000, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, + 0x4080, 0x0078, 0x2409, 0x107e, 0x007e, 0x127e, 0x2091, 0x2300, + 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x77c2, 0x74c6, 0x76ca, 0x75ce, + 0xa594, 0x003f, 0xa49c, 0x0003, 0xa484, 0x000f, 0x0079, 0x2420, + 0x2432, 0x2432, 0x2432, 0x276c, 0x393b, 0x2430, 0x2461, 0x246b, + 0x2430, 0x2430, 0x2430, 0x2430, 0x2430, 0x2430, 0x2430, 0x2430, + 0x1078, 0x23eb, 0x8507, 0xa084, 0x001f, 0x0079, 0x2437, 0x2475, + 0x276c, 0x2926, 0x2a23, 0x2a4b, 0x2ced, 0x2f98, 0x2fdb, 0x3026, + 0x30ab, 0x3163, 0x320c, 0x2461, 0x2848, 0x2f6d, 0x2457, 0x3cc8, + 0x3ce8, 0x3eae, 0x3eba, 0x3f8f, 0x2457, 0x2457, 0x4062, 0x4066, + 0x3cc6, 0x2457, 0x3e19, 0x2457, 0x3b8c, 0x246b, 0x2457, 0x1078, + 0x23eb, 0x0018, 0x2410, 0x127f, 0x2091, 0x8001, 0x007f, 0x107f, + 0x007c, 0x2019, 0x4e3b, 0x1078, 0x2276, 0x702f, 0x0001, 0x781b, + 0x004f, 0x0078, 0x2459, 0x2019, 0x4d9e, 0x1078, 0x2276, 0x702f, + 0x8000, 0x781b, 0x00d0, 0x0078, 0x2459, 0x7242, 0x2009, 0x510f, + 0x200b, 0x0000, 0xa584, 0x0001, 0x00c0, 0x3ba0, 0x0040, 0x2492, + 0x1078, 0x23eb, 0x7003, 0x0000, 0x704b, 0x0000, 0x7043, 0x0000, + 0x7037, 0x0000, 0x1078, 0x3912, 0x0018, 0x2410, 0x2009, 0x510f, + 0x200b, 0x0000, 0x7068, 0xa005, 0x00c0, 0x255d, 0x706c, 0xa084, + 0x0007, 0x0079, 0x249b, 0x2594, 0x24a3, 0x24af, 0x24cc, 0x24ee, + 0x253b, 0x2514, 0x24a3, 0x1078, 0x38fa, 0x2009, 0x0048, 0x1078, + 0x2e39, 0x00c0, 0x24ad, 0x7003, 0x0004, 0x0078, 0x2459, 0x1078, + 0x38fa, 0x00c0, 0x24ca, 0x7080, 0x8007, 0x7882, 0x789b, 0x0010, + 0x78ab, 0x000c, 0x789b, 0x0060, 0x78ab, 0x0001, 0x785b, 0x0004, + 0x2009, 0x00e0, 0x1078, 0x2e2d, 0x00c0, 0x24ca, 0x7003, 0x0004, + 0x7093, 0x000f, 0x0078, 0x2459, 0x1078, 0x38fa, 0x00c0, 0x24ec, + 0x7180, 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, 0x001f, 0xa18d, + 0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b, 0x0060, 0x78ab, 0x0002, + 0x785b, 0x0004, 0x2009, 0x00e0, 0x1078, 0x2e2d, 0x00c0, 0x24ec, + 0x7003, 0x0004, 0x7093, 0x000f, 0x0078, 0x2459, 0x1078, 0x38fa, + 0x00c0, 0x2512, 0x7180, 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, + 0x001f, 0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0020, 0x7184, 0x79aa, + 0x78ab, 0x000d, 0x789b, 0x0060, 0x78ab, 0x0004, 0x785b, 0x0004, + 0x2009, 0x00e0, 0x1078, 0x2e2d, 0x00c0, 0x2512, 0x7003, 0x0004, + 0x7093, 0x000f, 0x0078, 0x2459, 0x1078, 0x38fa, 0x00c0, 0x2539, + 0x7180, 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, 0x001f, 0xa18d, + 0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b, 0x0060, 0x78ab, 0x0002, + 0x785b, 0x0004, 0x2009, 0x00e0, 0x1078, 0x2e2d, 0x00c0, 0x2539, + 0x7088, 0x708b, 0x0000, 0x2068, 0x704a, 0x7003, 0x0002, 0x7093, + 0x000f, 0x0078, 0x2459, 0x1078, 0x38fa, 0x00c0, 0x2459, 0x7088, + 0x2068, 0x6f14, 0x1078, 0x37ef, 0x2c50, 0x1078, 0x39ac, 0x789b, + 0x0010, 0x6814, 0xa084, 0x001f, 0xa085, 0x0080, 0x78aa, 0x6e1c, + 0x2041, 0x0001, 0x708c, 0xa084, 0x0400, 0x2001, 0x0004, 0x0040, + 0x255b, 0x2001, 0x0006, 0x0078, 0x267c, 0x1078, 0x38fa, 0x00c0, + 0x2459, 0x789b, 0x0010, 0x7068, 0x2068, 0x6f14, 0x1078, 0x37ef, + 0x2c50, 0x1078, 0x39ac, 0x6008, 0xa085, 0x0010, 0x600a, 0x6824, + 0xa005, 0x0040, 0x257b, 0xa082, 0x0006, 0x0048, 0x2579, 0x0078, + 0x257b, 0x6827, 0x0005, 0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0, + 0x7058, 0xa084, 0x8000, 0x0040, 0x2589, 0xa684, 0x0001, 0x0040, + 0x258b, 0xa39c, 0xffbf, 0x7baa, 0x2031, 0x0020, 0x2041, 0x0001, + 0x2001, 0x0003, 0x0078, 0x267c, 0x0018, 0x2410, 0x744c, 0xa485, + 0x0000, 0x0040, 0x25ae, 0xa080, 0x5180, 0x2030, 0x7150, 0x8108, + 0xa12a, 0x0048, 0x25a5, 0x2009, 0x5180, 0x2164, 0x6504, 0x85ff, + 0x00c0, 0x25bf, 0x8421, 0x00c0, 0x259f, 0x7152, 0x7003, 0x0000, + 0x704b, 0x0000, 0x7040, 0xa005, 0x0040, 0x3ba0, 0x0078, 0x2459, + 0x764c, 0xa6b0, 0x5180, 0x7150, 0x2600, 0x0078, 0x25aa, 0x7152, + 0x2568, 0x2558, 0x754a, 0x2c50, 0x6034, 0xa085, 0x0000, 0x00c0, + 0x25bc, 0x6708, 0x773a, 0xa784, 0x033f, 0x0040, 0x25f5, 0xa784, + 0x0021, 0x00c0, 0x25bc, 0xa784, 0x0002, 0x0040, 0x25de, 0xa784, + 0x0004, 0x0040, 0x25bc, 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0008, + 0x00c0, 0x25bc, 0xa784, 0x0010, 0x00c0, 0x25bc, 0xa784, 0x0200, + 0x00c0, 0x25bc, 0xa784, 0x0100, 0x0040, 0x25f5, 0x6018, 0xa005, + 0x00c0, 0x25bc, 0xa7bc, 0xfeff, 0x670a, 0x6823, 0x0000, 0x6e1c, + 0xa684, 0x000e, 0x6118, 0x0040, 0x2605, 0x601c, 0xa102, 0x0048, + 0x2608, 0x0040, 0x2608, 0x0078, 0x25b8, 0x81ff, 0x00c0, 0x25b8, + 0x68c3, 0x0000, 0xa784, 0x0080, 0x00c0, 0x2610, 0x700c, 0x6022, + 0xa7bc, 0xff7f, 0x670a, 0x1078, 0x39ac, 0x0018, 0x2410, 0x789b, + 0x0010, 0xa046, 0x1078, 0x38fa, 0x00c0, 0x2459, 0x6b14, 0xa39c, + 0x001f, 0xa39d, 0x00c0, 0x7058, 0xa084, 0x8000, 0x0040, 0x262c, + 0xa684, 0x0001, 0x0040, 0x262e, 0xa39c, 0xffbf, 0xa684, 0x0010, + 0x0040, 0x2634, 0xa39d, 0x0020, 0x7baa, 0x8840, 0xa684, 0x000e, + 0x00c0, 0x263f, 0xa7bd, 0x0010, 0x670a, 0x0078, 0x267a, 0x7158, + 0xa18c, 0x0800, 0x0040, 0x3401, 0x2011, 0x0020, 0xa684, 0x0008, + 0x00c0, 0x2650, 0x8210, 0xa684, 0x0002, 0x00c0, 0x2650, 0x8210, + 0x7aaa, 0x8840, 0x1078, 0x3912, 0x6a14, 0x610c, 0x8108, 0xa18c, + 0x00ff, 0xa1e0, 0x7400, 0x2c64, 0x8cff, 0x0040, 0x2671, 0x6014, + 0xa206, 0x00c0, 0x265b, 0x60b8, 0x8001, 0x60ba, 0x00c0, 0x2656, + 0x0c7e, 0x2a60, 0x6008, 0xa085, 0x0100, 0x600a, 0x0c7f, 0x0078, + 0x2594, 0x1078, 0x38fa, 0x00c0, 0x2459, 0x2a60, 0x610e, 0x79aa, + 0x8840, 0x7132, 0x2001, 0x0001, 0x007e, 0x715c, 0xa184, 0x0018, + 0x0040, 0x2697, 0xa184, 0x0010, 0x0040, 0x268a, 0x1078, 0x3604, + 0x00c0, 0x26ba, 0xa184, 0x0008, 0x0040, 0x2697, 0x69a0, 0xa184, + 0x0600, 0x00c0, 0x2697, 0x1078, 0x34f1, 0x0078, 0x26ba, 0x69a0, + 0xa184, 0x0800, 0x0040, 0x26ae, 0x0c7e, 0x027e, 0x2960, 0x6000, + 0xa085, 0x2000, 0x6002, 0x6104, 0xa18d, 0x0010, 0x6106, 0x027f, + 0x0c7f, 0x1078, 0x3604, 0x00c0, 0x26ba, 0x69a0, 0xa184, 0x0200, + 0x0040, 0x26b6, 0x1078, 0x3540, 0x0078, 0x26ba, 0xa184, 0x0400, + 0x00c0, 0x2693, 0x69a0, 0xa184, 0x1000, 0x0040, 0x26c5, 0x6914, + 0xa18c, 0xff00, 0x810f, 0x1078, 0x22ee, 0x007f, 0x7002, 0xa68c, + 0x00e0, 0xa684, 0x0060, 0x0040, 0x26d3, 0xa086, 0x0060, 0x00c0, + 0x26d3, 0xa18d, 0x4000, 0x88ff, 0x0040, 0x26d8, 0xa18d, 0x0004, + 0x795a, 0x69b6, 0x789b, 0x0060, 0x2800, 0x78aa, 0x789b, 0x0061, + 0x6818, 0xa08d, 0x8000, 0xa084, 0x7fff, 0x691a, 0xa68c, 0x0080, + 0x0040, 0x26f7, 0x7097, 0x0000, 0xa08a, 0x000d, 0x0050, 0x26f5, + 0xa08a, 0x000c, 0x7196, 0x2001, 0x000c, 0x800c, 0x719a, 0x78aa, + 0x8008, 0x810c, 0x0040, 0x3407, 0xa18c, 0x00f8, 0x00c0, 0x3407, + 0x157e, 0x137e, 0x147e, 0x20a1, 0x012b, 0x789b, 0x0000, 0x8000, + 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, + 0x6814, 0x8007, 0x7882, 0x6d94, 0x7dd6, 0x7dde, 0x6e98, 0x7ed2, + 0x7eda, 0x1078, 0x38fa, 0x00c0, 0x272e, 0x702c, 0x8003, 0x0048, + 0x2727, 0x2019, 0x4d9e, 0x1078, 0x2276, 0x702f, 0x8000, 0x7830, + 0xa084, 0x00c0, 0x00c0, 0x272e, 0x0098, 0x2736, 0x6008, 0xa084, + 0xffef, 0x600a, 0x1078, 0x3912, 0x0078, 0x2482, 0x7200, 0xa284, + 0x0007, 0xa086, 0x0001, 0x00c0, 0x2743, 0x781b, 0x004f, 0x1078, + 0x3912, 0x0078, 0x2754, 0x6ab4, 0xa295, 0x2000, 0x7a5a, 0x781b, + 0x004f, 0x1078, 0x3912, 0x7200, 0x2500, 0xa605, 0x0040, 0x2754, + 0xa284, 0x0007, 0x1079, 0x2762, 0xad80, 0x0009, 0x7036, 0xa284, + 0x0007, 0xa086, 0x0001, 0x00c0, 0x2459, 0x6018, 0x8000, 0x601a, + 0x0078, 0x2459, 0x276a, 0x4a3a, 0x4a3a, 0x4a29, 0x4a3a, 0x276a, + 0x4a29, 0x276a, 0x1078, 0x23eb, 0x1078, 0x38fa, 0x0f7e, 0x2079, + 0x5100, 0x78cc, 0x0f7f, 0xa084, 0x0001, 0x0040, 0x2790, 0x706c, + 0xa086, 0x0001, 0x00c0, 0x277f, 0x706e, 0x0078, 0x2823, 0x706c, + 0xa086, 0x0005, 0x00c0, 0x278e, 0x7088, 0x2068, 0x681b, 0x0004, + 0x6817, 0x0000, 0x6820, 0xa085, 0x0008, 0x6822, 0x706f, 0x0000, + 0x2011, 0x0004, 0x716c, 0xa186, 0x0001, 0x0040, 0x27b1, 0xa186, + 0x0007, 0x00c0, 0x27a1, 0x2009, 0x5138, 0x200b, 0x0005, 0x0078, + 0x27b1, 0x2009, 0x5113, 0x2104, 0x2009, 0x5112, 0x200a, 0x2009, + 0x5138, 0x200b, 0x0001, 0x706f, 0x0000, 0x7073, 0x0001, 0x0078, + 0x27b3, 0x706f, 0x0000, 0x1078, 0x4776, 0x157e, 0x20a9, 0x0010, + 0x2039, 0x0000, 0x1078, 0x36e2, 0xa7b8, 0x0100, 0x0070, 0x27c2, + 0x0078, 0x27ba, 0x157f, 0x7000, 0x0079, 0x27c6, 0x27f4, 0x27db, + 0x27db, 0x27ce, 0x27f4, 0x27f4, 0x27f4, 0x27f4, 0x2021, 0x515a, + 0x2404, 0xa005, 0x0040, 0x27f4, 0xad06, 0x00c0, 0x27db, 0x6800, + 0x2022, 0x0078, 0x27eb, 0x6820, 0xa084, 0x0001, 0x00c0, 0x27e7, + 0x6f14, 0x1078, 0x37ef, 0x1078, 0x33d8, 0x0078, 0x27eb, 0x7060, + 0x2060, 0x6800, 0x6002, 0x6a1a, 0x6817, 0x0000, 0x6820, 0xa085, + 0x0008, 0x6822, 0x1078, 0x1c70, 0x2021, 0x7500, 0x1078, 0x2830, + 0x2021, 0x515a, 0x1078, 0x2830, 0x157e, 0x20a9, 0x0000, 0x2021, + 0x7400, 0x1078, 0x2830, 0x8420, 0x0070, 0x2808, 0x0078, 0x2801, + 0x2061, 0x5400, 0x2021, 0x0002, 0x20a9, 0x0100, 0x6018, 0x6110, + 0x81ff, 0x0040, 0x2817, 0xa102, 0x0050, 0x2817, 0x6012, 0x601b, + 0x0000, 0xace0, 0x0010, 0x0070, 0x281f, 0x0078, 0x280e, 0x8421, + 0x00c0, 0x280c, 0x157f, 0x709c, 0xa084, 0x8000, 0x0040, 0x282a, + 0x1078, 0x3a00, 0x7003, 0x0000, 0x704b, 0x0000, 0x0078, 0x2459, + 0x047e, 0x2404, 0xa005, 0x0040, 0x2844, 0x2068, 0x6800, 0x007e, + 0x6a1a, 0x6817, 0x0000, 0x6820, 0xa085, 0x0008, 0x6822, 0x1078, + 0x1c70, 0x007f, 0x0078, 0x2832, 0x047f, 0x2023, 0x0000, 0x007c, + 0xa282, 0x0003, 0x0050, 0x284e, 0x1078, 0x23eb, 0x2300, 0x0079, + 0x2851, 0x2854, 0x28c7, 0x28e4, 0xa282, 0x0002, 0x0040, 0x285a, + 0x1078, 0x23eb, 0x706c, 0x706f, 0x0000, 0x7093, 0x0000, 0x0079, + 0x2861, 0x2869, 0x2869, 0x286b, 0x289f, 0x340d, 0x2869, 0x289f, + 0x2869, 0x1078, 0x23eb, 0x7780, 0x1078, 0x36e2, 0x7780, 0xa7bc, + 0x0f00, 0x1078, 0x37ef, 0x6018, 0xa005, 0x0040, 0x2896, 0x2021, + 0x7500, 0x2009, 0x0004, 0x2011, 0x0010, 0x1078, 0x28ff, 0x0040, + 0x2896, 0x157e, 0x20a9, 0x0000, 0x2021, 0x7400, 0x047e, 0x2009, + 0x0004, 0x2011, 0x0010, 0x1078, 0x28ff, 0x047f, 0x0040, 0x2895, + 0x8420, 0x0070, 0x2895, 0x0078, 0x2886, 0x157f, 0x8738, 0xa784, + 0x001f, 0x00c0, 0x2871, 0x0078, 0x2482, 0x0078, 0x2482, 0x7780, + 0x1078, 0x37ef, 0x6018, 0xa005, 0x0040, 0x28c5, 0x2021, 0x7500, + 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x28ff, 0x0040, 0x28c5, + 0x157e, 0x20a9, 0x0000, 0x2021, 0x7400, 0x047e, 0x2009, 0x0005, + 0x2011, 0x0020, 0x1078, 0x28ff, 0x047f, 0x0040, 0x28c4, 0x8420, + 0x0070, 0x28c4, 0x0078, 0x28b5, 0x157f, 0x0078, 0x2482, 0x2200, + 0x0079, 0x28ca, 0x28cd, 0x28cf, 0x28cf, 0x1078, 0x23eb, 0x2009, + 0x0012, 0x706c, 0xa086, 0x0002, 0x0040, 0x28d8, 0x2009, 0x000e, + 0x6818, 0xa084, 0x8000, 0x0040, 0x28de, 0x691a, 0x706f, 0x0000, + 0x7073, 0x0001, 0x0078, 0x3888, 0x2200, 0x0079, 0x28e7, 0x28ec, + 0x28cf, 0x28ea, 0x1078, 0x23eb, 0x1078, 0x4776, 0x7000, 0xa086, + 0x0001, 0x00c0, 0x339d, 0x1078, 0x33ee, 0x6008, 0xa084, 0xffef, + 0x600a, 0x1078, 0x3390, 0x0040, 0x339d, 0x0078, 0x2594, 0x2404, + 0xa005, 0x0040, 0x2922, 0x2068, 0x2d04, 0x007e, 0x6814, 0xa706, + 0x0040, 0x290e, 0x2d20, 0x007f, 0x0078, 0x2900, 0x007f, 0x2022, + 0x691a, 0x6817, 0x0000, 0x6820, 0xa205, 0x6822, 0x1078, 0x1c70, + 0x6010, 0x8001, 0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, + 0x33ee, 0x007c, 0xa085, 0x0001, 0x0078, 0x2921, 0x2300, 0x0079, + 0x2929, 0x292e, 0x292c, 0x29c7, 0x1078, 0x23eb, 0x78ec, 0xa084, + 0x0001, 0x00c0, 0x2942, 0x7000, 0xa086, 0x0004, 0x00c0, 0x293a, + 0x0078, 0x2965, 0x1078, 0x33ee, 0x6008, 0xa084, 0xffef, 0x600a, + 0x0078, 0x339d, 0x78e4, 0xa005, 0x00d0, 0x2965, 0x0018, 0x2459, + 0x2008, 0xa084, 0x0030, 0x00c0, 0x2951, 0x781b, 0x004f, 0x0078, + 0x2459, 0x78ec, 0xa084, 0x0003, 0x0040, 0x294d, 0x2100, 0xa084, + 0x0007, 0x0079, 0x295b, 0x299e, 0x29a9, 0x298f, 0x2963, 0x38ed, + 0x38ed, 0x2963, 0x29b8, 0x1078, 0x23eb, 0x7000, 0xa086, 0x0004, + 0x00c0, 0x297f, 0x706c, 0xa086, 0x0002, 0x00c0, 0x2975, 0x2011, + 0x0002, 0x2019, 0x0000, 0x0078, 0x2848, 0x706c, 0xa086, 0x0006, + 0x0040, 0x296f, 0x706c, 0xa086, 0x0004, 0x0040, 0x296f, 0x79e4, + 0xa184, 0x0030, 0x0040, 0x2989, 0x78ec, 0xa084, 0x0003, 0x00c0, + 0x298b, 0x0078, 0x2f6d, 0x2001, 0x0003, 0x0078, 0x2d01, 0x6818, + 0xa084, 0x8000, 0x0040, 0x2996, 0x681b, 0x001d, 0x1078, 0x36c1, + 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x2459, 0x6818, 0xa084, + 0x8000, 0x0040, 0x29a5, 0x681b, 0x001d, 0x1078, 0x36c1, 0x0078, + 0x38b8, 0x6818, 0xa084, 0x8000, 0x0040, 0x29b0, 0x681b, 0x001d, + 0x1078, 0x36c1, 0x782b, 0x3008, 0x781b, 0x00cd, 0x0078, 0x2459, + 0x6818, 0xa084, 0x8000, 0x0040, 0x29bf, 0x681b, 0x001d, 0x1078, + 0x36c1, 0x782b, 0x3008, 0x781b, 0x008e, 0x0078, 0x2459, 0xa584, + 0x000f, 0x00c0, 0x29e4, 0x7000, 0x0079, 0x29ce, 0x2482, 0x29d8, + 0x29d6, 0x339d, 0x339d, 0x339d, 0x339d, 0x29d6, 0x1078, 0x23eb, + 0x1078, 0x33ee, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x3390, + 0x0040, 0x339d, 0x0078, 0x2594, 0x78e4, 0xa005, 0x00d0, 0x2965, + 0x0018, 0x2965, 0x2008, 0xa084, 0x0030, 0x00c0, 0x29f3, 0x781b, + 0x004f, 0x0078, 0x2459, 0x78ec, 0xa084, 0x0003, 0x0040, 0x29ef, + 0x2100, 0xa184, 0x0007, 0x0079, 0x29fd, 0x2a0f, 0x2a13, 0x2a07, + 0x2a05, 0x38ed, 0x38ed, 0x2a05, 0x38e3, 0x1078, 0x23eb, 0x1078, + 0x36c9, 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x2459, 0x1078, + 0x36c9, 0x0078, 0x38b8, 0x1078, 0x36c9, 0x782b, 0x3008, 0x781b, + 0x00cd, 0x0078, 0x2459, 0x1078, 0x36c9, 0x782b, 0x3008, 0x781b, + 0x008e, 0x0078, 0x2459, 0x2300, 0x0079, 0x2a26, 0x2a2b, 0x2a29, + 0x2a2d, 0x1078, 0x23eb, 0x0078, 0x30ab, 0x681b, 0x0008, 0x78a3, + 0x0000, 0x79e4, 0xa184, 0x0030, 0x0040, 0x30ab, 0x78ec, 0xa084, + 0x0003, 0x0040, 0x30ab, 0xa184, 0x0007, 0x0079, 0x2a3f, 0x2a47, + 0x2a13, 0x298f, 0x3888, 0x38ed, 0x38ed, 0x2a47, 0x38e3, 0x1078, + 0x389c, 0x0078, 0x2459, 0xa282, 0x0005, 0x0050, 0x2a51, 0x1078, + 0x23eb, 0x2300, 0x0079, 0x2a54, 0x2a57, 0x2cae, 0x2cbc, 0x2200, + 0x0079, 0x2a5a, 0x2a74, 0x2a61, 0x2a74, 0x2a5f, 0x2c93, 0x1078, + 0x23eb, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa082, 0x0020, + 0x0048, 0x369d, 0xa08a, 0x0004, 0x00c8, 0x369d, 0x0079, 0x2a70, + 0x369d, 0x369d, 0x369d, 0x364b, 0x789b, 0x0018, 0x79a8, 0xa184, + 0x0080, 0x0040, 0x2a85, 0x0078, 0x369d, 0x7000, 0xa005, 0x00c0, + 0x2a7b, 0x2011, 0x0004, 0x0078, 0x321f, 0xa184, 0x00ff, 0xa08a, + 0x0010, 0x00c8, 0x369d, 0x0079, 0x2a8d, 0x2a9f, 0x2a9d, 0x2ab7, + 0x2abb, 0x2b78, 0x369d, 0x369d, 0x2b7a, 0x369d, 0x369d, 0x2c8f, + 0x2c8f, 0x369d, 0x369d, 0x369d, 0x2c91, 0x1078, 0x23eb, 0xa684, + 0x1000, 0x0040, 0x2aac, 0x2001, 0x0500, 0x8000, 0x8000, 0x783a, + 0x781b, 0x008c, 0x0078, 0x2459, 0x6818, 0xa084, 0x8000, 0x0040, + 0x2ab5, 0x681b, 0x001d, 0x0078, 0x2aa3, 0x0078, 0x3888, 0x681b, + 0x001d, 0x0078, 0x36ad, 0x6920, 0x6922, 0xa684, 0x1800, 0x00c0, + 0x2afc, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2b04, 0x6818, 0xa086, + 0x0008, 0x00c0, 0x2acd, 0x681b, 0x0000, 0xa684, 0x0400, 0x0040, + 0x2b74, 0xa684, 0x0080, 0x0040, 0x2af8, 0x7097, 0x0000, 0x6818, + 0xa084, 0x003f, 0xa08a, 0x000d, 0x0050, 0x2af8, 0xa08a, 0x000c, + 0x7196, 0x2001, 0x000c, 0x800c, 0x719a, 0x789b, 0x0061, 0x78aa, + 0x157e, 0x137e, 0x147e, 0x20a1, 0x012b, 0x789b, 0x0000, 0x8000, + 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, + 0x781b, 0x0058, 0x0078, 0x2459, 0xa684, 0x1000, 0x0040, 0x2b04, + 0x781b, 0x0065, 0x0078, 0x2459, 0xa684, 0x0060, 0x0040, 0x2b70, + 0xa684, 0x0800, 0x0040, 0x2b70, 0xa684, 0x8000, 0x00c0, 0x2b12, + 0x0078, 0x2b2c, 0xa6b4, 0x7fff, 0x7e5a, 0x6eb6, 0x789b, 0x0076, + 0x7aac, 0x79ac, 0x78ac, 0x801b, 0x00c8, 0x2b1f, 0x8000, 0xa084, + 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, + 0x6b94, 0x2200, 0xa303, 0x68ae, 0xa684, 0x4000, 0x0040, 0x2b34, + 0xa6b4, 0xbfff, 0x7e5a, 0x6eb6, 0x7000, 0xa086, 0x0003, 0x00c0, + 0x2b41, 0x1078, 0x482c, 0x1078, 0x4a29, 0x781b, 0x0064, 0x0078, + 0x2459, 0xa006, 0x1078, 0x4b30, 0x6ab0, 0x69ac, 0x6c98, 0x6b94, + 0x2200, 0xa105, 0x0040, 0x2b50, 0x2200, 0xa422, 0x2100, 0xa31b, + 0x6caa, 0x7cd2, 0x7cda, 0x6ba6, 0x7bd6, 0x7bde, 0x2300, 0xa405, + 0x00c0, 0x2b62, 0xa6b5, 0x4000, 0x7e5a, 0x6eb6, 0x781b, 0x0064, + 0x0078, 0x2459, 0x781b, 0x0064, 0x2200, 0xa115, 0x00c0, 0x2b6c, + 0x1078, 0x4a3a, 0x0078, 0x2459, 0x1078, 0x4a85, 0x0078, 0x2459, + 0x781b, 0x0065, 0x0078, 0x2459, 0x781b, 0x0058, 0x0078, 0x2459, + 0x1078, 0x23eb, 0x0078, 0x2bdb, 0x6920, 0xa184, 0x0100, 0x0040, + 0x2b92, 0xa18c, 0xfeff, 0x6922, 0x0c7e, 0x7054, 0x2060, 0x6000, + 0xa084, 0xefff, 0x6002, 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, + 0x0078, 0x2bca, 0xa184, 0x0200, 0x0040, 0x2bca, 0xa18c, 0xfdff, + 0x6922, 0x0c7e, 0x7054, 0x2060, 0x6000, 0xa084, 0xdfff, 0x6002, + 0x6004, 0xa084, 0xffef, 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xa184, + 0x0008, 0x0040, 0x2bca, 0x1078, 0x37eb, 0x1078, 0x34f1, 0x88ff, + 0x0040, 0x2bca, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5, + 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2bc4, 0x782b, 0x3008, + 0x781b, 0x0056, 0x0078, 0x2459, 0x782b, 0x3008, 0x781b, 0x0065, + 0x0078, 0x2459, 0x7e58, 0xa684, 0x0400, 0x00c0, 0x2bd3, 0x781b, + 0x0058, 0x0078, 0x2459, 0x781b, 0x0065, 0x0078, 0x2459, 0x0078, + 0x36a5, 0x0078, 0x36a5, 0x2019, 0x0000, 0x7990, 0xa18c, 0x0007, + 0x00c0, 0x2be9, 0x6820, 0xa084, 0x0100, 0x0040, 0x2bd9, 0x2009, + 0x0008, 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, + 0x00c0, 0x2c20, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040, + 0x2c18, 0x0048, 0x2bfd, 0x0078, 0x2c1a, 0xa380, 0x0002, 0xa102, + 0x00c8, 0x2c18, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0c7e, 0x7054, + 0x2060, 0x6000, 0xa084, 0xefef, 0x6002, 0x6004, 0xa084, 0xffe5, + 0x6006, 0x0c7f, 0x7e58, 0xa6b4, 0xfffb, 0x7e5a, 0x0078, 0x2bcb, + 0x0078, 0x2b7c, 0x24a8, 0x7aa8, 0x00f0, 0x2c1a, 0x0078, 0x2beb, + 0xa284, 0x00f0, 0xa086, 0x0020, 0x00c0, 0x2c80, 0x8318, 0x8318, + 0x2300, 0xa102, 0x0040, 0x2c30, 0x0048, 0x2c30, 0x0078, 0x2c7d, + 0xa286, 0x0023, 0x0040, 0x2bd9, 0x681c, 0xa084, 0xfff1, 0x681e, + 0x7e58, 0xa684, 0xfff1, 0xa085, 0x0010, 0x2030, 0x7e5a, 0x6008, + 0xa085, 0x0010, 0x600a, 0x0c7e, 0x7054, 0x2060, 0x6004, 0x2008, + 0x2c48, 0x0c7f, 0xa184, 0x0010, 0x0040, 0x2c54, 0x1078, 0x37eb, + 0x1078, 0x3604, 0x0078, 0x2c63, 0x0c7e, 0x7054, 0x2060, 0x6004, + 0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0008, 0x0040, 0x2bca, 0x1078, + 0x37eb, 0x1078, 0x34f1, 0x88ff, 0x0040, 0x2bca, 0x789b, 0x0060, + 0x2800, 0x78aa, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, + 0x2c77, 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x2459, 0x782b, + 0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0x7aa8, 0x0078, 0x2beb, + 0x8318, 0x2300, 0xa102, 0x0040, 0x2c89, 0x0048, 0x2c89, 0x0078, + 0x2beb, 0xa284, 0x0080, 0x00c0, 0x36ad, 0x0078, 0x36a5, 0x0078, + 0x36ad, 0x0078, 0x369d, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, + 0xa08e, 0x0001, 0x0040, 0x2c9e, 0x1078, 0x23eb, 0x7aa8, 0xa294, + 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x369d, + 0x0079, 0x2caa, 0x369d, 0x343e, 0x369d, 0x3599, 0xa282, 0x0000, + 0x00c0, 0x2cb4, 0x1078, 0x23eb, 0x1078, 0x36c1, 0x782b, 0x3008, + 0x781b, 0x0065, 0x0078, 0x2459, 0xa282, 0x0003, 0x00c0, 0x2cc2, + 0x1078, 0x23eb, 0xa484, 0x8000, 0x00c0, 0x2ce5, 0x706c, 0xa005, + 0x0040, 0x2ccc, 0x1078, 0x23eb, 0x6f14, 0x7782, 0xa7bc, 0x0f00, + 0x1078, 0x37ef, 0x6008, 0xa085, 0x0021, 0x600a, 0x8738, 0xa784, + 0x001f, 0x00c0, 0x2cd0, 0x1078, 0x36c5, 0x706f, 0x0002, 0x2009, + 0x5138, 0x200b, 0x0009, 0x0078, 0x2ce7, 0x1078, 0x36d1, 0x782b, + 0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0xa282, 0x0004, 0x0050, + 0x2cf3, 0x1078, 0x23eb, 0x2300, 0x0079, 0x2cf6, 0x2cf9, 0x2de2, + 0x2e15, 0xa286, 0x0003, 0x0040, 0x2cff, 0x1078, 0x23eb, 0x2001, + 0x0000, 0x007e, 0x68c0, 0xa005, 0x0040, 0x2d08, 0x7003, 0x0003, + 0x68a0, 0xa084, 0x2000, 0x0040, 0x2d11, 0x6008, 0xa085, 0x0002, + 0x600a, 0x007f, 0x703e, 0x7000, 0xa084, 0x0007, 0x0079, 0x2d18, + 0x2482, 0x2d22, 0x2d22, 0x2f17, 0x2f53, 0x2482, 0x2f53, 0x2d20, + 0x1078, 0x23eb, 0xa684, 0x1000, 0x00c0, 0x2d2a, 0x1078, 0x4776, + 0x0040, 0x2dbc, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x2d72, 0xa186, + 0x0008, 0x00c0, 0x2d41, 0x1078, 0x33ee, 0x6008, 0xa084, 0xffef, + 0x600a, 0x1078, 0x3390, 0x0040, 0x2d72, 0x1078, 0x4776, 0x0078, + 0x2d59, 0xa186, 0x0028, 0x00c0, 0x2d72, 0x1078, 0x4776, 0x6008, + 0xa084, 0xffef, 0x600a, 0x6018, 0xa005, 0x0040, 0x2d59, 0x8001, + 0x601a, 0xa005, 0x0040, 0x2d59, 0x8001, 0xa005, 0x0040, 0x2d59, + 0x601e, 0x6820, 0xa084, 0x0001, 0x0040, 0x2482, 0x6820, 0xa084, + 0xfffe, 0x6822, 0x7060, 0x0c7e, 0x2060, 0x6800, 0x6002, 0x0c7f, + 0x6004, 0x6802, 0xa005, 0x2d00, 0x00c0, 0x2d6f, 0x6002, 0x6006, + 0x0078, 0x2482, 0x017e, 0x1078, 0x2e46, 0x017f, 0xa684, 0xdf00, + 0x681e, 0x682b, 0x0000, 0x6f14, 0x81ff, 0x0040, 0x2dbc, 0xa186, + 0x0002, 0x00c0, 0x2dbc, 0xa684, 0x0800, 0x00c0, 0x2d8f, 0xa684, + 0x0060, 0x0040, 0x2d8f, 0x78d8, 0x7adc, 0x682e, 0x6a32, 0x6820, + 0xa084, 0x0800, 0x00c0, 0x2dbc, 0x8717, 0xa294, 0x000f, 0x8213, + 0x8213, 0x8213, 0xa290, 0x5380, 0xa290, 0x0000, 0x221c, 0xa384, + 0x0100, 0x00c0, 0x2da5, 0x0078, 0x2dab, 0x8210, 0x2204, 0xa085, + 0x0018, 0x2012, 0x8211, 0xa384, 0x0400, 0x0040, 0x2db8, 0x68a0, + 0xa084, 0x0100, 0x00c0, 0x2db8, 0x1078, 0x2eca, 0x0078, 0x2482, + 0x6008, 0xa085, 0x0002, 0x600a, 0x6916, 0x6818, 0xa084, 0x8000, + 0x0040, 0x2dc4, 0x703c, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x1078, + 0x33df, 0x1078, 0x33ee, 0x00c0, 0x2dd1, 0x6008, 0xa084, 0xffef, + 0x600a, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2dda, 0x1078, 0x33d8, + 0x0078, 0x2dde, 0x7060, 0x2060, 0x6800, 0x6002, 0x1078, 0x1c70, + 0x0078, 0x2482, 0xa282, 0x0004, 0x0048, 0x2de8, 0x1078, 0x23eb, + 0x2200, 0x0079, 0x2deb, 0x2de6, 0x2def, 0x2dfc, 0x2def, 0x7000, + 0xa086, 0x0005, 0x0040, 0x2df8, 0x1078, 0x36c1, 0x782b, 0x3008, + 0x781b, 0x0065, 0x0078, 0x2459, 0x7890, 0x8007, 0x8001, 0xa084, + 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa186, + 0x0003, 0x0040, 0x2e11, 0xa186, 0x0000, 0x0040, 0x2e11, 0x0078, + 0x369d, 0x781b, 0x0065, 0x0078, 0x2459, 0x6820, 0xa085, 0x0004, + 0x6822, 0x82ff, 0x00c0, 0x2e20, 0x1078, 0x36c1, 0x0078, 0x2e27, + 0x8211, 0x0040, 0x2e25, 0x1078, 0x23eb, 0x1078, 0x36d1, 0x782b, + 0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0x702c, 0x8003, 0x0048, + 0x2e37, 0x2019, 0x4d9e, 0x1078, 0x2276, 0x702f, 0x8000, 0x1078, + 0x3912, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x2e43, 0x0018, 0x2e43, + 0x791a, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, 0xa684, 0x0060, + 0x00c0, 0x2e50, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x2ec9, + 0xa684, 0x0800, 0x00c0, 0x2e72, 0x68b4, 0xa084, 0x4800, 0xa635, + 0xa684, 0x0800, 0x00c0, 0x2e72, 0x6998, 0x6a94, 0x692e, 0x6a32, + 0x703c, 0xa005, 0x00c0, 0x2e6a, 0x2200, 0xa105, 0x0040, 0x2e71, + 0x703f, 0x0015, 0x7000, 0xa086, 0x0006, 0x0040, 0x2e71, 0x1078, + 0x4776, 0x007c, 0xa684, 0x0020, 0x0040, 0x2e94, 0xa684, 0x4000, + 0x0040, 0x2e80, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x2e6a, + 0x68b4, 0xa084, 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0, 0x2e7a, + 0x703c, 0xa005, 0x00c0, 0x2e8e, 0x703f, 0x0015, 0x79d8, 0x7adc, + 0x692e, 0x6a32, 0x0078, 0x2e6a, 0xa684, 0x4000, 0x0040, 0x2e9e, + 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x2e6a, 0x68b4, 0xa084, + 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0, 0x2e98, 0x703c, 0xa005, + 0x00c0, 0x2eac, 0x703f, 0x0015, 0x79d8, 0x7adc, 0x78d0, 0x80fb, + 0x00c8, 0x2eb3, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, + 0x692e, 0x6a32, 0x2100, 0xa205, 0x00c0, 0x2ec0, 0x0078, 0x2e6a, + 0x7000, 0xa086, 0x0006, 0x0040, 0x2ec9, 0x1078, 0x4b30, 0x0078, + 0x2e6a, 0x007c, 0x6008, 0xa085, 0x0200, 0x600a, 0xa384, 0x0200, + 0x0040, 0x2ed6, 0x6008, 0xa085, 0x0002, 0x600a, 0x681b, 0x0006, + 0x688f, 0x0000, 0x6893, 0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942, + 0x682f, 0x0003, 0x6833, 0x0000, 0x6837, 0x0020, 0x6897, 0x0000, + 0x689b, 0x0020, 0x68b3, 0x0000, 0x68af, 0x0000, 0x7000, 0x0079, + 0x2ef1, 0x2482, 0x2efb, 0x2f04, 0x2ef9, 0x2ef9, 0x2ef9, 0x2ef9, + 0x2ef9, 0x1078, 0x23eb, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2f04, + 0x1078, 0x33d8, 0x0078, 0x2f0a, 0x7060, 0x2c50, 0x2060, 0x6800, + 0x6002, 0x2a60, 0x2021, 0x515a, 0x2404, 0xa005, 0x0040, 0x2f13, + 0x2020, 0x0078, 0x2f0c, 0x2d22, 0x206b, 0x0000, 0x007c, 0x1078, + 0x33df, 0x1078, 0x33ee, 0x6008, 0xa084, 0xfdff, 0x600a, 0x682b, + 0x0000, 0x789b, 0x000e, 0x6f14, 0x6817, 0x0002, 0x1078, 0x4b78, + 0xa684, 0x0800, 0x0040, 0x2f30, 0x691c, 0xa18d, 0x2000, 0x691e, + 0x6818, 0xa084, 0x8000, 0x0040, 0x2f40, 0x7868, 0xa08c, 0x00ff, + 0x0040, 0x2f3e, 0x681b, 0x001e, 0x0078, 0x2f40, 0x681b, 0x0000, + 0x2021, 0x515a, 0x2404, 0xad06, 0x0040, 0x2f47, 0x7460, 0x6800, + 0x2022, 0x68c3, 0x0000, 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x1078, + 0x1c70, 0x0078, 0x2482, 0x1078, 0x2e46, 0x682b, 0x0000, 0x2001, + 0x000e, 0x6f14, 0x1078, 0x3918, 0xa08c, 0x00ff, 0x6916, 0x6818, + 0xa084, 0x8000, 0x0040, 0x2f66, 0x703c, 0x681a, 0xa68c, 0xdf00, + 0x691e, 0x706f, 0x0000, 0x0078, 0x2482, 0x7000, 0xa005, 0x00c0, + 0x2f73, 0x0078, 0x2482, 0xa006, 0x1078, 0x4776, 0x6817, 0x0000, + 0x681b, 0x0014, 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, 0x6820, + 0xa085, 0x00ff, 0x6822, 0x7000, 0x0079, 0x2f86, 0x2482, 0x2f90, + 0x2f90, 0x2f92, 0x2f92, 0x2f92, 0x2f92, 0x2f8e, 0x1078, 0x23eb, + 0x1078, 0x33ee, 0x6008, 0xa084, 0xffef, 0x600a, 0x0078, 0x33a8, + 0x2300, 0x0079, 0x2f9b, 0x2f9e, 0x2fa0, 0x2fd9, 0x1078, 0x23eb, + 0x7000, 0x0079, 0x2fa3, 0x2482, 0x2fad, 0x2fad, 0x2fc8, 0x2fad, + 0x2fd5, 0x2fc8, 0x2fab, 0x1078, 0x23eb, 0xa684, 0x0060, 0xa086, + 0x0060, 0x00c0, 0x2fc4, 0xa6b4, 0xffdf, 0xa6b4, 0xbfff, 0xa6b5, + 0x2000, 0x7e5a, 0x681c, 0xa084, 0xffdf, 0x681e, 0x1078, 0x4776, + 0x1078, 0x4a3a, 0x0078, 0x3888, 0xa684, 0x2000, 0x0040, 0x2fb7, + 0x6818, 0xa084, 0x8000, 0x0040, 0x2fd5, 0x681b, 0x0015, 0xa684, + 0x4000, 0x0040, 0x2fd5, 0x681b, 0x0007, 0x1078, 0x389c, 0x0078, + 0x2459, 0x1078, 0x23eb, 0x2300, 0x0079, 0x2fde, 0x2fe1, 0x2fe3, + 0x3016, 0x1078, 0x23eb, 0x7000, 0x0079, 0x2fe6, 0x2482, 0x2ff0, + 0x2ff0, 0x300b, 0x2ff0, 0x3012, 0x300b, 0x2fee, 0x1078, 0x23eb, + 0xa684, 0x0060, 0xa086, 0x0060, 0x00c0, 0x3007, 0xa6b4, 0xffbf, + 0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a, 0x681c, 0xa084, 0xffbf, + 0x681e, 0x1078, 0x4776, 0x1078, 0x4a3a, 0x0078, 0x3888, 0xa684, + 0x2000, 0x0040, 0x2ffa, 0x6818, 0xa084, 0x8000, 0x0040, 0x3012, + 0x681b, 0x0007, 0x781b, 0x00cd, 0x0078, 0x2459, 0x6820, 0xa085, + 0x0004, 0x6822, 0x1078, 0x3853, 0xa6b5, 0x0800, 0x1078, 0x36c1, + 0x782b, 0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0x2300, 0x0079, + 0x3029, 0x302c, 0x302e, 0x3030, 0x1078, 0x23eb, 0x0078, 0x36ad, + 0xa684, 0x0400, 0x00c0, 0x3059, 0x79e4, 0xa184, 0x0020, 0x0040, + 0x3040, 0x78ec, 0xa084, 0x0003, 0x0040, 0x3040, 0x782b, 0x3009, + 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x79e4, + 0xa184, 0x0020, 0x0040, 0x3051, 0x78ec, 0xa084, 0x0003, 0x00c0, + 0x3055, 0x2001, 0x0014, 0x0078, 0x2d01, 0xa184, 0x0007, 0x0079, + 0x3091, 0x7a90, 0xa294, 0x0007, 0x789b, 0x0060, 0x79a8, 0x81ff, + 0x0040, 0x308f, 0x789b, 0x0010, 0x7ba8, 0xa384, 0x0001, 0x00c0, + 0x3080, 0x7ba8, 0x7ba8, 0xa386, 0x0001, 0x00c0, 0x3073, 0x2009, + 0xfff7, 0x0078, 0x3079, 0xa386, 0x0003, 0x00c0, 0x3080, 0x2009, + 0xffef, 0x0c7e, 0x7054, 0x2060, 0x6004, 0xa104, 0x6006, 0x0c7f, + 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x782b, + 0x3009, 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff, 0x6922, 0x0078, + 0x3888, 0x299e, 0x29a9, 0x309b, 0x30a3, 0x3099, 0x3099, 0x3888, + 0x3888, 0x1078, 0x23eb, 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff, + 0x6922, 0x0078, 0x3892, 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff, + 0x6922, 0x0078, 0x3888, 0x79e4, 0xa184, 0x0030, 0x0040, 0x30b5, + 0x78ec, 0xa084, 0x0003, 0x00c0, 0x30dc, 0x7000, 0xa086, 0x0004, + 0x00c0, 0x30cf, 0x706c, 0xa086, 0x0002, 0x00c0, 0x30c5, 0x2011, + 0x0002, 0x2019, 0x0000, 0x0078, 0x2848, 0x706c, 0xa086, 0x0006, + 0x0040, 0x30bf, 0x706c, 0xa086, 0x0004, 0x0040, 0x30bf, 0x7000, + 0xa086, 0x0000, 0x0040, 0x2459, 0x6818, 0xa085, 0x8000, 0x681a, + 0x2001, 0x0014, 0x0078, 0x2d01, 0xa184, 0x0007, 0x0079, 0x30e0, + 0x3888, 0x3888, 0x30e8, 0x3888, 0x38ed, 0x38ed, 0x3888, 0x3888, + 0xa684, 0x0080, 0x0040, 0x3117, 0x7194, 0x81ff, 0x0040, 0x3117, + 0xa182, 0x000d, 0x00d0, 0x30f8, 0x7097, 0x0000, 0x0078, 0x30fd, + 0xa182, 0x000c, 0x7096, 0x2009, 0x000c, 0x789b, 0x0061, 0x79aa, + 0x157e, 0x137e, 0x147e, 0x7098, 0x8114, 0xa210, 0x729a, 0xa080, + 0x000b, 0xad00, 0x2098, 0x20a1, 0x012b, 0x789b, 0x0000, 0x8108, + 0x81ac, 0x53a6, 0x147f, 0x137f, 0x157f, 0x0078, 0x3892, 0xa684, + 0x0400, 0x00c0, 0x3158, 0x6820, 0xa084, 0x0001, 0x0040, 0x3892, + 0xa68c, 0x0060, 0xa684, 0x0060, 0x0040, 0x312c, 0xa086, 0x0060, + 0x00c0, 0x312c, 0xa18d, 0x4000, 0xa18c, 0xfffb, 0x795a, 0x69b6, + 0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061, 0x6818, 0xa085, + 0x8000, 0x681a, 0x78aa, 0x8008, 0x810c, 0x0040, 0x3407, 0xa18c, + 0x00f8, 0x00c0, 0x3407, 0x157e, 0x137e, 0x147e, 0x20a1, 0x012b, + 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, + 0x147f, 0x137f, 0x157f, 0x6814, 0x8007, 0x7882, 0x0078, 0x3892, + 0x6818, 0xa084, 0x8000, 0x0040, 0x315f, 0x681b, 0x0008, 0x781b, + 0x00c3, 0x0078, 0x2459, 0x2300, 0x0079, 0x3166, 0x316b, 0x320a, + 0x3169, 0x1078, 0x23eb, 0x7000, 0xa084, 0x0007, 0x0079, 0x3170, + 0x2482, 0x317a, 0x31af, 0x3185, 0x3178, 0x2482, 0x3178, 0x3178, + 0x1078, 0x23eb, 0x681c, 0xa084, 0x2000, 0x0040, 0x3193, 0x6008, + 0xa085, 0x0002, 0x600a, 0x0078, 0x3193, 0x68c0, 0xa005, 0x00c0, + 0x31af, 0x6920, 0xa18d, 0x0001, 0x6922, 0x68c3, 0x0001, 0x6800, + 0x706a, 0x0078, 0x31a9, 0x6920, 0xa18d, 0x0001, 0x6922, 0x6800, + 0x6006, 0xa005, 0x00c0, 0x319d, 0x6002, 0x681c, 0xa084, 0x000e, + 0x0040, 0x31a9, 0x7014, 0x68ba, 0x7130, 0xa188, 0x7400, 0x0078, + 0x31ab, 0x2009, 0x7500, 0x2104, 0x6802, 0x2d0a, 0x7162, 0x6eb6, + 0xa684, 0x0060, 0x0040, 0x3208, 0xa684, 0x0800, 0x00c0, 0x31c3, + 0xa684, 0x7fff, 0x68b6, 0x6894, 0x68a6, 0x6898, 0x68aa, 0x1078, + 0x4776, 0x0078, 0x3208, 0xa684, 0x0020, 0x0040, 0x31d8, 0x68c0, + 0xa005, 0x0040, 0x31cf, 0x1078, 0x4b78, 0x0078, 0x31d2, 0xa006, + 0x1078, 0x4b30, 0x79d8, 0x7adc, 0x69aa, 0x6aa6, 0x0078, 0x31de, + 0x1078, 0x37fc, 0x69aa, 0x6aa6, 0x1078, 0x4b30, 0xa684, 0x8000, + 0x0040, 0x3208, 0xa684, 0x7fff, 0x68b6, 0x2001, 0x0076, 0x1078, + 0x3918, 0x2010, 0x2001, 0x0078, 0x1078, 0x3918, 0x2008, 0xa684, + 0x0020, 0x00c0, 0x3200, 0x2001, 0x007a, 0x1078, 0x3918, 0x801b, + 0x00c8, 0x31fb, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, + 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, + 0x0078, 0x2482, 0x0078, 0x36ad, 0x7037, 0x0000, 0xa282, 0x0006, + 0x0050, 0x3214, 0x1078, 0x23eb, 0x7000, 0xa084, 0x0007, 0x10c0, + 0x39be, 0x2300, 0x0079, 0x321c, 0x321f, 0x3248, 0x325c, 0x2200, + 0x0079, 0x3222, 0x3246, 0x36ad, 0x3228, 0x3246, 0x3278, 0x32ba, + 0x7003, 0x0005, 0x2001, 0x7610, 0x2068, 0x704a, 0x157e, 0x20a9, + 0x0031, 0x2003, 0x0000, 0x8000, 0x0070, 0x3238, 0x0078, 0x3231, + 0x157f, 0xad80, 0x0009, 0x7036, 0x6817, 0x0000, 0x68b7, 0x0700, + 0x6823, 0x0800, 0x6827, 0x0003, 0x0078, 0x369d, 0x1078, 0x23eb, + 0x7003, 0x0005, 0x2001, 0x7610, 0x2068, 0x704a, 0xad80, 0x0009, + 0x7036, 0x2200, 0x0079, 0x3254, 0x36ad, 0x325a, 0x325a, 0x3278, + 0x325a, 0x36ad, 0x1078, 0x23eb, 0x7003, 0x0005, 0x2001, 0x7610, + 0x2068, 0x704a, 0xad80, 0x0009, 0x7036, 0x2200, 0x0079, 0x3268, + 0x3270, 0x326e, 0x326e, 0x3270, 0x326e, 0x3270, 0x1078, 0x23eb, + 0x1078, 0x36d1, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078, 0x2459, + 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, + 0xa484, 0x001f, 0xa215, 0x2069, 0x7500, 0x2d04, 0x2d08, 0x7162, + 0x2068, 0xa005, 0x0040, 0x3293, 0x6814, 0xa206, 0x0040, 0x32af, + 0x6800, 0x0078, 0x3286, 0x7003, 0x0005, 0x2001, 0x7610, 0x2068, + 0x704a, 0x7036, 0x157e, 0x20a9, 0x0031, 0x2003, 0x0000, 0x8000, + 0x0070, 0x32a4, 0x0078, 0x329d, 0x157f, 0xad80, 0x0009, 0x7036, + 0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, + 0x7e5a, 0x6820, 0xa084, 0x0c00, 0x0040, 0x3309, 0x1078, 0x36c9, + 0x0078, 0x3309, 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b, + 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x79a8, 0x79a8, 0xa18c, + 0x00ff, 0xa1e8, 0x7400, 0x2d04, 0x2d08, 0x7162, 0x2068, 0xa005, + 0x0040, 0x32d9, 0x6814, 0xa206, 0x0040, 0x32f4, 0x6800, 0x0078, + 0x32cc, 0x7003, 0x0005, 0x2001, 0x7610, 0x2068, 0x704a, 0x157e, + 0x20a9, 0x0031, 0x2003, 0x0000, 0x8000, 0x0070, 0x32e9, 0x0078, + 0x32e2, 0x157f, 0xad80, 0x0009, 0x7036, 0x6a16, 0x68b7, 0x0700, + 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a, 0x6820, 0xa084, + 0x0c00, 0x0040, 0x3309, 0xa084, 0x0800, 0x0040, 0x3303, 0x1078, + 0x36cd, 0x0078, 0x3309, 0x1078, 0x36c9, 0x708b, 0x0000, 0x0078, + 0x3309, 0x027e, 0x8207, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, + 0xa080, 0x5380, 0x2060, 0x7056, 0x6000, 0x705a, 0x6004, 0x705e, + 0xa684, 0x0060, 0x0040, 0x3361, 0x6b98, 0x6c94, 0x69ac, 0x68b0, + 0xa105, 0x00c0, 0x3343, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa6b4, + 0xb7ff, 0x7e5a, 0xa684, 0x0060, 0xa086, 0x0060, 0x0040, 0x3361, + 0x68c0, 0xa005, 0x0040, 0x333c, 0x7003, 0x0003, 0x682b, 0x0000, + 0x1078, 0x4a29, 0x0078, 0x333e, 0x1078, 0x4a3a, 0xa6b5, 0x2000, + 0x7e5a, 0x0078, 0x3361, 0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400, + 0xa305, 0x0040, 0x3361, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68b0, + 0xa6b4, 0xbfff, 0x7e5a, 0x007e, 0x68c0, 0xa005, 0x007f, 0x0040, + 0x335f, 0x7003, 0x0003, 0x1078, 0x4a29, 0x0078, 0x3361, 0x1078, + 0x4a85, 0x077f, 0x1078, 0x37ef, 0x2009, 0x0065, 0xa684, 0x0004, + 0x0040, 0x3382, 0x78e4, 0xa084, 0x0030, 0x0040, 0x337a, 0x78ec, + 0xa084, 0x0003, 0x0040, 0x337a, 0x782b, 0x3008, 0x2009, 0x0065, + 0x0078, 0x3382, 0x0f7e, 0x2079, 0x5100, 0x1078, 0x4776, 0x0f7f, + 0x0040, 0x2482, 0x791a, 0x2d00, 0x704a, 0x8207, 0xa084, 0x000f, + 0x8003, 0x8003, 0x8003, 0xa080, 0x5380, 0x2048, 0x0078, 0x2459, + 0x6020, 0xa005, 0x0040, 0x339c, 0x8001, 0x6022, 0x6008, 0xa085, + 0x0008, 0x600a, 0x7010, 0x6026, 0x007c, 0xa006, 0x1078, 0x4776, + 0x6817, 0x0000, 0x681b, 0x0001, 0x6823, 0x0040, 0x681f, 0x0100, + 0x7000, 0xa084, 0x0007, 0x0079, 0x33ad, 0x2482, 0x33b7, 0x33b7, + 0x33d4, 0x33bf, 0x33bd, 0x33bf, 0x33b5, 0x1078, 0x23eb, 0x1078, + 0x33df, 0x1078, 0x33d8, 0x1078, 0x1c70, 0x0078, 0x2482, 0x706c, + 0x706f, 0x0000, 0x7093, 0x0000, 0x0079, 0x33c6, 0x33d0, 0x33d0, + 0x33ce, 0x33ce, 0x33ce, 0x33d0, 0x33ce, 0x33d0, 0x0079, 0x2861, + 0x706f, 0x0000, 0x0078, 0x2482, 0x681b, 0x0000, 0x0078, 0x2f17, + 0x6800, 0xa005, 0x00c0, 0x33dd, 0x6002, 0x6006, 0x007c, 0x6010, + 0xa005, 0x0040, 0x33e8, 0x8001, 0x00d0, 0x33e8, 0x1078, 0x23eb, + 0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x007c, 0x6018, 0xa005, + 0x0040, 0x33f4, 0x8001, 0x601a, 0x007c, 0x1078, 0x3912, 0x681b, + 0x0018, 0x0078, 0x342b, 0x1078, 0x3912, 0x681b, 0x0019, 0x0078, + 0x342b, 0x1078, 0x3912, 0x681b, 0x001a, 0x0078, 0x342b, 0x1078, + 0x3912, 0x681b, 0x0003, 0x0078, 0x342b, 0x7780, 0x1078, 0x37ef, + 0x7184, 0xa18c, 0x00ff, 0xa1e8, 0x7400, 0x2d04, 0x2d08, 0x2068, + 0xa005, 0x00c0, 0x341d, 0x0078, 0x2482, 0x6814, 0x7280, 0xa206, + 0x0040, 0x3425, 0x6800, 0x0078, 0x3416, 0x6800, 0x200a, 0x681b, + 0x0005, 0x708b, 0x0000, 0x1078, 0x33df, 0x6820, 0xa084, 0x0001, + 0x00c0, 0x3434, 0x1078, 0x33d8, 0x1078, 0x33ee, 0x681f, 0x0000, + 0x6823, 0x0020, 0x1078, 0x1c70, 0x0078, 0x2482, 0xa282, 0x0003, + 0x00c0, 0x369d, 0x7da8, 0xa5ac, 0x00ff, 0x7ca8, 0xa4a4, 0x00ff, + 0x6920, 0xa18d, 0x0080, 0x6922, 0xa184, 0x0100, 0x0040, 0x34a2, + 0xa18c, 0xfeff, 0x6922, 0xa4a4, 0x00ff, 0x0040, 0x348c, 0xa482, + 0x000c, 0x0048, 0x345f, 0x0040, 0x345f, 0x2021, 0x000c, 0x852b, + 0x852b, 0x1078, 0x3760, 0x0040, 0x3469, 0x1078, 0x355b, 0x0078, + 0x3495, 0x1078, 0x371b, 0x0c7e, 0x2960, 0x6004, 0xa084, 0xfff5, + 0x6006, 0x1078, 0x3586, 0x0c7f, 0x6920, 0xa18d, 0x0100, 0x6922, + 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x3486, + 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x2459, 0x782b, 0x3008, + 0x781b, 0x0065, 0x0078, 0x2459, 0x0c7e, 0x2960, 0x6004, 0xa084, + 0xfff5, 0x6006, 0x1078, 0x3586, 0x0c7f, 0x7e58, 0xa684, 0x0400, + 0x00c0, 0x349e, 0x781b, 0x0058, 0x0078, 0x2459, 0x781b, 0x0065, + 0x0078, 0x2459, 0x0c7e, 0x7054, 0x2060, 0x6100, 0xa18c, 0x1000, + 0x0040, 0x34e2, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c, + 0x0048, 0x34b6, 0x0040, 0x34b6, 0x2011, 0x000c, 0x2400, 0xa202, + 0x00c8, 0x34bb, 0x2220, 0x6208, 0xa294, 0x00ff, 0x7018, 0xa086, + 0x0028, 0x00c0, 0x34cb, 0xa282, 0x0019, 0x00c8, 0x34d1, 0x2011, + 0x0019, 0x0078, 0x34d1, 0xa282, 0x000c, 0x00c8, 0x34d1, 0x2011, + 0x000c, 0x2200, 0xa502, 0x00c8, 0x34d6, 0x2228, 0x1078, 0x371f, + 0x852b, 0x852b, 0x1078, 0x3760, 0x0040, 0x34e2, 0x1078, 0x355b, + 0x0078, 0x34e6, 0x1078, 0x371b, 0x1078, 0x3586, 0x7858, 0xa085, + 0x0004, 0x785a, 0x0c7f, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078, + 0x2459, 0x0c7e, 0x2960, 0x6000, 0xa084, 0x1000, 0x00c0, 0x3509, + 0x6010, 0xa084, 0x000f, 0x00c0, 0x3503, 0x6104, 0xa18c, 0xfff5, + 0x6106, 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, + 0x3530, 0x68a0, 0xa084, 0x0200, 0x00c0, 0x3503, 0x6208, 0xa294, + 0x00ff, 0x7018, 0xa086, 0x0028, 0x00c0, 0x351e, 0xa282, 0x0019, + 0x00c8, 0x3524, 0x2011, 0x0019, 0x0078, 0x3524, 0xa282, 0x000c, + 0x00c8, 0x3524, 0x2011, 0x000c, 0x6308, 0x831f, 0xa39c, 0x00ff, + 0xa382, 0x000c, 0x0048, 0x3530, 0x0040, 0x3530, 0x2019, 0x000c, + 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, + 0xa8c0, 0x0005, 0x6820, 0xa085, 0x0100, 0x6822, 0x0c7f, 0x007c, + 0x0c7e, 0x2960, 0xa18c, 0xfff5, 0x6106, 0x2011, 0x0032, 0x2019, + 0x0000, 0x0078, 0x354b, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, + 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xa085, 0x0100, + 0x6822, 0x0c7f, 0x007c, 0x0c7e, 0x7154, 0x2160, 0x1078, 0x3562, + 0x0c7f, 0x007c, 0x2008, 0xa084, 0xfff0, 0xa425, 0x7c86, 0x6018, + 0x789a, 0x7cae, 0x6412, 0x78a4, 0xa084, 0xfff8, 0xa18c, 0x0007, + 0xa105, 0x78a6, 0x6016, 0x788a, 0xa4a4, 0x000f, 0x8427, 0x8204, + 0x8004, 0xa084, 0x00ff, 0xa405, 0x600e, 0x78ec, 0xd08c, 0x00c0, + 0x3585, 0x6004, 0xa084, 0xfff5, 0x6006, 0x007c, 0x0c7e, 0x7054, + 0x2060, 0x1078, 0x358d, 0x0c7f, 0x007c, 0x6018, 0x789a, 0x78a4, + 0xa084, 0xfff0, 0x78a6, 0x6012, 0x7884, 0xa084, 0xfff0, 0x7886, + 0x007c, 0xa282, 0x0002, 0x00c0, 0x369d, 0x7aa8, 0x6920, 0xa18d, + 0x0080, 0x6922, 0xa184, 0x0200, 0x0040, 0x35e2, 0xa18c, 0xfdff, + 0x6922, 0xa294, 0x00ff, 0xa282, 0x0002, 0x00c8, 0x369d, 0x1078, + 0x362b, 0x1078, 0x3586, 0xa980, 0x0001, 0x200c, 0x1078, 0x37eb, + 0x1078, 0x34f1, 0x88ff, 0x0040, 0x35d5, 0x789b, 0x0060, 0x2800, + 0x78aa, 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, + 0x35cf, 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x2459, 0x782b, + 0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0x7e58, 0xa684, 0x0400, + 0x00c0, 0x35de, 0x781b, 0x0058, 0x0078, 0x2459, 0x781b, 0x0065, + 0x0078, 0x2459, 0xa282, 0x0002, 0x00c8, 0x35ea, 0xa284, 0x0001, + 0x0040, 0x35f4, 0x7154, 0xa188, 0x0000, 0x210c, 0xa18c, 0x2000, + 0x00c0, 0x35f4, 0x2011, 0x0000, 0x1078, 0x370d, 0x1078, 0x362b, + 0x1078, 0x3586, 0x7858, 0xa085, 0x0004, 0x785a, 0x782b, 0x3008, + 0x781b, 0x0065, 0x0078, 0x2459, 0x0c7e, 0x027e, 0x2960, 0x6000, + 0x2011, 0x0001, 0xa084, 0x2000, 0x00c0, 0x361b, 0x6014, 0xa084, + 0x0040, 0x00c0, 0x3619, 0xa18c, 0xffef, 0x6106, 0xa006, 0x0078, + 0x3628, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, + 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x6820, 0xa085, 0x0200, 0x6822, + 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x7054, 0x2060, 0x1078, 0x3632, + 0x0c7f, 0x007c, 0x82ff, 0x0040, 0x3637, 0x2011, 0x0040, 0x6018, + 0xa080, 0x0002, 0x789a, 0x78a4, 0xa084, 0xffbf, 0xa205, 0x78a6, + 0x788a, 0x6016, 0x78ec, 0xd08c, 0x00c0, 0x364a, 0x6004, 0xa084, + 0xffef, 0x6006, 0x007c, 0x007e, 0x7000, 0xa086, 0x0003, 0x0040, + 0x3654, 0x007f, 0x0078, 0x3657, 0x007f, 0x0078, 0x3699, 0xa684, + 0x0020, 0x0040, 0x3699, 0x7888, 0xa084, 0x0040, 0x0040, 0x3699, + 0x7bb8, 0xa384, 0x003f, 0x831b, 0x00c8, 0x3667, 0x8000, 0xa005, + 0x0040, 0x367d, 0x831b, 0x00c8, 0x3670, 0x8001, 0x0040, 0x3695, + 0xa684, 0x4000, 0x0040, 0x367d, 0x78b8, 0x801b, 0x00c8, 0x3679, + 0x8000, 0xa084, 0x003f, 0x00c0, 0x3695, 0xa6b4, 0xbfff, 0x7e5a, + 0x79d8, 0x7adc, 0x2001, 0x0001, 0xa108, 0x00c8, 0x3689, 0xa291, + 0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade, 0x1078, 0x4b30, 0x781b, + 0x0064, 0x1078, 0x49b5, 0x0078, 0x2459, 0x781b, 0x0064, 0x0078, + 0x2459, 0x781b, 0x0065, 0x0078, 0x2459, 0x1078, 0x36d5, 0x782b, + 0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0x1078, 0x36c1, 0x782b, + 0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0x6827, 0x0002, 0x1078, + 0x36c9, 0x78e4, 0xa084, 0x0030, 0x0040, 0x2482, 0x78ec, 0xa084, + 0x0003, 0x0040, 0x2482, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078, + 0x2459, 0x2001, 0x0005, 0x0078, 0x36d7, 0x2001, 0x000c, 0x0078, + 0x36d7, 0x2001, 0x0006, 0x0078, 0x36d7, 0x2001, 0x000d, 0x0078, + 0x36d7, 0x2001, 0x0009, 0x0078, 0x36d7, 0x2001, 0x0007, 0x789b, + 0x0010, 0x78aa, 0x789b, 0x0060, 0x78ab, 0x0001, 0xa6b5, 0x0004, + 0x7e5a, 0x007c, 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b, + 0x8703, 0xa0e0, 0x5380, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184, + 0x000f, 0x0040, 0x36fb, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004, + 0xa085, 0x0008, 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184, + 0x0040, 0x0040, 0x370b, 0xa184, 0xffbf, 0x78a6, 0x6016, 0x6004, + 0xa085, 0x0010, 0x6006, 0x077f, 0x007c, 0x789b, 0x0010, 0x78ab, + 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, + 0x78ab, 0x0004, 0x007c, 0x2021, 0x0000, 0x2029, 0x0032, 0x789b, + 0x0010, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, + 0x7caa, 0x789b, 0x0060, 0x78ab, 0x0005, 0x007c, 0x157e, 0x8007, + 0xa084, 0x00ff, 0x8003, 0x8003, 0xa080, 0x0020, 0x789a, 0x79a4, + 0xa18c, 0xfff0, 0x2001, 0x5146, 0x2004, 0xa082, 0x0028, 0x0040, + 0x3749, 0x2021, 0x37d2, 0x2019, 0x0014, 0x20a9, 0x000c, 0x0078, + 0x374f, 0x2021, 0x37de, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011, + 0x0064, 0x2404, 0xa084, 0xfff0, 0xa106, 0x0040, 0x375e, 0x8420, + 0x2300, 0xa210, 0x0070, 0x375e, 0x0078, 0x3751, 0x157f, 0x007c, + 0x157e, 0x2009, 0x5146, 0x210c, 0xa182, 0x0032, 0x0048, 0x3774, + 0x0040, 0x3778, 0x2009, 0x37c4, 0x2019, 0x0011, 0x20a9, 0x000e, + 0x2011, 0x0032, 0x0078, 0x378a, 0xa182, 0x0028, 0x0040, 0x3782, + 0x2009, 0x37d2, 0x2019, 0x0014, 0x20a9, 0x000c, 0x2011, 0x0064, + 0x0078, 0x378a, 0x2009, 0x37de, 0x2019, 0x0019, 0x20a9, 0x000d, + 0x2011, 0x0064, 0x2200, 0xa502, 0x0040, 0x379a, 0x0048, 0x379a, + 0x8108, 0x2300, 0xa210, 0x0070, 0x3797, 0x0078, 0x378a, 0x157f, + 0xa006, 0x007c, 0x157f, 0xa582, 0x0064, 0x00c8, 0x37a9, 0x7808, + 0xa085, 0x0070, 0x780a, 0x7044, 0xa085, 0x0070, 0x7046, 0x0078, + 0x37a9, 0x78ec, 0xa084, 0x0300, 0x0040, 0x37b1, 0x2104, 0x0078, + 0x37c2, 0x2104, 0xa09e, 0x1102, 0x00c0, 0x37c2, 0x2001, 0x04fd, + 0x2004, 0xa082, 0x0005, 0x0048, 0x37c1, 0x2001, 0x1201, 0x0078, + 0x37c2, 0x2104, 0xa005, 0x007c, 0x1102, 0x3002, 0x3202, 0x4203, + 0x4403, 0x5404, 0x5604, 0x6605, 0x6805, 0x7806, 0x7a06, 0x0c07, + 0x0c07, 0x0e07, 0x3202, 0x4202, 0x5202, 0x6202, 0x7202, 0x6605, + 0x7605, 0x7805, 0x7a05, 0x7c05, 0x7e05, 0x7f05, 0x2202, 0x3202, + 0x4202, 0x5202, 0x5404, 0x6404, 0x7404, 0x7604, 0x7804, 0x7a04, + 0x7c04, 0x7e04, 0x7f04, 0x789b, 0x0010, 0xa046, 0x007c, 0xa784, + 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003, + 0xa105, 0xa0e0, 0x5400, 0x007c, 0x79d8, 0x7adc, 0x78d0, 0x801b, + 0x00c8, 0x3803, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, + 0x007c, 0x0f7e, 0x2079, 0x0100, 0x2009, 0x5140, 0x2091, 0x8000, + 0x2104, 0x0079, 0x3813, 0x3849, 0x381d, 0x381d, 0x381d, 0x381d, + 0x381d, 0x381d, 0x384d, 0x1078, 0x23eb, 0x784b, 0x0004, 0x7848, + 0xa084, 0x0004, 0x00c0, 0x381f, 0x784b, 0x0008, 0x7848, 0xa084, + 0x0008, 0x00c0, 0x3826, 0x68b4, 0xa085, 0x4000, 0x68b6, 0x7858, + 0xa085, 0x4000, 0x785a, 0x7830, 0xa084, 0x0080, 0x00c0, 0x3849, + 0x0018, 0x3849, 0x681c, 0xa084, 0x0020, 0x00c0, 0x3847, 0x0e7e, + 0x2071, 0x5140, 0x1078, 0x389c, 0x0e7f, 0x0078, 0x3849, 0x781b, + 0x00cd, 0x2091, 0x8001, 0x0f7f, 0x007c, 0x70b3, 0x0000, 0x1078, + 0x3a76, 0x0078, 0x3849, 0x0c7e, 0x6814, 0x8007, 0xa084, 0x000f, + 0x8003, 0x8003, 0x8003, 0xa0e0, 0x5380, 0x6004, 0xa084, 0x000a, + 0x00c0, 0x3886, 0x6108, 0xa194, 0xff00, 0x0040, 0x3886, 0xa18c, + 0x00ff, 0x2001, 0x0019, 0xa106, 0x0040, 0x3875, 0x2001, 0x0032, + 0xa106, 0x0040, 0x3879, 0x0078, 0x387d, 0x2009, 0x0020, 0x0078, + 0x387f, 0x2009, 0x003f, 0x0078, 0x387f, 0x2011, 0x0000, 0x2100, + 0xa205, 0x600a, 0x6004, 0xa085, 0x0002, 0x6006, 0x0c7f, 0x007c, + 0x781b, 0x0065, 0x0078, 0x2459, 0x782b, 0x3008, 0x781b, 0x0065, + 0x0078, 0x2459, 0x781b, 0x0058, 0x0078, 0x2459, 0x782b, 0x3008, + 0x781b, 0x0056, 0x0078, 0x2459, 0x2009, 0x5120, 0x210c, 0xa186, + 0x0000, 0x0040, 0x38b0, 0xa186, 0x0001, 0x0040, 0x38b3, 0x2009, + 0x5138, 0x200b, 0x000b, 0x706f, 0x0001, 0x781b, 0x0048, 0x007c, + 0x781b, 0x00c7, 0x007c, 0x2009, 0x5138, 0x200b, 0x000a, 0x007c, + 0x2009, 0x5120, 0x210c, 0xa186, 0x0000, 0x0040, 0x38d3, 0xa186, + 0x0001, 0x0040, 0x38cd, 0x2009, 0x5138, 0x200b, 0x000b, 0x706f, + 0x0001, 0x781b, 0x0048, 0x0078, 0x2459, 0x2009, 0x5138, 0x200b, + 0x000a, 0x0078, 0x2459, 0x782b, 0x3008, 0x781b, 0x00c7, 0x0078, + 0x2459, 0x781b, 0x00cd, 0x0078, 0x2459, 0x782b, 0x3008, 0x781b, + 0x00cd, 0x0078, 0x2459, 0x781b, 0x008e, 0x0078, 0x2459, 0x782b, + 0x3008, 0x781b, 0x008e, 0x0078, 0x2459, 0x6818, 0xa084, 0x8000, + 0x0040, 0x38f4, 0x681b, 0x001d, 0x706f, 0x0001, 0x781b, 0x0048, + 0x0078, 0x2459, 0x007e, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x3910, + 0x7808, 0xa084, 0xfffc, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, + 0x78ec, 0xa084, 0x0021, 0x0040, 0x3910, 0x7044, 0x780a, 0xa005, + 0x007f, 0x007c, 0x7044, 0xa085, 0x0002, 0x7046, 0x780a, 0x007c, + 0x007e, 0x7830, 0xa084, 0x0040, 0x00c0, 0x3919, 0x0098, 0x3924, + 0x007f, 0x789a, 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd, 0x780a, + 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040, + 0x3933, 0x0098, 0x3931, 0x007f, 0x789a, 0x78ac, 0x007e, 0x7044, + 0x780a, 0x007f, 0x007c, 0x78ec, 0xa084, 0x0002, 0x00c0, 0x4760, + 0xa784, 0x007d, 0x00c0, 0x3947, 0x2700, 0x1078, 0x23eb, 0xa784, + 0x0001, 0x00c0, 0x2f6d, 0xa784, 0x0070, 0x0040, 0x3957, 0x0c7e, + 0x2d60, 0x2f68, 0x1078, 0x2396, 0x2d78, 0x2c68, 0x0c7f, 0xa784, + 0x0008, 0x0040, 0x3964, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, + 0x0040, 0x2482, 0x0078, 0x3888, 0xa784, 0x0004, 0x0040, 0x3997, + 0x78b8, 0xa084, 0x4001, 0x0040, 0x3997, 0x784b, 0x0008, 0x78ec, + 0xa084, 0x0003, 0x0040, 0x2482, 0x78e4, 0xa084, 0x0007, 0xa086, + 0x0001, 0x00c0, 0x3997, 0x78c0, 0xa085, 0x4800, 0x2030, 0x7e5a, + 0x781b, 0x00cd, 0x0078, 0x2459, 0x784b, 0x0008, 0x6818, 0xa084, + 0x8000, 0x0040, 0x3993, 0x681b, 0x0015, 0xa684, 0x4000, 0x0040, + 0x3993, 0x681b, 0x0007, 0x1078, 0x389c, 0x0078, 0x2459, 0x681b, + 0x0003, 0x7858, 0xa084, 0x3f00, 0x681e, 0x682f, 0x0000, 0x6833, + 0x0000, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2965, + 0x0018, 0x2459, 0x0078, 0x36a5, 0x6b14, 0x8307, 0xa084, 0x000f, + 0x8003, 0x8003, 0x8003, 0xa080, 0x5380, 0x2060, 0x2048, 0x7056, + 0x6000, 0x705a, 0x6004, 0x705e, 0x2a60, 0x007c, 0x0079, 0x39c0, + 0x39c8, 0x39c9, 0x39c8, 0x39cb, 0x39c8, 0x39c8, 0x39c8, 0x39d0, + 0x007c, 0x1078, 0x33ee, 0x1078, 0x4776, 0x7038, 0x600a, 0x007c, + 0x70a0, 0xa005, 0x0040, 0x39dd, 0x2068, 0x1078, 0x1b62, 0x1078, + 0x46f8, 0x1078, 0x46ff, 0x70a3, 0x0000, 0x007c, 0x0e7e, 0x2091, + 0x8000, 0x2071, 0x5140, 0x7000, 0xa086, 0x0007, 0x00c0, 0x39f4, + 0x6110, 0x70bc, 0xa106, 0x00c0, 0x39f4, 0x0e7f, 0x1078, 0x1b6f, + 0x1078, 0x39fa, 0xa006, 0x007c, 0x2091, 0x8001, 0x0e7f, 0xa085, + 0x0001, 0x007c, 0x0f7e, 0x0e7e, 0x2071, 0x5140, 0x0078, 0x21fa, + 0x785b, 0x0000, 0x70af, 0x000e, 0x2009, 0x0100, 0x017e, 0x70a0, + 0xa06d, 0x0040, 0x3a0f, 0x70a3, 0x0000, 0x0078, 0x3a15, 0x70b3, + 0x0000, 0x1078, 0x1b8b, 0x0040, 0x3a1b, 0x70ac, 0x6826, 0x1078, + 0x3af8, 0x0078, 0x3a0f, 0x017f, 0x157e, 0x0c7e, 0x0d7e, 0x20a9, + 0x0008, 0x2061, 0x7510, 0x6000, 0xa105, 0x6002, 0x601c, 0xa06d, + 0x0040, 0x3a33, 0x6800, 0x601e, 0x1078, 0x195a, 0x6008, 0x8000, + 0x600a, 0x0078, 0x3a26, 0x6018, 0xa06d, 0x0040, 0x3a3d, 0x6800, + 0x601a, 0x1078, 0x195a, 0x0078, 0x3a33, 0xace0, 0x0008, 0x0070, + 0x3a43, 0x0078, 0x3a23, 0x709c, 0xa084, 0x8000, 0x0040, 0x3a4a, + 0x1078, 0x3b72, 0x0d7f, 0x0c7f, 0x157f, 0x007c, 0x127e, 0x2091, + 0x2300, 0x6804, 0xa084, 0x000f, 0x0079, 0x3a56, 0x3a66, 0x3a66, + 0x3a66, 0x3a66, 0x3a66, 0x3a66, 0x3a68, 0x3a6e, 0x3a66, 0x3a66, + 0x3a66, 0x3a66, 0x3a66, 0x3a70, 0x3a66, 0x3a68, 0x1078, 0x23eb, + 0x1078, 0x44d0, 0x1078, 0x195a, 0x0078, 0x3a74, 0x6827, 0x000b, + 0x1078, 0x44d0, 0x1078, 0x3af8, 0x127f, 0x007c, 0x127e, 0x2091, + 0x2300, 0x0098, 0x3a92, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x3a92, + 0x0d7e, 0x1078, 0x4708, 0x2d00, 0x682e, 0x2009, 0x0004, 0x2001, + 0x0000, 0x6827, 0x0084, 0x1078, 0x46c1, 0x1078, 0x3af8, 0x0d7f, + 0x0078, 0x3ac6, 0x7948, 0xa185, 0x4000, 0x784a, 0x0098, 0x3a9b, + 0x794a, 0x0078, 0x3a80, 0x7828, 0xa086, 0x1834, 0x00c0, 0x3aa4, + 0xa185, 0x0004, 0x0078, 0x3aab, 0x7828, 0xa086, 0x1814, 0x00c0, + 0x3a98, 0xa185, 0x000c, 0x784a, 0x789b, 0x000e, 0x78ab, 0x0002, + 0x7858, 0xa084, 0x00ff, 0xa085, 0x0400, 0x785a, 0x70b4, 0xa080, + 0x0091, 0x781a, 0x6827, 0x0284, 0x682c, 0x6836, 0x6830, 0x683a, + 0x2009, 0x0004, 0x2001, 0x0000, 0x1078, 0x46c1, 0x127f, 0x007c, + 0x0d7e, 0x6b14, 0x1078, 0x1bfd, 0x0040, 0x3ad5, 0x2068, 0x6827, + 0x0002, 0x1078, 0x3af8, 0x0078, 0x3aca, 0x0d7f, 0x007c, 0x0d7e, + 0x6b14, 0x6c28, 0xa4a4, 0x00ff, 0x1078, 0x1b9b, 0x0040, 0x3ae5, + 0x2068, 0x6827, 0x0002, 0x1078, 0x3af8, 0x0d7f, 0x007c, 0x0d7e, + 0x6b14, 0xa39c, 0x00ff, 0x1078, 0x1bce, 0x0040, 0x3af6, 0x2068, + 0x6827, 0x0002, 0x1078, 0x3af8, 0x0078, 0x3aeb, 0x0d7f, 0x007c, + 0x0c7e, 0x6914, 0x1078, 0x3b69, 0x6904, 0xa18c, 0x00ff, 0xa186, + 0x0006, 0x0040, 0x3b13, 0xa186, 0x000d, 0x0040, 0x3b32, 0xa186, + 0x0017, 0x00c0, 0x3b0f, 0x1078, 0x195a, 0x0078, 0x3b11, 0x1078, + 0x1c72, 0x0c7f, 0x007c, 0x6004, 0x8001, 0x0048, 0x3b30, 0x6006, + 0x2009, 0x0000, 0xa684, 0x0001, 0x00c0, 0x3b20, 0xa18d, 0x8000, + 0xa684, 0x0004, 0x0040, 0x3b26, 0xa18d, 0x0002, 0x691e, 0x6823, + 0x0000, 0x7104, 0x810f, 0x6818, 0xa105, 0x681a, 0x0078, 0x3b0f, + 0x1078, 0x23eb, 0x6018, 0xa005, 0x00c0, 0x3b41, 0x6008, 0x8001, + 0x0048, 0x3b41, 0x600a, 0x601c, 0x6802, 0x2d00, 0x601e, 0x0078, + 0x3b57, 0xac88, 0x0006, 0x2104, 0xa005, 0x0040, 0x3b4a, 0x2008, + 0x0078, 0x3b43, 0x6802, 0x2d0a, 0x6008, 0x8001, 0x0048, 0x3b11, + 0x600a, 0x6018, 0x2068, 0x6800, 0x601a, 0x0078, 0x3b3b, 0x157e, + 0x137e, 0x147e, 0x0c7e, 0x0d7e, 0x1078, 0x1937, 0x2da0, 0x137f, + 0x20a9, 0x0031, 0x53a3, 0x0c7f, 0x147f, 0x137f, 0x157f, 0x0078, + 0x3b0f, 0xa184, 0x001f, 0x8003, 0x8003, 0x8003, 0xa080, 0x7510, + 0x2060, 0x007c, 0x2019, 0x5151, 0x2304, 0xa085, 0x0001, 0x201a, + 0x2019, 0x0102, 0x2304, 0xa085, 0x0001, 0x201a, 0x007c, 0x2019, + 0x5151, 0x2304, 0xa084, 0xfffe, 0x201a, 0x2019, 0x0102, 0x2304, + 0xa084, 0xfffe, 0x201a, 0x007c, 0x7990, 0xa18c, 0xfff8, 0x7992, + 0x70b4, 0xa080, 0x00dd, 0x781a, 0x0078, 0x2459, 0x70a3, 0x0000, + 0x7003, 0x0000, 0x7043, 0x0001, 0x7037, 0x0000, 0x0018, 0x2410, + 0x1078, 0x1b8b, 0x0040, 0x3bc7, 0x2009, 0x510f, 0x200b, 0x0000, + 0x68bc, 0x2060, 0x6100, 0xa184, 0x0300, 0x0040, 0x3bbb, 0x6827, + 0x000e, 0xa084, 0x0200, 0x0040, 0x3bb7, 0x6827, 0x0017, 0x1078, + 0x3af8, 0x0078, 0x3b96, 0x7000, 0xa086, 0x0007, 0x00c0, 0x3c29, + 0x2d00, 0x70a2, 0xad80, 0x000f, 0x7036, 0x0078, 0x3bce, 0x7040, + 0xa086, 0x0001, 0x0040, 0x2492, 0x0078, 0x2459, 0x2031, 0x0000, + 0x691c, 0xa184, 0x0002, 0x0040, 0x3bd7, 0xa6b5, 0x0004, 0xa184, + 0x00c0, 0x8003, 0x8003, 0x8007, 0xa080, 0x3cc2, 0x2004, 0xa635, + 0x6820, 0xa084, 0x0400, 0x0040, 0x3bef, 0x789b, 0x0018, 0x78ab, + 0x0003, 0x789b, 0x0081, 0x78ab, 0x0001, 0xa6b5, 0x1000, 0x6820, + 0xa084, 0x8000, 0x00c0, 0x3bfd, 0x681c, 0xa084, 0x8000, 0x00c0, + 0x3c04, 0xa6b5, 0x0800, 0x0078, 0x3c04, 0xa6b5, 0x0400, 0x789b, + 0x000e, 0x6824, 0x8007, 0x78aa, 0x6820, 0xa084, 0x0100, 0x0040, + 0x3c0b, 0xa6b5, 0x4000, 0xa684, 0x0200, 0x0040, 0x3c25, 0x682c, + 0x78d2, 0x6830, 0x78d6, 0xa684, 0x0100, 0x0040, 0x3c23, 0x682c, + 0xa084, 0x0001, 0x0040, 0x3c23, 0x7888, 0xa084, 0x0040, 0x0040, + 0x3c23, 0xa6b5, 0x8000, 0x1078, 0x46f0, 0x7e5a, 0x6eb6, 0x0078, + 0x4727, 0x1078, 0x38fa, 0x00c0, 0x3cbc, 0x702c, 0x8004, 0x0048, + 0x3c37, 0x2019, 0x4e3b, 0x1078, 0x2276, 0x702f, 0x0001, 0x2041, + 0x0001, 0x2031, 0x1000, 0x789b, 0x0018, 0x6814, 0xa084, 0x001f, + 0xa085, 0x0080, 0x78aa, 0x691c, 0xa184, 0x0002, 0x0040, 0x3c50, + 0xa6b5, 0x0004, 0x78ab, 0x0020, 0x6828, 0x78aa, 0xa8c0, 0x0002, + 0x681c, 0xd0f4, 0x0040, 0x3c59, 0x2c50, 0x1078, 0x39ac, 0x1078, + 0x45ff, 0x6820, 0xa084, 0x8000, 0x0040, 0x3c67, 0xa6b5, 0x0400, + 0x789b, 0x000e, 0x6824, 0x8007, 0x78aa, 0x0078, 0x3c6e, 0x681c, + 0xa084, 0x8000, 0x00c0, 0x3c6e, 0xa6b5, 0x0800, 0x6820, 0xa084, + 0x0100, 0x0040, 0x3c75, 0xa6b5, 0x4000, 0x681c, 0xa084, 0x00c0, + 0x8003, 0x8003, 0x8007, 0xa080, 0x3cc2, 0x2004, 0xa635, 0xa684, + 0x0100, 0x0040, 0x3c8f, 0x682c, 0xa084, 0x0001, 0x0040, 0x3c8f, + 0x7888, 0xa084, 0x0040, 0x0040, 0x3c8f, 0xa6b5, 0x8000, 0x789b, + 0x007e, 0x7eae, 0x6eb6, 0x6814, 0x8007, 0x78aa, 0x7882, 0x2810, + 0x7aaa, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x3cbc, 0x0018, 0x3cbc, + 0x70b4, 0xa080, 0x00e2, 0x781a, 0x1078, 0x3912, 0xa684, 0x0200, + 0x0040, 0x3cb0, 0x682c, 0x78d2, 0x6830, 0x78d6, 0x1078, 0x46f0, + 0x2d00, 0x70a2, 0x704a, 0x6810, 0x70be, 0x7003, 0x0007, 0xad80, + 0x000f, 0x7036, 0x0078, 0x2459, 0x1078, 0x1b62, 0x1078, 0x3912, + 0x0078, 0x2459, 0x0000, 0x0300, 0x0200, 0x0000, 0x1078, 0x23eb, + 0x2300, 0x0079, 0x3ccb, 0x3cce, 0x3cce, 0x3cd0, 0x1078, 0x23eb, + 0x1078, 0x46ff, 0x6924, 0xa184, 0x00ff, 0xa086, 0x000a, 0x0040, + 0x3ce2, 0xa184, 0xff00, 0xa085, 0x000a, 0x6826, 0x1078, 0x1b62, + 0x0078, 0x3b96, 0x2001, 0x000a, 0x1078, 0x4691, 0x0078, 0x3b96, + 0xa282, 0x0005, 0x0050, 0x3cee, 0x1078, 0x23eb, 0x7000, 0xa084, + 0x0007, 0x10c0, 0x39be, 0x1078, 0x1937, 0x00c0, 0x3d0d, 0xa684, + 0x0004, 0x0040, 0x3cff, 0x2001, 0x2800, 0x0078, 0x3d01, 0x2001, + 0x0800, 0x71b4, 0xa188, 0x0091, 0x789b, 0x000e, 0x78aa, 0x2031, + 0x0400, 0x7e5a, 0x791a, 0x0078, 0x2459, 0x6807, 0x0106, 0x680b, + 0x0000, 0x689f, 0x0000, 0x6827, 0x0000, 0xa386, 0x0002, 0x00c0, + 0x3d2e, 0xa286, 0x0002, 0x00c0, 0x3d2e, 0x78a0, 0xa005, 0x00c0, + 0x3d2e, 0xa484, 0x8000, 0x00c0, 0x3d2e, 0x78e4, 0xa084, 0x0008, + 0x0040, 0x3d2e, 0xa6b5, 0x0008, 0x2019, 0x0000, 0x1078, 0x411e, + 0x2d00, 0x70a2, 0x704a, 0x7003, 0x0007, 0x7037, 0x0000, 0x6824, + 0xa084, 0x0080, 0x0040, 0x3d40, 0x1078, 0x41d0, 0x0078, 0x2459, + 0x2300, 0x0079, 0x3d43, 0x3d46, 0x3dc7, 0x3de6, 0x2200, 0x0079, + 0x3d49, 0x3d4e, 0x3d5e, 0x3d84, 0x3d90, 0x3db3, 0x2029, 0x0001, + 0xa026, 0x2011, 0x0000, 0x1078, 0x42f1, 0x0079, 0x3d57, 0x3d5c, + 0x2459, 0x3b96, 0x3d5c, 0x3d5c, 0x1078, 0x23eb, 0x7990, 0xa18c, + 0x0007, 0x00c0, 0x3d65, 0x2009, 0x0008, 0x2011, 0x0001, 0xa684, + 0x0004, 0x0040, 0x3d6d, 0x2011, 0x0003, 0x2220, 0xa12a, 0x2011, + 0x0001, 0x1078, 0x42f1, 0x0079, 0x3d75, 0x3d7a, 0x2459, 0x3b96, + 0x3d82, 0x3d7c, 0x0078, 0x472d, 0x70ab, 0x3d80, 0x0078, 0x2459, + 0x0078, 0x3d7a, 0x1078, 0x23eb, 0xa684, 0x0010, 0x0040, 0x3d8e, + 0x1078, 0x419f, 0x0040, 0x3d8e, 0x0078, 0x2459, 0x0078, 0x420c, + 0x6000, 0xa084, 0x0002, 0x0040, 0x3dad, 0x70b4, 0xa080, 0x00d2, + 0x781a, 0x0d7e, 0x1078, 0x4708, 0x2d00, 0x682e, 0x6827, 0x0000, + 0x1078, 0x3af8, 0x0d7f, 0x1078, 0x195a, 0x7003, 0x0000, 0x7037, + 0x0000, 0x704b, 0x0000, 0x0078, 0x3b96, 0xa684, 0x0004, 0x00c0, + 0x3db3, 0x0078, 0x472d, 0x6000, 0xa084, 0x0004, 0x00c0, 0x3dc5, + 0x6000, 0xa084, 0x0001, 0x0040, 0x3dc5, 0x70ab, 0x3dc5, 0x2001, + 0x0007, 0x1078, 0x4689, 0x0078, 0x4733, 0x0078, 0x472d, 0x2200, + 0x0079, 0x3dca, 0x3dcf, 0x3dcf, 0x3dcf, 0x3dd1, 0x3dcf, 0x1078, + 0x23eb, 0x70a7, 0x3dd5, 0x0078, 0x4739, 0x2011, 0x0018, 0x1078, + 0x42eb, 0x0079, 0x3ddb, 0x3de0, 0x2459, 0x3b96, 0x3de2, 0x3de4, + 0x1078, 0x23eb, 0x1078, 0x23eb, 0x1078, 0x23eb, 0x2200, 0x0079, + 0x3de9, 0x3dee, 0x3df0, 0x3df0, 0x3dee, 0x3dee, 0x1078, 0x23eb, + 0x78e4, 0xa084, 0x0008, 0x0040, 0x3e05, 0x70a7, 0x3df9, 0x0078, + 0x4739, 0x2011, 0x0004, 0x1078, 0x42eb, 0x0079, 0x3dff, 0x3e05, + 0x2459, 0x3b96, 0x3e05, 0x3e0f, 0x3e13, 0x70ab, 0x3e0d, 0x2001, + 0x0003, 0x1078, 0x4689, 0x0078, 0x4733, 0x0078, 0x472d, 0x70ab, + 0x3e05, 0x0078, 0x2459, 0x70ab, 0x3e17, 0x0078, 0x2459, 0x0078, + 0x3e0d, 0xa282, 0x0003, 0x0050, 0x3e1f, 0x1078, 0x23eb, 0xa386, + 0x0002, 0x00c0, 0x3e38, 0xa286, 0x0002, 0x00c0, 0x3e3e, 0x78a0, + 0xa005, 0x00c0, 0x3e3e, 0xa484, 0x8000, 0x00c0, 0x3e3e, 0x78e4, + 0xa084, 0x0008, 0x0040, 0x3e38, 0xa6b5, 0x0008, 0x2019, 0x0000, + 0xa684, 0x0008, 0x0040, 0x3e3e, 0x1078, 0x417c, 0x6810, 0x70be, + 0x7003, 0x0007, 0x2300, 0x0079, 0x3e45, 0x3e48, 0x3e75, 0x3e7d, + 0x2200, 0x0079, 0x3e4b, 0x3e50, 0x3e4e, 0x3e69, 0x1078, 0x23eb, + 0x7990, 0xa1ac, 0x0007, 0xa026, 0x2011, 0x0001, 0x1078, 0x42f1, + 0x0079, 0x3e5a, 0x3e5f, 0x2459, 0x3b96, 0x3e67, 0x3e61, 0x0078, + 0x472d, 0x70ab, 0x3e65, 0x0078, 0x2459, 0x0078, 0x3e5f, 0x1078, + 0x23eb, 0xa684, 0x0010, 0x0040, 0x3e73, 0x1078, 0x419f, 0x0040, + 0x3e73, 0x0078, 0x2459, 0x0078, 0x420c, 0x2200, 0x0079, 0x3e78, + 0x3e7b, 0x3e7b, 0x3e7b, 0x1078, 0x23eb, 0x2200, 0x0079, 0x3e80, + 0x3e83, 0x3e85, 0x3e85, 0x1078, 0x23eb, 0x78e4, 0xa084, 0x0008, + 0x0040, 0x3e9a, 0x70a7, 0x3e8e, 0x0078, 0x4739, 0x2011, 0x0004, + 0x1078, 0x42eb, 0x0079, 0x3e94, 0x3e9a, 0x2459, 0x3b96, 0x3e9a, + 0x3ea4, 0x3ea8, 0x70ab, 0x3ea2, 0x2001, 0x0003, 0x1078, 0x4689, + 0x0078, 0x4733, 0x0078, 0x472d, 0x70ab, 0x3e9a, 0x0078, 0x2459, + 0x70ab, 0x3eac, 0x0078, 0x2459, 0x0078, 0x3ea2, 0x2300, 0x0079, + 0x3eb1, 0x3eb6, 0x3eb8, 0x3eb4, 0x1078, 0x23eb, 0x70a4, 0x007a, + 0x70a4, 0x007a, 0xa282, 0x0002, 0x0050, 0x3ec0, 0x1078, 0x23eb, + 0xa684, 0x0200, 0x0040, 0x3eca, 0x1078, 0x46f8, 0x1078, 0x42d3, + 0x1078, 0x46ff, 0x2300, 0x0079, 0x3ecd, 0x3ed0, 0x3ef4, 0x3f5a, + 0xa286, 0x0001, 0x0040, 0x3ed6, 0x1078, 0x23eb, 0xa684, 0x0200, + 0x0040, 0x3ede, 0x1078, 0x46f8, 0x1078, 0x46ff, 0x2001, 0x0001, + 0x1078, 0x4691, 0x78b8, 0xa084, 0xc001, 0x0040, 0x3ef0, 0x7848, + 0xa085, 0x0008, 0x784a, 0x7848, 0xa084, 0x0008, 0x00c0, 0x3eeb, + 0x7003, 0x0000, 0x0078, 0x3b96, 0x2200, 0x0079, 0x3ef7, 0x3ef9, + 0x3f2a, 0x70a7, 0x3efd, 0x0078, 0x4739, 0x2011, 0x000d, 0x1078, + 0x42eb, 0x0079, 0x3f03, 0x3f0a, 0x2459, 0x3b96, 0x3f12, 0x3f1a, + 0x3f20, 0x3f22, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, + 0x0078, 0x4727, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, + 0x0078, 0x4727, 0x70ab, 0x3f1e, 0x0078, 0x2459, 0x0078, 0x3f0a, + 0x1078, 0x23eb, 0x70ab, 0x3f26, 0x0078, 0x2459, 0x1078, 0x473f, + 0x0078, 0x2459, 0x70a7, 0x3f2e, 0x0078, 0x4739, 0x2011, 0x0012, + 0x1078, 0x42eb, 0x0079, 0x3f34, 0x3f3a, 0x2459, 0x3b96, 0x3f46, + 0x3f4e, 0x3f54, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, + 0x70b4, 0xa080, 0x00a6, 0x781a, 0x0078, 0x2459, 0xa6b4, 0x00ff, + 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x0078, 0x4727, 0x70ab, 0x3f52, + 0x0078, 0x2459, 0x0078, 0x3f3a, 0x70ab, 0x3f58, 0x0078, 0x2459, + 0x0078, 0x3f46, 0xa286, 0x0001, 0x0040, 0x3f60, 0x1078, 0x23eb, + 0x70a7, 0x3f64, 0x0078, 0x4739, 0x2011, 0x0015, 0x1078, 0x42eb, + 0x0079, 0x3f6a, 0x3f6f, 0x2459, 0x3b96, 0x3f7d, 0x3f89, 0xa6b4, + 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x783b, 0x1301, 0x70b4, + 0xa080, 0x00b4, 0x781a, 0x0078, 0x2459, 0xa6b4, 0x00ff, 0xa6b5, + 0x0400, 0x6eb6, 0x7e5a, 0x70b4, 0xa080, 0x00a6, 0x781a, 0x0078, + 0x2459, 0x70ab, 0x3f8d, 0x0078, 0x2459, 0x0078, 0x3f6f, 0xa282, + 0x0003, 0x0050, 0x3f95, 0x1078, 0x23eb, 0x2300, 0x0079, 0x3f98, + 0x3f9b, 0x3fd2, 0x402d, 0xa286, 0x0001, 0x0040, 0x3fa1, 0x1078, + 0x23eb, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x3fae, + 0x1078, 0x3af8, 0x7003, 0x0000, 0x0078, 0x3b96, 0x683b, 0x0000, + 0x6837, 0x0000, 0xa684, 0x0200, 0x0040, 0x3fbc, 0x1078, 0x46f8, + 0x1078, 0x42d3, 0x1078, 0x46ff, 0x2001, 0x0001, 0x1078, 0x4691, + 0x78b8, 0xa084, 0xc001, 0x0040, 0x3fce, 0x7848, 0xa085, 0x0008, + 0x784a, 0x7848, 0xa084, 0x0008, 0x00c0, 0x3fc9, 0x7003, 0x0000, + 0x0078, 0x3b96, 0x2200, 0x0079, 0x3fd5, 0x3fd7, 0x4008, 0x70a7, + 0x3fdb, 0x0078, 0x4739, 0x2011, 0x000d, 0x1078, 0x42eb, 0x0079, + 0x3fe1, 0x3fe8, 0x2459, 0x3b96, 0x3ff0, 0x3ff8, 0x3ffe, 0x4000, + 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4727, + 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4727, + 0x70ab, 0x3ffc, 0x0078, 0x2459, 0x0078, 0x3fe8, 0x1078, 0x23eb, + 0x70ab, 0x4004, 0x0078, 0x2459, 0x1078, 0x473f, 0x0078, 0x2459, + 0x70a7, 0x400c, 0x0078, 0x4739, 0x2011, 0x0005, 0x1078, 0x42eb, + 0x0079, 0x4012, 0x4017, 0x2459, 0x3b96, 0x401f, 0x4027, 0xa6b4, + 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4727, 0xa6b4, + 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4727, 0x70ab, + 0x402b, 0x0078, 0x2459, 0x0078, 0x4017, 0xa286, 0x0001, 0x0040, + 0x4033, 0x1078, 0x23eb, 0x70a7, 0x4037, 0x0078, 0x4739, 0x2011, + 0x0006, 0x1078, 0x42eb, 0x0079, 0x403d, 0x4042, 0x2459, 0x3b96, + 0x4048, 0x4052, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4727, + 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0xa6b5, 0x4000, 0x7e5a, + 0x0078, 0x4727, 0x70ab, 0x4056, 0x0078, 0x2459, 0x0078, 0x4042, + 0x2300, 0x0079, 0x405b, 0x4060, 0x405e, 0x405e, 0x1078, 0x23eb, + 0x1078, 0x23eb, 0x2300, 0x71a8, 0xa005, 0x017a, 0x6810, 0x70be, + 0xa282, 0x0003, 0x0050, 0x406e, 0x1078, 0x23eb, 0x2300, 0x0079, + 0x4071, 0x4074, 0x4082, 0x40a4, 0xa684, 0x0200, 0x0040, 0x407c, + 0x1078, 0x46f8, 0x1078, 0x46ff, 0x2001, 0x0001, 0x1078, 0x4691, + 0x0078, 0x2459, 0xa296, 0x0002, 0x0040, 0x408b, 0x82ff, 0x0040, + 0x408b, 0x1078, 0x23eb, 0x70a7, 0x408f, 0x0078, 0x4739, 0x2011, + 0x0018, 0x1078, 0x42eb, 0x0079, 0x4095, 0x409a, 0x2459, 0x3b96, + 0x409c, 0x409e, 0x0078, 0x4727, 0x0078, 0x4727, 0x70ab, 0x40a2, + 0x0078, 0x2459, 0x0078, 0x409a, 0x2200, 0x0079, 0x40a7, 0x40a9, + 0x40c2, 0x70a7, 0x40ad, 0x0078, 0x4739, 0x2011, 0x0017, 0x1078, + 0x42eb, 0x0079, 0x40b3, 0x40b8, 0x2459, 0x3b96, 0x40ba, 0x40bc, + 0x0078, 0x4727, 0x0078, 0x4727, 0x70ab, 0x40c0, 0x0078, 0x2459, + 0x0078, 0x40b8, 0xa484, 0x8000, 0x00c0, 0x410c, 0xa684, 0x0100, + 0x0040, 0x40d6, 0x1078, 0x46f8, 0x1078, 0x42d3, 0x1078, 0x46ff, + 0x7848, 0xa085, 0x000c, 0x784a, 0x0078, 0x40da, 0x78d8, 0x78d2, + 0x78dc, 0x78d6, 0xa6b4, 0xefff, 0x7e5a, 0x70a7, 0x40e1, 0x0078, + 0x4739, 0x2011, 0x000d, 0x1078, 0x42eb, 0x0079, 0x40e7, 0x40ee, + 0x2459, 0x3b96, 0x40ee, 0x40fc, 0x4102, 0x4104, 0xa684, 0x0100, + 0x0040, 0x40fa, 0x1078, 0x46b6, 0x682c, 0x78d2, 0x6830, 0x78d6, + 0x1078, 0x46f0, 0x0078, 0x4727, 0x70ab, 0x4100, 0x0078, 0x2459, + 0x0078, 0x40ee, 0x1078, 0x23eb, 0x70ab, 0x4108, 0x0078, 0x2459, + 0x1078, 0x473f, 0x0078, 0x2459, 0x1078, 0x46ff, 0x70ab, 0x4116, + 0x2001, 0x0003, 0x1078, 0x4689, 0x0078, 0x4733, 0x1078, 0x46f0, + 0x682c, 0x78d2, 0x6830, 0x78d6, 0x0078, 0x4727, 0x70b8, 0x6812, + 0x70be, 0x8000, 0x70ba, 0x681b, 0x0000, 0xa684, 0x0008, 0x0040, + 0x4141, 0x157e, 0x137e, 0x147e, 0x7890, 0x8004, 0x8004, 0x8004, + 0x8004, 0xa084, 0x000f, 0x681a, 0x80ac, 0x789b, 0x0000, 0xaf80, + 0x002b, 0x2098, 0xad80, 0x000b, 0x20a0, 0x53a5, 0x147f, 0x137f, + 0x157f, 0xa6c4, 0x0f00, 0xa684, 0x0002, 0x00c0, 0x4150, 0x692c, + 0x810d, 0x810d, 0x810d, 0xa184, 0x0007, 0x2008, 0x0078, 0x415f, + 0x789b, 0x0010, 0x79ac, 0xa184, 0x0020, 0x0040, 0x415f, 0x017e, + 0x2009, 0x0005, 0x2001, 0x3d00, 0x1078, 0x46c1, 0x017f, 0xa184, + 0x001f, 0xa805, 0x6816, 0x1078, 0x3b69, 0x68be, 0xa684, 0x0004, + 0x0040, 0x4170, 0xa18c, 0xff00, 0x78a8, 0xa084, 0x00ff, 0xa105, + 0x682a, 0xa6b4, 0x00ff, 0x6000, 0xa084, 0x0008, 0x0040, 0x417a, + 0xa6b5, 0x4000, 0x6eb6, 0x007c, 0x157e, 0x137e, 0x147e, 0x6918, + 0x7890, 0x8004, 0x8004, 0x8004, 0x8004, 0xa084, 0x000f, 0x007e, + 0xa100, 0x681a, 0x007f, 0x8000, 0x8004, 0x0040, 0x419b, 0x20a8, + 0x8104, 0xa080, 0x000b, 0xad00, 0x20a0, 0x789b, 0x0000, 0xaf80, + 0x002b, 0x2098, 0x53a5, 0x147f, 0x137f, 0x157f, 0x007c, 0x682c, + 0xa084, 0x0020, 0x00c0, 0x41a7, 0x620c, 0x0078, 0x41a8, 0x6210, + 0x6b18, 0x2300, 0xa202, 0x0040, 0x41c8, 0x2018, 0xa382, 0x000e, + 0x0048, 0x41b8, 0x0040, 0x41b8, 0x2019, 0x000e, 0x0078, 0x41bc, + 0x7858, 0xa084, 0xffef, 0x785a, 0x783b, 0x1b01, 0x7893, 0x0000, + 0x7ba2, 0x70b4, 0xa080, 0x008e, 0x781a, 0xa085, 0x0001, 0x007c, + 0x7858, 0xa084, 0xffef, 0x785a, 0x7893, 0x0000, 0xa006, 0x007c, + 0x6904, 0xa18c, 0x00ff, 0xa196, 0x0007, 0x0040, 0x41dd, 0xa196, + 0x000f, 0x0040, 0x41dd, 0x6807, 0x0117, 0x6914, 0x1078, 0x3b69, + 0x6100, 0x8104, 0x00c8, 0x41f8, 0x601c, 0xa005, 0x0040, 0x41ec, + 0x2001, 0x0800, 0x0078, 0x41fa, 0x0d7e, 0x6824, 0x007e, 0x1078, + 0x4708, 0x007f, 0x6826, 0x2d00, 0x682e, 0x1078, 0x3af8, 0x0d7f, + 0x2001, 0x0200, 0x6826, 0x8007, 0x789b, 0x000e, 0x78aa, 0x6820, + 0xa085, 0x8000, 0x6822, 0x2031, 0x0400, 0x6eb6, 0x7e5a, 0x71b4, + 0xa188, 0x0091, 0x791a, 0x007c, 0xa6c4, 0x0f00, 0xa684, 0x0002, + 0x00c0, 0x4220, 0x692c, 0x810d, 0x810d, 0x810d, 0xa184, 0x0007, + 0x2008, 0xa805, 0x6816, 0x1078, 0x3b69, 0x68be, 0x0078, 0x4223, + 0x6914, 0x1078, 0x3b69, 0x6100, 0x8104, 0x00c8, 0x4280, 0xa184, + 0x0300, 0x0040, 0x422f, 0x6807, 0x0117, 0x0078, 0x424d, 0x6004, + 0xa005, 0x00c0, 0x4256, 0x6807, 0x0117, 0x601c, 0xa005, 0x00c0, + 0x4243, 0x0d7e, 0x1078, 0x4708, 0x6827, 0x0034, 0x2d00, 0x682e, + 0x1078, 0x3af8, 0x0d7f, 0xa684, 0x0004, 0x0040, 0x424d, 0x2031, + 0x0400, 0x2001, 0x2800, 0x0078, 0x4251, 0x2031, 0x0400, 0x2001, + 0x0800, 0x71b4, 0xa188, 0x0091, 0x0078, 0x42ae, 0x6018, 0xa005, + 0x00c0, 0x4243, 0x601c, 0xa005, 0x00c0, 0x4243, 0x689f, 0x0000, + 0x6827, 0x003d, 0xa684, 0x0001, 0x0040, 0x42bc, 0xd694, 0x00c0, + 0x4279, 0x6100, 0xd1d4, 0x0040, 0x4279, 0x692c, 0x81ff, 0x0040, + 0x42bc, 0xa186, 0x0003, 0x0040, 0x42bc, 0xa186, 0x0012, 0x0040, + 0x42bc, 0xa6b5, 0x0800, 0x71b4, 0xa188, 0x00af, 0x0078, 0x42b7, + 0x6807, 0x0117, 0x2031, 0x0400, 0x692c, 0xa18c, 0x00ff, 0xa186, + 0x0012, 0x00c0, 0x4291, 0x2001, 0x42c9, 0x2009, 0x0001, 0x0078, + 0x42a2, 0xa186, 0x0003, 0x00c0, 0x429b, 0x2001, 0x42ca, 0x2009, + 0x0012, 0x0078, 0x42a2, 0x2001, 0x0200, 0x71b4, 0xa188, 0x0091, + 0x0078, 0x42ae, 0x1078, 0x46db, 0x78a3, 0x0000, 0x681c, 0xa085, + 0x0040, 0x681e, 0x71b4, 0xa188, 0x00df, 0xa006, 0x6826, 0x8007, + 0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000, 0x6822, 0x6eb6, + 0x7e5a, 0x791a, 0x0078, 0x2459, 0x6eb6, 0x1078, 0x3af8, 0x6810, + 0x70be, 0x7003, 0x0007, 0x70a3, 0x0000, 0x704b, 0x0000, 0x0078, + 0x2459, 0x0023, 0x0070, 0x0005, 0x0000, 0x0a00, 0x0000, 0x0000, + 0x0025, 0x0000, 0x0000, 0x683b, 0x0000, 0x6837, 0x0000, 0xa684, + 0x0200, 0x0040, 0x42ea, 0x78b8, 0xa08c, 0x001f, 0xa084, 0x8000, + 0x0040, 0x42e3, 0x8108, 0x78d8, 0xa100, 0x6836, 0x78dc, 0xa081, + 0x0000, 0x683a, 0x007c, 0x7990, 0x810f, 0xa5ac, 0x0007, 0x2021, + 0x0000, 0xa480, 0x0010, 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa184, + 0x0080, 0x00c0, 0x4319, 0xa182, 0x0020, 0x00c8, 0x4337, 0xa182, + 0x0012, 0x00c8, 0x467b, 0x2100, 0x1079, 0x4307, 0x007c, 0x467b, + 0x44e8, 0x467b, 0x467b, 0x4344, 0x4347, 0x4381, 0x43b7, 0x43eb, + 0x43ee, 0x467b, 0x467b, 0x43a2, 0x4412, 0x444c, 0x467b, 0x467b, + 0x4473, 0xa184, 0x0020, 0x00c0, 0x44a7, 0xa18c, 0x001f, 0x6814, + 0xa084, 0x001f, 0xa106, 0x0040, 0x4334, 0x70b4, 0xa080, 0x00d2, + 0x781a, 0x2001, 0x0014, 0x1078, 0x4691, 0x1078, 0x46ff, 0x7003, + 0x0000, 0x2001, 0x0002, 0x007c, 0x2001, 0x0000, 0x007c, 0xa182, + 0x0024, 0x00c8, 0x467b, 0xa184, 0x0003, 0x1079, 0x4307, 0x007c, + 0x467b, 0x467b, 0x467b, 0x467b, 0x1078, 0x467b, 0x007c, 0x2200, + 0x0079, 0x434a, 0x4476, 0x4476, 0x436e, 0x436e, 0x436e, 0x436e, + 0x436e, 0x436e, 0x436e, 0x436e, 0x436c, 0x436e, 0x4363, 0x436e, + 0x436e, 0x436e, 0x436e, 0x436e, 0x4376, 0x4379, 0x4476, 0x4379, + 0x436e, 0x436e, 0x436e, 0x0c7e, 0x077e, 0x6f14, 0x1078, 0x36e2, + 0x077f, 0x0c7f, 0x0078, 0x436e, 0x1078, 0x458b, 0x6827, 0x02b3, + 0x2009, 0x000b, 0x2001, 0x4800, 0x0078, 0x44aa, 0x1078, 0x4670, + 0x007c, 0x6827, 0x0093, 0x2009, 0x000b, 0x2001, 0x4800, 0x0078, + 0x4492, 0x2d58, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, + 0x438b, 0x6807, 0x0117, 0x6827, 0x0002, 0x1078, 0x4708, 0x6827, + 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078, 0x3ac8, 0x1078, + 0x44d0, 0x2b68, 0x1078, 0x3af8, 0x0d7f, 0x1078, 0x3af8, 0x2001, + 0x0002, 0x007c, 0x1078, 0x44d0, 0x2001, 0x0017, 0x1078, 0x4691, + 0x70a3, 0x0000, 0x2009, 0x5138, 0x200b, 0x0006, 0x70af, 0x0017, + 0x2009, 0x0200, 0x1078, 0x3a06, 0x2001, 0x0001, 0x007c, 0x2200, + 0x0079, 0x43ba, 0x4476, 0x44a7, 0x44a7, 0x44a7, 0x43db, 0x44b7, + 0x43e3, 0x44b7, 0x44b7, 0x44ba, 0x44ba, 0x44bf, 0x44bf, 0x43d3, + 0x43d3, 0x44a7, 0x44a7, 0x44b7, 0x44a7, 0x43e3, 0x4476, 0x43e3, + 0x43e3, 0x43e3, 0x43e3, 0x6827, 0x0084, 0x2009, 0x000b, 0x2001, + 0x4300, 0x0078, 0x44c9, 0x6827, 0x000d, 0x2009, 0x000b, 0x2001, + 0x4300, 0x0078, 0x44aa, 0x6827, 0x0093, 0x2009, 0x000b, 0x2001, + 0x4300, 0x0078, 0x4492, 0x2001, 0x0000, 0x007c, 0x2200, 0x0079, + 0x43f1, 0x4476, 0x440a, 0x440a, 0x440a, 0x440a, 0x44b7, 0x44b7, + 0x44b7, 0x44b7, 0x44b7, 0x44b7, 0x44b7, 0x44b7, 0x440a, 0x440a, + 0x440a, 0x440a, 0x44b7, 0x440a, 0x440a, 0x44b7, 0x44b7, 0x44b7, + 0x44b7, 0x4476, 0x6827, 0x0093, 0x2009, 0x000b, 0x2001, 0x4300, + 0x0078, 0x4492, 0xa684, 0x0004, 0x00c0, 0x4426, 0x6804, 0xa084, + 0x00ff, 0xa086, 0x0006, 0x00c0, 0x467b, 0x1078, 0x44d0, 0x6807, + 0x0117, 0x1078, 0x3af8, 0x2001, 0x0002, 0x007c, 0x6000, 0xa084, + 0x0004, 0x0040, 0x467b, 0x2d58, 0x6804, 0xa084, 0x00ff, 0xa086, + 0x0006, 0x00c0, 0x4435, 0x6807, 0x0117, 0x6827, 0x0002, 0x1078, + 0x4708, 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078, + 0x3ad7, 0x1078, 0x44d0, 0x2b68, 0x1078, 0x3af8, 0x0d7f, 0x1078, + 0x3af8, 0x2001, 0x0002, 0x007c, 0x6000, 0xa084, 0x0004, 0x0040, + 0x467b, 0x2d58, 0x6a04, 0xa294, 0x00ff, 0xa286, 0x0006, 0x00c0, + 0x445b, 0x6807, 0x0117, 0x6827, 0x0002, 0x2d58, 0x1078, 0x4708, + 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078, 0x3ae7, + 0x1078, 0x44d0, 0x2b68, 0x1078, 0x3af8, 0x0d7f, 0x1078, 0x3af8, + 0x2001, 0x0002, 0x007c, 0x1078, 0x467b, 0x007c, 0x70b4, 0xa080, + 0x00d2, 0x781a, 0x2001, 0x0001, 0x1078, 0x4691, 0x1078, 0x46ff, + 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x1078, 0x46c1, 0x1078, + 0x46f8, 0x1078, 0x42d3, 0x1078, 0x41d0, 0x1078, 0x46ff, 0x2001, + 0x0001, 0x007c, 0x1078, 0x46c1, 0x1078, 0x46f8, 0x1078, 0x42d3, + 0x70b4, 0xa080, 0x00d2, 0x781a, 0x2001, 0x0013, 0x1078, 0x4691, + 0x1078, 0x46ff, 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x1078, + 0x467b, 0x007c, 0x1078, 0x46c1, 0x1078, 0x46f8, 0x1078, 0x42d3, + 0x1078, 0x41d0, 0x1078, 0x46ff, 0x2001, 0x0001, 0x007c, 0x2001, + 0x0003, 0x007c, 0x1078, 0x458b, 0x2001, 0x0000, 0x007c, 0x0c7e, + 0x077e, 0x6f14, 0x1078, 0x36e2, 0x077f, 0x0c7f, 0x2001, 0x0000, + 0x007c, 0x1078, 0x46c1, 0x1078, 0x467b, 0x2001, 0x0006, 0x007c, + 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x44db, 0xa186, + 0x000f, 0x00c0, 0x44df, 0x1078, 0x46f8, 0x1078, 0x42d3, 0x70b4, + 0xa080, 0x00d2, 0x781a, 0x1078, 0x46ff, 0x7003, 0x0000, 0x007c, + 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, + 0x00c8, 0x467b, 0x1079, 0x44f5, 0x007c, 0x467b, 0x44f9, 0x467b, + 0x4592, 0xa282, 0x0003, 0x0040, 0x4500, 0x1078, 0x467b, 0x007c, + 0x7da8, 0xa5ac, 0x00ff, 0x7ca8, 0xa4a4, 0x00ff, 0x69b8, 0xa184, + 0x0100, 0x0040, 0x453f, 0xa18c, 0xfeff, 0x69ba, 0x78a0, 0xa005, + 0x00c0, 0x453f, 0xa4a4, 0x00ff, 0x0040, 0x4533, 0xa482, 0x000c, + 0x0040, 0x451c, 0x00c8, 0x4526, 0x852b, 0x852b, 0x1078, 0x3760, + 0x0040, 0x4526, 0x1078, 0x355b, 0x0078, 0x4535, 0x1078, 0x465d, + 0x1078, 0x3586, 0x69b8, 0xa18d, 0x0100, 0x69ba, 0xa6b5, 0x1000, + 0x7e5a, 0x0078, 0x4538, 0x1078, 0x3586, 0xa6b4, 0xefff, 0x7e5a, + 0x70b4, 0xa080, 0x0091, 0x781a, 0x2001, 0x0001, 0x007c, 0x0c7e, + 0x1078, 0x457f, 0x6200, 0xd2e4, 0x0040, 0x4570, 0x6208, 0x8217, + 0xa294, 0x00ff, 0xa282, 0x000c, 0x0048, 0x4552, 0x0040, 0x4552, + 0x2011, 0x000c, 0x2400, 0xa202, 0x00c8, 0x4557, 0x2220, 0x6208, + 0xa294, 0x00ff, 0x701c, 0xa202, 0x00c8, 0x455f, 0x721c, 0x2200, + 0xa502, 0x00c8, 0x4564, 0x2228, 0x1078, 0x4661, 0x852b, 0x852b, + 0x1078, 0x3760, 0x0040, 0x4570, 0x1078, 0x3562, 0x0078, 0x4574, + 0x1078, 0x465d, 0x1078, 0x358d, 0xa6b5, 0x1000, 0x7e5a, 0x70b4, + 0xa080, 0x00be, 0x781a, 0x2001, 0x0004, 0x0c7f, 0x007c, 0x007e, + 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e0, + 0x5380, 0x007f, 0x007c, 0x0c7e, 0x1078, 0x457f, 0x1078, 0x358d, + 0x0c7f, 0x007c, 0xa282, 0x0002, 0x00c0, 0x467b, 0x7aa8, 0xa294, + 0x00ff, 0x69b8, 0xa184, 0x0200, 0x0040, 0x45c9, 0xa18c, 0xfdff, + 0x69ba, 0x78a0, 0xa005, 0x00c0, 0x45c9, 0xa282, 0x0002, 0x00c8, + 0x369d, 0x1078, 0x4627, 0x1078, 0x362b, 0x1078, 0x3586, 0xa684, + 0x0100, 0x0040, 0x45bf, 0x682c, 0xa084, 0x0001, 0x0040, 0x45bf, + 0xc6fc, 0x7888, 0xa084, 0x0040, 0x0040, 0x45bf, 0xc6fd, 0xa6b5, + 0x1000, 0x7e5a, 0x70b4, 0xa080, 0x0091, 0x781a, 0x2001, 0x0001, + 0x007c, 0x0c7e, 0x1078, 0x457f, 0xa284, 0xfffe, 0x0040, 0x45d4, + 0x2011, 0x0001, 0x0078, 0x45d8, 0xa284, 0x0001, 0x0040, 0x45de, + 0x6100, 0xd1ec, 0x00c0, 0x45de, 0x2011, 0x0000, 0x1078, 0x4619, + 0x1078, 0x3632, 0x1078, 0x358d, 0xa684, 0x0100, 0x0040, 0x45f4, + 0x682c, 0xa084, 0x0001, 0x0040, 0x45f4, 0xc6fc, 0x7888, 0xa084, + 0x0040, 0x0040, 0x45f4, 0xc6fd, 0xa6b5, 0x1000, 0x7e5a, 0x70b4, + 0xa080, 0x00be, 0x781a, 0x2001, 0x0004, 0x0c7f, 0x007c, 0x0c7e, + 0x2960, 0x6000, 0x2011, 0x0001, 0xa084, 0x2000, 0x00c0, 0x460a, + 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, + 0x7aaa, 0xa8c0, 0x0004, 0x68b8, 0xa085, 0x0200, 0x68ba, 0x0c7f, + 0x007c, 0x789b, 0x0018, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, + 0x0003, 0x7aaa, 0x789b, 0x0081, 0x78ab, 0x0004, 0x007c, 0x0c7e, + 0x7054, 0x2060, 0x6000, 0xa084, 0x1000, 0x00c0, 0x4635, 0x2029, + 0x0032, 0x2021, 0x0000, 0x0078, 0x4655, 0x6508, 0xa5ac, 0x00ff, + 0x7018, 0xa086, 0x0028, 0x00c0, 0x4645, 0xa582, 0x0019, 0x00c8, + 0x464b, 0x2029, 0x0019, 0x0078, 0x464b, 0xa582, 0x000c, 0x00c8, + 0x464b, 0x2029, 0x000c, 0x6408, 0x8427, 0xa4a4, 0x00ff, 0xa482, + 0x000c, 0x0048, 0x4655, 0x2021, 0x000c, 0x1078, 0x4661, 0x68b8, + 0xa085, 0x0100, 0x68ba, 0x0c7f, 0x007c, 0x2021, 0x0000, 0x2029, + 0x0032, 0x789b, 0x0018, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, + 0x0001, 0x7daa, 0x7caa, 0x789b, 0x0081, 0x78ab, 0x0005, 0x007c, + 0x2001, 0x0003, 0x1078, 0x4689, 0x70b4, 0xa080, 0x00be, 0x781a, + 0x2001, 0x0005, 0x007c, 0x2001, 0x0007, 0x1078, 0x4689, 0xa6b5, + 0x1000, 0x7e5a, 0x70b4, 0xa080, 0x00be, 0x781a, 0x2001, 0x0004, + 0x007c, 0x789b, 0x0018, 0x78aa, 0x789b, 0x0081, 0x78ab, 0x0001, + 0x007c, 0x6904, 0xa18c, 0x00ff, 0xa196, 0x0007, 0x0040, 0x469f, + 0xa196, 0x000f, 0x0040, 0x469f, 0x1078, 0x195a, 0x007c, 0x6924, + 0xa194, 0x003f, 0x00c0, 0x46a8, 0xa18c, 0xffc0, 0xa105, 0x6826, + 0x1078, 0x3af8, 0x691c, 0xa184, 0x0100, 0x0040, 0x46b5, 0x6914, + 0x1078, 0x3b69, 0x6204, 0x8210, 0x6206, 0x007c, 0x692c, 0x6834, + 0x682e, 0xa112, 0x6930, 0x6838, 0x6832, 0xa11b, 0xa200, 0xa301, + 0x007c, 0x0c7e, 0xade0, 0x0018, 0x6003, 0x0070, 0x6106, 0x600b, + 0x0000, 0x600f, 0x0a00, 0x6013, 0x0000, 0x6017, 0x0000, 0x8007, + 0x601a, 0x601f, 0x0000, 0x6023, 0x0000, 0x0c7f, 0x6824, 0xa085, + 0x0080, 0x6826, 0x007c, 0x157e, 0x137e, 0x147e, 0x2098, 0xaf80, + 0x002d, 0x20a0, 0x81ac, 0x0040, 0x46e6, 0x53a6, 0xa184, 0x0001, + 0x0040, 0x46ec, 0x3304, 0x78be, 0x147f, 0x137f, 0x157f, 0x007c, + 0x70b0, 0xa005, 0x10c0, 0x23eb, 0x70b3, 0x8000, 0x0078, 0x4a3a, + 0x71b0, 0x81ff, 0x0040, 0x46fe, 0x1078, 0x4b30, 0x007c, 0x71b0, + 0x81ff, 0x0040, 0x4707, 0x70b3, 0x0000, 0x1078, 0x4776, 0x007c, + 0x0c7e, 0x0d7e, 0x1078, 0x1937, 0x0c7f, 0x157e, 0x137e, 0x147e, + 0x2da0, 0x2c98, 0x20a9, 0x0031, 0x53a3, 0x147f, 0x137f, 0x157f, + 0x6807, 0x010d, 0x680b, 0x0000, 0x7004, 0x8007, 0x681a, 0x6823, + 0x0000, 0x681f, 0x0000, 0x689f, 0x0000, 0x0c7f, 0x007c, 0x70b4, + 0xa080, 0x0091, 0x781a, 0x0078, 0x2459, 0x70b4, 0xa080, 0x0081, + 0x781a, 0x0078, 0x2459, 0x70b4, 0xa080, 0x00be, 0x781a, 0x0078, + 0x2459, 0x70b4, 0xa080, 0x00c8, 0x781a, 0x0078, 0x2459, 0x6904, + 0xa18c, 0x00ff, 0xa196, 0x0007, 0x0040, 0x474c, 0xa196, 0x000f, + 0x0040, 0x474c, 0x6807, 0x0117, 0x2001, 0x0200, 0x6826, 0x8007, + 0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000, 0x6822, 0x2031, + 0x0400, 0x6eb6, 0x7e5a, 0x71b4, 0xa188, 0x0091, 0x791a, 0x007c, + 0x1078, 0x46ff, 0x7848, 0xa085, 0x000c, 0x784a, 0x70b4, 0xa080, + 0x00d2, 0x781a, 0x2009, 0x000b, 0x2001, 0x4400, 0x1078, 0x46c1, + 0x2001, 0x0013, 0x1078, 0x4691, 0x0078, 0x3b96, 0x127e, 0x2091, + 0x2200, 0x2049, 0x4776, 0x7000, 0x7204, 0xa205, 0x720c, 0xa215, + 0x7008, 0xa084, 0xfff7, 0xa205, 0x0040, 0x4788, 0x0078, 0x478d, + 0x7003, 0x0000, 0x127f, 0x2000, 0x007c, 0x7000, 0xa084, 0x0001, + 0x00c0, 0x47bb, 0x7108, 0x8103, 0x00c8, 0x479a, 0x1078, 0x48bd, + 0x0078, 0x4792, 0x700c, 0xa08c, 0x00ff, 0x0040, 0x47bb, 0x7004, + 0x8004, 0x00c8, 0x47b2, 0x7014, 0xa005, 0x00c0, 0x47ae, 0x7010, + 0xa005, 0x0040, 0x47b2, 0xa102, 0x00c8, 0x4792, 0x7007, 0x0010, + 0x0078, 0x47bb, 0x8aff, 0x0040, 0x47bb, 0x1078, 0x4b07, 0x00c0, + 0x47b5, 0x0040, 0x4792, 0x1078, 0x4846, 0x7003, 0x0000, 0x127f, + 0x2000, 0x007c, 0x017e, 0x6104, 0xa18c, 0x00ff, 0xa186, 0x0007, + 0x0040, 0x47ce, 0xa18e, 0x000f, 0x00c0, 0x47d1, 0x6040, 0x0078, + 0x47d2, 0x6428, 0x017f, 0x84ff, 0x0040, 0x47fc, 0x2c70, 0x7004, + 0xa0bc, 0x000f, 0xa7b8, 0x480c, 0x273c, 0x87fb, 0x00c0, 0x47ea, + 0x0048, 0x47e4, 0x1078, 0x23eb, 0x609c, 0xa075, 0x0040, 0x47fc, + 0x0078, 0x47d7, 0x2704, 0xae68, 0x6808, 0xa630, 0x680c, 0xa529, + 0x8421, 0x0040, 0x47fc, 0x8738, 0x2704, 0xa005, 0x00c0, 0x47eb, + 0x709c, 0xa075, 0x00c0, 0x47d7, 0x007c, 0x0000, 0x0005, 0x0009, + 0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, 0x0003, 0x0009, + 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x4801, 0x47fe, 0x0000, + 0x0000, 0x8000, 0x0000, 0x4801, 0x0000, 0x4809, 0x4806, 0x0000, + 0x0000, 0x0000, 0x0000, 0x4809, 0x0000, 0x4804, 0x4804, 0x0000, + 0x0000, 0x8000, 0x0000, 0x4804, 0x0000, 0x480a, 0x480a, 0x0000, + 0x0000, 0x0000, 0x0000, 0x480a, 0x127e, 0x2091, 0x2200, 0x2079, + 0x5100, 0x2071, 0x0010, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, + 0x0000, 0x2071, 0x0020, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, + 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c, 0x2049, 0x4846, + 0x2019, 0x0000, 0x7004, 0x8004, 0x00c8, 0x4899, 0x7007, 0x0012, + 0x7108, 0x7008, 0xa106, 0x00c0, 0x4850, 0xa184, 0x01e0, 0x0040, + 0x485b, 0x1078, 0x23eb, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, + 0x00c8, 0x4866, 0xa184, 0x4000, 0x00c0, 0x4850, 0xa19c, 0x300c, + 0xa386, 0x2004, 0x0040, 0x4874, 0xa386, 0x0008, 0x0040, 0x487f, + 0xa386, 0x200c, 0x00c0, 0x4850, 0x7200, 0x8204, 0x0048, 0x487f, + 0x730c, 0xa384, 0x00ff, 0x0040, 0x487f, 0x1078, 0x23eb, 0x7007, + 0x0012, 0x7000, 0xa084, 0x0001, 0x00c0, 0x4899, 0x7008, 0xa084, + 0x01e0, 0x00c0, 0x4899, 0x7310, 0x7014, 0xa305, 0x0040, 0x4899, + 0x710c, 0xa184, 0x0300, 0x00c0, 0x4899, 0xa184, 0x00ff, 0x00c0, + 0x4846, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xa084, 0x0008, + 0x00c0, 0x489d, 0x7007, 0x0012, 0x7108, 0x8103, 0x0048, 0x48a2, + 0x7003, 0x0000, 0x2049, 0x0000, 0x007c, 0x107e, 0x007e, 0x127e, + 0x157e, 0x2091, 0x2200, 0x7108, 0x1078, 0x48bd, 0x157f, 0x127f, + 0x2091, 0x8001, 0x007f, 0x107f, 0x007c, 0x7204, 0x7500, 0x730c, + 0xa384, 0x0300, 0x00c0, 0x48e4, 0xa184, 0x01e0, 0x00c0, 0x4908, + 0x7108, 0xa184, 0x01e0, 0x00c0, 0x4908, 0x2001, 0x04fd, 0x2004, + 0xa082, 0x0005, 0x00c8, 0x48d8, 0xa184, 0x4000, 0x00c0, 0x48c8, + 0xa184, 0x0007, 0x0079, 0x48dc, 0x48e6, 0x48f8, 0x48e4, 0x48f8, + 0x48e4, 0x4944, 0x48e4, 0x4942, 0x1078, 0x23eb, 0x7004, 0xa084, + 0x0010, 0xa085, 0x0002, 0x7006, 0x8aff, 0x00c0, 0x48f3, 0x2049, + 0x0000, 0x0078, 0x48f7, 0x1078, 0x4b07, 0x00c0, 0x48f3, 0x007c, + 0x7004, 0xa084, 0x0010, 0xa085, 0x0002, 0x7006, 0x8aff, 0x00c0, + 0x4903, 0x0078, 0x4907, 0x1078, 0x4b07, 0x00c0, 0x4903, 0x007c, + 0x7007, 0x0012, 0x7108, 0x00e0, 0x490b, 0x2091, 0x6000, 0x00e0, + 0x490f, 0x2091, 0x6000, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, + 0xa084, 0x0008, 0x00c0, 0x4917, 0x7007, 0x0012, 0x7108, 0x8103, + 0x0048, 0x491c, 0x7003, 0x0000, 0x7000, 0xa005, 0x00c0, 0x4930, + 0x7004, 0xa005, 0x00c0, 0x4930, 0x700c, 0xa005, 0x0040, 0x4932, + 0x0078, 0x4913, 0x2049, 0x0000, 0x1078, 0x3809, 0x6818, 0xa084, + 0x8000, 0x0040, 0x493d, 0x681b, 0x0002, 0x007c, 0x1078, 0x23eb, + 0x1078, 0x23eb, 0x1078, 0x49a0, 0x7210, 0x7114, 0x700c, 0xa09c, + 0x00ff, 0x2800, 0xa300, 0xa211, 0xa189, 0x0000, 0x1078, 0x49a0, + 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200, 0xa322, 0x630c, 0x2100, + 0xa31b, 0x2400, 0xa305, 0x0040, 0x4967, 0x00c8, 0x4967, 0x8412, + 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0078, 0x494e, 0x2b60, + 0x8a07, 0x007e, 0x6004, 0xa084, 0x0008, 0x0040, 0x4973, 0xa7ba, + 0x4806, 0x0078, 0x4975, 0xa7ba, 0x47fe, 0x007f, 0xa73d, 0x2c00, + 0x6886, 0x6f8a, 0x6c92, 0x6b8e, 0x7007, 0x0012, 0x1078, 0x4846, + 0x007c, 0x8738, 0x2704, 0xa005, 0x00c0, 0x4994, 0x609c, 0xa005, + 0x0040, 0x499d, 0x2060, 0x6004, 0xa084, 0x000f, 0xa080, 0x480c, + 0x203c, 0x87fb, 0x1040, 0x23eb, 0x8a51, 0x0040, 0x499c, 0x7008, + 0xa084, 0x0003, 0xa086, 0x0003, 0x007c, 0x2051, 0x0000, 0x007c, + 0x8a50, 0x8739, 0x2704, 0xa004, 0x00c0, 0x49b4, 0x6000, 0xa064, + 0x00c0, 0x49ab, 0x2d60, 0x6004, 0xa084, 0x000f, 0xa080, 0x481c, + 0x203c, 0x87fb, 0x1040, 0x23eb, 0x007c, 0x127e, 0x0d7e, 0x2091, + 0x2200, 0x0d7f, 0x6884, 0x2060, 0x6888, 0x6b8c, 0x6c90, 0x8057, + 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x007e, 0x6804, 0xa084, 0x0008, + 0x007f, 0x0040, 0x49cf, 0xa0b8, 0x4806, 0x0078, 0x49d1, 0xa0b8, + 0x47fe, 0x7e08, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186, + 0x0007, 0x0040, 0x49df, 0xa18e, 0x000f, 0x00c0, 0x49e8, 0x681c, + 0xa084, 0x0040, 0x0040, 0x49ef, 0xa6b5, 0x0001, 0x0078, 0x49ef, + 0x681c, 0xa084, 0x0040, 0x0040, 0x49ef, 0xa6b5, 0x0001, 0x7007, + 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x49f1, 0x2400, 0xa305, + 0x00c0, 0x49fc, 0x0078, 0x4a22, 0x2c58, 0x2704, 0x6104, 0xac60, + 0x6000, 0xa400, 0x701a, 0x6004, 0xa301, 0x701e, 0xa184, 0x0008, + 0x0040, 0x4a12, 0x6010, 0xa081, 0x0000, 0x7022, 0x6014, 0xa081, + 0x0000, 0x7026, 0x6208, 0x2400, 0xa202, 0x7012, 0x620c, 0x2300, + 0xa203, 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x1078, 0x4981, + 0x0078, 0x4a24, 0x1078, 0x4b07, 0x00c0, 0x4a22, 0x127f, 0x2000, + 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x7007, 0x0004, + 0x7004, 0xa084, 0x0004, 0x00c0, 0x4a30, 0x7003, 0x0008, 0x127f, + 0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x2049, + 0x4a3a, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x4a43, + 0x7e08, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, + 0x0040, 0x4a56, 0xa18e, 0x000f, 0x00c0, 0x4a61, 0x681c, 0xa084, + 0x0040, 0x0040, 0x4a5d, 0xa6b5, 0x0001, 0x6840, 0x2050, 0x0078, + 0x4a6a, 0x681c, 0xa084, 0x0020, 0x00c0, 0x4a68, 0xa6b5, 0x0001, + 0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x480c, + 0x273c, 0x87fb, 0x00c0, 0x4a7e, 0x0048, 0x4a78, 0x1078, 0x23eb, + 0x689c, 0xa065, 0x0040, 0x4a82, 0x0078, 0x4a6b, 0x1078, 0x4b07, + 0x00c0, 0x4a7e, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e, 0x017e, + 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x037f, 0x047f, 0x7e08, 0xa6b5, + 0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4a9c, + 0xa18e, 0x000f, 0x00c0, 0x4aa5, 0x681c, 0xa084, 0x0040, 0x0040, + 0x4aac, 0xa6b5, 0x0001, 0x0078, 0x4aac, 0x681c, 0xa084, 0x0040, + 0x0040, 0x4aac, 0xa6b5, 0x0001, 0x2049, 0x4a85, 0x017e, 0x6904, + 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4aba, 0xa18e, 0x000f, + 0x00c0, 0x4abd, 0x6840, 0x0078, 0x4abe, 0x6828, 0x017f, 0xa055, + 0x0040, 0x4b04, 0x2d70, 0x2e60, 0x7004, 0xa0bc, 0x000f, 0xa7b8, + 0x480c, 0x273c, 0x87fb, 0x00c0, 0x4ad8, 0x0048, 0x4ad1, 0x1078, + 0x23eb, 0x709c, 0xa075, 0x2060, 0x0040, 0x4b04, 0x0078, 0x4ac4, + 0x2704, 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0048, 0x4af1, + 0x8a51, 0x00c0, 0x4ae5, 0x1078, 0x23eb, 0x8738, 0x2704, 0xa005, + 0x00c0, 0x4ad9, 0x709c, 0xa075, 0x2060, 0x0040, 0x4b04, 0x0078, + 0x4ac4, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, 0x6908, 0x2400, + 0xa122, 0x690c, 0x2300, 0xa11b, 0x00c8, 0x4b00, 0x1078, 0x23eb, + 0x2071, 0x0020, 0x0078, 0x49ef, 0x127f, 0x2000, 0x007c, 0x7008, + 0xa084, 0x0003, 0xa086, 0x0003, 0x0040, 0x4b2f, 0x2704, 0xac08, + 0x2104, 0x701a, 0x8108, 0x2104, 0x701e, 0x8108, 0x2104, 0x7012, + 0x8108, 0x2104, 0x7016, 0x6004, 0xa084, 0x0008, 0x0040, 0x4b26, + 0x8108, 0x2104, 0x7022, 0x8108, 0x2104, 0x7026, 0x7602, 0x7004, + 0xa084, 0x0010, 0xa085, 0x0001, 0x7006, 0x1078, 0x4981, 0x007c, + 0x127e, 0x007e, 0x0d7e, 0x2091, 0x2200, 0x2049, 0x4b30, 0x0d7f, + 0x087f, 0x7108, 0xa184, 0x0003, 0x00c0, 0x4b5a, 0x017e, 0x6904, + 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4b4a, 0xa18e, 0x000f, + 0x00c0, 0x4b4d, 0x6840, 0x0078, 0x4b4e, 0x6828, 0x017f, 0xa005, + 0x0040, 0x4b68, 0x0078, 0x478d, 0x0020, 0x4b5a, 0x1078, 0x4944, + 0x0078, 0x4b68, 0x00a0, 0x4b61, 0x7108, 0x1078, 0x48bd, 0x0078, + 0x4b39, 0x7007, 0x0010, 0x00a0, 0x4b63, 0x7108, 0x1078, 0x48bd, + 0x7008, 0xa086, 0x0008, 0x00c0, 0x4b39, 0x7000, 0xa005, 0x00c0, + 0x4b39, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c, + 0x127e, 0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, 0x2091, 0x2200, + 0x0d7f, 0x2049, 0x4b78, 0xad80, 0x0011, 0x20a0, 0x2099, 0x0031, + 0x700c, 0xa084, 0x00ff, 0x682a, 0x7007, 0x0008, 0x7007, 0x0002, + 0x7003, 0x0001, 0x0040, 0x4b97, 0x8000, 0x80ac, 0x53a5, 0x7007, + 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x4b99, 0x0c7f, 0x2049, + 0x0000, 0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f, 0x2000, + 0x007c, 0x2091, 0x6000, 0x2091, 0x8000, 0x78cc, 0xa005, 0x0040, + 0x4bc0, 0x7994, 0x70d0, 0xa106, 0x00c0, 0x4bc0, 0x7804, 0xa005, + 0x0040, 0x4bc0, 0x7807, 0x0000, 0x0068, 0x4bc0, 0x2091, 0x4080, + 0x7820, 0x8001, 0x7822, 0x00c0, 0x4c1b, 0x7824, 0x7822, 0x2069, + 0x5140, 0x6800, 0xa084, 0x0007, 0x0040, 0x4bde, 0xa086, 0x0002, + 0x0040, 0x4bde, 0x6834, 0xa00d, 0x0040, 0x4bde, 0x2104, 0xa005, + 0x0040, 0x4bde, 0x8001, 0x200a, 0x0040, 0x4cc3, 0x7848, 0xa005, + 0x0040, 0x4bec, 0x8001, 0x784a, 0x00c0, 0x4bec, 0x2009, 0x0102, + 0x6844, 0x200a, 0x1078, 0x21d2, 0x6890, 0xa005, 0x0040, 0x4bf8, + 0x8001, 0x6892, 0x00c0, 0x4bf8, 0x686f, 0x0000, 0x6873, 0x0001, + 0x2061, 0x5400, 0x20a9, 0x0100, 0x2009, 0x0002, 0x6034, 0xa005, + 0x0040, 0x4c0e, 0x8001, 0x6036, 0x00c0, 0x4c0e, 0x6010, 0xa005, + 0x0040, 0x4c0e, 0x017e, 0x1078, 0x21d2, 0x017f, 0xace0, 0x0010, + 0x0070, 0x4c14, 0x0078, 0x4bfe, 0x8109, 0x0040, 0x4c1b, 0x20a9, + 0x0100, 0x0078, 0x4bfe, 0x1078, 0x4c28, 0x1078, 0x4c4d, 0x2009, + 0x5151, 0x2104, 0x2009, 0x0102, 0x200a, 0x2091, 0x8001, 0x007c, + 0x7834, 0x8001, 0x7836, 0x00c0, 0x4c4c, 0x7838, 0x7836, 0x2091, + 0x8000, 0x7844, 0xa005, 0x00c0, 0x4c37, 0x2001, 0x0101, 0x8001, + 0x7846, 0xa080, 0x7400, 0x2040, 0x2004, 0xa065, 0x0040, 0x4c4c, + 0x6024, 0xa005, 0x0040, 0x4c48, 0x8001, 0x6026, 0x0040, 0x4c7c, + 0x6000, 0x2c40, 0x0078, 0x4c3d, 0x007c, 0x7828, 0x8001, 0x782a, + 0x00c0, 0x4c7b, 0x782c, 0x782a, 0x7830, 0xa005, 0x00c0, 0x4c5a, + 0x2001, 0x0200, 0x8001, 0x7832, 0x8003, 0x8003, 0x8003, 0x8003, + 0xa090, 0x5400, 0xa298, 0x0002, 0x2304, 0xa084, 0x0008, 0x0040, + 0x4c7b, 0xa290, 0x0009, 0x2204, 0xa005, 0x0040, 0x4c73, 0x8001, + 0x2012, 0x00c0, 0x4c7b, 0x2304, 0xa084, 0xfff7, 0xa085, 0x0080, + 0x201a, 0x1078, 0x21d2, 0x007c, 0x2069, 0x5140, 0x6800, 0xa005, + 0x0040, 0x4c86, 0x6848, 0xac06, 0x0040, 0x4cc3, 0x601b, 0x0006, + 0x60b4, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, + 0x0060, 0x6022, 0x6000, 0x2042, 0x6714, 0x6f82, 0x1078, 0x1973, + 0x6818, 0xa005, 0x0040, 0x4c9e, 0x8001, 0x681a, 0x6808, 0xa084, + 0xffef, 0x680a, 0x6810, 0x8001, 0x00d0, 0x4ca8, 0x1078, 0x23eb, + 0x6812, 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x1078, 0x1c70, + 0x2069, 0x5140, 0x7944, 0xa184, 0x0100, 0x2001, 0x0006, 0x686e, + 0x00c0, 0x4cbe, 0x6986, 0x2001, 0x0004, 0x686e, 0x1078, 0x21cd, + 0x2091, 0x8001, 0x007c, 0x2069, 0x0100, 0x2009, 0x5140, 0x2104, + 0xa084, 0x0007, 0x0040, 0x4d1f, 0xa086, 0x0007, 0x00c0, 0x4cd9, + 0x0d7e, 0x2009, 0x5152, 0x216c, 0x1078, 0x3a4e, 0x0d7f, 0x0078, + 0x4d1f, 0x2009, 0x5152, 0x2164, 0x1078, 0x2396, 0x601b, 0x0006, + 0x6858, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, + 0x0048, 0x6022, 0x602f, 0x0000, 0x6033, 0x0000, 0x6830, 0xa084, + 0x0040, 0x0040, 0x4d13, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, + 0xa084, 0x0004, 0x0040, 0x4d00, 0x0070, 0x4d00, 0x0078, 0x4cf7, + 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, 0x0040, + 0x4d0d, 0x0070, 0x4d0d, 0x0078, 0x4d04, 0x20a9, 0x00fa, 0x0070, + 0x4d13, 0x0078, 0x4d0f, 0x6808, 0xa084, 0xfffd, 0x680a, 0x681b, + 0x0048, 0x2009, 0x515b, 0x200b, 0x0007, 0x784c, 0x784a, 0x2091, + 0x8001, 0x007c, 0x2079, 0x5100, 0x1078, 0x4d4d, 0x1078, 0x4d31, + 0x1078, 0x4d3f, 0x7833, 0x0000, 0x7847, 0x0000, 0x784b, 0x0000, + 0x007c, 0x2019, 0x0003, 0x2011, 0x5146, 0x2204, 0xa086, 0x003c, + 0x0040, 0x4d3c, 0x2019, 0x0002, 0x7b2a, 0x7b2e, 0x007c, 0x2019, + 0x0039, 0x2011, 0x5146, 0x2204, 0xa086, 0x003c, 0x0040, 0x4d4a, + 0x2019, 0x0027, 0x7b36, 0x7b3a, 0x007c, 0x2019, 0x3971, 0x2011, + 0x5146, 0x2204, 0xa086, 0x003c, 0x0040, 0x4d58, 0x2019, 0x2626, + 0x7b22, 0x7b26, 0x783f, 0x0000, 0x7843, 0x000a, 0x007c, 0x0020, + 0x002b, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0014, 0x0014, 0x9849, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0080, 0x000f, 0x0000, 0x0201, + 0x0604, 0x0c08, 0x2120, 0x4022, 0xf880, 0x0018, 0x300b, 0xa201, + 0x0014, 0xa200, 0x0014, 0xa200, 0x0214, 0x0000, 0x006c, 0x0002, + 0x0014, 0x98d0, 0x009e, 0x0096, 0xa202, 0x8838, 0x3806, 0x8839, + 0x20c3, 0x0864, 0x9884, 0x28c1, 0x9cb1, 0xa203, 0x300c, 0x2846, + 0x8161, 0x846a, 0x8300, 0x1856, 0x883a, 0x9865, 0x28f2, 0x9c90, + 0x9858, 0x300c, 0x28e1, 0x9c90, 0x2802, 0xa206, 0x64c3, 0x282d, + 0xa207, 0x64a0, 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7824, 0x68c1, + 0x7864, 0x883e, 0x9878, 0x8576, 0x8677, 0x206b, 0x28c1, 0x9cb1, + 0x2044, 0x2103, 0x20a2, 0x2081, 0x9865, 0xa209, 0x2901, 0x988c, + 0x0014, 0xa205, 0xa300, 0x1872, 0x879a, 0x883c, 0x1fe2, 0xc601, + 0xa20a, 0x856e, 0x0704, 0x9c90, 0x0014, 0xa204, 0xa300, 0x3009, + 0x19e2, 0xf868, 0x8176, 0x86eb, 0x85eb, 0x872e, 0x87a9, 0x883f, + 0x08e6, 0x9890, 0xf881, 0x988b, 0xc801, 0x0014, 0xf8c1, 0x0016, + 0x85b2, 0x80f0, 0x9532, 0xfb02, 0x1de2, 0x0014, 0x8532, 0xf241, + 0x0014, 0x1de2, 0x84a8, 0xd7a0, 0x1fe6, 0x0014, 0xa208, 0x6043, + 0x8008, 0x1dc1, 0x0016, 0x8300, 0x8160, 0x842a, 0xf041, 0x3008, + 0x84a8, 0x11d6, 0x7042, 0x20dd, 0x0011, 0x20d5, 0x8822, 0x0016, + 0x8000, 0x2847, 0x1011, 0x98c3, 0x8000, 0xa000, 0x2802, 0x1011, + 0x98c9, 0x9865, 0x283e, 0x1011, 0x98cd, 0xa20b, 0x0017, 0x300c, + 0xa300, 0x1de2, 0xdb81, 0x0014, 0x0210, 0x98da, 0x0014, 0x26e0, + 0x873a, 0xfb02, 0x19f2, 0x1fe2, 0x0014, 0xa20d, 0x3806, 0x0210, + 0x9cb6, 0x0704, 0x0000, 0x006c, 0x0002, 0x984f, 0x0014, 0x009e, + 0x00a5, 0x0017, 0x60ff, 0x300c, 0x8720, 0xa211, 0x9cd5, 0x8772, + 0x8837, 0x2101, 0x987a, 0x10d2, 0x78e2, 0x9cd8, 0x9859, 0xd984, + 0xf0e2, 0xf0a1, 0x98d2, 0x0014, 0x8831, 0xd166, 0x8830, 0x800f, + 0x9401, 0xb520, 0xc802, 0x8820, 0x987a, 0x2301, 0x987a, 0x10d2, + 0x78e4, 0x9cd8, 0x8821, 0x8820, 0x9859, 0xf123, 0xf142, 0xf101, + 0x98cb, 0x10d2, 0x70f6, 0x8832, 0x8203, 0x870c, 0xd99e, 0x6001, + 0x0014, 0x6845, 0x0214, 0xa21b, 0x9cd5, 0x2001, 0x98ca, 0x8201, + 0x1852, 0xd184, 0xd163, 0x8834, 0x8001, 0x988d, 0x3027, 0x84a8, + 0x1a56, 0x8833, 0x0014, 0xa218, 0x6981, 0x9cc1, 0x692a, 0x6902, + 0x1834, 0x989d, 0x1a14, 0x8010, 0x8592, 0x8026, 0x84b9, 0x7021, + 0x0014, 0xa300, 0x69e1, 0x9caa, 0x694c, 0xa213, 0x9cba, 0x1462, + 0xa213, 0x8000, 0x16e1, 0x98b4, 0x8023, 0x16e1, 0x8001, 0x10f1, + 0x0016, 0x6968, 0xa214, 0x9cba, 0x8004, 0x16e1, 0x0101, 0x300a, + 0x8827, 0x0014, 0x9cba, 0x0014, 0x61c2, 0x8002, 0x14e1, 0x0016, + 0xa217, 0x9cc1, 0x0014, 0xa300, 0x8181, 0x842a, 0x84a8, 0x1ce6, + 0x882c, 0x0016, 0xa212, 0x9cd5, 0x10d2, 0x70e4, 0x0004, 0x8007, + 0x9424, 0xcc1a, 0x9cd8, 0x98ca, 0x8827, 0x300a, 0x0013, 0x8000, + 0x84a4, 0x0016, 0x11c2, 0x211e, 0x870e, 0xa21d, 0x0014, 0x878e, + 0x0016, 0xa21c, 0x1035, 0x9891, 0xa210, 0xa000, 0x8010, 0x8592, + 0x853b, 0xd044, 0x8022, 0x3807, 0x84bb, 0x98ef, 0x8021, 0x3807, + 0x84b9, 0x300c, 0x817e, 0x872b, 0x8772, 0x9891, 0x0000, 0x0020, + 0x002b, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0014, 0x0014, 0x9849, 0x0014, 0x0014, 0x98e5, + 0x98d0, 0x0014, 0x0014, 0x0014, 0x0080, 0x013f, 0x0000, 0x0201, + 0x0604, 0x0c08, 0x2120, 0x4022, 0xf880, 0x0018, 0x300b, 0xa201, + 0x0014, 0xa200, 0x0014, 0xa200, 0x0214, 0xa202, 0x8838, 0x3806, + 0x8839, 0x20c3, 0x0864, 0xa82e, 0x28c1, 0x9cb1, 0xa203, 0x300c, + 0x2846, 0x8161, 0x846a, 0x8300, 0x1856, 0x883a, 0xa804, 0x28f2, + 0x9c90, 0xa8f4, 0x300c, 0x28e1, 0x9c90, 0x2802, 0xa206, 0x64c3, + 0x282d, 0xa207, 0x64a0, 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7824, + 0x68c1, 0x7864, 0x883e, 0xa802, 0x8576, 0x8677, 0x206b, 0x28c1, + 0x9cb1, 0x2044, 0x2103, 0x20a2, 0x2081, 0xa8e5, 0xa209, 0x2901, + 0xa809, 0x0014, 0xa205, 0xa300, 0x1872, 0x879a, 0x883c, 0x1fe2, + 0xc601, 0xa20a, 0x856e, 0x0704, 0x9c90, 0x0014, 0xa204, 0xa300, + 0x3009, 0x19e2, 0xf868, 0x8176, 0x86eb, 0x85eb, 0x872e, 0x87a9, + 0x883f, 0x08e6, 0xa8f3, 0xf881, 0xa8ec, 0xc801, 0x0014, 0xf8c1, + 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfb02, 0x1de2, 0x0014, 0x8532, + 0xf241, 0x0014, 0x1de2, 0x84a8, 0xd7a0, 0x1fe6, 0x0014, 0xa208, + 0x6043, 0x8008, 0x1dc1, 0x0016, 0x8300, 0x8160, 0x842a, 0xf041, + 0x3008, 0x84a8, 0x11d6, 0x7042, 0x20dd, 0x0011, 0x20d5, 0x8822, + 0x0016, 0x8000, 0x2847, 0x1011, 0xa8fc, 0x8000, 0xa000, 0x2802, + 0x1011, 0xa8fd, 0xa898, 0x283e, 0x1011, 0xa8fd, 0xa20b, 0x0017, + 0x300c, 0xa300, 0x1de2, 0xdb81, 0x0014, 0x0210, 0xa801, 0x0014, + 0x26e0, 0x873a, 0xfb02, 0x19f2, 0x1fe2, 0x0014, 0xa20d, 0x3806, + 0x0210, 0x9cb6, 0x0704, 0x0017, 0x60ff, 0x300c, 0x8720, 0xa211, + 0x9d6b, 0x8772, 0x8837, 0x2101, 0xa821, 0x10d2, 0x78e2, 0x9d6e, + 0xa8fc, 0xd984, 0xf0e2, 0xf0a1, 0xa871, 0x0014, 0x8831, 0xd166, + 0x8830, 0x800f, 0x9401, 0xb520, 0xc802, 0x8820, 0xa80f, 0x2301, + 0xa80d, 0x10d2, 0x78e4, 0x9d6e, 0x8821, 0x8820, 0xa8e6, 0xf123, + 0xf142, 0xf101, 0xa854, 0x10d2, 0x70f6, 0x8832, 0x8203, 0x870c, + 0xd99e, 0x6001, 0x0014, 0x6845, 0x0214, 0xa21b, 0x9d6b, 0x2001, + 0xa845, 0x8201, 0x1852, 0xd184, 0xd163, 0x8834, 0x8001, 0xa801, + 0x3027, 0x84a8, 0x1a56, 0x8833, 0x0014, 0xa218, 0x6981, 0x9d57, + 0x692a, 0x6902, 0x1834, 0xa805, 0x1a14, 0x8010, 0x8592, 0x8026, + 0x84b9, 0x7021, 0x0014, 0xa300, 0x69e1, 0x9d40, 0x694c, 0xa213, + 0x9d50, 0x1462, 0xa213, 0x8000, 0x16e1, 0xa80a, 0x8023, 0x16e1, + 0x8001, 0x10f1, 0x0016, 0x6968, 0xa214, 0x9d50, 0x8004, 0x16e1, + 0x0101, 0x300a, 0x8827, 0x0014, 0x9d50, 0x0014, 0x61c2, 0x8002, + 0x14e1, 0x0016, 0xa217, 0x9d57, 0x0014, 0xa300, 0x8181, 0x842a, + 0x84a8, 0x1ce6, 0x882c, 0x0016, 0xa212, 0x9d6b, 0x10d2, 0x70e4, + 0x0004, 0x8007, 0x9424, 0xcc1a, 0x9d6e, 0xa8f8, 0x8827, 0x300a, + 0x0013, 0x8000, 0x84a4, 0x0016, 0x11c2, 0x211e, 0x870e, 0xa21d, + 0x0014, 0x878e, 0x0016, 0xa21c, 0x1035, 0xa8af, 0xa210, 0x3807, + 0x300c, 0x817e, 0x872b, 0x8772, 0xa8a8, 0x0000, 0xdf21 +}; diff --git a/sys/dev/ispfw/asm_1080.h b/sys/dev/ispfw/asm_1080.h new file mode 100644 index 000000000000..7a2899d577a5 --- /dev/null +++ b/sys/dev/ispfw/asm_1080.h @@ -0,0 +1,4425 @@ +/* $FreeBSD$ */ +/* + * Copyright (C) 1995, 1996, 1997, 1998, 1999 Qlogic, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted provided + * that the following conditions are met: + * 1. Redistribution of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistribution in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/************************************************************************ + * * + * --- ISP1240/ISP1080/ISP1280 Initiator Firmware --- * + * 32 LUN Support * + * * + ************************************************************************/ +/* + * Firmware Version 8.13.00 (17:25 Nov 09, 1999) + */ +static const u_int16_t isp_1080_risc_code[] = { + 0x0078, 0x1041, 0x0000, 0x3c42, 0x0000, 0x2043, 0x4f50, 0x5952, + 0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932, 0x2c31, + 0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749, 0x4320, + 0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049, 0x5350, + 0x3132, 0x3430, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056, + 0x6572, 0x7369, 0x6f6e, 0x2030, 0x382e, 0x3133, 0x2020, 0x2043, + 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, 0x3030, 0x2050, + 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, 0x3030, 0x2020, + 0x2400, 0x20c9, 0x96ff, 0x2001, 0x04fc, 0x2004, 0xa086, 0x1080, + 0x00c0, 0x1054, 0x2071, 0x0100, 0x70a0, 0x70a2, 0x20c1, 0x0010, + 0x2089, 0x1374, 0x0078, 0x106d, 0x2001, 0x04fc, 0x2004, 0xa086, + 0x1280, 0x00c0, 0x1069, 0x2071, 0x0200, 0x70a0, 0x70a2, 0x2071, + 0x0100, 0x70a0, 0x70a2, 0x20c1, 0x0010, 0x2089, 0x13f8, 0x0078, + 0x106d, 0x20c1, 0x0020, 0x2089, 0x131c, 0x2071, 0x0010, 0x70c3, + 0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, + 0x0008, 0x2001, 0x04fe, 0x70d6, 0x20c1, 0x0021, 0x2019, 0x0000, + 0x2009, 0xfeff, 0x2100, 0x200b, 0xa5a5, 0xa1ec, 0x7fff, 0x2d64, + 0x206b, 0x0a0a, 0xaddc, 0x3fff, 0x2b54, 0x205b, 0x5050, 0x2114, + 0xa286, 0xa5a5, 0x0040, 0x10a4, 0xa386, 0x000f, 0x0040, 0x10a0, + 0x2c6a, 0x2a5a, 0x20c1, 0x0020, 0x2019, 0x000f, 0x0078, 0x1080, + 0x2c6a, 0x2a5a, 0x0078, 0x10a2, 0x2c6a, 0x2a5a, 0x2130, 0x2128, + 0xa1a2, 0x4d00, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, + 0xa192, 0x9700, 0x2009, 0x0000, 0x2001, 0x0032, 0x1078, 0x2061, + 0x2218, 0x2079, 0x4d00, 0x2fa0, 0x2408, 0x2011, 0x0000, 0x20a9, + 0x0040, 0x42a4, 0x8109, 0x00c0, 0x10bf, 0x2009, 0xff00, 0x3400, + 0xa102, 0x0048, 0x10cf, 0x0040, 0x10cf, 0x20a8, 0x42a4, 0x2001, + 0x04fc, 0x2004, 0xa086, 0x1080, 0x00c0, 0x10e5, 0x2071, 0x0100, + 0x0d7e, 0x2069, 0x4d40, 0x1078, 0x4c09, 0x0d7f, 0x7810, 0xc0ed, + 0x7812, 0x781b, 0x0064, 0x0078, 0x110a, 0x2001, 0x04fc, 0x2004, + 0xa086, 0x1280, 0x00c0, 0x1105, 0x7814, 0xc0ed, 0xc0d5, 0x7816, + 0x781b, 0x0064, 0x2071, 0x0200, 0x0d7e, 0x2069, 0x4d40, 0x1078, + 0x4c09, 0x2069, 0x4d80, 0x2071, 0x0100, 0x1078, 0x4c09, 0x7814, + 0xc0d4, 0x7816, 0x0d7f, 0x0078, 0x110a, 0x7814, 0xc0e5, 0x7816, + 0x781b, 0x003c, 0x7eca, 0x7cc2, 0x7bc6, 0x7867, 0x0000, 0x7800, + 0xc08d, 0x7802, 0x2031, 0x0030, 0x78af, 0x0101, 0x7823, 0x0002, + 0x7827, 0x0002, 0x2009, 0x0002, 0x2069, 0x4d40, 0x681b, 0x0003, + 0x6823, 0x0007, 0x6827, 0x00fa, 0x682b, 0x0008, 0x682f, 0x0028, + 0x6837, 0x0000, 0x683b, 0x0006, 0x6833, 0x0008, 0x683f, 0x0000, + 0x8109, 0x0040, 0x115e, 0x68d3, 0x000a, 0x68c3, 0x4dc0, 0x2079, + 0x4d00, 0x7814, 0xd0e4, 0x00c0, 0x1144, 0xd0ec, 0x00c0, 0x1148, + 0x68d7, 0x7329, 0x0078, 0x114a, 0x68d7, 0x730d, 0x0078, 0x114a, + 0x68d7, 0x732d, 0x68c7, 0x52c0, 0x68cb, 0x51c0, 0x68cf, 0x92c0, + 0x68ab, 0x9544, 0x68af, 0x9549, 0x68b3, 0x9544, 0x68b7, 0x9544, + 0x68a7, 0x0001, 0x2069, 0x4d80, 0x0078, 0x111e, 0x68d3, 0x000a, + 0x68c3, 0x4fc0, 0x7814, 0xd0e4, 0x00c0, 0x116a, 0x68d7, 0x7439, + 0x0078, 0x116c, 0x68d7, 0x7419, 0x68c7, 0x72c0, 0x68cb, 0x5240, + 0x68cf, 0x93d0, 0x68ab, 0x9549, 0x68af, 0x954e, 0x68b3, 0x9549, + 0x68b7, 0x9549, 0x68a7, 0x0001, 0x7810, 0xd0ec, 0x00c0, 0x11c2, + 0x7814, 0xd0e4, 0x00c0, 0x11b4, 0x0e7e, 0x2069, 0x51c0, 0x2071, + 0x0200, 0x70ec, 0xd0e4, 0x00c0, 0x1195, 0x2019, 0x0c0c, 0x2021, + 0x000c, 0x1078, 0x1ff0, 0x0078, 0x119b, 0x2019, 0x0c0a, 0x2021, + 0x000a, 0x1078, 0x1ff0, 0x2069, 0x5240, 0x2071, 0x0100, 0x70ec, + 0xd0e4, 0x00c0, 0x11ab, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x1078, + 0x1ff0, 0x0078, 0x11b1, 0x2019, 0x0c0a, 0x2021, 0x000a, 0x1078, + 0x1ff0, 0x0e7f, 0x0078, 0x11db, 0x2019, 0x0c0c, 0x2021, 0x000c, + 0x2069, 0x51c0, 0x1078, 0x1ff0, 0x2069, 0x5240, 0x1078, 0x1ff0, + 0x0078, 0x11db, 0x2069, 0x51c0, 0x0e7e, 0x2071, 0x0100, 0x70ec, + 0xd0e4, 0x00c0, 0x11d4, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x1078, + 0x1ff0, 0x0e7f, 0x0078, 0x11db, 0x2019, 0x0c0a, 0x2021, 0x000a, + 0x1078, 0x1ff0, 0x0e7f, 0x2011, 0x0002, 0x2069, 0x52c0, 0x2009, + 0x0002, 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b, 0x0040, 0x7bc8, + 0xa386, 0xfeff, 0x00c0, 0x11f2, 0x6817, 0x0100, 0x681f, 0x0064, + 0x0078, 0x11f6, 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010, + 0x00f0, 0x11e3, 0x8109, 0x00c0, 0x11e1, 0x8211, 0x0040, 0x1204, + 0x2069, 0x72c0, 0x0078, 0x11df, 0x1078, 0x261d, 0x1078, 0x45d4, + 0x1078, 0x1dbb, 0x1078, 0x4bb2, 0x2091, 0x2100, 0x2079, 0x4d00, + 0x7810, 0xd0ec, 0x0040, 0x1218, 0x2071, 0x0020, 0x0078, 0x121a, + 0x2071, 0x0050, 0x2091, 0x2200, 0x2079, 0x4d00, 0x2071, 0x0020, + 0x2091, 0x2300, 0x2079, 0x4d00, 0x7810, 0xd0ec, 0x0040, 0x122c, + 0x2079, 0x0100, 0x0078, 0x122e, 0x2079, 0x0200, 0x2071, 0x4d40, + 0x2091, 0x2400, 0x2079, 0x0100, 0x2071, 0x4d80, 0x2091, 0x2000, + 0x2079, 0x4d00, 0x2071, 0x0010, 0x3200, 0xa085, 0x303d, 0x2090, + 0x2071, 0x0010, 0x70c3, 0x0000, 0x0090, 0x124d, 0x70c0, 0xa086, + 0x0002, 0x00c0, 0x124d, 0x1078, 0x15ba, 0x2039, 0x0000, 0x7810, + 0xd0ec, 0x00c0, 0x12cf, 0x1078, 0x148e, 0x78ac, 0xa005, 0x00c0, + 0x126b, 0x0068, 0x1261, 0x786c, 0xa065, 0x0040, 0x1261, 0x1078, + 0x2356, 0x1078, 0x2088, 0x0068, 0x1278, 0x786c, 0xa065, 0x0040, + 0x126b, 0x1078, 0x2356, 0x0068, 0x1278, 0x2009, 0x4d47, 0x2011, + 0x4d87, 0x2104, 0x220c, 0xa105, 0x0040, 0x1278, 0x1078, 0x1ef1, + 0x2071, 0x4d40, 0x70a4, 0xa005, 0x0040, 0x129d, 0x7450, 0xa485, + 0x0000, 0x0040, 0x129d, 0x2079, 0x0200, 0x2091, 0x8000, 0x72d4, + 0xa28c, 0x303d, 0x2190, 0x1078, 0x2b0b, 0x2091, 0x8000, 0x2091, + 0x303d, 0x0068, 0x129d, 0x2079, 0x4d00, 0x786c, 0xa065, 0x0040, + 0x129d, 0x2071, 0x0010, 0x1078, 0x2356, 0x00e0, 0x12a5, 0x2079, + 0x4d00, 0x2071, 0x0010, 0x1078, 0x498b, 0x2071, 0x4d80, 0x70a4, + 0xa005, 0x0040, 0x12bd, 0x7050, 0xa025, 0x0040, 0x12bd, 0x2079, + 0x0100, 0x2091, 0x8000, 0x72d4, 0xa28c, 0x303d, 0x2190, 0x1078, + 0x2b0b, 0x2091, 0x8000, 0x2091, 0x303d, 0x2079, 0x4d00, 0x2071, + 0x0010, 0x0068, 0x12c9, 0x786c, 0xa065, 0x0040, 0x12c9, 0x1078, + 0x2356, 0x00e0, 0x1253, 0x1078, 0x498b, 0x0078, 0x1253, 0x1078, + 0x148e, 0x78ac, 0xa005, 0x00c0, 0x12e7, 0x0068, 0x12dd, 0x786c, + 0xa065, 0x0040, 0x12dd, 0x1078, 0x2356, 0x1078, 0x2088, 0x0068, + 0x12f1, 0x786c, 0xa065, 0x0040, 0x12e7, 0x1078, 0x2356, 0x0068, + 0x12f1, 0x2009, 0x4d47, 0x2104, 0xa005, 0x0040, 0x12f1, 0x1078, + 0x1ef1, 0x2071, 0x4d40, 0x70a4, 0xa005, 0x0040, 0x130c, 0x7450, + 0xa485, 0x0000, 0x0040, 0x130c, 0x2079, 0x0100, 0x2091, 0x8000, + 0x72d4, 0xa28c, 0x303d, 0x2190, 0x1078, 0x2b0b, 0x2091, 0x8000, + 0x2091, 0x303d, 0x2079, 0x4d00, 0x2071, 0x0010, 0x0068, 0x1316, + 0x786c, 0xa065, 0x0040, 0x1316, 0x1078, 0x2356, 0x00e0, 0x12cf, + 0x1078, 0x498b, 0x0078, 0x12cf, 0x133c, 0x133c, 0x133e, 0x133e, + 0x134b, 0x134b, 0x134b, 0x134b, 0x1356, 0x1356, 0x1363, 0x1363, + 0x134b, 0x134b, 0x134b, 0x134b, 0x133c, 0x133c, 0x133e, 0x133e, + 0x134b, 0x134b, 0x134b, 0x134b, 0x1356, 0x1356, 0x1363, 0x1363, + 0x134b, 0x134b, 0x134b, 0x134b, 0x0078, 0x133c, 0x007e, 0x107e, + 0x127e, 0x2091, 0x2400, 0x1078, 0x292b, 0x127f, 0x107f, 0x007f, + 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x1078, 0x13c8, + 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, + 0x127e, 0x2091, 0x2300, 0x1078, 0x292b, 0x127f, 0x107f, 0x007f, + 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, + 0x1078, 0x292b, 0x2091, 0x2400, 0x1078, 0x292b, 0x127f, 0x107f, + 0x007f, 0x2091, 0x8001, 0x007c, 0x1394, 0x1394, 0x1396, 0x1396, + 0x13a3, 0x13a3, 0x13a3, 0x13a3, 0x13ae, 0x13ae, 0x1396, 0x1396, + 0x13a3, 0x13a3, 0x13a3, 0x13a3, 0x13af, 0x13af, 0x13af, 0x13af, + 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, + 0x13af, 0x13af, 0x13af, 0x13af, 0x0078, 0x1394, 0x007e, 0x107e, + 0x127e, 0x2091, 0x2300, 0x1078, 0x292b, 0x127f, 0x107f, 0x007f, + 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x1078, 0x13d5, + 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007c, 0x107e, + 0x127e, 0x0d7e, 0x0e7e, 0x0f7e, 0x007e, 0x2071, 0x0100, 0x2069, + 0x4d40, 0x2079, 0x4d00, 0x70ec, 0xa084, 0x1c00, 0x78e2, 0x1078, + 0x4c09, 0x007f, 0x0f7f, 0x0e7f, 0x0d7f, 0x127f, 0x107f, 0x007c, + 0x3c00, 0xa084, 0x0007, 0x0079, 0x13cd, 0x13de, 0x13de, 0x13e0, + 0x13e0, 0x13e5, 0x13e5, 0x13ea, 0x13ea, 0x3c00, 0xa084, 0x0003, + 0x0079, 0x13da, 0x13de, 0x13de, 0x13f3, 0x13f3, 0x1078, 0x290c, + 0x2091, 0x2200, 0x1078, 0x46ae, 0x007c, 0x2091, 0x2100, 0x1078, + 0x46ae, 0x007c, 0x2091, 0x2100, 0x1078, 0x46ae, 0x2091, 0x2200, + 0x1078, 0x46ae, 0x007c, 0x2091, 0x2100, 0x1078, 0x46ae, 0x007c, + 0x1418, 0x1418, 0x141a, 0x141a, 0x1427, 0x1427, 0x1427, 0x1427, + 0x1432, 0x1432, 0x143f, 0x143f, 0x1427, 0x1427, 0x1427, 0x1427, + 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, + 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, + 0x0078, 0x1418, 0x007e, 0x107e, 0x127e, 0x2091, 0x2400, 0x1078, + 0x292b, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, + 0x107e, 0x127e, 0x1078, 0x13c8, 0x127f, 0x107f, 0x007f, 0x2091, + 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, 0x1078, + 0x292b, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, + 0x107e, 0x127e, 0x2091, 0x2300, 0x1078, 0x292b, 0x2091, 0x2400, + 0x1078, 0x292b, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, + 0x007e, 0x107e, 0x127e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2079, 0x4d00, + 0x2071, 0x0200, 0x2069, 0x4d40, 0x3d00, 0xd08c, 0x0040, 0x1466, + 0x70ec, 0xa084, 0x1c00, 0x78e2, 0x1078, 0x4c09, 0x3d00, 0xd084, + 0x0040, 0x1474, 0x2069, 0x4d80, 0x2071, 0x0100, 0x70ec, 0xa084, + 0x1c00, 0x78e6, 0x1078, 0x4c09, 0x0f7f, 0x0e7f, 0x0d7f, 0x127f, + 0x107f, 0x007f, 0x007c, 0x7008, 0x800b, 0x00c8, 0x1489, 0x7007, + 0x0002, 0xa08c, 0x01e0, 0x00c0, 0x148a, 0xd09c, 0x0040, 0x1489, + 0x087a, 0x097a, 0x70c3, 0x4002, 0x0078, 0x15bd, 0x0068, 0x1513, + 0x2061, 0x0000, 0x6018, 0xd084, 0x00c0, 0x1513, 0x7828, 0xa005, + 0x00c0, 0x149e, 0x0010, 0x1514, 0x0078, 0x1513, 0x7910, 0xd1f4, + 0x0040, 0x14a6, 0x2001, 0x4007, 0x0078, 0x15bc, 0x7914, 0xd1ec, + 0x0040, 0x14c1, 0xd0fc, 0x0040, 0x14b7, 0x007e, 0x1078, 0x1d4b, + 0x007f, 0x0040, 0x14c1, 0x2001, 0x4007, 0x0078, 0x15bc, 0x007e, + 0x1078, 0x1d3b, 0x007f, 0x0040, 0x14c1, 0x2001, 0x4007, 0x0078, + 0x15bc, 0x7910, 0xd0fc, 0x00c0, 0x14cb, 0x2061, 0x4d40, 0xc19c, + 0xc7fc, 0x0078, 0x14cf, 0x2061, 0x4d80, 0xc19d, 0xc7fd, 0x6064, + 0xa005, 0x00c0, 0x1513, 0x7912, 0x6083, 0x0000, 0x7828, 0xc0fc, + 0xa086, 0x0018, 0x00c0, 0x14e0, 0x0c7e, 0x1078, 0x1b44, 0x0c7f, + 0x782b, 0x0000, 0x607c, 0xa065, 0x0040, 0x14f9, 0x0c7e, 0x609c, + 0x1078, 0x1e30, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1c6d, 0x2009, + 0x0018, 0x6087, 0x0103, 0x1078, 0x1d5b, 0x00c0, 0x150d, 0x1078, + 0x1dad, 0x7810, 0xd09c, 0x00c0, 0x1501, 0x2061, 0x4d40, 0x0078, + 0x1505, 0x2061, 0x4d80, 0xc09c, 0x7812, 0x607f, 0x0000, 0x60d4, + 0xd0dc, 0x0040, 0x1511, 0xc0dc, 0x60d6, 0x2001, 0x4005, 0x0078, + 0x15bc, 0x0078, 0x15ba, 0x007c, 0x7810, 0xd0f4, 0x0040, 0x151c, + 0x2001, 0x4007, 0x0078, 0x15bc, 0xa006, 0x70c2, 0x70c6, 0x70ca, + 0x70ce, 0x70da, 0x70c0, 0xa03d, 0xa08a, 0x0040, 0x00c8, 0x152a, + 0x0079, 0x1531, 0x2100, 0xa08a, 0x0040, 0x00c8, 0x15c8, 0x0079, + 0x1571, 0x15ba, 0x1610, 0x15d9, 0x1648, 0x1680, 0x1680, 0x15d0, + 0x1c85, 0x168b, 0x15c8, 0x15dd, 0x15df, 0x15e1, 0x15e3, 0x1c8a, + 0x15c8, 0x1699, 0x16f6, 0x1b64, 0x1c7f, 0x15e5, 0x19d4, 0x1a16, + 0x1a4e, 0x1a9c, 0x198f, 0x199c, 0x19b0, 0x19c3, 0x17cb, 0x15c8, + 0x172d, 0x173a, 0x1746, 0x1752, 0x1768, 0x1774, 0x1777, 0x1783, + 0x178f, 0x1797, 0x17b3, 0x17bf, 0x15c8, 0x15c8, 0x15c8, 0x15c8, + 0x17d8, 0x17ea, 0x1806, 0x183c, 0x1864, 0x1874, 0x1877, 0x18a8, + 0x18d9, 0x18eb, 0x195e, 0x196e, 0x15c8, 0x15c8, 0x15c8, 0x15c8, + 0x197e, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x1caf, 0x1cb5, + 0x15c8, 0x15c8, 0x15c8, 0x1cb9, 0x1cfe, 0x15c8, 0x15c8, 0x15c8, + 0x15c8, 0x160a, 0x167a, 0x1693, 0x16f0, 0x1b5e, 0x15c8, 0x15c8, + 0x15c8, 0x15c8, 0x1d02, 0x1ca1, 0x1cab, 0x15c8, 0x15c8, 0x15c8, + 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, + 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, + 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, + 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, + 0x15c8, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078, 0x15bc, 0x73ce, + 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0068, 0x15bd, 0x2061, + 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x007c, + 0x70c3, 0x4001, 0x0078, 0x15bd, 0x70c3, 0x4006, 0x0078, 0x15bd, + 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0078, + 0x15ba, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078, 0x15ba, 0x0078, + 0x15ba, 0x0078, 0x15ba, 0x0078, 0x15ba, 0x2091, 0x8000, 0x70c3, + 0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, + 0x0008, 0x2001, 0x000d, 0x70d6, 0x2079, 0x0000, 0x781b, 0x0001, + 0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x041a, 0x2051, 0x0445, + 0x2061, 0x0447, 0x20c1, 0x0020, 0x2091, 0x5000, 0x2091, 0x4080, + 0x0078, 0x0418, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1613, + 0x2029, 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x20a0, + 0x2099, 0x0030, 0x7003, 0x0001, 0x7007, 0x0006, 0x731a, 0x721e, + 0x7422, 0x7526, 0x2021, 0x0040, 0x81ff, 0x0040, 0x15ba, 0xa182, + 0x0040, 0x00c8, 0x162d, 0x2120, 0xa006, 0x2008, 0x8403, 0x7012, + 0x7007, 0x0004, 0x7007, 0x0001, 0x7008, 0xd0fc, 0x0040, 0x1634, + 0x7007, 0x0002, 0xa084, 0x01e0, 0x0040, 0x1642, 0x70c3, 0x4002, + 0x0078, 0x15bd, 0x24a8, 0x53a5, 0x0078, 0x1624, 0x0078, 0x15ba, + 0x2029, 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x2098, + 0x20a1, 0x0030, 0x7003, 0x0000, 0x7007, 0x0006, 0x731a, 0x721e, + 0x7422, 0x7526, 0x2021, 0x0040, 0x7007, 0x0006, 0x81ff, 0x0040, + 0x15ba, 0xa182, 0x0040, 0x00c8, 0x1667, 0x2120, 0xa006, 0x2008, + 0x8403, 0x7012, 0x24a8, 0x53a6, 0x7007, 0x0001, 0x7008, 0xd0fc, + 0x0040, 0x166e, 0xa084, 0x01e0, 0x0040, 0x165c, 0x70c3, 0x4002, + 0x0078, 0x15bd, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x164b, + 0x71c4, 0x70c8, 0x2114, 0xa79e, 0x0004, 0x00c0, 0x1688, 0x200a, + 0x72ca, 0x0078, 0x15b9, 0x70c7, 0x0008, 0x70cb, 0x000d, 0x70cf, + 0x0000, 0x0078, 0x15ba, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, + 0x169c, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0, + 0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005, 0x0040, 0x16eb, 0xa40a, + 0x0040, 0x16ac, 0x00c8, 0x15bc, 0x8001, 0x7872, 0xa084, 0xfc00, + 0x0040, 0x16b9, 0x78ac, 0xc085, 0x78ae, 0x2001, 0x4005, 0x0078, + 0x15bc, 0x7b7e, 0x7a7a, 0x7e86, 0x7d82, 0x7c76, 0xa48c, 0xff00, + 0x0040, 0x16d1, 0x8407, 0x8004, 0x8004, 0x810c, 0x810c, 0x810f, + 0xa118, 0xa291, 0x0000, 0xa6b1, 0x0000, 0xa581, 0x0000, 0x0078, + 0x16db, 0x8407, 0x8004, 0x8004, 0xa318, 0xa291, 0x0000, 0xa6b1, + 0x0000, 0xa581, 0x0000, 0x731a, 0x721e, 0x7622, 0x7026, 0xa605, + 0x0040, 0x16e5, 0x7a10, 0xc2c5, 0x7a12, 0x78ac, 0xa084, 0xfffc, + 0x78ae, 0x0078, 0x16ee, 0x78ac, 0xc085, 0x78ae, 0x0078, 0x15ba, + 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, 0x16f9, 0x2029, 0x0000, + 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce, + 0x74d6, 0xa005, 0x0040, 0x1728, 0xa40a, 0x0040, 0x1709, 0x00c8, + 0x15bc, 0x8001, 0x7892, 0xa084, 0xfc00, 0x0040, 0x1716, 0x78ac, + 0xc0c5, 0x78ae, 0x2001, 0x4005, 0x0078, 0x15bc, 0x7a9a, 0x7b9e, + 0x7da2, 0x7ea6, 0x2600, 0xa505, 0x0040, 0x1721, 0x7a10, 0xc2c5, + 0x7a12, 0x7c96, 0x78ac, 0xa084, 0xfcff, 0x78ae, 0x0078, 0x172b, + 0x78ac, 0xc0c5, 0x78ae, 0x0078, 0x15ba, 0x2009, 0x0000, 0x786c, + 0xa065, 0x0040, 0x1737, 0x8108, 0x6000, 0x0078, 0x1730, 0x7ac4, + 0x0078, 0x15b8, 0x2009, 0x4d48, 0x210c, 0x7810, 0xd0ec, 0x00c0, + 0x15b9, 0x2011, 0x4d88, 0x2214, 0x0078, 0x15b8, 0x2009, 0x4d49, + 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2011, 0x4d89, 0x2214, + 0x0078, 0x15b8, 0x2061, 0x4d40, 0x6128, 0x622c, 0x8214, 0x8214, + 0x8214, 0x7810, 0xd0ec, 0x00c0, 0x1766, 0x2061, 0x4d80, 0x6328, + 0x73da, 0x632c, 0x831c, 0x831c, 0x831c, 0x73de, 0x0078, 0x15b8, + 0x2009, 0x4d4c, 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2011, + 0x4d8c, 0x2214, 0x0078, 0x15b8, 0x7918, 0x0078, 0x15b9, 0x2009, + 0x4d4d, 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2011, 0x4d8d, + 0x2214, 0x0078, 0x15b8, 0x2009, 0x4d4e, 0x210c, 0x7810, 0xd0ec, + 0x00c0, 0x15b9, 0x2011, 0x4d8e, 0x2214, 0x0078, 0x15b8, 0x7920, + 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x7a24, 0x0078, 0x15b8, 0x71c4, + 0xd1fc, 0x00c0, 0x179f, 0x2011, 0x51c0, 0x0078, 0x17a1, 0x2011, + 0x5240, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa268, + 0x6a00, 0x6804, 0xd09c, 0x0040, 0x17b0, 0x6b08, 0x0078, 0x17b1, + 0x6b0c, 0x0078, 0x15b7, 0x77c4, 0x1078, 0x1dcb, 0x2091, 0x8000, + 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708, 0x0078, 0x15b7, 0x2061, + 0x4d40, 0x6118, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2061, 0x4d80, + 0x6218, 0x0078, 0x15b8, 0x77c4, 0x1078, 0x1dcb, 0x2091, 0x8000, + 0x6908, 0x6a18, 0x6b10, 0x77da, 0x2091, 0x8001, 0x0078, 0x15b7, + 0x71c4, 0x2110, 0xa294, 0x000f, 0xa282, 0x0010, 0x00c8, 0x15b2, + 0x1078, 0x2735, 0xa384, 0x4000, 0x0040, 0x17e8, 0xa295, 0x0020, + 0x0078, 0x15b7, 0x71c4, 0x2100, 0xc0bc, 0xa082, 0x0010, 0x00c8, + 0x15b2, 0xd1bc, 0x00c0, 0x17f9, 0x2011, 0x4d48, 0x2204, 0x0078, + 0x17fd, 0x2011, 0x4d88, 0x2204, 0xc0bd, 0x007e, 0x2100, 0xc0bc, + 0x2012, 0x1078, 0x2692, 0x017f, 0x0078, 0x15b9, 0x71c4, 0x2021, + 0x4d49, 0x2404, 0x70c6, 0x2019, 0x0000, 0x0078, 0x1815, 0x71c8, + 0x2021, 0x4d89, 0x2404, 0x70ca, 0xc3fd, 0x2011, 0x1834, 0x20a9, + 0x0008, 0x2204, 0xa106, 0x0040, 0x1824, 0x8210, 0x00f0, 0x1819, + 0x71c4, 0x72c8, 0x0078, 0x15b1, 0xa292, 0x1834, 0x027e, 0x2122, + 0x017f, 0x1078, 0x26b3, 0x7810, 0xd0ec, 0x00c0, 0x1832, 0xd3fc, + 0x0040, 0x180f, 0x0078, 0x15ba, 0x03e8, 0x00fa, 0x01f4, 0x02ee, + 0x0064, 0x0019, 0x0032, 0x004b, 0x2061, 0x4d40, 0x6128, 0x622c, + 0x8214, 0x8214, 0x8214, 0x70c4, 0x602a, 0x70c8, 0x8003, 0x8003, + 0x8003, 0x602e, 0x7810, 0xd0ec, 0x00c0, 0x1862, 0x027e, 0x017e, + 0x2061, 0x4d80, 0x6128, 0x622c, 0x8214, 0x8214, 0x8214, 0x70d8, + 0x602a, 0x70dc, 0x8003, 0x8003, 0x8003, 0x602e, 0x71da, 0x72de, + 0x017f, 0x027f, 0x0078, 0x15b8, 0x2061, 0x4d40, 0x6130, 0x70c4, + 0x6032, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2061, 0x4d80, 0x6230, + 0x70c8, 0x6032, 0x0078, 0x15b8, 0x7918, 0x0078, 0x15b9, 0x71c4, + 0xa184, 0xffcf, 0x0040, 0x1883, 0x7810, 0xd0ec, 0x00c0, 0x15b2, + 0x72c8, 0x0078, 0x15b1, 0x2011, 0x4d4d, 0x2204, 0x2112, 0x007e, + 0x2019, 0x0000, 0x1078, 0x271a, 0x7810, 0xd0ec, 0x0040, 0x1893, + 0x017f, 0x0078, 0x15b9, 0x71c8, 0xa184, 0xffcf, 0x0040, 0x189c, + 0x2110, 0x71c4, 0x0078, 0x15b1, 0x2011, 0x4d8d, 0x2204, 0x2112, + 0x007e, 0xc3fd, 0x1078, 0x271a, 0x027f, 0x017f, 0x0078, 0x15b8, + 0x71c4, 0xa182, 0x0010, 0x0048, 0x18b4, 0x7810, 0xd0ec, 0x00c0, + 0x15b2, 0x72c8, 0x0078, 0x15b1, 0x2011, 0x4d4e, 0x2204, 0x007e, + 0x2112, 0x2019, 0x0000, 0x1078, 0x26f8, 0x7810, 0xd0ec, 0x0040, + 0x18c4, 0x017f, 0x0078, 0x15b9, 0x71c8, 0xa182, 0x0010, 0x0048, + 0x18cd, 0x2110, 0x71c4, 0x0078, 0x15b1, 0x2011, 0x4d8e, 0x2204, + 0x007e, 0x2112, 0xc3fd, 0x1078, 0x26f8, 0x027f, 0x017f, 0x0078, + 0x15b8, 0x71c4, 0x72c8, 0xa184, 0xfffd, 0x00c0, 0x15b1, 0xa284, + 0xfffd, 0x00c0, 0x15b1, 0x2100, 0x7920, 0x7822, 0x2200, 0x7a24, + 0x7826, 0x0078, 0x15b8, 0x71c4, 0xd1fc, 0x00c0, 0x18f3, 0x2011, + 0x51c0, 0x0078, 0x18f5, 0x2011, 0x5240, 0x8107, 0xa084, 0x000f, + 0x8003, 0x8003, 0x8003, 0xa268, 0x2019, 0x0000, 0x72c8, 0x2091, + 0x8000, 0xa284, 0x0080, 0x0040, 0x190b, 0x6c14, 0x84ff, 0x00c0, + 0x190b, 0x6817, 0x0040, 0xa284, 0x0040, 0x0040, 0x1915, 0x6c10, + 0x84ff, 0x00c0, 0x1915, 0x6813, 0x0001, 0x6800, 0x007e, 0xa226, + 0x0040, 0x1932, 0x6a02, 0xd4ec, 0x0040, 0x191f, 0xc3a5, 0xd4e4, + 0x0040, 0x1923, 0xc39d, 0xd4f4, 0x0040, 0x1932, 0x810f, 0xd2f4, + 0x0040, 0x192e, 0x1078, 0x2777, 0x0078, 0x1932, 0x1078, 0x2755, + 0x0078, 0x1932, 0x72cc, 0x6808, 0xa206, 0x0040, 0x1954, 0xa2a4, + 0x00ff, 0x7814, 0xd0e4, 0x00c0, 0x1945, 0xa482, 0x0028, 0x0048, + 0x1951, 0x0040, 0x1951, 0x0078, 0x1949, 0xa482, 0x0043, 0x0048, + 0x1951, 0x71c4, 0x71c6, 0x027f, 0x72ca, 0x2091, 0x8001, 0x0078, + 0x15b3, 0x6a0a, 0xa39d, 0x000a, 0x6804, 0xa305, 0x6806, 0x027f, + 0x6b0c, 0x71c4, 0x2091, 0x8001, 0x0078, 0x15b7, 0x77c4, 0x1078, + 0x1dcb, 0x2091, 0x8000, 0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8, + 0x6816, 0x70cc, 0x681e, 0x2708, 0x0078, 0x15b7, 0x70c4, 0x2061, + 0x4d40, 0x6118, 0x601a, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x70c8, + 0x2061, 0x4d80, 0x6218, 0x601a, 0x0078, 0x15b8, 0x71c4, 0x72c8, + 0x73cc, 0xa182, 0x0010, 0x00c8, 0x15b2, 0x1078, 0x2799, 0xa384, + 0x4000, 0x0040, 0x198d, 0xa295, 0x0020, 0x0078, 0x15b7, 0x77c4, + 0x1078, 0x1dcb, 0x2091, 0x8000, 0x6a08, 0xc28d, 0x6a0a, 0x2091, + 0x8001, 0x2708, 0x0078, 0x15b8, 0x77c4, 0x1078, 0x1dcb, 0x2091, + 0x8000, 0x6a08, 0xa294, 0xfff9, 0x6a0a, 0x6804, 0xa005, 0x0040, + 0x19ab, 0x1078, 0x25ea, 0x2091, 0x8001, 0x2708, 0x0078, 0x15b8, + 0x77c4, 0x1078, 0x1dcb, 0x2091, 0x8000, 0x6a08, 0xc295, 0x6a0a, + 0x6804, 0xa005, 0x0040, 0x19be, 0x1078, 0x25ea, 0x2091, 0x8001, + 0x2708, 0x0078, 0x15b8, 0x77c4, 0x2041, 0x0001, 0x2049, 0x0005, + 0x2051, 0x0020, 0x2091, 0x8000, 0x1078, 0x1de6, 0x2091, 0x8001, + 0x2708, 0x6a08, 0x0078, 0x15b8, 0x77c4, 0x7814, 0xd0e4, 0x00c0, + 0x19e8, 0xd7fc, 0x0040, 0x19e2, 0x1078, 0x1d4b, 0x0040, 0x19e8, + 0x0078, 0x15bc, 0x1078, 0x1d3b, 0x0040, 0x19e8, 0x0078, 0x15bc, + 0x73c8, 0x72cc, 0x77c6, 0x73ca, 0x72ce, 0x1078, 0x1e6d, 0x00c0, + 0x1a12, 0x6818, 0xa005, 0x0040, 0x1a0c, 0x2708, 0x077e, 0x1078, + 0x27c9, 0x077f, 0x00c0, 0x1a0c, 0x2001, 0x0015, 0xd7fc, 0x00c0, + 0x1a05, 0x2061, 0x4d40, 0x0078, 0x1a08, 0xc0fd, 0x2061, 0x4d80, + 0x782a, 0x2091, 0x8001, 0x007c, 0x2091, 0x8001, 0x2001, 0x4005, + 0x0078, 0x15bc, 0x2091, 0x8001, 0x0078, 0x15ba, 0x77c4, 0x7814, + 0xd0e4, 0x00c0, 0x1a2a, 0xd7fc, 0x0040, 0x1a24, 0x1078, 0x1d4b, + 0x0040, 0x1a2a, 0x0078, 0x15bc, 0x1078, 0x1d3b, 0x0040, 0x1a2a, + 0x0078, 0x15bc, 0x77c6, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, + 0x0020, 0x2091, 0x8000, 0x1078, 0x1de6, 0x2009, 0x0016, 0xd7fc, + 0x00c0, 0x1a3e, 0x2061, 0x4d40, 0x0078, 0x1a41, 0x2061, 0x4d80, + 0xc1fd, 0x6067, 0x0003, 0x607f, 0x0000, 0x6776, 0x6083, 0x000f, + 0x792a, 0x1078, 0x25ea, 0x2091, 0x8001, 0x007c, 0x77c8, 0x77ca, + 0x77c4, 0x77c6, 0x7814, 0xd0e4, 0x00c0, 0x1a65, 0xd7fc, 0x0040, + 0x1a5f, 0x1078, 0x1d4b, 0x0040, 0x1a65, 0x0078, 0x15bc, 0x1078, + 0x1d3b, 0x0040, 0x1a65, 0x0078, 0x15bc, 0xa7bc, 0xff00, 0x2091, + 0x8000, 0x2009, 0x0017, 0xd7fc, 0x00c0, 0x1a72, 0x2061, 0x4d40, + 0x0078, 0x1a75, 0x2061, 0x4d80, 0xc1fd, 0x607f, 0x0000, 0x6067, + 0x0002, 0x6776, 0x6083, 0x000f, 0x792a, 0x1078, 0x25ea, 0x2091, + 0x8001, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0010, 0x2091, + 0x8000, 0x70c8, 0xa005, 0x0040, 0x1a90, 0x60d4, 0xc0fd, 0x60d6, + 0x1078, 0x1de6, 0x70c8, 0x6836, 0x8738, 0xa784, 0x001f, 0x00c0, + 0x1a90, 0x2091, 0x8001, 0x007c, 0x7814, 0xd0e4, 0x00c0, 0x1ab0, + 0x72c8, 0xd284, 0x0040, 0x1aaa, 0x1078, 0x1d4b, 0x0040, 0x1ab0, + 0x0078, 0x15bc, 0x1078, 0x1d3b, 0x0040, 0x1ab0, 0x0078, 0x15bc, + 0x72c8, 0x72ca, 0x78ac, 0xa084, 0x0003, 0x00c0, 0x1adb, 0x2039, + 0x0000, 0xd284, 0x0040, 0x1abd, 0xc7fd, 0x2041, 0x0021, 0x2049, + 0x0004, 0x2051, 0x0008, 0x1078, 0x1dcb, 0x2091, 0x8000, 0x6808, + 0xc0d4, 0xa80d, 0x690a, 0x2091, 0x8001, 0x8738, 0xa784, 0x001f, + 0x00c0, 0x1ac3, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, + 0x0f00, 0x00c0, 0x1ac3, 0x2091, 0x8000, 0x72c8, 0xd284, 0x00c0, + 0x1aed, 0x7810, 0xd0ec, 0x0040, 0x1ae9, 0x2069, 0x0100, 0x0078, + 0x1aef, 0x2069, 0x0200, 0x0078, 0x1aef, 0x2069, 0x0100, 0x6808, + 0xa084, 0xfffd, 0x680a, 0x6830, 0xd0b4, 0x0040, 0x1b0f, 0x684b, + 0x0004, 0x20a9, 0x0014, 0x6848, 0xd094, 0x0040, 0x1b01, 0x00f0, + 0x1afb, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xd084, 0x0040, + 0x1b0b, 0x00f0, 0x1b05, 0x20a9, 0x00fa, 0x00f0, 0x1b0d, 0x2079, + 0x4d00, 0x2009, 0x0018, 0x72c8, 0xd284, 0x00c0, 0x1b1b, 0x2061, + 0x4d40, 0x0078, 0x1b1e, 0x2061, 0x4d80, 0xc1fd, 0x792a, 0x6067, + 0x0001, 0x6083, 0x000f, 0x60a7, 0x0000, 0x60a8, 0x60b2, 0x60b6, + 0x60d4, 0xd0b4, 0x0040, 0x1b38, 0xc0b4, 0x60d6, 0x0c7e, 0x60b8, + 0xa065, 0x6008, 0xc0d4, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, + 0x60d4, 0xa084, 0x77ff, 0x60d6, 0x78ac, 0xc08d, 0x78ae, 0x681b, + 0x0047, 0x2091, 0x8001, 0x007c, 0xd7fc, 0x00c0, 0x1b4b, 0x2069, + 0x4d40, 0x0078, 0x1b4d, 0x2069, 0x4d80, 0x71c4, 0x71c6, 0x6916, + 0x81ff, 0x00c0, 0x1b55, 0x68a7, 0x0001, 0x78ac, 0xc08c, 0x78ae, + 0xd084, 0x00c0, 0x1b5d, 0x1078, 0x1ecd, 0x007c, 0x75d8, 0x74dc, + 0x75da, 0x74de, 0x0078, 0x1b67, 0x2029, 0x0000, 0x2520, 0x71c4, + 0x73c8, 0x72cc, 0x71c6, 0x73ca, 0x72ce, 0x2079, 0x4d00, 0x7dde, + 0x7cda, 0x7bd6, 0x7ad2, 0x1078, 0x1da4, 0x0040, 0x1c69, 0x20a9, + 0x0005, 0x20a1, 0x4d14, 0x2091, 0x8000, 0x41a1, 0x2091, 0x8001, + 0x2009, 0x0040, 0x1078, 0x1fb8, 0x0040, 0x1b8a, 0x1078, 0x1dad, + 0x0078, 0x1c69, 0x6004, 0xa08c, 0x00ff, 0xa18e, 0x0009, 0x00c0, + 0x1b95, 0x007e, 0x1078, 0x2339, 0x007f, 0xa084, 0xff00, 0x8007, + 0x8009, 0x0040, 0x1c09, 0x0c7e, 0x2c68, 0x1078, 0x1da4, 0x0040, + 0x1bdb, 0x2c00, 0x689e, 0x8109, 0x00c0, 0x1b9c, 0x609f, 0x0000, + 0x0c7f, 0x0c7e, 0x7ddc, 0x7cd8, 0x7bd4, 0x7ad0, 0xa290, 0x0040, + 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x7dde, 0x7cda, + 0x7bd6, 0x7ad2, 0x2c68, 0x689c, 0xa065, 0x0040, 0x1c08, 0x2009, + 0x0040, 0x1078, 0x1fb8, 0x00c0, 0x1bf2, 0x6004, 0xa084, 0x00ff, + 0xa086, 0x0002, 0x00c0, 0x1bdb, 0x6004, 0xa084, 0x00ff, 0xa086, + 0x000a, 0x00c0, 0x1bd7, 0x017e, 0x1078, 0x2335, 0x017f, 0x2d00, + 0x6002, 0x0078, 0x1baa, 0x0c7f, 0x0c7e, 0x609c, 0x1078, 0x1e30, + 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1c6d, 0x2009, 0x0018, 0x6008, + 0xc0cd, 0x600a, 0x6004, 0x6086, 0x1078, 0x1d5b, 0x1078, 0x1dad, + 0x0078, 0x1c69, 0x0c7f, 0x0c7e, 0x609c, 0x1078, 0x1e30, 0x0c7f, + 0x609f, 0x0000, 0x1078, 0x1c6d, 0x2009, 0x0018, 0x6087, 0x0103, + 0x601b, 0x0003, 0x1078, 0x1d5b, 0x1078, 0x1dad, 0x0078, 0x1c69, + 0x0c7f, 0x7814, 0xd0e4, 0x00c0, 0x1c2e, 0x6114, 0xd1fc, 0x0040, + 0x1c17, 0x1078, 0x1d4b, 0x0040, 0x1c2e, 0x0078, 0x1c1b, 0x1078, + 0x1d3b, 0x0040, 0x1c2e, 0x2029, 0x0000, 0x2520, 0x2009, 0x0018, + 0x73c8, 0x72cc, 0x6087, 0x0103, 0x601b, 0x0021, 0x1078, 0x1d5b, + 0x1078, 0x1dad, 0x2001, 0x4007, 0x0078, 0x15bc, 0x74c4, 0x73c8, + 0x72cc, 0x6014, 0x2091, 0x8000, 0x0e7e, 0x2009, 0x0012, 0xd0fc, + 0x00c0, 0x1c3e, 0x2071, 0x4d40, 0x0078, 0x1c41, 0x2071, 0x4d80, + 0xc1fd, 0x792a, 0x7067, 0x0005, 0x71d4, 0xc1dc, 0x71d6, 0x736a, + 0x726e, 0x7472, 0x7076, 0x707b, 0x0000, 0x2c00, 0x707e, 0xa02e, + 0x2530, 0x611c, 0xa184, 0x0060, 0x0040, 0x1c58, 0x1078, 0x4578, + 0x0e7f, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3, + 0x0000, 0x6714, 0x6023, 0x0000, 0x1078, 0x25ea, 0x2091, 0x8001, + 0x007c, 0x70c3, 0x4005, 0x0078, 0x15bd, 0x20a9, 0x0005, 0x2099, + 0x4d14, 0x2091, 0x8000, 0x530a, 0x2091, 0x8001, 0x2100, 0xa210, + 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c, 0x71c4, + 0x70c7, 0x0000, 0x791e, 0x0078, 0x15ba, 0x71c4, 0x71c6, 0x2168, + 0x0078, 0x1c8c, 0x2069, 0x1000, 0x690c, 0xa016, 0x2d04, 0xa210, + 0x8d68, 0x8109, 0x00c0, 0x1c8e, 0xa285, 0x0000, 0x00c0, 0x1c9c, + 0x70c3, 0x4000, 0x0078, 0x1c9e, 0x70c3, 0x4003, 0x70ca, 0x0078, + 0x15bd, 0x7964, 0x71c6, 0x71c4, 0xa182, 0x0003, 0x00c8, 0x15b2, + 0x7966, 0x0078, 0x15ba, 0x7964, 0x71c6, 0x0078, 0x15ba, 0x7900, + 0x71c6, 0x71c4, 0x7902, 0x0078, 0x15ba, 0x7900, 0x71c6, 0x0078, + 0x15ba, 0x70c4, 0x2011, 0x0000, 0xa08c, 0x000d, 0x0040, 0x1cce, + 0x810c, 0x0048, 0x1cca, 0x8210, 0x810c, 0x810c, 0x0048, 0x1cca, + 0x8210, 0x810c, 0x81ff, 0x00c0, 0x15b3, 0x8210, 0x7a0e, 0xd28c, + 0x0040, 0x1cfa, 0x7910, 0xc1cd, 0x7912, 0x2009, 0x0021, 0x2019, + 0x0003, 0xd284, 0x0040, 0x1cf4, 0x8108, 0x2019, 0x0041, 0x2011, + 0x954e, 0x2312, 0x2019, 0x0042, 0x8210, 0x2312, 0x2019, 0x0043, + 0x8210, 0x2312, 0x2019, 0x0046, 0x8210, 0x2312, 0x2019, 0x0047, + 0x8210, 0x2312, 0x2019, 0x0006, 0x2011, 0x9553, 0x2112, 0x2011, + 0x9573, 0x2312, 0x7904, 0x7806, 0x0078, 0x15b9, 0x7804, 0x70c6, + 0x0078, 0x15ba, 0x71c4, 0xd1fc, 0x00c0, 0x1d0a, 0x2011, 0x51c0, + 0x0078, 0x1d0c, 0x2011, 0x5240, 0x8107, 0xa084, 0x000f, 0x8003, + 0x8003, 0x8003, 0xa268, 0x6a14, 0xd2b4, 0x0040, 0x1d1b, 0x2011, + 0x0001, 0x0078, 0x1d1d, 0x2011, 0x0000, 0x6b0c, 0x0078, 0x15b7, + 0x017e, 0x7814, 0xd0f4, 0x0040, 0x1d2d, 0x2001, 0x4007, 0x70db, + 0x0000, 0xa18d, 0x0001, 0x0078, 0x1d39, 0xd0fc, 0x0040, 0x1d38, + 0x2001, 0x4007, 0x70db, 0x0001, 0xa18d, 0x0001, 0x0078, 0x1d39, + 0xa006, 0x017f, 0x007c, 0x017e, 0x7814, 0xd0f4, 0x0040, 0x1d48, + 0x2001, 0x4007, 0x70db, 0x0000, 0xa18d, 0x0001, 0x0078, 0x1d49, + 0xa006, 0x017f, 0x007c, 0x017e, 0x7814, 0xd0fc, 0x0040, 0x1d58, + 0x2001, 0x4007, 0x70db, 0x0001, 0xa18d, 0x0001, 0x0078, 0x1d59, + 0xa006, 0x017f, 0x007c, 0x7112, 0x721a, 0x731e, 0x7810, 0xd0c4, + 0x0040, 0x1d64, 0x7422, 0x7526, 0xac80, 0x0001, 0x8108, 0x810c, + 0x81a9, 0x8098, 0x20a1, 0x0030, 0x7003, 0x0000, 0x6084, 0x20a2, + 0x53a6, 0x7007, 0x0001, 0x7974, 0xa184, 0xff00, 0x0040, 0x1d81, + 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0078, + 0x1d84, 0x8107, 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78, 0xa006, + 0xa211, 0x7d10, 0xd5c4, 0x0040, 0x1d91, 0x7b84, 0xa319, 0x7c80, + 0xa421, 0x7008, 0xd0fc, 0x0040, 0x1d91, 0x7003, 0x0001, 0x7007, + 0x0006, 0x711a, 0x721e, 0x7d10, 0xd5c4, 0x0040, 0x1da1, 0x7322, + 0x7426, 0xa084, 0x01e0, 0x007c, 0x7848, 0xa065, 0x0040, 0x1dac, + 0x2c04, 0x784a, 0x2063, 0x0000, 0x007c, 0x0f7e, 0x2079, 0x4d00, + 0x7848, 0x2062, 0x2c00, 0xa005, 0x00c0, 0x1db8, 0x1078, 0x290c, + 0x784a, 0x0f7f, 0x007c, 0x2011, 0x9700, 0x7a4a, 0x7bc4, 0x8319, + 0x0040, 0x1dc8, 0xa280, 0x0032, 0x2012, 0x2010, 0x0078, 0x1dbf, + 0x2013, 0x0000, 0x007c, 0x017e, 0x027e, 0xd7fc, 0x00c0, 0x1dd4, + 0x2011, 0x52c0, 0x0078, 0x1dd6, 0x2011, 0x72c0, 0xa784, 0x0f00, + 0x800b, 0xa784, 0x001f, 0x0040, 0x1de1, 0x8003, 0x8003, 0x8003, + 0x8003, 0xa105, 0xa268, 0x027f, 0x017f, 0x007c, 0x1078, 0x1dcb, + 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, 0xf9ef, 0xa80d, + 0x690a, 0x0e7e, 0xd7fc, 0x00c0, 0x1dfb, 0x2009, 0x4d53, 0x2071, + 0x4d40, 0x0078, 0x1dff, 0x2009, 0x4d93, 0x2071, 0x4d80, 0x210c, + 0x6804, 0xa005, 0x0040, 0x1e0f, 0xa116, 0x00c0, 0x1e0f, 0x2060, + 0x6000, 0x6806, 0x017e, 0x200b, 0x0000, 0x0078, 0x1e12, 0x2009, + 0x0000, 0x017e, 0x6804, 0xa065, 0x0040, 0x1e27, 0x6000, 0x6806, + 0x1078, 0x1e42, 0x1078, 0x2004, 0x6810, 0x7908, 0x8109, 0x790a, + 0x8001, 0x6812, 0x00c0, 0x1e12, 0x7910, 0xc1a5, 0x7912, 0x017f, + 0x6902, 0x6906, 0x2d00, 0x2060, 0x1078, 0x2a6d, 0x0e7f, 0x007c, + 0xa065, 0x0040, 0x1e41, 0x2008, 0x609c, 0xa005, 0x0040, 0x1e3e, + 0x2062, 0x609f, 0x0000, 0xa065, 0x0078, 0x1e34, 0x7848, 0x794a, + 0x2062, 0x007c, 0x6007, 0x0103, 0x608f, 0x0000, 0x20a9, 0x001c, + 0xac80, 0x0005, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828, 0x601a, + 0x682c, 0x6022, 0x007c, 0x0e7e, 0xd7fc, 0x00c0, 0x1e5d, 0x2071, + 0x4d40, 0x2031, 0x4dc0, 0x0078, 0x1e61, 0x2071, 0x4d80, 0x2031, + 0x4fc0, 0x7050, 0xa08c, 0x0200, 0x00c0, 0x1e6b, 0xa608, 0x2d0a, + 0x8000, 0x7052, 0xa006, 0x0e7f, 0x007c, 0x0f7e, 0xd7fc, 0x00c0, + 0x1e75, 0x2079, 0x4d40, 0x0078, 0x1e77, 0x2079, 0x4d80, 0x1078, + 0x1dcb, 0x2091, 0x8000, 0x6804, 0x780a, 0xa065, 0x0040, 0x1ecb, + 0x0078, 0x1e89, 0x2c00, 0x780a, 0x2060, 0x6000, 0xa065, 0x0040, + 0x1ecb, 0x6010, 0xa306, 0x00c0, 0x1e82, 0x600c, 0xa206, 0x00c0, + 0x1e82, 0x2c28, 0x784c, 0xac06, 0x00c0, 0x1e98, 0x0078, 0x1ec8, + 0x6804, 0xac06, 0x00c0, 0x1ea6, 0x6000, 0x2060, 0x6806, 0xa005, + 0x00c0, 0x1ea6, 0x6803, 0x0000, 0x0078, 0x1eb0, 0x6400, 0x7808, + 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x1eb0, 0x2c00, 0x6802, + 0x2560, 0x0f7f, 0x1078, 0x1e42, 0x0f7e, 0x601b, 0x0005, 0x6023, + 0x0020, 0x0f7f, 0x1078, 0x2004, 0x0f7e, 0x7908, 0x8109, 0x790a, + 0x6810, 0x8001, 0x6812, 0x00c0, 0x1ec8, 0x7810, 0xc0a5, 0x7812, + 0x2001, 0xffff, 0xa005, 0x0f7f, 0x007c, 0x077e, 0x2700, 0x2039, + 0x0000, 0xd0fc, 0x0040, 0x1ed5, 0xc7fd, 0x2041, 0x0021, 0x2049, + 0x0004, 0x2051, 0x0008, 0x2091, 0x8000, 0x1078, 0x1de6, 0x8738, + 0xa784, 0x001f, 0x00c0, 0x1edd, 0xa7bc, 0xff00, 0x873f, 0x8738, + 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1edd, 0x2091, 0x8001, 0x077f, + 0x007c, 0x786c, 0x2009, 0x9574, 0x210c, 0xa10d, 0x0040, 0x1efb, + 0xa065, 0x0078, 0x2356, 0x2061, 0x0000, 0x6018, 0xd084, 0x00c0, + 0x1f1b, 0x7810, 0xd08c, 0x0040, 0x1f0c, 0xc08c, 0x7812, 0xc7fc, + 0x2069, 0x4d40, 0x0078, 0x1f11, 0xc08d, 0x7812, 0x2069, 0x4d80, + 0xc7fd, 0x2091, 0x8000, 0x681c, 0x681f, 0x0000, 0x2091, 0x8001, + 0xa005, 0x00c0, 0x1f1c, 0x007c, 0xa08c, 0xfff0, 0x0040, 0x1f22, + 0x1078, 0x290c, 0x0079, 0x1f24, 0x1f34, 0x1f37, 0x1f3d, 0x1f41, + 0x1f35, 0x1f45, 0x1f35, 0x1f35, 0x1f35, 0x1f4b, 0x1f7c, 0x1f80, + 0x1f86, 0x1f9b, 0x1f35, 0x1f35, 0x007c, 0x1078, 0x290c, 0x1078, + 0x1ecd, 0x2001, 0x8001, 0x0078, 0x1fa7, 0x2001, 0x8003, 0x0078, + 0x1fa7, 0x2001, 0x8004, 0x0078, 0x1fa7, 0x1078, 0x1ecd, 0x2001, + 0x8006, 0x0078, 0x1fa7, 0x2091, 0x8000, 0x077e, 0xd7fc, 0x00c0, + 0x1f57, 0x2069, 0x4d40, 0x2039, 0x0009, 0x0078, 0x1f5b, 0x2069, + 0x4d80, 0x2039, 0x0009, 0x6800, 0xa086, 0x0000, 0x0040, 0x1f65, + 0x007f, 0x6f1e, 0x2091, 0x8001, 0x007c, 0x6874, 0x077f, 0xa0bc, + 0xff00, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, 0x1078, + 0x1de6, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1f6f, 0x2091, 0x8001, + 0x2001, 0x800a, 0x0078, 0x1fa7, 0x2001, 0x800c, 0x0078, 0x1fa7, + 0x1078, 0x1ecd, 0x2001, 0x800d, 0x0078, 0x1fa7, 0x7814, 0xd0e4, + 0x00c0, 0x1f99, 0xd0ec, 0x0040, 0x1f93, 0xd7fc, 0x0040, 0x1f93, + 0x78e4, 0x0078, 0x1f94, 0x78e0, 0x70c6, 0x2001, 0x800e, 0x0078, + 0x1fa7, 0x0078, 0x1f35, 0xd7fc, 0x0040, 0x1fa1, 0x78ec, 0x0078, + 0x1fa2, 0x78e8, 0x70c6, 0x2001, 0x000d, 0x0078, 0x1fa7, 0x70c2, + 0xd7fc, 0x00c0, 0x1faf, 0x70db, 0x0000, 0x0078, 0x1fb1, 0x70db, + 0x0001, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x4080, 0x007c, + 0xac80, 0x0001, 0x81ff, 0x0040, 0x1fe3, 0x2099, 0x0030, 0x20a0, + 0x700c, 0xa084, 0x03ff, 0x0040, 0x1fc5, 0x7018, 0x007e, 0x701c, + 0x007e, 0x7020, 0x007e, 0x7024, 0x007e, 0x7112, 0x81ac, 0x721a, + 0x731e, 0x7422, 0x7526, 0x7003, 0x0001, 0x7007, 0x0001, 0x7008, + 0x800b, 0x00c8, 0x1fd7, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x00c0, + 0x1fe3, 0x53a5, 0xa006, 0x7003, 0x0000, 0x7007, 0x0004, 0x007f, + 0x7026, 0x007f, 0x7022, 0x007f, 0x701e, 0x007f, 0x701a, 0x007c, + 0x2011, 0x0020, 0x2009, 0x0010, 0x6b0a, 0x6c0e, 0x6803, 0xfd00, + 0x6807, 0x0018, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004, + 0x8109, 0x00c0, 0x1ff4, 0x007c, 0x6004, 0x6086, 0x2c08, 0x2063, + 0x0000, 0x7868, 0xa005, 0x796a, 0x0040, 0x2011, 0x2c02, 0x0078, + 0x2012, 0x796e, 0x007c, 0x0c7e, 0x2061, 0x4d00, 0x6887, 0x0103, + 0x2d08, 0x206b, 0x0000, 0x6068, 0xa005, 0x616a, 0x0040, 0x2023, + 0x2d02, 0x0078, 0x2024, 0x616e, 0x0c7f, 0x007c, 0x2091, 0x8000, + 0x2c04, 0x786e, 0xa005, 0x00c0, 0x202e, 0x786a, 0x2091, 0x8001, + 0x609c, 0xa005, 0x0040, 0x2047, 0x0c7e, 0x2060, 0x2008, 0x609c, + 0xa005, 0x0040, 0x2043, 0x2062, 0x609f, 0x0000, 0xa065, 0x609c, + 0xa005, 0x00c0, 0x203b, 0x7848, 0x794a, 0x2062, 0x0c7f, 0x7848, + 0x2062, 0x609f, 0x0000, 0xac85, 0x0000, 0x00c0, 0x2051, 0x1078, + 0x290c, 0x784a, 0x007c, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, + 0x818e, 0x00c8, 0x205c, 0xa200, 0x00f0, 0x2057, 0x8086, 0x818e, + 0x007c, 0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x2082, 0xa11a, + 0x00c8, 0x2082, 0x8213, 0x818d, 0x0048, 0x2075, 0xa11a, 0x00c8, + 0x2076, 0x00f0, 0x206a, 0x0078, 0x207a, 0xa11a, 0x2308, 0x8210, + 0x00f0, 0x206a, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080, 0x007f, + 0x157f, 0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078, 0x207e, + 0x7d74, 0x70d0, 0xa506, 0x0040, 0x216e, 0x7810, 0x2050, 0x7800, + 0xd08c, 0x0040, 0x20aa, 0xdaec, 0x0040, 0x20aa, 0x0e7e, 0x2091, + 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x20a7, 0x7008, + 0x0e7f, 0xa086, 0x0008, 0x0040, 0x20aa, 0x0078, 0x216e, 0x0e7f, + 0x0078, 0x216e, 0x1078, 0x1da4, 0x0040, 0x216e, 0xa046, 0x7970, + 0x2500, 0x8000, 0xa112, 0x2009, 0x0040, 0x00c8, 0x20b9, 0x0078, + 0x20c0, 0x72d0, 0xa206, 0x0040, 0x20c0, 0x8840, 0x2009, 0x0080, + 0x0c7e, 0x7112, 0x7007, 0x0001, 0x2099, 0x0030, 0x20a9, 0x0020, + 0xac80, 0x0001, 0x20a0, 0x2061, 0x0000, 0x88ff, 0x0040, 0x20d2, + 0x1078, 0x1da4, 0x7008, 0xd0fc, 0x0040, 0x20d2, 0x7007, 0x0002, + 0x2091, 0x8001, 0xa08c, 0x01e0, 0x00c0, 0x2109, 0x53a5, 0x8cff, + 0x00c0, 0x20e7, 0x88ff, 0x0040, 0x2158, 0x0078, 0x20f1, 0x2c00, + 0x788e, 0x20a9, 0x0020, 0xac80, 0x0001, 0x20a0, 0x53a5, 0x0078, + 0x2158, 0xa046, 0x7218, 0x731c, 0xdac4, 0x0040, 0x20f9, 0x7420, + 0x7524, 0xa292, 0x0040, 0xa39b, 0x0000, 0xa4a3, 0x0000, 0xa5ab, + 0x0000, 0x721a, 0x731e, 0xdac4, 0x0040, 0x2109, 0x7422, 0x7526, + 0xa006, 0x7007, 0x0004, 0x0040, 0x2158, 0x8cff, 0x0040, 0x2112, + 0x1078, 0x1dad, 0x0c7f, 0x1078, 0x1dad, 0xa046, 0x7888, 0x8000, + 0x788a, 0xa086, 0x0002, 0x0040, 0x2138, 0x7a7c, 0x7b78, 0xdac4, + 0x0040, 0x2124, 0x7c84, 0x7d80, 0x7974, 0x8107, 0x8004, 0x8004, + 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x721a, + 0x731e, 0xdac4, 0x0040, 0x216e, 0x7422, 0x7526, 0x0078, 0x216e, + 0x6014, 0xd0fc, 0x00c0, 0x2140, 0x2069, 0x4d40, 0x0078, 0x2142, + 0x2069, 0x4d80, 0x2091, 0x8000, 0x681f, 0x0002, 0x88ff, 0x0040, + 0x214e, 0xa046, 0x788c, 0x2060, 0x0078, 0x2138, 0x788b, 0x0000, + 0x78ac, 0xa085, 0x0003, 0x78ae, 0x2091, 0x8001, 0x0078, 0x216e, + 0x0c7f, 0x788b, 0x0000, 0x1078, 0x2307, 0x6004, 0xa084, 0x000f, + 0x1078, 0x216f, 0x88ff, 0x0040, 0x216c, 0x788c, 0x2060, 0x6004, + 0xa084, 0x000f, 0x1078, 0x216f, 0x0078, 0x2088, 0x007c, 0x0079, + 0x2171, 0x2181, 0x219f, 0x21bd, 0x2181, 0x21ce, 0x2192, 0x2181, + 0x2181, 0x2181, 0x219d, 0x21bb, 0x2181, 0x2181, 0x2181, 0x2181, + 0x2181, 0x2039, 0x0400, 0x78bc, 0xa705, 0x78be, 0x6008, 0xa705, + 0x600a, 0x1078, 0x2211, 0x609c, 0x78ba, 0x609f, 0x0000, 0x1078, + 0x22f1, 0x007c, 0x78bc, 0xd0c4, 0x0040, 0x2198, 0x0078, 0x2181, + 0x601c, 0xc0bd, 0x601e, 0x0078, 0x21a5, 0x1078, 0x2339, 0x78bc, + 0xd0c4, 0x0040, 0x21a5, 0x0078, 0x2181, 0x78bf, 0x0000, 0x6004, + 0x8007, 0xa084, 0x00ff, 0x78b2, 0x8001, 0x0040, 0x21b8, 0x1078, + 0x2211, 0x0040, 0x21b8, 0x78bc, 0xc0c5, 0x78be, 0x0078, 0x21ba, + 0x0078, 0x2230, 0x007c, 0x1078, 0x2335, 0x78bc, 0xa08c, 0x0e00, + 0x00c0, 0x21c5, 0xd0c4, 0x00c0, 0x21c7, 0x0078, 0x2181, 0x1078, + 0x2211, 0x00c0, 0x21cd, 0x0078, 0x2230, 0x007c, 0x78bc, 0xd0c4, + 0x0040, 0x21d4, 0x0078, 0x2181, 0x78bf, 0x0000, 0x6714, 0x2011, + 0x0001, 0x22a8, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0040, 0x21f4, + 0xa7bc, 0xff00, 0x20a9, 0x0020, 0xa08e, 0x0001, 0x0040, 0x21f4, + 0xa7bc, 0x8000, 0x2011, 0x0002, 0x20a9, 0x0100, 0xa08e, 0x0002, + 0x0040, 0x21f4, 0x0078, 0x220e, 0x1078, 0x1dcb, 0x2d00, 0x2091, + 0x8000, 0x682b, 0x0000, 0x682f, 0x0000, 0x6808, 0xa084, 0xffde, + 0x680a, 0xade8, 0x0010, 0x2091, 0x8001, 0x00f0, 0x21f7, 0x8211, + 0x0040, 0x220e, 0x20a9, 0x0100, 0x0078, 0x21f7, 0x1078, 0x1dad, + 0x007c, 0x609f, 0x0000, 0x78b4, 0xa06d, 0x2c00, 0x78b6, 0x00c0, + 0x221c, 0x78ba, 0x0078, 0x2224, 0x689e, 0x2d00, 0x6002, 0x78b8, + 0xad06, 0x00c0, 0x2224, 0x6002, 0x78b0, 0x8001, 0x78b2, 0x00c0, + 0x222f, 0x78bc, 0xc0c4, 0x78be, 0x78b8, 0x2060, 0xa006, 0x007c, + 0x0e7e, 0xa02e, 0x2530, 0x7dba, 0x7db6, 0x65ae, 0x65b2, 0x601c, + 0x60a2, 0x2048, 0xa984, 0xe1ff, 0x601e, 0xa984, 0x0060, 0x0040, + 0x2243, 0x1078, 0x4578, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x6714, + 0x2071, 0x4d80, 0xd7fc, 0x00c0, 0x224f, 0x2071, 0x4d40, 0xa784, + 0x0f00, 0x800b, 0xa784, 0x001f, 0x0040, 0x225a, 0x8003, 0x8003, + 0x8003, 0x8003, 0xa105, 0x71c4, 0xa168, 0x2700, 0x8007, 0xa084, + 0x000f, 0x8003, 0x8003, 0x8003, 0x71c8, 0xa100, 0x60c2, 0x2091, + 0x8000, 0x7810, 0xd0f4, 0x00c0, 0x2274, 0x6e08, 0xd684, 0x0040, + 0x228a, 0xd9fc, 0x00c0, 0x228a, 0x2091, 0x8001, 0x1078, 0x1e42, + 0x2091, 0x8000, 0x1078, 0x2004, 0x2091, 0x8001, 0x7814, 0xd0e4, + 0x00c0, 0x22ef, 0x7810, 0xd0f4, 0x0040, 0x22ef, 0x601b, 0x0021, + 0x0078, 0x22ef, 0x6024, 0xa096, 0x0001, 0x00c0, 0x2291, 0x8000, + 0x6026, 0x6a10, 0x6814, 0xa202, 0x0048, 0x22a4, 0x0040, 0x22a4, + 0x2091, 0x8001, 0x2039, 0x0200, 0x609c, 0x78ba, 0x609f, 0x0000, + 0x1078, 0x22f1, 0x0078, 0x22ef, 0x2c08, 0xd9fc, 0x0040, 0x22cc, + 0x6800, 0xa065, 0x0040, 0x22cc, 0x6a04, 0x7000, 0xa084, 0x0002, + 0x0040, 0x22c2, 0x704c, 0xa206, 0x00c0, 0x22c2, 0x6b04, 0x2160, + 0x2304, 0x6002, 0xa005, 0x00c0, 0x22be, 0x6902, 0x2260, 0x6102, + 0x0078, 0x22d8, 0x2d00, 0x2060, 0x1078, 0x2a6d, 0x6e08, 0x2160, + 0x6202, 0x6906, 0x0078, 0x22d8, 0x6800, 0x6902, 0xa065, 0x0040, + 0x22d4, 0x6102, 0x0078, 0x22d5, 0x6906, 0x2160, 0x6003, 0x0000, + 0x2160, 0xd9fc, 0x0040, 0x22df, 0xa6b4, 0xfffc, 0x6e0a, 0x6810, + 0x7d08, 0x8528, 0x7d0a, 0x8000, 0x6812, 0x2091, 0x8001, 0xd6b4, + 0x0040, 0x22ef, 0xa6b6, 0x0040, 0x6e0a, 0x1078, 0x1e53, 0x0e7f, + 0x007c, 0x6008, 0xa705, 0x600a, 0x2091, 0x8000, 0x1078, 0x2004, + 0x2091, 0x8001, 0x78b8, 0xa065, 0x0040, 0x2304, 0x609c, 0x78ba, + 0x609f, 0x0000, 0x0078, 0x22f1, 0x78b6, 0x78ba, 0x007c, 0x7970, + 0x7874, 0x2818, 0xd384, 0x0040, 0x2311, 0x8000, 0xa112, 0x0048, + 0x2316, 0x8000, 0xa112, 0x00c8, 0x2326, 0xc384, 0x7a7c, 0x721a, + 0x7a78, 0x721e, 0xdac4, 0x0040, 0x2321, 0x7a84, 0x7222, 0x7a80, + 0x7226, 0xa006, 0xd384, 0x0040, 0x2326, 0x8000, 0x7876, 0x70d2, + 0x781c, 0xa005, 0x0040, 0x2334, 0x8001, 0x781e, 0x00c0, 0x2334, + 0x0068, 0x2334, 0x2091, 0x4080, 0x007c, 0x2039, 0x234d, 0x0078, + 0x233b, 0x2039, 0x2353, 0x2704, 0xa005, 0x0040, 0x234c, 0xac00, + 0x2068, 0x6908, 0x6810, 0x6912, 0x680a, 0x690c, 0x6814, 0x6916, + 0x680e, 0x8738, 0x0078, 0x233b, 0x007c, 0x0003, 0x0009, 0x000f, + 0x0015, 0x001b, 0x0000, 0x0015, 0x001b, 0x0000, 0x2041, 0x0000, + 0x780c, 0x0079, 0x235b, 0x252d, 0x2500, 0x235f, 0x23d8, 0x2039, + 0x9574, 0x2734, 0x7d10, 0x0078, 0x237f, 0x6084, 0xa086, 0x0103, + 0x00c0, 0x23c1, 0x6114, 0x6018, 0xa105, 0x0040, 0x2374, 0x86ff, + 0x00c0, 0x2390, 0x0078, 0x23c1, 0x8603, 0xa080, 0x9555, 0x620c, + 0x2202, 0x8000, 0x6210, 0x2202, 0x1078, 0x2026, 0x8630, 0xa68e, + 0x000f, 0x0040, 0x244c, 0x786c, 0xa065, 0x00c0, 0x2365, 0x7808, + 0xa602, 0x00c8, 0x2390, 0xd5ac, 0x00c0, 0x2390, 0x263a, 0x007c, + 0xa682, 0x0003, 0x00c8, 0x244c, 0x2091, 0x8000, 0x2069, 0x0000, + 0x6818, 0xd084, 0x00c0, 0x23bc, 0x2011, 0x9555, 0x2204, 0x70c6, + 0x8210, 0x2204, 0x70ca, 0xd684, 0x00c0, 0x23ac, 0x8210, 0x2204, + 0x70da, 0x8210, 0x2204, 0x70de, 0xa685, 0x8020, 0x70c2, 0x681b, + 0x0001, 0x2091, 0x4080, 0x7810, 0xa084, 0xffcf, 0x7812, 0x2091, + 0x8001, 0x203b, 0x0000, 0x007c, 0x7810, 0xc0ad, 0x7812, 0x0078, + 0x244c, 0x263a, 0x1078, 0x2537, 0x00c0, 0x255a, 0x786c, 0xa065, + 0x00c0, 0x2365, 0x2091, 0x8000, 0x7810, 0xa084, 0xffcf, 0x86ff, + 0x0040, 0x23d3, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0078, 0x255a, + 0x2039, 0x9574, 0x2734, 0x7d10, 0x0078, 0x23f4, 0x6084, 0xa086, + 0x0103, 0x00c0, 0x2435, 0x6114, 0x6018, 0xa105, 0x0040, 0x23ed, + 0x86ff, 0x00c0, 0x2405, 0x0078, 0x2435, 0xa680, 0x9555, 0x620c, + 0x2202, 0x1078, 0x2026, 0x8630, 0xa68e, 0x001e, 0x0040, 0x244c, + 0x786c, 0xa065, 0x00c0, 0x23de, 0x7808, 0xa602, 0x00c8, 0x2405, + 0xd5ac, 0x00c0, 0x2405, 0x263a, 0x007c, 0xa682, 0x0006, 0x00c8, + 0x244c, 0x2091, 0x8000, 0x2069, 0x0000, 0x6818, 0xd084, 0x00c0, + 0x2430, 0x2011, 0x9555, 0x2009, 0x954e, 0x26a8, 0x211c, 0x2204, + 0x201a, 0x8108, 0x8210, 0x00f0, 0x2416, 0xa685, 0x8030, 0x70c2, + 0x681b, 0x0001, 0x2091, 0x4080, 0x7810, 0xa084, 0xffcf, 0x7812, + 0x2091, 0x8001, 0xa006, 0x2009, 0x9575, 0x200a, 0x203a, 0x007c, + 0x7810, 0xc0ad, 0x7812, 0x0078, 0x244c, 0x263a, 0x1078, 0x2537, + 0x00c0, 0x255a, 0x786c, 0xa065, 0x00c0, 0x23de, 0x2091, 0x8000, + 0x7810, 0xa084, 0xffcf, 0x86ff, 0x0040, 0x2447, 0xc0ad, 0x7812, + 0x2091, 0x8001, 0x0078, 0x255a, 0x2091, 0x8000, 0x7007, 0x0004, + 0x7994, 0x70d4, 0xa102, 0x0048, 0x245d, 0x0040, 0x2467, 0x7b90, + 0xa302, 0x00c0, 0x2467, 0x0078, 0x2460, 0x8002, 0x00c0, 0x2467, + 0x263a, 0x7810, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x007c, 0xa184, + 0xff00, 0x0040, 0x2474, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, + 0x8007, 0xa100, 0x0078, 0x2477, 0x8107, 0x8004, 0x8004, 0x7a9c, + 0xa210, 0x721a, 0x7a98, 0xa006, 0xa211, 0x721e, 0xd4c4, 0x0040, + 0x2487, 0x7aa4, 0xa211, 0x7222, 0x7aa0, 0xa211, 0x7226, 0x20a1, + 0x0030, 0x7003, 0x0000, 0x2009, 0x9554, 0x260a, 0x8109, 0x2198, + 0x2104, 0xd084, 0x0040, 0x2495, 0x8633, 0xa6b0, 0x0002, 0x26a8, + 0x53a6, 0x8603, 0x7012, 0x7007, 0x0001, 0x7990, 0x7894, 0x8000, + 0xa10a, 0x00c8, 0x24a4, 0xa006, 0x2028, 0x7974, 0xa184, 0xff00, + 0x0040, 0x24b3, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, + 0xa100, 0x0078, 0x24b6, 0x8107, 0x8004, 0x8004, 0x797c, 0xa108, + 0x7a78, 0xa006, 0xa211, 0xd4c4, 0x0040, 0x24c2, 0x7b84, 0xa319, + 0x7c80, 0xa421, 0x7008, 0xd0fc, 0x0040, 0x24c2, 0xa084, 0x01e0, + 0x0040, 0x24e7, 0x7d10, 0x2031, 0x9554, 0x2634, 0x78a8, 0x8000, + 0x78aa, 0xd08c, 0x00c0, 0x24dc, 0x7007, 0x0006, 0x7004, 0xd094, + 0x00c0, 0x24d6, 0x0078, 0x244e, 0x2069, 0x4d47, 0x206b, 0x0003, + 0x78ac, 0xa085, 0x0300, 0x78ae, 0xa006, 0x0078, 0x24f0, 0x2030, + 0x75d6, 0x2091, 0x4080, 0x7d96, 0x7d10, 0xa5ac, 0xffcf, 0x7d12, + 0x2091, 0x8001, 0x78aa, 0x7007, 0x0006, 0x263a, 0x7003, 0x0001, + 0x711a, 0x721e, 0xd5c4, 0x0040, 0x24ff, 0x7322, 0x7426, 0x007c, + 0x6084, 0xa086, 0x0103, 0x00c0, 0x2523, 0x6114, 0x6018, 0xa105, + 0x00c0, 0x2523, 0x2069, 0x0000, 0x6818, 0xd084, 0x00c0, 0x2523, + 0x600c, 0x70c6, 0x6010, 0x70ca, 0x70c3, 0x8020, 0x681b, 0x0001, + 0x2091, 0x4080, 0x1078, 0x2026, 0x0068, 0x2522, 0x786c, 0xa065, + 0x00c0, 0x2500, 0x007c, 0x1078, 0x2537, 0x00c0, 0x255a, 0x786c, + 0xa065, 0x00c0, 0x2500, 0x0078, 0x255a, 0x1078, 0x2537, 0x00c0, + 0x255a, 0x786c, 0xa065, 0x00c0, 0x252d, 0x0078, 0x255a, 0x6084, + 0xa086, 0x0103, 0x00c0, 0x254b, 0x6018, 0xc0fc, 0x601a, 0xa086, + 0x0004, 0x00c0, 0x254b, 0x7804, 0xd0a4, 0x0040, 0x254b, 0x1078, + 0x2026, 0xa006, 0x007c, 0x1078, 0x2560, 0x00c0, 0x2552, 0xa085, + 0x0001, 0x007c, 0x1078, 0x256f, 0x00c0, 0x2558, 0x2041, 0x0001, + 0x7d10, 0x007c, 0x88ff, 0x0040, 0x255f, 0x2091, 0x4080, 0x007c, + 0x7b90, 0x7994, 0x70d4, 0xa102, 0x00c0, 0x2569, 0xa385, 0x0000, + 0x007c, 0x0048, 0x256d, 0xa302, 0x007c, 0x8002, 0x007c, 0x7810, + 0xd0ec, 0x0040, 0x2587, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x0020, + 0x7004, 0xa005, 0x00c0, 0x2584, 0x7008, 0x0e7f, 0xa086, 0x0008, + 0x0040, 0x2587, 0x0078, 0x25d8, 0x0e7f, 0x0078, 0x25d8, 0xa184, + 0xff00, 0x0040, 0x2594, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, + 0x8007, 0xa100, 0x0078, 0x2597, 0x8107, 0x8004, 0x8004, 0x7a9c, + 0x7b98, 0x7ca4, 0x7da0, 0xa210, 0xa006, 0xa319, 0xa421, 0xa529, + 0x2009, 0x0018, 0x6028, 0xa005, 0x0040, 0x25a8, 0x2009, 0x0040, + 0x1078, 0x1d5b, 0x0040, 0x25ca, 0x78a8, 0x8000, 0x78aa, 0xd08c, + 0x00c0, 0x25d8, 0x6014, 0xd0fc, 0x00c0, 0x25ba, 0x2069, 0x4d40, + 0x0078, 0x25bc, 0x2069, 0x4d80, 0x2091, 0x8000, 0x681f, 0x0003, + 0x78ab, 0x0000, 0x78ac, 0xa085, 0x0300, 0x78ae, 0x2091, 0x8001, + 0x0078, 0x25d8, 0x78ab, 0x0000, 0x1078, 0x2026, 0x7990, 0x7894, + 0x8000, 0xa10a, 0x00c8, 0x25d5, 0xa006, 0x7896, 0x70d6, 0xa006, + 0x2071, 0x0010, 0x2091, 0x8001, 0x007c, 0x2138, 0xd7fc, 0x00c0, + 0x25e5, 0x2009, 0x4d59, 0x0078, 0x25e7, 0x2009, 0x4d99, 0x2091, + 0x8000, 0x200a, 0x0f7e, 0xd7fc, 0x00c0, 0x25fe, 0x2009, 0x4d40, + 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x0040, 0x25fa, 0x2079, 0x0100, + 0x0078, 0x2602, 0x2079, 0x0200, 0x0078, 0x2602, 0x2009, 0x4d80, + 0x2079, 0x0100, 0x2104, 0xa086, 0x0000, 0x00c0, 0x261b, 0xd7fc, + 0x00c0, 0x260e, 0x2009, 0x4d45, 0x0078, 0x2610, 0x2009, 0x4d85, + 0x2104, 0xa005, 0x00c0, 0x261b, 0x7830, 0xa084, 0x00c0, 0x00c0, + 0x261b, 0x781b, 0x0045, 0x0f7f, 0x007c, 0x2009, 0x0002, 0x2069, + 0x4d00, 0x6810, 0xd0ec, 0x00c0, 0x267e, 0x2071, 0x4d80, 0x2079, + 0x0100, 0x2021, 0x4fbf, 0x784b, 0x000f, 0x2019, 0x43a3, 0xd184, + 0x0040, 0x263e, 0x6810, 0xd0ec, 0x0040, 0x263a, 0x20a1, 0x012b, + 0x0078, 0x2640, 0x20a1, 0x022b, 0x0078, 0x2640, 0x20a1, 0x012b, + 0x2304, 0xa005, 0x0040, 0x264d, 0x789a, 0x8318, 0x23ac, 0x8318, + 0x2398, 0x53a6, 0x3318, 0x0078, 0x2640, 0x789b, 0x0020, 0x20a9, + 0x0010, 0x78af, 0x0000, 0x78af, 0x8020, 0x00f0, 0x2651, 0x7003, + 0x0000, 0x017e, 0xd18c, 0x2009, 0x0000, 0x0040, 0x2660, 0xc1bd, + 0x1078, 0x2849, 0x017f, 0x7020, 0xa084, 0x000f, 0x007e, 0x6814, + 0xd0e4, 0x007f, 0x00c0, 0x2670, 0xa085, 0x6340, 0x0078, 0x2672, + 0xa085, 0x62c0, 0x7806, 0x780f, 0x9200, 0x7843, 0x00d8, 0x7853, + 0x0080, 0x780b, 0x0008, 0x7456, 0x7053, 0x0000, 0x8109, 0x0040, + 0x2691, 0x2071, 0x4d40, 0x6810, 0xd0ec, 0x0040, 0x268b, 0x2079, + 0x0100, 0x0078, 0x268d, 0x2079, 0x0200, 0x2021, 0x4dbf, 0x0078, + 0x262b, 0x007c, 0x017e, 0xd1bc, 0x00c0, 0x26a6, 0x007e, 0x2001, + 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x26a2, 0x2011, 0x0101, + 0x0078, 0x26a8, 0x2011, 0x0201, 0x0078, 0x26a8, 0x2011, 0x0101, + 0xa18c, 0x000f, 0x2204, 0xa084, 0xfff0, 0xa105, 0x2012, 0x017f, + 0x1078, 0x2849, 0x007c, 0xd3fc, 0x00c0, 0x26c6, 0x007e, 0x2001, + 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x26c2, 0x2011, 0x0101, + 0x0078, 0x26c8, 0x2011, 0x0201, 0x0078, 0x26c8, 0x2011, 0x0101, + 0x20a9, 0x0009, 0x810b, 0x00f0, 0x26ca, 0xa18c, 0x0e00, 0x2204, + 0xa084, 0xf1ff, 0xa105, 0x2012, 0x007c, 0x2019, 0x0002, 0x2001, + 0x4d04, 0x2004, 0xd0ec, 0x0040, 0x26e2, 0x8319, 0x2009, 0x0101, + 0x0078, 0x26e4, 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, 0x00f0, + 0x26e6, 0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a, + 0x8319, 0x0040, 0x26f7, 0x2009, 0x0201, 0x0078, 0x26e4, 0x007c, + 0xd3fc, 0x00c0, 0x270b, 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, + 0x007f, 0x0040, 0x2707, 0x2011, 0x0101, 0x0078, 0x270d, 0x2011, + 0x0201, 0x0078, 0x270d, 0x2011, 0x0101, 0x20a9, 0x000c, 0x810b, + 0x00f0, 0x270f, 0xa18c, 0xf000, 0x2204, 0xa084, 0x0fff, 0xa105, + 0x2012, 0x007c, 0xd3fc, 0x00c0, 0x272d, 0x007e, 0x2001, 0x4d04, + 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2729, 0x2011, 0x0102, 0x0078, + 0x272f, 0x2011, 0x0202, 0x0078, 0x272f, 0x2011, 0x0102, 0x2204, + 0xa084, 0xffcf, 0xa105, 0x2012, 0x007c, 0x0c7e, 0xd1bc, 0x00c0, + 0x2749, 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, + 0x2745, 0x2061, 0x0100, 0x0078, 0x274b, 0x2061, 0x0200, 0x0078, + 0x274b, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0020, + 0x609a, 0x62ac, 0x63ac, 0x0c7f, 0x007c, 0x0c7e, 0xd1bc, 0x00c0, + 0x2769, 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, + 0x2765, 0x2061, 0x0100, 0x0078, 0x276b, 0x2061, 0x0200, 0x0078, + 0x276b, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0022, + 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x0c7f, 0x007c, 0x0c7e, + 0xd1bc, 0x00c0, 0x278b, 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, + 0x007f, 0x0040, 0x2787, 0x2061, 0x0100, 0x0078, 0x278d, 0x2061, + 0x0200, 0x0078, 0x278d, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003, + 0xa080, 0x0022, 0x609a, 0x60a4, 0xa085, 0x0020, 0x60ae, 0x0c7f, + 0x007c, 0x0c7e, 0xd1bc, 0x00c0, 0x27ad, 0x007e, 0x2001, 0x4d04, + 0x2004, 0xd0ec, 0x007f, 0x0040, 0x27a9, 0x2061, 0x0100, 0x0078, + 0x27af, 0x2061, 0x0200, 0x0078, 0x27af, 0x2061, 0x0100, 0xc1bc, + 0x8103, 0x8003, 0xa080, 0x0020, 0x609a, 0x60a4, 0xa28c, 0x0020, + 0x0040, 0x27bd, 0xc2ac, 0xa39d, 0x4000, 0xc3fc, 0xd3b4, 0x00c0, + 0x27c2, 0xc3fd, 0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018, 0x0c7f, + 0x007c, 0x2091, 0x8000, 0x0c7e, 0x0e7e, 0x6818, 0xa005, 0x0040, + 0x2827, 0xd1fc, 0x0040, 0x27d8, 0x2061, 0x94d0, 0x0078, 0x27da, + 0x2061, 0x93c0, 0x1078, 0x282f, 0x0040, 0x280d, 0x20a9, 0x0101, + 0xd1fc, 0x0040, 0x27e7, 0x2061, 0x93d0, 0x0078, 0x27e9, 0x2061, + 0x92c0, 0x0c7e, 0x1078, 0x282f, 0x0040, 0x27f4, 0x0c7f, 0x8c60, + 0x00f0, 0x27e9, 0x0078, 0x2827, 0x007f, 0xd1fc, 0x0040, 0x27fe, + 0xa082, 0x93d0, 0x2071, 0x4d80, 0x0078, 0x2802, 0xa082, 0x92c0, + 0x2071, 0x4d40, 0x707a, 0x7176, 0x2001, 0x0004, 0x7066, 0x7083, + 0x000f, 0x1078, 0x25dd, 0x0078, 0x2823, 0xd1fc, 0x00c0, 0x2814, + 0x2071, 0x4d40, 0x0078, 0x2816, 0x2071, 0x4d80, 0x6020, 0xc0dd, + 0x6022, 0x7176, 0x2c00, 0x707e, 0x2001, 0x0006, 0x7066, 0x7083, + 0x000f, 0x1078, 0x25dd, 0x2001, 0x0000, 0x0078, 0x2829, 0x2001, + 0x0001, 0x2091, 0x8001, 0xa005, 0x0e7f, 0x0c7f, 0x007c, 0x2c04, + 0xa005, 0x0040, 0x2846, 0x2060, 0x6010, 0xa306, 0x00c0, 0x2843, + 0x600c, 0xa206, 0x00c0, 0x2843, 0x6014, 0xa106, 0x00c0, 0x2843, + 0xa006, 0x0078, 0x2848, 0x6000, 0x0078, 0x2830, 0xa085, 0x0001, + 0x007c, 0x0f7e, 0x0e7e, 0x017e, 0xd1bc, 0x00c0, 0x2861, 0x2079, + 0x4d40, 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, + 0x285d, 0x2071, 0x0100, 0x0078, 0x2865, 0x2071, 0x0200, 0x0078, + 0x2865, 0x2079, 0x4d80, 0x2071, 0x0100, 0x7920, 0xa18c, 0x000f, + 0x70ec, 0xd0c4, 0x00c0, 0x286f, 0x017f, 0x0078, 0x288a, 0x810b, + 0x810b, 0x810b, 0x810b, 0x007f, 0xd0bc, 0x00c0, 0x2887, 0x007e, + 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2883, 0xa18d, + 0x0f00, 0x0078, 0x2889, 0xa18d, 0x0f00, 0x0078, 0x2889, 0xa18d, + 0x0800, 0x2104, 0x0e7f, 0x0f7f, 0x007c, 0x0e7e, 0x2001, 0x4d01, + 0x2004, 0xd0ac, 0x00c0, 0x290a, 0x68e4, 0xd0ac, 0x0040, 0x290a, + 0xa084, 0x0006, 0x00c0, 0x290a, 0x6014, 0xd0fc, 0x00c0, 0x28a4, + 0x2071, 0x51c0, 0x0078, 0x28a6, 0x2071, 0x5240, 0x8007, 0xa084, + 0x000f, 0x8003, 0x8003, 0x8003, 0xae70, 0x7004, 0xa084, 0x000a, + 0x00c0, 0x290a, 0x7108, 0xa194, 0xff00, 0x0040, 0x290a, 0xa18c, + 0x00ff, 0x2001, 0x000a, 0xa106, 0x0040, 0x28d9, 0x2001, 0x000c, + 0xa106, 0x0040, 0x28dd, 0x2001, 0x0012, 0xa106, 0x0040, 0x28e1, + 0x2001, 0x0014, 0xa106, 0x0040, 0x28e5, 0x2001, 0x0019, 0xa106, + 0x0040, 0x28e9, 0x2001, 0x0032, 0xa106, 0x0040, 0x28ed, 0x0078, + 0x28f1, 0x2009, 0x000c, 0x0078, 0x28f3, 0x2009, 0x0012, 0x0078, + 0x28f3, 0x2009, 0x0014, 0x0078, 0x28f3, 0x2009, 0x0019, 0x0078, + 0x28f3, 0x2009, 0x0020, 0x0078, 0x28f3, 0x2009, 0x003f, 0x0078, + 0x28f3, 0x2011, 0x0000, 0x2100, 0xa205, 0x700a, 0x2071, 0x4d00, + 0x7004, 0xd0bc, 0x0040, 0x290a, 0x6014, 0xd0fc, 0x00c0, 0x2905, + 0x70ea, 0x2071, 0x4d40, 0x0078, 0x2908, 0x70ee, 0x2071, 0x4d80, + 0x701f, 0x800f, 0x0e7f, 0x007c, 0x0068, 0x290c, 0x2091, 0x8000, + 0x2071, 0x0000, 0x007e, 0x7018, 0xd084, 0x00c0, 0x2913, 0x007f, + 0x2071, 0x0010, 0x70ca, 0x007f, 0x70c6, 0x70c3, 0x8002, 0x70db, + 0x080d, 0x70df, 0x0000, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, + 0x4080, 0x0078, 0x2929, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x78a0, + 0x708e, 0x7592, 0x7496, 0x769a, 0x779e, 0xa594, 0x003f, 0xd4f4, + 0x0040, 0x2940, 0xa784, 0x007d, 0x00c0, 0x4319, 0x1078, 0x290c, + 0xa49c, 0x000f, 0xa382, 0x0004, 0x0050, 0x294b, 0xa3a6, 0x0007, + 0x00c0, 0x290c, 0x2418, 0x8507, 0xa084, 0x000f, 0x0079, 0x2950, + 0x2fc6, 0x30b5, 0x30e0, 0x3341, 0x372a, 0x3794, 0x3834, 0x38b0, + 0x399e, 0x3a8d, 0x2963, 0x2960, 0x2d99, 0x2eba, 0x36fb, 0x2960, + 0x1078, 0x290c, 0x007c, 0xa006, 0x0078, 0x296d, 0x7808, 0xc08d, + 0x780a, 0xa006, 0x7002, 0x704e, 0x7046, 0x70d2, 0x7060, 0xa005, + 0x00c0, 0x2ad3, 0x7064, 0xa084, 0x0007, 0x0079, 0x2977, 0x297f, + 0x29f2, 0x29fb, 0x2a06, 0x2a11, 0x2ab9, 0x2a1c, 0x29f2, 0x7830, + 0xd0bc, 0x00c0, 0x2962, 0x71d4, 0xd1bc, 0x00c0, 0x2962, 0xd1b4, + 0x00c0, 0x29cf, 0x70a4, 0xa086, 0x0001, 0x0040, 0x2962, 0x70b4, + 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, 0x0010, 0x6b0c, 0x7baa, + 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886, 0x0001, + 0x0040, 0x29a5, 0x69bc, 0x7daa, 0x79aa, 0x68c0, 0xa04d, 0x6e1c, + 0x2001, 0x0010, 0x0078, 0x2c2c, 0x7060, 0xa005, 0x00c0, 0x2962, + 0x0c7e, 0x0d7e, 0x70b4, 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, + 0x0010, 0x6b0c, 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, + 0xa05d, 0xa886, 0x0001, 0x0040, 0x29c8, 0x69bc, 0x7daa, 0x79aa, + 0x68c0, 0xa04d, 0x6e1c, 0x2001, 0x0020, 0x0078, 0x2c2c, 0x1078, + 0x42ba, 0x00c0, 0x2962, 0x781b, 0x005b, 0x70bc, 0xa06d, 0x68b4, + 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, + 0xc08d, 0x780a, 0x68bc, 0x7042, 0xc1b4, 0x71d6, 0x70b8, 0xa065, + 0x68c0, 0x705a, 0x7003, 0x0002, 0x2d00, 0x704e, 0xad80, 0x0009, + 0x7046, 0x007c, 0x1078, 0x42ba, 0x00c0, 0x29fa, 0x781b, 0x0047, + 0x7003, 0x0004, 0x007c, 0x1078, 0x42ba, 0x00c0, 0x2a05, 0x2011, + 0x000c, 0x1078, 0x2a2c, 0x7003, 0x0004, 0x007c, 0x1078, 0x42ba, + 0x00c0, 0x2a10, 0x2011, 0x0006, 0x1078, 0x2a2c, 0x7003, 0x0004, + 0x007c, 0x1078, 0x42ba, 0x00c0, 0x2a1b, 0x2011, 0x000d, 0x1078, + 0x2a2c, 0x7003, 0x0004, 0x007c, 0x1078, 0x42ba, 0x00c0, 0x2a2b, + 0x2011, 0x0006, 0x1078, 0x2a2c, 0x707c, 0x707f, 0x0000, 0x2068, + 0x704e, 0x7003, 0x0001, 0x007c, 0x7174, 0xc1fc, 0x8107, 0x7882, + 0x789b, 0x0010, 0xa286, 0x000c, 0x00c0, 0x2a3b, 0x7aaa, 0x2001, + 0x0001, 0x0078, 0x2a50, 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, + 0xa286, 0x000d, 0x0040, 0x2a49, 0x7aaa, 0x2001, 0x0002, 0x0078, + 0x2a50, 0x78ab, 0x0020, 0x7178, 0x79aa, 0x7aaa, 0x2001, 0x0004, + 0x789b, 0x0060, 0x78aa, 0x785b, 0x0004, 0x781b, 0x0110, 0x1078, + 0x42cf, 0x7083, 0x000f, 0x70d4, 0xd0b4, 0x0040, 0x2a6c, 0xc0b4, + 0x70d6, 0x0c7e, 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, + 0x6018, 0x8001, 0x601a, 0x0c7f, 0x007c, 0x7014, 0xa005, 0x00c0, + 0x2a7b, 0x70d4, 0xd0b4, 0x0040, 0x2a7c, 0x70b8, 0xac06, 0x00c0, + 0x2a7c, 0x1078, 0x2a5b, 0x007c, 0x017e, 0x71a4, 0xa186, 0x0001, + 0x0040, 0x2aae, 0x0d7e, 0x027e, 0x2100, 0x2011, 0x0001, 0xa212, + 0x70b4, 0x2068, 0x6800, 0xac06, 0x0040, 0x2a95, 0x8211, 0x0040, + 0x2aac, 0x1078, 0x2ab0, 0x0078, 0x2a8a, 0x0c7e, 0x2100, 0x2011, + 0x0001, 0xa212, 0x70b4, 0x2068, 0x6800, 0x2060, 0x6008, 0xa084, + 0xfbef, 0x600a, 0x8211, 0x0040, 0x2aa9, 0x1078, 0x2ab0, 0x0078, + 0x2a9c, 0x70a7, 0x0001, 0x0c7f, 0x027f, 0x0d7f, 0x017f, 0x007c, + 0xade8, 0x0005, 0x70ac, 0xad06, 0x00c0, 0x2ab8, 0x70a8, 0x2068, + 0x007c, 0x1078, 0x42ba, 0x00c0, 0x2962, 0x707c, 0x2068, 0x7774, + 0x1078, 0x4158, 0x2c50, 0x1078, 0x438e, 0x789b, 0x0010, 0x6814, + 0xa084, 0x001f, 0xc0bd, 0x78aa, 0x6e1c, 0x2041, 0x0001, 0x2001, + 0x0004, 0x0078, 0x2c32, 0x1078, 0x42ba, 0x00c0, 0x2962, 0x789b, + 0x0010, 0x7060, 0x2068, 0x6f14, 0x70d4, 0xd0b4, 0x0040, 0x2aed, + 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, + 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, 0x1078, 0x4158, 0x2c50, + 0x1078, 0x438e, 0x6824, 0xa005, 0x0040, 0x2afe, 0xa082, 0x0006, + 0x0048, 0x2afc, 0x0078, 0x2afe, 0x6827, 0x0005, 0x6814, 0xa084, + 0x001f, 0xc0bd, 0x78aa, 0x2031, 0x0020, 0x2041, 0x0001, 0x2001, + 0x0003, 0x0078, 0x2c32, 0xc28d, 0x72d6, 0x72c0, 0xa200, 0xa015, + 0x7154, 0x8108, 0xa12a, 0x0048, 0x2b16, 0x71c0, 0x2164, 0x6504, + 0x85ff, 0x00c0, 0x2b2d, 0x7156, 0x8421, 0x00c0, 0x2b11, 0x70d4, + 0xd08c, 0x0040, 0x2b29, 0x70d0, 0xa005, 0x00c0, 0x2b29, 0x70d3, + 0x000a, 0x007c, 0x2200, 0x0078, 0x2b1b, 0x70d4, 0xc08c, 0x70d6, + 0x70d3, 0x0000, 0x6034, 0xa005, 0x00c0, 0x2b2a, 0x6708, 0xa784, + 0x073f, 0x0040, 0x2b5c, 0xd7d4, 0x00c0, 0x2b2a, 0xa784, 0x0021, + 0x00c0, 0x2b2a, 0xa784, 0x0002, 0x0040, 0x2b4d, 0xa784, 0x0004, + 0x0040, 0x2b2a, 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0218, 0x00c0, + 0x2b2a, 0xa784, 0x0100, 0x0040, 0x2b5c, 0x6018, 0xa005, 0x00c0, + 0x2b2a, 0xa7bc, 0xfeff, 0x670a, 0x2568, 0x6823, 0x0000, 0x6e1c, + 0xa684, 0x000e, 0x6318, 0x0040, 0x2b6d, 0x601c, 0xa302, 0x0048, + 0x2b70, 0x0040, 0x2b70, 0x0078, 0x2b2a, 0x83ff, 0x00c0, 0x2b2a, + 0x2d58, 0x2c50, 0x7156, 0xd7bc, 0x00c0, 0x2b78, 0x7028, 0x6022, + 0xc7bc, 0x670a, 0x68c0, 0xa065, 0xa04d, 0x6100, 0x2a60, 0x2041, + 0x0001, 0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0, 0xd1fc, 0x0040, + 0x2b8c, 0xd684, 0x0040, 0x2b8e, 0xa39c, 0xffbf, 0xd6a4, 0x0040, + 0x2b93, 0xa39d, 0x0020, 0xa684, 0x000e, 0x00c0, 0x2bde, 0xc7a5, + 0x670a, 0x2c00, 0x68c6, 0x77a4, 0xa786, 0x0001, 0x00c0, 0x2bb2, + 0x70d4, 0xd0b4, 0x00c0, 0x2bb2, 0x7000, 0xa082, 0x0002, 0x00c8, + 0x2bb2, 0x7830, 0xd0bc, 0x00c0, 0x2bb2, 0x789b, 0x0010, 0x7baa, + 0x0078, 0x2c2a, 0x8739, 0x77a6, 0x2750, 0x77b0, 0xa7b0, 0x0005, + 0x70ac, 0xa606, 0x00c0, 0x2bbd, 0x76a8, 0x76b2, 0x2c3a, 0x8738, + 0x2d3a, 0x8738, 0x283a, 0x8738, 0x233a, 0x8738, 0x253a, 0x7830, + 0xd0bc, 0x0040, 0x2bd5, 0x2091, 0x8000, 0x2091, 0x303d, 0x70d4, + 0xa084, 0x303d, 0x2091, 0x8000, 0x2090, 0xaad5, 0x0000, 0x0040, + 0x2bdd, 0x8421, 0x2200, 0x00c0, 0x2b10, 0x007c, 0xd1dc, 0x0040, + 0x3d57, 0x2029, 0x0020, 0xd69c, 0x00c0, 0x2beb, 0x8528, 0xd68c, + 0x00c0, 0x2beb, 0x8528, 0x8840, 0x6f14, 0x610c, 0x8108, 0xa18c, + 0x00ff, 0x70cc, 0xa160, 0x2c64, 0x8cff, 0x0040, 0x2c0a, 0x6014, + 0xa706, 0x00c0, 0x2bf3, 0x60b8, 0x8001, 0x60ba, 0x00c0, 0x2bee, + 0x2a60, 0x6008, 0xa085, 0x0100, 0x600a, 0x2200, 0x8421, 0x00c0, + 0x2b10, 0x007c, 0x2a60, 0x610e, 0x69be, 0x2c00, 0x68c6, 0x8840, + 0x6008, 0xc0d5, 0x600a, 0x77a4, 0xa786, 0x0001, 0x00c0, 0x2bb2, + 0x70d4, 0xd0b4, 0x00c0, 0x2bb2, 0x7000, 0xa082, 0x0002, 0x00c8, + 0x2bb2, 0x7830, 0xd0bc, 0x00c0, 0x2bb2, 0x789b, 0x0010, 0x7baa, + 0x7daa, 0x79aa, 0x2001, 0x0002, 0x007e, 0x6018, 0x8000, 0x601a, + 0x0078, 0x2c33, 0x007e, 0x2960, 0x6104, 0x2a60, 0xa184, 0x0018, + 0x0040, 0x2c4f, 0xa184, 0x0010, 0x0040, 0x2c42, 0x1078, 0x3f6a, + 0x00c0, 0x2c74, 0xa184, 0x0008, 0x0040, 0x2c4f, 0x69a0, 0xa184, + 0x0600, 0x00c0, 0x2c4f, 0x1078, 0x3e4d, 0x0078, 0x2c74, 0x69a0, + 0xa184, 0x1e00, 0x0040, 0x2c7f, 0xa184, 0x0800, 0x0040, 0x2c68, + 0x0c7e, 0x2960, 0x6000, 0xa085, 0x2000, 0x6002, 0x6104, 0xa18d, + 0x0010, 0x6106, 0x0c7f, 0x1078, 0x3f6a, 0x00c0, 0x2c74, 0x69a0, + 0xa184, 0x0200, 0x0040, 0x2c70, 0x1078, 0x3ead, 0x0078, 0x2c74, + 0xa184, 0x0400, 0x00c0, 0x2c4b, 0x69a0, 0xa184, 0x1000, 0x0040, + 0x2c7f, 0x6914, 0xa18c, 0xff00, 0x810f, 0x1078, 0x2755, 0x027f, + 0xa68c, 0x00e0, 0xa684, 0x0060, 0x0040, 0x2c8c, 0xa086, 0x0060, + 0x00c0, 0x2c8c, 0xa18d, 0x4000, 0xa18d, 0x0104, 0x69b6, 0x789b, + 0x0060, 0x2800, 0x78aa, 0x6818, 0xc0fd, 0x681a, 0xd6bc, 0x0040, + 0x2ca7, 0xc0fc, 0x7087, 0x0000, 0xa08a, 0x000d, 0x0050, 0x2ca5, + 0xa08a, 0x000c, 0x7186, 0x2001, 0x000c, 0x800c, 0x718a, 0x78aa, + 0x3518, 0x3340, 0x3428, 0x8000, 0x80ac, 0xaf80, 0x002b, 0x20a0, + 0x789b, 0x0000, 0xad80, 0x000b, 0x2098, 0x53a6, 0x23a8, 0x2898, + 0x25a0, 0xa286, 0x0020, 0x00c0, 0x2cdf, 0x70d4, 0xc0b5, 0x70d6, + 0x2c00, 0x70ba, 0x2d00, 0x70be, 0x6814, 0xc0fc, 0x8007, 0x7882, + 0xa286, 0x0002, 0x0040, 0x2d15, 0x70a4, 0x8000, 0x70a6, 0x74b4, + 0xa498, 0x0005, 0x70ac, 0xa306, 0x00c0, 0x2cd7, 0x73a8, 0x73b6, + 0xa286, 0x0010, 0x0040, 0x2962, 0x0d7f, 0x0c7f, 0x007c, 0x7000, + 0xa005, 0x00c0, 0x2cbd, 0xa286, 0x0002, 0x00c0, 0x2d2f, 0x1078, + 0x42ba, 0x00c0, 0x2cbd, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x2091, + 0x8000, 0x781b, 0x005b, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, + 0x6898, 0x78d2, 0x78da, 0x2091, 0x8001, 0x7808, 0xc08d, 0x780a, + 0x127e, 0x0d7e, 0x0c7e, 0x70d4, 0xa084, 0x2700, 0x2090, 0x0c7f, + 0x0d7f, 0x127f, 0x2900, 0x705a, 0x68bc, 0x7042, 0x7003, 0x0002, + 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x7830, 0xd0bc, 0x0040, + 0x2d21, 0x2091, 0x303d, 0x70d4, 0xa084, 0x303d, 0x2091, 0x8000, + 0x2090, 0x70a4, 0xa005, 0x00c0, 0x2d26, 0x007c, 0x8421, 0x0040, + 0x2d25, 0x7250, 0x70c0, 0xa200, 0xa015, 0x0078, 0x2b10, 0xa286, + 0x0010, 0x00c0, 0x2d60, 0x1078, 0x42ba, 0x00c0, 0x2cbd, 0x6814, + 0xc0fc, 0x8007, 0x7882, 0x781b, 0x005b, 0x68b4, 0x785a, 0x6894, + 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, 0xc08d, 0x780a, + 0x70a4, 0x8000, 0x70a6, 0x74b4, 0xa490, 0x0005, 0x70ac, 0xa206, + 0x00c0, 0x2d53, 0x72a8, 0x72b6, 0x2900, 0x705a, 0x68bc, 0x7042, + 0x7003, 0x0002, 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x007c, + 0x6bb4, 0xa39d, 0x2000, 0x7b5a, 0x6814, 0xc0fc, 0x8007, 0x7882, + 0x6b94, 0x7bd6, 0x7bde, 0x6e98, 0x7ed2, 0x7eda, 0x781b, 0x005b, + 0x2900, 0x705a, 0x7202, 0x7808, 0xc08d, 0x780a, 0x2300, 0xa605, + 0x0040, 0x2d8b, 0x70d4, 0xa084, 0x2700, 0xa086, 0x2300, 0x00c0, + 0x2d85, 0x2009, 0x0000, 0x0078, 0x2d87, 0x2009, 0x0001, 0xa284, + 0x000f, 0x1079, 0x2d8f, 0xad80, 0x0009, 0x7046, 0x007c, 0x2d97, + 0x4805, 0x4805, 0x47f2, 0x4805, 0x2d97, 0x2d97, 0x2d97, 0x1078, + 0x290c, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0f7e, 0x2079, 0x4d00, + 0x78ac, 0x0f7f, 0xd084, 0x0040, 0x2dbf, 0x7064, 0xa086, 0x0001, + 0x00c0, 0x2dad, 0x7066, 0x0078, 0x2e96, 0x7064, 0xa086, 0x0005, + 0x00c0, 0x2dbd, 0x707c, 0x2068, 0x681b, 0x0004, 0x6817, 0x0000, + 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x7067, 0x0000, 0x70a7, + 0x0000, 0x70a8, 0x70b2, 0x70b6, 0x1078, 0x2a5b, 0x157e, 0x2011, + 0x0004, 0x7164, 0xa186, 0x0001, 0x0040, 0x2ddf, 0xa186, 0x0007, + 0x00c0, 0x2dd6, 0x701f, 0x0005, 0x0078, 0x2ddf, 0x701f, 0x0001, + 0x7067, 0x0000, 0x70d4, 0xc0dd, 0x70d6, 0x0078, 0x2de1, 0x7067, + 0x0000, 0x2001, 0x4d0a, 0x2004, 0xa084, 0x00ff, 0xa086, 0x0018, + 0x0040, 0x2df1, 0x7018, 0x7016, 0xa005, 0x00c0, 0x2df1, 0x70a7, + 0x0001, 0x067e, 0x1078, 0x44cc, 0x20a9, 0x0010, 0x2039, 0x0000, + 0x1078, 0x4052, 0xa7b8, 0x0100, 0x00f0, 0x2df8, 0x067f, 0x7000, + 0x0079, 0x2e02, 0x2e3c, 0x2e17, 0x2e17, 0x2e0c, 0x2e3c, 0x2e3c, + 0x2e3c, 0x2e0a, 0x1078, 0x290c, 0x7060, 0xa005, 0x0040, 0x2e3c, + 0xad06, 0x00c0, 0x2e17, 0x6800, 0x7062, 0x0078, 0x2e29, 0x6820, + 0xd084, 0x00c0, 0x2e25, 0x6f14, 0x1078, 0x4158, 0x6008, 0xc0d4, + 0x600a, 0x1078, 0x3d27, 0x0078, 0x2e29, 0x705c, 0x2060, 0x6800, + 0x6002, 0xa684, 0x5f00, 0x681e, 0x6818, 0xd0fc, 0x0040, 0x2e31, + 0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000, 0x6820, 0xa084, 0x00ff, + 0xc09d, 0x6822, 0x1078, 0x2013, 0xb284, 0x0400, 0x0040, 0x2e44, + 0x2021, 0x94d0, 0x0078, 0x2e46, 0x2021, 0x93c0, 0x1078, 0x2e9b, + 0xb284, 0x0400, 0x0040, 0x2e50, 0x2021, 0x4d98, 0x0078, 0x2e52, + 0x2021, 0x4d58, 0x1078, 0x2e9b, 0x20a9, 0x0101, 0xb284, 0x0400, + 0x0040, 0x2e5e, 0x2021, 0x93d0, 0x0078, 0x2e60, 0x2021, 0x92c0, + 0x1078, 0x2e9b, 0x8420, 0x00f0, 0x2e60, 0xb284, 0x0300, 0x0040, + 0x2e6d, 0x2061, 0x52c0, 0x0078, 0x2e6f, 0x2061, 0x72c0, 0x2021, + 0x0002, 0x20a9, 0x0100, 0x6110, 0x81ff, 0x0040, 0x2e8c, 0x6018, + 0x017e, 0x007e, 0x2011, 0x4d02, 0x220c, 0xa102, 0x2012, 0x007f, + 0x017f, 0xa102, 0x0050, 0x2e8c, 0x6012, 0x00c0, 0x2e8c, 0x2011, + 0x4d04, 0x2204, 0xc0a5, 0x2012, 0x601b, 0x0000, 0xace0, 0x0010, + 0x00f0, 0x2e73, 0x8421, 0x00c0, 0x2e71, 0x157f, 0x7003, 0x0000, + 0x704f, 0x0000, 0x007c, 0x047e, 0x2404, 0xa005, 0x0040, 0x2eb6, + 0x2068, 0x6800, 0x007e, 0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000, + 0x68b4, 0xa084, 0x5f00, 0x681e, 0x6820, 0xa084, 0x00ff, 0xc09d, + 0x6822, 0x1078, 0x2013, 0x007f, 0x0078, 0x2e9d, 0x047f, 0x2023, + 0x0000, 0x007c, 0xa282, 0x0003, 0x0050, 0x2ec0, 0x1078, 0x290c, + 0x2300, 0x0079, 0x2ec3, 0x2ec6, 0x2f51, 0x2f6e, 0xa282, 0x0002, + 0x0040, 0x2ecc, 0x1078, 0x290c, 0x7064, 0x7067, 0x0000, 0x7083, + 0x0000, 0x0079, 0x2ed3, 0x2edb, 0x2edb, 0x2edd, 0x2f1d, 0x3d63, + 0x2edb, 0x2f1d, 0x2edb, 0x1078, 0x290c, 0x7774, 0x1078, 0x4052, + 0x7774, 0xa7bc, 0x8f00, 0x1078, 0x4158, 0x6018, 0xa005, 0x0040, + 0x2f14, 0xd7fc, 0x00c0, 0x2ef0, 0x2021, 0x93c0, 0x0078, 0x2ef2, + 0x2021, 0x94d0, 0x2009, 0x0005, 0x2011, 0x0010, 0x1078, 0x2f89, + 0x0040, 0x2f14, 0x157e, 0x20a9, 0x0101, 0xd7fc, 0x00c0, 0x2f04, + 0x2021, 0x92c0, 0x0078, 0x2f06, 0x2021, 0x93d0, 0x047e, 0x2009, + 0x0005, 0x2011, 0x0010, 0x1078, 0x2f89, 0x047f, 0x0040, 0x2f13, + 0x8420, 0x00f0, 0x2f06, 0x157f, 0x8738, 0xa784, 0x001f, 0x00c0, + 0x2ee3, 0x0078, 0x2966, 0x0078, 0x2966, 0x7774, 0x1078, 0x4158, + 0x6018, 0xa005, 0x0040, 0x2f4f, 0xd7fc, 0x00c0, 0x2f2b, 0x2021, + 0x93c0, 0x0078, 0x2f2d, 0x2021, 0x94d0, 0x2009, 0x0005, 0x2011, + 0x0020, 0x1078, 0x2f89, 0x0040, 0x2f4f, 0x157e, 0x20a9, 0x0101, + 0xd7fc, 0x00c0, 0x2f3f, 0x2021, 0x92c0, 0x0078, 0x2f41, 0x2021, + 0x93d0, 0x047e, 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x2f89, + 0x047f, 0x0040, 0x2f4e, 0x8420, 0x00f0, 0x2f41, 0x157f, 0x0078, + 0x2966, 0x2200, 0x0079, 0x2f54, 0x2f57, 0x2f59, 0x2f59, 0x1078, + 0x290c, 0x2009, 0x0012, 0x7064, 0xa086, 0x0002, 0x0040, 0x2f62, + 0x2009, 0x000e, 0x6818, 0xd0fc, 0x0040, 0x2f67, 0x691a, 0x7067, + 0x0000, 0x70d4, 0xc0dd, 0x70d6, 0x0078, 0x4267, 0x2200, 0x0079, + 0x2f71, 0x2f76, 0x2f59, 0x2f74, 0x1078, 0x290c, 0x1078, 0x44cc, + 0x7000, 0xa086, 0x0002, 0x00c0, 0x3cd5, 0x1078, 0x3d44, 0x6008, + 0xa084, 0xfbef, 0x600a, 0x1078, 0x3cc6, 0x0040, 0x3cd5, 0x0078, + 0x2966, 0x2404, 0xa005, 0x0040, 0x2fc2, 0x2068, 0x2d04, 0x007e, + 0x6814, 0xa706, 0x0040, 0x2f98, 0x2d20, 0x007f, 0x0078, 0x2f8a, + 0x007f, 0x2022, 0x691a, 0x6817, 0x0000, 0x682b, 0x0000, 0x68b4, + 0xa084, 0x5f00, 0x681e, 0x6820, 0xa084, 0x00ff, 0xa205, 0x6822, + 0x1078, 0x2013, 0x2021, 0x4d02, 0x241c, 0x8319, 0x2322, 0x6010, + 0x8001, 0x6012, 0x00c0, 0x2fb9, 0x2021, 0x4d04, 0x2404, 0xc0a5, + 0x2022, 0x6008, 0xa084, 0xf9ef, 0x600a, 0x1078, 0x2a7c, 0x1078, + 0x3d44, 0x007c, 0xa085, 0x0001, 0x0078, 0x2fc1, 0x2300, 0x0079, + 0x2fc9, 0x2fce, 0x2fcc, 0x304e, 0x1078, 0x290c, 0x78e4, 0xa005, + 0x00d0, 0x3004, 0x3208, 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, + 0x007f, 0x0040, 0x2fdf, 0xa18c, 0x0300, 0x0078, 0x2fe1, 0xa18c, + 0x0400, 0x0040, 0x2fe7, 0x0018, 0x2962, 0x0078, 0x2fe9, 0x0028, + 0x2962, 0x2008, 0xa084, 0x0030, 0x00c0, 0x2ff0, 0x0078, 0x36fb, + 0x78ec, 0xa084, 0x0003, 0x0040, 0x2fee, 0x2100, 0xa084, 0x0007, + 0x0079, 0x2ffa, 0x302e, 0x3038, 0x3023, 0x3002, 0x42af, 0x42af, + 0x3002, 0x3043, 0x1078, 0x290c, 0x7000, 0xa086, 0x0004, 0x00c0, + 0x301e, 0x7064, 0xa086, 0x0002, 0x00c0, 0x3014, 0x2011, 0x0002, + 0x2019, 0x0000, 0x0078, 0x2eba, 0x7064, 0xa086, 0x0006, 0x0040, + 0x300e, 0x7064, 0xa086, 0x0004, 0x0040, 0x300e, 0x79e4, 0x2001, + 0x0003, 0x0078, 0x3385, 0x6818, 0xd0fc, 0x0040, 0x3029, 0x681b, + 0x001d, 0x1078, 0x4022, 0x781b, 0x0061, 0x007c, 0x6818, 0xd0fc, + 0x0040, 0x3034, 0x681b, 0x001d, 0x1078, 0x4022, 0x0078, 0x428b, + 0x6818, 0xd0fc, 0x0040, 0x303e, 0x681b, 0x001d, 0x1078, 0x4022, + 0x781b, 0x00f5, 0x007c, 0x6818, 0xd0fc, 0x0040, 0x3049, 0x681b, + 0x001d, 0x1078, 0x4022, 0x781b, 0x00c5, 0x007c, 0xa584, 0x000f, + 0x00c0, 0x306b, 0x7000, 0x0079, 0x3055, 0x2966, 0x305d, 0x305f, + 0x3cd5, 0x3cd5, 0x3cd5, 0x305d, 0x305d, 0x1078, 0x290c, 0x1078, + 0x3d44, 0x6008, 0xa084, 0xfbef, 0x600a, 0x1078, 0x3cc6, 0x0040, + 0x3cd5, 0x0078, 0x2966, 0x78e4, 0xa005, 0x00d0, 0x3004, 0x3208, + 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x307c, + 0xa18c, 0x0300, 0x0078, 0x307e, 0xa18c, 0x0400, 0x0040, 0x3084, + 0x0018, 0x3004, 0x0078, 0x3086, 0x0028, 0x3004, 0x2008, 0xa084, + 0x0030, 0x00c0, 0x308e, 0x781b, 0x005b, 0x007c, 0x78ec, 0xa084, + 0x0003, 0x0040, 0x308b, 0x2100, 0xa184, 0x0007, 0x0079, 0x3098, + 0x30a7, 0x30ab, 0x30a2, 0x30a0, 0x42af, 0x42af, 0x30a0, 0x42a9, + 0x1078, 0x290c, 0x1078, 0x402a, 0x781b, 0x0061, 0x007c, 0x1078, + 0x402a, 0x0078, 0x428b, 0x1078, 0x402a, 0x781b, 0x00f5, 0x007c, + 0x1078, 0x402a, 0x781b, 0x00c5, 0x007c, 0x2300, 0x0079, 0x30b8, + 0x30bd, 0x30bb, 0x30bf, 0x1078, 0x290c, 0x0078, 0x38b0, 0x681b, + 0x0016, 0x78a3, 0x0000, 0x79e4, 0xa184, 0x0030, 0x0040, 0x38b0, + 0x78ec, 0xa084, 0x0003, 0x0040, 0x38b0, 0xa184, 0x0100, 0x0040, + 0x30c3, 0xa184, 0x0007, 0x0079, 0x30d5, 0x30dd, 0x30ab, 0x3023, + 0x4267, 0x42af, 0x42af, 0x4267, 0x42a9, 0x1078, 0x4273, 0x007c, + 0xa282, 0x0005, 0x0050, 0x30e6, 0x1078, 0x290c, 0x2300, 0x0079, + 0x30e9, 0x30ec, 0x330b, 0x3316, 0x2200, 0x0079, 0x30ef, 0x3109, + 0x30f6, 0x3109, 0x30f4, 0x32ee, 0x1078, 0x290c, 0x789b, 0x0018, + 0x78a8, 0xa084, 0x00ff, 0xa082, 0x0020, 0x0048, 0x4011, 0xa08a, + 0x0004, 0x00c8, 0x4011, 0x0079, 0x3105, 0x4011, 0x4011, 0x4011, + 0x3fbb, 0x789b, 0x0018, 0x79a8, 0xa184, 0x0080, 0x0040, 0x311a, + 0x0078, 0x4011, 0x7000, 0xa005, 0x00c0, 0x3110, 0x2011, 0x0004, + 0x0078, 0x3a9b, 0xa184, 0x00ff, 0xa08a, 0x0010, 0x00c8, 0x4011, + 0x0079, 0x3122, 0x3134, 0x3132, 0x3149, 0x314d, 0x320f, 0x4011, + 0x4011, 0x3211, 0x4011, 0x4011, 0x32ea, 0x32ea, 0x4011, 0x4011, + 0x4011, 0x32ec, 0x1078, 0x290c, 0xd6e4, 0x0040, 0x313f, 0x2001, + 0x0300, 0x8000, 0x8000, 0x783a, 0x781b, 0x00c0, 0x007c, 0x6818, + 0xd0fc, 0x0040, 0x3147, 0x681b, 0x001d, 0x0078, 0x3137, 0x0078, + 0x4267, 0x681b, 0x001d, 0x0078, 0x401b, 0x6920, 0x6922, 0xa684, + 0x1800, 0x00c0, 0x31a1, 0x6820, 0xd084, 0x00c0, 0x31a7, 0x6818, + 0xa086, 0x0008, 0x00c0, 0x315e, 0x681b, 0x0000, 0xd6d4, 0x0040, + 0x320c, 0xd6bc, 0x0040, 0x319e, 0x7087, 0x0000, 0x6818, 0xa084, + 0x003f, 0xa08a, 0x000d, 0x0050, 0x319e, 0xa08a, 0x000c, 0x7186, + 0x2001, 0x000c, 0x800c, 0x718a, 0x789b, 0x0061, 0x78aa, 0x157e, + 0x137e, 0x147e, 0x017e, 0x3208, 0xa18c, 0x0300, 0x0040, 0x3190, + 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x318c, + 0x20a1, 0x012b, 0x0078, 0x3192, 0x20a1, 0x022b, 0x0078, 0x3192, + 0x20a1, 0x012b, 0x017f, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, + 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x781b, 0x0064, + 0x007c, 0xd6e4, 0x0040, 0x31a7, 0x781b, 0x0076, 0x007c, 0xa684, + 0x0060, 0x0040, 0x3209, 0xd6dc, 0x0040, 0x3209, 0xd6fc, 0x00c0, + 0x31b3, 0x0078, 0x31ca, 0xc6fc, 0x7e5a, 0x6eb6, 0x7adc, 0x79d8, + 0x78d0, 0x801b, 0x00c8, 0x31bd, 0x8000, 0xa084, 0x003f, 0xa108, + 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, + 0xa303, 0x68ae, 0xd6f4, 0x0040, 0x31d0, 0xc6f4, 0x7e5a, 0x6eb6, + 0x7000, 0xa086, 0x0003, 0x00c0, 0x31de, 0x007e, 0x1078, 0x44cc, + 0x1078, 0x4805, 0x007f, 0x781b, 0x0073, 0x007c, 0xa006, 0x1078, + 0x490b, 0x6ab0, 0x69ac, 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0040, + 0x31ed, 0x2200, 0xa422, 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x7cda, + 0x6ba6, 0x7bd6, 0x7bde, 0x2300, 0xa405, 0x00c0, 0x31fd, 0xc6f5, + 0x7e5a, 0x6eb6, 0x781b, 0x0073, 0x007c, 0x781b, 0x0073, 0x2200, + 0xa115, 0x00c0, 0x3206, 0x1078, 0x4805, 0x007c, 0x1078, 0x483d, + 0x007c, 0x781b, 0x0076, 0x007c, 0x781b, 0x0064, 0x007c, 0x1078, + 0x290c, 0x0078, 0x325d, 0x6920, 0xd1c4, 0x0040, 0x3226, 0xc1c4, + 0x6922, 0x0c7e, 0x7058, 0x2060, 0x6000, 0xc0e4, 0x6002, 0x6004, + 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x0078, 0x3251, 0xd1cc, 0x0040, + 0x3251, 0xc1cc, 0x6922, 0x0c7e, 0x7058, 0x2060, 0x6000, 0xc0ec, + 0x6002, 0x6004, 0xc0a4, 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xd19c, + 0x0040, 0x3251, 0x1078, 0x4154, 0x1078, 0x3e4d, 0x88ff, 0x0040, + 0x3251, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a, + 0xd6d4, 0x00c0, 0x324e, 0x781b, 0x0061, 0x007c, 0x781b, 0x0075, + 0x007c, 0x7e58, 0xd6d4, 0x00c0, 0x3258, 0x781b, 0x0064, 0x007c, + 0x781b, 0x0076, 0x007c, 0x0078, 0x4016, 0x2019, 0x0000, 0x7990, + 0xa18c, 0x0007, 0x00c0, 0x326b, 0x6820, 0xa084, 0x0100, 0x0040, + 0x325b, 0x2009, 0x0008, 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, + 0xa286, 0x0001, 0x00c0, 0x3287, 0x2300, 0x7ca8, 0xa400, 0x2018, + 0xa102, 0x0040, 0x327f, 0x0048, 0x327f, 0x0078, 0x3281, 0x0078, + 0x3213, 0x24a8, 0x7aa8, 0x00f0, 0x3281, 0x0078, 0x326d, 0xa284, + 0x00f0, 0xa086, 0x0020, 0x00c0, 0x32db, 0x8318, 0x8318, 0x2300, + 0xa102, 0x0040, 0x3297, 0x0048, 0x3297, 0x0078, 0x32d8, 0xa286, + 0x0023, 0x0040, 0x325b, 0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, + 0xa684, 0xfff1, 0xc0a5, 0x2030, 0x7e5a, 0x6008, 0xc0a5, 0x600a, + 0x0c7e, 0x7058, 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xd1a4, + 0x0040, 0x32b8, 0x1078, 0x4154, 0x1078, 0x3f6a, 0x0078, 0x32c6, + 0x0c7e, 0x7058, 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xd19c, + 0x0040, 0x3251, 0x1078, 0x4154, 0x1078, 0x3e4d, 0x88ff, 0x0040, + 0x3251, 0x789b, 0x0060, 0x2800, 0x78aa, 0xc695, 0x7e5a, 0xd6d4, + 0x00c0, 0x32d5, 0x781b, 0x0061, 0x007c, 0x781b, 0x0075, 0x007c, + 0x7aa8, 0x0078, 0x326d, 0x8318, 0x2300, 0xa102, 0x0040, 0x32e4, + 0x0048, 0x32e4, 0x0078, 0x326d, 0xa284, 0x0080, 0x00c0, 0x401b, + 0x0078, 0x4016, 0x0078, 0x401b, 0x0078, 0x4011, 0x7058, 0xa04d, + 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa08e, 0x0001, 0x0040, + 0x32fb, 0x1078, 0x290c, 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084, + 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x4011, 0x0079, 0x3307, 0x4011, + 0x3d9f, 0x4011, 0x3f12, 0xa282, 0x0000, 0x00c0, 0x3311, 0x1078, + 0x290c, 0x1078, 0x4022, 0x781b, 0x0075, 0x007c, 0xa282, 0x0003, + 0x00c0, 0x331c, 0x1078, 0x290c, 0xd4fc, 0x00c0, 0x333c, 0x7064, + 0xa005, 0x0040, 0x3325, 0x1078, 0x290c, 0x6f14, 0x7776, 0xa7bc, + 0x8f00, 0x1078, 0x4158, 0x6008, 0xa085, 0x0021, 0x600a, 0x8738, + 0xa784, 0x001f, 0x00c0, 0x3329, 0x1078, 0x4026, 0x7067, 0x0002, + 0x701f, 0x0009, 0x0078, 0x333e, 0x1078, 0x4035, 0x781b, 0x0075, + 0x007c, 0xa282, 0x0004, 0x0050, 0x3347, 0x1078, 0x290c, 0x2300, + 0x0079, 0x334a, 0x334d, 0x350d, 0x3550, 0xa286, 0x0003, 0x0040, + 0x3385, 0x7200, 0x7cd8, 0x7ddc, 0x7fd0, 0x71d4, 0xd1bc, 0x00c0, + 0x337d, 0xd1b4, 0x0040, 0x337d, 0x7868, 0xa084, 0x00ff, 0x00c0, + 0x337d, 0xa282, 0x0002, 0x00c8, 0x337d, 0x0d7e, 0x783b, 0x8300, + 0x781b, 0x004c, 0x70bc, 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, + 0x78de, 0x6898, 0x78d2, 0x78da, 0xc1b4, 0x71d6, 0x7003, 0x0030, + 0x0d7f, 0x2001, 0x0000, 0x0078, 0x3389, 0x783b, 0x1300, 0x781b, + 0x004a, 0x2001, 0x0000, 0x0078, 0x3389, 0x7200, 0x7cd8, 0x7ddc, + 0x7fd0, 0x704a, 0x68a0, 0xd0ec, 0x0040, 0x3391, 0x6008, 0xc08d, + 0x600a, 0xa284, 0x000f, 0x0079, 0x3395, 0x34ed, 0x33a2, 0x339f, + 0x3653, 0x36df, 0x2966, 0x339d, 0x339d, 0x1078, 0x290c, 0x6008, + 0xc0d4, 0x600a, 0xd6e4, 0x0040, 0x33aa, 0x7048, 0xa086, 0x0014, + 0x00c0, 0x33ca, 0x1078, 0x44cc, 0x2009, 0x0000, 0x6818, 0xd0fc, + 0x0040, 0x33b3, 0x7048, 0xa086, 0x0014, 0x0040, 0x33c4, 0x6818, + 0xa086, 0x0008, 0x00c0, 0x34a5, 0x7858, 0xd09c, 0x0040, 0x34a5, + 0x6820, 0xd0ac, 0x0040, 0x34a5, 0x681b, 0x0014, 0x2009, 0x0002, + 0x0078, 0x3409, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x3409, 0xa186, + 0x0008, 0x00c0, 0x33e0, 0x6008, 0xc0a4, 0x600a, 0x1078, 0x3cc6, + 0x0040, 0x3409, 0x1078, 0x3d44, 0x1078, 0x44cc, 0x0078, 0x33f1, + 0xa186, 0x0028, 0x00c0, 0x3409, 0x6018, 0xa005, 0x0040, 0x33d3, + 0x8001, 0x0040, 0x33d3, 0x8001, 0x0040, 0x33d3, 0x601e, 0x0078, + 0x33d3, 0x6820, 0xd084, 0x0040, 0x2966, 0xc084, 0x6822, 0x1078, + 0x2a6d, 0x705c, 0x0c7e, 0x2060, 0x6800, 0x6002, 0x0c7f, 0x6004, + 0x6802, 0xa005, 0x2d00, 0x00c0, 0x3406, 0x6002, 0x6006, 0x0078, + 0x2966, 0x017e, 0x81ff, 0x00c0, 0x3453, 0x7000, 0xa086, 0x0030, + 0x0040, 0x3453, 0x71d4, 0xd1bc, 0x00c0, 0x3453, 0xd1b4, 0x00c0, + 0x343a, 0x7060, 0xa005, 0x00c0, 0x3453, 0x70a4, 0xa086, 0x0001, + 0x0040, 0x3453, 0x7003, 0x0000, 0x047e, 0x057e, 0x077e, 0x067e, + 0x0c7e, 0x0d7e, 0x1078, 0x298f, 0x0d7f, 0x0c7f, 0x067f, 0x077f, + 0x057f, 0x047f, 0x71d4, 0xd1b4, 0x00c0, 0x3453, 0x7003, 0x0040, + 0x0078, 0x3453, 0x1078, 0x42ba, 0x00c0, 0x3453, 0x781b, 0x005b, + 0x0d7e, 0x70bc, 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, + 0x6898, 0x78d2, 0x78da, 0xc1b4, 0x71d6, 0x7003, 0x0030, 0x7808, + 0xc08d, 0x780a, 0x0d7f, 0x1078, 0x358a, 0x017f, 0x81ff, 0x0040, + 0x34a5, 0xa684, 0xdf00, 0x681e, 0x682b, 0x0000, 0x6f14, 0xa186, + 0x0002, 0x00c0, 0x34a6, 0x6818, 0xa086, 0x0014, 0x00c0, 0x346f, + 0x2008, 0xd6e4, 0x0040, 0x346f, 0x7868, 0xa08c, 0x00ff, 0x1078, + 0x2a5b, 0x1078, 0x2a7c, 0x6820, 0xd0dc, 0x00c0, 0x34a6, 0x8717, + 0xa294, 0x000f, 0x8213, 0x8213, 0x8213, 0xb284, 0x0300, 0x0040, + 0x3485, 0xa290, 0x51c0, 0x0078, 0x3487, 0xa290, 0x5240, 0xa290, + 0x0000, 0x221c, 0xd3c4, 0x00c0, 0x348f, 0x0078, 0x3495, 0x8210, + 0x2204, 0xa085, 0x0018, 0x2012, 0x8211, 0xd3d4, 0x0040, 0x34a0, + 0x68a0, 0xd0c4, 0x00c0, 0x34a0, 0x1078, 0x3604, 0x0078, 0x2966, + 0x6008, 0xc08d, 0x600a, 0x0078, 0x34a6, 0x692a, 0x6916, 0x6818, + 0xd0fc, 0x0040, 0x34ad, 0x7048, 0x681a, 0xa68c, 0xdf00, 0x691e, + 0x6410, 0x84ff, 0x0040, 0x34c2, 0x2009, 0x4d02, 0x2104, 0x8001, + 0x200a, 0x8421, 0x6412, 0x00c0, 0x34c2, 0x2021, 0x4d04, 0x2404, + 0xc0a5, 0x2022, 0x6018, 0xa005, 0x0040, 0x34ca, 0x8001, 0x601a, + 0x00c0, 0x34cd, 0x6008, 0xc0a4, 0x600a, 0x6820, 0xd084, 0x00c0, + 0x34d9, 0x6800, 0xa005, 0x00c0, 0x34d6, 0x6002, 0x6006, 0x0078, + 0x34dd, 0x705c, 0x2060, 0x6800, 0x6002, 0x2061, 0x4d00, 0x6887, + 0x0103, 0x2d08, 0x206b, 0x0000, 0x6068, 0xa005, 0x616a, 0x0040, + 0x34ec, 0x2d02, 0x0078, 0x34ed, 0x616e, 0x7200, 0xa286, 0x0030, + 0x0040, 0x34fd, 0xa286, 0x0040, 0x00c0, 0x2966, 0x7003, 0x0002, + 0x704c, 0x2068, 0x68c4, 0x2060, 0x007c, 0x7003, 0x0002, 0x70bc, + 0xa06d, 0x68bc, 0x7042, 0x70b8, 0xa065, 0x68c0, 0x705a, 0x2d00, + 0x704e, 0xad80, 0x0009, 0x7046, 0x007c, 0xa282, 0x0004, 0x0048, + 0x3513, 0x1078, 0x290c, 0x2200, 0x0079, 0x3516, 0x351a, 0x352b, + 0x3538, 0x352b, 0xa586, 0x1300, 0x0040, 0x352b, 0xa586, 0x8300, + 0x00c0, 0x3511, 0x7003, 0x0000, 0x6018, 0x8001, 0x601a, 0x6008, + 0xa084, 0xfbef, 0x600a, 0x7000, 0xa086, 0x0005, 0x0040, 0x3535, + 0x1078, 0x4022, 0x781b, 0x0075, 0x007c, 0x781b, 0x0076, 0x007c, + 0x7890, 0x8007, 0x8001, 0xa084, 0x0007, 0xa080, 0x0018, 0x789a, + 0x79a8, 0xa18c, 0x00ff, 0xa186, 0x0003, 0x0040, 0x354d, 0xa186, + 0x0000, 0x0040, 0x354d, 0x0078, 0x4011, 0x781b, 0x0076, 0x007c, + 0x6820, 0xc095, 0x6822, 0x82ff, 0x00c0, 0x355a, 0x1078, 0x4022, + 0x0078, 0x3561, 0x8211, 0x0040, 0x355f, 0x1078, 0x290c, 0x1078, + 0x4035, 0x781b, 0x0075, 0x007c, 0x1078, 0x42cf, 0x7830, 0xa084, + 0x00c0, 0x00c0, 0x3587, 0x017e, 0x3208, 0x007e, 0x2001, 0x4d04, + 0x2004, 0xd0ec, 0x007f, 0x0040, 0x3579, 0xa18c, 0x0300, 0x0078, + 0x357b, 0xa18c, 0x0400, 0x017f, 0x0040, 0x3582, 0x0018, 0x3587, + 0x0078, 0x3584, 0x0028, 0x3587, 0x791a, 0xa006, 0x007c, 0xa085, + 0x0001, 0x007c, 0xa684, 0x0060, 0x00c0, 0x3594, 0x682f, 0x0000, + 0x6833, 0x0000, 0x0078, 0x3603, 0xd6dc, 0x00c0, 0x35ac, 0x68b4, + 0xd0dc, 0x00c0, 0x35ac, 0x6998, 0x6a94, 0x692e, 0x6a32, 0x7048, + 0xa005, 0x00c0, 0x35a9, 0x2200, 0xa105, 0x0040, 0x44cc, 0x704b, + 0x0015, 0x0078, 0x44cc, 0x007c, 0xd6ac, 0x0040, 0x35d2, 0xd6f4, + 0x0040, 0x35b8, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x44cc, + 0x68b4, 0xa084, 0x4000, 0xa635, 0xd6f4, 0x00c0, 0x35b2, 0x7048, + 0xa005, 0x00c0, 0x35c5, 0x704b, 0x0015, 0xd6dc, 0x00c0, 0x35ce, + 0x68b4, 0xd0dc, 0x0040, 0x35ce, 0x6ca8, 0x6da4, 0x6c2e, 0x6d32, + 0x0078, 0x44cc, 0xd6f4, 0x0040, 0x35db, 0x682f, 0x0000, 0x6833, + 0x0000, 0x0078, 0x44cc, 0x68b4, 0xa084, 0x4800, 0xa635, 0xd6f4, + 0x00c0, 0x35d5, 0x7048, 0xa005, 0x00c0, 0x35e8, 0x704b, 0x0015, + 0x2408, 0x2510, 0x2700, 0x80fb, 0x00c8, 0x35ef, 0x8000, 0xa084, + 0x003f, 0xa108, 0xa291, 0x0000, 0x692e, 0x6a32, 0x2100, 0xa205, + 0x00c0, 0x35fc, 0x0078, 0x44cc, 0x7000, 0xa086, 0x0006, 0x0040, + 0x3603, 0x0078, 0x44cc, 0x007c, 0x6946, 0x6008, 0xc0cd, 0xd3cc, + 0x0040, 0x360b, 0xc08d, 0x600a, 0x6818, 0x683a, 0x681b, 0x0006, + 0x688f, 0x0000, 0x6893, 0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942, + 0x682f, 0x0003, 0x6833, 0x0000, 0x6837, 0x0020, 0x6897, 0x0000, + 0x689b, 0x0020, 0x7000, 0x0079, 0x3625, 0x2966, 0x3637, 0x362f, + 0x362d, 0x362d, 0x362d, 0x362d, 0x362d, 0x1078, 0x290c, 0x6820, + 0xd084, 0x00c0, 0x3637, 0x1078, 0x3d27, 0x0078, 0x363d, 0x705c, + 0x2c50, 0x2060, 0x6800, 0x6002, 0x2a60, 0x3208, 0xa18c, 0x0300, + 0x0040, 0x3646, 0x2021, 0x4d58, 0x0078, 0x3648, 0x2021, 0x4d98, + 0x2404, 0xa005, 0x0040, 0x364f, 0x2020, 0x0078, 0x3648, 0x2d22, + 0x206b, 0x0000, 0x007c, 0x1078, 0x3d2e, 0x1078, 0x3d44, 0x6008, + 0xc0cc, 0x600a, 0x682b, 0x0000, 0x789b, 0x000e, 0x6f14, 0x6938, + 0x691a, 0x6944, 0x6916, 0x3208, 0xa18c, 0x0300, 0x0040, 0x366c, + 0x2009, 0x0000, 0x0078, 0x366e, 0x2009, 0x0001, 0x1078, 0x4940, + 0xd6dc, 0x0040, 0x3676, 0x691c, 0xc1ed, 0x691e, 0x6818, 0xd0fc, + 0x0040, 0x3685, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x3683, 0x681b, + 0x001e, 0x0078, 0x3685, 0x681b, 0x0000, 0xb284, 0x0300, 0x00c0, + 0x368d, 0x2021, 0x4d98, 0x0078, 0x368f, 0x2021, 0x4d58, 0x6800, + 0x2022, 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x68c0, 0x2060, 0x6000, + 0xd0a4, 0x0040, 0x36cf, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, + 0x0020, 0x0d7e, 0x0f7e, 0x157e, 0x147e, 0x2079, 0x4d00, 0x1078, + 0x1de6, 0x147f, 0x157f, 0x0f7f, 0x70cc, 0x2010, 0x2009, 0x0101, + 0x027e, 0x2204, 0xa06d, 0x0040, 0x36bf, 0x6814, 0xa706, 0x0040, + 0x36bc, 0x6800, 0x0078, 0x36b2, 0x6820, 0xc0d5, 0x6822, 0x027f, + 0x8210, 0x8109, 0x00c0, 0x36b0, 0x0d7f, 0x7067, 0x0003, 0x707f, + 0x0000, 0x7776, 0x7083, 0x000f, 0x71d4, 0xc1dc, 0x71d6, 0x6818, + 0xa086, 0x0002, 0x00c0, 0x36db, 0x6817, 0x0000, 0x682b, 0x0000, + 0x681c, 0xc0ec, 0x681e, 0x1078, 0x2013, 0x0078, 0x2966, 0x7cd8, + 0x7ddc, 0x7fd0, 0x1078, 0x358a, 0x682b, 0x0000, 0x789b, 0x000e, + 0x6f14, 0x1078, 0x42d3, 0xa08c, 0x00ff, 0x6916, 0x6818, 0xd0fc, + 0x0040, 0x36f4, 0x7048, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x7067, + 0x0000, 0x0078, 0x2966, 0x7000, 0xa005, 0x00c0, 0x3701, 0x0078, + 0x2966, 0xa006, 0x1078, 0x44cc, 0x6920, 0xd1ac, 0x00c0, 0x370a, + 0x681b, 0x0014, 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, 0x6820, + 0xa084, 0x00ff, 0x6822, 0x7000, 0x0079, 0x3716, 0x2966, 0x3720, + 0x3720, 0x3723, 0x3723, 0x3723, 0x371e, 0x371e, 0x1078, 0x290c, + 0x6818, 0x0078, 0x3385, 0x6008, 0xc0a4, 0x600a, 0x6817, 0x0000, + 0x0078, 0x3cec, 0x2300, 0x0079, 0x372d, 0x3730, 0x3732, 0x3792, + 0x1078, 0x290c, 0xd6fc, 0x00c0, 0x3779, 0x7000, 0xa00d, 0x0079, + 0x3739, 0x2966, 0x3743, 0x3743, 0x3767, 0x3743, 0x3776, 0x3741, + 0x3741, 0x1078, 0x290c, 0xa684, 0x0060, 0xa086, 0x0060, 0x00c0, + 0x3764, 0xc6ac, 0xc6f4, 0xc6ed, 0x7e5a, 0x681c, 0xc0ac, 0x681e, + 0xa186, 0x0002, 0x0040, 0x3756, 0x1078, 0x44cc, 0x1078, 0x4805, + 0x781b, 0x0076, 0x71d4, 0xd1b4, 0x00c0, 0x2962, 0x70a4, 0xa086, + 0x0001, 0x00c0, 0x29ac, 0x007c, 0xd6ec, 0x0040, 0x374b, 0x6818, + 0xd0fc, 0x0040, 0x3776, 0xd6f4, 0x00c0, 0x3774, 0x681b, 0x0015, + 0x781b, 0x0076, 0x0078, 0x2962, 0x681b, 0x0007, 0x1078, 0x4273, + 0x007c, 0xc6fc, 0x7e5a, 0x7adc, 0x79d8, 0x78d0, 0x801b, 0x00c8, + 0x3782, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, + 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x781b, + 0x0076, 0x007c, 0x1078, 0x290c, 0x2300, 0x0079, 0x3797, 0x379c, + 0x37b8, 0x380c, 0x1078, 0x290c, 0x7000, 0x0079, 0x379f, 0x37a7, + 0x37a9, 0x37a9, 0x37a7, 0x37a7, 0x37a7, 0x37a7, 0x37a7, 0x1078, + 0x290c, 0x1078, 0x4805, 0x681c, 0xc0b4, 0x681e, 0x70d4, 0xd0b4, + 0x00c0, 0x2962, 0x70a4, 0xa086, 0x0001, 0x00c0, 0x29ac, 0x007c, + 0xd6fc, 0x00c0, 0x37fc, 0x7000, 0xa00d, 0x0079, 0x37bf, 0x2966, + 0x37cf, 0x37c9, 0x37f3, 0x37cf, 0x37f9, 0x37c7, 0x37c7, 0x1078, + 0x290c, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xa684, + 0x0060, 0xa086, 0x0060, 0x00c0, 0x37f0, 0xa6b4, 0xbfbf, 0xc6ed, + 0x7e5a, 0xa186, 0x0002, 0x0040, 0x37df, 0x1078, 0x44cc, 0x1078, + 0x4805, 0x781b, 0x0076, 0x681c, 0xc0b4, 0x681e, 0x71d4, 0xd1b4, + 0x00c0, 0x2962, 0x70a4, 0xa086, 0x0001, 0x00c0, 0x29ac, 0x007c, + 0xd6ec, 0x0040, 0x37d7, 0x6818, 0xd0fc, 0x0040, 0x37f9, 0x681b, + 0x0007, 0x781b, 0x00f6, 0x007c, 0xc6fc, 0x7e5a, 0x7adc, 0x79d8, + 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, + 0x79d2, 0x781b, 0x0076, 0x007c, 0xd6dc, 0x0040, 0x3815, 0x782b, + 0x3009, 0x781b, 0x0076, 0x0078, 0x2962, 0x7884, 0xc0ac, 0x7886, + 0x78e4, 0xa084, 0x0008, 0x00c0, 0x3828, 0xa484, 0x0200, 0x0040, + 0x3822, 0xc6f5, 0xc6dd, 0x7e5a, 0x781b, 0x0076, 0x0078, 0x2962, + 0x6820, 0xc095, 0x6822, 0x1078, 0x41ec, 0xc6dd, 0x1078, 0x4022, + 0x781b, 0x0075, 0x0078, 0x2962, 0x2300, 0x0079, 0x3837, 0x383a, + 0x383c, 0x383e, 0x1078, 0x290c, 0x0078, 0x401b, 0xd6d4, 0x00c0, + 0x3864, 0x79e4, 0xd1ac, 0x0040, 0x384c, 0x78ec, 0xa084, 0x0003, + 0x0040, 0x384c, 0x782b, 0x3009, 0x789b, 0x0060, 0x78ab, 0x0000, + 0xa684, 0xfffb, 0x785a, 0x79e4, 0xd1ac, 0x0040, 0x385c, 0x78ec, + 0xa084, 0x0003, 0x00c0, 0x3860, 0x2001, 0x0014, 0x0078, 0x3385, + 0xa184, 0x0007, 0x0079, 0x389a, 0x7a90, 0xa294, 0x0007, 0x789b, + 0x0060, 0x79a8, 0x81ff, 0x0040, 0x3898, 0x789b, 0x0010, 0x7ba8, + 0xa384, 0x0001, 0x00c0, 0x388b, 0x7ba8, 0x7ba8, 0xa386, 0x0001, + 0x00c0, 0x387e, 0x2009, 0xfff7, 0x0078, 0x3884, 0xa386, 0x0003, + 0x00c0, 0x388b, 0x2009, 0xffef, 0x0c7e, 0x7058, 0x2060, 0x6004, + 0xa104, 0x6006, 0x0c7f, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, + 0xfffb, 0x785a, 0x782b, 0x3009, 0x6920, 0xa18c, 0xfcff, 0x6922, + 0x0078, 0x4267, 0x302e, 0x3038, 0x38a4, 0x38aa, 0x38a2, 0x38a2, + 0x4267, 0x4267, 0x1078, 0x290c, 0x6920, 0xa18c, 0xfcff, 0x6922, + 0x0078, 0x426d, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0078, 0x4267, + 0x79e4, 0xa184, 0x0030, 0x0040, 0x38ba, 0x78ec, 0xa084, 0x0003, + 0x00c0, 0x38ee, 0x7000, 0xa086, 0x0004, 0x00c0, 0x38d4, 0x7064, + 0xa086, 0x0002, 0x00c0, 0x38ca, 0x2011, 0x0002, 0x2019, 0x0000, + 0x0078, 0x2eba, 0x7064, 0xa086, 0x0006, 0x0040, 0x38c4, 0x7064, + 0xa086, 0x0004, 0x0040, 0x38c4, 0x7000, 0xa086, 0x0000, 0x0040, + 0x2962, 0x6920, 0xa184, 0x0420, 0x0040, 0x38e3, 0xc1d4, 0x6922, + 0x6818, 0x0078, 0x3385, 0x6818, 0xa08e, 0x0002, 0x0040, 0x38ec, + 0xc0fd, 0x681a, 0x2001, 0x0014, 0x0078, 0x3385, 0xa184, 0x0007, + 0x0079, 0x38f2, 0x4267, 0x4267, 0x38fa, 0x4267, 0x42af, 0x42af, + 0x4267, 0x4267, 0xd6bc, 0x0040, 0x393c, 0x7184, 0x81ff, 0x0040, + 0x393c, 0xa182, 0x000d, 0x00d0, 0x3909, 0x7087, 0x0000, 0x0078, + 0x390e, 0xa182, 0x000c, 0x7086, 0x2009, 0x000c, 0x789b, 0x0061, + 0x79aa, 0x157e, 0x137e, 0x147e, 0x7088, 0x8114, 0xa210, 0x728a, + 0xa080, 0x000b, 0xad00, 0x2098, 0xb284, 0x0300, 0x0040, 0x3930, + 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x392c, + 0x20a1, 0x012b, 0x0078, 0x3932, 0x20a1, 0x022b, 0x0078, 0x3932, + 0x20a1, 0x012b, 0x789b, 0x0000, 0x8108, 0x81ac, 0x53a6, 0x147f, + 0x137f, 0x157f, 0x0078, 0x426d, 0xd6d4, 0x00c0, 0x3990, 0x6820, + 0xd084, 0x0040, 0x426d, 0xa68c, 0x0060, 0xa684, 0x0060, 0x0040, + 0x394e, 0xa086, 0x0060, 0x00c0, 0x394e, 0xc1f5, 0xc194, 0x795a, + 0x69b6, 0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061, 0x6818, + 0xc0fd, 0x681a, 0x78aa, 0x8008, 0x810c, 0x0040, 0x3d5d, 0xa18c, + 0x00f8, 0x00c0, 0x3d5d, 0x157e, 0x137e, 0x147e, 0x017e, 0x3208, + 0xa18c, 0x0300, 0x0040, 0x397c, 0x007e, 0x2001, 0x4d04, 0x2004, + 0xd0ec, 0x007f, 0x0040, 0x3978, 0x20a1, 0x012b, 0x0078, 0x397e, + 0x20a1, 0x022b, 0x0078, 0x397e, 0x20a1, 0x012b, 0x017f, 0x789b, + 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, + 0x137f, 0x157f, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x0078, 0x426d, + 0x6818, 0xd0fc, 0x0040, 0x3996, 0x681b, 0x0008, 0x6820, 0xc0ad, + 0x6822, 0x1078, 0x402a, 0x781b, 0x00e7, 0x007c, 0x2300, 0x0079, + 0x39a1, 0x39a6, 0x3a7e, 0x39a4, 0x1078, 0x290c, 0x7cd8, 0x7ddc, + 0x7fd0, 0x82ff, 0x00c0, 0x39cf, 0x7200, 0xa286, 0x0003, 0x0040, + 0x3352, 0x71d4, 0xd1bc, 0x00c0, 0x39d2, 0xd1b4, 0x0040, 0x39d2, + 0x0d7e, 0x783b, 0x8800, 0x781b, 0x004c, 0x70bc, 0xa06d, 0x68b4, + 0xc0a5, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, + 0xc1b4, 0x71d6, 0x7003, 0x0030, 0x0d7f, 0x0078, 0x39d6, 0x7200, + 0x0078, 0x39d6, 0x783b, 0x1800, 0x781b, 0x004a, 0xa284, 0x000f, + 0x0079, 0x39da, 0x3a69, 0x3a18, 0x39e4, 0x3381, 0x39e2, 0x3a69, + 0x39e2, 0x39e2, 0x1078, 0x290c, 0x681c, 0xd0ec, 0x0040, 0x39eb, + 0x6008, 0xc08d, 0x600a, 0x6920, 0xc185, 0x6922, 0x6800, 0x6006, + 0xa005, 0x00c0, 0x39f4, 0x6002, 0x6008, 0xc0d4, 0x600a, 0x681c, + 0xa084, 0x000e, 0x00c0, 0x3a08, 0xb284, 0x0300, 0x0040, 0x3a04, + 0x2009, 0x93c0, 0x0078, 0x3a0d, 0x2009, 0x94d0, 0x0078, 0x3a0d, + 0x7030, 0x68ba, 0x7140, 0x70cc, 0xa108, 0x2104, 0x6802, 0x2d0a, + 0x715e, 0xd6dc, 0x00c0, 0x3a18, 0xc6fc, 0x6eb6, 0x0078, 0x3a69, + 0x6eb6, 0xa684, 0x0060, 0x00c0, 0x3a22, 0xa684, 0x7fff, 0x68b6, + 0x0078, 0x3a69, 0xd6dc, 0x00c0, 0x3a30, 0xa684, 0x7fff, 0x68b6, + 0x6894, 0x68a6, 0x6898, 0x68aa, 0x1078, 0x44cc, 0x0078, 0x3a69, + 0xd6ac, 0x0040, 0x3a3c, 0xa006, 0x1078, 0x44cc, 0x2408, 0x2510, + 0x69aa, 0x6aa6, 0x0078, 0x3a4c, 0x2408, 0x2510, 0x2700, 0x801b, + 0x00c8, 0x3a43, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, + 0x69aa, 0x6aa6, 0x1078, 0x44cc, 0xd6fc, 0x0040, 0x3a69, 0xa684, + 0x7fff, 0x68b6, 0x2510, 0x2408, 0xd6ac, 0x00c0, 0x3a61, 0x2700, + 0x801b, 0x00c8, 0x3a5c, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, + 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, + 0x68ae, 0x7000, 0xa086, 0x0030, 0x00c0, 0x2966, 0x7003, 0x0002, + 0x70bc, 0xa06d, 0x68bc, 0x7042, 0x70b8, 0xa065, 0x68c0, 0x705a, + 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x007c, 0xa586, 0x8800, + 0x00c0, 0x3a8b, 0x7003, 0x0000, 0x6018, 0x8001, 0x601a, 0x6008, + 0xa084, 0xfbef, 0x600a, 0x0078, 0x401b, 0x7047, 0x0000, 0xa282, + 0x0006, 0x0050, 0x3a95, 0x1078, 0x290c, 0x2300, 0x0079, 0x3a98, + 0x3a9b, 0x3ad2, 0x3b04, 0x2200, 0x0079, 0x3a9e, 0x3aa4, 0x401b, + 0x3aa6, 0x3aa4, 0x3b3b, 0x3ba3, 0x1078, 0x290c, 0x7003, 0x0005, + 0xb284, 0x0300, 0x0040, 0x3ab0, 0x2001, 0x94e0, 0x0078, 0x3ab2, + 0x2001, 0x9512, 0x2068, 0x704e, 0x157e, 0x20a9, 0x0032, 0x2003, + 0x0000, 0x8000, 0x00f0, 0x3ab7, 0x157f, 0xb284, 0x0300, 0x0040, + 0x3ac5, 0x6817, 0x0000, 0x0078, 0x3ac7, 0x6817, 0x8000, 0xad80, + 0x0009, 0x7046, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, + 0x0078, 0x4011, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3ae3, 0x1078, + 0x3d44, 0x0078, 0x3add, 0x1078, 0x44cc, 0x6008, 0xa084, 0xfbef, + 0x600a, 0x0078, 0x3ae8, 0x7000, 0xa086, 0x0003, 0x0040, 0x3adb, + 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, 0x3af2, 0x2001, 0x94e0, + 0x0078, 0x3af4, 0x2001, 0x9512, 0x2068, 0x704e, 0xad80, 0x0009, + 0x7046, 0x2200, 0x0079, 0x3afc, 0x401b, 0x3b02, 0x3b02, 0x3b3b, + 0x3b02, 0x401b, 0x1078, 0x290c, 0x7000, 0xa086, 0x0002, 0x00c0, + 0x3b15, 0x1078, 0x3d44, 0x0078, 0x3b0f, 0x1078, 0x44cc, 0x6008, + 0xa084, 0xfbef, 0x600a, 0x0078, 0x3b1a, 0x7000, 0xa086, 0x0003, + 0x0040, 0x3b0d, 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, 0x3b24, + 0x2001, 0x94e0, 0x0078, 0x3b26, 0x2001, 0x9512, 0x2068, 0x704e, + 0xad80, 0x0009, 0x7046, 0x2200, 0x0079, 0x3b2e, 0x3b36, 0x3b34, + 0x3b34, 0x3b36, 0x3b34, 0x3b36, 0x1078, 0x290c, 0x1078, 0x4035, + 0x781b, 0x0075, 0x007c, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3b4d, + 0x70d4, 0xc0b5, 0x70d6, 0x2c00, 0x70ba, 0x2d00, 0x70be, 0x0078, + 0x3b52, 0x1078, 0x44cc, 0x0078, 0x3b52, 0x7000, 0xa086, 0x0003, + 0x0040, 0x3b49, 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, + 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x2069, 0x93c0, 0xb284, + 0x0300, 0x00c0, 0x3b66, 0xc2fd, 0x2069, 0x94d0, 0x2d04, 0x2d08, + 0x715e, 0xa06d, 0x0040, 0x3b73, 0x6814, 0xa206, 0x0040, 0x3b93, + 0x6800, 0x0078, 0x3b67, 0x7003, 0x0005, 0xd2fc, 0x00c0, 0x3b7c, + 0x2001, 0x94e0, 0x0078, 0x3b7e, 0x2001, 0x9512, 0x2068, 0x704e, + 0x157e, 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, 0x00f0, 0x3b83, + 0x157f, 0xad80, 0x0009, 0x7046, 0x6a16, 0x68b7, 0x0700, 0x6823, + 0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a, 0x6920, 0xa184, 0x0c00, + 0x0040, 0x3c1d, 0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922, 0x1078, + 0x402a, 0x0078, 0x3c1d, 0x7200, 0xa286, 0x0002, 0x00c0, 0x3bb5, + 0x70d4, 0xc0b5, 0x70d6, 0x2c00, 0x70ba, 0x2d00, 0x70be, 0x0078, + 0x3bb9, 0x1078, 0x44cc, 0x0078, 0x3bb9, 0xa286, 0x0003, 0x0040, + 0x3bb1, 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, + 0x7ca8, 0xa484, 0x001f, 0xa215, 0xb284, 0x0300, 0x00c0, 0x3bc9, + 0xc2fd, 0x79a8, 0x79a8, 0xa18c, 0x00ff, 0x70cc, 0xa168, 0x2d04, + 0x2d08, 0x715e, 0xa06d, 0x0040, 0x3bdc, 0x6814, 0xa206, 0x0040, + 0x3c05, 0x6800, 0x0078, 0x3bd0, 0x7003, 0x0005, 0xb284, 0x0300, + 0x0040, 0x3be6, 0x2001, 0x94e0, 0x0078, 0x3be8, 0x2001, 0x9512, + 0x2068, 0x704e, 0x157e, 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, + 0x00f0, 0x3bed, 0x157f, 0xb284, 0x0300, 0x0040, 0x3bfa, 0xc2fc, + 0x0078, 0x3bfb, 0xc2fd, 0x6a16, 0xad80, 0x0009, 0x7046, 0x68b7, + 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x6920, 0xa184, + 0x0c00, 0x0040, 0x3c1d, 0xd0dc, 0x0040, 0x3c12, 0x1078, 0x4031, + 0x0078, 0x3c1d, 0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922, 0x1078, + 0x402a, 0x707f, 0x0000, 0x0078, 0x3c1d, 0xa6ac, 0x0060, 0x0040, + 0x3c61, 0x6b98, 0x6c94, 0x69ac, 0x68b0, 0xa105, 0x00c0, 0x3c43, + 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa6b4, 0xb7ff, 0xa586, 0x0060, + 0x0040, 0x3c61, 0xc6ed, 0x7e5a, 0x2009, 0x0076, 0xd69c, 0x0040, + 0x3c3e, 0x2009, 0x0075, 0x2019, 0x0000, 0x2320, 0x791a, 0x1078, + 0x4805, 0x0078, 0x3c6a, 0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400, + 0xa305, 0x0040, 0x3c61, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68b0, + 0xc6f4, 0x7e5a, 0x2011, 0x0076, 0xd69c, 0x0040, 0x3c5c, 0x2011, + 0x0075, 0x2019, 0x0000, 0x2320, 0x7a1a, 0x1078, 0x483d, 0x0078, + 0x3c6a, 0x7e5a, 0x2009, 0x0076, 0xd69c, 0x0040, 0x3c69, 0x2009, + 0x0075, 0x791a, 0x68c0, 0x705a, 0x2d00, 0x704e, 0x68c4, 0x2060, + 0x71d4, 0x70d8, 0xa02d, 0x0040, 0x3c92, 0xd1bc, 0x0040, 0x3cac, + 0x7a80, 0xa294, 0x0f00, 0x70dc, 0xa206, 0x0040, 0x3c83, 0x78e0, + 0xa504, 0x00c0, 0x3cb9, 0x70da, 0xc1bc, 0x71d6, 0x0078, 0x3cb9, + 0x2031, 0x0001, 0x852c, 0x0048, 0x3c91, 0x8633, 0x8210, 0x0078, + 0x3c8a, 0x007c, 0x7de0, 0xa594, 0xff00, 0x0040, 0x3c9f, 0x2011, + 0x0008, 0x852f, 0x1078, 0x3c88, 0x8637, 0x0078, 0x3ca1, 0x1078, + 0x3c88, 0x8217, 0x7880, 0xa084, 0x0f00, 0xa206, 0x0040, 0x3cb9, + 0x72de, 0x76da, 0x0078, 0x3cb9, 0x7a80, 0xa294, 0x0f00, 0x70dc, + 0xa236, 0x0040, 0x3ca9, 0x78e0, 0xa534, 0x0040, 0x3ca9, 0xc1bd, + 0x71d6, 0xd1b4, 0x00c0, 0x2962, 0x2300, 0xa405, 0x0040, 0x2962, + 0x70a4, 0xa086, 0x0001, 0x00c0, 0x29ac, 0x007c, 0x6020, 0xa005, + 0x0040, 0x3cd4, 0x8001, 0x6022, 0x6008, 0xa085, 0x0008, 0x600a, + 0x700f, 0x0100, 0x702c, 0x6026, 0x007c, 0xa006, 0x1078, 0x44cc, + 0x7000, 0xa086, 0x0002, 0x0040, 0x3ce2, 0x7064, 0xa086, 0x0005, + 0x00c0, 0x3cec, 0x682b, 0x0000, 0x6817, 0x0000, 0x681b, 0x0001, + 0x6823, 0x0040, 0x681f, 0x0100, 0x7000, 0xa084, 0x000f, 0x0079, + 0x3cf1, 0x2966, 0x3d01, 0x3cfb, 0x3d23, 0x3d0b, 0x2966, 0x3cf9, + 0x3cf9, 0x1078, 0x290c, 0x1078, 0x3d2e, 0x1078, 0x3d27, 0x0078, + 0x3d07, 0x1078, 0x3d2e, 0x705c, 0x2060, 0x6800, 0x6002, 0x1078, + 0x2013, 0x0078, 0x2966, 0x7064, 0x7067, 0x0000, 0x7083, 0x0000, + 0x0079, 0x3d12, 0x3d1f, 0x3d1f, 0x3d1a, 0x3d1a, 0x3d1a, 0x3d1f, + 0x3d1a, 0x3d1f, 0x77d4, 0xc7dd, 0x77d6, 0x0079, 0x2ed3, 0x7067, + 0x0000, 0x0078, 0x2966, 0x681b, 0x0000, 0x0078, 0x3653, 0x6800, + 0xa005, 0x00c0, 0x3d2c, 0x6002, 0x6006, 0x007c, 0x6410, 0x84ff, + 0x0040, 0x3d40, 0x2009, 0x4d02, 0x2104, 0x8001, 0x200a, 0x8421, + 0x6412, 0x00c0, 0x3d40, 0x2021, 0x4d04, 0x2404, 0xc0a5, 0x2022, + 0x6008, 0xc0a4, 0x600a, 0x007c, 0x6018, 0xa005, 0x0040, 0x3d4a, + 0x8001, 0x601a, 0x007c, 0x1078, 0x42cf, 0x681b, 0x0018, 0x0078, + 0x3d8d, 0x1078, 0x42cf, 0x681b, 0x0019, 0x0078, 0x3d8d, 0x1078, + 0x42cf, 0x681b, 0x001a, 0x0078, 0x3d8d, 0x1078, 0x42cf, 0x681b, + 0x0003, 0x0078, 0x3d8d, 0x7774, 0x1078, 0x4158, 0x7178, 0xa18c, + 0x00ff, 0x3210, 0xa294, 0x0300, 0x0040, 0x3d72, 0xa1e8, 0x92c0, + 0x0078, 0x3d74, 0xa1e8, 0x93d0, 0x2d04, 0x2d08, 0x2068, 0xa005, + 0x00c0, 0x3d7d, 0x707e, 0x0078, 0x2966, 0x6814, 0xc0fc, 0x7274, + 0xc2fc, 0xa206, 0x0040, 0x3d87, 0x6800, 0x0078, 0x3d75, 0x6800, + 0x200a, 0x681b, 0x0005, 0x707f, 0x0000, 0x1078, 0x3d2e, 0x6820, + 0xd084, 0x00c0, 0x3d95, 0x1078, 0x3d27, 0x1078, 0x3d44, 0x681f, + 0x0000, 0x6823, 0x0020, 0x1078, 0x2013, 0x0078, 0x2966, 0xa282, + 0x0003, 0x00c0, 0x4011, 0x7da8, 0xa5ac, 0x00ff, 0x7ea8, 0xa6b4, + 0x00ff, 0x6920, 0xc1bd, 0x6922, 0xd1c4, 0x0040, 0x3df9, 0xc1c4, + 0x6922, 0xa6b4, 0x00ff, 0x0040, 0x3de6, 0xa682, 0x000c, 0x0048, + 0x3dbd, 0x0040, 0x3dbd, 0x2031, 0x000c, 0x2500, 0xa086, 0x000a, + 0x0040, 0x3dc4, 0x852b, 0x852b, 0x1078, 0x40ea, 0x0040, 0x3dcc, + 0x1078, 0x3ec8, 0x0078, 0x3def, 0x1078, 0x40a5, 0x0c7e, 0x2960, + 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x3efe, 0x0c7f, 0x6920, + 0xc1c5, 0x6922, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x3de3, + 0x781b, 0x0061, 0x007c, 0x781b, 0x0075, 0x007c, 0x0c7e, 0x2960, + 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x3efe, 0x0c7f, 0x7e58, + 0xd6d4, 0x00c0, 0x3df6, 0x781b, 0x0064, 0x007c, 0x781b, 0x0076, + 0x007c, 0x0c7e, 0x7058, 0x2060, 0x6100, 0xd1e4, 0x0040, 0x3e42, + 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c, 0x0048, 0x3e0c, + 0x0040, 0x3e0c, 0x2011, 0x000c, 0x2600, 0xa202, 0x00c8, 0x3e11, + 0x2230, 0x6208, 0xa294, 0x00ff, 0x2001, 0x4d05, 0x2004, 0xd0e4, + 0x00c0, 0x3e26, 0x78ec, 0xd0e4, 0x0040, 0x3e26, 0xa282, 0x000a, + 0x00c8, 0x3e2c, 0x2011, 0x000a, 0x0078, 0x3e2c, 0xa282, 0x000c, + 0x00c8, 0x3e2c, 0x2011, 0x000c, 0x2200, 0xa502, 0x00c8, 0x3e31, + 0x2228, 0x1078, 0x40a9, 0x2500, 0xa086, 0x000a, 0x0040, 0x3e3a, + 0x852b, 0x852b, 0x1078, 0x40ea, 0x0040, 0x3e42, 0x1078, 0x3ec8, + 0x0078, 0x3e46, 0x1078, 0x40a5, 0x1078, 0x3efe, 0x7858, 0xc095, + 0x785a, 0x0c7f, 0x781b, 0x0075, 0x007c, 0x0c7e, 0x2960, 0x6000, + 0xd0e4, 0x00c0, 0x3e64, 0x6010, 0xa084, 0x000f, 0x00c0, 0x3e5e, + 0x6104, 0xa18c, 0xfff5, 0x6106, 0x0c7f, 0x007c, 0x2011, 0x0032, + 0x2019, 0x0000, 0x0078, 0x3e8f, 0x68a0, 0xd0cc, 0x00c0, 0x3e5e, + 0x6208, 0xa294, 0x00ff, 0x2001, 0x4d05, 0x2004, 0xd0e4, 0x00c0, + 0x3e7d, 0x78ec, 0xd0e4, 0x0040, 0x3e7d, 0xa282, 0x000b, 0x00c8, + 0x3e7d, 0x2011, 0x000a, 0x0078, 0x3e83, 0xa282, 0x000c, 0x00c8, + 0x3e83, 0x2011, 0x000c, 0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, + 0x000c, 0x0048, 0x3e8f, 0x0040, 0x3e8f, 0x2019, 0x000c, 0x78ab, + 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, + 0x0005, 0x6820, 0xc0c5, 0x6822, 0x70d4, 0xd0b4, 0x0040, 0x3eab, + 0xc0b4, 0x70d6, 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, + 0x6018, 0x8001, 0x601a, 0x0c7f, 0x007c, 0x0c7e, 0x2960, 0x6104, + 0xa18c, 0xfff5, 0x6106, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, + 0x3eb9, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, + 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xc0c5, 0x6822, 0x0c7f, 0x007c, + 0x0c7e, 0x7158, 0x2160, 0x2018, 0xa08c, 0x0020, 0x0040, 0x3ed1, + 0xc0ac, 0x2008, 0xa084, 0xfff0, 0xa635, 0x7e86, 0x6018, 0x789a, + 0x7eae, 0x6612, 0x78a4, 0xa084, 0xfff0, 0xa18c, 0x000f, 0xa105, + 0xc0f4, 0xa39c, 0x0020, 0x0040, 0x3ee7, 0xa085, 0x4000, 0xc0fc, + 0xd0b4, 0x00c0, 0x3eec, 0xc0fd, 0x78a6, 0x6016, 0x788a, 0xa6b4, + 0x000f, 0x8637, 0x8204, 0x8004, 0xa084, 0x00ff, 0xa605, 0x600e, + 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x007c, 0x0c7e, 0x7058, + 0x2060, 0x6018, 0x789a, 0x78a4, 0xa084, 0xfff0, 0x78a6, 0x6012, + 0x7884, 0xa084, 0xfff0, 0x7886, 0x600c, 0xa084, 0x00ff, 0x600e, + 0x0c7f, 0x007c, 0xa282, 0x0002, 0x00c0, 0x4011, 0x7aa8, 0x6920, + 0xc1bd, 0x6922, 0xd1cc, 0x0040, 0x3f4d, 0xc1cc, 0x6922, 0xa294, + 0x00ff, 0xa282, 0x0002, 0x00c8, 0x4011, 0x1078, 0x3f9e, 0x1078, + 0x3efe, 0xa980, 0x0001, 0x200c, 0x1078, 0x4154, 0x1078, 0x3e4d, + 0x88ff, 0x0040, 0x3f43, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, + 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x3f40, 0x781b, 0x0061, 0x007c, + 0x781b, 0x0075, 0x007c, 0x7e58, 0xd6d4, 0x00c0, 0x3f4a, 0x781b, + 0x0064, 0x007c, 0x781b, 0x0076, 0x007c, 0xa282, 0x0002, 0x00c8, + 0x3f55, 0xa284, 0x0001, 0x0040, 0x3f5e, 0x7158, 0xa188, 0x0000, + 0x210c, 0xd1ec, 0x00c0, 0x3f5e, 0x2011, 0x0000, 0x1078, 0x4086, + 0x1078, 0x3f9e, 0x1078, 0x3efe, 0x7858, 0xc095, 0x785a, 0x781b, + 0x0075, 0x007c, 0x0c7e, 0x027e, 0x2960, 0x6000, 0x2011, 0x0001, + 0xd0ec, 0x00c0, 0x3f7f, 0x6014, 0xa084, 0x0040, 0x00c0, 0x3f7d, + 0xc1a4, 0x6106, 0xa006, 0x0078, 0x3f9b, 0x2011, 0x0000, 0x78ab, + 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004, + 0x70d4, 0xd0b4, 0x0040, 0x3f97, 0xc0b4, 0x70d6, 0x70b8, 0xa065, + 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x6820, + 0xa085, 0x0200, 0x6822, 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x7058, + 0x2060, 0x82ff, 0x0040, 0x3fa6, 0x2011, 0x0040, 0x6018, 0xa080, + 0x0002, 0x789a, 0x78a4, 0xa084, 0xffbf, 0xa205, 0xc0fc, 0xd0b4, + 0x00c0, 0x3fb3, 0xc0fd, 0x78a6, 0x6016, 0x788a, 0x6004, 0xc0a4, + 0x6006, 0x0c7f, 0x007c, 0x007e, 0x7000, 0xa086, 0x0003, 0x0040, + 0x3fc4, 0x007f, 0x0078, 0x3fc7, 0x007f, 0x0078, 0x400e, 0xd6ac, + 0x0040, 0x400e, 0x7888, 0xa084, 0x0040, 0x0040, 0x400e, 0x7bb8, + 0xa384, 0x003f, 0x831b, 0x00c8, 0x3fd6, 0x8000, 0xa005, 0x0040, + 0x3feb, 0x831b, 0x00c8, 0x3fdf, 0x8001, 0x0040, 0x400b, 0xd6f4, + 0x0040, 0x3feb, 0x78b8, 0x801b, 0x00c8, 0x3fe7, 0x8000, 0xa084, + 0x003f, 0x00c0, 0x400b, 0xc6f4, 0x7e5a, 0x79d8, 0x7adc, 0x2001, + 0x0001, 0xa108, 0x00c8, 0x3ff6, 0xa291, 0x0000, 0x79d2, 0x79da, + 0x7ad6, 0x7ade, 0x1078, 0x490b, 0x781b, 0x0073, 0xb284, 0x0300, + 0x0040, 0x4006, 0x2001, 0x0000, 0x0078, 0x4008, 0x2001, 0x0001, + 0x1078, 0x4793, 0x007c, 0x781b, 0x0073, 0x007c, 0x781b, 0x0076, + 0x007c, 0x1078, 0x4039, 0x781b, 0x0075, 0x007c, 0x1078, 0x4022, + 0x781b, 0x0075, 0x007c, 0x6827, 0x0002, 0x1078, 0x402a, 0x781b, + 0x0075, 0x007c, 0x2001, 0x0005, 0x0078, 0x403b, 0x2001, 0x000c, + 0x0078, 0x403b, 0x6820, 0xc0d5, 0x6822, 0x2001, 0x0006, 0x0078, + 0x403b, 0x2001, 0x000d, 0x0078, 0x403b, 0x2001, 0x0009, 0x0078, + 0x403b, 0x2001, 0x0007, 0x789b, 0x007e, 0x78aa, 0xc69d, 0x7e5a, + 0x70d4, 0xd0b4, 0x0040, 0x4051, 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, + 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, + 0x0c7f, 0x007c, 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b, + 0x8703, 0x017e, 0xb28c, 0x0300, 0x0040, 0x4062, 0xa0e0, 0x51c0, + 0x0078, 0x4064, 0xa0e0, 0x5240, 0x017f, 0xa7b8, 0x0020, 0x7f9a, + 0x79a4, 0xa184, 0x000f, 0x0040, 0x4074, 0xa184, 0xfff0, 0x78a6, + 0x6012, 0x6004, 0xc09d, 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, + 0xa184, 0x0040, 0x0040, 0x4084, 0xa184, 0xffbf, 0xc0fd, 0x78a6, + 0x6016, 0x6004, 0xc0a5, 0x6006, 0x077f, 0x007c, 0x789b, 0x0010, + 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, + 0x0060, 0x78ab, 0x0004, 0x70d4, 0xd0b4, 0x0040, 0x40a4, 0xc0b4, + 0x70d6, 0x0c7e, 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, + 0x6018, 0x8001, 0x601a, 0x0c7f, 0x007c, 0x2031, 0x0000, 0x2029, + 0x0032, 0x789b, 0x0010, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, + 0x0001, 0x7daa, 0x7eaa, 0x789b, 0x0060, 0x78ab, 0x0005, 0x70d4, + 0xd0b4, 0x0040, 0x40c8, 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, 0xa065, + 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, + 0x007c, 0x157e, 0x8007, 0xa084, 0x00ff, 0x8003, 0x8003, 0xa080, + 0x0020, 0x789a, 0x79a4, 0xa18c, 0xfff0, 0x2021, 0x413d, 0x2019, + 0x0011, 0x20a9, 0x000e, 0x2011, 0x0032, 0x2404, 0xa084, 0xfff0, + 0xa106, 0x0040, 0x40e8, 0x8420, 0x2300, 0xa210, 0x00f0, 0x40dd, + 0x157f, 0x007c, 0x157e, 0x2001, 0x4d05, 0x2004, 0xd0e4, 0x00c0, + 0x411b, 0x2021, 0x414b, 0x20a9, 0x0009, 0x2011, 0x0028, 0xa582, + 0x0019, 0x0040, 0x4131, 0x0048, 0x4131, 0x8420, 0x95a9, 0x2011, + 0x0032, 0xa582, 0x0032, 0x0040, 0x4131, 0x0048, 0x4131, 0x8420, + 0x95a9, 0x2019, 0x000a, 0x2011, 0x0064, 0x2200, 0xa502, 0x0040, + 0x4131, 0x0048, 0x4131, 0x8420, 0x2300, 0xa210, 0x00f0, 0x410d, + 0x157f, 0x0078, 0x412f, 0x2021, 0x413d, 0x2019, 0x0011, 0x20a9, + 0x000e, 0x2011, 0x0032, 0x2200, 0xa502, 0x0040, 0x4131, 0x0048, + 0x4131, 0x8420, 0x2300, 0xa210, 0x00f0, 0x4123, 0x157f, 0xa006, + 0x007c, 0x157f, 0xa582, 0x0064, 0x00c8, 0x413a, 0x7808, 0xa085, + 0x0070, 0x780a, 0x2404, 0xa005, 0x007c, 0x1209, 0x3002, 0x3202, + 0x4203, 0x4403, 0x5404, 0x5604, 0x6605, 0x6805, 0x7806, 0x7a06, + 0x0c07, 0x0c07, 0x0e07, 0x10e1, 0x330a, 0x5805, 0x5a05, 0x6a06, + 0x6c06, 0x7c07, 0x7e07, 0x0e00, 0x789b, 0x0010, 0xa046, 0x007c, + 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, + 0x8003, 0xa105, 0xd7fc, 0x0040, 0x4169, 0xa0e0, 0x72c0, 0x0078, + 0x416b, 0xa0e0, 0x52c0, 0x007c, 0x0e7e, 0x0f7e, 0xd084, 0x0040, + 0x4179, 0x2079, 0x0100, 0x2009, 0x4d80, 0x2071, 0x4d80, 0x0078, + 0x4189, 0x2009, 0x4d40, 0x2071, 0x4d40, 0x2001, 0x4d04, 0x2004, + 0xd0ec, 0x0040, 0x4187, 0x2079, 0x0100, 0x0078, 0x4189, 0x2079, + 0x0200, 0x2091, 0x8000, 0x2104, 0xa084, 0x000f, 0x0079, 0x4190, + 0x419a, 0x419a, 0x419a, 0x419a, 0x419a, 0x419a, 0x4198, 0x4198, + 0x1078, 0x290c, 0x69b4, 0xc1f5, 0xa18c, 0xff9f, 0x69b6, 0xa005, + 0x0040, 0x41e9, 0x7858, 0xa084, 0xff9f, 0xa085, 0x6000, 0x785a, + 0x7828, 0xa086, 0x1814, 0x00c0, 0x41e9, 0x784b, 0x0004, 0x7848, + 0xa084, 0x0004, 0x00c0, 0x41af, 0x784b, 0x0008, 0x7848, 0xa084, + 0x0008, 0x00c0, 0x41b6, 0x7830, 0xd0bc, 0x00c0, 0x41e9, 0x007e, + 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x41cb, 0xb284, + 0x0300, 0x0078, 0x41cd, 0xb284, 0x0400, 0x0040, 0x41d3, 0x0018, + 0x41e9, 0x0078, 0x41d5, 0x0028, 0x41e9, 0x79e4, 0xa184, 0x0030, + 0x0040, 0x41e9, 0x78ec, 0xa084, 0x0003, 0x0040, 0x41e9, 0x681c, + 0xd0ac, 0x00c0, 0x41e7, 0x1078, 0x4273, 0x0078, 0x41e9, 0x781b, + 0x00f6, 0x0f7f, 0x0e7f, 0x007c, 0x0c7e, 0x2001, 0x4d01, 0x2004, + 0xd0ac, 0x00c0, 0x4265, 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, + 0x8003, 0x8003, 0xb28c, 0x0300, 0x0040, 0x4202, 0xa0e0, 0x51c0, + 0x0078, 0x4204, 0xa0e0, 0x5240, 0x6004, 0xa084, 0x000a, 0x00c0, + 0x4265, 0x6108, 0xa194, 0xff00, 0x0040, 0x4265, 0xa18c, 0x00ff, + 0x2001, 0x000a, 0xa106, 0x0040, 0x4230, 0x2001, 0x000c, 0xa106, + 0x0040, 0x4234, 0x2001, 0x0012, 0xa106, 0x0040, 0x4238, 0x2001, + 0x0014, 0xa106, 0x0040, 0x423c, 0x2001, 0x0019, 0xa106, 0x0040, + 0x4240, 0x2001, 0x0032, 0xa106, 0x0040, 0x4244, 0x0078, 0x4248, + 0x2009, 0x000c, 0x0078, 0x424a, 0x2009, 0x0012, 0x0078, 0x424a, + 0x2009, 0x0014, 0x0078, 0x424a, 0x2009, 0x0019, 0x0078, 0x424a, + 0x2009, 0x0020, 0x0078, 0x424a, 0x2009, 0x003f, 0x0078, 0x424a, + 0x2011, 0x0000, 0x2100, 0xa205, 0x600a, 0x6004, 0xa085, 0x0002, + 0x6006, 0x2061, 0x4d00, 0x6004, 0xd0bc, 0x0040, 0x4265, 0x6814, + 0xd0fc, 0x00c0, 0x4260, 0x60ea, 0x2061, 0x4d40, 0x0078, 0x4263, + 0x60ee, 0x2061, 0x4d80, 0x601f, 0x800f, 0x0c7f, 0x007c, 0x781b, + 0x0076, 0x007c, 0x781b, 0x0075, 0x007c, 0x781b, 0x0064, 0x007c, + 0x781b, 0x0061, 0x007c, 0x2009, 0x4d19, 0x210c, 0xa186, 0x0000, + 0x0040, 0x4285, 0xa186, 0x0001, 0x0040, 0x4288, 0x701f, 0x000b, + 0x7067, 0x0001, 0x781b, 0x0047, 0x007c, 0x781b, 0x00ed, 0x007c, + 0x701f, 0x000a, 0x007c, 0x2009, 0x4d19, 0x210c, 0xa186, 0x0000, + 0x0040, 0x42a0, 0xa186, 0x0001, 0x0040, 0x429d, 0x701f, 0x000b, + 0x7067, 0x0001, 0x781b, 0x0047, 0x007c, 0x701f, 0x000a, 0x007c, + 0x781b, 0x00ec, 0x007c, 0x781b, 0x00f6, 0x007c, 0x781b, 0x00f5, + 0x007c, 0x781b, 0x00c6, 0x007c, 0x781b, 0x00c5, 0x007c, 0x6818, + 0xd0fc, 0x0040, 0x42b5, 0x681b, 0x001d, 0x7067, 0x0001, 0x781b, + 0x0047, 0x007c, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x42ce, 0x7808, + 0xc08c, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, + 0x0021, 0x0040, 0x42ce, 0x7808, 0xc08d, 0x780a, 0x007c, 0x7808, + 0xc08d, 0x780a, 0x007c, 0x7830, 0xa084, 0x0040, 0x00c0, 0x42d3, + 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x0040, 0x42e2, 0xb284, 0x0300, + 0x0078, 0x42e4, 0xb284, 0x0400, 0x0040, 0x42ea, 0x0098, 0x42ee, + 0x0078, 0x42ec, 0x00a8, 0x42ee, 0x78ac, 0x007c, 0x7808, 0xa084, + 0xfffd, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, + 0x0021, 0x0040, 0x4311, 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, + 0x007f, 0x0040, 0x4307, 0xb284, 0x0300, 0x0078, 0x4309, 0xb284, + 0x0400, 0x0040, 0x430f, 0x0098, 0x430b, 0x0078, 0x4311, 0x00a8, + 0x430f, 0x78ac, 0x007e, 0x7808, 0xa085, 0x0002, 0x780a, 0x007f, + 0x007c, 0xa784, 0x0001, 0x00c0, 0x36fb, 0xa784, 0x0070, 0x0040, + 0x4329, 0x0c7e, 0x2d60, 0x2f68, 0x1078, 0x288d, 0x2d78, 0x2c68, + 0x0c7f, 0xa784, 0x0008, 0x0040, 0x4336, 0x784b, 0x0008, 0x78ec, + 0xa084, 0x0003, 0x0040, 0x2966, 0x0078, 0x4267, 0xa784, 0x0004, + 0x0040, 0x4365, 0x78b8, 0xa084, 0x4001, 0x0040, 0x4365, 0x784b, + 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2966, 0x78e4, 0xa084, + 0x0007, 0xa086, 0x0001, 0x00c0, 0x4365, 0x78c0, 0xa685, 0x4800, + 0x2030, 0x7e5a, 0x781b, 0x00f6, 0x007c, 0x784b, 0x0008, 0x6818, + 0xd0fc, 0x0040, 0x4362, 0x681b, 0x0015, 0xd6f4, 0x0040, 0x4362, + 0x681b, 0x0007, 0x1078, 0x4273, 0x007c, 0x681b, 0x0003, 0x7858, + 0xa084, 0x3f00, 0x681e, 0x682f, 0x0000, 0x6833, 0x0000, 0x784b, + 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x3004, 0x007e, 0x2001, + 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x4382, 0xb284, 0x0300, + 0x0078, 0x4384, 0xb284, 0x0400, 0x0040, 0x438a, 0x0018, 0x2962, + 0x0078, 0x438c, 0x0028, 0x2962, 0x0078, 0x4016, 0x6b14, 0x8307, + 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xd3fc, 0x0040, 0x439c, + 0xa080, 0x5240, 0x0078, 0x439e, 0xa080, 0x51c0, 0x2060, 0x2048, + 0x705a, 0x2a60, 0x007c, 0x0020, 0x0020, 0x0000, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, + 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0062, 0x0009, 0x0014, + 0x0014, 0x9848, 0x0014, 0x0014, 0x990e, 0x98fa, 0x0014, 0x0014, + 0x0080, 0x00f9, 0x0100, 0x0402, 0x2008, 0xf880, 0x0018, 0xa20a, + 0x0014, 0x300b, 0xa20c, 0x0014, 0x2500, 0x0013, 0x2500, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0xa200, 0x3806, 0x8839, + 0x20c4, 0x0864, 0xa856, 0x3008, 0x28c1, 0x9d15, 0xa201, 0x300c, + 0x2847, 0x8161, 0x846a, 0x8000, 0x84a4, 0x1856, 0x883a, 0xa808, + 0x28e2, 0x9cc8, 0xa8f3, 0x0864, 0xa844, 0x300c, 0xa801, 0x3008, + 0x28e1, 0x9cc8, 0x2021, 0xa81d, 0xa205, 0x870c, 0xd8de, 0x64a0, + 0x6de0, 0x6fc0, 0x63a4, 0x6c80, 0x0212, 0xa205, 0x883d, 0x7942, + 0x8020, 0xa4a1, 0x882b, 0x1814, 0x883b, 0x80df, 0x94a1, 0x7027, + 0x85f2, 0xa737, 0xa532, 0xf003, 0x8576, 0x8677, 0xa816, 0x883e, + 0xa814, 0x2001, 0xa812, 0xa204, 0x64c0, 0x6de0, 0x67a0, 0x6fc0, + 0x7942, 0x8020, 0xa4a1, 0x1814, 0x80df, 0x94a1, 0x883b, 0x7023, + 0x8576, 0x8677, 0xa802, 0x7861, 0x883e, 0x206b, 0x28c1, 0x9d15, + 0x2044, 0x2103, 0x20a2, 0x2081, 0xa8c3, 0xa207, 0x2901, 0xa80a, + 0x0014, 0xa203, 0x8000, 0x85a4, 0x1872, 0x879a, 0x883c, 0x1fe2, + 0xf601, 0xa208, 0x856e, 0x866f, 0x7161, 0x0014, 0x0704, 0x3008, + 0x9cc8, 0x0014, 0xa202, 0x8000, 0x85a4, 0x3009, 0x84a8, 0x19e2, + 0xf844, 0x856e, 0x883f, 0x08e6, 0xa8f5, 0xf861, 0xa8ea, 0xf801, + 0x0014, 0xf881, 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfaa2, 0x1de2, + 0x0014, 0x8532, 0xf221, 0x0014, 0x1de2, 0x84a8, 0xd6e0, 0x1fe6, + 0x0014, 0x3008, 0x8000, 0x284a, 0x1011, 0xa8fc, 0x3008, 0x9d2d, + 0x8000, 0xa000, 0x2802, 0x1011, 0xa8fd, 0x9d33, 0xa8bd, 0x3008, + 0x9d2d, 0x283b, 0x1011, 0xa8fd, 0xa209, 0x0017, 0x300c, 0xa209, + 0x8000, 0x85a4, 0x1de2, 0xa209, 0xdac1, 0x0014, 0x0210, 0xa801, + 0x0014, 0x26e0, 0x873a, 0xfaa3, 0x19f2, 0x26e0, 0x18f2, 0x0014, + 0xa20b, 0x0014, 0xa20d, 0x3806, 0x0210, 0x9d1f, 0x0704, 0xa206, + 0x6865, 0x817e, 0x842a, 0x1dc1, 0x8823, 0x0016, 0x6042, 0x8008, + 0xa8fa, 0x8000, 0x84a4, 0x8160, 0x842a, 0xf021, 0x3008, 0x84a8, + 0x11d6, 0x7042, 0x20dd, 0x0011, 0x20d4, 0x8822, 0x0016, 0x7944, + 0x8421, 0xa020, 0xa532, 0x84a1, 0x0016, 0x7944, 0x8421, 0xa0df, + 0x9532, 0x84a1, 0x0016, 0x0000, 0x127e, 0x70d4, 0xa084, 0x4600, + 0x8004, 0x2090, 0x7204, 0x7008, 0xc09c, 0xa205, 0x00c0, 0x44e8, + 0x720c, 0x82ff, 0x0040, 0x44e3, 0x8aff, 0x00c0, 0x44e8, 0x7200, + 0xd284, 0x00c0, 0x44e8, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c, + 0x7000, 0xa084, 0x0003, 0x7002, 0xc69c, 0xd084, 0x0040, 0x452b, + 0x7108, 0x0005, 0x7008, 0xa106, 0x00c0, 0x44f0, 0xa184, 0x0003, + 0x0040, 0x455c, 0xa184, 0x01e0, 0x00c0, 0x455c, 0xd1f4, 0x00c0, + 0x44f0, 0xa184, 0x3000, 0xa086, 0x1000, 0x0040, 0x44f0, 0x2011, + 0x0180, 0x710c, 0x8211, 0x0040, 0x4515, 0x7008, 0xd0f4, 0x00c0, + 0x44f0, 0x700c, 0xa106, 0x0040, 0x450a, 0x7007, 0x0012, 0x7108, + 0x0005, 0x7008, 0xa106, 0x00c0, 0x4517, 0xa184, 0x0003, 0x0040, + 0x455c, 0xd194, 0x0040, 0x4517, 0xd1f4, 0x0040, 0x455c, 0x7007, + 0x0002, 0x0078, 0x44f0, 0x7108, 0xd1fc, 0x0040, 0x4536, 0x1078, + 0x46b1, 0x8aff, 0x0040, 0x44d2, 0x0078, 0x452b, 0x700c, 0xa08c, + 0x03ff, 0x0040, 0x4561, 0x7004, 0xd084, 0x0040, 0x4553, 0x7014, + 0xa005, 0x00c0, 0x454f, 0x7010, 0x7310, 0xa306, 0x00c0, 0x4543, + 0x2300, 0xa005, 0x0040, 0x4553, 0xa102, 0x00c8, 0x452b, 0x7007, + 0x0010, 0x0078, 0x455c, 0x8aff, 0x0040, 0x4561, 0x1078, 0x48b8, + 0x00c0, 0x4556, 0x0040, 0x452b, 0x1078, 0x45fa, 0x127f, 0x2000, + 0x007c, 0x7204, 0x7108, 0xc19c, 0x8103, 0x00c8, 0x4570, 0x1078, + 0x46b1, 0x0078, 0x4561, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c, + 0xa205, 0x00c0, 0x455c, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c, + 0x6428, 0x84ff, 0x0040, 0x45a4, 0x2c70, 0x7004, 0xa0bc, 0x000f, + 0xa7b8, 0x45b4, 0x273c, 0x87fb, 0x00c0, 0x4592, 0x0048, 0x458a, + 0x1078, 0x290c, 0x609c, 0xa075, 0x0040, 0x45a4, 0x0078, 0x457d, + 0x2039, 0x45a9, 0x2704, 0xae68, 0x6808, 0xa630, 0x680c, 0xa529, + 0x8421, 0x0040, 0x45a4, 0x8738, 0x2704, 0xa005, 0x00c0, 0x4593, + 0x709c, 0xa075, 0x00c0, 0x457d, 0x007c, 0x0000, 0x0005, 0x0009, + 0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, 0x0003, 0x0009, + 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x45a9, 0x45a6, 0x0000, + 0x0000, 0x8000, 0x0000, 0x45a9, 0x0000, 0x45b1, 0x45ae, 0x0000, + 0x0000, 0x0000, 0x0000, 0x45b1, 0x0000, 0x45ac, 0x45ac, 0x0000, + 0x0000, 0x8000, 0x0000, 0x45ac, 0x0000, 0x45b2, 0x45b2, 0x0000, + 0x0000, 0x0000, 0x0000, 0x45b2, 0x2079, 0x4d00, 0x2071, 0x0010, + 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0001, 0x7810, 0xd0ec, + 0x0040, 0x45e8, 0x2009, 0x0001, 0x2071, 0x0020, 0x0078, 0x45ec, + 0x2009, 0x0002, 0x2071, 0x0050, 0x7007, 0x000a, 0x7007, 0x0002, + 0x7003, 0x0000, 0x8109, 0x0040, 0x45f9, 0x2071, 0x0020, 0x0078, + 0x45ec, 0x007c, 0x7004, 0x8004, 0x00c8, 0x4683, 0x7108, 0x7008, + 0xa106, 0x00c0, 0x45fe, 0xa184, 0x01e0, 0x0040, 0x460b, 0x1078, + 0x46f4, 0x0078, 0x46ab, 0x7007, 0x0012, 0x2019, 0x0000, 0x7108, + 0x7008, 0xa106, 0x00c0, 0x460f, 0xa184, 0x01e0, 0x0040, 0x461c, + 0x1078, 0x46f4, 0x0078, 0x46ab, 0x7810, 0xd0ec, 0x0040, 0x4636, + 0x2001, 0x04fd, 0x2004, 0xa086, 0x0003, 0x00c0, 0x463a, 0xa184, + 0x4000, 0x0040, 0x463e, 0xa382, 0x0003, 0x00c8, 0x463e, 0xa184, + 0x0004, 0x0040, 0x460f, 0x8318, 0x0078, 0x460f, 0x7814, 0xd0ec, + 0x00c0, 0x463e, 0xa184, 0x4000, 0x00c0, 0x460f, 0xa19c, 0x300c, + 0xa386, 0x2004, 0x0040, 0x465b, 0xa386, 0x0008, 0x0040, 0x4666, + 0x7004, 0xd084, 0x00c0, 0x4657, 0x7108, 0x7008, 0xa106, 0x00c0, + 0x464c, 0xa184, 0x0003, 0x0040, 0x4657, 0x0078, 0x46f4, 0xa386, + 0x200c, 0x00c0, 0x460f, 0x7200, 0x8204, 0x0048, 0x4666, 0x730c, + 0xa384, 0x03ff, 0x0040, 0x4666, 0x1078, 0x290c, 0x7108, 0x7008, + 0xa106, 0x00c0, 0x4666, 0xa184, 0x01e0, 0x0040, 0x4673, 0x1078, + 0x46f4, 0x0078, 0x46ab, 0x7007, 0x0012, 0x7000, 0xd084, 0x00c0, + 0x4683, 0x7310, 0x7014, 0xa305, 0x0040, 0x4683, 0x710c, 0xa184, + 0x03ff, 0x00c0, 0x45fa, 0x7108, 0x7008, 0xa106, 0x00c0, 0x4683, + 0xa184, 0x01e0, 0x0040, 0x4690, 0x1078, 0x46f4, 0x0078, 0x46ab, + 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xd09c, 0x00c0, 0x4694, + 0x7108, 0x7008, 0xa106, 0x00c0, 0x4698, 0xa184, 0x01e0, 0x0040, + 0x46a5, 0x1078, 0x46f4, 0x0078, 0x46ab, 0x7007, 0x0012, 0x7108, + 0x8103, 0x0048, 0x4698, 0x7003, 0x0008, 0x007c, 0x7108, 0x0078, + 0x46b1, 0xa184, 0x01e0, 0x00c0, 0x46f4, 0x7108, 0xa184, 0x01e0, + 0x00c0, 0x46f4, 0xa184, 0x0007, 0x0079, 0x46be, 0x46c8, 0x46d8, + 0x46c6, 0x46d8, 0x46c6, 0x4736, 0x46c6, 0x4734, 0x1078, 0x290c, + 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x8aff, 0x00c0, 0x46d3, + 0x2049, 0x0000, 0x007c, 0x1078, 0x48b8, 0x00c0, 0x46d3, 0x007c, + 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x7004, 0xd084, 0x00c0, + 0x46ec, 0x7108, 0x7008, 0xa106, 0x00c0, 0x46e1, 0xa184, 0x0003, + 0x0040, 0x46ec, 0x0078, 0x46f4, 0x8aff, 0x0040, 0x46f3, 0x1078, + 0x48b8, 0x00c0, 0x46ef, 0x007c, 0x7007, 0x0012, 0x7108, 0x00e0, + 0x46f7, 0x2091, 0x6000, 0x00e0, 0x46fb, 0x2091, 0x6000, 0x7007, + 0x0012, 0x7007, 0x0008, 0x7004, 0xd09c, 0x00c0, 0x4703, 0x7007, + 0x0012, 0x7108, 0xd1fc, 0x00c0, 0x4707, 0x7003, 0x0000, 0x7000, + 0xa005, 0x00c0, 0x471b, 0x7004, 0xa005, 0x00c0, 0x471b, 0x700c, + 0xa005, 0x0040, 0x471d, 0x0078, 0x46ff, 0x2049, 0x0000, 0xb284, + 0x0100, 0x0040, 0x4727, 0x2001, 0x0000, 0x0078, 0x4729, 0x2001, + 0x0001, 0x1078, 0x416c, 0x681b, 0x0002, 0x2051, 0x0000, 0x007c, + 0x1078, 0x290c, 0x1078, 0x290c, 0x1078, 0x477e, 0x7210, 0x7114, + 0x700c, 0xa09c, 0x03ff, 0x2800, 0xa300, 0xa211, 0xa189, 0x0000, + 0x1078, 0x477e, 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200, 0xa322, + 0x630c, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0040, 0x4759, 0x00c8, + 0x4759, 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0078, + 0x4740, 0x2b60, 0x8a07, 0x007e, 0x6004, 0xa084, 0x0008, 0x0040, + 0x4765, 0xa7ba, 0x45ae, 0x0078, 0x4767, 0xa7ba, 0x45a6, 0x007f, + 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92, 0x6b8e, 0x7108, 0x7008, + 0xa106, 0x00c0, 0x476e, 0xa184, 0x01e0, 0x0040, 0x4779, 0x1078, + 0x46f4, 0x7007, 0x0012, 0x1078, 0x45fa, 0x007c, 0x8a50, 0x8739, + 0x2704, 0xa004, 0x00c0, 0x4792, 0x6000, 0xa064, 0x00c0, 0x4789, + 0x2d60, 0x6004, 0xa084, 0x000f, 0xa080, 0x45c4, 0x203c, 0x87fb, + 0x1040, 0x290c, 0x007c, 0x127e, 0x0d7e, 0x70d4, 0xa084, 0x4600, + 0x8004, 0x2090, 0x0d7f, 0x6884, 0x2060, 0x6888, 0x6b8c, 0x6c90, + 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x007e, 0x6804, 0xa084, + 0x0008, 0x007f, 0x0040, 0x47b0, 0xa0b8, 0x45ae, 0x0078, 0x47b2, + 0xa0b8, 0x45a6, 0xb284, 0x0100, 0x0040, 0x47b9, 0x7e20, 0x0078, + 0x47ba, 0x7e24, 0xa6b5, 0x000c, 0x681c, 0xd0b4, 0x0040, 0x47c1, + 0xc685, 0x2400, 0xa305, 0x0040, 0x47eb, 0x2c58, 0x2704, 0x6104, + 0xac60, 0x6000, 0xa400, 0x701a, 0x6004, 0xa301, 0x701e, 0xa184, + 0x0008, 0x0040, 0x47db, 0x6010, 0xa081, 0x0000, 0x7022, 0x6014, + 0xa081, 0x0000, 0x7026, 0x6208, 0x2400, 0xa202, 0x7012, 0x620c, + 0x2300, 0xa203, 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x1078, + 0x48e3, 0x0078, 0x47ed, 0x1078, 0x48b8, 0x00c0, 0x47eb, 0x127f, + 0x2000, 0x007c, 0x127e, 0x0d7e, 0x70d4, 0xa084, 0x4600, 0x8004, + 0x2090, 0x0d7f, 0x7007, 0x0004, 0x7004, 0xd094, 0x00c0, 0x47fc, + 0x7003, 0x0008, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x70d4, + 0xa084, 0x4600, 0x8004, 0x007e, 0x2090, 0x007f, 0x0d7f, 0x7e20, + 0xb284, 0x0100, 0x00c0, 0x4815, 0x7e24, 0xa6b5, 0x000c, 0x681c, + 0xd0ac, 0x00c0, 0x4820, 0xc685, 0x7003, 0x0000, 0x7007, 0x0004, + 0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x45b4, + 0x273c, 0x87fb, 0x00c0, 0x4836, 0x0048, 0x4830, 0x1078, 0x290c, + 0x689c, 0xa065, 0x0040, 0x483a, 0x0078, 0x4823, 0x1078, 0x48b8, + 0x00c0, 0x4836, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e, 0x017e, + 0x0d7e, 0x70d4, 0xa084, 0x4600, 0x8004, 0x007e, 0x2090, 0x007f, + 0x7e20, 0xb284, 0x0100, 0x00c0, 0x484e, 0x7e24, 0x0d7f, 0x037f, + 0x047f, 0xa6b5, 0x000c, 0x681c, 0xd0b4, 0x0040, 0x485c, 0xc685, + 0x7003, 0x0000, 0x7007, 0x0004, 0x2049, 0x483d, 0x6828, 0xa055, + 0x0d7e, 0x0040, 0x48b4, 0x2d70, 0x2e60, 0x7004, 0xa0bc, 0x000f, + 0xa7b8, 0x45b4, 0x273c, 0x87fb, 0x00c0, 0x4879, 0x0048, 0x4872, + 0x1078, 0x290c, 0x709c, 0xa075, 0x2060, 0x0040, 0x48b4, 0x0078, + 0x4865, 0x2704, 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0048, + 0x4892, 0x8a51, 0x00c0, 0x4886, 0x1078, 0x290c, 0x8738, 0x2704, + 0xa005, 0x00c0, 0x487a, 0x709c, 0xa075, 0x2060, 0x0040, 0x48b4, + 0x0078, 0x4865, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, 0x6908, + 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x00c8, 0x48a1, 0x1078, + 0x290c, 0xb284, 0x0100, 0x0040, 0x48af, 0x2001, 0x4d04, 0x2004, + 0xd0ec, 0x00c0, 0x48af, 0x2071, 0x0050, 0x0078, 0x48b1, 0x2071, + 0x0020, 0x0d7f, 0x0078, 0x47c1, 0x0d7f, 0x127f, 0x2000, 0x007c, + 0x7008, 0x007e, 0xa084, 0x01e0, 0x007f, 0x0040, 0x48c1, 0xa006, + 0x007c, 0xa084, 0x0003, 0xa086, 0x0003, 0x00c0, 0x48c8, 0x007c, + 0x2704, 0xac78, 0x7800, 0x701a, 0x7804, 0x701e, 0x7808, 0x7012, + 0x780c, 0x7016, 0x6004, 0xa084, 0x0008, 0x0040, 0x48db, 0x7810, + 0x7022, 0x7814, 0x7026, 0x7602, 0x7004, 0xa084, 0x0010, 0xc085, + 0x7006, 0x2079, 0x4d00, 0x8a51, 0x0040, 0x4907, 0x8738, 0x2704, + 0xa005, 0x00c0, 0x48f9, 0x609c, 0xa005, 0x0040, 0x4908, 0x2060, + 0x6004, 0xa084, 0x000f, 0xa080, 0x45b4, 0x203c, 0x87fb, 0x1040, + 0x290c, 0x7008, 0x007e, 0xa084, 0x01e0, 0x007f, 0x0040, 0x4903, + 0xa006, 0x0078, 0x4908, 0xa084, 0x0003, 0xa086, 0x0003, 0x007c, + 0x2051, 0x0000, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x70d4, 0xa084, + 0x4600, 0x8004, 0x2090, 0x0d7f, 0x087f, 0x7108, 0xa184, 0x0003, + 0x00c0, 0x4920, 0x6828, 0xa005, 0x0040, 0x4930, 0x0078, 0x44e8, + 0x7108, 0xd1fc, 0x0040, 0x4928, 0x1078, 0x46b1, 0x0078, 0x4915, + 0x7007, 0x0010, 0x7108, 0xd1fc, 0x0040, 0x492a, 0x1078, 0x46b1, + 0x7008, 0xa086, 0x0008, 0x00c0, 0x4915, 0x7000, 0xa005, 0x00c0, + 0x4915, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c, + 0x127e, 0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, 0x70d4, 0xa084, + 0x4600, 0x8004, 0x2090, 0x0d7f, 0x2049, 0x4940, 0xad80, 0x0011, + 0x20a0, 0xb284, 0x0100, 0x0040, 0x4963, 0x2001, 0x4d04, 0x2004, + 0xd0ec, 0x0040, 0x495f, 0x2099, 0x0031, 0x0078, 0x4965, 0x2099, + 0x0032, 0x0078, 0x4965, 0x2099, 0x0031, 0x700c, 0xa084, 0x03ff, + 0x682a, 0x7007, 0x0008, 0x7007, 0x0002, 0x7003, 0x0001, 0x0040, + 0x4974, 0x8000, 0x80ac, 0x53a5, 0x700c, 0xa084, 0x03ff, 0x0040, + 0x4980, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x497b, + 0x0c7f, 0x2049, 0x0000, 0x7003, 0x0000, 0x157f, 0x137f, 0x147f, + 0x127f, 0x2000, 0x007c, 0x2091, 0x8000, 0x2091, 0x6000, 0x78ac, + 0xa005, 0x00c0, 0x49a2, 0x7974, 0x70d0, 0xa106, 0x00c0, 0x49a2, + 0x781c, 0xa005, 0x0040, 0x49a2, 0x781f, 0x0000, 0x0068, 0x49a2, + 0x2091, 0x4080, 0x7830, 0x8001, 0x7832, 0x00c0, 0x4a2a, 0x7834, + 0x7832, 0x7810, 0xd0ec, 0x00c0, 0x4a23, 0x2061, 0x72c0, 0x2069, + 0x4d80, 0xc7fd, 0x68d0, 0xa005, 0x0040, 0x49bc, 0x8001, 0x68d2, + 0x00c0, 0x49bc, 0x1078, 0x4bf3, 0x6800, 0xa084, 0x000f, 0x0040, + 0x49d1, 0xa086, 0x0001, 0x0040, 0x49d1, 0x6844, 0xa00d, 0x0040, + 0x49d1, 0x2104, 0xa005, 0x0040, 0x49d1, 0x8001, 0x200a, 0x0040, + 0x4b66, 0x6814, 0xa005, 0x0040, 0x49f6, 0x8001, 0x6816, 0x00c0, + 0x49f6, 0x68a7, 0x0001, 0x0f7e, 0xd7fc, 0x00c0, 0x49eb, 0x7810, + 0xd0ec, 0x0040, 0x49e7, 0x2079, 0x0100, 0x0078, 0x49ed, 0x2079, + 0x0200, 0x0078, 0x49ed, 0x2079, 0x0100, 0x1078, 0x42cf, 0x0f7f, + 0x6864, 0xa005, 0x0040, 0x49f6, 0x1078, 0x25ea, 0x6880, 0xa005, + 0x0040, 0x4a03, 0x8001, 0x6882, 0x00c0, 0x4a03, 0x6867, 0x0000, + 0x68d4, 0xc0dd, 0x68d6, 0x68d4, 0xd0fc, 0x0040, 0x4a20, 0xc0fc, + 0x68d6, 0x20a9, 0x0200, 0x6034, 0xa005, 0x0040, 0x4a1c, 0x8001, + 0x6036, 0x68d4, 0xc0fd, 0x68d6, 0x00c0, 0x4a1c, 0x6010, 0xa005, + 0x0040, 0x4a1c, 0x1078, 0x25ea, 0xace0, 0x0010, 0x00f0, 0x4a0b, + 0xd7fc, 0x0040, 0x4a2a, 0x2061, 0x52c0, 0x2069, 0x4d40, 0xc7fc, + 0x0078, 0x49b2, 0x1078, 0x4a66, 0x7838, 0x8001, 0x783a, 0x00c0, + 0x4a4c, 0x783c, 0x783a, 0x2061, 0x52c0, 0x2069, 0x4d40, 0xc7fc, + 0x680c, 0xa005, 0x0040, 0x4a3e, 0x1078, 0x4abd, 0xd7fc, 0x00c0, + 0x4a4c, 0x7810, 0xd0ec, 0x00c0, 0x4a4c, 0x2061, 0x72c0, 0x2069, + 0x4d80, 0xc7fd, 0x0078, 0x4a38, 0x7814, 0xd0e4, 0x00c0, 0x4a50, + 0x7810, 0xd0cc, 0x0040, 0x4a63, 0xd0ac, 0x00c0, 0x4a5c, 0xd0a4, + 0x0040, 0x4a63, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0068, 0x4a62, + 0x1078, 0x2356, 0x007c, 0x2091, 0x8001, 0x007c, 0x7840, 0x8001, + 0x7842, 0x00c0, 0x4abc, 0x7844, 0x7842, 0x2091, 0x8000, 0x2061, + 0x52c0, 0x2069, 0x4d40, 0xc7fc, 0x7810, 0x2079, 0x0200, 0xd0ec, + 0x0040, 0x4a7c, 0x2079, 0x0100, 0x68d8, 0xa005, 0x0040, 0x4a88, + 0x7de0, 0xa504, 0x00c0, 0x4a88, 0x68da, 0x68d4, 0xc0bc, 0x68d6, + 0x2079, 0x4d00, 0x6810, 0xa005, 0x00c0, 0x4a90, 0x2001, 0x0101, + 0x8001, 0x6812, 0xd7fc, 0x0040, 0x4a99, 0xa080, 0x93d0, 0x0078, + 0x4a9b, 0xa080, 0x92c0, 0x2040, 0x2004, 0xa065, 0x0040, 0x4aac, + 0x6024, 0xa005, 0x0040, 0x4aa8, 0x8001, 0x6026, 0x0040, 0x4b08, + 0x6000, 0x2c40, 0x0078, 0x4a9d, 0xd7fc, 0x00c0, 0x4abc, 0x7810, + 0xd0ec, 0x00c0, 0x4abc, 0x2061, 0x72c0, 0x2069, 0x4d80, 0xc7fd, + 0x2079, 0x0200, 0x0078, 0x4a7c, 0x007c, 0x2009, 0x0000, 0x20a9, + 0x0200, 0x6008, 0xd09c, 0x0040, 0x4af4, 0x6024, 0xa005, 0x0040, + 0x4acd, 0x8001, 0x6026, 0x0078, 0x4af2, 0x6008, 0xc09c, 0xd084, + 0x00c0, 0x4ad5, 0xd0ac, 0x0040, 0x4aec, 0x600a, 0x6004, 0xa06d, + 0x0040, 0x4af4, 0x0c7e, 0x017e, 0x6010, 0x8001, 0x6012, 0x1078, + 0x3d27, 0x2d00, 0x2c68, 0x2060, 0x1078, 0x1e42, 0x1078, 0x2004, + 0x017f, 0x0c7f, 0x0078, 0x4af4, 0xc0bd, 0x600a, 0xa18d, 0x0001, + 0x0078, 0x4af4, 0xa18d, 0x0100, 0xace0, 0x0010, 0x00f0, 0x4ac1, + 0xa184, 0x0001, 0x0040, 0x4b03, 0xa18c, 0xfffe, 0x690e, 0x1078, + 0x25ea, 0x0078, 0x4b04, 0x690e, 0x007c, 0x00c0, 0x4b04, 0x786c, + 0x6800, 0xa005, 0x0040, 0x4b10, 0x684c, 0xac06, 0x0040, 0x4b66, + 0x6864, 0xa005, 0x0040, 0x4b18, 0x6027, 0x0001, 0x0078, 0x4b65, + 0x2c00, 0x687e, 0x6714, 0x6f76, 0x6017, 0x0000, 0x602b, 0x0000, + 0x601b, 0x0006, 0x60b4, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, + 0x00ff, 0xa085, 0x0060, 0x6022, 0x6000, 0x2042, 0x1078, 0x1dcb, + 0x6818, 0xa005, 0x0040, 0x4b36, 0x8001, 0x681a, 0x6808, 0xc0a4, + 0x680a, 0x6810, 0x7908, 0x8109, 0x790a, 0x8001, 0x00d0, 0x4b42, + 0x1078, 0x290c, 0x6812, 0x00c0, 0x4b48, 0x7910, 0xc1a5, 0x7912, + 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x1078, 0x2013, 0xd7fc, + 0x00c0, 0x4b56, 0x2069, 0x4d40, 0x0078, 0x4b58, 0x2069, 0x4d80, + 0x6910, 0xa184, 0x0100, 0x2001, 0x0006, 0x00c0, 0x4b62, 0x697a, + 0x2001, 0x0004, 0x2708, 0x1078, 0x25dd, 0x007c, 0x0d7e, 0x694c, + 0x2160, 0xd7fc, 0x00c0, 0x4b78, 0x7810, 0xd0ec, 0x0040, 0x4b74, + 0x2069, 0x0100, 0x0078, 0x4b7a, 0x2069, 0x0200, 0x0078, 0x4b7a, + 0x2069, 0x0100, 0x1078, 0x288d, 0x601b, 0x0006, 0x6858, 0xa084, + 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0048, 0x6022, + 0x602f, 0x0000, 0x6033, 0x0000, 0x6808, 0xa084, 0xfffd, 0x680a, + 0x6830, 0xd0b4, 0x0040, 0x4bac, 0x684b, 0x0004, 0x20a9, 0x0014, + 0x6848, 0xd094, 0x0040, 0x4b9e, 0x00f0, 0x4b98, 0x684b, 0x0009, + 0x20a9, 0x0014, 0x6848, 0xd084, 0x0040, 0x4ba8, 0x00f0, 0x4ba2, + 0x20a9, 0x00fa, 0x00f0, 0x4baa, 0x681b, 0x0047, 0x0d7f, 0x6867, + 0x0007, 0x007c, 0x2079, 0x4d00, 0x1078, 0x4be6, 0x1078, 0x4bcc, + 0x1078, 0x4bd9, 0x2009, 0x0002, 0x2069, 0x4d80, 0x680f, 0x0000, + 0x6813, 0x0000, 0x6817, 0x0000, 0x8109, 0x0040, 0x4bcb, 0x2069, + 0x4d40, 0x0078, 0x4bbe, 0x007c, 0x7810, 0xd0ec, 0x0040, 0x4bd4, + 0x2019, 0x00cc, 0x0078, 0x4bd6, 0x2019, 0x007b, 0x7b3a, 0x7b3e, + 0x007c, 0x7814, 0xd0e4, 0x00c0, 0x4be1, 0x2019, 0x0040, 0x0078, + 0x4be3, 0x2019, 0x0026, 0x7b42, 0x7b46, 0x007c, 0x7814, 0xd0e4, + 0x00c0, 0x4bee, 0x2019, 0x3f94, 0x0078, 0x4bf0, 0x2019, 0x2624, + 0x7b32, 0x7b36, 0x007c, 0x6950, 0xa185, 0x0000, 0x0040, 0x4c08, + 0x0c7e, 0x6ac0, 0x2264, 0x602b, 0x0000, 0x602f, 0x0000, 0x6008, + 0xc0b5, 0x600a, 0x8210, 0x8109, 0x00c0, 0x4bfa, 0x6952, 0x0c7f, + 0x007c, 0x70ec, 0xd0dc, 0x00c0, 0x4c12, 0xd0d4, 0x0040, 0x4c35, + 0x0078, 0x4c38, 0x2008, 0x7810, 0xd0ec, 0x0040, 0x4c21, 0xd1c4, + 0x00c0, 0x4c40, 0xc0f5, 0x7812, 0xd0ec, 0x0040, 0x4c3c, 0x0078, + 0x4c38, 0xae8e, 0x0100, 0x0040, 0x4c2d, 0x7814, 0xc0f5, 0x7816, + 0xd0d4, 0x00c0, 0x4c3c, 0x0078, 0x4c38, 0x7814, 0xc0fd, 0x7816, + 0xd0d4, 0x00c0, 0x4c3c, 0x0078, 0x4c38, 0xd0e4, 0x0040, 0x4c3e, + 0x7804, 0xd08c, 0x0040, 0x4c3e, 0x681f, 0x000c, 0x70a0, 0x70a2, + 0x007c, 0x4620 +}; +/************************************************************************ + * * + * --- ISP1240/ISP1080/ISP1280 Initiator/Target Firmware --- * + * 32 LUN Support * + * * + ************************************************************************/ +/* + * Firmware Version 9.10.00 (12:20 Jul 24, 1999) + */ + +static const u_int16_t isp_1080_risc_code_it[] = { + 0x0078, 0x103a, 0x0000, 0x4c6c, 0x0000, 0x2043, 0x4f50, 0x5952, + 0x4947, 0x4854, 0x2031, 0x3939, 0x3520, 0x514c, 0x4f47, 0x4943, + 0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350, + 0x3132, 0x3430, 0x2049, 0x2f54, 0x2046, 0x6972, 0x6d77, 0x6172, + 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, 0x392e, 0x3130, + 0x2020, 0x2043, 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, + 0x3030, 0x2050, 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, + 0x3031, 0x2024, 0x20c9, 0xa8ff, 0x2001, 0x04fc, 0x2004, 0xa086, + 0x1080, 0x00c0, 0x104d, 0x2071, 0x0100, 0x70a0, 0x70a2, 0x20c1, + 0x0010, 0x2089, 0x136f, 0x0078, 0x1066, 0x2001, 0x04fc, 0x2004, + 0xa086, 0x1280, 0x00c0, 0x1062, 0x2071, 0x0200, 0x70a0, 0x70a2, + 0x2071, 0x0100, 0x70a0, 0x70a2, 0x20c1, 0x0010, 0x2089, 0x13f3, + 0x0078, 0x1066, 0x20c1, 0x0020, 0x2089, 0x1317, 0x2071, 0x0010, + 0x70c3, 0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, + 0x70d3, 0x0009, 0x2001, 0x04fe, 0x70d6, 0x20c1, 0x0021, 0x2019, + 0x0000, 0x2009, 0xfeff, 0x2100, 0x200b, 0xa5a5, 0xa1ec, 0x7fff, + 0x2d64, 0x206b, 0x0a0a, 0xaddc, 0x3fff, 0x2b54, 0x205b, 0x5050, + 0x2114, 0xa286, 0xa5a5, 0x0040, 0x109d, 0xa386, 0x000f, 0x0040, + 0x1099, 0x2c6a, 0x2a5a, 0x20c1, 0x0020, 0x2019, 0x000f, 0x0078, + 0x1079, 0x2c6a, 0x2a5a, 0x0078, 0x109b, 0x2c6a, 0x2a5a, 0x2130, + 0x2128, 0xa1a2, 0x5d00, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, + 0x8424, 0xa192, 0xa900, 0x2009, 0x0000, 0x2001, 0x0034, 0x1078, + 0x2239, 0x2218, 0x2079, 0x5d00, 0x2fa0, 0x2408, 0x2011, 0x0000, + 0x20a9, 0x0040, 0x42a4, 0x8109, 0x00c0, 0x10b8, 0x2009, 0xff00, + 0x3400, 0xa102, 0x0048, 0x10c8, 0x0040, 0x10c8, 0x20a8, 0x42a4, + 0x2001, 0x04fc, 0x2004, 0xa086, 0x1080, 0x00c0, 0x10e0, 0x2071, + 0x0100, 0x0d7e, 0x2069, 0x5d40, 0x1078, 0x593e, 0x0d7f, 0x7808, + 0xc0ed, 0x780a, 0x7813, 0x0064, 0x2011, 0x000a, 0x0078, 0x1107, + 0x2001, 0x04fc, 0x2004, 0xa086, 0x1280, 0x00c0, 0x1100, 0x780c, + 0xc0ed, 0xc0d5, 0x780e, 0x7813, 0x0064, 0x2071, 0x0200, 0x0d7e, + 0x2069, 0x5d40, 0x1078, 0x593e, 0x2069, 0x5d80, 0x2071, 0x0100, + 0x1078, 0x593e, 0x780c, 0xc0d4, 0x780e, 0x0d7f, 0x0078, 0x1107, + 0x780c, 0xc0e5, 0x780e, 0x7813, 0x003c, 0x2011, 0x000c, 0x2009, + 0x5d4c, 0x220a, 0x2009, 0x5d8c, 0x220a, 0x7ece, 0x7cc6, 0x7bca, + 0x785f, 0x0000, 0x2031, 0x0030, 0x78b3, 0x0101, 0x781b, 0x0002, + 0x781f, 0x0002, 0x2009, 0x0002, 0x2069, 0x5d40, 0x6817, 0x0003, + 0x681f, 0x0007, 0x6823, 0x00fa, 0x6827, 0x0008, 0x682b, 0x0028, + 0x6837, 0x0000, 0x683b, 0x0006, 0x682f, 0x0008, 0x683f, 0x0000, + 0x8109, 0x0040, 0x1157, 0x68f3, 0x000a, 0x68e3, 0x5dc0, 0x2079, + 0x5d00, 0x780c, 0xd0e4, 0x00c0, 0x1141, 0x68f7, 0x7329, 0x0078, + 0x1143, 0x68f7, 0x730d, 0x68e7, 0x62c0, 0x68eb, 0x61c0, 0x68ef, + 0xa2c0, 0x68cb, 0xa748, 0x68cf, 0xa74d, 0x68d3, 0xa748, 0x68d7, + 0xa748, 0x68c7, 0x0001, 0x2069, 0x5d80, 0x0078, 0x111e, 0x68f3, + 0x000a, 0x68e3, 0x5fc0, 0x68f7, 0x7419, 0x68e7, 0x82c0, 0x68eb, + 0x6240, 0x68ef, 0xa3d0, 0x68cb, 0xa74d, 0x68cf, 0xa752, 0x68d3, + 0xa74d, 0x68d7, 0xa74d, 0x68c7, 0x0001, 0x7808, 0xd0ec, 0x00c0, + 0x11b3, 0x780c, 0xd0e4, 0x00c0, 0x11a5, 0x0e7e, 0x2069, 0x61c0, + 0x2071, 0x0200, 0x70ec, 0xd0e4, 0x00c0, 0x1186, 0x2019, 0x0c0c, + 0x2021, 0x000c, 0x1078, 0x21a5, 0x0078, 0x118c, 0x2019, 0x0c0a, + 0x2021, 0x000a, 0x1078, 0x21a5, 0x2069, 0x6240, 0x2071, 0x0100, + 0x70ec, 0xd0e4, 0x00c0, 0x119c, 0x2019, 0x0c0c, 0x2021, 0x000c, + 0x1078, 0x21a5, 0x0078, 0x11a2, 0x2019, 0x0c0a, 0x2021, 0x000a, + 0x1078, 0x21a5, 0x0e7f, 0x0078, 0x11cc, 0x2019, 0x0c0c, 0x2021, + 0x000c, 0x2069, 0x61c0, 0x1078, 0x21a5, 0x2069, 0x6240, 0x1078, + 0x21a5, 0x0078, 0x11cc, 0x2069, 0x61c0, 0x0e7e, 0x2071, 0x0100, + 0x70ec, 0xd0e4, 0x00c0, 0x11c5, 0x2019, 0x0c0c, 0x2021, 0x000c, + 0x1078, 0x21a5, 0x0e7f, 0x0078, 0x11cc, 0x2019, 0x0c0a, 0x2021, + 0x000a, 0x1078, 0x21a5, 0x0e7f, 0x2011, 0x0002, 0x2069, 0x62c0, + 0x2009, 0x0002, 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b, 0x0040, + 0x7bcc, 0xa386, 0xfeff, 0x00c0, 0x11e3, 0x6817, 0x0100, 0x681f, + 0x0064, 0x0078, 0x11e7, 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, + 0x0010, 0x00f0, 0x11d4, 0x8109, 0x00c0, 0x11d2, 0x8211, 0x0040, + 0x11f5, 0x2069, 0x82c0, 0x0078, 0x11d0, 0x1078, 0x27ff, 0x1078, + 0x5314, 0x1078, 0x1def, 0x1078, 0x58ea, 0x2091, 0x2100, 0x2079, + 0x5d00, 0x7808, 0xd0ec, 0x0040, 0x1209, 0x2071, 0x0020, 0x0078, + 0x120b, 0x2071, 0x0050, 0x2091, 0x2200, 0x2079, 0x5d00, 0x2071, + 0x0020, 0x2091, 0x2300, 0x2079, 0x5d00, 0x7808, 0xd0ec, 0x0040, + 0x121d, 0x2079, 0x0100, 0x0078, 0x121f, 0x2079, 0x0200, 0x2071, + 0x5d40, 0x2091, 0x2400, 0x2079, 0x0100, 0x2071, 0x5d80, 0x2091, + 0x2000, 0x2079, 0x5d00, 0x2071, 0x0010, 0x3200, 0xa085, 0x301d, + 0x2090, 0x70c3, 0x0000, 0x0090, 0x123c, 0x70c0, 0xa086, 0x0002, + 0x00c0, 0x123c, 0x1078, 0x158f, 0x2039, 0x0000, 0x7808, 0xd0ec, + 0x00c0, 0x12c7, 0x1078, 0x1476, 0x78b0, 0xa005, 0x00c0, 0x125e, + 0x0068, 0x1252, 0x7868, 0xa065, 0x0040, 0x1252, 0x2029, 0x0000, + 0x1078, 0x2694, 0x1078, 0x2260, 0x0068, 0x126b, 0x7868, 0xa065, + 0x0040, 0x125e, 0x2029, 0x0000, 0x1078, 0x2694, 0x0068, 0x126b, + 0x2009, 0x5d46, 0x2011, 0x5d86, 0x2104, 0x220c, 0xa105, 0x0040, + 0x126b, 0x1078, 0x1f16, 0x0e7e, 0x0f7e, 0x2071, 0x5d40, 0x70c4, + 0xa005, 0x0040, 0x1294, 0x7458, 0xa485, 0x0000, 0x0040, 0x1294, + 0x2079, 0x0200, 0x2091, 0x8000, 0x72f4, 0xa28c, 0x303d, 0x2190, + 0x1078, 0x2d1a, 0x2091, 0x8000, 0x2091, 0x301d, 0x0068, 0x1294, + 0x0f7f, 0x7868, 0xa065, 0x0040, 0x1293, 0x0e7f, 0x2029, 0x0000, + 0x1078, 0x2694, 0x0e7e, 0x0f7e, 0x00e0, 0x129c, 0x0f7f, 0x0e7f, + 0x1078, 0x56e2, 0x0e7e, 0x0f7e, 0x2071, 0x5d80, 0x70c4, 0xa005, + 0x0040, 0x12b5, 0x7458, 0xa485, 0x0000, 0x0040, 0x12b5, 0x2079, + 0x0100, 0x2091, 0x8000, 0x72f4, 0xa28c, 0x303d, 0x2190, 0x1078, + 0x2d1a, 0x2091, 0x8000, 0x2091, 0x301d, 0x0f7f, 0x0e7f, 0x0068, + 0x12c1, 0x7868, 0xa065, 0x0040, 0x12c1, 0x2029, 0x0000, 0x1078, + 0x2694, 0x00e0, 0x1242, 0x1078, 0x56e2, 0x0078, 0x1242, 0x1078, + 0x1476, 0x78b0, 0xa005, 0x00c0, 0x12e3, 0x0068, 0x12d7, 0x7868, + 0xa065, 0x0040, 0x12d7, 0x2029, 0x0000, 0x1078, 0x2694, 0x1078, + 0x2260, 0x0068, 0x12ed, 0x7868, 0xa065, 0x0040, 0x12e3, 0x2029, + 0x0000, 0x1078, 0x2694, 0x0068, 0x12ed, 0x2009, 0x5d46, 0x2104, + 0xa005, 0x0040, 0x12ed, 0x1078, 0x1f16, 0x0e7e, 0x0f7e, 0x2071, + 0x5d40, 0x70c4, 0xa005, 0x0040, 0x1305, 0x7458, 0xa485, 0x0000, + 0x0040, 0x1305, 0x2079, 0x0100, 0x2091, 0x8000, 0x72f4, 0x1078, + 0x2d1a, 0x2091, 0x8000, 0x2091, 0x301d, 0x0f7f, 0x0e7f, 0x0068, + 0x1311, 0x7868, 0xa065, 0x0040, 0x1311, 0x2029, 0x0000, 0x1078, + 0x2694, 0x00e0, 0x12c7, 0x1078, 0x56e2, 0x0078, 0x12c7, 0x1337, + 0x1337, 0x1339, 0x1339, 0x1346, 0x1346, 0x1346, 0x1346, 0x1351, + 0x1351, 0x135e, 0x135e, 0x1346, 0x1346, 0x1346, 0x1346, 0x1337, + 0x1337, 0x1339, 0x1339, 0x1346, 0x1346, 0x1346, 0x1346, 0x1351, + 0x1351, 0x135e, 0x135e, 0x1346, 0x1346, 0x1346, 0x1346, 0x0078, + 0x1337, 0x007e, 0x107e, 0x127e, 0x2091, 0x2400, 0x1078, 0x2b0e, + 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, + 0x127e, 0x1078, 0x13c3, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, + 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, 0x1078, 0x2b0e, + 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, + 0x127e, 0x2091, 0x2300, 0x1078, 0x2b0e, 0x2091, 0x2400, 0x1078, + 0x2b0e, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x138f, + 0x138f, 0x1391, 0x1391, 0x139e, 0x139e, 0x139e, 0x139e, 0x13a9, + 0x13a9, 0x1391, 0x1391, 0x139e, 0x139e, 0x139e, 0x139e, 0x13aa, + 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, + 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x0078, + 0x138f, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, 0x1078, 0x2b0e, + 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, + 0x127e, 0x1078, 0x13d0, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, + 0x007c, 0x007c, 0x107e, 0x127e, 0x0d7e, 0x0e7e, 0x0f7e, 0x007e, + 0x2071, 0x0100, 0x2069, 0x5d40, 0x2079, 0x5d00, 0x70ec, 0xa084, + 0x1c00, 0x78ea, 0x1078, 0x593e, 0x007f, 0x0f7f, 0x0e7f, 0x0d7f, + 0x127f, 0x107f, 0x007c, 0x3c00, 0xa084, 0x0007, 0x0079, 0x13c8, + 0x13d9, 0x13d9, 0x13db, 0x13db, 0x13e0, 0x13e0, 0x13e5, 0x13e5, + 0x3c00, 0xa084, 0x0003, 0x0079, 0x13d5, 0x13d9, 0x13d9, 0x13ee, + 0x13ee, 0x1078, 0x2aef, 0x2091, 0x2200, 0x1078, 0x53ae, 0x007c, + 0x2091, 0x2100, 0x1078, 0x53ae, 0x007c, 0x2091, 0x2100, 0x1078, + 0x53ae, 0x2091, 0x2200, 0x1078, 0x53ae, 0x007c, 0x2091, 0x2100, + 0x1078, 0x53ae, 0x007c, 0x1413, 0x1413, 0x1415, 0x1415, 0x1422, + 0x1422, 0x1422, 0x1422, 0x142d, 0x142d, 0x143a, 0x143a, 0x1422, + 0x1422, 0x1422, 0x1422, 0x144b, 0x144b, 0x144b, 0x144b, 0x144b, + 0x144b, 0x144b, 0x144b, 0x144b, 0x144b, 0x144b, 0x144b, 0x144b, + 0x144b, 0x144b, 0x144b, 0x0078, 0x1413, 0x007e, 0x107e, 0x127e, + 0x2091, 0x2400, 0x1078, 0x2b0e, 0x127f, 0x107f, 0x007f, 0x2091, + 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x1078, 0x13c3, 0x127f, + 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, + 0x2091, 0x2300, 0x1078, 0x2b0e, 0x127f, 0x107f, 0x007f, 0x2091, + 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, 0x1078, + 0x2b0e, 0x2091, 0x2400, 0x1078, 0x2b0e, 0x127f, 0x107f, 0x007f, + 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x0d7e, 0x0e7e, + 0x0f7e, 0x2079, 0x5d00, 0x2071, 0x0200, 0x2069, 0x5d40, 0x3d00, + 0xd08c, 0x0040, 0x1461, 0x70ec, 0xa084, 0x1c00, 0x78ea, 0x1078, + 0x593e, 0x3d00, 0xd084, 0x0040, 0x146f, 0x2069, 0x5d80, 0x2071, + 0x0100, 0x70ec, 0xa084, 0x1c00, 0x78f2, 0x1078, 0x593e, 0x0f7f, + 0x0e7f, 0x0d7f, 0x127f, 0x107f, 0x007f, 0x007c, 0x0068, 0x14fc, + 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x14fc, 0x7820, + 0xa005, 0x00c0, 0x1487, 0x0010, 0x14fd, 0x0078, 0x14fc, 0x7908, + 0xd1f4, 0x0040, 0x148f, 0x2001, 0x4007, 0x0078, 0x1591, 0x790c, + 0xd1ec, 0x0040, 0x14aa, 0xd0fc, 0x0040, 0x14a0, 0x007e, 0x1078, + 0x1d64, 0x007f, 0x0040, 0x14aa, 0x2001, 0x4007, 0x0078, 0x1591, + 0x007e, 0x1078, 0x1d58, 0x007f, 0x0040, 0x14aa, 0x2001, 0x4007, + 0x0078, 0x1591, 0x7908, 0xd0fc, 0x00c0, 0x14b4, 0x2061, 0x5d40, + 0xc19c, 0xc7fc, 0x0078, 0x14b8, 0x2061, 0x5d80, 0xc19d, 0xc7fd, + 0x606c, 0xa005, 0x00c0, 0x14fc, 0x790a, 0x608b, 0x0000, 0x7820, + 0xc0fc, 0xa086, 0x0018, 0x00c0, 0x14c9, 0x0c7e, 0x1078, 0x1aa8, + 0x0c7f, 0x7823, 0x0000, 0x6084, 0xa065, 0x0040, 0x14e2, 0x0c7e, + 0x609c, 0x1078, 0x1e5c, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1bd4, + 0x2009, 0x000c, 0x6007, 0x0103, 0x1078, 0x1d70, 0x00c0, 0x14f6, + 0x1078, 0x1dd4, 0x7808, 0xd09c, 0x00c0, 0x14ea, 0x2061, 0x5d40, + 0x0078, 0x14ed, 0x2061, 0x5d80, 0xc09c, 0x6087, 0x0000, 0x780a, + 0x60f4, 0xd0dc, 0x0040, 0x14fa, 0xc0dc, 0x60f6, 0x2001, 0x4005, + 0x0078, 0x1591, 0x0078, 0x158f, 0x007c, 0x7808, 0xd0f4, 0x0040, + 0x1505, 0x2001, 0x4007, 0x0078, 0x1591, 0x70c3, 0x0000, 0x70c7, + 0x0000, 0x70cb, 0x0000, 0x70cf, 0x0000, 0x70db, 0x0000, 0x71c4, + 0x7a08, 0xd2ec, 0x0040, 0x1515, 0xc1fc, 0x70c0, 0xa0bc, 0xffc0, + 0x00c0, 0x155d, 0x2038, 0x0079, 0x151d, 0x158f, 0x15e5, 0x15ae, + 0x15fa, 0x1609, 0x160f, 0x15a5, 0x1bec, 0x1613, 0x159d, 0x15b2, + 0x15b4, 0x15b6, 0x15b8, 0x1bf1, 0x159d, 0x1621, 0x1674, 0x1aca, + 0x1be6, 0x15ba, 0x1929, 0x196b, 0x19a6, 0x19f3, 0x18e2, 0x18f0, + 0x1904, 0x1918, 0x1735, 0x159d, 0x16a0, 0x16a4, 0x16b0, 0x16bc, + 0x16d2, 0x16de, 0x16e1, 0x16ed, 0x16f9, 0x1701, 0x171d, 0x1729, + 0x159d, 0x159d, 0x159d, 0x159d, 0x1742, 0x1751, 0x176c, 0x17a2, + 0x17ca, 0x17da, 0x17dd, 0x180e, 0x183f, 0x1851, 0x18b4, 0x18c4, + 0x159d, 0x159d, 0x159d, 0x159d, 0x18d4, 0xa0bc, 0xffa0, 0x00c0, + 0x159d, 0x2038, 0xa084, 0x001f, 0x0079, 0x1566, 0x159d, 0x159d, + 0x159d, 0x159d, 0x159d, 0x1d0d, 0x1d13, 0x159d, 0x159d, 0x159d, + 0x1d17, 0x1d1c, 0x159d, 0x159d, 0x159d, 0x159d, 0x15df, 0x15f4, + 0x161b, 0x166e, 0x1ac4, 0x1c08, 0x1c29, 0x159d, 0x1c41, 0x1d20, + 0x1cff, 0x1d09, 0x159d, 0x159d, 0x159d, 0x159d, 0x72ca, 0x71c6, + 0x2001, 0x4006, 0x0078, 0x1591, 0x73ce, 0x72ca, 0x71c6, 0x2001, + 0x4000, 0x70c2, 0x0068, 0x1592, 0x2061, 0x0000, 0x601b, 0x0001, + 0x2091, 0x5000, 0x2091, 0x4080, 0x007c, 0x70c3, 0x4001, 0x0078, + 0x1592, 0x70c3, 0x4006, 0x0078, 0x1592, 0x2099, 0x0041, 0x20a1, + 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0078, 0x158f, 0x70c4, 0x70c3, + 0x0004, 0x007a, 0x0078, 0x158f, 0x0078, 0x158f, 0x0078, 0x158f, + 0x0078, 0x158f, 0x2091, 0x8000, 0x70c3, 0x0000, 0x70c7, 0x4953, + 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, 0x0009, 0x2001, 0x000a, + 0x70d6, 0x2079, 0x0000, 0x781b, 0x0001, 0x2031, 0x0030, 0x2059, + 0x1000, 0x2029, 0x041a, 0x2051, 0x0445, 0x2061, 0x0447, 0x20c1, + 0x0020, 0x2091, 0x5000, 0x2091, 0x4080, 0x0078, 0x0418, 0x75d8, + 0x74dc, 0x75da, 0x74de, 0x0078, 0x15e8, 0x2029, 0x0000, 0x2520, + 0x71d0, 0x73c8, 0x72cc, 0x70c4, 0x1078, 0x1f6b, 0x0040, 0x158f, + 0x70c3, 0x4002, 0x0078, 0x158f, 0x75d8, 0x74dc, 0x75da, 0x74de, + 0x0078, 0x15fd, 0x2029, 0x0000, 0x2520, 0x71d0, 0x73c8, 0x72cc, + 0x70c4, 0x1078, 0x1fb5, 0x0040, 0x158f, 0x70c3, 0x4002, 0x0078, + 0x158f, 0x71c4, 0x70c8, 0x2114, 0x200a, 0x0078, 0x158d, 0x71c4, + 0x2114, 0x0078, 0x158d, 0x70c7, 0x0009, 0x70cb, 0x000a, 0x70cf, + 0x0000, 0x0078, 0x158f, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, + 0x1624, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0, + 0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005, 0x0040, 0x1668, 0x8001, + 0x786e, 0xa084, 0xfc00, 0x0040, 0x163c, 0x78b0, 0xc085, 0x78b2, + 0x2001, 0x4005, 0x0078, 0x1591, 0x7a76, 0x7b7a, 0x7d7e, 0x7e82, + 0x7c72, 0xa48c, 0xff00, 0x0040, 0x1654, 0x8407, 0x8004, 0x8004, + 0x810c, 0x810c, 0x810f, 0xa118, 0xa291, 0x0000, 0xa6b1, 0x0000, + 0xa5a9, 0x0000, 0x0078, 0x165e, 0x8407, 0x8004, 0x8004, 0xa318, + 0xa291, 0x0000, 0xa6b1, 0x0000, 0xa5a9, 0x0000, 0x731a, 0x721e, + 0x7622, 0x7526, 0x78b0, 0xa084, 0xfffc, 0x78b2, 0x0078, 0x166c, + 0x78b0, 0xa085, 0x0001, 0x78b2, 0x0078, 0x158f, 0x75d8, 0x76dc, + 0x75da, 0x76de, 0x0078, 0x1677, 0x2029, 0x0000, 0x2530, 0x70c4, + 0x72c8, 0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce, 0x74d6, 0xa005, + 0x0040, 0x169a, 0x8001, 0x7892, 0xa084, 0xfc00, 0x0040, 0x168f, + 0x78b0, 0xc0c5, 0x78b2, 0x2001, 0x4005, 0x0078, 0x1591, 0x7a9a, + 0x7b9e, 0x7da2, 0x7ea6, 0x7c96, 0x78b0, 0xa084, 0xfcff, 0x78b2, + 0x0078, 0x169e, 0x78b0, 0xa085, 0x0100, 0x78b2, 0x0078, 0x158f, + 0x7960, 0x7ac8, 0x0078, 0x158d, 0x2009, 0x5d47, 0x210c, 0x7808, + 0xd0ec, 0x00c0, 0x158e, 0x2011, 0x5d87, 0x2214, 0x0078, 0x158d, + 0x2009, 0x5d48, 0x210c, 0x7808, 0xd0ec, 0x00c0, 0x158e, 0x2011, + 0x5d88, 0x2214, 0x0078, 0x158d, 0x2061, 0x5d40, 0x6124, 0x6228, + 0x8214, 0x8214, 0x8214, 0x7808, 0xd0ec, 0x00c0, 0x16d0, 0x2061, + 0x5d80, 0x6324, 0x73da, 0x6328, 0x831c, 0x831c, 0x831c, 0x73de, + 0x0078, 0x158d, 0x2009, 0x5d4b, 0x210c, 0x7808, 0xd0ec, 0x00c0, + 0x158e, 0x2011, 0x5d8b, 0x2214, 0x0078, 0x158d, 0x7910, 0x0078, + 0x158e, 0x2009, 0x5d4d, 0x210c, 0x7808, 0xd0ec, 0x00c0, 0x158e, + 0x2011, 0x5d8d, 0x2214, 0x0078, 0x158d, 0x2009, 0x5d4e, 0x210c, + 0x7808, 0xd0ec, 0x00c0, 0x158e, 0x2011, 0x5d8e, 0x2214, 0x0078, + 0x158d, 0x7918, 0x7808, 0xd0ec, 0x00c0, 0x158e, 0x7a1c, 0x0078, + 0x158d, 0xd1fc, 0x00c0, 0x1708, 0x2011, 0x61c0, 0x0078, 0x170a, + 0x2011, 0x6240, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, + 0xa268, 0x6a00, 0x6804, 0xa084, 0x0008, 0x0040, 0x171a, 0x6b08, + 0x0078, 0x171b, 0x6b0c, 0x0078, 0x158c, 0x2138, 0x1078, 0x1dff, + 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708, 0x0078, + 0x158c, 0x2061, 0x5d40, 0x6114, 0x7808, 0xd0ec, 0x00c0, 0x158e, + 0x2061, 0x5d80, 0x6214, 0x0078, 0x158d, 0x2138, 0x1078, 0x1dff, + 0x2091, 0x8000, 0x6908, 0x6a18, 0x6b10, 0x77da, 0x2091, 0x8001, + 0x0078, 0x158c, 0x2110, 0xa294, 0x000f, 0xa282, 0x0010, 0x00c8, + 0x1587, 0x1078, 0x2933, 0xd3f4, 0x0040, 0x174f, 0xc2ad, 0x0078, + 0x158c, 0x2100, 0xc0bc, 0xa082, 0x0010, 0x00c8, 0x1587, 0xd1bc, + 0x00c0, 0x175f, 0x2011, 0x5d47, 0x2204, 0x0078, 0x1763, 0x2011, + 0x5d87, 0x2204, 0xc0bd, 0x007e, 0x2100, 0xc0bc, 0x2012, 0x1078, + 0x2890, 0x017f, 0x0078, 0x158e, 0x71c4, 0x2021, 0x5d48, 0x2404, + 0x70c6, 0x2019, 0x0000, 0x0078, 0x177b, 0x71c8, 0x2021, 0x5d88, + 0x2404, 0x70ca, 0xc3fd, 0x2011, 0x179a, 0x20a9, 0x0008, 0x2204, + 0xa106, 0x0040, 0x178a, 0x8210, 0x00f0, 0x177f, 0x71c4, 0x72c8, + 0x0078, 0x1586, 0xa292, 0x179a, 0x027e, 0x2122, 0x017f, 0x1078, + 0x28b1, 0x7808, 0xd0ec, 0x00c0, 0x1798, 0xd3fc, 0x0040, 0x1775, + 0x0078, 0x158f, 0x03e8, 0x00fa, 0x01f4, 0x02ee, 0x0064, 0x0019, + 0x0032, 0x004b, 0x2061, 0x5d40, 0x6124, 0x6228, 0x8214, 0x8214, + 0x8214, 0x70c4, 0x6026, 0x70c8, 0x8003, 0x8003, 0x8003, 0x602a, + 0x7808, 0xd0ec, 0x00c0, 0x17c8, 0x027e, 0x017e, 0x2061, 0x5d80, + 0x6124, 0x6228, 0x8214, 0x8214, 0x8214, 0x70d8, 0x6026, 0x70dc, + 0x8003, 0x8003, 0x8003, 0x602a, 0x71da, 0x72de, 0x017f, 0x027f, + 0x0078, 0x158d, 0x2061, 0x5d40, 0x612c, 0x70c4, 0x602e, 0x7808, + 0xd0ec, 0x00c0, 0x158e, 0x2061, 0x5d80, 0x622c, 0x70c8, 0x602e, + 0x0078, 0x158d, 0x7910, 0x0078, 0x158e, 0x71c4, 0xa184, 0xffcf, + 0x0040, 0x17e9, 0x7808, 0xd0ec, 0x00c0, 0x1587, 0x72c8, 0x0078, + 0x1586, 0x2011, 0x5d4d, 0x2204, 0x2112, 0x007e, 0x2019, 0x0000, + 0x1078, 0x2918, 0x7808, 0xd0ec, 0x0040, 0x17f9, 0x017f, 0x0078, + 0x158e, 0x71c8, 0xa184, 0xffcf, 0x0040, 0x1802, 0x2110, 0x71c4, + 0x0078, 0x1586, 0x2011, 0x5d8d, 0x2204, 0x2112, 0x007e, 0xc3fd, + 0x1078, 0x2918, 0x027f, 0x017f, 0x0078, 0x158d, 0x71c4, 0xa182, + 0x0010, 0x0048, 0x181a, 0x7808, 0xd0ec, 0x00c0, 0x1587, 0x72c8, + 0x0078, 0x1586, 0x2011, 0x5d4e, 0x2204, 0x007e, 0x2112, 0x2019, + 0x0000, 0x1078, 0x28f6, 0x7808, 0xd0ec, 0x0040, 0x182a, 0x017f, + 0x0078, 0x158e, 0x71c8, 0xa182, 0x0010, 0x0048, 0x1833, 0x2110, + 0x71c4, 0x0078, 0x1586, 0x2011, 0x5d8e, 0x2204, 0x007e, 0x2112, + 0xc3fd, 0x1078, 0x28f6, 0x027f, 0x017f, 0x0078, 0x158d, 0x71c4, + 0x72c8, 0xa184, 0xfffd, 0x00c0, 0x1586, 0xa284, 0xfffd, 0x00c0, + 0x1586, 0x2100, 0x7918, 0x781a, 0x2200, 0x7a1c, 0x781e, 0x0078, + 0x158d, 0x017e, 0xd1fc, 0x00c0, 0x1859, 0x2011, 0x61c0, 0x0078, + 0x185b, 0x2011, 0x6240, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, + 0x8003, 0xa268, 0x2019, 0x0000, 0x72c8, 0x2091, 0x8000, 0x6800, + 0x007e, 0xa226, 0x0040, 0x1888, 0x6a02, 0xa484, 0x2000, 0x0040, + 0x1873, 0xa39d, 0x0010, 0xa484, 0x1000, 0x0040, 0x1879, 0xa39d, + 0x0008, 0xa484, 0x4000, 0x0040, 0x1888, 0x810f, 0xa284, 0x4000, + 0x0040, 0x1886, 0x1078, 0x2975, 0x0078, 0x1888, 0x1078, 0x2953, + 0x72cc, 0x6808, 0xa206, 0x0040, 0x18aa, 0xa2a4, 0x00ff, 0x780c, + 0xd0e4, 0x00c0, 0x189b, 0xa482, 0x0028, 0x0048, 0x18a7, 0x0040, + 0x18a7, 0x0078, 0x189f, 0xa482, 0x0043, 0x0048, 0x18a7, 0x027f, + 0x72ca, 0x017f, 0x71c6, 0x2091, 0x8001, 0x0078, 0x1588, 0x6a0a, + 0xa39d, 0x000a, 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x017f, + 0x2091, 0x8001, 0x0078, 0x158c, 0x2138, 0x1078, 0x1dff, 0x2091, + 0x8000, 0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc, + 0x681e, 0x2708, 0x0078, 0x158c, 0x70c4, 0x2061, 0x5d40, 0x6114, + 0x6016, 0x7808, 0xd0ec, 0x00c0, 0x158e, 0x70c8, 0x2061, 0x5d80, + 0x6214, 0x6016, 0x0078, 0x158d, 0x72c8, 0x73cc, 0xa182, 0x0010, + 0x00c8, 0x1587, 0x1078, 0x2997, 0xd3f4, 0x0040, 0x18e0, 0xc2ad, + 0x0078, 0x158c, 0x2138, 0x1078, 0x1dff, 0x2091, 0x8000, 0x6a08, + 0xa295, 0x0002, 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0078, 0x158d, + 0x2138, 0x1078, 0x1dff, 0x2091, 0x8000, 0x6a08, 0xa294, 0xfff9, + 0x6a0a, 0x6804, 0xa005, 0x0040, 0x18ff, 0x1078, 0x2772, 0x2091, + 0x8001, 0x2708, 0x0078, 0x158d, 0x2138, 0x1078, 0x1dff, 0x2091, + 0x8000, 0x6a08, 0xa295, 0x0004, 0x6a0a, 0x6804, 0xa005, 0x0040, + 0x1913, 0x1078, 0x2772, 0x2091, 0x8001, 0x2708, 0x0078, 0x158d, + 0x2138, 0x2041, 0x0001, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, + 0x8000, 0x1078, 0x1e18, 0x2091, 0x8001, 0x2708, 0x6a08, 0x0078, + 0x158d, 0x2138, 0x780c, 0xd0e4, 0x00c0, 0x193d, 0xd7fc, 0x0040, + 0x1937, 0x1078, 0x1d64, 0x0040, 0x193d, 0x0078, 0x1591, 0x1078, + 0x1d58, 0x0040, 0x193d, 0x0078, 0x1591, 0x73c8, 0x72cc, 0x77c6, + 0x73ca, 0x72ce, 0x1078, 0x1e99, 0x00c0, 0x1967, 0x6818, 0xa005, + 0x0040, 0x1961, 0x2708, 0x077e, 0x1078, 0x29c0, 0x077f, 0x00c0, + 0x1961, 0x2001, 0x0015, 0xd7fc, 0x00c0, 0x195a, 0x2061, 0x5d40, + 0x0078, 0x195d, 0xc0fd, 0x2061, 0x5d80, 0x7822, 0x2091, 0x8001, + 0x007c, 0x2091, 0x8001, 0x2001, 0x4005, 0x0078, 0x1591, 0x2091, + 0x8001, 0x0078, 0x158f, 0x2138, 0x780c, 0xd0e4, 0x00c0, 0x197f, + 0xd7fc, 0x0040, 0x1979, 0x1078, 0x1d64, 0x0040, 0x197f, 0x0078, + 0x1591, 0x1078, 0x1d58, 0x0040, 0x197f, 0x0078, 0x1591, 0x77c6, + 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, + 0x1078, 0x1e18, 0x2009, 0x0016, 0xd7fc, 0x00c0, 0x1993, 0x2061, + 0x5d40, 0x0078, 0x1996, 0x2061, 0x5d80, 0xc1fd, 0x606f, 0x0003, + 0x6087, 0x0000, 0x677e, 0x608b, 0x000f, 0x7922, 0x61f4, 0xc1dc, + 0x61f6, 0x1078, 0x2772, 0x2091, 0x8001, 0x007c, 0x77c8, 0x77ca, + 0x2138, 0x77c6, 0x780c, 0xd0e4, 0x00c0, 0x19bd, 0xd7fc, 0x0040, + 0x19b7, 0x1078, 0x1d64, 0x0040, 0x19bd, 0x0078, 0x1591, 0x1078, + 0x1d58, 0x0040, 0x19bd, 0x0078, 0x1591, 0xa7bc, 0xff00, 0x2091, + 0x8000, 0x2009, 0x0017, 0xd7fc, 0x00c0, 0x19ca, 0x2061, 0x5d40, + 0x0078, 0x19cd, 0x2061, 0x5d80, 0xc1fd, 0x6087, 0x0000, 0x606f, + 0x0002, 0x677e, 0x608b, 0x000f, 0x7922, 0x61f4, 0xc1dc, 0x61f6, + 0x1078, 0x2772, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0010, + 0x70c8, 0xa005, 0x0040, 0x19e7, 0x60f4, 0xc0fd, 0x60f6, 0x1078, + 0x1e18, 0x70c8, 0x6836, 0x8738, 0xa784, 0x001f, 0x00c0, 0x19e7, + 0x2091, 0x8001, 0x007c, 0x2011, 0x0000, 0x7808, 0xd0ec, 0x00c0, + 0x1a0d, 0x72c8, 0x780c, 0xd0e4, 0x00c0, 0x1a0d, 0xd284, 0x0040, + 0x1a07, 0x1078, 0x1d64, 0x0040, 0x1a0d, 0x0078, 0x1591, 0x1078, + 0x1d58, 0x0040, 0x1a0d, 0x0078, 0x1591, 0x72ca, 0x78b0, 0xa084, + 0x0003, 0x00c0, 0x1a37, 0x2039, 0x0000, 0xd284, 0x0040, 0x1a19, + 0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x1078, + 0x1dff, 0x2091, 0x8000, 0x6808, 0xc0d4, 0xa80d, 0x690a, 0x2091, + 0x8001, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1a1f, 0xa7bc, 0xff00, + 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1a1f, 0x2091, + 0x8000, 0x7808, 0xd0ec, 0x0040, 0x1a41, 0x2069, 0x0100, 0x0078, + 0x1a4b, 0x72c8, 0xd284, 0x00c0, 0x1a49, 0x2069, 0x0200, 0x0078, + 0x1a4b, 0x2069, 0x0100, 0x6808, 0xa084, 0xfffd, 0x680a, 0x6830, + 0xa084, 0x0040, 0x0040, 0x1a6e, 0x684b, 0x0004, 0x20a9, 0x0014, + 0x6848, 0xa084, 0x0004, 0x0040, 0x1a5f, 0x00f0, 0x1a58, 0x684b, + 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, 0x0040, 0x1a6a, + 0x00f0, 0x1a63, 0x20a9, 0x00fa, 0x00f0, 0x1a6c, 0x2079, 0x5d00, + 0x2009, 0x0018, 0x7808, 0xd0ec, 0x00c0, 0x1a7a, 0x72c8, 0xd284, + 0x00c0, 0x1a7e, 0x2061, 0x5d40, 0x0078, 0x1a81, 0x2061, 0x5d80, + 0xc1fd, 0x7922, 0x606f, 0x0001, 0x608b, 0x000f, 0x60c7, 0x0000, + 0x60c8, 0x60d2, 0x60d6, 0x60f4, 0xd0b4, 0x0040, 0x1a9b, 0xc0b4, + 0x60f6, 0x0c7e, 0x60d8, 0xa065, 0x6008, 0xc0d4, 0x600a, 0x6018, + 0x8001, 0x601a, 0x0c7f, 0x60f4, 0xa084, 0x77ff, 0x60f6, 0x78b0, + 0xa085, 0x0002, 0x78b2, 0x681b, 0x0048, 0x2091, 0x8001, 0x007c, + 0xd7fc, 0x00c0, 0x1aaf, 0x2069, 0x5d40, 0x0078, 0x1ab1, 0x2069, + 0x5d80, 0x71c4, 0x71c6, 0x6912, 0x81ff, 0x00c0, 0x1ab9, 0x68c7, + 0x0001, 0x78b0, 0xa084, 0xfffd, 0x78b2, 0xa084, 0x0001, 0x00c0, + 0x1ac3, 0x1078, 0x1ef2, 0x007c, 0x75d8, 0x74dc, 0x75da, 0x74de, + 0x0078, 0x1acd, 0x2029, 0x0000, 0x2520, 0x71c4, 0x73c8, 0x72cc, + 0x71c6, 0x73ca, 0x72ce, 0x2079, 0x5d00, 0x7de2, 0x7cde, 0x7bda, + 0x7ad6, 0x1078, 0x1db6, 0x0040, 0x1bd0, 0x20a9, 0x0005, 0x20a1, + 0x5d12, 0x2091, 0x8000, 0x41a1, 0x2091, 0x8001, 0x2009, 0x0040, + 0x1078, 0x216d, 0x0040, 0x1af0, 0x1078, 0x1dd4, 0x0078, 0x1bd0, + 0x6004, 0xa08c, 0x00ff, 0xa18e, 0x0009, 0x00c0, 0x1afb, 0x007e, + 0x1078, 0x2670, 0x007f, 0xa084, 0xff00, 0x8007, 0x8009, 0x0040, + 0x1b6e, 0x0c7e, 0x2c68, 0x1078, 0x1db6, 0x0040, 0x1b41, 0x2c00, + 0x689e, 0x8109, 0x00c0, 0x1b02, 0x609f, 0x0000, 0x0c7f, 0x0c7e, + 0x7de0, 0x7cdc, 0x7bd8, 0x7ad4, 0xa290, 0x0040, 0xa399, 0x0000, + 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x7de2, 0x7cde, 0x7bda, 0x7ad6, + 0x2c68, 0x689c, 0xa065, 0x0040, 0x1b6d, 0x2009, 0x0040, 0x1078, + 0x216d, 0x00c0, 0x1b57, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0002, + 0x00c0, 0x1b41, 0x6004, 0xa084, 0x00ff, 0xa086, 0x000a, 0x00c0, + 0x1b3d, 0x017e, 0x1078, 0x266c, 0x017f, 0x2d00, 0x6002, 0x0078, + 0x1b10, 0x0c7f, 0x0c7e, 0x609c, 0x1078, 0x1e5c, 0x0c7f, 0x609f, + 0x0000, 0x1078, 0x1bd4, 0x2009, 0x000c, 0x6008, 0xa085, 0x0200, + 0x600a, 0x1078, 0x1d70, 0x1078, 0x1dd4, 0x0078, 0x1bd0, 0x0c7f, + 0x0c7e, 0x609c, 0x1078, 0x1e5c, 0x0c7f, 0x609f, 0x0000, 0x1078, + 0x1bd4, 0x2009, 0x000c, 0x6007, 0x0103, 0x601b, 0x0003, 0x1078, + 0x1d70, 0x1078, 0x1dd4, 0x0078, 0x1bd0, 0x0c7f, 0x780c, 0xd0e4, + 0x00c0, 0x1b93, 0x6114, 0xd1fc, 0x0040, 0x1b7c, 0x1078, 0x1d64, + 0x0040, 0x1b93, 0x0078, 0x1b80, 0x1078, 0x1d58, 0x0040, 0x1b93, + 0x2029, 0x0000, 0x2520, 0x2009, 0x0018, 0x73c8, 0x72cc, 0x6087, + 0x0103, 0x601b, 0x0021, 0x1078, 0x1d70, 0x1078, 0x1dd4, 0x2001, + 0x4007, 0x0078, 0x1591, 0x74c4, 0x73c8, 0x72cc, 0x6014, 0x2091, + 0x8000, 0x0e7e, 0x2009, 0x0012, 0xd0fc, 0x00c0, 0x1ba3, 0x2071, + 0x5d40, 0x0078, 0x1ba6, 0x2071, 0x5d80, 0xc1fd, 0x7922, 0x706f, + 0x0005, 0x71f4, 0xa18c, 0xf77f, 0x71f6, 0x7372, 0x7276, 0x747a, + 0x707e, 0x7083, 0x0000, 0x2c00, 0x7086, 0xa02e, 0x2530, 0x611c, + 0x61a2, 0xa184, 0x0060, 0x0040, 0x1bbf, 0x1078, 0x52aa, 0x0e7f, + 0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000, + 0x6714, 0x6023, 0x0000, 0x1078, 0x2772, 0x2091, 0x8001, 0x007c, + 0x70c3, 0x4005, 0x0078, 0x1592, 0x20a9, 0x0005, 0x2099, 0x5d12, + 0x2091, 0x8000, 0x530a, 0x2091, 0x8001, 0x2100, 0xa210, 0xa399, + 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c, 0x71c4, 0x70c7, + 0x0000, 0x7916, 0x0078, 0x158f, 0x71c4, 0x71c6, 0x2168, 0x0078, + 0x1bf3, 0x2069, 0x1000, 0x690c, 0xa016, 0x2d04, 0xa210, 0x8d68, + 0x8109, 0x00c0, 0x1bf5, 0xa285, 0x0000, 0x00c0, 0x1c03, 0x70c3, + 0x4000, 0x0078, 0x1c05, 0x70c3, 0x4003, 0x70ca, 0x0078, 0x1592, + 0x2011, 0x5d65, 0x2039, 0x0000, 0x7908, 0xd1ec, 0x00c0, 0x1c21, + 0x77c8, 0xd7fc, 0x0040, 0x1c16, 0x2011, 0x5da5, 0x220c, 0x70c4, + 0x8003, 0x0048, 0x1c21, 0x1078, 0x4690, 0xa184, 0x7fff, 0x0078, + 0x1c25, 0x1078, 0x4670, 0xa185, 0x8000, 0x2012, 0x2710, 0x0078, + 0x158d, 0x017e, 0x2100, 0xc1fc, 0x1078, 0x465f, 0x017f, 0xd1fc, + 0x00c0, 0x1c36, 0x2001, 0x5d65, 0x0078, 0x1c38, 0x2001, 0x5da5, + 0x2004, 0xa084, 0x8000, 0x6100, 0xa10d, 0x6204, 0x6308, 0x0078, + 0x158c, 0x0c7e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2091, 0x8000, 0x60c4, + 0xd0fc, 0x00c0, 0x1c59, 0x2071, 0x5d40, 0x7808, 0xd0ec, 0x0040, + 0x1c55, 0x2079, 0x0100, 0x0078, 0x1c5d, 0x2079, 0x0200, 0x0078, + 0x1c5d, 0x2071, 0x5d80, 0x2079, 0x0100, 0x2061, 0x0010, 0x7098, + 0xa06d, 0x0040, 0x1cf5, 0x6a04, 0xa294, 0x00ff, 0xa286, 0x0007, + 0x0040, 0x1c6e, 0xa286, 0x000f, 0x00c0, 0x1cf5, 0x691c, 0xa184, + 0x0080, 0x00c0, 0x1cf5, 0x6824, 0xa18c, 0xff00, 0xa085, 0x0019, + 0x6826, 0x71a8, 0x81ff, 0x0040, 0x1c9f, 0x0d7e, 0x60c4, 0xd0fc, + 0x00c0, 0x1c8e, 0x7808, 0xd0ec, 0x0040, 0x1c8a, 0x2019, 0x0020, + 0x0078, 0x1c90, 0x2069, 0x0050, 0x0078, 0x1c90, 0x2069, 0x0020, + 0x6908, 0x6808, 0xa106, 0x00c0, 0x1c90, 0x690c, 0x680c, 0xa106, + 0x00c0, 0x1c95, 0xa184, 0x03ff, 0x00c0, 0x1c95, 0x0d7f, 0x78b8, + 0xa084, 0x801f, 0x00c0, 0x1c9f, 0x7848, 0xa085, 0x000c, 0x784a, + 0x71a8, 0x81ff, 0x0040, 0x1cd2, 0x70ab, 0x0000, 0x0d7e, 0x60c4, + 0xd0fc, 0x00c0, 0x1cbf, 0x7808, 0xd0ec, 0x0040, 0x1cbb, 0x2019, + 0x0020, 0x0078, 0x1cc1, 0x2069, 0x0050, 0x0078, 0x1cc1, 0x2069, + 0x0020, 0x6807, 0x0008, 0x6804, 0xa084, 0x0008, 0x00c0, 0x1cc3, + 0x6807, 0x0008, 0x6804, 0xa084, 0x0008, 0x00c0, 0x1cca, 0x6807, + 0x0002, 0x0d7f, 0x61c4, 0x62c8, 0x63cc, 0x61c6, 0x62ca, 0x63ce, + 0xc1fc, 0x0e7e, 0x2071, 0x5d00, 0x724e, 0x7352, 0xae80, 0x0013, + 0x0e7f, 0x1078, 0x5179, 0x78a3, 0x0000, 0x7858, 0xa084, 0xedff, + 0x785a, 0x70ac, 0xa080, 0x00d9, 0x781a, 0x0f7f, 0x0e7f, 0x0d7f, + 0x0c7f, 0x2091, 0x8001, 0x0078, 0x158f, 0x0f7f, 0x0e7f, 0x0d7f, + 0x0c7f, 0x2091, 0x8001, 0x2001, 0x4005, 0x0078, 0x1591, 0x795c, + 0x71c6, 0x71c4, 0xa182, 0x0003, 0x00c8, 0x1587, 0x795e, 0x0078, + 0x158f, 0x795c, 0x71c6, 0x0078, 0x158f, 0x7900, 0x71c6, 0x71c4, + 0x7902, 0x0078, 0x158f, 0x7900, 0x71c6, 0x0078, 0x158f, 0x7904, + 0x70c4, 0x7806, 0x0078, 0x158e, 0x7804, 0x70c6, 0x0078, 0x158f, + 0xd1fc, 0x00c0, 0x1d27, 0x2011, 0x61c0, 0x0078, 0x1d29, 0x2011, + 0x6240, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa268, + 0x6a14, 0xd2b4, 0x0040, 0x1d38, 0x2011, 0x0001, 0x0078, 0x1d3a, + 0x2011, 0x0000, 0x6b0c, 0x0078, 0x158c, 0x017e, 0x780c, 0xd0f4, + 0x0040, 0x1d4a, 0x2001, 0x4007, 0x70db, 0x0000, 0xa18d, 0x0001, + 0x0078, 0x1d56, 0xd0fc, 0x0040, 0x1d55, 0x2001, 0x4007, 0x70db, + 0x0001, 0xa18d, 0x0001, 0x0078, 0x1d56, 0xa006, 0x017f, 0x007c, + 0x780c, 0xd0f4, 0x0040, 0x1d62, 0x2001, 0x4007, 0x70db, 0x0000, + 0x0078, 0x1d63, 0xa006, 0x007c, 0x780c, 0xd0fc, 0x0040, 0x1d6e, + 0x2001, 0x4007, 0x70db, 0x0001, 0x0078, 0x1d6f, 0xa006, 0x007c, + 0xac80, 0x0001, 0x1078, 0x1fd7, 0x007c, 0x7112, 0x7003, 0x0001, + 0x7007, 0x0001, 0x2099, 0x0030, 0x20a9, 0x0020, 0xac80, 0x0001, + 0x20a0, 0x7008, 0xd0fc, 0x0040, 0x1d81, 0x7007, 0x0002, 0xa08c, + 0x01e0, 0x00c0, 0x1db1, 0x53a5, 0x7888, 0xa005, 0x0040, 0x1db0, + 0x1078, 0x1db6, 0x0040, 0x1d9e, 0x2c00, 0x788e, 0x20a9, 0x0020, + 0xac80, 0x0001, 0x20a0, 0x53a5, 0x0078, 0x1db0, 0x788b, 0x0000, + 0x7218, 0x731c, 0x7420, 0x7524, 0xa292, 0x0040, 0xa39b, 0x0000, + 0xa4a3, 0x0000, 0xa5ab, 0x0000, 0x721a, 0x731e, 0x7422, 0x7526, + 0xa006, 0x7003, 0x0000, 0x7007, 0x0004, 0x007c, 0x2091, 0x8000, + 0x7840, 0xa065, 0x0040, 0x1dc0, 0x2c04, 0x7842, 0x2063, 0x0000, + 0x2091, 0x8001, 0x007c, 0x0f7e, 0x2079, 0x5d00, 0x7840, 0xa06d, + 0x0040, 0x1dd2, 0x2d04, 0x7842, 0x6803, 0x0000, 0x6807, 0x0000, + 0x680b, 0x0000, 0x0f7f, 0x007c, 0x2091, 0x8000, 0x0f7e, 0x2079, + 0x5d00, 0x7840, 0x2062, 0x2c00, 0xa005, 0x00c0, 0x1de1, 0x1078, + 0x2aef, 0x7842, 0x0f7f, 0x2091, 0x8001, 0x007c, 0x0f7e, 0x2079, + 0x5d00, 0x7840, 0x206a, 0x2d00, 0x7842, 0x0f7f, 0x007c, 0x2011, + 0xa900, 0x7a42, 0x7bc8, 0x8319, 0x0040, 0x1dfc, 0xa280, 0x0034, + 0x2012, 0x2010, 0x0078, 0x1df3, 0x2013, 0x0000, 0x007c, 0x017e, + 0x027e, 0xd7fc, 0x00c0, 0x1e08, 0x2011, 0x62c0, 0x0078, 0x1e0a, + 0x2011, 0x82c0, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, + 0x8003, 0x8003, 0x8003, 0xa105, 0xa268, 0x027f, 0x017f, 0x007c, + 0x1078, 0x1dff, 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, + 0xf9ef, 0xa80d, 0x690a, 0x0e7e, 0xd7fc, 0x00c0, 0x1e2d, 0x2009, + 0x5d55, 0x2071, 0x5d40, 0x0078, 0x1e31, 0x2009, 0x5d95, 0x2071, + 0x5d80, 0x210c, 0x6804, 0xa005, 0x0040, 0x1e41, 0xa116, 0x00c0, + 0x1e41, 0x2060, 0x6000, 0x6806, 0x017e, 0x200b, 0x0000, 0x0078, + 0x1e44, 0x2009, 0x0000, 0x017e, 0x6804, 0xa065, 0x0040, 0x1e53, + 0x6000, 0x6806, 0x1078, 0x1e6e, 0x1078, 0x21b9, 0x6810, 0x8001, + 0x6812, 0x00c0, 0x1e44, 0x017f, 0x6902, 0x6906, 0x2d00, 0x2060, + 0x1078, 0x2c7d, 0x0e7f, 0x007c, 0xa065, 0x0040, 0x1e6d, 0x2008, + 0x609c, 0xa005, 0x0040, 0x1e6a, 0x2062, 0x609f, 0x0000, 0xa065, + 0x0078, 0x1e60, 0x7840, 0x7942, 0x2062, 0x007c, 0x6007, 0x0103, + 0x608f, 0x0000, 0x20a9, 0x001c, 0xac80, 0x0005, 0x20a0, 0x2001, + 0x0000, 0x40a4, 0x6828, 0x601a, 0x682c, 0x6022, 0x007c, 0x0e7e, + 0xd7fc, 0x00c0, 0x1e89, 0x2071, 0x5d40, 0x2031, 0x5dc0, 0x0078, + 0x1e8d, 0x2071, 0x5d80, 0x2031, 0x5fc0, 0x7058, 0xa08c, 0x0200, + 0x00c0, 0x1e97, 0xa608, 0x2d0a, 0x8000, 0x705a, 0xa006, 0x0e7f, + 0x007c, 0x0f7e, 0xd7fc, 0x00c0, 0x1ea1, 0x2079, 0x5d40, 0x0078, + 0x1ea3, 0x2079, 0x5d80, 0x1078, 0x1dff, 0x2091, 0x8000, 0x6804, + 0x7806, 0xa065, 0x0040, 0x1ef0, 0x0078, 0x1eb4, 0x2c00, 0x7806, + 0x6000, 0xa065, 0x0040, 0x1ef0, 0x6010, 0xa306, 0x00c0, 0x1eae, + 0x600c, 0xa206, 0x00c0, 0x1eae, 0x2c28, 0x7854, 0xac06, 0x00c0, + 0x1ec3, 0x0078, 0x1eed, 0x6804, 0xac06, 0x00c0, 0x1ed1, 0x6000, + 0x2060, 0x6806, 0xa005, 0x00c0, 0x1ed1, 0x6803, 0x0000, 0x0078, + 0x1edb, 0x6400, 0x7804, 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, + 0x1edb, 0x2c00, 0x6802, 0x2560, 0x0f7f, 0x1078, 0x1e6e, 0x0f7e, + 0x601b, 0x0005, 0x6023, 0x0020, 0x0f7f, 0x1078, 0x21b9, 0x0f7e, + 0x6810, 0x8001, 0x1050, 0x2aef, 0x6812, 0xa085, 0xffff, 0xa005, + 0x0f7f, 0x007c, 0x077e, 0x2700, 0x2039, 0x0000, 0xd0fc, 0x0040, + 0x1efa, 0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, + 0x2091, 0x8000, 0x1078, 0x1e18, 0x8738, 0xa784, 0x001f, 0x00c0, + 0x1f02, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, + 0x00c0, 0x1f02, 0x2091, 0x8001, 0x077f, 0x007c, 0x2061, 0x0000, + 0x6018, 0xa084, 0x0001, 0x00c0, 0x1f37, 0x7808, 0xd08c, 0x0040, + 0x1f28, 0xc08c, 0x780a, 0xc7fc, 0x2069, 0x5d40, 0x0078, 0x1f2d, + 0xc08d, 0x780a, 0x2069, 0x5d80, 0xc7fd, 0x2091, 0x8000, 0x6818, + 0x681b, 0x0000, 0x2091, 0x8001, 0xa005, 0x00c0, 0x1f38, 0x007c, + 0xa08c, 0xfff0, 0x0040, 0x1f3e, 0x1078, 0x2aef, 0x0079, 0x1f40, + 0x1f50, 0x1f53, 0x1f59, 0x1f5d, 0x1f51, 0x1f61, 0x1f67, 0x1f51, + 0x1f51, 0x210c, 0x213d, 0x2141, 0x2147, 0x1f51, 0x1f51, 0x1f51, + 0x007c, 0x1078, 0x2aef, 0x1078, 0x1ef2, 0x2001, 0x8001, 0x0078, + 0x215c, 0x2001, 0x8003, 0x0078, 0x215c, 0x2001, 0x8004, 0x0078, + 0x215c, 0x1078, 0x1ef2, 0x2001, 0x8006, 0x0078, 0x215c, 0x2001, + 0x8007, 0x0078, 0x215c, 0x2030, 0x2138, 0xa782, 0x0021, 0x0048, + 0x1f73, 0x2009, 0x0020, 0x2600, 0x1078, 0x1f8d, 0x00c0, 0x1f8c, + 0xa7ba, 0x0020, 0x0048, 0x1f8b, 0x0040, 0x1f8b, 0x2708, 0xa6b0, + 0x0020, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, + 0x0000, 0x0078, 0x1f6d, 0xa006, 0x007c, 0x81ff, 0x0040, 0x1fb2, + 0x2099, 0x0030, 0x20a0, 0x700c, 0xa084, 0x03ff, 0x0040, 0x1f9f, + 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x1f9a, 0x21a8, + 0x810b, 0x7112, 0x7003, 0x0001, 0x7007, 0x0001, 0x7008, 0x800b, + 0x00c8, 0x1fa6, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x00c0, 0x1fb2, + 0x53a5, 0xa006, 0x7003, 0x0000, 0x007c, 0x2030, 0x2138, 0xa782, + 0x0021, 0x0048, 0x1fbd, 0x2009, 0x0020, 0x2600, 0x1078, 0x1fd7, + 0x00c0, 0x1fd6, 0xa7ba, 0x0020, 0x0048, 0x1fd5, 0x0040, 0x1fd5, + 0x2708, 0xa6b0, 0x0020, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1, + 0x0000, 0xa5a9, 0x0000, 0x0078, 0x1fb7, 0xa006, 0x007c, 0x81ff, + 0x0040, 0x200f, 0x2098, 0x20a1, 0x0030, 0x700c, 0xa084, 0x03ff, + 0x0040, 0x1fe2, 0x21a8, 0x810b, 0x7112, 0x7018, 0x007e, 0x701c, + 0x007e, 0x7020, 0x007e, 0x7024, 0x007e, 0x721a, 0x731e, 0x7422, + 0x7526, 0x7003, 0x0000, 0x53a6, 0x7007, 0x0001, 0x7010, 0xa084, + 0xf000, 0x0040, 0x1fff, 0x7007, 0x0008, 0x0078, 0x2003, 0x7108, + 0x8103, 0x00c8, 0x1ff6, 0x007f, 0x7026, 0x007f, 0x7022, 0x007f, + 0x701e, 0x007f, 0x701a, 0x7007, 0x0002, 0xa184, 0x01e0, 0x7003, + 0x0000, 0x7007, 0x0004, 0x007c, 0x0e7e, 0x6914, 0xd1fc, 0x0040, + 0x201d, 0x2071, 0x5d80, 0x0078, 0x201f, 0x2071, 0x5d40, 0x2d08, + 0x70b8, 0x6802, 0xa005, 0x00c0, 0x2026, 0x71be, 0x71ba, 0x0e7f, + 0x007c, 0x0f7e, 0x6114, 0xd1fc, 0x0040, 0x2032, 0x2079, 0x5d80, + 0x0078, 0x2034, 0x2079, 0x5d40, 0x2c08, 0x78b8, 0x6002, 0xa005, + 0x00c0, 0x203b, 0x79be, 0x79ba, 0x0f7f, 0x007c, 0x2091, 0x8000, + 0x0f7e, 0x6114, 0xd1fc, 0x0040, 0x2049, 0x2079, 0x5d80, 0x0078, + 0x204b, 0x2079, 0x5d40, 0x6003, 0x0000, 0x2c08, 0x78bc, 0xa065, + 0x00c0, 0x2055, 0x79ba, 0x0078, 0x2056, 0x6102, 0x79be, 0x0f7f, + 0x2091, 0x8001, 0x1078, 0x27a5, 0x007c, 0x70b8, 0xa06d, 0x0040, + 0x2068, 0x6800, 0x70ba, 0xa005, 0x00c0, 0x2067, 0x70be, 0x8dff, + 0x007c, 0x0d7e, 0x0c7e, 0x0f7e, 0xd3fc, 0x0040, 0x2073, 0x2079, + 0x5d80, 0x0078, 0x2075, 0x2079, 0x5d40, 0xaf80, 0x002e, 0x2060, + 0x6000, 0xa005, 0x0040, 0x209e, 0x2068, 0x6814, 0xa306, 0x00c0, + 0x2087, 0x6828, 0xa084, 0x00ff, 0xa406, 0x0040, 0x208a, 0x2d60, + 0x0078, 0x2078, 0x6800, 0xa005, 0x6002, 0x00c0, 0x2096, 0xaf80, + 0x002e, 0xac06, 0x0040, 0x2095, 0x2c00, 0x78be, 0x0d7e, 0x689c, + 0xa005, 0x0040, 0x209d, 0x1078, 0x1e5c, 0x007f, 0x0f7f, 0x0c7f, + 0x0d7f, 0xa005, 0x007c, 0x0d7e, 0x0c7e, 0x0f7e, 0xd0fc, 0x0040, + 0x20ad, 0x2079, 0x5d80, 0x0078, 0x20af, 0x2079, 0x5d40, 0xaf80, + 0x002e, 0x2060, 0x6000, 0xa005, 0x0040, 0x20d4, 0x2068, 0x6814, + 0xa084, 0x00ff, 0xa306, 0x0040, 0x20c0, 0x2d60, 0x0078, 0x20b2, + 0x6800, 0xa005, 0x6002, 0x00c0, 0x20cc, 0xaf80, 0x002e, 0xac06, + 0x0040, 0x20cb, 0x2c00, 0x78be, 0x0d7e, 0x689c, 0xa005, 0x0040, + 0x20d3, 0x1078, 0x1e5c, 0x007f, 0x0f7f, 0x0c7f, 0x0d7f, 0xa005, + 0x007c, 0x0d7e, 0x0c7e, 0x0f7e, 0xd3fc, 0x0040, 0x20e3, 0x2079, + 0x5d80, 0x0078, 0x20e5, 0x2079, 0x5d40, 0xaf80, 0x002e, 0x2060, + 0x6000, 0xa06d, 0x0040, 0x2107, 0x6814, 0xa306, 0x0040, 0x20f3, + 0x2d60, 0x0078, 0x20e8, 0x6800, 0xa005, 0x6002, 0x00c0, 0x20ff, + 0xaf80, 0x002e, 0xac06, 0x0040, 0x20fe, 0x2c00, 0x78be, 0x0d7e, + 0x689c, 0xa005, 0x0040, 0x2106, 0x1078, 0x1e5c, 0x007f, 0x0f7f, + 0x0c7f, 0x0d7f, 0xa005, 0x007c, 0x2091, 0x8000, 0xd7fc, 0x00c0, + 0x2115, 0x2069, 0x5d40, 0x0078, 0x2117, 0x2069, 0x5d80, 0x6800, + 0xa086, 0x0000, 0x0040, 0x2121, 0x2091, 0x8001, 0x681b, 0x0009, + 0x007c, 0x687c, 0xd7fc, 0x00c0, 0x2127, 0x0078, 0x2128, 0xc0fd, + 0xa0bc, 0xff00, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, + 0x1078, 0x1e18, 0x8738, 0xa784, 0x001f, 0x00c0, 0x2130, 0x2091, + 0x8001, 0x2001, 0x800a, 0x0078, 0x215c, 0x2001, 0x800c, 0x0078, + 0x215c, 0x1078, 0x1ef2, 0x2001, 0x800d, 0x0078, 0x215c, 0x780c, + 0xd0e4, 0x00c0, 0x215a, 0xd0ec, 0x0040, 0x2154, 0xd7fc, 0x0040, + 0x2154, 0x78f0, 0x0078, 0x2155, 0x78e8, 0x70c6, 0x2001, 0x800e, + 0x0078, 0x215c, 0x0078, 0x1f51, 0x70c2, 0xd7fc, 0x00c0, 0x2164, + 0x70db, 0x0000, 0x0078, 0x2166, 0x70db, 0x0001, 0x2061, 0x0000, + 0x601b, 0x0001, 0x2091, 0x4080, 0x007c, 0xac80, 0x0001, 0x81ff, + 0x0040, 0x2198, 0x2099, 0x0030, 0x20a0, 0x700c, 0xa084, 0x03ff, + 0x0040, 0x217a, 0x7018, 0x007e, 0x701c, 0x007e, 0x7020, 0x007e, + 0x7024, 0x007e, 0x7112, 0x81ac, 0x721a, 0x731e, 0x7422, 0x7526, + 0x7003, 0x0001, 0x7007, 0x0001, 0x7008, 0x800b, 0x00c8, 0x218c, + 0x7007, 0x0002, 0xa08c, 0x01e0, 0x00c0, 0x2198, 0x53a5, 0xa006, + 0x7003, 0x0000, 0x7007, 0x0004, 0x007f, 0x7026, 0x007f, 0x7022, + 0x007f, 0x701e, 0x007f, 0x701a, 0x007c, 0x2011, 0x0020, 0x2009, + 0x0010, 0x6b0a, 0x6c0e, 0x6803, 0xfd00, 0x6807, 0x0018, 0x6a1a, + 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004, 0x8109, 0x00c0, 0x21a9, + 0x007c, 0x6004, 0x2c08, 0x2063, 0x0000, 0x7860, 0x8000, 0x7862, + 0x7864, 0xa005, 0x7966, 0x0040, 0x21c8, 0x2c02, 0x0078, 0x21c9, + 0x796a, 0x007c, 0x6807, 0x0103, 0x0c7e, 0x2061, 0x5d00, 0x2d08, + 0x206b, 0x0000, 0x6060, 0x8000, 0x6062, 0x6064, 0xa005, 0x6166, + 0x0040, 0x21dd, 0x2d02, 0x0078, 0x21de, 0x616a, 0x0c7f, 0x007c, + 0x2091, 0x8000, 0x7860, 0x8001, 0x7862, 0x2c04, 0x786a, 0xa005, + 0x00c0, 0x21eb, 0x7866, 0x2091, 0x8001, 0x609c, 0xa005, 0x0040, + 0x2208, 0x0c7e, 0x2060, 0x2008, 0x609c, 0xa005, 0x0040, 0x2200, + 0x2062, 0x609f, 0x0000, 0xa065, 0x609c, 0xa005, 0x00c0, 0x21f8, + 0x2091, 0x8000, 0x7840, 0x7942, 0x2062, 0x2091, 0x8001, 0x0c7f, + 0x2091, 0x8000, 0x7840, 0x2062, 0x609f, 0x0000, 0x2c00, 0xa005, + 0x00c0, 0x2214, 0x1078, 0x2aef, 0x7842, 0x2091, 0x8001, 0x007c, + 0x7868, 0xa065, 0x0040, 0x222a, 0x2091, 0x8000, 0x7860, 0x8001, + 0x7862, 0x2c04, 0x786a, 0xa005, 0x00c0, 0x2228, 0x7866, 0x8000, + 0x2091, 0x8001, 0x007c, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, + 0x818e, 0x00c8, 0x2234, 0xa200, 0x00f0, 0x222f, 0x8086, 0x818e, + 0x007c, 0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x225a, 0xa11a, + 0x00c8, 0x225a, 0x8213, 0x818d, 0x0048, 0x224d, 0xa11a, 0x00c8, + 0x224e, 0x00f0, 0x2242, 0x0078, 0x2252, 0xa11a, 0x2308, 0x8210, + 0x00f0, 0x2242, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080, 0x007f, + 0x157f, 0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078, 0x2256, + 0x7d70, 0x70d0, 0xa506, 0x0040, 0x22dd, 0x1078, 0x1db6, 0x0040, + 0x22dd, 0x796c, 0x2500, 0x8000, 0xa112, 0x2009, 0x0040, 0x00c8, + 0x2274, 0xa006, 0x0078, 0x227c, 0x72d0, 0xa206, 0x0040, 0x227c, + 0x788b, 0x0001, 0x2009, 0x0080, 0x0c7e, 0x1078, 0x1d75, 0x0c7f, + 0x0040, 0x22c5, 0x1078, 0x1dd4, 0x788b, 0x0000, 0x7884, 0x8000, + 0x7886, 0xa086, 0x0002, 0x0040, 0x22a3, 0x8507, 0x8004, 0x8004, + 0x7978, 0xa108, 0x711a, 0x00c8, 0x22a1, 0x7974, 0xa189, 0x0000, + 0x711e, 0x7980, 0xa189, 0x0000, 0x7122, 0x797c, 0xa189, 0x0000, + 0x7126, 0x0078, 0x22dd, 0x6014, 0xd0fc, 0x00c0, 0x22ab, 0x2069, + 0x5d40, 0x0078, 0x22ad, 0x2069, 0x5d80, 0x2091, 0x8000, 0x681b, + 0x0002, 0x7888, 0xa005, 0x0040, 0x22bb, 0x788b, 0x0000, 0x788c, + 0x2060, 0x0078, 0x22a3, 0x7887, 0x0000, 0x78b0, 0xa085, 0x0003, + 0x78b2, 0x2091, 0x8001, 0x0078, 0x22dd, 0x7887, 0x0000, 0x1078, + 0x2641, 0x6004, 0xa084, 0x000f, 0x1078, 0x22de, 0x7888, 0xa005, + 0x0040, 0x22d9, 0x788c, 0x2060, 0x6004, 0xa084, 0x000f, 0x1078, + 0x22de, 0x788b, 0x0000, 0x0078, 0x2260, 0x007c, 0x0079, 0x22e0, + 0x22f0, 0x230e, 0x232e, 0x22f0, 0x234b, 0x22ff, 0x24b4, 0x24cb, + 0x22f0, 0x230c, 0x232c, 0x2392, 0x23fa, 0x2452, 0x2464, 0x24cb, + 0x2039, 0x0400, 0x78c0, 0xa705, 0x78c2, 0x6008, 0xa705, 0x600a, + 0x1078, 0x2545, 0x609c, 0x78be, 0x1078, 0x2629, 0x007c, 0x78c0, + 0xa084, 0x0100, 0x0040, 0x2306, 0x0078, 0x22f0, 0x601c, 0xa085, + 0x0080, 0x601e, 0x0078, 0x2315, 0x1078, 0x2670, 0x78c0, 0xa084, + 0x0100, 0x0040, 0x2315, 0x0078, 0x22f0, 0x78c3, 0x0000, 0x6004, + 0x8007, 0xa084, 0x00ff, 0x78b6, 0x8001, 0x0040, 0x2329, 0x1078, + 0x2545, 0x0040, 0x2329, 0x78c0, 0xa085, 0x0100, 0x78c2, 0x0078, + 0x232b, 0x0078, 0x2565, 0x007c, 0x1078, 0x266c, 0x78c0, 0xa08c, + 0x0e00, 0x00c0, 0x2337, 0xa084, 0x0100, 0x00c0, 0x2339, 0x0078, + 0x22f0, 0x1078, 0x2545, 0x00c0, 0x234a, 0x6104, 0xa18c, 0x00ff, + 0xa186, 0x0007, 0x0040, 0x2506, 0xa186, 0x000f, 0x0040, 0x2506, + 0x0078, 0x2565, 0x007c, 0x78c0, 0xa084, 0x0100, 0x0040, 0x2352, + 0x0078, 0x22f0, 0x78c3, 0x0000, 0x6714, 0x2011, 0x0001, 0x20a9, + 0x0001, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0040, 0x2375, 0x2011, + 0x0001, 0xa7bc, 0xff00, 0x20a9, 0x0020, 0xa08e, 0x0001, 0x0040, + 0x2375, 0xa7bc, 0x8000, 0x2011, 0x0002, 0x20a9, 0x0100, 0xa08e, + 0x0002, 0x0040, 0x2375, 0x0078, 0x238f, 0x1078, 0x1dff, 0x2d00, + 0x2091, 0x8000, 0x682b, 0x0000, 0x682f, 0x0000, 0x6808, 0xa084, + 0xffde, 0x680a, 0xade8, 0x0010, 0x2091, 0x8001, 0x00f0, 0x2378, + 0x8211, 0x0040, 0x238f, 0x20a9, 0x0100, 0x0078, 0x2378, 0x1078, + 0x1dd4, 0x007c, 0x6114, 0x1078, 0x268d, 0x6900, 0xa184, 0x0001, + 0x0040, 0x23ac, 0x6028, 0xa084, 0x00ff, 0x00c0, 0x2525, 0x6800, + 0xa084, 0x0001, 0x0040, 0x252d, 0x6803, 0x0000, 0x680b, 0x0000, + 0x6807, 0x0000, 0x0078, 0x2535, 0x2011, 0x0001, 0x6020, 0xd0f4, + 0x0040, 0x23b4, 0xa295, 0x0002, 0xd0c4, 0x0040, 0x23b9, 0xa295, + 0x0008, 0xd0cc, 0x0040, 0x23be, 0xa295, 0x0400, 0x601c, 0xa084, + 0x0002, 0x0040, 0x23c5, 0xa295, 0x0004, 0x602c, 0xa08c, 0x00ff, + 0xa182, 0x0002, 0x0048, 0x2531, 0xa182, 0x001b, 0x00c8, 0x2531, + 0x0040, 0x2531, 0x690e, 0x602c, 0x8007, 0xa08c, 0x00ff, 0xa182, + 0x0002, 0x0048, 0x2531, 0xa182, 0x001b, 0x00c8, 0x2531, 0x0040, + 0x2531, 0x6912, 0x6030, 0xa005, 0x00c0, 0x23e8, 0x2001, 0x001e, + 0x8000, 0x6816, 0x6028, 0xa084, 0x00ff, 0x0040, 0x252d, 0x6806, + 0x6028, 0x8007, 0xa084, 0x00ff, 0x0040, 0x252d, 0x680a, 0x6a02, + 0x0078, 0x2535, 0x6014, 0xd0fc, 0x00c0, 0x2402, 0x2001, 0x5d65, + 0x0078, 0x2404, 0x2001, 0x5da5, 0x2004, 0xa084, 0x8000, 0x0040, + 0x252d, 0x6114, 0x1078, 0x268d, 0x2091, 0x8000, 0x6a04, 0x6b08, + 0x6418, 0xa484, 0x0003, 0x0040, 0x2428, 0x6128, 0xa18c, 0x00ff, + 0x8001, 0x00c0, 0x2421, 0x2100, 0xa210, 0x0048, 0x244e, 0x0078, + 0x2428, 0x8001, 0x00c0, 0x244e, 0x2100, 0xa212, 0x0048, 0x244e, + 0xa484, 0x000c, 0x0040, 0x2442, 0x6128, 0x810f, 0xa18c, 0x00ff, + 0xa082, 0x0004, 0x00c0, 0x243a, 0x2100, 0xa318, 0x0048, 0x244e, + 0x0078, 0x2442, 0xa082, 0x0004, 0x00c0, 0x244e, 0x2100, 0xa31a, + 0x0048, 0x244e, 0x6030, 0xa005, 0x0040, 0x2448, 0x8000, 0x6816, + 0x6a06, 0x6b0a, 0x2091, 0x8001, 0x0078, 0x2535, 0x2091, 0x8001, + 0x0078, 0x2531, 0x6114, 0x1078, 0x268d, 0x2091, 0x8000, 0x6b08, + 0x8318, 0x0048, 0x2460, 0x6b0a, 0x2091, 0x8001, 0x0078, 0x2543, + 0x2091, 0x8001, 0x0078, 0x2531, 0x6024, 0x8007, 0xa084, 0x00ff, + 0x0040, 0x248a, 0xa086, 0x0080, 0x00c0, 0x24b2, 0x20a9, 0x0008, + 0x6014, 0xd0fc, 0x00c0, 0x2478, 0x2069, 0xa4e0, 0x0078, 0x247a, + 0x2069, 0xa5e0, 0x2091, 0x8000, 0x6800, 0xa084, 0xfcff, 0x6802, + 0xade8, 0x0008, 0x0070, 0x2486, 0x0078, 0x247c, 0x2091, 0x8001, + 0x0078, 0x2535, 0x6028, 0xa015, 0x0040, 0x24b2, 0x6114, 0x1078, + 0x268d, 0x0d7e, 0xade8, 0x0007, 0x2091, 0x8000, 0x6800, 0xa00d, + 0x0040, 0x24af, 0xa206, 0x0040, 0x24a0, 0x2168, 0x0078, 0x2496, + 0x0c7e, 0x2160, 0x6000, 0x6802, 0x1078, 0x1dd4, 0x0c7f, 0x0d7f, + 0x6808, 0x8000, 0x680a, 0x2091, 0x8001, 0x0078, 0x2543, 0x2091, + 0x8001, 0x0d7f, 0x0078, 0x252d, 0x6114, 0x1078, 0x268d, 0x6800, + 0xa084, 0x0001, 0x0040, 0x251d, 0x2091, 0x8000, 0x6a04, 0x8210, + 0x0048, 0x24c7, 0x6a06, 0x2091, 0x8001, 0x0078, 0x2543, 0x2091, + 0x8001, 0x0078, 0x2531, 0x6114, 0x1078, 0x268d, 0x60ca, 0x6900, + 0xa184, 0x0008, 0x0040, 0x24d8, 0x6020, 0xa085, 0x0100, 0x6022, + 0xa184, 0x0001, 0x0040, 0x252d, 0xa184, 0x0100, 0x00c0, 0x2519, + 0xa184, 0x0200, 0x00c0, 0x2515, 0x681c, 0xa005, 0x00c0, 0x2521, + 0x6004, 0xa084, 0x00ff, 0xa086, 0x000f, 0x00c0, 0x24f1, 0x1078, + 0x2670, 0x78c3, 0x0000, 0x6004, 0x8007, 0xa084, 0x00ff, 0x78b6, + 0x8001, 0x609f, 0x0000, 0x0040, 0x2506, 0x1078, 0x2545, 0x0040, + 0x2506, 0x78c0, 0xa085, 0x0100, 0x78c2, 0x007c, 0x78bb, 0x0000, + 0x78bf, 0x0000, 0x6024, 0xa084, 0xff00, 0x6026, 0x1078, 0x4482, + 0x00c0, 0x2513, 0x007c, 0x0078, 0x203e, 0x2009, 0x0017, 0x0078, + 0x2537, 0x2009, 0x000e, 0x0078, 0x2537, 0x2009, 0x0007, 0x0078, + 0x2537, 0x2009, 0x0035, 0x0078, 0x2537, 0x2009, 0x003e, 0x0078, + 0x2537, 0x2009, 0x0004, 0x0078, 0x2537, 0x2009, 0x0006, 0x0078, + 0x2537, 0x2009, 0x0016, 0x0078, 0x2537, 0x2009, 0x0001, 0x6024, + 0xa084, 0xff00, 0xa105, 0x6026, 0x2091, 0x8000, 0x1078, 0x21b9, + 0x2091, 0x8001, 0x007c, 0x0078, 0x1dd4, 0x609f, 0x0000, 0x78b8, + 0xa06d, 0x2c00, 0x78ba, 0x00c0, 0x2550, 0x78be, 0x0078, 0x2558, + 0x689e, 0x2d00, 0x6002, 0x78bc, 0xad06, 0x00c0, 0x2558, 0x6002, + 0x78b4, 0x8001, 0x78b6, 0x00c0, 0x2564, 0x78c0, 0xa084, 0xfeff, + 0x78c2, 0x78bc, 0x2060, 0xa006, 0x007c, 0x0e7e, 0xa02e, 0x2530, + 0x65ae, 0x65b2, 0x601c, 0x60a2, 0x2048, 0xa984, 0xe1ff, 0x601e, + 0xa984, 0x0060, 0x0040, 0x2576, 0x1078, 0x52aa, 0x6596, 0x65a6, + 0x669a, 0x66aa, 0x6714, 0x2071, 0x5d80, 0xd7fc, 0x00c0, 0x2582, + 0x2071, 0x5d40, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x0040, + 0x258d, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0x71e4, 0xa168, + 0x2700, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0x71e8, + 0xa100, 0x60c2, 0x2091, 0x8000, 0x7808, 0xd0f4, 0x00c0, 0x25a7, + 0x6e08, 0xd684, 0x0040, 0x25c1, 0xd9fc, 0x00c0, 0x25c1, 0x2091, + 0x8001, 0x1078, 0x1e6e, 0x2091, 0x8000, 0x1078, 0x21b9, 0x2091, + 0x8001, 0x78bb, 0x0000, 0x78bf, 0x0000, 0x780c, 0xd0e4, 0x00c0, + 0x2627, 0x7808, 0xd0f4, 0x0040, 0x2627, 0x601b, 0x0021, 0x0078, + 0x2627, 0x6024, 0xa096, 0x0001, 0x00c0, 0x25c8, 0x8000, 0x6026, + 0x6a10, 0x6814, 0xa202, 0x0048, 0x25d7, 0x0040, 0x25d7, 0x2091, + 0x8001, 0x2039, 0x0200, 0x1078, 0x2629, 0x0078, 0x2627, 0x2c08, + 0xd9fc, 0x0040, 0x25ff, 0x6800, 0xa065, 0x0040, 0x25ff, 0x6a04, + 0x7000, 0xa084, 0x0002, 0x0040, 0x25f5, 0x7054, 0xa206, 0x00c0, + 0x25f5, 0x6b04, 0x2160, 0x2304, 0x6002, 0xa005, 0x00c0, 0x25f1, + 0x6902, 0x2260, 0x6102, 0x0078, 0x260b, 0x2d00, 0x2060, 0x1078, + 0x2c7d, 0x6e08, 0x2160, 0x6202, 0x6906, 0x0078, 0x260b, 0x6800, + 0x6902, 0xa065, 0x0040, 0x2607, 0x6102, 0x0078, 0x2608, 0x6906, + 0x2160, 0x6003, 0x0000, 0x2160, 0xd9fc, 0x0040, 0x2616, 0xa6b4, + 0xffdc, 0x6e0a, 0x682b, 0x0000, 0x682f, 0x0000, 0x6810, 0x8000, + 0x6812, 0x2091, 0x8001, 0xd6b4, 0x0040, 0x2623, 0xa6b6, 0x0040, + 0x6e0a, 0x1078, 0x1e7f, 0x78bf, 0x0000, 0x78bb, 0x0000, 0x0e7f, + 0x007c, 0x6008, 0xa705, 0x600a, 0x2091, 0x8000, 0x1078, 0x21b9, + 0x2091, 0x8001, 0x78bc, 0xa065, 0x0040, 0x263c, 0x609c, 0x78be, + 0x609f, 0x0000, 0x0078, 0x262c, 0x78bb, 0x0000, 0x78bf, 0x0000, + 0x007c, 0x796c, 0x7870, 0x7b88, 0xd384, 0x0040, 0x264b, 0x8000, + 0xa112, 0x0048, 0x2650, 0xc384, 0x8000, 0xa112, 0x00c8, 0x265d, + 0x7a78, 0x721a, 0x7a74, 0x721e, 0x7a80, 0x7222, 0x7a7c, 0x7226, + 0xa006, 0xd384, 0x0040, 0x265d, 0x8000, 0x7872, 0x70d2, 0x7814, + 0xa005, 0x0040, 0x266b, 0x8001, 0x7816, 0x00c0, 0x266b, 0x0068, + 0x266b, 0x2091, 0x4080, 0x007c, 0x2039, 0x2684, 0x0078, 0x2672, + 0x2039, 0x268a, 0x2704, 0xa005, 0x0040, 0x2683, 0xac00, 0x2068, + 0x6908, 0x6810, 0x6912, 0x680a, 0x690c, 0x6814, 0x6916, 0x680e, + 0x8738, 0x0078, 0x2672, 0x007c, 0x0003, 0x0009, 0x000f, 0x0015, + 0x001b, 0x0000, 0x0015, 0x001b, 0x0000, 0x0c7e, 0x6014, 0x1078, + 0x465f, 0x2c68, 0x0c7f, 0x007c, 0x78af, 0x0000, 0x2009, 0x5d01, + 0x2104, 0xd084, 0x0040, 0x26c3, 0x6004, 0xa086, 0x0103, 0x00c0, + 0x26c3, 0x6114, 0x6018, 0xa105, 0x00c0, 0x26c3, 0x0d7e, 0x2069, + 0x0000, 0x6818, 0xd084, 0x00c0, 0x26c2, 0x600c, 0x70c6, 0x6010, + 0x70ca, 0x70c3, 0x8020, 0x681b, 0x0001, 0x2091, 0x4080, 0x0d7f, + 0x1078, 0x21e0, 0x0068, 0x26f7, 0x7868, 0xa065, 0x00c0, 0x2696, + 0x0078, 0x26f7, 0x0d7f, 0x1078, 0x26fa, 0x0040, 0x26f2, 0x6204, + 0xa294, 0x00ff, 0xa296, 0x0003, 0x0040, 0x26d5, 0x6204, 0xa296, + 0x0110, 0x00c0, 0x26e3, 0x78af, 0x0001, 0x6204, 0xa294, 0xff00, + 0x8217, 0x8211, 0x0040, 0x26e3, 0x85ff, 0x00c0, 0x26f2, 0x8210, + 0xa202, 0x00c8, 0x26f2, 0x057e, 0x1078, 0x2709, 0x057f, 0x00c0, + 0x26f2, 0x8528, 0x78ac, 0xa005, 0x00c0, 0x26f2, 0x7868, 0xa065, + 0x00c0, 0x2696, 0x85ff, 0x0040, 0x26f9, 0x2091, 0x4080, 0x7894, + 0x70d6, 0x007c, 0x7b90, 0x7994, 0x70d4, 0xa102, 0x00c0, 0x2703, + 0x2300, 0xa005, 0x007c, 0x0048, 0x2707, 0xa302, 0x007c, 0x8002, + 0x007c, 0xa184, 0xff00, 0x0040, 0x2716, 0x810f, 0x810c, 0x810c, + 0x8004, 0x8004, 0x8007, 0xa100, 0x0078, 0x2719, 0x8107, 0x8004, + 0x8004, 0x7a9c, 0x7b98, 0x7ca4, 0x7da0, 0xa210, 0xa006, 0xa319, + 0xa421, 0xa529, 0x2009, 0x0020, 0x6004, 0xa086, 0x0103, 0x00c0, + 0x272f, 0x6028, 0xa005, 0x00c0, 0x272f, 0x2009, 0x000c, 0x1078, + 0x1d70, 0x0040, 0x2752, 0x78a8, 0x8000, 0x78aa, 0xa086, 0x0002, + 0x00c0, 0x2760, 0x6014, 0xd0fc, 0x00c0, 0x2742, 0x2069, 0x5d40, + 0x0078, 0x2744, 0x2069, 0x5d80, 0x2091, 0x8000, 0x681b, 0x0003, + 0x78ab, 0x0000, 0x78b0, 0xa085, 0x0300, 0x78b2, 0x2091, 0x8001, + 0x0078, 0x2760, 0x78ab, 0x0000, 0x1078, 0x21e0, 0x7990, 0x7894, + 0x8000, 0xa10a, 0x00c8, 0x275d, 0xa006, 0x7896, 0x70d6, 0xa006, + 0x2071, 0x0010, 0x2091, 0x8001, 0x007c, 0x2138, 0xd7fc, 0x00c0, + 0x276d, 0x2009, 0x5d5b, 0x0078, 0x276f, 0x2009, 0x5d9b, 0x2091, + 0x8000, 0x200a, 0x0f7e, 0xd7fc, 0x00c0, 0x2786, 0x2009, 0x5d40, + 0x2001, 0x5d02, 0x2004, 0xd0ec, 0x0040, 0x2782, 0x2079, 0x0100, + 0x0078, 0x278a, 0x2079, 0x0200, 0x0078, 0x278a, 0x2009, 0x5d80, + 0x2079, 0x0100, 0x2104, 0xa086, 0x0000, 0x00c0, 0x27a3, 0xd7fc, + 0x00c0, 0x2796, 0x2009, 0x5d44, 0x0078, 0x2798, 0x2009, 0x5d84, + 0x2104, 0xa005, 0x00c0, 0x27a3, 0x7830, 0xa084, 0x00c0, 0x00c0, + 0x27a3, 0x781b, 0x004b, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x2c00, + 0xa005, 0x00c0, 0x27b0, 0xa188, 0x0005, 0x2104, 0x0078, 0x27b1, + 0x6014, 0xd0fc, 0x00c0, 0x27c4, 0x2071, 0x5d40, 0x2001, 0x5d02, + 0x2004, 0xd0ec, 0x0040, 0x27c0, 0x2079, 0x0100, 0x0078, 0x27c8, + 0x2079, 0x0200, 0x0078, 0x27c8, 0x2071, 0x5d80, 0x2079, 0x0100, + 0x2091, 0x8000, 0x7000, 0xa086, 0x0000, 0x00c0, 0x27fa, 0x0078, + 0x27ee, 0x2c00, 0xa005, 0x00c0, 0x27da, 0xa188, 0x0005, 0x2104, + 0x0078, 0x27db, 0x6014, 0xd0fc, 0x00c0, 0x27ec, 0x2001, 0x5d02, + 0x2004, 0xd0ec, 0x0040, 0x27e8, 0x2079, 0x0100, 0x0078, 0x27ee, + 0x2079, 0x0200, 0x0078, 0x27ee, 0x2079, 0x0100, 0x7830, 0xa084, + 0x00c0, 0x00c0, 0x27fa, 0x2c00, 0xa005, 0x00c0, 0x27f8, 0x2104, + 0x781b, 0x004d, 0x2091, 0x8001, 0x0e7f, 0x0f7f, 0x007c, 0x2009, + 0x0002, 0x2069, 0x5d00, 0x6808, 0xd0ec, 0x00c0, 0x2854, 0x2071, + 0x5d80, 0x2079, 0x0100, 0x2021, 0x5fbf, 0x784b, 0x000f, 0x0098, + 0x281b, 0x7838, 0x0078, 0x280d, 0x784b, 0x000f, 0x00a8, 0x281b, + 0x7838, 0x0078, 0x2814, 0x20a9, 0x0060, 0x789b, 0x0000, 0x78af, + 0x0000, 0x78af, 0x0000, 0x00f0, 0x281f, 0x70af, 0x009c, 0x2019, + 0x5afc, 0x1078, 0x286a, 0x7003, 0x0000, 0x017e, 0xd18c, 0x2009, + 0x0000, 0x0040, 0x2834, 0xc1bd, 0x1078, 0x2a41, 0x017f, 0x701c, + 0xa084, 0x000f, 0x007e, 0x680c, 0xd0e4, 0x007f, 0x00c0, 0x2844, + 0xa085, 0x6340, 0x0078, 0x2846, 0xa085, 0x62c0, 0x7806, 0x780f, + 0xb204, 0x7843, 0x00d8, 0x7853, 0x0080, 0x780b, 0x0008, 0x7053, + 0x0008, 0x745e, 0x705b, 0x0000, 0x8109, 0x0040, 0x2869, 0x2071, + 0x5d40, 0x6808, 0xd0ec, 0x0040, 0x2863, 0x2079, 0x0100, 0x2021, + 0x5dbf, 0x0078, 0x280d, 0x2079, 0x0200, 0x2021, 0x5dbf, 0x0078, + 0x2814, 0x007c, 0x137e, 0x147e, 0x157e, 0x047e, 0xaf80, 0x002b, + 0x20a0, 0x2304, 0xa005, 0x789a, 0x0040, 0x288b, 0x8318, 0x2324, + 0x8318, 0x2398, 0x24a8, 0xa484, 0xff00, 0x0040, 0x2883, 0xa482, + 0x0100, 0x20a9, 0x0100, 0x2020, 0x53a6, 0xa005, 0x00c0, 0x287a, + 0x3318, 0x0078, 0x2871, 0x047f, 0x157f, 0x147f, 0x137f, 0x007c, + 0x017e, 0xd1bc, 0x00c0, 0x28a4, 0x007e, 0x2001, 0x5d02, 0x2004, + 0xd0ec, 0x007f, 0x0040, 0x28a0, 0x2011, 0x0101, 0x0078, 0x28a6, + 0x2011, 0x0201, 0x0078, 0x28a6, 0x2011, 0x0101, 0xa18c, 0x000f, + 0x2204, 0xa084, 0xfff0, 0xa105, 0x2012, 0x017f, 0x1078, 0x2a41, + 0x007c, 0xd3fc, 0x00c0, 0x28c4, 0x007e, 0x2001, 0x5d02, 0x2004, + 0xd0ec, 0x007f, 0x0040, 0x28c0, 0x2011, 0x0101, 0x0078, 0x28c6, + 0x2011, 0x0201, 0x0078, 0x28c6, 0x2011, 0x0101, 0x20a9, 0x0009, + 0x810b, 0x00f0, 0x28c8, 0xa18c, 0x0e00, 0x2204, 0xa084, 0xf1ff, + 0xa105, 0x2012, 0x007c, 0x2019, 0x0002, 0x2001, 0x5d02, 0x2004, + 0xd0ec, 0x0040, 0x28e0, 0x8319, 0x2009, 0x0101, 0x0078, 0x28e2, + 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, 0x00f0, 0x28e4, 0xa294, + 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a, 0x8319, 0x0040, + 0x28f5, 0x2009, 0x0201, 0x0078, 0x28e2, 0x007c, 0xd3fc, 0x00c0, + 0x2909, 0x007e, 0x2001, 0x5d02, 0x2004, 0xd0ec, 0x007f, 0x0040, + 0x2905, 0x2011, 0x0101, 0x0078, 0x290b, 0x2011, 0x0201, 0x0078, + 0x290b, 0x2011, 0x0101, 0x20a9, 0x000c, 0x810b, 0x00f0, 0x290d, + 0xa18c, 0xf000, 0x2204, 0xa084, 0x0fff, 0xa105, 0x2012, 0x007c, + 0xd3fc, 0x00c0, 0x292b, 0x007e, 0x2001, 0x5d02, 0x2004, 0xd0ec, + 0x007f, 0x0040, 0x2927, 0x2011, 0x0102, 0x0078, 0x292d, 0x2011, + 0x0202, 0x0078, 0x292d, 0x2011, 0x0102, 0x2204, 0xa084, 0xffcf, + 0xa105, 0x2012, 0x007c, 0x0c7e, 0xd1bc, 0x00c0, 0x2947, 0x007e, + 0x2001, 0x5d02, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2943, 0x2061, + 0x0100, 0x0078, 0x2949, 0x2061, 0x0200, 0x0078, 0x2949, 0x2061, + 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0020, 0x609a, 0x62ac, + 0x63ac, 0x0c7f, 0x007c, 0x0c7e, 0xd1bc, 0x00c0, 0x2967, 0x007e, + 0x2001, 0x5d02, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2963, 0x2061, + 0x0100, 0x0078, 0x2969, 0x2061, 0x0200, 0x0078, 0x2969, 0x2061, + 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0022, 0x609a, 0x60a4, + 0xa084, 0xffdf, 0x60ae, 0x0c7f, 0x007c, 0x0c7e, 0xd1bc, 0x00c0, + 0x2989, 0x007e, 0x2001, 0x5d02, 0x2004, 0xd0ec, 0x007f, 0x0040, + 0x2985, 0x2061, 0x0100, 0x0078, 0x298b, 0x2061, 0x0200, 0x0078, + 0x298b, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0022, + 0x609a, 0x60a4, 0xa085, 0x0020, 0x60ae, 0x0c7f, 0x007c, 0x0c7e, + 0xd1bc, 0x00c0, 0x29ab, 0x007e, 0x2001, 0x5d02, 0x2004, 0xd0ec, + 0x007f, 0x0040, 0x29a7, 0x2061, 0x0100, 0x0078, 0x29ad, 0x2061, + 0x0200, 0x0078, 0x29ad, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003, + 0xa080, 0x0020, 0x609a, 0x60a4, 0xd2ac, 0x0040, 0x29b9, 0xc2ac, + 0xc3f5, 0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018, 0x0c7f, 0x007c, + 0x2091, 0x8000, 0x0c7e, 0x0e7e, 0x6818, 0xa005, 0x0040, 0x2a1f, + 0xd1fc, 0x00c0, 0x29cf, 0x2061, 0xa3c0, 0x0078, 0x29d1, 0x2061, + 0xa4d0, 0x1078, 0x2a27, 0x0040, 0x2a04, 0x20a9, 0x0101, 0xd1fc, + 0x00c0, 0x29de, 0x2061, 0xa2c0, 0x0078, 0x29e0, 0x2061, 0xa3d0, + 0x0c7e, 0x1078, 0x2a27, 0x0040, 0x29eb, 0x0c7f, 0x8c60, 0x00f0, + 0x29e0, 0x0078, 0x2a1f, 0x007f, 0xd1fc, 0x00c0, 0x29f5, 0x2071, + 0x5d40, 0xa082, 0xa2c0, 0x0078, 0x29f9, 0x2071, 0x5d80, 0xa082, + 0xa3d0, 0x7082, 0x717e, 0x2001, 0x0004, 0x706e, 0x708b, 0x000f, + 0x1078, 0x2765, 0x0078, 0x2a1b, 0x60cc, 0xa005, 0x00c0, 0x2a1f, + 0xd1fc, 0x00c0, 0x2a0f, 0x2071, 0x5d40, 0x0078, 0x2a11, 0x2071, + 0x5d80, 0x717e, 0x2c00, 0x7086, 0x2001, 0x0006, 0x706e, 0x708b, + 0x000f, 0x1078, 0x2765, 0x2001, 0x0000, 0x0078, 0x2a21, 0x2001, + 0x0001, 0x2091, 0x8001, 0xa005, 0x0e7f, 0x0c7f, 0x007c, 0x2c04, + 0xa005, 0x0040, 0x2a3e, 0x2060, 0x6010, 0xa306, 0x00c0, 0x2a3b, + 0x600c, 0xa206, 0x00c0, 0x2a3b, 0x6014, 0xa106, 0x00c0, 0x2a3b, + 0xa006, 0x0078, 0x2a40, 0x6000, 0x0078, 0x2a28, 0xa085, 0x0001, + 0x007c, 0x0f7e, 0x0e7e, 0x017e, 0xd1bc, 0x00c0, 0x2a59, 0x2079, + 0x5d40, 0x007e, 0x2001, 0x5d02, 0x2004, 0xd0ec, 0x007f, 0x0040, + 0x2a55, 0x2071, 0x0100, 0x0078, 0x2a5d, 0x2071, 0x0200, 0x0078, + 0x2a5d, 0x2079, 0x5d80, 0x2071, 0x0100, 0x791c, 0xa18c, 0x000f, + 0x70ec, 0xa084, 0x0100, 0x007f, 0x0040, 0x2a80, 0x810b, 0x810b, + 0x810b, 0x810b, 0xd0bc, 0x00c0, 0x2a7d, 0x007e, 0x2001, 0x5d02, + 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2a79, 0xa18d, 0x0f00, 0x0078, + 0x2a7f, 0xa18d, 0x0800, 0x0078, 0x2a7f, 0xa18d, 0x0f00, 0x2104, + 0x0e7f, 0x0f7f, 0x007c, 0x0e7e, 0x2001, 0x5d01, 0x2004, 0xd0ac, + 0x00c0, 0x2aed, 0x68e4, 0xa08c, 0x0020, 0x0040, 0x2aed, 0xa084, + 0x0006, 0x00c0, 0x2aed, 0x6014, 0xd0fc, 0x00c0, 0x2a9b, 0x2071, + 0x61c0, 0x0078, 0x2a9d, 0x2071, 0x6240, 0x8007, 0xa084, 0x000f, + 0x8003, 0x8003, 0x8003, 0xae70, 0x7004, 0xa084, 0x000a, 0x00c0, + 0x2aed, 0x7108, 0xa194, 0xff00, 0x0040, 0x2aed, 0xa18c, 0x00ff, + 0x2001, 0x000a, 0xa106, 0x0040, 0x2ad0, 0x2001, 0x000c, 0xa106, + 0x0040, 0x2ad4, 0x2001, 0x0012, 0xa106, 0x0040, 0x2ad8, 0x2001, + 0x0014, 0xa106, 0x0040, 0x2adc, 0x2001, 0x0019, 0xa106, 0x0040, + 0x2ae0, 0x2001, 0x0032, 0xa106, 0x0040, 0x2ae4, 0x0078, 0x2ae8, + 0x2009, 0x000c, 0x0078, 0x2aea, 0x2009, 0x0012, 0x0078, 0x2aea, + 0x2009, 0x0014, 0x0078, 0x2aea, 0x2009, 0x0019, 0x0078, 0x2aea, + 0x2009, 0x0020, 0x0078, 0x2aea, 0x2009, 0x003f, 0x0078, 0x2aea, + 0x2011, 0x0000, 0x2100, 0xa205, 0x700a, 0x0e7f, 0x007c, 0x0068, + 0x2aef, 0x2091, 0x8000, 0x2071, 0x0000, 0x007e, 0x7018, 0xd084, + 0x00c0, 0x2af6, 0x007f, 0x2071, 0x0010, 0x70ca, 0x007f, 0x70c6, + 0x70c3, 0x8002, 0x70db, 0x090a, 0x70df, 0x0000, 0x2071, 0x0000, + 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x2b0c, 0x7f3c, 0x7e58, + 0x7c30, 0x7d38, 0xa594, 0x003f, 0xa49c, 0x0003, 0xa484, 0x000f, + 0x0079, 0x2b1a, 0x2b2c, 0x2b2c, 0x2b2c, 0x2f9a, 0x43b8, 0x2b2a, + 0x2b54, 0x2b57, 0x2b2a, 0x2b2a, 0x2b2a, 0x2b2a, 0x2b2a, 0x2b2a, + 0x2b2a, 0x2b2a, 0x1078, 0x2aef, 0x8507, 0xa084, 0x001f, 0x0079, + 0x2b31, 0x2b5a, 0x2f9a, 0x31b6, 0x32d1, 0x32fc, 0x3587, 0x38a8, + 0x38f8, 0x394e, 0x39ca, 0x3aaf, 0x3b58, 0x2b54, 0x30b4, 0x3877, + 0x2b51, 0x47e9, 0x4809, 0x49cf, 0x49db, 0x4aba, 0x2b51, 0x2b51, + 0x4b95, 0x4b99, 0x47e7, 0x2b51, 0x493a, 0x2b51, 0x46b0, 0x2b57, + 0x2b51, 0x1078, 0x2aef, 0x007c, 0x781b, 0x004f, 0x007c, 0x781b, + 0x00d6, 0x007c, 0x724e, 0xa584, 0x0001, 0x00c0, 0x46c2, 0x0040, + 0x2b6d, 0x1078, 0x2aef, 0x7003, 0x0000, 0x7057, 0x0000, 0x704f, + 0x0000, 0x7047, 0x0000, 0x1078, 0x436b, 0x7068, 0xa06d, 0x0040, + 0x2b7a, 0x70f8, 0xa084, 0x0001, 0x716c, 0xa105, 0x00c0, 0x2b7a, + 0x0078, 0x2ce3, 0x706c, 0xa084, 0x0007, 0x0079, 0x2b7f, 0x2b87, + 0x2c02, 0x2c0b, 0x2c16, 0x2c21, 0x2cc9, 0x2c2c, 0x2c02, 0x7830, + 0xd0bc, 0x00c0, 0x2b53, 0x71f4, 0xd1b4, 0x00c0, 0x2be0, 0x70c4, + 0xa086, 0x0001, 0x0040, 0x2b53, 0x1078, 0x4351, 0x00c0, 0x2b53, + 0x70d4, 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, 0x0010, 0x6b0c, + 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886, + 0x0001, 0x0040, 0x2bae, 0x69bc, 0x7daa, 0x79aa, 0x68c0, 0xa04d, + 0x6e1c, 0x7830, 0xd0bc, 0x00c0, 0x2b53, 0x2001, 0x0010, 0x0078, + 0x2e49, 0x7068, 0xa005, 0x00c0, 0x2b53, 0x1078, 0x4351, 0x00c0, + 0x2b53, 0x0c7e, 0x0d7e, 0x70d4, 0xa06d, 0x6800, 0xa065, 0xa055, + 0x789b, 0x0010, 0x6b0c, 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804, + 0xa06d, 0xa05d, 0xa886, 0x0001, 0x0040, 0x2bd9, 0x69bc, 0x7daa, + 0x79aa, 0x68c0, 0xa04d, 0x6e1c, 0x2001, 0x0020, 0x0078, 0x2e49, + 0x1078, 0x433b, 0x00c0, 0x2b53, 0x70dc, 0xa06d, 0x6814, 0xc0fc, + 0x8007, 0x7882, 0x68b4, 0x785a, 0x781b, 0x004f, 0x7050, 0xc08d, + 0x780a, 0x68bc, 0x7042, 0x70f4, 0xc0b4, 0x70f6, 0x70d8, 0xa065, + 0x68c0, 0x7062, 0x7003, 0x0002, 0x2d00, 0x7056, 0xad80, 0x0009, + 0x7046, 0x007c, 0x1078, 0x433b, 0x00c0, 0x2c0a, 0x781b, 0x0048, + 0x7003, 0x0004, 0x007c, 0x1078, 0x433b, 0x00c0, 0x2c15, 0x2011, + 0x000c, 0x1078, 0x2c3c, 0x7003, 0x0004, 0x007c, 0x1078, 0x433b, + 0x00c0, 0x2c20, 0x2011, 0x0006, 0x1078, 0x2c3c, 0x7003, 0x0004, + 0x007c, 0x1078, 0x433b, 0x00c0, 0x2c2b, 0x2011, 0x000d, 0x1078, + 0x2c3c, 0x7003, 0x0004, 0x007c, 0x1078, 0x433b, 0x00c0, 0x2c3b, + 0x2011, 0x0006, 0x1078, 0x2c3c, 0x7084, 0x7087, 0x0000, 0x2068, + 0x7056, 0x7003, 0x0001, 0x007c, 0x717c, 0xc1fc, 0x8107, 0x7882, + 0x789b, 0x0010, 0xa286, 0x000c, 0x00c0, 0x2c4b, 0x7aaa, 0x2001, + 0x0001, 0x0078, 0x2c60, 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, + 0xa286, 0x000d, 0x0040, 0x2c59, 0x7aaa, 0x2001, 0x0002, 0x0078, + 0x2c60, 0x78ab, 0x0020, 0x7180, 0x79aa, 0x7aaa, 0x2001, 0x0004, + 0x789b, 0x0060, 0x78aa, 0x785b, 0x0004, 0x781b, 0x00e6, 0x1078, + 0x436b, 0x708b, 0x000f, 0x70f4, 0xd0b4, 0x0040, 0x2c7c, 0xc0b4, + 0x70f6, 0x0c7e, 0x70d8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, + 0x6018, 0x8001, 0x601a, 0x0c7f, 0x007c, 0x7010, 0xa005, 0x00c0, + 0x2c8b, 0x70f4, 0xd0b4, 0x0040, 0x2c8c, 0x70d8, 0xac06, 0x00c0, + 0x2c8c, 0x1078, 0x2c6b, 0x007c, 0x017e, 0x71c4, 0xa186, 0x0001, + 0x0040, 0x2cbe, 0x0d7e, 0x027e, 0x2100, 0x2011, 0x0001, 0xa212, + 0x70d4, 0x2068, 0x6800, 0xac06, 0x0040, 0x2ca5, 0x8211, 0x0040, + 0x2cbc, 0x1078, 0x2cc0, 0x0078, 0x2c9a, 0x0c7e, 0x2100, 0x2011, + 0x0001, 0xa212, 0x70d4, 0x2068, 0x6800, 0x2060, 0x6008, 0xa084, + 0xfbef, 0x600a, 0x8211, 0x0040, 0x2cb9, 0x1078, 0x2cc0, 0x0078, + 0x2cac, 0x70c7, 0x0001, 0x0c7f, 0x027f, 0x0d7f, 0x017f, 0x007c, + 0xade8, 0x0005, 0x70cc, 0xad06, 0x00c0, 0x2cc8, 0x70c8, 0x2068, + 0x007c, 0x1078, 0x433b, 0x00c0, 0x2b53, 0x7084, 0x2068, 0x777c, + 0x1078, 0x41e3, 0x2c50, 0x1078, 0x443a, 0x789b, 0x0010, 0x6814, + 0xa084, 0x001f, 0xc0bd, 0x78aa, 0x6e1c, 0x2041, 0x0001, 0x2001, + 0x0004, 0x0078, 0x2e4f, 0x1078, 0x433b, 0x00c0, 0x2b53, 0x789b, + 0x0010, 0x7068, 0x2068, 0x6f14, 0x1078, 0x2c6b, 0x1078, 0x41e3, + 0x2c50, 0x1078, 0x443a, 0x6824, 0xa005, 0x0040, 0x2cff, 0xa082, + 0x0006, 0x0048, 0x2cfd, 0x0078, 0x2cff, 0x6827, 0x0005, 0x6b14, + 0xa39c, 0x001f, 0xa39d, 0x00c0, 0x2960, 0x6000, 0x2a60, 0xa084, + 0x8000, 0x0040, 0x2d0f, 0xa684, 0x0001, 0x0040, 0x2d11, 0xa39c, + 0xffbf, 0x7baa, 0x2031, 0x0020, 0x2041, 0x0001, 0x2001, 0x0003, + 0x0078, 0x2e4f, 0xc28d, 0x72f6, 0x72e0, 0xa200, 0xa015, 0x715c, + 0x8108, 0xa12a, 0x0048, 0x2d25, 0x71e0, 0x2164, 0x6504, 0x85ff, + 0x00c0, 0x2d40, 0x715e, 0x8421, 0x00c0, 0x2d20, 0x70f4, 0xd08c, + 0x0040, 0x2d38, 0x70f0, 0xa005, 0x00c0, 0x2d38, 0x70f3, 0x000a, + 0x704c, 0xa005, 0x0040, 0x46c2, 0x007c, 0x2200, 0x0078, 0x2d2a, + 0x70f4, 0xc08c, 0x70f6, 0x70f3, 0x0000, 0x6034, 0xa005, 0x00c0, + 0x2d3d, 0x6708, 0xa784, 0x073f, 0x0040, 0x2d6a, 0xd7d4, 0x00c0, + 0x2d3d, 0xa784, 0x0021, 0x00c0, 0x2d3d, 0xd78c, 0x0040, 0x2d5d, + 0xd794, 0x0040, 0x2d3d, 0xc794, 0x670a, 0xa784, 0x0218, 0x00c0, + 0x2d3d, 0xd7c4, 0x0040, 0x2d6a, 0x6018, 0xa005, 0x00c0, 0x2d3d, + 0xc7c4, 0x670a, 0x2568, 0x6823, 0x0000, 0x6e1c, 0xa684, 0x000e, + 0x6318, 0x0040, 0x2d7b, 0x601c, 0xa302, 0x0048, 0x2d7e, 0x0040, + 0x2d7e, 0x0078, 0x2d3d, 0x83ff, 0x00c0, 0x2d3d, 0x2d58, 0x2c50, + 0x715e, 0x68cf, 0x0000, 0xd7bc, 0x00c0, 0x2d88, 0x7024, 0x6022, + 0xc7bc, 0x670a, 0x68c0, 0xa065, 0xa04d, 0x6100, 0x2a60, 0x2041, + 0x0001, 0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0, 0xd1fc, 0x0040, + 0x2d9c, 0xd684, 0x0040, 0x2d9e, 0xa39c, 0xffbf, 0xd6a4, 0x0040, + 0x2da3, 0xa39d, 0x0020, 0xa684, 0x000e, 0x00c0, 0x2df4, 0xc7a5, + 0x670a, 0x2c00, 0x68c6, 0x77c4, 0xa786, 0x0001, 0x00c0, 0x2dca, + 0x70f4, 0xd0b4, 0x00c0, 0x2dca, 0x7000, 0xa082, 0x0001, 0x00c8, + 0x2dca, 0x7010, 0xa005, 0x00c0, 0x2dca, 0x1078, 0x4351, 0x00c0, + 0x2dca, 0x7830, 0xd0bc, 0x00c0, 0x2dca, 0x789b, 0x0010, 0x7baa, + 0x0078, 0x2e47, 0x8739, 0x77c6, 0x2750, 0x77d0, 0xa7b0, 0x0005, + 0x70cc, 0xa606, 0x00c0, 0x2dd5, 0x76c8, 0x76d2, 0x2c3a, 0x8738, + 0x2d3a, 0x8738, 0x283a, 0x8738, 0x233a, 0x8738, 0x253a, 0x7830, + 0xd0bc, 0x0040, 0x2deb, 0x2091, 0x301d, 0x70f4, 0xa084, 0x303d, + 0x2091, 0x8000, 0x2090, 0xaad5, 0x0000, 0x0040, 0x2df3, 0x8421, + 0x2200, 0x00c0, 0x2d1f, 0x007c, 0xd1dc, 0x0040, 0x3de7, 0x2029, + 0x0020, 0xd69c, 0x00c0, 0x2e01, 0x8528, 0xd68c, 0x00c0, 0x2e01, + 0x8528, 0x8840, 0x6f14, 0x610c, 0x8108, 0xa18c, 0x00ff, 0x70ec, + 0xa160, 0x2c64, 0x8cff, 0x0040, 0x2e1f, 0x6014, 0xa706, 0x00c0, + 0x2e09, 0x60b8, 0x8001, 0x60ba, 0x00c0, 0x2e04, 0x2a60, 0x6008, + 0xc0c5, 0x600a, 0x2200, 0x8421, 0x00c0, 0x2d1f, 0x007c, 0x2a60, + 0x610e, 0x69be, 0x2c00, 0x68c6, 0x8840, 0x6008, 0xc0d5, 0x600a, + 0x77c4, 0xa786, 0x0001, 0x00c0, 0x2dca, 0x70f4, 0xd0b4, 0x00c0, + 0x2dca, 0x7000, 0xa082, 0x0001, 0x00c8, 0x2dca, 0x7010, 0xa005, + 0x00c0, 0x2dca, 0x1078, 0x4351, 0x00c0, 0x2dca, 0x7830, 0xd0bc, + 0x00c0, 0x2dca, 0x789b, 0x0010, 0x7baa, 0x7daa, 0x79aa, 0x2001, + 0x0002, 0x007e, 0x6018, 0x8000, 0x601a, 0x0078, 0x2e50, 0x007e, + 0x2960, 0x6104, 0x2a60, 0xa184, 0x0018, 0x0040, 0x2e6b, 0xa184, + 0x0010, 0x0040, 0x2e5f, 0x1078, 0x4002, 0x00c0, 0x2e8b, 0xd19c, + 0x0040, 0x2e6b, 0x69a0, 0xa184, 0x0600, 0x00c0, 0x2e6b, 0x1078, + 0x3ee1, 0x0078, 0x2e8b, 0x69a0, 0xa184, 0x1e00, 0x0040, 0x2e95, + 0xd1dc, 0x0040, 0x2e81, 0x0c7e, 0x2960, 0x6000, 0xc0ed, 0x6002, + 0x6104, 0xc1a5, 0x6106, 0x0c7f, 0x1078, 0x4002, 0x00c0, 0x2e8b, + 0x69a0, 0xd1cc, 0x0040, 0x2e88, 0x1078, 0x3f41, 0x0078, 0x2e8b, + 0xd1d4, 0x00c0, 0x2e67, 0x69a0, 0xd1e4, 0x0040, 0x2e95, 0x6914, + 0xa18c, 0xff00, 0x810f, 0x1078, 0x2953, 0x027f, 0xa68c, 0x00e0, + 0xa684, 0x0060, 0x0040, 0x2ea1, 0xa086, 0x0060, 0x00c0, 0x2ea1, + 0xc1f5, 0xa18d, 0x0104, 0x69b6, 0x789b, 0x0060, 0x2800, 0x78aa, + 0x6818, 0xc0fd, 0x681a, 0xd6bc, 0x0040, 0x2ebc, 0xc0fc, 0x708f, + 0x0000, 0xa08a, 0x000d, 0x0050, 0x2eba, 0xa08a, 0x000c, 0x718e, + 0x2001, 0x000c, 0x800c, 0x7192, 0x78aa, 0x3518, 0x3340, 0x3428, + 0x80ac, 0xaf80, 0x002b, 0x20a0, 0x789b, 0x0000, 0xad80, 0x000b, + 0x2098, 0x53a6, 0x23a8, 0x2898, 0x25a0, 0xa286, 0x0020, 0x00c0, + 0x2eef, 0x70f4, 0xc0b5, 0x70f6, 0x2c00, 0x70da, 0x2d00, 0x70de, + 0xa286, 0x0002, 0x0040, 0x2f1b, 0x70c4, 0x8000, 0x70c6, 0x74d4, + 0xa498, 0x0005, 0x70cc, 0xa306, 0x00c0, 0x2ee7, 0x73c8, 0x73d6, + 0xa286, 0x0010, 0x0040, 0x2b53, 0x0d7f, 0x0c7f, 0x007c, 0x7000, + 0xa005, 0x00c0, 0x2ed1, 0xa286, 0x0002, 0x00c0, 0x2f35, 0x1078, + 0x433b, 0x00c0, 0x2ed1, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x68b4, + 0x785a, 0x781b, 0x004f, 0x7050, 0xc08d, 0x780a, 0x127e, 0x0d7e, + 0x0c7e, 0x70f4, 0xa084, 0x2700, 0x2090, 0x0c7f, 0x0d7f, 0x127f, + 0x2900, 0x7062, 0x68bc, 0x7042, 0x7003, 0x0002, 0x2d00, 0x7056, + 0xad80, 0x0009, 0x7046, 0x7830, 0xd0bc, 0x0040, 0x2f27, 0x2091, + 0x301d, 0x70f4, 0xa084, 0x303d, 0x2091, 0x8000, 0x2090, 0x70c4, + 0xa005, 0x00c0, 0x2f2c, 0x007c, 0x8421, 0x0040, 0x2f2b, 0x7258, + 0x70e0, 0xa200, 0xa015, 0x0078, 0x2d1f, 0xa286, 0x0010, 0x00c0, + 0x2f60, 0x1078, 0x433b, 0x00c0, 0x2ed1, 0x6814, 0xc0fc, 0x8007, + 0x7882, 0x68b4, 0x785a, 0x781b, 0x004f, 0x7050, 0xc08d, 0x780a, + 0x70c4, 0x8000, 0x70c6, 0x74d4, 0xa490, 0x0005, 0x70cc, 0xa206, + 0x00c0, 0x2f53, 0x72c8, 0x72d6, 0x2900, 0x7062, 0x68bc, 0x7042, + 0x7003, 0x0002, 0x2d00, 0x7056, 0xad80, 0x0009, 0x7046, 0x007c, + 0x6bb4, 0xa39d, 0x2000, 0x7b5a, 0x6814, 0xc0fc, 0x8007, 0x7882, + 0x6b94, 0x7bd6, 0x7bde, 0x6e98, 0x7ed2, 0x7eda, 0x781b, 0x004f, + 0x2900, 0x7062, 0x7202, 0x7050, 0xc08d, 0x780a, 0x7200, 0x2300, + 0xa605, 0x0040, 0x2f8c, 0x70f4, 0xa084, 0x2700, 0xa086, 0x2300, + 0x00c0, 0x2f86, 0x2009, 0x0000, 0x0078, 0x2f88, 0x2009, 0x0001, + 0xa284, 0x000f, 0x1079, 0x2f90, 0xad80, 0x0009, 0x7046, 0x007c, + 0x2f98, 0x5514, 0x5514, 0x5501, 0x5514, 0x2f98, 0x2f98, 0x2f98, + 0x1078, 0x2aef, 0x1078, 0x433b, 0x7808, 0xa084, 0xfffc, 0x780a, + 0x0f7e, 0x2079, 0x5d00, 0x78b0, 0x0f7f, 0xd084, 0x0040, 0x2fc1, + 0x706c, 0xa086, 0x0001, 0x00c0, 0x2faf, 0x0078, 0x3087, 0x706c, + 0xa086, 0x0005, 0x00c0, 0x2fbf, 0x7084, 0x2068, 0x681b, 0x0004, + 0x6817, 0x0000, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x706f, + 0x0000, 0x70c7, 0x0000, 0x70c8, 0x70d2, 0x70d6, 0x70f8, 0xc084, + 0x70fa, 0x1078, 0x2c6b, 0xa684, 0x5f00, 0x681e, 0x6a18, 0xd2fc, + 0x0040, 0x2fd4, 0x2011, 0x0004, 0x716c, 0xa186, 0x0001, 0x0040, + 0x2fe8, 0xa186, 0x0007, 0x00c0, 0x2fe1, 0x701b, 0x0005, 0x0078, + 0x2fe8, 0x701b, 0x0001, 0x70f4, 0xc0dd, 0x70f6, 0x0078, 0x2fe8, + 0x2001, 0x5d08, 0x2004, 0xa084, 0x00ff, 0xa086, 0x0018, 0x0040, + 0x2ff8, 0x7014, 0x7012, 0xa005, 0x00c0, 0x2ff8, 0x70c7, 0x0001, + 0x1078, 0x5218, 0x157e, 0x20a9, 0x0010, 0x2039, 0x0000, 0x1078, + 0x40f9, 0xa7b8, 0x0100, 0x00f0, 0x2fff, 0x157f, 0x7000, 0x0079, + 0x3009, 0x303a, 0x301c, 0x301c, 0x3011, 0x303a, 0x303a, 0x303a, + 0x303a, 0x7068, 0xa005, 0x0040, 0x303a, 0xad06, 0x00c0, 0x301c, + 0x6800, 0x706a, 0x0078, 0x302e, 0x6820, 0xd084, 0x00c0, 0x302a, + 0x6f14, 0x1078, 0x41e3, 0x6008, 0xc0d4, 0x600a, 0x1078, 0x3dbf, + 0x0078, 0x302e, 0x7064, 0x2060, 0x6800, 0x6002, 0x6a1a, 0x6817, + 0x0000, 0x682b, 0x0000, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, + 0x1078, 0x21ca, 0x2011, 0x0004, 0xb284, 0x0400, 0x00c0, 0x3044, + 0x2021, 0xa3c0, 0x0078, 0x3046, 0x2021, 0xa4d0, 0x1078, 0x3095, + 0xb284, 0x0400, 0x0040, 0x3050, 0x2021, 0x5d9a, 0x0078, 0x3052, + 0x2021, 0x5d5a, 0x1078, 0x3095, 0x157e, 0x20a9, 0x0101, 0xb284, + 0x0400, 0x00c0, 0x305f, 0x2021, 0xa2c0, 0x0078, 0x3061, 0x2021, + 0xa3d0, 0x1078, 0x3095, 0x8420, 0x00f0, 0x3061, 0xb284, 0x0300, + 0x0040, 0x306e, 0x2061, 0x62c0, 0x0078, 0x3070, 0x2061, 0x82c0, + 0x2021, 0x0002, 0x20a9, 0x0100, 0x6018, 0x6110, 0x81ff, 0x0040, + 0x307d, 0xa102, 0x0050, 0x307d, 0x6012, 0x601b, 0x0000, 0xace0, + 0x0010, 0x00f0, 0x3074, 0x8421, 0x00c0, 0x3072, 0x157f, 0x7094, + 0xa084, 0x8000, 0x0040, 0x308e, 0x1078, 0x44aa, 0x706f, 0x0000, + 0x7003, 0x0000, 0x7057, 0x0000, 0x007c, 0x047e, 0x2404, 0xa005, + 0x0040, 0x30b0, 0x2068, 0x6800, 0x007e, 0x6a1a, 0x6817, 0x0000, + 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, 0x6820, 0xa084, + 0x00ff, 0xc09d, 0x6822, 0x1078, 0x21ca, 0x007f, 0x0078, 0x3097, + 0x047f, 0x2023, 0x0000, 0x007c, 0xa282, 0x0003, 0x0050, 0x30ba, + 0x1078, 0x2aef, 0x2300, 0x0079, 0x30bd, 0x30c0, 0x314b, 0x3168, + 0xa282, 0x0002, 0x0040, 0x30c6, 0x1078, 0x2aef, 0x706c, 0x706f, + 0x0000, 0x708b, 0x0000, 0x0079, 0x30cd, 0x30d5, 0x30d5, 0x30d7, + 0x3117, 0x3df3, 0x30d5, 0x3117, 0x30d5, 0x1078, 0x2aef, 0x777c, + 0x1078, 0x40f9, 0x777c, 0xa7bc, 0x8f00, 0x1078, 0x41e3, 0x6018, + 0xa005, 0x0040, 0x310e, 0xd7fc, 0x00c0, 0x30ea, 0x2021, 0xa3c0, + 0x0078, 0x30ec, 0x2021, 0xa4d0, 0x2009, 0x0005, 0x2011, 0x0010, + 0x1078, 0x3183, 0x0040, 0x310e, 0x157e, 0x20a9, 0x0101, 0xd7fc, + 0x00c0, 0x30fe, 0x2021, 0xa2c0, 0x0078, 0x3100, 0x2021, 0xa3d0, + 0x047e, 0x2009, 0x0005, 0x2011, 0x0010, 0x1078, 0x3183, 0x047f, + 0x0040, 0x310d, 0x8420, 0x00f0, 0x3100, 0x157f, 0x8738, 0xa784, + 0x001f, 0x00c0, 0x30dd, 0x0078, 0x2b63, 0x0078, 0x2b63, 0x777c, + 0x1078, 0x41e3, 0x6018, 0xa005, 0x0040, 0x3149, 0xd7fc, 0x00c0, + 0x3125, 0x2021, 0xa3c0, 0x0078, 0x3127, 0x2021, 0xa4d0, 0x2009, + 0x0005, 0x2011, 0x0020, 0x1078, 0x3183, 0x0040, 0x3149, 0x157e, + 0x20a9, 0x0101, 0xd7fc, 0x00c0, 0x3139, 0x2021, 0xa2c0, 0x0078, + 0x313b, 0x2021, 0xa3d0, 0x047e, 0x2009, 0x0005, 0x2011, 0x0020, + 0x1078, 0x3183, 0x047f, 0x0040, 0x3148, 0x8420, 0x00f0, 0x313b, + 0x157f, 0x0078, 0x2b63, 0x2200, 0x0079, 0x314e, 0x3151, 0x3153, + 0x3153, 0x1078, 0x2aef, 0x2009, 0x0012, 0x706c, 0xa086, 0x0002, + 0x0040, 0x315c, 0x2009, 0x000e, 0x6818, 0xd0fc, 0x0040, 0x3161, + 0x691a, 0x706f, 0x0000, 0x70f4, 0xc0dd, 0x70f6, 0x0078, 0x42dd, + 0x2200, 0x0079, 0x316b, 0x3170, 0x3153, 0x316e, 0x1078, 0x2aef, + 0x1078, 0x5218, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3d6d, 0x1078, + 0x3dd4, 0x6008, 0xa084, 0xfbef, 0x600a, 0x1078, 0x3d5e, 0x0040, + 0x3d6d, 0x0078, 0x2b63, 0x2404, 0xa005, 0x0040, 0x31b2, 0x2068, + 0x2d04, 0x007e, 0x6814, 0xa706, 0x0040, 0x3192, 0x2d20, 0x007f, + 0x0078, 0x3184, 0x007f, 0x2022, 0x6817, 0x0000, 0x682b, 0x0000, + 0x68b4, 0xa084, 0x5f00, 0x681e, 0x691a, 0x6820, 0xa084, 0x00ff, + 0xa205, 0x6822, 0x682b, 0x0000, 0x1078, 0x21ca, 0x6010, 0x8001, + 0x6012, 0x6008, 0xa084, 0xf9ef, 0x600a, 0x1078, 0x2c8c, 0x1078, + 0x3dd4, 0x007c, 0xa085, 0x0001, 0x0078, 0x31b1, 0x2300, 0x0079, + 0x31b9, 0x31be, 0x31bc, 0x3264, 0x1078, 0x2aef, 0x78ec, 0xa084, + 0x0001, 0x00c0, 0x31d2, 0x7000, 0xa086, 0x0004, 0x00c0, 0x31ca, + 0x0078, 0x3209, 0x1078, 0x3dd4, 0x6008, 0xa084, 0xf9ef, 0x600a, + 0x0078, 0x3d6d, 0x78e4, 0xa005, 0x00d0, 0x3209, 0x3208, 0x007e, + 0x2001, 0x5d02, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x31e3, 0xa18c, + 0x0300, 0x0078, 0x31e5, 0xa18c, 0x0400, 0x0040, 0x31eb, 0x0018, + 0x2b53, 0x0078, 0x31ed, 0x0028, 0x2b53, 0x2008, 0xa084, 0x0030, + 0x00c0, 0x31f5, 0x781b, 0x004f, 0x007c, 0x78ec, 0xa084, 0x0003, + 0x0040, 0x31f2, 0x2100, 0xa084, 0x0007, 0x0079, 0x31ff, 0x3240, + 0x324a, 0x3233, 0x3207, 0x4330, 0x4330, 0x3207, 0x3257, 0x1078, + 0x2aef, 0x7000, 0xa086, 0x0004, 0x00c0, 0x3223, 0x706c, 0xa086, + 0x0002, 0x00c0, 0x3219, 0x2011, 0x0002, 0x2019, 0x0000, 0x0078, + 0x30b4, 0x706c, 0xa086, 0x0006, 0x0040, 0x3213, 0x706c, 0xa086, + 0x0004, 0x0040, 0x3213, 0x79e4, 0xa184, 0x0030, 0x0040, 0x322d, + 0x78ec, 0xa084, 0x0003, 0x00c0, 0x322f, 0x0078, 0x3877, 0x2001, + 0x0003, 0x0078, 0x359b, 0x6818, 0xd0fc, 0x0040, 0x3239, 0x681b, + 0x001d, 0x1078, 0x40c8, 0x782b, 0x3008, 0x781b, 0x0055, 0x007c, + 0x6818, 0xd0fc, 0x0040, 0x3246, 0x681b, 0x001d, 0x1078, 0x40c8, + 0x0078, 0x4305, 0x6818, 0xd0fc, 0x0040, 0x3250, 0x681b, 0x001d, + 0x1078, 0x40c8, 0x782b, 0x3008, 0x781b, 0x00d3, 0x007c, 0x6818, + 0xd0fc, 0x0040, 0x325d, 0x681b, 0x001d, 0x1078, 0x40c8, 0x782b, + 0x3008, 0x781b, 0x0093, 0x007c, 0xa584, 0x000f, 0x00c0, 0x3281, + 0x7000, 0x0079, 0x326b, 0x2b63, 0x3273, 0x3275, 0x3d6d, 0x3d6d, + 0x3d6d, 0x3273, 0x3273, 0x1078, 0x2aef, 0x1078, 0x3dd4, 0x6008, + 0xa084, 0xfbef, 0x600a, 0x1078, 0x3d5e, 0x0040, 0x3d6d, 0x0078, + 0x2b63, 0x78e4, 0xa005, 0x00d0, 0x3209, 0x3208, 0x007e, 0x2001, + 0x5d02, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x3292, 0xa18c, 0x0300, + 0x0078, 0x3294, 0xa18c, 0x0400, 0x0040, 0x329a, 0x0018, 0x3209, + 0x0078, 0x329c, 0x0028, 0x3209, 0x2008, 0xa084, 0x0030, 0x00c0, + 0x32a4, 0x781b, 0x004f, 0x007c, 0x78ec, 0xa084, 0x0003, 0x0040, + 0x32a1, 0x2100, 0xa184, 0x0007, 0x0079, 0x32ae, 0x32bf, 0x32c3, + 0x32b8, 0x32b6, 0x4330, 0x4330, 0x32b6, 0x4328, 0x1078, 0x2aef, + 0x1078, 0x40d0, 0x782b, 0x3008, 0x781b, 0x0055, 0x007c, 0x1078, + 0x40d0, 0x0078, 0x4305, 0x1078, 0x40d0, 0x782b, 0x3008, 0x781b, + 0x00d3, 0x007c, 0x1078, 0x40d0, 0x782b, 0x3008, 0x781b, 0x0093, + 0x007c, 0x2300, 0x0079, 0x32d4, 0x32d9, 0x32d7, 0x32db, 0x1078, + 0x2aef, 0x0078, 0x39ca, 0x681b, 0x0016, 0x78a3, 0x0000, 0x79e4, + 0xa184, 0x0030, 0x0040, 0x39ca, 0x78ec, 0xa084, 0x0003, 0x0040, + 0x39ca, 0xa184, 0x0100, 0x0040, 0x32df, 0xa184, 0x0007, 0x0079, + 0x32f1, 0x32f9, 0x32c3, 0x3233, 0x42dd, 0x4330, 0x4330, 0x42dd, + 0x4328, 0x1078, 0x42ed, 0x007c, 0xa282, 0x0005, 0x0050, 0x3302, + 0x1078, 0x2aef, 0x2300, 0x0079, 0x3305, 0x3308, 0x354d, 0x355a, + 0x2200, 0x0079, 0x330b, 0x3325, 0x3312, 0x3325, 0x3310, 0x3530, + 0x1078, 0x2aef, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa082, + 0x0020, 0x0048, 0x40a7, 0xa08a, 0x0004, 0x00c8, 0x40a7, 0x0079, + 0x3321, 0x40a7, 0x40a7, 0x40a7, 0x4051, 0x789b, 0x0018, 0x79a8, + 0xa184, 0x0080, 0x0040, 0x3336, 0x0078, 0x40a7, 0x7000, 0xa005, + 0x00c0, 0x332c, 0x2011, 0x0004, 0x0078, 0x3b6b, 0xa184, 0x00ff, + 0xa08a, 0x0010, 0x00c8, 0x40a7, 0x0079, 0x333e, 0x3350, 0x334e, + 0x3366, 0x336a, 0x342e, 0x40a7, 0x40a7, 0x3430, 0x40a7, 0x40a7, + 0x352c, 0x352c, 0x40a7, 0x40a7, 0x40a7, 0x352e, 0x1078, 0x2aef, + 0xa684, 0x1000, 0x0040, 0x335c, 0x2001, 0x0500, 0x8000, 0x8000, + 0x783a, 0x781b, 0x0091, 0x007c, 0x6818, 0xd0fc, 0x0040, 0x3364, + 0x681b, 0x001d, 0x0078, 0x3354, 0x0078, 0x42dd, 0x681b, 0x001d, + 0x0078, 0x40b5, 0x6920, 0x6922, 0xa684, 0x1800, 0x00c0, 0x33be, + 0x6820, 0xa084, 0x0001, 0x00c0, 0x33c4, 0x6818, 0xa086, 0x0008, + 0x00c0, 0x337c, 0x681b, 0x0000, 0xd6d4, 0x0040, 0x342b, 0xd6bc, + 0x0040, 0x33bb, 0x708f, 0x0000, 0x6818, 0xa084, 0x003f, 0xa08a, + 0x000d, 0x0050, 0x33bb, 0xa08a, 0x000c, 0x718e, 0x2001, 0x000c, + 0x800c, 0x7192, 0x789b, 0x0061, 0x78aa, 0x157e, 0x137e, 0x147e, + 0x017e, 0xb28c, 0x0300, 0x0040, 0x33ad, 0x007e, 0x2001, 0x5d02, + 0x2004, 0xd0ec, 0x007f, 0x0040, 0x33a9, 0x20a1, 0x012b, 0x0078, + 0x33af, 0x20a1, 0x022b, 0x0078, 0x33af, 0x20a1, 0x012b, 0x017f, + 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, + 0x147f, 0x137f, 0x157f, 0x781b, 0x0057, 0x007c, 0xd6e4, 0x0040, + 0x33c4, 0x781b, 0x0064, 0x007c, 0xa684, 0x0060, 0x0040, 0x3428, + 0xd6dc, 0x0040, 0x3428, 0xd6fc, 0x00c0, 0x33d0, 0x0078, 0x33e9, + 0xc6fc, 0x7e5a, 0x6eb6, 0x789b, 0x0076, 0x7aac, 0x79ac, 0x78ac, + 0x801b, 0x00c8, 0x33dc, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, + 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, + 0x68ae, 0xd6f4, 0x0040, 0x33ef, 0xc6f4, 0x7e5a, 0x6eb6, 0x7000, + 0xa086, 0x0003, 0x00c0, 0x33fd, 0x007e, 0x1078, 0x5218, 0x1078, + 0x5514, 0x007f, 0x781b, 0x0063, 0x007c, 0xa006, 0x1078, 0x564d, + 0x6ab0, 0x69ac, 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0040, 0x340c, + 0x2200, 0xa422, 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x7cda, 0x6ba6, + 0x7bd6, 0x7bde, 0x2300, 0xa405, 0x00c0, 0x341c, 0xc6f5, 0x7e5a, + 0x6eb6, 0x781b, 0x0063, 0x007c, 0x781b, 0x0063, 0x2200, 0xa115, + 0x00c0, 0x3425, 0x1078, 0x5514, 0x007c, 0x1078, 0x5568, 0x007c, + 0x781b, 0x0064, 0x007c, 0x781b, 0x0057, 0x007c, 0x1078, 0x2aef, + 0x0078, 0x3480, 0x6920, 0xd1c4, 0x0040, 0x3445, 0xc1c4, 0x6922, + 0x0c7e, 0x7060, 0x2060, 0x6000, 0xc0e4, 0x6002, 0x6004, 0xa084, + 0xfff5, 0x6006, 0x0c7f, 0x0078, 0x3474, 0xd1cc, 0x0040, 0x3474, + 0xc1cc, 0x6922, 0x0c7e, 0x7060, 0x2060, 0x6000, 0xc0ec, 0x6002, + 0x6004, 0xc0a4, 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xd19c, 0x0040, + 0x3474, 0x1078, 0x41df, 0x1078, 0x3ee1, 0x88ff, 0x0040, 0x3474, + 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, + 0x00c0, 0x346f, 0x782b, 0x3008, 0x781b, 0x0055, 0x007c, 0x782b, + 0x3008, 0x781b, 0x0064, 0x007c, 0x7e58, 0xd6d4, 0x00c0, 0x347b, + 0x781b, 0x0057, 0x007c, 0x781b, 0x0064, 0x007c, 0x0078, 0x40ae, + 0x2019, 0x0000, 0x7990, 0xa18c, 0x0007, 0x00c0, 0x348e, 0x6820, + 0xa084, 0x0100, 0x0040, 0x347e, 0x2009, 0x0008, 0x789b, 0x0010, + 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, 0x00c0, 0x34c5, 0x2300, + 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040, 0x34bd, 0x0048, 0x34a2, + 0x0078, 0x34bf, 0xa380, 0x0002, 0xa102, 0x00c8, 0x34bd, 0x6920, + 0xa18c, 0xfcff, 0x6922, 0x0c7e, 0x7060, 0x2060, 0x6000, 0xa084, + 0xefef, 0x6002, 0x6004, 0xa084, 0xffe5, 0x6006, 0x0c7f, 0x7e58, + 0xa6b4, 0xfffb, 0x7e5a, 0x0078, 0x3475, 0x0078, 0x3432, 0x24a8, + 0x7aa8, 0x00f0, 0x34bf, 0x0078, 0x3490, 0xa284, 0x00f0, 0xa086, + 0x0020, 0x00c0, 0x351d, 0x8318, 0x8318, 0x2300, 0xa102, 0x0040, + 0x34d5, 0x0048, 0x34d5, 0x0078, 0x351a, 0xa286, 0x0023, 0x0040, + 0x347e, 0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, 0xa684, 0xfff1, + 0xc0a5, 0x2030, 0x7e5a, 0x6008, 0xc0a5, 0x600a, 0x0c7e, 0x7060, + 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xd1a4, 0x0040, 0x34f6, + 0x1078, 0x41df, 0x1078, 0x4002, 0x0078, 0x3504, 0x0c7e, 0x7060, + 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xd19c, 0x0040, 0x3474, + 0x1078, 0x41df, 0x1078, 0x3ee1, 0x88ff, 0x0040, 0x3474, 0x789b, + 0x0060, 0x2800, 0x78aa, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x3515, + 0x782b, 0x3008, 0x781b, 0x0055, 0x007c, 0x782b, 0x3008, 0x781b, + 0x0064, 0x007c, 0x7aa8, 0x0078, 0x3490, 0x8318, 0x2300, 0xa102, + 0x0040, 0x3526, 0x0048, 0x3526, 0x0078, 0x3490, 0xa284, 0x0080, + 0x00c0, 0x40b5, 0x0078, 0x40ae, 0x0078, 0x40b5, 0x0078, 0x40a7, + 0x7060, 0xa04d, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa08e, + 0x0001, 0x0040, 0x353d, 0x1078, 0x2aef, 0x7aa8, 0xa294, 0x00ff, + 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x40a7, 0x0079, + 0x3549, 0x40a7, 0x3e2d, 0x40a7, 0x3fa4, 0xa282, 0x0000, 0x00c0, + 0x3553, 0x1078, 0x2aef, 0x1078, 0x40c8, 0x782b, 0x3008, 0x781b, + 0x0064, 0x007c, 0xa282, 0x0003, 0x00c0, 0x3560, 0x1078, 0x2aef, + 0xd4fc, 0x00c0, 0x3580, 0x706c, 0xa005, 0x0040, 0x3569, 0x1078, + 0x2aef, 0x6f14, 0x777e, 0xa7bc, 0x8f00, 0x1078, 0x41e3, 0x6008, + 0xa085, 0x0021, 0x600a, 0x8738, 0xa784, 0x001f, 0x00c0, 0x356d, + 0x1078, 0x40cc, 0x706f, 0x0002, 0x701b, 0x0009, 0x0078, 0x3582, + 0x1078, 0x40d8, 0x782b, 0x3008, 0x781b, 0x0064, 0x007c, 0xa282, + 0x0004, 0x0050, 0x358d, 0x1078, 0x2aef, 0x2300, 0x0079, 0x3590, + 0x3593, 0x36c1, 0x36f2, 0xa286, 0x0003, 0x0040, 0x3599, 0x1078, + 0x2aef, 0x2001, 0x0000, 0x704a, 0x68cc, 0xa005, 0x0040, 0x35a2, + 0x7003, 0x0003, 0x68a0, 0xd0ec, 0x0040, 0x35a9, 0x6008, 0xc08d, + 0x600a, 0x7000, 0xa084, 0x000f, 0x0079, 0x35ae, 0x2b63, 0x35bb, + 0x35b8, 0x37d9, 0x385e, 0x2b63, 0x35b6, 0x35b6, 0x1078, 0x2aef, + 0x6008, 0xc0d4, 0x600a, 0xd6e4, 0x00c0, 0x35c4, 0x1078, 0x5218, + 0x2009, 0x0000, 0x0078, 0x3669, 0x7868, 0xa08c, 0x00ff, 0x0040, + 0x3603, 0xa186, 0x0008, 0x00c0, 0x35da, 0x6008, 0xc0a4, 0x600a, + 0x1078, 0x3d5e, 0x0040, 0x3603, 0x1078, 0x3dd4, 0x1078, 0x5218, + 0x0078, 0x35eb, 0xa186, 0x0028, 0x00c0, 0x3603, 0x6018, 0xa005, + 0x0040, 0x35cd, 0x8001, 0x0040, 0x35cd, 0x8001, 0x0040, 0x35cd, + 0x601e, 0x0078, 0x35cd, 0x6820, 0xd084, 0x0040, 0x2b63, 0xc084, + 0x6822, 0x1078, 0x2c7d, 0x7064, 0x0c7e, 0x2060, 0x6800, 0x6002, + 0x0c7f, 0x6004, 0x6802, 0xa005, 0x2d00, 0x00c0, 0x3600, 0x6002, + 0x6006, 0x0078, 0x2b63, 0x017e, 0x81ff, 0x00c0, 0x3622, 0x71f4, + 0xd1b4, 0x0040, 0x3622, 0x1078, 0x433b, 0x00c0, 0x3622, 0x0d7e, + 0x70dc, 0xa06d, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x68b4, 0x785a, + 0x781b, 0x004f, 0x7050, 0xc08d, 0x780a, 0xc1b4, 0x71f6, 0x7003, + 0x0030, 0x0d7f, 0x1078, 0x3708, 0x017f, 0x81ff, 0x0040, 0x3669, + 0xa684, 0x5f00, 0x681e, 0x682b, 0x0000, 0x6f14, 0xa186, 0x0002, + 0x00c0, 0x366a, 0x1078, 0x2c6b, 0x1078, 0x2c8c, 0x6820, 0xa084, + 0x0800, 0x00c0, 0x366a, 0x8717, 0xa294, 0x000f, 0x8213, 0x8213, + 0x8213, 0xb284, 0x0300, 0x0040, 0x3649, 0xa290, 0x61c0, 0x0078, + 0x364b, 0xa290, 0x6240, 0xa290, 0x0000, 0x221c, 0xd3c4, 0x00c0, + 0x3653, 0x0078, 0x3659, 0x8210, 0x2204, 0xa085, 0x0018, 0x2012, + 0x8211, 0xd3d4, 0x0040, 0x3664, 0x68a0, 0xd0c4, 0x00c0, 0x3664, + 0x1078, 0x378a, 0x0078, 0x2b63, 0x6008, 0xc08d, 0x600a, 0x0078, + 0x366a, 0x692a, 0x6916, 0x6818, 0xd0fc, 0x0040, 0x3671, 0x7048, + 0x681a, 0xa68c, 0x5f00, 0x691e, 0x6010, 0xa005, 0x0040, 0x367d, + 0x8001, 0x00d0, 0x367d, 0x1078, 0x2aef, 0x6012, 0x6018, 0xa005, + 0x0040, 0x3686, 0x8001, 0x601a, 0x00c0, 0x3689, 0x6008, 0xc0a4, + 0x600a, 0x6820, 0xd084, 0x00c0, 0x3695, 0x6800, 0xa005, 0x00c0, + 0x3692, 0x6002, 0x6006, 0x0078, 0x3699, 0x7064, 0x2060, 0x6800, + 0x6002, 0x2061, 0x5d00, 0x6807, 0x0103, 0x2d08, 0x206b, 0x0000, + 0x6060, 0x8000, 0x6062, 0x6064, 0xa005, 0x6166, 0x0040, 0x36ab, + 0x2d02, 0x0078, 0x36ac, 0x616a, 0x7000, 0xa086, 0x0030, 0x00c0, + 0x2b63, 0x7003, 0x0002, 0x70dc, 0xa06d, 0x68bc, 0x7042, 0x70d8, + 0xa065, 0x68c0, 0x7062, 0x2d00, 0x7056, 0xad80, 0x0009, 0x7046, + 0x007c, 0xa282, 0x0004, 0x0048, 0x36c7, 0x1078, 0x2aef, 0x2200, + 0x0079, 0x36ca, 0x36c5, 0x36ce, 0x36da, 0x36ce, 0x7000, 0xa086, + 0x0005, 0x0040, 0x36d7, 0x1078, 0x40c8, 0x782b, 0x3008, 0x781b, + 0x0064, 0x007c, 0x7890, 0x8007, 0x8001, 0xa084, 0x0007, 0xa080, + 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa186, 0x0003, 0x0040, + 0x36ef, 0xa186, 0x0000, 0x0040, 0x36ef, 0x0078, 0x40a7, 0x781b, + 0x0064, 0x007c, 0x6820, 0xc095, 0x6822, 0x82ff, 0x00c0, 0x36fc, + 0x1078, 0x40c8, 0x0078, 0x3703, 0x8211, 0x0040, 0x3701, 0x1078, + 0x2aef, 0x1078, 0x40d8, 0x782b, 0x3008, 0x781b, 0x0064, 0x007c, + 0xa684, 0x0060, 0x00c0, 0x3716, 0x2d00, 0xa005, 0x0040, 0x3789, + 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x3789, 0xd6dc, 0x00c0, + 0x372e, 0x68b4, 0xd0dc, 0x00c0, 0x372e, 0x6998, 0x6a94, 0x692e, + 0x6a32, 0x7048, 0xa005, 0x00c0, 0x372b, 0x2200, 0xa105, 0x0040, + 0x372d, 0x704b, 0x0015, 0x0078, 0x5218, 0x007c, 0xd6ac, 0x0040, + 0x3758, 0xd6f4, 0x0040, 0x373a, 0x682f, 0x0000, 0x6833, 0x0000, + 0x0078, 0x5218, 0x68b4, 0xa084, 0x4000, 0xa635, 0xd6f4, 0x00c0, + 0x3734, 0x7048, 0xa005, 0x00c0, 0x3747, 0x704b, 0x0015, 0xd6dc, + 0x00c0, 0x3752, 0x68b4, 0xd0dc, 0x0040, 0x3752, 0x69a8, 0x6aa4, + 0x0078, 0x3754, 0x79d8, 0x7adc, 0x692e, 0x6a32, 0x0078, 0x5218, + 0xd6f4, 0x0040, 0x3761, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, + 0x5218, 0x68b4, 0xa084, 0x4800, 0xa635, 0xd6f4, 0x00c0, 0x375b, + 0x7048, 0xa005, 0x00c0, 0x376e, 0x704b, 0x0015, 0x79d8, 0x7adc, + 0x78d0, 0x80fb, 0x00c8, 0x3775, 0x8000, 0xa084, 0x003f, 0xa108, + 0xa291, 0x0000, 0x692e, 0x6a32, 0x2100, 0xa205, 0x00c0, 0x3782, + 0x0078, 0x5218, 0x7000, 0xa086, 0x0006, 0x0040, 0x3789, 0x0078, + 0x5218, 0x007c, 0x6008, 0xc0cd, 0xd3cc, 0x0040, 0x3790, 0xc08d, + 0x600a, 0x681b, 0x0006, 0x688f, 0x0000, 0x6893, 0x0000, 0x6a30, + 0x692c, 0x6a3e, 0x6942, 0x682f, 0x0003, 0x6833, 0x0000, 0x6837, + 0x0020, 0x6897, 0x0000, 0x689b, 0x0020, 0x68b3, 0x0000, 0x68af, + 0x0000, 0x7000, 0x0079, 0x37ac, 0x2b63, 0x37be, 0x37b6, 0x37b4, + 0x37b4, 0x37b4, 0x37b4, 0x37b4, 0x1078, 0x2aef, 0x6820, 0xd084, + 0x00c0, 0x37be, 0x1078, 0x3dbf, 0x0078, 0x37c4, 0x7064, 0x2c50, + 0x2060, 0x6800, 0x6002, 0x2a60, 0xb28c, 0x0300, 0x0040, 0x37cc, + 0x2021, 0x5d5a, 0x0078, 0x37ce, 0x2021, 0x5d9a, 0x2404, 0xa005, + 0x0040, 0x37d5, 0x2020, 0x0078, 0x37ce, 0x2d22, 0x206b, 0x0000, + 0x007c, 0x1078, 0x3dc6, 0x1078, 0x3dd4, 0x6008, 0xc0cc, 0x600a, + 0x789b, 0x000e, 0x6f14, 0x6817, 0x0002, 0xb28c, 0x0300, 0x0040, + 0x37ed, 0x2009, 0x0000, 0x0078, 0x37ef, 0x2009, 0x0001, 0x1078, + 0x5692, 0xd6dc, 0x0040, 0x37f7, 0x691c, 0xc1ed, 0x691e, 0x6818, + 0xd0fc, 0x0040, 0x3806, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x3804, + 0x681b, 0x001e, 0x0078, 0x3806, 0x681b, 0x0000, 0xb284, 0x0300, + 0x00c0, 0x380e, 0x2021, 0x5d9a, 0x0078, 0x3810, 0x2021, 0x5d5a, + 0x2404, 0xad06, 0x0040, 0x3815, 0x7464, 0x6800, 0x2022, 0x68cf, + 0x0000, 0x70f8, 0xc084, 0x70fa, 0x6a3c, 0x6940, 0x6a32, 0x692e, + 0x68c0, 0x2060, 0x6000, 0xd0a4, 0x0040, 0x385a, 0x2041, 0x0021, + 0x2049, 0x0005, 0x2051, 0x0020, 0x0d7e, 0x0f7e, 0x157e, 0x147e, + 0x2079, 0x5d00, 0x1078, 0x1e18, 0x147f, 0x157f, 0x0f7f, 0x70ec, + 0x2010, 0x2009, 0x0101, 0x027e, 0x2204, 0xa06d, 0x0040, 0x384a, + 0x6814, 0xa706, 0x0040, 0x3847, 0x6800, 0x0078, 0x383d, 0x6820, + 0xc0d5, 0x6822, 0x027f, 0x8210, 0x8109, 0x00c0, 0x383b, 0x0d7f, + 0x706f, 0x0003, 0x7087, 0x0000, 0x777e, 0x708b, 0x000f, 0x71f4, + 0xc1dc, 0x71f6, 0x1078, 0x21ca, 0x0078, 0x2b63, 0x1078, 0x3708, + 0x682b, 0x0000, 0x789b, 0x000e, 0x6f14, 0x1078, 0x4370, 0xa08c, + 0x00ff, 0x6916, 0x6818, 0xd0fc, 0x0040, 0x3870, 0x7048, 0x681a, + 0xa68c, 0x5f00, 0x691e, 0x706f, 0x0000, 0x0078, 0x2b63, 0x7000, + 0xa005, 0x00c0, 0x387d, 0x0078, 0x2b63, 0xa006, 0x1078, 0x5218, + 0x6817, 0x0000, 0x6920, 0xd1ac, 0x00c0, 0x3888, 0x681b, 0x0014, + 0xa68c, 0x5f00, 0x691e, 0x682b, 0x0000, 0x6820, 0xa084, 0x00ff, + 0x6822, 0x7000, 0x0079, 0x3894, 0x2b63, 0x38a1, 0x389e, 0x38a3, + 0x38a3, 0x38a3, 0x389c, 0x389c, 0x1078, 0x2aef, 0x6008, 0xc0d4, + 0x600a, 0x1078, 0x3dd4, 0x6008, 0xc0a4, 0x600a, 0x0078, 0x3d84, + 0x2300, 0x0079, 0x38ab, 0x38ae, 0x38b0, 0x38f6, 0x1078, 0x2aef, + 0x7000, 0xa00d, 0x0079, 0x38b4, 0x2b63, 0x38c4, 0x38be, 0x38e8, + 0x38c4, 0x38f3, 0x38bc, 0x38bc, 0x1078, 0x2aef, 0x6894, 0x78d6, + 0x78de, 0x6898, 0x78d2, 0x78da, 0xa684, 0x0060, 0xa086, 0x0060, + 0x00c0, 0x38e5, 0xc6ac, 0xc6f4, 0xc6ed, 0x7e5a, 0x681c, 0xc0ac, + 0x681e, 0xa186, 0x0002, 0x0040, 0x38d7, 0x1078, 0x5218, 0x1078, + 0x5514, 0x781b, 0x0064, 0x71f4, 0xd1b4, 0x00c0, 0x2b53, 0x70c4, + 0xa086, 0x0001, 0x00c0, 0x2bb9, 0x007c, 0xd6ec, 0x0040, 0x38cc, + 0x6818, 0xd0fc, 0x0040, 0x38f3, 0x681b, 0x0015, 0xd6f4, 0x0040, + 0x38f3, 0x681b, 0x0007, 0x1078, 0x42ed, 0x007c, 0x1078, 0x2aef, + 0x2300, 0x0079, 0x38fb, 0x38fe, 0x3900, 0x3941, 0x1078, 0x2aef, + 0x7000, 0xa00d, 0x0079, 0x3904, 0x2b63, 0x3914, 0x390e, 0x3938, + 0x3914, 0x393e, 0x390c, 0x390c, 0x1078, 0x2aef, 0x6894, 0x78d6, + 0x78de, 0x6898, 0x78d2, 0x78da, 0xa684, 0x0060, 0xa086, 0x0060, + 0x00c0, 0x3935, 0xa6b4, 0xbfbf, 0xc6ed, 0x7e5a, 0xa186, 0x0002, + 0x0040, 0x3924, 0x1078, 0x5218, 0x1078, 0x5514, 0x781b, 0x0064, + 0x681c, 0xc0b4, 0x681e, 0x71f4, 0xd1b4, 0x00c0, 0x2b53, 0x70c4, + 0xa086, 0x0001, 0x00c0, 0x2bb9, 0x007c, 0xd6ec, 0x0040, 0x391c, + 0x6818, 0xd0fc, 0x0040, 0x393e, 0x681b, 0x0007, 0x781b, 0x00d3, + 0x007c, 0x6820, 0xc095, 0x6822, 0x1078, 0x4276, 0xc6dd, 0x1078, + 0x40c8, 0x782b, 0x3008, 0x781b, 0x0064, 0x007c, 0x2300, 0x0079, + 0x3951, 0x3954, 0x3956, 0x3958, 0x1078, 0x2aef, 0x0078, 0x40b5, + 0xd6d4, 0x00c0, 0x397e, 0x79e4, 0xd1ac, 0x0040, 0x3966, 0x78ec, + 0xa084, 0x0003, 0x0040, 0x3966, 0x782b, 0x3009, 0x789b, 0x0060, + 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x79e4, 0xd1ac, 0x0040, + 0x3976, 0x78ec, 0xa084, 0x0003, 0x00c0, 0x397a, 0x2001, 0x0014, + 0x0078, 0x359b, 0xa184, 0x0007, 0x0079, 0x39b4, 0x7a90, 0xa294, + 0x0007, 0x789b, 0x0060, 0x79a8, 0x81ff, 0x0040, 0x39b2, 0x789b, + 0x0010, 0x7ba8, 0xa384, 0x0001, 0x00c0, 0x39a5, 0x7ba8, 0x7ba8, + 0xa386, 0x0001, 0x00c0, 0x3998, 0x2009, 0xfff7, 0x0078, 0x399e, + 0xa386, 0x0003, 0x00c0, 0x39a5, 0x2009, 0xffef, 0x0c7e, 0x7060, + 0x2060, 0x6004, 0xa104, 0x6006, 0x0c7f, 0x789b, 0x0060, 0x78ab, + 0x0000, 0xa684, 0xfffb, 0x785a, 0x782b, 0x3009, 0x6920, 0xa18c, + 0xfcff, 0x6922, 0x0078, 0x42dd, 0x3240, 0x324a, 0x39be, 0x39c4, + 0x39bc, 0x39bc, 0x42dd, 0x42dd, 0x1078, 0x2aef, 0x6920, 0xa18c, + 0xfcff, 0x6922, 0x0078, 0x42e5, 0x6920, 0xa18c, 0xfcff, 0x6922, + 0x0078, 0x42dd, 0x79e4, 0xa184, 0x0030, 0x0040, 0x39d4, 0x78ec, + 0xa084, 0x0003, 0x00c0, 0x39fe, 0x7000, 0xa086, 0x0004, 0x00c0, + 0x39ee, 0x706c, 0xa086, 0x0002, 0x00c0, 0x39e4, 0x2011, 0x0002, + 0x2019, 0x0000, 0x0078, 0x30b4, 0x706c, 0xa086, 0x0006, 0x0040, + 0x39de, 0x706c, 0xa086, 0x0004, 0x0040, 0x39de, 0x7000, 0xa086, + 0x0000, 0x0040, 0x2b53, 0x6820, 0xd0ac, 0x00c0, 0x359b, 0x6818, + 0xc0fd, 0x681a, 0x2001, 0x0014, 0x0078, 0x359b, 0xa184, 0x0007, + 0x0079, 0x3a02, 0x42dd, 0x42dd, 0x3a0a, 0x42dd, 0x4330, 0x4330, + 0x42dd, 0x42dd, 0xd6bc, 0x0040, 0x3a4e, 0x718c, 0x81ff, 0x0040, + 0x3a4e, 0xa182, 0x000d, 0x00d0, 0x3a19, 0x708f, 0x0000, 0x0078, + 0x3a1e, 0xa182, 0x000c, 0x708e, 0x2009, 0x000c, 0x789b, 0x0061, + 0x79aa, 0x157e, 0x137e, 0x147e, 0x7090, 0x8114, 0xa210, 0x7292, + 0xa080, 0x000b, 0xad00, 0x2098, 0x017e, 0xb28c, 0x0300, 0x0040, + 0x3a41, 0x007e, 0x2001, 0x5d02, 0x2004, 0xd0ec, 0x007f, 0x0040, + 0x3a3d, 0x20a1, 0x012b, 0x0078, 0x3a43, 0x20a1, 0x022b, 0x0078, + 0x3a43, 0x20a1, 0x012b, 0x017f, 0x789b, 0x0000, 0x8108, 0x81ac, + 0x53a6, 0x147f, 0x137f, 0x157f, 0x0078, 0x42e5, 0xd6d4, 0x00c0, + 0x3aa1, 0x6820, 0xd084, 0x0040, 0x42e5, 0xa68c, 0x0060, 0xa684, + 0x0060, 0x0040, 0x3a60, 0xa086, 0x0060, 0x00c0, 0x3a60, 0xc1f5, + 0xc194, 0x795a, 0x69b6, 0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, + 0x0061, 0x6818, 0xc0fd, 0x681a, 0x78aa, 0x8008, 0x810c, 0x0040, + 0x3ded, 0xa18c, 0x00f8, 0x00c0, 0x3ded, 0x157e, 0x137e, 0x147e, + 0x017e, 0xb28c, 0x0300, 0x0040, 0x3a8d, 0x007e, 0x2001, 0x5d02, + 0x2004, 0xd0ec, 0x007f, 0x0040, 0x3a89, 0x20a1, 0x012b, 0x0078, + 0x3a8f, 0x20a1, 0x022b, 0x0078, 0x3a8f, 0x20a1, 0x012b, 0x017f, + 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, + 0x147f, 0x137f, 0x157f, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x0078, + 0x42e5, 0x6818, 0xd0fc, 0x0040, 0x3aa7, 0x681b, 0x0008, 0x6820, + 0xc0ad, 0x6822, 0x1078, 0x40d0, 0x781b, 0x00c8, 0x007c, 0x2300, + 0x0079, 0x3ab2, 0x3ab7, 0x3b56, 0x3ab5, 0x1078, 0x2aef, 0x7000, + 0xa084, 0x000f, 0x0079, 0x3abc, 0x2b63, 0x3b04, 0x3ac6, 0x3acf, + 0x3ac4, 0x2b63, 0x3ac4, 0x3ac4, 0x1078, 0x2aef, 0x681c, 0xd0ec, + 0x0040, 0x3ae0, 0x6008, 0xc08d, 0x600a, 0x0078, 0x3ae0, 0x68cc, + 0xa005, 0x00c0, 0x3b04, 0x6920, 0xa18d, 0x0001, 0x6922, 0x68cf, + 0x0001, 0x70f8, 0xc085, 0x70fa, 0x6800, 0x706a, 0x0078, 0x3af1, + 0x6920, 0xc185, 0x6922, 0x6800, 0x6006, 0xa005, 0x00c0, 0x3ae9, + 0x6002, 0x6008, 0xc0d4, 0x600a, 0x681c, 0xa084, 0x000e, 0x00c0, + 0x3afb, 0x2009, 0xa4d0, 0xb284, 0x0300, 0x0040, 0x3b00, 0x2009, + 0xa3c0, 0x0078, 0x3b00, 0x702c, 0x68ba, 0x7140, 0x70ec, 0xa108, + 0x2104, 0x6802, 0x2d0a, 0x7166, 0x6eb6, 0xa684, 0x0060, 0x0040, + 0x3b54, 0xd6dc, 0x00c0, 0x3b17, 0xa684, 0x7fff, 0x68b6, 0x6894, + 0x68a6, 0x6898, 0x68aa, 0x1078, 0x5218, 0x0078, 0x3b54, 0xd6ac, + 0x0040, 0x3b2a, 0x68cc, 0xa005, 0x0040, 0x3b22, 0x1078, 0x5692, + 0x0078, 0x3b24, 0x1078, 0x5218, 0x79d8, 0x7adc, 0x69aa, 0x6aa6, + 0x0078, 0x3b30, 0x1078, 0x41f7, 0x69aa, 0x6aa6, 0x1078, 0x5218, + 0xd6fc, 0x0040, 0x3b54, 0xa684, 0x7fff, 0x68b6, 0x789b, 0x0076, + 0x1078, 0x4370, 0x2010, 0x1078, 0x4370, 0x2008, 0xd6ac, 0x00c0, + 0x3b4c, 0x1078, 0x4370, 0x801b, 0x00c8, 0x3b47, 0x8000, 0xa084, + 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, + 0x6b94, 0x2200, 0xa303, 0x68ae, 0x0078, 0x2b63, 0x0078, 0x40b5, + 0x7047, 0x0000, 0xa282, 0x0006, 0x0050, 0x3b60, 0x1078, 0x2aef, + 0x7000, 0xa086, 0x0007, 0x1040, 0x444f, 0x2300, 0x0079, 0x3b68, + 0x3b6b, 0x3ba2, 0x3bc3, 0x2200, 0x0079, 0x3b6e, 0x3ba0, 0x40b5, + 0x3b74, 0x3ba0, 0x3be6, 0x3c59, 0x7003, 0x0005, 0xb284, 0x0300, + 0x0040, 0x3b7e, 0x2001, 0xa6e0, 0x0078, 0x3b80, 0x2001, 0xa714, + 0x2068, 0x7056, 0x157e, 0x20a9, 0x0034, 0x2003, 0x0000, 0x8000, + 0x00f0, 0x3b85, 0x157f, 0xad80, 0x0009, 0x7046, 0xb284, 0x0300, + 0x0040, 0x3b96, 0x6817, 0x0000, 0x0078, 0x3b98, 0x6817, 0x8000, + 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x0078, 0x40a7, + 0x1078, 0x2aef, 0x2200, 0xa086, 0x0003, 0x0040, 0x3be6, 0x7003, + 0x0005, 0xb284, 0x0300, 0x0040, 0x3bb1, 0x2001, 0xa6e0, 0x0078, + 0x3bb3, 0x2001, 0xa714, 0x2068, 0x7056, 0xad80, 0x0009, 0x7046, + 0x2200, 0x0079, 0x3bbb, 0x40b5, 0x3bc1, 0x3bc1, 0x3be6, 0x3bc1, + 0x40b5, 0x1078, 0x2aef, 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, + 0x3bcd, 0x2001, 0xa6e0, 0x0078, 0x3bcf, 0x2001, 0xa714, 0x2068, + 0x7056, 0xad80, 0x0009, 0x7046, 0x2200, 0x0079, 0x3bd7, 0x3bdf, + 0x3bdd, 0x3bdd, 0x3bdf, 0x3bdd, 0x3bdf, 0x1078, 0x2aef, 0x1078, + 0x40d8, 0x782b, 0x3008, 0x781b, 0x0064, 0x007c, 0x7000, 0xa086, + 0x0002, 0x00c0, 0x3bf8, 0x70f4, 0xc0b5, 0x70f6, 0x2c00, 0x70da, + 0x2d00, 0x70de, 0x0078, 0x3bfd, 0x1078, 0x5218, 0x0078, 0x3bfd, + 0x7000, 0xa086, 0x0003, 0x0040, 0x3bf4, 0x7003, 0x0001, 0x7a80, + 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, + 0x2069, 0xa3c0, 0xb284, 0x0300, 0x00c0, 0x3c11, 0xc2fd, 0x2069, + 0xa4d0, 0x2d04, 0x2d08, 0x7166, 0xa06d, 0x0040, 0x3c1e, 0x6814, + 0xa206, 0x0040, 0x3c3e, 0x6800, 0x0078, 0x3c12, 0x7003, 0x0005, + 0xd2fc, 0x00c0, 0x3c27, 0x2001, 0xa6e0, 0x0078, 0x3c29, 0x2001, + 0xa714, 0x2068, 0x7056, 0x157e, 0x20a9, 0x0034, 0x2003, 0x0000, + 0x8000, 0x00f0, 0x3c2e, 0x157f, 0xad80, 0x0009, 0x7046, 0x6a16, + 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a, + 0x6920, 0xa184, 0x0c00, 0x0040, 0x3ce3, 0x706c, 0xa086, 0x0006, + 0x00c0, 0x3c50, 0x707c, 0xa206, 0x00c0, 0x3c50, 0x706e, 0x7086, + 0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922, 0x1078, 0x40d0, 0x0078, + 0x3ce3, 0x7200, 0xa286, 0x0002, 0x00c0, 0x3c6b, 0x70f4, 0xc0b5, + 0x70f6, 0x2c00, 0x70da, 0x2d00, 0x70de, 0x0078, 0x3c6f, 0x1078, + 0x5218, 0x0078, 0x3c6f, 0xa286, 0x0003, 0x0040, 0x3c67, 0x7003, + 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, + 0x001f, 0xa215, 0xb284, 0x0300, 0x00c0, 0x3c7f, 0xc2fd, 0x79a8, + 0x79a8, 0xa18c, 0x00ff, 0x2118, 0x70ec, 0xa168, 0x2d04, 0x2d08, + 0x7166, 0xa06d, 0x0040, 0x3c93, 0x6814, 0xa206, 0x0040, 0x3cbc, + 0x6800, 0x0078, 0x3c87, 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, + 0x3c9d, 0x2001, 0xa6e0, 0x0078, 0x3c9f, 0x2001, 0xa714, 0x2068, + 0x7056, 0x157e, 0x20a9, 0x0034, 0x2003, 0x0000, 0x8000, 0x00f0, + 0x3ca4, 0x157f, 0xad80, 0x0009, 0x7046, 0xb284, 0x0300, 0x0040, + 0x3cb4, 0xc2fc, 0x0078, 0x3cb5, 0xc2fd, 0x6a16, 0x68b7, 0x0700, + 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x6920, 0xa184, 0x0c00, + 0x0040, 0x3ce3, 0xd0dc, 0x0040, 0x3cd8, 0x706c, 0xa086, 0x0004, + 0x00c0, 0x3cd4, 0x707c, 0xa206, 0x00c0, 0x3cd4, 0x7080, 0xa306, + 0x00c0, 0x3cd4, 0x706e, 0x7086, 0x1078, 0x40d4, 0x0078, 0x3ce3, + 0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922, 0x1078, 0x40d0, 0x7087, + 0x0000, 0x0078, 0x3ce3, 0x68c0, 0x7062, 0xa684, 0x0060, 0x0040, + 0x3d27, 0x6b98, 0x6c94, 0x69ac, 0x68b0, 0xa105, 0x00c0, 0x3d0d, + 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa6b4, 0xb7ff, 0xa684, 0x0060, + 0xa086, 0x0060, 0x0040, 0x3d2b, 0x68cc, 0xa005, 0x0040, 0x3d08, + 0x7003, 0x0003, 0x682b, 0x0000, 0x1078, 0x5501, 0x0078, 0x3d0a, + 0x1078, 0x5514, 0xc6ed, 0x0078, 0x3d2b, 0x68b0, 0xa31a, 0x2100, + 0xa423, 0x2400, 0xa305, 0x0040, 0x3d2b, 0x7bd2, 0x7bda, 0x7cd6, + 0x7cde, 0xc6f4, 0x68cc, 0xa005, 0x0040, 0x3d24, 0x7003, 0x0003, + 0x1078, 0x5501, 0x0078, 0x3d2b, 0x68b0, 0x1078, 0x5568, 0x2019, + 0x0000, 0x2021, 0x0000, 0x7e5a, 0x2009, 0x0064, 0xa684, 0x0004, + 0x0040, 0x3d4b, 0x78e4, 0xa084, 0x0030, 0x0040, 0x3d43, 0x78ec, + 0xa084, 0x0003, 0x0040, 0x3d43, 0x782b, 0x3008, 0x2019, 0x0000, + 0x2320, 0x0078, 0x3d4b, 0x0f7e, 0x2079, 0x5d00, 0x1078, 0x5218, + 0x0f7f, 0x0040, 0x2b63, 0x791a, 0x2d00, 0x7056, 0x68c4, 0x2060, + 0x2300, 0xa405, 0x0040, 0x2b53, 0x71f4, 0xd1b4, 0x00c0, 0x2b53, + 0x70c4, 0xa086, 0x0001, 0x00c0, 0x2bb9, 0x007c, 0x6020, 0xa005, + 0x0040, 0x3d6c, 0x8001, 0x6022, 0x6008, 0xa085, 0x0008, 0x600a, + 0x700b, 0x0100, 0x7028, 0x6026, 0x007c, 0xa006, 0x1078, 0x5218, + 0x7000, 0xa086, 0x0002, 0x0040, 0x3d7a, 0x706c, 0xa086, 0x0005, + 0x00c0, 0x3d84, 0x682b, 0x0000, 0x6817, 0x0000, 0x681b, 0x0001, + 0x6823, 0x0040, 0x681f, 0x0100, 0x7000, 0xa084, 0x000f, 0x0079, + 0x3d89, 0x2b63, 0x3d99, 0x3d93, 0x3dbb, 0x3da3, 0x3da1, 0x3d91, + 0x3d91, 0x1078, 0x2aef, 0x1078, 0x3dc6, 0x1078, 0x3dbf, 0x0078, + 0x3d9f, 0x1078, 0x3dc6, 0x7064, 0x2060, 0x6800, 0x6002, 0x1078, + 0x21ca, 0x0078, 0x2b63, 0x706c, 0x706f, 0x0000, 0x708b, 0x0000, + 0x0079, 0x3daa, 0x3db7, 0x3db7, 0x3db2, 0x3db2, 0x3db2, 0x3db7, + 0x3db2, 0x3db7, 0x77f4, 0xc7dd, 0x77f6, 0x0079, 0x30cd, 0x706f, + 0x0000, 0x0078, 0x2b63, 0x681b, 0x0000, 0x0078, 0x37d9, 0x6800, + 0xa005, 0x00c0, 0x3dc4, 0x6002, 0x6006, 0x007c, 0x6010, 0xa005, + 0x0040, 0x3dcf, 0x8001, 0x00d0, 0x3dcf, 0x1078, 0x2aef, 0x6012, + 0x6008, 0xc0a4, 0x600a, 0x007c, 0x6018, 0xa005, 0x0040, 0x3dda, + 0x8001, 0x601a, 0x007c, 0x1078, 0x436b, 0x681b, 0x0018, 0x0078, + 0x3e19, 0x1078, 0x436b, 0x681b, 0x0019, 0x0078, 0x3e19, 0x1078, + 0x436b, 0x681b, 0x001a, 0x0078, 0x3e19, 0x1078, 0x436b, 0x681b, + 0x0003, 0x0078, 0x3e19, 0x777c, 0x1078, 0x41e3, 0x7180, 0xa18c, + 0x00ff, 0xd7fc, 0x00c0, 0x3e00, 0xa1e8, 0xa2c0, 0x0078, 0x3e02, + 0xa1e8, 0xa3d0, 0x2d04, 0x2d08, 0x2068, 0xa005, 0x00c0, 0x3e0b, + 0x7086, 0x0078, 0x2b63, 0x6814, 0x727c, 0xa206, 0x0040, 0x3e13, + 0x6800, 0x0078, 0x3e03, 0x6800, 0x200a, 0x681b, 0x0005, 0x7087, + 0x0000, 0x1078, 0x3dc6, 0x6820, 0xd084, 0x00c0, 0x3e21, 0x1078, + 0x3dbf, 0x1078, 0x3dd4, 0x681f, 0x0000, 0x6823, 0x0020, 0x682b, + 0x0000, 0x1078, 0x21ca, 0x0078, 0x2b63, 0xa282, 0x0003, 0x00c0, + 0x40a7, 0x7da8, 0xa5ac, 0x00ff, 0x7ca8, 0xa4a4, 0x00ff, 0x6920, + 0xc1bd, 0x6922, 0xd1c4, 0x0040, 0x3e8b, 0xc1c4, 0x6922, 0xa4a4, + 0x00ff, 0x0040, 0x3e78, 0xa482, 0x000c, 0x0048, 0x3e4b, 0x0040, + 0x3e4b, 0x2021, 0x000c, 0x2500, 0xa086, 0x000a, 0x0040, 0x3e52, + 0x852b, 0x852b, 0x1078, 0x416f, 0x0040, 0x3e5a, 0x1078, 0x3f5c, + 0x0078, 0x3e81, 0x1078, 0x414b, 0x0c7e, 0x2960, 0x6004, 0xa084, + 0xfff5, 0x6006, 0x1078, 0x3f8d, 0x0c7f, 0x6920, 0xc1c5, 0x6922, + 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x3e73, 0x782b, 0x3008, + 0x781b, 0x0055, 0x007c, 0x782b, 0x3008, 0x781b, 0x0064, 0x007c, + 0x0c7e, 0x2960, 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x3f8d, + 0x0c7f, 0x7e58, 0xd6d4, 0x00c0, 0x3e88, 0x781b, 0x0057, 0x007c, + 0x781b, 0x0064, 0x007c, 0x0c7e, 0x7060, 0x2060, 0x6100, 0xd1e4, + 0x0040, 0x3ed4, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c, + 0x0048, 0x3e9e, 0x0040, 0x3e9e, 0x2011, 0x000c, 0x2400, 0xa202, + 0x00c8, 0x3ea3, 0x2220, 0x6208, 0xa294, 0x00ff, 0x2001, 0x5d03, + 0x2004, 0xd0e4, 0x00c0, 0x3eb8, 0x78ec, 0xd0e4, 0x0040, 0x3eb8, + 0xa282, 0x000a, 0x00c8, 0x3ebe, 0x2011, 0x000a, 0x0078, 0x3ebe, + 0xa282, 0x000c, 0x00c8, 0x3ebe, 0x2011, 0x000c, 0x2200, 0xa502, + 0x00c8, 0x3ec3, 0x2228, 0x1078, 0x414f, 0x2500, 0xa086, 0x000a, + 0x0040, 0x3ecc, 0x852b, 0x852b, 0x1078, 0x416f, 0x0040, 0x3ed4, + 0x1078, 0x3f5c, 0x0078, 0x3ed8, 0x1078, 0x414b, 0x1078, 0x3f8d, + 0x7858, 0xc095, 0x785a, 0x0c7f, 0x782b, 0x3008, 0x781b, 0x0064, + 0x007c, 0x0c7e, 0x2960, 0x6000, 0xd0e4, 0x00c0, 0x3ef8, 0x6010, + 0xa084, 0x000f, 0x00c0, 0x3ef2, 0x6104, 0xa18c, 0xfff5, 0x6106, + 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, 0x3f23, + 0x68a0, 0xd0cc, 0x00c0, 0x3ef2, 0x6208, 0xa294, 0x00ff, 0x2001, + 0x5d03, 0x2004, 0xd0e4, 0x00c0, 0x3f11, 0x78ec, 0xd0e4, 0x0040, + 0x3f11, 0xa282, 0x000a, 0x00c0, 0x3f11, 0x2011, 0x000a, 0x0078, + 0x3f17, 0xa282, 0x000c, 0x00c8, 0x3f17, 0x2011, 0x000c, 0x6308, + 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000c, 0x0048, 0x3f23, 0x0040, + 0x3f23, 0x2019, 0x000c, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, + 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xc0c5, 0x6822, + 0x70f4, 0xd0b4, 0x0040, 0x3f3f, 0xc0b4, 0x70f6, 0x70d8, 0xa065, + 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, + 0x007c, 0x0c7e, 0x2960, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x2011, + 0x0032, 0x2019, 0x0000, 0x0078, 0x3f4d, 0x78ab, 0x0001, 0x78ab, + 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, + 0xc0c5, 0x6822, 0x0c7f, 0x007c, 0x0c7e, 0x7160, 0x2160, 0x1078, + 0x3f63, 0x0c7f, 0x007c, 0x2018, 0xd0ac, 0x0040, 0x3f68, 0xc0ac, + 0x2008, 0xa084, 0xfff0, 0xa425, 0x7c86, 0x6018, 0x789a, 0x7cae, + 0x6412, 0x78a4, 0xa084, 0xfff0, 0xa18c, 0x000f, 0xa105, 0xc0f4, + 0xd3ac, 0x0040, 0x3f7c, 0xc0f5, 0x78a6, 0x6016, 0x788a, 0xa4a4, + 0x000f, 0x8427, 0x8204, 0x8004, 0xa084, 0x00ff, 0xa405, 0x600e, + 0x6004, 0xa084, 0xfff5, 0x6006, 0x007c, 0x0c7e, 0x7060, 0x2060, + 0x1078, 0x3f94, 0x0c7f, 0x007c, 0x6018, 0x789a, 0x78a4, 0xa084, + 0xfff0, 0x78a6, 0x6012, 0x7884, 0xa084, 0xfff0, 0x7886, 0x600c, + 0xa084, 0x00ff, 0x600e, 0x007c, 0xa282, 0x0002, 0x00c0, 0x40a7, + 0x7aa8, 0x6920, 0xc1bd, 0x6922, 0xd1cc, 0x0040, 0x3fe3, 0xc1cc, + 0x6922, 0xa294, 0x00ff, 0xa282, 0x0002, 0x00c8, 0x40a7, 0x1078, + 0x4036, 0x1078, 0x3f8d, 0xa980, 0x0001, 0x200c, 0x1078, 0x41df, + 0x1078, 0x3ee1, 0x88ff, 0x0040, 0x3fd9, 0x789b, 0x0060, 0x2800, + 0x78aa, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x3fd4, 0x782b, + 0x3008, 0x781b, 0x0055, 0x007c, 0x782b, 0x3008, 0x781b, 0x0064, + 0x007c, 0x7e58, 0xd6d4, 0x00c0, 0x3fe0, 0x781b, 0x0057, 0x007c, + 0x781b, 0x0064, 0x007c, 0xa282, 0x0002, 0x00c8, 0x3feb, 0xa284, + 0x0001, 0x0040, 0x3ff4, 0x7160, 0xa188, 0x0000, 0x210c, 0xd1ec, + 0x00c0, 0x3ff4, 0x2011, 0x0000, 0x1078, 0x412c, 0x1078, 0x4036, + 0x1078, 0x3f8d, 0x7858, 0xc095, 0x785a, 0x782b, 0x3008, 0x781b, + 0x0064, 0x007c, 0x0c7e, 0x027e, 0x2960, 0x6000, 0x2011, 0x0001, + 0xd0ec, 0x00c0, 0x4017, 0x6014, 0xa084, 0x0040, 0x00c0, 0x4015, + 0xc1a4, 0x6106, 0xa006, 0x0078, 0x4033, 0x2011, 0x0000, 0x78ab, + 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004, + 0x70f4, 0xd0b4, 0x0040, 0x402f, 0xc0b4, 0x70f6, 0x70d8, 0xa065, + 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x6820, + 0xa085, 0x0200, 0x6822, 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x7060, + 0x2060, 0x1078, 0x403d, 0x0c7f, 0x007c, 0x82ff, 0x0040, 0x4042, + 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a, 0x78a4, 0xa084, + 0xffbf, 0xa205, 0x78a6, 0x788a, 0x6016, 0x6004, 0xc0a4, 0x6006, + 0x007c, 0x007e, 0x7000, 0xa086, 0x0003, 0x0040, 0x405a, 0x007f, + 0x0078, 0x405d, 0x007f, 0x0078, 0x40a4, 0xd6ac, 0x0040, 0x40a4, + 0x7888, 0xa084, 0x0040, 0x0040, 0x40a4, 0x7bb8, 0xa384, 0x003f, + 0x831b, 0x00c8, 0x406c, 0x8000, 0xa005, 0x0040, 0x4081, 0x831b, + 0x00c8, 0x4075, 0x8001, 0x0040, 0x40a1, 0xd6f4, 0x0040, 0x4081, + 0x78b8, 0x801b, 0x00c8, 0x407d, 0x8000, 0xa084, 0x003f, 0x00c0, + 0x40a1, 0xc6f4, 0x7e5a, 0x79d8, 0x7adc, 0x2001, 0x0001, 0xa108, + 0x00c8, 0x408c, 0xa291, 0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade, + 0x1078, 0x564d, 0x781b, 0x0063, 0xb284, 0x0300, 0x0040, 0x409c, + 0x2001, 0x0000, 0x0078, 0x409e, 0x2001, 0x0001, 0x1078, 0x5482, + 0x007c, 0x781b, 0x0063, 0x007c, 0x781b, 0x0064, 0x007c, 0x1078, + 0x40dc, 0x782b, 0x3008, 0x781b, 0x0064, 0x007c, 0x1078, 0x40c8, + 0x782b, 0x3008, 0x781b, 0x0064, 0x007c, 0x6827, 0x0002, 0x1078, + 0x40d0, 0x78e4, 0xa084, 0x0030, 0x0040, 0x2b63, 0x78ec, 0xa084, + 0x0003, 0x0040, 0x2b63, 0x782b, 0x3008, 0x781b, 0x0064, 0x007c, + 0x2001, 0x0005, 0x0078, 0x40de, 0x2001, 0x000c, 0x0078, 0x40de, + 0x2001, 0x0006, 0x0078, 0x40de, 0x2001, 0x000d, 0x0078, 0x40de, + 0x2001, 0x0009, 0x0078, 0x40de, 0x2001, 0x0007, 0x789b, 0x0010, + 0x78aa, 0x789b, 0x0060, 0x78ab, 0x0001, 0xc695, 0x7e5a, 0x70f4, + 0xd0b4, 0x0040, 0x40f8, 0xc0b4, 0x70f6, 0x0c7e, 0x70d8, 0xa065, + 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, + 0x007c, 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, + 0x017e, 0xb28c, 0x0300, 0x0040, 0x4109, 0xa0e0, 0x61c0, 0x0078, + 0x410b, 0xa0e0, 0x6240, 0x017f, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, + 0xa184, 0x000f, 0x0040, 0x411b, 0xa184, 0xfff0, 0x78a6, 0x6012, + 0x6004, 0xc09d, 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184, + 0x0040, 0x0040, 0x412a, 0xa184, 0xffbf, 0x78a6, 0x6016, 0x6004, + 0xc0a5, 0x6006, 0x077f, 0x007c, 0x789b, 0x0010, 0x78ab, 0x0001, + 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab, + 0x0004, 0x70f4, 0xd0b4, 0x0040, 0x414a, 0xc0b4, 0x70f6, 0x0c7e, + 0x70d8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, + 0x601a, 0x0c7f, 0x007c, 0x2021, 0x0000, 0x2029, 0x0032, 0x789b, + 0x0010, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, + 0x7caa, 0x789b, 0x0060, 0x78ab, 0x0005, 0x70f4, 0xd0b4, 0x0040, + 0x416e, 0xc0b4, 0x70f6, 0x0c7e, 0x70d8, 0xa065, 0x6008, 0xa084, + 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, 0x007c, 0x157e, + 0x2001, 0x5d03, 0x2004, 0xd0e4, 0x00c0, 0x41a2, 0x2009, 0x41d6, + 0x20a9, 0x0009, 0x2510, 0xa582, 0x000a, 0x0040, 0x419d, 0x0048, + 0x419d, 0x8108, 0x95a9, 0xa582, 0x0030, 0x0040, 0x41b8, 0x0048, + 0x41b8, 0x8108, 0x95a9, 0x2019, 0x000a, 0x2011, 0x0064, 0x2200, + 0xa502, 0x0040, 0x41b8, 0x0048, 0x41b8, 0x8108, 0x2300, 0xa210, + 0x00f0, 0x418f, 0x157f, 0x0078, 0x41b6, 0x2510, 0x8213, 0x8213, + 0x0078, 0x41b8, 0x2009, 0x41c8, 0x2019, 0x0011, 0x20a9, 0x000e, + 0x2011, 0x0032, 0x2200, 0xa502, 0x0040, 0x41b8, 0x0048, 0x41b8, + 0x8108, 0x2300, 0xa210, 0x00f0, 0x41aa, 0x157f, 0xa006, 0x007c, + 0x157f, 0xa582, 0x0064, 0x00c8, 0x41c5, 0x7808, 0xa085, 0x0070, + 0x780a, 0x7050, 0xa085, 0x0070, 0x7052, 0x2104, 0xa005, 0x007c, + 0x1209, 0x3002, 0x3202, 0x4203, 0x4403, 0x5404, 0x5604, 0x6605, + 0x6805, 0x7806, 0x7a06, 0x0c07, 0x0c07, 0x0e07, 0x10e1, 0x330a, + 0x5805, 0x5a05, 0x6a06, 0x6c06, 0x7c07, 0x7e07, 0x0e00, 0x789b, + 0x0010, 0xa046, 0x007c, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, + 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xd7fc, 0x0040, 0x41f4, + 0xa0e0, 0x82c0, 0x0078, 0x41f6, 0xa0e0, 0x62c0, 0x007c, 0x79d8, + 0x7adc, 0x78d0, 0x801b, 0x00c8, 0x41fe, 0x8000, 0xa084, 0x003f, + 0xa108, 0xa291, 0x0000, 0x007c, 0x0e7e, 0x0f7e, 0xd084, 0x0040, + 0x4211, 0x2079, 0x0100, 0x2009, 0x5d80, 0x2071, 0x5d80, 0x0078, + 0x4221, 0x2001, 0x5d02, 0x2004, 0xd0ec, 0x0040, 0x421b, 0x2079, + 0x0100, 0x0078, 0x421d, 0x2079, 0x0200, 0x2009, 0x5d40, 0x2071, + 0x5d40, 0x2091, 0x8000, 0x2104, 0xa084, 0x000f, 0x0079, 0x4228, + 0x426b, 0x4232, 0x4232, 0x4232, 0x4232, 0x4232, 0x4230, 0x4270, + 0x1078, 0x2aef, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004, 0x00c0, + 0x4234, 0x784b, 0x0008, 0x7848, 0xa084, 0x0008, 0x00c0, 0x423b, + 0x68b4, 0xc0f5, 0x68b6, 0x7858, 0xc0f5, 0x785a, 0x7830, 0xd0bc, + 0x00c0, 0x426b, 0x3200, 0x007e, 0x2001, 0x5d02, 0x2004, 0xd0ec, + 0x007f, 0x0040, 0x4257, 0xa084, 0x0300, 0x0078, 0x4259, 0xa084, + 0x0400, 0x0040, 0x425f, 0x0018, 0x426b, 0x0078, 0x4261, 0x0028, + 0x426b, 0x681c, 0xd0ac, 0x00c0, 0x4269, 0x1078, 0x42ed, 0x0078, + 0x426b, 0x781b, 0x00d3, 0x2091, 0x8001, 0x0f7f, 0x0e7f, 0x007c, + 0x70ab, 0x0000, 0x1078, 0x4541, 0x0078, 0x426b, 0x0c7e, 0x2001, + 0x5d01, 0x2004, 0xd0ac, 0x00c0, 0x42db, 0x6814, 0x8007, 0xa084, + 0x000f, 0x8003, 0x8003, 0x8003, 0xb28c, 0x0300, 0x0040, 0x428c, + 0xa0e0, 0x61c0, 0x0078, 0x428e, 0xa0e0, 0x6240, 0x6004, 0xa084, + 0x000a, 0x00c0, 0x42db, 0x6108, 0xa194, 0xff00, 0x0040, 0x42db, + 0xa18c, 0x00ff, 0x2001, 0x000a, 0xa106, 0x0040, 0x42ba, 0x2001, + 0x000c, 0xa106, 0x0040, 0x42be, 0x2001, 0x0012, 0xa106, 0x0040, + 0x42c2, 0x2001, 0x0014, 0xa106, 0x0040, 0x42c6, 0x2001, 0x0019, + 0xa106, 0x0040, 0x42ca, 0x2001, 0x0032, 0xa106, 0x0040, 0x42ce, + 0x0078, 0x42d2, 0x2009, 0x000c, 0x0078, 0x42d4, 0x2009, 0x0012, + 0x0078, 0x42d4, 0x2009, 0x0014, 0x0078, 0x42d4, 0x2009, 0x0019, + 0x0078, 0x42d4, 0x2009, 0x0020, 0x0078, 0x42d4, 0x2009, 0x003f, + 0x0078, 0x42d4, 0x2011, 0x0000, 0x2100, 0xa205, 0x600a, 0x6004, + 0xa085, 0x0002, 0x6006, 0x0c7f, 0x007c, 0x781b, 0x0064, 0x007c, + 0x782b, 0x3008, 0x781b, 0x0064, 0x007c, 0x781b, 0x0057, 0x007c, + 0x782b, 0x3008, 0x781b, 0x0055, 0x007c, 0x2009, 0x5d17, 0x210c, + 0xa186, 0x0000, 0x0040, 0x42ff, 0xa186, 0x0001, 0x0040, 0x4302, + 0x701b, 0x000b, 0x706f, 0x0001, 0x781b, 0x0048, 0x007c, 0x781b, + 0x00cd, 0x007c, 0x701b, 0x000a, 0x007c, 0x2009, 0x5d17, 0x210c, + 0xa186, 0x0000, 0x0040, 0x431b, 0xa186, 0x0001, 0x0040, 0x4318, + 0x701b, 0x000b, 0x706f, 0x0001, 0x781b, 0x0048, 0x0078, 0x2b53, + 0x701b, 0x000a, 0x007c, 0x782b, 0x3008, 0x781b, 0x00cd, 0x007c, + 0x781b, 0x00d3, 0x007c, 0x782b, 0x3008, 0x781b, 0x00d3, 0x007c, + 0x781b, 0x0093, 0x007c, 0x782b, 0x3008, 0x781b, 0x0093, 0x007c, + 0x6818, 0xd0fc, 0x0040, 0x4336, 0x681b, 0x001d, 0x706f, 0x0001, + 0x781b, 0x0048, 0x007c, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x4350, + 0x7808, 0xa084, 0xfffc, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, + 0x78ec, 0xa084, 0x0021, 0x0040, 0x4350, 0x7050, 0xc08d, 0x780a, + 0x007c, 0x7830, 0xa084, 0x0080, 0x00c0, 0x436a, 0x78ec, 0xa084, + 0x0002, 0x00c0, 0x436a, 0x7808, 0xc08c, 0x780a, 0x0005, 0x0005, + 0x0005, 0x0005, 0x78ec, 0xa084, 0x0002, 0x0040, 0x436a, 0x7808, + 0xc08d, 0x780a, 0x007c, 0x7050, 0xc08d, 0x7052, 0x780a, 0x007c, + 0x7830, 0xa084, 0x0040, 0x00c0, 0x4370, 0x3200, 0x007e, 0x2001, + 0x5d02, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x4382, 0xa084, 0x0300, + 0x0078, 0x4384, 0xa084, 0x0400, 0x0040, 0x438a, 0x0098, 0x438e, + 0x0078, 0x438c, 0x00a8, 0x438e, 0x78ac, 0x007c, 0x7808, 0xa084, + 0xfffd, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, + 0x0021, 0x0040, 0x43b2, 0x3200, 0x007e, 0x2001, 0x5d02, 0x2004, + 0xd0ec, 0x007f, 0x0040, 0x43a8, 0xa084, 0x0300, 0x0078, 0x43aa, + 0xa084, 0x0400, 0x0040, 0x43b0, 0x0098, 0x43ac, 0x0078, 0x43b2, + 0x00a8, 0x43b0, 0x78ac, 0x007e, 0x7050, 0x780a, 0x007f, 0x007c, + 0x78ec, 0xa084, 0x0002, 0x00c0, 0x5202, 0xa784, 0x007d, 0x00c0, + 0x43c4, 0x2700, 0x1078, 0x2aef, 0xa784, 0x0001, 0x00c0, 0x3877, + 0xa784, 0x0070, 0x0040, 0x43d4, 0x0c7e, 0x2d60, 0x2f68, 0x1078, + 0x2a83, 0x2d78, 0x2c68, 0x0c7f, 0xa784, 0x0008, 0x0040, 0x43e1, + 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2b63, 0x0078, + 0x42dd, 0xa784, 0x0004, 0x0040, 0x4410, 0x78b8, 0xa084, 0x4001, + 0x0040, 0x4410, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, + 0x2b63, 0x78e4, 0xa084, 0x0007, 0xa086, 0x0001, 0x00c0, 0x4410, + 0x78c0, 0xa085, 0x4800, 0x2030, 0x7e5a, 0x781b, 0x00d3, 0x007c, + 0x784b, 0x0008, 0x6818, 0xd0fc, 0x0040, 0x440d, 0x681b, 0x0015, + 0xd6f4, 0x0040, 0x440d, 0x681b, 0x0007, 0x1078, 0x42ed, 0x007c, + 0x681b, 0x0003, 0x7858, 0xa084, 0x5f00, 0x681e, 0x682f, 0x0000, + 0x6833, 0x0000, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, + 0x3209, 0x3200, 0x007e, 0x2001, 0x5d02, 0x2004, 0xd0ec, 0x007f, + 0x0040, 0x442e, 0xa084, 0x0300, 0x0078, 0x4430, 0xa084, 0x0400, + 0x0040, 0x4436, 0x0018, 0x2b53, 0x0078, 0x4438, 0x0028, 0x2b53, + 0x0078, 0x40ae, 0x6b14, 0x8307, 0xa084, 0x000f, 0x8003, 0x8003, + 0x8003, 0xd3fc, 0x0040, 0x4448, 0xa080, 0x6240, 0x0078, 0x444a, + 0xa080, 0x61c0, 0x2060, 0x2048, 0x7062, 0x2a60, 0x007c, 0x7000, + 0x0079, 0x4452, 0x445a, 0x445a, 0x445b, 0x4463, 0x445a, 0x445a, + 0x445a, 0x4466, 0x007c, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, + 0x8001, 0x601a, 0x007c, 0x1078, 0x5218, 0x007c, 0x7098, 0xa005, + 0x0040, 0x4481, 0x2068, 0xb284, 0x0300, 0x0040, 0x4473, 0x2009, + 0x0000, 0x0078, 0x4475, 0x2009, 0x0001, 0x017e, 0x1078, 0x2014, + 0x017f, 0x017e, 0x1078, 0x519e, 0x017f, 0x1078, 0x519f, 0x709b, + 0x0000, 0x007c, 0x0e7e, 0x2091, 0x8000, 0x6014, 0xd0fc, 0x00c0, + 0x448d, 0x2071, 0x5d40, 0x0078, 0x448f, 0x2071, 0x5d80, 0x7000, + 0xa086, 0x0007, 0x00c0, 0x44a0, 0x6110, 0x70b4, 0xa106, 0x00c0, + 0x44a0, 0x0e7f, 0x1078, 0x2029, 0x1078, 0x44a6, 0xa006, 0x007c, + 0x2091, 0x8001, 0x0e7f, 0xa085, 0x0001, 0x007c, 0x0f7e, 0x0e7e, + 0x0078, 0x27d1, 0x785b, 0x0000, 0x70a7, 0x000e, 0x2009, 0x0100, + 0x017e, 0x7098, 0xa06d, 0x0040, 0x44b9, 0x709b, 0x0000, 0x0078, + 0x44bf, 0x70ab, 0x0000, 0x1078, 0x205d, 0x0040, 0x44c5, 0x70a4, + 0x6826, 0x1078, 0x45eb, 0x0078, 0x44b9, 0x017f, 0x077e, 0x157e, + 0x0c7e, 0x0d7e, 0x20a9, 0x0020, 0x3238, 0xa7bc, 0x0300, 0x0040, + 0x44d6, 0x2061, 0xa4e0, 0xc7fc, 0x0078, 0x44d9, 0x2061, 0xa5e0, + 0xc7fd, 0x6000, 0xa105, 0x6002, 0x601c, 0xa06d, 0x0040, 0x44e9, + 0x6800, 0x601e, 0x1078, 0x1de6, 0x6008, 0x8000, 0x600a, 0x0078, + 0x44dc, 0x6018, 0xa06d, 0x0040, 0x44f3, 0x6800, 0x601a, 0x1078, + 0x1de6, 0x0078, 0x44e9, 0xace0, 0x0008, 0x0070, 0x44f9, 0x0078, + 0x44d9, 0x7094, 0xa084, 0x8000, 0x0040, 0x4500, 0x1078, 0x4670, + 0x0d7f, 0x0c7f, 0x157f, 0x077f, 0x007c, 0x6804, 0xa084, 0x000f, + 0x0079, 0x450a, 0x451a, 0x451a, 0x451a, 0x451a, 0x451a, 0x451a, + 0x451c, 0x452e, 0x451a, 0x451a, 0x451a, 0x451a, 0x451a, 0x453c, + 0x451a, 0x451c, 0x1078, 0x2aef, 0x007e, 0x7830, 0xd0b4, 0x0040, + 0x4527, 0x784b, 0x0004, 0x7848, 0xd094, 0x00c0, 0x4523, 0x007f, + 0x1078, 0x5010, 0x1078, 0x1de6, 0x0078, 0x4540, 0x6827, 0x000b, + 0x007e, 0x7830, 0xd0b4, 0x0040, 0x453b, 0x784b, 0x0004, 0x7848, + 0xd094, 0x00c0, 0x4537, 0x007f, 0x1078, 0x5010, 0x1078, 0x45eb, + 0x007c, 0x0f7e, 0x6814, 0xd0fc, 0x00c0, 0x4558, 0x2001, 0x5d02, + 0x2004, 0xd0ec, 0x0040, 0x4552, 0x2079, 0x0100, 0x0098, 0x4573, + 0x0078, 0x455c, 0x2079, 0x0200, 0x00a8, 0x4573, 0x0078, 0x455c, + 0x2079, 0x0100, 0x0098, 0x4573, 0x7830, 0xa084, 0x00c0, 0x00c0, + 0x4573, 0x0d7e, 0x1078, 0x51a8, 0x2d00, 0x682e, 0x2009, 0x0004, + 0x2001, 0x0000, 0x6827, 0x0084, 0x1078, 0x515f, 0x1078, 0x45eb, + 0x0d7f, 0x0078, 0x45b9, 0x7948, 0xa185, 0x4000, 0x784a, 0x6814, + 0xd0fc, 0x00c0, 0x4589, 0x2001, 0x5d02, 0x2004, 0xd0ec, 0x0040, + 0x4585, 0x0098, 0x458e, 0x0078, 0x458b, 0x00a8, 0x458e, 0x0078, + 0x458b, 0x0098, 0x458e, 0x794a, 0x0078, 0x4561, 0x7828, 0xa086, + 0x1834, 0x00c0, 0x4597, 0xa185, 0x0004, 0x0078, 0x459e, 0x7828, + 0xa086, 0x1814, 0x00c0, 0x458b, 0xa185, 0x000c, 0x784a, 0x789b, + 0x000e, 0x78ab, 0x0002, 0x7858, 0xa084, 0x00ff, 0xa085, 0x0400, + 0x785a, 0x70ac, 0xa080, 0x0091, 0x781a, 0x6827, 0x0284, 0x682c, + 0x6836, 0x6830, 0x683a, 0x2009, 0x0004, 0x2001, 0x0000, 0x1078, + 0x515f, 0x0f7f, 0x007c, 0x0d7e, 0x6b14, 0x1078, 0x20d9, 0x0040, + 0x45c8, 0x2068, 0x6827, 0x0002, 0x1078, 0x45eb, 0x0078, 0x45bd, + 0x0d7f, 0x007c, 0x0d7e, 0x6b14, 0x6c28, 0xa4a4, 0x00ff, 0x1078, + 0x2069, 0x0040, 0x45d8, 0x2068, 0x6827, 0x0002, 0x1078, 0x45eb, + 0x0d7f, 0x007c, 0x0d7e, 0x6814, 0xa09c, 0x00ff, 0x1078, 0x20a3, + 0x0040, 0x45e9, 0x2068, 0x6827, 0x0002, 0x1078, 0x45eb, 0x0078, + 0x45de, 0x0d7f, 0x007c, 0x0c7e, 0x6914, 0x6814, 0x1078, 0x465f, + 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0006, 0x0040, 0x4607, 0xa186, + 0x000d, 0x0040, 0x4626, 0xa186, 0x0017, 0x00c0, 0x4603, 0x1078, + 0x1de6, 0x0c7f, 0x007c, 0x1078, 0x21cc, 0x0c7f, 0x007c, 0x6004, + 0x8001, 0x0048, 0x4624, 0x6006, 0x2009, 0x0000, 0xa684, 0x0001, + 0x00c0, 0x4614, 0xa18d, 0x8000, 0xa684, 0x0004, 0x0040, 0x461a, + 0xa18d, 0x0002, 0x691e, 0x6823, 0x0000, 0x711c, 0x810f, 0x6818, + 0xa105, 0x681a, 0x0078, 0x4603, 0x1078, 0x2aef, 0x6018, 0xa005, + 0x00c0, 0x4635, 0x6008, 0x8001, 0x0048, 0x4635, 0x600a, 0x601c, + 0x6802, 0x2d00, 0x601e, 0x0078, 0x464d, 0xac88, 0x0006, 0x2104, + 0xa005, 0x0040, 0x463e, 0x2008, 0x0078, 0x4637, 0x6802, 0x2d0a, + 0x6008, 0x8001, 0x0048, 0x464b, 0x600a, 0x6018, 0x2068, 0x6800, + 0x601a, 0x0078, 0x462f, 0x0c7f, 0x007c, 0x157e, 0x137e, 0x147e, + 0x0c7e, 0x0d7e, 0x1078, 0x1dc3, 0x2da0, 0x137f, 0x20a9, 0x0034, + 0x53a3, 0x0c7f, 0x147f, 0x137f, 0x157f, 0x0078, 0x4603, 0xd0fc, + 0x00c0, 0x4666, 0x2061, 0xa4e0, 0x0078, 0x4668, 0x2061, 0xa5e0, + 0xa184, 0x001f, 0x8003, 0x8003, 0x8003, 0xac00, 0x2060, 0x007c, + 0xd7fc, 0x00c0, 0x4683, 0x2019, 0x5d54, 0x2001, 0x5d02, 0x2004, + 0xd0ec, 0x0040, 0x467f, 0x2021, 0x0102, 0x0078, 0x4687, 0x2021, + 0x0202, 0x0078, 0x4687, 0x2019, 0x5d94, 0x2021, 0x0102, 0x2304, + 0xa085, 0x0001, 0x201a, 0x2404, 0xa085, 0x0001, 0x2022, 0x007c, + 0xd7fc, 0x00c0, 0x46a3, 0x2019, 0x5d54, 0x2001, 0x5d02, 0x2004, + 0xd0ec, 0x0040, 0x469f, 0x2021, 0x0102, 0x0078, 0x46a7, 0x2021, + 0x0202, 0x0078, 0x46a7, 0x2019, 0x5d94, 0x2021, 0x0102, 0x2304, + 0xa084, 0xfffe, 0x201a, 0x2404, 0xa084, 0xfffe, 0x2022, 0x007c, + 0x7990, 0xa18c, 0xfff8, 0x7992, 0x70ac, 0xa080, 0x00d7, 0x781a, + 0x0078, 0x2b53, 0x709b, 0x0000, 0x7003, 0x0000, 0x704f, 0x0001, + 0x7047, 0x0000, 0x1078, 0x205d, 0x0040, 0x46e7, 0x70f3, 0x0000, + 0x68c8, 0x2060, 0x6100, 0xa184, 0x0300, 0x0040, 0x46db, 0x6827, + 0x000e, 0xa084, 0x0200, 0x0040, 0x46d7, 0x6827, 0x0017, 0x1078, + 0x45eb, 0x0078, 0x46ba, 0x7000, 0xa086, 0x0007, 0x00c0, 0x473f, + 0x2d00, 0x709a, 0xad80, 0x000f, 0x7046, 0x0078, 0x46f2, 0x7010, + 0xa005, 0x00c0, 0x46f0, 0x704c, 0xa086, 0x0001, 0x0040, 0x2b6d, + 0x0078, 0x2b53, 0x2031, 0x0000, 0x691c, 0xa184, 0x0002, 0x0040, + 0x46fb, 0xa6b5, 0x0004, 0xa184, 0x00c0, 0x8003, 0x8003, 0x8007, + 0xa080, 0x47e3, 0x2004, 0xa635, 0x1078, 0x2c6b, 0x6820, 0xa084, + 0x0400, 0x0040, 0x4715, 0x789b, 0x0018, 0x78ab, 0x0003, 0x789b, + 0x0081, 0x78ab, 0x0001, 0xa6b5, 0x1000, 0x6820, 0xa084, 0x8000, + 0x0040, 0x4721, 0xa6b5, 0x0400, 0x789b, 0x000e, 0x6824, 0x8007, + 0x78aa, 0xa684, 0x0200, 0x0040, 0x473b, 0x682c, 0x78d2, 0x6830, + 0x78d6, 0xa684, 0x0100, 0x0040, 0x4739, 0x682c, 0xa084, 0x0001, + 0x0040, 0x4739, 0x7888, 0xa084, 0x0040, 0x0040, 0x4739, 0xa6b5, + 0x8000, 0x1078, 0x518e, 0x7e5a, 0x6eb6, 0x0078, 0x51c7, 0x1078, + 0x433b, 0x00c0, 0x47dd, 0x2011, 0x0001, 0x2031, 0x1000, 0x1078, + 0x2c6b, 0x789b, 0x0018, 0x6814, 0xa084, 0x001f, 0xa085, 0x0080, + 0x78aa, 0x691c, 0xa184, 0x0002, 0x0040, 0x475e, 0xa6b5, 0x0004, + 0x78ab, 0x0020, 0x6828, 0x78aa, 0xa290, 0x0002, 0x6820, 0xa084, + 0x8000, 0x0040, 0x476c, 0xa6b5, 0x0400, 0x789b, 0x000e, 0x6824, + 0x8007, 0x78aa, 0x0078, 0x477a, 0x681c, 0xa084, 0x8000, 0x00c0, + 0x477a, 0xa6b5, 0x0800, 0x6820, 0xa084, 0x0100, 0x0040, 0x477a, + 0xa6b5, 0x4000, 0x681c, 0xa084, 0x00c0, 0x8003, 0x8003, 0x8007, + 0xa080, 0x47e3, 0x2004, 0xa635, 0xa684, 0x0100, 0x0040, 0x4794, + 0x682c, 0xa084, 0x0001, 0x0040, 0x4794, 0x7888, 0xa084, 0x0040, + 0x0040, 0x4794, 0xa6b5, 0x8000, 0x789b, 0x007e, 0x7eae, 0x6eb6, + 0x6814, 0xc0fc, 0x8007, 0x78aa, 0x7882, 0x7aaa, 0x7830, 0xa084, + 0x00c0, 0x00c0, 0x47dd, 0x6914, 0xd1fc, 0x00c0, 0x47b5, 0x2001, + 0x5d02, 0x2004, 0xd0ec, 0x0040, 0x47b1, 0x0018, 0x47dd, 0x0078, + 0x47b7, 0x0028, 0x47dd, 0x0078, 0x47b7, 0x0018, 0x47dd, 0x127e, + 0x0d7e, 0x0c7e, 0x70f4, 0xa084, 0x2700, 0x2090, 0x0c7f, 0x0d7f, + 0x127f, 0x70ac, 0xa080, 0x00dc, 0x781a, 0x1078, 0x436b, 0xa684, + 0x0200, 0x0040, 0x47d1, 0x682c, 0x78d2, 0x6830, 0x78d6, 0x1078, + 0x518e, 0x2d00, 0x709a, 0x7056, 0x6810, 0x70b6, 0x7003, 0x0007, + 0xad80, 0x000f, 0x7046, 0x0078, 0x2b53, 0x1078, 0x2014, 0x1078, + 0x436b, 0x0078, 0x2b53, 0x0000, 0x0300, 0x0200, 0x0000, 0x1078, + 0x2aef, 0x2300, 0x0079, 0x47ec, 0x47ef, 0x47ef, 0x47f1, 0x1078, + 0x2aef, 0x1078, 0x519f, 0x6924, 0xa184, 0x00ff, 0xa086, 0x000a, + 0x0040, 0x4803, 0xa184, 0xff00, 0xa085, 0x000a, 0x6826, 0x1078, + 0x2014, 0x0078, 0x46ba, 0x2001, 0x000a, 0x1078, 0x512e, 0x0078, + 0x46ba, 0xa282, 0x0005, 0x0050, 0x480f, 0x1078, 0x2aef, 0x7000, + 0xa084, 0x000f, 0x10c0, 0x444f, 0x1078, 0x1dc3, 0x00c0, 0x482e, + 0xa684, 0x0004, 0x0040, 0x4820, 0x2001, 0x2800, 0x0078, 0x4822, + 0x2001, 0x0800, 0x71ac, 0xa188, 0x0091, 0x789b, 0x000e, 0x78aa, + 0x2031, 0x0400, 0x7e5a, 0x791a, 0x0078, 0x2b53, 0x6807, 0x0106, + 0x680b, 0x0000, 0x689f, 0x0000, 0x6827, 0x0000, 0xa386, 0x0002, + 0x00c0, 0x484f, 0xa286, 0x0002, 0x00c0, 0x484f, 0x78a0, 0xa005, + 0x00c0, 0x484f, 0xa484, 0x8000, 0x00c0, 0x484f, 0x78e4, 0xa084, + 0x0008, 0x0040, 0x484f, 0xa6b5, 0x0008, 0x2019, 0x0000, 0x1078, + 0x4c49, 0x2d00, 0x709a, 0x7056, 0x7003, 0x0007, 0x7047, 0x0000, + 0x6824, 0xa084, 0x0080, 0x0040, 0x4861, 0x1078, 0x4d06, 0x0078, + 0x2b53, 0x2300, 0x0079, 0x4864, 0x4867, 0x48e8, 0x4907, 0x2200, + 0x0079, 0x486a, 0x486f, 0x487f, 0x48a5, 0x48b1, 0x48d4, 0x2029, + 0x0001, 0xa026, 0x2011, 0x0000, 0x1078, 0x4e2b, 0x0079, 0x4878, + 0x487d, 0x2b53, 0x46ba, 0x487d, 0x487d, 0x1078, 0x2aef, 0x7990, + 0xa18c, 0x0007, 0x00c0, 0x4886, 0x2009, 0x0008, 0x2011, 0x0001, + 0xa684, 0x0004, 0x0040, 0x488e, 0x2011, 0x0003, 0x2220, 0xa12a, + 0x2011, 0x0001, 0x1078, 0x4e2b, 0x0079, 0x4896, 0x489b, 0x2b53, + 0x46ba, 0x48a3, 0x489d, 0x0078, 0x51cd, 0x70a3, 0x48a1, 0x0078, + 0x2b53, 0x0078, 0x489b, 0x1078, 0x2aef, 0xa684, 0x0010, 0x0040, + 0x48af, 0x1078, 0x4cd5, 0x0040, 0x48af, 0x0078, 0x2b53, 0x0078, + 0x4d43, 0x6000, 0xa084, 0x0002, 0x0040, 0x48ce, 0x70ac, 0xa080, + 0x00cc, 0x781a, 0x0d7e, 0x1078, 0x51a8, 0x2d00, 0x682e, 0x6827, + 0x0000, 0x1078, 0x45eb, 0x0d7f, 0x1078, 0x1de6, 0x7003, 0x0000, + 0x7047, 0x0000, 0x7057, 0x0000, 0x0078, 0x46ba, 0xa684, 0x0004, + 0x00c0, 0x48d4, 0x0078, 0x51cd, 0x6000, 0xa084, 0x0004, 0x00c0, + 0x48e6, 0x6000, 0xa084, 0x0001, 0x0040, 0x48e6, 0x70a3, 0x48e6, + 0x2001, 0x0007, 0x1078, 0x5126, 0x0078, 0x51d3, 0x0078, 0x51cd, + 0x2200, 0x0079, 0x48eb, 0x48f0, 0x48f0, 0x48f0, 0x48f2, 0x48f0, + 0x1078, 0x2aef, 0x709f, 0x48f6, 0x0078, 0x51db, 0x2011, 0x0018, + 0x1078, 0x4e25, 0x0079, 0x48fc, 0x4901, 0x2b53, 0x46ba, 0x4903, + 0x4905, 0x1078, 0x2aef, 0x1078, 0x2aef, 0x1078, 0x2aef, 0x2200, + 0x0079, 0x490a, 0x490f, 0x4911, 0x4911, 0x490f, 0x490f, 0x1078, + 0x2aef, 0x78e4, 0xa084, 0x0008, 0x0040, 0x4926, 0x709f, 0x491a, + 0x0078, 0x51db, 0x2011, 0x0004, 0x1078, 0x4e25, 0x0079, 0x4920, + 0x4926, 0x2b53, 0x46ba, 0x4926, 0x4930, 0x4934, 0x70a3, 0x492e, + 0x2001, 0x0003, 0x1078, 0x5126, 0x0078, 0x51d3, 0x0078, 0x51cd, + 0x70a3, 0x4926, 0x0078, 0x2b53, 0x70a3, 0x4938, 0x0078, 0x2b53, + 0x0078, 0x492e, 0xa282, 0x0003, 0x0050, 0x4940, 0x1078, 0x2aef, + 0xa386, 0x0002, 0x00c0, 0x4959, 0xa286, 0x0002, 0x00c0, 0x495f, + 0x78a0, 0xa005, 0x00c0, 0x495f, 0xa484, 0x8000, 0x00c0, 0x495f, + 0x78e4, 0xa084, 0x0008, 0x0040, 0x4959, 0xa6b5, 0x0008, 0x2019, + 0x0000, 0xa684, 0x0008, 0x0040, 0x495f, 0x1078, 0x4cb2, 0x6810, + 0x70b6, 0x7003, 0x0007, 0x2300, 0x0079, 0x4966, 0x4969, 0x4996, + 0x499e, 0x2200, 0x0079, 0x496c, 0x4971, 0x496f, 0x498a, 0x1078, + 0x2aef, 0x7990, 0xa1ac, 0x0007, 0xa026, 0x2011, 0x0001, 0x1078, + 0x4e2b, 0x0079, 0x497b, 0x4980, 0x2b53, 0x46ba, 0x4988, 0x4982, + 0x0078, 0x51cd, 0x70a3, 0x4986, 0x0078, 0x2b53, 0x0078, 0x4980, + 0x1078, 0x2aef, 0xa684, 0x0010, 0x0040, 0x4994, 0x1078, 0x4cd5, + 0x0040, 0x4994, 0x0078, 0x2b53, 0x0078, 0x4d43, 0x2200, 0x0079, + 0x4999, 0x499c, 0x499c, 0x499c, 0x1078, 0x2aef, 0x2200, 0x0079, + 0x49a1, 0x49a4, 0x49a6, 0x49a6, 0x1078, 0x2aef, 0x78e4, 0xa084, + 0x0008, 0x0040, 0x49bb, 0x709f, 0x49af, 0x0078, 0x51db, 0x2011, + 0x0004, 0x1078, 0x4e25, 0x0079, 0x49b5, 0x49bb, 0x2b53, 0x46ba, + 0x49bb, 0x49c5, 0x49c9, 0x70a3, 0x49c3, 0x2001, 0x0003, 0x1078, + 0x5126, 0x0078, 0x51d3, 0x0078, 0x51cd, 0x70a3, 0x49bb, 0x0078, + 0x2b53, 0x70a3, 0x49cd, 0x0078, 0x2b53, 0x0078, 0x49c3, 0x2300, + 0x0079, 0x49d2, 0x49d7, 0x49d9, 0x49d5, 0x1078, 0x2aef, 0x709c, + 0x007a, 0x709c, 0x007a, 0xa282, 0x0002, 0x0050, 0x49e1, 0x1078, + 0x2aef, 0xa684, 0x0200, 0x0040, 0x49eb, 0x1078, 0x519e, 0x1078, + 0x4e0d, 0x1078, 0x519f, 0x2300, 0x0079, 0x49ee, 0x49f1, 0x4a1f, + 0x4a85, 0xa286, 0x0001, 0x0040, 0x49f7, 0x1078, 0x2aef, 0xa684, + 0x0200, 0x0040, 0x49ff, 0x1078, 0x519e, 0x1078, 0x519f, 0x6924, + 0xa184, 0x00ff, 0xa086, 0x000a, 0x00c0, 0x4a09, 0xa184, 0xff00, + 0x6826, 0x2001, 0x0001, 0x1078, 0x512e, 0x78b8, 0xa084, 0xc001, + 0x0040, 0x4a1b, 0x7848, 0xa085, 0x0008, 0x784a, 0x7848, 0xa084, + 0x0008, 0x00c0, 0x4a16, 0x7003, 0x0000, 0x0078, 0x46ba, 0x2200, + 0x0079, 0x4a22, 0x4a24, 0x4a55, 0x709f, 0x4a28, 0x0078, 0x51db, + 0x2011, 0x000d, 0x1078, 0x4e25, 0x0079, 0x4a2e, 0x4a35, 0x2b53, + 0x46ba, 0x4a3d, 0x4a45, 0x4a4b, 0x4a4d, 0xa6b4, 0x00ff, 0xa6b5, + 0x0400, 0x6eb6, 0x7e5a, 0x0078, 0x51c7, 0xa6b4, 0x00ff, 0xa6b5, + 0x0400, 0x6eb6, 0x7e5a, 0x0078, 0x51c7, 0x70a3, 0x4a49, 0x0078, + 0x2b53, 0x0078, 0x4a35, 0x1078, 0x2aef, 0x70a3, 0x4a51, 0x0078, + 0x2b53, 0x1078, 0x51e1, 0x0078, 0x2b53, 0x709f, 0x4a59, 0x0078, + 0x51db, 0x2011, 0x0012, 0x1078, 0x4e25, 0x0079, 0x4a5f, 0x4a65, + 0x2b53, 0x46ba, 0x4a71, 0x4a79, 0x4a7f, 0xa6b4, 0x00ff, 0xa6b5, + 0x0400, 0x6eb6, 0x7e5a, 0x70ac, 0xa080, 0x00a5, 0x781a, 0x0078, + 0x2b53, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x0078, + 0x51c7, 0x70a3, 0x4a7d, 0x0078, 0x2b53, 0x0078, 0x4a65, 0x70a3, + 0x4a83, 0x0078, 0x2b53, 0x0078, 0x4a71, 0xa286, 0x0001, 0x0040, + 0x4a8b, 0x1078, 0x2aef, 0x709f, 0x4a8f, 0x0078, 0x51db, 0x2011, + 0x0015, 0x1078, 0x4e25, 0x0079, 0x4a95, 0x4a9a, 0x2b53, 0x46ba, + 0x4aa8, 0x4ab4, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, + 0x783b, 0x1301, 0x70ac, 0xa080, 0x00b5, 0x781a, 0x0078, 0x2b53, + 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x70ac, 0xa080, + 0x00a5, 0x781a, 0x0078, 0x2b53, 0x70a3, 0x4ab8, 0x0078, 0x2b53, + 0x0078, 0x4a9a, 0xa282, 0x0003, 0x0050, 0x4ac0, 0x1078, 0x2aef, + 0x2300, 0x0079, 0x4ac3, 0x4ac6, 0x4b07, 0x4b60, 0xa286, 0x0001, + 0x0040, 0x4acc, 0x1078, 0x2aef, 0x6804, 0xa084, 0x00ff, 0xa086, + 0x0006, 0x00c0, 0x4ad9, 0x1078, 0x45eb, 0x7003, 0x0000, 0x0078, + 0x46ba, 0x683b, 0x0000, 0x6837, 0x0000, 0xa684, 0x0200, 0x0040, + 0x4ae7, 0x1078, 0x519e, 0x1078, 0x4e0d, 0x1078, 0x519f, 0x6924, + 0xa184, 0x00ff, 0xa086, 0x000a, 0x00c0, 0x4af1, 0xa184, 0xff00, + 0x6826, 0x2001, 0x0001, 0x1078, 0x512e, 0x78b8, 0xa084, 0xc001, + 0x0040, 0x4b03, 0x7848, 0xa085, 0x0008, 0x784a, 0x7848, 0xa084, + 0x0008, 0x00c0, 0x4afe, 0x7003, 0x0000, 0x0078, 0x46ba, 0x2200, + 0x0079, 0x4b0a, 0x4b0c, 0x4b3b, 0x709f, 0x4b10, 0x0078, 0x51db, + 0x2011, 0x000d, 0x1078, 0x4e25, 0x0079, 0x4b16, 0x4b1b, 0x2b53, + 0x46ba, 0x4b23, 0x4b2b, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, + 0x7e5a, 0x0078, 0x51c7, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, + 0x7e5a, 0x0078, 0x51c7, 0x70a3, 0x4b2f, 0x0078, 0x2b53, 0x0078, + 0x4b1b, 0x1078, 0x2aef, 0x70a3, 0x4b37, 0x0078, 0x2b53, 0x1078, + 0x51e1, 0x0078, 0x2b53, 0x709f, 0x4b3f, 0x0078, 0x51db, 0x2011, + 0x0005, 0x1078, 0x4e25, 0x0079, 0x4b45, 0x4b4a, 0x2b53, 0x46ba, + 0x4b52, 0x4b5a, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, + 0x0078, 0x51c7, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, + 0x0078, 0x51c7, 0x70a3, 0x4b5e, 0x0078, 0x2b53, 0x0078, 0x4b4a, + 0xa286, 0x0001, 0x0040, 0x4b66, 0x1078, 0x2aef, 0x709f, 0x4b6a, + 0x0078, 0x51db, 0x2011, 0x0006, 0x1078, 0x4e25, 0x0079, 0x4b70, + 0x4b75, 0x2b53, 0x46ba, 0x4b7b, 0x4b85, 0xa6b5, 0x0800, 0x6eb6, + 0x7e5a, 0x0078, 0x51c7, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, + 0xa6b5, 0x4000, 0x7e5a, 0x0078, 0x51c7, 0x70a3, 0x4b89, 0x0078, + 0x2b53, 0x0078, 0x4b75, 0x2300, 0x0079, 0x4b8e, 0x4b93, 0x4b91, + 0x4b91, 0x1078, 0x2aef, 0x1078, 0x2aef, 0x2300, 0x71a0, 0xa005, + 0x017a, 0x6810, 0x70b6, 0xa282, 0x0003, 0x0050, 0x4ba1, 0x1078, + 0x2aef, 0x2300, 0x0079, 0x4ba4, 0x4ba7, 0x4bb5, 0x4bd7, 0xa684, + 0x0200, 0x0040, 0x4baf, 0x1078, 0x519e, 0x1078, 0x519f, 0x2001, + 0x0001, 0x1078, 0x512e, 0x0078, 0x2b53, 0xa286, 0x0002, 0x0040, + 0x4bbe, 0x82ff, 0x0040, 0x4bbe, 0x1078, 0x2aef, 0x709f, 0x4bc2, + 0x0078, 0x51db, 0x2011, 0x0018, 0x1078, 0x4e25, 0x0079, 0x4bc8, + 0x4bcd, 0x2b53, 0x46ba, 0x4bcf, 0x4bd1, 0x0078, 0x51c7, 0x0078, + 0x51c7, 0x70a3, 0x4bd5, 0x0078, 0x2b53, 0x0078, 0x4bcd, 0x2200, + 0x0079, 0x4bda, 0x4bdc, 0x4bf5, 0x709f, 0x4be0, 0x0078, 0x51db, + 0x2011, 0x0017, 0x1078, 0x4e25, 0x0079, 0x4be6, 0x4beb, 0x2b53, + 0x46ba, 0x4bed, 0x4bef, 0x0078, 0x51c7, 0x0078, 0x51c7, 0x70a3, + 0x4bf3, 0x0078, 0x2b53, 0x0078, 0x4beb, 0xa484, 0x8000, 0x00c0, + 0x4c37, 0xa684, 0x0100, 0x0040, 0x4c03, 0x1078, 0x519e, 0x1078, + 0x4e0d, 0x0078, 0x5202, 0x78d8, 0x78d2, 0x78dc, 0x78d6, 0xa6b4, + 0xefff, 0x7e5a, 0x709f, 0x4c0e, 0x0078, 0x51db, 0x2011, 0x000d, + 0x1078, 0x4e25, 0x0079, 0x4c14, 0x4c19, 0x2b53, 0x46ba, 0x4c19, + 0x4c27, 0xa684, 0x0100, 0x0040, 0x4c25, 0x1078, 0x5154, 0x682c, + 0x78d2, 0x6830, 0x78d6, 0x1078, 0x518e, 0x0078, 0x51c7, 0x70a3, + 0x4c2b, 0x0078, 0x2b53, 0x0078, 0x4c19, 0x1078, 0x2aef, 0x70a3, + 0x4c33, 0x0078, 0x2b53, 0x1078, 0x51e1, 0x0078, 0x2b53, 0x1078, + 0x519f, 0x70a3, 0x4c41, 0x2001, 0x0003, 0x1078, 0x5126, 0x0078, + 0x51d3, 0x1078, 0x518e, 0x682c, 0x78d2, 0x6830, 0x78d6, 0x0078, + 0x51c7, 0x70b0, 0x6812, 0x70b6, 0x8000, 0x70b2, 0x681b, 0x0000, + 0xa684, 0x0008, 0x0040, 0x4c6c, 0x157e, 0x137e, 0x147e, 0x7890, + 0x8004, 0x8004, 0x8004, 0x8004, 0xa084, 0x000f, 0x681a, 0x80ac, + 0x789b, 0x0000, 0xaf80, 0x002b, 0x2098, 0xad80, 0x000b, 0x20a0, + 0x53a5, 0x147f, 0x137f, 0x157f, 0xa6c4, 0x0f00, 0xa684, 0x0002, + 0x00c0, 0x4c7b, 0x692c, 0x810d, 0x810d, 0x810d, 0xa184, 0x0007, + 0x2008, 0x0078, 0x4c8a, 0x789b, 0x0010, 0x79ac, 0xa184, 0x0020, + 0x0040, 0x4c8a, 0x017e, 0x2009, 0x0005, 0x2001, 0x3d00, 0x1078, + 0x515f, 0x017f, 0xa184, 0x001f, 0xa805, 0x017e, 0x3208, 0xa18c, + 0x0300, 0x0040, 0x4c96, 0xc0fc, 0x0078, 0x4c97, 0xc0fd, 0x017f, + 0x6816, 0x1078, 0x465f, 0x68ca, 0xa684, 0x0004, 0x0040, 0x4ca6, + 0xa18c, 0xff00, 0x78a8, 0xa084, 0x00ff, 0xa105, 0x682a, 0xa6b4, + 0x00ff, 0x6000, 0xa084, 0x0008, 0x0040, 0x4cb0, 0xa6b5, 0x4000, + 0x6eb6, 0x007c, 0x157e, 0x137e, 0x147e, 0x6918, 0x7890, 0x8004, + 0x8004, 0x8004, 0x8004, 0xa084, 0x000f, 0x007e, 0xa100, 0x681a, + 0x007f, 0x8000, 0x8004, 0x0040, 0x4cd1, 0x20a8, 0x8104, 0xa080, + 0x000b, 0xad00, 0x20a0, 0x789b, 0x0000, 0xaf80, 0x002b, 0x2098, + 0x53a5, 0x147f, 0x137f, 0x157f, 0x007c, 0x682c, 0xa084, 0x0020, + 0x00c0, 0x4cdd, 0x620c, 0x0078, 0x4cde, 0x6210, 0x6b18, 0x2300, + 0xa202, 0x0040, 0x4cfe, 0x2018, 0xa382, 0x000e, 0x0048, 0x4cee, + 0x0040, 0x4cee, 0x2019, 0x000e, 0x0078, 0x4cf2, 0x7858, 0xa084, + 0xffef, 0x785a, 0x783b, 0x1b01, 0x7893, 0x0000, 0x7ba2, 0x70ac, + 0xa080, 0x008e, 0x781a, 0xa085, 0x0001, 0x007c, 0x7858, 0xa084, + 0xffef, 0x785a, 0x7893, 0x0000, 0xa006, 0x007c, 0x6904, 0xa18c, + 0x00ff, 0xa196, 0x0007, 0x0040, 0x4d13, 0xa196, 0x000f, 0x0040, + 0x4d13, 0x6807, 0x0117, 0x6914, 0x6814, 0x1078, 0x465f, 0x6100, + 0x8104, 0x00c8, 0x4d2f, 0x601c, 0xa005, 0x0040, 0x4d23, 0x2001, + 0x0800, 0x0078, 0x4d31, 0x0d7e, 0x6824, 0x007e, 0x1078, 0x51a8, + 0x007f, 0x6826, 0x2d00, 0x682e, 0x1078, 0x45eb, 0x0d7f, 0x2001, + 0x0200, 0x6826, 0x8007, 0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, + 0x8000, 0x6822, 0x2031, 0x0400, 0x6eb6, 0x7e5a, 0x71ac, 0xa188, + 0x0091, 0x791a, 0x007c, 0x1078, 0x2c6b, 0x6814, 0x2040, 0xa684, + 0x0002, 0x00c0, 0x4d59, 0x692c, 0x810d, 0x810d, 0x810d, 0xa184, + 0x0007, 0x2008, 0xa805, 0x6816, 0x1078, 0x465f, 0x68ca, 0x0078, + 0x4d5d, 0x6914, 0x6814, 0x1078, 0x465f, 0x6100, 0x8104, 0x00c8, + 0x4dba, 0xa184, 0x0300, 0x0040, 0x4d69, 0x6807, 0x0117, 0x0078, + 0x4d87, 0x6004, 0xa005, 0x00c0, 0x4d90, 0x6807, 0x0117, 0x601c, + 0xa005, 0x00c0, 0x4d7d, 0x0d7e, 0x1078, 0x51a8, 0x6827, 0x0034, + 0x2d00, 0x682e, 0x1078, 0x45eb, 0x0d7f, 0xa684, 0x0004, 0x0040, + 0x4d87, 0x2031, 0x0400, 0x2001, 0x2800, 0x0078, 0x4d8b, 0x2031, + 0x0400, 0x2001, 0x0800, 0x71ac, 0xa188, 0x0091, 0x0078, 0x4de8, + 0x6018, 0xa005, 0x00c0, 0x4d7d, 0x601c, 0xa005, 0x00c0, 0x4d7d, + 0x689f, 0x0000, 0x6827, 0x003d, 0xa684, 0x0001, 0x0040, 0x4df6, + 0xd694, 0x00c0, 0x4db3, 0x6100, 0xd1d4, 0x0040, 0x4db3, 0x692c, + 0x81ff, 0x0040, 0x4df6, 0xa186, 0x0003, 0x0040, 0x4df6, 0xa186, + 0x0012, 0x0040, 0x4df6, 0xa6b5, 0x0800, 0x71ac, 0xa188, 0x00ae, + 0x0078, 0x4df1, 0x6807, 0x0117, 0x2031, 0x0400, 0x692c, 0xa18c, + 0x00ff, 0xa186, 0x0012, 0x00c0, 0x4dcb, 0x2001, 0x4e03, 0x2009, + 0x0001, 0x0078, 0x4ddc, 0xa186, 0x0003, 0x00c0, 0x4dd5, 0x2001, + 0x4e04, 0x2009, 0x0012, 0x0078, 0x4ddc, 0x2001, 0x0200, 0x71ac, + 0xa188, 0x0091, 0x0078, 0x4de8, 0x1078, 0x5179, 0x78a3, 0x0000, + 0x681c, 0xa085, 0x0040, 0x681e, 0x71ac, 0xa188, 0x00d9, 0xa006, + 0x6826, 0x8007, 0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000, + 0x6822, 0x6eb6, 0x7e5a, 0x791a, 0x0078, 0x2b53, 0x6eb6, 0x1078, + 0x45eb, 0x6810, 0x70b6, 0x7003, 0x0007, 0x709b, 0x0000, 0x7057, + 0x0000, 0x0078, 0x2b53, 0x0023, 0x0070, 0x0005, 0x0000, 0x0a00, + 0x0000, 0x0000, 0x0025, 0x0000, 0x0000, 0x683b, 0x0000, 0x6837, + 0x0000, 0xa684, 0x0200, 0x0040, 0x4e24, 0x78b8, 0xa08c, 0x001f, + 0xa084, 0x8000, 0x0040, 0x4e1d, 0x8108, 0x78d8, 0xa100, 0x6836, + 0x78dc, 0xa081, 0x0000, 0x683a, 0x007c, 0x7990, 0x810f, 0xa5ac, + 0x0007, 0x2021, 0x0000, 0xa480, 0x0010, 0x789a, 0x79a8, 0xa18c, + 0x00ff, 0xa184, 0x0080, 0x00c0, 0x4e53, 0xa182, 0x0020, 0x00c8, + 0x4e71, 0xa182, 0x0012, 0x00c8, 0x5116, 0x2100, 0x1079, 0x4e41, + 0x007c, 0x5116, 0x5028, 0x5116, 0x5116, 0x4e7e, 0x4e81, 0x4ebb, + 0x4ef9, 0x4f2b, 0x4f2e, 0x5116, 0x5116, 0x4edc, 0x4f52, 0x4f8c, + 0x5116, 0x5116, 0x4fb3, 0xa184, 0x0020, 0x00c0, 0x4fe7, 0xa18c, + 0x001f, 0x6814, 0xa084, 0x001f, 0xa106, 0x0040, 0x4e6e, 0x70ac, + 0xa080, 0x00cc, 0x781a, 0x2001, 0x0014, 0x1078, 0x512e, 0x1078, + 0x519f, 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x2001, 0x0000, + 0x007c, 0xa182, 0x0024, 0x00c8, 0x5116, 0xa184, 0x0003, 0x1079, + 0x4e41, 0x007c, 0x5116, 0x5116, 0x5116, 0x5116, 0x1078, 0x5116, + 0x007c, 0x2200, 0x0079, 0x4e84, 0x4fb6, 0x4fb6, 0x4ea8, 0x4ea8, + 0x4ea8, 0x4ea8, 0x4ea8, 0x4ea8, 0x4ea8, 0x4ea8, 0x4ea6, 0x4ea8, + 0x4e9d, 0x4ea8, 0x4ea8, 0x4ea8, 0x4ea8, 0x4ea8, 0x4eb0, 0x4eb3, + 0x4fb6, 0x4eb3, 0x4ea8, 0x4ea8, 0x4ea8, 0x0c7e, 0x077e, 0x6f14, + 0x1078, 0x40f9, 0x077f, 0x0c7f, 0x0078, 0x4ea8, 0x1078, 0x50b2, + 0x6827, 0x02b3, 0x2009, 0x000b, 0x2001, 0x4800, 0x0078, 0x4fea, + 0x1078, 0x5109, 0x007c, 0x6827, 0x0093, 0x2009, 0x000b, 0x2001, + 0x4800, 0x0078, 0x4fd2, 0x2d58, 0x6804, 0xa084, 0x00ff, 0xa086, + 0x0006, 0x00c0, 0x4ec5, 0x6807, 0x0117, 0x6827, 0x0002, 0x1078, + 0x51a8, 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078, + 0x45bb, 0x1078, 0x5010, 0x2b68, 0x1078, 0x45eb, 0x0d7f, 0x1078, + 0x45eb, 0x2001, 0x0002, 0x007c, 0x1078, 0x5010, 0x2001, 0x0017, + 0x1078, 0x512e, 0x709b, 0x0000, 0x6914, 0xd1fc, 0x0040, 0x4eec, + 0x2009, 0x5d86, 0x0078, 0x4eee, 0x2009, 0x5d46, 0x200b, 0x0006, + 0x70a7, 0x0017, 0x2009, 0x0200, 0x1078, 0x44b0, 0x2001, 0x0001, + 0x007c, 0x2200, 0x0079, 0x4efc, 0x4fb6, 0x4fe7, 0x4fe7, 0x4fe7, + 0x4f1d, 0x4ff7, 0x4f23, 0x4ff7, 0x4ff7, 0x4ffa, 0x4ffa, 0x4fff, + 0x4fff, 0x4f15, 0x4f15, 0x4fe7, 0x4fe7, 0x4ff7, 0x4fe7, 0x4f23, + 0x4fb6, 0x4f23, 0x4f23, 0x4f23, 0x4f23, 0x6827, 0x0084, 0x2009, + 0x000b, 0x2001, 0x4300, 0x0078, 0x5009, 0x2009, 0x000b, 0x2001, + 0x4300, 0x0078, 0x4fea, 0x6827, 0x0093, 0x2009, 0x000b, 0x2001, + 0x4300, 0x0078, 0x4fd2, 0x2001, 0x0000, 0x007c, 0x2200, 0x0079, + 0x4f31, 0x4fb6, 0x4f4a, 0x4f4a, 0x4f4a, 0x4f4a, 0x4ff7, 0x4ff7, + 0x4ff7, 0x4ff7, 0x4ff7, 0x4ff7, 0x4ff7, 0x4ff7, 0x4f4a, 0x4f4a, + 0x4f4a, 0x4f4a, 0x4ff7, 0x4f4a, 0x4f4a, 0x4ff7, 0x4ff7, 0x4ff7, + 0x4ff7, 0x4fb6, 0x6827, 0x0093, 0x2009, 0x000b, 0x2001, 0x4300, + 0x0078, 0x4fd2, 0xa684, 0x0004, 0x00c0, 0x4f66, 0x6804, 0xa084, + 0x00ff, 0xa086, 0x0006, 0x00c0, 0x5116, 0x1078, 0x5010, 0x6807, + 0x0117, 0x1078, 0x45eb, 0x2001, 0x0002, 0x007c, 0x6000, 0xa084, + 0x0004, 0x0040, 0x5116, 0x2d58, 0x6804, 0xa084, 0x00ff, 0xa086, + 0x0006, 0x00c0, 0x4f75, 0x6807, 0x0117, 0x6827, 0x0002, 0x1078, + 0x51a8, 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078, + 0x45ca, 0x1078, 0x5010, 0x2b68, 0x1078, 0x45eb, 0x0d7f, 0x1078, + 0x45eb, 0x2001, 0x0002, 0x007c, 0x6000, 0xa084, 0x0004, 0x0040, + 0x5116, 0x2d58, 0x6a04, 0xa294, 0x00ff, 0xa286, 0x0006, 0x00c0, + 0x4f9b, 0x6807, 0x0117, 0x6827, 0x0002, 0x2d58, 0x1078, 0x51a8, + 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078, 0x45da, + 0x1078, 0x5010, 0x2b68, 0x1078, 0x45eb, 0x0d7f, 0x1078, 0x45eb, + 0x2001, 0x0002, 0x007c, 0x1078, 0x5116, 0x007c, 0x70ac, 0xa080, + 0x00cc, 0x781a, 0x2001, 0x0001, 0x1078, 0x512e, 0x1078, 0x519f, + 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x1078, 0x515f, 0x1078, + 0x519e, 0x1078, 0x4e0d, 0x1078, 0x4d06, 0x1078, 0x519f, 0x2001, + 0x0001, 0x007c, 0x1078, 0x515f, 0x1078, 0x519e, 0x1078, 0x4e0d, + 0x70ac, 0xa080, 0x00cc, 0x781a, 0x2001, 0x0013, 0x1078, 0x512e, + 0x1078, 0x519f, 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x1078, + 0x5116, 0x007c, 0x1078, 0x515f, 0x1078, 0x519e, 0x1078, 0x4e0d, + 0x1078, 0x4d06, 0x1078, 0x519f, 0x2001, 0x0001, 0x007c, 0x2001, + 0x0003, 0x007c, 0x1078, 0x50b2, 0x2001, 0x0000, 0x007c, 0x0c7e, + 0x077e, 0x6f14, 0x1078, 0x40f9, 0x077f, 0x0c7f, 0x2001, 0x0000, + 0x007c, 0x1078, 0x515f, 0x1078, 0x5116, 0x2001, 0x0006, 0x007c, + 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x501b, 0xa186, + 0x000f, 0x00c0, 0x501f, 0x1078, 0x519e, 0x1078, 0x4e0d, 0x70ac, + 0xa080, 0x00cc, 0x781a, 0x1078, 0x519f, 0x7003, 0x0000, 0x007c, + 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, + 0x00c8, 0x5116, 0x1079, 0x5035, 0x007c, 0x5116, 0x5039, 0x5116, + 0x50b9, 0xa282, 0x0003, 0x0040, 0x5040, 0x1078, 0x5116, 0x007c, + 0x0c7e, 0x7da8, 0xa5ac, 0x00ff, 0x7ca8, 0xa4a4, 0x00ff, 0x1078, + 0x50a0, 0x6200, 0xd2e4, 0x0040, 0x508f, 0x6208, 0x8217, 0xa294, + 0x00ff, 0xa282, 0x000c, 0x0048, 0x5059, 0x0040, 0x5059, 0x2011, + 0x000c, 0x2400, 0xa202, 0x00c8, 0x505e, 0x2220, 0x6208, 0xa294, + 0x00ff, 0x2001, 0x5d03, 0x2004, 0xd0e4, 0x00c0, 0x5073, 0x78ec, + 0xd0e4, 0x0040, 0x5073, 0xa282, 0x000a, 0x00c8, 0x5079, 0x2011, + 0x000a, 0x0078, 0x5079, 0xa282, 0x000c, 0x00c8, 0x5079, 0x2011, + 0x000c, 0x2200, 0xa502, 0x00c8, 0x507e, 0x2228, 0x1078, 0x50fa, + 0x2500, 0xa086, 0x000a, 0x0040, 0x5087, 0x852b, 0x852b, 0x1078, + 0x416f, 0x0040, 0x508f, 0x1078, 0x3f63, 0x0078, 0x5093, 0x1078, + 0x50f6, 0x1078, 0x3f94, 0xa6b5, 0x1000, 0x7e5a, 0x783b, 0x1700, + 0x70ac, 0xa080, 0x00b9, 0x781a, 0x2001, 0x0004, 0x0c7f, 0x007c, + 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0x6914, + 0xd1fc, 0x00c0, 0x50af, 0xa0e0, 0x61c0, 0x0078, 0x50b1, 0xa0e0, + 0x6240, 0x007c, 0x0c7e, 0x1078, 0x50a0, 0x1078, 0x3f94, 0x0c7f, + 0x007c, 0xa282, 0x0002, 0x00c0, 0x5116, 0x0c7e, 0x1078, 0x50a0, + 0x7aa8, 0xa294, 0x00ff, 0xa284, 0xfffe, 0x0040, 0x50cb, 0x2011, + 0x0001, 0x0078, 0x50cf, 0xa284, 0x0001, 0x0040, 0x50d5, 0x6100, + 0xd1ec, 0x00c0, 0x50d5, 0x2011, 0x0000, 0x1078, 0x50e8, 0x1078, + 0x403d, 0x1078, 0x3f94, 0xa6b5, 0x1000, 0x7e5a, 0x783b, 0x1700, + 0x70ac, 0xa080, 0x00b9, 0x781a, 0x2001, 0x0004, 0x0c7f, 0x007c, + 0x789b, 0x0018, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, + 0x7aaa, 0x789b, 0x0081, 0x78ab, 0x0004, 0x007c, 0x2021, 0x0000, + 0x2029, 0x0032, 0x789b, 0x0018, 0x78ab, 0x0001, 0x78ab, 0x0003, + 0x78ab, 0x0001, 0x7daa, 0x7caa, 0x789b, 0x0081, 0x78ab, 0x0005, + 0x007c, 0x2001, 0x0003, 0x1078, 0x5126, 0x783b, 0x1700, 0x70ac, + 0xa080, 0x00b9, 0x781a, 0x2001, 0x0005, 0x007c, 0x2001, 0x0007, + 0x1078, 0x5126, 0xa6b5, 0x1000, 0x7e5a, 0x783b, 0x1700, 0x70ac, + 0xa080, 0x00b9, 0x781a, 0x2001, 0x0004, 0x007c, 0x789b, 0x0018, + 0x78aa, 0x789b, 0x0081, 0x78ab, 0x0001, 0x007c, 0x6904, 0xa18c, + 0x00ff, 0xa196, 0x0007, 0x0040, 0x513c, 0xa196, 0x000f, 0x0040, + 0x513c, 0x1078, 0x1de6, 0x007c, 0x6924, 0xa194, 0x003f, 0x00c0, + 0x5145, 0xa18c, 0xffc0, 0xa105, 0x6826, 0x1078, 0x45eb, 0x691c, + 0xa184, 0x0100, 0x0040, 0x5153, 0x6914, 0x2100, 0x1078, 0x465f, + 0x6204, 0x8210, 0x6206, 0x007c, 0x692c, 0x6834, 0x682e, 0xa112, + 0x6930, 0x6838, 0x6832, 0xa11b, 0xa200, 0xa301, 0x007c, 0x0c7e, + 0xade0, 0x0018, 0x6003, 0x0070, 0x6106, 0x600b, 0x0000, 0x600f, + 0x0a00, 0x6013, 0x0000, 0x6017, 0x0000, 0x8007, 0x601a, 0x601f, + 0x0000, 0x6023, 0x0000, 0x0c7f, 0x6824, 0xa085, 0x0080, 0x6826, + 0x007c, 0x157e, 0x137e, 0x147e, 0x2098, 0xaf80, 0x002d, 0x20a0, + 0x81ac, 0x0040, 0x5184, 0x53a6, 0xa184, 0x0001, 0x0040, 0x518a, + 0x3304, 0x78be, 0x147f, 0x137f, 0x157f, 0x007c, 0x70a8, 0xa005, + 0x10c0, 0x2aef, 0x70ab, 0x8000, 0x6814, 0xd0fc, 0x0040, 0x519b, + 0xc185, 0x0078, 0x519c, 0xc184, 0x0078, 0x5514, 0x007c, 0x71a8, + 0x81ff, 0x0040, 0x51a7, 0x70ab, 0x0000, 0x1078, 0x5218, 0x007c, + 0x0c7e, 0x0d7e, 0x1078, 0x1dc3, 0x0c7f, 0x157e, 0x137e, 0x147e, + 0x2da0, 0x2c98, 0x20a9, 0x0034, 0x53a3, 0x147f, 0x137f, 0x157f, + 0x6807, 0x010d, 0x680b, 0x0000, 0x701c, 0x8007, 0x681a, 0x6823, + 0x0000, 0x681f, 0x0000, 0x689f, 0x0000, 0x0c7f, 0x007c, 0x70ac, + 0xa080, 0x0091, 0x781a, 0x0078, 0x2b53, 0x70ac, 0xa080, 0x0081, + 0x781a, 0x0078, 0x2b53, 0x783b, 0x1700, 0x70ac, 0xa080, 0x00b9, + 0x781a, 0x0078, 0x2b53, 0x70ac, 0xa080, 0x00c2, 0x781a, 0x0078, + 0x2b53, 0x6904, 0xa18c, 0x00ff, 0xa196, 0x0007, 0x0040, 0x51ee, + 0xa196, 0x000f, 0x0040, 0x51ee, 0x6807, 0x0117, 0x2001, 0x0200, + 0x6826, 0x8007, 0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000, + 0x6822, 0x2031, 0x0400, 0x6eb6, 0x7e5a, 0x71ac, 0xa188, 0x0091, + 0x791a, 0x007c, 0x1078, 0x519f, 0x7848, 0xa085, 0x000c, 0x784a, + 0x70ac, 0xa080, 0x00cc, 0x781a, 0x2009, 0x000b, 0x2001, 0x4400, + 0x1078, 0x515f, 0x2001, 0x0013, 0x1078, 0x512e, 0x0078, 0x46ba, + 0x127e, 0x70f4, 0xa084, 0x4600, 0x8004, 0x2090, 0x7204, 0x700c, + 0xa215, 0x7008, 0xc09c, 0xa205, 0x00c0, 0x522d, 0x7007, 0x0004, + 0x7003, 0x0000, 0x127f, 0x2000, 0x007c, 0x7000, 0xd084, 0x0040, + 0x525b, 0x2001, 0x5d03, 0x2004, 0xd0ec, 0x00c0, 0x5287, 0xd0e4, + 0x00c0, 0x5241, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0003, 0x00c8, + 0x5287, 0x0e7e, 0x2071, 0x0010, 0x2009, 0x0007, 0x7008, 0xa084, + 0x3000, 0x00c0, 0x5244, 0x8109, 0x00c0, 0x5246, 0x0e7f, 0x2009, + 0x0007, 0x7008, 0xa084, 0x3000, 0x00c0, 0x5241, 0x8109, 0x00c0, + 0x5251, 0x0078, 0x5287, 0x7108, 0xd1fc, 0x0040, 0x5266, 0x1078, + 0x53b4, 0x8aff, 0x0040, 0x521e, 0x0078, 0x525b, 0x700c, 0xa08c, + 0x03ff, 0x0040, 0x528c, 0x7004, 0xd084, 0x0040, 0x527e, 0x7014, + 0xa005, 0x00c0, 0x527a, 0x7010, 0xa005, 0x0040, 0x527e, 0xa102, + 0x00c8, 0x525b, 0x7007, 0x0010, 0x0078, 0x5287, 0x8aff, 0x0040, + 0x528c, 0x1078, 0x5608, 0x00c0, 0x5281, 0x0040, 0x525b, 0x1078, + 0x533a, 0x127f, 0x2000, 0x007c, 0x7204, 0x700c, 0xa215, 0x7108, + 0xc19c, 0x8103, 0x00c8, 0x52a0, 0xa205, 0x00c0, 0x5287, 0x1078, + 0x53b4, 0x7003, 0x0000, 0x7007, 0x0004, 0x127f, 0x2000, 0x007c, + 0xa205, 0x00c0, 0x5287, 0x7003, 0x0000, 0x7007, 0x0004, 0x127f, + 0x2000, 0x007c, 0x017e, 0x6104, 0xa18c, 0x00ff, 0xa186, 0x0007, + 0x0040, 0x52b6, 0xa18e, 0x000f, 0x00c0, 0x52b9, 0x6040, 0x0078, + 0x52ba, 0x6428, 0x017f, 0x84ff, 0x0040, 0x52e4, 0x2c70, 0x7004, + 0xa0bc, 0x000f, 0xa7b8, 0x52f4, 0x273c, 0x87fb, 0x00c0, 0x52d2, + 0x0048, 0x52cc, 0x1078, 0x2aef, 0x609c, 0xa075, 0x0040, 0x52e4, + 0x0078, 0x52bf, 0x2704, 0xae68, 0x6808, 0xa630, 0x680c, 0xa529, + 0x8421, 0x0040, 0x52e4, 0x8738, 0x2704, 0xa005, 0x00c0, 0x52d3, + 0x709c, 0xa075, 0x00c0, 0x52bf, 0x007c, 0x0000, 0x0005, 0x0009, + 0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, 0x0003, 0x0009, + 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x52e9, 0x52e6, 0x0000, + 0x0000, 0x8000, 0x0000, 0x52e9, 0x0000, 0x52f1, 0x52ee, 0x0000, + 0x0000, 0x0000, 0x0000, 0x52f1, 0x0000, 0x52ec, 0x52ec, 0x0000, + 0x0000, 0x8000, 0x0000, 0x52ec, 0x0000, 0x52f2, 0x52f2, 0x0000, + 0x0000, 0x0000, 0x0000, 0x52f2, 0x2079, 0x5d00, 0x2071, 0x0010, + 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x7808, 0xd0ec, + 0x0040, 0x5328, 0x2009, 0x0001, 0x2071, 0x0020, 0x0078, 0x532c, + 0x2009, 0x0002, 0x2071, 0x0050, 0x7007, 0x000a, 0x7007, 0x0002, + 0x7003, 0x0000, 0x8109, 0x0040, 0x5339, 0x2071, 0x0020, 0x0078, + 0x532c, 0x007c, 0x2019, 0x0000, 0x7004, 0x8004, 0x00c8, 0x539d, + 0x7007, 0x0012, 0x7108, 0x7008, 0xa106, 0x00c0, 0x5342, 0xa184, + 0x01e0, 0x0040, 0x534d, 0x1078, 0x2aef, 0x7808, 0xd0ec, 0x0040, + 0x5367, 0x2001, 0x04fd, 0x2004, 0xa086, 0x0003, 0x00c0, 0x536b, + 0xa184, 0x4000, 0x0040, 0x536f, 0xa382, 0x0003, 0x00c8, 0x536f, + 0xa184, 0x0004, 0x0040, 0x5342, 0x8318, 0x0078, 0x5342, 0x780c, + 0xd0ec, 0x00c0, 0x536f, 0xa184, 0x4000, 0x00c0, 0x5342, 0xa19c, + 0x300c, 0xa386, 0x2004, 0x0040, 0x537d, 0xa386, 0x0008, 0x0040, + 0x5388, 0xa386, 0x200c, 0x00c0, 0x5342, 0x7200, 0x8204, 0x0048, + 0x5388, 0x730c, 0xa384, 0x03ff, 0x0040, 0x5388, 0x1078, 0x2aef, + 0x7007, 0x0012, 0x7000, 0xd084, 0x00c0, 0x539d, 0x7008, 0xa084, + 0x01e0, 0x00c0, 0x539d, 0x7310, 0x7014, 0xa305, 0x0040, 0x539d, + 0x710c, 0xa184, 0x03ff, 0x00c0, 0x533a, 0x7007, 0x0012, 0x7007, + 0x0008, 0x7004, 0xd09c, 0x00c0, 0x53a1, 0x7007, 0x0012, 0x7108, + 0xd1fc, 0x00c0, 0x53a5, 0x7003, 0x0000, 0x007c, 0x157e, 0x7108, + 0x1078, 0x53b4, 0x157f, 0x007c, 0x7204, 0x7500, 0xa184, 0x01e0, + 0x00c0, 0x53eb, 0x7108, 0xa184, 0x01e0, 0x00c0, 0x53eb, 0xa184, + 0x0007, 0x0079, 0x53c3, 0x53cd, 0x53de, 0x53cb, 0x53de, 0x53cb, + 0x5430, 0x53cb, 0x542e, 0x1078, 0x2aef, 0x7004, 0xa084, 0x0010, + 0xc08d, 0x7006, 0x8aff, 0x00c0, 0x53d9, 0x2049, 0x0000, 0x0078, + 0x53dd, 0x1078, 0x5608, 0x00c0, 0x53d9, 0x007c, 0x7004, 0xa084, + 0x0010, 0xc08d, 0x7006, 0x8aff, 0x0040, 0x53ea, 0x1078, 0x5608, + 0x00c0, 0x53e6, 0x007c, 0x7007, 0x0012, 0x7108, 0x00e0, 0x53ee, + 0x2091, 0x6000, 0x00e0, 0x53f2, 0x2091, 0x6000, 0x7007, 0x0012, + 0x7007, 0x0008, 0x7004, 0xd09c, 0x00c0, 0x53fa, 0x7007, 0x0012, + 0x7108, 0xd1fc, 0x00c0, 0x53fe, 0x7003, 0x0000, 0x7000, 0xa005, + 0x00c0, 0x5412, 0x7004, 0xa005, 0x00c0, 0x5412, 0x700c, 0xa005, + 0x0040, 0x5414, 0x0078, 0x53f6, 0x2049, 0x0000, 0xb284, 0x0100, + 0x0040, 0x541e, 0x2001, 0x0000, 0x0078, 0x5420, 0x2001, 0x0001, + 0x1078, 0x4204, 0x6818, 0xa084, 0x8000, 0x0040, 0x5429, 0x681b, + 0x0002, 0x007c, 0x1078, 0x2aef, 0x1078, 0x2aef, 0x1078, 0x546d, + 0x7210, 0x7114, 0x700c, 0xa09c, 0x03ff, 0x2800, 0xa300, 0xa211, + 0xa189, 0x0000, 0x1078, 0x546d, 0x2704, 0x2c58, 0xac60, 0x6308, + 0x2200, 0xa322, 0x630c, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0040, + 0x5453, 0x00c8, 0x5453, 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, + 0x2b60, 0x0078, 0x543a, 0x2b60, 0x8a07, 0x007e, 0x6004, 0xa084, + 0x0008, 0x0040, 0x545f, 0xa7ba, 0x52ee, 0x0078, 0x5461, 0xa7ba, + 0x52e6, 0x007f, 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92, 0x6b8e, + 0x7007, 0x0012, 0x1078, 0x533a, 0x007c, 0x8a50, 0x8739, 0x2704, + 0xa004, 0x00c0, 0x5481, 0x6000, 0xa064, 0x00c0, 0x5478, 0x2d60, + 0x6004, 0xa084, 0x000f, 0xa080, 0x5304, 0x203c, 0x87fb, 0x1040, + 0x2aef, 0x007c, 0x127e, 0x0d7e, 0x70f4, 0xa084, 0x4600, 0x8004, + 0x2090, 0x0d7f, 0x6884, 0x2060, 0x6888, 0x6b8c, 0x6c90, 0x8057, + 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x007e, 0x6804, 0xa084, 0x0008, + 0x007f, 0x0040, 0x549f, 0xa0b8, 0x52ee, 0x0078, 0x54a1, 0xa0b8, + 0x52e6, 0xb284, 0x0100, 0x0040, 0x54a8, 0x7e18, 0x0078, 0x54a9, + 0x7e1c, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, + 0x0040, 0x54b6, 0xa18e, 0x000f, 0x00c0, 0x54be, 0x681c, 0xa084, + 0x0040, 0x0040, 0x54c3, 0xc685, 0x0078, 0x54c3, 0x681c, 0xd0b4, + 0x0040, 0x54c3, 0xc685, 0x700c, 0xa084, 0x03ff, 0x0040, 0x54ce, + 0x7007, 0x0004, 0x7004, 0xd094, 0x00c0, 0x54ca, 0x2400, 0xa305, + 0x00c0, 0x54d4, 0x0078, 0x54fa, 0x2c58, 0x2704, 0x6104, 0xac60, + 0x6000, 0xa400, 0x701a, 0x6004, 0xa301, 0x701e, 0xa184, 0x0008, + 0x0040, 0x54ea, 0x6010, 0xa081, 0x0000, 0x7022, 0x6014, 0xa081, + 0x0000, 0x7026, 0x6208, 0x2400, 0xa202, 0x7012, 0x620c, 0x2300, + 0xa203, 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x1078, 0x562e, + 0x0078, 0x54fc, 0x1078, 0x5608, 0x00c0, 0x54fa, 0x127f, 0x2000, + 0x007c, 0x127e, 0x0d7e, 0x70f4, 0xa084, 0x4600, 0x8004, 0x2090, + 0x0d7f, 0x7007, 0x0004, 0x7004, 0xd094, 0x00c0, 0x550b, 0x7003, + 0x0008, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x70f4, 0xa084, + 0x4600, 0x8004, 0x2090, 0x0d7f, 0x700c, 0xa084, 0x03ff, 0x0040, + 0x5527, 0x7007, 0x0004, 0x7004, 0xd094, 0x00c0, 0x5523, 0x6814, + 0xd0fc, 0x0040, 0x552e, 0x7e1c, 0x0078, 0x552f, 0x7e18, 0xa6b5, + 0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x553c, + 0xa18e, 0x000f, 0x00c0, 0x5546, 0x681c, 0xa084, 0x0040, 0x0040, + 0x5542, 0xc685, 0x6840, 0x2050, 0x0078, 0x554d, 0x681c, 0xd0ac, + 0x00c0, 0x554b, 0xc685, 0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, + 0x000f, 0xa7b8, 0x52f4, 0x273c, 0x87fb, 0x00c0, 0x5561, 0x0048, + 0x555b, 0x1078, 0x2aef, 0x689c, 0xa065, 0x0040, 0x5565, 0x0078, + 0x554e, 0x1078, 0x5608, 0x00c0, 0x5561, 0x127f, 0x2000, 0x007c, + 0x127e, 0x007e, 0x017e, 0x0d7e, 0x70f4, 0xa084, 0x4600, 0x8004, + 0x2090, 0xb284, 0x0100, 0x0040, 0x5578, 0x7e18, 0x0078, 0x5579, + 0x7e1c, 0x0d7f, 0x037f, 0x047f, 0xa6b5, 0x000c, 0x6904, 0xa18c, + 0x00ff, 0xa186, 0x0007, 0x0040, 0x5589, 0xa18e, 0x000f, 0x00c0, + 0x5591, 0x681c, 0xa084, 0x0040, 0x0040, 0x5596, 0xc685, 0x0078, + 0x5596, 0x681c, 0xd0b4, 0x0040, 0x5596, 0xc685, 0x2049, 0x5568, + 0x017e, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x55a4, + 0xa18e, 0x000f, 0x00c0, 0x55a7, 0x6840, 0x0078, 0x55a8, 0x6828, + 0x017f, 0xa055, 0x0040, 0x5605, 0x2d70, 0x2e60, 0x7004, 0xa0bc, + 0x000f, 0xa7b8, 0x52f4, 0x273c, 0x87fb, 0x00c0, 0x55c2, 0x0048, + 0x55bb, 0x1078, 0x2aef, 0x709c, 0xa075, 0x2060, 0x0040, 0x5605, + 0x0078, 0x55ae, 0x2704, 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b, + 0x0048, 0x55db, 0x8a51, 0x00c0, 0x55cf, 0x1078, 0x2aef, 0x8738, + 0x2704, 0xa005, 0x00c0, 0x55c3, 0x709c, 0xa075, 0x2060, 0x0040, + 0x5605, 0x0078, 0x55ae, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, + 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x00c8, 0x55ea, + 0x1078, 0x2aef, 0x017e, 0x3208, 0xa18c, 0x0100, 0x0040, 0x5600, + 0x007e, 0x2001, 0x5d02, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x55fc, + 0x2071, 0x0020, 0x0078, 0x5602, 0x2071, 0x0050, 0x0078, 0x5602, + 0x2071, 0x0020, 0x017f, 0x0078, 0x54c3, 0x127f, 0x2000, 0x007c, + 0x7008, 0xa084, 0x0003, 0xa086, 0x0003, 0x00c0, 0x5610, 0x007c, + 0x2704, 0xac08, 0x2104, 0x701a, 0x8108, 0x2104, 0x701e, 0x8108, + 0x2104, 0x7012, 0x8108, 0x2104, 0x7016, 0x6004, 0xa084, 0x0008, + 0x0040, 0x5628, 0x8108, 0x2104, 0x7022, 0x8108, 0x2104, 0x7026, + 0x7602, 0x7004, 0xa084, 0x0010, 0xc085, 0x7006, 0x8738, 0x2704, + 0xa005, 0x00c0, 0x5641, 0x609c, 0xa005, 0x0040, 0x564a, 0x2060, + 0x6004, 0xa084, 0x000f, 0xa080, 0x52f4, 0x203c, 0x87fb, 0x1040, + 0x2aef, 0x8a51, 0x0040, 0x5649, 0x7008, 0xa084, 0x0003, 0xa086, + 0x0003, 0x007c, 0x2051, 0x0000, 0x007c, 0x127e, 0x007e, 0x0d7e, + 0x70f4, 0xa084, 0x4600, 0x8004, 0x2090, 0x0d7f, 0x087f, 0x7108, + 0xa184, 0x0003, 0x00c0, 0x5672, 0x017e, 0x6904, 0xa18c, 0x00ff, + 0xa186, 0x0007, 0x0040, 0x5668, 0xa18e, 0x000f, 0x00c0, 0x566b, + 0x6840, 0x0078, 0x566c, 0x6828, 0x017f, 0xa005, 0x0040, 0x5682, + 0x0078, 0x522d, 0x7108, 0xd1fc, 0x0040, 0x567a, 0x1078, 0x53b4, + 0x0078, 0x5657, 0x7007, 0x0010, 0x7108, 0xd1fc, 0x0040, 0x567c, + 0x1078, 0x53b4, 0x7008, 0xa086, 0x0008, 0x00c0, 0x5657, 0x7000, + 0xa005, 0x00c0, 0x5657, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, + 0x2000, 0x007c, 0x127e, 0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, + 0x70f4, 0xa084, 0x4600, 0x8004, 0x2090, 0x0d7f, 0x2049, 0x5692, + 0x69b0, 0xad80, 0x0011, 0xa100, 0x20a0, 0xb284, 0x0100, 0x0040, + 0x56b7, 0x2001, 0x5d02, 0x2004, 0xd0ec, 0x0040, 0x56b3, 0x2099, + 0x0031, 0x0078, 0x56b9, 0x2099, 0x0032, 0x0078, 0x56b9, 0x2099, + 0x0031, 0x700c, 0xa084, 0x03ff, 0x0040, 0x56d7, 0x6928, 0xa100, + 0x682a, 0x7007, 0x0008, 0x7007, 0x0002, 0x7003, 0x0001, 0x0040, + 0x56cc, 0x8000, 0x80ac, 0x53a5, 0x700c, 0xa084, 0x03ff, 0x0040, + 0x56d7, 0x7007, 0x0004, 0x7004, 0xd094, 0x00c0, 0x56d3, 0x0c7f, + 0x2049, 0x0000, 0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f, + 0x2000, 0x007c, 0x2091, 0x6000, 0x2091, 0x8000, 0x78b0, 0xa005, + 0x00c0, 0x56f9, 0x7970, 0x70d0, 0xa106, 0x00c0, 0x56f9, 0x7814, + 0xa005, 0x0040, 0x56f9, 0x7817, 0x0000, 0x0068, 0x56f9, 0x2091, + 0x4080, 0x7828, 0x8001, 0x782a, 0x00c0, 0x5781, 0x782c, 0x782a, + 0x7808, 0xd0ec, 0x00c0, 0x577a, 0x2061, 0x82c0, 0x2069, 0x5d80, + 0xc7fd, 0x68f0, 0xa005, 0x0040, 0x5714, 0x8001, 0x68f2, 0xa005, + 0x00c0, 0x5714, 0x1078, 0x592b, 0x6800, 0xa084, 0x000f, 0x0040, + 0x5729, 0xa086, 0x0001, 0x0040, 0x5729, 0x6844, 0xa00d, 0x0040, + 0x5729, 0x2104, 0xa005, 0x0040, 0x5729, 0x8001, 0x200a, 0x0040, + 0x5889, 0x6810, 0xa005, 0x0040, 0x574d, 0x8001, 0x6812, 0x00c0, + 0x574d, 0x68c7, 0x0001, 0xd7fc, 0x00c0, 0x5742, 0x7808, 0xd0ec, + 0x0040, 0x573e, 0x2009, 0x0102, 0x0078, 0x5744, 0x2009, 0x0202, + 0x0078, 0x5744, 0x2009, 0x0102, 0x6850, 0xc08d, 0x200a, 0x686c, + 0xa005, 0x0040, 0x574d, 0x1078, 0x2772, 0x6888, 0xa005, 0x0040, + 0x575a, 0x8001, 0x688a, 0x00c0, 0x575a, 0x686f, 0x0000, 0x68f4, + 0xc0dd, 0x68f6, 0x68f4, 0xd0fc, 0x0040, 0x5777, 0xc0fc, 0x68f6, + 0x20a9, 0x0200, 0x6034, 0xa005, 0x0040, 0x5773, 0x8001, 0x6036, + 0x68f4, 0xc0fd, 0x68f6, 0x00c0, 0x5773, 0x6010, 0xa005, 0x0040, + 0x5773, 0x1078, 0x2772, 0xace0, 0x0010, 0x00f0, 0x5762, 0xd7fc, + 0x0040, 0x5781, 0x2061, 0x62c0, 0x2069, 0x5d40, 0xc7fc, 0x0078, + 0x5709, 0x1078, 0x57aa, 0x7830, 0x8001, 0x7832, 0x00c0, 0x57a3, + 0x7834, 0x7832, 0x2061, 0x62c0, 0x2069, 0x5d40, 0xc7fc, 0x6808, + 0xa005, 0x0040, 0x5795, 0x1078, 0x57e9, 0xd7fc, 0x00c0, 0x57a3, + 0x7808, 0xd0ec, 0x00c0, 0x57a3, 0x2061, 0x82c0, 0x2069, 0x5d80, + 0xc7fd, 0x0078, 0x578f, 0x780c, 0xd0e4, 0x00c0, 0x57a7, 0x2091, + 0x8001, 0x007c, 0x7838, 0x8001, 0x783a, 0x00c0, 0x57e8, 0x783c, + 0x783a, 0x2091, 0x8000, 0x2061, 0x62c0, 0x2069, 0x5d40, 0xc7fc, + 0x680c, 0xa005, 0x00c0, 0x57be, 0x2001, 0x0101, 0x8001, 0x680e, + 0xd7fc, 0x00c0, 0x57c7, 0xa080, 0xa2c0, 0x0078, 0x57c9, 0xa080, + 0xa3d0, 0x2040, 0x2004, 0xa065, 0x0040, 0x57da, 0x6024, 0xa005, + 0x0040, 0x57d6, 0x8001, 0x6026, 0x0040, 0x5831, 0x6000, 0x2c40, + 0x0078, 0x57cb, 0xd7fc, 0x00c0, 0x57e8, 0x7808, 0xd0ec, 0x00c0, + 0x57e8, 0x2061, 0x82c0, 0x2069, 0x5d80, 0xc7fd, 0x0078, 0x57b8, + 0x007c, 0x2009, 0x0000, 0x20a9, 0x0200, 0x6008, 0xd09c, 0x0040, + 0x5820, 0x6024, 0xa005, 0x0040, 0x57f9, 0x8001, 0x6026, 0x0078, + 0x581e, 0x6008, 0xc09c, 0xd084, 0x00c0, 0x5801, 0xd0ac, 0x0040, + 0x5818, 0x600a, 0x6004, 0xa06d, 0x0040, 0x5820, 0x0c7e, 0x017e, + 0x6010, 0x8001, 0x6012, 0x1078, 0x3dbf, 0x2d00, 0x2c68, 0x2060, + 0x1078, 0x1e6e, 0x1078, 0x21b9, 0x017f, 0x0c7f, 0x0078, 0x5820, + 0xc0bd, 0x600a, 0xa18d, 0x0001, 0x0078, 0x5820, 0xa18d, 0x0100, + 0xace0, 0x0010, 0x00f0, 0x57ed, 0xa184, 0x0001, 0x0040, 0x582f, + 0xa18c, 0xfffe, 0x690a, 0x1078, 0x2772, 0x0078, 0x5830, 0x690a, + 0x007c, 0x6800, 0xa005, 0x0040, 0x5839, 0x6854, 0xac06, 0x0040, + 0x5889, 0x686c, 0xa005, 0x0040, 0x5841, 0x6027, 0x0001, 0x0078, + 0x5888, 0x2c00, 0x6886, 0x6017, 0x0000, 0x602b, 0x0000, 0x601b, + 0x0006, 0x60b4, 0xa084, 0x5f00, 0x601e, 0x6020, 0xa084, 0x00ff, + 0xa085, 0x0060, 0x6022, 0x6000, 0x2042, 0x6714, 0x6f7e, 0x1078, + 0x1dff, 0x6818, 0xa005, 0x0040, 0x585f, 0x8001, 0x681a, 0x6808, + 0xc0a4, 0x680a, 0x6810, 0x8001, 0x00d0, 0x5868, 0x1078, 0x2aef, + 0x6812, 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x1078, 0x21ca, + 0xd7fc, 0x00c0, 0x5877, 0x2069, 0x5d40, 0x0078, 0x5879, 0x2069, + 0x5d80, 0x690c, 0xa184, 0x0100, 0x2001, 0x0006, 0x00c0, 0x5885, + 0x6887, 0x0000, 0x6982, 0x2001, 0x0004, 0x2708, 0x1078, 0x2765, + 0x007c, 0x0d7e, 0x0e7e, 0x2d70, 0xd7fc, 0x00c0, 0x589b, 0x7808, + 0xd0ec, 0x0040, 0x5897, 0x2069, 0x0100, 0x0078, 0x589d, 0x2069, + 0x0200, 0x0078, 0x589d, 0x2069, 0x0100, 0x7000, 0xa084, 0x000f, + 0x0040, 0x58e7, 0xa086, 0x0007, 0x00c0, 0x58af, 0x0f7e, 0x2d78, + 0x7054, 0x2068, 0x1078, 0x4505, 0x0f7f, 0x0078, 0x58e7, 0x7054, + 0x2060, 0x1078, 0x2a83, 0x601b, 0x0006, 0x6858, 0xa084, 0x5f00, + 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0048, 0x6022, 0x602f, + 0x0000, 0x6033, 0x0000, 0x6808, 0xa084, 0xfffd, 0x680a, 0x6830, + 0xd0b4, 0x0040, 0x58e3, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, + 0xd094, 0x0040, 0x58d5, 0x00f0, 0x58cf, 0x684b, 0x0009, 0x20a9, + 0x0014, 0x6848, 0xd084, 0x0040, 0x58df, 0x00f0, 0x58d9, 0x20a9, + 0x00fa, 0x00f0, 0x58e1, 0x681b, 0x0048, 0x706f, 0x0007, 0x0e7f, + 0x0d7f, 0x007c, 0x2079, 0x5d00, 0x1078, 0x591e, 0x1078, 0x5904, + 0x1078, 0x5911, 0x2009, 0x0002, 0x2069, 0x5d80, 0x680b, 0x0000, + 0x680f, 0x0000, 0x6813, 0x0000, 0x8109, 0x0040, 0x5903, 0x2069, + 0x5d40, 0x0078, 0x58f6, 0x007c, 0x7808, 0xd0ec, 0x0040, 0x590c, + 0x2019, 0x00cc, 0x0078, 0x590e, 0x2019, 0x007b, 0x7b32, 0x7b36, + 0x007c, 0x780c, 0xd0e4, 0x00c0, 0x5919, 0x2019, 0x0040, 0x0078, + 0x591b, 0x2019, 0x0026, 0x7b3a, 0x7b3e, 0x007c, 0x780c, 0xd0e4, + 0x00c0, 0x5926, 0x2019, 0x3f94, 0x0078, 0x5928, 0x2019, 0x2626, + 0x7b2a, 0x7b2e, 0x007c, 0x6958, 0xa185, 0x0000, 0x0040, 0x593d, + 0x0c7e, 0x6ae0, 0x2264, 0x6008, 0xc0b5, 0x600a, 0x8210, 0x8109, + 0x00c0, 0x5932, 0x685b, 0x0000, 0x0c7f, 0x007c, 0x70ec, 0xd0dc, + 0x00c0, 0x594c, 0xd0d4, 0x0040, 0x5947, 0x0078, 0x596b, 0xd0e4, + 0x0040, 0x5973, 0x0078, 0x596b, 0x7808, 0xd0ec, 0x0040, 0x5957, + 0xc0f5, 0x780a, 0xd0ec, 0x0040, 0x5971, 0x0078, 0x596d, 0xae8e, + 0x0100, 0x0040, 0x5963, 0x780c, 0xc0f5, 0x780e, 0xd0d4, 0x00c0, + 0x5971, 0x0078, 0x596d, 0x780c, 0xc0fd, 0x780e, 0xd0d4, 0x00c0, + 0x5971, 0x0078, 0x596d, 0x70a0, 0x70a2, 0x7804, 0xd08c, 0x0040, + 0x5973, 0x681b, 0x000c, 0x007c, 0x0020, 0x002b, 0x0000, 0x0020, + 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, + 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, + 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, + 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0014, + 0x0014, 0x9849, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0080, 0x000f, 0x0000, 0x0201, 0x0604, 0x0c08, 0x2120, + 0x4022, 0xf880, 0x0018, 0x300b, 0xa201, 0x0014, 0xa200, 0x0014, + 0xa200, 0x0214, 0x0000, 0x006c, 0x0002, 0x0014, 0x98d6, 0x009e, + 0x009c, 0xa202, 0x3806, 0x8839, 0x20c3, 0x0864, 0x9889, 0x28c1, + 0x9cb6, 0xa203, 0x300c, 0x2846, 0x8161, 0x846a, 0x8300, 0x1856, + 0x883a, 0x9864, 0x28f2, 0x9c95, 0x9857, 0x300c, 0x28e1, 0x9c95, + 0x2822, 0xa207, 0x64a4, 0x2001, 0x987d, 0xa206, 0x64c0, 0x67a0, + 0x6fc0, 0x7942, 0x8020, 0xa4a1, 0x1814, 0x883b, 0x7824, 0x68c1, + 0x7864, 0x883e, 0x987b, 0x8576, 0x8677, 0x80df, 0x94a1, 0x206b, + 0x28c1, 0x9cb6, 0x2044, 0x2103, 0x20a2, 0x2081, 0x9864, 0xa209, + 0x2901, 0x9891, 0x0014, 0xa205, 0xa300, 0x1872, 0x879a, 0x883c, + 0x1fe2, 0xc601, 0xa20a, 0x856e, 0x0704, 0x9c95, 0x0014, 0xa204, + 0xa300, 0x3009, 0x19e2, 0xf868, 0x8176, 0x86eb, 0x85eb, 0x872e, + 0x87a9, 0x883f, 0x08e6, 0x9895, 0xf881, 0x9890, 0xc801, 0x0014, + 0xf8c1, 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfb02, 0x1de2, 0x0014, + 0x8532, 0xf241, 0x0014, 0x1de2, 0x84a8, 0xd7a0, 0x1fe6, 0x0014, + 0xa208, 0x6043, 0x8008, 0x1dc1, 0x0016, 0x8300, 0x8160, 0x842a, + 0xf041, 0x3008, 0x84a8, 0x11d6, 0x7042, 0x20dd, 0x0011, 0x20d5, + 0x8822, 0x0016, 0x3008, 0x8000, 0x2847, 0x1011, 0x98c9, 0x8000, + 0xa000, 0x2802, 0x1011, 0x98cf, 0x9864, 0x283e, 0x1011, 0x98d3, + 0xa20b, 0x0017, 0x300c, 0xa300, 0x1de2, 0xdb81, 0x0014, 0x0210, + 0x98e0, 0x0014, 0x26e0, 0x873a, 0xfb02, 0x19f2, 0x1fe2, 0x0014, + 0xa20d, 0x3806, 0x0210, 0x9cbb, 0x0704, 0x0000, 0x006c, 0x0002, + 0x984f, 0x0014, 0x009e, 0x009f, 0x0017, 0x60ff, 0x300c, 0x8720, + 0xa211, 0x9ccf, 0x8772, 0x8837, 0x2101, 0x987a, 0x10d2, 0x78e2, + 0x9cd2, 0x9859, 0xd984, 0xf0e2, 0xf0a1, 0x98cc, 0x0014, 0x8831, + 0xd166, 0x8830, 0x800f, 0x9401, 0xb520, 0xc802, 0x8820, 0x987a, + 0x2301, 0x987a, 0x10d2, 0x78e4, 0x9cd2, 0x8821, 0x8820, 0x9859, + 0xf123, 0xf142, 0xf101, 0x98c5, 0x10d2, 0x70f6, 0x8832, 0x8203, + 0x870c, 0xd99e, 0x6001, 0x0014, 0x6845, 0x0214, 0xa21b, 0x9ccf, + 0x2001, 0x98c4, 0x8201, 0x1852, 0xd184, 0xd163, 0x8834, 0x8001, + 0x988d, 0x3027, 0x84a8, 0x1a56, 0x8833, 0x0014, 0xa218, 0x6981, + 0x9cbb, 0x692a, 0x6902, 0x1834, 0x989d, 0x1a14, 0x8010, 0x8592, + 0x8026, 0x84b9, 0x7021, 0x0014, 0xa300, 0x69e1, 0x9ca9, 0x694b, + 0xa213, 0x1462, 0xa213, 0x8000, 0x16e1, 0x98b5, 0x8023, 0x16e1, + 0x8001, 0x10f1, 0x0016, 0x6969, 0xa214, 0x61c2, 0x8002, 0x14e1, + 0x8004, 0x16e1, 0x0101, 0x300a, 0x8827, 0x0014, 0x9cbb, 0x0014, + 0xa300, 0x8181, 0x842a, 0x84a8, 0x1ce6, 0x882c, 0x0016, 0xa212, + 0x9ccf, 0x10d2, 0x70e4, 0x0004, 0x8007, 0x9424, 0xcc1a, 0x9cd2, + 0x98c4, 0x8827, 0x300a, 0x0013, 0x8000, 0x84a4, 0x0016, 0x11c2, + 0x211e, 0x870e, 0xa21d, 0x0014, 0x878e, 0x0016, 0xa21c, 0x1035, + 0x9891, 0xa210, 0xa000, 0x8010, 0x8592, 0x853b, 0xd044, 0x8022, + 0x3807, 0x84bb, 0x98e9, 0x8021, 0x3807, 0x84b9, 0x300c, 0x817e, + 0x872b, 0x8772, 0x9891, 0x0000, 0x0020, 0x002b, 0x0000, 0x0020, + 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, + 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, + 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, + 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0014, + 0x0014, 0x9849, 0x0014, 0x0014, 0x98eb, 0x98d6, 0x0014, 0x0014, + 0x0014, 0x0080, 0x013f, 0x0000, 0x0201, 0x0604, 0x0c08, 0x2120, + 0x4022, 0xf880, 0x0018, 0x300b, 0xa201, 0x0014, 0xa200, 0x0014, + 0xa200, 0x0214, 0xa202, 0x3806, 0x8839, 0x20c3, 0x0864, 0xa834, + 0x28c1, 0x9cb6, 0xa203, 0x300c, 0x2846, 0x8161, 0x846a, 0x8300, + 0x1856, 0x883a, 0xa804, 0x28f2, 0x9c95, 0xa8f4, 0x300c, 0x28e1, + 0x9c95, 0x2822, 0xa207, 0x64a4, 0x2001, 0xa812, 0xa206, 0x64c0, + 0x67a0, 0x6fc0, 0x7942, 0x8020, 0xa4a1, 0x1814, 0x883b, 0x7824, + 0x68c1, 0x7864, 0x883e, 0xa802, 0x8576, 0x8677, 0x80df, 0x94a1, + 0x206b, 0x28c1, 0x9cb6, 0x2044, 0x2103, 0x20a2, 0x2081, 0xa8df, + 0xa209, 0x2901, 0xa809, 0x0014, 0xa205, 0xa300, 0x1872, 0x879a, + 0x883c, 0x1fe2, 0xc601, 0xa20a, 0x856e, 0x0704, 0x9c95, 0x0014, + 0xa204, 0xa300, 0x3009, 0x19e2, 0xf868, 0x8176, 0x86eb, 0x85eb, + 0x872e, 0x87a9, 0x883f, 0x08e6, 0xa8f3, 0xf881, 0xa8ec, 0xc801, + 0x0014, 0xf8c1, 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfb02, 0x1de2, + 0x0014, 0x8532, 0xf241, 0x0014, 0x1de2, 0x84a8, 0xd7a0, 0x1fe6, + 0x0014, 0xa208, 0x6043, 0x8008, 0x1dc1, 0x0016, 0x8300, 0x8160, + 0x842a, 0xf041, 0x3008, 0x84a8, 0x11d6, 0x7042, 0x20dd, 0x0011, + 0x20d5, 0x8822, 0x0016, 0x3008, 0x8000, 0x2847, 0x1011, 0xa8fc, + 0x8000, 0xa000, 0x2802, 0x1011, 0xa8fd, 0xa891, 0x283e, 0x1011, + 0xa8fd, 0xa20b, 0x0017, 0x300c, 0xa300, 0x1de2, 0xdb81, 0x0014, + 0x0210, 0xa801, 0x0014, 0x26e0, 0x873a, 0xfb02, 0x19f2, 0x1fe2, + 0x0014, 0xa20d, 0x3806, 0x0210, 0x9cbb, 0x0704, 0x0017, 0x60ff, + 0x300c, 0x8720, 0xa211, 0x9d6b, 0x8772, 0x8837, 0x2101, 0xa821, + 0x10d2, 0x78e2, 0x9d6e, 0xa8fc, 0xd984, 0xf0e2, 0xf0a1, 0xa86b, + 0x0014, 0x8831, 0xd166, 0x8830, 0x800f, 0x9401, 0xb520, 0xc802, + 0x8820, 0xa80f, 0x2301, 0xa80d, 0x10d2, 0x78e4, 0x9d6e, 0x8821, + 0x8820, 0xa8e6, 0xf123, 0xf142, 0xf101, 0xa84e, 0x10d2, 0x70f6, + 0x8832, 0x8203, 0x870c, 0xd99e, 0x6001, 0x0014, 0x6845, 0x0214, + 0xa21b, 0x9d6b, 0x2001, 0xa83f, 0x8201, 0x1852, 0xd184, 0xd163, + 0x8834, 0x8001, 0xa801, 0x3027, 0x84a8, 0x1a56, 0x8833, 0x0014, + 0xa218, 0x6981, 0x9d57, 0x692a, 0x6902, 0x1834, 0xa805, 0x1a14, + 0x8010, 0x8592, 0x8026, 0x84b9, 0x7021, 0x0014, 0xa300, 0x69e1, + 0x9d45, 0x694b, 0xa213, 0x1462, 0xa213, 0x8000, 0x16e1, 0xa80c, + 0x8023, 0x16e1, 0x8001, 0x10f1, 0x0016, 0x6969, 0xa214, 0x61c2, + 0x8002, 0x14e1, 0x8004, 0x16e1, 0x0101, 0x300a, 0x8827, 0x0014, + 0x9d57, 0x0014, 0xa300, 0x8181, 0x842a, 0x84a8, 0x1ce6, 0x882c, + 0x0016, 0xa212, 0x9d6b, 0x10d2, 0x70e4, 0x0004, 0x8007, 0x9424, + 0xcc1a, 0x9d6e, 0xa8f8, 0x8827, 0x300a, 0x0013, 0x8000, 0x84a4, + 0x0016, 0x11c2, 0x211e, 0x870e, 0xa21d, 0x0014, 0x878e, 0x0016, + 0xa21c, 0x1035, 0xa8b5, 0xa210, 0x3807, 0x300c, 0x817e, 0x872b, + 0x8772, 0xa8ae, 0x0000, 0xc972 +}; diff --git a/sys/modules/accf_data/Makefile b/sys/modules/accf_data/Makefile new file mode 100644 index 000000000000..9f3a64ef5213 --- /dev/null +++ b/sys/modules/accf_data/Makefile @@ -0,0 +1,7 @@ +# $FreeBSD$ + +.PATH: ${.CURDIR}/../../netinet +KMOD = accf_data +SRCS = accf_data.c + +.include <bsd.kmod.mk> diff --git a/sys/modules/accf_http/Makefile b/sys/modules/accf_http/Makefile new file mode 100644 index 000000000000..2b76ac6478ae --- /dev/null +++ b/sys/modules/accf_http/Makefile @@ -0,0 +1,7 @@ +# $FreeBSD$ + +.PATH: ${.CURDIR}/../../netinet +KMOD = accf_http +SRCS = accf_http.c + +.include <bsd.kmod.mk> diff --git a/sys/modules/ispfw/Makefile b/sys/modules/ispfw/Makefile new file mode 100644 index 000000000000..a6a4e8865631 --- /dev/null +++ b/sys/modules/ispfw/Makefile @@ -0,0 +1,7 @@ +# $FreeBSD$ + +.PATH: ${.CURDIR}/../../dev/ispfw +KMOD = ispfw +SRCS = ispfw.c + +.include <bsd.kmod.mk> diff --git a/sys/modules/wx/Makefile b/sys/modules/wx/Makefile new file mode 100644 index 000000000000..921ec6497bec --- /dev/null +++ b/sys/modules/wx/Makefile @@ -0,0 +1,7 @@ +# $FreeBSD$ + +.PATH: ${.CURDIR}/../../pci +KMOD = if_wx +SRCS = if_wx.c opt_bdg.h device_if.h bus_if.h pci_if.h + +.include <bsd.kmod.mk> diff --git a/sys/netinet/accf_data.c b/sys/netinet/accf_data.c new file mode 100644 index 000000000000..776047ce2dce --- /dev/null +++ b/sys/netinet/accf_data.c @@ -0,0 +1,80 @@ +/*- + * Copyright (c) 2000 Alfred Perlstein <alfred@FreeBSD.org> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#define ACCEPT_FILTER_MOD + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/sysproto.h> +#include <sys/kernel.h> +#include <sys/proc.h> +#include <sys/malloc.h> +#include <sys/unistd.h> +#include <sys/file.h> +#include <sys/fcntl.h> +#include <sys/protosw.h> +#include <sys/socket.h> +#include <sys/socketvar.h> +#include <sys/stat.h> +#include <sys/mbuf.h> +#include <sys/resource.h> +#include <sys/sysent.h> +#include <sys/resourcevar.h> + +/* accept filter that holds a socket until data arrives */ + +static void sohasdata(struct socket *so, void *arg, int waitflag); + +static struct accept_filter accf_data_filter = { + "dataready", + sohasdata, + NULL, + NULL +}; + +static moduledata_t accf_data_mod = { + "accf_data", + accept_filt_generic_mod_event, + &accf_data_filter +}; + +DECLARE_MODULE(accf_data, accf_data_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE); + +static void +sohasdata(struct socket *so, void *arg, int waitflag) +{ + + if (!soreadable(so)) { + return; + } + + so->so_upcall = NULL; + so->so_rcv.sb_flags &= ~SB_UPCALL; + soisconnected(so); + return; +} diff --git a/sys/netinet/accf_http.c b/sys/netinet/accf_http.c new file mode 100644 index 000000000000..09a4e9fd6172 --- /dev/null +++ b/sys/netinet/accf_http.c @@ -0,0 +1,183 @@ +/*- + * Copyright (c) 2000 Alfred Perlstein <alfred@FreeBSD.org> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#define ACCEPT_FILTER_MOD + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/sysproto.h> +#include <sys/kernel.h> +#include <sys/proc.h> +#include <sys/malloc.h> +#include <sys/unistd.h> +#include <sys/file.h> +#include <sys/fcntl.h> +#include <sys/protosw.h> +#include <sys/socket.h> +#include <sys/socketvar.h> +#include <sys/stat.h> +#include <sys/mbuf.h> +#include <sys/resource.h> +#include <sys/sysent.h> +#include <sys/resourcevar.h> + +/* + * XXX: doesn't work with 0.9 requests, make a seperate filter + * based on this one if you want to decode those. + */ + +/* check for GET */ +static void sohashttpget(struct socket *so, void *arg, int waitflag); +/* check for end of HTTP request */ +static void soishttpconnected(struct socket *so, void *arg, int waitflag); +static char sbindex(struct mbuf **mp, int *begin, int end); + +static struct accept_filter accf_http_filter = { + "httpready", + sohashttpget, + NULL, + NULL +}; + +static moduledata_t accf_http_mod = { + "accf_http", + accept_filt_generic_mod_event, + &accf_http_filter +}; + +DECLARE_MODULE(accf_http, accf_http_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE); + + +static char +sbindex(struct mbuf **mp, int *begin, int end) +{ + struct mbuf *m = *mp; + int diff = end - *begin + 1; + + while (m->m_len < diff) { + *begin += m->m_len; + diff -= m->m_len; + if (m->m_next) { + m = m->m_next; + } else if (m->m_nextpkt) { + m = m->m_nextpkt; + } else { + /* only happens if end > data in socket buffer */ + panic("sbindex: not enough data"); + } + } + *mp = m; + return *(mtod(m, char *) + diff - 1); +} + +static void +sohashttpget(struct socket *so, void *arg, int waitflag) +{ + + if ((so->so_state & SS_CANTRCVMORE) == 0) { + struct mbuf *m; + + if (so->so_rcv.sb_cc < 6) + return; + m = so->so_rcv.sb_mb; + if (bcmp(mtod(m, char *), "GET ", 4) == 0) { + soishttpconnected(so, arg, waitflag); + return; + } + } + + so->so_upcall = NULL; + so->so_rcv.sb_flags &= ~SB_UPCALL; + soisconnected(so); + return; +} + +static void +soishttpconnected(struct socket *so, void *arg, int waitflag) +{ + char a, b, c; + struct mbuf *y, *z; + + if ((so->so_state & SS_CANTRCVMORE) == 0) { + /* seek to end and keep track of next to last mbuf */ + y = so->so_rcv.sb_mb; + while (y->m_nextpkt) + y = y->m_nextpkt; + z = y; + while (y->m_next) { + z = y; + y = y->m_next; + } + + if (z->m_len + y->m_len > 2) { + int index = y->m_len - 1; + + c = *(mtod(y, char *) + index--); + switch (index) { + case -1: + y = z; + index = y->m_len - 1; + b = *(mtod(y, char *) + index--); + break; + case 0: + b = *(mtod(y, char *) + index--); + y = z; + index = y->m_len - 1; + break; + default: + b = *(mtod(y, char *) + index--); + break; + } + a = *(mtod(y, char *) + index--); + } else { + int begin = 0; + int end = so->so_rcv.sb_cc - 3; + + y = so->so_rcv.sb_mb; + a = sbindex(&y, &begin, end++); + b = sbindex(&y, &begin, end++); + c = sbindex(&y, &begin, end++); + } + + if (c == '\n' && (b == '\n' || (b == '\r' && a == '\n'))) { + /* we have all request headers */ + goto done; + } else { + /* still need more data */ + so->so_upcall = soishttpconnected; + so->so_rcv.sb_flags |= SB_UPCALL; + return; + } + } + +done: + so->so_upcall = NULL; + so->so_rcv.sb_flags &= ~SB_UPCALL; + soisconnected(so); + return; +} diff --git a/usr.bin/doscmd/cp437-8x16.pcf.gz.uu b/usr.bin/doscmd/cp437-8x16.pcf.gz.uu new file mode 100644 index 000000000000..8071221ca567 --- /dev/null +++ b/usr.bin/doscmd/cp437-8x16.pcf.gz.uu @@ -0,0 +1,113 @@ +$FreeBSD$ + +begin 644 cp437-8x16.pcf.gz +M'XL("#J#2SD``V-P-#,W+3AX,38N<&-F`.V=?9Q51WG'?T`"A,204*,(")'$ +MF*").V=W[^X2A!O>`I@`(<0@6MFPA"3D#4D:"&QVSRZ[[.6EOF#K"ZTV4FTM +MVMIB:UMLVB.QUJ)M+6UM)-5::DV+-K%4:Z2I]#=GGMD[]^QYO9?V'WGR^<X] +M<^]YGIDS\SSSMI>;41N[-E\$8!0937Y`/BC7H_GF!K[NX^L%DA]_(?!]_2KW +M3%X(O#@6N,SY_+(W`U?*YY<QF;P2*$M^/`U=NPKP)?_DQ4#36TP%;'E?O<M\ +M-@$B3Y*+(>],TA?WD%?K"Q:%6?:B35^,@REMU!(FR_3%&B;OU!>/,>G3]XP/ +MS>XC*U<L7;YZW>U+UR["G8N6WKQD-58MNGW%+7>L7KIBN7.Y;HV;>2O6K%MB +M[KY]Y4T+EBZ_&2NQ;LVM\Q<N7K1PW=+EBU=@T8;['KU[PY5;[WOTWBNW/;A^ +MPT9F6FYHN0&+5RQ?C:[-+<UMU[=O4R7<=L=-"]?=N73AZB7A\X\*!;@$ILV- +MC.=_ETC>O=:YLV=_=%;?6_M^DN@R,,JO5/8-G$_.)^>3\\E/86+FEW#2D]E" +MST>!O%<F/@ED4BP3GP1::0SSQ"?!&#-(EXE/`CWX<OXK$Y\$!)P;R\0GP5@S +M/96)3X)Q9BHJ$Y\$!)R,R\0GP45FRBL3GP03S#Q8)CX)])S(B:),?!+H2>-E +MS!.?!`27,D]\$A!,9)[X))B(<.(N$Y\$>A*_G'GBD^!R,]V6B4\"/?7^#//$ +M)P'!RYDG/@D(KF">^"0@>`7SQ"<!P2N9)SX)""8S3WP2$+R*>>*3@&`*\\0G +M`<%4YHE/`H)IS!.?!-/,JJ!,?!+H%<)TYHE/`H(9S!.?!$0O5,K$)P'!:Y@G +M/@D(9C)/?!(07,4\\4E`<#7SQ"<!P6N9)SX)"*YAGO@D('@=\\0G`<&US!.? +M!`37,4]\$EQG%C=EXI-`+W1>SSSQ24#P!N:)3P*"ZYDG/@D(;F">^"0@>"/S +MQ"<!01/SQ"<!@6*>^"0@\)@G/@D(FIDG/@D(6I@G/@D(6IDG/@D(2LP3GP1$ +MK]'*Q">!7J^U,T]\$A!T,$]\$A#,9I[X)""XD7GBDX!@#O/$)P'!FY@G/@D( +MYC)/?!(0S&.>^"289_P_7*S:0>`<20_,4O/C\JIYBGS(R?=DZ'-9AV?E5?,T +M><[)I^E;T4W>&T$W@PZ5\3GTQ\N]<^O0U>$\1WC.8;+S61Y]VQ;VF?/J)]5E +M<LI]9Q/0]7X:(_L@2ISH,C>2^<+&E+K'V=1E:K]Y"E4?>CJC_&UD,]%[GUL0 +M#H,Z=&N8GM(.MLXNMNW</DB2E\A7Y/62"#(-A3NU)/D)^:+SZO(=F#[0F\`Q +M*39L'9]%U0?G2#ZM_J/$[CBIIYXF>N75UGL,AI</(Z1,.F':7_=#M^AWH]HO +MG7)?6MVM[T]VZ$&V#VN)]IT+(M=QHMO]68=ODF=BB!,]1G0A7/J$8T5)\EUR +MK=]KDOS<C.>(2G0L2Y(\[9<V?B;I1TG33R)O'[JV='OURFM>/2LZYL:*_EC) +M%Y4Q#FGM'B=Z66CGH9+D\XJ=?^P<9.>AO'5PYSP[=^6=OQH1=[ZQ?>WZ3)K_ +MN+%Z=0-U**&VW>/R<?76V!A>`-/G.M\IW(5J[&;%P0*YU_JM]<4NL9,D=MRP +MX\5#")=^-?/70PFZ[EPS-J6,-''K&X>-R21Q[XG#VLXC=NX]B^J\7$3<<2>K +MOXK8*_(,6HJ.&WGJD"5E&)^-^E_:_*TE.F_=+T3GL;3ZZ<^GH[:]HO-`DMCX +M2ZJ[_BRM/5U]S1SGNA/9<Z\NLUWT]+,VHSK_6+:EZ/>B=LZ85[!\W7;V6:U^ +M5X0T_5[4/G]2/">);3^WK"+E1^_O0>WSZ_JDK;^MQ/EYD1A.T\^*W4Z,]#UW +M7.O,68>>A.LLB2LO6I\D<=O?ZN2=?^-L['#0\Y"=$Y/$KEO<,:07(WTH2;2_ +MN^N`N1BYCI^7HF_G"3M_NRQ`^AY4RPRI>](>HB3W)$FOW+<8X1%@Z.OZ=:R\ +MMQ'IXU>:OF5BBG[<\^N^L^VN/WM[BGZTG^+Z+JW_HFN^.-+:7X^M<>N&O/MW +MO3=V^VJZX/;I/2GZNFW')I"G_W3;;$5U_>W.G7G:KTOJ][#HZ[Y[I(!^W'A= +M9/R.B[]H.Z3Y7UKY]\OSZ'MTGV[.67XT'M/ZSRW?[L/M&)KG^7N$M:C/?[/: +M/JO\-#V[]DK;P\6UN47[TU;$[W^B^B74[AMM/V3Y7]+96=[VL^.-WB-%Y[P% +MR%[_S4'RWL62=7[JGH/I,SO]_'I-F.?\:@Z2]SZ6N/*C\^;_A[CGIN[^[ER) +M'G?U\VK?R;-_U:+;W(XST7';'1/RB!T+W#5`5ORUH[:?[!X@;_WCRG?W!'G6 +M_[I,_2<S.]86&7]=>2BF[LVHCK]Q<ZG;_B6Q$6W_M/'775].0_'QLQ/5]?5F +MU.X=7-SQ):G^26N`M/HGU3EO_5W1?^:S:P"7O/%](]+/LK,D:2[.&S])Y;MK +M@C1?S/*_K+WTC:CZ7SW^'SV/SW/VKL=A.Q;.P\BYXP&8,2*/Q#U[D?$CKNV+ +MG)\GK0'2YO^HOEUS6(K,3TGK&'LFH/LC:R^EVRMZ?IHV_V]&;:Q>BI'Q&[?N +MM!+W=XXB?_^(EA>MCZU3DMCSWD8E;A^>U79:DO;/[M[9KJ?CXJ@Y<EW$_Z/G +MPT7G3_>9M=2S_G#K7U3?/;>I1]_6W9ZOUE-_*[8?W;G0[;NL-2A0W_K%'1N* +MZD?;KY[RW;FQZ/K#?F9M%-6/UK^HOFV[/&=H48GZ3E']Z-FB/8?2>7>^SSK_ +M<,7ZJIXS]9@_57@L1:<;M6ON7HP</QY)T$WRWZ+[;RM%]9/\-Z^^UK7?5P&* +MCY_1\NM9?W1%KK/F[^DQNEEG4$G/W^6\UJ/OQE=TS1@]BXB3/'LOO7=(.W^. +MKM-Z(J]IY>NUD.TC?7V57.]`;?\EK;_T6N.92#E)W^/0<1A=AT3'@*+S3W3^ +MKF?\=<LO&C]1_7K\WUU_%=E_N7JZCEEGN'%BSQLTW?)>D;\;1;\[H*7H]XS< +MOP^ZWR6P<V^1_:.6Z-]#QQ2LC];OC)`D[EI5US.Z=]#]XYXK=A?0UWVN^_!Q +MT4NJ2]*^(?J=F#RBYTW=EU/E]8&<>E9</6LG22H(O_)=]^LA<D<#KY\CSS?P +MFG5FTP@S&M3+H_]`"@]G?)[E%[UUZC=:?UWOSISU;Y2DYVZD?%O_/.O=-#MY +M]+/\IQ&IUW\M+]99?TO2]\/SRMES4/^L>[+*SY*LYV^DWGGJG^9_W\OX/$U/ +MSWTOY7C^.+'?@:^W_!?$3KW^8_5>J+-\^_QYZI]6?I[ZISU_GOJGQ5V]Y5L: +M;?\\_I]EIY&Y(8__9L5?/5(D?M-$U[^1Y\_3?FGC5J/C;Z/S5Y[V2_IW27E) +MDSSZ$QOD^PU2[[.EB=W33G6P?Y-+DNB_MYJ*ZIF%I3E1N_:<,KIO++*'C'[W +M/TJ6KB[?/4^[!/G^_N2*>^;IDO;W'RM9?W?-:@/;=_6,-_;,*/IOX?+\^R$M +M:6?/6=\?C_N;5;3OMJ;H;T/M=V>[$?\WU#RBG]/]MV!YSV("F'V#J_]7DL_J +MNW94?2UZ]F[]L3VC_#S?`<R2WAS7:6+]+.[?7F2-26[_=6+DN6)6/Z1]=SM+ +MWYZA/H/L.:<(1>/?;;.>F/?RB'LFF>?ORG'GA^="BM8[R4:6Z'DP[OMV^GLX +M]KET["?%SU04GRM<N51L6+_3/Q-1[]IG;@K_%R*_C^17?%+9(\E0I1(FO<SN +M]L.D?U=E5T_X8R)]0Y6A7O/;(D.\N6]H6(U)G]$8JNPUB?ZTU[F%[_4Q&3!J +MU83O#?789-?P%6L0)KI^K$%X\]['^5Y8QKY^6U-^,,`/PEO"A*4-]>B:]O0/ +M5G;J(@>[=PY6^GU'0\K-E5"WTDM3%:VV6R=#3_1)-<);=N<V9>J7[^;^:C:Q +MNGTC+.\>OMJWS=?U9L7W;=5M.JQ6<R4W#^VL6M%&=]88'8HD.X>3J+V^A)M- +M3=F23IVWV4ZN/NK>X<3-4J/2%_G`N@^O=CEJ^X:3H5HK$?/FO9TU93AN*[=4 +M*GO[PZO^72-T34%:;8>NP0[[WJY>FQC=_N%&-)[=5_OS/&P27E63(9,,ZNR0 +MR?;+>R;;;9)!DPP.[*SH*TE,5EL>[#;F==)ODVXF0P/VYB'S@;[J'JY0=_73 +MT%ZHME.24&/0_86A0?-!]3U>#?!JP-ZRHZ8KJN/+[N$^"KM68JL:3';<&.H) +M1Y6^8??V96RJ1N-NGS78$]8E=)5>T\[LE,?9NH-/,!EX0O>E]G9VU*#I,AE: +MY/>19(6R>:S^+OAHKM<NP(4<T<=A/"["!%S,$?YE'.TGXC)<CDD<YU^.*_`* +MO)*SU*LPA7/`-+R:.Z$9N!*OP4Q<A:OQ6ER#U^%:7(=9>#W>@.MQ`][(V4G! +MXWZH!:V<:=HX,W5@-N?I.7@31_IY*.,FS,<"+,0B+,;-6(*E6(8WXQ;<BN58 +M@96X#:MP.U;C#KP%=V(-WHJU>!O>CI_%.[".JZ>[L)[KO0VXFRO?>W`O[L,F +MW,\=_X-<$3S,U<X[L06/X%'\'![CNGH;'L=V[."J^0FN.GKAHP_]V(D!#&(7 +MAE#!;NS!7NS#S^-=>#?>@_=B/]Z'7\`OXOWX`#Z(#^$`?@F_C`_C(_@5/(F/ +MXB!^%1_#Q_%K^'5\`K^!0_@D/H7?Q&_AT_AM_`X.XS/X7?P>/HO?QQ_@#W$$ +MG\,?X2G\,?Z$*^G/XRB>QA?PI_@B_@Q?PI_C&+Z,K^`O\)=<4W\5?XWC^!O\ +M+?X.7\/?<]7V=9S@>OL?\`U\$_^(;^&?<!+_C&_C7_`=/(=_Q;_A%+Z+[^'? +M\3Q>X(KA/W`:_XD?X(?X+_P(+^+'.(/_QDOX'_PD]`+[>UG?.L]YSO-3B_N[ +M>79/J7\63N]+])F7_KT*_3-E>K]A]QGZ>P3ZAUAO@_D]HG4PYP\/DD=AOA?2 +M3W:3]Y`/D(_`_';6I\AGR!'R>?(EF#.$KY%OD&^3[Y+3Y,=2MW'D4G(%F4:N +M(K.((NUD'EE,;B6KR=O(>G(?V4RVDAXR.,K\]NW[R`'R4?()\FGR6?(4^0+Y +M,CE.OBYM]!QYGOR0O$3&L-$FD,OU;^&2&>0:<CUI(3>2^60I64GN).\@=Y,' +MR"-D.^DC%?)N\G[R8?(Q\DERF!PA1\DQ<IR<("?)*7*:G"&CQ[`N9!*90F:2 +M6<0CL\E\LHRL(FO)>K*);"';23_90_:3`^0@.40.DR/D*#E&CI,3Y"0Y14Z3 +M,V3T!2R?3")3R$PRBWAD-IE/EI%59"U93S:1+60[Z2=[R'YR@!PDA\AA<H0< +M)<?(<7*"G"2GR&ERAHR^D.63260*F4EF$8_,)O/),K**K"7KR2:RA6PG_60/ +MV4\.D(/D$#E,CI"CY!@Y3DZ0D^04.4W.D-$,F@ED$IE"9I)9Q".SR7RRC*PB +M:\EZLHEL(=M)/]E#]I,#Y"`Y1`Z3(^0H.4:.DQ/D)#E%3I,S9/0XED\FD2ED +M)IE%/#*;S"?+R"JREJPGF\@6LIWTDSUD/^FZ]ZXM36&JPM0+T^8P;0G3UC`M +MA6E;F+:':8?1$F6CK8RZ,OK*&%#&@C(FE+&AC!%EK'C&BB=U,%8\8\4S5CQC +MQ3-6/&/%,U8\8Z796&DV5IKE48R59F.EV5AI-E::C95F8Z796&DQ5EJ,E19C +MI45:Q%AI,59:C)468Z7%6&DQ5EJ-E59CI=58:3566J5AC9568Z756&DU5EJ- +ME9*Q4C)62L9*R5@I&2LEZ1]CI62LE(R5DK'29JRT&2MMQDJ;L=)FK+09*VW2 +MS<9*F['29JRT&ROMQDJ[L=)NK+0;*^W&2KNQTB[>8JRT&RL=QDJ'L=)AK'08 +M*QW&2H>QTF&L=!@K'>)TUNO$[9K$[YK$\9K$\YK$]9K$]YK$^9K$^YK$_9K$ +MWK`;BSWKR-:3K2M;7[;.;+W9NK/XLQ*'5IZ-"[$G/JW$J95XM1*W5N+72AQ; +MB6<K<6TEOJV:;:")/7%O)?ZMQ,&5>+@2%U?BXTJ<7(F7*W%SU6(C5^R)IRMQ +M=26^KL39E7B[$G=7XN]*'%Z)QZM6.Q2(/7%Z)5ZOQ.V5^+T2QU?B^4I<7XGO +M*W%^5;)CB]@3_U<2`$HB0$D(*(D!)4&@)`J4A(&2.%!M=K`2>Q(*2F)!23`H +MB08EX:`D'I0$A)*(4!(2JMV.?F)/HD))6"B)"R6!H20RE(2&DMA0$AQ*HD-U +MV.'4CJ<RH$I\>!(?GL2')_'A27QX$A^>Q(<G\>%)?'C*#M!B3^+#D_CP)#X\ +MB0]/XL.3^/`D/CP[WML!?WC$%WMVS+>#OAWU[;!OQWT[\$M\>!(?GL2'UVRG +M$+$G\>%)?'@2'Y[$AR?QX4E\>!(?GL2')_'AM=@Y2>Q)?'@2'Y[$AR?QX4E\ +A>!(?GL2')_'A27QXK7:2:Y7SZW/Q_Q#X7P&*JEP88@`` +` +end diff --git a/usr.bin/doscmd/fonts.dir b/usr.bin/doscmd/fonts.dir new file mode 100644 index 000000000000..e23f58c1e4eb --- /dev/null +++ b/usr.bin/doscmd/fonts.dir @@ -0,0 +1,2 @@ +1 +cp437-8x16.pcf.gz vga |
